bridgerte 0.9.17 → 0.9.18
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/dom.cjs +1 -1
- package/dist/dom.js +2 -2
- package/dist/{index-IG7bnHAR.js → index-8kI8r7zm.js} +874 -844
- package/dist/index-8kI8r7zm.js.map +1 -0
- package/dist/index-BTtX4aJu.cjs +4 -0
- package/dist/index-BTtX4aJu.cjs.map +1 -0
- package/dist/{index-ZeQUaPbe.js → index-Bit2Kbbe.js} +84 -84
- package/dist/index-Bit2Kbbe.js.map +1 -0
- package/dist/index-DBHtvXqM.cjs +36 -0
- package/dist/index-DBHtvXqM.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/webview.cjs +1 -1
- package/dist/webview.js +1 -1
- package/package.json +1 -1
- package/dist/index-C9gc8336.cjs +0 -4
- package/dist/index-C9gc8336.cjs.map +0 -1
- package/dist/index-CVyAIGlg.cjs +0 -36
- package/dist/index-CVyAIGlg.cjs.map +0 -1
- package/dist/index-IG7bnHAR.js.map +0 -1
- package/dist/index-ZeQUaPbe.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DBHtvXqM.cjs","sources":["../../dom/src/menuIcon/uiIcons.ts","../../dom/src/richTextToolbar/groupMenuKeyboard.ts","../../dom/src/richTextToolbar/render.ts","../../dom/src/richTextToolbar/groupMenuInteraction.ts","../../dom/src/richTextToolbar/index.ts","../../dom/src/htmlContent/index.ts"],"sourcesContent":["/**\n * DOM UI chrome icon 表。\n *\n * 这里放 toolbar 收纳入口、下拉箭头这类控件自身图标。它们不属于 `MenuItem.icon`\n * 跨端 schema,也不应该进入 `defaultMenuIcons` 的 schema 对齐检查。\n */\nexport const defaultMenuUiIcons = {\n toolbarGroup: `\n <svg\n aria-hidden=\"true\"\n class=\"lucide lucide-ellipsis\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </svg>\n `,\n chevronDown: `\n <svg\n aria-hidden=\"true\"\n class=\"lucide lucide-chevron-down\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n `\n} as const;\n","export const getEnabledGroupMenuButtons = (menuElement: HTMLElement) => (\n Array.from(\n menuElement.querySelectorAll<HTMLButtonElement>('.bridgerte__toolbar-group-menu-item')\n ).filter((button) => !button.disabled)\n);\n\nexport const focusToolbarGroupMenuItem = (menuElement: HTMLElement, index: number) => {\n const buttons = getEnabledGroupMenuButtons(menuElement);\n const nextButton = buttons[index];\n\n if (nextButton) nextButton.focus();\n};\n\nexport const handleToolbarGroupMenuKeyDown = (\n event: KeyboardEvent,\n menuElement: HTMLElement,\n returnButton: HTMLButtonElement,\n executeToolbarButton: (button: HTMLButtonElement) => void,\n closeGroupMenu: () => void\n) => {\n const buttons = getEnabledGroupMenuButtons(menuElement);\n const activeIndex = document.activeElement instanceof HTMLButtonElement\n ? buttons.indexOf(document.activeElement)\n : -1;\n const focusByOffset = (offset: number) => {\n if (buttons.length === 0) return;\n\n const baseIndex = activeIndex >= 0 ? activeIndex : 0;\n const nextIndex = (baseIndex + offset + buttons.length) % buttons.length;\n\n buttons[nextIndex]?.focus();\n };\n\n /*\n * ARIA menu 语义要求支持 roving focus。这里不改 toolbar 的横向键盘模型,\n * 只在已打开的纵向收纳菜单内处理上下方向、首尾跳转和执行/关闭。\n */\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n focusByOffset(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n focusByOffset(-1);\n break;\n case 'Home':\n event.preventDefault();\n buttons[0]?.focus();\n break;\n case 'End':\n event.preventDefault();\n buttons.at(-1)?.focus();\n break;\n case 'Enter':\n case ' ':\n if (document.activeElement instanceof HTMLButtonElement) {\n event.preventDefault();\n executeToolbarButton(document.activeElement);\n closeGroupMenu();\n returnButton.focus();\n }\n break;\n case 'Escape':\n event.preventDefault();\n returnButton.focus();\n closeGroupMenu();\n break;\n default:\n break;\n }\n};\n","import type { CommandState } from '@bridgerte/core';\nimport type { MenuItem, ResolvedToolbarItem } from '@bridgerte/native-spec';\nimport {\n appendMenuIcon,\n defaultMenuIcons,\n defaultMenuUiIcons\n} from './icons';\nimport { getMenuStateForItem } from '../menuRuntime';\nimport type {\n RichTextToolbarIcons,\n ToolbarGroupMenuState\n} from './type';\n\nexport const toolbarGroupButtonSelector = 'button[data-bridgerte-toolbar-group-id]';\nexport const toolbarButtonSelector = 'button[data-bridgerte-toolbar-item-id]';\n// 可执行按钮同时覆盖 toolbar 主按钮和 group menu 子项,避免浮层子菜单绕过统一命令入口。\nexport const toolbarExecutableButtonSelector = [\n toolbarButtonSelector,\n '.bridgerte__toolbar-group-menu-item'\n].join(',');\n\nconst getGroupMenuState = (items: MenuItem[], commandStates: CommandState[]) => {\n const itemStates = items.map((item) => getMenuStateForItem(item, commandStates));\n\n return {\n active: itemStates.some((state) => state.active),\n disabled: itemStates.length > 0 && itemStates.every((state) => state.disabled)\n };\n};\n\nconst renderToolbarButton = (\n groupElement: HTMLElement,\n item: MenuItem,\n commandStates: CommandState[],\n icons: RichTextToolbarIcons,\n enableTooltip: boolean\n) => {\n const state = getMenuStateForItem(item, commandStates);\n const button = document.createElement('button');\n // icon 兜底顺序固定为:业务覆盖 > DOM 默认 SVG > label 文本。\n const iconSvg = icons[item.icon] ?? defaultMenuIcons[item.icon];\n\n button.type = 'button';\n button.className = 'bridgerte__toolbar-button';\n button.disabled = state.disabled;\n button.dataset.active = String(state.active);\n button.dataset.bridgerteToolbarItemId = item.id;\n button.setAttribute('aria-label', item.label);\n button.setAttribute('aria-pressed', String(state.active));\n if (enableTooltip) button.dataset.tooltip = item.label;\n\n appendMenuIcon(button, iconSvg, item.label);\n\n groupElement.append(button);\n};\n\nconst renderToolbarGroupButton = (\n groupElement: HTMLElement,\n toolbarItem: Extract<ResolvedToolbarItem, { type: 'group' }>,\n commandStates: CommandState[],\n icons: RichTextToolbarIcons,\n enableTooltip: boolean\n) => {\n const button = document.createElement('button');\n const groupState = getGroupMenuState(toolbarItem.items, commandStates);\n const iconSvg = toolbarItem.icon\n ? icons[toolbarItem.icon] ?? defaultMenuIcons[toolbarItem.icon]\n : defaultMenuUiIcons.toolbarGroup;\n const indicator = document.createElement('span');\n\n button.type = 'button';\n button.className = 'bridgerte__toolbar-button bridgerte__toolbar-group-button';\n button.disabled = groupState.disabled;\n button.dataset.active = String(groupState.active);\n button.dataset.bridgerteToolbarGroupId = toolbarItem.key;\n button.dataset.open = 'false';\n button.setAttribute('aria-label', toolbarItem.title);\n button.setAttribute('aria-haspopup', 'menu');\n button.setAttribute('aria-expanded', 'false');\n button.setAttribute('aria-pressed', String(groupState.active));\n if (enableTooltip) button.dataset.tooltip = toolbarItem.title;\n\n appendMenuIcon(button, iconSvg, toolbarItem.title);\n\n indicator.className = 'bridgerte__toolbar-group-indicator';\n indicator.setAttribute('aria-hidden', 'true');\n indicator.innerHTML = defaultMenuUiIcons.chevronDown;\n button.append(indicator);\n groupElement.append(button);\n};\n\n/**\n * 渲染 toolbar 横向主入口。\n *\n * 字符串菜单直接渲染为按钮,`|` 渲染分割线。\n * 只有用户显式声明的 group 配置才生成收纳入口,避免 schema 隐式改变 DOM 结构。\n */\nexport const renderToolbar = (\n toolbarElement: HTMLElement,\n toolbarItems: ResolvedToolbarItem[],\n commandStates: CommandState[],\n icons: RichTextToolbarIcons,\n enableTooltip: boolean\n) => {\n toolbarElement.textContent = '';\n\n toolbarItems.forEach((toolbarItem) => {\n if (toolbarItem.type === 'separator') {\n const separatorElement = document.createElement('span');\n\n separatorElement.className = 'bridgerte__toolbar-separator';\n separatorElement.dataset.separatorId = toolbarItem.key;\n separatorElement.setAttribute('aria-hidden', 'true');\n toolbarElement.append(separatorElement);\n return;\n }\n\n if (toolbarItem.type === 'button') {\n renderToolbarButton(\n toolbarElement,\n toolbarItem.item,\n commandStates,\n icons,\n enableTooltip\n );\n return;\n }\n\n /*\n * 收纳菜单是用户在 toolbarConfig 里显式声明的结构;普通菜单不会自动生成 DOM 包裹,\n * 显示分组完全交给用户用 group 配置或 `|` 控制。\n */\n const groupElement = document.createElement('div');\n\n groupElement.className = 'bridgerte__toolbar-group';\n groupElement.dataset.group = toolbarItem.key;\n groupElement.setAttribute('aria-label', toolbarItem.title);\n toolbarElement.append(groupElement);\n\n renderToolbarGroupButton(\n groupElement,\n toolbarItem,\n commandStates,\n icons,\n enableTooltip\n );\n });\n};\n\n/**\n * 渲染 group button 打开的纵向收纳菜单。\n *\n * 浮层只展示 MenuItem 子项并复用现有 item id,点击执行仍由 index.ts 统一走 EditorAPI。\n */\nexport const renderToolbarGroupMenu = (\n menuElement: HTMLElement,\n groupMenuState: ToolbarGroupMenuState | null,\n commandStates: CommandState[],\n icons: RichTextToolbarIcons\n) => {\n menuElement.textContent = '';\n\n if (!groupMenuState) {\n menuElement.dataset.visible = 'false';\n return;\n }\n\n groupMenuState.items.forEach((item) => {\n const state = getMenuStateForItem(item, commandStates);\n const button = document.createElement('button');\n const iconSvg = icons[item.icon] ?? defaultMenuIcons[item.icon];\n const labelElement = document.createElement('span');\n\n button.type = 'button';\n button.className = 'bridgerte__menu-item bridgerte__toolbar-group-menu-item';\n button.disabled = state.disabled;\n button.dataset.active = String(state.active);\n button.dataset.bridgerteToolbarItemId = item.id;\n button.setAttribute('role', 'menuitem');\n button.setAttribute('aria-label', item.label);\n button.setAttribute('aria-pressed', String(state.active));\n\n appendMenuIcon(button, iconSvg, item.label);\n labelElement.className = 'bridgerte__toolbar-group-menu-label';\n labelElement.textContent = item.label;\n button.append(labelElement);\n menuElement.append(button);\n });\n\n menuElement.dataset.visible = 'true';\n menuElement.style.minWidth = `${groupMenuState.button.offsetWidth}px`;\n};\n\nexport const syncToolbarGroupButtonState = (\n container: HTMLElement,\n groupMenuState: ToolbarGroupMenuState | null\n) => {\n container.querySelectorAll<HTMLButtonElement>(toolbarGroupButtonSelector).forEach((button) => {\n const open = groupMenuState?.groupKey === button.dataset.bridgerteToolbarGroupId;\n\n button.dataset.open = String(open);\n button.setAttribute('aria-expanded', String(open));\n });\n};\n\nexport const findToolbarGroupMenuItem = (\n toolbarItems: ResolvedToolbarItem[],\n groupKey: string | undefined\n) => toolbarItems.find((item): item is Extract<ResolvedToolbarItem, { type: 'group' }> => (\n item.type === 'group' && item.key === groupKey\n));\n","import {\n toolbarExecutableButtonSelector,\n toolbarGroupButtonSelector\n} from './render';\n\nconst toolbarGroupTouchMoveTolerancePx = 8;\n\nconst isInsideNode = (container: HTMLElement, target: EventTarget | null) => (\n target instanceof Node && container.contains(target)\n);\n\nconst getClosestButton = (\n target: EventTarget | null,\n selector: string\n) => (\n target instanceof Element ? target.closest<HTMLButtonElement>(selector) : null\n);\n\n/**\n * 创建 toolbar 收纳菜单交互控制器。\n *\n * 这个控制器只接管收纳菜单链路:更多入口和收纳菜单项。\n * 普通 toolbar 按钮保留原生 click,避免 H5 横向滚动和点击链路被菜单控制器误拦;\n * 收纳菜单仍在 PC 鼠标按下阶段保护 selection,H5 tap 在 touchend 判定后提交。\n */\nexport const createToolbarGroupMenuInteraction = (\n container: HTMLElement,\n groupMenuElement: HTMLElement,\n toggleGroupMenu: (button: HTMLButtonElement) => void,\n executeToolbarButton: (button: HTMLButtonElement) => void,\n closeGroupMenu: () => void\n) => {\n let pendingTouch: {\n button: HTMLButtonElement;\n kind: 'group' | 'menu-item';\n startX: number;\n startY: number;\n } | null = null;\n let suppressNextClickButton: HTMLButtonElement | null = null;\n\n const getInteractiveButtonFromTarget = (target: EventTarget | null) => (\n getClosestButton(target, toolbarGroupButtonSelector)\n ?? (\n isInsideNode(groupMenuElement, target)\n ? getClosestButton(target, toolbarExecutableButtonSelector)\n : null\n )\n );\n\n const handlePressStart = (event: PointerEvent | MouseEvent) => {\n const button = getInteractiveButtonFromTarget(event.target);\n\n if (!button) return;\n\n /*\n * toolbar 按钮属于编辑器工具区。鼠标按下阶段阻止默认 focus 转移,保留正文\n * selection;触屏不能在这里拦截,否则 H5 横向滚动会被当成按钮按下吞掉。\n */\n if (event instanceof PointerEvent && event.pointerType !== 'mouse') return;\n\n event.preventDefault();\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n const touch = event.touches[0];\n const groupButton = getClosestButton(event.target, toolbarGroupButtonSelector);\n const menuItemButton = isInsideNode(groupMenuElement, event.target)\n ? getClosestButton(event.target, toolbarExecutableButtonSelector)\n : null;\n const button = groupButton ?? menuItemButton;\n\n if (!button || !touch) return;\n\n /*\n * touchstart 只记录候选 tap,不阻止默认行为。移动端需要先让浏览器识别横向滚动;\n * 真正的点击会在 touchend 里按位移阈值提交并拦截尾随 click。\n */\n pendingTouch = {\n button,\n kind: groupButton ? 'group' : 'menu-item',\n startX: touch.clientX,\n startY: touch.clientY\n };\n };\n\n const clearPendingTouch = () => {\n pendingTouch = null;\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n if (!pendingTouch) return;\n\n const touchState = pendingTouch;\n const touch = event.changedTouches[0];\n const endButton = getInteractiveButtonFromTarget(event.target);\n\n pendingTouch = null;\n if (!touch || endButton !== touchState.button) return;\n\n const deltaX = Math.abs(touch.clientX - touchState.startX);\n const deltaY = Math.abs(touch.clientY - touchState.startY);\n\n if (\n deltaX > toolbarGroupTouchMoveTolerancePx\n || deltaY > toolbarGroupTouchMoveTolerancePx\n ) return;\n\n event.preventDefault();\n event.stopPropagation();\n suppressNextClickButton = touchState.button;\n\n if (touchState.kind === 'group') {\n toggleGroupMenu(touchState.button);\n return;\n }\n\n executeToolbarButton(touchState.button);\n closeGroupMenu();\n };\n\n const handleDocumentPointerDown = (event: PointerEvent) => {\n if (\n isInsideNode(container, event.target)\n || isInsideNode(groupMenuElement, event.target)\n ) return;\n\n closeGroupMenu();\n };\n\n container.addEventListener('pointerdown', handlePressStart);\n container.addEventListener('mousedown', handlePressStart);\n container.addEventListener('touchstart', handleTouchStart, { passive: false });\n container.addEventListener('touchend', handleTouchEnd);\n container.addEventListener('touchcancel', clearPendingTouch);\n groupMenuElement.addEventListener('pointerdown', handlePressStart);\n groupMenuElement.addEventListener('mousedown', handlePressStart);\n groupMenuElement.addEventListener('touchstart', handleTouchStart, { passive: false });\n groupMenuElement.addEventListener('touchend', handleTouchEnd);\n groupMenuElement.addEventListener('touchcancel', clearPendingTouch);\n document.addEventListener('pointerdown', handleDocumentPointerDown, true);\n\n return {\n consumeSuppressedClick(button: HTMLButtonElement) {\n if (suppressNextClickButton !== button) return false;\n\n suppressNextClickButton = null;\n return true;\n },\n destroy() {\n container.removeEventListener('pointerdown', handlePressStart);\n container.removeEventListener('mousedown', handlePressStart);\n container.removeEventListener('touchstart', handleTouchStart);\n container.removeEventListener('touchend', handleTouchEnd);\n container.removeEventListener('touchcancel', clearPendingTouch);\n groupMenuElement.removeEventListener('pointerdown', handlePressStart);\n groupMenuElement.removeEventListener('mousedown', handlePressStart);\n groupMenuElement.removeEventListener('touchstart', handleTouchStart);\n groupMenuElement.removeEventListener('touchend', handleTouchEnd);\n groupMenuElement.removeEventListener('touchcancel', clearPendingTouch);\n document.removeEventListener('pointerdown', handleDocumentPointerDown, true);\n }\n };\n};\n","import type { CommandState } from '@bridgerte/core';\nimport {\n defaultMenuSchema,\n resolveToolbarMenu\n} from '@bridgerte/native-spec';\nimport { createFloatingLayer, type RichTextFloatingLayer } from '../floatingLayer';\nimport { bindTouchPressedState } from '../interactionState';\nimport {\n getPayloadPanelCurrentValues,\n resolveMenuSchemaForDom\n} from '../menuRuntime';\nimport {\n focusToolbarGroupMenuItem,\n handleToolbarGroupMenuKeyDown\n} from './groupMenuKeyboard';\nimport { createToolbarGroupMenuInteraction } from './groupMenuInteraction';\nimport {\n findToolbarGroupMenuItem,\n renderToolbar,\n renderToolbarGroupMenu,\n syncToolbarGroupButtonState,\n toolbarExecutableButtonSelector,\n toolbarGroupButtonSelector\n} from './render';\nimport type {\n RichTextToolbarAPI,\n ToolbarGroupMenuState,\n RichTextToolbarOptions\n} from './type';\n\nconst toolbarTooltipOffsetPx = 8;\nconst toolbarGroupMenuOffsetPx = 6;\n\nexport type * from './type';\n\nconst canUseHoverTooltip = () => (\n typeof window !== 'undefined'\n && window.matchMedia?.('(hover: hover) and (pointer: fine)').matches === true\n);\n\nconst getToolbarButtonFromTarget = (target: EventTarget | null) => {\n /*\n * 图标覆盖常用 SVG,H5 pointer 事件可能落在 svg/path 上。\n * 这里用 Element 而不是 HTMLElement,保证触屏兜底和 click 都能向上命中真实按钮。\n */\n const button = target instanceof Element\n ? target.closest<HTMLButtonElement>(toolbarExecutableButtonSelector)\n : null;\n\n return button instanceof HTMLButtonElement ? button : null;\n};\n\nconst getToolbarGroupButtonFromTarget = (target: EventTarget | null) => {\n const button = target instanceof Element\n ? target.closest<HTMLButtonElement>(toolbarGroupButtonSelector)\n : null;\n\n return button instanceof HTMLButtonElement ? button : null;\n};\n\n/**\n * 创建独立菜单实例。\n *\n * toolbar/tabbar 只订阅 EditorAPI 状态并派发命令,不接触编辑器内部 DOM 或 Lexical 实例。\n */\nexport function createRichTextToolbar(\n container: HTMLElement,\n options: RichTextToolbarOptions\n): RichTextToolbarAPI {\n const placement = options.placement ?? 'top';\n const menuSchema = resolveMenuSchemaForDom(options.menuSchema ?? defaultMenuSchema, {\n menuLabels: options.menuLabels,\n payloadPanelConfig: options.payloadPanelConfig\n });\n const toolbarItems = resolveToolbarMenu(options.toolbarConfig, menuSchema);\n /*\n * click 事件只需要能执行命令的菜单项。分割线和 group 容器是渲染结构,\n * 先在这里摊平,后续点击时就不用理解 toolbarConfig 的展示层级。\n */\n const executableMenuItems = toolbarItems.flatMap((toolbarItem) => (\n toolbarItem.type === 'button' ? [toolbarItem.item]\n : toolbarItem.type === 'group' ? toolbarItem.items\n : []\n ));\n const icons = options.icons ?? {};\n /*\n * tooltip 只属于 PC 精细指针体验。H5 上即使没有原生 title,部分浏览器也会把 hover/mouseover\n * 模拟成首触摸状态,导致第一次点像是只唤醒提示;所以触屏端不写 tooltip 数据也不挂监听。\n */\n const enableTooltip = canUseHoverTooltip();\n const tooltipElement = document.createElement('div');\n const groupMenuElement = document.createElement('div');\n const overlayHost = container.closest('.bridgerte') ?? container;\n let destroyed = false;\n let latestCommandStates = options.editor.getCommandStates();\n let groupMenuState: ToolbarGroupMenuState | null = null;\n let groupMenuFloatingLayer: RichTextFloatingLayer | null = null;\n const clearToolbarPressedState = bindTouchPressedState(container, {\n targetSelector: [\n 'button[data-bridgerte-toolbar-item-id]',\n 'button[data-bridgerte-toolbar-group-id]'\n ].join(',')\n });\n const clearGroupMenuPressedState = bindTouchPressedState(groupMenuElement, {\n targetSelector: '.bridgerte__toolbar-group-menu-item'\n });\n\n const mountToolbarOverlays = () => {\n // 独立 toolbar 可能不在 `.bridgerte` 内,渲染按钮会清空 container,需要把浮层重新挂回去。\n overlayHost.append(tooltipElement);\n overlayHost.append(groupMenuElement);\n };\n\n const closeGroupMenuFloatingLayer = () => {\n groupMenuFloatingLayer?.setOpen(false);\n groupMenuFloatingLayer?.destroy();\n groupMenuFloatingLayer = null;\n };\n\n const openGroupMenuFloatingLayer = () => {\n if (!groupMenuState) return;\n\n closeGroupMenuFloatingLayer();\n /*\n * group menu 和 hoverbar/mention/slash 一样属于轻浮层,必须走 floatingLayer。\n * 这里按 toolbar placement 给出首选方向,真正的翻转、键盘可视区和左右夹紧交给\n * createFloatingLayer 内部的 visualViewport + flip + shift + clamp 统一处理。\n */\n groupMenuFloatingLayer = createFloatingLayer(groupMenuState.button, groupMenuElement, {\n placement: placement === 'bottom' ? 'top-start' : 'bottom-start',\n offset: toolbarGroupMenuOffsetPx,\n strategy: 'fixed'\n });\n groupMenuFloatingLayer.setOpen(true);\n };\n\n const closeGroupMenu = () => {\n if (!groupMenuState && !groupMenuFloatingLayer) return;\n\n closeGroupMenuFloatingLayer();\n groupMenuState = null;\n renderToolbarGroupMenu(groupMenuElement, groupMenuState, latestCommandStates, icons);\n syncToolbarGroupButtonState(container, groupMenuState);\n };\n\n const renderStates = (states: CommandState[]) => {\n if (destroyed) return;\n\n latestCommandStates = states;\n if (groupMenuState) closeGroupMenuFloatingLayer();\n renderToolbar(container, toolbarItems, states, icons, enableTooltip);\n mountToolbarOverlays();\n if (groupMenuState) {\n const nextButton = Array.from(\n container.querySelectorAll<HTMLButtonElement>(toolbarGroupButtonSelector)\n ).find((button) => button.dataset.bridgerteToolbarGroupId === groupMenuState?.groupKey);\n const nextGroupItem = findToolbarGroupMenuItem(toolbarItems, groupMenuState.groupKey);\n\n groupMenuState = nextButton && nextGroupItem\n ? {\n groupKey: groupMenuState.groupKey,\n button: nextButton,\n items: nextGroupItem.items\n }\n : null;\n renderToolbarGroupMenu(groupMenuElement, groupMenuState, latestCommandStates, icons);\n syncToolbarGroupButtonState(container, groupMenuState);\n if (groupMenuState) openGroupMenuFloatingLayer();\n }\n };\n\n const update = () => {\n if (destroyed) return;\n\n renderStates(options.editor.getCommandStates());\n };\n\n const hideTooltip = () => {\n tooltipElement.dataset.visible = 'false';\n tooltipElement.textContent = '';\n };\n\n const showTooltip = (button: HTMLButtonElement) => {\n const tooltipText = button.dataset.tooltip;\n\n if (!enableTooltip || !tooltipText) return;\n\n const buttonRect = button.getBoundingClientRect();\n\n tooltipElement.textContent = tooltipText;\n tooltipElement.dataset.visible = 'true';\n tooltipElement.style.left = `${buttonRect.left + buttonRect.width / 2}px`;\n tooltipElement.style.top = `${buttonRect.top - toolbarTooltipOffsetPx}px`;\n };\n\n const handleTooltipTarget = (event: Event) => {\n const button = getToolbarButtonFromTarget(event.target);\n\n if (button) {\n showTooltip(button);\n }\n };\n\n const handleTooltipLeave = (event: MouseEvent) => {\n const relatedTarget = event.relatedTarget;\n const button = getToolbarButtonFromTarget(event.target);\n\n if (\n button\n && relatedTarget instanceof Node\n && button.contains(relatedTarget)\n ) return;\n\n hideTooltip();\n };\n\n const executeToolbarButton = (button: HTMLButtonElement) => {\n if (!(button instanceof HTMLButtonElement) || button.disabled) return;\n\n const menuItem = executableMenuItems.find((item) => (\n item.id === button.dataset.bridgerteToolbarItemId\n ));\n\n if (!menuItem) return;\n\n if (menuItem.payloadPanel) {\n const buttonRect = button.getBoundingClientRect();\n\n /*\n * 带 payloadPanel 的菜单不直接执行基础 command,而是发起参数请求。\n * DOM 内置面板和业务/RN/Flutter 自绘都走同一个 request,避免后续颜色、\n * 字体、链接等参数菜单各自发明一套协议。\n */\n options.editor.requestPayloadPanel({\n menuId: menuItem.id,\n command: menuItem.command,\n panel: menuItem.payloadPanel,\n currentValues: getPayloadPanelCurrentValues(menuItem, options.editor.getCommandStates()),\n anchorRect: {\n x: buttonRect.left,\n y: buttonRect.top,\n width: buttonRect.width,\n height: buttonRect.height\n }\n });\n return;\n }\n\n options.editor.executeCommand(menuItem.command);\n };\n\n const toggleGroupMenu = (button: HTMLButtonElement, shouldFocusMenu = false) => {\n const groupItem = findToolbarGroupMenuItem(\n toolbarItems,\n button.dataset.bridgerteToolbarGroupId\n );\n\n if (!groupItem || button.disabled) return;\n\n if (groupMenuState?.groupKey === groupItem.key) {\n if (shouldFocusMenu) {\n focusToolbarGroupMenuItem(groupMenuElement, 0);\n return;\n }\n closeGroupMenu();\n return;\n }\n\n groupMenuState = {\n groupKey: groupItem.key,\n button,\n items: groupItem.items\n };\n hideTooltip();\n renderToolbarGroupMenu(groupMenuElement, groupMenuState, latestCommandStates, icons);\n syncToolbarGroupButtonState(container, groupMenuState);\n openGroupMenuFloatingLayer();\n if (shouldFocusMenu) focusToolbarGroupMenuItem(groupMenuElement, 0);\n };\n\n const handleClick = (event: MouseEvent) => {\n const groupButton = getToolbarGroupButtonFromTarget(event.target);\n if (groupButton) {\n event.preventDefault();\n event.stopPropagation();\n if (groupMenuInteraction.consumeSuppressedClick(groupButton)) return;\n\n toggleGroupMenu(groupButton);\n return;\n }\n\n const button = getToolbarButtonFromTarget(event.target);\n if (!button) return;\n\n event.preventDefault();\n event.stopPropagation();\n if (groupMenuInteraction.consumeSuppressedClick(button)) return;\n\n executeToolbarButton(button);\n closeGroupMenu();\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (groupMenuState && groupMenuElement.contains(document.activeElement)) {\n handleToolbarGroupMenuKeyDown(\n event,\n groupMenuElement,\n groupMenuState.button,\n executeToolbarButton,\n closeGroupMenu\n );\n return;\n }\n\n const groupButton = getToolbarGroupButtonFromTarget(event.target);\n if (\n groupButton\n && (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown')\n ) {\n /*\n * 指针点击收纳菜单不能抢编辑器焦点;键盘从入口按钮打开时则进入菜单项,\n * 保留 PC 可访问性和方向键 roving focus。\n */\n event.preventDefault();\n event.stopPropagation();\n toggleGroupMenu(groupButton, true);\n return;\n }\n\n if (event.key !== 'Escape') return;\n\n closeGroupMenu();\n };\n\n container.classList.add('bridgerte__toolbar');\n tooltipElement.className = 'bridgerte__toolbar-tooltip';\n tooltipElement.dataset.visible = 'false';\n groupMenuElement.className = 'bridgerte__floating-menu bridgerte__toolbar-group-menu';\n groupMenuElement.dataset.visible = 'false';\n groupMenuElement.setAttribute('role', 'menu');\n container.dataset.placement = placement;\n container.setAttribute('role', 'toolbar');\n container.setAttribute(\n 'aria-label',\n placement === 'bottom' ? 'BridgeRTE tabbar' : 'BridgeRTE toolbar'\n );\n container.addEventListener('click', handleClick);\n groupMenuElement.addEventListener('click', handleClick);\n document.addEventListener('keydown', handleKeyDown);\n if (enableTooltip) {\n container.addEventListener('mouseover', handleTooltipTarget);\n container.addEventListener('mouseout', handleTooltipLeave);\n }\n container.addEventListener('focusout', hideTooltip);\n // 浮层挂在最近的编辑器根容器下,既能继承变量,也不会操作编辑内容 DOM。\n mountToolbarOverlays();\n const groupMenuInteraction = createToolbarGroupMenuInteraction(\n container,\n groupMenuElement,\n toggleGroupMenu,\n executeToolbarButton,\n closeGroupMenu\n );\n\n // 独立 toolbar 只订阅 public API 状态,不依赖 DOM 编辑器内部实现。\n const unsubscribe = options.editor.subscribeCommandStateChange(renderStates);\n\n return {\n update,\n destroy() {\n if (destroyed) return;\n\n destroyed = true;\n unsubscribe();\n closeGroupMenu();\n container.removeEventListener('click', handleClick);\n groupMenuElement.removeEventListener('click', handleClick);\n document.removeEventListener('keydown', handleKeyDown);\n groupMenuInteraction.destroy();\n if (enableTooltip) {\n container.removeEventListener('mouseover', handleTooltipTarget);\n container.removeEventListener('mouseout', handleTooltipLeave);\n }\n clearToolbarPressedState();\n clearGroupMenuPressedState();\n container.removeEventListener('focusout', hideTooltip);\n tooltipElement.remove();\n groupMenuElement.remove();\n container.classList.remove('bridgerte__toolbar');\n delete container.dataset.placement;\n container.textContent = '';\n container.removeAttribute('role');\n container.removeAttribute('aria-label');\n }\n };\n}\n","const invisibleTextPattern = /[\\u200B-\\u200D\\uFEFF]/g;\n\n/*\n * HTML 片段里这些元素没有 textContent 也应算有效内容。\n * 纯排版容器不放进来,避免 `<p><br></p>`、空列表项这类编辑器占位被误判为非空。\n */\nconst meaningfulHtmlContentSelector = [\n 'img',\n 'video',\n 'audio',\n 'iframe',\n 'table',\n 'pre',\n 'code',\n 'hr',\n 'figure',\n 'canvas',\n 'svg',\n 'math',\n '[data-type=\"mention\"]'\n].join(',');\n\nconst normalizeHtmlText = (text: string | null | undefined): string => (\n text?.replace(invisibleTextPattern, '').trim() ?? ''\n);\n\n/**\n * 判断一段 HTML 片段是否包含可保存的富文本内容。\n *\n * 这个工具会使用浏览器 template 解析 HTML,适合只拿到 HTML 字符串的业务表单;如果已经持有\n * `EditorContent`,优先使用 core 的 `isEditorContentEmpty()`,避免额外 DOM parse。\n */\nexport const hasMeaningfulHtmlContent = (html: string): boolean => {\n if (!normalizeHtmlText(html)) return false;\n\n const template = document.createElement('template');\n\n template.innerHTML = html;\n\n return Boolean(\n normalizeHtmlText(template.content.textContent)\n || template.content.querySelector(meaningfulHtmlContentSelector)\n );\n};\n"],"names":["defaultMenuUiIcons","getEnabledGroupMenuButtons","menuElement","button","focusToolbarGroupMenuItem","index","nextButton","handleToolbarGroupMenuKeyDown","event","returnButton","executeToolbarButton","closeGroupMenu","buttons","activeIndex","focusByOffset","offset","nextIndex","_a","_b","toolbarGroupButtonSelector","toolbarButtonSelector","toolbarExecutableButtonSelector","getGroupMenuState","items","commandStates","itemStates","item","getMenuStateForItem","state","renderToolbarButton","groupElement","icons","enableTooltip","iconSvg","defaultMenuIcons","appendMenuIcon","renderToolbarGroupButton","toolbarItem","groupState","indicator","renderToolbar","toolbarElement","toolbarItems","separatorElement","renderToolbarGroupMenu","groupMenuState","labelElement","syncToolbarGroupButtonState","container","open","findToolbarGroupMenuItem","groupKey","toolbarGroupTouchMoveTolerancePx","isInsideNode","target","getClosestButton","selector","createToolbarGroupMenuInteraction","groupMenuElement","toggleGroupMenu","pendingTouch","suppressNextClickButton","getInteractiveButtonFromTarget","handlePressStart","handleTouchStart","touch","groupButton","menuItemButton","clearPendingTouch","handleTouchEnd","touchState","endButton","deltaX","deltaY","handleDocumentPointerDown","toolbarTooltipOffsetPx","toolbarGroupMenuOffsetPx","canUseHoverTooltip","getToolbarButtonFromTarget","getToolbarGroupButtonFromTarget","createRichTextToolbar","options","placement","menuSchema","resolveMenuSchemaForDom","defaultMenuSchema","resolveToolbarMenu","executableMenuItems","tooltipElement","overlayHost","destroyed","latestCommandStates","groupMenuFloatingLayer","clearToolbarPressedState","bindTouchPressedState","clearGroupMenuPressedState","mountToolbarOverlays","closeGroupMenuFloatingLayer","openGroupMenuFloatingLayer","createFloatingLayer","renderStates","states","nextGroupItem","update","hideTooltip","showTooltip","tooltipText","buttonRect","handleTooltipTarget","handleTooltipLeave","relatedTarget","menuItem","getPayloadPanelCurrentValues","shouldFocusMenu","groupItem","handleClick","groupMenuInteraction","handleKeyDown","unsubscribe","invisibleTextPattern","meaningfulHtmlContentSelector","normalizeHtmlText","text","hasMeaningfulHtmlContent","html","template"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./index-GaS65GL0.cjs"),a=require("./bridge.cjs"),e=require("./native-spec.cjs"),n=require("./index-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./index-GaS65GL0.cjs"),a=require("./bridge.cjs"),e=require("./native-spec.cjs"),n=require("./index-BTtX4aJu.cjs"),o=require("./index-DBHtvXqM.cjs"),r=require("./core.cjs"),i=require("./index-DF8OhKI4.cjs");exports.BRIDGERTE_CONTENT_VERSION=t.BRIDGERTE_CONTENT_VERSION;exports.BRIDGERTE_TABLE_INSERT_MAX_COLS=t.BRIDGERTE_TABLE_INSERT_MAX_COLS;exports.BRIDGERTE_TABLE_INSERT_MAX_ROWS=t.BRIDGERTE_TABLE_INSERT_MAX_ROWS;exports.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS=a.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS;exports.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS=a.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS;exports.defaultBridgeEventTiming=a.defaultBridgeEventTiming;exports.isBridgeMessage=a.isBridgeMessage;exports.codeBlockLanguagePanel=e.codeBlockLanguagePanel;exports.codeBlockLanguagePayloadPanel=e.codeBlockLanguagePayloadPanel;exports.createDisabledCommandStates=e.createDisabledCommandStates;exports.defaultMenuSchema=e.defaultMenuSchema;exports.defaultToolbarConfig=e.defaultToolbarConfig;exports.getCommandStateMatchValue=e.getCommandStateMatchValue;exports.isCommandStateForCommand=e.isCommandStateForCommand;exports.isMenuItemCommandState=e.isMenuItemCommandState;exports.resolveToolbarMenu=e.resolveToolbarMenu;exports.tableHeaderMenuItems=e.tableHeaderMenuItems;exports.createFloatingLayer=n.createFloatingLayer;exports.createRichTextEditor=n.createRichTextEditor;exports.createWebViewBridgeRuntime=n.createWebViewBridgeRuntime;exports.createRichTextToolbar=o.createRichTextToolbar;exports.hasMeaningfulHtmlContent=o.hasMeaningfulHtmlContent;exports.isEditorContentEmpty=r.isEditorContentEmpty;exports.resolvePayloadPanelSchema=i.resolvePayloadPanelSchema;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { B as t, a as o, b as r } from "./index-CuNKUHed.js";
|
|
2
2
|
import { BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS as n, BRIDGE_HEIGHT_CHANGE_THROTTLE_MS as E, defaultBridgeEventTiming as l, isBridgeMessage as s } from "./bridge.js";
|
|
3
3
|
import { codeBlockLanguagePanel as d, codeBlockLanguagePayloadPanel as i, createDisabledCommandStates as _, defaultMenuSchema as c, defaultToolbarConfig as R, getCommandStateMatchValue as B, isCommandStateForCommand as C, isMenuItemCommandState as g, resolveToolbarMenu as S, tableHeaderMenuItems as f } from "./native-spec.js";
|
|
4
|
-
import { c as I, a as M, b as N } from "./index-
|
|
5
|
-
import { c as b, h as p } from "./index-
|
|
4
|
+
import { c as I, a as M, b as N } from "./index-8kI8r7zm.js";
|
|
5
|
+
import { c as b, h as p } from "./index-Bit2Kbbe.js";
|
|
6
6
|
import { isEditorContentEmpty as h } from "./core.js";
|
|
7
7
|
import { r as H } from "./index-sbZNOcCB.js";
|
|
8
8
|
export {
|
package/dist/webview.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-BTtX4aJu.cjs");exports.createWebViewBridgeRuntime=e.createWebViewBridgeRuntime;
|
|
2
2
|
//# sourceMappingURL=webview.cjs.map
|
package/dist/webview.js
CHANGED
package/package.json
CHANGED
package/dist/index-C9gc8336.cjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";var Sn=Object.defineProperty;var Ln=(e,t,n)=>t in e?Sn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Be=(e,t,n)=>Ln(e,typeof t!="symbol"?t+"":t,n);const Re=require("./bridge.cjs"),J=require("./index-GaS65GL0.cjs"),d=require("lexical"),re=require("@lexical/rich-text"),O=require("@lexical/code"),U=require("@lexical/list"),D=require("@lexical/table"),F=require("@lexical/link"),qt=require("@lexical/history"),Je=require("@lexical/html"),X=require("@lexical/selection"),Pe=require("@lexical/utils"),z=require("./native-spec.cjs"),Ut=require("./index-DF8OhKI4.cjs"),V=require("@floating-ui/dom"),K=require("@lexical/code-shiki"),dt="bridgerte-media",jt="Loading",ut=(e,t)=>`${e}:${t}`,se=e=>typeof e=="number"&&Number.isFinite(e)&&e>0?Math.floor(e):void 0,gt=e=>typeof e=="number"&&Number.isFinite(e)?Math.min(Math.max(e,0),100):void 0,Rn=e=>e===20||e===50||e===100,mt=e=>Rn(e)?e:void 0,ht=e=>e==="center"||e==="right"?e:void 0,Pn=e=>e.status==="error"?e.errorMessage??"媒体加载失败":jt,In=(e,t)=>!t||e.status===void 0||e.status==="success",De=(e,t,n)=>{n&&e.setAttribute(t,n)},pt=(e,t,n)=>{n!==void 0&&e.setAttribute(t,String(n))};class ce extends d.DecoratorNode{constructor(n,r){super(r);Be(this,"__payload");this.__payload={...n,assetId:n.assetId??ut(n.mediaType,n.url),width:se(n.width),height:se(n.height),duration:se(n.duration),progress:gt(n.progress),displayWidthPercent:mt(n.displayWidthPercent),align:ht(n.align)},this.__payload.displayWidthPercent===void 0&&delete this.__payload.displayWidthPercent,this.__payload.align===void 0&&delete this.__payload.align}static getType(){return dt}static clone(n){return new ce(n.__payload,n.__key)}createDOM(n){return this.createMediaElement(!0)}updateDOM(n,r){if(n.__payload===this.__payload)return!1;const o=this.createMediaElement(!0);return r.replaceWith(o),!0}exportDOM(n){return{element:this.createMediaElement(!1)}}static importDOM(){return{img:()=>({conversion:$n,priority:1}),video:()=>({conversion:An,priority:1})}}static importJSON(n){return de(n).updateFromJSON(n)}exportJSON(){return{...super.exportJSON(),...this.__payload,type:dt}}getTextContent(){return this.__payload.title??this.__payload.alt??this.__payload.url}isInline(){return!1}getAsset(){const n=this.__payload,r={id:n.assetId??ut(n.mediaType,n.url),type:n.mediaType,url:n.url,status:n.status,progress:n.progress,poster:n.poster,width:n.width,height:n.height,duration:n.duration,mimeType:n.mimeType,size:n.size,errorMessage:n.errorMessage,external:!0};return n.displayWidthPercent!==void 0&&(r.displayWidthPercent=n.displayWidthPercent),n.align!==void 0&&(r.align=n.align),r}updatePayload(n){const r=this.getWritable();r.__payload={...r.__payload,...n,width:se(n.width??r.__payload.width),height:se(n.height??r.__payload.height),duration:se(n.duration??r.__payload.duration),progress:gt(n.progress??r.__payload.progress),displayWidthPercent:Object.prototype.hasOwnProperty.call(n,"displayWidthPercent")?mt(n.displayWidthPercent):r.__payload.displayWidthPercent,align:Object.prototype.hasOwnProperty.call(n,"align")?ht(n.align):r.__payload.align},r.__payload.displayWidthPercent===void 0&&delete r.__payload.displayWidthPercent,r.__payload.align===void 0&&delete r.__payload.align}createMediaElement(n){const r=this.__payload,o=document.createElement("figure"),a=r.mediaType==="image"?document.createElement("img"):document.createElement("video"),s=()=>{o.dataset.loadState="loaded"};o.className=`bridgerte__media bridgerte__media--${r.mediaType}`,o.contentEditable="false",o.dataset.assetId=r.assetId,o.dataset.mediaType=r.mediaType,o.dataset.status=r.status??"success",n&&(o.dataset.loadState=r.status==="error"?"error":"loading"),r.progress!==void 0&&(o.dataset.progress=String(r.progress)),r.align!==void 0&&(o.dataset.align=r.align),r.displayWidthPercent!==void 0&&(o.dataset.displayWidthPercent=String(r.displayWidthPercent),o.style.setProperty("--bridgerte-media-display-width",`${r.displayWidthPercent}%`)),r.width!==void 0&&r.height!==void 0&&o.style.setProperty("--bridgerte-media-aspect-ratio",`${r.width} / ${r.height}`),a.className="bridgerte__media-element",n&&(a.addEventListener(r.mediaType==="image"?"load":"loadedmetadata",s,{once:!0}),a.addEventListener("error",()=>{o.dataset.loadState="error"},{once:!0}));const l=In(r,n);if(r.mediaType==="image"?(l&&a.setAttribute("src",r.url),a.setAttribute("loading","lazy"),De(a,"alt",r.alt??r.title)):(l&&a.setAttribute("src",r.url),a.setAttribute("controls","true"),a.setAttribute("preload","metadata"),De(a,"poster",r.poster)),De(a,"title",r.title),pt(a,"width",r.width),pt(a,"height",r.height),n){const u=document.createElement("div"),c=document.createElement("span"),p=document.createElement("span");u.className="bridgerte__media-placeholder",u.setAttribute("aria-hidden","true"),c.className="bridgerte__media-placeholder-icon",c.textContent=r.mediaType==="image"?"IMG":"VIDEO",p.className="bridgerte__media-placeholder-text",p.textContent=Pn(r),u.append(c,p),o.append(u)}if(o.append(a),r.status==="uploading"||r.status==="error"){const u=document.createElement("figcaption");u.className="bridgerte__media-status",u.textContent=r.status==="error"?r.errorMessage??"上传失败":jt,o.append(u)}return o}}const $n=e=>{const t=e instanceof HTMLImageElement?e:null;return{node:t!=null&&t.src?de({mediaType:"image",url:t.src,alt:t.alt,title:t.title,width:t.width,height:t.height,status:"success"}):null}},An=e=>{const t=e instanceof HTMLVideoElement?e:null;return{node:t!=null&&t.src?de({mediaType:"video",url:t.src,poster:t.poster,title:t.title,width:t.videoWidth||t.width,height:t.videoHeight||t.height,status:"success"}):null}},de=e=>d.$applyNodeReplacement(new ce(e)),Bn=e=>de({mediaType:"image",url:e.url,alt:e.alt,title:e.title,width:e.width,height:e.height,displayWidthPercent:e.displayWidthPercent,align:e.align,assetId:e.assetId,status:"success"}),Dn=e=>de({mediaType:"video",url:e.url,poster:e.poster,title:e.title,width:e.width,height:e.height,displayWidthPercent:e.displayWidthPercent,align:e.align,assetId:e.assetId,status:"success"}),Kt=e=>e instanceof ce,he=e=>{const t=n=>{if(Kt(n)&&n.getAsset().id===e)return n;if(!d.$isElementNode(n))return null;for(const r of n.getChildren()){const o=t(r);if(o)return o}return null};return t(d.$getRoot())},Gt={root:{type:"root",version:1,children:[]}};function qe(e={}){return{html:e.html??"",json:e.json??Gt,plainText:e.plainText??"",assets:e.assets??[],version:e.version??J.BRIDGERTE_CONTENT_VERSION}}const On=e=>e.toJSON(),Hn=e=>{var t;return((t=e.root.children)==null?void 0:t.length)===0},Fn=e=>e.read(()=>{const t=new Map,n=r=>{d.$isElementNode(r)&&r.getChildren().forEach(o=>{if(Kt(o)){const a=o.getAsset();t.set(a.id,a);return}d.$isElementNode(o)&&n(o)})};return n(d.$getRoot()),[...t.values()]}),Yt=(e,t)=>{const n=t.read(()=>Je.$generateHtmlFromNodes(t)),r=e.read(()=>d.$getRoot().getTextContent()),o=Fn(e);return{html:n,json:On(e),plainText:r,assets:o,version:J.BRIDGERTE_CONTENT_VERSION}},zn=(e,t)=>{const n=qe(t);return Xt(e,n),Yt(e.getEditorState(),e)},Xt=(e,t)=>{if(t.json!==Gt&&!Hn(t.json)){const o=t.json;e.setEditorState(e.parseEditorState(o));return}if(!t.html){e.update(()=>{const o=d.$getRoot();o.clear(),o.append(d.$createParagraphNode())},{discrete:!0});return}const r=new DOMParser().parseFromString(t.html,"text/html");e.update(()=>{const o=d.$getRoot(),a=Je.$generateNodesFromDOM(e,r);o.clear(),o.append(...a)},{discrete:!0})},Wn="bridgerte-divider",Jt=e=>(e==null?void 0:e.getType())===Wn,Vn=(e,t,n)=>{const r=d.$getRoot();if(r.getChildrenSize()===0){const o=d.$createParagraphNode();r.append(o),o.selectStart();return}if(n){e==null||e.selectEnd(),e||t==null||t.selectStart();return}t==null||t.selectStart(),t||e==null||e.selectEnd()},qn=(e,t)=>{const n=e.getPreviousSibling(),r=e.getNextSibling();e.remove(),Vn(n,r,t)},Un=()=>{const e=d.$getSelection();if(!d.$isNodeSelection(e))return null;const t=e.getNodes();return t.length===1&&Jt(t[0])?t[0]:null},jn=e=>e.getKey()==="root"?null:e.getTopLevelElement(),Kn=e=>{const t=d.$getSelection();if(!d.$isRangeSelection(t)||!t.isCollapsed())return null;const n=t.anchor,r=n.getNode(),o=jn(r);if(!o||!d.$isElementNode(o))return null;if(d.$isElementNode(r)){const l=r.isEmpty()&&n.offset===0,u=r===o&&n.offset===0,c=r===o&&n.offset===o.getChildrenSize();return l||(e?u:c)?o:null}if(!(r instanceof d.TextNode))return null;const a=e?o.getFirstDescendant():o.getLastDescendant(),s=e?0:r.getTextContentSize();return a===r&&n.offset===s?o:null},Gn=e=>{const t=Kn(e),n=e?t==null?void 0:t.getPreviousSibling():t==null?void 0:t.getNextSibling();return Jt(n)?n:null},Yn=(e,t)=>{const n=o=>{if(t())return!1;const a=Un()??Gn(o);return a?(qn(a,o),!0):!1},r=(o,a)=>{const s=n(a);return s&&o.preventDefault(),s};return[e.registerCommand(d.KEY_BACKSPACE_COMMAND,o=>r(o,!0),d.COMMAND_PRIORITY_HIGH),e.registerCommand(d.KEY_DELETE_COMMAND,o=>r(o,!1),d.COMMAND_PRIORITY_HIGH),e.registerCommand(d.DELETE_CHARACTER_COMMAND,o=>n(o),d.COMMAND_PRIORITY_HIGH)]};class pe extends d.DecoratorNode{static getType(){return"bridgerte-divider"}static clone(t){return new pe(t.__key)}constructor(t){super(t)}createDOM(t){const n=document.createElement("hr");return n.className="bridgerte__divider",n}updateDOM(){return!1}exportDOM(t){const n=document.createElement("hr");return n.className="bridgerte__divider",{element:n}}static importDOM(){return{hr:()=>({conversion:Xn,priority:0})}}static importJSON(t){return Qe().updateFromJSON(t)}exportJSON(){return{...super.exportJSON(),type:pe.getType()}}getTextContent(){return`
|
|
2
|
-
`}isInline(){return!1}}const Xn=e=>({node:Qe()}),Qe=()=>d.$applyNodeReplacement(new pe),ft="bridgerte-mention",Ze="mention",Qt=e=>e.label.startsWith("@")?e.label:`@${e.label}`,Jn=e=>{const t=document.createElement("span");return t.className="bridgerte__mention",t.dataset.type=Ze,t.dataset.id=e.id,t.dataset.value=e.value,t.contentEditable="false",t.textContent=Qt(e),e.description&&(t.dataset.description=e.description),t};class ye extends d.TextNode{constructor(n,r=Qt(n),o){super(r,o);Be(this,"__item");this.__item=n}static getType(){return ft}static clone(n){return new ye(n.__item,n.__text,n.__key)}createDOM(n){const r=super.createDOM(n);return r.className="bridgerte__mention",r.dataset.type=Ze,r.dataset.id=this.__item.id,r.dataset.value=this.__item.value,r.contentEditable="false",this.__item.description&&(r.dataset.description=this.__item.description),r}updateDOM(n,r,o){return super.updateDOM(n,r,o)?!0:(r.dataset.id=this.__item.id,r.dataset.value=this.__item.value,this.__item.description?r.dataset.description=this.__item.description:delete r.dataset.description,!1)}exportDOM(n){return{element:Jn(this.__item)}}static importDOM(){return{span:()=>({conversion:Qn,priority:2})}}static importJSON(n){return et(n).updateFromJSON(n)}exportJSON(){return{...super.exportJSON(),...this.__item,type:ft}}isTextEntity(){return!0}isToken(){return!0}getMentionItem(){return this.__item}}const Qn=e=>{var a;const t=e instanceof HTMLElement?e:null;if(!t||t.dataset.type!==Ze)return{node:null};const n=((a=t.textContent)==null?void 0:a.replace(/^@/,""))||t.dataset.value||"",r=t.dataset.id||t.dataset.value||n,o=t.dataset.value||r;return!n||!r||!o?{node:null}:{node:et({id:r,label:n,value:o,description:t.dataset.description})}},et=e=>d.$applyNodeReplacement(new ye(e).setMode("token")),bt=e=>e instanceof ye,Zn="请输入内容",er=()=>{const t=d.$getRoot().getChildren();if(t.length===0)return!0;if(t.length>1)return!1;const n=t[0];return d.$isParagraphNode(n)&&n.getChildrenSize()===0},tr=({editor:e,contentElement:t})=>{const n=e.getEditorState().read(er);t.dataset.empty=String(n)},nr=({editor:e,contentElement:t,isReadonly:n})=>{const r=o=>{n()||t.dataset.empty!=="true"||o.button===0&&(o.preventDefault(),e.focus(()=>{e.update(()=>{d.$getRoot().selectStart()})}))};return t.addEventListener("pointerdown",r),()=>{t.removeEventListener("pointerdown",r)}},rr=[{command:"format.bold",format:"bold"},{command:"format.italic",format:"italic"},{command:"format.underline",format:"underline"},{command:"format.strike",format:"strikethrough"},{command:"format.inlineCode",format:"code"},{command:"format.superscript",format:"superscript"},{command:"format.subscript",format:"subscript"}],or=[{command:"format.color",property:"color"},{command:"format.backgroundColor",property:"background-color"},{command:"format.fontSize",property:"font-size"},{command:"format.fontFamily",property:"font-family"},{command:"format.lineHeight",property:"line-height"}],ar=[{command:"list.ordered",listType:"ordered"},{command:"list.unordered",listType:"unordered"},{command:"list.todo",listType:"todo"}],sr=["media.pickImage","media.pickVideo"],Zt=()=>{const e=d.$getSelection();if(!d.$isRangeSelection(e))return null;const t=e.anchor.getNode();return t.getKey()==="root"?t:t.getTopLevelElementOrThrow()},ir=()=>{const e=Zt();if(!e)return null;if(re.$isHeadingNode(e)){const t=Number(e.getTag().replace("h",""));return{command:"block.heading",value:Number.isNaN(t)?void 0:t}}if(re.$isQuoteNode(e))return{command:"block.quote"};if(O.$isCodeNode(e)){const t=e.getLatest();return{command:"block.code",value:O.$isCodeNode(t)?t.getLanguage()??"":""}}return{command:"block.paragraph"}},lr=()=>{const e=Zt();if(!e||!("getFormatType"in e))return;const t=e.getFormatType();return t===""?void 0:t},cr=()=>{const e=d.$getSelection();if(!d.$isRangeSelection(e))return null;const t=e.anchor.getNode(),n=U.$isListNode(t)?t:Pe.$getNearestNodeOfType(t,U.ListNode);return n?n.getListType()==="check"?"todo":n.getTag()==="ol"?"ordered":"unordered":null},dr=e=>{const t=d.$getSelection();if(!d.$isRangeSelection(t))return;const n=X.$getSelectionStyleValueForProperty(t,e);return n===""?void 0:n},ur=()=>{const e=d.$getSelection();if(!d.$isRangeSelection(e))return!1;const t=e.anchor.getNode(),n=t.getParent();return F.$isLinkNode(t)||F.$isLinkNode(n)},gr=e=>{const t=d.$getSelection(),n=d.$isRangeSelection(t),r=ir(),o=cr(),a=lr(),s=ur(),l=e.readonly||!n,u=rr.map(C=>({command:C.command,active:n&&t.hasFormat(C.format),disabled:l})),c=or.map(C=>{const N=dr(C.property);return{command:C.command,active:N!==void 0,disabled:l,value:N}}),p=ar.map(C=>({command:C.command,active:o===C.listType,disabled:l})),v=sr.map(C=>({command:C,active:!1,disabled:e.readonly||!e.canUploadMedia}));return[...u,{command:"format.clear",active:!1,disabled:l},...c,{command:"block.heading",active:(r==null?void 0:r.command)==="block.heading",disabled:l,value:(r==null?void 0:r.command)==="block.heading"?r.value:void 0},{command:"block.paragraph",active:(r==null?void 0:r.command)==="block.paragraph",disabled:l},{command:"block.quote",active:(r==null?void 0:r.command)==="block.quote",disabled:l},{command:"block.divider",active:!1,disabled:e.readonly},{command:"block.code",active:(r==null?void 0:r.command)==="block.code",disabled:e.readonly,value:(r==null?void 0:r.command)==="block.code"?r.value:void 0},...p,{command:"align",active:a!==void 0,disabled:l,value:a},{command:"link.set",active:s,disabled:l},{command:"link.unset",active:!1,disabled:l||!s},{command:"link.open",active:!1,disabled:e.readonly||!s},{command:"indent.increase",active:!1,disabled:l},{command:"indent.decrease",active:!1,disabled:l},{command:"history.undo",active:!1,disabled:e.readonly||!e.canUndo},{command:"history.redo",active:!1,disabled:e.readonly||!e.canRedo},{command:"content.clear",active:!1,disabled:e.readonly},...v,{command:"table.insert",active:!1,disabled:e.readonly},{command:"fullscreen.toggle",active:!1,disabled:!1}]},mr=(e,t)=>e.length===t.length&&e.every((n,r)=>{const o=t[r];return o!==void 0&&n.command===o.command&&n.active===o.active&&n.disabled===o.disabled&&n.value===o.value}),G=(e,t,n,r)=>{var o;try{(o=e.onError)==null||o.call(e,{code:t,message:n,cause:r})}catch(a){console.error("[BridgeRTE] onError callback failed.",a)}},hr=(e,t)=>{var n;try{(n=e.onChange)==null||n.call(e,t)}catch(r){G(e,"callback.onChange","onChange callback failed.",r)}},pr=(e,t)=>{var n;try{(n=e.onContentChange)==null||n.call(e,t)}catch(r){G(e,"callback.onContentChange","onContentChange callback failed.",r)}},fr=(e,t)=>{var n;try{(n=e.onCommandStateChange)==null||n.call(e,[...t])}catch(r){G(e,"callback.onCommandStateChange","onCommandStateChange callback failed.",r)}},br=e=>{var t;try{(t=e.onFocus)==null||t.call(e)}catch(n){G(e,"callback.onFocus","onFocus callback failed.",n)}},yr=e=>{var t;try{(t=e.onBlur)==null||t.call(e)}catch(n){G(e,"callback.onBlur","onBlur callback failed.",n)}},vr=(e,t)=>{var n;try{(n=e.onReady)==null||n.call(e,t)}catch(r){G(e,"callback.onReady","onReady callback failed.",r)}},wr=({lexicalEditor:e,options:t,isDestroyed:n,canUploadMedia:r,isReadonly:o})=>{let a=!1,s=!1,l=[];const u=new Set,c=()=>{const v=[...l];u.forEach(C=>{try{C(v)}catch(N){G(t,"callback.commandStateSubscriber","Command state subscriber failed.",N)}})},p=(v=!0)=>{if(n())return;const C=l;e.getEditorState().read(()=>{l=gr({canUndo:a,canRedo:s,readonly:o(),canUploadMedia:r()})}),v&&!mr(C,l)&&(fr(t,l),c())};return{refreshCommandStates:p,getCommandStates(){return p(!1),[...l]},subscribeCommandStateChange(v){return n()?()=>{}:(u.add(v),v([...l]),()=>{u.delete(v)})},setCanUndo(v){a=v,p()},setCanRedo(v){s=v,p()},setHistoryAvailability(v,C){a=v,s=C,p()},destroy(){u.clear()}}},Cr=e=>`upload:${e}:${Date.now()}:${Math.random().toString(36).slice(2)}`,_r=e=>typeof URL.createObjectURL=="function"?URL.createObjectURL(e):e.name,ve=e=>{typeof URL.revokeObjectURL=="function"&&e.startsWith("blob:")&&URL.revokeObjectURL(e)},yt=e=>({name:e.name,mimeType:e.type||void 0,size:e.size,data:e}),Er=e=>typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError",Mr=e=>new Promise(t=>{const n=new Image,r=()=>{n.onload=null,n.onerror=null};n.onload=()=>{const o={width:n.naturalWidth||void 0,height:n.naturalHeight||void 0};r(),t(o)},n.onerror=()=>{r(),t({})},n.src=e}),kr=e=>new Promise(t=>{const n=document.createElement("video"),r=()=>{n.removeAttribute("src"),n.load(),n.onloadedmetadata=null,n.onerror=null};n.preload="metadata",n.onloadedmetadata=()=>{const o={width:n.videoWidth||void 0,height:n.videoHeight||void 0,duration:Number.isFinite(n.duration)?n.duration:void 0};r(),t(o)},n.onerror=()=>{r(),t({})},n.src=e,n.load()}),xr=(e,t)=>t.startsWith("blob:")?e==="image"?Mr(t):kr(t):Promise.resolve({}),Tr=(e,t)=>({...e,width:e.width??t.width,height:e.height??t.height,duration:e.duration??t.duration}),Nr=({container:e,lexicalEditor:t,options:n,isDestroyed:r})=>{const o=new Map;let a=0;const s=(m,f)=>{t.update(()=>{var M;(M=he(m))==null||M.updatePayload(f)})},l=m=>{let f=null;return t.update(()=>{const M=he(m);if(!M)return;const E=M.getAsset();f={mediaType:E.type,url:E.url,assetId:E.id,status:E.status,progress:E.progress,poster:E.poster,width:E.width,height:E.height,duration:E.duration,mimeType:E.mimeType,size:E.size,displayWidthPercent:E.displayWidthPercent,align:E.align,errorMessage:E.errorMessage},M.remove()}),f},u=(m,f)=>{const M=o.get(m);return(M==null?void 0:M.runId)===f},c=m=>{var f;(f=m.abortController)==null||f.abort()},p=(m,f)=>{const M=o.get(m);return M?(c(M),ve(M.previewUrl),o.delete(m),!0):!1},v=(m,f,M,E)=>{t.update(()=>{const P=de({mediaType:m,url:E,assetId:M,status:"uploading",progress:0,title:f.name,mimeType:f.type||void 0,size:f.size}),I=d.$createParagraphNode();d.$getSelection()||d.$getRoot().selectEnd(),d.$insertNodes([P,I]),I.selectStart()},{discrete:!0})},C=(m,f,M,E)=>{s(f,{mediaType:m,url:E.url,poster:E.poster,width:E.width,height:E.height,duration:E.duration,mimeType:E.mimeType,size:E.size,status:"success",progress:100,errorMessage:void 0}),ve(M)},N=(m,f,M)=>{var E;Er(M)||(s(f,{mediaType:m,status:"error",errorMessage:"上传失败"}),(E=n.onUploadError)==null||E.call(n,{assetId:f,type:m,cause:M}))},y=m=>{const f=n.uploadAdapter;if(!f)return;const M=typeof AbortController=="function"?new AbortController:null,E=a+1;a=E,m.runId=E,m.abortController=M,o.set(m.assetId,m);const P={assetId:m.assetId,signal:M==null?void 0:M.signal,onProgress:i=>{!u(m.assetId,E)||r()||s(m.assetId,{mediaType:m.type,status:"uploading",progress:i})}};let I={};const S=xr(m.type,m.previewUrl);let _;try{_=m.type==="image"?f.uploadImage(yt(m.file),P):f.uploadVideo(yt(m.file),P)}catch(i){u(m.assetId,E)&&N(m.type,m.assetId,i);return}S.then(i=>{I=i,!(r()||!u(m.assetId,E))&&(i.width===void 0&&i.height===void 0||s(m.assetId,{mediaType:m.type,width:i.width,height:i.height,duration:i.duration}))}),_.then(i=>{r()||!u(m.assetId,E)||(C(m.type,m.assetId,m.previewUrl,Tr(i,I)),o.delete(m.assetId))}).catch(i=>{r()||!u(m.assetId,E)||N(m.type,m.assetId,i)})},w=(m,f)=>{if(!n.uploadAdapter)return;const M=Cr(m),E=_r(f),P={assetId:M,type:m,file:f,previewUrl:E,runId:0,abortController:null};v(m,f,M,E),y(P)};return{pickMediaFile:m=>{if(!n.uploadAdapter)return;const f=e.ownerDocument.createElement("input");f.type="file",f.accept=m==="image"?"image/*":"video/*",f.style.display="none",f.addEventListener("change",()=>{var E;const M=(E=f.files)==null?void 0:E[0];f.remove(),M&&w(m,M)},{once:!0}),e.append(f),f.click()},uploadMediaFile:w,removeMedia(m){const f=l(m);!p(m)&&(f!=null&&f.url.startsWith("blob:"))&&ve(f.url)},retryMedia(m){const f=o.get(m);!f||!n.uploadAdapter||(c(f),s(m,{mediaType:f.type,url:f.previewUrl,status:"uploading",progress:0,errorMessage:void 0}),y(f))},destroy(){o.forEach(m=>{c(m),ve(m.previewUrl)}),o.clear()}}},en=e=>O.$createCodeNode(e),Sr={1:"h1",2:"h2",3:"h3",4:"h4",5:"h5",6:"h6"},Lr={code:"bridgerte__code-block",codeHighlight:{attr:"bridgerte__code-token bridgerte__code-token--attr","attr-name":"bridgerte__code-token bridgerte__code-token--attr-name","attr-value":"bridgerte__code-token bridgerte__code-token--attr-value",boolean:"bridgerte__code-token bridgerte__code-token--boolean",builtin:"bridgerte__code-token bridgerte__code-token--builtin","class-name":"bridgerte__code-token bridgerte__code-token--class-name",comment:"bridgerte__code-token bridgerte__code-token--comment",constant:"bridgerte__code-token bridgerte__code-token--constant",deleted:"bridgerte__code-token bridgerte__code-token--deleted",function:"bridgerte__code-token bridgerte__code-token--function",inserted:"bridgerte__code-token bridgerte__code-token--inserted",keyword:"bridgerte__code-token bridgerte__code-token--keyword",namespace:"bridgerte__code-token bridgerte__code-token--namespace",number:"bridgerte__code-token bridgerte__code-token--number",operator:"bridgerte__code-token bridgerte__code-token--operator",prefix:"bridgerte__code-token bridgerte__code-token--prefix",property:"bridgerte__code-token bridgerte__code-token--property",punctuation:"bridgerte__code-token bridgerte__code-token--punctuation",regex:"bridgerte__code-token bridgerte__code-token--regex",selector:"bridgerte__code-token bridgerte__code-token--selector",string:"bridgerte__code-token bridgerte__code-token--string",tag:"bridgerte__code-token bridgerte__code-token--tag",unchanged:"bridgerte__code-token bridgerte__code-token--unchanged",url:"bridgerte__code-token bridgerte__code-token--url",variable:"bridgerte__code-token bridgerte__code-token--variable"},heading:{h1:"bridgerte__heading bridgerte__heading--h1",h2:"bridgerte__heading bridgerte__heading--h2",h3:"bridgerte__heading bridgerte__heading--h3",h4:"bridgerte__heading bridgerte__heading--h4",h5:"bridgerte__heading bridgerte__heading--h5",h6:"bridgerte__heading bridgerte__heading--h6"},list:{checklist:"bridgerte__list bridgerte__list--todo",ol:"bridgerte__list",ul:"bridgerte__list",listitem:"bridgerte__list-item",listitemChecked:"bridgerte__list-item bridgerte__list-item--checked",listitemUnchecked:"bridgerte__list-item bridgerte__list-item--unchecked"},paragraph:"bridgerte__paragraph",quote:"bridgerte__quote",root:"bridgerte__content-root",text:{bold:"bridgerte__text--bold",code:"bridgerte__code",italic:"bridgerte__text--italic",strikethrough:"bridgerte__text--strike",underline:"bridgerte__text--underline",underlineStrikethrough:"bridgerte__text--underline-strike"},table:"bridgerte__table",tableCell:"bridgerte__table-cell",tableCellHeader:"bridgerte__table-cell bridgerte__table-cell--header",tableRow:"bridgerte__table-row",tableScrollableWrapper:"bridgerte__table-wrapper"},Rr=e=>({setBlockHeading:c=>{e.update(()=>{const p=d.$getSelection();d.$isRangeSelection(p)&&X.$setBlocksType(p,()=>re.$createHeadingNode(Sr[c]))})},setParagraphBlock:()=>{e.update(()=>{const c=d.$getSelection();d.$isRangeSelection(c)&&X.$setBlocksType(c,()=>d.$createParagraphNode())})},setQuoteBlock:()=>{e.update(()=>{const c=d.$getSelection();d.$isRangeSelection(c)&&X.$setBlocksType(c,()=>re.$createQuoteNode())})},insertDividerBlock:()=>{e.update(()=>{const c=d.$createParagraphNode();d.$insertNodes([Qe(),c]),c.selectStart()})},insertCodeBlock:c=>{e.update(()=>{const p=en(c),v=d.$createParagraphNode();d.$insertNodes([p,v]),p.selectEnd()})},setSelectedCodeBlockLanguage:c=>{e.update(()=>{const p=d.$getSelection();if(!d.$isRangeSelection(p))return;const v=p.anchor.getNode(),C=v.getKey()==="root"?v:v.getTopLevelElementOrThrow();O.$isCodeNode(C)&&C.setLanguage(c)})},clearContent:()=>{e.update(()=>{const c=d.$getRoot();c.clear(),c.append(d.$createParagraphNode())})},formatAlign:c=>{e.dispatchCommand(d.FORMAT_ELEMENT_COMMAND,c)}}),Pr=e=>({setLink:(o,a)=>{e.update(()=>{const s=d.$getSelection(),l=F.formatUrl(o),u=(a==null?void 0:a.trim())||o.trim();if(!(!d.$isRangeSelection(s)||!o.trim())){if(s.isCollapsed()){const c=F.$createLinkNode(l,{rel:"noreferrer noopener",target:"_blank"});c.append(d.$createTextNode(u)),d.$insertNodes([c]);return}F.$toggleLink(l,{rel:"noreferrer noopener",target:"_blank"})}})},unsetLink:()=>{e.update(()=>{F.$toggleLink(null)})},openSelectedLink:()=>{if(typeof window>"u")return;const o=e.getEditorState().read(()=>{const a=d.$getSelection();if(!d.$isRangeSelection(a))return null;const s=a.anchor.getNode(),l=F.$isLinkNode(s)?s:Pe.$findMatchingParent(s,F.$isLinkNode);return l?{target:l.getTarget()??"_blank",url:l.sanitizeUrl(l.getURL())}:null});o&&window.open(o.url,o.target,"noopener,noreferrer")}}),Ir=e=>({insertImage:s=>{s.url.trim()&&e.update(()=>{const l=d.$createParagraphNode();d.$insertNodes([Bn(s),l]),l.selectStart()})},insertVideo:s=>{s.url.trim()&&e.update(()=>{const l=d.$createParagraphNode();d.$insertNodes([Dn(s),l]),l.selectStart()})},resizeMedia:s=>{e.update(()=>{var l;(l=he(s.assetId))==null||l.updatePayload({displayWidthPercent:s.widthPercent})})},resetMediaSize:s=>{e.update(()=>{var l;(l=he(s))==null||l.updatePayload({displayWidthPercent:void 0})})},alignMedia:s=>{e.update(()=>{var l;(l=he(s.assetId))==null||l.updatePayload({align:s.value==="left"?void 0:s.value})})}}),$r=e=>({insertMention:n=>{e.update(()=>{const r=d.$getSelection();d.$isRangeSelection(r)&&d.$insertNodes([et(n),d.$createTextNode(" ")])})}}),Ar=e=>({clearSelectionFormat:()=>{e.update(()=>{const r=d.$getSelection();d.$isRangeSelection(r)&&(r.setFormat(0),X.$patchStyleText(r,{color:null,"background-color":null,"font-size":null,"font-family":null,"line-height":null}))})},setSelectionStyle:(r,o)=>{e.update(()=>{const a=d.$getSelection();d.$isRangeSelection(a)&&X.$patchStyleText(a,{[r]:o===""?null:o})})}}),Br=20,vt=(e,t)=>Number.isFinite(e)&&e>0?Math.min(Math.floor(e),t):1,we=e=>Number.isFinite(e)&&(e??0)>0?Math.min(Math.floor(e??1),Br):1,Ce=()=>{const e=d.$getSelection();return!d.$isRangeSelection(e)&&!D.$isTableSelection(e)?!1:D.$findCellNode(e.anchor.getNode())!==null},Dr=e=>({insertTable:(l,u)=>{const c=vt(l,J.BRIDGERTE_TABLE_INSERT_MAX_ROWS),p=vt(u,J.BRIDGERTE_TABLE_INSERT_MAX_COLS);e.dispatchCommand(D.INSERT_TABLE_COMMAND,{rows:String(c),columns:String(p),includeHeaders:{rows:!0,columns:!1}})},insertTableRow:l=>{e.update(()=>{if(!Ce())return;const u=we(l.count);for(let c=0;c<u;c+=1)D.$insertTableRowAtSelection(l.direction!=="before")})},insertTableColumn:l=>{e.update(()=>{if(!Ce())return;const u=we(l.count);for(let c=0;c<u;c+=1)D.$insertTableColumnAtSelection(l.direction!=="before")})},deleteTableRow:l=>{e.update(()=>{const u=we(l.count);for(let c=0;c<u;c+=1){if(!Ce())return;D.$deleteTableRowAtSelection()}})},deleteTableColumn:l=>{e.update(()=>{const u=we(l.count);for(let c=0;c<u;c+=1){if(!Ce())return;D.$deleteTableColumnAtSelection()}})},deleteTable:()=>{e.update(()=>{const l=d.$getSelection();if(!d.$isRangeSelection(l)&&!D.$isTableSelection(l))return;const u=D.$findTableNode(l.anchor.getNode());if(!u)return;const c=d.$createParagraphNode();u.insertAfter(c),u.remove(),c.selectStart()})}}),Or=e=>{const t=Dr(e);return{insertTable:n=>{t.insertTable(n.rows,n.cols)},insertTableRow:n=>{t.insertTableRow(n)},insertTableColumn:n=>{t.insertTableColumn(n)},deleteTableRow:n=>{t.deleteTableRow(n)},deleteTableColumn:n=>{t.deleteTableColumn(n)},deleteTable:()=>{t.deleteTable()}}},Hr={"format.bold":"bold","format.italic":"italic","format.underline":"underline","format.strike":"strikethrough","format.inlineCode":"code","format.superscript":"superscript","format.subscript":"subscript"},Fr={"list.ordered":U.INSERT_ORDERED_LIST_COMMAND,"list.unordered":U.INSERT_UNORDERED_LIST_COMMAND,"list.todo":U.INSERT_CHECK_LIST_COMMAND},zr={"indent.increase":d.INDENT_CONTENT_COMMAND,"indent.decrease":d.OUTDENT_CONTENT_COMMAND,"history.undo":d.UNDO_COMMAND,"history.redo":d.REDO_COMMAND},Wr={"format.color":"color","format.backgroundColor":"background-color","format.fontSize":"font-size","format.fontFamily":"font-family","format.lineHeight":"line-height"},Vr=({container:e,lexicalEditor:t,options:n,isDestroyed:r,isReadonly:o,reportError:a})=>{const s=Nr({container:e,lexicalEditor:t,options:n,isDestroyed:r}),l=Rr(t),u=Pr(t),c=Ir(t),p=$r(t),v=Ar(t),C=Or(t),N=()=>{var x,m;if(document.fullscreenElement){(x=document.exitFullscreen)==null||x.call(document).catch(f=>{a(n,"fullscreen.exit","Exit fullscreen failed.",f)});return}(m=e.requestFullscreen)==null||m.call(e).catch(f=>{a(n,"fullscreen.enter","Enter fullscreen failed.",f)})},y=(w=>{if(r()||o())return;const x=Hr[w.type];if(x){t.dispatchCommand(d.FORMAT_TEXT_COMMAND,x);return}const m=Fr[w.type];if(m){t.dispatchCommand(m,void 0);return}const f=zr[w.type];if(f){t.dispatchCommand(f,void 0);return}const M=Wr[w.type];if(M&&"value"in w){v.setSelectionStyle(M,w.value);return}switch(w.type){case"format.clear":v.clearSelectionFormat();return;case"block.heading":l.setBlockHeading(w.level);return;case"block.paragraph":l.setParagraphBlock();return;case"block.quote":l.setQuoteBlock();return;case"block.divider":l.insertDividerBlock();return;case"block.code":l.insertCodeBlock(w.language);return;case"block.setCodeLanguage":l.setSelectedCodeBlockLanguage(w.language);return;case"align":l.formatAlign(w.value);return;case"link.set":u.setLink(w.href,w.text);return;case"link.unset":u.unsetLink();return;case"link.open":u.openSelectedLink();return;case"mention.insert":p.insertMention(w.item);return;case"content.clear":l.clearContent();return;case"table.insert":C.insertTable(w);return;case"table.insertRow":C.insertTableRow(w);return;case"table.insertColumn":C.insertTableColumn(w);return;case"table.deleteRow":C.deleteTableRow(w);return;case"table.deleteColumn":C.deleteTableColumn(w);return;case"table.delete":C.deleteTable();return;case"media.insertImage":c.insertImage(w);return;case"media.insertVideo":c.insertVideo(w);return;case"media.pickImage":s.pickMediaFile("image");return;case"media.pickVideo":s.pickMediaFile("video");return;case"media.retry":s.retryMedia(w.assetId);return;case"media.remove":s.removeMedia(w.assetId);return;case"media.resize":c.resizeMedia(w);return;case"media.align":c.alignMedia(w);return;case"media.resetSize":c.resetMediaSize(w.assetId);return;case"fullscreen.toggle":N();return}});return y.uploadMediaFile=s.uploadMediaFile,y.destroy=()=>{s.destroy()},y},qr=300,Ur="BridgeRTE",wt=({editor:e,overflowLength:t})=>{if(t<=0)return!1;const n=d.$getSelection();if(d.$isRangeSelection(n))return X.$trimTextContentFromAnchor(e,n.anchor,t),!0;d.$getRoot().selectEnd();const r=d.$getSelection();return d.$isRangeSelection(r)?(X.$trimTextContentFromAnchor(e,r.anchor,t),!0):!1},jr=({lexicalEditor:e,options:t,isDestroyed:n,setContent:r,syncPlaceholder:o})=>{let a=0,s=null;const l=()=>{s&&(clearTimeout(s),s=null)},u=m=>{if(n())return;const f=Yt(e.getEditorState(),e);r(f),m&&hr(t,f)},c=m=>{const f=t.maxLength!==void 0&&t.maxLength>=0?t.maxLength:void 0;return{dirty:!0,plainTextLength:m,version:J.BRIDGERTE_CONTENT_VERSION,maxLength:f,isOverMaxLength:f===void 0?!1:m>f}},p=m=>{pr(t,c(m))},v=()=>{t.onChange&&(l(),s=setTimeout(()=>{u(!0)},Re.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS))},C=m=>{if(a>0){a-=1;return}p(m),v()},N=()=>e.getEditorState().read(()=>d.$getRoot().getTextContent().length),y=m=>t.maxLength===void 0||t.maxLength<0?0:m-t.maxLength,w=m=>m<=0?!1:(e.update(()=>{wt({editor:e,overflowLength:m})},{discrete:!0}),!0);return{clearContentChangeTimer:l,enforceCurrentMaxLength:()=>{t.maxLength===void 0||t.maxLength<0||e.update(()=>{const m=d.$getRoot().getTextContent().length-(t.maxLength??0);wt({editor:e,overflowLength:m})},{discrete:!0})},syncContent:u,suppressNextChange(){a+=1},syncAfterEditorUpdate(){const m=N();if(w(y(m))){o();return}o(),C(m)}}},Ie="data-language",tn="纯文本",Kr="language",Gr=new Set(["plain","plaintext","text","txt"]),Yr=new Set(K.getCodeLanguageOptions().map(([e])=>e)),Xr=[Ie,"data-lang","data-code-language","data-highlight-language","lang","language"],Jr=/^[a-z][a-z0-9_+#.-]{0,31}$/i,Qr=/^(?:language|lang)-([a-z][a-z0-9_+#.-]{0,31})$/i,Zr=/^brush:\s*([a-z][a-z0-9_+#.-]{0,31})$/i,eo=new Map([["dockerfile","docker"],["shell","shellscript"],["sh","shellscript"],["bash","shellscript"],["js","javascript"],["jsx","jsx"],["py","python"],["rb","ruby"],["rs","rust"],["ts","typescript"],["tsx","tsx"],["yml","yaml"]]),to=e=>e.type==="select",Ct=e=>e.find(t=>t.name===Kr&&to(t)),oe=e=>{const t=e==null?void 0:e.trim().toLowerCase();if(!t||!Jr.test(t))return null;if(Gr.has(t))return"";const n=eo.get(t)??K.normalizeCodeLanguage(t);return Yr.has(n)?n:null},no=e=>{for(const t of Xr){const n=oe(e.getAttribute(t));if(n)return n}return null},ro=e=>{const[,t]=e.match(Zr)??[],n=oe(t);if(n)return n;for(const r of e.split(/\s+/)){const[,o]=r.match(Qr)??[],a=oe(o);if(a)return a}return null},nn=(e=z.codeBlockLanguagePanel)=>{var t,n;return((t=Ct(e.fields))==null?void 0:t.options)??((n=Ct(z.codeBlockLanguagePanel.fields))==null?void 0:n.options)??[{label:tn,value:""}]},rn=(e,t)=>{var n,r,o;return((n=e.find(a=>a.value===t))==null?void 0:n.label)??((r=e.find(a=>oe(a.value)===oe(t)))==null?void 0:r.label)??((o=e[0])==null?void 0:o.label)??tn};nn();const oo=e=>{[...e.querySelectorAll("pre,code")].forEach(t=>{const n=no(t)??ro(t.className),r=t.tagName==="PRE"?t:t.closest("pre");r&&n&&r.setAttribute(Ie,n)})},ao=e=>{e.querySelectorAll("pre").forEach(t=>{[...t.children].forEach(r=>{r.tagName==="CODE"&&r.replaceWith(...r.childNodes)})})},so=(e,t)=>{const n=[...t.querySelectorAll("pre[data-language]")];let r=0;e.forEach(o=>{if(!O.$isCodeNode(o))return;const a=n[r];if(r+=1,!a)return;const s=a.getAttribute(Ie);s&&!o.getLanguage()&&o.setLanguage(s)})},on="one-light",Z={keyword:"#a626a4",function:"#4078f2",operator:"#0184bc",tag:"#c18401",property:"#e45649",string:"#50a14f",attrName:"#986801"},io={[Z.keyword]:"keyword",[Z.function]:"function",[Z.operator]:"operator",[Z.tag]:"tag",[Z.property]:"property",[Z.string]:"string",[Z.attrName]:"attr-name"},lo=e=>{const[,t]=e.match(/(?:^|;)color:\s*(#[0-9a-f]{3,8})/i)??[];return t?io[t.toLowerCase()]:void 0},co={...K.ShikiTokenizer,defaultLanguage:null,defaultTheme:on,$tokenize(e,t){const n=K.ShikiTokenizer.$tokenize.call(this,e,t);return e.getStyle()&&e.setStyle(""),n.map(r=>O.$isCodeHighlightNode(r)?O.$createCodeHighlightNode(r.getTextContent(),lo(r.getStyle())):r)}},uo=1200,fe=new Set,Te=new Set,Ue=new Set,Ne=[];let ee=0,ie=null,_e=!1,Ee=null,_t=!1;const go=e=>"requestIdleCallback"in window?{id:window.requestIdleCallback(e,{timeout:uo}),kind:"idle"}:{id:globalThis.setTimeout(()=>{e({didTimeout:!0,timeRemaining:()=>0})},0),kind:"timeout"},mo=e=>{if(e.kind==="idle"){window.cancelIdleCallback(e.id);return}globalThis.clearTimeout(e.id)},ho=e=>e.map(t=>t.value).filter(t=>t!==""),po=e=>{ho(e).forEach(t=>{if(fe.has(t)||Te.has(t)||Ue.has(t)||K.isCodeLanguageLoaded(t)){fe.add(t);return}Ue.add(t),Ne.push(t)})},fo=()=>{for(;Ne.length>0;){const e=Ne.shift();if(e&&(Ue.delete(e),!(fe.has(e)||Te.has(e)))){if(K.isCodeLanguageLoaded(e)){fe.add(e);continue}return e}}},bo=async()=>{if(!_t){if(!Ee){const e=K.loadCodeTheme(on);Ee=Promise.resolve(e??void 0).then(()=>{_t=!0}).catch(()=>{}).finally(()=>{Ee=null})}await Ee}},yo=e=>{ee+=1,po(e);const t=async()=>{if(!(ee<=0||_e)){_e=!0;try{if(await bo(),ee<=0)return;const r=fo();if(!r)return;Te.add(r),await Promise.resolve(K.loadCodeLanguage(r)??void 0).then(()=>{fe.add(r)}).catch(()=>{}).finally(()=>{Te.delete(r)})}finally{_e=!1,n()}}},n=()=>{ee<=0||ie!==null||_e||Ne.length===0||(ie=go(()=>{ie=null,t()}))};return n(),()=>{ee=Math.max(0,ee-1),ee===0&&ie!==null&&(mo(ie),ie=null)}},q=12,vo=6,Se=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n)),an=()=>{const e=window.visualViewport;return{left:(e==null?void 0:e.offsetLeft)??0,top:(e==null?void 0:e.offsetTop)??0,width:(e==null?void 0:e.width)??window.innerWidth,height:(e==null?void 0:e.height)??window.innerHeight}},wo=(e,t)=>({contextElement:e,getBoundingClientRect:()=>({x:t.x,y:t.y,left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height,width:t.width,height:t.height})}),Co=(e,t)=>{const n=e.getBoundingClientRect(),r=an(),o=t.getBoundingClientRect(),a=o.left+q,s=o.top+q,l=r.left+q,u=r.top+q,c=r.left+r.width-n.width-q,p=r.top+r.height-n.height-q;return{left:Se(a,l,c),top:Se(s,u,p),viewportHeight:r.height}},_o=(e,t,n)=>{const r=e.getBoundingClientRect(),o=an(),a=o.left+q,s=o.top+q,l=o.left+o.width-r.width-q,u=o.top+o.height-r.height-q;return{left:Se(t,a,l),top:Se(n,s,u),viewportHeight:o.height}},sn=e=>{var c,p;const t=document.createElement("div"),n=document.createElement("div"),r=document.createElement("div");let o;const a=()=>{t.dataset.visible="false",n.dataset.visible="false",o=void 0},s=(v,C,N)=>{n.style.left=`${v}px`,n.style.top=`${C}px`,n.style.setProperty("--bridgerte-dialog-visible-height",`${N}px`)},l=async()=>{if(!o){const N=Co(n,e.root);s(N.left,N.top,N.viewportHeight);return}const v=await V.computePosition(wo(e.root,o),n,{placement:"bottom-start",strategy:"fixed",platform:V.platform,middleware:[V.offset(vo),V.flip(),V.shift({padding:q})]}),C=_o(n,v.x,v.y);s(C.left,C.top,C.viewportHeight)},u=v=>{o=v,v?n.style.setProperty("--bridgerte-dialog-anchor-width",`${v.width}px`):n.style.removeProperty("--bridgerte-dialog-anchor-width"),l(),t.dataset.visible="true",n.dataset.visible="true"};return t.className="bridgerte__dialog-backdrop",t.dataset.visible="false",n.className=`bridgerte__dialog ${e.className}`,n.dataset.visible="false",r.className="bridgerte__dialog-content",n.append(r),e.root.append(t,n),t.addEventListener("click",()=>{var v;(v=e.onBackdropClick)==null||v.call(e),a()}),(c=window.visualViewport)==null||c.addEventListener("resize",l),(p=window.visualViewport)==null||p.addEventListener("scroll",l),window.addEventListener("resize",l),{element:n,content:r,open:u,close:a,destroy(){var v,C;a(),(v=window.visualViewport)==null||v.removeEventListener("resize",l),(C=window.visualViewport)==null||C.removeEventListener("scroll",l),window.removeEventListener("resize",l),t.remove(),n.remove()}}},Le=e=>typeof requestAnimationFrame=="function"?requestAnimationFrame(e):window.setTimeout(e,0),tt=e=>{if(typeof cancelAnimationFrame=="function"){cancelAnimationFrame(e);return}window.clearTimeout(e)},W=(e,t={})=>{let n=null;const r=s=>{const l=n??e;if(!(!s&&!n)){if(s){l.dataset.pressed="true";return}delete l.dataset.pressed,n=null}},o=s=>{if(s.pointerType==="mouse")return;const l=s.target;n=l instanceof HTMLElement&&t.targetSelector?l.closest(t.targetSelector):e,n&&r(!0)},a=()=>{r(!1)};return e.addEventListener("pointerdown",o),e.addEventListener("pointerup",a),e.addEventListener("pointercancel",a),e.addEventListener("lostpointercapture",a),()=>{a(),e.removeEventListener("pointerdown",o),e.removeEventListener("pointerup",a),e.removeEventListener("pointercancel",a),e.removeEventListener("lostpointercapture",a)}},Eo=(e,t,n)=>{e.update(t,{tag:d.SKIP_SCROLL_INTO_VIEW_TAG,onUpdate:n})},Et="language",Mo="bridgerte-code-block-language",Mt=8;let kt=0;const ko=()=>(kt+=1,`${Mo}-${kt}`),xo=(e,t,n)=>{const r=e.querySelector(".bridgerte__code-block-control-label");e.dataset.language=n??"",r&&(r.textContent=rn(t,n))},To=(e,t)=>{const n=document.createElement("button"),r=document.createElement("span"),o=document.createElement("span");return n.type="button",n.className="bridgerte__code-block-control",n.contentEditable="false",n.dataset.language=t??"",n.setAttribute("aria-label","选择代码块语言"),r.className="bridgerte__code-block-control-label",r.textContent=rn(e,t),o.className="bridgerte__code-block-control-arrow",n.append(r,o),n},No=e=>{const t=document.createElement("div"),n=e.root.querySelector(".bridgerte__content")??e.root,r=Ut.resolvePayloadPanelSchema(e.languagePanel??z.codeBlockLanguagePanel,e.payloadPanelConfig),o=nn(r);let a=null,s=null,l=null;const u=new Map,c=new Map,p=()=>{l??(l=yo(o))},v=()=>{a==null||a.close()},C=(i,g)=>{e.isReadonly()||Eo(e.editor,()=>{const h=d.$getNodeByKey(i);O.$isCodeNode(h)&&h.setLanguage(g)})},N=(i,g)=>{Le(()=>{C(i,g)})},y=(i,g,h)=>{var b;return((b=e.onRequest)==null?void 0:b.call(e,{id:ko(),readonly:e.isReadonly(),menuId:"code-block-language",command:{type:"block.setCodeLanguage",language:h},panel:r,anchorRect:{x:g.left,y:g.top,width:g.width,height:g.height},currentValues:{[Et]:h},submit:T=>{v(),N(i,T[Et]??"")},cancel:v}))===!0},w=(i,g)=>{const h=e.root.getBoundingClientRect(),b=g.getBoundingClientRect(),T=b.bottom<h.top||b.top>h.bottom;i.hidden=T,i.style.transform=`translate(${b.left-h.left+Mt}px, ${b.top-h.top+Mt}px)`},x=i=>{var $;const g=e.editor.getElementByKey(i);if(!g){($=u.get(i))==null||$.remove(),u.delete(i);return}p(),g.dataset.lexicalKey=i;const h=g.getAttribute("data-language"),b=u.get(i);if(b){xo(b,o,h),w(b,g);return}const T=To(o,h),R=W(T);T.dataset.lexicalKey=i,u.set(i,T),c.set(T,R),t.append(T),w(T,g)},m=()=>{s=null,u.forEach((i,g)=>{x(g)})},f=()=>{s===null&&(s=Le(m))},M=(i,g)=>{const h=i.getBoundingClientRect(),b=i.dataset.language??"";if(y(g,h,b))return;if(e.isReadonly()){v();return}a||(a=sn({root:e.root,className:"bridgerte__code-block-menu",onBackdropClick:v}));const T=document.createElement("div");a.content.replaceChildren(),a.element.style.minWidth="180px",T.className="bridgerte__code-block-menu-list",o.forEach(R=>{const $=document.createElement("button");$.type="button",$.className="bridgerte__menu-item bridgerte__code-block-menu-item",$.textContent=R.label,W($),$.addEventListener("pointerdown",B=>{B.preventDefault()}),$.addEventListener("click",()=>{v(),N(g,R.value)}),T.append($)}),a.content.append(T),a.open({x:h.left,y:h.top,width:180,height:h.height})};t.className="bridgerte__code-block-controls-layer",e.root.append(t);const E=e.editor.registerMutationListener(O.CodeNode,i=>{i.forEach((g,h)=>{if(g==="destroyed"){const b=u.get(h);if(b){const T=c.get(b);T==null||T(),c.delete(b),b.remove()}u.delete(h);return}x(h)})}),P=e.editor.registerUpdateListener(f),I=i=>{const g=i.target;if(!(g instanceof HTMLElement))return;const h=g.closest(".bridgerte__code-block-control");if(!(h instanceof HTMLElement))return;const b=h.dataset.lexicalKey;b&&(i.preventDefault(),i.stopPropagation(),M(h,b))},S=i=>{const g=i.target;g instanceof HTMLElement&&g.closest(".bridgerte__code-block-control")&&i.preventDefault()},_=i=>{const g=i.target;if(!(g instanceof HTMLElement))return;if(!g.closest(".bridgerte__code-block")){v();return}const h=g.closest(".bridgerte__code-block");if(!h||h.textContent)return;const b=h.dataset.lexicalKey;b&&(e.editor.update(()=>{const T=d.$getNodeByKey(b);O.$isCodeNode(T)&&T.selectEnd()}),e.editor.focus())};return t.addEventListener("pointerdown",S),t.addEventListener("click",I),n.addEventListener("pointerdown",_),n.addEventListener("scroll",f,{passive:!0}),window.addEventListener("resize",f),{destroy(){E(),P(),l==null||l(),l=null,s!==null&&(tt(s),s=null),t.removeEventListener("pointerdown",S),t.removeEventListener("click",I),n.removeEventListener("pointerdown",_),n.removeEventListener("scroll",f),window.removeEventListener("resize",f),u.forEach(i=>{var g;(g=c.get(i))==null||g(),i.remove()}),u.clear(),c.clear(),t.remove(),a==null||a.destroy(),a=null}}},ln=e=>{const t=o=>{const a=e.getBlockFromTarget(o.target);if(a){e.activateBlock(a);return}e.clearBlock()},n=o=>{const a=e.getBlockFromTarget(o.target);a&&e.activateBlock(a)},r=o=>{const a=o.target;a instanceof Node&&e.root.contains(a)||e.clearBlock()};return e.content.addEventListener("pointerdown",t),e.content.addEventListener("focusin",n),document.addEventListener("pointerdown",r),{destroy(){e.content.removeEventListener("pointerdown",t),e.content.removeEventListener("focusin",n),document.removeEventListener("pointerdown",r)}}},$e=(e,t={})=>e.map(n=>{var a;const r=(a=t.menuLabels)==null?void 0:a[n.id],o=n.payloadPanel?Ut.resolvePayloadPanelSchema(n.payloadPanel,t.payloadPanelConfig):void 0;return{...n,...r===void 0?{}:{label:r},...o===void 0?{}:{payloadPanel:o}}}),cn=(e,t)=>{const n=t.find(r=>r.command===e.command.type);return(n==null?void 0:n.value)===void 0?void 0:{value:String(n.value)}},dn=(e,t)=>{const n=t.find(o=>z.isCommandStateForCommand(e.command,o)),r=t.find(o=>o.command===e.command.type);return{active:(n==null?void 0:n.active)===!0,disabled:e.payloadPanel?(r==null?void 0:r.disabled)===!0:(n==null?void 0:n.disabled)===!0||(r==null?void 0:r.disabled)===!0}},be=["media-resize-20","media-resize-50","media-resize-100"],So=["media-align-left","media-align-center","media-align-right","|",...be,"|","media-remove"],Lo=["media-retry","|","media-remove"],Ro=[{id:"media-align-left",command:{type:"media.align",assetId:"",value:"left"},label:"左",icon:"align-left"},{id:"media-align-center",command:{type:"media.align",assetId:"",value:"center"},label:"中",icon:"align-center"},{id:"media-align-right",command:{type:"media.align",assetId:"",value:"right"},label:"右",icon:"align-right"},{id:"media-resize-20",command:{type:"media.resize",assetId:"",widthPercent:20},label:"20%",icon:"media-resize-20"},{id:"media-resize-50",command:{type:"media.resize",assetId:"",widthPercent:50},label:"50%",icon:"media-resize-50"},{id:"media-resize-100",command:{type:"media.resize",assetId:"",widthPercent:100},label:"100%",icon:"media-resize-100"},{id:"media-retry",command:{type:"media.retry",assetId:""},label:"重试",icon:"refresh-cw"},{id:"media-remove",command:{type:"media.remove",assetId:""},label:"删除",icon:"trash-2"}],un=e=>be.includes(e),Po=e=>typeof e=="object"&&Array.isArray(e.menuKeys),Io=e=>new Set(e.flatMap(t=>t==="|"?[]:typeof t=="string"?[t]:Po(t)?[t.key,...t.menuKeys]:[])),Oe=e=>typeof e=="string"&&un(e),$o=e=>{const t=e.findIndex(r=>r==="media-remove"),n=t===-1?e.length:t;return[...e.slice(0,n),"|",...be,"|",...e.slice(n)]},Ao=e=>{const t=Io(e);if(be.filter(o=>!t.has(o)).length===0)return e;const r=e.findIndex(Oe);return r===-1?$o(e):[...e.slice(0,r).filter(o=>!Oe(o)),...be,...e.slice(r+1).filter(o=>!Oe(o))]},Bo=e=>{var r;const t=(e==null?void 0:e.toolbarKeys)??So;return{...e,toolbarKeys:Ao(t),excludeKeys:(r=e==null?void 0:e.excludeKeys)==null?void 0:r.filter(o=>!un(o))}},Do=(e,t)=>{switch(e.command.type){case"media.retry":return{...e.command,assetId:t};case"media.remove":return{...e.command,assetId:t};case"media.resize":return{...e.command,assetId:t};case"media.align":return{...e.command,assetId:t};default:return null}},Oo=(e,t,n)=>e.command.type==="media.resize"?e.command.widthPercent===t:e.command.type==="media.align"&&e.command.value===n,gn=(e,t={})=>{const n=$e(Ro,{menuLabels:t.menuLabels}),r=e==="error"?{toolbarKeys:Lo}:Bo(t.config);return z.resolveToolbarMenu(r,n)},le=8,ue="bridgerte__media-controls-button",Ho=e=>e.querySelector(".bridgerte__content")??e,Fo=e=>e instanceof Element?e.closest(".bridgerte__media"):null,zo=(e,t=!1)=>{const n=document.createElement("button");return n.type="button",n.className=ue,n.textContent=e.label,n.dataset.menuItemId=e.id,n.dataset.action=e.id.replace(/^media-/,""),t&&(n.dataset.active="true"),n.setAttribute("aria-label",e.label),n},mn=e=>e.flatMap(t=>t.type==="button"?[t.item]:t.type==="group"?t.items:[]),Wo=(e,t,n,r)=>{if(t.type==="separator"){const a=document.createElement("span");a.className="bridgerte__media-controls-separator",a.dataset.separatorId=t.key,a.setAttribute("aria-hidden","true"),e.append(a);return}(t.type==="button"?[t.item]:t.items).forEach(a=>{e.append(zo(a,Oo(a,n,r)))})},Vo=(e,t,n)=>{const r=document.createElement("div"),o=e.dataset.status,a=Number(e.dataset.displayWidthPercent??t),s=e.dataset.align??"left",l=gn(o,{config:n.mediaControlsConfig,menuLabels:n.menuLabels});return r.className="bridgerte__media-controls",r.contentEditable="false",r.setAttribute("aria-label","媒体操作"),r.dataset.status=o??"success",r.dataset.displayWidthPercent=e.dataset.displayWidthPercent??"",r.dataset.align=e.dataset.align??"",r.dataset.menuItemIds=mn(l).map(u=>u.id).join("|"),l.forEach(u=>{Wo(r,u,a,s)}),r},qo=e=>{const t=document.createElement("div"),n=Ho(e.root),r=new Map,o=new Map,a=new Map;let s=null,l=null,u=!1,c=null;const p=i=>{var h;const g=r.get(i);g&&((h=o.get(g))==null||h(),o.delete(g),g.remove(),r.delete(i),c===i&&(c=null))},v=(i,g)=>g.dataset.status==="error"||c===i,C=(i,g)=>{const h=e.root.getBoundingClientRect(),b=g.getBoundingClientRect(),T=b.bottom<h.top||b.top>h.bottom,R=Math.max(le,h.width-i.offsetWidth-le),$=Math.min(Math.max(b.left-h.left+le,le),R),B=Math.max(le,b.top-h.top-i.offsetHeight-le);i.hidden=T,i.style.transform=`translate(${$}px, ${B}px)`},N=i=>{const g=e.editor.getElementByKey(i);if(!g){p(i);return}g.dataset.lexicalKey=i,a.set(g,i);const h=r.get(i);if(!v(i,g)){p(i);return}if(h){const R=g.dataset.status==="error",$=h.querySelector('[data-action="retry"]')!==null,B=g.dataset.displayWidthPercent??"",j=g.dataset.align??"";if(R===$&&h.dataset.displayWidthPercent===B&&h.dataset.align===j){C(h,g);return}p(i)}const b=Vo(g,e.defaultWidthPercent,e),T=W(b,{targetSelector:`.${ue}`});b.dataset.lexicalKey=i,b.dataset.assetId=g.dataset.assetId,r.set(i,b),o.set(b,T),t.append(b),C(b,g)},y=()=>{s=null,a.forEach((i,g)=>{e.root.contains(g)||(a.delete(g),p(i))}),e.root.querySelectorAll(".bridgerte__media").forEach(i=>{const g=i.dataset.lexicalKey;g&&(a.set(i,g),N(g))}),r.forEach((i,g)=>{N(g)}),c!==null&&N(c)},w=()=>{s===null&&(s=Le(y))},x=(i,g)=>{const h=g.dataset.assetId,b=mn(gn(g.dataset.status,{config:e.mediaControlsConfig,menuLabels:e.menuLabels})).find(R=>R.id===i.dataset.menuItemId);if(!h||!b)return;const T=Do(b,h);T&&e.executeCommand(T)},m=i=>{if(!i){const b=c;c=null,b!==null&&N(b);return}const g=i.dataset.lexicalKey?i.dataset.lexicalKey:a.get(i)??null;if(!g||c===g)return;const h=c;c=g,h!==null&&N(h),N(g)},f=i=>{const g=i.target;if(!(g instanceof HTMLElement))return;const h=g.closest(`.${ue}`);h&&(i.preventDefault(),l=i.pointerType==="mouse"?null:h)},M=i=>{if(i.pointerType==="mouse"||!l)return;const g=i.target,h=g instanceof HTMLElement?g.closest(".bridgerte__media-controls"):null,b=g instanceof HTMLElement?g.closest(`.${ue}`):null;b===l&&h&&(i.preventDefault(),i.stopPropagation(),x(b,h),u=!0),l=null},E=()=>{l=null},P=i=>{if(u){u=!1,i.preventDefault(),i.stopPropagation();return}const g=i.target;if(!(g instanceof HTMLElement))return;const h=g.closest(`.${ue}`),b=g.closest(".bridgerte__media-controls");!h||!b||(i.preventDefault(),i.stopPropagation(),x(h,b))},I=e.editor.registerMutationListener(ce,i=>{i.forEach((g,h)=>{if(g==="destroyed"){p(h);return}N(h)})}),S=e.editor.registerUpdateListener(w),_=ln({root:e.root,content:n,getBlockFromTarget:Fo,activateBlock:m,clearBlock:()=>m(null)});return t.className="bridgerte__media-controls-layer",e.root.append(t),t.addEventListener("pointerdown",f),t.addEventListener("pointerup",M),t.addEventListener("pointercancel",E),t.addEventListener("click",P),n.addEventListener("scroll",w,{passive:!0}),window.addEventListener("resize",w),{destroy(){I(),S(),s!==null&&(tt(s),s=null),t.removeEventListener("pointerdown",f),t.removeEventListener("pointerup",M),t.removeEventListener("pointercancel",E),t.removeEventListener("click",P),_.destroy(),n.removeEventListener("scroll",w),window.removeEventListener("resize",w),r.forEach(i=>{var g;(g=o.get(i))==null||g(),i.remove()}),r.clear(),o.clear(),a.clear(),t.remove()}}},Uo=["width","height"],Y=(e,t)=>{var r;const n=(r=e[t])==null?void 0:r.trim();return n||void 0},je=(e,t)=>{const n=Number.parseInt(e[t]??"",10);return Number.isFinite(n)&&n>0?n:void 0},xt=(e,t)=>Uo.reduce((n,r)=>{const o=je(t,r);return o===void 0?n:{...n,[r]:o}},e),jo=(e,t)=>{if(e.type==="format.color"||e.type==="format.backgroundColor"||e.type==="format.fontSize"||e.type==="format.fontFamily"||e.type==="format.lineHeight")return t.value!==void 0?{...e,value:t.value}:e;if(e.type==="link.set"){const n=Y(t,"href"),r=Y(t,"text");return n?{...e,href:n,text:r}:null}if(e.type==="block.code")return t.language?{type:"block.code",language:t.language}:e;if(e.type==="block.setCodeLanguage")return t.language!==void 0?{...e,language:t.language}:e;if(e.type==="table.insert"){const n=je(t,"rows"),r=je(t,"cols");return n&&r?{type:"table.insert",rows:n,cols:r}:null}if(e.type==="media.insertImage"){const n=Y(t,"url");return n?xt({...e,url:n,alt:Y(t,"alt"),title:Y(t,"title")},t):null}if(e.type==="media.insertVideo"){const n=Y(t,"url");return n?xt({...e,url:n,poster:Y(t,"poster"),title:Y(t,"title")},t):null}return e},te=e=>Math.min(Math.max(Math.round(e),0),255),Ke=({r:e,g:t,b:n})=>`#${[e,t,n].map(r=>te(r).toString(16).padStart(2,"0")).join("")}`,hn=e=>{const n=e.trim().match(/^#([0-9a-f]{6})$/i);if(!n)return null;const r=n[1]??"";return{r:Number.parseInt(r.slice(0,2),16),g:Number.parseInt(r.slice(2,4),16),b:Number.parseInt(r.slice(4,6),16)}},Ko=e=>{const t=e.trim().match(/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i);return t?{r:te(Number(t[1])),g:te(Number(t[2])),b:te(Number(t[3]))}:null},He=e=>{const t=hn(e)??Ko(e);return t?Ke(t):null},pn=e=>Math.min(Math.max(e,0),1),Go=({r:e,g:t,b:n})=>{const r=te(e)/255,o=te(t)/255,a=te(n)/255,s=Math.max(r,o,a),l=Math.min(r,o,a),u=s-l;let c=0;return u!==0&&(s===r?c=60*((o-a)/u%6):s===o?c=60*((a-r)/u+2):c=60*((r-o)/u+4)),{h:c<0?c+360:c,s:s===0?0:u/s,v:s}},Tt=({h:e,s:t,v:n})=>{const r=n*t,o=r*(1-Math.abs(e/60%2-1)),a=n-r;let s=0,l=0,u=0;return e<60?(s=r,l=o):e<120?(s=o,l=r):e<180?(l=r,u=o):e<240?(l=o,u=r):e<300?(s=o,u=r):(s=r,u=o),{r:(s+a)*255,g:(l+a)*255,b:(u+a)*255}},Yo=({h:e,s:t})=>{const n=e*Math.PI/180,r=pn(t)*50;return{x:50+Math.cos(n)*r,y:50+Math.sin(n)*r}},Nt=(e,t)=>{const n=t.getBoundingClientRect(),r=n.left+n.width/2,o=n.top+n.height/2,a=e.clientX-r,s=e.clientY-o,l=Math.min(Math.sqrt(a*a+s*s),n.width/2),u=Math.atan2(s,a)*180/Math.PI;return{h:u<0?u+360:u,s:pn(l/(n.width/2)),v:1}},Xo=["#000000","#ffffff"],Jo=e=>{var t;return(t=e.options)!=null&&t.length?e.options:Xo.map(n=>({label:n,value:n}))},fn=()=>{const e=document.createElement("section");return e.className="bridgerte__payload-panel-field",e},Qo=(e,t,n)=>{const r=fn(),o=document.createElement("div");return o.className="bridgerte__payload-panel-option-list",e.options.forEach(a=>{const s=document.createElement("button");s.type="button",s.className="bridgerte__payload-panel-option",s.textContent=a.label,s.dataset.bridgertePayloadOption=a.value,s.dataset.active=t[e.name]===a.value?"true":"false",W(s),s.addEventListener("pointerdown",l=>{l.preventDefault()}),s.addEventListener("click",()=>{n({...t,[e.name]:a.value})}),o.append(s)}),r.append(o),r},Zo=(e,t,n)=>{const r=fn(),o=document.createElement("div"),a=document.createElement("div"),s=document.createElement("span"),l=document.createElement("div"),u=document.createElement("div"),c=Jo(e),p=c.length===2;let v={h:0,s:0,v:1},C=null;const N=m=>{const f=He(m);return!!(f&&c.some(M=>He(M.value)===f))},y=(m,f=!0)=>{const M=He(m);if(!M)return;t[e.name]=M,u.style.background=M,v=Go(hn(M)??{r:255,g:255,b:255});const E=Yo(v);a.dataset.active=f?"true":"false",u.dataset.empty="false",f&&(s.style.left=`${E.x}%`,s.style.top=`${E.y}%`)},w=()=>{const m=t[e.name];m&&n({...t,[e.name]:m})};r.className="bridgerte__payload-panel-field",o.className="bridgerte__payload-panel-color-picker",a.className="bridgerte__payload-panel-color-wheel",a.setAttribute("aria-label",`${e.label}选择区域`),s.className="bridgerte__payload-panel-color-wheel-handle",l.className="bridgerte__payload-panel-color-actions",l.dataset.layout=p?"sides":"grid",u.className="bridgerte__payload-panel-color-preview",u.dataset.empty="true",a.append(s),c.forEach(m=>{const f=document.createElement("button"),M=m.value;f.type="button",f.className="bridgerte__payload-panel-color-swatch",f.dataset.value=M,f.style.background=M,f.setAttribute("aria-label",`选择颜色 ${m.label}`),W(f),f.addEventListener("pointerdown",E=>{E.preventDefault()}),f.addEventListener("click",()=>{y(M,!1),w()}),l.append(f)}),a.addEventListener("pointerdown",m=>{C=m.pointerId,a.setPointerCapture(m.pointerId),v=Nt(m,a),y(Ke(Tt(v))),m.preventDefault()}),a.addEventListener("pointermove",m=>{C===m.pointerId&&(v=Nt(m,a),y(Ke(Tt(v))))}),a.addEventListener("pointerup",m=>{C===m.pointerId&&(C=null,a.releasePointerCapture(m.pointerId),w())}),a.addEventListener("pointercancel",m=>{C===m.pointerId&&(C=null,a.releasePointerCapture(m.pointerId))});const x=t[e.name];return x&&y(x,!(p&&N(x))),o.append(a,l),r.append(o,u),r},ea=(e,t,n)=>{const r=document.createElement("label"),o=document.createElement("input");return r.className="bridgerte__payload-panel-text-field",r.textContent=e.label,o.type=e.name==="href"||e.name==="url"?"url":"text",o.className="bridgerte__payload-panel-text-input",o.value=t[e.name]??"",o.placeholder=e.placeholder??"",o.spellcheck=!1,o.addEventListener("input",()=>{t[e.name]=o.value}),o.addEventListener("keydown",a=>{a.key==="Enter"&&(a.preventDefault(),n(t))}),r.append(o),r},ta=(e,t,n)=>{const r=document.createElement("label"),o=document.createElement("input");return r.className="bridgerte__payload-panel-text-field",r.textContent=e.label,o.type="number",o.className="bridgerte__payload-panel-text-input",o.value=t[e.name]??"",o.placeholder=e.placeholder??"",e.min!==void 0&&(o.min=String(e.min)),e.max!==void 0&&(o.max=String(e.max)),e.step!==void 0&&(o.step=String(e.step)),o.addEventListener("input",()=>{t[e.name]=o.value}),o.addEventListener("keydown",a=>{a.key==="Enter"&&(a.preventDefault(),n(t))}),r.append(o),r},na=({field:e,values:t,onSubmit:n})=>e.type==="color"?Zo(e,t,n):e.type==="text"?ea(e,t,n):e.type==="number"?ta(e,t,n):Qo(e,t,n),ra=e=>{var t,n,r;return e.defaultValue??(e.type==="select"?(t=e.options[0])==null?void 0:t.value:void 0)??(e.type==="color"?(r=(n=e.options)==null?void 0:n[0])==null?void 0:r.value:void 0)??""},oa=(e,t)=>(t==null?void 0:t[e.name])??(e.type==="color"?"":ra(e)),St=e=>e.some(t=>t.type==="text"||t.type==="number"),aa=e=>{const t=e.querySelector(".bridgerte__payload-panel-text-input");queueMicrotask(()=>{t==null||t.focus(),t==null||t.select()})},sa=(e,t,n)=>{const r=document.createElement("div"),o=document.createElement("span"),a=(n==null?void 0:n(e))??null;if(r.className="bridgerte__payload-panel-title",o.textContent=e.panel.title,r.append(o),a){const s=document.createElement("button");s.type="button",s.className="bridgerte__payload-panel-clear",s.textContent="清除",s.setAttribute("aria-label",`清除${e.panel.title}`),W(s),s.addEventListener("pointerdown",l=>{l.preventDefault()}),s.addEventListener("click",()=>{t(a)}),r.append(s)}return r},ia=e=>e==="font-size"||e==="font-family"||e==="line-height"?"180px":"220px",la=3,ca=3,da=10,bn=10,ua=16,ga=2,ma=24,ha=()=>{var e;return typeof window<"u"&&((e=window.matchMedia)==null?void 0:e.call(window,"(hover: hover) and (pointer: fine)").matches)===!0},ge=(e,t)=>{const n=Number.parseInt(e??"",10);return Number.isFinite(n)?Math.min(Math.max(n,t.min),t.max):t.defaultValue},pa=(e,t)=>e.type==="number"&&e.name===t,Lt=(e,t)=>typeof e=="number"&&Number.isFinite(e)&&e>0?Math.floor(e):t,Rt=(e,t,n,r)=>{const o=e.find(p=>pa(p,t)),a=Lt(o==null?void 0:o.min,1),s=Lt(o==null?void 0:o.max,n),l=Math.max(a,s),u=Math.min(Math.max(r,a),l),c=ge(o==null?void 0:o.defaultValue,{min:a,max:l,defaultValue:u});return{min:a,max:l,defaultValue:c}},yn=e=>({rows:Rt(e,"rows",J.BRIDGERTE_TABLE_INSERT_MAX_ROWS,la),cols:Rt(e,"cols",J.BRIDGERTE_TABLE_INSERT_MAX_COLS,ca)}),fa=e=>{const t=Math.min(e.cols.max,bn);return`${t*ua+Math.max(t-1,0)*ga+ma}px`},ba=({fields:e,values:t,onSubmit:n})=>{const r=yn(e),o=document.createElement("section"),a=document.createElement("div"),s=document.createElement("div"),l=[],u=ha(),c=Math.min(r.rows.max,da),p=Math.min(r.cols.max,bn),v={...r.rows,max:c,defaultValue:Math.min(r.rows.defaultValue,c)},C={...r.cols,max:p,defaultValue:Math.min(r.cols.defaultValue,p)};let N=ge(t.rows,v),y=ge(t.cols,C),w=null;const x=(S,_)=>{N=S,y=_,t.rows=String(S),t.cols=String(_),s.textContent=`${S} x ${_}`,l.forEach(i=>{const g=Number.parseInt(i.dataset.rows??"0",10),h=Number.parseInt(i.dataset.cols??"0",10);i.dataset.active=String(g<=S&&h<=_)})},m=S=>{var _;return((_=document.elementFromPoint(S.clientX,S.clientY))==null?void 0:_.closest(".bridgerte__payload-panel-table-cell"))??null},f=S=>{if(!S)return;const _=ge(S.dataset.rows,v),i=ge(S.dataset.cols,C);x(_,i)},M=()=>{n({...t,rows:String(N),cols:String(y)})},E=()=>{w=null},P=()=>{window.setTimeout(E,0)},I=(S,_)=>{if(S.detail>0&&w!==_){S.preventDefault(),S.stopPropagation();return}E(),f(_),M()};for(let S=1;S<=c;S+=1)for(let _=1;_<=p;_+=1){const i=document.createElement("button");i.type="button",i.className="bridgerte__payload-panel-table-cell",i.dataset.rows=String(S),i.dataset.cols=String(_),i.setAttribute("aria-label",`插入 ${S} 行 ${_} 列表格`),W(i),i.addEventListener("pointerdown",g=>{w=i,f(i),g.preventDefault()}),i.addEventListener("pointerup",P),i.addEventListener("pointercancel",E),i.addEventListener("click",g=>{I(g,i)}),u&&i.addEventListener("pointerenter",()=>{f(i)}),l.push(i),a.append(i)}return o.className="bridgerte__payload-panel-field",a.className="bridgerte__payload-panel-table-grid",a.setAttribute("aria-label","选择表格行列"),a.style.setProperty("--bridgerte-payload-panel-table-cols",String(p)),s.className="bridgerte__payload-panel-table-status",s.setAttribute("aria-live","polite"),a.addEventListener("pointermove",S=>{u||f(m(S))}),x(N,y),o.append(a,s),o},ya="bridgerte-payload-panel";let Pt=0;const va=()=>(Pt+=1,`${ya}-${Pt}`),Me=e=>e.panel.id==="table-insert",wa=(e,t)=>{const n=document.createElement("button");return n.type="button",n.className="bridgerte__payload-panel-submit",n.textContent="应用",W(n),n.addEventListener("pointerdown",r=>{r.preventDefault()}),n.addEventListener("click",()=>{t(e)}),n},Ca=e=>{let t=null,n={};const r=sn({root:e.editorRoot,className:"bridgerte__payload-panel",onBackdropClick:()=>{o()}});function o(){t=null,n={},r.close(),r.content.replaceChildren()}const a=c=>{var v;if(!t||t.readonly||e.isReadonly())return;const p=jo(t.command,c);p&&((v=e.restoreEditorFocus)==null||v.call(e,()=>{o(),e.isReadonly()||e.executeCommand(p)}))},s=c=>{var p;!t||t.readonly||e.isReadonly()||(p=e.restoreEditorFocus)==null||p.call(e,()=>{o(),e.isReadonly()||e.executeCommand(c)})},l=c=>{n=c.panel.fields.reduce((v,C)=>(v[C.name]=oa(C,c.currentValues),v),{});const p=Me(c)?fa(yn(c.panel.fields)):ia(c.panel.id);r.element.style.width=`min(${p}, calc(100vw - 24px))`,r.content.append(sa(c,s,e.getClearCommand)),Me(c)?r.content.append(ba({fields:c.panel.fields,values:n,onSubmit:a})):c.panel.fields.forEach(v=>{r.content.append(na({field:v,values:n,onSubmit:a}))}),!Me(c)&&St(c.panel.fields)&&r.content.append(wa(n,a)),r.open(c.anchorRect),!Me(c)&&St(c.panel.fields)&&aa(r.content)};return{open:c=>{var C;o();const p={...c,id:va(),readonly:e.isReadonly(),submit:a,cancel:o};if(t=p,((C=e.onRequest)==null?void 0:C.call(e,p))!==!0){if(p.readonly){o();return}l(c)}},close:o,destroy(){o(),r.destroy()}}},me="bridgerte__table-controls-button",_a=["table-insert-row-after","table-delete-row","table-insert-column-after","table-delete-column","table-delete"],Ea=()=>{const e=new Map(z.defaultMenuSchema.map(t=>[t.id,t]));return _a.map(t=>z.tableHeaderMenuItems.find(n=>n.id===t)??e.get(t)).filter(t=>t!==void 0)},vn=Ea(),Ma=new Map(vn.map(e=>[e.id,e])),ka=e=>e.matches(".bridgerte__table")?e:e.querySelector(".bridgerte__table")??e,xa=(e,t)=>e.classList.contains("bridgerte__table-wrapper")?e:t.parentElement instanceof HTMLElement?t.parentElement:t,Ta=e=>e.querySelector(".bridgerte__content")??e,Na=e=>e instanceof Element?e.closest(".bridgerte__table-wrapper"):null,Sa=e=>{const t=e.getFirstChild();if(!D.$isTableRowNode(t))return null;const n=t.getFirstChild();return D.$isTableCellNode(n)?n:null},La=e=>{const t=document.createElement("button");return t.type="button",t.className=me,t.textContent=e.label,t.dataset.menuItemId=e.id,t.setAttribute("aria-label",e.label),t},Ra=()=>{const e=document.createElement("div");return e.className="bridgerte__table-controls",e.contentEditable="false",e.setAttribute("aria-label","表格操作"),vn.forEach(t=>{e.append(La(t))}),e},Pa=e=>{const t=document.createElement("div"),n=Ta(e.root),r=new Map,o=new Map,a=new Map;let s=null,l=null,u=!1,c=null;const p=(h,b)=>{const T=e.root.getBoundingClientRect(),R=b.getBoundingClientRect(),$=R.bottom<T.top||R.top>T.bottom,B=Math.max(8,T.width-h.offsetWidth-8),j=Math.min(Math.max(R.left-T.left+8,8),B),L=Math.max(8,R.top-T.top-h.offsetHeight-8);h.hidden=$,h.style.transform=`translate(${j}px, ${L}px)`},v=h=>c===h,C=h=>{const b=e.editor.getElementByKey(h);if(!b){N(h);return}b.dataset.lexicalKey=h;const T=ka(b),R=xa(b,T);a.set(R,h);const $=r.get(h);if(!v(h)){N(h);return}if($){p($,R);return}const B=Ra(),j=W(B,{targetSelector:`.${me}`});B.dataset.lexicalKey=h,r.set(h,B),o.set(B,j),t.append(B),p(B,R)},N=h=>{var T;const b=r.get(h);b&&((T=o.get(b))==null||T(),o.delete(b),b.remove(),r.delete(h),c===h&&(c=null))},y=()=>{s=null,a.forEach((h,b)=>{e.root.contains(b)||(a.delete(b),N(h))}),e.root.querySelectorAll(".bridgerte__table-wrapper").forEach(h=>{const b=h.dataset.lexicalKey;b&&(a.set(h,b),C(b))}),r.forEach((h,b)=>{C(b)}),c!==null&&C(c)},w=()=>{s===null&&(s=Le(y))},x=h=>{e.editor.update(()=>{var T;const b=d.$getNodeByKey(h);b instanceof D.TableNode&&((T=Sa(b))==null||T.selectStart())}),e.editor.focus()},m=(h,b)=>{x(h),e.executeCommand(b)},f=(h,b)=>{const T=b.dataset.lexicalKey,R=h.dataset.menuItemId,$=R?Ma.get(R):void 0;!T||!$||m(T,$.command)},M=h=>{if(!h){const R=c;c=null,R!==null&&C(R);return}const b=h.dataset.lexicalKey?h.dataset.lexicalKey:a.get(h)??null;if(!b||c===b)return;const T=c;c=b,T!==null&&C(T),C(b)},E=h=>{const b=h.target;if(!(b instanceof HTMLElement))return;const T=b.closest(`.${me}`);T&&(h.preventDefault(),l=h.pointerType==="mouse"?null:T)},P=h=>{if(h.pointerType==="mouse"||!l)return;const b=h.target,T=b instanceof HTMLElement?b.closest(".bridgerte__table-controls"):null,R=b instanceof HTMLElement?b.closest(`.${me}`):null;R===l&&T&&(h.preventDefault(),h.stopPropagation(),f(R,T),u=!0),l=null},I=()=>{l=null},S=h=>{if(u){u=!1,h.preventDefault(),h.stopPropagation();return}const b=h.target;if(!(b instanceof HTMLElement))return;const T=b.closest(`.${me}`),R=b.closest(".bridgerte__table-controls");!T||!R||(h.preventDefault(),h.stopPropagation(),f(T,R))},_=e.editor.registerMutationListener(D.TableNode,h=>{h.forEach((b,T)=>{if(b==="destroyed"){N(T);return}C(T)})}),i=e.editor.registerUpdateListener(w),g=ln({root:e.root,content:n,getBlockFromTarget:Na,activateBlock:M,clearBlock:()=>M(null)});return t.className="bridgerte__table-controls-layer",e.root.append(t),t.addEventListener("pointerdown",E),t.addEventListener("pointerup",P),t.addEventListener("pointercancel",I),t.addEventListener("click",S),n.addEventListener("scroll",w,{passive:!0}),window.addEventListener("resize",w),{destroy(){_(),i(),s!==null&&(tt(s),s=null),t.removeEventListener("pointerdown",E),t.removeEventListener("pointerup",P),t.removeEventListener("pointercancel",I),t.removeEventListener("click",S),g.destroy(),n.removeEventListener("scroll",w),window.removeEventListener("resize",w),r.forEach(h=>{var b;(b=o.get(h))==null||b(),h.remove()}),r.clear(),o.clear(),a.clear(),t.remove()}}},Ia=e=>{const t=Ca({editorRoot:e.editorRoot,isReadonly:e.isReadonly,restoreEditorFocus:e.restoreEditorFocus,executeCommand:e.executeCommand,getClearCommand:e.getClearCommand,onRequest:e.onRequest}),n=No({editor:e.lexicalEditor,root:e.editorRoot,isReadonly:e.isReadonly,languagePanel:e.codeBlockLanguagePanel,payloadPanelConfig:e.payloadPanelConfig,onRequest:e.onRequest}),r=Pa({editor:e.lexicalEditor,root:e.editorRoot,executeCommand:e.executeCommand}),o=qo({editor:e.lexicalEditor,root:e.editorRoot,defaultWidthPercent:e.defaultMediaWidthPercent,executeCommand:e.executeCommand,mediaControlsConfig:e.mediaControlsConfig,menuLabels:e.menuLabels});return{payloadPanelController:t,codeBlockController:n,tableHeaderController:r,mediaControlsController:o,destroy(){t.destroy(),n.destroy(),r.destroy(),o.destroy()}}},$a=(e,t)=>{const n=document.createElement("div"),r=document.createElement("div"),o=document.createElement("div");return e.classList.add("bridgerte"),e.textContent="",n.className="bridgerte__editor",r.className="bridgerte__body",o.className="bridgerte__content",o.dataset.placeholder=t.placeholder,o.setAttribute("role","textbox"),o.setAttribute("aria-multiline","true"),r.append(o),n.append(r),e.append(n),{rootElement:n,bodyElement:r,contentElement:o}},Aa=({editor:e})=>{let t=null;return{capture(){e.getEditorState().read(()=>{var n;t=((n=d.$getSelection())==null?void 0:n.clone())??null})},restore(){t&&e.update(()=>{d.$setSelection((t==null?void 0:t.clone())??null)})},clear(){t=null}}},Ba=/((https?:\/\/|www\.)[^\s<>()]+[^\s<>().,;:!?])/i,Da=/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})/i,Oa={changeHandlers:[],excludeParents:[],matchers:[F.createLinkMatcherWithRegExp(Ba,e=>e.startsWith("http://")||e.startsWith("https://")?e:`https://${e}`),F.createLinkMatcherWithRegExp(Da,e=>`mailto:${e}`)]},Ha=({editor:e})=>F.registerAutoLink(e,Oa),Fa=[".bridgerte__code-header",".bridgerte__code-block-control",".bridgerte__code-block-controls-layer",".bridgerte__code-block-menu",".bridgerte__table-controls-layer",".bridgerte__table-controls",".bridgerte__media-controls-layer",".bridgerte__media-controls",".bridgerte__dialog-backdrop",".bridgerte__dialog",".bridgerte__payload-panel"].join(","),za=(e,t)=>{const n=e.anchorNode,r=e.focusNode;return n!==null&&r!==null&&t.contains(n)&&t.contains(r)},Wa=e=>{e.querySelectorAll(Fa).forEach(t=>{t.remove()}),e.querySelectorAll('[contenteditable="false"]').forEach(t=>{t.classList.contains("bridgerte__media")||t.remove()})},Va=e=>{const t=e.ownerDocument.getSelection();if(!t||t.rangeCount===0||!za(t,e))return null;const n=t.getRangeAt(0).cloneContents();Wa(n);const r=e.ownerDocument.createElement("div");return r.append(n),{html:r.innerHTML,text:r.textContent??""}},qa=({target:e,isReadonly:t})=>{const n=o=>{const a=Va(e);!a||!o.clipboardData||(o.clipboardData.setData("text/html",a.html),o.clipboardData.setData("text/plain",a.text),o.preventDefault(),o.stopImmediatePropagation())},r=o=>{if(t()){n(o);return}n(o)};return e.addEventListener("copy",n,{capture:!0}),e.addEventListener("cut",r,{capture:!0}),()=>{e.removeEventListener("copy",n,{capture:!0}),e.removeEventListener("cut",r,{capture:!0})}},ke=8,Ua=()=>{const e=window.visualViewport;return{left:(e==null?void 0:e.offsetLeft)??0,top:(e==null?void 0:e.offsetTop)??0,width:(e==null?void 0:e.width)??window.innerWidth,height:(e==null?void 0:e.height)??window.innerHeight}},It=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n));function nt(e,t,n={}){const r=n.placement??"bottom-start",o=n.offset??8,a=n.shiftPadding??8,s=n.strategy??"absolute";let l=null,u=!1;const c=()=>{t.style.position=s,t.style.left="0px",t.style.top="0px",t.style.opacity="0",t.style.pointerEvents="none"},p=(y,w)=>{const x=Ua(),m=t.getBoundingClientRect(),f=x.left+ke,M=x.top+ke,E=x.left+x.width-m.width-ke,P=x.top+x.height-m.height-ke;t.style.left=`${It(y,f,E)}px`,t.style.top=`${It(w,M,P)}px`,t.style.opacity="",t.style.pointerEvents=""},v=async()=>{const y=await V.computePosition(e,t,{placement:r,strategy:s,platform:V.platform,middleware:[V.offset(o),V.flip(),V.shift({padding:a})]});p(y.x,y.y)},C=()=>{l==null||l(),l=null},N=y=>{if(u!==y){if(u=y,C(),u){c(),t.hidden=!1,l=V.autoUpdate(e,t,v),v();return}t.hidden=!0,t.style.opacity="",t.style.pointerEvents=""}};return c(),t.hidden=!0,{update:v,setOpen:N,destroy(){C(),t.hidden=!0}}}const rt={"align-center":'<svg aria-hidden="true" class="lucide lucide-align-center" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M21 5H3" /> <path d="M17 12H7" /> <path d="M19 19H5" /> </svg>',"align-justify":'<svg aria-hidden="true" class="lucide lucide-align-justify" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M3 5h18" /> <path d="M3 12h18" /> <path d="M3 19h18" /> </svg>',"align-left":'<svg aria-hidden="true" class="lucide lucide-align-left" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M21 5H3" /> <path d="M15 12H3" /> <path d="M17 19H3" /> </svg>',"align-right":'<svg aria-hidden="true" class="lucide lucide-align-right" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M21 5H3" /> <path d="M21 12H9" /> <path d="M21 19H7" /> </svg>',"at-sign":'<svg aria-hidden="true" class="lucide lucide-at-sign" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="4" /> <path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8" /> </svg>',bold:'<svg aria-hidden="true" class="lucide lucide-bold" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8" /> </svg>',"case-sensitive":'<svg aria-hidden="true" class="lucide lucide-baseline" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M4 20h16" /> <path d="m6 16 6-12 6 12" /> <path d="M8 12h8" /> </svg>',code:'<svg aria-hidden="true" class="lucide lucide-code-xml" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="m18 16 4-4-4-4" /> <path d="m6 8-4 4 4 4" /> <path d="m14.5 4-5 16" /> </svg>',"columns-minus":'<svg aria-hidden="true" class="lucide lucide-between-vertical-end" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect width="7" height="13" x="3" y="3" rx="1" /> <path d="m9 22 3-3 3 3" /> <rect width="7" height="13" x="14" y="3" rx="1" /> </svg>',"columns-plus":'<svg aria-hidden="true" class="lucide lucide-between-vertical-start" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect width="7" height="13" x="3" y="8" rx="1" /> <path d="m15 2-3 3-3-3" /> <rect width="7" height="13" x="14" y="8" rx="1" /> </svg>',"heading-1":'<svg aria-hidden="true" class="lucide lucide-heading-1" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M4 12h8" /> <path d="M4 18V6" /> <path d="M12 18V6" /> <path d="m17 12 3-2v8" /> </svg>',"heading-2":'<svg aria-hidden="true" class="lucide lucide-heading-2" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M4 12h8" /> <path d="M4 18V6" /> <path d="M12 18V6" /> <path d="M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1" /> </svg>',"heading-3":'<svg aria-hidden="true" class="lucide lucide-heading-3" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M4 12h8" /> <path d="M4 18V6" /> <path d="M12 18V6" /> <path d="M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2" /> <path d="M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2" /> </svg>',"heading-4":'<svg aria-hidden="true" class="lucide lucide-heading-4" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M12 18V6" /> <path d="M17 10v3a1 1 0 0 0 1 1h3" /> <path d="M21 10v8" /> <path d="M4 12h8" /> <path d="M4 18V6" /> </svg>',"heading-5":'<svg aria-hidden="true" class="lucide lucide-heading-5" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M4 12h8" /> <path d="M4 18V6" /> <path d="M12 18V6" /> <path d="M17 13v-3h4" /> <path d="M17 17.7c.4.2.8.3 1.3.3 1.5 0 2.7-1.1 2.7-2.5S19.8 13 18.3 13H17" /> </svg>',"heading-6":'<svg aria-hidden="true" class="lucide lucide-heading-6" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M4 12h8" /> <path d="M4 18V6" /> <path d="M12 18V6" /> <circle cx="19" cy="16" r="2" /> <path d="M20 10c-2 2-3 3.5-3 6" /> </svg>',"indent-decrease":'<svg aria-hidden="true" class="lucide lucide-indent-decrease" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M21 5H11" /> <path d="M21 12H11" /> <path d="M21 19H11" /> <path d="m7 8-4 4 4 4" /> </svg>',"indent-increase":'<svg aria-hidden="true" class="lucide lucide-indent-increase" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M21 5H11" /> <path d="M21 12H11" /> <path d="M21 19H11" /> <path d="m3 8 4 4-4 4" /> </svg>',italic:'<svg aria-hidden="true" class="lucide lucide-italic" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <line x1="19" x2="10" y1="4" y2="4" /> <line x1="14" x2="5" y1="20" y2="20" /> <line x1="15" x2="9" y1="4" y2="20" /> </svg>',"list-ordered":'<svg aria-hidden="true" class="lucide lucide-list-ordered" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M11 5h10" /> <path d="M11 12h10" /> <path d="M11 19h10" /> <path d="M4 4h1v5" /> <path d="M4 9h2" /> <path d="M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02" /> </svg>',"list-plus":'<svg aria-hidden="true" class="lucide lucide-list-plus" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M16 5H3" /> <path d="M11 12H3" /> <path d="M16 19H3" /> <path d="M18 9v6" /> <path d="M21 12h-6" /> </svg>',"list-todo":'<svg aria-hidden="true" class="lucide lucide-list-todo" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M13 5h8" /> <path d="M13 12h8" /> <path d="M13 19h8" /> <path d="m3 17 2 2 4-4" /> <rect x="3" y="4" width="6" height="6" rx="1" /> </svg>',list:'<svg aria-hidden="true" class="lucide lucide-list" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M3 5h.01" /> <path d="M3 12h.01" /> <path d="M3 19h.01" /> <path d="M8 5h13" /> <path d="M8 12h13" /> <path d="M8 19h13" /> </svg>',maximize:'<svg aria-hidden="true" class="lucide lucide-maximize" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M8 3H5a2 2 0 0 0-2 2v3" /> <path d="M21 8V5a2 2 0 0 0-2-2h-3" /> <path d="M3 16v3a2 2 0 0 0 2 2h3" /> <path d="M16 21h3a2 2 0 0 0 2-2v-3" /> </svg>',minus:'<svg aria-hidden="true" class="lucide lucide-separator-horizontal" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="m16 16-4 4-4-4" /> <path d="M3 12h18" /> <path d="m8 8 4-4 4 4" /> </svg>',"paint-bucket":'<svg aria-hidden="true" class="lucide lucide-paint-bucket" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M11 7 6 2" /> <path d="M18.992 12H2.041" /> <path d="M21.145 18.38A3.34 3.34 0 0 1 20 16.5a3.3 3.3 0 0 1-1.145 1.88c-.575.46-.855 1.02-.855 1.595A2 2 0 0 0 20 22a2 2 0 0 0 2-2.025c0-.58-.285-1.13-.855-1.595" /> <path d="m8.5 4.5 2.148-2.148a1.205 1.205 0 0 1 1.704 0l7.296 7.296a1.205 1.205 0 0 1 0 1.704l-7.592 7.592a3.615 3.615 0 0 1-5.112 0l-3.888-3.888a3.615 3.615 0 0 1 0-5.112L5.67 7.33" /> </svg>',palette:'<svg aria-hidden="true" class="lucide lucide-palette" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z" /> <circle cx="13.5" cy="6.5" r=".5" fill="currentColor" /> <circle cx="17.5" cy="10.5" r=".5" fill="currentColor" /> <circle cx="6.5" cy="12.5" r=".5" fill="currentColor" /> <circle cx="8.5" cy="7.5" r=".5" fill="currentColor" /> </svg>',pilcrow:'<svg aria-hidden="true" class="lucide lucide-pilcrow" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M13 4v16" /> <path d="M17 4v16" /> <path d="M19 4H9.5a4.5 4.5 0 0 0 0 9H13" /> </svg>',quote:'<svg aria-hidden="true" class="lucide lucide-quote" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z" /> <path d="M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z" /> </svg>',redo:'<svg aria-hidden="true" class="lucide lucide-redo" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M21 7v6h-6" /> <path d="M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7" /> </svg>',"remove-formatting":'<svg aria-hidden="true" class="lucide lucide-eraser" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21" /> <path d="m5.082 11.09 8.828 8.828" /> </svg>',"rows-minus":'<svg aria-hidden="true" class="lucide lucide-between-horizontal-end" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect width="13" height="7" x="3" y="3" rx="1" /> <path d="m22 15-3-3 3-3" /> <rect width="13" height="7" x="3" y="14" rx="1" /> </svg>',"rows-plus":'<svg aria-hidden="true" class="lucide lucide-between-horizontal-start" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect width="13" height="7" x="8" y="3" rx="1" /> <path d="m2 9 3 3-3 3" /> <rect width="13" height="7" x="8" y="14" rx="1" /> </svg>',"square-code":'<svg aria-hidden="true" class="lucide lucide-square-code" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="m10 9-3 3 3 3" /> <path d="m14 15 3-3-3-3" /> <rect x="3" y="3" width="18" height="18" rx="2" /> </svg>',strikethrough:'<svg aria-hidden="true" class="lucide lucide-strikethrough" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M16 4H9a3 3 0 0 0-2.83 4" /> <path d="M14 12a4 4 0 0 1 0 8H6" /> <line x1="4" x2="20" y1="12" y2="12" /> </svg>',subscript:'<svg aria-hidden="true" class="lucide lucide-subscript" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="m4 5 8 8" /> <path d="m12 5-8 8" /> <path d="M20 19h-4c0-1.5.44-2 1.5-2.5S20 15.33 20 14c0-.47-.17-.93-.48-1.29a2.11 2.11 0 0 0-2.62-.44c-.42.24-.74.62-.9 1.07" /> </svg>',superscript:'<svg aria-hidden="true" class="lucide lucide-superscript" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="m4 19 8-8" /> <path d="m12 19-8-8" /> <path d="M20 12h-4c0-1.5.442-2 1.5-2.5S20 8.334 20 7.002c0-.472-.17-.93-.484-1.29a2.105 2.105 0 0 0-2.617-.436c-.42.239-.738.614-.899 1.06" /> </svg>',"table-delete":'<svg aria-hidden="true" class="lucide lucide-table" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M12 3v18" /> <rect width="18" height="18" x="3" y="3" rx="2" /> <path d="M3 9h18" /> <path d="M3 15h18" /> </svg>',table:'<svg aria-hidden="true" class="lucide lucide-table" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M12 3v18" /> <rect width="18" height="18" x="3" y="3" rx="2" /> <path d="M3 9h18" /> <path d="M3 15h18" /> </svg>',"trash-2":'<svg aria-hidden="true" class="lucide lucide-trash" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" /> <path d="M3 6h18" /> <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" /> </svg>',type:'<svg aria-hidden="true" class="lucide lucide-type" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M12 4v16" /> <path d="M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2" /> <path d="M9 20h6" /> </svg>',underline:'<svg aria-hidden="true" class="lucide lucide-underline" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M6 4v6a6 6 0 0 0 12 0V4" /> <line x1="4" x2="20" y1="20" y2="20" /> </svg>',undo:'<svg aria-hidden="true" class="lucide lucide-undo" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M3 7v6h6" /> <path d="M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13" /> </svg>',"upload-image":'<svg aria-hidden="true" class="lucide lucide-image" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect width="18" height="18" x="3" y="3" rx="2" ry="2" /> <circle cx="9" cy="9" r="2" /> <path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" /> </svg>',"upload-video":'<svg aria-hidden="true" class="lucide lucide-film" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect width="18" height="18" x="3" y="3" rx="2" /> <path d="M7 3v18" /> <path d="M3 7.5h4" /> <path d="M3 12h18" /> <path d="M3 16.5h4" /> <path d="M17 3v18" /> <path d="M17 7.5h4" /> <path d="M17 16.5h4" /> </svg>',"wrap-text":'<svg aria-hidden="true" class="lucide lucide-wrap-text" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="m16 16-3 3 3 3" /> <path d="M3 12h14.5a1 1 0 0 1 0 7H13" /> <path d="M3 19h6" /> <path d="M3 5h18" /> </svg>'},ja=e=>{const t=document.createElement("span");return t.className="bridgerte__menu-icon-text",t.textContent=e,t},ot=(e,t,n)=>{if(t){e.innerHTML=t;return}e.append(ja(n))},Ge=()=>{const e=window.getSelection(),t=e!=null&&e.rangeCount?e.getRangeAt(0):null,n=t==null?void 0:t.getBoundingClientRect();return!n||n.width===0&&n.height===0?null:n},Ka=160,Ga={toolbarKeys:["bold","italic","underline","strike","inline-code","clear-style","|","color","background-color","font-size","font-family","line-height"]},Ya=()=>{const e=d.$getSelection();return d.$isRangeSelection(e)&&!e.isCollapsed()},$t=(e,t)=>e.target instanceof Node&&t.contains(e.target),At=e=>e instanceof Element?e.closest(".bridgerte__hoverbar-button"):null,Xa=e=>e.flatMap(t=>t.type==="button"?[t.item]:t.type==="group"?t.items:[]),Ja=e=>{const t=document.createElement("span");return t.className="bridgerte__hoverbar-separator",t.dataset.separatorId=e.key,t.setAttribute("aria-hidden","true"),t},Qa=(e,t,n)=>{const r=dn(e,t),o=document.createElement("button");return o.type="button",o.className="bridgerte__hoverbar-button",o.dataset.hoverbarItemId=e.id,o.dataset.active=String(r.active),o.disabled=r.disabled,o.setAttribute("aria-label",e.label),o.setAttribute("aria-pressed",String(r.active)),ot(o,n[e.icon]??rt[e.icon],e.label),o},Za=({editorRoot:e,contentElement:t,editor:n,isReadonly:r,executeCommand:o,requestPayloadPanel:a,getCommandStates:s,menuSchema:l,hoverbarConfig:u,menuLabels:c,payloadPanelConfig:p,icons:v={}})=>{const C=$e(l??z.defaultMenuSchema,{menuLabels:c,payloadPanelConfig:p}),N=z.resolveToolbarMenu(u??Ga,C),y=Xa(N),w=document.createElement("span"),x=document.createElement("div");let m=null,f=!1,M=null;const E=W(x,{targetSelector:".bridgerte__hoverbar-button"});w.className="bridgerte__hoverbar-anchor",w.setAttribute("aria-hidden","true"),x.className="bridgerte__floating-menu bridgerte__hoverbar",x.setAttribute("role","toolbar"),x.setAttribute("aria-label","BridgeRTE hoverbar"),e.append(w,x),m=nt(w,x,{placement:"top",offset:8,strategy:"fixed"});const P=()=>{M&&(window.clearTimeout(M),M=null)},I=()=>{P(),f=!1,x.replaceChildren(),x.dataset.visible="false",m==null||m.setOpen(!1)},S=()=>{const L=Ge(),k=t.getBoundingClientRect();w.style.left=`${(L==null?void 0:L.left)??k.left}px`,w.style.top=`${(L==null?void 0:L.top)??k.top}px`,w.style.width=`${(L==null?void 0:L.width)||1}px`,w.style.height=`${(L==null?void 0:L.height)||1}px`},_=()=>{const L=s();x.replaceChildren(...N.flatMap(k=>k.type==="separator"?[Ja(k)]:(k.type==="button"?[k.item]:k.items).map(H=>Qa(H,L,v)))),S(),f=!0,x.dataset.visible="true",m==null||m.setOpen(!0),m==null||m.update()},i=()=>r()?!1:n.getEditorState().read(Ya),g=(L=!1)=>{if(P(),!i()){I();return}if(L){_();return}f&&I(),M=window.setTimeout(()=>{M=null,i()&&_()},Ka)},h=L=>{const k=y.find(A=>A.id===L.dataset.hoverbarItemId);if(!(!k||L.disabled)){if(k.payloadPanel){const A=L.getBoundingClientRect();a({menuId:k.id,command:k.command,panel:k.payloadPanel,currentValues:cn(k,s()),anchorRect:{x:A.left,y:A.top,width:A.width,height:A.height}}),g(!0);return}o(k.command),g(!0)}},b=L=>{At(L.target)&&L.preventDefault()},T=L=>{const k=At(L.target);k&&(L.preventDefault(),h(k))},R=L=>{!f||$t(L,x)||$t(L,t)||I()},$=n.registerCommand(d.SELECTION_CHANGE_COMMAND,()=>(g(),!1),d.COMMAND_PRIORITY_LOW),B=n.registerUpdateListener(()=>{g()}),j=n.registerCommand(d.KEY_ESCAPE_COMMAND,L=>f?(L==null||L.preventDefault(),I(),!0):!1,d.COMMAND_PRIORITY_LOW);return x.addEventListener("pointerdown",b),x.addEventListener("click",T),document.addEventListener("pointerdown",R,!0),()=>{P(),$(),B(),j(),x.removeEventListener("pointerdown",b),x.removeEventListener("click",T),document.removeEventListener("pointerdown",R,!0),E(),m==null||m.destroy(),w.remove(),x.remove()}},es=e=>e.metaKey||e.ctrlKey,ts={b:{type:"format.bold"},i:{type:"format.italic"},u:{type:"format.underline"},"\\":{type:"format.clear"}},ns={x:{type:"format.strike"},l:{type:"align",value:"left"},e:{type:"align",value:"center"},r:{type:"align",value:"right"},j:{type:"align",value:"justify"}},rs={0:{type:"block.paragraph"},1:{type:"block.heading",level:1},2:{type:"block.heading",level:2},3:{type:"block.heading",level:3},4:{type:"block.heading",level:4},5:{type:"block.heading",level:5},6:{type:"block.heading",level:6}},os=e=>{const t=e.key.toLowerCase(),n=e.code;if(!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey||!es(e))return null;if(e.altKey){if(e.shiftKey)return null;if(t==="c"||n==="KeyC")return{type:"block.code"};const r=n.startsWith("Digit")?n.slice(5):t;return rs[r]??null}return e.shiftKey?t==="z"?{type:"history.redo"}:t==="."||t===">"||n==="Period"?{type:"block.quote"}:t==="7"||t==="&"||n==="Digit7"?{type:"list.ordered"}:t==="8"||t==="*"||n==="Digit8"?{type:"list.unordered"}:t==="9"||t==="("||n==="Digit9"?{type:"list.todo"}:t==="-"||t==="_"||n==="Minus"?{type:"block.divider"}:ns[t]??null:t==="z"?{type:"history.undo"}:t==="y"&&e.ctrlKey&&!e.metaKey?{type:"history.redo"}:t==="`"||t==="~"||n==="Backquote"?{type:"format.inlineCode"}:ts[t]??null},as=({target:e,isReadonly:t,executeCommand:n})=>{const r=o=>{if(t())return;const a=os(o);a&&(o.preventDefault(),n(a))};return e.addEventListener("keydown",r),()=>{e.removeEventListener("keydown",r)}},ss=(e,t)=>{const n=t.offsetTop,r=n+t.offsetHeight,o=e.scrollTop,a=o+e.clientHeight;if(n<o){e.scrollTop=n;return}r>a&&(e.scrollTop=r-e.clientHeight)},at=(e,t)=>{var n;if(e instanceof Text&&t<=(((n=e.textContent)==null?void 0:n.length)??0))return e;for(const r of Array.from((e==null?void 0:e.childNodes)??[])){const o=at(r,t);if(o)return o}return null},wn=({editorRoot:e,contentElement:t,editor:n,isReadonly:r,menu:o,anchor:a,itemSelector:s,getCurrentTrigger:l,getTriggerRect:u,resolveItems:c,renderItem:p,renderStatus:v,onStateChange:C,onSelect:N})=>{let y=null,w=0;const x=W(o,{targetSelector:s}),m=nt(a,o,{placement:"bottom-start",offset:2,strategy:"fixed"});e.append(a,o);const f=()=>{const k=y?u(y.trigger)??Ge():Ge(),A=t.getBoundingClientRect();return k??A},M=()=>{const k=f();a.style.left=`${k.left}px`,a.style.top=`${k.top}px`,a.style.height=`${k.height||1}px`},E=(k=!0)=>{y=null,o.dataset.visible="false",k&&o.replaceChildren(),m.setOpen(!1)},P=()=>{const k=o.querySelector(`${s}[data-active="true"]`);k&&ss(o,k)},I=(k,A)=>{!y||y.requestId!==A.requestId||(E(),N(k,A.trigger))},S=()=>{if(!y){E();return}const k=y,A=f();if((C==null?void 0:C(k,{anchorRect:A,close:E,selectItem:ae=>I(ae,k)}))===!0){o.replaceChildren(),o.dataset.visible="false",m.setOpen(!1);return}if(k.status==="success")o.replaceChildren(...k.items.map((ae,ct)=>p(ae,ct,ct===k.activeIndex)));else{const ae=v==null?void 0:v(k.status,k.trigger.query,k.error);o.replaceChildren(...ae?[ae]:[])}const Q=o.children.length>0;o.dataset.visible=String(Q),M(),m.setOpen(Q),P(),m.update()},_=async(k,A)=>{let H;try{H=await Promise.resolve(c(k))}catch(Q){(y==null?void 0:y.requestId)===A&&(y={...y,items:[],activeIndex:0,status:"error",error:Q},S());return}!y||A!==y.requestId||(y={...y,items:H,activeIndex:Math.min(y.activeIndex,Math.max(H.length-1,0)),status:H.length>0?"success":"empty",error:void 0},S())},i=()=>{if(r()){E();return}const k=n.getEditorState().read(l);if(!k){E(!1);return}w+=1,y={trigger:k,items:[],activeIndex:0,requestId:w,status:"loading",error:void 0},S(),_(k.query,w)},g=()=>{if(!y||y.status!=="success")return!1;const k=y.items[y.activeIndex],A=y.trigger;return k?(E(),N(k,A),!0):!1},h=k=>!y||y.status!=="success"||y.items.length===0?!1:(y={...y,activeIndex:(y.activeIndex+k+y.items.length)%y.items.length},S(),!0),b=k=>{const A=k.target,H=A instanceof HTMLElement?A.closest(s):null,Q=H!=null&&H.dataset.index?Number.parseInt(H.dataset.index,10):Number.NaN;!y||y.status!=="success"||Number.isNaN(Q)||(y={...y,activeIndex:Q},k.preventDefault(),g())},T=k=>{const A=k.target;A instanceof HTMLElement&&A.closest(s)&&k.preventDefault()},R=n.registerUpdateListener(()=>{i()}),$=n.registerCommand(d.KEY_ARROW_DOWN_COMMAND,k=>h(1)?(k==null||k.preventDefault(),!0):!1,d.COMMAND_PRIORITY_LOW),B=n.registerCommand(d.KEY_ARROW_UP_COMMAND,k=>h(-1)?(k==null||k.preventDefault(),!0):!1,d.COMMAND_PRIORITY_LOW),j=n.registerCommand(d.KEY_ENTER_COMMAND,k=>g()?(k==null||k.preventDefault(),!0):!1,d.COMMAND_PRIORITY_LOW),L=n.registerCommand(d.KEY_ESCAPE_COMMAND,k=>y?(k==null||k.preventDefault(),E(),!0):!1,d.COMMAND_PRIORITY_LOW);return o.addEventListener("click",b),o.addEventListener("pointerdown",T),{close:E,destroy(){R(),$(),B(),j(),L(),o.removeEventListener("click",b),o.removeEventListener("pointerdown",T),x(),m.destroy(),a.remove(),o.remove()}}},is={labelField:"label",descriptionField:"description",avatarField:"avatar",iconField:"data.icon",showAvatar:!0,showIcon:!0,showDescription:!0,loadingText:"加载中",emptyText:"没有匹配的提及",errorText:"提及加载失败"},ls=e=>({...is,...e}),cs=(e,t)=>{var o;const n=t.slice(5),r=(o=e.data)==null?void 0:o[n];return typeof r=="string"&&r?r:void 0},xe=(e,t)=>{if(t.startsWith("data."))return cs(e,t);const n=t==="id"?e.id:t==="label"?e.label:t==="value"?e.value:t==="avatar"?e.avatar:e.description;return typeof n=="string"&&n?n:void 0},ds=e=>e.startsWith("@")?e:`@${e}`,Cn=(e,t)=>{const n=xe(e,t.labelField)??e.label??e.value??e.id,r=t.showDescription?xe(e,t.descriptionField)??e.description:void 0,o=t.showAvatar?xe(e,t.avatarField)??e.avatar:void 0,a=t.showIcon&&!o?xe(e,t.iconField):void 0;return{item:e,label:ds(n),...r?{description:r}:{},...o?{avatar:o}:{},...a?{icon:a}:{}}},us=(e,t)=>e.map(n=>Cn(n,t)),Ye=e=>e instanceof d.TextNode&&e.getTextContent().startsWith(" "),gs=e=>{const n=e.getTextContent().slice(1);if(!n){e.remove();return}e.setTextContent(n)},ms=(e,t)=>{const n=e.getPreviousSibling(),r=e.getNextSibling(),o=Ye(r)?r.getNextSibling():r;if(Ye(r)&&gs(r),e.remove(),t){n==null||n.selectEnd();return}o==null||o.selectStart()},hs=e=>{const t=d.$getSelection();if(!d.$isRangeSelection(t)||!t.isCollapsed())return null;const n=t.anchor,r=n.getNode();if(bt(r))return r;if(!(r instanceof d.TextNode))return null;const o=r.getTextContentSize(),a=r.getPreviousSibling(),s=r.getNextSibling(),l=Ye(r)&&n.offset===1,u=e?n.offset===0||l?a:null:n.offset===o?s:null;return bt(u)?u:null},ps=(e,t,n)=>{const r=a=>{if(t())return!1;const s=hs(a);return s?(ms(s,a),n(),!0):!1},o=(a,s)=>{const l=r(s);return l&&a.preventDefault(),l};return[e.registerCommand(d.KEY_BACKSPACE_COMMAND,a=>o(a,!0),d.COMMAND_PRIORITY_HIGH),e.registerCommand(d.KEY_DELETE_COMMAND,a=>o(a,!1),d.COMMAND_PRIORITY_HIGH),e.registerCommand(d.DELETE_CHARACTER_COMMAND,a=>r(a),d.COMMAND_PRIORITY_HIGH)]},fs=/(?:^|\s)@([\p{L}\p{N}_-]*)$/u,Bt=[{id:"bridgerte-team",label:"BridgeRTE Team",value:"bridgerte-team"},{id:"frontend",label:"Frontend",value:"frontend"},{id:"designer",label:"Designer",value:"designer"}],bs=e=>e.trim().toLowerCase(),ys=e=>[e.label,e.value,e.description].filter(Boolean).join(" ").toLowerCase(),vs=e=>{const t=bs(e);return t?Bt.filter(n=>ys(n).includes(t)):Bt},ws=()=>{const e=d.$getSelection();if(!d.$isRangeSelection(e)||!e.isCollapsed())return null;const t=e.anchor,n=t.getNode();if(!(n instanceof d.TextNode))return null;const o=n.getTextContent().slice(0,t.offset).match(fs);if(!o)return null;const a=o[1]??"",s=o[0]??"",l=s.startsWith("@")?0:1,u=t.offset-s.length+l;return{query:a,nodeKey:n.getKey(),startOffset:u,endOffset:t.offset}},Cs=()=>{const e=document.createElement("div");return e.className="bridgerte__floating-menu bridgerte__mention-menu",e.dataset.visible="false",e},_s=()=>{const e=document.createElement("span");return e.className="bridgerte__mention-anchor",e.setAttribute("aria-hidden","true"),e},Es=(e,t)=>{var s;const n=e.getElementByKey(t.nodeKey),r=at(n,t.startOffset+1);if(!(r instanceof Text))return null;const o=document.createRange(),a=Math.min(t.startOffset+1,((s=r.textContent)==null?void 0:s.length)??0);return a<=t.startOffset?null:(o.setStart(r,t.startOffset),o.setEnd(r,a),o.getBoundingClientRect())},Ms=(e,t,n)=>{const r=document.createElement("button"),o=document.createElement("span");if(r.type="button",r.className="bridgerte__menu-item bridgerte__mention-item",r.dataset.mentionId=e.item.id,r.dataset.index=String(t),r.dataset.active=String(n),e.avatar){const a=document.createElement("img");a.className="bridgerte__mention-item-avatar",a.src=e.avatar,a.alt="",a.setAttribute("aria-hidden","true"),r.append(a)}else if(e.icon){const a=document.createElement("span");a.className="bridgerte__mention-item-icon",a.setAttribute("aria-hidden","true"),a.textContent=e.icon,r.append(a)}if(o.className="bridgerte__mention-item-title",o.textContent=e.label,r.append(o),e.description){const a=document.createElement("span");a.className="bridgerte__mention-item-description",a.textContent=e.description,r.append(a)}return r},ks=(e,t)=>{const n=document.createElement("div");return n.className="bridgerte__mention-status",n.dataset.status=e,n.textContent=t,n},xs=(e,t)=>{switch(e){case"loading":return t.loadingText;case"empty":return t.emptyText;case"error":return t.errorText}},Ts=e=>e?{x:e.x,y:e.y,width:e.width,height:e.height}:void 0,Ns=({editorRoot:e,contentElement:t,editor:n,isReadonly:r,executeCommand:o,mentionProvider:a,mentionMenuConfig:s,onMentionMenuRequest:l})=>{const u=Cs(),c=_s(),p=ls(s),v=(y,w)=>{n.update(()=>{const x=d.$getNodeByKey(w.nodeKey);x instanceof d.TextNode&&(x.spliceText(w.startOffset,w.endOffset-w.startOffset,""),x.select(w.startOffset,w.startOffset))}),o({type:"mention.insert",item:y})},C=wn({editorRoot:e,contentElement:t,editor:n,isReadonly:r,menu:u,anchor:c,itemSelector:".bridgerte__mention-item",getCurrentTrigger:ws,getTriggerRect:y=>Es(n,y),resolveItems:async y=>{const w=await Promise.resolve(a?a(y):vs(y));return us(w,p)},renderItem:Ms,renderStatus:y=>ks(y,xs(y,p)),onStateChange:l?(y,w)=>l({id:`bridgerte-mention-menu-${y.requestId}`,query:y.trigger.query,status:y.status,items:y.items,config:p,readonly:r(),anchorRect:Ts(w.anchorRect),...y.error?{error:y.error}:{},submit:x=>w.selectItem(Cn(x,p)),cancel:w.close}):void 0,onSelect:(y,w)=>v(y.item,w)}),N=d.mergeRegister(...ps(n,r,()=>C.close(!1)));return()=>{N(),C.destroy()}},Ss=["script","style","iframe","object","embed","meta","link","xml","svg","math","canvas","form","input","button","select","textarea"].join(","),Ls=[".bridgerte__code-header",".bridgerte__code-block-control",".bridgerte__code-block-controls-layer",".bridgerte__code-block-menu",".bridgerte__table-controls-layer",".bridgerte__table-controls",".bridgerte__media-controls-layer",".bridgerte__media-controls",".bridgerte__dialog-backdrop",".bridgerte__dialog",".bridgerte__payload-panel",'[data-bridgerte-clipboard-ui="true"]'].join(","),Rs=new Set(["A","B","BLOCKQUOTE","BR","CODE","DEL","DIV","EM","H1","H2","H3","H4","H5","H6","FONT","I","LI","OL","P","PRE","S","SPAN","STRIKE","STRONG","SUB","SUP","TABLE","TBODY","TFOOT","TD","TH","THEAD","TR","TT","U","UL"]),Ps=new Set(["http:","https:","mailto:"]),Is="p,div,blockquote,pre,h1,h2,h3,h4,h5,h6,ul,ol,table",$s="p,blockquote,pre,h1,h2,h3,h4,h5,h6,ul,ol,table",As=new Set(["colspan","rowspan"]),Bs=new Set(["TD","TH"]),Ds=new Set(["M","O","V","W"]),Os=new Set(["SPAN"]),Hs=new Set(["color","background-color"]),Fs=/^#([\da-f]{3}|[\da-f]{6}|[\da-f]{8})$/i,Dt=new Map([["B","strong"],["DEL","s"],["I","em"],["STRIKE","s"],["TT","code"]]),zs=e=>{try{const t=new URL(e,window.location.href);return Ps.has(t.protocol)}catch{return!1}},st=e=>{e.replaceWith(...e.childNodes)},it=(e,t)=>{const n=e.ownerDocument.createElement(t);return n.append(...e.childNodes),e.replaceWith(n),n},Ws=e=>{const t=e.tagName.split(":")[0]??"";return e.tagName.includes(":")&&Ds.has(t)},_n=e=>{[...e.childNodes].forEach(t=>{if(t.nodeType===Node.COMMENT_NODE){t.remove();return}_n(t)})},En=e=>{[...e.childNodes].forEach(t=>{if(t.nodeType===Node.TEXT_NODE){const n=t.parentElement,r=!!(n!=null&&n.closest("pre,code,textarea")),o=(t.textContent??"").replace(/[\u200B-\u200D\uFEFF]/g,"").replace(/\u00A0/g,r?" ":" ");if(r){t.textContent=o;return}let a=o.replace(/\s+/g," ");t.previousSibling||(a=a.trimStart()),t.nextSibling||(a=a.trimEnd()),t.textContent=a;return}En(t)})},Vs=e=>/^[1-9]\d*$/.test(e.trim()),lt=e=>{const t=e.trim().toLowerCase(),[,n]=t.match(Fs)??[];return n?n.length===8?`#${n.slice(2)}`:t:null},qs=(e,t)=>{if(!Os.has(e))return null;const n=t.split(";").flatMap(r=>{const[o,...a]=r.split(":"),s=o==null?void 0:o.trim().toLowerCase(),l=lt(a.join(":"));return!s||!l||!Hs.has(s)?[]:[`${s}: ${l}`]});return n.length>0?`${n.join("; ")};`:null},Us=e=>{if(Ws(e)){e.remove();return}if(!Rs.has(e.tagName)){st(e);return}[...e.attributes].forEach(t=>{const n=t.name.toLowerCase();if(n.startsWith("on")){e.removeAttribute(t.name);return}if(n==="style"){const r=qs(e.tagName,t.value);if(r){e.setAttribute(t.name,r);return}e.removeAttribute(t.name);return}if(e.tagName==="A"&&n==="href"){if(zs(t.value))return;e.removeAttribute(t.name);return}if(!(e.tagName==="A"&&["target","rel","title"].includes(n))){if(e.tagName==="PRE"&&n===Ie){const r=oe(t.value);if(r){e.setAttribute(t.name,r);return}e.removeAttribute(t.name);return}if(e.tagName==="FONT"&&n==="color"){if(lt(t.value))return;e.removeAttribute(t.name);return}Bs.has(e.tagName)&&As.has(n)&&Vs(t.value)||e.removeAttribute(t.name)}})},js=e=>{[...e.querySelectorAll("font")].forEach(t=>{const n=t.getAttribute("color"),r=n?lt(n):null,o=it(t,"span");r&&o.setAttribute("style",`color: ${r};`)})},Ks=e=>{[...e.querySelectorAll([...Dt.keys()].join(","))].forEach(t=>{const n=Dt.get(t.tagName);n&&it(t,n)})},Gs=e=>{[...e.querySelectorAll("div")].reverse().forEach(t=>{if(t.querySelector($s)){st(t);return}it(t,"p")})},Ys=e=>{[...e.querySelectorAll("span")].forEach(t=>{t.attributes.length===0&&st(t)})},Xs=e=>!["P","DIV","SPAN"].includes(e.tagName)||e.querySelector("br,table,ul,ol")?!1:!(e.textContent??"").trim(),Ot=e=>{[...e.querySelectorAll("p,div,span")].reverse().forEach(t=>{Xs(t)&&t.remove()})},Js=e=>{var t;return e.nodeType===Node.TEXT_NODE?!!((t=e.textContent)!=null&&t.trim()):e.nodeType!==Node.ELEMENT_NODE?!1:!e.matches(Is)},Qs=e=>{let t=[];const n=()=>{if(t.length===0)return;const r=e.ownerDocument.createElement("p"),o=t[0];o&&(e.insertBefore(r,o),t.forEach(a=>{r.append(a)}),t=[])};[...e.childNodes].forEach(r=>{var o;if(r.nodeType===Node.TEXT_NODE&&!((o=r.textContent)!=null&&o.trim())){r.remove();return}if(Js(r)){t.push(r);return}n()}),n()},Zs=e=>{const t=document.createElement("template");t.innerHTML=e,t.content.querySelectorAll(Ss).forEach(r=>{r.remove()}),t.content.querySelectorAll(Ls).forEach(r=>{r.remove()}),_n(t.content),oo(t.content),[...t.content.querySelectorAll("*")].forEach(Us),En(t.content),js(t.content),Ks(t.content),Gs(t.content),Ys(t.content),Ot(t.content);const n=document.createElement("div");return n.append(t.content.cloneNode(!0)),Qs(n),Ot(n),n.innerHTML},ei=/^https?:\/\/[^\s<>"']+\.[^\s<>"']+$/i,ti=/^www\.[^\s<>"']+\.[^\s<>"']+$/i,ni=new RegExp(`^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+(?:/[^\\s<>"']*)?$`,"i"),ri=/^[^\s@]+@[^\s@]+\.[^\s@]+$/i,oi=/^\s*```([a-z0-9_+#.-]+)\s*\n([\s\S]*?)\n?```\s*$/i,ai=e=>e.type.startsWith("image/")?"image":e.type.startsWith("video/")?"video":null,Mn=e=>e?[...e].flatMap(t=>{const n=ai(t);return n?[{type:n,file:t}]:[]}):[],Ae=e=>({text:(e==null?void 0:e.getData("text/plain"))??"",html:(e==null?void 0:e.getData("text/html"))??"",files:e!=null&&e.files?[...e.files]:[]}),si=e=>({name:e.name,mimeType:e.type||void 0,size:e.size,data:e}),ii=e=>{const[,t,n]=e.replace(/\r\n/g,`
|
|
3
|
-
`).match(oi)??[],r=oe(t);return n!==void 0&&r!==null?{code:n,language:r}:null},li=e=>{const t=e.trim();return!t||/\s/.test(t)||t.includes("<")||t.includes(">")||/^[a-z][a-z0-9+.-]*:/i.test(t)&&!/^https?:\/\//i.test(t)||ri.test(t)?!1:ei.test(t)||ti.test(t)||ni.test(t)},kn=(e,{isReadonly:t,executeCommand:n})=>t()||!li(e.text)?!1:(n({type:"link.set",href:e.text.trim()}),!0),Xe=(e,{isReadonly:t,canUploadMedia:n,uploadMediaFile:r})=>{if(t()||!n())return!1;const o=Mn(e.files);return o.length===0?!1:(o.forEach(({type:a,file:s})=>{r(a,s)}),!0)},ci=(e,t)=>{const r=new DOMParser().parseFromString(t,"text/html");ao(r.body);const o=Je.$generateNodesFromDOM(e,r);return so(o,r.body),o},di=(e,t)=>{const n=ci(e,t);if(n.length===0)return!1;if(d.$getSelection()||d.$getRoot().selectEnd(),n.some(O.$isCodeNode)){n.forEach(o=>{Pe.$insertNodeToNearestRoot(o)});const r=n[n.length-1];return r&&O.$isCodeNode(r)&&d.$insertNodes([d.$createParagraphNode()]),!0}return d.$insertNodes(n),!0},ui=(e,{editor:t,isReadonly:n})=>{if(n())return!1;if(!e.html.trim())return mi(e,{editor:t,isReadonly:n});const r=Zs(e.html);return r.trim()?(t.update(()=>{di(t,r)}),!0):!1},gi=(e,{editor:t,isReadonly:n})=>{if(n()||e.html.trim()||!e.text.trim())return!1;const r=ii(e.text);return r?(t.update(()=>{const o=en(r.language||void 0),a=d.$createParagraphNode();d.$getSelection()||d.$getRoot().selectEnd(),o.append(d.$createTextNode(r.code)),Pe.$insertNodeToNearestRoot(o),d.$insertNodes([a]),a.selectStart()}),!0):!1},mi=(e,{editor:t,isReadonly:n})=>n()||e.html.trim()||!e.text?!1:(t.update(()=>{d.$getSelection()||d.$getRoot().selectEnd(),d.$insertNodes([d.$createTextNode(e.text)])}),!0),xn=(e,t)=>gi(e,t)||ui(e,t),ne=e=>{e.preventDefault(),e.stopImmediatePropagation()},hi=(e,t)=>Xe(e,t)||kn(e,t)||xn(e,t),pi=e=>{const t=n=>{n.defaultPrevented||kn(Ae(n.clipboardData),e)&&ne(n)};return e.target.addEventListener("paste",t,{capture:!0}),()=>{e.target.removeEventListener("paste",t,{capture:!0})}},fi=e=>{const t=o=>{o.defaultPrevented||Xe(Ae(o.clipboardData),e)&&ne(o)},n=o=>{var s;if(e.isReadonly()||!e.canUploadMedia())return;const a=(s=o.dataTransfer)!=null&&s.files?[...o.dataTransfer.files]:[];Mn(a).length!==0&&(o.preventDefault(),o.dataTransfer&&(o.dataTransfer.dropEffect="copy"))},r=o=>{var s;const a={files:(s=o.dataTransfer)!=null&&s.files?[...o.dataTransfer.files]:[]};Xe(a,e)&&ne(o)};return e.target.addEventListener("paste",t,{capture:!0}),e.target.addEventListener("dragover",n),e.target.addEventListener("drop",r),()=>{e.target.removeEventListener("paste",t,{capture:!0}),e.target.removeEventListener("dragover",n),e.target.removeEventListener("drop",r)}},bi=e=>{const t=n=>{n.defaultPrevented||!xn(Ae(n.clipboardData),e)||ne(n)};return e.target.addEventListener("paste",t,{capture:!0}),()=>{e.target.removeEventListener("paste",t,{capture:!0})}},yi=({target:e,isReadonly:t,onPaste:n,canUploadMedia:r,uploadMediaFile:o,executeCommand:a,editor:s})=>{const l=(c,p)=>hi({text:p.text??c.text,html:p.html??c.html,files:c.files},{isReadonly:t,canUploadMedia:r,uploadMediaFile:o,executeCommand:a,editor:s}),u=c=>{if(t()||!n)return;const p=Ae(c.clipboardData),v=n({text:p.text,html:p.html,files:p.files.map(si)});if(v instanceof Promise){ne(c),v.then(C=>{C!==!0&&C&&l(p,C)});return}if(v===!0){ne(c);return}v&&(ne(c),l(p,v))};return e.addEventListener("paste",u,{capture:!0}),()=>{e.removeEventListener("paste",u,{capture:!0})}},vi=["paragraph","heading-1","heading-2","heading-3","quote","code-block","ordered-list","unordered-list","todo-list","divider","upload-image","upload-video","table"],wi={showIcon:!0,loadingText:"加载中",emptyText:"没有匹配的命令",errorText:"命令加载失败"},Ci=e=>({...wi,...e}),_i=e=>e.flatMap(t=>t.type==="button"?[t.item]:t.type==="group"?t.items:[]),Ei=e=>({...e,toolbarKeys:(e==null?void 0:e.toolbarKeys)??vi}),Mi=e=>({id:e.id,label:e.label,command:e.command,icon:e.icon,requiresPayload:e.requiresPayload,payloadPanel:e.payloadPanel,source:"schema"}),ki=(e,t)=>_i(z.resolveToolbarMenu(Ei(t),e)).map(Mi),Tn=e=>({...e,source:"provider"}),xi=/(?:^|\s)\/([\p{L}\p{N}_-]*)$/u,Ti=e=>e.trim().toLowerCase(),Ni=e=>[e.label,e.id,e.description,...e.keywords??[]].filter(Boolean).join(" ").toLowerCase(),Si=(e,t)=>{const n=Ti(t);return n?e.filter(r=>Ni(r).includes(n)):e},Li=async(e,t)=>(await Promise.resolve((t==null?void 0:t(e))??[])).map(Tn),Ri=e=>"source"in e?e:Tn(e),Pi=({menuSchema:e,slashCommandConfig:t})=>e!==void 0||t!==void 0,Ii=()=>{const e=d.$getSelection();if(!d.$isRangeSelection(e)||!e.isCollapsed())return null;const t=e.anchor,n=t.getNode();if(!(n instanceof d.TextNode))return null;const o=n.getTextContent().slice(0,t.offset).match(xi);if(!o)return null;const a=o[1]??"",s=o[0]??"",l=s.startsWith("/")?0:1,u=t.offset-s.length+l;return{query:a,nodeKey:n.getKey(),startOffset:u,endOffset:t.offset}},$i=()=>{const e=document.createElement("div");return e.className="bridgerte__floating-menu bridgerte__slash-command-menu",e.dataset.visible="false",e},Ai=()=>{const e=document.createElement("span");return e.className="bridgerte__slash-command-anchor",e.setAttribute("aria-hidden","true"),e},Ht=(e,t)=>{var s;const n=e.getElementByKey(t.nodeKey),r=at(n,t.startOffset+1);if(!(r instanceof Text))return null;const o=document.createRange(),a=Math.min(t.startOffset+1,((s=r.textContent)==null?void 0:s.length)??0);return a<=t.startOffset?null:(o.setStart(r,t.startOffset),o.setEnd(r,a),o.getBoundingClientRect())},Bi=(e,t,n,r,o)=>{const a=document.createElement("button"),s=document.createElement("span");if(a.type="button",a.className="bridgerte__menu-item bridgerte__slash-command-item",a.dataset.commandId=e.id,a.dataset.index=String(t),a.dataset.active=String(n),r.showIcon&&e.icon){const l=document.createElement("span");l.className="bridgerte__slash-command-item-icon",l.setAttribute("aria-hidden","true"),ot(l,o[e.icon]??rt[e.icon],e.label),a.append(l)}if(s.className="bridgerte__slash-command-item-title",s.textContent=e.label,a.append(s),e.description){const l=document.createElement("span");l.className="bridgerte__slash-command-item-description",l.textContent=e.description,a.append(l)}return a},Di=(e,t)=>{const n=document.createElement("div");return n.className="bridgerte__slash-command-status",n.dataset.status=e,n.textContent=t,n},Oi=(e,t)=>{switch(e){case"loading":return t.loadingText;case"empty":return t.emptyText;case"error":return t.errorText}},Ft=e=>e?{x:e.x,y:e.y,width:e.width,height:e.height}:void 0,Hi=({editorRoot:e,contentElement:t,editor:n,isReadonly:r,executeCommand:o,requestPayloadPanel:a,menuSchema:s,slashCommandConfig:l,icons:u={},menuLabels:c,payloadPanelConfig:p,slashCommandMenuConfig:v,onSlashCommandMenuRequest:C,slashCommandProvider:N})=>{const y=$i(),w=Ai(),x=Ci(v),m=$e(s??z.defaultMenuSchema,{menuLabels:c,payloadPanelConfig:p}),f=ki(m,l),M=new Map(m.map(i=>[i.id,i])),E=Pi({menuSchema:s,slashCommandConfig:l}),P=i=>{n.update(()=>{const g=d.$getNodeByKey(i.nodeKey);g instanceof d.TextNode&&(g.spliceText(i.startOffset,i.endOffset-i.startOffset,""),g.select(i.startOffset,i.startOffset))})};return wn({editorRoot:e,contentElement:t,editor:n,isReadonly:r,menu:y,anchor:w,itemSelector:".bridgerte__slash-command-item",getCurrentTrigger:Ii,getTriggerRect:i=>Ht(n,i),resolveItems:async i=>{const g=E||!N?Si(f,i):[];try{const h=await Li(i,N);return[...g,...h]}catch(h){if(g.length>0)return g;throw h}},renderItem:(i,g,h)=>Bi(i,g,h,x,u),renderStatus:i=>Di(i,Oi(i,x)),onStateChange:C?(i,g)=>C({id:`bridgerte-slash-command-menu-${i.requestId}`,query:i.trigger.query,status:i.status,items:i.items,config:x,readonly:r(),anchorRect:Ft(g.anchorRect),...i.error?{error:i.error}:{},submit:h=>g.selectItem(Ri(h)),cancel:g.close}):void 0,onSelect:(i,g)=>{P(g);const h=i.source==="schema"?M.get(i.id):void 0;if(h!=null&&h.payloadPanel){const b=Ht(n,g);a({menuId:h.id,command:h.command,panel:h.payloadPanel,anchorRect:Ft(b??void 0)});return}o(i.command)}}).destroy},zt=32,Fe=e=>{var t;return e instanceof HTMLElement&&e.getAttribute("role")==="checkbox"&&((t=e.parentElement)==null?void 0:t.classList.contains("bridgerte__list--todo"))===!0},ze=e=>e instanceof HTMLElement?e.closest('[role="checkbox"]'):null,Fi=e=>d.$getNearestNodeFromDOMNode(e),Wt=e=>e.button===0,We=(e,t)=>{const n=t.getBoundingClientRect();return t.dir==="rtl"?e.clientX>=n.right-zt&&e.clientX<=n.right:e.clientX>=n.left&&e.clientX<=n.left+zt},Vt=e=>{e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation()},zi=({contentElement:e,editor:t,isReadonly:n})=>{let r=0;const o=u=>{if(n()||!Wt(u))return;const c=ze(u.target);!c||!Fe(c)||We(u,c)&&Vt(u)},a=(u,c)=>{Vt(u),t.update(()=>{const p=Fi(c);U.$isListItemNode(p)&&p.toggleChecked()})},s=u=>{if(n()||!Wt(u)||Date.now()-r<700)return;const c=ze(u.target);!c||!Fe(c)||We(u,c)&&a(u,c)},l=u=>{if(n()||u.pointerType!=="touch")return;const c=ze(u.target);!c||!Fe(c)||We(u,c)&&(r=Date.now(),a(u,c))};return e.addEventListener("pointerdown",o,!0),e.addEventListener("pointerup",l,!0),e.addEventListener("click",s,!0),()=>{e.removeEventListener("pointerdown",o,!0),e.removeEventListener("pointerup",l,!0),e.removeEventListener("click",s,!0)}},Ve=(e,t)=>{var n;return((n=e.floatingMenus)==null?void 0:n[t])!==!1},Wi=({options:e,lexicalEditor:t,editorRoot:n,contentElement:r,historyState:o,isReadonly:a,executeCommand:s,requestPayloadPanel:l,uploadMediaFile:u,canUploadMedia:c,syncAfterEditorUpdate:p,refreshCommandStates:v,getCommandStates:C,setCanUndo:N,setCanRedo:y,enableKeyboardShortcuts:w})=>{const x=Ve(e,"mention"),m=Ve(e,"slash"),f=Ve(e,"hoverbar"),M=d.mergeRegister(yi({target:r,isReadonly:a,onPaste:e.onPaste,canUploadMedia:c,uploadMediaFile:u,executeCommand:s,editor:t}),fi({target:r,isReadonly:a,canUploadMedia:c,uploadMediaFile:u}),pi({target:r,isReadonly:a,executeCommand:s}),bi({target:r,editor:t,isReadonly:a}),qa({target:r,isReadonly:a}),re.registerRichText(t),K.registerCodeHighlighting(t,co),qt.registerHistory(t,o,qr),U.registerList(t),U.registerCheckList(t),...Yn(t,a),zi({contentElement:r,editor:t,isReadonly:a}),x?Ns({editorRoot:n,contentElement:r,editor:t,isReadonly:a,executeCommand:s,mentionProvider:e.mentionProvider,mentionMenuConfig:e.mentionMenuConfig,onMentionMenuRequest:e.onMentionMenuRequest}):()=>{},f?Za({editorRoot:n,contentElement:r,editor:t,isReadonly:a,executeCommand:s,requestPayloadPanel:l,getCommandStates:C,menuSchema:e.menuSchema,hoverbarConfig:e.hoverbarConfig,icons:e.icons,menuLabels:e.menuLabels,payloadPanelConfig:e.payloadPanelConfig}):()=>{},D.registerTablePlugin(t),Ha({editor:t}),m?Hi({editorRoot:n,contentElement:r,editor:t,isReadonly:a,executeCommand:s,requestPayloadPanel:l,menuSchema:e.menuSchema,slashCommandConfig:e.slashCommandConfig,icons:e.icons,menuLabels:e.menuLabels,payloadPanelConfig:e.payloadPanelConfig,slashCommandMenuConfig:e.slashCommandMenuConfig,onSlashCommandMenuRequest:e.onSlashCommandMenuRequest,slashCommandProvider:e.slashCommandProvider}):()=>{},nr({editor:t,contentElement:r,isReadonly:a}),w?as({target:r,isReadonly:a,executeCommand:s}):()=>{},t.registerUpdateListener(()=>{p(),v()}),t.registerCommand(d.SELECTION_CHANGE_COMMAND,()=>(v(),!1),d.COMMAND_PRIORITY_LOW),t.registerCommand(d.CAN_UNDO_COMMAND,E=>(N(E),!1),d.COMMAND_PRIORITY_LOW),t.registerCommand(d.CAN_REDO_COMMAND,E=>(y(E),!1),d.COMMAND_PRIORITY_LOW));return{destroy(){M()}}};function Nn(e,t={}){const n=qt.createEmptyHistoryState(),r=t.mediaDefaultWidthPercent??50,{contentElement:o}=$a(e,{placeholder:t.placeholder??Zn}),a=t.keyboardShortcuts===!0;let s=t.readonly??!1,l=!1,u=qe(t.value);const c=d.createEditor({namespace:Ur,editable:!s,nodes:[re.HeadingNode,re.QuoteNode,O.CodeNode,O.CodeHighlightNode,U.ListNode,U.ListItemNode,D.TableNode,D.TableRowNode,D.TableCellNode,F.LinkNode,F.AutoLinkNode,pe,ce,ye],theme:Lr,onError:i=>{G(t,"lexical.runtime","Lexical runtime error.",i)}});D.setScrollableTablesActive(c,!0);const p=()=>l,v=()=>s,C=()=>{p()||tr({editor:c,contentElement:o})},N=Aa({editor:c}),y=jr({lexicalEditor:c,options:t,isDestroyed:p,setContent:i=>{u=i},syncPlaceholder:C}),w=wr({lexicalEditor:c,options:t,isDestroyed:p,canUploadMedia:()=>t.uploadAdapter!==void 0,isReadonly:v}),x=Vr({container:e,lexicalEditor:c,options:t,isDestroyed:p,isReadonly:v,reportError:G}),m=()=>{o.contentEditable=String(!s),c.setEditable(!s)},M=Ia({editorRoot:e,lexicalEditor:c,isReadonly:v,restoreEditorFocus:i=>{N.restore(),c.focus(i)},executeCommand:x,getClearCommand:i=>{switch(i.command.type){case"format.color":case"format.backgroundColor":case"format.fontSize":case"format.fontFamily":case"format.lineHeight":return{...i.command,value:""};default:return null}},codeBlockLanguagePanel:t.codeBlockLanguagePanel,payloadPanelConfig:t.payloadPanelConfig,mediaControlsConfig:t.mediaControlsConfig,menuLabels:t.menuLabels,onRequest:t.onPayloadPanelRequest,defaultMediaWidthPercent:r}),E=()=>br(t),P=()=>yr(t),I=i=>{p()||(N.capture(),M.payloadPanelController.open(i))};e.dataset.readonly=String(s),e.addEventListener("focusin",E),e.addEventListener("focusout",P),e.style.setProperty("--bridgerte-media-display-width",`${r}%`);const S=Wi({options:t,lexicalEditor:c,editorRoot:e,contentElement:o,historyState:n,isReadonly:v,executeCommand:x,requestPayloadPanel:I,uploadMediaFile:x.uploadMediaFile,canUploadMedia:()=>t.uploadAdapter!==void 0,syncAfterEditorUpdate:y.syncAfterEditorUpdate,refreshCommandStates:w.refreshCommandStates,getCommandStates:w.getCommandStates,setCanUndo:w.setCanUndo,setCanRedo:w.setCanRedo,enableKeyboardShortcuts:a});c.setRootElement(o),y.suppressNextChange(),u=zn(c,t.value),m();const _={getContent(){return p()||(y.clearContentChangeTimer(),y.syncContent(!1)),u},setContent(i){p()||(y.clearContentChangeTimer(),u=qe(i),y.suppressNextChange(),Xt(c,u),y.enforceCurrentMaxLength(),C(),c.dispatchCommand(d.CLEAR_HISTORY_COMMAND,void 0),w.setHistoryAvailability(!1,!1),y.syncContent(!0))},executeCommand(i){x(i)},requestPayloadPanel:I,getCommandStates:w.getCommandStates,subscribeCommandStateChange:w.subscribeCommandStateChange,setReadonly(i){p()||(s=i,e.dataset.readonly=String(s),m(),w.refreshCommandStates())},focus(){p()||c.focus()},blur(){p()||o.blur()},destroy(){p()||(l=!0,y.clearContentChangeTimer(),M.destroy(),x.destroy(),w.destroy(),N.clear(),S.destroy(),c.setRootElement(null),e.removeEventListener("focusin",E),e.removeEventListener("focusout",P),e.classList.remove("bridgerte"),e.textContent="",delete e.dataset.readonly)}};return y.syncContent(!1),C(),w.refreshCommandStates(),vr(t,_),_}const Vi=e=>!Re.isBridgeMessage(e)||!("id"in e)?!1:e.type==="editor.init"||e.type==="editor.executeCommand"||e.type==="editor.setContent"||e.type==="editor.setReadonly"||e.type==="editor.requestContent"||e.type==="editor.payloadPanelResolved"||e.type==="editor.payloadPanelCanceled"||e.type==="editor.uploadResolved"||e.type==="editor.uploadRejected",qi=e=>({id:e,type:"editor.ready",payload:{menuSchema:z.defaultMenuSchema,eventTiming:Re.defaultBridgeEventTiming,version:J.BRIDGERTE_CONTENT_VERSION}}),Ui=e=>`native-upload:${e}:${Date.now()}:${Math.random().toString(36).slice(2)}`,ji=({container:e,transport:t})=>{var S;let n=null,r=!1,o=null,a=null,s=null,l=0;const u=new Map,c=new Map,p=_=>{r||t.postMessage(_)},v=()=>{s&&(clearTimeout(s),s=null)},C=()=>{v(),s=setTimeout(()=>{if(r)return;const _=Math.ceil(e.getBoundingClientRect().height);_!==l&&(l=_,p({type:"editor.heightChange",payload:{height:_}}))},Re.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS)},N=_=>{if(!n)return;const i=n.getContent();p({id:_,type:"editor.content",payload:i}),p({id:_,type:"editor.contentChange",payload:i})},y=_=>{const i=_.payload,g=u.get(i.assetId);if(g){if(u.delete(i.assetId),g.source==="uploadAdapter"){g.resolve(i.result);return}n==null||n.executeCommand({type:g.type==="image"?"media.insertImage":"media.insertVideo",url:i.result.url,poster:i.result.poster,width:i.result.width,height:i.result.height,displayWidthPercent:50,assetId:i.assetId})}},w=_=>{const i=_.payload,g=u.get(i.assetId);if(g){if(u.delete(i.assetId),g.source==="uploadAdapter"){g.reject(new Error(i.message));return}p({id:_.id,type:"editor.error",payload:{code:"bridge.uploadRejected",message:i.message}})}},x=(_,i)=>new Promise((g,h)=>{u.set(i,{type:_,assetId:i,source:"uploadAdapter",resolve:g,reject:h}),p({type:"editor.uploadRequest",payload:{assetId:i,type:_,accept:_==="image"?"image/*":"video/*"}})}),m=_=>{const i=Ui(_);u.set(i,{type:_,assetId:i,source:"nativePicker"}),p({type:"editor.uploadRequest",payload:{assetId:i,type:_,accept:_==="image"?"image/*":"video/*"}})},f=_=>{const i=c.get(_.payload.requestId);i&&(c.delete(_.payload.requestId),i.request.submit(_.payload.values))},M=_=>{const i=c.get(_.payload.requestId);i&&(c.delete(_.payload.requestId),i.request.cancel())},E=(_,i)=>{n==null||n.destroy(),o==null||o(),u.clear(),c.clear(),n=Nn(e,{...i,uploadAdapter:{uploadImage(g,h){return x("image",h.assetId)},uploadVideo(g,h){return x("video",h.assetId)}},onContentChange:g=>{p({type:"editor.contentChange",payload:g}),C()},onCommandStateChange:g=>{p({type:"editor.commandStateChange",payload:g})},onPayloadPanelRequest:g=>(c.set(g.id,{request:g}),p({type:"editor.payloadPanelRequest",payload:{menuId:g.menuId,command:g.command,panel:g.panel,anchorRect:g.anchorRect,currentValues:g.currentValues,id:g.id,readonly:g.readonly}}),!0),onError:g=>{p({type:"editor.error",payload:g})}}),o=n.subscribeCommandStateChange(g=>{p({type:"editor.commandStateChange",payload:g})}),p(qi(_)),C()},P=_=>{if(_.type==="media.pickImage"){m("image");return}if(_.type==="media.pickVideo"){m("video");return}n==null||n.executeCommand(_)},I=_=>{if(!(r||!Vi(_)))switch(_.type){case"editor.init":E(_.id,_.payload);return;case"editor.executeCommand":P(_.payload);return;case"editor.setContent":n==null||n.setContent(_.payload);return;case"editor.setReadonly":n==null||n.setReadonly(_.payload.readonly);return;case"editor.requestContent":N(_.id);return;case"editor.payloadPanelResolved":f(_);return;case"editor.payloadPanelCanceled":M(_);return;case"editor.uploadResolved":y(_);return;case"editor.uploadRejected":w(_);return}};return a=((S=t.addMessageListener)==null?void 0:S.call(t,I))??null,{receive:I,destroy(){r||(r=!0,v(),a==null||a(),o==null||o(),u.clear(),c.clear(),n==null||n.destroy(),n=null)}}};exports.appendMenuIcon=ot;exports.bindTouchPressedState=W;exports.createFloatingLayer=nt;exports.createRichTextEditor=Nn;exports.createWebViewBridgeRuntime=ji;exports.defaultMenuIcons=rt;exports.getMenuStateForItem=dn;exports.getPayloadPanelCurrentValues=cn;exports.resolveMenuSchemaForDom=$e;
|
|
4
|
-
//# sourceMappingURL=index-C9gc8336.cjs.map
|