bridgerte 0.9.0 → 0.9.2

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/webview.d.ts CHANGED
@@ -170,8 +170,8 @@ export type PasteHook = (request: PasteRequest) => PasteHookResult | Promise<Pas
170
170
  /**
171
171
  * toolbar JSON 配置里的菜单组。
172
172
  *
173
- * `menuKeys` 使用菜单 schema 的稳定 id,DOM 先按简单横向分组渲染;
174
- * 后续需要下拉菜单时,可以继续复用这份结构。
173
+ * `menuKeys` 使用菜单 schema 的稳定 id,DOM 渲染为一个分组入口,
174
+ * 点击后打开纵向收纳菜单;RN/Flutter/WebView 可按同一结构自绘平台菜单。
175
175
  */
176
176
  export type ToolbarGroupConfig = {
177
177
  key: string;
@@ -756,7 +756,6 @@ export type RichTextEditorIcons = Partial<Record<string, string>>;
756
756
  export type RichTextEditorOptions = {
757
757
  value?: Partial<EditorContent>;
758
758
  readonly?: boolean;
759
- platform?: 'pc' | 'h5' | 'webview';
760
759
  uploadAdapter?: UploadAdapter;
761
760
  /**
762
761
  * 媒体节点没有显式 displayWidthPercent 时的默认展示比例。
@@ -764,14 +763,23 @@ export type RichTextEditorOptions = {
764
763
  * 默认值是 50;业务可以按产品形态改成 20 或 100,内置 UI 仍只提供固定预设。
765
764
  */
766
765
  mediaDefaultWidthPercent?: MediaDisplayWidthPercent;
766
+ /**
767
+ * @deprecated createRichTextEditor 永远只创建编辑器内容实例。
768
+ * toolbar/tabbar 请使用 createRichTextToolbar 或原生侧单独渲染;该字段保留为兼容 no-op。
769
+ */
767
770
  toolbarMode?: 'top' | 'bottom' | 'none' | 'native';
768
771
  /**
769
- * DOM 内置 toolbar/tabbar/hoverbar 使用的菜单 schema。
772
+ * DOM 内置 hoverbar、slash command 等菜单运行时使用的菜单 schema。
770
773
  *
771
- * 自定义菜单必须先进入 schema,再由 `toolbarConfig` `hoverbarConfig` 引用;
774
+ * 自定义菜单必须先进入 schema,再由独立 toolbar `toolbarConfig`、`hoverbarConfig`
775
+ * 或 slash command 配置引用;
772
776
  * 这里不接收 SVG,图标展示仍通过 `icons` 按稳定 icon key 覆盖。
773
777
  */
774
778
  menuSchema?: MenuItem[];
779
+ /**
780
+ * @deprecated editor 不再自动创建 toolbar/tabbar,该字段在 createRichTextEditor 中是 no-op。
781
+ * 请把 toolbarConfig 传给 createRichTextToolbar(container, { editor, toolbarConfig })。
782
+ */
775
783
  toolbarConfig?: ToolbarConfig;
776
784
  /**
777
785
  * DOM 内置 hoverbar 的显示结构配置。
@@ -796,7 +804,7 @@ export type RichTextEditorOptions = {
796
804
  slashCommandConfig?: ToolbarConfig;
797
805
  icons?: RichTextEditorIcons;
798
806
  /**
799
- * DOM 内置 toolbar/tabbar/hoverbar 的菜单 label 覆盖。
807
+ * DOM 内置 hoverbar、slash command 以及独立 toolbar/tabbar 的菜单 label 覆盖。
800
808
  *
801
809
  * key 使用 `MenuItem.id`,只影响按钮文本、tooltip 和 aria-label,不改变命令语义。
802
810
  */
@@ -912,7 +920,7 @@ export type BridgeEventTiming = {
912
920
  *
913
921
  * 只保留可序列化且跨端稳定的字段,避免把函数或宿主对象塞进 bridge。
914
922
  */
915
- export type EditorInitOptions = Pick<RichTextEditorOptions, 'readonly' | 'platform' | 'toolbarMode' | 'placeholder' | 'maxLength' | 'codeBlockLanguagePanel'> & {
923
+ export type EditorInitOptions = Pick<RichTextEditorOptions, 'readonly' | 'placeholder' | 'maxLength' | 'codeBlockLanguagePanel'> & {
916
924
  value?: Partial<EditorContent>;
917
925
  };
918
926
  /**
@@ -1052,6 +1060,11 @@ export type EditorToNativeMessage = {
1052
1060
  };
1053
1061
  export type BridgeMessage = NativeToEditorMessage | EditorToNativeMessage;
1054
1062
 
1063
+ /**
1064
+ * WebView runtime 接收宿主消息的监听函数。
1065
+ *
1066
+ * 只消费 bridge 协议消息,不暴露具体 RN/Flutter 事件对象。
1067
+ */
1055
1068
  export type WebViewBridgeMessageListener = (message: BridgeMessage) => void;
1056
1069
  export type WebViewBridgeRuntimeTransport = {
1057
1070
  /**
@@ -1067,14 +1080,29 @@ export type WebViewBridgeRuntimeTransport = {
1067
1080
  */
1068
1081
  addMessageListener?: (listener: WebViewBridgeMessageListener) => () => void;
1069
1082
  };
1083
+ /**
1084
+ * WebView bridge runtime 创建参数。
1085
+ *
1086
+ * container 是 DOM 编辑器挂载点;transport 是宿主消息通道适配层。
1087
+ */
1070
1088
  export type WebViewBridgeRuntimeOptions = {
1071
1089
  container: HTMLElement;
1072
1090
  transport: WebViewBridgeRuntimeTransport;
1073
1091
  };
1092
+ /**
1093
+ * WebView bridge runtime 实例。
1094
+ *
1095
+ * receive 支持宿主手动转发消息,destroy 会释放编辑器实例和 transport listener。
1096
+ */
1074
1097
  export type WebViewBridgeRuntime = {
1075
1098
  receive(message: NativeToEditorMessage | unknown): void;
1076
1099
  destroy(): void;
1077
1100
  };
1101
+ /**
1102
+ * 等待原生侧返回的上传任务。
1103
+ *
1104
+ * uploadAdapter 来源需要 resolve/reject Promise;nativePicker 来源只等待协议回包更新媒体节点。
1105
+ */
1078
1106
  export type PendingNativeUpload = {
1079
1107
  type: 'image' | 'video';
1080
1108
  assetId: string;
@@ -1085,9 +1113,19 @@ export type PendingNativeUpload = {
1085
1113
  } | {
1086
1114
  source: 'nativePicker';
1087
1115
  });
1116
+ /**
1117
+ * 等待原生侧处理的 payload panel 请求。
1118
+ *
1119
+ * request 内含 submit/cancel 回调,runtime 只保存当前挂起项,避免多个原生面板交叉提交。
1120
+ */
1088
1121
  export type PendingNativePayloadPanelRequest = {
1089
1122
  request: PayloadPanelRequest;
1090
1123
  };
1124
+ /**
1125
+ * 原生上传完成消息。
1126
+ *
1127
+ * resolved/rejected 都回到同一条媒体上传状态管线,保持 DOM 和 WebView 表现一致。
1128
+ */
1091
1129
  export type NativeUploadResultMessage = {
1092
1130
  type: 'editor.uploadResolved';
1093
1131
  payload: UploadResolvedPayload;
package/dist/webview.js CHANGED
@@ -1,4 +1,4 @@
1
- import { d as i } from "./index-C7IVE5Bd.js";
1
+ import { b as i } from "./index-KRuLtGv9.js";
2
2
  export {
3
3
  i as createWebViewBridgeRuntime
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bridgerte",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
4
4
  "description": "Cross-platform rich text editor with WebView bridge support.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -46,6 +46,11 @@
46
46
  "sideEffects": [
47
47
  "**/*.css"
48
48
  ],
49
+ "scripts": {
50
+ "build": "vite build && node ../../scripts/generatePackageDts.js && node ../../scripts/checkPackageDts.js",
51
+ "typecheck": "tsc --noEmit",
52
+ "clean": "rm -rf dist"
53
+ },
49
54
  "dependencies": {
50
55
  "@floating-ui/dom": "^1.7.0",
51
56
  "@lexical/code": "^0.45.0",
@@ -67,10 +72,5 @@
67
72
  "flutter",
68
73
  "h5"
69
74
  ],
70
- "license": "MIT",
71
- "scripts": {
72
- "build": "vite build && node ../../scripts/generatePackageDts.js && node ../../scripts/checkPackageDts.js",
73
- "typecheck": "tsc --noEmit",
74
- "clean": "rm -rf dist"
75
- }
76
- }
75
+ "license": "MIT"
76
+ }
@@ -1,3 +0,0 @@
1
- "use strict";var hn=Object.defineProperty;var fn=(e,t,n)=>t in e?hn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Me=(e,t,n)=>fn(e,typeof t!="symbol"?t+"":t,n);const Ce=require("./bridge.cjs"),G=require("./index-GaS65GL0.cjs"),g=require("lexical"),Q=require("@lexical/rich-text"),H=require("@lexical/code"),U=require("@lexical/list"),B=require("@lexical/table"),W=require("@lexical/link"),Bt=require("@lexical/history"),De=require("@lexical/html"),F=require("./native-spec.cjs"),Dt=require("./core.cjs"),K=require("@lexical/selection"),Oe=require("@lexical/utils"),te=require("@floating-ui/dom"),Qe="bridgerte-media",Ze=(e,t)=>`${e}:${t}`,ne=e=>typeof e=="number"&&Number.isFinite(e)&&e>0?Math.floor(e):void 0,et=e=>typeof e=="number"&&Number.isFinite(e)?Math.min(Math.max(e,0),100):void 0,bn=e=>e===20||e===50||e===100,tt=e=>bn(e)?e:void 0,nt=e=>e==="center"||e==="right"?e:void 0,ke=(e,t,n)=>{n&&e.setAttribute(t,n)},rt=(e,t,n)=>{n!==void 0&&e.setAttribute(t,String(n))};class ae extends g.DecoratorNode{constructor(n,r){super(r);Me(this,"__payload");this.__payload={...n,assetId:n.assetId??Ze(n.mediaType,n.url),width:ne(n.width),height:ne(n.height),duration:ne(n.duration),progress:et(n.progress),displayWidthPercent:tt(n.displayWidthPercent),align:nt(n.align)},this.__payload.displayWidthPercent===void 0&&delete this.__payload.displayWidthPercent,this.__payload.align===void 0&&delete this.__payload.align}static getType(){return Qe}static clone(n){return new ae(n.__payload,n.__key)}createDOM(n){return this.createMediaElement()}updateDOM(n,r){if(n.__payload===this.__payload)return!1;const o=this.createMediaElement();return r.replaceWith(o),!0}exportDOM(n){return{element:this.createMediaElement()}}static importDOM(){return{img:()=>({conversion:yn,priority:1}),video:()=>({conversion:vn,priority:1})}}static importJSON(n){return se(n).updateFromJSON(n)}exportJSON(){return{...super.exportJSON(),...this.__payload,type:Qe}}getTextContent(){return this.__payload.title??this.__payload.alt??this.__payload.url}isInline(){return!1}getAsset(){const n=this.__payload,r={id:n.assetId??Ze(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:ne(n.width??r.__payload.width),height:ne(n.height??r.__payload.height),duration:ne(n.duration??r.__payload.duration),progress:et(n.progress??r.__payload.progress),displayWidthPercent:Object.prototype.hasOwnProperty.call(n,"displayWidthPercent")?tt(n.displayWidthPercent):r.__payload.displayWidthPercent,align:Object.prototype.hasOwnProperty.call(n,"align")?nt(n.align):r.__payload.align},r.__payload.displayWidthPercent===void 0&&delete r.__payload.displayWidthPercent,r.__payload.align===void 0&&delete r.__payload.align}createMediaElement(){const n=this.__payload,r=document.createElement("figure"),o=n.mediaType==="image"?document.createElement("img"):document.createElement("video");if(r.className=`bridgerte__media bridgerte__media--${n.mediaType}`,r.contentEditable="false",r.dataset.assetId=n.assetId,r.dataset.mediaType=n.mediaType,r.dataset.status=n.status??"success",n.progress!==void 0&&(r.dataset.progress=String(n.progress)),n.align!==void 0&&(r.dataset.align=n.align),n.displayWidthPercent!==void 0&&(r.dataset.displayWidthPercent=String(n.displayWidthPercent),r.style.setProperty("--bridgerte-media-display-width",`${n.displayWidthPercent}%`)),o.className="bridgerte__media-element",n.mediaType==="image"?(o.setAttribute("src",n.url),o.setAttribute("loading","lazy"),ke(o,"alt",n.alt??n.title)):(o.setAttribute("src",n.url),o.setAttribute("controls","true"),o.setAttribute("preload","metadata"),ke(o,"poster",n.poster)),ke(o,"title",n.title),rt(o,"width",n.width),rt(o,"height",n.height),r.append(o),n.status==="uploading"||n.status==="error"){const a=document.createElement("figcaption");a.className="bridgerte__media-status",a.textContent=n.status==="error"?n.errorMessage??"上传失败":`上传中 ${n.progress??0}%`,r.append(a)}return r}}const yn=e=>{const t=e instanceof HTMLImageElement?e:null;return{node:t!=null&&t.src?se({mediaType:"image",url:t.src,alt:t.alt,title:t.title,width:t.width,height:t.height,status:"success"}):null}},vn=e=>{const t=e instanceof HTMLVideoElement?e:null;return{node:t!=null&&t.src?se({mediaType:"video",url:t.src,poster:t.poster,title:t.title,width:t.videoWidth||t.width,height:t.videoHeight||t.height,status:"success"}):null}},se=e=>g.$applyNodeReplacement(new ae(e)),wn=e=>se({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"}),Cn=e=>se({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"}),Ot=e=>e instanceof ae,de=e=>{const t=n=>{if(Ot(n)&&n.getAsset().id===e)return n;if(!g.$isElementNode(n))return null;for(const r of n.getChildren()){const o=t(r);if(o)return o}return null};return t(g.$getRoot())},Ht={root:{type:"root",version:1,children:[]}};function Re(e={}){return{html:e.html??"",json:e.json??Ht,plainText:e.plainText??"",assets:e.assets??[],version:e.version??G.BRIDGERTE_CONTENT_VERSION}}const _n=e=>e.toJSON(),En=e=>{var t;return((t=e.root.children)==null?void 0:t.length)===0},xn=e=>e.read(()=>{const t=new Map,n=r=>{g.$isElementNode(r)&&r.getChildren().forEach(o=>{if(Ot(o)){const a=o.getAsset();t.set(a.id,a);return}g.$isElementNode(o)&&n(o)})};return n(g.$getRoot()),[...t.values()]}),Ft=(e,t)=>{const n=t.read(()=>De.$generateHtmlFromNodes(t)),r=e.read(()=>g.$getRoot().getTextContent()),o=xn(e);return{html:n,json:_n(e),plainText:r,assets:o,version:G.BRIDGERTE_CONTENT_VERSION}},Mn=(e,t)=>{const n=Re(t);return zt(e,n),Ft(e.getEditorState(),e)},zt=(e,t)=>{if(t.json!==Ht&&!En(t.json)){const o=t.json;e.setEditorState(e.parseEditorState(o));return}if(!t.html){e.update(()=>{const o=g.$getRoot();o.clear(),o.append(g.$createParagraphNode())},{discrete:!0});return}const r=new DOMParser().parseFromString(t.html,"text/html");e.update(()=>{const o=g.$getRoot(),a=De.$generateNodesFromDOM(e,r);o.clear(),o.append(...a)},{discrete:!0})};class ue extends g.DecoratorNode{static getType(){return"bridgerte-divider"}static clone(t){return new ue(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:kn,priority:0})}}static importJSON(t){return He().updateFromJSON(t)}exportJSON(){return{...super.exportJSON(),type:ue.getType()}}getTextContent(){return`
2
- `}isInline(){return!1}}const kn=e=>({node:He()}),He=()=>g.$applyNodeReplacement(new ue),ot="bridgerte-mention",Fe="mention",Wt=e=>e.label.startsWith("@")?e.label:`@${e.label}`,Tn=e=>{const t=document.createElement("span");return t.className="bridgerte__mention",t.dataset.type=Fe,t.dataset.id=e.id,t.dataset.value=e.value,t.contentEditable="false",t.textContent=Wt(e),e.description&&(t.dataset.description=e.description),t};class ge extends g.TextNode{constructor(n,r=Wt(n),o){super(r,o);Me(this,"__item");this.__item=n}static getType(){return ot}static clone(n){return new ge(n.__item,n.__text,n.__key)}createDOM(n){const r=super.createDOM(n);return r.className="bridgerte__mention",r.dataset.type=Fe,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:Tn(this.__item)}}static importDOM(){return{span:()=>({conversion:Sn,priority:2})}}static importJSON(n){return ze(n).updateFromJSON(n)}exportJSON(){return{...super.exportJSON(),...this.__item,type:ot}}isTextEntity(){return!0}isToken(){return!0}getMentionItem(){return this.__item}}const Sn=e=>{var a;const t=e instanceof HTMLElement?e:null;if(!t||t.dataset.type!==Fe)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:ze({id:r,label:n,value:o,description:t.dataset.description})}},ze=e=>g.$applyNodeReplacement(new ge(e).setMode("token")),at=e=>e instanceof ge,Nn="请输入内容",Ln=()=>{const t=g.$getRoot().getChildren();if(t.length===0)return!0;if(t.length>1)return!1;const n=t[0];return g.$isParagraphNode(n)&&n.getChildrenSize()===0},Rn=({editor:e,contentElement:t})=>{const n=e.getEditorState().read(Ln);t.dataset.empty=String(n)},Pn=({editor:e,contentElement:t,isReadonly:n})=>{const r=o=>{n()||t.dataset.empty!=="true"||o.button===0&&(o.preventDefault(),e.focus(()=>{e.update(()=>{g.$getRoot().selectStart()})}))};return t.addEventListener("pointerdown",r),()=>{t.removeEventListener("pointerdown",r)}},We={"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-case-sensitive" 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="m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16" /> <path d="M22 9v7" /> <path d="M3.304 13h6.392" /> <circle cx="18.5" cy="12.5" r="3.5" /> </svg>',code:'<svg aria-hidden="true" class="lucide lucide-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="m16 18 6-6-6-6" /> <path d="m8 6-6 6 6 6" /> </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-minus" 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="M5 12h14" /> </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-remove-formatting" 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 7V4h16v3" /> <path d="M5 20h6" /> <path d="M13 4 8 20" /> <path d="m15 15 5 5" /> <path d="m20 15-5 5" /> </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-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="M10 11v6" /> <path d="M14 11v6" /> <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-video" 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 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5" /> <rect x="2" y="6" width="14" height="12" rx="2" /> </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>'},In=e=>{const t=document.createElement("span");return t.className="bridgerte__menu-icon-text",t.textContent=e,t},Ve=(e,t,n)=>{if(t){e.innerHTML=t;return}e.append(In(n))},V=(e,t={})=>{let n=null;const r=s=>{const i=n??e;if(!(!s&&!n)){if(s){i.dataset.pressed="true";return}delete i.dataset.pressed,n=null}},o=s=>{if(s.pointerType==="mouse")return;const i=s.target;n=i instanceof HTMLElement&&t.targetSelector?i.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)}},_e=(e,t={})=>e.map(n=>{var a;const r=(a=t.menuLabels)==null?void 0:a[n.id],o=n.payloadPanel?Dt.resolvePayloadPanelSchema(n.payloadPanel,t.payloadPanelConfig):void 0;return{...n,...r===void 0?{}:{label:r},...o===void 0?{}:{payloadPanel:o}}}),Vt=(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)}},Ut=(e,t)=>{const n=t.find(o=>F.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}},An=4,$n=8,Bn="button[data-bridgerte-toolbar-item-id]",Dn=()=>{var e;return typeof window<"u"&&((e=window.matchMedia)==null?void 0:e.call(window,"(hover: hover) and (pointer: fine)").matches)===!0},me=e=>{const t=e instanceof Element?e.closest(Bn):null;return t instanceof HTMLButtonElement?t:null},st=(e,t,n,r,o)=>{const a=Ut(t,n),s=document.createElement("button"),i=r[t.icon]??We[t.icon];s.type="button",s.className="bridgerte__toolbar-button",s.disabled=a.disabled,s.dataset.active=String(a.active),s.dataset.bridgerteToolbarItemId=t.id,s.setAttribute("aria-label",t.label),s.setAttribute("aria-pressed",String(a.active)),o&&(s.dataset.tooltip=t.label),Ve(s,i,t.label),e.append(s)},On=(e,t,n,r,o)=>{e.textContent="";let a="",s=null;t.forEach(i=>{if(i.type==="separator"){a="",s=null;const m=document.createElement("span");m.className="bridgerte__toolbar-separator",m.dataset.separatorId=i.key,m.setAttribute("aria-hidden","true"),e.append(m);return}const c=i.type==="button"?i.item.group:i.key;(!s||a!==c)&&(a=c,s=document.createElement("div"),s.className="bridgerte__toolbar-group",s.dataset.group=c,i.type==="group"&&s.setAttribute("aria-label",i.title),e.append(s));const l=s;if(i.type==="button"){st(l,i.item,n,r,o);return}i.items.forEach(m=>{st(l,m,n,r,o)})})};function qt(e,t){const n=t.placement??"top",r=_e(t.menuSchema??F.defaultMenuSchema,{menuLabels:t.menuLabels,payloadPanelConfig:t.payloadPanelConfig}),o=F.resolveToolbarMenu(t.toolbarConfig,r),a=o.flatMap(u=>u.type==="button"?[u.item]:u.type==="group"?u.items:[]),s=t.icons??{},i=Dn(),c=document.createElement("div"),l=e.closest(".bridgerte")??e;let m=!1,_=null,E=!1;const k=V(e,{targetSelector:"button[data-bridgerte-toolbar-item-id]"}),f=()=>{l.append(c)},w=u=>{m||(On(e,o,u,s,i),f())},L=()=>{m||w(t.editor.getCommandStates())},h=()=>{c.dataset.visible="false",c.textContent=""},C=u=>{const b=u.dataset.tooltip;if(!i||!b||_)return;const N=u.getBoundingClientRect();c.textContent=b,c.dataset.visible="true",c.style.left=`${N.left+N.width/2}px`,c.style.top=`${N.top-$n}px`},S=u=>{const b=me(u.target);b&&C(b)},x=u=>{const b=u.relatedTarget,N=me(u.target);N&&b instanceof Node&&N.contains(b)||h()},P=()=>{_=null,delete e.dataset.dragging,document.removeEventListener("pointermove",I),document.removeEventListener("pointerup",M),document.removeEventListener("pointercancel",M)},I=u=>{if(!_)return;const b=_.startClientX-u.clientX;Math.abs(b)>An&&(_.hasDragged=!0,E=!0,h()),e.scrollLeft=_.startScrollLeft+b},M=u=>{const b=_;P(),b&&u.type!=="pointercancel"&&b.pointerType!=="mouse"&&!b.hasDragged&&b.startButton&&(p(b.startButton),E=!0)},y=u=>{if(u.pointerType==="mouse"&&u.button!==0)return;const b=me(u.target);u.preventDefault(),_={startClientX:u.clientX,startScrollLeft:e.scrollLeft,pointerType:u.pointerType,hasDragged:!1,startButton:b??void 0},e.dataset.dragging="true",h(),document.addEventListener("pointermove",I),document.addEventListener("pointerup",M),document.addEventListener("pointercancel",M)},p=u=>{if(!(u instanceof HTMLButtonElement)||u.disabled)return;const b=a.find(N=>N.id===u.dataset.bridgerteToolbarItemId);if(b){if(t.editor.focus(),b.payloadPanel){const N=u.getBoundingClientRect();t.editor.requestPayloadPanel({menuId:b.id,command:b.command,panel:b.payloadPanel,currentValues:Vt(b,t.editor.getCommandStates()),anchorRect:{x:N.left,y:N.top,width:N.width,height:N.height}});return}t.editor.executeCommand(b.command)}},d=u=>{if(E){E=!1,u.preventDefault(),u.stopPropagation();return}const b=me(u.target);b&&p(b)};e.classList.add("bridgerte__toolbar"),c.className="bridgerte__toolbar-tooltip",c.dataset.visible="false",e.dataset.placement=n,e.setAttribute("role","toolbar"),e.setAttribute("aria-label",n==="bottom"?"BridgeRTE tabbar":"BridgeRTE toolbar"),e.addEventListener("pointerdown",y,!0),e.addEventListener("click",d),i&&(e.addEventListener("mouseover",S),e.addEventListener("mouseout",x)),e.addEventListener("focusout",h),f();const v=t.editor.subscribeCommandStateChange(w);return{update:L,destroy(){m||(m=!0,P(),v(),e.removeEventListener("pointerdown",y,!0),e.removeEventListener("click",d),i&&(e.removeEventListener("mouseover",S),e.removeEventListener("mouseout",x)),k(),e.removeEventListener("focusout",h),c.remove(),e.classList.remove("bridgerte__toolbar"),delete e.dataset.placement,e.textContent="",e.removeAttribute("role"),e.removeAttribute("aria-label"))}}}const Hn=[{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"}],Fn=[{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"}],zn=[{command:"list.ordered",listType:"ordered"},{command:"list.unordered",listType:"unordered"},{command:"list.todo",listType:"todo"}],Wn=["media.pickImage","media.pickVideo"],jt=()=>{const e=g.$getSelection();if(!g.$isRangeSelection(e))return null;const t=e.anchor.getNode();return t.getKey()==="root"?t:t.getTopLevelElementOrThrow()},Vn=()=>{const e=jt();if(!e)return null;if(Q.$isHeadingNode(e)){const t=Number(e.getTag().replace("h",""));return{command:"block.heading",value:Number.isNaN(t)?void 0:t}}if(Q.$isQuoteNode(e))return{command:"block.quote"};if(H.$isCodeNode(e)){const t=e.getLatest();return{command:"block.code",value:H.$isCodeNode(t)?t.getLanguage()??"":""}}return{command:"block.paragraph"}},Un=()=>{const e=jt();if(!e||!("getFormatType"in e))return;const t=e.getFormatType();return t===""?void 0:t},qn=()=>{const e=g.$getSelection();if(!g.$isRangeSelection(e))return null;const t=e.anchor.getNode(),n=U.$isListNode(t)?t:Oe.$getNearestNodeOfType(t,U.ListNode);return n?n.getListType()==="check"?"todo":n.getTag()==="ol"?"ordered":"unordered":null},jn=e=>{const t=g.$getSelection();if(!g.$isRangeSelection(t))return;const n=K.$getSelectionStyleValueForProperty(t,e);return n===""?void 0:n},Kn=()=>{const e=g.$getSelection();if(!g.$isRangeSelection(e))return!1;const t=e.anchor.getNode(),n=t.getParent();return W.$isLinkNode(t)||W.$isLinkNode(n)},Gn=e=>{const t=g.$getSelection(),n=g.$isRangeSelection(t),r=Vn(),o=qn(),a=Un(),s=Kn(),i=e.readonly||!n,c=Hn.map(E=>({command:E.command,active:n&&t.hasFormat(E.format),disabled:i})),l=Fn.map(E=>{const k=jn(E.property);return{command:E.command,active:k!==void 0,disabled:i,value:k}}),m=zn.map(E=>({command:E.command,active:o===E.listType,disabled:i})),_=Wn.map(E=>({command:E,active:!1,disabled:e.readonly||!e.canUploadMedia}));return[...c,{command:"format.clear",active:!1,disabled:i},...l,{command:"block.heading",active:(r==null?void 0:r.command)==="block.heading",disabled:i,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:i},{command:"block.quote",active:(r==null?void 0:r.command)==="block.quote",disabled:i},{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},...m,{command:"align",active:a!==void 0,disabled:i,value:a},{command:"link.set",active:s,disabled:i},{command:"link.unset",active:!1,disabled:i||!s},{command:"link.open",active:!1,disabled:e.readonly||!s},{command:"indent.increase",active:!1,disabled:i},{command:"indent.decrease",active:!1,disabled:i},{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},..._,{command:"table.insert",active:!1,disabled:e.readonly},{command:"fullscreen.toggle",active:!1,disabled:!1}]},Yn=(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}),q=(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)}},Xn=(e,t)=>{var n;try{(n=e.onChange)==null||n.call(e,t)}catch(r){q(e,"callback.onChange","onChange callback failed.",r)}},Jn=(e,t)=>{var n;try{(n=e.onContentChange)==null||n.call(e,t)}catch(r){q(e,"callback.onContentChange","onContentChange callback failed.",r)}},Qn=(e,t)=>{var n;try{(n=e.onCommandStateChange)==null||n.call(e,[...t])}catch(r){q(e,"callback.onCommandStateChange","onCommandStateChange callback failed.",r)}},Zn=e=>{var t;try{(t=e.onFocus)==null||t.call(e)}catch(n){q(e,"callback.onFocus","onFocus callback failed.",n)}},er=e=>{var t;try{(t=e.onBlur)==null||t.call(e)}catch(n){q(e,"callback.onBlur","onBlur callback failed.",n)}},tr=(e,t)=>{var n;try{(n=e.onReady)==null||n.call(e,t)}catch(r){q(e,"callback.onReady","onReady callback failed.",r)}},nr=({lexicalEditor:e,options:t,isDestroyed:n,canUploadMedia:r,isReadonly:o})=>{let a=!1,s=!1,i=[];const c=new Set,l=()=>{const _=[...i];c.forEach(E=>{try{E(_)}catch(k){q(t,"callback.commandStateSubscriber","Command state subscriber failed.",k)}})},m=(_=!0)=>{if(n())return;const E=i;e.getEditorState().read(()=>{i=Gn({canUndo:a,canRedo:s,readonly:o(),canUploadMedia:r()})}),_&&!Yn(E,i)&&(Qn(t,i),l())};return{refreshCommandStates:m,getCommandStates(){return m(!1),[...i]},subscribeCommandStateChange(_){return n()?()=>{}:(c.add(_),_([...i]),()=>{c.delete(_)})},setCanUndo(_){a=_,m()},setCanRedo(_){s=_,m()},setHistoryAvailability(_,E){a=_,s=E,m()},destroy(){c.clear()}}},rr=e=>`upload:${e}:${Date.now()}:${Math.random().toString(36).slice(2)}`,or=e=>typeof URL.createObjectURL=="function"?URL.createObjectURL(e):e.name,pe=e=>{typeof URL.revokeObjectURL=="function"&&e.startsWith("blob:")&&URL.revokeObjectURL(e)},it=e=>({name:e.name,mimeType:e.type||void 0,size:e.size,data:e}),ar=e=>typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError",sr=({container:e,lexicalEditor:t,options:n,isDestroyed:r})=>{const o=new Map;let a=0;const s=(h,C)=>{t.update(()=>{var S;(S=de(h))==null||S.updatePayload(C)})},i=h=>{let C=null;return t.update(()=>{const S=de(h);if(!S)return;const x=S.getAsset();C={mediaType:x.type,url:x.url,assetId:x.id,status:x.status,progress:x.progress,poster:x.poster,width:x.width,height:x.height,duration:x.duration,mimeType:x.mimeType,size:x.size,displayWidthPercent:x.displayWidthPercent,align:x.align,errorMessage:x.errorMessage},S.remove()}),C},c=(h,C)=>{const S=o.get(h);return(S==null?void 0:S.runId)===C},l=h=>{var C;(C=h.abortController)==null||C.abort()},m=(h,C)=>{const S=o.get(h);return S?(l(S),pe(S.previewUrl),o.delete(h),!0):!1},_=(h,C,S,x)=>{t.update(()=>{const P=se({mediaType:h,url:x,assetId:S,status:"uploading",progress:0,title:C.name,mimeType:C.type||void 0,size:C.size}),I=g.$createParagraphNode();g.$getSelection()||g.$getRoot().selectEnd(),g.$insertNodes([P,I]),I.selectStart()},{discrete:!0})},E=(h,C,S,x)=>{s(C,{mediaType:h,url:x.url,poster:x.poster,width:x.width,height:x.height,duration:x.duration,mimeType:x.mimeType,size:x.size,status:"success",progress:100,errorMessage:void 0}),pe(S)},k=(h,C,S)=>{var x;ar(S)||(s(C,{mediaType:h,status:"error",errorMessage:"上传失败"}),(x=n.onUploadError)==null||x.call(n,{assetId:C,type:h,cause:S}))},f=h=>{const C=n.uploadAdapter;if(!C)return;const S=typeof AbortController=="function"?new AbortController:null,x=a+1;a=x,h.runId=x,h.abortController=S,o.set(h.assetId,h);const P={assetId:h.assetId,signal:S==null?void 0:S.signal,onProgress:M=>{!c(h.assetId,x)||r()||s(h.assetId,{mediaType:h.type,status:"uploading",progress:M})}};let I;try{I=h.type==="image"?C.uploadImage(it(h.file),P):C.uploadVideo(it(h.file),P)}catch(M){c(h.assetId,x)&&k(h.type,h.assetId,M);return}I.then(M=>{r()||!c(h.assetId,x)||(E(h.type,h.assetId,h.previewUrl,M),o.delete(h.assetId))}).catch(M=>{r()||!c(h.assetId,x)||k(h.type,h.assetId,M)})},w=(h,C)=>{if(!n.uploadAdapter)return;const S=rr(h),x=or(C),P={assetId:S,type:h,file:C,previewUrl:x,runId:0,abortController:null};_(h,C,S,x),f(P)};return{pickMediaFile:h=>{if(!n.uploadAdapter)return;const C=e.ownerDocument.createElement("input");C.type="file",C.accept=h==="image"?"image/*":"video/*",C.style.display="none",C.addEventListener("change",()=>{var x;const S=(x=C.files)==null?void 0:x[0];C.remove(),S&&w(h,S)},{once:!0}),e.append(C),C.click()},uploadMediaFile:w,removeMedia(h){const C=i(h);!m(h)&&(C!=null&&C.url.startsWith("blob:"))&&pe(C.url)},retryMedia(h){const C=o.get(h);!C||!n.uploadAdapter||(l(C),s(h,{mediaType:C.type,url:C.previewUrl,status:"uploading",progress:0,errorMessage:void 0}),f(C))},destroy(){o.forEach(h=>{l(h),pe(h.previewUrl)}),o.clear()}}},ir=e=>H.$createCodeNode(e),lr={1:"h1",2:"h2",3:"h3",4:"h4",5:"h5",6:"h6"},cr={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"},dr=e=>({setBlockHeading:l=>{e.update(()=>{const m=g.$getSelection();g.$isRangeSelection(m)&&K.$setBlocksType(m,()=>Q.$createHeadingNode(lr[l]))})},setParagraphBlock:()=>{e.update(()=>{const l=g.$getSelection();g.$isRangeSelection(l)&&K.$setBlocksType(l,()=>g.$createParagraphNode())})},setQuoteBlock:()=>{e.update(()=>{const l=g.$getSelection();g.$isRangeSelection(l)&&K.$setBlocksType(l,()=>Q.$createQuoteNode())})},insertDividerBlock:()=>{e.update(()=>{const l=g.$createParagraphNode();g.$insertNodes([He(),l]),l.selectStart()})},insertCodeBlock:l=>{e.update(()=>{const m=ir(l),_=g.$createParagraphNode();g.$insertNodes([m,_]),m.selectEnd()})},setSelectedCodeBlockLanguage:l=>{e.update(()=>{const m=g.$getSelection();if(!g.$isRangeSelection(m))return;const _=m.anchor.getNode(),E=_.getKey()==="root"?_:_.getTopLevelElementOrThrow();H.$isCodeNode(E)&&E.setLanguage(l)})},clearContent:()=>{e.update(()=>{const l=g.$getRoot();l.clear(),l.append(g.$createParagraphNode())})},formatAlign:l=>{e.dispatchCommand(g.FORMAT_ELEMENT_COMMAND,l)}}),ur=e=>({setLink:(o,a)=>{e.update(()=>{const s=g.$getSelection(),i=W.formatUrl(o),c=(a==null?void 0:a.trim())||o.trim();if(!(!g.$isRangeSelection(s)||!o.trim())){if(s.isCollapsed()){const l=W.$createLinkNode(i,{rel:"noreferrer noopener",target:"_blank"});l.append(g.$createTextNode(c)),g.$insertNodes([l]);return}W.$toggleLink(i,{rel:"noreferrer noopener",target:"_blank"})}})},unsetLink:()=>{e.update(()=>{W.$toggleLink(null)})},openSelectedLink:()=>{if(typeof window>"u")return;const o=e.getEditorState().read(()=>{const a=g.$getSelection();if(!g.$isRangeSelection(a))return null;const s=a.anchor.getNode(),i=W.$isLinkNode(s)?s:Oe.$findMatchingParent(s,W.$isLinkNode);return i?{target:i.getTarget()??"_blank",url:i.sanitizeUrl(i.getURL())}:null});o&&window.open(o.url,o.target,"noopener,noreferrer")}}),gr=e=>({insertImage:s=>{s.url.trim()&&e.update(()=>{const i=g.$createParagraphNode();g.$insertNodes([wn(s),i]),i.selectStart()})},insertVideo:s=>{s.url.trim()&&e.update(()=>{const i=g.$createParagraphNode();g.$insertNodes([Cn(s),i]),i.selectStart()})},resizeMedia:s=>{e.update(()=>{var i;(i=de(s.assetId))==null||i.updatePayload({displayWidthPercent:s.widthPercent})})},resetMediaSize:s=>{e.update(()=>{var i;(i=de(s))==null||i.updatePayload({displayWidthPercent:void 0})})},alignMedia:s=>{e.update(()=>{var i;(i=de(s.assetId))==null||i.updatePayload({align:s.value==="left"?void 0:s.value})})}}),mr=e=>({insertMention:n=>{e.update(()=>{const r=g.$getSelection();g.$isRangeSelection(r)&&g.$insertNodes([ze(n),g.$createTextNode(" ")])})}}),pr=e=>({clearSelectionFormat:()=>{e.update(()=>{const r=g.$getSelection();g.$isRangeSelection(r)&&(r.setFormat(0),K.$patchStyleText(r,{color:null,"background-color":null,"font-size":null,"font-family":null,"line-height":null}))})},setSelectionStyle:(r,o)=>{e.update(()=>{const a=g.$getSelection();g.$isRangeSelection(a)&&K.$patchStyleText(a,{[r]:o===""?null:o})})}}),hr=20,lt=(e,t)=>Number.isFinite(e)&&e>0?Math.min(Math.floor(e),t):1,he=e=>Number.isFinite(e)&&(e??0)>0?Math.min(Math.floor(e??1),hr):1,fe=()=>{const e=g.$getSelection();return!g.$isRangeSelection(e)&&!B.$isTableSelection(e)?!1:B.$findCellNode(e.anchor.getNode())!==null},fr=e=>({insertTable:(i,c)=>{const l=lt(i,G.BRIDGERTE_TABLE_INSERT_MAX_ROWS),m=lt(c,G.BRIDGERTE_TABLE_INSERT_MAX_COLS);e.dispatchCommand(B.INSERT_TABLE_COMMAND,{rows:String(l),columns:String(m),includeHeaders:{rows:!0,columns:!1}})},insertTableRow:i=>{e.update(()=>{if(!fe())return;const c=he(i.count);for(let l=0;l<c;l+=1)B.$insertTableRowAtSelection(i.direction!=="before")})},insertTableColumn:i=>{e.update(()=>{if(!fe())return;const c=he(i.count);for(let l=0;l<c;l+=1)B.$insertTableColumnAtSelection(i.direction!=="before")})},deleteTableRow:i=>{e.update(()=>{const c=he(i.count);for(let l=0;l<c;l+=1){if(!fe())return;B.$deleteTableRowAtSelection()}})},deleteTableColumn:i=>{e.update(()=>{const c=he(i.count);for(let l=0;l<c;l+=1){if(!fe())return;B.$deleteTableColumnAtSelection()}})},deleteTable:()=>{e.update(()=>{const i=g.$getSelection();if(!g.$isRangeSelection(i)&&!B.$isTableSelection(i))return;const c=B.$findTableNode(i.anchor.getNode());if(!c)return;const l=g.$createParagraphNode();c.insertAfter(l),c.remove(),l.selectStart()})}}),br=e=>{const t=fr(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()}}},yr={"format.bold":"bold","format.italic":"italic","format.underline":"underline","format.strike":"strikethrough","format.inlineCode":"code","format.superscript":"superscript","format.subscript":"subscript"},vr={"list.ordered":U.INSERT_ORDERED_LIST_COMMAND,"list.unordered":U.INSERT_UNORDERED_LIST_COMMAND,"list.todo":U.INSERT_CHECK_LIST_COMMAND},wr={"indent.increase":g.INDENT_CONTENT_COMMAND,"indent.decrease":g.OUTDENT_CONTENT_COMMAND,"history.undo":g.UNDO_COMMAND,"history.redo":g.REDO_COMMAND},Cr={"format.color":"color","format.backgroundColor":"background-color","format.fontSize":"font-size","format.fontFamily":"font-family","format.lineHeight":"line-height"},_r=({container:e,lexicalEditor:t,options:n,isDestroyed:r,isReadonly:o,reportError:a})=>{const s=sr({container:e,lexicalEditor:t,options:n,isDestroyed:r}),i=dr(t),c=ur(t),l=gr(t),m=mr(t),_=pr(t),E=br(t),k=()=>{var L,h;if(document.fullscreenElement){(L=document.exitFullscreen)==null||L.call(document).catch(C=>{a(n,"fullscreen.exit","Exit fullscreen failed.",C)});return}(h=e.requestFullscreen)==null||h.call(e).catch(C=>{a(n,"fullscreen.enter","Enter fullscreen failed.",C)})},f=(w=>{if(r()||o())return;const L=yr[w.type];if(L){t.dispatchCommand(g.FORMAT_TEXT_COMMAND,L);return}const h=vr[w.type];if(h){t.dispatchCommand(h,void 0);return}const C=wr[w.type];if(C){t.dispatchCommand(C,void 0);return}const S=Cr[w.type];if(S&&"value"in w){_.setSelectionStyle(S,w.value);return}switch(w.type){case"format.clear":_.clearSelectionFormat();return;case"block.heading":i.setBlockHeading(w.level);return;case"block.paragraph":i.setParagraphBlock();return;case"block.quote":i.setQuoteBlock();return;case"block.divider":i.insertDividerBlock();return;case"block.code":i.insertCodeBlock(w.language);return;case"block.setCodeLanguage":i.setSelectedCodeBlockLanguage(w.language);return;case"align":i.formatAlign(w.value);return;case"link.set":c.setLink(w.href,w.text);return;case"link.unset":c.unsetLink();return;case"link.open":c.openSelectedLink();return;case"mention.insert":m.insertMention(w.item);return;case"content.clear":i.clearContent();return;case"table.insert":E.insertTable(w);return;case"table.insertRow":E.insertTableRow(w);return;case"table.insertColumn":E.insertTableColumn(w);return;case"table.deleteRow":E.deleteTableRow(w);return;case"table.deleteColumn":E.deleteTableColumn(w);return;case"table.delete":E.deleteTable();return;case"media.insertImage":l.insertImage(w);return;case"media.insertVideo":l.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":l.resizeMedia(w);return;case"media.align":l.alignMedia(w);return;case"media.resetSize":l.resetMediaSize(w.assetId);return;case"fullscreen.toggle":k();return}});return f.uploadMediaFile=s.uploadMediaFile,f.destroy=()=>{s.destroy()},f},Er=300,xr="BridgeRTE",ct=({editor:e,overflowLength:t})=>{if(t<=0)return!1;const n=g.$getSelection();if(g.$isRangeSelection(n))return K.$trimTextContentFromAnchor(e,n.anchor,t),!0;g.$getRoot().selectEnd();const r=g.$getSelection();return g.$isRangeSelection(r)?(K.$trimTextContentFromAnchor(e,r.anchor,t),!0):!1},Mr=({lexicalEditor:e,options:t,isDestroyed:n,setContent:r,syncPlaceholder:o})=>{let a=0,s=null;const i=()=>{s&&(clearTimeout(s),s=null)},c=h=>{if(n())return;const C=Ft(e.getEditorState(),e);r(C),h&&Xn(t,C)},l=h=>{const C=t.maxLength!==void 0&&t.maxLength>=0?t.maxLength:void 0;return{dirty:!0,plainTextLength:h,version:G.BRIDGERTE_CONTENT_VERSION,maxLength:C,isOverMaxLength:C===void 0?!1:h>C}},m=h=>{Jn(t,l(h))},_=()=>{t.onChange&&(i(),s=setTimeout(()=>{c(!0)},Ce.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS))},E=h=>{if(a>0){a-=1;return}m(h),_()},k=()=>e.getEditorState().read(()=>g.$getRoot().getTextContent().length),f=h=>t.maxLength===void 0||t.maxLength<0?0:h-t.maxLength,w=h=>h<=0?!1:(e.update(()=>{ct({editor:e,overflowLength:h})},{discrete:!0}),!0);return{clearContentChangeTimer:i,enforceCurrentMaxLength:()=>{t.maxLength===void 0||t.maxLength<0||e.update(()=>{const h=g.$getRoot().getTextContent().length-(t.maxLength??0);ct({editor:e,overflowLength:h})},{discrete:!0})},syncContent:c,suppressNextChange(){a+=1},syncAfterEditorUpdate(){const h=k();if(w(f(h))){o();return}o(),E(h)}}},Ee="data-language",Kt="纯文本",kr="language",Tr=new Set(["plain","plaintext","text","txt"]),Sr=[Ee,"data-lang","data-code-language","data-highlight-language","lang","language"],Nr=/^[a-z][a-z0-9_+#.-]{0,31}$/i,Lr=/^(?:language|lang)-([a-z][a-z0-9_+#.-]{0,31})$/i,Rr=/^brush:\s*([a-z][a-z0-9_+#.-]{0,31})$/i,Pr=new Map([["js","javascript"],["jsx","javascript"],["py","python"],["rs","rust"],["ts","typescript"],["tsx","typescript"]]),Ir=e=>e.type==="select",Ar=e=>e.find(t=>t.name===kr&&Ir(t)),Z=e=>{const t=e==null?void 0:e.trim().toLowerCase();return!t||!Nr.test(t)?null:Pr.get(t)??t},$r=e=>{for(const t of Sr){const n=Z(e.getAttribute(t));if(n)return n}return null},Br=e=>{const[,t]=e.match(Rr)??[],n=Z(t);if(n)return n;for(const r of e.split(/\s+/)){const[,o]=r.match(Lr)??[],a=Z(o);if(a)return a}return null},Dr=()=>{const e=H.getCodeLanguageOptions().filter(([t])=>!Tr.has(t)).map(([t,n])=>({label:n,value:Z(t)??t}));return[{label:Kt,value:""},...e]},dt=Dr(),Gt=(e=F.codeBlockLanguagePanel)=>{var t;return e===F.codeBlockLanguagePanel?dt:((t=Ar(e.fields))==null?void 0:t.options)??dt},Yt=(e,t)=>{var n,r,o;return((n=e.find(a=>a.value===t))==null?void 0:n.label)??((r=e.find(a=>Z(a.value)===Z(t)))==null?void 0:r.label)??((o=e[0])==null?void 0:o.label)??Kt};Gt();const Or=e=>{[...e.querySelectorAll("pre,code")].forEach(t=>{const n=$r(t)??Br(t.className),r=t.tagName==="PRE"?t:t.closest("pre");r&&n&&r.setAttribute(Ee,n)})},Hr=e=>{e.querySelectorAll("pre").forEach(t=>{[...t.children].forEach(r=>{r.tagName==="CODE"&&r.replaceWith(...r.childNodes)})})},Fr=(e,t)=>{const n=[...t.querySelectorAll("pre[data-language]")];let r=0;e.forEach(o=>{if(!H.$isCodeNode(o))return;const a=n[r];if(r+=1,!a)return;const s=a.getAttribute(Ee);s&&!o.getLanguage()&&o.setLanguage(s)})},re=12,ut=6,gt=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n)),zr=()=>{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}},Wr=e=>{const t=e.style.visibility,n=e.style.pointerEvents,r=e.style.display;e.style.visibility="hidden",e.style.pointerEvents="none",e.style.display="grid";const o=e.getBoundingClientRect();return e.style.visibility=t,e.style.pointerEvents=n,e.style.display=r,o},Vr=(e,t,n)=>{const r=Wr(e),o=zr(),a=t.getBoundingClientRect(),s=a.left+re,i=a.top+re,c=n?n.x:s,l=n?n.y+n.height+ut:i,m=n?n.y-r.height-ut:l,_=o.left+re,E=o.top+re,k=o.left+o.width-r.width-re,f=o.top+o.height-r.height-re,w=l>f?m:l;return{left:gt(c,_,k),top:gt(w,E,f),viewportHeight:o.height}},Xt=e=>{var c,l;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=()=>{const m=Vr(n,e.root,o);n.style.left=`${m.left}px`,n.style.top=`${m.top}px`,n.style.setProperty("--bridgerte-dialog-visible-height",`${m.viewportHeight}px`)},i=m=>{o=m,m?n.style.setProperty("--bridgerte-dialog-anchor-width",`${m.width}px`):n.style.removeProperty("--bridgerte-dialog-anchor-width"),s(),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 m;(m=e.onBackdropClick)==null||m.call(e),a()}),(c=window.visualViewport)==null||c.addEventListener("resize",s),(l=window.visualViewport)==null||l.addEventListener("scroll",s),window.addEventListener("resize",s),{element:n,content:r,open:i,close:a,destroy(){var m,_;a(),(m=window.visualViewport)==null||m.removeEventListener("resize",s),(_=window.visualViewport)==null||_.removeEventListener("scroll",s),window.removeEventListener("resize",s),t.remove(),n.remove()}}},we=e=>typeof requestAnimationFrame=="function"?requestAnimationFrame(e):window.setTimeout(e,0),Ue=e=>{if(typeof cancelAnimationFrame=="function"){cancelAnimationFrame(e);return}window.clearTimeout(e)},mt="language",Ur="bridgerte-code-block-language",pt=8;let ht=0;const qr=()=>(ht+=1,`${Ur}-${ht}`),jr=(e,t,n)=>{const r=e.querySelector(".bridgerte__code-block-control-label");e.dataset.language=n??"",r&&(r.textContent=Yt(t,n))},Kr=(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=Yt(e,t),o.className="bridgerte__code-block-control-arrow",n.append(r,o),n},Gr=e=>e.querySelector(".bridgerte__content")??e,Yr=e=>{const t=document.createElement("div"),n=Gr(e.root),r=Dt.resolvePayloadPanelSchema(e.languagePanel??F.codeBlockLanguagePanel,e.payloadPanelConfig),o=Gt(r);let a=null,s=null;const i=new Map,c=new Map,l=()=>{a==null||a.close()},m=(M,y)=>{e.isReadonly()||e.editor.update(()=>{const p=g.$getNodeByKey(M);H.$isCodeNode(p)&&p.setLanguage(y)})},_=(M,y)=>{we(()=>{m(M,y)})},E=(M,y,p)=>{var d;return((d=e.onRequest)==null?void 0:d.call(e,{id:qr(),readonly:e.isReadonly(),menuId:"code-block-language",command:{type:"block.setCodeLanguage",language:p},panel:r,anchorRect:{x:y.left,y:y.top,width:y.width,height:y.height},currentValues:{[mt]:p},submit:v=>{l(),_(M,v[mt]??"")},cancel:l}))===!0},k=(M,y)=>{const p=e.root.getBoundingClientRect(),d=y.getBoundingClientRect(),v=d.bottom<p.top||d.top>p.bottom;M.hidden=v,M.style.transform=`translate(${d.left-p.left+pt}px, ${d.top-p.top+pt}px)`},f=M=>{var b;const y=e.editor.getElementByKey(M);if(!y){(b=i.get(M))==null||b.remove(),i.delete(M);return}y.dataset.lexicalKey=M;const p=y.getAttribute("data-language"),d=i.get(M);if(d){jr(d,o,p),k(d,y);return}const v=Kr(o,p),u=V(v);v.dataset.lexicalKey=M,i.set(M,v),c.set(v,u),t.append(v),k(v,y)},w=()=>{s=null,i.forEach((M,y)=>{f(y)})},L=()=>{s===null&&(s=we(w))},h=(M,y)=>{const p=M.getBoundingClientRect(),d=M.dataset.language??"";if(E(y,p,d))return;if(e.isReadonly()){l();return}a||(a=Xt({root:e.root,className:"bridgerte__code-block-menu",onBackdropClick:l}));const v=document.createElement("div");a.content.replaceChildren(),a.element.style.minWidth="180px",v.className="bridgerte__code-block-menu-list",o.forEach(u=>{const b=document.createElement("button");b.type="button",b.className="bridgerte__code-block-menu-item",b.textContent=u.label,V(b),b.addEventListener("click",()=>{l(),_(y,u.value)}),v.append(b)}),a.content.append(v),a.open({x:p.left,y:p.top,width:180,height:p.height})};t.className="bridgerte__code-block-controls-layer",e.root.append(t);const C=e.editor.registerMutationListener(H.CodeNode,M=>{M.forEach((y,p)=>{if(y==="destroyed"){const d=i.get(p);if(d){const v=c.get(d);v==null||v(),c.delete(d),d.remove()}i.delete(p);return}f(p)})}),S=e.editor.registerUpdateListener(L),x=M=>{const y=M.target;if(!(y instanceof HTMLElement))return;const p=y.closest(".bridgerte__code-block-control");if(!(p instanceof HTMLElement))return;const d=p.dataset.lexicalKey;d&&(M.preventDefault(),M.stopPropagation(),h(p,d))},P=M=>{const y=M.target;y instanceof HTMLElement&&y.closest(".bridgerte__code-block-control")&&M.preventDefault()},I=M=>{const y=M.target;if(!(y instanceof HTMLElement))return;if(!y.closest(".bridgerte__code-block")){l();return}const p=y.closest(".bridgerte__code-block");if(!p||p.textContent)return;const d=p.dataset.lexicalKey;d&&(e.editor.update(()=>{const v=g.$getNodeByKey(d);H.$isCodeNode(v)&&v.selectEnd()}),e.editor.focus())};return t.addEventListener("pointerdown",P),t.addEventListener("click",x),n.addEventListener("pointerdown",I),n.addEventListener("scroll",L,{passive:!0}),window.addEventListener("resize",L),{destroy(){C(),S(),s!==null&&(Ue(s),s=null),t.removeEventListener("pointerdown",P),t.removeEventListener("click",x),n.removeEventListener("pointerdown",I),n.removeEventListener("scroll",L),window.removeEventListener("resize",L),i.forEach(M=>{var y;(y=c.get(M))==null||y(),M.remove()}),i.clear(),c.clear(),t.remove(),a==null||a.destroy(),a=null}}},qe=["media-resize-20","media-resize-50","media-resize-100"],Xr=["media-align-left","media-align-center","media-align-right","|",...qe,"|","media-remove"],Jr=["media-retry","|","media-remove"],Qr=[{id:"media-align-left",command:{type:"media.align",assetId:"",value:"left"},label:"左",icon:"align-left",group:"media"},{id:"media-align-center",command:{type:"media.align",assetId:"",value:"center"},label:"中",icon:"align-center",group:"media"},{id:"media-align-right",command:{type:"media.align",assetId:"",value:"right"},label:"右",icon:"align-right",group:"media"},{id:"media-resize-20",command:{type:"media.resize",assetId:"",widthPercent:20},label:"20%",icon:"media-resize-20",group:"media"},{id:"media-resize-50",command:{type:"media.resize",assetId:"",widthPercent:50},label:"50%",icon:"media-resize-50",group:"media"},{id:"media-resize-100",command:{type:"media.resize",assetId:"",widthPercent:100},label:"100%",icon:"media-resize-100",group:"media"},{id:"media-retry",command:{type:"media.retry",assetId:""},label:"重试",icon:"refresh-cw",group:"media"},{id:"media-remove",command:{type:"media.remove",assetId:""},label:"删除",icon:"trash-2",group:"media"}],Zr=e=>qe.includes(e),eo=e=>typeof e=="object"&&Array.isArray(e.menuKeys),to=e=>new Set(e.flatMap(t=>t==="|"?[]:typeof t=="string"?[t]:eo(t)?[t.key,...t.menuKeys]:[])),no=e=>{const t=to(e),n=qe.filter(r=>!t.has(r));return n.length===0?e:[...e,"|",...n]},ro=e=>{var r;const t=(e==null?void 0:e.toolbarKeys)??Xr;return{...e,toolbarKeys:no(t),excludeKeys:(r=e==null?void 0:e.excludeKeys)==null?void 0:r.filter(o=>!Zr(o))}},oo=(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}},ao=(e,t,n)=>e.command.type==="media.resize"?e.command.widthPercent===t:e.command.type==="media.align"&&e.command.value===n,Jt=(e,t={})=>{const n=_e(Qr,{menuLabels:t.menuLabels}),r=e==="error"?{toolbarKeys:Jr}:ro(t.config);return F.resolveToolbarMenu(r,n)},oe=8,ie="bridgerte__media-controls-button",so=e=>e.querySelector(".bridgerte__content")??e,ft=e=>e instanceof Element?e.closest(".bridgerte__media"):null,io=(e,t=!1)=>{const n=document.createElement("button");return n.type="button",n.className=ie,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},Qt=e=>e.flatMap(t=>t.type==="button"?[t.item]:t.type==="group"?t.items:[]),lo=(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(io(a,ao(a,n,r)))})},co=(e,t,n)=>{const r=document.createElement("div"),o=e.dataset.status,a=Number(e.dataset.displayWidthPercent??t),s=e.dataset.align??"left",i=Jt(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=Qt(i).map(c=>c.id).join("|"),i.forEach(c=>{lo(r,c,a,s)}),r},uo=e=>{const t=document.createElement("div"),n=so(e.root),r=new Map,o=new Map,a=new Map;let s=null,i=null,c=!1,l=null;const m=d=>{var u;const v=r.get(d);v&&((u=o.get(v))==null||u(),o.delete(v),v.remove(),r.delete(d),l===d&&(l=null))},_=(d,v)=>v.dataset.status==="error"||l===d,E=(d,v)=>{const u=e.root.getBoundingClientRect(),b=v.getBoundingClientRect(),N=b.bottom<u.top||b.top>u.bottom,A=Math.max(oe,u.width-d.offsetWidth-oe),O=Math.min(Math.max(b.left-u.left+oe,oe),A),D=Math.max(oe,b.top-u.top-d.offsetHeight-oe);d.hidden=N,d.style.transform=`translate(${O}px, ${D}px)`},k=d=>{const v=e.editor.getElementByKey(d);if(!v){m(d);return}v.dataset.lexicalKey=d,a.set(v,d);const u=r.get(d);if(!_(d,v)){m(d);return}if(u){const A=v.dataset.status==="error",O=u.querySelector('[data-action="retry"]')!==null,D=v.dataset.displayWidthPercent??"",R=v.dataset.align??"";if(A===O&&u.dataset.displayWidthPercent===D&&u.dataset.align===R){E(u,v);return}m(d)}const b=co(v,e.defaultWidthPercent,e),N=V(b,{targetSelector:`.${ie}`});b.dataset.lexicalKey=d,b.dataset.assetId=v.dataset.assetId,r.set(d,b),o.set(b,N),t.append(b),E(b,v)},f=()=>{s=null,a.forEach((d,v)=>{e.root.contains(v)||(a.delete(v),m(d))}),e.root.querySelectorAll(".bridgerte__media").forEach(d=>{const v=d.dataset.lexicalKey;v&&(a.set(d,v),k(v))}),r.forEach((d,v)=>{k(v)}),l!==null&&k(l)},w=()=>{s===null&&(s=we(f))},L=(d,v)=>{const u=v.dataset.assetId,b=Qt(Jt(v.dataset.status,{config:e.mediaControlsConfig,menuLabels:e.menuLabels})).find(A=>A.id===d.dataset.menuItemId);if(!u||!b)return;const N=oo(b,u);N&&e.executeCommand(N)},h=d=>{if(!d){const b=l;l=null,b!==null&&k(b);return}const v=d.dataset.lexicalKey?d.dataset.lexicalKey:a.get(d)??null;if(!v||l===v)return;const u=l;l=v,u!==null&&k(u),k(v)},C=d=>{const v=ft(d.target);h(v)},S=d=>{h(ft(d.target))},x=d=>{const v=d.target;if(!(v instanceof HTMLElement))return;const u=v.closest(`.${ie}`);u&&(d.preventDefault(),i=d.pointerType==="mouse"?null:u)},P=d=>{if(d.pointerType==="mouse"||!i)return;const v=d.target,u=v instanceof HTMLElement?v.closest(".bridgerte__media-controls"):null,b=v instanceof HTMLElement?v.closest(`.${ie}`):null;b===i&&u&&(d.preventDefault(),d.stopPropagation(),L(b,u),c=!0),i=null},I=()=>{i=null},M=d=>{if(c){c=!1,d.preventDefault(),d.stopPropagation();return}const v=d.target;if(!(v instanceof HTMLElement))return;const u=v.closest(`.${ie}`),b=v.closest(".bridgerte__media-controls");!u||!b||(d.preventDefault(),d.stopPropagation(),L(u,b))};t.className="bridgerte__media-controls-layer",e.root.append(t);const y=e.editor.registerMutationListener(ae,d=>{d.forEach((v,u)=>{if(v==="destroyed"){m(u);return}k(u)})}),p=e.editor.registerUpdateListener(w);return t.addEventListener("pointerdown",x),t.addEventListener("pointerup",P),t.addEventListener("pointercancel",I),t.addEventListener("click",M),n.addEventListener("pointerdown",C),n.addEventListener("focusin",S),n.addEventListener("scroll",w,{passive:!0}),window.addEventListener("resize",w),{destroy(){y(),p(),s!==null&&(Ue(s),s=null),t.removeEventListener("pointerdown",x),t.removeEventListener("pointerup",P),t.removeEventListener("pointercancel",I),t.removeEventListener("click",M),n.removeEventListener("pointerdown",C),n.removeEventListener("focusin",S),n.removeEventListener("scroll",w),window.removeEventListener("resize",w),r.forEach(d=>{var v;(v=o.get(d))==null||v(),d.remove()}),r.clear(),o.clear(),a.clear(),t.remove()}}},go=["width","height"],j=(e,t)=>{var r;const n=(r=e[t])==null?void 0:r.trim();return n||void 0},Pe=(e,t)=>{const n=Number.parseInt(e[t]??"",10);return Number.isFinite(n)&&n>0?n:void 0},bt=(e,t)=>go.reduce((n,r)=>{const o=Pe(t,r);return o===void 0?n:{...n,[r]:o}},e),mo=(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=j(t,"href"),r=j(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=Pe(t,"rows"),r=Pe(t,"cols");return n&&r?{type:"table.insert",rows:n,cols:r}:null}if(e.type==="media.insertImage"){const n=j(t,"url");return n?bt({...e,url:n,alt:j(t,"alt"),title:j(t,"title")},t):null}if(e.type==="media.insertVideo"){const n=j(t,"url");return n?bt({...e,url:n,poster:j(t,"poster"),title:j(t,"title")},t):null}return e},X=e=>Math.min(Math.max(Math.round(e),0),255),Ie=({r:e,g:t,b:n})=>`#${[e,t,n].map(r=>X(r).toString(16).padStart(2,"0")).join("")}`,Zt=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)}},po=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:X(Number(t[1])),g:X(Number(t[2])),b:X(Number(t[3]))}:null},ho=e=>{const t=Zt(e)??po(e);return t?Ie(t):null},en=e=>Math.min(Math.max(e,0),1),fo=({r:e,g:t,b:n})=>{const r=X(e)/255,o=X(t)/255,a=X(n)/255,s=Math.max(r,o,a),i=Math.min(r,o,a),c=s-i;let l=0;return c!==0&&(s===r?l=60*((o-a)/c%6):s===o?l=60*((a-r)/c+2):l=60*((r-o)/c+4)),{h:l<0?l+360:l,s:s===0?0:c/s,v:s}},yt=({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,i=0,c=0;return e<60?(s=r,i=o):e<120?(s=o,i=r):e<180?(i=r,c=o):e<240?(i=o,c=r):e<300?(s=o,c=r):(s=r,c=o),{r:(s+a)*255,g:(i+a)*255,b:(c+a)*255}},bo=({h:e,s:t})=>{const n=e*Math.PI/180,r=en(t)*50;return{x:50+Math.cos(n)*r,y:50+Math.sin(n)*r}},vt=(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,i=Math.min(Math.sqrt(a*a+s*s),n.width/2),c=Math.atan2(s,a)*180/Math.PI;return{h:c<0?c+360:c,s:en(i/(n.width/2)),v:1}},yo=["#000000","#ffffff"],vo=e=>{var t;return(t=e.options)!=null&&t.length?e.options:yo.map(n=>({label:n,value:n}))},tn=()=>{const e=document.createElement("section");return e.className="bridgerte__payload-panel-field",e},wo=(e,t,n)=>{const r=tn(),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",V(s),s.addEventListener("pointerdown",i=>{i.preventDefault()}),s.addEventListener("click",()=>{n({...t,[e.name]:a.value})}),o.append(s)}),r.append(o),r},Co=(e,t,n)=>{const r=tn(),o=document.createElement("div"),a=document.createElement("span"),s=document.createElement("div"),i=document.createElement("div");let c={h:0,s:0,v:1},l=null;const m=k=>{const f=ho(k);if(!f)return;t[e.name]=f,i.style.background=f,c=fo(Zt(f)??{r:255,g:255,b:255});const w=bo(c);o.dataset.active="true",i.dataset.empty="false",a.style.left=`${w.x}%`,a.style.top=`${w.y}%`},_=()=>{const k=t[e.name];k&&n({...t,[e.name]:k})};r.className="bridgerte__payload-panel-field",o.className="bridgerte__payload-panel-color-wheel",o.setAttribute("aria-label",`${e.label}选择区域`),a.className="bridgerte__payload-panel-color-wheel-handle",s.className="bridgerte__payload-panel-color-actions",i.className="bridgerte__payload-panel-color-preview",i.dataset.empty="true",o.append(a),vo(e).forEach(k=>{const f=document.createElement("button"),w=k.value;f.type="button",f.className="bridgerte__payload-panel-color-swatch",f.dataset.value=w,f.style.background=w,f.setAttribute("aria-label",`选择颜色 ${k.label}`),V(f),f.addEventListener("pointerdown",L=>{L.preventDefault()}),f.addEventListener("click",()=>{m(w),_()}),s.append(f)}),o.addEventListener("pointerdown",k=>{l=k.pointerId,o.setPointerCapture(k.pointerId),c=vt(k,o),m(Ie(yt(c))),k.preventDefault()}),o.addEventListener("pointermove",k=>{l===k.pointerId&&(c=vt(k,o),m(Ie(yt(c))))}),o.addEventListener("pointerup",k=>{l===k.pointerId&&(l=null,o.releasePointerCapture(k.pointerId),_())}),o.addEventListener("pointercancel",k=>{l===k.pointerId&&(l=null,o.releasePointerCapture(k.pointerId))});const E=t[e.name];return E&&m(E),r.append(o,i,s),r},_o=(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},Eo=(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},xo=({field:e,values:t,onSubmit:n})=>e.type==="color"?Co(e,t,n):e.type==="text"?_o(e,t,n):e.type==="number"?Eo(e,t,n):wo(e,t,n),Mo=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)??""},ko=(e,t)=>(t==null?void 0:t[e.name])??(e.type==="color"?"":Mo(e)),wt=e=>e.some(t=>t.type==="text"||t.type==="number"),To=e=>{const t=e.querySelector(".bridgerte__payload-panel-text-input");queueMicrotask(()=>{t==null||t.focus(),t==null||t.select()})},So=(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}`),V(s),s.addEventListener("pointerdown",i=>{i.preventDefault()}),s.addEventListener("click",()=>{t(a)}),r.append(s)}return r},No=e=>e==="font-size"||e==="font-family"||e==="line-height"?"180px":"220px",Lo=3,Ro=3,Po=10,nn=10,Io=16,Ao=2,$o=24,Bo=()=>{var e;return typeof window<"u"&&((e=window.matchMedia)==null?void 0:e.call(window,"(hover: hover) and (pointer: fine)").matches)===!0},le=(e,t)=>{const n=Number.parseInt(e??"",10);return Number.isFinite(n)?Math.min(Math.max(n,t.min),t.max):t.defaultValue},Do=(e,t)=>e.type==="number"&&e.name===t,Ct=(e,t)=>typeof e=="number"&&Number.isFinite(e)&&e>0?Math.floor(e):t,_t=(e,t,n,r)=>{const o=e.find(m=>Do(m,t)),a=Ct(o==null?void 0:o.min,1),s=Ct(o==null?void 0:o.max,n),i=Math.max(a,s),c=Math.min(Math.max(r,a),i),l=le(o==null?void 0:o.defaultValue,{min:a,max:i,defaultValue:c});return{min:a,max:i,defaultValue:l}},rn=e=>({rows:_t(e,"rows",G.BRIDGERTE_TABLE_INSERT_MAX_ROWS,Lo),cols:_t(e,"cols",G.BRIDGERTE_TABLE_INSERT_MAX_COLS,Ro)}),Oo=e=>{const t=Math.min(e.cols.max,nn);return`${t*Io+Math.max(t-1,0)*Ao+$o}px`},Ho=({fields:e,values:t,onSubmit:n})=>{const r=rn(e),o=document.createElement("section"),a=document.createElement("div"),s=document.createElement("div"),i=[],c=Bo(),l=Math.min(r.rows.max,Po),m=Math.min(r.cols.max,nn),_={...r.rows,max:l,defaultValue:Math.min(r.rows.defaultValue,l)},E={...r.cols,max:m,defaultValue:Math.min(r.cols.defaultValue,m)};let k=le(t.rows,_),f=le(t.cols,E),w=null;const L=(M,y)=>{k=M,f=y,t.rows=String(M),t.cols=String(y),s.textContent=`${M} x ${y}`,i.forEach(p=>{const d=Number.parseInt(p.dataset.rows??"0",10),v=Number.parseInt(p.dataset.cols??"0",10);p.dataset.active=String(d<=M&&v<=y)})},h=M=>{var y;return((y=document.elementFromPoint(M.clientX,M.clientY))==null?void 0:y.closest(".bridgerte__payload-panel-table-cell"))??null},C=M=>{if(!M)return;const y=le(M.dataset.rows,_),p=le(M.dataset.cols,E);L(y,p)},S=()=>{n({...t,rows:String(k),cols:String(f)})},x=()=>{w=null},P=()=>{window.setTimeout(x,0)},I=(M,y)=>{if(M.detail>0&&w!==y){M.preventDefault(),M.stopPropagation();return}x(),C(y),S()};for(let M=1;M<=l;M+=1)for(let y=1;y<=m;y+=1){const p=document.createElement("button");p.type="button",p.className="bridgerte__payload-panel-table-cell",p.dataset.rows=String(M),p.dataset.cols=String(y),p.setAttribute("aria-label",`插入 ${M} 行 ${y} 列表格`),V(p),p.addEventListener("pointerdown",d=>{w=p,C(p),d.preventDefault()}),p.addEventListener("pointerup",P),p.addEventListener("pointercancel",x),p.addEventListener("click",d=>{I(d,p)}),c&&p.addEventListener("pointerenter",()=>{C(p)}),i.push(p),a.append(p)}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(m)),s.className="bridgerte__payload-panel-table-status",s.setAttribute("aria-live","polite"),a.addEventListener("pointermove",M=>{c||C(h(M))}),L(k,f),o.append(a,s),o},Fo="bridgerte-payload-panel";let Et=0;const zo=()=>(Et+=1,`${Fo}-${Et}`),be=e=>e.panel.id==="table-insert",Wo=(e,t)=>{const n=document.createElement("button");return n.type="button",n.className="bridgerte__payload-panel-submit",n.textContent="应用",V(n),n.addEventListener("pointerdown",r=>{r.preventDefault()}),n.addEventListener("click",()=>{t(e)}),n},Vo=e=>{let t=null,n={};const r=Xt({root:e.editorRoot,className:"bridgerte__payload-panel",onBackdropClick:()=>{o()}});function o(){t=null,n={},r.close(),r.content.replaceChildren()}const a=l=>{var _;if(!t||t.readonly||e.isReadonly())return;const m=mo(t.command,l);m&&((_=e.restoreEditorFocus)==null||_.call(e,()=>{o(),e.isReadonly()||e.executeCommand(m)}))},s=l=>{var m;!t||t.readonly||e.isReadonly()||(m=e.restoreEditorFocus)==null||m.call(e,()=>{o(),e.isReadonly()||e.executeCommand(l)})},i=l=>{n=l.panel.fields.reduce((_,E)=>(_[E.name]=ko(E,l.currentValues),_),{});const m=be(l)?Oo(rn(l.panel.fields)):No(l.panel.id);r.element.style.width=`min(${m}, calc(100vw - 24px))`,r.content.append(So(l,s,e.getClearCommand)),be(l)?r.content.append(Ho({fields:l.panel.fields,values:n,onSubmit:a})):l.panel.fields.forEach(_=>{r.content.append(xo({field:_,values:n,onSubmit:a}))}),!be(l)&&wt(l.panel.fields)&&r.content.append(Wo(n,a)),r.open(l.anchorRect),!be(l)&&wt(l.panel.fields)&&To(r.content)};return{open:l=>{var E;o();const m={...l,id:zo(),readonly:e.isReadonly(),submit:a,cancel:o};if(t=m,((E=e.onRequest)==null?void 0:E.call(e,m))!==!0){if(m.readonly){o();return}i(l)}},close:o,destroy(){o(),r.destroy()}}},ce="bridgerte__table-controls-button",Uo=["table-insert-row-after","table-delete-row","table-insert-column-after","table-delete-column","table-delete"],qo=()=>{const e=new Map(F.defaultMenuSchema.map(t=>[t.id,t]));return Uo.map(t=>F.tableHeaderMenuItems.find(n=>n.id===t)??e.get(t)).filter(t=>t!==void 0)},on=qo(),jo=new Map(on.map(e=>[e.id,e])),Ko=e=>e.matches(".bridgerte__table")?e:e.querySelector(".bridgerte__table")??e,Go=(e,t)=>e.classList.contains("bridgerte__table-wrapper")?e:t.parentElement instanceof HTMLElement?t.parentElement:t,Yo=e=>e.querySelector(".bridgerte__content")??e,xt=e=>e instanceof Element?e.closest(".bridgerte__table-wrapper"):null,Xo=e=>{const t=e.getFirstChild();if(!B.$isTableRowNode(t))return null;const n=t.getFirstChild();return B.$isTableCellNode(n)?n:null},Jo=e=>{const t=document.createElement("button");return t.type="button",t.className=ce,t.textContent=e.label,t.dataset.menuItemId=e.id,t.setAttribute("aria-label",e.label),t},Qo=()=>{const e=document.createElement("div");return e.className="bridgerte__table-controls",e.contentEditable="false",e.setAttribute("aria-label","表格操作"),on.forEach(t=>{e.append(Jo(t))}),e},Zo=e=>{const t=document.createElement("div"),n=Yo(e.root),r=new Map,o=new Map,a=new Map;let s=null,i=null,c=!1,l=null;const m=(u,b)=>{const N=e.root.getBoundingClientRect(),A=b.getBoundingClientRect(),O=A.bottom<N.top||A.top>N.bottom,D=Math.max(8,N.width-u.offsetWidth-8),R=Math.min(Math.max(A.left-N.left+8,8),D),T=Math.max(8,A.top-N.top-u.offsetHeight-8);u.hidden=O,u.style.transform=`translate(${R}px, ${T}px)`},_=u=>l===u,E=u=>{const b=e.editor.getElementByKey(u);if(!b){k(u);return}b.dataset.lexicalKey=u;const N=Ko(b),A=Go(b,N);a.set(A,u);const O=r.get(u);if(!_(u)){k(u);return}if(O){m(O,A);return}const D=Qo(),R=V(D,{targetSelector:`.${ce}`});D.dataset.lexicalKey=u,r.set(u,D),o.set(D,R),t.append(D),m(D,A)},k=u=>{var N;const b=r.get(u);b&&((N=o.get(b))==null||N(),o.delete(b),b.remove(),r.delete(u),l===u&&(l=null))},f=()=>{s=null,a.forEach((u,b)=>{e.root.contains(b)||(a.delete(b),k(u))}),e.root.querySelectorAll(".bridgerte__table-wrapper").forEach(u=>{const b=u.dataset.lexicalKey;b&&(a.set(u,b),E(b))}),r.forEach((u,b)=>{E(b)}),l!==null&&E(l)},w=()=>{s===null&&(s=we(f))},L=u=>{e.editor.update(()=>{var N;const b=g.$getNodeByKey(u);b instanceof B.TableNode&&((N=Xo(b))==null||N.selectStart())}),e.editor.focus()},h=(u,b)=>{L(u),e.executeCommand(b)},C=(u,b)=>{const N=b.dataset.lexicalKey,A=u.dataset.menuItemId,O=A?jo.get(A):void 0;!N||!O||h(N,O.command)},S=u=>{if(!u){const A=l;l=null,A!==null&&E(A);return}const b=u.dataset.lexicalKey?u.dataset.lexicalKey:a.get(u)??null;if(!b||l===b)return;const N=l;l=b,N!==null&&E(N),E(b)},x=u=>{S(xt(u.target))},P=u=>{S(xt(u.target))},I=u=>{const b=u.target;if(!(b instanceof HTMLElement))return;const N=b.closest(`.${ce}`);N&&(u.preventDefault(),i=u.pointerType==="mouse"?null:N)},M=u=>{if(u.pointerType==="mouse"||!i)return;const b=u.target,N=b instanceof HTMLElement?b.closest(".bridgerte__table-controls"):null,A=b instanceof HTMLElement?b.closest(`.${ce}`):null;A===i&&N&&(u.preventDefault(),u.stopPropagation(),C(A,N),c=!0),i=null},y=()=>{i=null},p=u=>{if(c){c=!1,u.preventDefault(),u.stopPropagation();return}const b=u.target;if(!(b instanceof HTMLElement))return;const N=b.closest(`.${ce}`),A=b.closest(".bridgerte__table-controls");!N||!A||(u.preventDefault(),u.stopPropagation(),C(N,A))},d=e.editor.registerMutationListener(B.TableNode,u=>{u.forEach((b,N)=>{if(b==="destroyed"){k(N);return}E(N)})}),v=e.editor.registerUpdateListener(w);return t.className="bridgerte__table-controls-layer",e.root.append(t),t.addEventListener("pointerdown",I),t.addEventListener("pointerup",M),t.addEventListener("pointercancel",y),t.addEventListener("click",p),n.addEventListener("pointerdown",x),n.addEventListener("focusin",P),n.addEventListener("scroll",w,{passive:!0}),window.addEventListener("resize",w),{destroy(){d(),v(),s!==null&&(Ue(s),s=null),t.removeEventListener("pointerdown",I),t.removeEventListener("pointerup",M),t.removeEventListener("pointercancel",y),t.removeEventListener("click",p),n.removeEventListener("pointerdown",x),n.removeEventListener("focusin",P),n.removeEventListener("scroll",w),window.removeEventListener("resize",w),r.forEach(u=>{var b;(b=o.get(u))==null||b(),u.remove()}),r.clear(),o.clear(),a.clear(),t.remove()}}},ea=e=>{const t=Vo({editorRoot:e.editorRoot,isReadonly:e.isReadonly,restoreEditorFocus:e.restoreEditorFocus,executeCommand:e.executeCommand,getClearCommand:e.getClearCommand,onRequest:e.onRequest}),n=Yr({editor:e.lexicalEditor,root:e.editorRoot,isReadonly:e.isReadonly,languagePanel:e.codeBlockLanguagePanel,payloadPanelConfig:e.payloadPanelConfig,onRequest:e.onRequest}),r=Zo({editor:e.lexicalEditor,root:e.editorRoot,executeCommand:e.executeCommand}),o=uo({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()}}},ta=(e,t)=>{const n=document.createElement("div"),r=document.createElement("div"),o=document.createElement("div"),a=document.createElement("div");return e.classList.add("bridgerte"),e.textContent="",n.className="bridgerte__editor",a.className="bridgerte__content",a.dataset.placeholder=t.placeholder,a.setAttribute("role","textbox"),a.setAttribute("aria-multiline","true"),r.append(a),t.shouldRenderToolbar&&t.toolbarPlacement==="top"&&n.append(o),n.append(r),t.shouldRenderToolbar&&t.toolbarPlacement==="bottom"&&n.append(o),e.append(n),{rootElement:n,editorElement:r,toolbarElement:o,contentElement:a}},na=({editor:e})=>{let t=null;return{capture(){e.getEditorState().read(()=>{var n;t=((n=g.$getSelection())==null?void 0:n.clone())??null})},restore(){t&&e.update(()=>{g.$setSelection((t==null?void 0:t.clone())??null)})},clear(){t=null}}},ra=/((https?:\/\/|www\.)[^\s<>()]+[^\s<>().,;:!?])/i,oa=/([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})/i,aa={changeHandlers:[],excludeParents:[],matchers:[W.createLinkMatcherWithRegExp(ra,e=>e.startsWith("http://")||e.startsWith("https://")?e:`https://${e}`),W.createLinkMatcherWithRegExp(oa,e=>`mailto:${e}`)]},sa=({editor:e})=>W.registerAutoLink(e,aa),ia=[".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(","),la=(e,t)=>{const n=e.anchorNode,r=e.focusNode;return n!==null&&r!==null&&t.contains(n)&&t.contains(r)},ca=e=>{e.querySelectorAll(ia).forEach(t=>{t.remove()}),e.querySelectorAll('[contenteditable="false"]').forEach(t=>{t.classList.contains("bridgerte__media")||t.remove()})},da=e=>{const t=e.ownerDocument.getSelection();if(!t||t.rangeCount===0||!la(t,e))return null;const n=t.getRangeAt(0).cloneContents();ca(n);const r=e.ownerDocument.createElement("div");return r.append(n),{html:r.innerHTML,text:r.textContent??""}},ua=({target:e,isReadonly:t})=>{const n=o=>{const a=da(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})}},ye=8,ga=()=>{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}},Mt=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n));function je(e,t,n={}){const r=n.placement??"bottom-start",o=n.offset??8,a=n.shiftPadding??8,s=n.strategy??"absolute";let i=null,c=!1;const l=()=>{t.style.position=s,t.style.left="0px",t.style.top="0px",t.style.opacity="0",t.style.pointerEvents="none"},m=(f,w)=>{const L=ga(),h=t.getBoundingClientRect(),C=L.left+ye,S=L.top+ye,x=L.left+L.width-h.width-ye,P=L.top+L.height-h.height-ye;t.style.left=`${Mt(f,C,x)}px`,t.style.top=`${Mt(w,S,P)}px`,t.style.opacity="",t.style.pointerEvents=""},_=async()=>{const f=await te.computePosition(e,t,{placement:r,strategy:s,platform:te.platform,middleware:[te.offset(o),te.flip(),te.shift({padding:a})]});m(f.x,f.y)},E=()=>{i==null||i(),i=null},k=f=>{if(c!==f){if(c=f,E(),c){l(),t.hidden=!1,i=te.autoUpdate(e,t,_),_();return}t.hidden=!0,t.style.opacity="",t.style.pointerEvents=""}};return l(),t.hidden=!0,{update:_,setOpen:k,destroy(){E(),t.hidden=!0}}}const Ae=()=>{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},ma=160,pa={toolbarKeys:["bold","italic","underline","strike","inline-code","clear-style","|","color","background-color","font-size","font-family","line-height"]},ha=()=>{const e=g.$getSelection();return g.$isRangeSelection(e)&&!e.isCollapsed()},kt=(e,t)=>e.target instanceof Node&&t.contains(e.target),Tt=e=>e instanceof Element?e.closest(".bridgerte__hoverbar-button"):null,fa=e=>e.flatMap(t=>t.type==="button"?[t.item]:t.type==="group"?t.items:[]),ba=e=>{const t=document.createElement("span");return t.className="bridgerte__hoverbar-separator",t.dataset.separatorId=e.key,t.setAttribute("aria-hidden","true"),t},ya=(e,t,n)=>{const r=Ut(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)),Ve(o,n[e.icon]??We[e.icon],e.label),o},va=({editorRoot:e,contentElement:t,editor:n,isReadonly:r,executeCommand:o,requestPayloadPanel:a,getCommandStates:s,menuSchema:i,hoverbarConfig:c,menuLabels:l,payloadPanelConfig:m,icons:_={}})=>{const E=_e(i??F.defaultMenuSchema,{menuLabels:l,payloadPanelConfig:m}),k=F.resolveToolbarMenu(c??pa,E),f=fa(k),w=document.createElement("span"),L=document.createElement("div");let h=null,C=!1,S=null;const x=V(L,{targetSelector:".bridgerte__hoverbar-button"});w.className="bridgerte__hoverbar-anchor",w.setAttribute("aria-hidden","true"),L.className="bridgerte__floating-menu bridgerte__hoverbar",L.setAttribute("role","toolbar"),L.setAttribute("aria-label","BridgeRTE hoverbar"),e.append(w,L),h=je(w,L,{placement:"top",offset:8,strategy:"fixed"});const P=()=>{S&&(window.clearTimeout(S),S=null)},I=()=>{P(),C=!1,L.replaceChildren(),L.dataset.visible="false",h==null||h.setOpen(!1)},M=()=>{const R=Ae(),T=t.getBoundingClientRect();w.style.left=`${(R==null?void 0:R.left)??T.left}px`,w.style.top=`${(R==null?void 0:R.top)??T.top}px`,w.style.width=`${(R==null?void 0:R.width)||1}px`,w.style.height=`${(R==null?void 0:R.height)||1}px`},y=()=>{const R=s();L.replaceChildren(...k.flatMap(T=>T.type==="separator"?[ba(T)]:(T.type==="button"?[T.item]:T.items).map(z=>ya(z,R,_)))),M(),C=!0,L.dataset.visible="true",h==null||h.setOpen(!0),h==null||h.update()},p=()=>r()?!1:n.getEditorState().read(ha),d=(R=!1)=>{if(P(),!p()){I();return}if(R){y();return}C&&I(),S=window.setTimeout(()=>{S=null,p()&&y()},ma)},v=R=>{const T=f.find($=>$.id===R.dataset.hoverbarItemId);if(!(!T||R.disabled)){if(T.payloadPanel){const $=R.getBoundingClientRect();a({menuId:T.id,command:T.command,panel:T.payloadPanel,currentValues:Vt(T,s()),anchorRect:{x:$.left,y:$.top,width:$.width,height:$.height}}),d(!0);return}o(T.command),d(!0)}},u=R=>{Tt(R.target)&&R.preventDefault()},b=R=>{const T=Tt(R.target);T&&(R.preventDefault(),v(T))},N=R=>{!C||kt(R,L)||kt(R,t)||I()},A=n.registerCommand(g.SELECTION_CHANGE_COMMAND,()=>(d(),!1),g.COMMAND_PRIORITY_LOW),O=n.registerUpdateListener(()=>{d()}),D=n.registerCommand(g.KEY_ESCAPE_COMMAND,R=>C?(R==null||R.preventDefault(),I(),!0):!1,g.COMMAND_PRIORITY_LOW);return L.addEventListener("pointerdown",u),L.addEventListener("click",b),document.addEventListener("pointerdown",N,!0),()=>{P(),A(),O(),D(),L.removeEventListener("pointerdown",u),L.removeEventListener("click",b),document.removeEventListener("pointerdown",N,!0),x(),h==null||h.destroy(),w.remove(),L.remove()}},wa=e=>e.metaKey||e.ctrlKey,Ca={b:{type:"format.bold"},i:{type:"format.italic"},u:{type:"format.underline"},"\\":{type:"format.clear"}},_a={x:{type:"format.strike"},l:{type:"align",value:"left"},e:{type:"align",value:"center"},r:{type:"align",value:"right"},j:{type:"align",value:"justify"}},Ea={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}},xa=e=>{const t=e.key.toLowerCase(),n=e.code;if(!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey||!wa(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 Ea[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"}:_a[t]??null:t==="z"?{type:"history.undo"}:t==="y"&&e.ctrlKey&&!e.metaKey?{type:"history.redo"}:t==="`"||t==="~"||n==="Backquote"?{type:"format.inlineCode"}:Ca[t]??null},Ma=({target:e,isReadonly:t,executeCommand:n})=>{const r=o=>{if(t())return;const a=xa(o);a&&(o.preventDefault(),n(a))};return e.addEventListener("keydown",r),()=>{e.removeEventListener("keydown",r)}},ka=(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)},Ke=(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=Ke(r,t);if(o)return o}return null},an=({editorRoot:e,contentElement:t,editor:n,isReadonly:r,menu:o,anchor:a,itemSelector:s,getCurrentTrigger:i,getTriggerRect:c,resolveItems:l,renderItem:m,renderStatus:_,onStateChange:E,onSelect:k})=>{let f=null,w=0;const L=V(o,{targetSelector:s}),h=je(a,o,{placement:"bottom-start",offset:2,strategy:"fixed"});e.append(a,o);const C=()=>{const T=f?c(f.trigger)??Ae():Ae(),$=t.getBoundingClientRect();return T??$},S=()=>{const T=C();a.style.left=`${T.left}px`,a.style.top=`${T.top}px`,a.style.height=`${T.height||1}px`},x=(T=!0)=>{f=null,o.dataset.visible="false",T&&o.replaceChildren(),h.setOpen(!1)},P=()=>{const T=o.querySelector(`${s}[data-active="true"]`);T&&ka(o,T)},I=(T,$)=>{!f||f.requestId!==$.requestId||(x(),k(T,$.trigger))},M=()=>{if(!f){x();return}const T=f,$=C();if((E==null?void 0:E(T,{anchorRect:$,close:x,selectItem:ee=>I(ee,T)}))===!0){o.replaceChildren(),o.dataset.visible="false",h.setOpen(!1);return}if(T.status==="success")o.replaceChildren(...T.items.map((ee,Je)=>m(ee,Je,Je===T.activeIndex)));else{const ee=_==null?void 0:_(T.status,T.trigger.query,T.error);o.replaceChildren(...ee?[ee]:[])}const Y=o.children.length>0;o.dataset.visible=String(Y),S(),h.setOpen(Y),P(),h.update()},y=async(T,$)=>{let z;try{z=await Promise.resolve(l(T))}catch(Y){(f==null?void 0:f.requestId)===$&&(f={...f,items:[],activeIndex:0,status:"error",error:Y},M());return}!f||$!==f.requestId||(f={...f,items:z,activeIndex:Math.min(f.activeIndex,Math.max(z.length-1,0)),status:z.length>0?"success":"empty",error:void 0},M())},p=()=>{if(r()){x();return}const T=n.getEditorState().read(i);if(!T){x(!1);return}w+=1,f={trigger:T,items:[],activeIndex:0,requestId:w,status:"loading",error:void 0},M(),y(T.query,w)},d=()=>{if(!f||f.status!=="success")return!1;const T=f.items[f.activeIndex],$=f.trigger;return T?(x(),k(T,$),!0):!1},v=T=>!f||f.status!=="success"||f.items.length===0?!1:(f={...f,activeIndex:(f.activeIndex+T+f.items.length)%f.items.length},M(),!0),u=T=>{const $=T.target,z=$ instanceof HTMLElement?$.closest(s):null,Y=z!=null&&z.dataset.index?Number.parseInt(z.dataset.index,10):Number.NaN;!f||f.status!=="success"||Number.isNaN(Y)||(f={...f,activeIndex:Y},T.preventDefault(),d())},b=T=>{const $=T.target;$ instanceof HTMLElement&&$.closest(s)&&T.preventDefault()},N=n.registerUpdateListener(()=>{p()}),A=n.registerCommand(g.KEY_ARROW_DOWN_COMMAND,T=>v(1)?(T==null||T.preventDefault(),!0):!1,g.COMMAND_PRIORITY_LOW),O=n.registerCommand(g.KEY_ARROW_UP_COMMAND,T=>v(-1)?(T==null||T.preventDefault(),!0):!1,g.COMMAND_PRIORITY_LOW),D=n.registerCommand(g.KEY_ENTER_COMMAND,T=>d()?(T==null||T.preventDefault(),!0):!1,g.COMMAND_PRIORITY_LOW),R=n.registerCommand(g.KEY_ESCAPE_COMMAND,T=>f?(T==null||T.preventDefault(),x(),!0):!1,g.COMMAND_PRIORITY_LOW);return o.addEventListener("click",u),o.addEventListener("pointerdown",b),{close:x,destroy(){N(),A(),O(),D(),R(),o.removeEventListener("click",u),o.removeEventListener("pointerdown",b),L(),h.destroy(),a.remove(),o.remove()}}},Ta={labelField:"label",descriptionField:"description",avatarField:"avatar",iconField:"data.icon",showAvatar:!0,showIcon:!0,showDescription:!0,loadingText:"加载中",emptyText:"没有匹配的提及",errorText:"提及加载失败"},Sa=e=>({...Ta,...e}),Na=(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},ve=(e,t)=>{if(t.startsWith("data."))return Na(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},La=e=>e.startsWith("@")?e:`@${e}`,sn=(e,t)=>{const n=ve(e,t.labelField)??e.label??e.value??e.id,r=t.showDescription?ve(e,t.descriptionField)??e.description:void 0,o=t.showAvatar?ve(e,t.avatarField)??e.avatar:void 0,a=t.showIcon&&!o?ve(e,t.iconField):void 0;return{item:e,label:La(n),...r?{description:r}:{},...o?{avatar:o}:{},...a?{icon:a}:{}}},Ra=(e,t)=>e.map(n=>sn(n,t)),$e=e=>e instanceof g.TextNode&&e.getTextContent().startsWith(" "),Pa=e=>{const n=e.getTextContent().slice(1);if(!n){e.remove();return}e.setTextContent(n)},Ia=(e,t)=>{const n=e.getPreviousSibling(),r=e.getNextSibling(),o=$e(r)?r.getNextSibling():r;if($e(r)&&Pa(r),e.remove(),t){n==null||n.selectEnd();return}o==null||o.selectStart()},Aa=e=>{const t=g.$getSelection();if(!g.$isRangeSelection(t)||!t.isCollapsed())return null;const n=t.anchor,r=n.getNode();if(at(r))return r;if(!(r instanceof g.TextNode))return null;const o=r.getTextContentSize(),a=r.getPreviousSibling(),s=r.getNextSibling(),i=$e(r)&&n.offset===1,c=e?n.offset===0||i?a:null:n.offset===o?s:null;return at(c)?c:null},$a=(e,t,n)=>{const r=a=>{if(t())return!1;const s=Aa(a);return s?(Ia(s,a),n(),!0):!1},o=(a,s)=>{const i=r(s);return i&&a.preventDefault(),i};return[e.registerCommand(g.KEY_BACKSPACE_COMMAND,a=>o(a,!0),g.COMMAND_PRIORITY_HIGH),e.registerCommand(g.KEY_DELETE_COMMAND,a=>o(a,!1),g.COMMAND_PRIORITY_HIGH),e.registerCommand(g.DELETE_CHARACTER_COMMAND,a=>r(a),g.COMMAND_PRIORITY_HIGH)]},Ba=/(?:^|\s)@([\p{L}\p{N}_-]*)$/u,St=[{id:"bridgerte-team",label:"BridgeRTE Team",value:"bridgerte-team"},{id:"frontend",label:"Frontend",value:"frontend"},{id:"designer",label:"Designer",value:"designer"}],Da=e=>e.trim().toLowerCase(),Oa=e=>[e.label,e.value,e.description].filter(Boolean).join(" ").toLowerCase(),Ha=e=>{const t=Da(e);return t?St.filter(n=>Oa(n).includes(t)):St},Fa=()=>{const e=g.$getSelection();if(!g.$isRangeSelection(e)||!e.isCollapsed())return null;const t=e.anchor,n=t.getNode();if(!(n instanceof g.TextNode))return null;const o=n.getTextContent().slice(0,t.offset).match(Ba);if(!o)return null;const a=o[1]??"",s=o[0]??"",i=s.startsWith("@")?0:1,c=t.offset-s.length+i;return{query:a,nodeKey:n.getKey(),startOffset:c,endOffset:t.offset}},za=()=>{const e=document.createElement("div");return e.className="bridgerte__floating-menu bridgerte__mention-menu",e.dataset.visible="false",e},Wa=()=>{const e=document.createElement("span");return e.className="bridgerte__mention-anchor",e.setAttribute("aria-hidden","true"),e},Va=(e,t)=>{var s;const n=e.getElementByKey(t.nodeKey),r=Ke(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())},Ua=(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},qa=(e,t)=>{const n=document.createElement("div");return n.className="bridgerte__mention-status",n.dataset.status=e,n.textContent=t,n},ja=(e,t)=>{switch(e){case"loading":return t.loadingText;case"empty":return t.emptyText;case"error":return t.errorText}},Ka=e=>e?{x:e.x,y:e.y,width:e.width,height:e.height}:void 0,Ga=({editorRoot:e,contentElement:t,editor:n,isReadonly:r,executeCommand:o,mentionProvider:a,mentionMenuConfig:s,onMentionMenuRequest:i})=>{const c=za(),l=Wa(),m=Sa(s),_=(f,w)=>{n.update(()=>{const L=g.$getNodeByKey(w.nodeKey);L instanceof g.TextNode&&(L.spliceText(w.startOffset,w.endOffset-w.startOffset,""),L.select(w.startOffset,w.startOffset))}),o({type:"mention.insert",item:f})},E=an({editorRoot:e,contentElement:t,editor:n,isReadonly:r,menu:c,anchor:l,itemSelector:".bridgerte__mention-item",getCurrentTrigger:Fa,getTriggerRect:f=>Va(n,f),resolveItems:async f=>{const w=await Promise.resolve(a?a(f):Ha(f));return Ra(w,m)},renderItem:Ua,renderStatus:f=>qa(f,ja(f,m)),onStateChange:i?(f,w)=>i({id:`bridgerte-mention-menu-${f.requestId}`,query:f.trigger.query,status:f.status,items:f.items,config:m,readonly:r(),anchorRect:Ka(w.anchorRect),...f.error?{error:f.error}:{},submit:L=>w.selectItem(sn(L,m)),cancel:w.close}):void 0,onSelect:(f,w)=>_(f.item,w)}),k=g.mergeRegister(...$a(n,r,()=>E.close(!1)));return()=>{k(),E.destroy()}},Ya=["script","style","iframe","object","embed","meta","link","xml","svg","math","canvas","form","input","button","select","textarea"].join(","),Xa=[".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(","),Ja=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"]),Qa=new Set(["http:","https:","mailto:"]),Za="p,div,blockquote,pre,h1,h2,h3,h4,h5,h6,ul,ol,table",es="p,blockquote,pre,h1,h2,h3,h4,h5,h6,ul,ol,table",ts=new Set(["colspan","rowspan"]),ns=new Set(["TD","TH"]),rs=new Set(["M","O","V","W"]),os=new Set(["SPAN"]),as=new Set(["color","background-color"]),ss=/^#([\da-f]{3}|[\da-f]{6}|[\da-f]{8})$/i,Nt=new Map([["B","strong"],["DEL","s"],["I","em"],["STRIKE","s"],["TT","code"]]),is=e=>{try{const t=new URL(e,window.location.href);return Qa.has(t.protocol)}catch{return!1}},Ge=e=>{e.replaceWith(...e.childNodes)},Ye=(e,t)=>{const n=e.ownerDocument.createElement(t);return n.append(...e.childNodes),e.replaceWith(n),n},ls=e=>{const t=e.tagName.split(":")[0]??"";return e.tagName.includes(":")&&rs.has(t)},ln=e=>{[...e.childNodes].forEach(t=>{if(t.nodeType===Node.COMMENT_NODE){t.remove();return}ln(t)})},cn=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}cn(t)})},cs=e=>/^[1-9]\d*$/.test(e.trim()),Xe=e=>{const t=e.trim().toLowerCase(),[,n]=t.match(ss)??[];return n?n.length===8?`#${n.slice(2)}`:t:null},ds=(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(),i=Xe(a.join(":"));return!s||!i||!as.has(s)?[]:[`${s}: ${i}`]});return n.length>0?`${n.join("; ")};`:null},us=e=>{if(ls(e)){e.remove();return}if(!Ja.has(e.tagName)){Ge(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=ds(e.tagName,t.value);if(r){e.setAttribute(t.name,r);return}e.removeAttribute(t.name);return}if(e.tagName==="A"&&n==="href"){if(is(t.value))return;e.removeAttribute(t.name);return}if(!(e.tagName==="A"&&["target","rel","title"].includes(n))){if(e.tagName==="PRE"&&n===Ee){const r=Z(t.value);if(r){e.setAttribute(t.name,r);return}e.removeAttribute(t.name);return}if(e.tagName==="FONT"&&n==="color"){if(Xe(t.value))return;e.removeAttribute(t.name);return}ns.has(e.tagName)&&ts.has(n)&&cs(t.value)||e.removeAttribute(t.name)}})},gs=e=>{[...e.querySelectorAll("font")].forEach(t=>{const n=t.getAttribute("color"),r=n?Xe(n):null,o=Ye(t,"span");r&&o.setAttribute("style",`color: ${r};`)})},ms=e=>{[...e.querySelectorAll([...Nt.keys()].join(","))].forEach(t=>{const n=Nt.get(t.tagName);n&&Ye(t,n)})},ps=e=>{[...e.querySelectorAll("div")].reverse().forEach(t=>{if(t.querySelector(es)){Ge(t);return}Ye(t,"p")})},hs=e=>{[...e.querySelectorAll("span")].forEach(t=>{t.attributes.length===0&&Ge(t)})},fs=e=>!["P","DIV","SPAN"].includes(e.tagName)||e.querySelector("br,table,ul,ol")?!1:!(e.textContent??"").trim(),Lt=e=>{[...e.querySelectorAll("p,div,span")].reverse().forEach(t=>{fs(t)&&t.remove()})},bs=e=>{var t;return e.nodeType===Node.TEXT_NODE?!!((t=e.textContent)!=null&&t.trim()):e.nodeType!==Node.ELEMENT_NODE?!1:!e.matches(Za)},ys=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(bs(r)){t.push(r);return}n()}),n()},vs=e=>{const t=document.createElement("template");t.innerHTML=e,t.content.querySelectorAll(Ya).forEach(r=>{r.remove()}),t.content.querySelectorAll(Xa).forEach(r=>{r.remove()}),ln(t.content),Or(t.content),[...t.content.querySelectorAll("*")].forEach(us),cn(t.content),gs(t.content),ms(t.content),ps(t.content),hs(t.content),Lt(t.content);const n=document.createElement("div");return n.append(t.content.cloneNode(!0)),ys(n),Lt(n),n.innerHTML},ws=/^https?:\/\/[^\s<>"']+\.[^\s<>"']+$/i,Cs=/^www\.[^\s<>"']+\.[^\s<>"']+$/i,_s=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"),Es=/^[^\s@]+@[^\s@]+\.[^\s@]+$/i,xs=e=>e.type.startsWith("image/")?"image":e.type.startsWith("video/")?"video":null,dn=e=>e?[...e].flatMap(t=>{const n=xs(t);return n?[{type:n,file:t}]:[]}):[],xe=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]:[]}),Ms=e=>({name:e.name,mimeType:e.type||void 0,size:e.size,data:e}),ks=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)||Es.test(t)?!1:ws.test(t)||Cs.test(t)||_s.test(t)},un=(e,{isReadonly:t,executeCommand:n})=>t()||!ks(e.text)?!1:(n({type:"link.set",href:e.text.trim()}),!0),Be=(e,{isReadonly:t,canUploadMedia:n,uploadMediaFile:r})=>{if(t()||!n())return!1;const o=dn(e.files);return o.length===0?!1:(o.forEach(({type:a,file:s})=>{r(a,s)}),!0)},Ts=(e,t)=>{const r=new DOMParser().parseFromString(t,"text/html");Hr(r.body);const o=De.$generateNodesFromDOM(e,r);return Fr(o,r.body),o},Ss=(e,t)=>{const n=Ts(e,t);if(n.length===0)return!1;if(g.$getSelection()||g.$getRoot().selectEnd(),n.some(H.$isCodeNode)){n.forEach(o=>{Oe.$insertNodeToNearestRoot(o)});const r=n[n.length-1];return r&&H.$isCodeNode(r)&&g.$insertNodes([g.$createParagraphNode()]),!0}return g.$insertNodes(n),!0},gn=(e,{editor:t,isReadonly:n})=>{if(n())return!1;if(!e.html.trim())return Ns(e,{editor:t,isReadonly:n});const r=vs(e.html);return r.trim()?(t.update(()=>{Ss(t,r)}),!0):!1},Ns=(e,{editor:t,isReadonly:n})=>n()||e.html.trim()||!e.text?!1:(t.update(()=>{g.$getSelection()||g.$getRoot().selectEnd(),g.$insertNodes([g.$createTextNode(e.text)])}),!0),J=e=>{e.preventDefault(),e.stopImmediatePropagation()},Ls=(e,t)=>Be(e,t)||un(e,t)||gn(e,t),Rs=e=>{const t=n=>{n.defaultPrevented||un(xe(n.clipboardData),e)&&J(n)};return e.target.addEventListener("paste",t,{capture:!0}),()=>{e.target.removeEventListener("paste",t,{capture:!0})}},Ps=e=>{const t=o=>{o.defaultPrevented||Be(xe(o.clipboardData),e)&&J(o)},n=o=>{var s;if(e.isReadonly()||!e.canUploadMedia())return;const a=(s=o.dataTransfer)!=null&&s.files?[...o.dataTransfer.files]:[];dn(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]:[]};Be(a,e)&&J(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)}},Is=e=>{const t=n=>{n.defaultPrevented||!gn(xe(n.clipboardData),e)||J(n)};return e.target.addEventListener("paste",t,{capture:!0}),()=>{e.target.removeEventListener("paste",t,{capture:!0})}},As=({target:e,isReadonly:t,onPaste:n,canUploadMedia:r,uploadMediaFile:o,executeCommand:a,editor:s})=>{const i=(l,m)=>Ls({text:m.text??l.text,html:m.html??l.html,files:l.files},{isReadonly:t,canUploadMedia:r,uploadMediaFile:o,executeCommand:a,editor:s}),c=l=>{if(t()||!n)return;const m=xe(l.clipboardData),_=n({text:m.text,html:m.html,files:m.files.map(Ms)});if(_ instanceof Promise){J(l),_.then(E=>{E!==!0&&E&&i(m,E)});return}if(_===!0){J(l);return}_&&(J(l),i(m,_))};return e.addEventListener("paste",c,{capture:!0}),()=>{e.removeEventListener("paste",c,{capture:!0})}},$s=["paragraph","heading-1","heading-2","heading-3","quote","code-block","ordered-list","unordered-list","todo-list","divider","upload-image","upload-video","table"],Bs={loadingText:"加载中",emptyText:"没有匹配的命令",errorText:"命令加载失败"},Ds=e=>({...Bs,...e}),Os=e=>e.flatMap(t=>t.type==="button"?[t.item]:t.type==="group"?t.items:[]),Hs=e=>({...e,toolbarKeys:(e==null?void 0:e.toolbarKeys)??$s}),Fs=e=>({id:e.id,label:e.label,command:e.command,icon:e.icon,requiresPayload:e.requiresPayload,payloadPanel:e.payloadPanel,group:e.group,source:"schema"}),zs=(e,t)=>Os(F.resolveToolbarMenu(Hs(t),e)).map(Fs),mn=e=>({...e,source:"provider"}),Ws=/(?:^|\s)\/([\p{L}\p{N}_-]*)$/u,Vs=e=>e.trim().toLowerCase(),Us=e=>[e.label,e.id,e.description,e.group,...e.keywords??[]].filter(Boolean).join(" ").toLowerCase(),qs=(e,t)=>{const n=Vs(t);return n?e.filter(r=>Us(r).includes(n)):e},js=async(e,t)=>(await Promise.resolve((t==null?void 0:t(e))??[])).map(mn),Ks=e=>"source"in e?e:mn(e),Gs=({menuSchema:e,slashCommandConfig:t})=>e!==void 0||t!==void 0,Ys=()=>{const e=g.$getSelection();if(!g.$isRangeSelection(e)||!e.isCollapsed())return null;const t=e.anchor,n=t.getNode();if(!(n instanceof g.TextNode))return null;const o=n.getTextContent().slice(0,t.offset).match(Ws);if(!o)return null;const a=o[1]??"",s=o[0]??"",i=s.startsWith("/")?0:1,c=t.offset-s.length+i;return{query:a,nodeKey:n.getKey(),startOffset:c,endOffset:t.offset}},Xs=()=>{const e=document.createElement("div");return e.className="bridgerte__floating-menu bridgerte__slash-command-menu",e.dataset.visible="false",e},Js=()=>{const e=document.createElement("span");return e.className="bridgerte__slash-command-anchor",e.setAttribute("aria-hidden","true"),e},Rt=(e,t)=>{var s;const n=e.getElementByKey(t.nodeKey),r=Ke(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())},Qs=(e,t,n,r)=>{const o=document.createElement("button"),a=document.createElement("span");if(o.type="button",o.className="bridgerte__menu-item bridgerte__slash-command-item",o.dataset.commandId=e.id,o.dataset.index=String(t),o.dataset.active=String(n),e.icon){const s=document.createElement("span");s.className="bridgerte__slash-command-item-icon",s.setAttribute("aria-hidden","true"),Ve(s,r[e.icon]??We[e.icon],e.label),o.append(s)}if(a.className="bridgerte__slash-command-item-title",a.textContent=e.label,o.append(a),e.description){const s=document.createElement("span");s.className="bridgerte__slash-command-item-description",s.textContent=e.description,o.append(s)}return o},Zs=(e,t)=>{const n=document.createElement("div");return n.className="bridgerte__slash-command-status",n.dataset.status=e,n.textContent=t,n},ei=(e,t)=>{switch(e){case"loading":return t.loadingText;case"empty":return t.emptyText;case"error":return t.errorText}},Pt=e=>e?{x:e.x,y:e.y,width:e.width,height:e.height}:void 0,ti=({editorRoot:e,contentElement:t,editor:n,isReadonly:r,executeCommand:o,requestPayloadPanel:a,menuSchema:s,slashCommandConfig:i,icons:c={},menuLabels:l,payloadPanelConfig:m,slashCommandMenuConfig:_,onSlashCommandMenuRequest:E,slashCommandProvider:k})=>{const f=Xs(),w=Js(),L=Ds(_),h=_e(s??F.defaultMenuSchema,{menuLabels:l,payloadPanelConfig:m}),C=zs(h,i),S=new Map(h.map(p=>[p.id,p])),x=Gs({menuSchema:s,slashCommandConfig:i}),P=p=>{n.update(()=>{const d=g.$getNodeByKey(p.nodeKey);d instanceof g.TextNode&&(d.spliceText(p.startOffset,p.endOffset-p.startOffset,""),d.select(p.startOffset,p.startOffset))})};return an({editorRoot:e,contentElement:t,editor:n,isReadonly:r,menu:f,anchor:w,itemSelector:".bridgerte__slash-command-item",getCurrentTrigger:Ys,getTriggerRect:p=>Rt(n,p),resolveItems:async p=>{const d=x||!k?qs(C,p):[];try{const v=await js(p,k);return[...d,...v]}catch(v){if(d.length>0)return d;throw v}},renderItem:(p,d,v)=>Qs(p,d,v,c),renderStatus:p=>Zs(p,ei(p,L)),onStateChange:E?(p,d)=>E({id:`bridgerte-slash-command-menu-${p.requestId}`,query:p.trigger.query,status:p.status,items:p.items,config:L,readonly:r(),anchorRect:Pt(d.anchorRect),...p.error?{error:p.error}:{},submit:v=>d.selectItem(Ks(v)),cancel:d.close}):void 0,onSelect:(p,d)=>{P(d);const v=p.source==="schema"?S.get(p.id):void 0;if(v!=null&&v.payloadPanel){const u=Rt(n,d);a({menuId:v.id,command:v.command,panel:v.payloadPanel,anchorRect:Pt(u??void 0)});return}o(p.command)}}).destroy},It=32,Te=e=>{var t;return e instanceof HTMLElement&&e.getAttribute("role")==="checkbox"&&((t=e.parentElement)==null?void 0:t.classList.contains("bridgerte__list--todo"))===!0},Se=e=>e instanceof HTMLElement?e.closest('[role="checkbox"]'):null,ni=e=>g.$getNearestNodeFromDOMNode(e),At=e=>e.button===0,Ne=(e,t)=>{const n=t.getBoundingClientRect();return t.dir==="rtl"?e.clientX>=n.right-It&&e.clientX<=n.right:e.clientX>=n.left&&e.clientX<=n.left+It},$t=e=>{e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation()},ri=({contentElement:e,editor:t,isReadonly:n})=>{let r=0;const o=c=>{if(n()||!At(c))return;const l=Se(c.target);!l||!Te(l)||Ne(c,l)&&$t(c)},a=(c,l)=>{$t(c),t.update(()=>{const m=ni(l);U.$isListItemNode(m)&&m.toggleChecked()})},s=c=>{if(n()||!At(c)||Date.now()-r<700)return;const l=Se(c.target);!l||!Te(l)||Ne(c,l)&&a(c,l)},i=c=>{if(n()||c.pointerType!=="touch")return;const l=Se(c.target);!l||!Te(l)||Ne(c,l)&&(r=Date.now(),a(c,l))};return e.addEventListener("pointerdown",o,!0),e.addEventListener("pointerup",i,!0),e.addEventListener("click",s,!0),()=>{e.removeEventListener("pointerdown",o,!0),e.removeEventListener("pointerup",i,!0),e.removeEventListener("click",s,!0)}},oi={...H.PrismTokenizer,defaultLanguage:null},Le=(e,t)=>{var n;return((n=e.floatingMenus)==null?void 0:n[t])!==!1},ai=({options:e,lexicalEditor:t,editorRoot:n,contentElement:r,historyState:o,isReadonly:a,executeCommand:s,requestPayloadPanel:i,uploadMediaFile:c,canUploadMedia:l,syncAfterEditorUpdate:m,refreshCommandStates:_,getCommandStates:E,setCanUndo:k,setCanRedo:f,enableKeyboardShortcuts:w})=>{const L=Le(e,"mention"),h=Le(e,"slash"),C=Le(e,"hoverbar"),S=g.mergeRegister(As({target:r,isReadonly:a,onPaste:e.onPaste,canUploadMedia:l,uploadMediaFile:c,executeCommand:s,editor:t}),Ps({target:r,isReadonly:a,canUploadMedia:l,uploadMediaFile:c}),Rs({target:r,isReadonly:a,executeCommand:s}),Is({target:r,editor:t,isReadonly:a}),ua({target:r,isReadonly:a}),Q.registerRichText(t),H.registerCodeHighlighting(t,oi),Bt.registerHistory(t,o,Er),U.registerList(t),U.registerCheckList(t),ri({contentElement:r,editor:t,isReadonly:a}),L?Ga({editorRoot:n,contentElement:r,editor:t,isReadonly:a,executeCommand:s,mentionProvider:e.mentionProvider,mentionMenuConfig:e.mentionMenuConfig,onMentionMenuRequest:e.onMentionMenuRequest}):()=>{},C?va({editorRoot:n,contentElement:r,editor:t,isReadonly:a,executeCommand:s,requestPayloadPanel:i,getCommandStates:E,menuSchema:e.menuSchema,hoverbarConfig:e.hoverbarConfig,icons:e.icons,menuLabels:e.menuLabels,payloadPanelConfig:e.payloadPanelConfig}):()=>{},B.registerTablePlugin(t),sa({editor:t}),h?ti({editorRoot:n,contentElement:r,editor:t,isReadonly:a,executeCommand:s,requestPayloadPanel:i,menuSchema:e.menuSchema,slashCommandConfig:e.slashCommandConfig,icons:e.icons,menuLabels:e.menuLabels,payloadPanelConfig:e.payloadPanelConfig,slashCommandMenuConfig:e.slashCommandMenuConfig,onSlashCommandMenuRequest:e.onSlashCommandMenuRequest,slashCommandProvider:e.slashCommandProvider}):()=>{},Pn({editor:t,contentElement:r,isReadonly:a}),w?Ma({target:r,isReadonly:a,executeCommand:s}):()=>{},t.registerUpdateListener(()=>{m(),_()}),t.registerCommand(g.SELECTION_CHANGE_COMMAND,()=>(_(),!1),g.COMMAND_PRIORITY_LOW),t.registerCommand(g.CAN_UNDO_COMMAND,x=>(k(x),!1),g.COMMAND_PRIORITY_LOW),t.registerCommand(g.CAN_REDO_COMMAND,x=>(f(x),!1),g.COMMAND_PRIORITY_LOW));return{destroy(){S()}}};function pn(e,t={}){const n=Bt.createEmptyHistoryState(),r=t.toolbarMode??"top",o=t.mediaDefaultWidthPercent??50,a=r==="top"||r==="bottom",s=r==="bottom"?"bottom":"top",{toolbarElement:i,contentElement:c}=ta(e,{placeholder:t.placeholder??Nn,shouldRenderToolbar:a,toolbarPlacement:s}),l=t.keyboardShortcuts===!0;let m=t.readonly??!1,_=!1,E=null,k=Re(t.value);const f=g.createEditor({namespace:xr,editable:!m,nodes:[Q.HeadingNode,Q.QuoteNode,H.CodeNode,H.CodeHighlightNode,U.ListNode,U.ListItemNode,B.TableNode,B.TableRowNode,B.TableCellNode,W.LinkNode,W.AutoLinkNode,ue,ae,ge],theme:cr,onError:N=>{q(t,"lexical.runtime","Lexical runtime error.",N)}});B.setScrollableTablesActive(f,!0);const w=()=>_,L=()=>m,h=()=>{w()||Rn({editor:f,contentElement:c})},C=na({editor:f}),S=Mr({lexicalEditor:f,options:t,isDestroyed:w,setContent:N=>{k=N},syncPlaceholder:h}),x=nr({lexicalEditor:f,options:t,isDestroyed:w,canUploadMedia:()=>t.uploadAdapter!==void 0,isReadonly:L}),P=_r({container:e,lexicalEditor:f,options:t,isDestroyed:w,isReadonly:L,reportError:q}),I=()=>{c.contentEditable=String(!m),f.setEditable(!m)},y=ea({editorRoot:e,lexicalEditor:f,isReadonly:L,restoreEditorFocus:N=>{C.restore(),f.focus(N)},executeCommand:P,getClearCommand:N=>{switch(N.command.type){case"format.color":case"format.backgroundColor":case"format.fontSize":case"format.fontFamily":case"format.lineHeight":return{...N.command,value:""};default:return null}},codeBlockLanguagePanel:t.codeBlockLanguagePanel,payloadPanelConfig:t.payloadPanelConfig,mediaControlsConfig:t.mediaControlsConfig,menuLabels:t.menuLabels,onRequest:t.onPayloadPanelRequest,defaultMediaWidthPercent:o}),p=()=>Zn(t),d=()=>er(t),v=N=>{w()||(C.capture(),y.payloadPanelController.open(N))};e.dataset.readonly=String(m),e.addEventListener("focusin",p),e.addEventListener("focusout",d),e.style.setProperty("--bridgerte-media-display-width",`${o}%`);const u=ai({options:t,lexicalEditor:f,editorRoot:e,contentElement:c,historyState:n,isReadonly:L,executeCommand:P,requestPayloadPanel:v,uploadMediaFile:P.uploadMediaFile,canUploadMedia:()=>t.uploadAdapter!==void 0,syncAfterEditorUpdate:S.syncAfterEditorUpdate,refreshCommandStates:x.refreshCommandStates,getCommandStates:x.getCommandStates,setCanUndo:x.setCanUndo,setCanRedo:x.setCanRedo,enableKeyboardShortcuts:l});f.setRootElement(c),S.suppressNextChange(),k=Mn(f,t.value),I();const b={getContent(){return w()||(S.clearContentChangeTimer(),S.syncContent(!1)),k},setContent(N){w()||(S.clearContentChangeTimer(),k=Re(N),S.suppressNextChange(),zt(f,k),S.enforceCurrentMaxLength(),h(),f.dispatchCommand(g.CLEAR_HISTORY_COMMAND,void 0),x.setHistoryAvailability(!1,!1),S.syncContent(!0))},executeCommand(N){P(N)},requestPayloadPanel:v,getCommandStates:x.getCommandStates,subscribeCommandStateChange:x.subscribeCommandStateChange,setReadonly(N){w()||(m=N,e.dataset.readonly=String(m),I(),x.refreshCommandStates())},focus(){w()||f.focus()},blur(){w()||c.blur()},destroy(){w()||(_=!0,S.clearContentChangeTimer(),E==null||E.destroy(),E=null,y.destroy(),P.destroy(),x.destroy(),C.clear(),u.destroy(),f.setRootElement(null),e.removeEventListener("focusin",p),e.removeEventListener("focusout",d),e.classList.remove("bridgerte"),e.textContent="",delete e.dataset.readonly)}};return S.syncContent(!1),h(),x.refreshCommandStates(),a&&(E=qt(i,{editor:b,menuSchema:t.menuSchema,placement:s,toolbarConfig:t.toolbarConfig,icons:t.icons,menuLabels:t.menuLabels,payloadPanelConfig:t.payloadPanelConfig})),tr(t,b),b}const si=e=>!Ce.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",ii=e=>({id:e,type:"editor.ready",payload:{menuSchema:F.defaultMenuSchema,eventTiming:Ce.defaultBridgeEventTiming,version:G.BRIDGERTE_CONTENT_VERSION}}),li=e=>`native-upload:${e}:${Date.now()}:${Math.random().toString(36).slice(2)}`,ci=({container:e,transport:t})=>{var M;let n=null,r=!1,o=null,a=null,s=null,i=0;const c=new Map,l=new Map,m=y=>{r||t.postMessage(y)},_=()=>{s&&(clearTimeout(s),s=null)},E=()=>{_(),s=setTimeout(()=>{if(r)return;const y=Math.ceil(e.getBoundingClientRect().height);y!==i&&(i=y,m({type:"editor.heightChange",payload:{height:y}}))},Ce.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS)},k=y=>{if(!n)return;const p=n.getContent();m({id:y,type:"editor.content",payload:p}),m({id:y,type:"editor.contentChange",payload:p})},f=y=>{const p=y.payload,d=c.get(p.assetId);if(d){if(c.delete(p.assetId),d.source==="uploadAdapter"){d.resolve(p.result);return}n==null||n.executeCommand({type:d.type==="image"?"media.insertImage":"media.insertVideo",url:p.result.url,poster:p.result.poster,width:p.result.width,height:p.result.height,displayWidthPercent:50,assetId:p.assetId})}},w=y=>{const p=y.payload,d=c.get(p.assetId);if(d){if(c.delete(p.assetId),d.source==="uploadAdapter"){d.reject(new Error(p.message));return}m({id:y.id,type:"editor.error",payload:{code:"bridge.uploadRejected",message:p.message}})}},L=(y,p)=>new Promise((d,v)=>{c.set(p,{type:y,assetId:p,source:"uploadAdapter",resolve:d,reject:v}),m({type:"editor.uploadRequest",payload:{assetId:p,type:y,accept:y==="image"?"image/*":"video/*"}})}),h=y=>{const p=li(y);c.set(p,{type:y,assetId:p,source:"nativePicker"}),m({type:"editor.uploadRequest",payload:{assetId:p,type:y,accept:y==="image"?"image/*":"video/*"}})},C=y=>{const p=l.get(y.payload.requestId);p&&(l.delete(y.payload.requestId),p.request.submit(y.payload.values))},S=y=>{const p=l.get(y.payload.requestId);p&&(l.delete(y.payload.requestId),p.request.cancel())},x=(y,p)=>{n==null||n.destroy(),o==null||o(),c.clear(),l.clear(),n=pn(e,{...p,toolbarMode:"native",platform:"webview",uploadAdapter:{uploadImage(d,v){return L("image",v.assetId)},uploadVideo(d,v){return L("video",v.assetId)}},onContentChange:d=>{m({type:"editor.contentChange",payload:d}),E()},onCommandStateChange:d=>{m({type:"editor.commandStateChange",payload:d})},onPayloadPanelRequest:d=>(l.set(d.id,{request:d}),m({type:"editor.payloadPanelRequest",payload:{menuId:d.menuId,command:d.command,panel:d.panel,anchorRect:d.anchorRect,currentValues:d.currentValues,id:d.id,readonly:d.readonly}}),!0),onError:d=>{m({type:"editor.error",payload:d})}}),o=n.subscribeCommandStateChange(d=>{m({type:"editor.commandStateChange",payload:d})}),m(ii(y)),E()},P=y=>{if(y.type==="media.pickImage"){h("image");return}if(y.type==="media.pickVideo"){h("video");return}n==null||n.executeCommand(y)},I=y=>{if(!(r||!si(y)))switch(y.type){case"editor.init":x(y.id,y.payload);return;case"editor.executeCommand":P(y.payload);return;case"editor.setContent":n==null||n.setContent(y.payload);return;case"editor.setReadonly":n==null||n.setReadonly(y.payload.readonly);return;case"editor.requestContent":k(y.id);return;case"editor.payloadPanelResolved":C(y);return;case"editor.payloadPanelCanceled":S(y);return;case"editor.uploadResolved":f(y);return;case"editor.uploadRejected":w(y);return}};return a=((M=t.addMessageListener)==null?void 0:M.call(t,I))??null,{receive:I,destroy(){r||(r=!0,_(),a==null||a(),o==null||o(),c.clear(),l.clear(),n==null||n.destroy(),n=null)}}};exports.createFloatingLayer=je;exports.createRichTextEditor=pn;exports.createRichTextToolbar=qt;exports.createWebViewBridgeRuntime=ci;
3
- //# sourceMappingURL=index-BDgKCpty.cjs.map