@coze-editor/react-components 0.1.0-alpha.0fd19e

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/cursor-mirror/index.tsx","../src/position-mirror/index.tsx","../src/cursor-inlay-hint/index.tsx","../src/markers/markers.tsx","../src/markers/diagnostic-markers.tsx","../src/gutter/gutter.tsx","../src/gutter/right-gutter.ts","../src/gutter/atoms.ts","../src/fold-gutter/index.tsx","../src/placeholder/index.tsx","../src/ref-element/index.tsx","../src/line-widget/index.tsx","../src/line-widget/cursor-widget/state.ts","../src/line-widget/cursor-widget/widget-decoration.ts","../src/line-widget/cursor-widget/common.ts","../src/line-widget/cursor-widget/index.ts","../src/diff-view/index.tsx","../src/diff-view/extension.ts","../src/mention/extension.ts","../src/mention/is.ts","../src/mention/react.tsx","../src/embeded-line-view/react.tsx"],"sourcesContent":["// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nexport { CursorMirror, SelectionSide } from './cursor-mirror';\n\nexport { PositionMirror } from './position-mirror';\n\nexport { CursorInlayHint } from './cursor-inlay-hint';\n\n// 使用 Markers & DiagnosticMarkers 代替\n// export {\n// Marker,\n// DiagnosticMarker,\n// LineMarker,\n// } from './marker'\n\nexport {\n Markers,\n DiagnosticMarkers,\n type MarkerDecorationSpec,\n type DiagnosticMarkerDecorationSpec,\n} from './markers';\n\nexport { Gutter, GutterLineMarker, GutterPlacement } from './gutter';\n\nexport { FoldGutter } from './fold-gutter';\n\nexport { Placeholder, ActiveLinePlaceholder } from './placeholder';\n\nexport { RefElement } from './ref-element';\n\nexport { LineWidget } from './line-widget';\nexport { DiffView } from './diff-view';\n\nexport {\n Mention,\n getCurrentMentionReplaceRange,\n type MentionOptions,\n type MentionOpenChangeEvent,\n type MentionSearchEvent,\n} from './mention';\n\nexport {\n EmbededLineView,\n EmbededLineViewSide,\n type EmbededLineViewRefProps,\n} from './embeded-line-view';\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { autoUpdate } from '@floating-ui/dom';\nimport { type BuiltinEditorAPI } from '@coze-editor/react';\nimport { useEditor, useInjector } from '@coze-editor/react';\nimport {\n elementAtPosition,\n positionElementLayer,\n SelectionSide,\n} from '@coze-editor/extensions';\n\ninterface Props {\n side: SelectionSide;\n onChange?: () => void;\n onVisibleChange?: (visible: boolean) => void;\n}\n\nconst CursorMirror = forwardRef<HTMLDivElement, Props>(function CursorMirror(\n { side, onChange, onVisibleChange },\n ref,\n) {\n const injector = useInjector();\n const editor = useEditor<BuiltinEditorAPI>();\n const [dom] = useState(() => document.createElement('div'));\n const domRef = useRef<HTMLDivElement>(dom);\n domRef.current = dom;\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const onVisibleChangeRef = useRef(onVisibleChange);\n onVisibleChangeRef.current = onVisibleChange;\n\n useImperativeHandle(ref, () => domRef.current);\n\n useLayoutEffect(\n () =>\n injector.inject([\n elementAtPosition.of({\n dom: domRef.current,\n pos: side,\n }),\n positionElementLayer,\n ]),\n [injector, side],\n );\n\n // watch for position change\n useEffect(() => {\n const floating = document.createElement('div');\n document.body.appendChild(floating);\n\n const dispose = autoUpdate(\n domRef.current,\n floating,\n () => {\n if (typeof onChangeRef.current === 'function') {\n onChangeRef.current();\n }\n },\n { animationFrame: true },\n );\n\n return () => {\n document.body.removeChild(floating);\n dispose();\n };\n }, []);\n\n // watch for visible change\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const view = editor.$view;\n\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (typeof onVisibleChangeRef.current === 'function') {\n onVisibleChangeRef.current(entry.isIntersecting);\n }\n });\n },\n {\n root: view.scrollDOM,\n threshold: 0,\n },\n );\n\n observer.observe(domRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [editor]);\n\n return null;\n});\n\nexport { CursorMirror, SelectionSide };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { autoUpdate } from '@floating-ui/dom';\nimport { type BuiltinEditorAPI } from '@coze-editor/react';\nimport { useEditor, useInjector } from '@coze-editor/react';\nimport {\n elementAtPosition,\n positionElementLayer,\n} from '@coze-editor/extensions';\n\ninterface Props {\n position: number;\n onChange?: () => void;\n onVisibleChange?: (visible: boolean) => void;\n}\n\nconst PositionMirror = forwardRef<HTMLDivElement, Props>(function CursorMirror(\n { position, onChange, onVisibleChange },\n ref,\n) {\n const injector = useInjector();\n const editor = useEditor<BuiltinEditorAPI>();\n const [dom] = useState(() => {\n const el = document.createElement('div');\n el.classList.add('cm-position-mirror');\n return el;\n });\n const domRef = useRef<HTMLDivElement>(dom);\n domRef.current = dom;\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const onVisibleChangeRef = useRef(onVisibleChange);\n onVisibleChangeRef.current = onVisibleChange;\n\n useImperativeHandle(ref, () => domRef.current);\n\n useLayoutEffect(\n () =>\n injector.inject([\n elementAtPosition.of({\n dom: domRef.current,\n pos: position,\n }),\n positionElementLayer,\n ]),\n [injector, position],\n );\n\n // watch for position change\n useEffect(() => {\n const floating = document.createElement('div');\n document.body.appendChild(floating);\n\n const dispose = autoUpdate(\n domRef.current,\n floating,\n () => {\n if (typeof onChangeRef.current === 'function') {\n onChangeRef.current();\n }\n },\n { animationFrame: true },\n );\n\n return () => {\n document.body.removeChild(floating);\n dispose();\n };\n }, []);\n\n // watch for visible change\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const view = editor.$view;\n\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (typeof onVisibleChangeRef.current === 'function') {\n onVisibleChangeRef.current(entry.isIntersecting);\n }\n });\n },\n {\n root: view.scrollDOM,\n threshold: 0,\n },\n );\n\n observer.observe(domRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [editor]);\n\n return null;\n});\n\nexport { PositionMirror };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { createPortal } from 'react-dom';\nimport { useLayoutEffect, type ReactNode } from 'react';\n\nimport { useHTMLElement } from '@coze-editor/react-hooks';\nimport { useInjector } from '@coze-editor/react';\nimport { Decoration, EditorView, WidgetType } from '@codemirror/view';\n\nclass InlayHintWidget extends WidgetType {\n constructor(public element: HTMLElement) {\n super();\n }\n\n override eq(other: InlayHintWidget): boolean {\n return this.element === other.element;\n }\n\n toDOM() {\n return this.element;\n }\n}\n\ninterface CursorInlayHintProps {\n children?: ReactNode;\n}\n\nfunction CursorInlayHint({ children }: CursorInlayHintProps): ReactNode {\n const injector = useInjector();\n const element = useHTMLElement('span');\n\n useLayoutEffect(\n () =>\n injector.inject([\n EditorView.decorations.compute(['selection'], state =>\n Decoration.set([\n Decoration.widget({\n widget: new InlayHintWidget(element),\n side: 1,\n }).range(state.selection.main.head),\n ]),\n ),\n ]),\n [injector],\n );\n\n return createPortal(children, element);\n}\n\nexport { CursorInlayHint };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { useCallback, useLayoutEffect } from 'react';\n\nimport { useStateField } from '@coze-editor/react-hooks';\nimport { useInjector } from '@coze-editor/react';\nimport { mergeableMarkers } from '@coze-editor/extensions';\n\ninterface MarkerDecorationSpec {\n from: number;\n to: number;\n className: string;\n}\n\ninterface MarkersProps {\n markers: MarkerDecorationSpec[];\n}\n\nfunction Markers({ markers }: MarkersProps) {\n const injector = useInjector();\n const field = useStateField(useCallback(() => markers, [markers]));\n\n useLayoutEffect(\n () => injector.inject([field, mergeableMarkers.from(field)]),\n [injector, field],\n );\n\n return null;\n}\n\nexport { Markers };\n\nexport type { MarkerDecorationSpec };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport React, { useLayoutEffect, useMemo } from 'react';\n\nimport hash from 'hash-sum';\nimport { useInjector } from '@coze-editor/react';\nimport { EditorView } from '@codemirror/view';\n\nimport { Markers } from './markers';\n\ninterface DiagnosticMarkerDecorationSpec {\n from: number;\n to: number;\n color?: string;\n}\n\ninterface DiagnosticMarkersProps {\n markers: DiagnosticMarkerDecorationSpec[];\n}\n\ninterface StyleSpec {\n [propOrSelector: string]: string | number | StyleSpec | null;\n}\n\nfunction DiagnosticMarkers({ markers }: DiagnosticMarkersProps) {\n const theme = useMemo<Record<string, StyleSpec>>(() => {\n const colors = getColors(markers);\n return colors.reduce((memo: Record<string, any>, color) => {\n const className = getClassNameFromColor(color);\n memo[`& .${className}`] = {\n backgroundPosition: 'left bottom',\n backgroundRepeat: 'repeat-x',\n paddingBottom: '0.7px',\n backgroundImage: underline(color),\n };\n return memo;\n }, {});\n }, [markers]);\n\n const injector = useInjector();\n\n useLayoutEffect(\n () => injector.inject([EditorView.theme(theme)]),\n [injector, theme],\n );\n\n const finalMarkers = useMemo(\n () =>\n markers.map(marker => {\n const className = getClassNameFromColor(marker.color ?? 'red');\n return {\n from: marker.from,\n to: marker.to,\n className,\n };\n }),\n [markers],\n );\n\n return <Markers markers={finalMarkers} />;\n}\n\nconst isString = (v: unknown): v is string => Boolean(v);\n\nfunction getColors(markers: DiagnosticMarkerDecorationSpec[]) {\n return [\n ...new Set([\n ...markers.map(marker => marker.color).filter(v => isString(v)),\n 'red',\n ]),\n ];\n}\n\nfunction getClassNameFromColor(color: string) {\n return `cm-sdk-diagnostic-marker-${hash(color)}`;\n}\n\nfunction svg(content: string, attrs: string) {\n return `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${attrs}>${encodeURIComponent(content)}</svg>')`;\n}\n\nfunction underline(color: string) {\n return svg(\n `<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${color}\" fill=\"none\" stroke-width=\".7\"/>`,\n 'width=\"6\" height=\"3\"',\n );\n}\n\nexport { DiagnosticMarkers };\n\nexport type { DiagnosticMarkerDecorationSpec };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { createPortal } from 'react-dom';\nimport React, { type ReactNode, useEffect, useState } from 'react';\n\nimport { useHydrateAtoms } from 'jotai/utils';\nimport { Provider, useAtomValue } from 'jotai';\nimport {\n useCompartment,\n useHTMLElement,\n useInjectorEffect,\n useLatest,\n} from '@coze-editor/react-hooks';\nimport { useEditor, type BuiltinEditorAPI } from '@coze-editor/react';\nimport { type EditorView, gutter as leftGutter } from '@codemirror/view';\nimport { Facet, RangeSet } from '@codemirror/state';\n\nimport type { GutterLineMarkerSpecFacet } from './types';\nimport {\n gutter as rightGutter,\n GutterMarker as RawGutterMarker,\n} from './right-gutter';\nimport { facetAtom } from './atoms';\n\ninterface GutterProps {\n defaultClassName?: string;\n placement?: GutterPlacement;\n children?: ReactNode;\n}\n\nclass DOMGutterLineMarker extends RawGutterMarker {\n constructor(public dom: HTMLElement) {\n super();\n }\n\n eq(other: DOMGutterLineMarker) {\n return this.dom === other.dom;\n }\n\n toDOM() {\n return this.dom;\n }\n}\n\ninterface HydrateAtomsProps {\n markers: GutterLineMarkerSpecFacet;\n children?: ReactNode;\n}\nfunction HydrateAtoms({ markers, children }: HydrateAtomsProps): JSX.Element {\n useHydrateAtoms([[facetAtom, markers]]);\n\n return <>{children}</>;\n}\n\nenum GutterPlacement {\n Left = 'left',\n Right = 'right',\n}\n\nfunction Gutter({\n defaultClassName,\n placement = GutterPlacement.Left,\n children,\n}: GutterProps): ReactNode {\n const [markersFacet] = useState<GutterLineMarkerSpecFacet>(() =>\n Facet.define(),\n );\n\n useInjectorEffect(\n injector => {\n const gutter =\n placement === GutterPlacement.Right ? rightGutter : leftGutter;\n return injector.inject([\n gutter({\n class: defaultClassName ?? '',\n markers(view: EditorView) {\n const specs = view.state.facet(markersFacet);\n const { lines } = view.state.doc;\n\n let markers = RangeSet.empty;\n for (const spec of specs) {\n const { lineNumber } = spec;\n if (lineNumber < 1 || lineNumber > lines) {\n continue;\n }\n\n const line = view.state.doc.line(spec.lineNumber);\n markers = markers.update({\n add: [new DOMGutterLineMarker(spec.dom).range(line.from)],\n sort: true,\n });\n }\n\n return markers;\n },\n }),\n ]);\n },\n [placement],\n );\n\n return (\n <Provider>\n <HydrateAtoms markers={markersFacet}>{children}</HydrateAtoms>\n </Provider>\n );\n}\n\ninterface GutterLineMarkerProps {\n // 1-based\n lineNumber: number;\n children?: ReactNode;\n}\n\nfunction GutterLineMarker({\n lineNumber,\n children,\n}: GutterLineMarkerProps): ReactNode {\n const facet = useAtomValue(facetAtom);\n const editor = useEditor<BuiltinEditorAPI>();\n const compartment = useCompartment();\n // create stable dom, avoid extra toDOM for gutter marker\n const elementRef = useLatest(useHTMLElement());\n\n useInjectorEffect(injector => injector.inject([compartment.of([])]), []);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n editor.$view.dispatch({\n effects: compartment.reconfigure(\n facet.of({\n lineNumber,\n dom: elementRef.current,\n }),\n ),\n });\n }, [editor, compartment, lineNumber]);\n\n return createPortal(children, elementRef.current);\n}\n\nexport { Gutter, GutterLineMarker, GutterPlacement };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\n/* eslint-disable */\nimport {\n MapMode, Facet, Extension,\n RangeValue, RangeSet, RangeCursor\n} from \"@codemirror/state\"\nimport { EditorView, ViewPlugin, ViewUpdate, BlockType, WidgetType, BlockInfo, Direction } from \"@codemirror/view\"\n\n/// A gutter marker represents a bit of information attached to a line\n/// in a specific gutter. Your own custom markers have to extend this\n/// class.\nexport abstract class GutterMarker extends RangeValue {\n /// @internal\n compare(other: GutterMarker) {\n return this == other || this.constructor == other.constructor && this.eq(other)\n }\n\n /// Compare this marker to another marker of the same type.\n eq(other: GutterMarker): boolean { return false }\n\n /// Render the DOM node for this marker, if any.\n toDOM?(view: EditorView): Node\n\n /// This property can be used to add CSS classes to the gutter\n /// element that contains this marker.\n elementClass!: string\n\n /// Called if the marker has a `toDOM` method and its representation\n /// was removed from a gutter.\n destroy(dom: Node) { }\n}\n\nGutterMarker.prototype.elementClass = \"\"\nGutterMarker.prototype.toDOM = undefined\nGutterMarker.prototype.mapMode = MapMode.TrackBefore\nGutterMarker.prototype.startSide = GutterMarker.prototype.endSide = -1\nGutterMarker.prototype.point = true\n\n/// Facet used to add a class to all gutter elements for a given line.\n/// Markers given to this facet should _only_ define an\n/// [`elementclass`](#view.GutterMarker.elementClass), not a\n/// [`toDOM`](#view.GutterMarker.toDOM) (or the marker will appear\n/// in all gutters for the line).\nexport const gutterLineClass = Facet.define<RangeSet<GutterMarker>>()\n\n/// Facet used to add a class to all gutter elements next to a widget.\n/// Should not provide widgets with a `toDOM` method.\nexport const gutterWidgetClass =\n Facet.define<(view: EditorView, widget: WidgetType, block: BlockInfo) => GutterMarker | null>()\n\ntype Handlers = { [event: string]: (view: EditorView, line: BlockInfo, event: Event) => boolean }\n\ninterface GutterConfig {\n /// An extra CSS class to be added to the wrapper (`cm-gutter`)\n /// element.\n class?: string\n /// Controls whether empty gutter elements should be rendered.\n /// Defaults to false.\n renderEmptyElements?: boolean\n /// Retrieve a set of markers to use in this gutter.\n markers?: (view: EditorView) => (RangeSet<GutterMarker> | readonly RangeSet<GutterMarker>[])\n /// Can be used to optionally add a single marker to every line.\n lineMarker?: (view: EditorView, line: BlockInfo, otherMarkers: readonly GutterMarker[]) => GutterMarker | null\n /// Associate markers with block widgets in the document.\n widgetMarker?: (view: EditorView, widget: WidgetType, block: BlockInfo) => GutterMarker | null\n /// If line or widget markers depend on additional state, and should\n /// be updated when that changes, pass a predicate here that checks\n /// whether a given view update might change the line markers.\n lineMarkerChange?: null | ((update: ViewUpdate) => boolean)\n /// Add a hidden spacer element that gives the gutter its base\n /// width.\n initialSpacer?: null | ((view: EditorView) => GutterMarker)\n /// Update the spacer element when the view is updated.\n updateSpacer?: null | ((spacer: GutterMarker, update: ViewUpdate) => GutterMarker)\n /// Supply event handlers for DOM events on this gutter.\n domEventHandlers?: Handlers,\n}\n\nconst defaults = {\n class: \"\",\n renderEmptyElements: false,\n elementStyle: \"\",\n markers: () => RangeSet.empty,\n lineMarker: () => null,\n widgetMarker: () => null,\n lineMarkerChange: null,\n initialSpacer: null,\n updateSpacer: null,\n domEventHandlers: {}\n}\n\nconst activeGutters = Facet.define<Required<GutterConfig>>()\n\n/// Define an editor gutter. The order in which the gutters appear is\n/// determined by their extension priority.\nexport function gutter(config: GutterConfig): Extension {\n return [gutters(), activeGutters.of({ ...defaults, ...config })]\n}\n\nconst unfixGutters = Facet.define<boolean, boolean>({\n combine: values => values.some(x => x)\n})\n\n/// The gutter-drawing plugin is automatically enabled when you add a\n/// gutter, but you can use this function to explicitly configure it.\n///\n/// Unless `fixed` is explicitly set to `false`, the gutters are\n/// fixed, meaning they don't scroll along with the content\n/// horizontally (except on Internet Explorer, which doesn't support\n/// CSS [`position:\n/// sticky`](https://developer.mozilla.org/en-US/docs/Web/CSS/position#sticky)).\nexport function gutters(config?: { fixed?: boolean }): Extension {\n const result: Extension[] = [\n gutterView,\n // right gutter theme\n EditorView.baseTheme({\n \".cm-right-gutters\": {\n flexShrink: 0,\n display: \"flex\",\n height: \"100%\",\n boxSizing: \"border-box\",\n insetInlineStart: 0,\n zIndex: 200\n },\n\n \".cm-right-gutter\": {\n display: \"flex !important\", // Necessary -- prevents margin collapsing\n flexDirection: \"column\",\n flexShrink: 0,\n boxSizing: \"border-box\",\n minHeight: \"100%\",\n overflow: \"hidden\"\n },\n\n \".cm-rightGutterElement\": {\n boxSizing: \"border-box\"\n },\n })\n ]\n if (config && config.fixed === false) result.push(unfixGutters.of(true))\n return result\n}\n\nconst gutterView = ViewPlugin.fromClass(class {\n gutters: SingleGutterView[]\n dom: HTMLElement\n fixed: boolean\n prevViewport: { from: number, to: number }\n\n constructor(readonly view: EditorView) {\n this.prevViewport = view.viewport\n this.dom = document.createElement(\"div\")\n this.dom.className = \"cm-right-gutters\"\n this.dom.setAttribute(\"aria-hidden\", \"true\")\n this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\"\n this.gutters = view.state.facet(activeGutters).map(conf => new SingleGutterView(view, conf))\n for (const gutter of this.gutters) this.dom.appendChild(gutter.dom)\n this.fixed = !view.state.facet(unfixGutters)\n if (this.fixed) {\n // FIXME IE11 fallback, which doesn't support position: sticky,\n // by using position: relative + event handlers that realign the\n // gutter (or just force fixed=false on IE11?)\n this.dom.style.position = \"sticky\"\n }\n this.syncGutters(false)\n // view.scrollDOM.insertBefore(this.dom, view.contentDOM)\n view.scrollDOM.appendChild(this.dom)\n }\n\n update(update: ViewUpdate) {\n if (this.updateGutters(update)) {\n // Detach during sync when the viewport changed significantly\n // (such as during scrolling), since for large updates that is\n // faster.\n const vpA = this.prevViewport, vpB = update.view.viewport\n const vpOverlap = Math.min(vpA.to, vpB.to) - Math.max(vpA.from, vpB.from)\n this.syncGutters(vpOverlap < (vpB.to - vpB.from) * 0.8)\n }\n if (update.geometryChanged) {\n this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\"\n }\n if (this.view.state.facet(unfixGutters) != !this.fixed) {\n this.fixed = !this.fixed\n this.dom.style.position = this.fixed ? \"sticky\" : \"\"\n }\n this.prevViewport = update.view.viewport\n }\n\n syncGutters(detach: boolean) {\n // let after = this.dom.nextSibling\n const before = this.dom.previousSibling\n if (detach) this.dom.remove()\n const lineClasses = RangeSet.iter(this.view.state.facet(gutterLineClass), this.view.viewport.from)\n let classSet: GutterMarker[] = []\n const contexts = this.gutters.map(gutter => new UpdateContext(gutter, this.view.viewport, -this.view.documentPadding.top))\n for (const line of this.view.viewportLineBlocks) {\n if (classSet.length) classSet = []\n if (Array.isArray(line.type)) {\n let first = true\n for (const b of line.type) {\n if (b.type == BlockType.Text && first) {\n advanceCursor(lineClasses, classSet, b.from)\n for (const cx of contexts) cx.line(this.view, b, classSet)\n first = false\n } else if (b.widget) {\n for (const cx of contexts) cx.widget(this.view, b)\n }\n }\n } else if (line.type == BlockType.Text) {\n advanceCursor(lineClasses, classSet, line.from)\n for (const cx of contexts) cx.line(this.view, line, classSet)\n } else if (line.widget) {\n for (const cx of contexts) cx.widget(this.view, line)\n }\n }\n for (const cx of contexts) cx.finish()\n if (detach) {\n // this.view.scrollDOM.insertBefore(this.dom, after)\n this.view.scrollDOM.insertBefore(this.dom, before?.nextSibling ?? null)\n }\n }\n\n updateGutters(update: ViewUpdate) {\n const prev = update.startState.facet(activeGutters), cur = update.state.facet(activeGutters)\n let change = update.docChanged || update.heightChanged || update.viewportChanged ||\n !RangeSet.eq(update.startState.facet(gutterLineClass), update.state.facet(gutterLineClass),\n update.view.viewport.from, update.view.viewport.to)\n if (prev == cur) {\n for (const gutter of this.gutters) if (gutter.update(update)) change = true\n } else {\n change = true\n const gutters: SingleGutterView[] = []\n for (const conf of cur) {\n const known = prev.indexOf(conf)\n if (known < 0) {\n gutters.push(new SingleGutterView(this.view, conf))\n } else {\n this.gutters[known].update(update)\n gutters.push(this.gutters[known])\n }\n }\n for (const g of this.gutters) {\n g.dom.remove()\n if (gutters.indexOf(g) < 0) g.destroy()\n }\n for (const g of gutters) this.dom.appendChild(g.dom)\n this.gutters = gutters\n }\n return change\n }\n\n destroy() {\n for (const view of this.gutters) view.destroy()\n this.dom.remove()\n }\n}, {\n provide: plugin => EditorView.scrollMargins.of(view => {\n const value = view.plugin(plugin)\n if (!value || value.gutters.length == 0 || !value.fixed) return null\n return view.textDirection == Direction.LTR\n ? { left: value.dom.offsetWidth * view.scaleX }\n : { right: value.dom.offsetWidth * view.scaleX }\n })\n})\n\nfunction asArray<T>(val: T | readonly T[]) { return (Array.isArray(val) ? val : [val]) as readonly T[] }\n\nfunction advanceCursor(cursor: RangeCursor<GutterMarker>, collect: GutterMarker[], pos: number) {\n while (cursor.value && cursor.from <= pos) {\n if (cursor.from == pos) collect.push(cursor.value)\n cursor.next()\n }\n}\n\nclass UpdateContext {\n cursor: RangeCursor<GutterMarker>\n i = 0\n\n constructor(readonly gutter: SingleGutterView, viewport: { from: number, to: number }, public height: number) {\n this.cursor = RangeSet.iter(gutter.markers, viewport.from)\n }\n\n addElement(view: EditorView, block: BlockInfo, markers: readonly GutterMarker[]) {\n const { gutter } = this, above = (block.top - this.height) / view.scaleY, height = block.height / view.scaleY\n if (this.i == gutter.elements.length) {\n const newElt = new GutterElement(view, height, above, markers)\n gutter.elements.push(newElt)\n gutter.dom.appendChild(newElt.dom)\n } else {\n gutter.elements[this.i].update(view, height, above, markers)\n }\n this.height = block.bottom\n this.i++\n }\n\n line(view: EditorView, line: BlockInfo, extraMarkers: readonly GutterMarker[]) {\n let localMarkers: GutterMarker[] = []\n advanceCursor(this.cursor, localMarkers, line.from)\n if (extraMarkers.length) localMarkers = localMarkers.concat(extraMarkers)\n const forLine = this.gutter.config.lineMarker(view, line, localMarkers)\n if (forLine) localMarkers.unshift(forLine)\n\n const gutter = this.gutter\n if (localMarkers.length == 0 && !gutter.config.renderEmptyElements) return\n this.addElement(view, line, localMarkers)\n }\n\n widget(view: EditorView, block: BlockInfo) {\n const marker = this.gutter.config.widgetMarker(view, block.widget!, block)\n let markers = marker ? [marker] : null\n for (const cls of view.state.facet(gutterWidgetClass)) {\n const marker = cls(view, block.widget!, block)\n if (marker) (markers || (markers = [])).push(marker)\n }\n if (markers) this.addElement(view, block, markers)\n }\n\n finish() {\n const gutter = this.gutter\n while (gutter.elements.length > this.i) {\n const last = gutter.elements.pop()!\n gutter.dom.removeChild(last.dom)\n last.destroy()\n }\n }\n}\n\nclass SingleGutterView {\n dom: HTMLElement\n elements: GutterElement[] = []\n markers: readonly RangeSet<GutterMarker>[]\n spacer: GutterElement | null = null\n\n constructor(public view: EditorView, public config: Required<GutterConfig>) {\n this.dom = document.createElement(\"div\")\n this.dom.className = \"cm-right-gutter\" + (this.config.class ? \" \" + this.config.class : \"\")\n for (const prop in config.domEventHandlers) {\n this.dom.addEventListener(prop, (event: Event) => {\n let target = event.target as HTMLElement, y\n if (target != this.dom && this.dom.contains(target)) {\n while (target.parentNode != this.dom) target = target.parentNode as HTMLElement\n const rect = target.getBoundingClientRect()\n y = (rect.top + rect.bottom) / 2\n } else {\n y = (event as MouseEvent).clientY\n }\n const line = view.lineBlockAtHeight(y - view.documentTop)\n if (config.domEventHandlers[prop](view, line, event)) event.preventDefault()\n })\n }\n this.markers = asArray(config.markers(view))\n if (config.initialSpacer) {\n this.spacer = new GutterElement(view, 0, 0, [config.initialSpacer(view)])\n this.dom.appendChild(this.spacer.dom)\n this.spacer.dom.style.cssText += \"visibility: hidden; pointer-events: none\"\n }\n }\n\n update(update: ViewUpdate) {\n const prevMarkers = this.markers\n this.markers = asArray(this.config.markers(update.view))\n if (this.spacer && this.config.updateSpacer) {\n const updated = this.config.updateSpacer(this.spacer.markers[0], update)\n if (updated != this.spacer.markers[0]) this.spacer.update(update.view, 0, 0, [updated])\n }\n const vp = update.view.viewport\n return !RangeSet.eq(this.markers, prevMarkers, vp.from, vp.to) ||\n (this.config.lineMarkerChange ? this.config.lineMarkerChange(update) : false)\n }\n\n destroy() {\n for (const elt of this.elements) elt.destroy()\n }\n}\n\nclass GutterElement {\n dom: HTMLElement\n height: number = -1\n above: number = 0\n markers: readonly GutterMarker[] = []\n\n constructor(view: EditorView, height: number, above: number, markers: readonly GutterMarker[]) {\n this.dom = document.createElement(\"div\")\n this.dom.className = \"cm-rightGutterElement\"\n this.update(view, height, above, markers)\n }\n\n update(view: EditorView, height: number, above: number, markers: readonly GutterMarker[]) {\n if (this.height != height) {\n this.height = height\n this.dom.style.height = height + \"px\"\n }\n if (this.above != above)\n this.dom.style.marginTop = (this.above = above) ? above + \"px\" : \"\"\n if (!sameMarkers(this.markers, markers)) this.setMarkers(view, markers)\n }\n\n setMarkers(view: EditorView, markers: readonly GutterMarker[]) {\n let cls = \"cm-rightGutterElement\", domPos = this.dom.firstChild\n for (let iNew = 0, iOld = 0; ;) {\n let skipTo = iOld, marker = iNew < markers.length ? markers[iNew++] : null, matched = false\n if (marker) {\n const c = marker.elementClass\n if (c) cls += \" \" + c\n for (let i = iOld; i < this.markers.length; i++)\n if (this.markers[i].compare(marker)) { skipTo = i; matched = true; break }\n } else {\n skipTo = this.markers.length\n }\n while (iOld < skipTo) {\n const next = this.markers[iOld++]\n if (next.toDOM) {\n next.destroy(domPos!)\n const after = domPos!.nextSibling\n domPos!.remove()\n domPos = after\n }\n }\n if (!marker) break\n if (marker.toDOM) {\n if (matched) domPos = domPos!.nextSibling\n else this.dom.insertBefore(marker.toDOM(view), domPos)\n }\n if (matched) iOld++\n }\n this.dom.className = cls\n this.markers = markers\n }\n\n destroy() {\n this.setMarkers(null as any, []) // First argument not used unless creating markers\n }\n}\n\nfunction sameMarkers(a: readonly GutterMarker[], b: readonly GutterMarker[]): boolean {\n if (a.length != b.length) return false\n for (let i = 0; i < a.length; i++) if (!a[i].compare(b[i])) return false\n return true\n}\n\nconst activeLineGutterMarker = new class extends GutterMarker {\n elementClass = \"cm-activeLineRightGutter\"\n}\n\nconst activeLineGutterHighlighter = gutterLineClass.compute([\"selection\"], state => {\n const marks: any[] = []\n let last = -1\n for (const range of state.selection.ranges) {\n const linePos = state.doc.lineAt(range.head).from\n if (linePos > last) {\n last = linePos\n marks.push(activeLineGutterMarker.range(linePos))\n }\n }\n return RangeSet.of(marks)\n})\n\n/// Returns an extension that adds a `cm-activeLineRightGutter` class to\n/// all gutter elements on the [active\n/// line](#view.highlightActiveLine).\nexport function highlightActiveLineGutter() {\n return activeLineGutterHighlighter\n}","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { atom } from 'jotai';\nimport { Facet } from '@codemirror/state';\n\nconst facetAtom = atom(Facet.define());\n\nexport { facetAtom };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { createPortal } from 'react-dom';\nimport React, {\n type ReactNode,\n type SVGProps,\n useEffect,\n useState,\n} from 'react';\n\nimport { v4 } from '@lukeed/uuid';\nimport { disposeAll } from '@coze-editor/utils';\nimport {\n useInjectorEffect,\n useLatest,\n usePortalConnector,\n} from '@coze-editor/react-hooks';\nimport { useInjector } from '@coze-editor/react';\nimport { EditorView } from '@codemirror/view';\nimport { Prec } from '@codemirror/state';\nimport { codeFolding, foldGutter } from '@codemirror/language';\n\nfunction FluentTriangleDown12Filled(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"8px\"\n height=\"8px\"\n viewBox=\"0 0 12 12\"\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M5.214 10.541a.903.903 0 0 0 1.572 0l4.092-7.169C11.226 2.762 10.789 2 10.09 2H1.91c-.698 0-1.135.762-.787 1.372z\"\n ></path>\n </svg>\n );\n}\n\nfunction FluentTriangleRight12Filled(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"8px\"\n height=\"8px\"\n viewBox=\"0 0 12 12\"\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M10.541 6.786a.903.903 0 0 0 0-1.572L3.372 1.122C2.762.774 2 1.211 2 1.91v8.182c0 .698.762 1.135 1.372.787z\"\n ></path>\n </svg>\n );\n}\n\nfunction defaultRenderMarker(open: boolean) {\n return open ? (\n <FluentTriangleDown12Filled />\n ) : (\n <FluentTriangleRight12Filled />\n );\n}\n\nfunction defaultRenderPlaceholder() {\n return null;\n}\n\ninterface FoldGutterProps {\n renderMarker?: (open: boolean) => ReactNode | undefined;\n renderPlaceholder?: () => ReactNode | undefined;\n opacityTransition?: boolean;\n opacityTransitionDuration?: number;\n}\n\nfunction FoldGutter({\n renderMarker = defaultRenderMarker,\n renderPlaceholder = defaultRenderPlaceholder,\n opacityTransition = false,\n opacityTransitionDuration = 300,\n}: FoldGutterProps) {\n const connector = usePortalConnector({ sync: true });\n const connectorRef = useLatest(connector);\n const renderMarkerRef = useLatest(renderMarker);\n const renderPlaceholderRef = useLatest(renderPlaceholder);\n const [opacity, setOpacity] = useState(0);\n const setOpacityRef = useLatest(setOpacity);\n const injector = useInjector();\n\n const { Portal } = connector;\n\n // inject transition after `opacity: 0` style being injected\n useEffect(() => {\n if (!opacityTransition || !opacityTransitionDuration) {\n return;\n }\n\n return injector.inject([\n EditorView.theme({\n '.cm-foldGutter': {\n transition: `opacity ${opacityTransitionDuration / 1000}s ease`,\n },\n }),\n ]);\n }, [injector, opacityTransition, opacityTransitionDuration]);\n\n useInjectorEffect(\n injector => {\n if (!opacityTransition) {\n return;\n }\n\n return injector.inject([\n Prec.lowest(\n EditorView.theme({\n '.cm-foldGutter': {\n opacity,\n },\n }),\n ),\n ]);\n },\n [opacityTransition, opacity],\n );\n\n useInjectorEffect(injector => {\n const disposes: (() => void)[] = [];\n\n return disposeAll([\n injector.inject([\n Prec.low(\n EditorView.theme({\n '.cm-foldGutter .cm-gutterElement': {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n },\n }),\n ),\n foldGutter({\n markerDOM(open) {\n const dom = document.createElement('span');\n dom.setAttribute('aria-expanded', open ? 'true' : 'false');\n const id = v4();\n connectorRef.current.connect(\n id,\n createPortal(renderMarkerRef.current(open), dom),\n );\n disposes.push(() => {\n connectorRef.current.disconnect(id);\n });\n return dom;\n },\n domEventHandlers: {\n mouseenter() {\n setOpacityRef.current(1);\n return true;\n },\n mouseleave() {\n setOpacityRef.current(0);\n return true;\n },\n },\n }),\n codeFolding({\n placeholderDOM(view, onclick) {\n const dom = document.createElement('span');\n const id = v4();\n connectorRef.current.connect(\n id,\n createPortal(renderPlaceholderRef.current(), dom),\n );\n disposes.push(() => {\n connectorRef.current.disconnect(id);\n });\n dom.addEventListener('click', onclick, false);\n disposes.push(() => {\n dom.removeEventListener('click', onclick, false);\n });\n return dom;\n },\n }),\n ]),\n ...disposes,\n ]);\n }, []);\n\n return <Portal />;\n}\n\nexport { FoldGutter };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { createPortal } from 'react-dom';\nimport { type ReactNode } from 'react';\n\nimport { useHTMLElement, useInjectorEffect } from '@coze-editor/react-hooks';\nimport {\n placeholder,\n activeLinePlaceholder,\n} from '@coze-editor/extension-placeholder';\n\nfunction Placeholder({ children }: { children?: ReactNode }): ReactNode {\n const element = useHTMLElement('span');\n\n useInjectorEffect(\n injector => injector.inject([placeholder(() => element)]),\n [],\n );\n\n return createPortal(children, element);\n}\n\ninterface ActiveLinePlaceholderProps {\n children?: ReactNode;\n}\n\nfunction ActiveLinePlaceholder({\n children,\n}: ActiveLinePlaceholderProps): ReactNode {\n const element = useHTMLElement('span');\n\n useInjectorEffect(\n injector => injector.inject([activeLinePlaceholder(() => element)]),\n [],\n );\n\n return createPortal(children, element);\n}\n\nexport { Placeholder, ActiveLinePlaceholder };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { forwardRef, useImperativeHandle } from 'react';\n\nimport { useLatest } from '@coze-editor/react-hooks';\n\ninterface Props {\n element: HTMLElement;\n}\n\nconst RefElement = forwardRef<HTMLElement, Props>(({ element }, ref) => {\n const domRef = useLatest(element);\n useImperativeHandle(ref, () => domRef.current);\n return null;\n});\n\nRefElement.displayName = 'RefElement';\n\nexport { RefElement };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { createPortal } from 'react-dom';\nimport { type ReactNode, useEffect, useLayoutEffect, useRef } from 'react';\n\nimport { useHTMLElement } from '@coze-editor/react-hooks';\nimport {\n type BuiltinEditorAPI,\n useEditor,\n useInjector,\n} from '@coze-editor/react';\n\nimport { cursorBlockWidget } from './cursor-widget';\n\ninterface PropsType {\n children?: ReactNode;\n lineNumber?: number; // 1-base\n side?: number;\n}\n\nfunction LineWidget({ children, lineNumber, side }: PropsType): ReactNode {\n const setWidgetLineNumberRef = useRef<any>(null);\n const injector = useInjector();\n const editor = useEditor<BuiltinEditorAPI>();\n\n useEffect(() => {\n if (setWidgetLineNumberRef.current && editor?.$view) {\n editor.$view?.dispatch(setWidgetLineNumberRef.current(lineNumber, side));\n }\n }, [lineNumber, side]);\n\n const element = useHTMLElement('span');\n\n useLayoutEffect(() => {\n const { extension, setWidgetLineNumber } = cursorBlockWidget({\n side,\n lineNumber,\n createDOM: () => element,\n });\n\n setWidgetLineNumberRef.current = setWidgetLineNumber;\n\n return injector.inject(extension);\n }, [injector]);\n\n return createPortal(children, element);\n}\n\nexport { LineWidget };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { EditorView, type DecorationSet } from '@codemirror/view';\nimport {\n StateField,\n StateEffect,\n type TransactionSpec,\n type EditorState,\n} from '@codemirror/state';\n\nimport { createBlockWidget } from './widget-decoration';\nimport { type ConfigFacet } from './common';\n\nconst setWidgetEffect = StateEffect.define<{\n lineNumber?: number;\n side?: number;\n id: number;\n}>();\n\nconst getPos = (state: EditorState, num: number) => state.doc.line(num).from;\n\nexport const cursorWidgetState = (facet: ConfigFacet) =>\n StateField.define<DecorationSet>({\n create(state) {\n return createBlockWidget(\n facet.config,\n typeof facet.config.lineNumber === 'number'\n ? getPos(state, facet.config.lineNumber)\n : undefined,\n );\n },\n update(widget, tr) {\n tr.effects.forEach(effect => {\n if (effect.is(setWidgetEffect) && effect.value.id === facet.id) {\n widget = createBlockWidget(\n {\n ...facet.config,\n side: effect.value.side,\n lineNumber: effect.value.lineNumber,\n },\n typeof effect.value.lineNumber === 'number'\n ? getPos(tr.state, effect.value.lineNumber)\n : undefined,\n );\n }\n });\n\n return widget.update({\n filter: (from, to) => 0 <= from && to <= tr.state.doc.length,\n });\n },\n provide: f => EditorView.decorations.from(f),\n });\n\nexport const setWidgetLineNumber = (\n id: number,\n lineNumber?: number,\n side?: number,\n): TransactionSpec => ({\n effects: [setWidgetEffect.of({ lineNumber, id, side })],\n});\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { Decoration, WidgetType } from '@codemirror/view';\n\nimport { type CursorWidgetConfig } from './common';\n\nclass CustomDivWidget extends WidgetType {\n customDOM?: HTMLElement;\n constructor(customDOM?: HTMLElement) {\n super();\n this.customDOM = customDOM;\n }\n toDOM() {\n const div = document.createElement('div');\n div.className = 'cursor-widget-wrapper';\n div.setAttribute('style', 'caret-color: initial;');\n if (this.customDOM) {\n div.appendChild(this.customDOM);\n }\n return div;\n }\n eq(widget: CustomDivWidget): boolean {\n return widget.customDOM === this.customDOM;\n }\n}\n\nexport const createBlockWidget = (config: CursorWidgetConfig, pos?: number) => {\n if (typeof pos !== 'number') {\n return Decoration.none;\n }\n return Decoration.set(\n Decoration.widget({\n widget: new CustomDivWidget(config.createDOM()),\n side: config.side,\n block: true,\n config,\n }).range(pos),\n );\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nexport interface CursorWidgetConfig {\n createDOM: () => HTMLElement;\n // 1-base\n lineNumber?: number;\n /*\n Which side of the given position the widget is on. When this is positive, the widget will be drawn after the cursor if the cursor is on the same position. Otherwise, it'll be drawn before it. When multiple widgets sit at the same position, their side values will determine their ordering—those with a lower value come first. Defaults to 0. May not be more than 10000 or less than -10000.\n */\n side?: number;\n}\n\nlet nextID = 1;\nexport class ConfigFacet {\n id = nextID++;\n constructor(readonly config: CursorWidgetConfig) {}\n}\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { cursorWidgetState, setWidgetLineNumber } from './state';\nimport { ConfigFacet, type CursorWidgetConfig } from './common';\n\nconst cursorBlockWidget = (config: CursorWidgetConfig) => {\n const facet = new ConfigFacet(config);\n\n return {\n setWidgetLineNumber: (lineNumber?: number, side?: number) =>\n setWidgetLineNumber(facet.id, lineNumber, side),\n extension: [cursorWidgetState(facet)],\n };\n};\n\nexport { cursorBlockWidget, setWidgetLineNumber };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { useLayoutEffect } from 'react';\n\nimport { useInjector } from '@coze-editor/react';\n\nimport { diffView } from './extension';\n\ninterface PropsType {\n original?: string;\n}\n\nfunction DiffView({ original }: PropsType) {\n const injector = useInjector();\n\n useLayoutEffect(() => injector.inject(diffView({ original })), []);\n\n return null;\n}\n\nexport { type PropsType, DiffView };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { EditorView } from '@codemirror/view';\nimport { EditorState } from '@codemirror/state';\nimport { unifiedMergeView } from '@codemirror/merge';\n\nexport interface DiffViewPropsType {\n original?: string;\n}\n\nexport const diffView = (props: DiffViewPropsType) => {\n const { original = '' } = props;\n\n return [\n unifiedMergeView({\n original,\n gutter: false,\n }),\n EditorState.phrases.of({\n Accept: '^Y',\n Reject: '^N',\n }),\n EditorView.theme({\n '.cm-deletedChunk': {\n paddingLeft: '2px',\n backgroundColor: 'rgba(220, 68, 50, 0.2)',\n },\n '.cm-deletedChunk .cm-chunkButtons': {\n position: 'static',\n display: 'flex',\n },\n '.cm-deletedChunk .cm-chunkButtons button': {\n flex: '1',\n margin: '0px',\n },\n '.cm-deletedChunk .cm-chunkButtons button:first-child': {\n marginRight: '2px',\n },\n '.cm-deletedChunk del': {\n textDecoration: 'none',\n backgroundColor: 'rgba(220, 68, 50, 0.4)',\n },\n '&.cm-merge-b .cm-changedLine': {\n backgroundColor: 'rgba(33, 170, 33, 0.2)',\n },\n '.cm-insertedLine .cm-changedText': {\n background: 'none',\n backgroundColor: 'rgba(33, 170, 33, 0.4)',\n },\n }),\n ];\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { FacetCombineStrategy } from '@coze-editor/utils';\nimport {\n type EditorState,\n type Extension,\n Facet,\n MapMode,\n StateField,\n} from '@codemirror/state';\n\nimport type { MentionOptions, TriggerContext } from './types';\nimport { hasTrigger, hasTriggerCharacters } from './is';\n\n// 匹配中文、a-z、A-Z、0-9、_、'(' 用于兼容中文输入法 compose 过程)\nconst validForReg = /^[\\u4e00-\\u9fa5a-zA-Z0-9_']*$/;\nfunction defaultValidFor(text: string) {\n return validForReg.test(text);\n}\n\ninterface MentionFieldData {\n show: boolean;\n triggerContext: TriggerContext | undefined;\n}\n\nconst fields = Facet.define<StateField<MentionFieldData>>();\n\nfunction mention(options: MentionOptions): Extension {\n const mentionConfig = Facet.define({\n combine: FacetCombineStrategy.Last<MentionOptions>,\n });\n\n const field = StateField.define<MentionFieldData>({\n create() {\n return {\n show: false,\n triggerContext: undefined,\n };\n },\n update(value, tr) {\n const options = tr.startState.facet(mentionConfig);\n const { search = true, onOpenChange, onSearch } = options;\n\n let { show } = value;\n\n let triggerContext: TriggerContext | undefined = undefined;\n\n if (tr.docChanged) {\n if (hasTriggerCharacters(options)) {\n tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) => {\n const insertString = inserted.toString();\n if (\n fromA === toA &&\n options.triggerCharacters.includes(insertString)\n ) {\n triggerContext = {\n from: fromB,\n to: toB,\n triggerCharacter: insertString,\n cursorPosition: tr.state.selection.main.head,\n };\n }\n });\n } else if (hasTrigger(options)) {\n triggerContext = options.trigger(tr);\n }\n }\n\n const isSelectUserEvent = tr.isUserEvent('select');\n\n const newValue: MentionFieldData = {\n show: value.show,\n triggerContext: value.triggerContext\n ? { ...value.triggerContext }\n : undefined,\n };\n\n if (triggerContext) {\n newValue.triggerContext = triggerContext;\n show = true;\n\n if (typeof onSearch === 'function') {\n onSearch({\n value: '',\n });\n }\n } else if (tr.docChanged && value.triggerContext && search) {\n // remap from & to\n if (newValue.triggerContext) {\n const newFrom = tr.changes.mapPos(\n value.triggerContext.from,\n 1,\n MapMode.TrackAfter,\n );\n const newTo = tr.changes.mapPos(\n value.triggerContext.to,\n 1,\n MapMode.Simple,\n );\n\n if (typeof newFrom === 'number' && typeof newTo === 'number') {\n newValue.triggerContext.from = newFrom;\n newValue.triggerContext.to = newTo;\n } else {\n show = false;\n }\n }\n\n // show is still true, let's do next step\n if (show === true) {\n const validFor =\n typeof search === 'object' ? search.validFor : defaultValidFor;\n const from = value.triggerContext.cursorPosition;\n const to = tr.state.selection.main.head;\n if (to >= from) {\n const text = tr.state.sliceDoc(from, to);\n if (validFor(text, from, to, tr.state)) {\n show = true;\n if (typeof onSearch === 'function') {\n onSearch({\n value: text,\n });\n }\n } else {\n show = false;\n }\n } else {\n show = false;\n }\n }\n } else if (isSelectUserEvent) {\n show = false;\n }\n\n if (show === false) {\n newValue.triggerContext = undefined;\n }\n\n if (show !== value.show) {\n newValue.show = show;\n if (typeof onOpenChange === 'function') {\n onOpenChange({\n value: show,\n state: tr.state,\n triggerContext: newValue.triggerContext\n ? {\n from: newValue.triggerContext.from,\n to: newValue.triggerContext.to,\n triggerCharacter: newValue.triggerContext.triggerCharacter,\n }\n : undefined,\n });\n }\n }\n\n return newValue;\n },\n });\n\n return [mentionConfig.of(options), field, fields.of(field)];\n}\n\nfunction getCurrentMentionReplaceRange(\n state: EditorState,\n): { from: number; to: number } | undefined {\n const allFields = state.facet(fields);\n\n for (const field of allFields) {\n const fieldState = state.field(field, false);\n if (\n fieldState &&\n fieldState.triggerContext &&\n typeof fieldState.triggerContext.from === 'number' &&\n typeof fieldState.triggerContext.to === 'number'\n ) {\n return {\n from: fieldState.triggerContext.from,\n to: fieldState.triggerContext.to,\n };\n }\n }\n}\n\nexport { mention, getCurrentMentionReplaceRange };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n type TriggerCharactersMentionOptions,\n type TriggerMentionOptions,\n} from './types';\n\nfunction hasTriggerCharacters(\n options: unknown,\n): options is TriggerCharactersMentionOptions {\n return Array.isArray((options as any).triggerCharacters);\n}\n\nfunction hasTrigger(options: unknown): options is TriggerMentionOptions {\n return typeof (options as any).trigger === 'function';\n}\n\nexport { hasTriggerCharacters, hasTrigger };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { useInjectorEffect, useLatest } from '@coze-editor/react-hooks';\n\nimport { type MentionOptions } from './types';\nimport { hasTrigger } from './is';\nimport { mention, getCurrentMentionReplaceRange } from './extension';\n\nfunction Mention(props: MentionOptions) {\n const propsRef = useLatest(props);\n\n useInjectorEffect(injector => {\n const sharedOptions: Partial<MentionOptions> = {\n search: props.search,\n onOpenChange(...args) {\n if (typeof propsRef.current.onOpenChange === 'function') {\n return propsRef.current.onOpenChange(...args);\n }\n },\n onSearch(...args) {\n if (typeof propsRef.current.onSearch === 'function') {\n return propsRef.current.onSearch(...args);\n }\n },\n };\n return injector.inject([\n mention(\n hasTrigger(props)\n ? {\n ...sharedOptions,\n trigger(tr) {\n if (hasTrigger(propsRef.current)) {\n return propsRef.current.trigger(tr);\n }\n },\n }\n : {\n ...sharedOptions,\n triggerCharacters: props.triggerCharacters ?? [],\n },\n ),\n ]);\n });\n\n return null;\n}\n\nexport { Mention, getCurrentMentionReplaceRange };\n\nexport type { MentionOptions };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { createPortal } from 'react-dom';\nimport { forwardRef, type ReactNode, useImperativeHandle } from 'react';\n\nimport {\n useHTMLElement,\n useInjectorEffect,\n useLatest,\n} from '@coze-editor/react-hooks';\nimport { type BuiltinEditorAPI, useEditor } from '@coze-editor/react';\nimport { Decoration, EditorView, WidgetType } from '@codemirror/view';\nimport { MapMode, StateEffect, StateField } from '@codemirror/state';\n\ninterface EmbededLineViewProps {\n children?: ReactNode;\n}\n\nclass DOMWidget extends WidgetType {\n constructor(private options: { dom: HTMLElement }) {\n super();\n }\n\n toDOM() {\n return this.options.dom;\n }\n\n eq(other: DOMWidget) {\n return this.options.dom === other.options.dom;\n }\n}\n\ninterface UpdateOptions {\n visible: boolean;\n // line number, 1-based, defaults to 1\n line?: number;\n // where to put the view, before or after the target line\n side?: EmbededLineViewSide;\n}\n\ninterface EmbededLineViewRefProps {\n update: (options: UpdateOptions) => void;\n}\n\nenum EmbededLineViewSide {\n Before = 'before',\n After = 'after',\n}\n\nconst updateEffect = StateEffect.define<Required<UpdateOptions>>();\n\nconst EmbededLineView = forwardRef<\n EmbededLineViewRefProps,\n EmbededLineViewProps\n>(function EmbededLineView({ children }, ref) {\n const dom = useHTMLElement('div');\n const domRef = useLatest(dom);\n const editor = useEditor<BuiltinEditorAPI>();\n const editorRef = useLatest(editor);\n\n useImperativeHandle(ref, () => ({\n update({ visible, line, side }: UpdateOptions) {\n editorRef.current?.$view.dispatch({\n effects: updateEffect.of({\n visible,\n line: line ?? 1,\n side: side ?? EmbededLineViewSide.Before,\n }),\n });\n },\n }));\n\n useInjectorEffect(injector => {\n const field = StateField.define({\n create() {\n return {\n position: 0,\n side: EmbededLineViewSide.Before,\n decorations: Decoration.none,\n };\n },\n update(value, tr) {\n const newPosition = tr.changes.mapPos(\n value.position,\n -1,\n MapMode.Simple,\n );\n\n let newValue = value;\n if (typeof newPosition === 'number' && newPosition !== value.position) {\n const docLine = tr.state.doc.lineAt(newPosition);\n\n let decoPos = 0;\n\n if (value.side === EmbededLineViewSide.After) {\n decoPos = docLine.to;\n } else {\n decoPos = docLine.from;\n }\n\n newValue = {\n ...value,\n position: newPosition,\n decorations: Decoration.set([\n Decoration.widget({\n widget: new DOMWidget({\n dom: domRef.current,\n }),\n block: true,\n side: value.side === EmbededLineViewSide.After ? 1 : -1,\n }).range(decoPos),\n ]),\n };\n }\n\n for (const effect of tr.effects) {\n if (effect.is(updateEffect)) {\n const { visible, line, side } = effect.value;\n\n if (!visible) {\n return {\n position: newValue.position,\n side,\n decorations: Decoration.none,\n };\n }\n\n // out of range, ignore\n if (line < 1 || line > tr.startState.doc.lines) {\n continue;\n }\n\n const docLine = tr.startState.doc.line(line);\n\n let decoPos = 0;\n\n if (side === EmbededLineViewSide.After) {\n decoPos = docLine.to;\n } else {\n decoPos = docLine.from;\n }\n\n return {\n position: decoPos,\n side,\n decorations: Decoration.set([\n Decoration.widget({\n widget: new DOMWidget({\n dom: domRef.current,\n }),\n block: true,\n side: newValue.side === EmbededLineViewSide.After ? 1 : -1,\n }).range(decoPos),\n ]),\n };\n }\n }\n\n return newValue;\n },\n provide(f) {\n return EditorView.decorations.compute(\n [f],\n state => state.field(f).decorations,\n );\n },\n });\n\n return injector.inject([field]);\n }, []);\n\n return createPortal(children, dom);\n});\n\nexport { EmbededLineView, EmbededLineViewSide, type EmbededLineViewRefProps };\n"],"mappings":"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","names":["import_react","CursorMirror","import_react","import_dom","import_extensions","CursorMirror","import_react","import_react","import_react_hooks","import_extensions","import_react","import_view","React","hash","import_react_dom","import_react","import_jotai","import_react_hooks","import_view","import_state","import_view","gutter","gutters","marker","import_state","React","GutterPlacement","gutter","leftGutter","import_react_dom","import_react","import_utils","import_react_hooks","import_view","import_state","React","injector","import_react_dom","import_react_hooks","import_react","import_react_hooks","import_react_dom","import_react","import_react_hooks","import_view","import_state","import_view","setWidgetLineNumber","import_react","import_view","import_state","import_utils","import_state","options","import_react_hooks","import_react_dom","import_react","import_react_hooks","import_view","import_state","EmbededLineViewSide","EmbededLineView"]}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@coze-editor/react-components",
3
+ "version": "0.1.0-alpha.0fd19e",
4
+ "description": "react-components",
5
+ "license": "MIT",
6
+ "author": "fengzilong",
7
+ "maintainers": [],
8
+ "sideEffects": [
9
+ "**/*.css",
10
+ "**/*.less",
11
+ "**/*.sass",
12
+ "**/*.scss"
13
+ ],
14
+ "main": "./dist/esm/index.js",
15
+ "module": "./dist/esm/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsup",
22
+ "lint": "eslint && tsc --noEmit"
23
+ },
24
+ "dependencies": {
25
+ "@codemirror/language": "^6.10.1",
26
+ "@codemirror/merge": "^6.10.0",
27
+ "@coze-editor/extension-placeholder": "0.1.0-alpha.0fd19e",
28
+ "@coze-editor/extensions": "0.1.0-alpha.0fd19e",
29
+ "@coze-editor/react-hooks": "0.1.0-alpha.0fd19e",
30
+ "@coze-editor/utils": "0.1.0-alpha.0fd19e",
31
+ "@coze-editor/vscode": "0.1.0-alpha.0fd19e",
32
+ "@floating-ui/dom": "^1.6.3",
33
+ "@lezer/highlight": "~1.2.0",
34
+ "@lukeed/uuid": "^2.0.1",
35
+ "@types/hash-sum": "^1.0.2",
36
+ "hash-sum": "^2.0.0",
37
+ "jotai": "^2.10.0"
38
+ },
39
+ "devDependencies": {
40
+ "@codemirror/state": "^6.4.1",
41
+ "@codemirror/view": "^6.26.1",
42
+ "@coze-arch/ts-config": "workspace:*",
43
+ "@coze-editor/eslint-config": "workspace:*",
44
+ "@coze-editor/react": "workspace:*",
45
+ "@types/node": "^22",
46
+ "@types/react": "18.2.37",
47
+ "@types/react-dom": "18.2.15",
48
+ "eslint": "9.14.0",
49
+ "react": "~18.2.0",
50
+ "react-dom": "~18.2.0",
51
+ "tsup": "^8.0.1",
52
+ "typescript": "^5.8.2"
53
+ },
54
+ "peerDependencies": {
55
+ "@codemirror/state": "^6.4.1",
56
+ "@codemirror/view": "^6.26.1",
57
+ "@coze-editor/react": "workspace:*",
58
+ "react": "~18.2.0",
59
+ "react-dom": "~18.2.0"
60
+ },
61
+ "publishConfig": {
62
+ "access": "public",
63
+ "registry": "https://registry.npmjs.org"
64
+ },
65
+ "test:main": "./src/index.ts"
66
+ }