@textbus/platform-browser 5.4.10 → 5.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/_utils/uikit.ts","../src/_utils/env.ts","../src/injection-tokens.ts","../src/parser.ts","../src/types.ts","../src/dom-adapter.ts","../src/selection-bridge.ts","../src/magic-input.ts","../src/collaborate-cursor.ts","../src/native-input.ts","../src/browser-module.ts"],"sourcesContent":["/**\n * 选区焦点可视位置\n */\nexport interface Rect {\n left: number\n top: number\n width: number\n height: number\n}\n\nconst OVERFLOW_CLIP_VALUES = new Set(['auto', 'hidden', 'scroll', 'clip'])\n\nfunction rectRight(r: Rect): number {\n return r.left + r.width\n}\n\nfunction rectBottom(r: Rect): number {\n return r.top + r.height\n}\n\nfunction isOverflowClipAxis(value: string): boolean {\n return OVERFLOW_CLIP_VALUES.has(value)\n}\n\nexport interface OverflowClipAncestor {\n element: Element\n clipX: boolean\n clipY: boolean\n}\n\nexport interface OverflowClipContext {\n /** 自内而外 */\n clipAncestors: OverflowClipAncestor[]\n scrollContainers: Element[]\n /** 嵌套滚动时最近的 overflow 容器 */\n firstScrollContainer: Element\n}\n\nfunction readOverflowClipAxes(style: CSSStyleDeclaration): Pick<OverflowClipAncestor, 'clipX' | 'clipY'> | null {\n const overflow = style.overflow\n const overflowX = style.overflowX\n const overflowY = style.overflowY\n if (!isOverflowClipAxis(overflow) &&\n !isOverflowClipAxis(overflowX) &&\n !isOverflowClipAxis(overflowY)) {\n return null\n }\n return {\n clipX: isOverflowClipAxis(overflowX) || isOverflowClipAxis(overflow),\n clipY: isOverflowClipAxis(overflowY) || isOverflowClipAxis(overflow),\n }\n}\n\n/**\n * 一次遍历祖先链:缓存 overflow 轴信息,并收集滚动监听目标。\n */\nexport function getOverflowClipContext(anchor: Node, extraRoot?: Element): OverflowClipContext {\n const clipAncestors: OverflowClipAncestor[] = []\n const scrollContainers = new Set<Element>()\n let node: Node | null = anchor.nodeType === Node.ELEMENT_NODE ? anchor : anchor.parentNode\n\n while (node) {\n if (node instanceof Element) {\n const flags = readOverflowClipAxes(getComputedStyle(node))\n if (flags) {\n clipAncestors.push({ element: node, clipX: flags.clipX, clipY: flags.clipY })\n scrollContainers.add(node)\n }\n }\n if (node === node.ownerDocument?.documentElement) {\n break\n }\n node = node.parentNode\n }\n\n const doc = anchor.ownerDocument\n const documentElement = doc?.documentElement ?? document.documentElement\n scrollContainers.add(documentElement)\n if (extraRoot) {\n scrollContainers.add(extraRoot)\n }\n\n return {\n clipAncestors,\n scrollContainers: [...scrollContainers],\n firstScrollContainer: clipAncestors[0]?.element ?? documentElement,\n }\n}\n\nfunction intersectRect(a: Rect, b: Rect): Rect | null {\n const left = Math.max(a.left, b.left)\n const top = Math.max(a.top, b.top)\n const right = Math.min(rectRight(a), rectRight(b))\n const bottom = Math.min(rectBottom(a), rectBottom(b))\n if (left >= right || top >= bottom) {\n return null\n }\n return { left, top, width: right - left, height: bottom - top }\n}\n\nfunction rectContainsPoint(rect: Rect, x: number, y: number): boolean {\n return x >= rect.left && x <= rectRight(rect) && y >= rect.top && y <= rectBottom(rect)\n}\n\nfunction intersectRectWithClipAncestor(\n ancestor: OverflowClipAncestor,\n visible: Rect,\n): Rect | null {\n const el = ancestor.element\n const border = el.getBoundingClientRect()\n let left = visible.left\n let top = visible.top\n let right = rectRight(visible)\n let bottom = rectBottom(visible)\n\n if (ancestor.clipX) {\n const clipLeft = border.left + el.clientLeft\n const clipRight = clipLeft + el.clientWidth\n left = Math.max(left, clipLeft)\n right = Math.min(right, clipRight)\n }\n if (ancestor.clipY) {\n const clipTop = border.top + el.clientTop\n const clipBottom = clipTop + el.clientHeight\n top = Math.max(top, clipTop)\n bottom = Math.min(bottom, clipBottom)\n }\n\n if (left >= right || top >= bottom) {\n return null\n }\n return { left, top, width: right - left, height: bottom - top }\n}\n\nfunction getVisibleRectInOverflowClipsFromAncestors(\n rect: Rect,\n clipAncestors: OverflowClipAncestor[],\n): Rect | null {\n let visible: Rect = rect\n for (const ancestor of clipAncestors) {\n const next = intersectRectWithClipAncestor(ancestor, visible)\n if (!next) {\n return null\n }\n visible = next\n }\n return visible\n}\n\n/** 锚点是否被 CSS 隐藏(opacity / visibility 等);不做点命中,避免 mask 层挡住误判 */\nfunction isCaretAnchorCssVisible(anchor: Node): boolean {\n const anchorEl: Element | null = anchor.nodeType === Node.ELEMENT_NODE ?\n anchor as Element :\n anchor.parentElement\n if (!anchorEl?.isConnected) {\n return false\n }\n if (typeof anchorEl.checkVisibility === 'function') {\n return anchorEl.checkVisibility({\n checkOpacity: true,\n checkVisibilityCSS: true,\n })\n }\n return true\n}\n\nconst CLIP_INSET_EPSILON = 0.5\n\nfunction clipPathInsetFromVisibleRegion(elRect: Rect, visible: Rect): string {\n const top = Math.max(0, visible.top - elRect.top)\n const left = Math.max(0, visible.left - elRect.left)\n const bottom = Math.max(0, rectBottom(elRect) - rectBottom(visible))\n const right = Math.max(0, rectRight(elRect) - rectRight(visible))\n if (top < CLIP_INSET_EPSILON && left < CLIP_INSET_EPSILON &&\n bottom < CLIP_INSET_EPSILON && right < CLIP_INSET_EPSILON) {\n return 'none'\n }\n return `inset(${top}px ${right}px ${bottom}px ${left}px)`\n}\n\nexport interface CaretBoxLayout {\n boxHeight: number\n rectTop: number\n}\n\n/** 根据行高与内容矩形计算光标盒高度与顶部(视口坐标) */\nexport function measureCaretBoxLayout(contentRect: Rect, style: CSSStyleDeclaration): CaretBoxLayout {\n const {fontSize, lineHeight} = style\n let height: number\n if (isNaN(+lineHeight)) {\n const f = parseFloat(lineHeight)\n height = isNaN(f) ? parseFloat(fontSize) : f\n } else {\n height = parseFloat(fontSize) * parseFloat(lineHeight)\n }\n\n const boxHeight = Math.max(Math.floor(Math.max(height, contentRect.height)), 12)\n let rectTop = contentRect.top\n if (contentRect.height < height) {\n rectTop -= (height - contentRect.height) / 2\n }\n return {\n boxHeight,\n rectTop: Math.floor(rectTop),\n }\n}\n\n/** 测量行内旋转角度(writing-mode 继承) */\nexport function measureInlineCaretRotate(node: HTMLElement, initialRotate: number, writingMode: string): number {\n let rotate = initialRotate\n if (rotate !== 0) {\n const hackEle = document.createElement('span')\n hackEle.style.cssText = 'display: inline-block; width: 10px; height: 10px; position: relative; contain: layout style size; writing-mode: inherit'\n const pointEle = document.createElement('span')\n pointEle.style.cssText = 'position: absolute; left: 0; top: 0; width:0;height:0'\n hackEle.append(pointEle)\n node.append(hackEle)\n\n const p1 = pointEle.getBoundingClientRect()\n pointEle.style.right = '0'\n pointEle.style.left = ''\n const p2 = pointEle.getBoundingClientRect()\n rotate = Math.atan2(p1.y - p2.y, p1.x - p2.x) * 180 / Math.PI\n hackEle.remove()\n }\n if (writingMode === 'vertical-lr' || writingMode === 'vertical-rl') {\n rotate += 90\n }\n return rotate\n}\n\nexport interface CaretPresentation {\n outOfView: boolean\n clipPath: string\n layoutElRect: Rect\n position: { left: number; top: number; height: number }\n caretColor: string\n style: { height: string; lineHeight: string; fontSize: string }\n}\n\nexport interface ComputeCaretPresentationOptions {\n anchor: HTMLElement\n maskRect: Rect\n clipAncestors: OverflowClipAncestor[]\n maskLeft: number\n maskTop: number\n boxHeight: number\n rectTop: number\n contentRect: Rect\n fontSize: string\n color: string\n measureElementRect: () => Rect\n}\n\n/**\n * 在 element 样式已写入后调用:计算裁剪、是否移出视口及对外事件数据。\n */\nexport function computeCaretPresentation(options: ComputeCaretPresentationOptions): CaretPresentation {\n const {\n anchor,\n maskRect,\n clipAncestors,\n maskLeft,\n maskTop,\n boxHeight,\n rectTop,\n contentRect,\n fontSize,\n color,\n measureElementRect,\n } = options\n\n const caretCenterX = contentRect.left + contentRect.width / 2\n const caretCenterY = rectTop + boxHeight / 2\n const layoutElRect: Rect = {\n left: maskRect.left + maskLeft,\n top: maskRect.top + maskTop,\n width: 2,\n height: boxHeight,\n }\n\n let visibleRect = getVisibleRectInOverflowClipsFromAncestors(layoutElRect, clipAncestors)\n visibleRect = visibleRect ? intersectRect(visibleRect, maskRect) : null\n const inClipBounds = !!visibleRect && rectContainsPoint(visibleRect, caretCenterX, caretCenterY)\n const outOfView = !inClipBounds || !isCaretAnchorCssVisible(anchor)\n\n let clipPath = 'none'\n if (!outOfView && visibleRect) {\n clipPath = clipPathInsetFromVisibleRegion(measureElementRect(), visibleRect)\n }\n\n return {\n outOfView,\n clipPath,\n layoutElRect,\n position: { left: maskLeft, top: rectTop, height: boxHeight },\n caretColor: color === 'rgba(0, 0, 0, 0)' ? '#000' : color,\n style: {\n height: boxHeight + 'px',\n lineHeight: boxHeight + 'px',\n fontSize,\n },\n }\n}\n\nexport interface UIElementParams {\n classes?: string[]\n attrs?: {[key: string]: any}\n props?: {[key: string]: any}\n styles?: {[key: string]: any}\n children?: (Node | null)[]\n on?: Record<string, (ev: Event) => void>\n}\n\nexport function createElement(tagName: string, options: UIElementParams = {}): HTMLElement {\n const el = document.createElement(tagName)\n if (options.classes) {\n el.classList.add(...options.classes)\n }\n if (options.attrs) {\n Object.keys(options.attrs).forEach(key => {\n el.setAttribute(key, options.attrs![key])\n })\n }\n if (options.props) {\n Object.keys(options.props).forEach(key => {\n (el as any)[key] = options.props![key]\n })\n }\n if (options.styles) {\n Object.assign(el.style, options.styles)\n }\n if (options.children) {\n options.children.filter(i => i).forEach(item => {\n el.appendChild(item as Node)\n })\n }\n if (options.on) {\n Object.keys(options.on).forEach(key => {\n el.addEventListener(key, options.on![key])\n })\n }\n return el\n}\n\nexport function getLayoutRectByRange(range: Range): Rect {\n let { startContainer, startOffset } = range\n if (startContainer.nodeType === Node.TEXT_NODE) {\n if (startOffset > 0) {\n return range.getBoundingClientRect()\n }\n const parentNode = startContainer.parentNode!\n startOffset = Array.from(parentNode.childNodes).indexOf(startContainer as any)\n startContainer = parentNode\n }\n\n const beforeNode = startContainer.childNodes[startOffset - 1]\n if (beforeNode) {\n if (beforeNode.nodeType === Node.ELEMENT_NODE && beforeNode.nodeName.toLowerCase() !== 'br') {\n const rect = (beforeNode as HTMLElement).getBoundingClientRect()\n return {\n left: rect.right,\n top: rect.top,\n width: range.collapsed ? 1 : rect.width,\n height: rect.height\n }\n } else if (beforeNode.nodeType === Node.TEXT_NODE) {\n const range2 = document.createRange()\n range2.setStart(beforeNode, beforeNode.textContent!.length)\n range2.setEnd(beforeNode, beforeNode.textContent!.length)\n const rect = range2.getBoundingClientRect()\n return {\n left: rect.right,\n top: rect.top,\n width: range.collapsed ? 1 : rect.width,\n height: rect.height\n }\n }\n }\n const offsetNode = startContainer.childNodes[startOffset]\n let isInsertBefore = false\n if (!offsetNode) {\n const lastChild = startContainer.lastChild\n if (lastChild && lastChild.nodeType === Node.ELEMENT_NODE) {\n const rect = (lastChild as HTMLElement).getBoundingClientRect()\n return {\n left: rect.right,\n top: rect.top,\n width: range.collapsed ? 1 : rect.width,\n height: rect.height\n }\n }\n }\n if (offsetNode) {\n if (offsetNode.nodeType === Node.ELEMENT_NODE && offsetNode.nodeName.toLowerCase() !== 'br') {\n const rect = (offsetNode as HTMLElement).getBoundingClientRect()\n return {\n left: rect.left,\n top: rect.top,\n width: range.collapsed ? 1 : rect.width,\n height: rect.height\n }\n }\n isInsertBefore = true\n }\n const span = startContainer.ownerDocument!.createElement('span')\n span.innerText = '\\u200b'\n span.style.display = 'inline-block'\n if (isInsertBefore) {\n startContainer.insertBefore(span, offsetNode)\n } else {\n startContainer.appendChild(span)\n }\n const rect = span.getBoundingClientRect()\n startContainer.removeChild(span)\n return {\n left: rect.left,\n top: rect.top,\n width: range.collapsed ? 1 : rect.width,\n height: rect.height\n }\n}\n","export const isWindows = () => /win(dows|32|64)/i.test(navigator.userAgent)\nexport const isMac = () => /mac os/i.test(navigator.userAgent)\nexport const isSafari = () => /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent)\nexport const isFirefox = () => /Firefox/.test(navigator.userAgent)\n\nexport const isMobileBrowser = () => /Android|iPhone|iPad/.test(navigator.userAgent)\n","import { InjectionToken } from '@viewfly/core'\n\nimport type { ViewOptions } from './browser-module'\n\n/**\n * 编辑器可选项依赖注入 token\n */\nexport const EDITOR_OPTIONS = new InjectionToken<ViewOptions>('EDITOR_OPTIONS')\n\n/**\n * 编辑器容器依赖注入 token\n */\nexport const VIEW_CONTAINER = new InjectionToken<HTMLElement>('VIEW_CONTAINER')\n\n/**\n * 编辑器容器依赖注入 token\n */\nexport const VIEW_DOCUMENT = new InjectionToken<HTMLElement>('VIEW_DOCUMENT')\n\n/**\n * 编辑器容器遮罩层 token\n */\nexport const VIEW_MASK = new InjectionToken<HTMLElement>('VIEW_MASK')\n","import { Inject, Injectable } from '@viewfly/core'\nimport { Attribute, Component, ContentType, FormatItem, Formatter, FormatValue, Slot, Textbus } from '@textbus/core'\n\nimport { EDITOR_OPTIONS } from './injection-tokens'\nimport type { ViewOptions } from './browser-module'\n\n/**\n * 插槽解析器\n */\nexport interface SlotParser {\n /**\n * 将指定 DOM 节点解析为插槽数据\n * @param childSlot 储存数据的插槽\n * @param slotRootElement 插槽的根节点\n * @param slotContentHostElement 插槽的内容节点\n *\n * 注意:当不传入内容节点时,Textbus 会把根节点当成内容节点\n */<T extends Slot>(childSlot: T, slotRootElement: Element, slotContentHostElement?: Element): T\n}\n\n/**\n * 组件加载器\n */\nexport interface ComponentLoader {\n /** 识别组件的匹配方法 */\n match(element: Element,\n returnableContentTypes: ContentType[]): boolean\n\n /** 读取组件内容的方法 */\n read(element: Element, textbus: Textbus, slotParser: SlotParser): Component | Slot | void\n}\n\nexport interface FormatLoaderReadResult<T = FormatValue> {\n formatter: Formatter<T>\n value: T\n}\n\n/**\n * 格式加载器\n */\nexport interface FormatLoader<T = FormatValue> {\n /**\n * 匹配一个 DOM 节点是否是某个格式节点\n * @param element\n */\n match(element: Element): boolean\n\n /**\n * 读取匹配到的节点,并返回读取后的信息\n * @param element\n */\n read(element: Element): FormatLoaderReadResult<T>\n}\n\nexport interface AttributeLoaderReadResult<T = FormatValue> {\n attribute: Attribute<T>\n value: T\n}\n\n/**\n * 属性加载器\n */\nexport interface AttributeLoader<T = FormatValue> {\n /**\n * 匹配一个 DOM 节点是否是某个属性节点\n * @param element\n */\n match(element: Element): boolean\n\n /**\n * 读取匹配到的节点,并返回读取后的信息\n * @param element\n */\n read(element: Element): AttributeLoaderReadResult<T>\n}\n\n/**\n * 用于解析 HTML,并把 HTML 内容转换为 Textbus 可以支持的组件或插槽数据\n */\n@Injectable()\nexport class Parser {\n static parseHTML(html: string) {\n return new DOMParser().parseFromString(html, 'text/html').body\n }\n\n componentLoaders: ComponentLoader[]\n formatLoaders: FormatLoader<any>[]\n attributeLoaders: AttributeLoader<any>[]\n\n constructor(@Inject(EDITOR_OPTIONS) options: ViewOptions,\n private textbus: Textbus) {\n const componentLoaders = [\n ...(options.componentLoaders || [])\n ]\n const formatLoaders = [\n ...(options.formatLoaders || [])\n ]\n const attributeLoaders = [\n ...(options.attributeLoaders || [])\n ]\n // options.imports?.forEach(i => {\n // componentLoaders.push(...(i.componentLoaders || []))\n // formatLoaders.push(...(i.formatLoaders || []))\n // })\n this.componentLoaders = componentLoaders\n this.formatLoaders = formatLoaders\n this.attributeLoaders = attributeLoaders\n }\n\n /**\n * 使用指定的组件加载器解析一段 HTML 字符串或 DOM 元素\n * @param html\n * @param rootComponentLoader\n */\n parseDoc(html: string | HTMLElement, rootComponentLoader: ComponentLoader) {\n const element = typeof html === 'string' ? Parser.parseHTML(html) : html\n return rootComponentLoader.read(\n element,\n this.textbus,\n (childSlot, slotRootElement, slotContentHostElement = slotRootElement) => {\n return this.readSlot(childSlot, slotRootElement, slotContentHostElement)\n }\n )\n }\n\n /**\n * 将一段 HTML 或 DOM 元素解析到指定插槽\n * @param html\n * @param rootSlot\n */\n parse(html: string | HTMLElement, rootSlot: Slot) {\n const element = typeof html === 'string' ? Parser.parseHTML(html) : html\n return this.readFormats(element, rootSlot)\n }\n\n private readComponent(el: Node, slot: Slot) {\n if (el.nodeType === Node.ELEMENT_NODE) {\n if ((el as HTMLElement).tagName === 'BR') {\n slot.insert('\\n')\n return\n }\n const schema = [...slot.schema]\n for (const t of this.componentLoaders) {\n if (t.match(el as HTMLElement, schema)) {\n const result = t.read(\n el as HTMLElement,\n this.textbus,\n (childSlot, slotRootElement, slotContentHostElement = slotRootElement) => {\n return this.readSlot(childSlot, slotRootElement, slotContentHostElement)\n }\n )\n if (!result) {\n return\n }\n if (result instanceof Slot) {\n result.toDelta().forEach(i => slot.insert(i.insert, i.formats))\n return\n }\n slot.insert(result)\n return\n }\n }\n this.readFormats(el as HTMLElement, slot)\n } else if (el.nodeType === Node.TEXT_NODE) {\n this.readText(slot, el)\n }\n }\n\n private readText(slot: Slot, el: Node) {\n const textContent = el.textContent\n if (/^\\s*[\\r\\n\\u200b]+\\s*$/.test(textContent as string)) {\n return\n }\n slot.insert(textContent as string)\n }\n\n private readFormats(el: Element, slot: Slot) {\n const formats = this.formatLoaders.filter(f => {\n return f.match(el)\n }).map(f => {\n return f.read(el)\n })\n const startIndex = slot.index\n let startNode = el.firstChild\n while (startNode) {\n this.readComponent(startNode, slot)\n startNode = startNode.nextSibling\n }\n const endIndex = slot.index\n this.applyFormats(slot, formats.map<FormatItem<any>>(i => {\n return {\n formatter: i.formatter,\n value: i.value,\n startIndex,\n endIndex\n }\n }))\n slot.retain(endIndex)\n return slot\n }\n\n private readSlot<T extends Slot>(childSlot: T, slotRootElement: Element, slotContentElement: Element): T {\n if (slotRootElement.nodeType === Node.ELEMENT_NODE) {\n this.attributeLoaders.filter(a => {\n return a.match(slotRootElement)\n }).forEach(a => {\n const r = a.read(slotRootElement)\n childSlot.setAttribute(r.attribute, r.value)\n })\n }\n if (slotContentElement.nodeType === Node.ELEMENT_NODE) {\n this.readFormats(slotContentElement, childSlot)\n } else {\n this.readText(childSlot, slotContentElement)\n }\n return childSlot\n }\n\n private applyFormats(slot: Slot, formatItems: FormatItem<any>[]) {\n slot.background(() => {\n formatItems.forEach(i => {\n slot.retain(i.startIndex)\n slot.retain(i.endIndex - i.startIndex, i.formatter, i.value)\n })\n })\n }\n}\n","import { Observable } from '@tanbo/stream'\n\nimport { Rect } from './_utils/uikit'\n\nexport interface CaretLimit {\n top: number\n bottom: number\n}\n\nexport interface CaretPosition {\n left: number\n top: number\n height: number\n}\n\nexport function caretPositionEqual(a: CaretPosition | null, b: CaretPosition | null): boolean {\n if (a === b) {\n return true\n }\n if (a === null || b === null) {\n return false\n }\n return a.left === b.left && a.top === b.top && a.height === b.height\n}\n\nexport interface Caret {\n onPositionChange: Observable<CaretPosition | null>\n readonly rect: Rect\n\n refresh(): void\n}\n\nexport abstract class Input {\n /**\n * @experimental\n */\n abstract composition: boolean\n /**\n * @experimental\n */\n abstract onReady: Promise<void>\n abstract caret: Caret\n abstract disabled: boolean\n\n abstract focus(nativeRange: Range, reFlash: boolean): void\n\n abstract blur(): void\n\n abstract destroy(): void\n}\n","import { Adapter } from '@textbus/core'\nimport { Subject } from '@tanbo/stream'\n\nimport { createElement } from './_utils/uikit'\nimport { VIEW_DOCUMENT } from './injection-tokens'\n\nexport abstract class DomAdapter<\n ViewComponent extends object = object,\n ViewElement extends object = object> extends Adapter<Element, Node, ViewComponent, ViewElement> {\n onViewUpdated = new Subject<void>()\n host = createElement('div', {\n styles: {\n cursor: 'text',\n overflowWrap: 'break-word',\n boxSizing: 'border-box',\n flex: 1,\n outline: 'none'\n },\n attrs: {\n 'data-textbus-view': VIEW_DOCUMENT,\n },\n props: {\n id: 'textbus-' + Number((Math.random() + '').substring(2)).toString(16)\n }\n })\n}\n","import { delay, filter, fromEvent, Observable, Subject, Subscription } from '@tanbo/stream'\nimport { Inject, Injectable } from '@viewfly/core'\nimport {\n NativeSelectionBridge,\n NativeSelectionConnector,\n SelectionPosition,\n Slot,\n AbstractSelection,\n RootComponentRef,\n Controller,\n Selection,\n Textbus,\n Scheduler\n} from '@textbus/core'\n\nimport { EDITOR_OPTIONS, VIEW_DOCUMENT } from './injection-tokens'\nimport { getLayoutRectByRange, Rect } from './_utils/uikit'\nimport { Input } from './types'\nimport type { ViewOptions } from './browser-module'\nimport { DomAdapter } from './dom-adapter'\n\n/**\n * Textbus PC 端选区桥接实现\n */\n@Injectable()\nexport class SelectionBridge implements NativeSelectionBridge {\n onSelectionChange: Observable<Range | null>\n nativeSelection = document.getSelection()!\n\n syncSelectionFromNativeSelectionChange = true\n\n private selectionChangeEvent = new Subject<Range | null>()\n\n private subs: Subscription[] = []\n private sub: Subscription\n private connector: NativeSelectionConnector | null = null\n\n private ignoreSelectionChange = false\n\n private changeFromUser = false\n private docContainer: HTMLElement\n\n private cacheCaretPositionTimer!: any\n private oldCaretPosition!: Rect | null\n\n constructor(@Inject(EDITOR_OPTIONS) private config: ViewOptions,\n textbus: Textbus,\n controller: Controller,\n private selection: Selection,\n private rootComponentRef: RootComponentRef,\n private input: Input,\n private scheduler: Scheduler,\n private domAdapter: DomAdapter) {\n this.docContainer = textbus.get(VIEW_DOCUMENT)\n this.onSelectionChange = this.selectionChangeEvent.asObservable().pipe(filter(() => {\n return !controller.readonly\n }))\n this.sub = this.onSelectionChange.subscribe((r) => {\n if (r) {\n input.focus(r, this.changeFromUser)\n } else {\n input.blur()\n }\n })\n this.sub.add(\n fromEvent(document, 'focusin').subscribe(ev => {\n let target = ev.target as HTMLElement\n if (/^(input|textarea|select)$/i.test(target.nodeName)) {\n if (target.tagName.toLowerCase() === 'input' && /^(range|date)$/.test((target as HTMLInputElement).type)) {\n return\n }\n this.ignoreSelectionChange = true\n return\n }\n if (!config.useContentEditable) {\n while (target) {\n if (target.contentEditable === 'true') {\n this.ignoreSelectionChange = true\n return\n }\n target = target.parentNode as HTMLElement\n }\n }\n })\n )\n this.sub.add(\n fromEvent(document, 'focusout').subscribe(() => {\n this.ignoreSelectionChange = false\n })\n )\n }\n\n connect(connector: NativeSelectionConnector) {\n this.disConnect()\n this.connector = connector\n this.syncSelection(connector)\n this.listen(connector)\n }\n\n disConnect() {\n this.connector = null\n this.unListen()\n }\n\n getRect(location: SelectionPosition) {\n const { focus, anchor } = this.getPositionByRange({\n focusOffset: location.offset,\n anchorOffset: location.offset,\n focusSlot: location.slot,\n anchorSlot: location.slot\n })\n if (!focus || !anchor) {\n return null\n }\n const nativeRange = document.createRange()\n nativeRange.setStart(focus.node, focus.offset)\n nativeRange.collapse()\n return getLayoutRectByRange(nativeRange)\n }\n\n restore(abstractSelection: AbstractSelection | null, fromLocal: boolean) {\n this.changeFromUser = fromLocal\n if (this.ignoreSelectionChange || !this.connector) {\n return\n }\n this.unListen()\n if (!abstractSelection) {\n this.nativeSelection.removeAllRanges()\n this.selectionChangeEvent.next(null)\n this.listen(this.connector)\n return\n }\n\n const { focus, anchor } = this.getPositionByRange(abstractSelection)\n if (!focus || !anchor) {\n this.nativeSelection.removeAllRanges()\n this.selectionChangeEvent.next(null)\n this.listen(this.connector)\n return\n }\n\n function tryOffset(position: { node: Node, offset: number }) {\n if (!position.node) {\n return\n }\n if (position.node.nodeType === Node.TEXT_NODE) {\n const len = position.node.textContent!.length\n if (position.offset > len) {\n position.offset = len\n }\n } else if (position.node.nodeType === Node.ELEMENT_NODE) {\n const len = position.node.childNodes.length\n if (position.offset > len) {\n position.offset = len\n }\n }\n }\n\n try {\n tryOffset(focus)\n tryOffset(anchor)\n this.nativeSelection.setBaseAndExtent(anchor.node, anchor.offset, focus.node, focus.offset)\n } catch (e) {\n setTimeout(() => {\n throw e\n })\n }\n if (this.nativeSelection.rangeCount) {\n const nativeRange = this.nativeSelection.getRangeAt(0)\n this.selectionChangeEvent.next(nativeRange)\n } else {\n this.selectionChangeEvent.next(null)\n }\n\n // hack start 浏览器会触发上面选区更改事件\n const bind = () => {\n if (this.connector) {\n this.listen(this.connector)\n }\n }\n if (fromLocal) {\n Promise.resolve().then(bind)\n return\n }\n if (typeof requestIdleCallback === 'function') {\n requestIdleCallback(bind)\n } else {\n setTimeout(bind, 30)\n }\n // hack end\n }\n\n destroy() {\n this.subs.forEach(i => i.unsubscribe())\n this.sub.unsubscribe()\n }\n\n getPositionByRange(abstractSelection: AbstractSelection) {\n let focus!: { node: Node, offset: number } | null\n let anchor!: { node: Node, offset: number } | null\n try {\n focus = this.findSelectedNodeAndOffset(abstractSelection.focusSlot!, abstractSelection.focusOffset!)\n anchor = focus\n if (abstractSelection.anchorSlot !== abstractSelection.focusSlot ||\n abstractSelection.anchorOffset !== abstractSelection.focusOffset) {\n anchor = this.findSelectedNodeAndOffset(abstractSelection.anchorSlot!, abstractSelection.anchorOffset!)\n }\n return {\n focus,\n anchor\n }\n } catch (e) {\n return {\n focus: null,\n anchor: null\n }\n }\n }\n\n getPreviousLinePositionByCurrent(position: SelectionPosition): SelectionPosition | null {\n return this.getLinePosition(position, false)\n }\n\n getNextLinePositionByCurrent(position: SelectionPosition): SelectionPosition | null {\n return this.getLinePosition(position, true)\n }\n\n private getLinePosition(currentPosition: SelectionPosition, toNext: boolean): SelectionPosition | null {\n clearTimeout(this.cacheCaretPositionTimer)\n if (!this.oldCaretPosition) {\n this.oldCaretPosition = this.getRect(currentPosition)!\n }\n const p = this.getVerticalMovePosition(currentPosition, this.oldCaretPosition.left, toNext)\n this.cacheCaretPositionTimer = setTimeout(() => {\n this.oldCaretPosition = null\n }, 3000)\n return p\n }\n\n /**\n * 计算光标到下一行或上一行的位置\n * @param currentPosition\n * @param startLeft\n * @param toNext\n * @private\n */\n private getVerticalMovePosition(\n currentPosition: SelectionPosition,\n startLeft: number,\n toNext: boolean,\n ): SelectionPosition {\n const nativePos = this.findSelectedNodeAndOffset(currentPosition.slot, currentPosition.offset)\n if (!nativePos) return currentPosition\n\n this.ignoreSelectionChange = true\n const sel = this.nativeSelection\n\n sel.removeAllRanges()\n sel.setBaseAndExtent(nativePos.node, nativePos.offset, nativePos.node, nativePos.offset)\n const startRect = getLayoutRectByRange(sel.getRangeAt(0).cloneRange())\n\n let lastPos = currentPosition\n let prevRange: { node: Node; offset: number } | null = { node: nativePos.node, offset: nativePos.offset }\n\n while (true) {\n sel.modify('move', toNext ? 'forward' : 'backward', 'line')\n\n const { focusNode, focusOffset } = sel\n if (!focusNode) break\n\n // 浏览器无法继续移动\n if (prevRange && focusNode === prevRange.node && focusOffset === prevRange.offset) break\n prevRange = { node: focusNode, offset: focusOffset }\n\n // X 轴对齐\n // const movedRect = getLayoutRectByRange(sel.getRangeAt(0).cloneRange())\n // const xRefined = this.caretPositionFromPoint(startLeft, movedRect)\n // if (xRefined) {\n // focusNode = xRefined.offsetNode\n // focusOffset = xRefined.offset\n // }\n\n const modelPos = this.getCorrectedPosition(focusNode, focusOffset, true)\n if (!modelPos) {\n lastPos = this.getDocumentBoundary(toNext)\n break\n }\n\n lastPos = modelPos\n const rect = this.getRect(modelPos)!\n\n // 仍未到达新行,继续 modify\n if (this.isSameLine(startRect, rect, toNext)) continue\n\n // 已到达新行,沿该行微调 X\n this.ignoreSelectionChange = false\n return this.refineXOnLine(modelPos, startLeft, rect)\n }\n\n this.ignoreSelectionChange = false\n return lastPos\n }\n\n /** 目标位置是否仍在当前视觉行内 */\n private isSameLine(startRect: Rect, targetRect: Rect, toNext: boolean): boolean {\n const startBottom = startRect.top + startRect.height\n const targetBottom = targetRect.top + targetRect.height\n if (toNext) {\n return targetRect.top <= startRect.top || targetBottom <= startBottom\n }\n return targetRect.top >= startRect.top || targetBottom >= startBottom\n }\n\n /**\n * 沿目标行微调位置。\n * 起点在 targetX 右侧 → 向左找到离 targetX 最近的右侧位置;\n * 起点在 targetX 左侧 → 向右找到第一个右侧位置。\n */\n private refineXOnLine(position: SelectionPosition, targetX: number, lineRect: Rect): SelectionPosition {\n const startRect = this.getRect(position)!\n const startLeft = startRect.left\n const lineTop = lineRect.top\n const lineBottom = lineTop + Math.max(lineRect.height, 12)\n if (startLeft === targetX) return position\n\n let cur = position\n if (startLeft > targetX) {\n let rightSide = position\n while (true) {\n const prev = this.selection.getPreviousPositionByPosition(cur.slot, cur.offset)\n if (prev.slot === cur.slot && prev.offset === cur.offset) break\n const rect = this.getRect(prev)\n if (!rect) break\n if (rect.top >= lineBottom || rect.top + rect.height <= lineTop) break\n cur = prev\n if (rect.left === targetX) return prev\n if (rect.left < targetX) return rightSide\n rightSide = prev\n }\n return rightSide\n }\n\n while (true) {\n const next = this.selection.getNextPositionByPosition(cur.slot, cur.offset)\n if (next.slot === cur.slot && next.offset === cur.offset) break\n const rect = this.getRect(next)\n if (!rect) break\n if (rect.top >= lineBottom || rect.top + rect.height <= lineTop) break\n cur = next\n if (rect.left === targetX) return cur\n if (rect.left > targetX) return cur\n }\n return cur\n }\n\n /** 跳转到文档开头或结尾 */\n private getDocumentBoundary(toNext: boolean): SelectionPosition {\n const slots = this.rootComponentRef.component.slots\n if (toNext) {\n const lastSlot = slots[slots.length - 1]\n return { slot: lastSlot, offset: lastSlot.length }\n }\n const firstSlot = slots[0]\n return { slot: firstSlot, offset: 0 }\n }\n\n private caretPositionFromPoint(x: number, rect: Rect) {\n return document.caretPositionFromPoint?.(x, rect.top + rect.height / 2)\n }\n\n private unListen() {\n this.subs.forEach(i => i.unsubscribe())\n this.subs = []\n }\n\n private listen(connector: NativeSelectionConnector) {\n if (!this.config.useContentEditable) {\n const selection = this.nativeSelection\n this.subs.push(\n fromEvent<MouseEvent>(this.docContainer, 'mousedown').subscribe(ev => {\n if (this.ignoreSelectionChange || ev.button === 2) {\n return\n }\n if (!ev.shiftKey) {\n selection.removeAllRanges()\n }\n })\n )\n }\n let isUpdating = false\n this.subs.push(\n this.scheduler.onDocChange.subscribe(() => {\n isUpdating = true\n }),\n this.scheduler.onDocChanged.pipe(delay()).subscribe(() => {\n isUpdating = false\n }),\n fromEvent(document, 'selectionchange').subscribe(() => {\n if (isUpdating) {\n return\n }\n if (this.syncSelectionFromNativeSelectionChange) {\n this.syncSelection(connector)\n }\n })\n )\n }\n\n private syncSelection(connector: NativeSelectionConnector) {\n const selection = this.nativeSelection\n this.changeFromUser = true\n if (this.ignoreSelectionChange ||\n this.input.composition ||\n selection.rangeCount === 0 ||\n !this.docContainer.contains(selection.anchorNode) ||\n this.rootComponentRef.component.slots.length === 0) {\n return\n }\n const rawRange = selection.getRangeAt(0)\n const nativeRange = rawRange.cloneRange()\n const isFocusEnd = selection.focusNode === nativeRange.endContainer && selection.focusOffset === nativeRange.endOffset\n const isFocusStart = selection.focusNode === nativeRange.startContainer && selection.focusOffset === nativeRange.startOffset\n if (!this.docContainer.contains(selection.focusNode)) {\n if (isFocusEnd) {\n const nativeNode = this.domAdapter.getNativeNodeBySlot(this.rootComponentRef.component.slots.at(0)!)\n if (!nativeNode) {\n return\n }\n nativeRange.setEndAfter(nativeNode.lastChild!)\n } else {\n const nativeNode = this.domAdapter.getNativeNodeBySlot(this.rootComponentRef.component.slots.at(-1)!)\n if (!nativeNode) {\n return\n }\n nativeRange.setStartBefore(nativeNode.firstChild!)\n }\n }\n\n const startPosition = this.getCorrectedPosition(nativeRange.startContainer, nativeRange.startOffset, isFocusStart)\n const endPosition = nativeRange.collapsed ?\n startPosition :\n this.getCorrectedPosition(nativeRange.endContainer, nativeRange.endOffset, isFocusEnd)\n\n if ([Node.ELEMENT_NODE, Node.TEXT_NODE].includes(nativeRange.commonAncestorContainer?.nodeType as any) &&\n startPosition && endPosition) {\n const abstractSelection = connector.beforeChange(isFocusEnd ? {\n anchorSlot: startPosition.slot,\n anchorOffset: startPosition.offset,\n focusSlot: endPosition.slot,\n focusOffset: endPosition.offset\n } : {\n focusSlot: startPosition.slot,\n focusOffset: startPosition.offset,\n anchorSlot: endPosition.slot,\n anchorOffset: endPosition.offset\n })\n if (!abstractSelection) {\n this.selectionChangeEvent.next(null)\n connector.setSelection(null)\n return\n }\n const { focus, anchor } = this.getPositionByRange(abstractSelection)\n if (focus && anchor) {\n let start = anchor\n let end = focus\n if (isFocusStart) {\n start = focus\n end = anchor\n }\n if (nativeRange.startContainer !== start.node || nativeRange.startOffset !== start.offset) {\n nativeRange.setStart(start.node, start.offset)\n }\n if (nativeRange.endContainer !== end.node || nativeRange.endOffset !== end.offset) {\n nativeRange.setEnd(end.node, end.offset)\n }\n connector.setSelection(abstractSelection)\n if (selection.isCollapsed && (\n rawRange.startContainer !== start.node ||\n rawRange.startOffset !== start.offset ||\n rawRange.endContainer !== end.node ||\n rawRange.endOffset !== end.offset\n )) {\n rawRange.setStart(start.node, start.offset)\n rawRange.setEnd(end.node, end.offset)\n }\n this.selectionChangeEvent.next(nativeRange)\n } else {\n connector.setSelection(null)\n }\n return\n }\n connector.setSelection(null)\n }\n\n private findSelectedNodeAndOffset(slot: Slot, offset: number): { node: Node, offset: number } | null {\n const prev = slot.getContentAtIndex(offset - 1)\n const nodes = this.domAdapter.getNodesBySlot(slot)\n\n if (prev) {\n if (typeof prev !== 'string') {\n const nativeNode = this.domAdapter.getNativeNodeByComponent(prev)!\n return {\n node: nativeNode.parentNode!,\n offset: Array.from(nativeNode.parentNode!.childNodes).indexOf(nativeNode) + 1\n }\n } else if (prev === '\\n') {\n for (const node of nodes) {\n if (node instanceof Text) {\n continue\n }\n if (node.nodeName === 'BR') {\n const position = this.domAdapter.getLocationByNativeNode(node)\n if (position) {\n if (position.endIndex === offset) {\n const parentNode = node.parentNode!\n return {\n node: parentNode,\n offset: Array.from(parentNode.childNodes).indexOf(node as ChildNode) + 1\n }\n }\n }\n }\n }\n }\n }\n const current = slot.getContentAtIndex(offset)\n if (current && typeof current !== 'string') {\n const nativeNode = this.domAdapter.getNativeNodeByComponent(current)!\n return {\n node: nativeNode.parentNode!,\n offset: Array.from(nativeNode.parentNode!.childNodes).indexOf(nativeNode)\n }\n }\n for (const node of nodes) {\n if (node instanceof Element) {\n if (node.tagName === 'BR') {\n const position = this.domAdapter.getLocationByNativeNode(node)\n if (position) {\n if (position.startIndex === offset) {\n const parentNode = node.parentNode!\n return {\n node: parentNode,\n offset: Array.from(parentNode.childNodes).indexOf(node)\n }\n }\n }\n }\n continue\n }\n const position = this.domAdapter.getLocationByNativeNode(node)\n if (position) {\n if (offset >= position.startIndex && offset <= position.endIndex) {\n return {\n node: node,\n offset: offset - position.startIndex\n }\n }\n }\n }\n return null\n }\n\n private getCorrectedPosition(node: Node, offset: number, toAfter: boolean, excludeNodes: Node[] = []): SelectionPosition | null {\n excludeNodes.push(node)\n if (node.nodeType === Node.ELEMENT_NODE) {\n const containerPosition = this.domAdapter.getLocationByNativeNode(node)\n const childNode = node.childNodes[offset]\n if (childNode) {\n const childPosition = this.domAdapter.getLocationByNativeNode(childNode)\n if (childPosition) {\n if (containerPosition) {\n return {\n slot: childPosition.slot,\n offset: childPosition.startIndex\n }\n }\n return this.findFocusNode(childNode, toAfter, excludeNodes)\n }\n return this.findFocusNode(childNode, toAfter, excludeNodes)\n }\n const prevNode = node.childNodes[offset - 1]\n if (prevNode) {\n const prevPosition = this.domAdapter.getLocationByNativeNode(prevNode)\n if (prevPosition && containerPosition) {\n return {\n slot: prevPosition.slot,\n offset: prevPosition.endIndex\n }\n }\n }\n if (containerPosition) {\n return {\n slot: containerPosition.slot,\n offset: containerPosition.endIndex\n }\n }\n const nextNode = toAfter ? node.nextSibling : node.previousSibling\n if (nextNode) {\n return this.findFocusNode(nextNode, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(node, toAfter, excludeNodes)\n } else if (node.nodeType === Node.TEXT_NODE) {\n const containerPosition = this.domAdapter.getLocationByNativeNode(node)\n if (containerPosition) {\n return {\n slot: containerPosition.slot,\n offset: containerPosition.startIndex + offset\n }\n }\n const nextNode = toAfter ? node.nextSibling : node.previousSibling\n if (nextNode) {\n return this.findFocusNode(nextNode, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(node, toAfter, excludeNodes)\n }\n return null\n }\n\n private findFocusNode(node: Node, toAfter = false, excludeNodes: Node[] = []): SelectionPosition | null {\n if (excludeNodes.includes(node)) {\n const next = toAfter ? node.nextSibling : node.previousSibling\n if (next) {\n return this.findFocusNode(next, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(node, toAfter, excludeNodes)\n }\n excludeNodes.push(node)\n const position = this.domAdapter.getLocationByNativeNode(node as any)\n if (position) {\n return {\n slot: position.slot,\n offset: toAfter ? position.startIndex : position.endIndex\n }\n }\n const firstChild = toAfter ? node.firstChild : node.lastChild\n if (firstChild && !excludeNodes.includes(firstChild as Node)) {\n return this.findFocusNode(firstChild, toAfter, excludeNodes)\n }\n const nextSibling = toAfter ? node.nextSibling : node.previousSibling\n if (nextSibling) {\n return this.findFocusNode(nextSibling, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(node, toAfter, excludeNodes)\n }\n\n private findFocusNodeByParent(node: Node, toAfter: boolean, excludeNodes: Node[]): SelectionPosition | null {\n const parentNode = node.parentNode\n if (parentNode) {\n if (excludeNodes.includes(parentNode)) {\n const nextNode = toAfter ? parentNode.nextSibling : parentNode.previousSibling\n if (nextNode) {\n return this.findFocusNode(nextNode, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(parentNode, toAfter, excludeNodes)\n }\n const parentPosition = this.domAdapter.getLocationByNativeNode(parentNode)\n if (parentPosition) {\n return {\n slot: parentPosition.slot,\n offset: toAfter ? parentPosition.endIndex : parentPosition.startIndex\n }\n }\n excludeNodes.push(parentNode)\n const nextNode = toAfter ? parentNode.nextSibling : parentNode.previousSibling\n if (nextNode) {\n return this.findFocusNode(nextNode, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(parentNode, toAfter, excludeNodes)\n }\n return null\n }\n}\n","import { distinctUntilChanged, filter, fromEvent, map, merge, Observable, Subject, Subscription } from '@tanbo/stream'\nimport { Injectable } from '@viewfly/core'\nimport {\n Commander,\n CompositionStartEventData,\n ContentType,\n Controller,\n Event,\n invokeListener,\n Keyboard,\n Scheduler,\n Selection,\n Slot,\n Textbus\n} from '@textbus/core'\n\nimport {\n CaretPresentation,\n computeCaretPresentation,\n createElement,\n getLayoutRectByRange,\n getOverflowClipContext,\n measureCaretBoxLayout,\n measureInlineCaretRotate,\n OverflowClipContext,\n Rect,\n} from './_utils/uikit'\nimport { Parser } from './parser'\nimport { isFirefox, isMac, isSafari, isWindows } from './_utils/env'\nimport { VIEW_MASK } from './injection-tokens'\nimport { Caret, CaretLimit, CaretPosition, caretPositionEqual, Input } from './types'\nimport { DomAdapter } from './dom-adapter'\n\nconst iframeHTML = `\n<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n <title>Textbus</title>\n <style>\n html {position: fixed; left:0; overflow: hidden}\n html, body{height: 100%;width:100%}\n body{margin:0; overflow: hidden}\n textarea{width: 2000px;height: 100%;opacity: 0; padding: 0; outline: none; border: none; position: absolute; left:0; top:0;}\n </style>\n</head>\n<body>\n</body>\n</html>\n`\n\ninterface CaretStyle {\n height: string\n lineHeight: string\n fontSize: string\n}\n\nclass ExperimentalCaret implements Caret {\n onPositionChange: Observable<CaretPosition | null>\n onStyleChange: Observable<CaretStyle>\n elementRef: HTMLElement\n changeFromSelf = false\n\n getLimit = function (): CaretLimit {\n return {\n top: 0,\n bottom: document.documentElement.clientHeight\n }\n }\n\n get rect() {\n return this.caret.getBoundingClientRect()\n }\n\n private timer: any = null\n private caret: HTMLElement\n\n private set display(v: boolean) {\n this._display = v\n if (!this.caretClippedOut) {\n this.caret.style.visibility = v ? 'visible' : 'hidden'\n }\n }\n\n private get display() {\n return this._display\n }\n\n private _display = true\n private flashing = true\n /** 被 overflow 裁出可视区(不用 display:none,避免触发 Input.hide) */\n private caretClippedOut = false\n\n private subscription = new Subscription()\n private scrollSubscription = new Subscription()\n private scrollRaf = 0\n private clipContext: OverflowClipContext | null = null\n private clipContextAnchor: Node | null = null\n private scrollListenerAnchor: Node | null = null\n\n private positionChangeEvent = new Subject<CaretPosition | null>()\n private styleChangeEvent = new Subject<CaretStyle>()\n private oldRange: Range | null = null\n\n constructor(\n private domRenderer: DomAdapter,\n private scheduler: Scheduler,\n private editorMask: HTMLElement) {\n this.onPositionChange = this.positionChangeEvent.pipe(distinctUntilChanged(caretPositionEqual))\n this.onStyleChange = this.styleChangeEvent.asObservable()\n this.elementRef = createElement('div', {\n styles: {\n position: 'absolute',\n width: '2px',\n pointerEvents: 'none'\n },\n children: [\n this.caret = createElement('span', {\n styles: {\n width: '100%',\n height: '100%',\n position: 'absolute',\n left: 0,\n top: 0\n }\n })\n ]\n })\n\n this.subscription.add(\n fromEvent(document, 'mousedown').subscribe(() => {\n this.flashing = false\n }),\n fromEvent(document, 'mouseup').subscribe(() => {\n this.flashing = true\n }),\n )\n this.editorMask.appendChild(this.elementRef)\n }\n\n refresh() {\n if (this.oldRange?.collapsed) {\n this.updateCursorPosition(this.oldRange)\n }\n }\n\n show(range: Range, restart: boolean) {\n this.oldRange = range\n if (restart || this.scheduler.lastChangesHasLocalUpdate) {\n clearTimeout(this.timer)\n }\n if (range.collapsed && (restart || this.scheduler.lastChangesHasLocalUpdate)) {\n this._display = true\n }\n this.updateCursorPosition(range)\n if (range.collapsed) {\n const anchor = range.startContainer.nodeType === Node.ELEMENT_NODE ?\n range.startContainer :\n range.startContainer.parentNode\n if (anchor) {\n this.bindScrollListeners(anchor)\n }\n if (restart || this.scheduler.lastChangesHasLocalUpdate) {\n this.display = true\n const toggleShowHide = () => {\n this.display = !this.display || !this.flashing\n this.timer = setTimeout(toggleShowHide, 400)\n }\n clearTimeout(this.timer)\n this.timer = setTimeout(toggleShowHide, 400)\n }\n } else {\n this.unbindScrollListeners()\n this.display = false\n clearTimeout(this.timer)\n }\n }\n\n hide() {\n this.unbindScrollListeners()\n this.clearClipContext()\n this.display = false\n clearTimeout(this.timer)\n this.caretClippedOut = false\n this.elementRef.style.clipPath = 'none'\n this.elementRef.style.visibility = ''\n this.caret.style.visibility = 'hidden'\n this.positionChangeEvent.next(null)\n }\n\n destroy() {\n clearTimeout(this.timer)\n this.unbindScrollListeners()\n this.subscription.unsubscribe()\n }\n\n private bindScrollListeners(anchor: Node) {\n if (this.scrollListenerAnchor === anchor) {\n return\n }\n this.unbindScrollListeners()\n this.scrollListenerAnchor = anchor\n const onScroll = () => {\n if (!this.oldRange || this.scrollRaf) {\n return\n }\n this.scrollRaf = requestAnimationFrame(() => {\n this.scrollRaf = 0\n if (this.oldRange) {\n this.updateCursorPosition(this.oldRange)\n }\n })\n }\n for (const el of this.ensureClipContext(anchor).scrollContainers) {\n this.scrollSubscription.add(fromEvent(el, 'scroll').subscribe(onScroll))\n }\n const win = anchor.ownerDocument?.defaultView\n if (win) {\n this.scrollSubscription.add(fromEvent(win, 'scroll').subscribe(onScroll))\n }\n }\n\n private unbindScrollListeners() {\n if (this.scrollRaf) {\n cancelAnimationFrame(this.scrollRaf)\n this.scrollRaf = 0\n }\n this.scrollSubscription.unsubscribe()\n this.scrollSubscription = new Subscription()\n this.scrollListenerAnchor = null\n }\n\n private ensureClipContext(anchor: Node): OverflowClipContext {\n if (this.clipContextAnchor !== anchor) {\n this.clipContextAnchor = anchor\n this.clipContext = getOverflowClipContext(anchor, this.editorMask)\n }\n return this.clipContext!\n }\n\n private clearClipContext() {\n this.clipContext = null\n this.clipContextAnchor = null\n }\n\n private updateCursorPosition(nativeRange: Range) {\n const node = this.resolveCaretAnchor(nativeRange)\n if (!node) {\n this.positionChangeEvent.next(null)\n return\n }\n\n nativeRange = this.normalizeCollapsedRange(nativeRange)\n this.caret.style.display = nativeRange.collapsed ? 'block' : 'none'\n if (!nativeRange.collapsed) {\n return\n }\n\n const contentRect = getLayoutRectByRange(nativeRange)\n const nodeStyle = getComputedStyle(node)\n const {boxHeight, rectTop} = measureCaretBoxLayout(contentRect, nodeStyle)\n const maskRect = this.editorMask.getBoundingClientRect()\n const clipContext = this.ensureClipContext(node)\n const maskLeft = Math.floor(contentRect.left + contentRect.width / 2 - maskRect.left)\n const maskTop = Math.floor(rectTop - maskRect.top)\n const initialRotate = Math.round(Math.atan2(contentRect.width, contentRect.height) * 180 / Math.PI)\n const rotate = measureInlineCaretRotate(node, initialRotate, nodeStyle.writingMode)\n\n this.applyCaretElementLayout(maskLeft, maskTop, boxHeight, nodeStyle.fontSize, rotate)\n\n const presentation = computeCaretPresentation({\n anchor: node,\n maskRect,\n clipAncestors: clipContext.clipAncestors,\n maskLeft,\n maskTop,\n boxHeight,\n rectTop,\n contentRect,\n fontSize: nodeStyle.fontSize,\n color: nodeStyle.color,\n measureElementRect: () => this.elementRef.getBoundingClientRect(),\n })\n\n this.applyCaretPresentation(presentation)\n this.emitCaretPresentation(presentation)\n this.scrollCaretIntoViewIfNeeded(presentation.layoutElRect, clipContext)\n }\n\n private resolveCaretAnchor(nativeRange: Range): HTMLElement | null {\n const startContainer = nativeRange.startContainer\n const node = (startContainer.nodeType === Node.ELEMENT_NODE ?\n startContainer :\n startContainer.parentNode) as HTMLElement\n return node?.nodeType === Node.ELEMENT_NODE ? node : null\n }\n\n private normalizeCollapsedRange(nativeRange: Range): Range {\n const compositionNode = this.domRenderer.compositionNode\n if (!compositionNode) {\n return nativeRange\n }\n const range = nativeRange.cloneRange()\n range.selectNodeContents(compositionNode)\n range.collapse()\n return range\n }\n\n private applyCaretElementLayout(\n maskLeft: number,\n maskTop: number,\n boxHeight: number,\n fontSize: string,\n rotate: number,\n ) {\n Object.assign(this.elementRef.style, {\n left: maskLeft + 'px',\n top: maskTop + 'px',\n height: boxHeight + 'px',\n lineHeight: boxHeight + 'px',\n fontSize,\n transform: `rotate(${rotate}deg)`,\n })\n }\n\n private applyCaretPresentation(presentation: CaretPresentation) {\n this.caretClippedOut = presentation.outOfView\n if (presentation.outOfView) {\n this.elementRef.style.clipPath = 'none'\n this.elementRef.style.visibility = 'hidden'\n this.caret.style.visibility = 'hidden'\n } else {\n this.elementRef.style.clipPath = presentation.clipPath\n this.elementRef.style.visibility = ''\n this.caret.style.visibility = this._display ? 'visible' : 'hidden'\n }\n this.caret.style.backgroundColor = presentation.caretColor\n }\n\n private emitCaretPresentation(presentation: CaretPresentation) {\n this.styleChangeEvent.next(presentation.style)\n this.positionChangeEvent.next(presentation.position)\n }\n\n private scrollCaretIntoViewIfNeeded(layoutElRect: Rect, clipContext: OverflowClipContext) {\n if (!this.changeFromSelf) {\n return\n }\n this.changeFromSelf = false\n const limit = this.getLimit()\n\n // 从外到内逐层处理,每滚动一层后重新获取光标位置再处理内层\n for (const scrollContainer of [...clipContext.scrollContainers].reverse()) {\n const doc = scrollContainer.ownerDocument ?? document\n const isDoc = scrollContainer === doc.documentElement\n const scrollRect = isDoc\n ? { top: 0, bottom: doc.documentElement.clientHeight }\n : scrollContainer.getBoundingClientRect()\n\n const visibleTop = Math.max(limit.top, scrollRect.top)\n const visibleBottom = Math.min(limit.bottom, scrollRect.bottom)\n const caretBottom = layoutElRect.top + layoutElRect.height\n\n if (layoutElRect.top >= visibleTop && caretBottom <= visibleBottom) {\n continue // 光标已在当前容器可视区域内,无需滚动\n }\n\n if (layoutElRect.top < visibleTop) {\n scrollContainer.scrollTop -= visibleTop - layoutElRect.top\n } else if (caretBottom > visibleBottom) {\n scrollContainer.scrollTop += caretBottom - visibleBottom\n }\n\n layoutElRect = this.elementRef.getBoundingClientRect()\n }\n }\n}\n\n\n/**\n * Textbus PC 端输入实现\n */\n@Injectable()\nexport class MagicInput extends Input {\n composition = false\n onReady: Promise<void>\n caret: ExperimentalCaret\n\n set disabled(b: boolean) {\n this._disabled = b\n if (b && this.textarea) {\n this.textarea.disabled = b\n }\n }\n\n get disabled() {\n return this._disabled\n }\n\n private isSafari = isSafari()\n private isFirefox = isFirefox()\n private isMac = isMac()\n private isWindows = isWindows()\n private _disabled = false\n private container = this.createEditableFrame()\n\n private subscription = new Subscription()\n private doc!: Document\n\n private textarea: HTMLTextAreaElement | null = null\n\n private isFocus = false\n private nativeFocus = false\n\n private ignoreComposition = false // 有 bug 版本搜狗拼音\n\n constructor(private domAdapter: DomAdapter,\n private parser: Parser,\n private keyboard: Keyboard,\n private commander: Commander,\n private selection: Selection,\n private controller: Controller,\n private scheduler: Scheduler,\n private textbus: Textbus) {\n super()\n this.caret = new ExperimentalCaret(this.domAdapter, this.scheduler, this.textbus.get(VIEW_MASK))\n this.onReady = new Promise<void>(resolve => {\n this.subscription.add(\n fromEvent(this.container, 'load').subscribe(() => {\n const doc = this.container.contentDocument!\n doc.open()\n doc.write(iframeHTML)\n doc.close()\n this.doc = doc\n this.init()\n resolve()\n }),\n controller.onReadonlyStateChange.subscribe(() => {\n if (controller.readonly) {\n this.blur()\n }\n })\n )\n })\n\n this.caret.elementRef.prepend(this.container)\n }\n\n focus(range: Range, restart: boolean) {\n if (!this.disabled) {\n this.caret.show(range, restart)\n }\n if (this.controller.readonly) {\n return\n }\n if (!this.isFocus) {\n this.textarea?.focus()\n setTimeout(() => {\n if (!this.nativeFocus && this.isFocus) {\n this.reInit()\n }\n })\n }\n this.isFocus = true\n }\n\n blur() {\n this.caret.hide()\n this.textarea?.blur()\n this.isFocus = false\n }\n\n destroy() {\n this.caret.destroy()\n this.subscription.unsubscribe()\n }\n\n private reInit(delay = false) {\n this.subscription.unsubscribe()\n this.textarea?.parentNode?.removeChild(this.textarea)\n this.subscription = new Subscription()\n this.init()\n if (delay) {\n setTimeout(() => {\n this.textarea?.focus()\n })\n } else {\n this.textarea?.focus()\n }\n }\n\n private init() {\n const doc = this.doc\n const contentBody = doc.body\n const textarea = doc.createElement('textarea')\n textarea.disabled = this.disabled\n contentBody.appendChild(textarea)\n this.textarea = textarea\n this.subscription.add(\n fromEvent(textarea, 'blur').subscribe(() => {\n // if (this.isFocus) {\n // this.isFocus = false\n // this.reInit(true)\n // }\n this.isFocus = false\n this.nativeFocus = false\n this.caret.hide()\n if (this.domAdapter.composition) {\n const slot = this.domAdapter.composition.slot\n this.domAdapter.composition = null\n this.domAdapter.compositionNode = null\n slot.__changeMarker__.forceMarkDirtied()\n }\n }),\n fromEvent(textarea, 'focus').subscribe(() => {\n this.nativeFocus = true\n }),\n this.caret.onStyleChange.subscribe(style => {\n Object.assign(textarea.style, {\n fontSize: style.fontSize,\n })\n })\n )\n this.handleInput(textarea)\n this.handleShortcut(textarea)\n this.handleDefaultActions(textarea)\n }\n\n private handleDefaultActions(textarea: HTMLTextAreaElement) {\n this.subscription.add(\n fromEvent<ClipboardEvent>(isFirefox() ? textarea : document, 'copy').subscribe(ev => {\n this.copyHandler(ev)\n }),\n fromEvent<ClipboardEvent>(textarea, 'paste').subscribe(ev => {\n this.pasteHandler(ev)\n })\n )\n }\n\n copyHandler(ev: ClipboardEvent) {\n const selection = this.selection\n if (!selection.isSelected) {\n return\n }\n if (selection.startSlot === selection.endSlot && selection.endOffset! - selection.startOffset! === 1) {\n const content = selection.startSlot!.getContentAtIndex(selection.startOffset!)\n if (typeof content === 'object') {\n const clipboardData = ev.clipboardData!\n const nativeSelection = document.getSelection()!\n const range = nativeSelection.getRangeAt(0)\n const div = document.createElement('div')\n const fragment = range.cloneContents()\n div.append(fragment)\n clipboardData.setData('text/html', div.innerHTML)\n clipboardData.setData('text', div.innerText)\n ev.preventDefault()\n }\n }\n }\n\n pasteHandler(ev: ClipboardEvent) {\n const text = ev.clipboardData!.getData('Text')\n\n const types = Array.from(ev.clipboardData!.types || [])\n const files = Array.from(ev.clipboardData!.files)\n if (types.every(type => type === 'Files') && files.length) {\n Promise.all(files.filter(i => {\n return /image/i.test(i.type)\n }).map(item => {\n const reader = new FileReader()\n return new Promise(resolve => {\n reader.onload = (event) => {\n resolve(event.target!.result)\n }\n reader.readAsDataURL(item)\n })\n })).then(urls => {\n const html = urls.map(i => {\n return `<img src=${i}>`\n }).join('')\n this.paste(html, text)\n })\n ev.preventDefault()\n return\n }\n\n const div = this.doc.createElement('div')\n div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0'\n div.contentEditable = 'true'\n this.doc.body.appendChild(div)\n div.focus()\n setTimeout(() => {\n this.doc.body.removeChild(div)\n div.style.cssText = ''\n this.paste(div, text)\n })\n }\n\n private paste(dom: HTMLElement | string, text: string) {\n const slot = this.parser.parse(dom, new Slot([\n ContentType.BlockComponent,\n ContentType.InlineComponent,\n ContentType.Text\n ]))\n\n this.commander.paste(slot, text)\n }\n\n private handleShortcut(textarea: HTMLTextAreaElement) {\n let isWriting = false\n let isIgnore = false\n this.subscription.add(\n fromEvent(textarea, 'compositionstart').subscribe(() => {\n isWriting = true\n }),\n fromEvent(textarea, 'compositionend').subscribe(() => {\n isWriting = false\n }),\n fromEvent<InputEvent>(textarea, 'beforeinput').subscribe(ev => {\n this.ignoreComposition = false\n if (this.isSafari) {\n if (ev.inputType === 'insertFromComposition') {\n isIgnore = true\n }\n }\n }),\n fromEvent<KeyboardEvent>(textarea, 'keydown').pipe(filter(() => {\n if (this.isSafari && isIgnore) {\n isIgnore = false\n return false\n }\n return !isWriting // || !this.textarea.value\n })).subscribe(ev => {\n this.ignoreComposition = false\n let key = ev.key\n const keys = ')!@#$%^Z&*('\n const b = key === 'Process' && /Digit\\d/.test(ev.code) && ev.shiftKey\n if (b) {\n // 大小写锁定为大写 + 全角 + shift + 数字键,还存在问题\n key = keys.charAt(+ev.code.substring(5))\n ev.preventDefault()\n }\n this.caret.changeFromSelf = true\n const is = this.keyboard.execShortcut({\n key: key,\n altKey: ev.altKey,\n shiftKey: ev.shiftKey,\n modKey: this.isMac ? ev.metaKey : ev.ctrlKey,\n agent: {\n key: ev.key,\n code: ev.code,\n keyCode: ev.keyCode,\n }\n })\n if (is) {\n this.ignoreComposition = true\n ev.preventDefault()\n } else {\n this.caret.changeFromSelf = false\n }\n })\n )\n }\n\n private handleInput(textarea: HTMLTextAreaElement) {\n let startIndex = 0\n this.subscription.add(\n fromEvent<CompositionEvent>(textarea, 'compositionstart').pipe(filter(() => {\n return !this.ignoreComposition\n })).subscribe(() => {\n if (!this.selection.isCollapsed) {\n this.caret.changeFromSelf = true\n this.commander.delete()\n }\n this.composition = true\n startIndex = this.selection.startOffset!\n const startSlot = this.selection.startSlot!\n const event = new Event<Slot, CompositionStartEventData>(startSlot, {\n index: startIndex\n })\n invokeListener(startSlot.parent!, 'onCompositionStart', event)\n }),\n fromEvent<CompositionEvent>(textarea, 'compositionupdate').pipe(filter(() => {\n return !this.ignoreComposition\n })).pipe(distinctUntilChanged((prev, next) => {\n return prev.data !== next.data\n })).subscribe(ev => {\n if (ev.data === ' ') {\n // 处理搜狗五笔不符合 composition 事件预期,会意外跳光标的问题\n return\n }\n const startSlot = this.selection.startSlot!\n this.domAdapter.composition = {\n slot: startSlot,\n text: ev.data,\n offset: ev.data.length,\n index: startIndex\n }\n\n this.caret.changeFromSelf = true\n this.caret.refresh()\n const event = new Event(startSlot, {\n index: startIndex,\n data: ev.data\n })\n\n invokeListener(startSlot.parent!, 'onCompositionUpdate', event)\n startSlot.__changeMarker__.forceMarkDirtied()\n })\n )\n let isCompositionEnd = false\n this.subscription.add(\n merge(\n fromEvent<InputEvent>(textarea, 'beforeinput').pipe(\n filter(ev => {\n ev.preventDefault()\n if (this.isFirefox && ev.inputType === 'insertFromPaste') {\n return false\n }\n if (this.isSafari) {\n isCompositionEnd = ev.inputType === 'insertFromComposition'\n return ev.inputType === 'insertText' || ev.inputType === 'insertFromComposition'\n }\n return !ev.isComposing && !!ev.data\n }),\n map(ev => {\n return ev.data as string\n })\n ),\n this.isSafari ? new Observable<string>() : fromEvent<CompositionEvent>(textarea, 'compositionend')\n .pipe(filter(() => {\n return !this.ignoreComposition\n })).pipe(\n map(ev => {\n isCompositionEnd = true\n ev.preventDefault()\n textarea.value = ''\n return ev.data\n })\n )\n ).subscribe(text => {\n this.composition = false\n this.domAdapter.composition = null\n if (text) {\n this.caret.changeFromSelf = true\n this.commander.write(text)\n } else {\n this.selection.startSlot?.__changeMarker__.forceMarkDirtied()\n }\n if (isCompositionEnd) {\n const startSlot = this.selection.startSlot\n if (startSlot) {\n const event = new Event<Slot>(startSlot, null)\n invokeListener(startSlot.parent!, 'onCompositionEnd', event)\n }\n }\n isCompositionEnd = false\n })\n )\n }\n\n private createEditableFrame() {\n return createElement('iframe', {\n attrs: {\n scrolling: 'no'\n },\n styles: {\n border: 'none',\n width: '100%',\n display: 'block',\n height: '16px',\n position: 'absolute',\n left: 0,\n bottom: this.isWindows ? '3px' : '0'\n }\n }) as HTMLIFrameElement\n }\n}\n","import { Injectable, Optional } from '@viewfly/core'\nimport { Selection, AbstractSelection, Scheduler, Textbus, SelectionPaths } from '@textbus/core'\nimport { fromEvent, Subject, Subscription } from '@tanbo/stream'\n\nimport { VIEW_CONTAINER } from './injection-tokens'\nimport { SelectionBridge } from './selection-bridge'\nimport { createElement, getLayoutRectByRange, Rect } from './_utils/uikit'\n\nexport interface SelectionRect extends Rect {\n color: string\n username: string\n}\n\nexport interface RemoteSelectionCursor {\n cursor: HTMLElement\n anchor: HTMLElement\n userTip: HTMLElement\n}\n\n/**\n * 远程光标绘制范围计算代理类,可用于定制特定场景下的远程选区绘制,如表格有选区,不会遵守常见的文档流形式\n */\nexport abstract class CollaborateSelectionAwarenessDelegate {\n abstract getRects(abstractSelection: AbstractSelection,\n nativeRange: Range,\n selectionCursor: UserSelectionCursor): false | Rect[]\n}\n\n/**\n * 协作用户虚拟光标信息\n */\nexport interface UserSelectionCursor {\n username: string\n color: string\n selection: SelectionPaths\n data?: any\n}\n\n/**\n * 协作光标绘制类\n */\n@Injectable()\nexport class CollaborateCursor {\n private host = createElement('div', {\n styles: {\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n zIndex: 1\n }\n })\n private canvasContainer = createElement('div', {\n styles: {\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n overflow: 'hidden'\n }\n })\n private canvas = createElement('canvas', {\n styles: {\n position: 'absolute',\n opacity: 0.5,\n left: 0,\n top: 0,\n width: '100%',\n height: document.documentElement.clientHeight + 'px',\n pointerEvents: 'none',\n }\n }) as HTMLCanvasElement\n private context = this.canvas.getContext('2d')!\n private tooltips = createElement('div', {\n styles: {\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n fontSize: '12px',\n zIndex: 10\n }\n })\n\n private onRectsChange = new Subject<SelectionRect[]>()\n\n private subscription = new Subscription()\n private selectionCursors: UserSelectionCursor[] = []\n private container: HTMLElement\n private ratio = window.devicePixelRatio || 1\n\n constructor(textbus: Textbus,\n private nativeSelection: SelectionBridge,\n private scheduler: Scheduler,\n private selection: Selection,\n @Optional() private awarenessDelegate?: CollaborateSelectionAwarenessDelegate) {\n this.container = textbus.get(VIEW_CONTAINER)\n this.canvasContainer.append(this.canvas)\n this.host.append(this.canvasContainer, this.tooltips)\n this.container.append(this.host)\n this.subscription.add(this.onRectsChange.subscribe(rects => {\n for (const rect of rects) {\n this.context.fillStyle = rect.color\n this.context.beginPath()\n this.context.rect(rect.left, rect.top, rect.width, rect.height)\n this.context.fill()\n this.context.closePath()\n }\n }), fromEvent(window, 'resize').subscribe(() => {\n this.canvas.style.height = document.documentElement.clientHeight + 'px'\n this.refresh()\n }), this.scheduler.onDocChanged.subscribe(() => {\n this.refresh()\n }))\n }\n\n /**\n * 刷新协作光标,由于 Textbus 只会绘制可视区域的光标,当可视区域发生变化时,需要重新绘制\n */\n refresh() {\n this.draw(this.selectionCursors)\n }\n\n destroy() {\n this.subscription.unsubscribe()\n }\n\n /**\n * 根据远程用户光标位置,绘制协作光标\n * @param paths\n */\n draw(paths: UserSelectionCursor[]) {\n this.selectionCursors = paths\n const containerRect = this.container.getBoundingClientRect()\n this.canvas.style.top = containerRect.top * -1 + 'px'\n this.canvas.width = this.canvas.offsetWidth * this.ratio\n this.canvas.height = this.canvas.offsetHeight * this.ratio\n this.context.scale(this.ratio, this.ratio)\n this.context.clearRect(0, 0, this.canvas.width, this.canvas.height)\n\n const users: SelectionRect[] = []\n\n paths.filter(i => {\n return i.selection.anchor.length && i.selection.focus.length\n }).forEach(item => {\n const anchorPaths = [...item.selection.anchor]\n const focusPaths = [...item.selection.focus]\n const anchorOffset = anchorPaths.pop()!\n const anchorSlot = this.selection.findSlotByPaths(anchorPaths)\n const focusOffset = focusPaths.pop()!\n const focusSlot = this.selection.findSlotByPaths(focusPaths)\n if (!anchorSlot || !focusSlot) {\n return\n }\n\n const { focus, anchor } = this.nativeSelection.getPositionByRange({\n focusOffset,\n anchorOffset,\n focusSlot,\n anchorSlot\n })\n if (!focus || !anchor) {\n return\n }\n const nativeRange = document.createRange()\n try {\n nativeRange.setStart(anchor.node, anchor.offset)\n nativeRange.setEnd(focus.node, focus.offset)\n } catch (e) {\n return\n }\n if ((anchor.node !== focus.node || anchor.offset !== focus.offset) && nativeRange.collapsed) {\n nativeRange.setStart(focus.node, focus.offset)\n nativeRange.setEnd(anchor.node, anchor.offset)\n }\n\n let rects: Rect[] | DOMRectList | false = false\n if (this.awarenessDelegate) {\n rects = this.awarenessDelegate.getRects({\n focusOffset,\n anchorOffset,\n focusSlot,\n anchorSlot\n }, nativeRange, item)\n }\n if (!rects) {\n rects = nativeRange.getClientRects()\n }\n const selectionRects: SelectionRect[] = []\n for (let i = rects.length - 1; i >= 0; i--) {\n const rect = rects[i]\n selectionRects.push({\n color: item.color,\n username: item.username,\n left: rect.left - containerRect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n })\n }\n this.onRectsChange.next(selectionRects)\n\n const cursorRange = nativeRange.cloneRange()\n cursorRange.setStart(focus.node, focus.offset)\n cursorRange.collapse(true)\n\n const cursorRect = getLayoutRectByRange(cursorRange)\n\n const rect: SelectionRect = {\n username: item.username,\n color: item.color,\n left: cursorRect.left - containerRect.left,\n top: cursorRect.top - containerRect.top,\n width: 1,\n height: cursorRect.height\n }\n if (rect.left < 0 || rect.top < 0 || rect.left > containerRect.width) {\n return\n }\n users.push(rect)\n })\n this.drawUserCursor(users)\n }\n\n protected drawUserCursor(rects: SelectionRect[]) {\n for (let i = 0; i < rects.length; i++) {\n const rect = rects[i]\n const { cursor, userTip, anchor } = this.getUserCursor(i)\n Object.assign(cursor.style, {\n left: rect.left + 'px',\n top: rect.top + 'px',\n width: rect.width + 'px',\n height: rect.height + 'px',\n background: rect.color,\n display: 'block'\n })\n anchor.style.background = rect.color\n userTip.innerText = rect.username\n userTip.style.background = rect.color\n }\n\n for (let i = rects.length; i < this.tooltips.children.length; i++) {\n this.tooltips.removeChild(this.tooltips.children[i])\n }\n }\n\n private getUserCursor(index: number): RemoteSelectionCursor {\n let child: HTMLElement = this.tooltips.children[index] as HTMLElement\n if (child) {\n const anchor = child.children[0] as HTMLElement\n return {\n cursor: child,\n anchor,\n userTip: anchor.children[0] as HTMLElement\n }\n }\n const userTip = createElement('span', {\n styles: {\n position: 'absolute',\n left: '50%',\n transform: 'translateX(-50%)',\n marginBottom: '2px',\n bottom: '100%',\n whiteSpace: 'nowrap',\n color: '#fff',\n boxShadow: '0 1px 2px rgba(0,0,0,.1)',\n opacity: 0.8,\n borderRadius: '3px',\n padding: '3px 5px',\n pointerEvents: 'none',\n }\n })\n\n const anchor = createElement('span', {\n styles: {\n position: 'absolute',\n top: '-2px',\n left: '-2px',\n width: '5px',\n height: '5px',\n borderRadius: '50%',\n pointerEvents: 'auto',\n pointer: 'cursor',\n },\n children: [userTip]\n })\n child = createElement('span', {\n styles: {\n position: 'absolute',\n },\n children: [\n anchor\n ]\n })\n this.tooltips.append(child)\n return {\n cursor: child,\n anchor,\n userTip\n }\n }\n}\n","import { Injectable } from '@viewfly/core'\nimport {\n distinctUntilChanged,\n filter,\n fromEvent,\n Observable,\n Subject,\n Subscription,\n} from '@tanbo/stream'\nimport {\n Commander,\n CompositionStartEventData,\n CompositionUpdateEventData,\n ContentType,\n Controller,\n Event,\n invokeListener,\n Keyboard,\n Selection,\n Slot,\n Textbus\n} from '@textbus/core'\n\nimport { Caret, CaretPosition, caretPositionEqual, Input } from './types'\nimport { VIEW_DOCUMENT } from './injection-tokens'\nimport { isSafari, isMac, isFirefox } from './_utils/env'\nimport { Parser } from './parser'\nimport { getLayoutRectByRange } from './_utils/uikit'\nimport { DomAdapter } from './dom-adapter'\n\n/**\n * 轻量级 DOM 文本变化记录器,仅在 composition 期间激活。\n * 记录 composition 期间 DOM 中新增/修改的文本节点,在 compositionend 时从 DOM 读取最终文本。\n * 写入模型后清理浏览器创建的新文本节点,避免残留在文档中。\n */\nclass CompositionRecorder {\n private observer: MutationObserver | null = null\n private nodeOldValues = new Map<Text, string | null>()\n\n start(target: Node) {\n this.nodeOldValues.clear()\n this.observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (m.type === 'childList') {\n for (const node of Array.from(m.addedNodes)) {\n if (node.nodeType === Node.TEXT_NODE && !this.nodeOldValues.has(node as Text)) {\n this.nodeOldValues.set(node as Text, null)\n }\n }\n } else if (m.type === 'characterData') {\n const target = m.target as Text\n if (!this.nodeOldValues.has(target)) {\n this.nodeOldValues.set(target, m.oldValue)\n }\n }\n }\n })\n this.observer.observe(target, {\n childList: true,\n subtree: true,\n characterData: true,\n characterDataOldValue: true,\n })\n }\n\n readText(): string {\n let text = ''\n for (const [node, oldValue] of this.nodeOldValues) {\n if (!node.isConnected) continue\n const current = node.textContent || ''\n if (!current) continue\n if (oldValue === null) {\n text += current\n } else {\n text += this.diffText(oldValue, current)\n }\n }\n return text\n }\n\n /** 移除 composition 期间浏览器创建的文本节点(焦点处),光标位置不可能被协作触及 */\n cleanup(committedText: string, focusNode: Node | null) {\n if (focusNode instanceof Text &&\n focusNode.isConnected &&\n focusNode.textContent === committedText &&\n this.nodeOldValues.has(focusNode as Text) &&\n focusNode.parentNode) {\n focusNode.parentNode.removeChild(focusNode)\n }\n this.nodeOldValues.clear()\n }\n\n stop() {\n this.observer?.disconnect()\n this.observer = null\n }\n\n private diffText(oldStr: string, newStr: string): string {\n let start = 0\n while (start < oldStr.length && start < newStr.length && oldStr[start] === newStr[start]) {\n start++\n }\n let oldEnd = oldStr.length - 1\n let newEnd = newStr.length - 1\n while (oldEnd >= start && newEnd >= start && oldStr[oldEnd] === newStr[newEnd]) {\n oldEnd--\n newEnd--\n }\n return newStr.slice(start, newEnd + 1)\n }\n}\n\nclass NativeCaret implements Caret {\n onPositionChange: Observable<CaretPosition | null>\n\n set nativeRange(range: Range | null) {\n this._nativeRange = range\n if (range) {\n const r = range.cloneRange()\n r.collapse(true)\n const rect = getLayoutRectByRange(r)\n this.positionChangeEvent.next({\n left: rect.left,\n top: rect.top,\n height: rect.height\n })\n } else {\n this.positionChangeEvent.next(null)\n }\n }\n\n get nativeRange() {\n return this._nativeRange\n }\n\n get rect() {\n if (this.nativeRange) {\n const range = this.nativeRange.cloneRange()\n range.collapse(true)\n return getLayoutRectByRange(range)\n }\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n }\n }\n\n private _nativeRange: Range | null = null\n private subs: Subscription[] = []\n\n private positionChangeEvent = new Subject<CaretPosition | null>()\n\n constructor() {\n this.onPositionChange = this.positionChangeEvent.pipe(distinctUntilChanged(caretPositionEqual))\n }\n\n refresh() {\n //\n }\n\n destroy() {\n this.subs.forEach(i => i.unsubscribe())\n this.subs = []\n }\n}\n\n@Injectable()\nexport class NativeInput extends Input {\n caret = new NativeCaret()\n\n composition = false\n // compositionState: CompositionState | null = null\n\n onReady = Promise.resolve()\n\n set disabled(b: boolean) {\n this._disabled = b\n if (this.controller.readonly) {\n this.documentView.contentEditable = 'false'\n return\n }\n this.documentView.contentEditable = b ? 'false' : 'true'\n }\n\n get disabled() {\n return this._disabled\n }\n\n private _disabled = false\n private documentView: HTMLElement\n private nativeSelection = document.getSelection()!\n\n private subscription = new Subscription()\n private nativeRange: Range | null = null\n\n private isSafari = isSafari()\n private isMac = isMac()\n private compositionEndedAt = 0\n\n constructor(textbus: Textbus,\n private parser: Parser,\n private selection: Selection,\n private keyboard: Keyboard,\n private domAdapter: DomAdapter,\n private commander: Commander,\n private controller: Controller) {\n super()\n this.documentView = textbus.get(VIEW_DOCUMENT)\n if (!controller.readonly) {\n this.documentView.contentEditable = 'true'\n }\n this.subscription.add(\n controller.onReadonlyStateChange.subscribe(() => {\n this.documentView.contentEditable = controller.readonly ? 'false' : 'true'\n })\n )\n this.handleShortcut(this.documentView)\n this.handleInput(this.documentView)\n this.handleDefaultActions(this.documentView)\n }\n\n focus(nativeRange: Range) {\n if (this.controller.readonly) {\n return\n }\n this.caret.nativeRange = nativeRange\n this.nativeRange = nativeRange\n }\n\n blur() {\n if (this.nativeRange && this.nativeSelection.rangeCount > 0) {\n const current = this.nativeSelection.getRangeAt(0)\n if (current === this.nativeRange) {\n this.nativeSelection.removeAllRanges()\n this.nativeRange = null\n return\n }\n }\n }\n\n destroy() {\n this.caret.destroy()\n this.subscription.unsubscribe()\n }\n\n private handleDefaultActions(textarea: HTMLElement) {\n this.subscription.add(\n fromEvent<ClipboardEvent>(isFirefox() ? textarea : document, 'copy').subscribe(ev => {\n this.copyHandler(ev)\n }),\n fromEvent<ClipboardEvent>(textarea, 'paste').subscribe(ev => {\n this.pasteHandler(ev)\n })\n )\n }\n\n copyHandler(ev: ClipboardEvent) {\n const selection = this.selection\n if (!selection.isSelected) {\n return\n }\n if (selection.startSlot === selection.endSlot && selection.endOffset! - selection.startOffset! === 1) {\n const content = selection.startSlot!.getContentAtIndex(selection.startOffset!)\n if (typeof content === 'object') {\n const clipboardData = ev.clipboardData!\n const nativeSelection = document.getSelection()!\n const range = nativeSelection.getRangeAt(0)\n const div = document.createElement('div')\n const fragment = range.cloneContents()\n div.append(fragment)\n clipboardData.setData('text/html', div.innerHTML)\n clipboardData.setData('text', div.innerText)\n ev.preventDefault()\n }\n }\n }\n\n pasteHandler(ev: ClipboardEvent) {\n const text = ev.clipboardData!.getData('Text')\n\n const types = Array.from(ev.clipboardData!.types || [])\n const files = Array.from(ev.clipboardData!.files)\n if (types.every(type => type === 'Files') && files.length) {\n Promise.all(files.filter(i => {\n return /image/i.test(i.type)\n }).map(item => {\n const reader = new FileReader()\n return new Promise(resolve => {\n reader.onload = (event) => {\n resolve(event.target!.result)\n }\n reader.readAsDataURL(item)\n })\n })).then(urls => {\n const html = urls.map(i => {\n return `<img src=${i}>`\n }).join('')\n this.paste(html, text)\n })\n ev.preventDefault()\n return\n }\n\n const div = document.createElement('div')\n div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0'\n div.contentEditable = 'true'\n document.body.appendChild(div)\n div.focus()\n setTimeout(() => {\n document.body.removeChild(div)\n div.style.cssText = ''\n this.paste(div, text)\n })\n }\n\n private paste(dom: HTMLElement | string, text: string) {\n const slot = this.parser.parse(dom, new Slot([\n ContentType.BlockComponent,\n ContentType.InlineComponent,\n ContentType.Text\n ]))\n\n this.commander.paste(slot, text)\n }\n\n private handleShortcut(input: HTMLElement) {\n this.subscription.add(\n fromEvent<KeyboardEvent>(input, 'keydown').pipe(filter(() => {\n // Safari: IME 确认键(Enter)会在 compositionend 后紧接着触发 keydown\n // 用时间戳窗口检测并忽略\n if (this.isSafari && this.compositionEndedAt > 0 &&\n Date.now() - this.compositionEndedAt < 500) {\n this.compositionEndedAt = 0\n return false\n }\n return !this.composition\n })).subscribe(ev => {\n let key = ev.key\n const keys = ')!@#$%^Z&*('\n const b = key === 'Process' && /Digit\\d/.test(ev.code) && ev.shiftKey\n if (b) {\n key = keys.charAt(+ev.code.substring(5))\n ev.preventDefault()\n }\n const is = this.keyboard.execShortcut({\n key: key,\n altKey: ev.altKey,\n shiftKey: ev.shiftKey,\n modKey: this.isMac ? ev.metaKey : ev.ctrlKey,\n agent: {\n key: ev.key,\n keyCode: ev.keyCode,\n code: ev.code\n }\n })\n if (is) {\n ev.preventDefault()\n }\n })\n )\n }\n\n private handleInput(input: HTMLElement) {\n const recorder = new CompositionRecorder()\n let startIndex = 0\n\n this.subscription.add(\n // ===== Composition 事件:纯开关,不读 ev.data 做模型决策 =====\n fromEvent(input, 'compositionstart').subscribe(() => {\n this.composition = true\n recorder.start(input)\n startIndex = this.selection.startOffset!\n const startSlot = this.selection.startSlot!\n const event = new Event<Slot, CompositionStartEventData>(startSlot, {\n index: startIndex\n })\n invokeListener(startSlot.parent!, 'onCompositionStart', event)\n }),\n\n fromEvent<CompositionEvent>(input, 'compositionupdate').subscribe(ev => {\n const startSlot = this.selection.startSlot\n if (startSlot) {\n invokeListener(startSlot.parent!, 'onCompositionUpdate',\n new Event(startSlot, {\n index: startIndex,\n data: ev.data\n }))\n }\n }),\n\n fromEvent(input, 'compositionend').subscribe(() => {\n if (!this.composition) return\n this.composition = false\n this.compositionEndedAt = Date.now()\n\n // Safari: WebKit 在 compositionend 之后才更新 DOM,通过 microtask 延迟读取\n if (this.isSafari) {\n queueMicrotask(() => this.syncCompositionText(recorder))\n } else {\n this.syncCompositionText(recorder)\n }\n }),\n\n // ===== beforeinput:仅处理非 IME 输入 =====\n fromEvent<InputEvent>(input, 'beforeinput').subscribe(ev => {\n if (ev.isComposing || this.composition) {\n return\n }\n\n ev.preventDefault()\n\n switch (ev.inputType) {\n case 'insertText':\n if (ev.data) {\n this.commander.write(ev.data)\n }\n break\n case 'deleteContentBackward':\n this.commander.delete(true)\n break\n case 'deleteContentForward':\n this.commander.delete()\n break\n case 'insertReplacementText': {\n const range = ev.getTargetRanges()[0]\n if (range) {\n const location = this.domAdapter.getLocationByNativeNode(range.startContainer)\n if (location) {\n const startSlot = this.selection.startSlot!\n this.selection.setBaseAndExtent(\n startSlot,\n location.startIndex + range.startOffset,\n startSlot,\n location.startIndex + range.endOffset)\n this.commander.delete()\n }\n }\n const text = ev.dataTransfer?.getData('text') || ev.data\n if (text) {\n this.commander.write(text)\n }\n break\n }\n }\n })\n )\n }\n\n private syncCompositionText(recorder: CompositionRecorder) {\n const text = recorder.readText()\n recorder.stop()\n\n if (text) {\n // 先清理 composition 期间浏览器创建的节点,确保写入模型时 DOM 是干净的\n recorder.cleanup(text, this.nativeSelection.focusNode)\n this.commander.write(text)\n }\n\n const startSlot = this.selection.startSlot\n if (startSlot) {\n invokeListener(startSlot.parent!, 'onCompositionEnd', new Event<Slot>(startSlot, null))\n }\n }\n}\n","import {\n ComponentConstructor,\n Component,\n ComponentLiteral,\n FocusManager,\n makeError,\n Module,\n NativeSelectionBridge,\n Registry,\n Textbus,\n Adapter,\n} from '@textbus/core'\nimport { Provider } from '@viewfly/core'\nimport { distinctUntilChanged, map, Subject } from '@tanbo/stream'\n\nimport { AttributeLoader, ComponentLoader, FormatLoader, Parser } from './parser'\nimport { EDITOR_OPTIONS, VIEW_CONTAINER, VIEW_DOCUMENT, VIEW_MASK } from './injection-tokens'\nimport { SelectionBridge } from './selection-bridge'\nimport { Input } from './types'\nimport { MagicInput } from './magic-input'\nimport { CollaborateCursor } from './collaborate-cursor'\nimport { createElement } from './_utils/uikit'\nimport { NativeInput } from './native-input'\nimport { DomAdapter } from './dom-adapter'\n\nconst browserErrorFn = makeError('BrowserModule')\n\n/**\n * Textbus PC 端配置接口\n */\nexport interface ViewOptions {\n /** 跨平台适配器 */\n adapter: DomAdapter<any, any>\n\n /** 编辑器根节点 */\n renderTo(): HTMLElement\n\n /** 自动获取焦点 */\n autoFocus?: boolean\n /** 编辑区最小高度 */\n minHeight?: string\n /** 组件加载器 */\n componentLoaders?: ComponentLoader[]\n /** 格式加载器 */\n formatLoaders?: FormatLoader<any>[]\n /** 属性加载器 */\n attributeLoaders?: AttributeLoader<any>[]\n /** 使用 contentEditable 作为编辑器控制可编辑范围 */\n useContentEditable?: boolean\n}\n\nexport class BrowserModule implements Module {\n providers: Provider[]\n\n private workbench!: HTMLElement\n\n constructor(public config: ViewOptions) {\n const { mask, wrapper } = BrowserModule.createLayout()\n wrapper.prepend(config.adapter.host)\n if (config.minHeight) {\n config.adapter.host.style.minHeight = config.minHeight\n }\n this.providers = [{\n provide: EDITOR_OPTIONS,\n useValue: config\n }, {\n provide: VIEW_CONTAINER,\n useValue: wrapper\n }, {\n provide: VIEW_DOCUMENT,\n useValue: config.adapter.host\n }, {\n provide: VIEW_MASK,\n useValue: mask\n }, {\n provide: NativeSelectionBridge,\n useExisting: SelectionBridge\n }, {\n provide: Input,\n useClass: config.useContentEditable ? NativeInput : MagicInput\n }, {\n provide: Adapter,\n useValue: config.adapter\n }, {\n provide: DomAdapter,\n useValue: config.adapter\n }, {\n provide: FocusManager,\n useFactory: (input: Input): FocusManager => {\n const focusEvent = new Subject<void>()\n const blurEvent = new Subject<void>()\n input.caret.onPositionChange.pipe(\n map(p => !!p),\n distinctUntilChanged()\n ).subscribe(b => {\n if (b) {\n focusEvent.next()\n } else {\n blurEvent.next()\n }\n })\n return {\n onFocus: focusEvent,\n onBlur: blurEvent\n }\n },\n deps: [Input]\n },\n Parser,\n SelectionBridge,\n CollaborateCursor\n ]\n\n this.workbench = wrapper\n }\n\n /**\n * 解析 HTML 并返回一个组件实例\n * @param html 要解析的 HTML\n * @param rootComponentLoader 文档根组件加载器\n * @param textbus\n */\n readDocumentByHTML(html: string, rootComponentLoader: ComponentLoader, textbus: Textbus): Component {\n const parser = textbus.get(Parser)\n const doc = parser.parseDoc(html, rootComponentLoader)\n if (doc instanceof Component) {\n return doc\n }\n throw browserErrorFn('rootComponentLoader must return a component instance.')\n }\n\n /**\n * 将组件数据解析到组件实例中\n * @param data 要解析的 JSON 数据\n * @param rootComponent 根组件\n * @param textbus\n */\n readDocumentByComponentLiteral(data: ComponentLiteral, rootComponent: ComponentConstructor, textbus: Textbus): Component {\n const registry = textbus.get(Registry)\n return registry.createComponentByFactory(data, rootComponent)\n }\n\n async setup(textbus: Textbus) {\n const host = this.config.renderTo()\n if (!(host instanceof HTMLElement)) {\n throw browserErrorFn('view container is not a HTMLElement')\n }\n\n host.append(this.workbench)\n await textbus.get(Input).onReady\n return () => {\n this.workbench.remove()\n }\n }\n\n onAfterStartup(textbus: Textbus) {\n if (this.config.autoFocus) {\n textbus.focus()\n }\n }\n\n onDestroy(textbus: Textbus) {\n textbus.get(Input).destroy()\n textbus.get(SelectionBridge).destroy()\n textbus.get(CollaborateCursor).destroy()\n }\n\n private static createLayout() {\n const mask = createElement('div', {\n attrs: {\n 'data-textbus-view': VIEW_MASK,\n },\n styles: {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n pointerEvents: 'none',\n // overflow: 'hidden'\n }\n })\n const maskWrapper = createElement('div', {\n styles: {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n margin: '0 -2px',\n zIndex: 1,\n pointerEvents: 'none',\n overflow: 'hidden'\n },\n children: [mask]\n })\n const wrapper = createElement('div', {\n attrs: {\n 'data-textbus-view': VIEW_CONTAINER,\n },\n styles: {\n display: 'flex',\n minHeight: '100%',\n position: 'relative',\n flexDirection: 'column'\n },\n children: [maskWrapper]\n })\n return {\n wrapper,\n mask\n }\n }\n}\n"],"names":["_array_like_to_array","OVERFLOW_CLIP_VALUES","Set","rectRight","r","left","width","rectBottom","top","height","isOverflowClipAxis","value","has","readOverflowClipAxes","style","overflow","overflowX","overflowY","clipX","clipY","getOverflowClipContext","anchor","extraRoot","clipAncestors","scrollContainers","node","nodeType","Node","ELEMENT_NODE","parentNode","_instanceof","Element","flags","getComputedStyle","push","element","add","ownerDocument","documentElement","doc","document","_to_consumable_array","firstScrollContainer","intersectRect","a","b","Math","max","right","min","bottom","rectContainsPoint","rect","x","y","intersectRectWithClipAncestor","ancestor","visible","el","border","getBoundingClientRect","clipLeft","clientLeft","clipRight","clientWidth","clipTop","clientTop","clipBottom","clientHeight","getVisibleRectInOverflowClipsFromAncestors","next","isCaretAnchorCssVisible","anchorEl","parentElement","isConnected","checkVisibility","checkOpacity","checkVisibilityCSS","CLIP_INSET_EPSILON","clipPathInsetFromVisibleRegion","elRect","measureCaretBoxLayout","contentRect","fontSize","lineHeight","isNaN","f","parseFloat","boxHeight","floor","rectTop","measureInlineCaretRotate","initialRotate","writingMode","rotate","hackEle","createElement","cssText","pointEle","append","p1","p2","atan2","PI","remove","computeCaretPresentation","options","maskRect","maskLeft","maskTop","color","measureElementRect","caretCenterX","caretCenterY","layoutElRect","visibleRect","inClipBounds","outOfView","clipPath","position","caretColor","tagName","classes","classList","attrs","Object","keys","forEach","key","setAttribute","props","styles","assign","children","filter","i","item","appendChild","on","addEventListener","getLayoutRectByRange","range","startContainer","startOffset","TEXT_NODE","Array","from","childNodes","indexOf","beforeNode","nodeName","toLowerCase","collapsed","range2","createRange","setStart","textContent","length","setEnd","offsetNode","isInsertBefore","lastChild","span","innerText","display","insertBefore","removeChild","isWindows","test","navigator","userAgent","isMac","isSafari","isFirefox","isMobileBrowser","EDITOR_OPTIONS","InjectionToken","VIEW_CONTAINER","VIEW_DOCUMENT","VIEW_MASK","Parser","textbus","componentLoaders","formatLoaders","attributeLoaders","parseDoc","html","rootComponentLoader","parseHTML","read","childSlot","slotRootElement","slotContentHostElement","readSlot","parse","rootSlot","readFormats","readComponent","slot","insert","schema","t","match","result","Slot","toDelta","formats","readText","map","startIndex","index","startNode","firstChild","nextSibling","endIndex","applyFormats","formatter","retain","slotContentElement","attribute","formatItems","background","DOMParser","parseFromString","body","caretPositionEqual","Input","DomAdapter","_call_super","onViewUpdated","Subject","host","cursor","overflowWrap","boxSizing","flex","outline","id","Number","random","substring","toString","Adapter","SelectionBridge","config","controller","onSelectionChange","nativeSelection","syncSelectionFromNativeSelectionChange","_define_property","selectionChangeEvent","subs","sub","connector","ignoreSelectionChange","changeFromUser","docContainer","cacheCaretPositionTimer","oldCaretPosition","selection","rootComponentRef","input","scheduler","domAdapter","getSelection","get","asObservable","pipe","readonly","subscribe","focus","blur","fromEvent","ev","target","type","useContentEditable","contentEditable","connect","disConnect","syncSelection","listen","unListen","getRect","location","getPositionByRange","focusOffset","offset","anchorOffset","focusSlot","anchorSlot","nativeRange","collapse","restore","abstractSelection","fromLocal","removeAllRanges","tryOffset","len","setBaseAndExtent","e","setTimeout","rangeCount","getRangeAt","bind","Promise","resolve","then","requestIdleCallback","destroy","unsubscribe","findSelectedNodeAndOffset","getPreviousLinePositionByCurrent","getLinePosition","getNextLinePositionByCurrent","currentPosition","toNext","clearTimeout","p","getVerticalMovePosition","startLeft","nativePos","sel","startRect","cloneRange","lastPos","prevRange","modify","focusNode","modelPos","getCorrectedPosition","getDocumentBoundary","isSameLine","refineXOnLine","targetRect","startBottom","targetBottom","targetX","lineRect","lineTop","lineBottom","cur","rightSide","prev","getPreviousPositionByPosition","getNextPositionByPosition","slots","component","lastSlot","firstSlot","caretPositionFromPoint","button","shiftKey","isUpdating","onDocChange","onDocChanged","delay","composition","contains","anchorNode","rawRange","isFocusEnd","endContainer","endOffset","isFocusStart","nativeNode","getNativeNodeBySlot","at","setEndAfter","setStartBefore","startPosition","endPosition","includes","commonAncestorContainer","beforeChange","setSelection","start","end","isCollapsed","getContentAtIndex","nodes","getNodesBySlot","getNativeNodeByComponent","Text","getLocationByNativeNode","current","toAfter","excludeNodes","containerPosition","childNode","childPosition","findFocusNode","prevNode","prevPosition","nextNode","previousSibling","findFocusNodeByParent","parentPosition","iframeHTML","ExperimentalCaret","onPositionChange","onStyleChange","elementRef","changeFromSelf","getLimit","timer","caret","_display","flashing","caretClippedOut","subscription","scrollSubscription","scrollRaf","clipContext","clipContextAnchor","scrollListenerAnchor","positionChangeEvent","styleChangeEvent","oldRange","domRenderer","editorMask","Subscription","distinctUntilChanged","pointerEvents","v","visibility","refresh","updateCursorPosition","show","restart","lastChangesHasLocalUpdate","bindScrollListeners","toggleShowHide","unbindScrollListeners","hide","clearClipContext","onScroll","requestAnimationFrame","ensureClipContext","win","defaultView","cancelAnimationFrame","resolveCaretAnchor","normalizeCollapsedRange","nodeStyle","round","applyCaretElementLayout","presentation","applyCaretPresentation","emitCaretPresentation","scrollCaretIntoViewIfNeeded","compositionNode","selectNodeContents","transform","backgroundColor","limit","reverse","scrollContainer","isDoc","scrollRect","visibleTop","visibleBottom","caretBottom","scrollTop","MagicInput","parser","keyboard","onReady","_disabled","container","textarea","isFocus","nativeFocus","ignoreComposition","commander","createEditableFrame","contentDocument","open","write","close","init","onReadonlyStateChange","prepend","disabled","reInit","contentBody","__changeMarker__","forceMarkDirtied","handleInput","handleShortcut","handleDefaultActions","copyHandler","pasteHandler","isSelected","startSlot","endSlot","content","_type_of","clipboardData","div","fragment","cloneContents","setData","innerHTML","preventDefault","text","getData","types","files","every","all","reader","FileReader","onload","event","readAsDataURL","urls","join","paste","dom","ContentType","BlockComponent","InlineComponent","isWriting","isIgnore","inputType","code","charAt","is","execShortcut","altKey","modKey","metaKey","ctrlKey","agent","keyCode","delete","Event","invokeListener","parent","data","isCompositionEnd","merge","isComposing","Observable","scrolling","CollaborateSelectionAwarenessDelegate","CollaborateCursor","awarenessDelegate","canvasContainer","canvas","context","tooltips","onRectsChange","selectionCursors","ratio","zIndex","opacity","getContext","window","devicePixelRatio","rects","fillStyle","beginPath","fill","closePath","draw","paths","containerRect","offsetWidth","offsetHeight","scale","clearRect","users","anchorPaths","focusPaths","pop","findSlotByPaths","getRects","getClientRects","selectionRects","username","cursorRange","cursorRect","drawUserCursor","getUserCursor","userTip","child","marginBottom","whiteSpace","boxShadow","borderRadius","padding","pointer","CompositionRecorder","observer","nodeOldValues","Map","clear","MutationObserver","mutations","m","addedNodes","set","oldValue","observe","childList","subtree","characterData","characterDataOldValue","diffText","cleanup","committedText","stop","disconnect","oldStr","newStr","oldEnd","newEnd","slice","NativeCaret","_nativeRange","NativeInput","documentView","compositionEndedAt","Date","now","recorder","queueMicrotask","syncCompositionText","getTargetRanges","dataTransfer","browserErrorFn","makeError","BrowserModule","providers","workbench","createLayout","mask","wrapper","adapter","minHeight","provide","useValue","NativeSelectionBridge","useExisting","useClass","FocusManager","useFactory","focusEvent","blurEvent","onFocus","onBlur","deps","readDocumentByHTML","Component","readDocumentByComponentLiteral","rootComponent","registry","Registry","createComponentByFactory","setup","renderTo","HTMLElement","onAfterStartup","autoFocus","onDestroy","maskWrapper","margin","flexDirection"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/_utils/uikit.ts","../src/_utils/env.ts","../src/injection-tokens.ts","../src/parser.ts","../src/types.ts","../src/dom-adapter.ts","../src/selection-bridge.ts","../src/magic-input.ts","../src/collaborate-cursor.ts","../src/native-input.ts","../src/browser-module.ts"],"sourcesContent":["/**\n * 选区焦点可视位置\n */\nexport interface Rect {\n left: number\n top: number\n width: number\n height: number\n}\n\nconst OVERFLOW_CLIP_VALUES = new Set(['auto', 'hidden', 'scroll', 'clip'])\n\nfunction rectRight(r: Rect): number {\n return r.left + r.width\n}\n\nfunction rectBottom(r: Rect): number {\n return r.top + r.height\n}\n\nfunction isOverflowClipAxis(value: string): boolean {\n return OVERFLOW_CLIP_VALUES.has(value)\n}\n\nexport interface OverflowClipAncestor {\n element: Element\n clipX: boolean\n clipY: boolean\n}\n\nexport interface OverflowClipContext {\n /** 自内而外 */\n clipAncestors: OverflowClipAncestor[]\n scrollContainers: Element[]\n /** 嵌套滚动时最近的 overflow 容器 */\n firstScrollContainer: Element\n}\n\nfunction readOverflowClipAxes(style: CSSStyleDeclaration): Pick<OverflowClipAncestor, 'clipX' | 'clipY'> | null {\n const overflow = style.overflow\n const overflowX = style.overflowX\n const overflowY = style.overflowY\n if (!isOverflowClipAxis(overflow) &&\n !isOverflowClipAxis(overflowX) &&\n !isOverflowClipAxis(overflowY)) {\n return null\n }\n return {\n clipX: isOverflowClipAxis(overflowX) || isOverflowClipAxis(overflow),\n clipY: isOverflowClipAxis(overflowY) || isOverflowClipAxis(overflow),\n }\n}\n\n/**\n * 一次遍历祖先链:缓存 overflow 轴信息,并收集滚动监听目标。\n */\nexport function getOverflowClipContext(anchor: Node, extraRoot?: Element): OverflowClipContext {\n const clipAncestors: OverflowClipAncestor[] = []\n const scrollContainers = new Set<Element>()\n let node: Node | null = anchor.nodeType === Node.ELEMENT_NODE ? anchor : anchor.parentNode\n\n while (node) {\n if (node instanceof Element) {\n const flags = readOverflowClipAxes(getComputedStyle(node))\n if (flags) {\n clipAncestors.push({ element: node, clipX: flags.clipX, clipY: flags.clipY })\n scrollContainers.add(node)\n }\n }\n if (node === node.ownerDocument?.documentElement) {\n break\n }\n node = node.parentNode\n }\n\n const doc = anchor.ownerDocument\n const documentElement = doc?.documentElement ?? document.documentElement\n scrollContainers.add(documentElement)\n if (extraRoot) {\n scrollContainers.add(extraRoot)\n }\n\n return {\n clipAncestors,\n scrollContainers: [...scrollContainers],\n firstScrollContainer: clipAncestors[0]?.element ?? documentElement,\n }\n}\n\nfunction intersectRect(a: Rect, b: Rect): Rect | null {\n const left = Math.max(a.left, b.left)\n const top = Math.max(a.top, b.top)\n const right = Math.min(rectRight(a), rectRight(b))\n const bottom = Math.min(rectBottom(a), rectBottom(b))\n if (left >= right || top >= bottom) {\n return null\n }\n return { left, top, width: right - left, height: bottom - top }\n}\n\nfunction rectContainsPoint(rect: Rect, x: number, y: number): boolean {\n return x >= rect.left && x <= rectRight(rect) && y >= rect.top && y <= rectBottom(rect)\n}\n\nfunction intersectRectWithClipAncestor(\n ancestor: OverflowClipAncestor,\n visible: Rect,\n): Rect | null {\n const el = ancestor.element\n const border = el.getBoundingClientRect()\n let left = visible.left\n let top = visible.top\n let right = rectRight(visible)\n let bottom = rectBottom(visible)\n\n if (ancestor.clipX) {\n const clipLeft = border.left + el.clientLeft\n const clipRight = clipLeft + el.clientWidth\n left = Math.max(left, clipLeft)\n right = Math.min(right, clipRight)\n }\n if (ancestor.clipY) {\n const clipTop = border.top + el.clientTop\n const clipBottom = clipTop + el.clientHeight\n top = Math.max(top, clipTop)\n bottom = Math.min(bottom, clipBottom)\n }\n\n if (left >= right || top >= bottom) {\n return null\n }\n return { left, top, width: right - left, height: bottom - top }\n}\n\nfunction getVisibleRectInOverflowClipsFromAncestors(\n rect: Rect,\n clipAncestors: OverflowClipAncestor[],\n): Rect | null {\n let visible: Rect = rect\n for (const ancestor of clipAncestors) {\n const next = intersectRectWithClipAncestor(ancestor, visible)\n if (!next) {\n return null\n }\n visible = next\n }\n return visible\n}\n\n/** 锚点是否被 CSS 隐藏(opacity / visibility 等);不做点命中,避免 mask 层挡住误判 */\nfunction isCaretAnchorCssVisible(anchor: Node): boolean {\n const anchorEl: Element | null = anchor.nodeType === Node.ELEMENT_NODE ?\n anchor as Element :\n anchor.parentElement\n if (!anchorEl?.isConnected) {\n return false\n }\n if (typeof anchorEl.checkVisibility === 'function') {\n return anchorEl.checkVisibility({\n checkOpacity: true,\n checkVisibilityCSS: true,\n })\n }\n return true\n}\n\nconst CLIP_INSET_EPSILON = 0.5\n\nfunction clipPathInsetFromVisibleRegion(elRect: Rect, visible: Rect): string {\n const top = Math.max(0, visible.top - elRect.top)\n const left = Math.max(0, visible.left - elRect.left)\n const bottom = Math.max(0, rectBottom(elRect) - rectBottom(visible))\n const right = Math.max(0, rectRight(elRect) - rectRight(visible))\n if (top < CLIP_INSET_EPSILON && left < CLIP_INSET_EPSILON &&\n bottom < CLIP_INSET_EPSILON && right < CLIP_INSET_EPSILON) {\n return 'none'\n }\n return `inset(${top}px ${right}px ${bottom}px ${left}px)`\n}\n\nexport interface CaretBoxLayout {\n boxHeight: number\n rectTop: number\n}\n\n/** 根据行高与内容矩形计算光标盒高度与顶部(视口坐标) */\nexport function measureCaretBoxLayout(contentRect: Rect, style: CSSStyleDeclaration): CaretBoxLayout {\n const {fontSize, lineHeight} = style\n let height: number\n if (isNaN(+lineHeight)) {\n const f = parseFloat(lineHeight)\n height = isNaN(f) ? parseFloat(fontSize) : f\n } else {\n height = parseFloat(fontSize) * parseFloat(lineHeight)\n }\n\n const boxHeight = Math.max(Math.floor(Math.max(height, contentRect.height)), 12)\n let rectTop = contentRect.top\n if (contentRect.height < height) {\n rectTop -= (height - contentRect.height) / 2\n }\n return {\n boxHeight,\n rectTop: Math.floor(rectTop),\n }\n}\n\n/** 测量行内旋转角度(writing-mode 继承) */\nexport function measureInlineCaretRotate(node: HTMLElement, initialRotate: number, writingMode: string): number {\n let rotate = initialRotate\n if (rotate !== 0) {\n const hackEle = document.createElement('span')\n hackEle.style.cssText = 'display: inline-block; width: 10px; height: 10px; position: relative; contain: layout style size; writing-mode: inherit'\n const pointEle = document.createElement('span')\n pointEle.style.cssText = 'position: absolute; left: 0; top: 0; width:0;height:0'\n hackEle.append(pointEle)\n node.append(hackEle)\n\n const p1 = pointEle.getBoundingClientRect()\n pointEle.style.right = '0'\n pointEle.style.left = ''\n const p2 = pointEle.getBoundingClientRect()\n rotate = Math.atan2(p1.y - p2.y, p1.x - p2.x) * 180 / Math.PI\n hackEle.remove()\n }\n if (writingMode === 'vertical-lr' || writingMode === 'vertical-rl') {\n rotate += 90\n }\n return rotate\n}\n\nexport interface CaretPresentation {\n outOfView: boolean\n clipPath: string\n layoutElRect: Rect\n position: { left: number; top: number; height: number }\n caretColor: string\n style: { height: string; lineHeight: string; fontSize: string }\n}\n\nexport interface ComputeCaretPresentationOptions {\n anchor: HTMLElement\n maskRect: Rect\n clipAncestors: OverflowClipAncestor[]\n maskLeft: number\n maskTop: number\n boxHeight: number\n rectTop: number\n contentRect: Rect\n fontSize: string\n color: string\n measureElementRect: () => Rect\n}\n\n/**\n * 在 element 样式已写入后调用:计算裁剪、是否移出视口及对外事件数据。\n */\nexport function computeCaretPresentation(options: ComputeCaretPresentationOptions): CaretPresentation {\n const {\n anchor,\n maskRect,\n clipAncestors,\n maskLeft,\n maskTop,\n boxHeight,\n rectTop,\n contentRect,\n fontSize,\n color,\n measureElementRect,\n } = options\n\n const caretCenterX = contentRect.left + contentRect.width / 2\n const caretCenterY = rectTop + boxHeight / 2\n const layoutElRect: Rect = {\n left: maskRect.left + maskLeft,\n top: maskRect.top + maskTop,\n width: 2,\n height: boxHeight,\n }\n\n let visibleRect = getVisibleRectInOverflowClipsFromAncestors(layoutElRect, clipAncestors)\n visibleRect = visibleRect ? intersectRect(visibleRect, maskRect) : null\n const inClipBounds = !!visibleRect && rectContainsPoint(visibleRect, caretCenterX, caretCenterY)\n const outOfView = !inClipBounds || !isCaretAnchorCssVisible(anchor)\n\n let clipPath = 'none'\n if (!outOfView && visibleRect) {\n clipPath = clipPathInsetFromVisibleRegion(measureElementRect(), visibleRect)\n }\n\n return {\n outOfView,\n clipPath,\n layoutElRect,\n position: { left: maskLeft, top: rectTop, height: boxHeight },\n caretColor: color === 'rgba(0, 0, 0, 0)' ? '#000' : color,\n style: {\n height: boxHeight + 'px',\n lineHeight: boxHeight + 'px',\n fontSize,\n },\n }\n}\n\nexport interface UIElementParams {\n classes?: string[]\n attrs?: {[key: string]: any}\n props?: {[key: string]: any}\n styles?: {[key: string]: any}\n children?: (Node | null)[]\n on?: Record<string, (ev: Event) => void>\n}\n\nexport function createElement(tagName: string, options: UIElementParams = {}): HTMLElement {\n const el = document.createElement(tagName)\n if (options.classes) {\n el.classList.add(...options.classes)\n }\n if (options.attrs) {\n Object.keys(options.attrs).forEach(key => {\n el.setAttribute(key, options.attrs![key])\n })\n }\n if (options.props) {\n Object.keys(options.props).forEach(key => {\n (el as any)[key] = options.props![key]\n })\n }\n if (options.styles) {\n Object.assign(el.style, options.styles)\n }\n if (options.children) {\n options.children.filter(i => i).forEach(item => {\n el.appendChild(item as Node)\n })\n }\n if (options.on) {\n Object.keys(options.on).forEach(key => {\n el.addEventListener(key, options.on![key])\n })\n }\n return el\n}\n\nexport function getLayoutRectByRange(range: Range): Rect {\n let { startContainer, startOffset } = range\n if (startContainer.nodeType === Node.TEXT_NODE) {\n if (startOffset > 0) {\n return range.getBoundingClientRect()\n }\n const parentNode = startContainer.parentNode!\n startOffset = Array.from(parentNode.childNodes).indexOf(startContainer as any)\n startContainer = parentNode\n }\n\n const beforeNode = startContainer.childNodes[startOffset - 1]\n if (beforeNode) {\n if (beforeNode.nodeType === Node.ELEMENT_NODE && beforeNode.nodeName.toLowerCase() !== 'br') {\n const rect = (beforeNode as HTMLElement).getBoundingClientRect()\n return {\n left: rect.right,\n top: rect.top,\n width: range.collapsed ? 1 : rect.width,\n height: rect.height\n }\n } else if (beforeNode.nodeType === Node.TEXT_NODE) {\n const range2 = document.createRange()\n range2.setStart(beforeNode, beforeNode.textContent!.length)\n range2.setEnd(beforeNode, beforeNode.textContent!.length)\n const rect = range2.getBoundingClientRect()\n return {\n left: rect.right,\n top: rect.top,\n width: range.collapsed ? 1 : rect.width,\n height: rect.height\n }\n }\n }\n const offsetNode = startContainer.childNodes[startOffset]\n let isInsertBefore = false\n if (!offsetNode) {\n const lastChild = startContainer.lastChild\n if (lastChild && lastChild.nodeType === Node.ELEMENT_NODE) {\n const rect = (lastChild as HTMLElement).getBoundingClientRect()\n return {\n left: rect.right,\n top: rect.top,\n width: range.collapsed ? 1 : rect.width,\n height: rect.height\n }\n }\n }\n if (offsetNode) {\n if (offsetNode.nodeType === Node.ELEMENT_NODE && offsetNode.nodeName.toLowerCase() !== 'br') {\n const rect = (offsetNode as HTMLElement).getBoundingClientRect()\n return {\n left: rect.left,\n top: rect.top,\n width: range.collapsed ? 1 : rect.width,\n height: rect.height\n }\n }\n isInsertBefore = true\n }\n const span = startContainer.ownerDocument!.createElement('span')\n span.innerText = '\\u200b'\n span.style.display = 'inline-block'\n if (isInsertBefore) {\n startContainer.insertBefore(span, offsetNode)\n } else {\n startContainer.appendChild(span)\n }\n const rect = span.getBoundingClientRect()\n startContainer.removeChild(span)\n return {\n left: rect.left,\n top: rect.top,\n width: range.collapsed ? 1 : rect.width,\n height: rect.height\n }\n}\n","export const isWindows = () => /win(dows|32|64)/i.test(navigator.userAgent)\nexport const isMac = () => /mac os/i.test(navigator.userAgent)\nexport const isSafari = () => /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent)\nexport const isFirefox = () => /Firefox/.test(navigator.userAgent)\n\nexport const isMobileBrowser = () => /Android|iPhone|iPad/.test(navigator.userAgent)\n","import { InjectionToken } from '@viewfly/core'\n\nimport type { ViewOptions } from './browser-module'\n\n/**\n * 编辑器可选项依赖注入 token\n */\nexport const EDITOR_OPTIONS = new InjectionToken<ViewOptions>('EDITOR_OPTIONS')\n\n/**\n * 编辑器容器依赖注入 token\n */\nexport const VIEW_CONTAINER = new InjectionToken<HTMLElement>('VIEW_CONTAINER')\n\n/**\n * 编辑器容器依赖注入 token\n */\nexport const VIEW_DOCUMENT = new InjectionToken<HTMLElement>('VIEW_DOCUMENT')\n\n/**\n * 编辑器容器遮罩层 token\n */\nexport const VIEW_MASK = new InjectionToken<HTMLElement>('VIEW_MASK')\n","import { Inject, Injectable } from '@viewfly/core'\nimport { Attribute, Component, ContentType, FormatItem, Formatter, FormatValue, Slot, Textbus } from '@textbus/core'\n\nimport { EDITOR_OPTIONS } from './injection-tokens'\nimport type { ViewOptions } from './browser-module'\n\n/**\n * 插槽解析器\n */\nexport interface SlotParser {\n /**\n * 将指定 DOM 节点解析为插槽数据\n * @param childSlot 储存数据的插槽\n * @param slotRootElement 插槽的根节点\n * @param slotContentHostElement 插槽的内容节点\n *\n * 注意:当不传入内容节点时,Textbus 会把根节点当成内容节点\n */<T extends Slot>(childSlot: T, slotRootElement: Element, slotContentHostElement?: Element): T\n}\n\n/**\n * 组件加载器\n */\nexport interface ComponentLoader {\n /** 识别组件的匹配方法 */\n match(element: Element,\n returnableContentTypes: ContentType[]): boolean\n\n /** 读取组件内容的方法 */\n read(element: Element, textbus: Textbus, slotParser: SlotParser): Component | Slot | void\n}\n\nexport interface FormatLoaderReadResult<T = FormatValue> {\n formatter: Formatter<T>\n value: T\n}\n\n/**\n * 格式加载器\n */\nexport interface FormatLoader<T = FormatValue> {\n /**\n * 匹配一个 DOM 节点是否是某个格式节点\n * @param element\n */\n match(element: Element): boolean\n\n /**\n * 读取匹配到的节点,并返回读取后的信息\n * @param element\n */\n read(element: Element): FormatLoaderReadResult<T>\n}\n\nexport interface AttributeLoaderReadResult<T = FormatValue> {\n attribute: Attribute<T>\n value: T\n}\n\n/**\n * 属性加载器\n */\nexport interface AttributeLoader<T = FormatValue> {\n /**\n * 匹配一个 DOM 节点是否是某个属性节点\n * @param element\n */\n match(element: Element): boolean\n\n /**\n * 读取匹配到的节点,并返回读取后的信息\n * @param element\n */\n read(element: Element): AttributeLoaderReadResult<T>\n}\n\n/**\n * 用于解析 HTML,并把 HTML 内容转换为 Textbus 可以支持的组件或插槽数据\n */\n@Injectable()\nexport class Parser {\n static parseHTML(html: string) {\n return new DOMParser().parseFromString(html, 'text/html').body\n }\n\n componentLoaders: ComponentLoader[]\n formatLoaders: FormatLoader<any>[]\n attributeLoaders: AttributeLoader<any>[]\n\n constructor(@Inject(EDITOR_OPTIONS) options: ViewOptions,\n private textbus: Textbus) {\n const componentLoaders = [\n ...(options.componentLoaders || [])\n ]\n const formatLoaders = [\n ...(options.formatLoaders || [])\n ]\n const attributeLoaders = [\n ...(options.attributeLoaders || [])\n ]\n // options.imports?.forEach(i => {\n // componentLoaders.push(...(i.componentLoaders || []))\n // formatLoaders.push(...(i.formatLoaders || []))\n // })\n this.componentLoaders = componentLoaders\n this.formatLoaders = formatLoaders\n this.attributeLoaders = attributeLoaders\n }\n\n /**\n * 使用指定的组件加载器解析一段 HTML 字符串或 DOM 元素\n * @param html\n * @param rootComponentLoader\n */\n parseDoc(html: string | HTMLElement, rootComponentLoader: ComponentLoader) {\n const element = typeof html === 'string' ? Parser.parseHTML(html) : html\n return rootComponentLoader.read(\n element,\n this.textbus,\n (childSlot, slotRootElement, slotContentHostElement = slotRootElement) => {\n return this.readSlot(childSlot, slotRootElement, slotContentHostElement)\n }\n )\n }\n\n /**\n * 将一段 HTML 或 DOM 元素解析到指定插槽\n * @param html\n * @param rootSlot\n */\n parse(html: string | HTMLElement, rootSlot: Slot) {\n const element = typeof html === 'string' ? Parser.parseHTML(html) : html\n return this.readFormats(element, rootSlot)\n }\n\n private readComponent(el: Node, slot: Slot) {\n if (el.nodeType === Node.ELEMENT_NODE) {\n if ((el as HTMLElement).tagName === 'BR') {\n slot.insert('\\n')\n return\n }\n const schema = [...slot.schema]\n for (const t of this.componentLoaders) {\n if (t.match(el as HTMLElement, schema)) {\n const result = t.read(\n el as HTMLElement,\n this.textbus,\n (childSlot, slotRootElement, slotContentHostElement = slotRootElement) => {\n return this.readSlot(childSlot, slotRootElement, slotContentHostElement)\n }\n )\n if (!result) {\n return\n }\n if (result instanceof Slot) {\n result.toDelta().forEach(i => slot.insert(i.insert, i.formats))\n return\n }\n slot.insert(result)\n return\n }\n }\n this.readFormats(el as HTMLElement, slot)\n } else if (el.nodeType === Node.TEXT_NODE) {\n this.readText(slot, el)\n }\n }\n\n private readText(slot: Slot, el: Node) {\n const textContent = el.textContent\n if (/^\\s*[\\r\\n\\u200b]+\\s*$/.test(textContent as string)) {\n return\n }\n slot.insert(textContent as string)\n }\n\n private readFormats(el: Element, slot: Slot) {\n const formats = this.formatLoaders.filter(f => {\n return f.match(el)\n }).map(f => {\n return f.read(el)\n })\n const startIndex = slot.index\n let startNode = el.firstChild\n while (startNode) {\n this.readComponent(startNode, slot)\n startNode = startNode.nextSibling\n }\n const endIndex = slot.index\n this.applyFormats(slot, formats.map<FormatItem<any>>(i => {\n return {\n formatter: i.formatter,\n value: i.value,\n startIndex,\n endIndex\n }\n }))\n slot.retain(endIndex)\n return slot\n }\n\n private readSlot<T extends Slot>(childSlot: T, slotRootElement: Element, slotContentElement: Element): T {\n if (slotRootElement.nodeType === Node.ELEMENT_NODE) {\n this.attributeLoaders.filter(a => {\n return a.match(slotRootElement)\n }).forEach(a => {\n const r = a.read(slotRootElement)\n childSlot.setAttribute(r.attribute, r.value)\n })\n }\n if (slotContentElement.nodeType === Node.ELEMENT_NODE) {\n this.readFormats(slotContentElement, childSlot)\n } else {\n this.readText(childSlot, slotContentElement)\n }\n return childSlot\n }\n\n private applyFormats(slot: Slot, formatItems: FormatItem<any>[]) {\n slot.background(() => {\n formatItems.forEach(i => {\n slot.retain(i.startIndex)\n slot.retain(i.endIndex - i.startIndex, i.formatter, i.value)\n })\n })\n }\n}\n","import { Observable } from '@tanbo/stream'\n\nimport { Rect } from './_utils/uikit'\n\nexport interface CaretLimit {\n top: number\n bottom: number\n}\n\nexport interface CaretPosition {\n left: number\n top: number\n height: number\n}\n\nexport function caretPositionEqual(a: CaretPosition | null, b: CaretPosition | null): boolean {\n if (a === b) {\n return true\n }\n if (a === null || b === null) {\n return false\n }\n return a.left === b.left && a.top === b.top && a.height === b.height\n}\n\nexport interface Caret {\n onPositionChange: Observable<CaretPosition | null>\n readonly rect: Rect\n\n refresh(): void\n}\n\nexport abstract class Input {\n /**\n * @experimental\n */\n abstract composition: boolean\n /**\n * @experimental\n */\n abstract onReady: Promise<void>\n abstract caret: Caret\n abstract disabled: boolean\n\n abstract focus(nativeRange: Range, reFlash: boolean): void\n\n abstract blur(): void\n\n abstract destroy(): void\n}\n","import { Adapter } from '@textbus/core'\nimport { Subject } from '@tanbo/stream'\n\nimport { createElement } from './_utils/uikit'\nimport { VIEW_DOCUMENT } from './injection-tokens'\n\nexport abstract class DomAdapter<\n ViewComponent extends object = object,\n ViewElement extends object = object> extends Adapter<Element, Node, ViewComponent, ViewElement> {\n onViewUpdated = new Subject<void>()\n host = createElement('div', {\n styles: {\n cursor: 'text',\n overflowWrap: 'break-word',\n boxSizing: 'border-box',\n flex: 1,\n outline: 'none'\n },\n attrs: {\n 'data-textbus-view': VIEW_DOCUMENT,\n },\n props: {\n id: 'textbus-' + Number((Math.random() + '').substring(2)).toString(16)\n }\n })\n}\n","import { delay, filter, fromEvent, Observable, Subject, Subscription } from '@tanbo/stream'\nimport { Inject, Injectable } from '@viewfly/core'\nimport {\n NativeSelectionBridge,\n NativeSelectionConnector,\n SelectionPosition,\n Slot,\n AbstractSelection,\n RootComponentRef,\n Controller,\n Selection,\n Textbus,\n Scheduler\n} from '@textbus/core'\n\nimport { EDITOR_OPTIONS, VIEW_DOCUMENT } from './injection-tokens'\nimport { getLayoutRectByRange, Rect } from './_utils/uikit'\nimport { Input } from './types'\nimport type { ViewOptions } from './browser-module'\nimport { DomAdapter } from './dom-adapter'\n\n/**\n * Textbus PC 端选区桥接实现\n */\n@Injectable()\nexport class SelectionBridge implements NativeSelectionBridge {\n onSelectionChange: Observable<Range | null>\n nativeSelection = document.getSelection()!\n\n syncSelectionFromNativeSelectionChange = true\n\n private selectionChangeEvent = new Subject<Range | null>()\n\n private subs: Subscription[] = []\n private sub: Subscription\n private connector: NativeSelectionConnector | null = null\n\n private ignoreSelectionChange = false\n\n private changeFromUser = false\n private docContainer: HTMLElement\n\n private cacheCaretPositionTimer!: any\n private oldCaretPosition!: Rect | null\n\n constructor(@Inject(EDITOR_OPTIONS) private config: ViewOptions,\n textbus: Textbus,\n controller: Controller,\n private selection: Selection,\n private rootComponentRef: RootComponentRef,\n private input: Input,\n private scheduler: Scheduler,\n private domAdapter: DomAdapter) {\n this.docContainer = textbus.get(VIEW_DOCUMENT)\n this.onSelectionChange = this.selectionChangeEvent.asObservable().pipe(filter(() => {\n return !controller.readonly\n }))\n this.sub = this.onSelectionChange.subscribe((r) => {\n if (r) {\n input.focus(r, this.changeFromUser)\n } else {\n input.blur()\n }\n })\n this.sub.add(\n fromEvent(document, 'focusin').subscribe(ev => {\n let target = ev.target as HTMLElement\n if (/^(input|textarea|select)$/i.test(target.nodeName)) {\n if (target.tagName.toLowerCase() === 'input' && /^(range|date)$/.test((target as HTMLInputElement).type)) {\n return\n }\n this.ignoreSelectionChange = true\n return\n }\n if (!config.useContentEditable) {\n while (target) {\n if (target.contentEditable === 'true') {\n this.ignoreSelectionChange = true\n return\n }\n target = target.parentNode as HTMLElement\n }\n }\n })\n )\n this.sub.add(\n fromEvent(document, 'focusout').subscribe(() => {\n this.ignoreSelectionChange = false\n })\n )\n }\n\n connect(connector: NativeSelectionConnector) {\n this.disConnect()\n this.connector = connector\n this.syncSelection(connector)\n this.listen(connector)\n }\n\n disConnect() {\n this.connector = null\n this.unListen()\n }\n\n getRect(location: SelectionPosition) {\n const { focus, anchor } = this.getPositionByRange({\n focusOffset: location.offset,\n anchorOffset: location.offset,\n focusSlot: location.slot,\n anchorSlot: location.slot\n })\n if (!focus || !anchor) {\n return null\n }\n const nativeRange = document.createRange()\n nativeRange.setStart(focus.node, focus.offset)\n nativeRange.collapse()\n return getLayoutRectByRange(nativeRange)\n }\n\n restore(abstractSelection: AbstractSelection | null, fromLocal: boolean) {\n this.changeFromUser = fromLocal\n if (this.ignoreSelectionChange || !this.connector) {\n return\n }\n this.unListen()\n if (!abstractSelection) {\n this.nativeSelection.removeAllRanges()\n this.selectionChangeEvent.next(null)\n this.listen(this.connector)\n return\n }\n\n const { focus, anchor } = this.getPositionByRange(abstractSelection)\n if (!focus || !anchor) {\n this.nativeSelection.removeAllRanges()\n this.selectionChangeEvent.next(null)\n this.listen(this.connector)\n return\n }\n\n function tryOffset(position: { node: Node, offset: number }) {\n if (!position.node) {\n return\n }\n if (position.node.nodeType === Node.TEXT_NODE) {\n const len = position.node.textContent!.length\n if (position.offset > len) {\n position.offset = len\n }\n } else if (position.node.nodeType === Node.ELEMENT_NODE) {\n const len = position.node.childNodes.length\n if (position.offset > len) {\n position.offset = len\n }\n }\n }\n\n try {\n tryOffset(focus)\n tryOffset(anchor)\n this.nativeSelection.setBaseAndExtent(anchor.node, anchor.offset, focus.node, focus.offset)\n } catch (e) {\n setTimeout(() => {\n throw e\n })\n }\n if (this.nativeSelection.rangeCount) {\n const nativeRange = this.nativeSelection.getRangeAt(0)\n this.selectionChangeEvent.next(nativeRange)\n } else {\n this.selectionChangeEvent.next(null)\n }\n\n // hack start 浏览器会触发上面选区更改事件\n const bind = () => {\n if (this.connector) {\n this.listen(this.connector)\n }\n }\n if (fromLocal) {\n Promise.resolve().then(bind)\n return\n }\n if (typeof requestIdleCallback === 'function') {\n requestIdleCallback(bind)\n } else {\n setTimeout(bind, 30)\n }\n // hack end\n }\n\n destroy() {\n this.subs.forEach(i => i.unsubscribe())\n this.sub.unsubscribe()\n }\n\n getPositionByRange(abstractSelection: AbstractSelection) {\n let focus!: { node: Node, offset: number } | null\n let anchor!: { node: Node, offset: number } | null\n try {\n focus = this.findSelectedNodeAndOffset(abstractSelection.focusSlot!, abstractSelection.focusOffset!)\n anchor = focus\n if (abstractSelection.anchorSlot !== abstractSelection.focusSlot ||\n abstractSelection.anchorOffset !== abstractSelection.focusOffset) {\n anchor = this.findSelectedNodeAndOffset(abstractSelection.anchorSlot!, abstractSelection.anchorOffset!)\n }\n return {\n focus,\n anchor\n }\n } catch (e) {\n return {\n focus: null,\n anchor: null\n }\n }\n }\n\n getPreviousLinePositionByCurrent(position: SelectionPosition): SelectionPosition | null {\n return this.getLinePosition(position, false)\n }\n\n getNextLinePositionByCurrent(position: SelectionPosition): SelectionPosition | null {\n return this.getLinePosition(position, true)\n }\n\n private getLinePosition(currentPosition: SelectionPosition, toNext: boolean): SelectionPosition | null {\n clearTimeout(this.cacheCaretPositionTimer)\n if (!this.oldCaretPosition) {\n this.oldCaretPosition = this.getRect(currentPosition)!\n }\n const p = this.getVerticalMovePosition(currentPosition, this.oldCaretPosition.left, toNext)\n this.cacheCaretPositionTimer = setTimeout(() => {\n this.oldCaretPosition = null\n }, 3000)\n return p\n }\n\n /**\n * 通过遍历模型位置 + 视觉 rect 判断换行,计算光标到下一行或上一行的位置。\n * 不使用 Selection.modify(),避免复杂布局中的死循环。\n */\n private getVerticalMovePosition(\n currentPosition: SelectionPosition,\n startLeft: number,\n toNext: boolean,\n ): SelectionPosition {\n const startRect = this.getRect(currentPosition)\n if (!startRect) return currentPosition\n\n const startTop = startRect.top\n const startBottom = startTop + startRect.height\n\n const step = toNext\n ? (pos: SelectionPosition) => this.selection.getNextPositionByPosition(pos.slot, pos.offset)\n : (pos: SelectionPosition) => this.selection.getPreviousPositionByPosition(pos.slot, pos.offset)\n\n let cur = currentPosition\n\n while (true) {\n const next = step(cur)\n if (next.slot === cur.slot && next.offset === cur.offset) break\n\n const rect = this.getRect(next)\n if (!rect) break\n\n cur = next\n\n if (this.isDifferentLine(startTop, startBottom, rect, toNext)) {\n return this.refineXOnLine(cur, startLeft, rect)\n }\n }\n\n return this.getDocumentBoundary(toNext)\n }\n\n /** 目标位置是否已离开起始行 */\n private isDifferentLine(startTop: number, startBottom: number, targetRect: Rect, toNext: boolean): boolean {\n if (toNext) {\n return targetRect.top >= startBottom\n }\n return targetRect.top + targetRect.height <= startTop\n }\n\n /**\n * 沿目标行微调位置。\n * 起点在 targetX 右侧 → 向左找到离 targetX 最近的右侧位置;\n * 起点在 targetX 左侧 → 向右找到第一个右侧位置。\n */\n private refineXOnLine(position: SelectionPosition, targetX: number, lineRect: Rect): SelectionPosition {\n const startRect = this.getRect(position)!\n const startLeft = startRect.left\n const lineTop = lineRect.top\n const lineBottom = lineTop + Math.max(lineRect.height, 12)\n if (startLeft === targetX) return position\n\n let cur = position\n if (startLeft > targetX) {\n let rightSide = position\n while (true) {\n const prev = this.selection.getPreviousPositionByPosition(cur.slot, cur.offset)\n if (prev.slot === cur.slot && prev.offset === cur.offset) break\n const rect = this.getRect(prev)\n if (!rect) break\n if (rect.top >= lineBottom || rect.top + rect.height <= lineTop) break\n cur = prev\n if (rect.left === targetX) return prev\n if (rect.left < targetX) return rightSide\n rightSide = prev\n }\n return rightSide\n }\n\n while (true) {\n const next = this.selection.getNextPositionByPosition(cur.slot, cur.offset)\n if (next.slot === cur.slot && next.offset === cur.offset) break\n const rect = this.getRect(next)\n if (!rect) break\n if (rect.top >= lineBottom || rect.top + rect.height <= lineTop) break\n cur = next\n if (rect.left === targetX) return cur\n if (rect.left > targetX) return cur\n }\n return cur\n }\n\n /** 跳转到文档开头或结尾 */\n private getDocumentBoundary(toNext: boolean): SelectionPosition {\n const slots = this.rootComponentRef.component.slots\n if (toNext) {\n const lastSlot = slots[slots.length - 1]\n return { slot: lastSlot, offset: lastSlot.length }\n }\n const firstSlot = slots[0]\n return { slot: firstSlot, offset: 0 }\n }\n\n private caretPositionFromPoint(x: number, rect: Rect) {\n return document.caretPositionFromPoint?.(x, rect.top + rect.height / 2)\n }\n\n private unListen() {\n this.subs.forEach(i => i.unsubscribe())\n this.subs = []\n }\n\n private listen(connector: NativeSelectionConnector) {\n if (!this.config.useContentEditable) {\n const selection = this.nativeSelection\n this.subs.push(\n fromEvent<MouseEvent>(this.docContainer, 'mousedown').subscribe(ev => {\n if (this.ignoreSelectionChange || ev.button === 2) {\n return\n }\n if (!ev.shiftKey) {\n selection.removeAllRanges()\n }\n })\n )\n }\n let isUpdating = false\n this.subs.push(\n this.scheduler.onDocChange.subscribe(() => {\n isUpdating = true\n }),\n this.scheduler.onDocChanged.pipe(delay()).subscribe(() => {\n isUpdating = false\n }),\n fromEvent(document, 'selectionchange').subscribe(() => {\n if (isUpdating) {\n return\n }\n if (this.syncSelectionFromNativeSelectionChange) {\n this.syncSelection(connector)\n }\n })\n )\n }\n\n private syncSelection(connector: NativeSelectionConnector) {\n const selection = this.nativeSelection\n this.changeFromUser = true\n if (this.ignoreSelectionChange ||\n this.input.composition ||\n selection.rangeCount === 0 ||\n !this.docContainer.contains(selection.anchorNode) ||\n this.rootComponentRef.component.slots.length === 0) {\n return\n }\n const rawRange = selection.getRangeAt(0)\n const nativeRange = rawRange.cloneRange()\n const isFocusEnd = selection.focusNode === nativeRange.endContainer && selection.focusOffset === nativeRange.endOffset\n const isFocusStart = selection.focusNode === nativeRange.startContainer && selection.focusOffset === nativeRange.startOffset\n if (!this.docContainer.contains(selection.focusNode)) {\n if (isFocusEnd) {\n const nativeNode = this.domAdapter.getNativeNodeBySlot(this.rootComponentRef.component.slots.at(0)!)\n if (!nativeNode) {\n return\n }\n nativeRange.setEndAfter(nativeNode.lastChild!)\n } else {\n const nativeNode = this.domAdapter.getNativeNodeBySlot(this.rootComponentRef.component.slots.at(-1)!)\n if (!nativeNode) {\n return\n }\n nativeRange.setStartBefore(nativeNode.firstChild!)\n }\n }\n\n const startPosition = this.getCorrectedPosition(nativeRange.startContainer, nativeRange.startOffset, isFocusStart)\n const endPosition = nativeRange.collapsed ?\n startPosition :\n this.getCorrectedPosition(nativeRange.endContainer, nativeRange.endOffset, isFocusEnd)\n\n if ([Node.ELEMENT_NODE, Node.TEXT_NODE].includes(nativeRange.commonAncestorContainer?.nodeType as any) &&\n startPosition && endPosition) {\n const abstractSelection = connector.beforeChange(isFocusEnd ? {\n anchorSlot: startPosition.slot,\n anchorOffset: startPosition.offset,\n focusSlot: endPosition.slot,\n focusOffset: endPosition.offset\n } : {\n focusSlot: startPosition.slot,\n focusOffset: startPosition.offset,\n anchorSlot: endPosition.slot,\n anchorOffset: endPosition.offset\n })\n if (!abstractSelection) {\n this.selectionChangeEvent.next(null)\n connector.setSelection(null)\n return\n }\n const { focus, anchor } = this.getPositionByRange(abstractSelection)\n if (focus && anchor) {\n let start = anchor\n let end = focus\n if (isFocusStart) {\n start = focus\n end = anchor\n }\n if (nativeRange.startContainer !== start.node || nativeRange.startOffset !== start.offset) {\n nativeRange.setStart(start.node, start.offset)\n }\n if (nativeRange.endContainer !== end.node || nativeRange.endOffset !== end.offset) {\n nativeRange.setEnd(end.node, end.offset)\n }\n connector.setSelection(abstractSelection)\n if (selection.isCollapsed && (\n rawRange.startContainer !== start.node ||\n rawRange.startOffset !== start.offset ||\n rawRange.endContainer !== end.node ||\n rawRange.endOffset !== end.offset\n )) {\n rawRange.setStart(start.node, start.offset)\n rawRange.setEnd(end.node, end.offset)\n }\n this.selectionChangeEvent.next(nativeRange)\n } else {\n connector.setSelection(null)\n }\n return\n }\n connector.setSelection(null)\n }\n\n private findSelectedNodeAndOffset(slot: Slot, offset: number): { node: Node, offset: number } | null {\n const prev = slot.getContentAtIndex(offset - 1)\n const nodes = this.domAdapter.getNodesBySlot(slot)\n\n if (prev) {\n if (typeof prev !== 'string') {\n const nativeNode = this.domAdapter.getNativeNodeByComponent(prev)!\n return {\n node: nativeNode.parentNode!,\n offset: Array.from(nativeNode.parentNode!.childNodes).indexOf(nativeNode) + 1\n }\n } else if (prev === '\\n') {\n for (const node of nodes) {\n if (node instanceof Text) {\n continue\n }\n if (node.nodeName === 'BR') {\n const position = this.domAdapter.getLocationByNativeNode(node)\n if (position) {\n if (position.endIndex === offset) {\n const parentNode = node.parentNode!\n return {\n node: parentNode,\n offset: Array.from(parentNode.childNodes).indexOf(node as ChildNode) + 1\n }\n }\n }\n }\n }\n }\n }\n const current = slot.getContentAtIndex(offset)\n if (current && typeof current !== 'string') {\n const nativeNode = this.domAdapter.getNativeNodeByComponent(current)!\n return {\n node: nativeNode.parentNode!,\n offset: Array.from(nativeNode.parentNode!.childNodes).indexOf(nativeNode)\n }\n }\n for (const node of nodes) {\n if (node instanceof Element) {\n if (node.tagName === 'BR') {\n const position = this.domAdapter.getLocationByNativeNode(node)\n if (position) {\n if (position.startIndex === offset) {\n const parentNode = node.parentNode!\n return {\n node: parentNode,\n offset: Array.from(parentNode.childNodes).indexOf(node)\n }\n }\n }\n }\n continue\n }\n const position = this.domAdapter.getLocationByNativeNode(node)\n if (position) {\n if (offset >= position.startIndex && offset <= position.endIndex) {\n return {\n node: node,\n offset: offset - position.startIndex\n }\n }\n }\n }\n return null\n }\n\n private getCorrectedPosition(node: Node, offset: number, toAfter: boolean, excludeNodes: Node[] = []): SelectionPosition | null {\n excludeNodes.push(node)\n if (node.nodeType === Node.ELEMENT_NODE) {\n const containerPosition = this.domAdapter.getLocationByNativeNode(node)\n const childNode = node.childNodes[offset]\n if (childNode) {\n const childPosition = this.domAdapter.getLocationByNativeNode(childNode)\n if (childPosition) {\n if (containerPosition) {\n return {\n slot: childPosition.slot,\n offset: childPosition.startIndex\n }\n }\n return this.findFocusNode(childNode, toAfter, excludeNodes)\n }\n return this.findFocusNode(childNode, toAfter, excludeNodes)\n }\n const prevNode = node.childNodes[offset - 1]\n if (prevNode) {\n const prevPosition = this.domAdapter.getLocationByNativeNode(prevNode)\n if (prevPosition && containerPosition) {\n return {\n slot: prevPosition.slot,\n offset: prevPosition.endIndex\n }\n }\n }\n if (containerPosition) {\n return {\n slot: containerPosition.slot,\n offset: containerPosition.endIndex\n }\n }\n const nextNode = toAfter ? node.nextSibling : node.previousSibling\n if (nextNode) {\n return this.findFocusNode(nextNode, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(node, toAfter, excludeNodes)\n } else if (node.nodeType === Node.TEXT_NODE) {\n const containerPosition = this.domAdapter.getLocationByNativeNode(node)\n if (containerPosition) {\n return {\n slot: containerPosition.slot,\n offset: containerPosition.startIndex + offset\n }\n }\n const nextNode = toAfter ? node.nextSibling : node.previousSibling\n if (nextNode) {\n return this.findFocusNode(nextNode, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(node, toAfter, excludeNodes)\n }\n return null\n }\n\n private findFocusNode(node: Node, toAfter = false, excludeNodes: Node[] = []): SelectionPosition | null {\n if (excludeNodes.includes(node)) {\n const next = toAfter ? node.nextSibling : node.previousSibling\n if (next) {\n return this.findFocusNode(next, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(node, toAfter, excludeNodes)\n }\n excludeNodes.push(node)\n const position = this.domAdapter.getLocationByNativeNode(node as any)\n if (position) {\n return {\n slot: position.slot,\n offset: toAfter ? position.startIndex : position.endIndex\n }\n }\n const firstChild = toAfter ? node.firstChild : node.lastChild\n if (firstChild && !excludeNodes.includes(firstChild as Node)) {\n return this.findFocusNode(firstChild, toAfter, excludeNodes)\n }\n const nextSibling = toAfter ? node.nextSibling : node.previousSibling\n if (nextSibling) {\n return this.findFocusNode(nextSibling, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(node, toAfter, excludeNodes)\n }\n\n private findFocusNodeByParent(node: Node, toAfter: boolean, excludeNodes: Node[]): SelectionPosition | null {\n const parentNode = node.parentNode\n if (parentNode) {\n if (excludeNodes.includes(parentNode)) {\n const nextNode = toAfter ? parentNode.nextSibling : parentNode.previousSibling\n if (nextNode) {\n return this.findFocusNode(nextNode, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(parentNode, toAfter, excludeNodes)\n }\n const parentPosition = this.domAdapter.getLocationByNativeNode(parentNode)\n if (parentPosition) {\n return {\n slot: parentPosition.slot,\n offset: toAfter ? parentPosition.endIndex : parentPosition.startIndex\n }\n }\n excludeNodes.push(parentNode)\n const nextNode = toAfter ? parentNode.nextSibling : parentNode.previousSibling\n if (nextNode) {\n return this.findFocusNode(nextNode, toAfter, excludeNodes)\n }\n return this.findFocusNodeByParent(parentNode, toAfter, excludeNodes)\n }\n return null\n }\n}\n","import { distinctUntilChanged, filter, fromEvent, map, merge, Observable, Subject, Subscription } from '@tanbo/stream'\nimport { Injectable } from '@viewfly/core'\nimport {\n Commander,\n CompositionStartEventData,\n ContentType,\n Controller,\n Event,\n invokeListener,\n Keyboard,\n Scheduler,\n Selection,\n Slot,\n Textbus\n} from '@textbus/core'\n\nimport {\n CaretPresentation,\n computeCaretPresentation,\n createElement,\n getLayoutRectByRange,\n getOverflowClipContext,\n measureCaretBoxLayout,\n measureInlineCaretRotate,\n OverflowClipContext,\n Rect,\n} from './_utils/uikit'\nimport { Parser } from './parser'\nimport { isFirefox, isMac, isSafari, isWindows } from './_utils/env'\nimport { VIEW_MASK } from './injection-tokens'\nimport { Caret, CaretLimit, CaretPosition, caretPositionEqual, Input } from './types'\nimport { DomAdapter } from './dom-adapter'\n\nconst iframeHTML = `\n<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n <title>Textbus</title>\n <style>\n html {position: fixed; left:0; overflow: hidden}\n html, body{height: 100%;width:100%}\n body{margin:0; overflow: hidden}\n textarea{width: 2000px;height: 100%;opacity: 0; padding: 0; outline: none; border: none; position: absolute; left:0; top:0;}\n </style>\n</head>\n<body>\n</body>\n</html>\n`\n\ninterface CaretStyle {\n height: string\n lineHeight: string\n fontSize: string\n}\n\nclass ExperimentalCaret implements Caret {\n onPositionChange: Observable<CaretPosition | null>\n onStyleChange: Observable<CaretStyle>\n elementRef: HTMLElement\n changeFromSelf = false\n\n getLimit = function (): CaretLimit {\n return {\n top: 0,\n bottom: document.documentElement.clientHeight\n }\n }\n\n get rect() {\n return this.caret.getBoundingClientRect()\n }\n\n private timer: any = null\n private caret: HTMLElement\n\n private set display(v: boolean) {\n this._display = v\n if (!this.caretClippedOut) {\n this.caret.style.visibility = v ? 'visible' : 'hidden'\n }\n }\n\n private get display() {\n return this._display\n }\n\n private _display = true\n private flashing = true\n /** 被 overflow 裁出可视区(不用 display:none,避免触发 Input.hide) */\n private caretClippedOut = false\n\n private subscription = new Subscription()\n private scrollSubscription = new Subscription()\n private scrollRaf = 0\n private clipContext: OverflowClipContext | null = null\n private clipContextAnchor: Node | null = null\n private scrollListenerAnchor: Node | null = null\n\n private positionChangeEvent = new Subject<CaretPosition | null>()\n private styleChangeEvent = new Subject<CaretStyle>()\n private oldRange: Range | null = null\n\n constructor(\n private domRenderer: DomAdapter,\n private scheduler: Scheduler,\n private editorMask: HTMLElement) {\n this.onPositionChange = this.positionChangeEvent.pipe(distinctUntilChanged(caretPositionEqual))\n this.onStyleChange = this.styleChangeEvent.asObservable()\n this.elementRef = createElement('div', {\n styles: {\n position: 'absolute',\n width: '2px',\n pointerEvents: 'none'\n },\n children: [\n this.caret = createElement('span', {\n styles: {\n width: '100%',\n height: '100%',\n position: 'absolute',\n left: 0,\n top: 0\n }\n })\n ]\n })\n\n this.subscription.add(\n fromEvent(document, 'mousedown').subscribe(() => {\n this.flashing = false\n }),\n fromEvent(document, 'mouseup').subscribe(() => {\n this.flashing = true\n }),\n )\n this.editorMask.appendChild(this.elementRef)\n }\n\n refresh() {\n if (this.oldRange?.collapsed) {\n this.updateCursorPosition(this.oldRange)\n }\n }\n\n show(range: Range, restart: boolean) {\n this.oldRange = range\n if (restart || this.scheduler.lastChangesHasLocalUpdate) {\n clearTimeout(this.timer)\n }\n if (range.collapsed && (restart || this.scheduler.lastChangesHasLocalUpdate)) {\n this._display = true\n }\n this.updateCursorPosition(range)\n if (range.collapsed) {\n const anchor = range.startContainer.nodeType === Node.ELEMENT_NODE ?\n range.startContainer :\n range.startContainer.parentNode\n if (anchor) {\n this.bindScrollListeners(anchor)\n }\n if (restart || this.scheduler.lastChangesHasLocalUpdate) {\n this.display = true\n const toggleShowHide = () => {\n this.display = !this.display || !this.flashing\n this.timer = setTimeout(toggleShowHide, 400)\n }\n clearTimeout(this.timer)\n this.timer = setTimeout(toggleShowHide, 400)\n }\n } else {\n this.unbindScrollListeners()\n this.display = false\n clearTimeout(this.timer)\n }\n }\n\n hide() {\n this.unbindScrollListeners()\n this.clearClipContext()\n this.display = false\n clearTimeout(this.timer)\n this.caretClippedOut = false\n this.elementRef.style.clipPath = 'none'\n this.elementRef.style.visibility = ''\n this.caret.style.visibility = 'hidden'\n this.positionChangeEvent.next(null)\n }\n\n destroy() {\n clearTimeout(this.timer)\n this.unbindScrollListeners()\n this.subscription.unsubscribe()\n }\n\n private bindScrollListeners(anchor: Node) {\n if (this.scrollListenerAnchor === anchor) {\n return\n }\n this.unbindScrollListeners()\n this.scrollListenerAnchor = anchor\n const onScroll = () => {\n if (!this.oldRange || this.scrollRaf) {\n return\n }\n this.scrollRaf = requestAnimationFrame(() => {\n this.scrollRaf = 0\n if (this.oldRange) {\n this.updateCursorPosition(this.oldRange)\n }\n })\n }\n for (const el of this.ensureClipContext(anchor).scrollContainers) {\n this.scrollSubscription.add(fromEvent(el, 'scroll').subscribe(onScroll))\n }\n const win = anchor.ownerDocument?.defaultView\n if (win) {\n this.scrollSubscription.add(fromEvent(win, 'scroll').subscribe(onScroll))\n }\n }\n\n private unbindScrollListeners() {\n if (this.scrollRaf) {\n cancelAnimationFrame(this.scrollRaf)\n this.scrollRaf = 0\n }\n this.scrollSubscription.unsubscribe()\n this.scrollSubscription = new Subscription()\n this.scrollListenerAnchor = null\n }\n\n private ensureClipContext(anchor: Node): OverflowClipContext {\n if (this.clipContextAnchor !== anchor) {\n this.clipContextAnchor = anchor\n this.clipContext = getOverflowClipContext(anchor, this.editorMask)\n }\n return this.clipContext!\n }\n\n private clearClipContext() {\n this.clipContext = null\n this.clipContextAnchor = null\n }\n\n private updateCursorPosition(nativeRange: Range) {\n const node = this.resolveCaretAnchor(nativeRange)\n if (!node) {\n this.positionChangeEvent.next(null)\n return\n }\n\n nativeRange = this.normalizeCollapsedRange(nativeRange)\n this.caret.style.display = nativeRange.collapsed ? 'block' : 'none'\n if (!nativeRange.collapsed) {\n return\n }\n\n const contentRect = getLayoutRectByRange(nativeRange)\n const nodeStyle = getComputedStyle(node)\n const {boxHeight, rectTop} = measureCaretBoxLayout(contentRect, nodeStyle)\n const maskRect = this.editorMask.getBoundingClientRect()\n const clipContext = this.ensureClipContext(node)\n const maskLeft = Math.floor(contentRect.left + contentRect.width / 2 - maskRect.left)\n const maskTop = Math.floor(rectTop - maskRect.top)\n const initialRotate = Math.round(Math.atan2(contentRect.width, contentRect.height) * 180 / Math.PI)\n const rotate = measureInlineCaretRotate(node, initialRotate, nodeStyle.writingMode)\n\n this.applyCaretElementLayout(maskLeft, maskTop, boxHeight, nodeStyle.fontSize, rotate)\n\n const presentation = computeCaretPresentation({\n anchor: node,\n maskRect,\n clipAncestors: clipContext.clipAncestors,\n maskLeft,\n maskTop,\n boxHeight,\n rectTop,\n contentRect,\n fontSize: nodeStyle.fontSize,\n color: nodeStyle.color,\n measureElementRect: () => this.elementRef.getBoundingClientRect(),\n })\n\n this.applyCaretPresentation(presentation)\n this.emitCaretPresentation(presentation)\n this.scrollCaretIntoViewIfNeeded(presentation.layoutElRect, clipContext)\n }\n\n private resolveCaretAnchor(nativeRange: Range): HTMLElement | null {\n const startContainer = nativeRange.startContainer\n const node = (startContainer.nodeType === Node.ELEMENT_NODE ?\n startContainer :\n startContainer.parentNode) as HTMLElement\n return node?.nodeType === Node.ELEMENT_NODE ? node : null\n }\n\n private normalizeCollapsedRange(nativeRange: Range): Range {\n const compositionNode = this.domRenderer.compositionNode\n if (!compositionNode) {\n return nativeRange\n }\n const range = nativeRange.cloneRange()\n range.selectNodeContents(compositionNode)\n range.collapse()\n return range\n }\n\n private applyCaretElementLayout(\n maskLeft: number,\n maskTop: number,\n boxHeight: number,\n fontSize: string,\n rotate: number,\n ) {\n Object.assign(this.elementRef.style, {\n left: maskLeft + 'px',\n top: maskTop + 'px',\n height: boxHeight + 'px',\n lineHeight: boxHeight + 'px',\n fontSize,\n transform: `rotate(${rotate}deg)`,\n })\n }\n\n private applyCaretPresentation(presentation: CaretPresentation) {\n this.caretClippedOut = presentation.outOfView\n if (presentation.outOfView) {\n this.elementRef.style.clipPath = 'none'\n this.elementRef.style.visibility = 'hidden'\n this.caret.style.visibility = 'hidden'\n } else {\n this.elementRef.style.clipPath = presentation.clipPath\n this.elementRef.style.visibility = ''\n this.caret.style.visibility = this._display ? 'visible' : 'hidden'\n }\n this.caret.style.backgroundColor = presentation.caretColor\n }\n\n private emitCaretPresentation(presentation: CaretPresentation) {\n this.styleChangeEvent.next(presentation.style)\n this.positionChangeEvent.next(presentation.position)\n }\n\n private scrollCaretIntoViewIfNeeded(layoutElRect: Rect, clipContext: OverflowClipContext) {\n if (!this.changeFromSelf) {\n return\n }\n this.changeFromSelf = false\n const limit = this.getLimit()\n\n // 从外到内逐层处理,每滚动一层后重新获取光标位置再处理内层\n for (const scrollContainer of [...clipContext.scrollContainers].reverse()) {\n const doc = scrollContainer.ownerDocument ?? document\n const isDoc = scrollContainer === doc.documentElement\n const scrollRect = isDoc\n ? {top: 0, bottom: doc.documentElement.clientHeight}\n : scrollContainer.getBoundingClientRect()\n\n const visibleTop = Math.max(limit.top, scrollRect.top)\n const visibleBottom = Math.min(limit.bottom, scrollRect.bottom)\n const caretBottom = layoutElRect.top + layoutElRect.height\n\n if (layoutElRect.top >= visibleTop && caretBottom <= visibleBottom) {\n continue // 光标已在当前容器可视区域内,无需滚动\n }\n\n if (layoutElRect.top < visibleTop) {\n scrollContainer.scrollTop -= visibleTop - layoutElRect.top\n } else if (caretBottom > visibleBottom) {\n scrollContainer.scrollTop += caretBottom - visibleBottom\n }\n\n layoutElRect = this.elementRef.getBoundingClientRect()\n }\n }\n}\n\n\n/**\n * Textbus PC 端输入实现\n */\n@Injectable()\nexport class MagicInput extends Input {\n composition = false\n onReady: Promise<void>\n caret: ExperimentalCaret\n\n set disabled(b: boolean) {\n this._disabled = b\n if (b && this.textarea) {\n this.textarea.disabled = b\n }\n }\n\n get disabled() {\n return this._disabled\n }\n\n private isSafari = isSafari()\n private isFirefox = isFirefox()\n private isMac = isMac()\n private isWindows = isWindows()\n private _disabled = false\n private container = this.createEditableFrame()\n\n private subscription = new Subscription()\n private doc!: Document\n\n private textarea: HTMLTextAreaElement | null = null\n\n private isFocus = false\n private nativeFocus = false\n\n private ignoreComposition = false // 有 bug 版本搜狗拼音\n\n constructor(private domAdapter: DomAdapter,\n private parser: Parser,\n private keyboard: Keyboard,\n private commander: Commander,\n private selection: Selection,\n private controller: Controller,\n private scheduler: Scheduler,\n private textbus: Textbus) {\n super()\n this.caret = new ExperimentalCaret(this.domAdapter, this.scheduler, this.textbus.get(VIEW_MASK))\n this.onReady = new Promise<void>(resolve => {\n this.subscription.add(\n fromEvent(this.container, 'load').subscribe(() => {\n const doc = this.container.contentDocument!\n doc.open()\n doc.write(iframeHTML)\n doc.close()\n this.doc = doc\n this.init()\n resolve()\n }),\n controller.onReadonlyStateChange.subscribe(() => {\n if (controller.readonly) {\n this.blur()\n }\n })\n )\n })\n\n this.caret.elementRef.prepend(this.container)\n }\n\n focus(range: Range, restart: boolean) {\n if (!this.disabled) {\n this.caret.show(range, restart)\n }\n if (this.controller.readonly) {\n return\n }\n if (!this.isFocus) {\n this.textarea?.focus()\n setTimeout(() => {\n if (!this.nativeFocus && this.isFocus) {\n this.reInit()\n }\n })\n }\n this.isFocus = true\n }\n\n blur() {\n this.caret.hide()\n this.textarea?.blur()\n this.isFocus = false\n }\n\n destroy() {\n this.caret.destroy()\n this.subscription.unsubscribe()\n }\n\n private reInit(delay = false) {\n this.subscription.unsubscribe()\n this.textarea?.parentNode?.removeChild(this.textarea)\n this.subscription = new Subscription()\n this.init()\n if (delay) {\n setTimeout(() => {\n this.textarea?.focus()\n })\n } else {\n this.textarea?.focus()\n }\n }\n\n private init() {\n const doc = this.doc\n const contentBody = doc.body\n const textarea = doc.createElement('textarea')\n textarea.disabled = this.disabled\n contentBody.appendChild(textarea)\n this.textarea = textarea\n this.subscription.add(\n fromEvent(textarea, 'blur').subscribe(() => {\n // if (this.isFocus) {\n // this.isFocus = false\n // this.reInit(true)\n // }\n this.isFocus = false\n this.nativeFocus = false\n this.caret.hide()\n if (this.domAdapter.composition) {\n const slot = this.domAdapter.composition.slot\n this.domAdapter.composition = null\n this.domAdapter.compositionNode = null\n slot.__changeMarker__.forceMarkDirtied()\n }\n }),\n fromEvent(textarea, 'focus').subscribe(() => {\n this.nativeFocus = true\n }),\n this.caret.onStyleChange.subscribe(style => {\n Object.assign(textarea.style, style)\n })\n )\n this.handleInput(textarea)\n this.handleShortcut(textarea)\n this.handleDefaultActions(textarea)\n }\n\n private handleDefaultActions(textarea: HTMLTextAreaElement) {\n this.subscription.add(\n fromEvent<ClipboardEvent>(isFirefox() ? textarea : document, 'copy').subscribe(ev => {\n this.copyHandler(ev)\n }),\n fromEvent<ClipboardEvent>(textarea, 'paste').subscribe(ev => {\n this.pasteHandler(ev)\n })\n )\n }\n\n copyHandler(ev: ClipboardEvent) {\n const selection = this.selection\n if (!selection.isSelected) {\n return\n }\n if (selection.startSlot === selection.endSlot && selection.endOffset! - selection.startOffset! === 1) {\n const content = selection.startSlot!.getContentAtIndex(selection.startOffset!)\n if (typeof content === 'object') {\n const clipboardData = ev.clipboardData!\n const nativeSelection = document.getSelection()!\n const range = nativeSelection.getRangeAt(0)\n const div = document.createElement('div')\n const fragment = range.cloneContents()\n div.append(fragment)\n clipboardData.setData('text/html', div.innerHTML)\n clipboardData.setData('text', div.innerText)\n ev.preventDefault()\n }\n }\n }\n\n pasteHandler(ev: ClipboardEvent) {\n const text = ev.clipboardData!.getData('Text')\n\n const types = Array.from(ev.clipboardData!.types || [])\n const files = Array.from(ev.clipboardData!.files)\n if (types.every(type => type === 'Files') && files.length) {\n Promise.all(files.filter(i => {\n return /image/i.test(i.type)\n }).map(item => {\n const reader = new FileReader()\n return new Promise(resolve => {\n reader.onload = (event) => {\n resolve(event.target!.result)\n }\n reader.readAsDataURL(item)\n })\n })).then(urls => {\n const html = urls.map(i => {\n return `<img src=${i}>`\n }).join('')\n this.paste(html, text)\n })\n ev.preventDefault()\n return\n }\n\n const div = this.doc.createElement('div')\n div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0'\n div.contentEditable = 'true'\n this.doc.body.appendChild(div)\n div.focus()\n setTimeout(() => {\n this.doc.body.removeChild(div)\n div.style.cssText = ''\n this.paste(div, text)\n })\n }\n\n private paste(dom: HTMLElement | string, text: string) {\n const slot = this.parser.parse(dom, new Slot([\n ContentType.BlockComponent,\n ContentType.InlineComponent,\n ContentType.Text\n ]))\n\n this.commander.paste(slot, text)\n }\n\n private handleShortcut(textarea: HTMLTextAreaElement) {\n let isWriting = false\n let isIgnore = false\n this.subscription.add(\n fromEvent(textarea, 'compositionstart').subscribe(() => {\n isWriting = true\n }),\n fromEvent(textarea, 'compositionend').subscribe(() => {\n isWriting = false\n }),\n fromEvent<InputEvent>(textarea, 'beforeinput').subscribe(ev => {\n this.ignoreComposition = false\n if (this.isSafari) {\n if (ev.inputType === 'insertFromComposition') {\n isIgnore = true\n }\n }\n }),\n fromEvent<KeyboardEvent>(textarea, 'keydown').pipe(filter(() => {\n if (this.isSafari && isIgnore) {\n isIgnore = false\n return false\n }\n return !isWriting // || !this.textarea.value\n })).subscribe(ev => {\n this.ignoreComposition = false\n let key = ev.key\n const keys = ')!@#$%^Z&*('\n const b = key === 'Process' && /Digit\\d/.test(ev.code) && ev.shiftKey\n if (b) {\n // 大小写锁定为大写 + 全角 + shift + 数字键,还存在问题\n key = keys.charAt(+ev.code.substring(5))\n ev.preventDefault()\n }\n this.caret.changeFromSelf = true\n const is = this.keyboard.execShortcut({\n key: key,\n altKey: ev.altKey,\n shiftKey: ev.shiftKey,\n modKey: this.isMac ? ev.metaKey : ev.ctrlKey,\n agent: {\n key: ev.key,\n code: ev.code,\n keyCode: ev.keyCode,\n }\n })\n if (is) {\n this.ignoreComposition = true\n ev.preventDefault()\n } else {\n this.caret.changeFromSelf = false\n }\n })\n )\n }\n\n private handleInput(textarea: HTMLTextAreaElement) {\n let startIndex = 0\n this.subscription.add(\n fromEvent<CompositionEvent>(textarea, 'compositionstart').pipe(filter(() => {\n return !this.ignoreComposition\n })).subscribe(() => {\n if (!this.selection.isCollapsed) {\n this.caret.changeFromSelf = true\n this.commander.delete()\n }\n this.composition = true\n startIndex = this.selection.startOffset!\n const startSlot = this.selection.startSlot!\n const event = new Event<Slot, CompositionStartEventData>(startSlot, {\n index: startIndex\n })\n invokeListener(startSlot.parent!, 'onCompositionStart', event)\n }),\n fromEvent<CompositionEvent>(textarea, 'compositionupdate').pipe(filter(() => {\n return !this.ignoreComposition\n })).pipe(distinctUntilChanged((prev, next) => {\n return prev.data !== next.data\n })).subscribe(ev => {\n if (ev.data === ' ') {\n // 处理搜狗五笔不符合 composition 事件预期,会意外跳光标的问题\n return\n }\n const startSlot = this.selection.startSlot!\n this.domAdapter.composition = {\n slot: startSlot,\n text: ev.data,\n offset: ev.data.length,\n index: startIndex\n }\n\n this.caret.changeFromSelf = true\n this.caret.refresh()\n const event = new Event(startSlot, {\n index: startIndex,\n data: ev.data\n })\n\n invokeListener(startSlot.parent!, 'onCompositionUpdate', event)\n startSlot.__changeMarker__.forceMarkDirtied()\n })\n )\n let isCompositionEnd = false\n this.subscription.add(\n merge(\n fromEvent<InputEvent>(textarea, 'beforeinput').pipe(\n filter(ev => {\n ev.preventDefault()\n if (this.isFirefox && ev.inputType === 'insertFromPaste') {\n return false\n }\n if (this.isSafari) {\n isCompositionEnd = ev.inputType === 'insertFromComposition'\n return ev.inputType === 'insertText' || ev.inputType === 'insertFromComposition'\n }\n return !ev.isComposing && !!ev.data\n }),\n map(ev => {\n return ev.data as string\n })\n ),\n this.isSafari ? new Observable<string>() : fromEvent<CompositionEvent>(textarea, 'compositionend')\n .pipe(filter(() => {\n return !this.ignoreComposition\n })).pipe(\n map(ev => {\n isCompositionEnd = true\n ev.preventDefault()\n textarea.value = ''\n return ev.data\n })\n )\n ).subscribe(text => {\n this.composition = false\n this.domAdapter.composition = null\n if (text) {\n this.caret.changeFromSelf = true\n this.commander.write(text)\n } else {\n this.selection.startSlot?.__changeMarker__.forceMarkDirtied()\n }\n if (isCompositionEnd) {\n const startSlot = this.selection.startSlot\n if (startSlot) {\n const event = new Event<Slot>(startSlot, null)\n invokeListener(startSlot.parent!, 'onCompositionEnd', event)\n }\n }\n isCompositionEnd = false\n })\n )\n }\n\n private createEditableFrame() {\n return createElement('iframe', {\n attrs: {\n scrolling: 'no'\n },\n styles: {\n border: 'none',\n width: '100%',\n display: 'block',\n height: '100%',\n position: 'absolute',\n left: 0,\n bottom: this.isWindows ? '3px' : '0'\n }\n }) as HTMLIFrameElement\n }\n}\n","import { Injectable, Optional } from '@viewfly/core'\nimport { Selection, AbstractSelection, Scheduler, Textbus, SelectionPaths } from '@textbus/core'\nimport { fromEvent, Subject, Subscription } from '@tanbo/stream'\n\nimport { VIEW_CONTAINER } from './injection-tokens'\nimport { SelectionBridge } from './selection-bridge'\nimport { createElement, getLayoutRectByRange, Rect } from './_utils/uikit'\n\nexport interface SelectionRect extends Rect {\n color: string\n username: string\n}\n\nexport interface RemoteSelectionCursor {\n cursor: HTMLElement\n anchor: HTMLElement\n userTip: HTMLElement\n}\n\n/**\n * 远程光标绘制范围计算代理类,可用于定制特定场景下的远程选区绘制,如表格有选区,不会遵守常见的文档流形式\n */\nexport abstract class CollaborateSelectionAwarenessDelegate {\n abstract getRects(abstractSelection: AbstractSelection,\n nativeRange: Range,\n selectionCursor: UserSelectionCursor): false | Rect[]\n}\n\n/**\n * 协作用户虚拟光标信息\n */\nexport interface UserSelectionCursor {\n username: string\n color: string\n selection: SelectionPaths\n data?: any\n}\n\n/**\n * 协作光标绘制类\n */\n@Injectable()\nexport class CollaborateCursor {\n private host = createElement('div', {\n styles: {\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n zIndex: 1\n }\n })\n private canvasContainer = createElement('div', {\n styles: {\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n overflow: 'hidden'\n }\n })\n private canvas = createElement('canvas', {\n styles: {\n position: 'absolute',\n opacity: 0.5,\n left: 0,\n top: 0,\n width: '100%',\n height: document.documentElement.clientHeight + 'px',\n pointerEvents: 'none',\n }\n }) as HTMLCanvasElement\n private context = this.canvas.getContext('2d')!\n private tooltips = createElement('div', {\n styles: {\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n fontSize: '12px',\n zIndex: 10\n }\n })\n\n private onRectsChange = new Subject<SelectionRect[]>()\n\n private subscription = new Subscription()\n private selectionCursors: UserSelectionCursor[] = []\n private container: HTMLElement\n private ratio = window.devicePixelRatio || 1\n\n constructor(textbus: Textbus,\n private nativeSelection: SelectionBridge,\n private scheduler: Scheduler,\n private selection: Selection,\n @Optional() private awarenessDelegate?: CollaborateSelectionAwarenessDelegate) {\n this.container = textbus.get(VIEW_CONTAINER)\n this.canvasContainer.append(this.canvas)\n this.host.append(this.canvasContainer, this.tooltips)\n this.container.append(this.host)\n this.subscription.add(this.onRectsChange.subscribe(rects => {\n for (const rect of rects) {\n this.context.fillStyle = rect.color\n this.context.beginPath()\n this.context.rect(rect.left, rect.top, rect.width, rect.height)\n this.context.fill()\n this.context.closePath()\n }\n }), fromEvent(window, 'resize').subscribe(() => {\n this.canvas.style.height = document.documentElement.clientHeight + 'px'\n this.refresh()\n }), this.scheduler.onDocChanged.subscribe(() => {\n this.refresh()\n }))\n }\n\n /**\n * 刷新协作光标,由于 Textbus 只会绘制可视区域的光标,当可视区域发生变化时,需要重新绘制\n */\n refresh() {\n this.draw(this.selectionCursors)\n }\n\n destroy() {\n this.subscription.unsubscribe()\n }\n\n /**\n * 根据远程用户光标位置,绘制协作光标\n * @param paths\n */\n draw(paths: UserSelectionCursor[]) {\n this.selectionCursors = paths\n const containerRect = this.container.getBoundingClientRect()\n this.canvas.style.top = containerRect.top * -1 + 'px'\n this.canvas.width = this.canvas.offsetWidth * this.ratio\n this.canvas.height = this.canvas.offsetHeight * this.ratio\n this.context.scale(this.ratio, this.ratio)\n this.context.clearRect(0, 0, this.canvas.width, this.canvas.height)\n\n const users: SelectionRect[] = []\n\n paths.filter(i => {\n return i.selection.anchor.length && i.selection.focus.length\n }).forEach(item => {\n const anchorPaths = [...item.selection.anchor]\n const focusPaths = [...item.selection.focus]\n const anchorOffset = anchorPaths.pop()!\n const anchorSlot = this.selection.findSlotByPaths(anchorPaths)\n const focusOffset = focusPaths.pop()!\n const focusSlot = this.selection.findSlotByPaths(focusPaths)\n if (!anchorSlot || !focusSlot) {\n return\n }\n\n const { focus, anchor } = this.nativeSelection.getPositionByRange({\n focusOffset,\n anchorOffset,\n focusSlot,\n anchorSlot\n })\n if (!focus || !anchor) {\n return\n }\n const nativeRange = document.createRange()\n try {\n nativeRange.setStart(anchor.node, anchor.offset)\n nativeRange.setEnd(focus.node, focus.offset)\n } catch (e) {\n return\n }\n if ((anchor.node !== focus.node || anchor.offset !== focus.offset) && nativeRange.collapsed) {\n nativeRange.setStart(focus.node, focus.offset)\n nativeRange.setEnd(anchor.node, anchor.offset)\n }\n\n let rects: Rect[] | DOMRectList | false = false\n if (this.awarenessDelegate) {\n rects = this.awarenessDelegate.getRects({\n focusOffset,\n anchorOffset,\n focusSlot,\n anchorSlot\n }, nativeRange, item)\n }\n if (!rects) {\n rects = nativeRange.getClientRects()\n }\n const selectionRects: SelectionRect[] = []\n for (let i = rects.length - 1; i >= 0; i--) {\n const rect = rects[i]\n selectionRects.push({\n color: item.color,\n username: item.username,\n left: rect.left - containerRect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n })\n }\n this.onRectsChange.next(selectionRects)\n\n const cursorRange = nativeRange.cloneRange()\n cursorRange.setStart(focus.node, focus.offset)\n cursorRange.collapse(true)\n\n const cursorRect = getLayoutRectByRange(cursorRange)\n\n const rect: SelectionRect = {\n username: item.username,\n color: item.color,\n left: cursorRect.left - containerRect.left,\n top: cursorRect.top - containerRect.top,\n width: 1,\n height: cursorRect.height\n }\n if (rect.left < 0 || rect.top < 0 || rect.left > containerRect.width) {\n return\n }\n users.push(rect)\n })\n this.drawUserCursor(users)\n }\n\n protected drawUserCursor(rects: SelectionRect[]) {\n for (let i = 0; i < rects.length; i++) {\n const rect = rects[i]\n const { cursor, userTip, anchor } = this.getUserCursor(i)\n Object.assign(cursor.style, {\n left: rect.left + 'px',\n top: rect.top + 'px',\n width: rect.width + 'px',\n height: rect.height + 'px',\n background: rect.color,\n display: 'block'\n })\n anchor.style.background = rect.color\n userTip.innerText = rect.username\n userTip.style.background = rect.color\n }\n\n for (let i = rects.length; i < this.tooltips.children.length; i++) {\n this.tooltips.removeChild(this.tooltips.children[i])\n }\n }\n\n private getUserCursor(index: number): RemoteSelectionCursor {\n let child: HTMLElement = this.tooltips.children[index] as HTMLElement\n if (child) {\n const anchor = child.children[0] as HTMLElement\n return {\n cursor: child,\n anchor,\n userTip: anchor.children[0] as HTMLElement\n }\n }\n const userTip = createElement('span', {\n styles: {\n position: 'absolute',\n left: '50%',\n transform: 'translateX(-50%)',\n marginBottom: '2px',\n bottom: '100%',\n whiteSpace: 'nowrap',\n color: '#fff',\n boxShadow: '0 1px 2px rgba(0,0,0,.1)',\n opacity: 0.8,\n borderRadius: '3px',\n padding: '3px 5px',\n pointerEvents: 'none',\n }\n })\n\n const anchor = createElement('span', {\n styles: {\n position: 'absolute',\n top: '-2px',\n left: '-2px',\n width: '5px',\n height: '5px',\n borderRadius: '50%',\n pointerEvents: 'auto',\n pointer: 'cursor',\n },\n children: [userTip]\n })\n child = createElement('span', {\n styles: {\n position: 'absolute',\n },\n children: [\n anchor\n ]\n })\n this.tooltips.append(child)\n return {\n cursor: child,\n anchor,\n userTip\n }\n }\n}\n","import { Injectable } from '@viewfly/core'\nimport {\n distinctUntilChanged,\n filter,\n fromEvent,\n Observable,\n Subject,\n Subscription,\n} from '@tanbo/stream'\nimport {\n Commander,\n CompositionStartEventData,\n CompositionUpdateEventData,\n ContentType,\n Controller,\n Event,\n invokeListener,\n Keyboard,\n Selection,\n Slot,\n Textbus\n} from '@textbus/core'\n\nimport { Caret, CaretPosition, caretPositionEqual, Input } from './types'\nimport { VIEW_DOCUMENT } from './injection-tokens'\nimport { isSafari, isMac, isFirefox } from './_utils/env'\nimport { Parser } from './parser'\nimport { getLayoutRectByRange } from './_utils/uikit'\nimport { DomAdapter } from './dom-adapter'\n\n/**\n * 轻量级 DOM 文本变化记录器,仅在 composition 期间激活。\n * 记录 composition 期间 DOM 中新增/修改的文本节点,在 compositionend 时从 DOM 读取最终文本。\n * 写入模型后清理浏览器创建的新文本节点,避免残留在文档中。\n */\nclass CompositionRecorder {\n private observer: MutationObserver | null = null\n private nodeOldValues = new Map<Text, string | null>()\n\n start(target: Node) {\n this.nodeOldValues.clear()\n this.observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (m.type === 'childList') {\n for (const node of Array.from(m.addedNodes)) {\n if (node.nodeType === Node.TEXT_NODE && !this.nodeOldValues.has(node as Text)) {\n this.nodeOldValues.set(node as Text, null)\n }\n }\n } else if (m.type === 'characterData') {\n const target = m.target as Text\n if (!this.nodeOldValues.has(target)) {\n this.nodeOldValues.set(target, m.oldValue)\n }\n }\n }\n })\n this.observer.observe(target, {\n childList: true,\n subtree: true,\n characterData: true,\n characterDataOldValue: true,\n })\n }\n\n readText(): string {\n let text = ''\n for (const [node, oldValue] of this.nodeOldValues) {\n if (!node.isConnected) continue\n const current = node.textContent || ''\n if (!current) continue\n if (oldValue === null) {\n text += current\n } else {\n text += this.diffText(oldValue, current)\n }\n }\n return text\n }\n\n /** 移除 composition 期间浏览器创建的文本节点(焦点处),光标位置不可能被协作触及 */\n cleanup(committedText: string, focusNode: Node | null) {\n if (focusNode instanceof Text &&\n focusNode.isConnected &&\n focusNode.textContent === committedText &&\n this.nodeOldValues.has(focusNode as Text) &&\n focusNode.parentNode) {\n focusNode.parentNode.removeChild(focusNode)\n }\n this.nodeOldValues.clear()\n }\n\n stop() {\n this.observer?.disconnect()\n this.observer = null\n }\n\n private diffText(oldStr: string, newStr: string): string {\n let start = 0\n while (start < oldStr.length && start < newStr.length && oldStr[start] === newStr[start]) {\n start++\n }\n let oldEnd = oldStr.length - 1\n let newEnd = newStr.length - 1\n while (oldEnd >= start && newEnd >= start && oldStr[oldEnd] === newStr[newEnd]) {\n oldEnd--\n newEnd--\n }\n return newStr.slice(start, newEnd + 1)\n }\n}\n\nclass NativeCaret implements Caret {\n onPositionChange: Observable<CaretPosition | null>\n\n set nativeRange(range: Range | null) {\n this._nativeRange = range\n if (range) {\n const r = range.cloneRange()\n r.collapse(true)\n const rect = getLayoutRectByRange(r)\n this.positionChangeEvent.next({\n left: rect.left,\n top: rect.top,\n height: rect.height\n })\n } else {\n this.positionChangeEvent.next(null)\n }\n }\n\n get nativeRange() {\n return this._nativeRange\n }\n\n get rect() {\n if (this.nativeRange) {\n const range = this.nativeRange.cloneRange()\n range.collapse(true)\n return getLayoutRectByRange(range)\n }\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n }\n }\n\n private _nativeRange: Range | null = null\n private subs: Subscription[] = []\n\n private positionChangeEvent = new Subject<CaretPosition | null>()\n\n constructor() {\n this.onPositionChange = this.positionChangeEvent.pipe(distinctUntilChanged(caretPositionEqual))\n }\n\n refresh() {\n //\n }\n\n destroy() {\n this.subs.forEach(i => i.unsubscribe())\n this.subs = []\n }\n}\n\n@Injectable()\nexport class NativeInput extends Input {\n caret = new NativeCaret()\n\n composition = false\n // compositionState: CompositionState | null = null\n\n onReady = Promise.resolve()\n\n set disabled(b: boolean) {\n this._disabled = b\n if (this.controller.readonly) {\n this.documentView.contentEditable = 'false'\n return\n }\n this.documentView.contentEditable = b ? 'false' : 'true'\n }\n\n get disabled() {\n return this._disabled\n }\n\n private _disabled = false\n private documentView: HTMLElement\n private nativeSelection = document.getSelection()!\n\n private subscription = new Subscription()\n private nativeRange: Range | null = null\n\n private isSafari = isSafari()\n private isMac = isMac()\n private compositionEndedAt = 0\n\n constructor(textbus: Textbus,\n private parser: Parser,\n private selection: Selection,\n private keyboard: Keyboard,\n private domAdapter: DomAdapter,\n private commander: Commander,\n private controller: Controller) {\n super()\n this.documentView = textbus.get(VIEW_DOCUMENT)\n if (!controller.readonly) {\n this.documentView.contentEditable = 'true'\n }\n this.subscription.add(\n controller.onReadonlyStateChange.subscribe(() => {\n this.documentView.contentEditable = controller.readonly ? 'false' : 'true'\n })\n )\n this.handleShortcut(this.documentView)\n this.handleInput(this.documentView)\n this.handleDefaultActions(this.documentView)\n }\n\n focus(nativeRange: Range) {\n if (this.controller.readonly) {\n return\n }\n this.caret.nativeRange = nativeRange\n this.nativeRange = nativeRange\n }\n\n blur() {\n if (this.nativeRange && this.nativeSelection.rangeCount > 0) {\n const current = this.nativeSelection.getRangeAt(0)\n if (current === this.nativeRange) {\n this.nativeSelection.removeAllRanges()\n this.nativeRange = null\n return\n }\n }\n }\n\n destroy() {\n this.caret.destroy()\n this.subscription.unsubscribe()\n }\n\n private handleDefaultActions(textarea: HTMLElement) {\n this.subscription.add(\n fromEvent<ClipboardEvent>(isFirefox() ? textarea : document, 'copy').subscribe(ev => {\n this.copyHandler(ev)\n }),\n fromEvent<ClipboardEvent>(textarea, 'paste').subscribe(ev => {\n this.pasteHandler(ev)\n })\n )\n }\n\n copyHandler(ev: ClipboardEvent) {\n const selection = this.selection\n if (!selection.isSelected) {\n return\n }\n if (selection.startSlot === selection.endSlot && selection.endOffset! - selection.startOffset! === 1) {\n const content = selection.startSlot!.getContentAtIndex(selection.startOffset!)\n if (typeof content === 'object') {\n const clipboardData = ev.clipboardData!\n const nativeSelection = document.getSelection()!\n const range = nativeSelection.getRangeAt(0)\n const div = document.createElement('div')\n const fragment = range.cloneContents()\n div.append(fragment)\n clipboardData.setData('text/html', div.innerHTML)\n clipboardData.setData('text', div.innerText)\n ev.preventDefault()\n }\n }\n }\n\n pasteHandler(ev: ClipboardEvent) {\n const text = ev.clipboardData!.getData('Text')\n\n const types = Array.from(ev.clipboardData!.types || [])\n const files = Array.from(ev.clipboardData!.files)\n if (types.every(type => type === 'Files') && files.length) {\n Promise.all(files.filter(i => {\n return /image/i.test(i.type)\n }).map(item => {\n const reader = new FileReader()\n return new Promise(resolve => {\n reader.onload = (event) => {\n resolve(event.target!.result)\n }\n reader.readAsDataURL(item)\n })\n })).then(urls => {\n const html = urls.map(i => {\n return `<img src=${i}>`\n }).join('')\n this.paste(html, text)\n })\n ev.preventDefault()\n return\n }\n\n const div = document.createElement('div')\n div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0'\n div.contentEditable = 'true'\n document.body.appendChild(div)\n div.focus()\n setTimeout(() => {\n document.body.removeChild(div)\n div.style.cssText = ''\n this.paste(div, text)\n })\n }\n\n private paste(dom: HTMLElement | string, text: string) {\n const slot = this.parser.parse(dom, new Slot([\n ContentType.BlockComponent,\n ContentType.InlineComponent,\n ContentType.Text\n ]))\n\n this.commander.paste(slot, text)\n }\n\n private handleShortcut(input: HTMLElement) {\n this.subscription.add(\n fromEvent<KeyboardEvent>(input, 'keydown').pipe(filter(() => {\n // Safari: IME 确认键(Enter)会在 compositionend 后紧接着触发 keydown\n // 用时间戳窗口检测并忽略\n if (this.isSafari && this.compositionEndedAt > 0 &&\n Date.now() - this.compositionEndedAt < 500) {\n this.compositionEndedAt = 0\n return false\n }\n return !this.composition\n })).subscribe(ev => {\n let key = ev.key\n const keys = ')!@#$%^Z&*('\n const b = key === 'Process' && /Digit\\d/.test(ev.code) && ev.shiftKey\n if (b) {\n key = keys.charAt(+ev.code.substring(5))\n ev.preventDefault()\n }\n const is = this.keyboard.execShortcut({\n key: key,\n altKey: ev.altKey,\n shiftKey: ev.shiftKey,\n modKey: this.isMac ? ev.metaKey : ev.ctrlKey,\n agent: {\n key: ev.key,\n keyCode: ev.keyCode,\n code: ev.code\n }\n })\n if (is) {\n ev.preventDefault()\n }\n })\n )\n }\n\n private handleInput(input: HTMLElement) {\n const recorder = new CompositionRecorder()\n let startIndex = 0\n\n this.subscription.add(\n // ===== Composition 事件:纯开关,不读 ev.data 做模型决策 =====\n fromEvent(input, 'compositionstart').subscribe(() => {\n this.composition = true\n recorder.start(input)\n startIndex = this.selection.startOffset!\n const startSlot = this.selection.startSlot!\n const event = new Event<Slot, CompositionStartEventData>(startSlot, {\n index: startIndex\n })\n invokeListener(startSlot.parent!, 'onCompositionStart', event)\n }),\n\n fromEvent<CompositionEvent>(input, 'compositionupdate').subscribe(ev => {\n const startSlot = this.selection.startSlot\n if (startSlot) {\n invokeListener(startSlot.parent!, 'onCompositionUpdate',\n new Event(startSlot, {\n index: startIndex,\n data: ev.data\n }))\n }\n }),\n\n fromEvent(input, 'compositionend').subscribe(() => {\n if (!this.composition) return\n this.composition = false\n this.compositionEndedAt = Date.now()\n\n // Safari: WebKit 在 compositionend 之后才更新 DOM,通过 microtask 延迟读取\n if (this.isSafari) {\n queueMicrotask(() => this.syncCompositionText(recorder))\n } else {\n this.syncCompositionText(recorder)\n }\n }),\n\n // ===== beforeinput:仅处理非 IME 输入 =====\n fromEvent<InputEvent>(input, 'beforeinput').subscribe(ev => {\n if (ev.isComposing || this.composition) {\n return\n }\n\n ev.preventDefault()\n\n switch (ev.inputType) {\n case 'insertText':\n if (ev.data) {\n this.commander.write(ev.data)\n }\n break\n case 'deleteContentBackward':\n this.commander.delete(true)\n break\n case 'deleteContentForward':\n this.commander.delete()\n break\n case 'insertReplacementText': {\n const range = ev.getTargetRanges()[0]\n if (range) {\n const location = this.domAdapter.getLocationByNativeNode(range.startContainer)\n if (location) {\n const startSlot = this.selection.startSlot!\n this.selection.setBaseAndExtent(\n startSlot,\n location.startIndex + range.startOffset,\n startSlot,\n location.startIndex + range.endOffset)\n this.commander.delete()\n }\n }\n const text = ev.dataTransfer?.getData('text') || ev.data\n if (text) {\n this.commander.write(text)\n }\n break\n }\n }\n })\n )\n }\n\n private syncCompositionText(recorder: CompositionRecorder) {\n const text = recorder.readText()\n recorder.stop()\n\n if (text) {\n // 先清理 composition 期间浏览器创建的节点,确保写入模型时 DOM 是干净的\n recorder.cleanup(text, this.nativeSelection.focusNode)\n this.commander.write(text)\n }\n\n const startSlot = this.selection.startSlot\n if (startSlot) {\n invokeListener(startSlot.parent!, 'onCompositionEnd', new Event<Slot>(startSlot, null))\n }\n }\n}\n","import {\n ComponentConstructor,\n Component,\n ComponentLiteral,\n FocusManager,\n makeError,\n Module,\n NativeSelectionBridge,\n Registry,\n Textbus,\n Adapter,\n} from '@textbus/core'\nimport { Provider } from '@viewfly/core'\nimport { distinctUntilChanged, map, Subject } from '@tanbo/stream'\n\nimport { AttributeLoader, ComponentLoader, FormatLoader, Parser } from './parser'\nimport { EDITOR_OPTIONS, VIEW_CONTAINER, VIEW_DOCUMENT, VIEW_MASK } from './injection-tokens'\nimport { SelectionBridge } from './selection-bridge'\nimport { Input } from './types'\nimport { MagicInput } from './magic-input'\nimport { CollaborateCursor } from './collaborate-cursor'\nimport { createElement } from './_utils/uikit'\nimport { NativeInput } from './native-input'\nimport { DomAdapter } from './dom-adapter'\n\nconst browserErrorFn = makeError('BrowserModule')\n\n/**\n * Textbus PC 端配置接口\n */\nexport interface ViewOptions {\n /** 跨平台适配器 */\n adapter: DomAdapter<any, any>\n\n /** 编辑器根节点 */\n renderTo(): HTMLElement\n\n /** 自动获取焦点 */\n autoFocus?: boolean\n /** 编辑区最小高度 */\n minHeight?: string\n /** 组件加载器 */\n componentLoaders?: ComponentLoader[]\n /** 格式加载器 */\n formatLoaders?: FormatLoader<any>[]\n /** 属性加载器 */\n attributeLoaders?: AttributeLoader<any>[]\n /** 使用 contentEditable 作为编辑器控制可编辑范围 */\n useContentEditable?: boolean\n}\n\nexport class BrowserModule implements Module {\n providers: Provider[]\n\n private workbench!: HTMLElement\n\n constructor(public config: ViewOptions) {\n const { mask, wrapper } = BrowserModule.createLayout()\n wrapper.prepend(config.adapter.host)\n if (config.minHeight) {\n config.adapter.host.style.minHeight = config.minHeight\n }\n this.providers = [{\n provide: EDITOR_OPTIONS,\n useValue: config\n }, {\n provide: VIEW_CONTAINER,\n useValue: wrapper\n }, {\n provide: VIEW_DOCUMENT,\n useValue: config.adapter.host\n }, {\n provide: VIEW_MASK,\n useValue: mask\n }, {\n provide: NativeSelectionBridge,\n useExisting: SelectionBridge\n }, {\n provide: Input,\n useClass: config.useContentEditable ? NativeInput : MagicInput\n }, {\n provide: Adapter,\n useValue: config.adapter\n }, {\n provide: DomAdapter,\n useValue: config.adapter\n }, {\n provide: FocusManager,\n useFactory: (input: Input): FocusManager => {\n const focusEvent = new Subject<void>()\n const blurEvent = new Subject<void>()\n input.caret.onPositionChange.pipe(\n map(p => !!p),\n distinctUntilChanged()\n ).subscribe(b => {\n if (b) {\n focusEvent.next()\n } else {\n blurEvent.next()\n }\n })\n return {\n onFocus: focusEvent,\n onBlur: blurEvent\n }\n },\n deps: [Input]\n },\n Parser,\n SelectionBridge,\n CollaborateCursor\n ]\n\n this.workbench = wrapper\n }\n\n /**\n * 解析 HTML 并返回一个组件实例\n * @param html 要解析的 HTML\n * @param rootComponentLoader 文档根组件加载器\n * @param textbus\n */\n readDocumentByHTML(html: string, rootComponentLoader: ComponentLoader, textbus: Textbus): Component {\n const parser = textbus.get(Parser)\n const doc = parser.parseDoc(html, rootComponentLoader)\n if (doc instanceof Component) {\n return doc\n }\n throw browserErrorFn('rootComponentLoader must return a component instance.')\n }\n\n /**\n * 将组件数据解析到组件实例中\n * @param data 要解析的 JSON 数据\n * @param rootComponent 根组件\n * @param textbus\n */\n readDocumentByComponentLiteral(data: ComponentLiteral, rootComponent: ComponentConstructor, textbus: Textbus): Component {\n const registry = textbus.get(Registry)\n return registry.createComponentByFactory(data, rootComponent)\n }\n\n async setup(textbus: Textbus) {\n const host = this.config.renderTo()\n if (!(host instanceof HTMLElement)) {\n throw browserErrorFn('view container is not a HTMLElement')\n }\n\n host.append(this.workbench)\n await textbus.get(Input).onReady\n return () => {\n this.workbench.remove()\n }\n }\n\n onAfterStartup(textbus: Textbus) {\n if (this.config.autoFocus) {\n textbus.focus()\n }\n }\n\n onDestroy(textbus: Textbus) {\n textbus.get(Input).destroy()\n textbus.get(SelectionBridge).destroy()\n textbus.get(CollaborateCursor).destroy()\n }\n\n private static createLayout() {\n const mask = createElement('div', {\n attrs: {\n 'data-textbus-view': VIEW_MASK,\n },\n styles: {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n pointerEvents: 'none',\n // overflow: 'hidden'\n }\n })\n const maskWrapper = createElement('div', {\n styles: {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n margin: '0 -2px',\n zIndex: 1,\n pointerEvents: 'none',\n overflow: 'hidden'\n },\n children: [mask]\n })\n const wrapper = createElement('div', {\n attrs: {\n 'data-textbus-view': VIEW_CONTAINER,\n },\n styles: {\n display: 'flex',\n minHeight: '100%',\n position: 'relative',\n flexDirection: 'column'\n },\n children: [maskWrapper]\n })\n return {\n wrapper,\n mask\n }\n }\n}\n"],"names":["_array_like_to_array","OVERFLOW_CLIP_VALUES","Set","rectRight","r","left","width","rectBottom","top","height","isOverflowClipAxis","value","has","readOverflowClipAxes","style","overflow","overflowX","overflowY","clipX","clipY","getOverflowClipContext","anchor","extraRoot","clipAncestors","scrollContainers","node","nodeType","Node","ELEMENT_NODE","parentNode","_instanceof","Element","flags","getComputedStyle","push","element","add","ownerDocument","documentElement","doc","document","_to_consumable_array","firstScrollContainer","intersectRect","a","b","Math","max","right","min","bottom","rectContainsPoint","rect","x","y","intersectRectWithClipAncestor","ancestor","visible","el","border","getBoundingClientRect","clipLeft","clientLeft","clipRight","clientWidth","clipTop","clientTop","clipBottom","clientHeight","getVisibleRectInOverflowClipsFromAncestors","next","isCaretAnchorCssVisible","anchorEl","parentElement","isConnected","checkVisibility","checkOpacity","checkVisibilityCSS","CLIP_INSET_EPSILON","clipPathInsetFromVisibleRegion","elRect","measureCaretBoxLayout","contentRect","fontSize","lineHeight","isNaN","f","parseFloat","boxHeight","floor","rectTop","measureInlineCaretRotate","initialRotate","writingMode","rotate","hackEle","createElement","cssText","pointEle","append","p1","p2","atan2","PI","remove","computeCaretPresentation","options","maskRect","maskLeft","maskTop","color","measureElementRect","caretCenterX","caretCenterY","layoutElRect","visibleRect","inClipBounds","outOfView","clipPath","position","caretColor","tagName","classes","classList","attrs","Object","keys","forEach","key","setAttribute","props","styles","assign","children","filter","i","item","appendChild","on","addEventListener","getLayoutRectByRange","range","startContainer","startOffset","TEXT_NODE","Array","from","childNodes","indexOf","beforeNode","nodeName","toLowerCase","collapsed","range2","createRange","setStart","textContent","length","setEnd","offsetNode","isInsertBefore","lastChild","span","innerText","display","insertBefore","removeChild","isWindows","test","navigator","userAgent","isMac","isSafari","isFirefox","isMobileBrowser","EDITOR_OPTIONS","InjectionToken","VIEW_CONTAINER","VIEW_DOCUMENT","VIEW_MASK","Parser","textbus","componentLoaders","formatLoaders","attributeLoaders","parseDoc","html","rootComponentLoader","parseHTML","read","childSlot","slotRootElement","slotContentHostElement","readSlot","parse","rootSlot","readFormats","readComponent","slot","insert","schema","t","match","result","Slot","toDelta","formats","readText","map","startIndex","index","startNode","firstChild","nextSibling","endIndex","applyFormats","formatter","retain","slotContentElement","attribute","formatItems","background","DOMParser","parseFromString","body","caretPositionEqual","Input","DomAdapter","_call_super","onViewUpdated","Subject","host","cursor","overflowWrap","boxSizing","flex","outline","id","Number","random","substring","toString","Adapter","SelectionBridge","config","controller","onSelectionChange","nativeSelection","syncSelectionFromNativeSelectionChange","_define_property","selectionChangeEvent","subs","sub","connector","ignoreSelectionChange","changeFromUser","docContainer","cacheCaretPositionTimer","oldCaretPosition","selection","rootComponentRef","input","scheduler","domAdapter","getSelection","get","asObservable","pipe","readonly","subscribe","focus","blur","fromEvent","ev","target","type","useContentEditable","contentEditable","connect","disConnect","syncSelection","listen","unListen","getRect","location","getPositionByRange","focusOffset","offset","anchorOffset","focusSlot","anchorSlot","nativeRange","collapse","restore","abstractSelection","fromLocal","removeAllRanges","tryOffset","len","setBaseAndExtent","e","setTimeout","rangeCount","getRangeAt","bind","Promise","resolve","then","requestIdleCallback","destroy","unsubscribe","findSelectedNodeAndOffset","getPreviousLinePositionByCurrent","getLinePosition","getNextLinePositionByCurrent","currentPosition","toNext","clearTimeout","p","getVerticalMovePosition","startLeft","startRect","startTop","startBottom","step","pos","getNextPositionByPosition","getPreviousPositionByPosition","cur","isDifferentLine","refineXOnLine","getDocumentBoundary","targetRect","targetX","lineRect","lineTop","lineBottom","rightSide","prev","slots","component","lastSlot","firstSlot","caretPositionFromPoint","button","shiftKey","isUpdating","onDocChange","onDocChanged","delay","composition","contains","anchorNode","rawRange","cloneRange","isFocusEnd","focusNode","endContainer","endOffset","isFocusStart","nativeNode","getNativeNodeBySlot","at","setEndAfter","setStartBefore","startPosition","getCorrectedPosition","endPosition","includes","commonAncestorContainer","beforeChange","setSelection","start","end","isCollapsed","getContentAtIndex","nodes","getNodesBySlot","getNativeNodeByComponent","Text","getLocationByNativeNode","current","toAfter","excludeNodes","containerPosition","childNode","childPosition","findFocusNode","prevNode","prevPosition","nextNode","previousSibling","findFocusNodeByParent","parentPosition","iframeHTML","ExperimentalCaret","onPositionChange","onStyleChange","elementRef","changeFromSelf","getLimit","timer","caret","_display","flashing","caretClippedOut","subscription","scrollSubscription","scrollRaf","clipContext","clipContextAnchor","scrollListenerAnchor","positionChangeEvent","styleChangeEvent","oldRange","domRenderer","editorMask","Subscription","distinctUntilChanged","pointerEvents","v","visibility","refresh","updateCursorPosition","show","restart","lastChangesHasLocalUpdate","bindScrollListeners","toggleShowHide","unbindScrollListeners","hide","clearClipContext","onScroll","requestAnimationFrame","ensureClipContext","win","defaultView","cancelAnimationFrame","resolveCaretAnchor","normalizeCollapsedRange","nodeStyle","round","applyCaretElementLayout","presentation","applyCaretPresentation","emitCaretPresentation","scrollCaretIntoViewIfNeeded","compositionNode","selectNodeContents","transform","backgroundColor","limit","reverse","scrollContainer","isDoc","scrollRect","visibleTop","visibleBottom","caretBottom","scrollTop","MagicInput","parser","keyboard","onReady","_disabled","container","textarea","isFocus","nativeFocus","ignoreComposition","commander","createEditableFrame","contentDocument","open","write","close","init","onReadonlyStateChange","prepend","disabled","reInit","contentBody","__changeMarker__","forceMarkDirtied","handleInput","handleShortcut","handleDefaultActions","copyHandler","pasteHandler","isSelected","startSlot","endSlot","content","_type_of","clipboardData","div","fragment","cloneContents","setData","innerHTML","preventDefault","text","getData","types","files","every","all","reader","FileReader","onload","event","readAsDataURL","urls","join","paste","dom","ContentType","BlockComponent","InlineComponent","isWriting","isIgnore","inputType","code","charAt","is","execShortcut","altKey","modKey","metaKey","ctrlKey","agent","keyCode","delete","Event","invokeListener","parent","data","isCompositionEnd","merge","isComposing","Observable","scrolling","CollaborateSelectionAwarenessDelegate","CollaborateCursor","awarenessDelegate","canvasContainer","canvas","context","tooltips","onRectsChange","selectionCursors","ratio","zIndex","opacity","getContext","window","devicePixelRatio","rects","fillStyle","beginPath","fill","closePath","draw","paths","containerRect","offsetWidth","offsetHeight","scale","clearRect","users","anchorPaths","focusPaths","pop","findSlotByPaths","getRects","getClientRects","selectionRects","username","cursorRange","cursorRect","drawUserCursor","getUserCursor","userTip","child","marginBottom","whiteSpace","boxShadow","borderRadius","padding","pointer","CompositionRecorder","observer","nodeOldValues","Map","clear","MutationObserver","mutations","m","addedNodes","set","oldValue","observe","childList","subtree","characterData","characterDataOldValue","diffText","cleanup","committedText","stop","disconnect","oldStr","newStr","oldEnd","newEnd","slice","NativeCaret","_nativeRange","NativeInput","documentView","compositionEndedAt","Date","now","recorder","queueMicrotask","syncCompositionText","getTargetRanges","dataTransfer","browserErrorFn","makeError","BrowserModule","providers","workbench","createLayout","mask","wrapper","adapter","minHeight","provide","useValue","NativeSelectionBridge","useExisting","useClass","FocusManager","useFactory","focusEvent","blurEvent","onFocus","onBlur","deps","readDocumentByHTML","Component","readDocumentByComponentLiteral","rootComponent","registry","Registry","createComponentByFactory","setup","renderTo","HTMLElement","onAfterStartup","autoFocus","onDestroy","maskWrapper","margin","flexDirection"],"mappings":"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"}