@dxos/react-ui-editor 0.3.9-main.7b9e2ad → 0.3.9-main.8045d90

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.
@@ -1072,7 +1072,10 @@ var hyperlink = [
1072
1072
 
1073
1073
  // packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlinkTooltip.tsx
1074
1074
  import { hoverTooltip } from "@codemirror/view";
1075
- import { tooltipContent } from "@dxos/react-ui-theme";
1075
+ import { ArrowCircleUp } from "@phosphor-icons/react";
1076
+ import React5, { StrictMode } from "react";
1077
+ import { createRoot } from "react-dom/client";
1078
+ import { getSize, mx as mx3, tooltipContent } from "@dxos/react-ui-theme";
1076
1079
  var markdownLinkRegexp2 = /\[([^\]]+)]\(([^)]+)\)/;
1077
1080
  var createHyperlinkTooltip = (onHover, regexp = markdownLinkRegexp2) => hoverTooltip((view, pos) => {
1078
1081
  const { from, text } = view.state.doc.lineAt(pos);
@@ -1112,6 +1115,16 @@ var createHyperlinkTooltip = (onHover, regexp = markdownLinkRegexp2) => hoverToo
1112
1115
  }
1113
1116
  };
1114
1117
  });
1118
+ var defaultHyperLinkTooltip = createHyperlinkTooltip((el, url) => {
1119
+ const web = new URL(url);
1120
+ createRoot(el).render(/* @__PURE__ */ React5.createElement(StrictMode, null, /* @__PURE__ */ React5.createElement("div", {
1121
+ className: "flex gap-1 items-center"
1122
+ }, /* @__PURE__ */ React5.createElement(ArrowCircleUp, {
1123
+ className: mx3(getSize(6), "text-blue-500")
1124
+ }), /* @__PURE__ */ React5.createElement("p", {
1125
+ className: "pr-1"
1126
+ }, web.origin))));
1127
+ });
1115
1128
 
1116
1129
  // packages/ui/react-ui-editor/src/index.ts
1117
1130
  import { TextKind } from "@dxos/protocols/proto/dxos/echo/model/text";
@@ -1127,6 +1140,7 @@ export {
1127
1140
  YText3 as YText,
1128
1141
  YXmlFragment2 as YXmlFragment,
1129
1142
  createHyperlinkTooltip,
1143
+ defaultHyperLinkTooltip,
1130
1144
  defaultStyles,
1131
1145
  hyperLinkExtension,
1132
1146
  hyperLinkStyle,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/Editor/Editor.tsx", "../../../src/model.ts", "../../../src/yjs/cursors.ts", "../../../src/yjs/space-provider.ts", "../../../src/components/Markdown/Markdown.tsx", "../../../src/components/Markdown/markdownTags.ts", "../../../src/components/Markdown/markdownTheme.ts", "../../../src/styles/markdown.ts", "../../../src/styles/tokens.ts", "../../../src/components/RichText/RichText.tsx", "../../../src/components/TextEditor/index.ts", "../../../src/components/TextEditor/TextEditor.tsx", "../../../src/components/TextEditor/theme.ts", "../../../src/components/TextEditor/extensions/hyperlink.tsx", "../../../src/components/TextEditor/extensions/hyperlinkTooltip.tsx", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef, memo, type Ref } from 'react';\n\nimport { YXmlFragment } from '@dxos/text-model';\n\nimport { type EditorSlots, useTextModel, type UseTextModelOptions } from '../../model';\nimport { MarkdownEditor, type MarkdownEditorRef } from '../Markdown';\nimport { RichTextEditor, type TipTapEditor } from '../RichText';\n\nexport type EditorProps = UseTextModelOptions & {\n slots?: EditorSlots;\n};\n\n/**\n * Memoized editor which depends on DXOS platform.\n *\n * Determines which editor to render based on the kind of text.\n */\n// NOTE: Without `memo`, if parent component uses `observer` the editor re-renders excessively.\n// TODO(wittjosiah): Factor out?\nexport const Editor = memo(\n forwardRef<TipTapEditor | MarkdownEditorRef, EditorProps>(({ slots, ...params }, forwardedRef) => {\n const model = useTextModel(params);\n if (model?.content instanceof YXmlFragment) {\n return <RichTextEditor ref={forwardedRef as Ref<TipTapEditor>} model={model} slots={slots} />;\n } else {\n return <MarkdownEditor ref={forwardedRef as Ref<MarkdownEditorRef>} model={model} slots={slots} />;\n }\n }),\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport { type ComponentProps, useMemo } from 'react';\nimport type * as awarenessProtocol from 'y-protocols/awareness';\n\nimport { type Space, type TextObject } from '@dxos/react-client/echo';\nimport { type Identity } from '@dxos/react-client/halo';\nimport type { YText, YXmlFragment } from '@dxos/text-model';\n\nimport { SpaceAwarenessProvider } from './yjs';\n\nexport type EditorSlots = {\n root?: Omit<ComponentProps<'div'>, 'ref'>;\n editor?: {\n className?: string;\n placeholder?: string;\n spellCheck?: boolean;\n tabIndex?: number;\n markdownTheme?: Parameters<typeof EditorView.theme>[0];\n };\n};\n\ntype Awareness = awarenessProtocol.Awareness;\ntype Provider = { awareness: Awareness };\n\n// TODO(wittjosiah): Factor out to common package? @dxos/react-client?\nexport type EditorModel = {\n id: string;\n content: string | YText | YXmlFragment;\n provider?: Provider;\n peer?: {\n id: string;\n name?: string;\n };\n};\n\nexport type UseTextModelOptions = {\n identity?: Identity | null;\n space?: Space;\n text?: TextObject;\n};\n\n// TODO(wittjosiah): Factor out to common package? @dxos/react-client?\n// TODO(burdon): Decouple space (make Editor less dependent on entire stack)?\nexport const useTextModel = ({ identity, space, text }: UseTextModelOptions): EditorModel | undefined => {\n const provider = useMemo(() => {\n if (!space || !text?.doc) {\n return undefined;\n }\n\n return new SpaceAwarenessProvider({ space, doc: text.doc, channel: `yjs.awareness.${text.id}` });\n }, [identity, space, text?.doc]);\n\n if (!text?.doc || !text?.content) {\n return undefined;\n }\n\n return {\n id: text.doc.guid,\n content: text.content,\n provider,\n peer: identity\n ? {\n id: identity.identityKey.toHex(),\n name: identity.profile?.displayName,\n }\n : undefined,\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// Copied from https://github.com/yjs/y-codemirror.next#example.\n\nimport * as random from 'lib0/random';\n\nconst cursorColors = [\n { color: '#30bced', light: '#30bced33' },\n { color: '#6eeb83', light: '#6eeb8333' },\n { color: '#ffbc42', light: '#ffbc4233' },\n { color: '#ecd444', light: '#ecd44433' },\n { color: '#ee6352', light: '#ee635233' },\n { color: '#9ac2c9', light: '#9ac2c933' },\n { color: '#8acb88', light: '#8acb8833' },\n { color: '#1be7ff', light: '#1be7ff33' },\n];\n\n// Select a random color for this user.\nexport const cursorColor = cursorColors[random.uint32() % cursorColors.length];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as decoding from 'lib0/decoding';\nimport * as encoding from 'lib0/encoding';\nimport { Observable } from 'lib0/observable';\nimport * as awarenessProtocol from 'y-protocols/awareness';\nimport { type Doc } from 'yjs';\n\nimport { log } from '@dxos/log';\nimport { type Space } from '@dxos/react-client/echo';\nimport { type GossipMessage } from '@dxos/react-client/mesh';\n\ntype Awareness = awarenessProtocol.Awareness;\n\n// Based on https://github.com/yjs/y-webrtc/blob/88baab2/src/y-webrtc.js.\n\nconst messageAwareness = 1;\nconst messageQueryAwareness = 3;\n\n/**\n * Yjs awareness provider on top of a DXOS space.\n */\nexport class SpaceAwarenessProvider extends Observable<any> {\n private readonly _space: Space;\n private readonly _awareness: Awareness;\n private readonly _clientId: number;\n private readonly _channel: string;\n\n constructor({ space, doc, channel, awareness }: { space: Space; doc: Doc; channel: string; awareness?: Awareness }) {\n super();\n this._space = space;\n this._awareness = awareness ?? new awarenessProtocol.Awareness(doc);\n this._channel = channel;\n this._clientId = doc.clientID;\n\n this._awareness.on('update', this._handleAwarenessUpdate.bind(this));\n this._space.listen(this._channel, this._handleSpaceMessage.bind(this));\n\n if (typeof window !== 'undefined') {\n window.addEventListener('beforeunload', this._handleBeforeUnload.bind(this));\n } else if (typeof process !== 'undefined') {\n process.on('exit', this._handleBeforeUnload.bind(this));\n }\n\n // Post queryAwareness.\n const encoderAwarenessQuery = encoding.createEncoder();\n encoding.writeVarUint(encoderAwarenessQuery, messageQueryAwareness);\n void this._space.postMessage(this._channel, encoding.toUint8Array(encoderAwarenessQuery));\n\n // Post local awareness state.\n const encoderAwarenessState = encoding.createEncoder();\n encoding.writeVarUint(encoderAwarenessState, messageAwareness);\n encoding.writeVarUint8Array(\n encoderAwarenessState,\n awarenessProtocol.encodeAwarenessUpdate(this.awareness, [this._clientId]),\n );\n void this._space.postMessage(this._channel, encoding.toUint8Array(encoderAwarenessState));\n }\n\n get awareness(): Awareness {\n return this._awareness;\n }\n\n private _handleAwarenessUpdate({ added, updated, removed }: any, origin: any) {\n log('awareness update', { added, updated, removed, origin });\n const changedClients = added.concat(updated).concat(removed);\n const encoderAwareness = encoding.createEncoder();\n encoding.writeVarUint(encoderAwareness, messageAwareness);\n encoding.writeVarUint8Array(\n encoderAwareness,\n awarenessProtocol.encodeAwarenessUpdate(this._awareness, changedClients),\n );\n void this._space.postMessage(this._channel, encoding.toUint8Array(encoderAwareness));\n }\n\n private _handleSpaceMessage({ payload }: GossipMessage) {\n log('space message', payload);\n const data = new Uint8Array(Array.from(Object.values(payload)));\n const encoder = this._readMessage(data);\n if (encoder) {\n void this._space.postMessage(this._channel, encoding.toUint8Array(encoder));\n }\n }\n\n private _readMessage(message: Uint8Array) {\n const decoder = decoding.createDecoder(message);\n const encoder = encoding.createEncoder();\n const messageType = decoding.readVarUint(decoder);\n\n let sendReply = false;\n switch (messageType) {\n case messageAwareness: {\n awarenessProtocol.applyAwarenessUpdate(this._awareness, decoding.readVarUint8Array(decoder), this);\n break;\n }\n\n case messageQueryAwareness: {\n encoding.writeVarUint(encoder, messageAwareness);\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(this._awareness, Array.from(this._awareness.getStates().keys())),\n );\n sendReply = true;\n break;\n }\n\n default: {\n console.error('Invalid message:', messageType);\n return encoder;\n }\n }\n\n if (!sendReply) {\n // Nothing has been written, no answer created.\n return null;\n }\n\n return encoder;\n }\n\n private _handleBeforeUnload() {\n awarenessProtocol.removeAwarenessStates(this._awareness, [this._clientId], 'window unload');\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { autocompletion, completionKeymap, closeBrackets, closeBracketsKeymap } from '@codemirror/autocomplete';\nimport { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands';\nimport { markdown, markdownLanguage } from '@codemirror/lang-markdown';\nimport {\n bracketMatching,\n defaultHighlightStyle,\n foldKeymap,\n indentOnInput,\n syntaxHighlighting,\n} from '@codemirror/language';\nimport { languages } from '@codemirror/language-data';\nimport { lintKeymap } from '@codemirror/lint';\nimport { searchKeymap, highlightSelectionMatches } from '@codemirror/search';\nimport { EditorState, type Extension, StateField, type Text } from '@codemirror/state';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\nimport {\n keymap,\n crosshairCursor,\n drawSelection,\n dropCursor,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n placeholder,\n rectangularSelection,\n EditorView,\n} from '@codemirror/view';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { vim } from '@replit/codemirror-vim';\nimport React, {\n type KeyboardEvent,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useState,\n useMemo,\n useCallback,\n} from 'react';\nimport { yCollab } from 'y-codemirror.next';\n\nimport { generateName } from '@dxos/display-name';\nimport { useThemeContext } from '@dxos/react-ui';\nimport { getColorForValue } from '@dxos/react-ui-theme';\nimport { YText } from '@dxos/text-model';\n\nimport { markdownTagsExtension } from './markdownTags';\nimport { markdownDarkHighlighting, markdownTheme } from './markdownTheme';\nimport { type EditorModel, type EditorSlots } from '../../model';\n\nexport const EditorModes = ['default', 'vim'] as const;\nexport type EditorMode = (typeof EditorModes)[number];\n\nexport type MarkdownEditorProps = {\n model?: EditorModel;\n slots?: EditorSlots;\n editorMode?: EditorMode;\n extensions?: Extension[];\n onChange?: (content: string | Text) => void;\n};\n\nexport type MarkdownEditorRef = {\n editor: HTMLDivElement | null;\n state?: EditorState;\n view?: EditorView;\n};\n\nexport const MarkdownEditor = forwardRef<MarkdownEditorRef, MarkdownEditorProps>(\n ({ model, slots = {}, editorMode, extensions = [], onChange }, forwardedRef) => {\n const { id, content, provider, peer } = model ?? {};\n const { themeMode } = useThemeContext();\n const tabsterDOMAttribute = useFocusableGroup({ tabBehavior: 'limited' });\n\n const [parent, setParent] = useState<HTMLDivElement | null>(null);\n const [state, setState] = useState<EditorState>();\n const [view, setView] = useState<EditorView>();\n\n useImperativeHandle(forwardedRef, () => ({\n editor: parent,\n state,\n view,\n }));\n\n const listenChangesExtension = useMemo(\n () =>\n StateField.define({\n create: () => null,\n update: (_value, transaction) => {\n if (transaction.docChanged && onChange) {\n onChange(transaction.newDoc);\n }\n return null;\n },\n }),\n [onChange],\n );\n\n useEffect(() => {\n if (provider && peer) {\n provider.awareness.setLocalStateField('user', {\n name: peer.name ?? generateName(peer.id),\n color: getColorForValue({ value: peer.id, type: 'color' }),\n colorLight: getColorForValue({ value: peer.id, themeMode, type: 'highlight' }),\n });\n }\n }, [provider, peer, themeMode]);\n\n useEffect(() => {\n if (!parent) {\n return;\n }\n\n const state = EditorState.create({\n doc: content?.toString(),\n extensions: [\n // Based on https://github.com/codemirror/dev/issues/44#issuecomment-789093799.\n listenChangesExtension,\n\n ...(editorMode === 'vim' ? [vim()] : []),\n\n // All of https://github.com/codemirror/basic-setup minus line numbers and fold gutter.\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n rectangularSelection(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n placeholder(slots.editor?.placeholder ?? ''), // TODO(burdon): Needs consistent styling.\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap,\n indentWithTab,\n ]),\n EditorView.lineWrapping,\n\n // Themes.\n markdown({ base: markdownLanguage, codeLanguages: languages, extensions: [markdownTagsExtension] }),\n EditorView.theme({ ...markdownTheme, ...slots.editor?.markdownTheme }),\n ...(themeMode === 'dark'\n ? [syntaxHighlighting(oneDarkHighlightStyle)]\n : [syntaxHighlighting(defaultHighlightStyle)]),\n // TODO(thure): All but one rule here apply to both themes; rename or refactor.\n syntaxHighlighting(markdownDarkHighlighting),\n\n // Replication and awareness (incl. remote selection).\n ...(content instanceof YText ? [yCollab(content, provider?.awareness)] : []),\n\n // Custom.\n ...extensions,\n ],\n });\n\n setState(state);\n\n // NOTE: This repaints the editor.\n // If the new state is derived from the old state, it will likely not be visible other than the cursor resetting.\n // Ideally this should not be hit except when changing between text objects.\n view?.destroy();\n setView(new EditorView({ state, parent }));\n\n return () => {\n view?.destroy();\n setView(undefined);\n setState(undefined);\n };\n }, [parent, content, provider?.awareness, themeMode, editorMode]);\n\n const handleKeyUp = useCallback(\n (event: KeyboardEvent) => {\n const { key, altKey, shiftKey, metaKey, ctrlKey } = event;\n switch (key) {\n case 'Enter': {\n view?.contentDOM.focus();\n break;\n }\n\n case 'Escape': {\n editorMode === 'vim' && (altKey || shiftKey || metaKey || ctrlKey) && parent?.focus();\n break;\n }\n }\n },\n [view, editorMode],\n );\n\n return (\n <div\n tabIndex={0}\n ref={setParent}\n key={id}\n {...slots.root}\n {...(editorMode !== 'vim' ? tabsterDOMAttribute : {})}\n onKeyUp={handleKeyUp}\n />\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { styleTags, Tag } from '@lezer/highlight';\nimport { type MarkdownConfig } from '@lezer/markdown';\n\nexport const markdownTags = {\n headingMark: Tag.define(),\n quoteMark: Tag.define(),\n listMark: Tag.define(),\n linkMark: Tag.define(),\n emphasisMark: Tag.define(),\n codeMark: Tag.define(),\n codeText: Tag.define(),\n inlineCode: Tag.define(),\n url: Tag.define(),\n linkReference: Tag.define(),\n linkLabel: Tag.define(),\n};\n\nexport const markdownTagsExtension: MarkdownConfig = {\n props: [\n styleTags({\n HeaderMark: markdownTags.headingMark,\n QuoteMark: markdownTags.quoteMark,\n ListMark: markdownTags.listMark,\n LinkMark: markdownTags.linkMark,\n EmphasisMark: markdownTags.emphasisMark,\n CodeMark: markdownTags.codeMark,\n CodeText: markdownTags.codeText,\n InlineCode: markdownTags.inlineCode,\n URL: markdownTags.url,\n LinkReference: markdownTags.linkReference,\n LinkLabel: markdownTags.linkLabel,\n }),\n ],\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { markdownLanguage } from '@codemirror/lang-markdown';\nimport { HighlightStyle } from '@codemirror/language';\nimport { tags } from '@lezer/highlight';\nimport get from 'lodash.get';\n\nimport { markdownTags } from './markdownTags';\nimport { bold, heading, italic, mark, strikethrough, tokens } from '../../styles';\n\n// TODO(burdon): Use theme colors.\n// TODO(burdon): Light mode.\n\nexport const chalky = '#e5c07b';\nexport const coral = '#e06c75';\nexport const cyan = '#56b6c2';\nexport const invalid = '#ffffff';\nexport const ivory = '#abb2bf';\nexport const stone = '#7d8799';\nexport const malibu = '#61afef';\nexport const sage = '#98c379';\nexport const whiskey = '#d19a66';\nexport const violet = '#c678dd';\nconst _darkBackground = '#21252b';\nexport const highlightBackground = '#2c313a';\nconst _background = '#282c34';\nexport const tooltipBackground = '#353a42';\nconst _selection = '#3E4451';\nexport const cursor = '#ffffff';\n\nconst monospace = get(tokens, 'fontFamily.mono', ['monospace']).join(',');\n\nexport const markdownTheme = {\n // TODO(thure): consider whether these commented-out rules from one-dark-theme should be integrated.\n // '&': {\n // color: ivory,\n // backgroundColor: background\n // },\n // '.cm-cursor, .cm-dropCursor': { borderLeftColor: cursor },\n // '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {\n // backgroundColor: selection\n // },\n // '.cm-panels': { backgroundColor: darkBackground, color: ivory },\n // '.cm-panels.cm-panels-top': { borderBottom: '2px solid black' },\n // '.cm-panels.cm-panels-bottom': { borderTop: '2px solid black' },\n // '.cm-searchMatch': {\n // backgroundColor: '#72a1ff59',\n // outline: '1px solid #457dff'\n // },\n // '.cm-searchMatch.cm-searchMatch-selected': {\n // backgroundColor: '#6199ff2f'\n // },\n // '.cm-activeLine': { backgroundColor: '#6699ff0b' },\n // '.cm-selectionMatch': { backgroundColor: '#aafe661a' },\n // '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': {\n // backgroundColor: '#bad0f847'\n // },\n // '.cm-gutters': {\n // backgroundColor: background,\n // color: stone,\n // border: 'none'\n // },\n // '.cm-activeLineGutter': {\n // backgroundColor: highlightBackground\n // },\n // '.cm-foldPlaceholder': {\n // backgroundColor: 'transparent',\n // border: 'none',\n // color: '#ddd'\n // },\n\n '.cm-tooltip': {\n backgroundColor: 'transparent',\n border: 'none',\n },\n // '.dark & .cm-tooltip': {\n // border: 'none',\n // backgroundColor: tooltipBackground,\n // },\n // '.dark & .cm-tooltip .cm-tooltip-arrow:before': {\n // borderTopColor: 'transparent',\n // borderBottomColor: 'transparent',\n // },\n // '.dark & .cm-tooltip .cm-tooltip-arrow:after': {\n // borderTopColor: tooltipBackground,\n // borderBottomColor: tooltipBackground,\n // },\n // '.dark & .cm-tooltip-autocomplete': {\n // '& > ul > li[aria-selected]': {\n // backgroundColor: highlightBackground,\n // color: ivory,\n // },\n // },\n '&.cm-focused': {\n outline: 'none',\n },\n '& .cm-line': {\n paddingInline: 0,\n minBlockSize: '1.6em',\n },\n '& .cm-line *': {\n lineHeight: 1.6,\n },\n '&.cm-focused .cm-selectionBackground, & .cm-selectionBackground': {\n background: get(tokens, 'extend.colors.primary.150', '#00ffff'),\n },\n '.dark & .cm-selectionBackground, .dark &.cm-focused .cm-selectionBackground': {\n background: get(tokens, 'extend.colors.primary.850', '#00ffff'),\n },\n '& .cm-selectionMatch': {\n background: get(tokens, 'extend.colors.primary.250', '#00ffff') + '44',\n },\n '.dark & .cm-selectionMatch': {\n background: get(tokens, 'extend.colors.primary.600', '#00ffff') + '44',\n },\n '& .cm-content': {\n caretColor: 'black',\n },\n '.dark & .cm-content': {\n caretColor: cursor,\n },\n '& .cm-cursor': {\n borderLeftColor: 'black',\n },\n '.dark & .cm-cursor': {\n borderLeftColor: cursor,\n },\n '.cm-placeholder': {\n fontFamily: get(tokens, 'fontFamily.body', []).join(','),\n },\n '& .cm-scroller': {\n fontFamily: get(tokens, 'fontFamily.mono', []).join(','),\n overflow: 'visible',\n },\n '& .cm-activeLine': {\n backgroundColor: 'transparent',\n },\n '.dark & .cm-activeLine': {\n backgroundColor: 'transparent',\n },\n '& .cm-ySelectionInfo': {\n fontFamily: get(tokens, 'fontFamily.body', []).join(','),\n padding: '2px 4px',\n marginBlockStart: '-4px',\n },\n '& .cm-ySelection, & .cm-selectionMatch': {\n paddingBlockStart: '.15em',\n paddingBlockEnd: '.15em',\n },\n '& .cm-ySelection, & .cm-yLineSelection': {\n mixBlendMode: 'multiply',\n },\n '.dark & .cm-ySelection, .dark & .cm-yLineSelection': {\n mixBlendMode: 'screen',\n },\n '& .cm-ySelectionCaret': {\n display: 'inline-block',\n insetBlockStart: '.1em',\n blockSize: '1.4em',\n verticalAlign: 'top',\n },\n '& .cm-yLineSelection': {\n margin: '0',\n },\n ...Object.keys(get(tokens, 'extend.fontSize', {})).reduce((acc: Record<string, any>, fontSize) => {\n const height = get(tokens, ['extend', 'fontSize', fontSize, 1, 'lineHeight']);\n // TODO(thure): This appears to be the best or only way to set selection caret heights, but it's far more verbose than it needs to be.\n acc[`& .text-${fontSize} + .cm-ySelectionCaret`] = { height };\n acc[`& .text-${fontSize} + .cm-ySelection + .cm-ySelectionCaret`] = { height };\n acc[`& .text-${fontSize} + .cm-widgetBuffer + .cm-ySelectionCaret`] = { height };\n return acc;\n }, {}),\n};\n\nexport const markdownDarkHighlighting = HighlightStyle.define(\n [\n {\n tag: [\n tags.keyword,\n tags.name,\n tags.deleted,\n tags.character,\n tags.propertyName,\n tags.macroName,\n tags.color,\n tags.constant(tags.name),\n tags.standard(tags.name),\n tags.definition(tags.name),\n tags.separator,\n tags.typeName,\n tags.className,\n tags.number,\n tags.changed,\n tags.annotation,\n tags.modifier,\n tags.self,\n tags.namespace,\n tags.operator,\n tags.operatorKeyword,\n tags.escape,\n tags.regexp,\n tags.special(tags.string),\n tags.meta,\n tags.comment,\n tags.atom,\n tags.bool,\n tags.special(tags.variableName),\n tags.processingInstruction,\n tags.string,\n tags.inserted,\n tags.invalid,\n ],\n color: 'inherit !important',\n },\n {\n tag: [tags.link, tags.url],\n color: 'inherit !important',\n textDecoration: 'none !important',\n },\n {\n tag: [tags.function(tags.variableName), tags.labelName],\n color: malibu,\n fontFamily: monospace,\n },\n {\n tag: [\n markdownTags.codeMark,\n markdownTags.emphasisMark,\n markdownTags.headingMark,\n markdownTags.linkLabel,\n markdownTags.linkReference,\n markdownTags.listMark,\n markdownTags.quoteMark,\n markdownTags.url,\n tags.meta,\n tags.processingInstruction,\n ],\n class: mark,\n },\n { tag: [markdownTags.codeText, markdownTags.inlineCode], class: 'font-mono' },\n { tag: tags.emphasis, class: italic },\n { tag: tags.heading1, class: heading[1] },\n { tag: tags.heading2, class: heading[2] },\n { tag: tags.heading3, class: heading[3] },\n { tag: tags.heading4, class: heading[4] },\n { tag: tags.heading5, class: heading[5] },\n { tag: tags.heading6, class: heading[6] },\n { tag: tags.strikethrough, class: strikethrough },\n { tag: tags.strong, class: bold },\n ],\n { scope: markdownLanguage, all: { fontFamily: get(tokens, 'fontFamily.body', []).join(',') } },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport const heading: Record<HeadingLevel, string> = {\n 1: 'mbs-4 mbe-2 text-4xl font-semibold text-inherit no-underline',\n 2: 'mbs-4 mbe-2 text-3xl font-bold text-inherit no-underline',\n 3: 'mbs-4 mbe-2 text-2xl font-bold text-inherit no-underline',\n 4: 'mbs-4 mbe-2 text-xl font-extrabold text-inherit no-underline',\n 5: 'mbs-4 mbe-2 text-lg font-extrabold text-inherit no-underline',\n 6: 'mbs-4 mbe-2 font-black text-inherit no-underline',\n};\n\nexport const blockquote = 'mlb-2 border-is-4 border-neutral-500/50 pis-5';\n\n// TODO(thure): Tailwind was not seeing `[&>li:before]:content-[\"•\"]` as a utility class, but it would work if instead of `\"•\"` it was `\"X\"`… why?\nexport const unorderedList =\n 'mlb-2 grid grid-cols-[min-content_1fr] [&>li:before]:content-[attr(marker)] [&>li:before]:mlb-1 [&>li:before]:mie-2';\nexport const orderedList =\n 'mlb-2 grid grid-cols-[min-content_1fr] [&>li:before]:content-[counters(section,_\".\")_\"._\"] [counter-reset:section] [&>li:before]:mlb-1';\n\nexport const listItem = 'contents before:[counter-increment:section]';\n\nexport const codeBlock = 'mlb-2 font-mono bg-neutral-500/10 p-3 rounded';\n\nexport const horizontalRule = 'mlb-4 border-neutral-500/50';\n\nexport const paragraph = 'mlb-1';\n\nexport const bold = 'font-bold';\n\nexport const code = 'font-mono bg-neutral-500/10 rounded pli-0.5 plb-0.5 -mlb-0.5';\n\nexport const placeholder = 'font-mono';\n\nexport const codeWithoutMarks = mx(code, 'pli-1.5 mli-0.5');\n\nexport const italic = 'italic';\n\nexport const strikethrough = 'line-through';\n\nexport const mark = '!font-normal !no-underline !text-inherit opacity-40';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { tailwindConfig, type TailwindConfig } from '@dxos/react-ui-theme';\n\n// TODO(thure): Why export the whole theme? Can this be done differently?\nexport const tokens: TailwindConfig['theme'] = tailwindConfig({}).theme;\n", "//\n// Copyright 2022 DXOS.org\n//\nimport { mergeAttributes } from '@tiptap/core';\nimport Collaboration from '@tiptap/extension-collaboration';\nimport CollaborationCursor from '@tiptap/extension-collaboration-cursor';\nimport Heading from '@tiptap/extension-heading';\nimport ListItem from '@tiptap/extension-list-item';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { type Editor, EditorContent, useEditor as useNaturalEditor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport React, { forwardRef, useImperativeHandle, useMemo } from 'react';\n\nimport { generateName } from '@dxos/display-name';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type EditorModel, type EditorSlots } from '../../model';\nimport {\n blockquote,\n bold,\n codeBlock,\n heading,\n type HeadingLevel,\n horizontalRule,\n italic,\n listItem,\n orderedList,\n paragraph,\n strikethrough,\n unorderedList,\n codeWithoutMarks,\n} from '../../styles';\nimport { cursorColor } from '../../yjs';\n\nexport type TipTapEditor = Editor;\n\ntype UseEditorOptions = {\n model?: EditorModel;\n placeholder?: string;\n slots?: Pick<EditorSlots, 'editor'>;\n};\n\nconst useEditor = ({ model, placeholder = 'Enter text…', slots = {} }: UseEditorOptions) => {\n const extensions = useMemo(\n () => [\n StarterKit.configure({\n // Extensions\n history: false,\n // Nodes\n blockquote: {\n HTMLAttributes: {\n class: blockquote,\n },\n },\n bulletList: {\n HTMLAttributes: {\n class: unorderedList,\n },\n },\n codeBlock: {\n HTMLAttributes: {\n class: codeBlock,\n },\n },\n heading: false, // (thure): `StarterKit` doesn’t let you configure how headings are rendered, see `Heading` below.\n horizontalRule: {\n HTMLAttributes: {\n class: horizontalRule,\n },\n },\n listItem: false, // (thure): `StarterKit` doesn’t let you configure how list items are rendered, see `ListItem` below.\n orderedList: {\n HTMLAttributes: {\n class: orderedList,\n },\n },\n paragraph: {\n HTMLAttributes: {\n class: paragraph,\n },\n },\n // Marks\n bold: {\n HTMLAttributes: {\n class: bold,\n },\n },\n code: {\n HTMLAttributes: {\n class: codeWithoutMarks,\n },\n },\n italic: {\n HTMLAttributes: {\n class: italic,\n },\n },\n strike: {\n HTMLAttributes: {\n class: strikethrough,\n },\n },\n }),\n Heading.extend({\n renderHTML({ node, HTMLAttributes }) {\n const hasLevel = this.options.levels.includes(node.attrs.level);\n const level: HeadingLevel = hasLevel ? node.attrs.level : this.options.levels[0];\n\n return [\n `h${level}`,\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n class: heading[level],\n }),\n 0,\n ];\n },\n }),\n ListItem.extend({\n renderHTML: ({ HTMLAttributes }) => [\n 'li',\n mergeAttributes(HTMLAttributes, {\n marker: '• ',\n class: listItem,\n }),\n ['div', { role: 'none' }, 0],\n ],\n }),\n // https://github.com/ueberdosis/tiptap/tree/main/packages/extension-collaboration\n ...(model && typeof model.content !== 'string' ? [Collaboration.configure({ fragment: model.content })] : []),\n ...(model?.provider\n ? [\n CollaborationCursor.configure({\n provider: model.provider,\n user: model.peer && {\n name: model.peer.name ?? generateName(model.peer.id),\n color: cursorColor.color,\n },\n }),\n ]\n : []),\n Placeholder.configure({\n placeholder,\n emptyEditorClass: 'before:content-[attr(data-placeholder)] before:absolute opacity-50 cursor-text',\n }),\n ],\n [model?.id],\n );\n\n return useNaturalEditor(\n {\n extensions,\n editorProps: {\n attributes: {\n class: mx('focus:outline-none focus-visible:outline-none', slots.editor?.className),\n spellcheck: slots.editor?.spellCheck === false ? 'false' : 'true',\n tabindex: slots.editor?.tabIndex ? String(slots.editor?.tabIndex) : '0',\n },\n },\n },\n [extensions],\n );\n};\n\nexport type RichTextEditorProps = UseEditorOptions & {\n slots?: EditorSlots;\n};\n\n/**\n * @deprecated\n */\n// TODO(burdon): Currently broken.\nexport const RichTextEditor = forwardRef<Editor | null, RichTextEditorProps>((props, ref) => {\n const editor = useEditor(props);\n useImperativeHandle<Editor | null, Editor | null>(ref, () => editor, [editor]);\n\n // Reference:\n // https://tiptap.dev/installation/react\n // https://github.com/ueberdosis/tiptap\n // https://tiptap.dev/guide/output/#option-3-yjs\n return <EditorContent {...props.slots?.root} editor={editor} />;\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport { type StyleSpec } from 'style-mod';\nexport { tags } from '@lezer/highlight';\n\nexport * from './TextEditor';\n\nexport * from './extensions';\nexport * from './theme';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { closeBrackets } from '@codemirror/autocomplete';\nimport { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { EditorState, type Extension } from '@codemirror/state';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\nimport { EditorView, placeholder } from '@codemirror/view';\nimport React, {\n type KeyboardEvent,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useState,\n useCallback,\n type HTMLAttributes,\n} from 'react';\nimport { type StyleSpec } from 'style-mod';\nimport { yCollab } from 'y-codemirror.next';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport { YText } from '@dxos/text-model';\n\nimport { defaultStyles } from './theme';\nimport { type EditorModel, type EditorSlots } from '../../model';\n\nexport type CursorInfo = {\n from: number;\n to: number;\n line: number;\n lines: number;\n after?: string;\n};\n\nexport type TextEditorRef = {\n editor: HTMLDivElement | null;\n state?: EditorState;\n view?: EditorView;\n};\n\nexport type TextEditorProps = {\n model?: EditorModel;\n extensions?: Extension[];\n theme?: {\n [selector: string]: StyleSpec;\n };\n slots?: EditorSlots;\n onKeyDown?: (event: KeyboardEvent, info: CursorInfo) => void;\n} & Pick<HTMLAttributes<HTMLDivElement>, 'onBlur' | 'onFocus'>;\n\n/**\n * Simple text editor.\n */\nexport const TextEditor = forwardRef<TextEditorRef, TextEditorProps>(\n ({ model, extensions = [], theme = defaultStyles, slots = {}, onKeyDown, ...props }, forwardedRef) => {\n const { id, content } = model ?? {};\n const { themeMode } = useThemeContext();\n\n const [parent, setParent] = useState<HTMLDivElement | null>(null);\n const [state, setState] = useState<EditorState>();\n const [view, setView] = useState<EditorView>();\n\n // TODO(burdon): The ref may be instantiated before the view is created.\n useImperativeHandle(\n forwardedRef,\n () => {\n return {\n editor: parent,\n state,\n view,\n };\n },\n [view],\n );\n\n useEffect(() => {\n if (!parent) {\n return;\n }\n\n view?.destroy();\n\n const state = EditorState.create({\n doc: content?.toString(),\n extensions: [\n bracketMatching(),\n closeBrackets(),\n placeholder(slots.editor?.placeholder ?? ''),\n EditorView.lineWrapping,\n\n // Themes.\n EditorView.theme(theme),\n ...(themeMode === 'dark'\n ? [syntaxHighlighting(oneDarkHighlightStyle)]\n : [syntaxHighlighting(defaultHighlightStyle)]),\n\n // Replication.\n ...(content instanceof YText ? [yCollab(content, undefined)] : []),\n\n // Custom.\n ...extensions,\n ],\n });\n\n setState(state);\n setView(new EditorView({ state, parent }));\n\n return () => {\n view?.destroy();\n setView(undefined);\n setState(undefined);\n };\n }, [parent, content, themeMode]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (view) {\n const { head, from, to } = view.state.selection.ranges[0];\n const { number } = view.state.doc.lineAt(head);\n const after = view.state.sliceDoc(from);\n onKeyDown?.(event, { from, to, line: number, lines: view.state.doc.lines, after });\n }\n },\n [view],\n );\n\n return <div key={id} ref={setParent} {...slots.root} onKeyDown={handleKeyDown} {...props} />;\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport get from 'lodash.get';\nimport { type StyleSpec } from 'style-mod';\n\nimport { tailwindConfig, type TailwindConfig } from '@dxos/react-ui-theme';\n\nconst tokens: TailwindConfig['theme'] = tailwindConfig({}).theme;\n\n/**\n * https://codemirror.net/examples/styling\n */\n// TODO(burdon): If given a \"theme\" suffix, `__docgen` properties are added to the object.\nexport const defaultStyles: {\n [selector: string]: StyleSpec;\n} = {\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-placeholder': {\n fontFamily: get(tokens, 'fontFamily.body', []).join(','),\n },\n '& .cm-scroller': {\n fontFamily: get(tokens, 'fontFamily.body', []).join(','),\n overflow: 'visible',\n },\n '.cm-tooltip': {\n backgroundColor: 'transparent',\n border: 'none',\n },\n};\n", "//\n// Copyright 2023 DXOS.org\n// Adapted from: https://github.com/uiwjs/react-codemirror/blob/master/extensions/hyper-link/src/index.ts\n//\n\nimport { type Extension } from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n EditorView,\n MatchDecorator,\n ViewPlugin,\n type ViewUpdate,\n} from '@codemirror/view';\n\n// Notes: Can't edit widget content (or cursor nav through them).\n// - https://discuss.codemirror.net/t/focusing-inputs-within-widgets/5178/7\n// Widgets intentionally always get set to contenteditable=false, or they would become part of CodeMirror’s editable content element.\n// You should be able to introduce new contenteditable=true child elements inside of them.\n\nconst markdownLinkRegexp = /\\[([^\\]]+)]\\(([^)]+)\\)(!?)/gi;\n\nconst linkDecorator = () =>\n new MatchDecorator({\n regexp: markdownLinkRegexp, // regexp || defaultRegexp,\n decorate: (add, from, to, match, view) => {\n const [_, label, url] = match;\n const p0 = {\n start: from,\n end: from + 1,\n };\n\n const p1 = {\n start: from + 1,\n end: from + 1 + label.length,\n };\n\n const p2 = {\n start: p1.end,\n end: p1.end + 1,\n };\n\n const p3 = {\n start: p1.end + 1,\n end: p1.end + 1 + url.length + 2,\n };\n\n // TODO(burdon): Wrap with tagName?\n add(p0.start, p0.end, Decoration.mark({ class: 'cm-hyperlink-bracket' }));\n add(p1.start, p1.end, Decoration.mark({ class: 'cm-hyperlink-label' }));\n add(p2.start, p2.end, Decoration.mark({ class: 'cm-hyperlink-bracket' }));\n add(p3.start, p3.end, Decoration.mark({ class: 'cm-hyperlink-url', __attributes: { style: 'display: none' } }));\n },\n });\n\n// const anchor = (dom: HTMLAnchorElement) => dom;\n\nexport function hyperLinkExtension() {\n return ViewPlugin.fromClass(\n class HyperLinkView {\n readonly decorator: MatchDecorator;\n decorations: DecorationSet;\n constructor(view: EditorView) {\n this.decorator = linkDecorator();\n this.decorations = this.decorator.createDeco(view);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.viewportChanged) {\n this.decorations = this.decorator.updateDeco(update, this.decorations);\n }\n }\n },\n {\n decorations: (view) => view.decorations,\n eventHandlers: {\n // TODO(burdon): CLick to expand link.\n // https://discuss.codemirror.net/t/decorator-iteration-on-click-event/4226/2\n mousedown: function (event, view) {\n const pos = view.posAtDOM(event.target as Node);\n if (pos !== 0) {\n console.log(this);\n }\n },\n // TODO(burdon): Hide when cursor moves away.\n keydown: (event, view) => {\n view.update([]);\n },\n },\n },\n );\n}\n\nexport const hyperLinkStyle = EditorView.baseTheme({\n '.cm-hyperlink-label': {\n cursor: 'pointer',\n textDecoration: 'underline',\n },\n '.cm-hyperlink-bracket': {\n opacity: 0.2,\n },\n '.cm-hyperlink-url': {\n opacity: 0.5,\n fontFamily: 'monospace',\n },\n});\n\nexport const hyperlink: Extension = [hyperLinkExtension(), hyperLinkStyle];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { hoverTooltip } from '@codemirror/view';\n\nimport { tooltipContent } from '@dxos/react-ui-theme';\n\nconst markdownLinkRegexp = /\\[([^\\]]+)]\\(([^)]+)\\)/;\n\nexport type OnHyperlinkHover = (el: Element, url: string) => void;\n\n/**\n * https://codemirror.net/examples/tooltip\n * https://codemirror.net/docs/ref/#view.hoverTooltip\n * https://github.com/codemirror/view/blob/main/src/tooltip.ts\n */\nexport const createHyperlinkTooltip = (onHover: OnHyperlinkHover, regexp = markdownLinkRegexp) =>\n hoverTooltip((view, pos) => {\n const { from, text } = view.state.doc.lineAt(pos);\n const p = pos - from;\n\n let idx = 0;\n let match;\n do {\n match = text.substring(idx).match(regexp);\n if (!match) {\n match = undefined;\n break;\n }\n\n idx = text.indexOf(match[0]);\n if (p >= idx && p < idx + match[0].length) {\n break;\n }\n\n idx += match[0].length;\n } while (true);\n\n if (!match) {\n return null;\n }\n\n const [, , url] = match ?? [];\n\n return {\n pos: idx + from,\n end: idx + from + match[0].length,\n above: true,\n create: () => {\n const el = document.createElement('a');\n el.innerText = '_'; // Required so doesn't collapse.\n el.className = tooltipContent({}, 'mb-2 p-1');\n el.setAttribute('target', '_blank');\n el.setAttribute('href', url);\n onHover(el, url);\n return { dom: el };\n },\n };\n });\n", "//\n// Copyright 2022 DXOS.org\n//\n\nexport * from './components';\nexport * from './model';\n\nexport { TextKind } from '@dxos/protocols/proto/dxos/echo/model/text';\nexport { Doc, YText, YXmlFragment } from '@dxos/text-model';\n"],
5
- "mappings": "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",
6
- "names": ["React", "forwardRef", "memo", "YXmlFragment", "useMemo", "random", "cursorColors", "color", "light", "cursorColor", "uint32", "length", "decoding", "encoding", "Observable", "awarenessProtocol", "log", "messageAwareness", "messageQueryAwareness", "SpaceAwarenessProvider", "constructor", "space", "doc", "channel", "awareness", "_space", "_awareness", "Awareness", "_channel", "_clientId", "clientID", "on", "_handleAwarenessUpdate", "bind", "listen", "_handleSpaceMessage", "window", "addEventListener", "_handleBeforeUnload", "process", "encoderAwarenessQuery", "createEncoder", "writeVarUint", "postMessage", "toUint8Array", "encoderAwarenessState", "writeVarUint8Array", "encodeAwarenessUpdate", "added", "updated", "removed", "origin", "changedClients", "concat", "encoderAwareness", "payload", "data", "Uint8Array", "Array", "from", "Object", "values", "encoder", "_readMessage", "message", "decoder", "createDecoder", "messageType", "readVarUint", "sendReply", "applyAwarenessUpdate", "readVarUint8Array", "getStates", "keys", "console", "error", "removeAwarenessStates", "useTextModel", "identity", "space", "text", "provider", "useMemo", "doc", "undefined", "SpaceAwarenessProvider", "channel", "id", "content", "guid", "peer", "identityKey", "toHex", "name", "profile", "displayName", "autocompletion", "completionKeymap", "closeBrackets", "closeBracketsKeymap", "defaultKeymap", "history", "historyKeymap", "indentWithTab", "markdown", "markdownLanguage", "bracketMatching", "defaultHighlightStyle", "foldKeymap", "indentOnInput", "syntaxHighlighting", "languages", "lintKeymap", "searchKeymap", "highlightSelectionMatches", "EditorState", "StateField", "oneDarkHighlightStyle", "keymap", "crosshairCursor", "drawSelection", "dropCursor", "highlightActiveLine", "highlightActiveLineGutter", "highlightSpecialChars", "placeholder", "rectangularSelection", "EditorView", "useFocusableGroup", "vim", "React", "forwardRef", "useEffect", "useImperativeHandle", "useState", "useMemo", "useCallback", "yCollab", "generateName", "useThemeContext", "getColorForValue", "YText", "styleTags", "Tag", "markdownTags", "headingMark", "Tag", "define", "quoteMark", "listMark", "linkMark", "emphasisMark", "codeMark", "codeText", "inlineCode", "url", "linkReference", "linkLabel", "markdownTagsExtension", "props", "styleTags", "HeaderMark", "QuoteMark", "ListMark", "LinkMark", "EmphasisMark", "CodeMark", "CodeText", "InlineCode", "URL", "LinkReference", "LinkLabel", "markdownLanguage", "HighlightStyle", "tags", "get", "mx", "heading", "blockquote", "unorderedList", "orderedList", "listItem", "codeBlock", "horizontalRule", "paragraph", "bold", "code", "codeWithoutMarks", "mx", "code", "italic", "strikethrough", "mark", "tailwindConfig", "tokens", "tailwindConfig", "theme", "malibu", "cursor", "monospace", "get", "tokens", "join", "markdownTheme", "backgroundColor", "border", "outline", "paddingInline", "minBlockSize", "lineHeight", "background", "caretColor", "borderLeftColor", "fontFamily", "overflow", "padding", "marginBlockStart", "paddingBlockStart", "paddingBlockEnd", "mixBlendMode", "display", "insetBlockStart", "blockSize", "verticalAlign", "margin", "Object", "keys", "reduce", "acc", "fontSize", "height", "markdownDarkHighlighting", "HighlightStyle", "define", "tag", "tags", "keyword", "name", "deleted", "character", "propertyName", "macroName", "color", "constant", "standard", "definition", "separator", "typeName", "className", "number", "changed", "annotation", "modifier", "self", "namespace", "operator", "operatorKeyword", "escape", "regexp", "special", "string", "meta", "comment", "atom", "bool", "variableName", "processingInstruction", "inserted", "invalid", "link", "url", "textDecoration", "function", "labelName", "malibu", "markdownTags", "codeMark", "emphasisMark", "headingMark", "linkLabel", "linkReference", "listMark", "quoteMark", "class", "mark", "codeText", "inlineCode", "emphasis", "italic", "heading1", "heading", "heading2", "heading3", "heading4", "heading5", "heading6", "strikethrough", "strong", "bold", "scope", "markdownLanguage", "all", "EditorModes", "MarkdownEditor", "forwardRef", "model", "slots", "editorMode", "extensions", "onChange", "forwardedRef", "id", "content", "provider", "peer", "themeMode", "useThemeContext", "tabsterDOMAttribute", "useFocusableGroup", "tabBehavior", "parent", "setParent", "useState", "state", "setState", "view", "setView", "useImperativeHandle", "editor", "listenChangesExtension", "useMemo", "StateField", "define", "create", "update", "_value", "transaction", "docChanged", "newDoc", "useEffect", "awareness", "setLocalStateField", "name", "generateName", "color", "getColorForValue", "value", "type", "colorLight", "EditorState", "doc", "toString", "vim", "highlightActiveLineGutter", "highlightSpecialChars", "history", "drawSelection", "dropCursor", "allowMultipleSelections", "of", "indentOnInput", "syntaxHighlighting", "defaultHighlightStyle", "fallback", "bracketMatching", "closeBrackets", "autocompletion", "rectangularSelection", "crosshairCursor", "highlightActiveLine", "highlightSelectionMatches", "placeholder", "keymap", "closeBracketsKeymap", "defaultKeymap", "searchKeymap", "historyKeymap", "foldKeymap", "completionKeymap", "lintKeymap", "indentWithTab", "EditorView", "lineWrapping", "markdown", "base", "markdownLanguage", "codeLanguages", "languages", "markdownTagsExtension", "theme", "markdownTheme", "oneDarkHighlightStyle", "markdownDarkHighlighting", "YText", "yCollab", "destroy", "undefined", "handleKeyUp", "useCallback", "event", "key", "altKey", "shiftKey", "metaKey", "ctrlKey", "contentDOM", "focus", "div", "tabIndex", "ref", "root", "onKeyUp", "mergeAttributes", "Collaboration", "CollaborationCursor", "Heading", "ListItem", "Placeholder", "EditorContent", "useEditor", "useNaturalEditor", "StarterKit", "React", "forwardRef", "useImperativeHandle", "useMemo", "generateName", "mx", "useEditor", "model", "placeholder", "slots", "extensions", "useMemo", "StarterKit", "configure", "history", "blockquote", "HTMLAttributes", "class", "bulletList", "unorderedList", "codeBlock", "heading", "horizontalRule", "listItem", "orderedList", "paragraph", "bold", "code", "codeWithoutMarks", "italic", "strike", "strikethrough", "Heading", "extend", "renderHTML", "node", "hasLevel", "options", "levels", "includes", "attrs", "level", "mergeAttributes", "ListItem", "marker", "role", "content", "Collaboration", "fragment", "provider", "CollaborationCursor", "user", "peer", "name", "generateName", "id", "color", "cursorColor", "Placeholder", "emptyEditorClass", "useNaturalEditor", "editorProps", "attributes", "mx", "editor", "className", "spellcheck", "spellCheck", "tabindex", "tabIndex", "String", "RichTextEditor", "forwardRef", "props", "ref", "useImperativeHandle", "React", "EditorContent", "root", "Editor", "memo", "forwardRef", "slots", "params", "forwardedRef", "model", "useTextModel", "content", "YXmlFragment", "React", "RichTextEditor", "ref", "MarkdownEditor", "tags", "closeBrackets", "bracketMatching", "defaultHighlightStyle", "syntaxHighlighting", "EditorState", "oneDarkHighlightStyle", "EditorView", "placeholder", "React", "forwardRef", "useEffect", "useImperativeHandle", "useState", "useCallback", "yCollab", "useThemeContext", "YText", "get", "tailwindConfig", "tokens", "tailwindConfig", "theme", "defaultStyles", "outline", "fontFamily", "get", "join", "overflow", "backgroundColor", "border", "TextEditor", "forwardRef", "model", "extensions", "theme", "defaultStyles", "slots", "onKeyDown", "props", "forwardedRef", "id", "content", "themeMode", "useThemeContext", "parent", "setParent", "useState", "state", "setState", "view", "setView", "useImperativeHandle", "editor", "useEffect", "destroy", "EditorState", "create", "doc", "toString", "bracketMatching", "closeBrackets", "placeholder", "EditorView", "lineWrapping", "syntaxHighlighting", "oneDarkHighlightStyle", "defaultHighlightStyle", "YText", "yCollab", "undefined", "handleKeyDown", "useCallback", "event", "head", "from", "to", "selection", "ranges", "number", "lineAt", "after", "sliceDoc", "line", "lines", "React", "div", "key", "ref", "root", "Decoration", "EditorView", "MatchDecorator", "ViewPlugin", "markdownLinkRegexp", "linkDecorator", "MatchDecorator", "regexp", "decorate", "add", "from", "to", "match", "view", "_", "label", "url", "p0", "start", "end", "p1", "length", "p2", "p3", "Decoration", "mark", "class", "__attributes", "style", "hyperLinkExtension", "ViewPlugin", "fromClass", "HyperLinkView", "constructor", "decorator", "decorations", "createDeco", "update", "docChanged", "viewportChanged", "updateDeco", "eventHandlers", "mousedown", "event", "pos", "posAtDOM", "target", "console", "log", "keydown", "hyperLinkStyle", "EditorView", "baseTheme", "cursor", "textDecoration", "opacity", "fontFamily", "hyperlink", "hoverTooltip", "tooltipContent", "markdownLinkRegexp", "createHyperlinkTooltip", "onHover", "regexp", "hoverTooltip", "view", "pos", "from", "text", "state", "doc", "lineAt", "p", "idx", "match", "substring", "undefined", "indexOf", "length", "url", "end", "above", "create", "el", "document", "createElement", "innerText", "className", "tooltipContent", "setAttribute", "dom", "TextKind", "Doc", "YText", "YXmlFragment"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef, memo, type Ref } from 'react';\n\nimport { YXmlFragment } from '@dxos/text-model';\n\nimport { type EditorSlots, useTextModel, type UseTextModelOptions } from '../../model';\nimport { MarkdownEditor, type MarkdownEditorRef } from '../Markdown';\nimport { RichTextEditor, type TipTapEditor } from '../RichText';\n\nexport type EditorProps = UseTextModelOptions & {\n slots?: EditorSlots;\n};\n\n/**\n * Memoized editor which depends on DXOS platform.\n *\n * Determines which editor to render based on the kind of text.\n */\n// NOTE: Without `memo`, if parent component uses `observer` the editor re-renders excessively.\n// TODO(wittjosiah): Factor out?\nexport const Editor = memo(\n forwardRef<TipTapEditor | MarkdownEditorRef, EditorProps>(({ slots, ...params }, forwardedRef) => {\n const model = useTextModel(params);\n if (model?.content instanceof YXmlFragment) {\n return <RichTextEditor ref={forwardedRef as Ref<TipTapEditor>} model={model} slots={slots} />;\n } else {\n return <MarkdownEditor ref={forwardedRef as Ref<MarkdownEditorRef>} model={model} slots={slots} />;\n }\n }),\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport { type ComponentProps, useMemo } from 'react';\nimport type * as awarenessProtocol from 'y-protocols/awareness';\n\nimport { type Space, type TextObject } from '@dxos/react-client/echo';\nimport { type Identity } from '@dxos/react-client/halo';\nimport type { YText, YXmlFragment } from '@dxos/text-model';\n\nimport { SpaceAwarenessProvider } from './yjs';\n\nexport type EditorSlots = {\n root?: Omit<ComponentProps<'div'>, 'ref'>;\n editor?: {\n className?: string;\n placeholder?: string;\n spellCheck?: boolean;\n tabIndex?: number;\n markdownTheme?: Parameters<typeof EditorView.theme>[0];\n };\n};\n\ntype Awareness = awarenessProtocol.Awareness;\ntype Provider = { awareness: Awareness };\n\n// TODO(wittjosiah): Factor out to common package? @dxos/react-client?\nexport type EditorModel = {\n id: string;\n content: string | YText | YXmlFragment;\n provider?: Provider;\n peer?: {\n id: string;\n name?: string;\n };\n};\n\nexport type UseTextModelOptions = {\n identity?: Identity | null;\n space?: Space;\n text?: TextObject;\n};\n\n// TODO(wittjosiah): Factor out to common package? @dxos/react-client?\n// TODO(burdon): Decouple space (make Editor less dependent on entire stack)?\nexport const useTextModel = ({ identity, space, text }: UseTextModelOptions): EditorModel | undefined => {\n const provider = useMemo(() => {\n if (!space || !text?.doc) {\n return undefined;\n }\n\n return new SpaceAwarenessProvider({ space, doc: text.doc, channel: `yjs.awareness.${text.id}` });\n }, [identity, space, text?.doc]);\n\n if (!text?.doc || !text?.content) {\n return undefined;\n }\n\n return {\n id: text.doc.guid,\n content: text.content,\n provider,\n peer: identity\n ? {\n id: identity.identityKey.toHex(),\n name: identity.profile?.displayName,\n }\n : undefined,\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// Copied from https://github.com/yjs/y-codemirror.next#example.\n\nimport * as random from 'lib0/random';\n\nconst cursorColors = [\n { color: '#30bced', light: '#30bced33' },\n { color: '#6eeb83', light: '#6eeb8333' },\n { color: '#ffbc42', light: '#ffbc4233' },\n { color: '#ecd444', light: '#ecd44433' },\n { color: '#ee6352', light: '#ee635233' },\n { color: '#9ac2c9', light: '#9ac2c933' },\n { color: '#8acb88', light: '#8acb8833' },\n { color: '#1be7ff', light: '#1be7ff33' },\n];\n\n// Select a random color for this user.\nexport const cursorColor = cursorColors[random.uint32() % cursorColors.length];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as decoding from 'lib0/decoding';\nimport * as encoding from 'lib0/encoding';\nimport { Observable } from 'lib0/observable';\nimport * as awarenessProtocol from 'y-protocols/awareness';\nimport { type Doc } from 'yjs';\n\nimport { log } from '@dxos/log';\nimport { type Space } from '@dxos/react-client/echo';\nimport { type GossipMessage } from '@dxos/react-client/mesh';\n\ntype Awareness = awarenessProtocol.Awareness;\n\n// Based on https://github.com/yjs/y-webrtc/blob/88baab2/src/y-webrtc.js.\n\nconst messageAwareness = 1;\nconst messageQueryAwareness = 3;\n\n/**\n * Yjs awareness provider on top of a DXOS space.\n */\nexport class SpaceAwarenessProvider extends Observable<any> {\n private readonly _space: Space;\n private readonly _awareness: Awareness;\n private readonly _clientId: number;\n private readonly _channel: string;\n\n constructor({ space, doc, channel, awareness }: { space: Space; doc: Doc; channel: string; awareness?: Awareness }) {\n super();\n this._space = space;\n this._awareness = awareness ?? new awarenessProtocol.Awareness(doc);\n this._channel = channel;\n this._clientId = doc.clientID;\n\n this._awareness.on('update', this._handleAwarenessUpdate.bind(this));\n this._space.listen(this._channel, this._handleSpaceMessage.bind(this));\n\n if (typeof window !== 'undefined') {\n window.addEventListener('beforeunload', this._handleBeforeUnload.bind(this));\n } else if (typeof process !== 'undefined') {\n process.on('exit', this._handleBeforeUnload.bind(this));\n }\n\n // Post queryAwareness.\n const encoderAwarenessQuery = encoding.createEncoder();\n encoding.writeVarUint(encoderAwarenessQuery, messageQueryAwareness);\n void this._space.postMessage(this._channel, encoding.toUint8Array(encoderAwarenessQuery));\n\n // Post local awareness state.\n const encoderAwarenessState = encoding.createEncoder();\n encoding.writeVarUint(encoderAwarenessState, messageAwareness);\n encoding.writeVarUint8Array(\n encoderAwarenessState,\n awarenessProtocol.encodeAwarenessUpdate(this.awareness, [this._clientId]),\n );\n void this._space.postMessage(this._channel, encoding.toUint8Array(encoderAwarenessState));\n }\n\n get awareness(): Awareness {\n return this._awareness;\n }\n\n private _handleAwarenessUpdate({ added, updated, removed }: any, origin: any) {\n log('awareness update', { added, updated, removed, origin });\n const changedClients = added.concat(updated).concat(removed);\n const encoderAwareness = encoding.createEncoder();\n encoding.writeVarUint(encoderAwareness, messageAwareness);\n encoding.writeVarUint8Array(\n encoderAwareness,\n awarenessProtocol.encodeAwarenessUpdate(this._awareness, changedClients),\n );\n void this._space.postMessage(this._channel, encoding.toUint8Array(encoderAwareness));\n }\n\n private _handleSpaceMessage({ payload }: GossipMessage) {\n log('space message', payload);\n const data = new Uint8Array(Array.from(Object.values(payload)));\n const encoder = this._readMessage(data);\n if (encoder) {\n void this._space.postMessage(this._channel, encoding.toUint8Array(encoder));\n }\n }\n\n private _readMessage(message: Uint8Array) {\n const decoder = decoding.createDecoder(message);\n const encoder = encoding.createEncoder();\n const messageType = decoding.readVarUint(decoder);\n\n let sendReply = false;\n switch (messageType) {\n case messageAwareness: {\n awarenessProtocol.applyAwarenessUpdate(this._awareness, decoding.readVarUint8Array(decoder), this);\n break;\n }\n\n case messageQueryAwareness: {\n encoding.writeVarUint(encoder, messageAwareness);\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(this._awareness, Array.from(this._awareness.getStates().keys())),\n );\n sendReply = true;\n break;\n }\n\n default: {\n console.error('Invalid message:', messageType);\n return encoder;\n }\n }\n\n if (!sendReply) {\n // Nothing has been written, no answer created.\n return null;\n }\n\n return encoder;\n }\n\n private _handleBeforeUnload() {\n awarenessProtocol.removeAwarenessStates(this._awareness, [this._clientId], 'window unload');\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { autocompletion, completionKeymap, closeBrackets, closeBracketsKeymap } from '@codemirror/autocomplete';\nimport { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands';\nimport { markdown, markdownLanguage } from '@codemirror/lang-markdown';\nimport {\n bracketMatching,\n defaultHighlightStyle,\n foldKeymap,\n indentOnInput,\n syntaxHighlighting,\n} from '@codemirror/language';\nimport { languages } from '@codemirror/language-data';\nimport { lintKeymap } from '@codemirror/lint';\nimport { searchKeymap, highlightSelectionMatches } from '@codemirror/search';\nimport { EditorState, type Extension, StateField, type Text } from '@codemirror/state';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\nimport {\n keymap,\n crosshairCursor,\n drawSelection,\n dropCursor,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n placeholder,\n rectangularSelection,\n EditorView,\n} from '@codemirror/view';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { vim } from '@replit/codemirror-vim';\nimport React, {\n type KeyboardEvent,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useState,\n useMemo,\n useCallback,\n} from 'react';\nimport { yCollab } from 'y-codemirror.next';\n\nimport { generateName } from '@dxos/display-name';\nimport { useThemeContext } from '@dxos/react-ui';\nimport { getColorForValue } from '@dxos/react-ui-theme';\nimport { YText } from '@dxos/text-model';\n\nimport { markdownTagsExtension } from './markdownTags';\nimport { markdownDarkHighlighting, markdownTheme } from './markdownTheme';\nimport { type EditorModel, type EditorSlots } from '../../model';\n\nexport const EditorModes = ['default', 'vim'] as const;\nexport type EditorMode = (typeof EditorModes)[number];\n\nexport type MarkdownEditorProps = {\n model?: EditorModel;\n slots?: EditorSlots;\n editorMode?: EditorMode;\n extensions?: Extension[];\n onChange?: (content: string | Text) => void;\n};\n\nexport type MarkdownEditorRef = {\n editor: HTMLDivElement | null;\n state?: EditorState;\n view?: EditorView;\n};\n\nexport const MarkdownEditor = forwardRef<MarkdownEditorRef, MarkdownEditorProps>(\n ({ model, slots = {}, editorMode, extensions = [], onChange }, forwardedRef) => {\n const { id, content, provider, peer } = model ?? {};\n const { themeMode } = useThemeContext();\n const tabsterDOMAttribute = useFocusableGroup({ tabBehavior: 'limited' });\n\n const [parent, setParent] = useState<HTMLDivElement | null>(null);\n const [state, setState] = useState<EditorState>();\n const [view, setView] = useState<EditorView>();\n\n useImperativeHandle(forwardedRef, () => ({\n editor: parent,\n state,\n view,\n }));\n\n const listenChangesExtension = useMemo(\n () =>\n StateField.define({\n create: () => null,\n update: (_value, transaction) => {\n if (transaction.docChanged && onChange) {\n onChange(transaction.newDoc);\n }\n return null;\n },\n }),\n [onChange],\n );\n\n useEffect(() => {\n if (provider && peer) {\n provider.awareness.setLocalStateField('user', {\n name: peer.name ?? generateName(peer.id),\n color: getColorForValue({ value: peer.id, type: 'color' }),\n colorLight: getColorForValue({ value: peer.id, themeMode, type: 'highlight' }),\n });\n }\n }, [provider, peer, themeMode]);\n\n useEffect(() => {\n if (!parent) {\n return;\n }\n\n const state = EditorState.create({\n doc: content?.toString(),\n extensions: [\n // Based on https://github.com/codemirror/dev/issues/44#issuecomment-789093799.\n listenChangesExtension,\n\n ...(editorMode === 'vim' ? [vim()] : []),\n\n // All of https://github.com/codemirror/basic-setup minus line numbers and fold gutter.\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n rectangularSelection(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n placeholder(slots.editor?.placeholder ?? ''), // TODO(burdon): Needs consistent styling.\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap,\n indentWithTab,\n ]),\n EditorView.lineWrapping,\n\n // Themes.\n markdown({ base: markdownLanguage, codeLanguages: languages, extensions: [markdownTagsExtension] }),\n EditorView.theme({ ...markdownTheme, ...slots.editor?.markdownTheme }),\n ...(themeMode === 'dark'\n ? [syntaxHighlighting(oneDarkHighlightStyle)]\n : [syntaxHighlighting(defaultHighlightStyle)]),\n // TODO(thure): All but one rule here apply to both themes; rename or refactor.\n syntaxHighlighting(markdownDarkHighlighting),\n\n // Replication and awareness (incl. remote selection).\n ...(content instanceof YText ? [yCollab(content, provider?.awareness)] : []),\n\n // Custom.\n ...extensions,\n ],\n });\n\n setState(state);\n\n // NOTE: This repaints the editor.\n // If the new state is derived from the old state, it will likely not be visible other than the cursor resetting.\n // Ideally this should not be hit except when changing between text objects.\n view?.destroy();\n setView(new EditorView({ state, parent }));\n\n return () => {\n view?.destroy();\n setView(undefined);\n setState(undefined);\n };\n }, [parent, content, provider?.awareness, themeMode, editorMode]);\n\n const handleKeyUp = useCallback(\n (event: KeyboardEvent) => {\n const { key, altKey, shiftKey, metaKey, ctrlKey } = event;\n switch (key) {\n case 'Enter': {\n view?.contentDOM.focus();\n break;\n }\n\n case 'Escape': {\n editorMode === 'vim' && (altKey || shiftKey || metaKey || ctrlKey) && parent?.focus();\n break;\n }\n }\n },\n [view, editorMode],\n );\n\n return (\n <div\n tabIndex={0}\n ref={setParent}\n key={id}\n {...slots.root}\n {...(editorMode !== 'vim' ? tabsterDOMAttribute : {})}\n onKeyUp={handleKeyUp}\n />\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { styleTags, Tag } from '@lezer/highlight';\nimport { type MarkdownConfig } from '@lezer/markdown';\n\nexport const markdownTags = {\n headingMark: Tag.define(),\n quoteMark: Tag.define(),\n listMark: Tag.define(),\n linkMark: Tag.define(),\n emphasisMark: Tag.define(),\n codeMark: Tag.define(),\n codeText: Tag.define(),\n inlineCode: Tag.define(),\n url: Tag.define(),\n linkReference: Tag.define(),\n linkLabel: Tag.define(),\n};\n\nexport const markdownTagsExtension: MarkdownConfig = {\n props: [\n styleTags({\n HeaderMark: markdownTags.headingMark,\n QuoteMark: markdownTags.quoteMark,\n ListMark: markdownTags.listMark,\n LinkMark: markdownTags.linkMark,\n EmphasisMark: markdownTags.emphasisMark,\n CodeMark: markdownTags.codeMark,\n CodeText: markdownTags.codeText,\n InlineCode: markdownTags.inlineCode,\n URL: markdownTags.url,\n LinkReference: markdownTags.linkReference,\n LinkLabel: markdownTags.linkLabel,\n }),\n ],\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { markdownLanguage } from '@codemirror/lang-markdown';\nimport { HighlightStyle } from '@codemirror/language';\nimport { tags } from '@lezer/highlight';\nimport get from 'lodash.get';\n\nimport { markdownTags } from './markdownTags';\nimport { bold, heading, italic, mark, strikethrough, tokens } from '../../styles';\n\n// TODO(burdon): Use theme colors.\n// TODO(burdon): Light mode.\n\nexport const chalky = '#e5c07b';\nexport const coral = '#e06c75';\nexport const cyan = '#56b6c2';\nexport const invalid = '#ffffff';\nexport const ivory = '#abb2bf';\nexport const stone = '#7d8799';\nexport const malibu = '#61afef';\nexport const sage = '#98c379';\nexport const whiskey = '#d19a66';\nexport const violet = '#c678dd';\nconst _darkBackground = '#21252b';\nexport const highlightBackground = '#2c313a';\nconst _background = '#282c34';\nexport const tooltipBackground = '#353a42';\nconst _selection = '#3E4451';\nexport const cursor = '#ffffff';\n\nconst monospace = get(tokens, 'fontFamily.mono', ['monospace']).join(',');\n\nexport const markdownTheme = {\n // TODO(thure): consider whether these commented-out rules from one-dark-theme should be integrated.\n // '&': {\n // color: ivory,\n // backgroundColor: background\n // },\n // '.cm-cursor, .cm-dropCursor': { borderLeftColor: cursor },\n // '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {\n // backgroundColor: selection\n // },\n // '.cm-panels': { backgroundColor: darkBackground, color: ivory },\n // '.cm-panels.cm-panels-top': { borderBottom: '2px solid black' },\n // '.cm-panels.cm-panels-bottom': { borderTop: '2px solid black' },\n // '.cm-searchMatch': {\n // backgroundColor: '#72a1ff59',\n // outline: '1px solid #457dff'\n // },\n // '.cm-searchMatch.cm-searchMatch-selected': {\n // backgroundColor: '#6199ff2f'\n // },\n // '.cm-activeLine': { backgroundColor: '#6699ff0b' },\n // '.cm-selectionMatch': { backgroundColor: '#aafe661a' },\n // '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': {\n // backgroundColor: '#bad0f847'\n // },\n // '.cm-gutters': {\n // backgroundColor: background,\n // color: stone,\n // border: 'none'\n // },\n // '.cm-activeLineGutter': {\n // backgroundColor: highlightBackground\n // },\n // '.cm-foldPlaceholder': {\n // backgroundColor: 'transparent',\n // border: 'none',\n // color: '#ddd'\n // },\n\n '.cm-tooltip': {\n backgroundColor: 'transparent',\n border: 'none',\n },\n // '.dark & .cm-tooltip': {\n // border: 'none',\n // backgroundColor: tooltipBackground,\n // },\n // '.dark & .cm-tooltip .cm-tooltip-arrow:before': {\n // borderTopColor: 'transparent',\n // borderBottomColor: 'transparent',\n // },\n // '.dark & .cm-tooltip .cm-tooltip-arrow:after': {\n // borderTopColor: tooltipBackground,\n // borderBottomColor: tooltipBackground,\n // },\n // '.dark & .cm-tooltip-autocomplete': {\n // '& > ul > li[aria-selected]': {\n // backgroundColor: highlightBackground,\n // color: ivory,\n // },\n // },\n '&.cm-focused': {\n outline: 'none',\n },\n '& .cm-line': {\n paddingInline: 0,\n minBlockSize: '1.6em',\n },\n '& .cm-line *': {\n lineHeight: 1.6,\n },\n '&.cm-focused .cm-selectionBackground, & .cm-selectionBackground': {\n background: get(tokens, 'extend.colors.primary.150', '#00ffff'),\n },\n '.dark & .cm-selectionBackground, .dark &.cm-focused .cm-selectionBackground': {\n background: get(tokens, 'extend.colors.primary.850', '#00ffff'),\n },\n '& .cm-selectionMatch': {\n background: get(tokens, 'extend.colors.primary.250', '#00ffff') + '44',\n },\n '.dark & .cm-selectionMatch': {\n background: get(tokens, 'extend.colors.primary.600', '#00ffff') + '44',\n },\n '& .cm-content': {\n caretColor: 'black',\n },\n '.dark & .cm-content': {\n caretColor: cursor,\n },\n '& .cm-cursor': {\n borderLeftColor: 'black',\n },\n '.dark & .cm-cursor': {\n borderLeftColor: cursor,\n },\n '.cm-placeholder': {\n fontFamily: get(tokens, 'fontFamily.body', []).join(','),\n },\n '& .cm-scroller': {\n fontFamily: get(tokens, 'fontFamily.mono', []).join(','),\n overflow: 'visible',\n },\n '& .cm-activeLine': {\n backgroundColor: 'transparent',\n },\n '.dark & .cm-activeLine': {\n backgroundColor: 'transparent',\n },\n '& .cm-ySelectionInfo': {\n fontFamily: get(tokens, 'fontFamily.body', []).join(','),\n padding: '2px 4px',\n marginBlockStart: '-4px',\n },\n '& .cm-ySelection, & .cm-selectionMatch': {\n paddingBlockStart: '.15em',\n paddingBlockEnd: '.15em',\n },\n '& .cm-ySelection, & .cm-yLineSelection': {\n mixBlendMode: 'multiply',\n },\n '.dark & .cm-ySelection, .dark & .cm-yLineSelection': {\n mixBlendMode: 'screen',\n },\n '& .cm-ySelectionCaret': {\n display: 'inline-block',\n insetBlockStart: '.1em',\n blockSize: '1.4em',\n verticalAlign: 'top',\n },\n '& .cm-yLineSelection': {\n margin: '0',\n },\n ...Object.keys(get(tokens, 'extend.fontSize', {})).reduce((acc: Record<string, any>, fontSize) => {\n const height = get(tokens, ['extend', 'fontSize', fontSize, 1, 'lineHeight']);\n // TODO(thure): This appears to be the best or only way to set selection caret heights, but it's far more verbose than it needs to be.\n acc[`& .text-${fontSize} + .cm-ySelectionCaret`] = { height };\n acc[`& .text-${fontSize} + .cm-ySelection + .cm-ySelectionCaret`] = { height };\n acc[`& .text-${fontSize} + .cm-widgetBuffer + .cm-ySelectionCaret`] = { height };\n return acc;\n }, {}),\n};\n\nexport const markdownDarkHighlighting = HighlightStyle.define(\n [\n {\n tag: [\n tags.keyword,\n tags.name,\n tags.deleted,\n tags.character,\n tags.propertyName,\n tags.macroName,\n tags.color,\n tags.constant(tags.name),\n tags.standard(tags.name),\n tags.definition(tags.name),\n tags.separator,\n tags.typeName,\n tags.className,\n tags.number,\n tags.changed,\n tags.annotation,\n tags.modifier,\n tags.self,\n tags.namespace,\n tags.operator,\n tags.operatorKeyword,\n tags.escape,\n tags.regexp,\n tags.special(tags.string),\n tags.meta,\n tags.comment,\n tags.atom,\n tags.bool,\n tags.special(tags.variableName),\n tags.processingInstruction,\n tags.string,\n tags.inserted,\n tags.invalid,\n ],\n color: 'inherit !important',\n },\n {\n tag: [tags.link, tags.url],\n color: 'inherit !important',\n textDecoration: 'none !important',\n },\n {\n tag: [tags.function(tags.variableName), tags.labelName],\n color: malibu,\n fontFamily: monospace,\n },\n {\n tag: [\n markdownTags.codeMark,\n markdownTags.emphasisMark,\n markdownTags.headingMark,\n markdownTags.linkLabel,\n markdownTags.linkReference,\n markdownTags.listMark,\n markdownTags.quoteMark,\n markdownTags.url,\n tags.meta,\n tags.processingInstruction,\n ],\n class: mark,\n },\n { tag: [markdownTags.codeText, markdownTags.inlineCode], class: 'font-mono' },\n { tag: tags.emphasis, class: italic },\n { tag: tags.heading1, class: heading[1] },\n { tag: tags.heading2, class: heading[2] },\n { tag: tags.heading3, class: heading[3] },\n { tag: tags.heading4, class: heading[4] },\n { tag: tags.heading5, class: heading[5] },\n { tag: tags.heading6, class: heading[6] },\n { tag: tags.strikethrough, class: strikethrough },\n { tag: tags.strong, class: bold },\n ],\n { scope: markdownLanguage, all: { fontFamily: get(tokens, 'fontFamily.body', []).join(',') } },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport const heading: Record<HeadingLevel, string> = {\n 1: 'mbs-4 mbe-2 text-4xl font-semibold text-inherit no-underline',\n 2: 'mbs-4 mbe-2 text-3xl font-bold text-inherit no-underline',\n 3: 'mbs-4 mbe-2 text-2xl font-bold text-inherit no-underline',\n 4: 'mbs-4 mbe-2 text-xl font-extrabold text-inherit no-underline',\n 5: 'mbs-4 mbe-2 text-lg font-extrabold text-inherit no-underline',\n 6: 'mbs-4 mbe-2 font-black text-inherit no-underline',\n};\n\nexport const blockquote = 'mlb-2 border-is-4 border-neutral-500/50 pis-5';\n\n// TODO(thure): Tailwind was not seeing `[&>li:before]:content-[\"•\"]` as a utility class, but it would work if instead of `\"•\"` it was `\"X\"`… why?\nexport const unorderedList =\n 'mlb-2 grid grid-cols-[min-content_1fr] [&>li:before]:content-[attr(marker)] [&>li:before]:mlb-1 [&>li:before]:mie-2';\nexport const orderedList =\n 'mlb-2 grid grid-cols-[min-content_1fr] [&>li:before]:content-[counters(section,_\".\")_\"._\"] [counter-reset:section] [&>li:before]:mlb-1';\n\nexport const listItem = 'contents before:[counter-increment:section]';\n\nexport const codeBlock = 'mlb-2 font-mono bg-neutral-500/10 p-3 rounded';\n\nexport const horizontalRule = 'mlb-4 border-neutral-500/50';\n\nexport const paragraph = 'mlb-1';\n\nexport const bold = 'font-bold';\n\nexport const code = 'font-mono bg-neutral-500/10 rounded pli-0.5 plb-0.5 -mlb-0.5';\n\nexport const placeholder = 'font-mono';\n\nexport const codeWithoutMarks = mx(code, 'pli-1.5 mli-0.5');\n\nexport const italic = 'italic';\n\nexport const strikethrough = 'line-through';\n\nexport const mark = '!font-normal !no-underline !text-inherit opacity-40';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { tailwindConfig, type TailwindConfig } from '@dxos/react-ui-theme';\n\n// TODO(thure): Why export the whole theme? Can this be done differently?\nexport const tokens: TailwindConfig['theme'] = tailwindConfig({}).theme;\n", "//\n// Copyright 2022 DXOS.org\n//\nimport { mergeAttributes } from '@tiptap/core';\nimport Collaboration from '@tiptap/extension-collaboration';\nimport CollaborationCursor from '@tiptap/extension-collaboration-cursor';\nimport Heading from '@tiptap/extension-heading';\nimport ListItem from '@tiptap/extension-list-item';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { type Editor, EditorContent, useEditor as useNaturalEditor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport React, { forwardRef, useImperativeHandle, useMemo } from 'react';\n\nimport { generateName } from '@dxos/display-name';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type EditorModel, type EditorSlots } from '../../model';\nimport {\n blockquote,\n bold,\n codeBlock,\n heading,\n type HeadingLevel,\n horizontalRule,\n italic,\n listItem,\n orderedList,\n paragraph,\n strikethrough,\n unorderedList,\n codeWithoutMarks,\n} from '../../styles';\nimport { cursorColor } from '../../yjs';\n\nexport type TipTapEditor = Editor;\n\ntype UseEditorOptions = {\n model?: EditorModel;\n placeholder?: string;\n slots?: Pick<EditorSlots, 'editor'>;\n};\n\nconst useEditor = ({ model, placeholder = 'Enter text…', slots = {} }: UseEditorOptions) => {\n const extensions = useMemo(\n () => [\n StarterKit.configure({\n // Extensions\n history: false,\n // Nodes\n blockquote: {\n HTMLAttributes: {\n class: blockquote,\n },\n },\n bulletList: {\n HTMLAttributes: {\n class: unorderedList,\n },\n },\n codeBlock: {\n HTMLAttributes: {\n class: codeBlock,\n },\n },\n heading: false, // (thure): `StarterKit` doesn’t let you configure how headings are rendered, see `Heading` below.\n horizontalRule: {\n HTMLAttributes: {\n class: horizontalRule,\n },\n },\n listItem: false, // (thure): `StarterKit` doesn’t let you configure how list items are rendered, see `ListItem` below.\n orderedList: {\n HTMLAttributes: {\n class: orderedList,\n },\n },\n paragraph: {\n HTMLAttributes: {\n class: paragraph,\n },\n },\n // Marks\n bold: {\n HTMLAttributes: {\n class: bold,\n },\n },\n code: {\n HTMLAttributes: {\n class: codeWithoutMarks,\n },\n },\n italic: {\n HTMLAttributes: {\n class: italic,\n },\n },\n strike: {\n HTMLAttributes: {\n class: strikethrough,\n },\n },\n }),\n Heading.extend({\n renderHTML({ node, HTMLAttributes }) {\n const hasLevel = this.options.levels.includes(node.attrs.level);\n const level: HeadingLevel = hasLevel ? node.attrs.level : this.options.levels[0];\n\n return [\n `h${level}`,\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n class: heading[level],\n }),\n 0,\n ];\n },\n }),\n ListItem.extend({\n renderHTML: ({ HTMLAttributes }) => [\n 'li',\n mergeAttributes(HTMLAttributes, {\n marker: '• ',\n class: listItem,\n }),\n ['div', { role: 'none' }, 0],\n ],\n }),\n // https://github.com/ueberdosis/tiptap/tree/main/packages/extension-collaboration\n ...(model && typeof model.content !== 'string' ? [Collaboration.configure({ fragment: model.content })] : []),\n ...(model?.provider\n ? [\n CollaborationCursor.configure({\n provider: model.provider,\n user: model.peer && {\n name: model.peer.name ?? generateName(model.peer.id),\n color: cursorColor.color,\n },\n }),\n ]\n : []),\n Placeholder.configure({\n placeholder,\n emptyEditorClass: 'before:content-[attr(data-placeholder)] before:absolute opacity-50 cursor-text',\n }),\n ],\n [model?.id],\n );\n\n return useNaturalEditor(\n {\n extensions,\n editorProps: {\n attributes: {\n class: mx('focus:outline-none focus-visible:outline-none', slots.editor?.className),\n spellcheck: slots.editor?.spellCheck === false ? 'false' : 'true',\n tabindex: slots.editor?.tabIndex ? String(slots.editor?.tabIndex) : '0',\n },\n },\n },\n [extensions],\n );\n};\n\nexport type RichTextEditorProps = UseEditorOptions & {\n slots?: EditorSlots;\n};\n\n/**\n * @deprecated\n */\n// TODO(burdon): Currently broken.\nexport const RichTextEditor = forwardRef<Editor | null, RichTextEditorProps>((props, ref) => {\n const editor = useEditor(props);\n useImperativeHandle<Editor | null, Editor | null>(ref, () => editor, [editor]);\n\n // Reference:\n // https://tiptap.dev/installation/react\n // https://github.com/ueberdosis/tiptap\n // https://tiptap.dev/guide/output/#option-3-yjs\n return <EditorContent {...props.slots?.root} editor={editor} />;\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport { type StyleSpec } from 'style-mod';\nexport { tags } from '@lezer/highlight';\n\nexport * from './TextEditor';\n\nexport * from './extensions';\nexport * from './theme';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { closeBrackets } from '@codemirror/autocomplete';\nimport { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { EditorState, type Extension } from '@codemirror/state';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\nimport { EditorView, placeholder } from '@codemirror/view';\nimport React, {\n type KeyboardEvent,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useState,\n useCallback,\n type HTMLAttributes,\n} from 'react';\nimport { type StyleSpec } from 'style-mod';\nimport { yCollab } from 'y-codemirror.next';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport { YText } from '@dxos/text-model';\n\nimport { defaultStyles } from './theme';\nimport { type EditorModel, type EditorSlots } from '../../model';\n\nexport type CursorInfo = {\n from: number;\n to: number;\n line: number;\n lines: number;\n after?: string;\n};\n\nexport type TextEditorRef = {\n editor: HTMLDivElement | null;\n state?: EditorState;\n view?: EditorView;\n};\n\nexport type TextEditorProps = {\n model?: EditorModel;\n extensions?: Extension[];\n theme?: {\n [selector: string]: StyleSpec;\n };\n slots?: EditorSlots;\n onKeyDown?: (event: KeyboardEvent, info: CursorInfo) => void;\n} & Pick<HTMLAttributes<HTMLDivElement>, 'onBlur' | 'onFocus'>;\n\n/**\n * Simple text editor.\n */\nexport const TextEditor = forwardRef<TextEditorRef, TextEditorProps>(\n ({ model, extensions = [], theme = defaultStyles, slots = {}, onKeyDown, ...props }, forwardedRef) => {\n const { id, content } = model ?? {};\n const { themeMode } = useThemeContext();\n\n const [parent, setParent] = useState<HTMLDivElement | null>(null);\n const [state, setState] = useState<EditorState>();\n const [view, setView] = useState<EditorView>();\n\n // TODO(burdon): The ref may be instantiated before the view is created.\n useImperativeHandle(\n forwardedRef,\n () => {\n return {\n editor: parent,\n state,\n view,\n };\n },\n [view],\n );\n\n useEffect(() => {\n if (!parent) {\n return;\n }\n\n view?.destroy();\n\n const state = EditorState.create({\n doc: content?.toString(),\n extensions: [\n bracketMatching(),\n closeBrackets(),\n placeholder(slots.editor?.placeholder ?? ''),\n EditorView.lineWrapping,\n\n // Themes.\n EditorView.theme(theme),\n ...(themeMode === 'dark'\n ? [syntaxHighlighting(oneDarkHighlightStyle)]\n : [syntaxHighlighting(defaultHighlightStyle)]),\n\n // Replication.\n ...(content instanceof YText ? [yCollab(content, undefined)] : []),\n\n // Custom.\n ...extensions,\n ],\n });\n\n setState(state);\n setView(new EditorView({ state, parent }));\n\n return () => {\n view?.destroy();\n setView(undefined);\n setState(undefined);\n };\n }, [parent, content, themeMode]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (view) {\n const { head, from, to } = view.state.selection.ranges[0];\n const { number } = view.state.doc.lineAt(head);\n const after = view.state.sliceDoc(from);\n onKeyDown?.(event, { from, to, line: number, lines: view.state.doc.lines, after });\n }\n },\n [view],\n );\n\n return <div key={id} ref={setParent} {...slots.root} onKeyDown={handleKeyDown} {...props} />;\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport get from 'lodash.get';\nimport { type StyleSpec } from 'style-mod';\n\nimport { tailwindConfig, type TailwindConfig } from '@dxos/react-ui-theme';\n\nconst tokens: TailwindConfig['theme'] = tailwindConfig({}).theme;\n\n/**\n * https://codemirror.net/examples/styling\n */\n// TODO(burdon): If given a \"theme\" suffix, `__docgen` properties are added to the object.\nexport const defaultStyles: {\n [selector: string]: StyleSpec;\n} = {\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-placeholder': {\n fontFamily: get(tokens, 'fontFamily.body', []).join(','),\n },\n '& .cm-scroller': {\n fontFamily: get(tokens, 'fontFamily.body', []).join(','),\n overflow: 'visible',\n },\n '.cm-tooltip': {\n backgroundColor: 'transparent',\n border: 'none',\n },\n};\n", "//\n// Copyright 2023 DXOS.org\n// Adapted from: https://github.com/uiwjs/react-codemirror/blob/master/extensions/hyper-link/src/index.ts\n//\n\nimport { type Extension } from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n EditorView,\n MatchDecorator,\n ViewPlugin,\n type ViewUpdate,\n} from '@codemirror/view';\n\n// Notes: Can't edit widget content (or cursor nav through them).\n// - https://discuss.codemirror.net/t/focusing-inputs-within-widgets/5178/7\n// Widgets intentionally always get set to contenteditable=false, or they would become part of CodeMirror’s editable content element.\n// You should be able to introduce new contenteditable=true child elements inside of them.\n\nconst markdownLinkRegexp = /\\[([^\\]]+)]\\(([^)]+)\\)(!?)/gi;\n\nconst linkDecorator = () =>\n new MatchDecorator({\n regexp: markdownLinkRegexp, // regexp || defaultRegexp,\n decorate: (add, from, to, match, view) => {\n const [_, label, url] = match;\n const p0 = {\n start: from,\n end: from + 1,\n };\n\n const p1 = {\n start: from + 1,\n end: from + 1 + label.length,\n };\n\n const p2 = {\n start: p1.end,\n end: p1.end + 1,\n };\n\n const p3 = {\n start: p1.end + 1,\n end: p1.end + 1 + url.length + 2,\n };\n\n // TODO(burdon): Wrap with tagName?\n add(p0.start, p0.end, Decoration.mark({ class: 'cm-hyperlink-bracket' }));\n add(p1.start, p1.end, Decoration.mark({ class: 'cm-hyperlink-label' }));\n add(p2.start, p2.end, Decoration.mark({ class: 'cm-hyperlink-bracket' }));\n add(p3.start, p3.end, Decoration.mark({ class: 'cm-hyperlink-url', __attributes: { style: 'display: none' } }));\n },\n });\n\n// const anchor = (dom: HTMLAnchorElement) => dom;\n\nexport function hyperLinkExtension() {\n return ViewPlugin.fromClass(\n class HyperLinkView {\n readonly decorator: MatchDecorator;\n decorations: DecorationSet;\n constructor(view: EditorView) {\n this.decorator = linkDecorator();\n this.decorations = this.decorator.createDeco(view);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.viewportChanged) {\n this.decorations = this.decorator.updateDeco(update, this.decorations);\n }\n }\n },\n {\n decorations: (view) => view.decorations,\n eventHandlers: {\n // TODO(burdon): CLick to expand link.\n // https://discuss.codemirror.net/t/decorator-iteration-on-click-event/4226/2\n mousedown: function (event, view) {\n const pos = view.posAtDOM(event.target as Node);\n if (pos !== 0) {\n console.log(this);\n }\n },\n // TODO(burdon): Hide when cursor moves away.\n keydown: (event, view) => {\n view.update([]);\n },\n },\n },\n );\n}\n\nexport const hyperLinkStyle = EditorView.baseTheme({\n '.cm-hyperlink-label': {\n cursor: 'pointer',\n textDecoration: 'underline',\n },\n '.cm-hyperlink-bracket': {\n opacity: 0.2,\n },\n '.cm-hyperlink-url': {\n opacity: 0.5,\n fontFamily: 'monospace',\n },\n});\n\nexport const hyperlink: Extension = [hyperLinkExtension(), hyperLinkStyle];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { hoverTooltip } from '@codemirror/view';\nimport { ArrowCircleUp } from '@phosphor-icons/react';\nimport React, { StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { getSize, mx, tooltipContent } from '@dxos/react-ui-theme';\n\nconst markdownLinkRegexp = /\\[([^\\]]+)]\\(([^)]+)\\)/;\n\nexport type OnHyperlinkHover = (el: Element, url: string) => void;\n\n/**\n * https://codemirror.net/examples/tooltip\n * https://codemirror.net/docs/ref/#view.hoverTooltip\n * https://github.com/codemirror/view/blob/main/src/tooltip.ts\n */\nexport const createHyperlinkTooltip = (onHover: OnHyperlinkHover, regexp = markdownLinkRegexp) =>\n hoverTooltip((view, pos) => {\n const { from, text } = view.state.doc.lineAt(pos);\n const p = pos - from;\n\n let idx = 0;\n let match;\n do {\n match = text.substring(idx).match(regexp);\n if (!match) {\n match = undefined;\n break;\n }\n\n idx = text.indexOf(match[0]);\n if (p >= idx && p < idx + match[0].length) {\n break;\n }\n\n idx += match[0].length;\n } while (true);\n\n if (!match) {\n return null;\n }\n\n const [, , url] = match ?? [];\n\n return {\n pos: idx + from,\n end: idx + from + match[0].length,\n above: true,\n create: () => {\n const el = document.createElement('a');\n el.innerText = '_'; // Required so doesn't collapse.\n el.className = tooltipContent({}, 'mb-2 p-1');\n el.setAttribute('target', '_blank');\n el.setAttribute('href', url);\n onHover(el, url);\n return { dom: el };\n },\n };\n });\n\n// TODO(burdon): Factor out (remove theme/icon deps)?\nexport const defaultHyperLinkTooltip = createHyperlinkTooltip((el, url) => {\n const web = new URL(url);\n createRoot(el).render(\n <StrictMode>\n <div className='flex gap-1 items-center'>\n <ArrowCircleUp className={mx(getSize(6), 'text-blue-500')} />\n <p className='pr-1'>{web.origin}</p>\n </div>\n </StrictMode>,\n );\n});\n", "//\n// Copyright 2022 DXOS.org\n//\n\nexport * from './components';\nexport * from './model';\n\nexport { TextKind } from '@dxos/protocols/proto/dxos/echo/model/text';\nexport { Doc, YText, YXmlFragment } from '@dxos/text-model';\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "forwardRef", "memo", "YXmlFragment", "useMemo", "random", "cursorColors", "color", "light", "cursorColor", "uint32", "length", "decoding", "encoding", "Observable", "awarenessProtocol", "log", "messageAwareness", "messageQueryAwareness", "SpaceAwarenessProvider", "constructor", "space", "doc", "channel", "awareness", "_space", "_awareness", "Awareness", "_channel", "_clientId", "clientID", "on", "_handleAwarenessUpdate", "bind", "listen", "_handleSpaceMessage", "window", "addEventListener", "_handleBeforeUnload", "process", "encoderAwarenessQuery", "createEncoder", "writeVarUint", "postMessage", "toUint8Array", "encoderAwarenessState", "writeVarUint8Array", "encodeAwarenessUpdate", "added", "updated", "removed", "origin", "changedClients", "concat", "encoderAwareness", "payload", "data", "Uint8Array", "Array", "from", "Object", "values", "encoder", "_readMessage", "message", "decoder", "createDecoder", "messageType", "readVarUint", "sendReply", "applyAwarenessUpdate", "readVarUint8Array", "getStates", "keys", "console", "error", "removeAwarenessStates", "useTextModel", "identity", "space", "text", "provider", "useMemo", "doc", "undefined", "SpaceAwarenessProvider", "channel", "id", "content", "guid", "peer", "identityKey", "toHex", "name", "profile", "displayName", "autocompletion", "completionKeymap", "closeBrackets", "closeBracketsKeymap", "defaultKeymap", "history", "historyKeymap", "indentWithTab", "markdown", "markdownLanguage", "bracketMatching", "defaultHighlightStyle", "foldKeymap", "indentOnInput", "syntaxHighlighting", "languages", "lintKeymap", "searchKeymap", "highlightSelectionMatches", "EditorState", "StateField", "oneDarkHighlightStyle", "keymap", "crosshairCursor", "drawSelection", "dropCursor", "highlightActiveLine", "highlightActiveLineGutter", "highlightSpecialChars", "placeholder", "rectangularSelection", "EditorView", "useFocusableGroup", "vim", "React", "forwardRef", "useEffect", "useImperativeHandle", "useState", "useMemo", "useCallback", "yCollab", "generateName", "useThemeContext", "getColorForValue", "YText", "styleTags", "Tag", "markdownTags", "headingMark", "Tag", "define", "quoteMark", "listMark", "linkMark", "emphasisMark", "codeMark", "codeText", "inlineCode", "url", "linkReference", "linkLabel", "markdownTagsExtension", "props", "styleTags", "HeaderMark", "QuoteMark", "ListMark", "LinkMark", "EmphasisMark", "CodeMark", "CodeText", "InlineCode", "URL", "LinkReference", "LinkLabel", "markdownLanguage", "HighlightStyle", "tags", "get", "mx", "heading", "blockquote", "unorderedList", "orderedList", "listItem", "codeBlock", "horizontalRule", "paragraph", "bold", "code", "codeWithoutMarks", "mx", "code", "italic", "strikethrough", "mark", "tailwindConfig", "tokens", "tailwindConfig", "theme", "malibu", "cursor", "monospace", "get", "tokens", "join", "markdownTheme", "backgroundColor", "border", "outline", "paddingInline", "minBlockSize", "lineHeight", "background", "caretColor", "borderLeftColor", "fontFamily", "overflow", "padding", "marginBlockStart", "paddingBlockStart", "paddingBlockEnd", "mixBlendMode", "display", "insetBlockStart", "blockSize", "verticalAlign", "margin", "Object", "keys", "reduce", "acc", "fontSize", "height", "markdownDarkHighlighting", "HighlightStyle", "define", "tag", "tags", "keyword", "name", "deleted", "character", "propertyName", "macroName", "color", "constant", "standard", "definition", "separator", "typeName", "className", "number", "changed", "annotation", "modifier", "self", "namespace", "operator", "operatorKeyword", "escape", "regexp", "special", "string", "meta", "comment", "atom", "bool", "variableName", "processingInstruction", "inserted", "invalid", "link", "url", "textDecoration", "function", "labelName", "malibu", "markdownTags", "codeMark", "emphasisMark", "headingMark", "linkLabel", "linkReference", "listMark", "quoteMark", "class", "mark", "codeText", "inlineCode", "emphasis", "italic", "heading1", "heading", "heading2", "heading3", "heading4", "heading5", "heading6", "strikethrough", "strong", "bold", "scope", "markdownLanguage", "all", "EditorModes", "MarkdownEditor", "forwardRef", "model", "slots", "editorMode", "extensions", "onChange", "forwardedRef", "id", "content", "provider", "peer", "themeMode", "useThemeContext", "tabsterDOMAttribute", "useFocusableGroup", "tabBehavior", "parent", "setParent", "useState", "state", "setState", "view", "setView", "useImperativeHandle", "editor", "listenChangesExtension", "useMemo", "StateField", "define", "create", "update", "_value", "transaction", "docChanged", "newDoc", "useEffect", "awareness", "setLocalStateField", "name", "generateName", "color", "getColorForValue", "value", "type", "colorLight", "EditorState", "doc", "toString", "vim", "highlightActiveLineGutter", "highlightSpecialChars", "history", "drawSelection", "dropCursor", "allowMultipleSelections", "of", "indentOnInput", "syntaxHighlighting", "defaultHighlightStyle", "fallback", "bracketMatching", "closeBrackets", "autocompletion", "rectangularSelection", "crosshairCursor", "highlightActiveLine", "highlightSelectionMatches", "placeholder", "keymap", "closeBracketsKeymap", "defaultKeymap", "searchKeymap", "historyKeymap", "foldKeymap", "completionKeymap", "lintKeymap", "indentWithTab", "EditorView", "lineWrapping", "markdown", "base", "markdownLanguage", "codeLanguages", "languages", "markdownTagsExtension", "theme", "markdownTheme", "oneDarkHighlightStyle", "markdownDarkHighlighting", "YText", "yCollab", "destroy", "undefined", "handleKeyUp", "useCallback", "event", "key", "altKey", "shiftKey", "metaKey", "ctrlKey", "contentDOM", "focus", "div", "tabIndex", "ref", "root", "onKeyUp", "mergeAttributes", "Collaboration", "CollaborationCursor", "Heading", "ListItem", "Placeholder", "EditorContent", "useEditor", "useNaturalEditor", "StarterKit", "React", "forwardRef", "useImperativeHandle", "useMemo", "generateName", "mx", "useEditor", "model", "placeholder", "slots", "extensions", "useMemo", "StarterKit", "configure", "history", "blockquote", "HTMLAttributes", "class", "bulletList", "unorderedList", "codeBlock", "heading", "horizontalRule", "listItem", "orderedList", "paragraph", "bold", "code", "codeWithoutMarks", "italic", "strike", "strikethrough", "Heading", "extend", "renderHTML", "node", "hasLevel", "options", "levels", "includes", "attrs", "level", "mergeAttributes", "ListItem", "marker", "role", "content", "Collaboration", "fragment", "provider", "CollaborationCursor", "user", "peer", "name", "generateName", "id", "color", "cursorColor", "Placeholder", "emptyEditorClass", "useNaturalEditor", "editorProps", "attributes", "mx", "editor", "className", "spellcheck", "spellCheck", "tabindex", "tabIndex", "String", "RichTextEditor", "forwardRef", "props", "ref", "useImperativeHandle", "React", "EditorContent", "root", "Editor", "memo", "forwardRef", "slots", "params", "forwardedRef", "model", "useTextModel", "content", "YXmlFragment", "React", "RichTextEditor", "ref", "MarkdownEditor", "tags", "closeBrackets", "bracketMatching", "defaultHighlightStyle", "syntaxHighlighting", "EditorState", "oneDarkHighlightStyle", "EditorView", "placeholder", "React", "forwardRef", "useEffect", "useImperativeHandle", "useState", "useCallback", "yCollab", "useThemeContext", "YText", "get", "tailwindConfig", "tokens", "tailwindConfig", "theme", "defaultStyles", "outline", "fontFamily", "get", "join", "overflow", "backgroundColor", "border", "TextEditor", "forwardRef", "model", "extensions", "theme", "defaultStyles", "slots", "onKeyDown", "props", "forwardedRef", "id", "content", "themeMode", "useThemeContext", "parent", "setParent", "useState", "state", "setState", "view", "setView", "useImperativeHandle", "editor", "useEffect", "destroy", "EditorState", "create", "doc", "toString", "bracketMatching", "closeBrackets", "placeholder", "EditorView", "lineWrapping", "syntaxHighlighting", "oneDarkHighlightStyle", "defaultHighlightStyle", "YText", "yCollab", "undefined", "handleKeyDown", "useCallback", "event", "head", "from", "to", "selection", "ranges", "number", "lineAt", "after", "sliceDoc", "line", "lines", "React", "div", "key", "ref", "root", "Decoration", "EditorView", "MatchDecorator", "ViewPlugin", "markdownLinkRegexp", "linkDecorator", "MatchDecorator", "regexp", "decorate", "add", "from", "to", "match", "view", "_", "label", "url", "p0", "start", "end", "p1", "length", "p2", "p3", "Decoration", "mark", "class", "__attributes", "style", "hyperLinkExtension", "ViewPlugin", "fromClass", "HyperLinkView", "constructor", "decorator", "decorations", "createDeco", "update", "docChanged", "viewportChanged", "updateDeco", "eventHandlers", "mousedown", "event", "pos", "posAtDOM", "target", "console", "log", "keydown", "hyperLinkStyle", "EditorView", "baseTheme", "cursor", "textDecoration", "opacity", "fontFamily", "hyperlink", "hoverTooltip", "ArrowCircleUp", "React", "StrictMode", "createRoot", "getSize", "mx", "tooltipContent", "markdownLinkRegexp", "createHyperlinkTooltip", "onHover", "regexp", "hoverTooltip", "view", "pos", "from", "text", "state", "doc", "lineAt", "p", "idx", "match", "substring", "undefined", "indexOf", "length", "url", "end", "above", "create", "el", "document", "createElement", "innerText", "className", "tooltipContent", "setAttribute", "dom", "defaultHyperLinkTooltip", "web", "URL", "createRoot", "render", "React", "StrictMode", "div", "ArrowCircleUp", "mx", "getSize", "origin", "TextKind", "Doc", "YText", "YXmlFragment"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/ui/react-ui-editor/src/yjs/cursors.ts":{"bytes":2630,"imports":[{"path":"lib0/random","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/yjs/space-provider.ts":{"bytes":15633,"imports":[{"path":"lib0/decoding","kind":"import-statement","external":true},{"path":"lib0/encoding","kind":"import-statement","external":true},{"path":"lib0/observable","kind":"import-statement","external":true},{"path":"y-protocols/awareness","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/yjs/index.ts":{"bytes":576,"imports":[{"path":"packages/ui/react-ui-editor/src/yjs/cursors.ts","kind":"import-statement","original":"./cursors"},{"path":"packages/ui/react-ui-editor/src/yjs/space-provider.ts","kind":"import-statement","original":"./space-provider"}],"format":"esm"},"packages/ui/react-ui-editor/src/model.ts":{"bytes":5003,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/yjs/index.ts","kind":"import-statement","original":"./yjs"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Markdown/markdownTags.ts":{"bytes":4139,"imports":[{"path":"@lezer/highlight","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/styles/markdown.ts":{"bytes":5365,"imports":[{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/styles/tokens.ts":{"bytes":1040,"imports":[{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/styles/index.ts":{"bytes":560,"imports":[{"path":"packages/ui/react-ui-editor/src/styles/markdown.ts","kind":"import-statement","original":"./markdown"},{"path":"packages/ui/react-ui-editor/src/styles/tokens.ts","kind":"import-statement","original":"./tokens"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Markdown/markdownTheme.ts":{"bytes":27809,"imports":[{"path":"@codemirror/lang-markdown","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@lezer/highlight","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/components/Markdown/markdownTags.ts","kind":"import-statement","original":"./markdownTags"},{"path":"packages/ui/react-ui-editor/src/styles/index.ts","kind":"import-statement","original":"../../styles"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Markdown/Markdown.tsx":{"bytes":23477,"imports":[{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/commands","kind":"import-statement","external":true},{"path":"@codemirror/lang-markdown","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@codemirror/language-data","kind":"import-statement","external":true},{"path":"@codemirror/lint","kind":"import-statement","external":true},{"path":"@codemirror/search","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/theme-one-dark","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@replit/codemirror-vim","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"y-codemirror.next","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/components/Markdown/markdownTags.ts","kind":"import-statement","original":"./markdownTags"},{"path":"packages/ui/react-ui-editor/src/components/Markdown/markdownTheme.ts","kind":"import-statement","original":"./markdownTheme"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Markdown/index.ts":{"bytes":487,"imports":[{"path":"packages/ui/react-ui-editor/src/components/Markdown/Markdown.tsx","kind":"import-statement","original":"./Markdown"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/RichText/RichText.tsx":{"bytes":17944,"imports":[{"path":"@tiptap/core","kind":"import-statement","external":true},{"path":"@tiptap/extension-collaboration","kind":"import-statement","external":true},{"path":"@tiptap/extension-collaboration-cursor","kind":"import-statement","external":true},{"path":"@tiptap/extension-heading","kind":"import-statement","external":true},{"path":"@tiptap/extension-list-item","kind":"import-statement","external":true},{"path":"@tiptap/extension-placeholder","kind":"import-statement","external":true},{"path":"@tiptap/react","kind":"import-statement","external":true},{"path":"@tiptap/starter-kit","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/styles/index.ts","kind":"import-statement","original":"../../styles"},{"path":"packages/ui/react-ui-editor/src/yjs/index.ts","kind":"import-statement","original":"../../yjs"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/RichText/index.ts":{"bytes":487,"imports":[{"path":"packages/ui/react-ui-editor/src/components/RichText/RichText.tsx","kind":"import-statement","original":"./RichText"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Editor/Editor.tsx":{"bytes":3802,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/model.ts","kind":"import-statement","original":"../../model"},{"path":"packages/ui/react-ui-editor/src/components/Markdown/index.ts","kind":"import-statement","original":"../Markdown"},{"path":"packages/ui/react-ui-editor/src/components/RichText/index.ts","kind":"import-statement","original":"../RichText"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Editor/index.ts":{"bytes":483,"imports":[{"path":"packages/ui/react-ui-editor/src/components/Editor/Editor.tsx","kind":"import-statement","original":"./Editor"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/theme.ts":{"bytes":2784,"imports":[{"path":"lodash.get","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx":{"bytes":11705,"imports":[{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/theme-one-dark","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"y-codemirror.next","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/theme.ts","kind":"import-statement","original":"./theme"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlink.tsx":{"bytes":11402,"imports":[{"path":"@codemirror/view","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlinkTooltip.tsx":{"bytes":5790,"imports":[{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/index.ts":{"bytes":613,"imports":[{"path":"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlink.tsx","kind":"import-statement","original":"./hyperlink"},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlinkTooltip.tsx","kind":"import-statement","original":"./hyperlinkTooltip"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/index.ts":{"bytes":879,"imports":[{"path":"@lezer/highlight","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx","kind":"import-statement","original":"./TextEditor"},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/extensions/index.ts","kind":"import-statement","original":"./extensions"},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/theme.ts","kind":"import-statement","original":"./theme"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/index.ts":{"bytes":742,"imports":[{"path":"packages/ui/react-ui-editor/src/components/Editor/index.ts","kind":"import-statement","original":"./Editor"},{"path":"packages/ui/react-ui-editor/src/components/Markdown/index.ts","kind":"import-statement","original":"./Markdown"},{"path":"packages/ui/react-ui-editor/src/components/RichText/index.ts","kind":"import-statement","original":"./RichText"},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/index.ts","kind":"import-statement","original":"./TextEditor"}],"format":"esm"},"packages/ui/react-ui-editor/src/index.ts":{"bytes":1026,"imports":[{"path":"packages/ui/react-ui-editor/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-editor/src/model.ts","kind":"import-statement","original":"./model"},{"path":"@dxos/protocols/proto/dxos/echo/model/text","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"packages/ui/react-ui-editor/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":68960},"packages/ui/react-ui-editor/dist/lib/browser/index.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"lib0/random","kind":"import-statement","external":true},{"path":"lib0/decoding","kind":"import-statement","external":true},{"path":"lib0/encoding","kind":"import-statement","external":true},{"path":"lib0/observable","kind":"import-statement","external":true},{"path":"y-protocols/awareness","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/commands","kind":"import-statement","external":true},{"path":"@codemirror/lang-markdown","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@codemirror/language-data","kind":"import-statement","external":true},{"path":"@codemirror/lint","kind":"import-statement","external":true},{"path":"@codemirror/search","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/theme-one-dark","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@replit/codemirror-vim","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"y-codemirror.next","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"@lezer/highlight","kind":"import-statement","external":true},{"path":"@codemirror/lang-markdown","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@lezer/highlight","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@tiptap/core","kind":"import-statement","external":true},{"path":"@tiptap/extension-collaboration","kind":"import-statement","external":true},{"path":"@tiptap/extension-collaboration-cursor","kind":"import-statement","external":true},{"path":"@tiptap/extension-heading","kind":"import-statement","external":true},{"path":"@tiptap/extension-list-item","kind":"import-statement","external":true},{"path":"@tiptap/extension-placeholder","kind":"import-statement","external":true},{"path":"@tiptap/react","kind":"import-statement","external":true},{"path":"@tiptap/starter-kit","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@lezer/highlight","kind":"import-statement","external":true},{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/theme-one-dark","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"y-codemirror.next","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/model/text","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true}],"exports":["Doc","Editor","EditorModes","MarkdownEditor","RichTextEditor","TextEditor","TextKind","YText","YXmlFragment","createHyperlinkTooltip","defaultStyles","hyperLinkExtension","hyperLinkStyle","hyperlink","tags","useTextModel"],"entryPoint":"packages/ui/react-ui-editor/src/index.ts","inputs":{"packages/ui/react-ui-editor/src/components/Editor/Editor.tsx":{"bytesInOutput":572},"packages/ui/react-ui-editor/src/model.ts":{"bytesInOutput":619},"packages/ui/react-ui-editor/src/yjs/cursors.ts":{"bytesInOutput":565},"packages/ui/react-ui-editor/src/yjs/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/yjs/space-provider.ts":{"bytesInOutput":3760},"packages/ui/react-ui-editor/src/components/Markdown/Markdown.tsx":{"bytesInOutput":5724},"packages/ui/react-ui-editor/src/components/Markdown/markdownTags.ts":{"bytesInOutput":891},"packages/ui/react-ui-editor/src/components/Markdown/markdownTheme.ts":{"bytesInOutput":6851},"packages/ui/react-ui-editor/src/styles/markdown.ts":{"bytesInOutput":1297},"packages/ui/react-ui-editor/src/styles/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/styles/tokens.ts":{"bytesInOutput":94},"packages/ui/react-ui-editor/src/components/Markdown/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/components/RichText/RichText.tsx":{"bytesInOutput":3963},"packages/ui/react-ui-editor/src/components/RichText/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/components/Editor/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/components/TextEditor/index.ts":{"bytesInOutput":50},"packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx":{"bytesInOutput":2858},"packages/ui/react-ui-editor/src/components/TextEditor/theme.ts":{"bytesInOutput":500},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlink.tsx":{"bytesInOutput":2243},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlinkTooltip.tsx":{"bytesInOutput":1085},"packages/ui/react-ui-editor/src/index.ts":{"bytesInOutput":159}},"bytes":32911}}}
1
+ {"inputs":{"packages/ui/react-ui-editor/src/yjs/cursors.ts":{"bytes":2630,"imports":[{"path":"lib0/random","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/yjs/space-provider.ts":{"bytes":15633,"imports":[{"path":"lib0/decoding","kind":"import-statement","external":true},{"path":"lib0/encoding","kind":"import-statement","external":true},{"path":"lib0/observable","kind":"import-statement","external":true},{"path":"y-protocols/awareness","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/yjs/index.ts":{"bytes":576,"imports":[{"path":"packages/ui/react-ui-editor/src/yjs/cursors.ts","kind":"import-statement","original":"./cursors"},{"path":"packages/ui/react-ui-editor/src/yjs/space-provider.ts","kind":"import-statement","original":"./space-provider"}],"format":"esm"},"packages/ui/react-ui-editor/src/model.ts":{"bytes":5003,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/yjs/index.ts","kind":"import-statement","original":"./yjs"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Markdown/markdownTags.ts":{"bytes":4139,"imports":[{"path":"@lezer/highlight","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/styles/markdown.ts":{"bytes":5365,"imports":[{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/styles/tokens.ts":{"bytes":1040,"imports":[{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/styles/index.ts":{"bytes":560,"imports":[{"path":"packages/ui/react-ui-editor/src/styles/markdown.ts","kind":"import-statement","original":"./markdown"},{"path":"packages/ui/react-ui-editor/src/styles/tokens.ts","kind":"import-statement","original":"./tokens"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Markdown/markdownTheme.ts":{"bytes":27809,"imports":[{"path":"@codemirror/lang-markdown","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@lezer/highlight","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/components/Markdown/markdownTags.ts","kind":"import-statement","original":"./markdownTags"},{"path":"packages/ui/react-ui-editor/src/styles/index.ts","kind":"import-statement","original":"../../styles"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Markdown/Markdown.tsx":{"bytes":23477,"imports":[{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/commands","kind":"import-statement","external":true},{"path":"@codemirror/lang-markdown","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@codemirror/language-data","kind":"import-statement","external":true},{"path":"@codemirror/lint","kind":"import-statement","external":true},{"path":"@codemirror/search","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/theme-one-dark","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@replit/codemirror-vim","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"y-codemirror.next","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/components/Markdown/markdownTags.ts","kind":"import-statement","original":"./markdownTags"},{"path":"packages/ui/react-ui-editor/src/components/Markdown/markdownTheme.ts","kind":"import-statement","original":"./markdownTheme"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Markdown/index.ts":{"bytes":487,"imports":[{"path":"packages/ui/react-ui-editor/src/components/Markdown/Markdown.tsx","kind":"import-statement","original":"./Markdown"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/RichText/RichText.tsx":{"bytes":17944,"imports":[{"path":"@tiptap/core","kind":"import-statement","external":true},{"path":"@tiptap/extension-collaboration","kind":"import-statement","external":true},{"path":"@tiptap/extension-collaboration-cursor","kind":"import-statement","external":true},{"path":"@tiptap/extension-heading","kind":"import-statement","external":true},{"path":"@tiptap/extension-list-item","kind":"import-statement","external":true},{"path":"@tiptap/extension-placeholder","kind":"import-statement","external":true},{"path":"@tiptap/react","kind":"import-statement","external":true},{"path":"@tiptap/starter-kit","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/styles/index.ts","kind":"import-statement","original":"../../styles"},{"path":"packages/ui/react-ui-editor/src/yjs/index.ts","kind":"import-statement","original":"../../yjs"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/RichText/index.ts":{"bytes":487,"imports":[{"path":"packages/ui/react-ui-editor/src/components/RichText/RichText.tsx","kind":"import-statement","original":"./RichText"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Editor/Editor.tsx":{"bytes":3802,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/model.ts","kind":"import-statement","original":"../../model"},{"path":"packages/ui/react-ui-editor/src/components/Markdown/index.ts","kind":"import-statement","original":"../Markdown"},{"path":"packages/ui/react-ui-editor/src/components/RichText/index.ts","kind":"import-statement","original":"../RichText"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/Editor/index.ts":{"bytes":483,"imports":[{"path":"packages/ui/react-ui-editor/src/components/Editor/Editor.tsx","kind":"import-statement","original":"./Editor"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/theme.ts":{"bytes":2784,"imports":[{"path":"lodash.get","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx":{"bytes":11705,"imports":[{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/theme-one-dark","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"y-codemirror.next","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/theme.ts","kind":"import-statement","original":"./theme"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlink.tsx":{"bytes":11402,"imports":[{"path":"@codemirror/view","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlinkTooltip.tsx":{"bytes":7908,"imports":[{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom/client","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/index.ts":{"bytes":613,"imports":[{"path":"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlink.tsx","kind":"import-statement","original":"./hyperlink"},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlinkTooltip.tsx","kind":"import-statement","original":"./hyperlinkTooltip"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/TextEditor/index.ts":{"bytes":879,"imports":[{"path":"@lezer/highlight","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx","kind":"import-statement","original":"./TextEditor"},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/extensions/index.ts","kind":"import-statement","original":"./extensions"},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/theme.ts","kind":"import-statement","original":"./theme"}],"format":"esm"},"packages/ui/react-ui-editor/src/components/index.ts":{"bytes":742,"imports":[{"path":"packages/ui/react-ui-editor/src/components/Editor/index.ts","kind":"import-statement","original":"./Editor"},{"path":"packages/ui/react-ui-editor/src/components/Markdown/index.ts","kind":"import-statement","original":"./Markdown"},{"path":"packages/ui/react-ui-editor/src/components/RichText/index.ts","kind":"import-statement","original":"./RichText"},{"path":"packages/ui/react-ui-editor/src/components/TextEditor/index.ts","kind":"import-statement","original":"./TextEditor"}],"format":"esm"},"packages/ui/react-ui-editor/src/index.ts":{"bytes":1026,"imports":[{"path":"packages/ui/react-ui-editor/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-editor/src/model.ts","kind":"import-statement","original":"./model"},{"path":"@dxos/protocols/proto/dxos/echo/model/text","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"packages/ui/react-ui-editor/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":70158},"packages/ui/react-ui-editor/dist/lib/browser/index.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"lib0/random","kind":"import-statement","external":true},{"path":"lib0/decoding","kind":"import-statement","external":true},{"path":"lib0/encoding","kind":"import-statement","external":true},{"path":"lib0/observable","kind":"import-statement","external":true},{"path":"y-protocols/awareness","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/commands","kind":"import-statement","external":true},{"path":"@codemirror/lang-markdown","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@codemirror/language-data","kind":"import-statement","external":true},{"path":"@codemirror/lint","kind":"import-statement","external":true},{"path":"@codemirror/search","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/theme-one-dark","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@replit/codemirror-vim","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"y-codemirror.next","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"@lezer/highlight","kind":"import-statement","external":true},{"path":"@codemirror/lang-markdown","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@lezer/highlight","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@tiptap/core","kind":"import-statement","external":true},{"path":"@tiptap/extension-collaboration","kind":"import-statement","external":true},{"path":"@tiptap/extension-collaboration-cursor","kind":"import-statement","external":true},{"path":"@tiptap/extension-heading","kind":"import-statement","external":true},{"path":"@tiptap/extension-list-item","kind":"import-statement","external":true},{"path":"@tiptap/extension-placeholder","kind":"import-statement","external":true},{"path":"@tiptap/react","kind":"import-statement","external":true},{"path":"@tiptap/starter-kit","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@lezer/highlight","kind":"import-statement","external":true},{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/language","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/theme-one-dark","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"y-codemirror.next","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom/client","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/model/text","kind":"import-statement","external":true},{"path":"@dxos/text-model","kind":"import-statement","external":true}],"exports":["Doc","Editor","EditorModes","MarkdownEditor","RichTextEditor","TextEditor","TextKind","YText","YXmlFragment","createHyperlinkTooltip","defaultHyperLinkTooltip","defaultStyles","hyperLinkExtension","hyperLinkStyle","hyperlink","tags","useTextModel"],"entryPoint":"packages/ui/react-ui-editor/src/index.ts","inputs":{"packages/ui/react-ui-editor/src/components/Editor/Editor.tsx":{"bytesInOutput":572},"packages/ui/react-ui-editor/src/model.ts":{"bytesInOutput":619},"packages/ui/react-ui-editor/src/yjs/cursors.ts":{"bytesInOutput":565},"packages/ui/react-ui-editor/src/yjs/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/yjs/space-provider.ts":{"bytesInOutput":3760},"packages/ui/react-ui-editor/src/components/Markdown/Markdown.tsx":{"bytesInOutput":5724},"packages/ui/react-ui-editor/src/components/Markdown/markdownTags.ts":{"bytesInOutput":891},"packages/ui/react-ui-editor/src/components/Markdown/markdownTheme.ts":{"bytesInOutput":6851},"packages/ui/react-ui-editor/src/styles/markdown.ts":{"bytesInOutput":1297},"packages/ui/react-ui-editor/src/styles/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/styles/tokens.ts":{"bytesInOutput":94},"packages/ui/react-ui-editor/src/components/Markdown/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/components/RichText/RichText.tsx":{"bytesInOutput":3963},"packages/ui/react-ui-editor/src/components/RichText/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/components/Editor/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/components/TextEditor/index.ts":{"bytesInOutput":50},"packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx":{"bytesInOutput":2858},"packages/ui/react-ui-editor/src/components/TextEditor/theme.ts":{"bytesInOutput":500},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlink.tsx":{"bytesInOutput":2243},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-editor/src/components/TextEditor/extensions/hyperlinkTooltip.tsx":{"bytesInOutput":1717},"packages/ui/react-ui-editor/src/index.ts":{"bytesInOutput":159}},"bytes":33570}}}
@@ -14,7 +14,6 @@ export declare const promptLanguage: StreamLanguage<{
14
14
  * https://lezer.codemirror.net/docs/ref/#highlight
15
15
  */
16
16
  export declare const promptHighlightStyles: HighlightStyle;
17
- export declare const defaultHyperLinkTooltip: import("@codemirror/state").Extension;
18
17
  declare const _default: {
19
18
  component: React.ForwardRefExoticComponent<{
20
19
  model?: import("../../model").EditorModel | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditor.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/TextEditor/TextEditor.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtE,OAAO,KAA+B,MAAM,OAAO,CAAC;AAWpD,eAAO,MAAM,SAAS,QAAgB,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,cAAc;WAAkC,MAAM;EAcjE,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,qBAAqB,gBAShC,CAAC;AAEH,eAAO,MAAM,uBAAuB,uCAUlC,CAAC;;;;;;;;;;;;;;AAuBH,wBAIE;AAEF,eAAO,MAAM,OAAO,IAAK,CAAC"}
1
+ {"version":3,"file":"TextEditor.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/TextEditor/TextEditor.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAUxC,eAAO,MAAM,SAAS,QAAgB,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,cAAc;WAAkC,MAAM;EAcjE,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,qBAAqB,gBAShC,CAAC;;;;;;;;;;;;;;AAuBH,wBAIE;AAEF,eAAO,MAAM,OAAO,IAAK,CAAC"}
@@ -5,4 +5,5 @@ export type OnHyperlinkHover = (el: Element, url: string) => void;
5
5
  * https://github.com/codemirror/view/blob/main/src/tooltip.ts
6
6
  */
7
7
  export declare const createHyperlinkTooltip: (onHover: OnHyperlinkHover, regexp?: RegExp) => import("@codemirror/state").Extension;
8
+ export declare const defaultHyperLinkTooltip: import("@codemirror/state").Extension;
8
9
  //# sourceMappingURL=hyperlinkTooltip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hyperlinkTooltip.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/hyperlinkTooltip.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YAAa,gBAAgB,2DA0C5D,CAAC"}
1
+ {"version":3,"file":"hyperlinkTooltip.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/hyperlinkTooltip.tsx"],"names":[],"mappings":"AAaA,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YAAa,gBAAgB,2DA0C5D,CAAC;AAGL,eAAO,MAAM,uBAAuB,uCAUlC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-ui-editor",
3
- "version": "0.3.9-main.7b9e2ad",
3
+ "version": "0.3.9-main.8045d90",
4
4
  "description": "Document editing experience within a DXOS shell.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -27,6 +27,7 @@
27
27
  "@lezer/common": "^1.1.1",
28
28
  "@lezer/highlight": "^1.2.0",
29
29
  "@lezer/markdown": "^1.1.1",
30
+ "@phosphor-icons/react": "^2.0.5",
30
31
  "@replit/codemirror-vim": "^6.0.14",
31
32
  "@tiptap/core": "2.0.0-beta.220",
32
33
  "@tiptap/extension-collaboration": "2.0.0-beta.220",
@@ -48,37 +49,36 @@
48
49
  "y-prosemirror": "~1.0.20",
49
50
  "y-protocols": "^1.0.5",
50
51
  "yjs": "^13.6.10",
51
- "@dxos/debug": "0.3.9-main.7b9e2ad",
52
- "@dxos/display-name": "0.3.9-main.7b9e2ad",
53
- "@dxos/log": "0.3.9-main.7b9e2ad",
54
- "@dxos/protocols": "0.3.9-main.7b9e2ad",
55
- "@dxos/react-async": "0.3.9-main.7b9e2ad",
56
- "@dxos/react-ui": "0.3.9-main.7b9e2ad",
57
- "@dxos/react-ui-theme": "0.3.9-main.7b9e2ad",
58
- "@dxos/text-model": "0.3.9-main.7b9e2ad",
59
- "@dxos/util": "0.3.9-main.7b9e2ad"
52
+ "@dxos/debug": "0.3.9-main.8045d90",
53
+ "@dxos/log": "0.3.9-main.8045d90",
54
+ "@dxos/display-name": "0.3.9-main.8045d90",
55
+ "@dxos/protocols": "0.3.9-main.8045d90",
56
+ "@dxos/react-async": "0.3.9-main.8045d90",
57
+ "@dxos/react-ui-theme": "0.3.9-main.8045d90",
58
+ "@dxos/react-ui": "0.3.9-main.8045d90",
59
+ "@dxos/text-model": "0.3.9-main.8045d90",
60
+ "@dxos/util": "0.3.9-main.8045d90"
60
61
  },
61
62
  "devDependencies": {
62
63
  "@codemirror/basic-setup": "^0.20.0",
63
- "@phosphor-icons/react": "^2.0.5",
64
64
  "@types/codemirror": "^5.60.14",
65
65
  "@types/lodash.get": "^4.4.7",
66
66
  "@types/react": "^18.0.21",
67
67
  "@types/react-dom": "^18.0.6",
68
68
  "react": "^18.2.0",
69
69
  "react-dom": "^18.2.0",
70
- "@dxos/automerge": "0.3.9-main.7b9e2ad",
71
- "@dxos/config": "0.3.9-main.7b9e2ad",
72
- "@dxos/echo-schema": "0.3.9-main.7b9e2ad",
73
- "@dxos/echo-typegen": "0.3.9-main.7b9e2ad",
74
- "@dxos/react-client": "0.3.9-main.7b9e2ad",
75
- "@dxos/storybook-utils": "0.3.9-main.7b9e2ad"
70
+ "@dxos/automerge": "0.3.9-main.8045d90",
71
+ "@dxos/echo-schema": "0.3.9-main.8045d90",
72
+ "@dxos/config": "0.3.9-main.8045d90",
73
+ "@dxos/echo-typegen": "0.3.9-main.8045d90",
74
+ "@dxos/react-client": "0.3.9-main.8045d90",
75
+ "@dxos/storybook-utils": "0.3.9-main.8045d90"
76
76
  },
77
77
  "peerDependencies": {
78
78
  "@phosphor-icons/react": "^2.0.5",
79
79
  "react": "^18.2.0",
80
80
  "react-dom": "^18.2.0",
81
- "@dxos/react-client": "0.3.9-main.7b9e2ad"
81
+ "@dxos/react-client": "0.3.9-main.8045d90"
82
82
  },
83
83
  "publishConfig": {
84
84
  "access": "public"
@@ -6,16 +6,14 @@ import '@dxosTheme';
6
6
 
7
7
  import { HighlightStyle, StreamLanguage } from '@codemirror/language';
8
8
  import { tags } from '@lezer/highlight';
9
- import { ArrowCircleUp } from '@phosphor-icons/react';
10
- import React, { StrictMode, useState } from 'react';
11
- import { createRoot } from 'react-dom/client';
9
+ import React, { useState } from 'react';
12
10
 
13
11
  import { TextObject } from '@dxos/echo-schema';
14
- import { fixedInsetFlexLayout, getSize, groupSurface, inputSurface, mx } from '@dxos/react-ui-theme';
12
+ import { fixedInsetFlexLayout, groupSurface, inputSurface, mx } from '@dxos/react-ui-theme';
15
13
  import { withTheme } from '@dxos/storybook-utils';
16
14
 
17
15
  import { TextEditor } from './TextEditor';
18
- import { createHyperlinkTooltip, hyperlink } from './extensions';
16
+ import { defaultHyperLinkTooltip, hyperlink } from './extensions';
19
17
  import { useTextModel } from '../../model';
20
18
 
21
19
  export const nameRegex = /\{([\w_]+)}/;
@@ -55,18 +53,6 @@ export const promptHighlightStyles = HighlightStyle.define([
55
53
  },
56
54
  ]);
57
55
 
58
- export const defaultHyperLinkTooltip = createHyperlinkTooltip((el, url) => {
59
- const web = new URL(url);
60
- createRoot(el).render(
61
- <StrictMode>
62
- <div className='flex gap-1 items-center'>
63
- <ArrowCircleUp className={mx(getSize(6), 'text-blue-500')} />
64
- <p className='pr-1'>{web.origin}</p>
65
- </div>
66
- </StrictMode>,
67
- );
68
- });
69
-
70
56
  const Story = () => {
71
57
  const [item] = useState({
72
58
  text: new TextObject(
@@ -3,8 +3,11 @@
3
3
  //
4
4
 
5
5
  import { hoverTooltip } from '@codemirror/view';
6
+ import { ArrowCircleUp } from '@phosphor-icons/react';
7
+ import React, { StrictMode } from 'react';
8
+ import { createRoot } from 'react-dom/client';
6
9
 
7
- import { tooltipContent } from '@dxos/react-ui-theme';
10
+ import { getSize, mx, tooltipContent } from '@dxos/react-ui-theme';
8
11
 
9
12
  const markdownLinkRegexp = /\[([^\]]+)]\(([^)]+)\)/;
10
13
 
@@ -58,3 +61,16 @@ export const createHyperlinkTooltip = (onHover: OnHyperlinkHover, regexp = markd
58
61
  },
59
62
  };
60
63
  });
64
+
65
+ // TODO(burdon): Factor out (remove theme/icon deps)?
66
+ export const defaultHyperLinkTooltip = createHyperlinkTooltip((el, url) => {
67
+ const web = new URL(url);
68
+ createRoot(el).render(
69
+ <StrictMode>
70
+ <div className='flex gap-1 items-center'>
71
+ <ArrowCircleUp className={mx(getSize(6), 'text-blue-500')} />
72
+ <p className='pr-1'>{web.origin}</p>
73
+ </div>
74
+ </StrictMode>,
75
+ );
76
+ });