bridgerte 0.9.21 → 0.9.23

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.
Files changed (635) hide show
  1. package/README.md +52 -9
  2. package/dist/assets/abap-5JJ_uXwM.js +8 -0
  3. package/dist/assets/abap-5JJ_uXwM.js.map +1 -0
  4. package/dist/assets/actionscript-3-DE1C41bY.js +8 -0
  5. package/dist/assets/actionscript-3-DE1C41bY.js.map +1 -0
  6. package/dist/assets/ada-BG05PpOB.js +8 -0
  7. package/dist/assets/ada-BG05PpOB.js.map +1 -0
  8. package/dist/assets/andromeeda-BY_rNuBQ.js +5 -0
  9. package/dist/assets/andromeeda-BY_rNuBQ.js.map +1 -0
  10. package/dist/assets/angular-html-aal4wZP4.js +42 -0
  11. package/dist/assets/angular-html-aal4wZP4.js.map +1 -0
  12. package/dist/assets/angular-ts-DAE48Xv3.js +30 -0
  13. package/dist/assets/angular-ts-DAE48Xv3.js.map +1 -0
  14. package/dist/assets/apache-D7jlTOw0.js +8 -0
  15. package/dist/assets/apache-D7jlTOw0.js.map +1 -0
  16. package/dist/assets/apex-B5cHO7Zb.js +8 -0
  17. package/dist/assets/apex-B5cHO7Zb.js.map +1 -0
  18. package/dist/assets/apl-KqhKRlqN.js +19 -0
  19. package/dist/assets/apl-KqhKRlqN.js.map +1 -0
  20. package/dist/assets/applescript-guFn5j4s.js +8 -0
  21. package/dist/assets/applescript-guFn5j4s.js.map +1 -0
  22. package/dist/assets/ara-D87wAYhe.js +8 -0
  23. package/dist/assets/ara-D87wAYhe.js.map +1 -0
  24. package/dist/assets/asciidoc-DHU272__.js +8 -0
  25. package/dist/assets/asciidoc-DHU272__.js.map +1 -0
  26. package/dist/assets/asm-BIl1E4lX.js +8 -0
  27. package/dist/assets/asm-BIl1E4lX.js.map +1 -0
  28. package/dist/assets/astro-CoyRAbIC.js +20 -0
  29. package/dist/assets/astro-CoyRAbIC.js.map +1 -0
  30. package/dist/assets/aurora-x-C6DmnWDt.js +5 -0
  31. package/dist/assets/aurora-x-C6DmnWDt.js.map +1 -0
  32. package/dist/assets/awk-x1P7Yy6J.js +8 -0
  33. package/dist/assets/awk-x1P7Yy6J.js.map +1 -0
  34. package/dist/assets/ayu-dark-DwU3UN-n.js +5 -0
  35. package/dist/assets/ayu-dark-DwU3UN-n.js.map +1 -0
  36. package/dist/assets/ayu-light-BeSY2ZJx.js +5 -0
  37. package/dist/assets/ayu-light-BeSY2ZJx.js.map +1 -0
  38. package/dist/assets/ayu-mirage-EiPwM0mG.js +5 -0
  39. package/dist/assets/ayu-mirage-EiPwM0mG.js.map +1 -0
  40. package/dist/assets/ballerina-D1k6pTDA.js +8 -0
  41. package/dist/assets/ballerina-D1k6pTDA.js.map +1 -0
  42. package/dist/assets/bat-CKn1WSW3.js +8 -0
  43. package/dist/assets/bat-CKn1WSW3.js.map +1 -0
  44. package/dist/assets/beancount-1v_PY4BB.js +8 -0
  45. package/dist/assets/beancount-1v_PY4BB.js.map +1 -0
  46. package/dist/assets/berry-ChXc1sMd.js +8 -0
  47. package/dist/assets/berry-ChXc1sMd.js.map +1 -0
  48. package/dist/assets/bibtex-YjwILF7F.js +8 -0
  49. package/dist/assets/bibtex-YjwILF7F.js.map +1 -0
  50. package/dist/assets/bicep-C0D_R8_K.js +8 -0
  51. package/dist/assets/bicep-C0D_R8_K.js.map +1 -0
  52. package/dist/assets/bird2-DDRneDX_.js +8 -0
  53. package/dist/assets/bird2-DDRneDX_.js.map +1 -0
  54. package/dist/assets/blade-FnIjT1E3.js +23 -0
  55. package/dist/assets/blade-FnIjT1E3.js.map +1 -0
  56. package/dist/assets/bsl-DJzmyrer.js +10 -0
  57. package/dist/assets/bsl-DJzmyrer.js.map +1 -0
  58. package/dist/assets/c-xjDmHeY4.js +8 -0
  59. package/dist/assets/c-xjDmHeY4.js.map +1 -0
  60. package/dist/assets/c3-ifVI-lyl.js +8 -0
  61. package/dist/assets/c3-ifVI-lyl.js.map +1 -0
  62. package/dist/assets/cadence-4_3YDhNk.js +8 -0
  63. package/dist/assets/cadence-4_3YDhNk.js.map +1 -0
  64. package/dist/assets/cairo-CckC4pbv.js +10 -0
  65. package/dist/assets/cairo-CckC4pbv.js.map +1 -0
  66. package/dist/assets/catppuccin-frappe-B5VVdV_e.js +5 -0
  67. package/dist/assets/catppuccin-frappe-B5VVdV_e.js.map +1 -0
  68. package/dist/assets/catppuccin-latte-D8pvGdu1.js +5 -0
  69. package/dist/assets/catppuccin-latte-D8pvGdu1.js.map +1 -0
  70. package/dist/assets/catppuccin-macchiato-HRcjrIrY.js +5 -0
  71. package/dist/assets/catppuccin-macchiato-HRcjrIrY.js.map +1 -0
  72. package/dist/assets/catppuccin-mocha-CIwIEnSB.js +5 -0
  73. package/dist/assets/catppuccin-mocha-CIwIEnSB.js.map +1 -0
  74. package/dist/assets/clarity-LYkNoMZG.js +8 -0
  75. package/dist/assets/clarity-LYkNoMZG.js.map +1 -0
  76. package/dist/assets/clojure-BKPgNuET.js +8 -0
  77. package/dist/assets/clojure-BKPgNuET.js.map +1 -0
  78. package/dist/assets/cmake-DKfc4EHO.js +8 -0
  79. package/dist/assets/cmake-DKfc4EHO.js.map +1 -0
  80. package/dist/assets/cobol-BitaBRgT.js +14 -0
  81. package/dist/assets/cobol-BitaBRgT.js.map +1 -0
  82. package/dist/assets/codeowners-CGzOUqRt.js +8 -0
  83. package/dist/assets/codeowners-CGzOUqRt.js.map +1 -0
  84. package/dist/assets/codeql-CB2tU2yr.js +8 -0
  85. package/dist/assets/codeql-CB2tU2yr.js.map +1 -0
  86. package/dist/assets/coffee-CZwg37T3.js +10 -0
  87. package/dist/assets/coffee-CZwg37T3.js.map +1 -0
  88. package/dist/assets/common-lisp-Dpa6SDDF.js +8 -0
  89. package/dist/assets/common-lisp-Dpa6SDDF.js.map +1 -0
  90. package/dist/assets/coq-BcttDLdJ.js +8 -0
  91. package/dist/assets/coq-BcttDLdJ.js.map +1 -0
  92. package/dist/assets/cpp-BlAh3S4C.js +23 -0
  93. package/dist/assets/cpp-BlAh3S4C.js.map +1 -0
  94. package/dist/assets/crystal-Bs9TFo_P.js +20 -0
  95. package/dist/assets/crystal-Bs9TFo_P.js.map +1 -0
  96. package/dist/assets/csharp-DSxyDUiT.js +8 -0
  97. package/dist/assets/csharp-DSxyDUiT.js.map +1 -0
  98. package/dist/assets/css-C_jsWB7w.js +8 -0
  99. package/dist/assets/css-C_jsWB7w.js.map +1 -0
  100. package/dist/assets/csv-DH-1IWvI.js +8 -0
  101. package/dist/assets/csv-DH-1IWvI.js.map +1 -0
  102. package/dist/assets/cue-HSbRnhKw.js +8 -0
  103. package/dist/assets/cue-HSbRnhKw.js.map +1 -0
  104. package/dist/assets/cypher-DoZ7GUDp.js +8 -0
  105. package/dist/assets/cypher-DoZ7GUDp.js.map +1 -0
  106. package/dist/assets/d-CeeVpqRv.js +8 -0
  107. package/dist/assets/d-CeeVpqRv.js.map +1 -0
  108. package/dist/assets/dark-plus-BZtx1JS2.js +5 -0
  109. package/dist/assets/dark-plus-BZtx1JS2.js.map +1 -0
  110. package/dist/assets/dart-CfpH2ytW.js +8 -0
  111. package/dist/assets/dart-CfpH2ytW.js.map +1 -0
  112. package/dist/assets/dax-B2DK8VnI.js +8 -0
  113. package/dist/assets/dax-B2DK8VnI.js.map +1 -0
  114. package/dist/assets/desktop-C_92N0gp.js +8 -0
  115. package/dist/assets/desktop-C_92N0gp.js.map +1 -0
  116. package/dist/assets/diff-CIoVq7iw.js +8 -0
  117. package/dist/assets/diff-CIoVq7iw.js.map +1 -0
  118. package/dist/assets/docker-C_b4d5MG.js +8 -0
  119. package/dist/assets/docker-C_b4d5MG.js.map +1 -0
  120. package/dist/assets/dotenv-CTk-83yR.js +8 -0
  121. package/dist/assets/dotenv-CTk-83yR.js.map +1 -0
  122. package/dist/assets/dracula-C90mcX-J.js +5 -0
  123. package/dist/assets/dracula-C90mcX-J.js.map +1 -0
  124. package/dist/assets/dracula-soft-CfxSDbho.js +5 -0
  125. package/dist/assets/dracula-soft-CfxSDbho.js.map +1 -0
  126. package/dist/assets/dream-maker-BRhjIgJd.js +8 -0
  127. package/dist/assets/dream-maker-BRhjIgJd.js.map +1 -0
  128. package/dist/assets/edge-ChLL70qB.js +16 -0
  129. package/dist/assets/edge-ChLL70qB.js.map +1 -0
  130. package/dist/assets/elixir-Cn03DtOX.js +12 -0
  131. package/dist/assets/elixir-Cn03DtOX.js.map +1 -0
  132. package/dist/assets/elm-BIz5FEly.js +11 -0
  133. package/dist/assets/elm-BIz5FEly.js.map +1 -0
  134. package/dist/assets/emacs-lisp-BPa43G0X.js +8 -0
  135. package/dist/assets/emacs-lisp-BPa43G0X.js.map +1 -0
  136. package/dist/assets/erb-DnDXmOFA.js +29 -0
  137. package/dist/assets/erb-DnDXmOFA.js.map +1 -0
  138. package/dist/assets/erlang-Bs5tgDCH.js +10 -0
  139. package/dist/assets/erlang-Bs5tgDCH.js.map +1 -0
  140. package/dist/assets/everforest-dark-WkkMlVdr.js +5 -0
  141. package/dist/assets/everforest-dark-WkkMlVdr.js.map +1 -0
  142. package/dist/assets/everforest-light-BnEIoJmx.js +5 -0
  143. package/dist/assets/everforest-light-BnEIoJmx.js.map +1 -0
  144. package/dist/assets/fennel-Bcsiz5ip.js +8 -0
  145. package/dist/assets/fennel-Bcsiz5ip.js.map +1 -0
  146. package/dist/assets/fish-DHyTDlfQ.js +8 -0
  147. package/dist/assets/fish-DHyTDlfQ.js.map +1 -0
  148. package/dist/assets/fluent-4neBKDDj.js +8 -0
  149. package/dist/assets/fluent-4neBKDDj.js.map +1 -0
  150. package/dist/assets/fortran-fixed-form-CzBifAhA.js +10 -0
  151. package/dist/assets/fortran-fixed-form-CzBifAhA.js.map +1 -0
  152. package/dist/assets/fortran-free-form-CgyZ4k0y.js +8 -0
  153. package/dist/assets/fortran-free-form-CgyZ4k0y.js.map +1 -0
  154. package/dist/assets/fsharp-9GbbySMJ.js +10 -0
  155. package/dist/assets/fsharp-9GbbySMJ.js.map +1 -0
  156. package/dist/assets/gdresource-DNKHowPg.js +12 -0
  157. package/dist/assets/gdresource-DNKHowPg.js.map +1 -0
  158. package/dist/assets/gdscript-BsvbToqr.js +8 -0
  159. package/dist/assets/gdscript-BsvbToqr.js.map +1 -0
  160. package/dist/assets/gdshader-OUoLz6Pt.js +8 -0
  161. package/dist/assets/gdshader-OUoLz6Pt.js.map +1 -0
  162. package/dist/assets/genie-CCD_4Lwj.js +8 -0
  163. package/dist/assets/genie-CCD_4Lwj.js.map +1 -0
  164. package/dist/assets/gherkin-DtBWBYmY.js +8 -0
  165. package/dist/assets/gherkin-DtBWBYmY.js.map +1 -0
  166. package/dist/assets/git-commit-CIBsd3Oe.js +10 -0
  167. package/dist/assets/git-commit-CIBsd3Oe.js.map +1 -0
  168. package/dist/assets/git-rebase-Bsia5skB.js +10 -0
  169. package/dist/assets/git-rebase-Bsia5skB.js.map +1 -0
  170. package/dist/assets/github-dark-Crb_T9c1.js +5 -0
  171. package/dist/assets/github-dark-Crb_T9c1.js.map +1 -0
  172. package/dist/assets/github-dark-default-CrymNA3e.js +5 -0
  173. package/dist/assets/github-dark-default-CrymNA3e.js.map +1 -0
  174. package/dist/assets/github-dark-dimmed-DVypsQQ6.js +5 -0
  175. package/dist/assets/github-dark-dimmed-DVypsQQ6.js.map +1 -0
  176. package/dist/assets/github-dark-high-contrast-oosJriQF.js +5 -0
  177. package/dist/assets/github-dark-high-contrast-oosJriQF.js.map +1 -0
  178. package/dist/assets/github-light-DzgloXIJ.js +5 -0
  179. package/dist/assets/github-light-DzgloXIJ.js.map +1 -0
  180. package/dist/assets/github-light-default-BUaqj3Kk.js +5 -0
  181. package/dist/assets/github-light-default-BUaqj3Kk.js.map +1 -0
  182. package/dist/assets/github-light-high-contrast-Be7TuOaG.js +5 -0
  183. package/dist/assets/github-light-high-contrast-Be7TuOaG.js.map +1 -0
  184. package/dist/assets/gleam-Bby7sLtj.js +8 -0
  185. package/dist/assets/gleam-Bby7sLtj.js.map +1 -0
  186. package/dist/assets/glimmer-js-K1ky8h51.js +16 -0
  187. package/dist/assets/glimmer-js-K1ky8h51.js.map +1 -0
  188. package/dist/assets/glimmer-ts-Glf2iriO.js +16 -0
  189. package/dist/assets/glimmer-ts-Glf2iriO.js.map +1 -0
  190. package/dist/assets/glsl-B7qnt91l.js +10 -0
  191. package/dist/assets/glsl-B7qnt91l.js.map +1 -0
  192. package/dist/assets/gn-BZhHIoL6.js +8 -0
  193. package/dist/assets/gn-BZhHIoL6.js.map +1 -0
  194. package/dist/assets/gnuplot-ko8wwdty.js +8 -0
  195. package/dist/assets/gnuplot-ko8wwdty.js.map +1 -0
  196. package/dist/assets/go-bOxRwq8F.js +8 -0
  197. package/dist/assets/go-bOxRwq8F.js.map +1 -0
  198. package/dist/assets/graphql-DkLU_y6F.js +16 -0
  199. package/dist/assets/graphql-DkLU_y6F.js.map +1 -0
  200. package/dist/assets/groovy-CnONGBTg.js +8 -0
  201. package/dist/assets/groovy-CnONGBTg.js.map +1 -0
  202. package/dist/assets/gruvbox-dark-hard-w2v6PtUq.js +5 -0
  203. package/dist/assets/gruvbox-dark-hard-w2v6PtUq.js.map +1 -0
  204. package/dist/assets/gruvbox-dark-medium-BkadlV_U.js +5 -0
  205. package/dist/assets/gruvbox-dark-medium-BkadlV_U.js.map +1 -0
  206. package/dist/assets/gruvbox-dark-soft-BHFO6CEk.js +5 -0
  207. package/dist/assets/gruvbox-dark-soft-BHFO6CEk.js.map +1 -0
  208. package/dist/assets/gruvbox-light-hard-9A_pD-e-.js +5 -0
  209. package/dist/assets/gruvbox-light-hard-9A_pD-e-.js.map +1 -0
  210. package/dist/assets/gruvbox-light-medium-DS4uqfa1.js +5 -0
  211. package/dist/assets/gruvbox-light-medium-DS4uqfa1.js.map +1 -0
  212. package/dist/assets/gruvbox-light-soft-qMWiTKK4.js +5 -0
  213. package/dist/assets/gruvbox-light-soft-qMWiTKK4.js.map +1 -0
  214. package/dist/assets/hack-gfrPUlig.js +14 -0
  215. package/dist/assets/hack-gfrPUlig.js.map +1 -0
  216. package/dist/assets/haml-B4EqXRg_.js +12 -0
  217. package/dist/assets/haml-B4EqXRg_.js.map +1 -0
  218. package/dist/assets/handlebars-YxgQMD1d.js +16 -0
  219. package/dist/assets/handlebars-YxgQMD1d.js.map +1 -0
  220. package/dist/assets/haskell-2dsAc57b.js +8 -0
  221. package/dist/assets/haskell-2dsAc57b.js.map +1 -0
  222. package/dist/assets/haxe-OKRacM9E.js +8 -0
  223. package/dist/assets/haxe-OKRacM9E.js.map +1 -0
  224. package/dist/assets/hcl-DWQu2dqK.js +8 -0
  225. package/dist/assets/hcl-DWQu2dqK.js.map +1 -0
  226. package/dist/assets/hjson-By_UsfXI.js +8 -0
  227. package/dist/assets/hjson-By_UsfXI.js.map +1 -0
  228. package/dist/assets/hlsl-DA61eaD3.js +8 -0
  229. package/dist/assets/hlsl-DA61eaD3.js.map +1 -0
  230. package/dist/assets/horizon-BAcSmUQx.js +5 -0
  231. package/dist/assets/horizon-BAcSmUQx.js.map +1 -0
  232. package/dist/assets/horizon-bright-BIr1qV5K.js +5 -0
  233. package/dist/assets/horizon-bright-BIr1qV5K.js.map +1 -0
  234. package/dist/assets/houston-CK0N9cPp.js +5 -0
  235. package/dist/assets/houston-CK0N9cPp.js.map +1 -0
  236. package/dist/assets/html-derivative-DNVkVN8y.js +12 -0
  237. package/dist/assets/html-derivative-DNVkVN8y.js.map +1 -0
  238. package/dist/assets/html-hx4Wfyw6.js +12 -0
  239. package/dist/assets/html-hx4Wfyw6.js.map +1 -0
  240. package/dist/assets/http-CVXrBmpc.js +21 -0
  241. package/dist/assets/http-CVXrBmpc.js.map +1 -0
  242. package/dist/assets/hurl-B08iSRaK.js +19 -0
  243. package/dist/assets/hurl-B08iSRaK.js.map +1 -0
  244. package/dist/assets/hxml-CwhzGRqU.js +10 -0
  245. package/dist/assets/hxml-CwhzGRqU.js.map +1 -0
  246. package/dist/assets/hy-B23VqsRP.js +8 -0
  247. package/dist/assets/hy-B23VqsRP.js.map +1 -0
  248. package/dist/assets/imba-C1GSCVFf.js +8 -0
  249. package/dist/assets/imba-C1GSCVFf.js.map +1 -0
  250. package/dist/assets/ini-r1O4-awP.js +8 -0
  251. package/dist/assets/ini-r1O4-awP.js.map +1 -0
  252. package/dist/assets/java-Bl-5EZmB.js +8 -0
  253. package/dist/assets/java-Bl-5EZmB.js.map +1 -0
  254. package/dist/assets/javascript-Cq55jE6w.js +8 -0
  255. package/dist/assets/javascript-Cq55jE6w.js.map +1 -0
  256. package/dist/assets/jinja-hp_3bha4.js +17 -0
  257. package/dist/assets/jinja-hp_3bha4.js.map +1 -0
  258. package/dist/assets/jison-9WPWo0xg.js +10 -0
  259. package/dist/assets/jison-9WPWo0xg.js.map +1 -0
  260. package/dist/assets/json-CndaR9w5.js +8 -0
  261. package/dist/assets/json-CndaR9w5.js.map +1 -0
  262. package/dist/assets/json5-C8Jm9K5X.js +8 -0
  263. package/dist/assets/json5-C8Jm9K5X.js.map +1 -0
  264. package/dist/assets/jsonc-mlgADggJ.js +8 -0
  265. package/dist/assets/jsonc-mlgADggJ.js.map +1 -0
  266. package/dist/assets/jsonl-CBj3pbR_.js +8 -0
  267. package/dist/assets/jsonl-CBj3pbR_.js.map +1 -0
  268. package/dist/assets/jsonnet-B_sZ3RZB.js +8 -0
  269. package/dist/assets/jsonnet-B_sZ3RZB.js.map +1 -0
  270. package/dist/assets/jssm-CvtepJVU.js +8 -0
  271. package/dist/assets/jssm-CvtepJVU.js.map +1 -0
  272. package/dist/assets/jsx-BfjkQ0v5.js +8 -0
  273. package/dist/assets/jsx-BfjkQ0v5.js.map +1 -0
  274. package/dist/assets/julia-Dnhsueg9.js +21 -0
  275. package/dist/assets/julia-Dnhsueg9.js.map +1 -0
  276. package/dist/assets/just-6vIP7wP9.js +35 -0
  277. package/dist/assets/just-6vIP7wP9.js.map +1 -0
  278. package/dist/assets/kanagawa-dragon-Dgsvhj-I.js +5 -0
  279. package/dist/assets/kanagawa-dragon-Dgsvhj-I.js.map +1 -0
  280. package/dist/assets/kanagawa-lotus-bk4_W8LM.js +5 -0
  281. package/dist/assets/kanagawa-lotus-bk4_W8LM.js.map +1 -0
  282. package/dist/assets/kanagawa-wave-CVNUZ7bU.js +5 -0
  283. package/dist/assets/kanagawa-wave-CVNUZ7bU.js.map +1 -0
  284. package/dist/assets/kdl-CwdrBlJU.js +8 -0
  285. package/dist/assets/kdl-CwdrBlJU.js.map +1 -0
  286. package/dist/assets/kotlin-K4QQzEsQ.js +8 -0
  287. package/dist/assets/kotlin-K4QQzEsQ.js.map +1 -0
  288. package/dist/assets/kusto-CgER6Sxt.js +8 -0
  289. package/dist/assets/kusto-CgER6Sxt.js.map +1 -0
  290. package/dist/assets/laserwave-BU7zaG-q.js +5 -0
  291. package/dist/assets/laserwave-BU7zaG-q.js.map +1 -0
  292. package/dist/assets/latex-vw5kx6SC.js +11 -0
  293. package/dist/assets/latex-vw5kx6SC.js.map +1 -0
  294. package/dist/assets/lean-Cp_iMYZj.js +8 -0
  295. package/dist/assets/lean-Cp_iMYZj.js.map +1 -0
  296. package/dist/assets/less-CFxJbkOX.js +8 -0
  297. package/dist/assets/less-CFxJbkOX.js.map +1 -0
  298. package/dist/assets/light-plus-CCnaaxEe.js +5 -0
  299. package/dist/assets/light-plus-CCnaaxEe.js.map +1 -0
  300. package/dist/assets/liquid-ME1IH2EZ.js +16 -0
  301. package/dist/assets/liquid-ME1IH2EZ.js.map +1 -0
  302. package/dist/assets/llvm-DXF2zqxJ.js +8 -0
  303. package/dist/assets/llvm-DXF2zqxJ.js.map +1 -0
  304. package/dist/assets/log-BhdudKf6.js +8 -0
  305. package/dist/assets/log-BhdudKf6.js.map +1 -0
  306. package/dist/assets/logo-DdZuFRsA.js +8 -0
  307. package/dist/assets/logo-DdZuFRsA.js.map +1 -0
  308. package/dist/assets/lua-CNzUJNrS.js +10 -0
  309. package/dist/assets/lua-CNzUJNrS.js.map +1 -0
  310. package/dist/assets/luau-BbRxrK_-.js +8 -0
  311. package/dist/assets/luau-BbRxrK_-.js.map +1 -0
  312. package/dist/assets/make-CzMpGB61.js +8 -0
  313. package/dist/assets/make-CzMpGB61.js.map +1 -0
  314. package/dist/assets/markdown-BIyFz8QW.js +8 -0
  315. package/dist/assets/markdown-BIyFz8QW.js.map +1 -0
  316. package/dist/assets/marko-CDeO252B.js +16 -0
  317. package/dist/assets/marko-CDeO252B.js.map +1 -0
  318. package/dist/assets/material-theme-B-3T0qQC.js +5 -0
  319. package/dist/assets/material-theme-B-3T0qQC.js.map +1 -0
  320. package/dist/assets/material-theme-darker-DMHCIvq5.js +5 -0
  321. package/dist/assets/material-theme-darker-DMHCIvq5.js.map +1 -0
  322. package/dist/assets/material-theme-lighter-CnKSyNS5.js +5 -0
  323. package/dist/assets/material-theme-lighter-CnKSyNS5.js.map +1 -0
  324. package/dist/assets/material-theme-ocean-BKq6ZsFv.js +5 -0
  325. package/dist/assets/material-theme-ocean-BKq6ZsFv.js.map +1 -0
  326. package/dist/assets/material-theme-palenight-BaYUoLXq.js +5 -0
  327. package/dist/assets/material-theme-palenight-BaYUoLXq.js.map +1 -0
  328. package/dist/assets/matlab-CJkuh4eh.js +8 -0
  329. package/dist/assets/matlab-CJkuh4eh.js.map +1 -0
  330. package/dist/assets/mdc-DmwRfDxK.js +17 -0
  331. package/dist/assets/mdc-DmwRfDxK.js.map +1 -0
  332. package/dist/assets/mdx-DBtujtWe.js +8 -0
  333. package/dist/assets/mdx-DBtujtWe.js.map +1 -0
  334. package/dist/assets/mermaid-HX_erI9P.js +8 -0
  335. package/dist/assets/mermaid-HX_erI9P.js.map +1 -0
  336. package/dist/assets/min-dark-YawBJZLm.js +5 -0
  337. package/dist/assets/min-dark-YawBJZLm.js.map +1 -0
  338. package/dist/assets/min-light-CqsTzpMg.js +5 -0
  339. package/dist/assets/min-light-CqsTzpMg.js.map +1 -0
  340. package/dist/assets/mipsasm-CCIl-TEQ.js +8 -0
  341. package/dist/assets/mipsasm-CCIl-TEQ.js.map +1 -0
  342. package/dist/assets/mojo-0bwzCFgd.js +8 -0
  343. package/dist/assets/mojo-0bwzCFgd.js.map +1 -0
  344. package/dist/assets/monokai-DaNL4wHF.js +5 -0
  345. package/dist/assets/monokai-DaNL4wHF.js.map +1 -0
  346. package/dist/assets/moonbit-h33aWjYl.js +8 -0
  347. package/dist/assets/moonbit-h33aWjYl.js.map +1 -0
  348. package/dist/assets/move-B0UfBCDq.js +8 -0
  349. package/dist/assets/move-B0UfBCDq.js.map +1 -0
  350. package/dist/assets/narrat-yNVO4v0G.js +8 -0
  351. package/dist/assets/narrat-yNVO4v0G.js.map +1 -0
  352. package/dist/assets/nextflow-1-7NB-ni.js +10 -0
  353. package/dist/assets/nextflow-1-7NB-ni.js.map +1 -0
  354. package/dist/assets/nextflow-groovy-TPtoW2P_.js +8 -0
  355. package/dist/assets/nextflow-groovy-TPtoW2P_.js.map +1 -0
  356. package/dist/assets/nginx-C98jlNwk.js +11 -0
  357. package/dist/assets/nginx-C98jlNwk.js.map +1 -0
  358. package/dist/assets/night-owl-DEYddbGH.js +5 -0
  359. package/dist/assets/night-owl-DEYddbGH.js.map +1 -0
  360. package/dist/assets/night-owl-light-CgPgLhZe.js +5 -0
  361. package/dist/assets/night-owl-light-CgPgLhZe.js.map +1 -0
  362. package/dist/assets/nim-C-XJ5M42.js +23 -0
  363. package/dist/assets/nim-C-XJ5M42.js.map +1 -0
  364. package/dist/assets/nix-DPigNF-w.js +13 -0
  365. package/dist/assets/nix-DPigNF-w.js.map +1 -0
  366. package/dist/assets/nord-CUKU048J.js +5 -0
  367. package/dist/assets/nord-CUKU048J.js.map +1 -0
  368. package/dist/assets/nushell-TxwY6Pb5.js +8 -0
  369. package/dist/assets/nushell-TxwY6Pb5.js.map +1 -0
  370. package/dist/assets/objective-c-CGXCwEak.js +8 -0
  371. package/dist/assets/objective-c-CGXCwEak.js.map +1 -0
  372. package/dist/assets/objective-cpp-C6Ou-DLk.js +8 -0
  373. package/dist/assets/objective-cpp-C6Ou-DLk.js.map +1 -0
  374. package/dist/assets/ocaml-B8c2W4N8.js +8 -0
  375. package/dist/assets/ocaml-B8c2W4N8.js.map +1 -0
  376. package/dist/assets/odin-CZ4skJts.js +8 -0
  377. package/dist/assets/odin-CZ4skJts.js.map +1 -0
  378. package/dist/assets/one-dark-pro-XdKxImzj.js +5 -0
  379. package/dist/assets/one-dark-pro-XdKxImzj.js.map +1 -0
  380. package/dist/assets/one-light-BgKiLWqC.js +5 -0
  381. package/dist/assets/one-light-BgKiLWqC.js.map +1 -0
  382. package/dist/assets/openscad-jtaZZ0ry.js +8 -0
  383. package/dist/assets/openscad-jtaZZ0ry.js.map +1 -0
  384. package/dist/assets/pascal-Dyzoiklv.js +8 -0
  385. package/dist/assets/pascal-Dyzoiklv.js.map +1 -0
  386. package/dist/assets/perl-DZBQ1fP7.js +19 -0
  387. package/dist/assets/perl-DZBQ1fP7.js.map +1 -0
  388. package/dist/assets/php-B6rqs9dC.js +21 -0
  389. package/dist/assets/php-B6rqs9dC.js.map +1 -0
  390. package/dist/assets/pkl-B7NRYePu.js +8 -0
  391. package/dist/assets/pkl-B7NRYePu.js.map +1 -0
  392. package/dist/assets/plastic-lmGvlDWy.js +5 -0
  393. package/dist/assets/plastic-lmGvlDWy.js.map +1 -0
  394. package/dist/assets/plsql-ZYRyC0wP.js +8 -0
  395. package/dist/assets/plsql-ZYRyC0wP.js.map +1 -0
  396. package/dist/assets/po-CHOVNvtJ.js +8 -0
  397. package/dist/assets/po-CHOVNvtJ.js.map +1 -0
  398. package/dist/assets/poimandres-C_MUMTwG.js +5 -0
  399. package/dist/assets/poimandres-C_MUMTwG.js.map +1 -0
  400. package/dist/assets/polar-CElS9PCS.js +8 -0
  401. package/dist/assets/polar-CElS9PCS.js.map +1 -0
  402. package/dist/assets/postcss-DgldbzUq.js +8 -0
  403. package/dist/assets/postcss-DgldbzUq.js.map +1 -0
  404. package/dist/assets/powerquery-B6VmGZs1.js +8 -0
  405. package/dist/assets/powerquery-B6VmGZs1.js.map +1 -0
  406. package/dist/assets/powershell-Dp4oaXtH.js +8 -0
  407. package/dist/assets/powershell-Dp4oaXtH.js.map +1 -0
  408. package/dist/assets/prisma-CPG4K8GD.js +8 -0
  409. package/dist/assets/prisma-CPG4K8GD.js.map +1 -0
  410. package/dist/assets/prolog-BfH16pdb.js +8 -0
  411. package/dist/assets/prolog-BfH16pdb.js.map +1 -0
  412. package/dist/assets/proto-DRhBl2v_.js +8 -0
  413. package/dist/assets/proto-DRhBl2v_.js.map +1 -0
  414. package/dist/assets/pug-B5ZJTPhc.js +14 -0
  415. package/dist/assets/pug-B5ZJTPhc.js.map +1 -0
  416. package/dist/assets/puppet-D93mTCzv.js +8 -0
  417. package/dist/assets/puppet-D93mTCzv.js.map +1 -0
  418. package/dist/assets/purescript-BwFPZeJE.js +8 -0
  419. package/dist/assets/purescript-BwFPZeJE.js.map +1 -0
  420. package/dist/assets/python-hNCB2wYL.js +8 -0
  421. package/dist/assets/python-hNCB2wYL.js.map +1 -0
  422. package/dist/assets/qml-B7tPv6LL.js +10 -0
  423. package/dist/assets/qml-B7tPv6LL.js.map +1 -0
  424. package/dist/assets/qmldir-C_cCg2m9.js +8 -0
  425. package/dist/assets/qmldir-C_cCg2m9.js.map +1 -0
  426. package/dist/assets/qss-CXFHvGeG.js +8 -0
  427. package/dist/assets/qss-CXFHvGeG.js.map +1 -0
  428. package/dist/assets/r-DW2dRJNU.js +8 -0
  429. package/dist/assets/r-DW2dRJNU.js.map +1 -0
  430. package/dist/assets/racket-CElNGJsF.js +8 -0
  431. package/dist/assets/racket-CElNGJsF.js.map +1 -0
  432. package/dist/assets/raku-BGNf9XOF.js +8 -0
  433. package/dist/assets/raku-BGNf9XOF.js.map +1 -0
  434. package/dist/assets/razor-_hEMrIZE.js +14 -0
  435. package/dist/assets/razor-_hEMrIZE.js.map +1 -0
  436. package/dist/assets/red-AJNT05eU.js +5 -0
  437. package/dist/assets/red-AJNT05eU.js.map +1 -0
  438. package/dist/assets/reg-B1yGSPeX.js +8 -0
  439. package/dist/assets/reg-B1yGSPeX.js.map +1 -0
  440. package/dist/assets/regexp-DpBcpYls.js +8 -0
  441. package/dist/assets/regexp-DpBcpYls.js.map +1 -0
  442. package/dist/assets/rel-COHg19E9.js +8 -0
  443. package/dist/assets/rel-COHg19E9.js.map +1 -0
  444. package/dist/assets/riscv-DGE7iFEu.js +8 -0
  445. package/dist/assets/riscv-DGE7iFEu.js.map +1 -0
  446. package/dist/assets/ron-BU8eWRkc.js +8 -0
  447. package/dist/assets/ron-BU8eWRkc.js.map +1 -0
  448. package/dist/assets/rose-pine-BpSSTpDl.js +5 -0
  449. package/dist/assets/rose-pine-BpSSTpDl.js.map +1 -0
  450. package/dist/assets/rose-pine-dawn-JuXMWM7e.js +5 -0
  451. package/dist/assets/rose-pine-dawn-JuXMWM7e.js.map +1 -0
  452. package/dist/assets/rose-pine-moon-DfNEd67D.js +5 -0
  453. package/dist/assets/rose-pine-moon-DfNEd67D.js.map +1 -0
  454. package/dist/assets/rosmsg-DV4uqfTE.js +8 -0
  455. package/dist/assets/rosmsg-DV4uqfTE.js.map +1 -0
  456. package/dist/assets/rst-Dwts34Vp.js +38 -0
  457. package/dist/assets/rst-Dwts34Vp.js.map +1 -0
  458. package/dist/assets/ruby-BQIBxl9d.js +38 -0
  459. package/dist/assets/ruby-BQIBxl9d.js.map +1 -0
  460. package/dist/assets/rust-eyDPxu_F.js +8 -0
  461. package/dist/assets/rust-eyDPxu_F.js.map +1 -0
  462. package/dist/assets/sas-D42O7b-h.js +10 -0
  463. package/dist/assets/sas-D42O7b-h.js.map +1 -0
  464. package/dist/assets/sass-DgfD_AjS.js +8 -0
  465. package/dist/assets/sass-DgfD_AjS.js.map +1 -0
  466. package/dist/assets/scala-Bk1H2mSp.js +8 -0
  467. package/dist/assets/scala-Bk1H2mSp.js.map +1 -0
  468. package/dist/assets/scheme-CvUmbwed.js +8 -0
  469. package/dist/assets/scheme-CvUmbwed.js.map +1 -0
  470. package/dist/assets/scss-CuhcKk0L.js +10 -0
  471. package/dist/assets/scss-CuhcKk0L.js.map +1 -0
  472. package/dist/assets/sdbl-CsDj0b2n.js +8 -0
  473. package/dist/assets/sdbl-CsDj0b2n.js.map +1 -0
  474. package/dist/assets/shaderlab-BR6dybZt.js +10 -0
  475. package/dist/assets/shaderlab-BR6dybZt.js.map +1 -0
  476. package/dist/assets/shellscript-BFESB3IN.js +8 -0
  477. package/dist/assets/shellscript-BFESB3IN.js.map +1 -0
  478. package/dist/assets/shellsession-BUDs6Lj1.js +10 -0
  479. package/dist/assets/shellsession-BUDs6Lj1.js.map +1 -0
  480. package/dist/assets/shikiTokenizerWorker-BtjW_v9G.js +9878 -0
  481. package/dist/assets/shikiTokenizerWorker-BtjW_v9G.js.map +1 -0
  482. package/dist/assets/slack-dark-DWWJ5rYK.js +5 -0
  483. package/dist/assets/slack-dark-DWWJ5rYK.js.map +1 -0
  484. package/dist/assets/slack-ochin-Bq5JRIP5.js +5 -0
  485. package/dist/assets/slack-ochin-Bq5JRIP5.js.map +1 -0
  486. package/dist/assets/smalltalk-CepYz02F.js +8 -0
  487. package/dist/assets/smalltalk-CepYz02F.js.map +1 -0
  488. package/dist/assets/snazzy-light-CI6w30cq.js +5 -0
  489. package/dist/assets/snazzy-light-CI6w30cq.js.map +1 -0
  490. package/dist/assets/solarized-dark-Bgqg9546.js +5 -0
  491. package/dist/assets/solarized-dark-Bgqg9546.js.map +1 -0
  492. package/dist/assets/solarized-light-Cfhyx18w.js +5 -0
  493. package/dist/assets/solarized-light-Cfhyx18w.js.map +1 -0
  494. package/dist/assets/solidity-Dy7cwWHW.js +8 -0
  495. package/dist/assets/solidity-Dy7cwWHW.js.map +1 -0
  496. package/dist/assets/soy-CATG-zBT.js +12 -0
  497. package/dist/assets/soy-CATG-zBT.js.map +1 -0
  498. package/dist/assets/sparql-xS45ySCY.js +10 -0
  499. package/dist/assets/sparql-xS45ySCY.js.map +1 -0
  500. package/dist/assets/splunk-xsP0MVkt.js +8 -0
  501. package/dist/assets/splunk-xsP0MVkt.js.map +1 -0
  502. package/dist/assets/sql-kPnl9bgi.js +8 -0
  503. package/dist/assets/sql-kPnl9bgi.js.map +1 -0
  504. package/dist/assets/ssh-config-ehSXrtEV.js +8 -0
  505. package/dist/assets/ssh-config-ehSXrtEV.js.map +1 -0
  506. package/dist/assets/stata-CQNu_FgQ.js +10 -0
  507. package/dist/assets/stata-CQNu_FgQ.js.map +1 -0
  508. package/dist/assets/stylus-BoZJ_eV7.js +8 -0
  509. package/dist/assets/stylus-BoZJ_eV7.js.map +1 -0
  510. package/dist/assets/surrealql-BuAG2s0L.js +10 -0
  511. package/dist/assets/surrealql-BuAG2s0L.js.map +1 -0
  512. package/dist/assets/svelte-CnoxkKF2.js +16 -0
  513. package/dist/assets/svelte-CnoxkKF2.js.map +1 -0
  514. package/dist/assets/swift--o4OYIXX.js +8 -0
  515. package/dist/assets/swift--o4OYIXX.js.map +1 -0
  516. package/dist/assets/synthwave-84-DXKOZPq5.js +5 -0
  517. package/dist/assets/synthwave-84-DXKOZPq5.js.map +1 -0
  518. package/dist/assets/system-verilog-BEcmvm6Z.js +8 -0
  519. package/dist/assets/system-verilog-BEcmvm6Z.js.map +1 -0
  520. package/dist/assets/systemd-DJzDbKrW.js +8 -0
  521. package/dist/assets/systemd-DJzDbKrW.js.map +1 -0
  522. package/dist/assets/talonscript-Djb-VPry.js +8 -0
  523. package/dist/assets/talonscript-Djb-VPry.js.map +1 -0
  524. package/dist/assets/tasl-p9F3iH-j.js +8 -0
  525. package/dist/assets/tasl-p9F3iH-j.js.map +1 -0
  526. package/dist/assets/tcl-3f-uwoUo.js +8 -0
  527. package/dist/assets/tcl-3f-uwoUo.js.map +1 -0
  528. package/dist/assets/templ-B5LeC0kQ.js +14 -0
  529. package/dist/assets/templ-B5LeC0kQ.js.map +1 -0
  530. package/dist/assets/terraform-DgWhF4Yd.js +8 -0
  531. package/dist/assets/terraform-DgWhF4Yd.js.map +1 -0
  532. package/dist/assets/tex-CxL9S8Wd.js +10 -0
  533. package/dist/assets/tex-CxL9S8Wd.js.map +1 -0
  534. package/dist/assets/tokyo-night-BAQ_Myi4.js +5 -0
  535. package/dist/assets/tokyo-night-BAQ_Myi4.js.map +1 -0
  536. package/dist/assets/toml-BnyEyEPT.js +8 -0
  537. package/dist/assets/toml-BnyEyEPT.js.map +1 -0
  538. package/dist/assets/ts-tags-Bvk0ykl-.js +55 -0
  539. package/dist/assets/ts-tags-Bvk0ykl-.js.map +1 -0
  540. package/dist/assets/tsv-DY-yErdv.js +8 -0
  541. package/dist/assets/tsv-DY-yErdv.js.map +1 -0
  542. package/dist/assets/tsx-42HYAIDq.js +8 -0
  543. package/dist/assets/tsx-42HYAIDq.js.map +1 -0
  544. package/dist/assets/turtle-zqT8DlFI.js +8 -0
  545. package/dist/assets/turtle-zqT8DlFI.js.map +1 -0
  546. package/dist/assets/twig-uAs39d9k.js +37 -0
  547. package/dist/assets/twig-uAs39d9k.js.map +1 -0
  548. package/dist/assets/typescript-B2_-ihnN.js +8 -0
  549. package/dist/assets/typescript-B2_-ihnN.js.map +1 -0
  550. package/dist/assets/typespec-Kj54qpoq.js +8 -0
  551. package/dist/assets/typespec-Kj54qpoq.js.map +1 -0
  552. package/dist/assets/typst-BW5EogfV.js +8 -0
  553. package/dist/assets/typst-BW5EogfV.js.map +1 -0
  554. package/dist/assets/v-BMYuw6y3.js +8 -0
  555. package/dist/assets/v-BMYuw6y3.js.map +1 -0
  556. package/dist/assets/vala-DZNmMJCf.js +8 -0
  557. package/dist/assets/vala-DZNmMJCf.js.map +1 -0
  558. package/dist/assets/vb-6IyLx8lg.js +8 -0
  559. package/dist/assets/vb-6IyLx8lg.js.map +1 -0
  560. package/dist/assets/verilog-CBEeotQw.js +8 -0
  561. package/dist/assets/verilog-CBEeotQw.js.map +1 -0
  562. package/dist/assets/vesper-B_lKdhLz.js +5 -0
  563. package/dist/assets/vesper-B_lKdhLz.js.map +1 -0
  564. package/dist/assets/vhdl-Qbjr_6hW.js +8 -0
  565. package/dist/assets/vhdl-Qbjr_6hW.js.map +1 -0
  566. package/dist/assets/viml-Ce8qq_0D.js +8 -0
  567. package/dist/assets/viml-Ce8qq_0D.js.map +1 -0
  568. package/dist/assets/vitesse-black-BiRwe6jA.js +5 -0
  569. package/dist/assets/vitesse-black-BiRwe6jA.js.map +1 -0
  570. package/dist/assets/vitesse-dark-44qkAq30.js +5 -0
  571. package/dist/assets/vitesse-dark-44qkAq30.js.map +1 -0
  572. package/dist/assets/vitesse-light-KXY5XYnn.js +5 -0
  573. package/dist/assets/vitesse-light-KXY5XYnn.js.map +1 -0
  574. package/dist/assets/vue-DQvlk87_.js +41 -0
  575. package/dist/assets/vue-DQvlk87_.js.map +1 -0
  576. package/dist/assets/vue-html-DiaQkc4E.js +10 -0
  577. package/dist/assets/vue-html-DiaQkc4E.js.map +1 -0
  578. package/dist/assets/vue-vine-DgWfDcNr.js +20 -0
  579. package/dist/assets/vue-vine-DgWfDcNr.js.map +1 -0
  580. package/dist/assets/vyper-Bq7Z2-Ss.js +8 -0
  581. package/dist/assets/vyper-Bq7Z2-Ss.js.map +1 -0
  582. package/dist/assets/wasm-BdTJGc7T.js +8 -0
  583. package/dist/assets/wasm-BdTJGc7T.js.map +1 -0
  584. package/dist/assets/wenyan-ZWlLIQIr.js +8 -0
  585. package/dist/assets/wenyan-ZWlLIQIr.js.map +1 -0
  586. package/dist/assets/wgsl-C7jKgLAu.js +8 -0
  587. package/dist/assets/wgsl-C7jKgLAu.js.map +1 -0
  588. package/dist/assets/wikitext-Bd2wE6rj.js +8 -0
  589. package/dist/assets/wikitext-Bd2wE6rj.js.map +1 -0
  590. package/dist/assets/wit-14OfqCWW.js +8 -0
  591. package/dist/assets/wit-14OfqCWW.js.map +1 -0
  592. package/dist/assets/wolfram-RapNeSab.js +8 -0
  593. package/dist/assets/wolfram-RapNeSab.js.map +1 -0
  594. package/dist/assets/xml-Du1cw7kN.js +10 -0
  595. package/dist/assets/xml-Du1cw7kN.js.map +1 -0
  596. package/dist/assets/xsl-CfczXwS3.js +11 -0
  597. package/dist/assets/xsl-CfczXwS3.js.map +1 -0
  598. package/dist/assets/yaml-D_xpd4DU.js +8 -0
  599. package/dist/assets/yaml-D_xpd4DU.js.map +1 -0
  600. package/dist/assets/zenscript-DaonNBty.js +8 -0
  601. package/dist/assets/zenscript-DaonNBty.js.map +1 -0
  602. package/dist/assets/zig-DWvk_5e3.js +8 -0
  603. package/dist/assets/zig-DWvk_5e3.js.map +1 -0
  604. package/dist/bridge.cjs +1 -1
  605. package/dist/bridge.cjs.map +1 -1
  606. package/dist/bridge.d.ts +185 -2
  607. package/dist/bridge.js +3 -0
  608. package/dist/bridge.js.map +1 -1
  609. package/dist/core.d.ts +122 -2
  610. package/dist/dom.cjs +1 -1
  611. package/dist/dom.d.ts +122 -2
  612. package/dist/dom.js +2 -2
  613. package/dist/index-CBjqWsRZ.js +5338 -0
  614. package/dist/index-CBjqWsRZ.js.map +1 -0
  615. package/dist/index-DF8OhKI4.cjs.map +1 -1
  616. package/dist/{index-B1raum97.js → index-DqIXwEPo.js} +2 -2
  617. package/dist/{index-B1raum97.js.map → index-DqIXwEPo.js.map} +1 -1
  618. package/dist/{index-D1a91Ek0.cjs → index-N9gbDsDi.cjs} +2 -2
  619. package/dist/{index-D1a91Ek0.cjs.map → index-N9gbDsDi.cjs.map} +1 -1
  620. package/dist/index-TJ1HUDJO.cjs +7 -0
  621. package/dist/index-TJ1HUDJO.cjs.map +1 -0
  622. package/dist/index-sbZNOcCB.js.map +1 -1
  623. package/dist/index.cjs +1 -1
  624. package/dist/index.d.ts +189 -2
  625. package/dist/index.js +2 -2
  626. package/dist/native-spec.d.ts +122 -2
  627. package/dist/style.css +1 -1
  628. package/dist/webview.cjs +1 -1
  629. package/dist/webview.d.ts +189 -2
  630. package/dist/webview.js +1 -1
  631. package/package.json +7 -3
  632. package/dist/index-BJMFpGLi.js +0 -4781
  633. package/dist/index-BJMFpGLi.js.map +0 -1
  634. package/dist/index-BnlTw-Yj.cjs +0 -4
  635. package/dist/index-BnlTw-Yj.cjs.map +0 -1
@@ -1,4781 +0,0 @@
1
- var lr = Object.defineProperty;
2
- var cr = (e, t, n) => t in e ? lr(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
- var $e = (e, t, n) => cr(e, typeof t != "symbol" ? t + "" : t, n);
4
- import { BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS as dr, isBridgeMessage as ur, BRIDGE_HEIGHT_CHANGE_THROTTLE_MS as mr, defaultBridgeEventTiming as gr } from "./bridge.js";
5
- import { B as Ae, b as tn, a as nn } from "./index-CuNKUHed.js";
6
- import { DecoratorNode as rn, $applyNodeReplacement as rt, $getRoot as F, $isElementNode as ie, $createParagraphNode as z, KEY_BACKSPACE_COMMAND as on, COMMAND_PRIORITY_HIGH as G, KEY_DELETE_COMMAND as an, DELETE_CHARACTER_COMMAND as sn, $getSelection as D, $isNodeSelection as hr, $isRangeSelection as O, TextNode as Y, $isParagraphNode as pr, $insertNodes as W, FORMAT_ELEMENT_COMMAND as fr, $createTextNode as Be, FORMAT_TEXT_COMMAND as br, REDO_COMMAND as yr, UNDO_COMMAND as vr, OUTDENT_CONTENT_COMMAND as wr, INDENT_CONTENT_COMMAND as Cr, SKIP_SCROLL_INTO_VIEW_TAG as _r, $getNodeByKey as he, $setSelection as kr, SELECTION_CHANGE_COMMAND as ln, COMMAND_PRIORITY_LOW as j, KEY_ESCAPE_COMMAND as cn, KEY_ARROW_DOWN_COMMAND as Er, KEY_ARROW_UP_COMMAND as xr, KEY_ENTER_COMMAND as Mr, mergeRegister as dn, INSERT_PARAGRAPH_COMMAND as Tr, INSERT_LINE_BREAK_COMMAND as Lr, $isLineBreakNode as un, $getNearestNodeFromDOMNode as Sr, CAN_UNDO_COMMAND as Nr, CAN_REDO_COMMAND as Pr, createEditor as Ir, CLEAR_HISTORY_COMMAND as Rr } from "lexical";
7
- import { $isHeadingNode as Ar, $isQuoteNode as mn, $createQuoteNode as Br, $createHeadingNode as Dr, registerRichText as Hr, HeadingNode as Or, QuoteNode as $r } from "@lexical/rich-text";
8
- import { $isCodeNode as X, $createCodeNode as Fr, $isCodeHighlightNode as zr, $createCodeHighlightNode as Vr, CodeNode as gn, CodeHighlightNode as Wr } from "@lexical/code";
9
- import { $isListNode as Ur, ListNode as hn, INSERT_CHECK_LIST_COMMAND as jr, INSERT_UNORDERED_LIST_COMMAND as Kr, INSERT_ORDERED_LIST_COMMAND as qr, $isListItemNode as Gr, registerList as Xr, registerCheckList as Yr, ListItemNode as Jr } from "@lexical/list";
10
- import { $isTableSelection as pn, $findTableNode as Qr, $deleteTableColumnAtSelection as Zr, $deleteTableRowAtSelection as eo, $insertTableColumnAtSelection as to, $insertTableRowAtSelection as no, INSERT_TABLE_COMMAND as ro, $findCellNode as oo, TableNode as Ge, $isTableRowNode as ao, $isTableCellNode as so, registerTablePlugin as io, TableRowNode as lo, TableCellNode as co, setScrollableTablesActive as uo } from "@lexical/table";
11
- import { $isLinkNode as Se, $toggleLink as ft, formatUrl as mo, $createLinkNode as go, registerAutoLink as ho, createLinkMatcherWithRegExp as bt, LinkNode as po, AutoLinkNode as fo } from "@lexical/link";
12
- import { registerHistory as bo, createEmptyHistoryState as yo } from "@lexical/history";
13
- import { $generateNodesFromDOM as fn, $generateHtmlFromNodes as vo } from "@lexical/html";
14
- import { $getSelectionStyleValueForProperty as wo, $setBlocksType as Fe, $patchStyleText as yt, $trimTextContentFromAnchor as vt } from "@lexical/selection";
15
- import { $getNearestNodeOfType as Co, $findMatchingParent as _o, $insertNodeToNearestRoot as bn } from "@lexical/utils";
16
- import { codeBlockLanguagePanel as Xe, isCommandStateForCommand as ko, resolveToolbarMenu as ot, defaultMenuSchema as De, tableHeaderMenuItems as Eo } from "./native-spec.js";
17
- import { r as yn } from "./index-sbZNOcCB.js";
18
- import { computePosition as vn, platform as wn, offset as Cn, flip as _n, shift as kn, autoUpdate as xo } from "@floating-ui/dom";
19
- import { normalizeCodeLanguage as Mo, getCodeLanguageOptions as To, ShikiTokenizer as wt, isCodeLanguageLoaded as En, loadCodeLanguage as Lo, loadCodeTheme as So, registerCodeHighlighting as No } from "@lexical/code-shiki";
20
- const Ct = "bridgerte-media", xn = "Loading", _t = (e, t) => `${e}:${t}`, oe = (e) => typeof e == "number" && Number.isFinite(e) && e > 0 ? Math.floor(e) : void 0, kt = (e) => typeof e == "number" && Number.isFinite(e) ? Math.min(Math.max(e, 0), 100) : void 0, Po = (e) => e === 20 || e === 50 || e === 100, Et = (e) => Po(e) ? e : void 0, xt = (e) => e === "center" || e === "right" ? e : void 0, Io = (e) => e.status === "error" ? e.errorMessage ?? "媒体加载失败" : xn, Ro = (e, t) => !t || e.status === void 0 || e.status === "success", ze = (e, t, n) => {
21
- n && e.setAttribute(t, n);
22
- }, Mt = (e, t, n) => {
23
- n !== void 0 && e.setAttribute(t, String(n));
24
- };
25
- class le extends rn {
26
- constructor(n, r) {
27
- super(r);
28
- $e(this, "__payload");
29
- this.__payload = {
30
- ...n,
31
- assetId: n.assetId ?? _t(n.mediaType, n.url),
32
- width: oe(n.width),
33
- height: oe(n.height),
34
- duration: oe(n.duration),
35
- progress: kt(n.progress),
36
- displayWidthPercent: Et(n.displayWidthPercent),
37
- align: xt(n.align)
38
- }, this.__payload.displayWidthPercent === void 0 && delete this.__payload.displayWidthPercent, this.__payload.align === void 0 && delete this.__payload.align;
39
- }
40
- static getType() {
41
- return Ct;
42
- }
43
- static clone(n) {
44
- return new le(n.__payload, n.__key);
45
- }
46
- createDOM(n) {
47
- return this.createMediaElement(!0);
48
- }
49
- updateDOM(n, r) {
50
- if (n.__payload === this.__payload) return !1;
51
- const o = this.createMediaElement(!0);
52
- return r.replaceWith(o), !0;
53
- }
54
- exportDOM(n) {
55
- return { element: this.createMediaElement(!1) };
56
- }
57
- static importDOM() {
58
- return {
59
- img: () => ({
60
- conversion: Ao,
61
- priority: 1
62
- }),
63
- video: () => ({
64
- conversion: Bo,
65
- priority: 1
66
- })
67
- };
68
- }
69
- static importJSON(n) {
70
- return ce(n).updateFromJSON(n);
71
- }
72
- exportJSON() {
73
- return {
74
- ...super.exportJSON(),
75
- ...this.__payload,
76
- type: Ct
77
- };
78
- }
79
- getTextContent() {
80
- return this.__payload.title ?? this.__payload.alt ?? this.__payload.url;
81
- }
82
- isInline() {
83
- return !1;
84
- }
85
- getAsset() {
86
- const n = this.__payload, r = {
87
- id: n.assetId ?? _t(n.mediaType, n.url),
88
- type: n.mediaType,
89
- url: n.url,
90
- status: n.status,
91
- progress: n.progress,
92
- poster: n.poster,
93
- width: n.width,
94
- height: n.height,
95
- duration: n.duration,
96
- mimeType: n.mimeType,
97
- size: n.size,
98
- errorMessage: n.errorMessage,
99
- external: !0
100
- };
101
- return n.displayWidthPercent !== void 0 && (r.displayWidthPercent = n.displayWidthPercent), n.align !== void 0 && (r.align = n.align), r;
102
- }
103
- updatePayload(n) {
104
- const r = this.getWritable();
105
- r.__payload = {
106
- ...r.__payload,
107
- ...n,
108
- width: oe(n.width ?? r.__payload.width),
109
- height: oe(n.height ?? r.__payload.height),
110
- duration: oe(n.duration ?? r.__payload.duration),
111
- progress: kt(n.progress ?? r.__payload.progress),
112
- displayWidthPercent: Object.prototype.hasOwnProperty.call(
113
- n,
114
- "displayWidthPercent"
115
- ) ? Et(n.displayWidthPercent) : r.__payload.displayWidthPercent,
116
- align: Object.prototype.hasOwnProperty.call(n, "align") ? xt(n.align) : r.__payload.align
117
- }, r.__payload.displayWidthPercent === void 0 && delete r.__payload.displayWidthPercent, r.__payload.align === void 0 && delete r.__payload.align;
118
- }
119
- createMediaElement(n) {
120
- const r = this.__payload, o = document.createElement("figure"), a = r.mediaType === "image" ? document.createElement("img") : document.createElement("video"), s = () => {
121
- o.dataset.loadState = "loaded";
122
- };
123
- o.className = `bridgerte__media bridgerte__media--${r.mediaType}`, o.contentEditable = "false", o.dataset.assetId = r.assetId, o.dataset.mediaType = r.mediaType, o.dataset.status = r.status ?? "success", n && (o.dataset.loadState = r.status === "error" ? "error" : "loading"), r.progress !== void 0 && (o.dataset.progress = String(r.progress)), r.align !== void 0 && (o.dataset.align = r.align), r.displayWidthPercent !== void 0 && (o.dataset.displayWidthPercent = String(r.displayWidthPercent), o.style.setProperty(
124
- "--bridgerte-media-display-width",
125
- `${r.displayWidthPercent}%`
126
- )), r.width !== void 0 && r.height !== void 0 && o.style.setProperty(
127
- "--bridgerte-media-aspect-ratio",
128
- `${r.width} / ${r.height}`
129
- ), a.className = "bridgerte__media-element", n && (a.addEventListener(
130
- r.mediaType === "image" ? "load" : "loadedmetadata",
131
- s,
132
- { once: !0 }
133
- ), a.addEventListener("error", () => {
134
- o.dataset.loadState = "error";
135
- }, { once: !0 }));
136
- const l = Ro(r, n);
137
- if (r.mediaType === "image" ? (l && a.setAttribute("src", r.url), a.setAttribute("loading", "lazy"), ze(a, "alt", r.alt ?? r.title)) : (l && a.setAttribute("src", r.url), a.setAttribute("controls", "true"), a.setAttribute("preload", "metadata"), ze(a, "poster", r.poster)), ze(a, "title", r.title), Mt(a, "width", r.width), Mt(a, "height", r.height), n) {
138
- const d = document.createElement("div"), i = document.createElement("span"), g = document.createElement("span");
139
- d.className = "bridgerte__media-placeholder", d.setAttribute("aria-hidden", "true"), i.className = "bridgerte__media-placeholder-icon", i.textContent = r.mediaType === "image" ? "IMG" : "VIDEO", g.className = "bridgerte__media-placeholder-text", g.textContent = Io(r), d.append(i, g), o.append(d);
140
- }
141
- if (o.append(a), r.status === "uploading" || r.status === "error") {
142
- const d = document.createElement("figcaption");
143
- d.className = "bridgerte__media-status", d.textContent = r.status === "error" ? r.errorMessage ?? "上传失败" : xn, o.append(d);
144
- }
145
- return o;
146
- }
147
- }
148
- const Ao = (e) => {
149
- const t = e instanceof HTMLImageElement ? e : null;
150
- return {
151
- /*
152
- * 外部 HTML 粘贴或 setContent 导入 img 时,只认带 src 的真实媒体。
153
- * 状态统一设为 success,因为浏览器 DOM 不包含 BridgeRTE 上传任务信息。
154
- */
155
- node: t != null && t.src ? ce({
156
- mediaType: "image",
157
- url: t.src,
158
- alt: t.alt,
159
- title: t.title,
160
- width: t.width,
161
- height: t.height,
162
- status: "success"
163
- }) : null
164
- };
165
- }, Bo = (e) => {
166
- const t = e instanceof HTMLVideoElement ? e : null;
167
- return {
168
- /*
169
- * video 导入只保留可序列化的展示元信息;controls、preload 等播放属性由 createDOM 重建。
170
- */
171
- node: t != null && t.src ? ce({
172
- mediaType: "video",
173
- url: t.src,
174
- poster: t.poster,
175
- title: t.title,
176
- width: t.videoWidth || t.width,
177
- height: t.videoHeight || t.height,
178
- status: "success"
179
- }) : null
180
- };
181
- }, ce = (e) => rt(new le(e)), Do = (e) => ce({
182
- mediaType: "image",
183
- url: e.url,
184
- alt: e.alt,
185
- title: e.title,
186
- width: e.width,
187
- height: e.height,
188
- displayWidthPercent: e.displayWidthPercent,
189
- align: e.align,
190
- assetId: e.assetId,
191
- status: "success"
192
- }), Ho = (e) => ce({
193
- mediaType: "video",
194
- url: e.url,
195
- poster: e.poster,
196
- title: e.title,
197
- width: e.width,
198
- height: e.height,
199
- displayWidthPercent: e.displayWidthPercent,
200
- align: e.align,
201
- assetId: e.assetId,
202
- status: "success"
203
- }), Mn = (e) => e instanceof le, ge = (e) => {
204
- const t = (n) => {
205
- if (Mn(n) && n.getAsset().id === e) return n;
206
- if (!ie(n)) return null;
207
- for (const r of n.getChildren()) {
208
- const o = t(r);
209
- if (o) return o;
210
- }
211
- return null;
212
- };
213
- return t(F());
214
- }, Oo = ".bridgerte__table-cell", $o = "75px", Fo = "1px solid black", zo = "top", Vo = "start", Wo = /* @__PURE__ */ new Set([
215
- "#f2f3f5",
216
- "rgb(242,243,245)"
217
- ]), Tn = (e) => e.trim().toLowerCase().replace(/\s+/g, " "), Uo = (e) => Tn(e).replace(/\s*,\s*/g, ","), ve = (e, t, n) => {
218
- Tn(e.getPropertyValue(t)) === n && e.removeProperty(t);
219
- }, jo = (e, t) => {
220
- const n = Uo(t.getPropertyValue("background-color"));
221
- (e.classList.contains("bridgerte__table-cell--header") || e.tagName.toLowerCase() === "th") && Wo.has(n) && t.removeProperty("background-color");
222
- }, Ko = (e) => {
223
- var t;
224
- ((t = e.getAttribute("style")) == null ? void 0 : t.trim()) === "" && e.removeAttribute("style");
225
- }, Ln = (e) => {
226
- if (!e || !e.includes("bridgerte__table-cell")) return e;
227
- const t = document.createElement("template");
228
- return t.innerHTML = e, t.content.querySelectorAll(Oo).forEach((n) => {
229
- const { style: r } = n;
230
- ve(r, "border", Fo), ve(r, "vertical-align", zo), ve(r, "text-align", Vo), ve(r, "width", $o), jo(n, r), Ko(n);
231
- }), t.innerHTML;
232
- }, Sn = {
233
- root: {
234
- type: "root",
235
- version: 1,
236
- children: []
237
- }
238
- };
239
- function Ye(e = {}) {
240
- return {
241
- html: e.html ?? "",
242
- json: e.json ?? Sn,
243
- plainText: e.plainText ?? "",
244
- assets: e.assets ?? [],
245
- version: e.version ?? Ae
246
- };
247
- }
248
- const qo = (e) => e.toJSON(), Go = (e) => {
249
- var t;
250
- return ((t = e.root.children) == null ? void 0 : t.length) === 0;
251
- }, Xo = (e) => e.read(() => {
252
- const t = /* @__PURE__ */ new Map(), n = (r) => {
253
- ie(r) && r.getChildren().forEach((o) => {
254
- if (Mn(o)) {
255
- const a = o.getAsset();
256
- t.set(a.id, a);
257
- return;
258
- }
259
- ie(o) && n(o);
260
- });
261
- };
262
- return n(F()), [...t.values()];
263
- }), Nn = (e, t) => {
264
- const n = Ln(t.read(() => vo(t))), r = e.read(() => F().getTextContent()), o = Xo(e);
265
- return {
266
- html: n,
267
- json: qo(e),
268
- plainText: r,
269
- assets: o,
270
- version: Ae
271
- };
272
- }, Yo = (e, t) => {
273
- const n = Ye(t);
274
- return Pn(e, n), Nn(e.getEditorState(), e);
275
- }, Pn = (e, t) => {
276
- if (t.json !== Sn && !Go(t.json)) {
277
- const o = t.json;
278
- e.setEditorState(e.parseEditorState(o));
279
- return;
280
- }
281
- if (!t.html) {
282
- e.update(
283
- () => {
284
- const o = F();
285
- o.clear(), o.append(z());
286
- },
287
- { discrete: !0 }
288
- );
289
- return;
290
- }
291
- const r = new DOMParser().parseFromString(Ln(t.html), "text/html");
292
- e.update(
293
- () => {
294
- const o = F(), a = fn(e, r);
295
- o.clear(), o.append(...a);
296
- },
297
- { discrete: !0 }
298
- );
299
- }, Jo = "bridgerte-divider", In = (e) => (e == null ? void 0 : e.getType()) === Jo, Qo = (e, t, n) => {
300
- const r = F();
301
- if (r.getChildrenSize() === 0) {
302
- const o = z();
303
- r.append(o), o.selectStart();
304
- return;
305
- }
306
- if (n) {
307
- e == null || e.selectEnd(), e || t == null || t.selectStart();
308
- return;
309
- }
310
- t == null || t.selectStart(), t || e == null || e.selectEnd();
311
- }, Zo = (e, t) => {
312
- const n = e.getPreviousSibling(), r = e.getNextSibling();
313
- e.remove(), Qo(n, r, t);
314
- }, ea = () => {
315
- const e = D();
316
- if (!hr(e)) return null;
317
- const t = e.getNodes();
318
- return t.length === 1 && In(t[0]) ? t[0] : null;
319
- }, ta = (e) => e.getKey() === "root" ? null : e.getTopLevelElement(), na = (e) => {
320
- const t = D();
321
- if (!O(t) || !t.isCollapsed()) return null;
322
- const n = t.anchor, r = n.getNode(), o = ta(r);
323
- if (!o || !ie(o)) return null;
324
- if (ie(r)) {
325
- const l = r.isEmpty() && n.offset === 0, d = r === o && n.offset === 0, i = r === o && n.offset === o.getChildrenSize();
326
- return l || (e ? d : i) ? o : null;
327
- }
328
- if (!(r instanceof Y)) return null;
329
- const a = e ? o.getFirstDescendant() : o.getLastDescendant(), s = e ? 0 : r.getTextContentSize();
330
- return a === r && n.offset === s ? o : null;
331
- }, ra = (e) => {
332
- const t = na(e), n = e ? t == null ? void 0 : t.getPreviousSibling() : t == null ? void 0 : t.getNextSibling();
333
- return In(n) ? n : null;
334
- }, oa = (e, t) => {
335
- const n = (o) => {
336
- if (t()) return !1;
337
- const a = ea() ?? ra(o);
338
- return a ? (Zo(a, o), !0) : !1;
339
- }, r = (o, a) => {
340
- const s = n(a);
341
- return s && o.preventDefault(), s;
342
- };
343
- return [
344
- e.registerCommand(
345
- on,
346
- (o) => r(o, !0),
347
- G
348
- ),
349
- e.registerCommand(
350
- an,
351
- (o) => r(o, !1),
352
- G
353
- ),
354
- e.registerCommand(
355
- sn,
356
- (o) => n(o),
357
- G
358
- )
359
- ];
360
- };
361
- class pe extends rn {
362
- static getType() {
363
- return "bridgerte-divider";
364
- }
365
- static clone(t) {
366
- return new pe(t.__key);
367
- }
368
- constructor(t) {
369
- super(t);
370
- }
371
- createDOM(t) {
372
- const n = document.createElement("hr");
373
- return n.className = "bridgerte__divider", n;
374
- }
375
- updateDOM() {
376
- return !1;
377
- }
378
- exportDOM(t) {
379
- const n = document.createElement("hr");
380
- return n.className = "bridgerte__divider", { element: n };
381
- }
382
- static importDOM() {
383
- return {
384
- hr: () => ({
385
- conversion: aa,
386
- priority: 0
387
- })
388
- };
389
- }
390
- static importJSON(t) {
391
- return at().updateFromJSON(t);
392
- }
393
- exportJSON() {
394
- return {
395
- ...super.exportJSON(),
396
- type: pe.getType()
397
- };
398
- }
399
- getTextContent() {
400
- return `
401
- `;
402
- }
403
- isInline() {
404
- return !1;
405
- }
406
- }
407
- const aa = (e) => ({
408
- node: at()
409
- }), at = () => rt(new pe()), Tt = "bridgerte-mention", st = "mention", Rn = (e) => e.label.startsWith("@") ? e.label : `@${e.label}`, sa = (e) => {
410
- const t = document.createElement("span");
411
- return t.className = "bridgerte__mention", t.dataset.type = st, t.dataset.id = e.id, t.dataset.value = e.value, t.contentEditable = "false", t.textContent = Rn(e), e.description && (t.dataset.description = e.description), t;
412
- };
413
- class ye extends Y {
414
- constructor(n, r = Rn(n), o) {
415
- super(r, o);
416
- $e(this, "__item");
417
- this.__item = n;
418
- }
419
- static getType() {
420
- return Tt;
421
- }
422
- static clone(n) {
423
- return new ye(n.__item, n.__text, n.__key);
424
- }
425
- createDOM(n) {
426
- const r = super.createDOM(n);
427
- return r.className = "bridgerte__mention", r.dataset.type = st, 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;
428
- }
429
- updateDOM(n, r, o) {
430
- 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);
431
- }
432
- exportDOM(n) {
433
- return { element: sa(this.__item) };
434
- }
435
- static importDOM() {
436
- return {
437
- span: () => ({
438
- conversion: ia,
439
- priority: 2
440
- })
441
- };
442
- }
443
- static importJSON(n) {
444
- return it(n).updateFromJSON(n);
445
- }
446
- exportJSON() {
447
- return {
448
- ...super.exportJSON(),
449
- ...this.__item,
450
- type: Tt
451
- };
452
- }
453
- isTextEntity() {
454
- return !0;
455
- }
456
- isToken() {
457
- return !0;
458
- }
459
- getMentionItem() {
460
- return this.__item;
461
- }
462
- }
463
- const ia = (e) => {
464
- var a;
465
- const t = e instanceof HTMLElement ? e : null;
466
- if (!t || t.dataset.type !== st)
467
- return { node: null };
468
- 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;
469
- return !n || !r || !o ? { node: null } : {
470
- node: it({
471
- id: r,
472
- label: n,
473
- value: o,
474
- description: t.dataset.description
475
- })
476
- };
477
- }, it = (e) => rt(new ye(e).setMode("token")), Lt = (e) => e instanceof ye, la = "请输入内容", ca = () => {
478
- const t = F().getChildren();
479
- if (t.length === 0) return !0;
480
- if (t.length > 1) return !1;
481
- const n = t[0];
482
- return pr(n) && n.getChildrenSize() === 0;
483
- }, da = ({
484
- editor: e,
485
- contentElement: t
486
- }) => {
487
- const n = e.getEditorState().read(ca);
488
- t.dataset.empty = String(n);
489
- }, ua = ({
490
- editor: e,
491
- contentElement: t,
492
- isReadonly: n
493
- }) => {
494
- const r = (o) => {
495
- n() || t.dataset.empty !== "true" || o.button === 0 && (o.preventDefault(), e.focus(() => {
496
- e.update(() => {
497
- F().selectStart();
498
- });
499
- }));
500
- };
501
- return t.addEventListener("pointerdown", r), () => {
502
- t.removeEventListener("pointerdown", r);
503
- };
504
- }, ma = [
505
- { command: "format.bold", format: "bold" },
506
- { command: "format.italic", format: "italic" },
507
- { command: "format.underline", format: "underline" },
508
- { command: "format.strike", format: "strikethrough" },
509
- { command: "format.inlineCode", format: "code" },
510
- { command: "format.superscript", format: "superscript" },
511
- { command: "format.subscript", format: "subscript" }
512
- ], ga = [
513
- { command: "format.color", property: "color" },
514
- { command: "format.backgroundColor", property: "background-color" },
515
- { command: "format.fontSize", property: "font-size" },
516
- { command: "format.fontFamily", property: "font-family" },
517
- { command: "format.lineHeight", property: "line-height" }
518
- ], ha = [
519
- { command: "list.ordered", listType: "ordered" },
520
- { command: "list.unordered", listType: "unordered" },
521
- { command: "list.todo", listType: "todo" }
522
- ], pa = [
523
- "media.pickImage",
524
- "media.pickVideo"
525
- ], An = () => {
526
- const e = D();
527
- if (!O(e)) return null;
528
- const t = e.anchor.getNode();
529
- return t.getKey() === "root" ? t : t.getTopLevelElementOrThrow();
530
- }, fa = () => {
531
- const e = An();
532
- if (!e) return null;
533
- if (Ar(e)) {
534
- const t = Number(e.getTag().replace("h", ""));
535
- return {
536
- command: "block.heading",
537
- value: Number.isNaN(t) ? void 0 : t
538
- };
539
- }
540
- if (mn(e))
541
- return {
542
- command: "block.quote"
543
- };
544
- if (X(e)) {
545
- const t = e.getLatest();
546
- return {
547
- command: "block.code",
548
- value: X(t) ? t.getLanguage() ?? "" : ""
549
- };
550
- }
551
- return {
552
- command: "block.paragraph"
553
- };
554
- }, ba = () => {
555
- const e = An();
556
- if (!e || !("getFormatType" in e)) return;
557
- const t = e.getFormatType();
558
- return t === "" ? void 0 : t;
559
- }, ya = () => {
560
- const e = D();
561
- if (!O(e)) return null;
562
- const t = e.anchor.getNode(), n = Ur(t) ? t : Co(t, hn);
563
- return n ? n.getListType() === "check" ? "todo" : n.getTag() === "ol" ? "ordered" : "unordered" : null;
564
- }, va = (e) => {
565
- const t = D();
566
- if (!O(t)) return;
567
- const n = wo(t, e);
568
- return n === "" ? void 0 : n;
569
- }, wa = () => {
570
- const e = D();
571
- if (!O(e)) return !1;
572
- const t = e.anchor.getNode(), n = t.getParent();
573
- return Se(t) || Se(n);
574
- }, Ca = (e) => {
575
- const t = D(), n = O(t), r = fa(), o = ya(), a = ba(), s = wa(), l = e.readonly || !n, d = ma.map((b) => ({
576
- command: b.command,
577
- active: n && t.hasFormat(b.format),
578
- disabled: l
579
- })), i = ga.map((b) => {
580
- const T = va(b.property);
581
- return {
582
- command: b.command,
583
- active: T !== void 0,
584
- disabled: l,
585
- value: T
586
- };
587
- }), g = ha.map((b) => ({
588
- command: b.command,
589
- active: o === b.listType,
590
- disabled: l
591
- })), v = pa.map((b) => ({
592
- command: b,
593
- active: !1,
594
- disabled: e.readonly || !e.canUploadMedia
595
- }));
596
- return [
597
- ...d,
598
- {
599
- command: "format.clear",
600
- active: !1,
601
- disabled: l
602
- },
603
- ...i,
604
- {
605
- command: "block.heading",
606
- active: (r == null ? void 0 : r.command) === "block.heading",
607
- disabled: l,
608
- value: (r == null ? void 0 : r.command) === "block.heading" ? r.value : void 0
609
- },
610
- {
611
- command: "block.paragraph",
612
- active: (r == null ? void 0 : r.command) === "block.paragraph",
613
- disabled: l
614
- },
615
- {
616
- command: "block.quote",
617
- active: (r == null ? void 0 : r.command) === "block.quote",
618
- disabled: l
619
- },
620
- {
621
- command: "block.divider",
622
- active: !1,
623
- disabled: e.readonly
624
- },
625
- {
626
- command: "block.code",
627
- active: (r == null ? void 0 : r.command) === "block.code",
628
- disabled: e.readonly,
629
- value: (r == null ? void 0 : r.command) === "block.code" ? r.value : void 0
630
- },
631
- ...g,
632
- {
633
- command: "align",
634
- active: a !== void 0,
635
- disabled: l,
636
- value: a
637
- },
638
- {
639
- command: "link.set",
640
- active: s,
641
- disabled: l
642
- },
643
- {
644
- command: "link.unset",
645
- active: !1,
646
- disabled: l || !s
647
- },
648
- {
649
- command: "link.open",
650
- active: !1,
651
- disabled: e.readonly || !s
652
- },
653
- {
654
- command: "indent.increase",
655
- active: !1,
656
- disabled: l
657
- },
658
- {
659
- command: "indent.decrease",
660
- active: !1,
661
- disabled: l
662
- },
663
- {
664
- command: "history.undo",
665
- active: !1,
666
- disabled: e.readonly || !e.canUndo
667
- },
668
- {
669
- command: "history.redo",
670
- active: !1,
671
- disabled: e.readonly || !e.canRedo
672
- },
673
- {
674
- command: "content.clear",
675
- active: !1,
676
- disabled: e.readonly
677
- },
678
- ...v,
679
- {
680
- command: "table.insert",
681
- active: !1,
682
- disabled: e.readonly
683
- },
684
- {
685
- command: "fullscreen.toggle",
686
- active: !1,
687
- disabled: !1
688
- }
689
- ];
690
- }, _a = (e, t) => e.length === t.length && e.every((n, r) => {
691
- const o = t[r];
692
- return o !== void 0 && n.command === o.command && n.active === o.active && n.disabled === o.disabled && n.value === o.value;
693
- }), K = (e, t, n, r) => {
694
- var o;
695
- try {
696
- (o = e.onError) == null || o.call(e, { code: t, message: n, cause: r });
697
- } catch (a) {
698
- console.error("[BridgeRTE] onError callback failed.", a);
699
- }
700
- }, ka = (e, t) => {
701
- var n;
702
- try {
703
- (n = e.onChange) == null || n.call(e, t);
704
- } catch (r) {
705
- K(e, "callback.onChange", "onChange callback failed.", r);
706
- }
707
- }, Ea = (e, t) => {
708
- var n;
709
- try {
710
- (n = e.onContentChange) == null || n.call(e, t);
711
- } catch (r) {
712
- K(
713
- e,
714
- "callback.onContentChange",
715
- "onContentChange callback failed.",
716
- r
717
- );
718
- }
719
- }, xa = (e, t) => {
720
- var n;
721
- try {
722
- (n = e.onCommandStateChange) == null || n.call(e, [...t]);
723
- } catch (r) {
724
- K(
725
- e,
726
- "callback.onCommandStateChange",
727
- "onCommandStateChange callback failed.",
728
- r
729
- );
730
- }
731
- }, Ma = (e) => {
732
- var t;
733
- try {
734
- (t = e.onFocus) == null || t.call(e);
735
- } catch (n) {
736
- K(e, "callback.onFocus", "onFocus callback failed.", n);
737
- }
738
- }, Ta = (e) => {
739
- var t;
740
- try {
741
- (t = e.onBlur) == null || t.call(e);
742
- } catch (n) {
743
- K(e, "callback.onBlur", "onBlur callback failed.", n);
744
- }
745
- }, La = (e, t) => {
746
- var n;
747
- try {
748
- (n = e.onReady) == null || n.call(e, t);
749
- } catch (r) {
750
- K(e, "callback.onReady", "onReady callback failed.", r);
751
- }
752
- }, Sa = ({
753
- lexicalEditor: e,
754
- options: t,
755
- isDestroyed: n,
756
- canUploadMedia: r,
757
- isReadonly: o
758
- }) => {
759
- let a = !1, s = !1, l = [];
760
- const d = /* @__PURE__ */ new Set(), i = () => {
761
- const v = [...l];
762
- d.forEach((b) => {
763
- try {
764
- b(v);
765
- } catch (T) {
766
- K(
767
- t,
768
- "callback.commandStateSubscriber",
769
- "Command state subscriber failed.",
770
- T
771
- );
772
- }
773
- });
774
- }, g = (v = !0) => {
775
- if (n()) return;
776
- const b = l;
777
- e.getEditorState().read(() => {
778
- l = Ca({
779
- canUndo: a,
780
- canRedo: s,
781
- readonly: o(),
782
- canUploadMedia: r()
783
- });
784
- }), v && !_a(b, l) && (xa(t, l), i());
785
- };
786
- return {
787
- refreshCommandStates: g,
788
- getCommandStates() {
789
- return g(!1), [...l];
790
- },
791
- subscribeCommandStateChange(v) {
792
- return n() ? () => {
793
- } : (d.add(v), v([...l]), () => {
794
- d.delete(v);
795
- });
796
- },
797
- setCanUndo(v) {
798
- a = v, g();
799
- },
800
- setCanRedo(v) {
801
- s = v, g();
802
- },
803
- setHistoryAvailability(v, b) {
804
- a = v, s = b, g();
805
- },
806
- destroy() {
807
- d.clear();
808
- }
809
- };
810
- }, Na = (e) => `upload:${e}:${Date.now()}:${Math.random().toString(36).slice(2)}`, Pa = (e) => typeof URL.createObjectURL == "function" ? URL.createObjectURL(e) : e.name, we = (e) => {
811
- typeof URL.revokeObjectURL == "function" && e.startsWith("blob:") && URL.revokeObjectURL(e);
812
- }, St = (e) => ({
813
- name: e.name,
814
- mimeType: e.type || void 0,
815
- size: e.size,
816
- data: e
817
- }), Ia = (e) => typeof DOMException < "u" && e instanceof DOMException && e.name === "AbortError", Ra = (e) => new Promise((t) => {
818
- const n = new Image(), r = () => {
819
- n.onload = null, n.onerror = null;
820
- };
821
- n.onload = () => {
822
- const o = {
823
- width: n.naturalWidth || void 0,
824
- height: n.naturalHeight || void 0
825
- };
826
- r(), t(o);
827
- }, n.onerror = () => {
828
- r(), t({});
829
- }, n.src = e;
830
- }), Aa = (e) => new Promise((t) => {
831
- const n = document.createElement("video"), r = () => {
832
- n.removeAttribute("src"), n.load(), n.onloadedmetadata = null, n.onerror = null;
833
- };
834
- n.preload = "metadata", n.onloadedmetadata = () => {
835
- const o = {
836
- width: n.videoWidth || void 0,
837
- height: n.videoHeight || void 0,
838
- duration: Number.isFinite(n.duration) ? n.duration : void 0
839
- };
840
- r(), t(o);
841
- }, n.onerror = () => {
842
- r(), t({});
843
- }, n.src = e, n.load();
844
- }), Ba = (e, t) => t.startsWith("blob:") ? e === "image" ? Ra(t) : Aa(t) : Promise.resolve({}), Da = (e, t) => ({
845
- ...e,
846
- width: e.width ?? t.width,
847
- height: e.height ?? t.height,
848
- duration: e.duration ?? t.duration
849
- }), Ha = ({
850
- container: e,
851
- lexicalEditor: t,
852
- options: n,
853
- isDestroyed: r
854
- }) => {
855
- const o = /* @__PURE__ */ new Map();
856
- let a = 0;
857
- const s = (u, p) => {
858
- t.update(() => {
859
- var E;
860
- (E = ge(u)) == null || E.updatePayload(p);
861
- });
862
- }, l = (u) => {
863
- let p = null;
864
- return t.update(() => {
865
- const E = ge(u);
866
- if (!E) return;
867
- const _ = E.getAsset();
868
- p = {
869
- mediaType: _.type,
870
- url: _.url,
871
- assetId: _.id,
872
- status: _.status,
873
- progress: _.progress,
874
- poster: _.poster,
875
- width: _.width,
876
- height: _.height,
877
- duration: _.duration,
878
- mimeType: _.mimeType,
879
- size: _.size,
880
- displayWidthPercent: _.displayWidthPercent,
881
- align: _.align,
882
- errorMessage: _.errorMessage
883
- }, E.remove();
884
- }), p;
885
- }, d = (u, p) => {
886
- const E = o.get(u);
887
- return (E == null ? void 0 : E.runId) === p;
888
- }, i = (u) => {
889
- var p;
890
- (p = u.abortController) == null || p.abort();
891
- }, g = (u, p) => {
892
- const E = o.get(u);
893
- return E ? (i(E), we(E.previewUrl), o.delete(u), !0) : !1;
894
- }, v = (u, p, E, _) => {
895
- t.update(
896
- () => {
897
- const B = ce({
898
- mediaType: u,
899
- url: _,
900
- assetId: E,
901
- status: "uploading",
902
- progress: 0,
903
- title: p.name,
904
- mimeType: p.type || void 0,
905
- size: p.size
906
- }), H = z();
907
- D() || F().selectEnd(), W([B, H]), H.selectStart();
908
- },
909
- { discrete: !0 }
910
- );
911
- }, b = (u, p, E, _) => {
912
- s(p, {
913
- mediaType: u,
914
- url: _.url,
915
- poster: _.poster,
916
- width: _.width,
917
- height: _.height,
918
- duration: _.duration,
919
- mimeType: _.mimeType,
920
- size: _.size,
921
- status: "success",
922
- progress: 100,
923
- errorMessage: void 0
924
- }), we(E);
925
- }, T = (u, p, E) => {
926
- var _;
927
- Ia(E) || (s(p, {
928
- mediaType: u,
929
- status: "error",
930
- errorMessage: "上传失败"
931
- }), (_ = n.onUploadError) == null || _.call(n, {
932
- assetId: p,
933
- type: u,
934
- cause: E
935
- }));
936
- }, f = (u) => {
937
- const p = n.uploadAdapter;
938
- if (!p) return;
939
- const E = typeof AbortController == "function" ? new AbortController() : null, _ = a + 1;
940
- a = _, u.runId = _, u.abortController = E, o.set(u.assetId, u);
941
- const B = {
942
- assetId: u.assetId,
943
- signal: E == null ? void 0 : E.signal,
944
- onProgress: (c) => {
945
- !d(u.assetId, _) || r() || s(u.assetId, {
946
- mediaType: u.type,
947
- status: "uploading",
948
- progress: c
949
- });
950
- }
951
- };
952
- let H = {};
953
- const I = Ba(u.type, u.previewUrl);
954
- let w;
955
- try {
956
- w = u.type === "image" ? p.uploadImage(St(u.file), B) : p.uploadVideo(St(u.file), B);
957
- } catch (c) {
958
- d(u.assetId, _) && T(u.type, u.assetId, c);
959
- return;
960
- }
961
- I.then((c) => {
962
- H = c, !(r() || !d(u.assetId, _)) && (c.width === void 0 && c.height === void 0 || s(u.assetId, {
963
- mediaType: u.type,
964
- width: c.width,
965
- height: c.height,
966
- duration: c.duration
967
- }));
968
- }), w.then((c) => {
969
- r() || !d(u.assetId, _) || (b(
970
- u.type,
971
- u.assetId,
972
- u.previewUrl,
973
- Da(c, H)
974
- ), o.delete(u.assetId));
975
- }).catch((c) => {
976
- r() || !d(u.assetId, _) || T(u.type, u.assetId, c);
977
- });
978
- }, y = (u, p) => {
979
- if (!n.uploadAdapter) return;
980
- const E = Na(u), _ = Pa(p), B = {
981
- assetId: E,
982
- type: u,
983
- file: p,
984
- previewUrl: _,
985
- runId: 0,
986
- abortController: null
987
- };
988
- v(u, p, E, _), f(B);
989
- };
990
- return {
991
- pickMediaFile: (u) => {
992
- if (!n.uploadAdapter) return;
993
- const p = e.ownerDocument.createElement("input");
994
- p.type = "file", p.accept = u === "image" ? "image/*" : "video/*", p.style.display = "none", p.addEventListener("change", () => {
995
- var _;
996
- const E = (_ = p.files) == null ? void 0 : _[0];
997
- p.remove(), E && y(u, E);
998
- }, { once: !0 }), e.append(p), p.click();
999
- },
1000
- uploadMediaFile: y,
1001
- removeMedia(u) {
1002
- const p = l(u);
1003
- !g(u) && (p != null && p.url.startsWith("blob:")) && we(p.url);
1004
- },
1005
- retryMedia(u) {
1006
- const p = o.get(u);
1007
- !p || !n.uploadAdapter || (i(p), s(u, {
1008
- mediaType: p.type,
1009
- url: p.previewUrl,
1010
- status: "uploading",
1011
- progress: 0,
1012
- errorMessage: void 0
1013
- }), f(p));
1014
- },
1015
- destroy() {
1016
- o.forEach((u) => {
1017
- i(u), we(u.previewUrl);
1018
- }), o.clear();
1019
- }
1020
- };
1021
- }, Bn = (e) => Fr(e), Oa = {
1022
- 1: "h1",
1023
- 2: "h2",
1024
- 3: "h3",
1025
- 4: "h4",
1026
- 5: "h5",
1027
- 6: "h6"
1028
- }, $a = {
1029
- code: "bridgerte__code-block",
1030
- codeHighlight: {
1031
- attr: "bridgerte__code-token bridgerte__code-token--attr",
1032
- "attr-name": "bridgerte__code-token bridgerte__code-token--attr-name",
1033
- "attr-value": "bridgerte__code-token bridgerte__code-token--attr-value",
1034
- boolean: "bridgerte__code-token bridgerte__code-token--boolean",
1035
- builtin: "bridgerte__code-token bridgerte__code-token--builtin",
1036
- "class-name": "bridgerte__code-token bridgerte__code-token--class-name",
1037
- comment: "bridgerte__code-token bridgerte__code-token--comment",
1038
- constant: "bridgerte__code-token bridgerte__code-token--constant",
1039
- deleted: "bridgerte__code-token bridgerte__code-token--deleted",
1040
- function: "bridgerte__code-token bridgerte__code-token--function",
1041
- inserted: "bridgerte__code-token bridgerte__code-token--inserted",
1042
- keyword: "bridgerte__code-token bridgerte__code-token--keyword",
1043
- namespace: "bridgerte__code-token bridgerte__code-token--namespace",
1044
- number: "bridgerte__code-token bridgerte__code-token--number",
1045
- operator: "bridgerte__code-token bridgerte__code-token--operator",
1046
- prefix: "bridgerte__code-token bridgerte__code-token--prefix",
1047
- property: "bridgerte__code-token bridgerte__code-token--property",
1048
- punctuation: "bridgerte__code-token bridgerte__code-token--punctuation",
1049
- regex: "bridgerte__code-token bridgerte__code-token--regex",
1050
- selector: "bridgerte__code-token bridgerte__code-token--selector",
1051
- string: "bridgerte__code-token bridgerte__code-token--string",
1052
- tag: "bridgerte__code-token bridgerte__code-token--tag",
1053
- unchanged: "bridgerte__code-token bridgerte__code-token--unchanged",
1054
- url: "bridgerte__code-token bridgerte__code-token--url",
1055
- variable: "bridgerte__code-token bridgerte__code-token--variable"
1056
- },
1057
- heading: {
1058
- h1: "bridgerte__heading bridgerte__heading--h1",
1059
- h2: "bridgerte__heading bridgerte__heading--h2",
1060
- h3: "bridgerte__heading bridgerte__heading--h3",
1061
- h4: "bridgerte__heading bridgerte__heading--h4",
1062
- h5: "bridgerte__heading bridgerte__heading--h5",
1063
- h6: "bridgerte__heading bridgerte__heading--h6"
1064
- },
1065
- list: {
1066
- checklist: "bridgerte__list bridgerte__list--todo",
1067
- ol: "bridgerte__list",
1068
- ul: "bridgerte__list",
1069
- listitem: "bridgerte__list-item",
1070
- listitemChecked: "bridgerte__list-item bridgerte__list-item--checked",
1071
- listitemUnchecked: "bridgerte__list-item bridgerte__list-item--unchecked"
1072
- },
1073
- paragraph: "bridgerte__paragraph",
1074
- quote: "bridgerte__quote",
1075
- root: "bridgerte__content-root",
1076
- text: {
1077
- bold: "bridgerte__text--bold",
1078
- code: "bridgerte__code",
1079
- italic: "bridgerte__text--italic",
1080
- strikethrough: "bridgerte__text--strike",
1081
- underline: "bridgerte__text--underline",
1082
- underlineStrikethrough: "bridgerte__text--underline-strike"
1083
- },
1084
- table: "bridgerte__table",
1085
- tableCell: "bridgerte__table-cell",
1086
- tableCellHeader: "bridgerte__table-cell bridgerte__table-cell--header",
1087
- tableRow: "bridgerte__table-row",
1088
- tableScrollableWrapper: "bridgerte__table-wrapper"
1089
- }, Fa = (e) => ({
1090
- setBlockHeading: (i) => {
1091
- e.update(() => {
1092
- const g = D();
1093
- O(g) && Fe(g, () => Dr(Oa[i]));
1094
- });
1095
- },
1096
- setParagraphBlock: () => {
1097
- e.update(() => {
1098
- const i = D();
1099
- O(i) && Fe(i, () => z());
1100
- });
1101
- },
1102
- setQuoteBlock: () => {
1103
- e.update(() => {
1104
- const i = D();
1105
- O(i) && Fe(i, () => Br());
1106
- });
1107
- },
1108
- insertDividerBlock: () => {
1109
- e.update(() => {
1110
- const i = z();
1111
- W([at(), i]), i.selectStart();
1112
- });
1113
- },
1114
- insertCodeBlock: (i) => {
1115
- e.update(() => {
1116
- const g = Bn(i), v = z();
1117
- W([g, v]), g.selectEnd();
1118
- });
1119
- },
1120
- setSelectedCodeBlockLanguage: (i) => {
1121
- e.update(() => {
1122
- const g = D();
1123
- if (!O(g)) return;
1124
- const v = g.anchor.getNode(), b = v.getKey() === "root" ? v : v.getTopLevelElementOrThrow();
1125
- X(b) && b.setLanguage(i);
1126
- });
1127
- },
1128
- clearContent: () => {
1129
- e.update(() => {
1130
- const i = F();
1131
- i.clear(), i.append(z());
1132
- });
1133
- },
1134
- formatAlign: (i) => {
1135
- e.dispatchCommand(fr, i);
1136
- }
1137
- }), za = (e) => ({
1138
- setLink: (o, a) => {
1139
- e.update(() => {
1140
- const s = D(), l = mo(o), d = (a == null ? void 0 : a.trim()) || o.trim();
1141
- if (!(!O(s) || !o.trim())) {
1142
- if (s.isCollapsed()) {
1143
- const i = go(l, {
1144
- rel: "noreferrer noopener",
1145
- target: "_blank"
1146
- });
1147
- i.append(Be(d)), W([i]);
1148
- return;
1149
- }
1150
- ft(l, {
1151
- rel: "noreferrer noopener",
1152
- target: "_blank"
1153
- });
1154
- }
1155
- });
1156
- },
1157
- unsetLink: () => {
1158
- e.update(() => {
1159
- ft(null);
1160
- });
1161
- },
1162
- openSelectedLink: () => {
1163
- if (typeof window > "u") return;
1164
- const o = e.getEditorState().read(() => {
1165
- const a = D();
1166
- if (!O(a)) return null;
1167
- const s = a.anchor.getNode(), l = Se(s) ? s : _o(s, Se);
1168
- return l ? {
1169
- target: l.getTarget() ?? "_blank",
1170
- url: l.sanitizeUrl(l.getURL())
1171
- } : null;
1172
- });
1173
- o && window.open(o.url, o.target, "noopener,noreferrer");
1174
- }
1175
- }), Va = (e) => ({
1176
- insertImage: (s) => {
1177
- s.url.trim() && e.update(() => {
1178
- const l = z();
1179
- W([Do(s), l]), l.selectStart();
1180
- });
1181
- },
1182
- insertVideo: (s) => {
1183
- s.url.trim() && e.update(() => {
1184
- const l = z();
1185
- W([Ho(s), l]), l.selectStart();
1186
- });
1187
- },
1188
- resizeMedia: (s) => {
1189
- e.update(() => {
1190
- var l;
1191
- (l = ge(s.assetId)) == null || l.updatePayload({
1192
- displayWidthPercent: s.widthPercent
1193
- });
1194
- });
1195
- },
1196
- resetMediaSize: (s) => {
1197
- e.update(() => {
1198
- var l;
1199
- (l = ge(s)) == null || l.updatePayload({
1200
- displayWidthPercent: void 0
1201
- });
1202
- });
1203
- },
1204
- alignMedia: (s) => {
1205
- e.update(() => {
1206
- var l;
1207
- (l = ge(s.assetId)) == null || l.updatePayload({
1208
- align: s.value === "left" ? void 0 : s.value
1209
- });
1210
- });
1211
- }
1212
- }), Wa = (e) => ({
1213
- insertMention: (n) => {
1214
- e.update(() => {
1215
- const r = D();
1216
- O(r) && W([
1217
- it(n),
1218
- Be(" ")
1219
- ]);
1220
- });
1221
- }
1222
- }), Ua = (e) => ({
1223
- clearSelectionFormat: () => {
1224
- e.update(() => {
1225
- const r = D();
1226
- O(r) && (r.setFormat(0), yt(r, {
1227
- color: null,
1228
- "background-color": null,
1229
- "font-size": null,
1230
- "font-family": null,
1231
- "line-height": null
1232
- }));
1233
- });
1234
- },
1235
- setSelectionStyle: (r, o) => {
1236
- e.update(() => {
1237
- const a = D();
1238
- O(a) && yt(a, {
1239
- [r]: o === "" ? null : o
1240
- });
1241
- });
1242
- }
1243
- }), ja = 20, Nt = (e, t) => Number.isFinite(e) && e > 0 ? Math.min(Math.floor(e), t) : 1, Ce = (e) => Number.isFinite(e) && (e ?? 0) > 0 ? Math.min(Math.floor(e ?? 1), ja) : 1, _e = () => {
1244
- const e = D();
1245
- return !O(e) && !pn(e) ? !1 : oo(e.anchor.getNode()) !== null;
1246
- }, Ka = (e) => ({
1247
- insertTable: (l, d) => {
1248
- const i = Nt(l, tn), g = Nt(d, nn);
1249
- e.dispatchCommand(ro, {
1250
- rows: String(i),
1251
- columns: String(g),
1252
- /*
1253
- * BridgeRTE 默认表格更贴近文档编辑场景:首行作为表头,首列保持普通单元格。
1254
- * 后续表格菜单补齐后,再把首行/首列表头切换做成显式行为。
1255
- */
1256
- includeHeaders: {
1257
- rows: !0,
1258
- columns: !1
1259
- }
1260
- });
1261
- },
1262
- insertTableRow: (l) => {
1263
- e.update(() => {
1264
- if (!_e()) return;
1265
- const d = Ce(l.count);
1266
- for (let i = 0; i < d; i += 1)
1267
- no(l.direction !== "before");
1268
- });
1269
- },
1270
- insertTableColumn: (l) => {
1271
- e.update(() => {
1272
- if (!_e()) return;
1273
- const d = Ce(l.count);
1274
- for (let i = 0; i < d; i += 1)
1275
- to(l.direction !== "before");
1276
- });
1277
- },
1278
- deleteTableRow: (l) => {
1279
- e.update(() => {
1280
- const d = Ce(l.count);
1281
- for (let i = 0; i < d; i += 1) {
1282
- if (!_e()) return;
1283
- eo();
1284
- }
1285
- });
1286
- },
1287
- deleteTableColumn: (l) => {
1288
- e.update(() => {
1289
- const d = Ce(l.count);
1290
- for (let i = 0; i < d; i += 1) {
1291
- if (!_e()) return;
1292
- Zr();
1293
- }
1294
- });
1295
- },
1296
- deleteTable: () => {
1297
- e.update(() => {
1298
- const l = D();
1299
- if (!O(l) && !pn(l)) return;
1300
- const d = Qr(l.anchor.getNode());
1301
- if (!d) return;
1302
- const i = z();
1303
- d.insertAfter(i), d.remove(), i.selectStart();
1304
- });
1305
- }
1306
- }), qa = (e) => {
1307
- const t = Ka(e);
1308
- return {
1309
- insertTable: (n) => {
1310
- t.insertTable(n.rows, n.cols);
1311
- },
1312
- insertTableRow: (n) => {
1313
- t.insertTableRow(n);
1314
- },
1315
- insertTableColumn: (n) => {
1316
- t.insertTableColumn(n);
1317
- },
1318
- deleteTableRow: (n) => {
1319
- t.deleteTableRow(n);
1320
- },
1321
- deleteTableColumn: (n) => {
1322
- t.deleteTableColumn(n);
1323
- },
1324
- deleteTable: () => {
1325
- t.deleteTable();
1326
- }
1327
- };
1328
- }, Ga = {
1329
- "format.bold": "bold",
1330
- "format.italic": "italic",
1331
- "format.underline": "underline",
1332
- "format.strike": "strikethrough",
1333
- "format.inlineCode": "code",
1334
- "format.superscript": "superscript",
1335
- "format.subscript": "subscript"
1336
- }, Xa = {
1337
- "list.ordered": qr,
1338
- "list.unordered": Kr,
1339
- "list.todo": jr
1340
- }, Ya = {
1341
- "indent.increase": Cr,
1342
- "indent.decrease": wr,
1343
- "history.undo": vr,
1344
- "history.redo": yr
1345
- }, Ja = {
1346
- "format.color": "color",
1347
- "format.backgroundColor": "background-color",
1348
- "format.fontSize": "font-size",
1349
- "format.fontFamily": "font-family",
1350
- "format.lineHeight": "line-height"
1351
- }, Qa = ({
1352
- container: e,
1353
- lexicalEditor: t,
1354
- options: n,
1355
- isDestroyed: r,
1356
- isReadonly: o,
1357
- reportError: a
1358
- }) => {
1359
- const s = Ha({
1360
- container: e,
1361
- lexicalEditor: t,
1362
- options: n,
1363
- isDestroyed: r
1364
- }), l = Fa(t), d = za(t), i = Va(t), g = Wa(t), v = Ua(t), b = qa(t), T = () => {
1365
- var x, u;
1366
- if (document.fullscreenElement) {
1367
- (x = document.exitFullscreen) == null || x.call(document).catch((p) => {
1368
- a(n, "fullscreen.exit", "Exit fullscreen failed.", p);
1369
- });
1370
- return;
1371
- }
1372
- (u = e.requestFullscreen) == null || u.call(e).catch((p) => {
1373
- a(n, "fullscreen.enter", "Enter fullscreen failed.", p);
1374
- });
1375
- }, f = ((y) => {
1376
- if (r() || o()) return;
1377
- const x = Ga[y.type];
1378
- if (x) {
1379
- t.dispatchCommand(br, x);
1380
- return;
1381
- }
1382
- const u = Xa[y.type];
1383
- if (u) {
1384
- t.dispatchCommand(u, void 0);
1385
- return;
1386
- }
1387
- const p = Ya[y.type];
1388
- if (p) {
1389
- t.dispatchCommand(p, void 0);
1390
- return;
1391
- }
1392
- const E = Ja[y.type];
1393
- if (E && "value" in y) {
1394
- v.setSelectionStyle(E, y.value);
1395
- return;
1396
- }
1397
- switch (y.type) {
1398
- case "format.clear":
1399
- v.clearSelectionFormat();
1400
- return;
1401
- case "block.heading":
1402
- l.setBlockHeading(y.level);
1403
- return;
1404
- case "block.paragraph":
1405
- l.setParagraphBlock();
1406
- return;
1407
- case "block.quote":
1408
- l.setQuoteBlock();
1409
- return;
1410
- case "block.divider":
1411
- l.insertDividerBlock();
1412
- return;
1413
- case "block.code":
1414
- l.insertCodeBlock(y.language);
1415
- return;
1416
- case "block.setCodeLanguage":
1417
- l.setSelectedCodeBlockLanguage(y.language);
1418
- return;
1419
- case "align":
1420
- l.formatAlign(y.value);
1421
- return;
1422
- case "link.set":
1423
- d.setLink(y.href, y.text);
1424
- return;
1425
- case "link.unset":
1426
- d.unsetLink();
1427
- return;
1428
- case "link.open":
1429
- d.openSelectedLink();
1430
- return;
1431
- case "mention.insert":
1432
- g.insertMention(y.item);
1433
- return;
1434
- case "content.clear":
1435
- l.clearContent();
1436
- return;
1437
- case "table.insert":
1438
- b.insertTable(y);
1439
- return;
1440
- case "table.insertRow":
1441
- b.insertTableRow(y);
1442
- return;
1443
- case "table.insertColumn":
1444
- b.insertTableColumn(y);
1445
- return;
1446
- case "table.deleteRow":
1447
- b.deleteTableRow(y);
1448
- return;
1449
- case "table.deleteColumn":
1450
- b.deleteTableColumn(y);
1451
- return;
1452
- case "table.delete":
1453
- b.deleteTable();
1454
- return;
1455
- case "media.insertImage":
1456
- i.insertImage(y);
1457
- return;
1458
- case "media.insertVideo":
1459
- i.insertVideo(y);
1460
- return;
1461
- case "media.pickImage":
1462
- s.pickMediaFile("image");
1463
- return;
1464
- case "media.pickVideo":
1465
- s.pickMediaFile("video");
1466
- return;
1467
- case "media.retry":
1468
- s.retryMedia(y.assetId);
1469
- return;
1470
- case "media.remove":
1471
- s.removeMedia(y.assetId);
1472
- return;
1473
- case "media.resize":
1474
- i.resizeMedia(y);
1475
- return;
1476
- case "media.align":
1477
- i.alignMedia(y);
1478
- return;
1479
- case "media.resetSize":
1480
- i.resetMediaSize(y.assetId);
1481
- return;
1482
- case "fullscreen.toggle":
1483
- T();
1484
- return;
1485
- }
1486
- });
1487
- return f.uploadMediaFile = s.uploadMediaFile, f.destroy = () => {
1488
- s.destroy();
1489
- }, f;
1490
- }, Za = 300, es = "BridgeRTE", Pt = ({
1491
- editor: e,
1492
- overflowLength: t
1493
- }) => {
1494
- if (t <= 0) return !1;
1495
- const n = D();
1496
- if (O(n))
1497
- return vt(e, n.anchor, t), !0;
1498
- F().selectEnd();
1499
- const r = D();
1500
- return O(r) ? (vt(e, r.anchor, t), !0) : !1;
1501
- }, ts = ({
1502
- lexicalEditor: e,
1503
- options: t,
1504
- isDestroyed: n,
1505
- setContent: r,
1506
- syncPlaceholder: o
1507
- }) => {
1508
- let a = 0, s = null;
1509
- const l = () => {
1510
- s && (clearTimeout(s), s = null);
1511
- }, d = (u) => {
1512
- if (n()) return;
1513
- const p = Nn(e.getEditorState(), e);
1514
- r(p), u && ka(t, p);
1515
- }, i = (u) => {
1516
- const p = t.maxLength !== void 0 && t.maxLength >= 0 ? t.maxLength : void 0;
1517
- return {
1518
- dirty: !0,
1519
- plainTextLength: u,
1520
- version: Ae,
1521
- maxLength: p,
1522
- isOverMaxLength: p === void 0 ? !1 : u > p
1523
- };
1524
- }, g = (u) => {
1525
- Ea(t, i(u));
1526
- }, v = () => {
1527
- t.onChange && (l(), s = setTimeout(() => {
1528
- d(!0);
1529
- }, dr));
1530
- }, b = (u) => {
1531
- if (a > 0) {
1532
- a -= 1;
1533
- return;
1534
- }
1535
- g(u), v();
1536
- }, T = () => e.getEditorState().read(() => F().getTextContent().length), f = (u) => t.maxLength === void 0 || t.maxLength < 0 ? 0 : u - t.maxLength, y = (u) => u <= 0 ? !1 : (e.update(() => {
1537
- Pt({ editor: e, overflowLength: u });
1538
- }, { discrete: !0 }), !0);
1539
- return {
1540
- clearContentChangeTimer: l,
1541
- enforceCurrentMaxLength: () => {
1542
- t.maxLength === void 0 || t.maxLength < 0 || e.update(() => {
1543
- const u = F().getTextContent().length - (t.maxLength ?? 0);
1544
- Pt({ editor: e, overflowLength: u });
1545
- }, { discrete: !0 });
1546
- },
1547
- syncContent: d,
1548
- suppressNextChange() {
1549
- a += 1;
1550
- },
1551
- syncAfterEditorUpdate() {
1552
- const u = T();
1553
- if (y(f(u))) {
1554
- o();
1555
- return;
1556
- }
1557
- o(), b(u);
1558
- }
1559
- };
1560
- }, He = "data-language", Dn = "纯文本", ns = "language", rs = /* @__PURE__ */ new Set(["plain", "plaintext", "text", "txt"]), os = new Set(To().map(([e]) => e)), as = [
1561
- He,
1562
- "data-lang",
1563
- "data-code-language",
1564
- "data-highlight-language",
1565
- "lang",
1566
- "language"
1567
- ], ss = /^[a-z][a-z0-9_+#.-]{0,31}$/i, is = /^(?:language|lang)-([a-z][a-z0-9_+#.-]{0,31})$/i, ls = /^brush:\s*([a-z][a-z0-9_+#.-]{0,31})$/i, cs = /* @__PURE__ */ new Map([
1568
- ["dockerfile", "docker"],
1569
- ["shell", "shellscript"],
1570
- ["sh", "shellscript"],
1571
- ["bash", "shellscript"],
1572
- ["js", "javascript"],
1573
- ["jsx", "jsx"],
1574
- ["py", "python"],
1575
- ["rb", "ruby"],
1576
- ["rs", "rust"],
1577
- ["ts", "typescript"],
1578
- ["tsx", "tsx"],
1579
- ["yml", "yaml"]
1580
- ]), ds = (e) => e.type === "select", It = (e) => e.find((t) => t.name === ns && ds(t)), ne = (e) => {
1581
- const t = e == null ? void 0 : e.trim().toLowerCase();
1582
- if (!t || !ss.test(t)) return null;
1583
- if (rs.has(t)) return "";
1584
- const n = cs.get(t) ?? Mo(t);
1585
- return os.has(n) ? n : null;
1586
- }, us = (e) => {
1587
- for (const t of as) {
1588
- const n = ne(e.getAttribute(t));
1589
- if (n) return n;
1590
- }
1591
- return null;
1592
- }, ms = (e) => {
1593
- const [, t] = e.match(ls) ?? [], n = ne(t);
1594
- if (n) return n;
1595
- for (const r of e.split(/\s+/)) {
1596
- const [, o] = r.match(is) ?? [], a = ne(o);
1597
- if (a) return a;
1598
- }
1599
- return null;
1600
- }, Hn = (e = Xe) => {
1601
- var t, n;
1602
- return ((t = It(e.fields)) == null ? void 0 : t.options) ?? ((n = It(Xe.fields)) == null ? void 0 : n.options) ?? [{ label: Dn, value: "" }];
1603
- }, On = (e, t) => {
1604
- var n, r, o;
1605
- return ((n = e.find((a) => a.value === t)) == null ? void 0 : n.label) ?? ((r = e.find((a) => ne(a.value) === ne(t))) == null ? void 0 : r.label) ?? ((o = e[0]) == null ? void 0 : o.label) ?? Dn;
1606
- };
1607
- Hn();
1608
- const gs = (e) => {
1609
- [...e.querySelectorAll("pre,code")].forEach((t) => {
1610
- const n = us(t) ?? ms(t.className), r = t.tagName === "PRE" ? t : t.closest("pre");
1611
- r && n && r.setAttribute(He, n);
1612
- });
1613
- }, hs = (e) => {
1614
- e.querySelectorAll("pre").forEach((t) => {
1615
- [...t.children].forEach((r) => {
1616
- r.tagName === "CODE" && r.replaceWith(...r.childNodes);
1617
- });
1618
- });
1619
- }, ps = (e, t) => {
1620
- const n = [...t.querySelectorAll("pre[data-language]")];
1621
- let r = 0;
1622
- e.forEach((o) => {
1623
- if (!X(o)) return;
1624
- const a = n[r];
1625
- if (r += 1, !a) return;
1626
- const s = a.getAttribute(He);
1627
- s && !o.getLanguage() && o.setLanguage(s);
1628
- });
1629
- }, $n = "one-light", Q = {
1630
- keyword: "#a626a4",
1631
- function: "#4078f2",
1632
- operator: "#0184bc",
1633
- tag: "#c18401",
1634
- property: "#e45649",
1635
- string: "#50a14f",
1636
- attrName: "#986801"
1637
- }, fs = {
1638
- [Q.keyword]: "keyword",
1639
- [Q.function]: "function",
1640
- [Q.operator]: "operator",
1641
- [Q.tag]: "tag",
1642
- [Q.property]: "property",
1643
- [Q.string]: "string",
1644
- [Q.attrName]: "attr-name"
1645
- }, bs = (e) => {
1646
- const [, t] = e.match(/(?:^|;)color:\s*(#[0-9a-f]{3,8})/i) ?? [];
1647
- return t ? fs[t.toLowerCase()] : void 0;
1648
- }, ys = {
1649
- ...wt,
1650
- defaultLanguage: null,
1651
- defaultTheme: $n,
1652
- $tokenize(e, t) {
1653
- const n = wt.$tokenize.call(this, e, t);
1654
- return e.getStyle() && e.setStyle(""), n.map((r) => zr(r) ? Vr(
1655
- r.getTextContent(),
1656
- bs(r.getStyle())
1657
- ) : r);
1658
- }
1659
- }, vs = 1200, fe = /* @__PURE__ */ new Set(), Ne = /* @__PURE__ */ new Set(), Je = /* @__PURE__ */ new Set(), Pe = [];
1660
- let Z = 0, ae = null, ke = !1, Ee = null, Rt = !1;
1661
- const ws = (e) => "requestIdleCallback" in window ? {
1662
- id: window.requestIdleCallback(e, {
1663
- timeout: vs
1664
- }),
1665
- kind: "idle"
1666
- } : {
1667
- id: globalThis.setTimeout(() => {
1668
- e({
1669
- didTimeout: !0,
1670
- timeRemaining: () => 0
1671
- });
1672
- }, 0),
1673
- kind: "timeout"
1674
- }, Cs = (e) => {
1675
- if (e.kind === "idle") {
1676
- window.cancelIdleCallback(e.id);
1677
- return;
1678
- }
1679
- globalThis.clearTimeout(e.id);
1680
- }, _s = (e) => e.map((t) => t.value).filter((t) => t !== ""), ks = (e) => {
1681
- _s(e).forEach((t) => {
1682
- if (fe.has(t) || Ne.has(t) || Je.has(t) || En(t)) {
1683
- fe.add(t);
1684
- return;
1685
- }
1686
- Je.add(t), Pe.push(t);
1687
- });
1688
- }, Es = () => {
1689
- for (; Pe.length > 0; ) {
1690
- const e = Pe.shift();
1691
- if (e && (Je.delete(e), !(fe.has(e) || Ne.has(e)))) {
1692
- if (En(e)) {
1693
- fe.add(e);
1694
- continue;
1695
- }
1696
- return e;
1697
- }
1698
- }
1699
- }, xs = async () => {
1700
- if (!Rt) {
1701
- if (!Ee) {
1702
- const e = So($n);
1703
- Ee = Promise.resolve(e ?? void 0).then(() => {
1704
- Rt = !0;
1705
- }).catch(() => {
1706
- }).finally(() => {
1707
- Ee = null;
1708
- });
1709
- }
1710
- await Ee;
1711
- }
1712
- }, Ms = (e) => {
1713
- Z += 1, ks(e);
1714
- const t = async () => {
1715
- if (!(Z <= 0 || ke)) {
1716
- ke = !0;
1717
- try {
1718
- if (await xs(), Z <= 0) return;
1719
- const r = Es();
1720
- if (!r) return;
1721
- Ne.add(r), await Promise.resolve(Lo(r) ?? void 0).then(() => {
1722
- fe.add(r);
1723
- }).catch(() => {
1724
- }).finally(() => {
1725
- Ne.delete(r);
1726
- });
1727
- } finally {
1728
- ke = !1, n();
1729
- }
1730
- }
1731
- }, n = () => {
1732
- Z <= 0 || ae !== null || ke || Pe.length === 0 || (ae = ws(() => {
1733
- ae = null, t();
1734
- }));
1735
- };
1736
- return n(), () => {
1737
- Z = Math.max(0, Z - 1), Z === 0 && ae !== null && (Cs(ae), ae = null);
1738
- };
1739
- }, V = 12, Ts = 6, Ie = (e, t, n) => Math.min(Math.max(e, t), Math.max(t, n)), Fn = () => {
1740
- const e = window.visualViewport;
1741
- return {
1742
- left: (e == null ? void 0 : e.offsetLeft) ?? 0,
1743
- top: (e == null ? void 0 : e.offsetTop) ?? 0,
1744
- width: (e == null ? void 0 : e.width) ?? window.innerWidth,
1745
- height: (e == null ? void 0 : e.height) ?? window.innerHeight
1746
- };
1747
- }, Ls = (e, t) => ({
1748
- /*
1749
- * dialog request 里传的是 viewport 坐标。用 virtual reference 交给 floating-ui,
1750
- * 让 dialog 和 toolbar group、hoverbar 等轻浮层复用同一套翻转和边界避让逻辑。
1751
- */
1752
- contextElement: e,
1753
- getBoundingClientRect: () => ({
1754
- x: t.x,
1755
- y: t.y,
1756
- left: t.x,
1757
- top: t.y,
1758
- right: t.x + t.width,
1759
- bottom: t.y + t.height,
1760
- width: t.width,
1761
- height: t.height
1762
- })
1763
- }), Ss = (e, t) => {
1764
- const n = e.getBoundingClientRect(), r = Fn(), o = t.getBoundingClientRect(), a = o.left + V, s = o.top + V, l = r.left + V, d = r.top + V, i = r.left + r.width - n.width - V, g = r.top + r.height - n.height - V;
1765
- return {
1766
- left: Ie(a, l, i),
1767
- top: Ie(s, d, g),
1768
- viewportHeight: r.height
1769
- };
1770
- }, Ns = (e, t, n) => {
1771
- const r = e.getBoundingClientRect(), o = Fn(), a = o.left + V, s = o.top + V, l = o.left + o.width - r.width - V, d = o.top + o.height - r.height - V;
1772
- return {
1773
- left: Ie(t, a, l),
1774
- top: Ie(n, s, d),
1775
- viewportHeight: o.height
1776
- };
1777
- }, zn = (e) => {
1778
- var i, g;
1779
- const t = document.createElement("div"), n = document.createElement("div"), r = document.createElement("div");
1780
- let o;
1781
- const a = () => {
1782
- t.dataset.visible = "false", n.dataset.visible = "false", o = void 0;
1783
- }, s = (v, b, T) => {
1784
- n.style.left = `${v}px`, n.style.top = `${b}px`, n.style.setProperty(
1785
- "--bridgerte-dialog-visible-height",
1786
- `${T}px`
1787
- );
1788
- }, l = async () => {
1789
- if (!o) {
1790
- const T = Ss(n, e.root);
1791
- s(T.left, T.top, T.viewportHeight);
1792
- return;
1793
- }
1794
- const v = await vn(
1795
- Ls(e.root, o),
1796
- n,
1797
- {
1798
- placement: "bottom-start",
1799
- strategy: "fixed",
1800
- platform: wn,
1801
- middleware: [
1802
- Cn(Ts),
1803
- _n(),
1804
- kn({ padding: V })
1805
- ]
1806
- }
1807
- ), b = Ns(n, v.x, v.y);
1808
- s(
1809
- b.left,
1810
- b.top,
1811
- b.viewportHeight
1812
- );
1813
- }, d = (v) => {
1814
- o = v, v ? n.style.setProperty("--bridgerte-dialog-anchor-width", `${v.width}px`) : n.style.removeProperty("--bridgerte-dialog-anchor-width"), l(), t.dataset.visible = "true", n.dataset.visible = "true";
1815
- };
1816
- 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", () => {
1817
- var v;
1818
- (v = e.onBackdropClick) == null || v.call(e), a();
1819
- }), (i = window.visualViewport) == null || i.addEventListener("resize", l), (g = window.visualViewport) == null || g.addEventListener("scroll", l), window.addEventListener("resize", l), {
1820
- element: n,
1821
- content: r,
1822
- open: d,
1823
- close: a,
1824
- destroy() {
1825
- var v, b;
1826
- a(), (v = window.visualViewport) == null || v.removeEventListener("resize", l), (b = window.visualViewport) == null || b.removeEventListener("scroll", l), window.removeEventListener("resize", l), t.remove(), n.remove();
1827
- }
1828
- };
1829
- }, Re = (e) => typeof requestAnimationFrame == "function" ? requestAnimationFrame(e) : window.setTimeout(e, 0), lt = (e) => {
1830
- if (typeof cancelAnimationFrame == "function") {
1831
- cancelAnimationFrame(e);
1832
- return;
1833
- }
1834
- window.clearTimeout(e);
1835
- }, U = (e, t = {}) => {
1836
- let n = null;
1837
- const r = (s) => {
1838
- const l = n ?? e;
1839
- if (!(!s && !n)) {
1840
- if (s) {
1841
- l.dataset.pressed = "true";
1842
- return;
1843
- }
1844
- delete l.dataset.pressed, n = null;
1845
- }
1846
- }, o = (s) => {
1847
- if (s.pointerType === "mouse") return;
1848
- const l = s.target;
1849
- n = l instanceof HTMLElement && t.targetSelector ? l.closest(t.targetSelector) : e, n && r(!0);
1850
- }, a = () => {
1851
- r(!1);
1852
- };
1853
- return e.addEventListener("pointerdown", o), e.addEventListener("pointerup", a), e.addEventListener("pointercancel", a), e.addEventListener("lostpointercapture", a), () => {
1854
- a(), e.removeEventListener("pointerdown", o), e.removeEventListener("pointerup", a), e.removeEventListener("pointercancel", a), e.removeEventListener("lostpointercapture", a);
1855
- };
1856
- }, ct = (e) => {
1857
- const t = (o) => {
1858
- const a = e.getBlockFromTarget(o.target);
1859
- if (a) {
1860
- e.activateBlock(a);
1861
- return;
1862
- }
1863
- e.clearBlock();
1864
- }, n = (o) => {
1865
- const a = e.getBlockFromTarget(o.target);
1866
- a && e.activateBlock(a);
1867
- }, r = (o) => {
1868
- const a = o.target;
1869
- a instanceof Node && e.root.contains(a) || e.clearBlock();
1870
- };
1871
- return e.content.addEventListener("pointerdown", t), e.content.addEventListener("focusin", n), document.addEventListener("pointerdown", r), {
1872
- destroy() {
1873
- e.content.removeEventListener("pointerdown", t), e.content.removeEventListener("focusin", n), document.removeEventListener("pointerdown", r);
1874
- }
1875
- };
1876
- }, Ps = (e, t, n) => {
1877
- e.update(
1878
- t,
1879
- {
1880
- tag: _r,
1881
- onUpdate: n
1882
- }
1883
- );
1884
- }, At = "language", Is = "bridgerte-code-block-language", Bt = 8, Rs = ".bridgerte__code-block-controls", Le = ".bridgerte__code-block-control-button";
1885
- let Dt = 0;
1886
- const As = () => (Dt += 1, `${Is}-${Dt}`), Bs = (e, t, n) => {
1887
- var o;
1888
- const r = e.querySelector(".bridgerte__code-block-control-label");
1889
- e.dataset.language = n ?? "", (o = e.querySelector(Le)) == null || o.setAttribute(
1890
- "data-language",
1891
- n ?? ""
1892
- ), r && (r.textContent = On(t, n));
1893
- }, Ds = (e, t) => {
1894
- const n = document.createElement("div"), r = document.createElement("button"), o = document.createElement("span"), a = document.createElement("span");
1895
- return n.className = "bridgerte__code-block-controls", n.contentEditable = "false", n.dataset.language = t ?? "", n.setAttribute("aria-label", "代码块操作"), r.type = "button", r.className = "bridgerte__code-block-control-button", r.dataset.language = t ?? "", r.setAttribute("aria-label", "选择代码块语言"), o.className = "bridgerte__code-block-control-label", o.textContent = On(e, t), a.className = "bridgerte__code-block-control-arrow", r.append(o, a), n.append(r), n;
1896
- }, Hs = (e) => {
1897
- const t = document.createElement("div"), n = e.root.querySelector(".bridgerte__content") ?? e.root, r = yn(
1898
- e.languagePanel ?? Xe,
1899
- e.payloadPanelConfig
1900
- ), o = Hn(r);
1901
- let a = null, s = null, l = null, d = null, i = null, g = null;
1902
- const v = () => {
1903
- l ?? (l = Ms(o));
1904
- }, b = () => {
1905
- a == null || a.close();
1906
- }, T = (M, L) => {
1907
- e.isReadonly() || Ps(e.editor, () => {
1908
- const N = he(M);
1909
- X(N) && N.setLanguage(L);
1910
- });
1911
- }, f = (M, L) => {
1912
- Re(() => {
1913
- T(M, L);
1914
- });
1915
- }, y = (M, L, N) => {
1916
- var R;
1917
- return ((R = e.onRequest) == null ? void 0 : R.call(e, {
1918
- id: As(),
1919
- readonly: e.isReadonly(),
1920
- menuId: "code-block-language",
1921
- command: { type: "block.setCodeLanguage", language: N },
1922
- panel: r,
1923
- anchorRect: {
1924
- x: L.left,
1925
- y: L.top,
1926
- width: L.width,
1927
- height: L.height
1928
- },
1929
- currentValues: {
1930
- [At]: N
1931
- },
1932
- submit: (S) => {
1933
- b(), f(M, S[At] ?? "");
1934
- },
1935
- cancel: b
1936
- })) === !0;
1937
- }, x = (M, L) => {
1938
- const N = e.root.getBoundingClientRect(), R = L.getBoundingClientRect(), S = R.bottom < N.top || R.top > N.bottom;
1939
- M.hidden = S;
1940
- const k = Math.max(8, N.width - M.offsetWidth - 8), A = Math.min(
1941
- Math.max(R.left - N.left + Bt, 8),
1942
- k
1943
- ), $ = Math.max(
1944
- 8,
1945
- R.top - N.top - M.offsetHeight - Bt
1946
- );
1947
- M.style.transform = `translate(${A}px, ${$}px)`;
1948
- }, u = () => {
1949
- i && (g == null || g(), g = null, i.remove(), i = null);
1950
- }, p = (M) => {
1951
- const L = e.editor.getElementByKey(M);
1952
- if (!L) {
1953
- d === M && (d = null, u());
1954
- return;
1955
- }
1956
- v(), L.dataset.lexicalKey = M;
1957
- const N = L.getAttribute("data-language");
1958
- if (i) {
1959
- Bs(i, o, N), x(i, L);
1960
- return;
1961
- }
1962
- const R = Ds(o, N);
1963
- g = U(R, {
1964
- targetSelector: Le
1965
- }), R.dataset.lexicalKey = M, i = R, t.append(R), x(R, L);
1966
- }, E = (M) => {
1967
- const L = M.dataset.lexicalKey;
1968
- !L || d === L || (d !== null && (b(), u()), d = L, p(L));
1969
- }, _ = () => {
1970
- d !== null && (d = null, b(), u());
1971
- }, B = (M) => M instanceof HTMLElement ? M.closest(".bridgerte__code-block") : null, H = ct({
1972
- root: e.root,
1973
- content: n,
1974
- getBlockFromTarget: B,
1975
- activateBlock: E,
1976
- clearBlock: _
1977
- }), I = (M, L) => {
1978
- const N = M.getBoundingClientRect(), R = M.dataset.language ?? "";
1979
- if (y(L, N, R)) return;
1980
- if (e.isReadonly()) {
1981
- b();
1982
- return;
1983
- }
1984
- a || (a = zn({
1985
- root: e.root,
1986
- className: "bridgerte__code-block-menu",
1987
- onBackdropClick: b
1988
- }));
1989
- const S = document.createElement("div");
1990
- a.content.replaceChildren(), a.element.style.minWidth = "180px", S.className = "bridgerte__code-block-menu-list", o.forEach((k) => {
1991
- const A = document.createElement("button");
1992
- A.type = "button", A.className = "bridgerte__menu-item bridgerte__code-block-menu-item", A.textContent = k.label, U(A), A.addEventListener("pointerdown", ($) => {
1993
- $.preventDefault();
1994
- }), A.addEventListener("click", () => {
1995
- b(), f(L, k.value);
1996
- }), S.append(A);
1997
- }), a.content.append(S), a.open({
1998
- x: N.left,
1999
- y: N.top,
2000
- width: 180,
2001
- height: N.height
2002
- });
2003
- }, w = (M) => {
2004
- const L = M.target;
2005
- if (!(L instanceof HTMLElement)) return;
2006
- const N = L.closest(Le);
2007
- if (!N) return;
2008
- const R = N.closest(Rs);
2009
- if (!R) return;
2010
- const S = R.dataset.lexicalKey;
2011
- S && (M.preventDefault(), M.stopPropagation(), I(R, S));
2012
- }, c = (M) => {
2013
- const L = M.target;
2014
- L instanceof HTMLElement && L.closest(Le) && M.preventDefault();
2015
- }, h = (M) => {
2016
- const L = M.target;
2017
- if (!(L instanceof HTMLElement)) return;
2018
- if (!L.closest(".bridgerte__code-block")) {
2019
- b();
2020
- return;
2021
- }
2022
- const N = L.closest(".bridgerte__code-block");
2023
- if (!N || N.textContent) return;
2024
- const R = N.dataset.lexicalKey;
2025
- R && (e.editor.update(() => {
2026
- const S = he(R);
2027
- X(S) && S.selectEnd();
2028
- }), e.editor.focus());
2029
- }, m = () => {
2030
- s === null && (s = Re(() => {
2031
- s = null, d !== null && p(d);
2032
- }));
2033
- };
2034
- t.className = "bridgerte__code-block-controls-layer", e.root.append(t);
2035
- const C = e.editor.registerMutationListener(
2036
- gn,
2037
- (M) => {
2038
- M.forEach((L, N) => {
2039
- if (L === "destroyed") {
2040
- d === N && _();
2041
- return;
2042
- }
2043
- const R = e.editor.getElementByKey(N);
2044
- R && (R.dataset.lexicalKey = N), d === N && i && p(N);
2045
- });
2046
- }
2047
- ), P = e.editor.registerUpdateListener(m);
2048
- return t.addEventListener("pointerdown", c), t.addEventListener("click", w), n.addEventListener("pointerdown", h), n.addEventListener("scroll", m, { passive: !0 }), window.addEventListener("resize", m), {
2049
- destroy() {
2050
- H.destroy(), C(), P(), l == null || l(), l = null, s !== null && (lt(s), s = null), t.removeEventListener("pointerdown", c), t.removeEventListener("click", w), n.removeEventListener("pointerdown", h), n.removeEventListener("scroll", m), window.removeEventListener("resize", m), u(), t.remove(), a == null || a.destroy(), a = null;
2051
- }
2052
- };
2053
- }, dt = (e, t = {}) => e.map((n) => {
2054
- var a;
2055
- const r = (a = t.menuLabels) == null ? void 0 : a[n.id], o = n.payloadPanel ? yn(n.payloadPanel, t.payloadPanelConfig) : void 0;
2056
- return {
2057
- ...n,
2058
- ...r === void 0 ? {} : { label: r },
2059
- ...o === void 0 ? {} : { payloadPanel: o }
2060
- };
2061
- }), Os = (e, t) => {
2062
- const n = t.find((r) => r.command === e.command.type);
2063
- return (n == null ? void 0 : n.value) === void 0 ? void 0 : { value: String(n.value) };
2064
- }, $s = (e, t) => {
2065
- const n = t.find((o) => ko(e.command, o)), r = t.find((o) => o.command === e.command.type);
2066
- return {
2067
- active: (n == null ? void 0 : n.active) === !0,
2068
- disabled: e.payloadPanel ? (r == null ? void 0 : r.disabled) === !0 : (n == null ? void 0 : n.disabled) === !0 || (r == null ? void 0 : r.disabled) === !0
2069
- };
2070
- }, be = [
2071
- "media-resize-20",
2072
- "media-resize-50",
2073
- "media-resize-100"
2074
- ], Fs = [
2075
- "media-align-left",
2076
- "media-align-center",
2077
- "media-align-right",
2078
- "|",
2079
- ...be,
2080
- "|",
2081
- "media-remove"
2082
- ], zs = [
2083
- "media-retry",
2084
- "|",
2085
- "media-remove"
2086
- ], Vs = [
2087
- {
2088
- id: "media-align-left",
2089
- command: { type: "media.align", assetId: "", value: "left" },
2090
- label: "左",
2091
- icon: "align-left"
2092
- },
2093
- {
2094
- id: "media-align-center",
2095
- command: { type: "media.align", assetId: "", value: "center" },
2096
- label: "中",
2097
- icon: "align-center"
2098
- },
2099
- {
2100
- id: "media-align-right",
2101
- command: { type: "media.align", assetId: "", value: "right" },
2102
- label: "右",
2103
- icon: "align-right"
2104
- },
2105
- {
2106
- id: "media-resize-20",
2107
- command: { type: "media.resize", assetId: "", widthPercent: 20 },
2108
- label: "20%",
2109
- icon: "media-resize-20"
2110
- },
2111
- {
2112
- id: "media-resize-50",
2113
- command: { type: "media.resize", assetId: "", widthPercent: 50 },
2114
- label: "50%",
2115
- icon: "media-resize-50"
2116
- },
2117
- {
2118
- id: "media-resize-100",
2119
- command: { type: "media.resize", assetId: "", widthPercent: 100 },
2120
- label: "100%",
2121
- icon: "media-resize-100"
2122
- },
2123
- {
2124
- id: "media-retry",
2125
- command: { type: "media.retry", assetId: "" },
2126
- label: "重试",
2127
- icon: "refresh-cw"
2128
- },
2129
- {
2130
- id: "media-remove",
2131
- command: { type: "media.remove", assetId: "" },
2132
- label: "删除",
2133
- icon: "trash-2"
2134
- }
2135
- ], Vn = (e) => be.includes(e), Ws = (e) => typeof e == "object" && Array.isArray(e.menuKeys), Us = (e) => new Set(e.flatMap((t) => t === "|" ? [] : typeof t == "string" ? [t] : Ws(t) ? [t.key, ...t.menuKeys] : [])), Ve = (e) => typeof e == "string" && Vn(e), js = (e) => {
2136
- const t = e.findIndex((r) => r === "media-remove"), n = t === -1 ? e.length : t;
2137
- return [
2138
- ...e.slice(0, n),
2139
- "|",
2140
- ...be,
2141
- "|",
2142
- ...e.slice(n)
2143
- ];
2144
- }, Ks = (e) => {
2145
- const t = Us(e);
2146
- if (be.filter((o) => !t.has(o)).length === 0) return e;
2147
- const r = e.findIndex(Ve);
2148
- return r === -1 ? js(e) : [
2149
- ...e.slice(0, r).filter((o) => !Ve(o)),
2150
- ...be,
2151
- ...e.slice(r + 1).filter((o) => !Ve(o))
2152
- ];
2153
- }, qs = (e) => {
2154
- var r;
2155
- const t = (e == null ? void 0 : e.toolbarKeys) ?? Fs;
2156
- return {
2157
- ...e,
2158
- toolbarKeys: Ks(t),
2159
- excludeKeys: (r = e == null ? void 0 : e.excludeKeys) == null ? void 0 : r.filter((o) => !Vn(o))
2160
- };
2161
- }, Gs = (e, t) => {
2162
- switch (e.command.type) {
2163
- case "media.retry":
2164
- return { ...e.command, assetId: t };
2165
- case "media.remove":
2166
- return { ...e.command, assetId: t };
2167
- case "media.resize":
2168
- return { ...e.command, assetId: t };
2169
- case "media.align":
2170
- return { ...e.command, assetId: t };
2171
- default:
2172
- return null;
2173
- }
2174
- }, Xs = (e, t, n) => e.command.type === "media.resize" ? e.command.widthPercent === t : e.command.type === "media.align" && e.command.value === n, Wn = (e, t = {}) => {
2175
- const n = dt(Vs, {
2176
- menuLabels: t.menuLabels
2177
- }), r = e === "error" ? { toolbarKeys: zs } : qs(t.config);
2178
- return ot(r, n);
2179
- }, se = 8, de = "bridgerte__media-controls-button", Ys = (e) => e.querySelector(".bridgerte__content") ?? e, Js = (e) => e instanceof Element ? e.closest(".bridgerte__media") : null, Qs = (e, t = !1) => {
2180
- const n = document.createElement("button");
2181
- return n.type = "button", n.className = de, 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;
2182
- }, Un = (e) => e.flatMap((t) => t.type === "button" ? [t.item] : t.type === "group" ? t.items : []), Zs = (e, t, n, r) => {
2183
- if (t.type === "separator") {
2184
- const a = document.createElement("span");
2185
- a.className = "bridgerte__media-controls-separator", a.dataset.separatorId = t.key, a.setAttribute("aria-hidden", "true"), e.append(a);
2186
- return;
2187
- }
2188
- (t.type === "button" ? [t.item] : t.items).forEach((a) => {
2189
- e.append(Qs(
2190
- a,
2191
- Xs(a, n, r)
2192
- ));
2193
- });
2194
- }, ei = (e, t, n) => {
2195
- const r = document.createElement("div"), o = e.dataset.status, a = Number(
2196
- e.dataset.displayWidthPercent ?? t
2197
- ), s = e.dataset.align ?? "left", l = Wn(o, {
2198
- config: n.mediaControlsConfig,
2199
- menuLabels: n.menuLabels
2200
- });
2201
- 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 = Un(l).map((d) => d.id).join("|"), l.forEach((d) => {
2202
- Zs(r, d, a, s);
2203
- }), r;
2204
- }, ti = (e) => {
2205
- const t = document.createElement("div"), n = Ys(e.root), r = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map();
2206
- let s = null, l = null, d = !1, i = null;
2207
- const g = (c) => {
2208
- var m;
2209
- const h = r.get(c);
2210
- h && ((m = o.get(h)) == null || m(), o.delete(h), h.remove(), r.delete(c), i === c && (i = null));
2211
- }, v = (c, h) => h.dataset.status === "error" || i === c, b = (c, h) => {
2212
- const m = e.root.getBoundingClientRect(), C = h.getBoundingClientRect(), P = C.bottom < m.top || C.top > m.bottom, M = Math.max(
2213
- se,
2214
- m.width - c.offsetWidth - se
2215
- ), L = Math.min(
2216
- Math.max(C.left - m.left + se, se),
2217
- M
2218
- ), N = Math.max(
2219
- se,
2220
- C.top - m.top - c.offsetHeight - se
2221
- );
2222
- c.hidden = P, c.style.transform = `translate(${L}px, ${N}px)`;
2223
- }, T = (c) => {
2224
- const h = e.editor.getElementByKey(c);
2225
- if (!h) {
2226
- g(c);
2227
- return;
2228
- }
2229
- h.dataset.lexicalKey = c, a.set(h, c);
2230
- const m = r.get(c);
2231
- if (!v(c, h)) {
2232
- g(c);
2233
- return;
2234
- }
2235
- if (m) {
2236
- const M = h.dataset.status === "error", L = m.querySelector('[data-action="retry"]') !== null, N = h.dataset.displayWidthPercent ?? "", R = h.dataset.align ?? "";
2237
- if (M === L && m.dataset.displayWidthPercent === N && m.dataset.align === R) {
2238
- b(m, h);
2239
- return;
2240
- }
2241
- g(c);
2242
- }
2243
- const C = ei(h, e.defaultWidthPercent, e), P = U(C, {
2244
- targetSelector: `.${de}`
2245
- });
2246
- C.dataset.lexicalKey = c, C.dataset.assetId = h.dataset.assetId, r.set(c, C), o.set(C, P), t.append(C), b(C, h);
2247
- }, f = () => {
2248
- s = null, a.forEach((c, h) => {
2249
- e.root.contains(h) || (a.delete(h), g(c));
2250
- }), e.root.querySelectorAll(".bridgerte__media").forEach((c) => {
2251
- const h = c.dataset.lexicalKey;
2252
- h && (a.set(c, h), T(h));
2253
- }), r.forEach((c, h) => {
2254
- T(h);
2255
- }), i !== null && T(i);
2256
- }, y = () => {
2257
- s === null && (s = Re(f));
2258
- }, x = (c, h) => {
2259
- const m = h.dataset.assetId, C = Un(Wn(h.dataset.status, {
2260
- config: e.mediaControlsConfig,
2261
- menuLabels: e.menuLabels
2262
- })).find((M) => M.id === c.dataset.menuItemId);
2263
- if (!m || !C) return;
2264
- const P = Gs(C, m);
2265
- P && e.executeCommand(P);
2266
- }, u = (c) => {
2267
- if (!c) {
2268
- const C = i;
2269
- i = null, C !== null && T(C);
2270
- return;
2271
- }
2272
- const h = c.dataset.lexicalKey ? c.dataset.lexicalKey : a.get(c) ?? null;
2273
- if (!h || i === h) return;
2274
- const m = i;
2275
- i = h, m !== null && T(m), T(h);
2276
- }, p = (c) => {
2277
- const h = c.target;
2278
- if (!(h instanceof HTMLElement)) return;
2279
- const m = h.closest(`.${de}`);
2280
- m && (c.preventDefault(), l = c.pointerType === "mouse" ? null : m);
2281
- }, E = (c) => {
2282
- if (c.pointerType === "mouse" || !l) return;
2283
- const h = c.target, m = h instanceof HTMLElement ? h.closest(".bridgerte__media-controls") : null, C = h instanceof HTMLElement ? h.closest(`.${de}`) : null;
2284
- C === l && m && (c.preventDefault(), c.stopPropagation(), x(C, m), d = !0), l = null;
2285
- }, _ = () => {
2286
- l = null;
2287
- }, B = (c) => {
2288
- if (d) {
2289
- d = !1, c.preventDefault(), c.stopPropagation();
2290
- return;
2291
- }
2292
- const h = c.target;
2293
- if (!(h instanceof HTMLElement)) return;
2294
- const m = h.closest(`.${de}`), C = h.closest(".bridgerte__media-controls");
2295
- !m || !C || (c.preventDefault(), c.stopPropagation(), x(m, C));
2296
- }, H = e.editor.registerMutationListener(
2297
- le,
2298
- (c) => {
2299
- c.forEach((h, m) => {
2300
- if (h === "destroyed") {
2301
- g(m);
2302
- return;
2303
- }
2304
- T(m);
2305
- });
2306
- }
2307
- ), I = e.editor.registerUpdateListener(y), w = ct({
2308
- root: e.root,
2309
- content: n,
2310
- getBlockFromTarget: Js,
2311
- activateBlock: u,
2312
- clearBlock: () => u(null)
2313
- });
2314
- return t.className = "bridgerte__media-controls-layer", e.root.append(t), t.addEventListener("pointerdown", p), t.addEventListener("pointerup", E), t.addEventListener("pointercancel", _), t.addEventListener("click", B), n.addEventListener("scroll", y, { passive: !0 }), window.addEventListener("resize", y), {
2315
- destroy() {
2316
- H(), I(), s !== null && (lt(s), s = null), t.removeEventListener("pointerdown", p), t.removeEventListener("pointerup", E), t.removeEventListener("pointercancel", _), t.removeEventListener("click", B), w.destroy(), n.removeEventListener("scroll", y), window.removeEventListener("resize", y), r.forEach((c) => {
2317
- var h;
2318
- (h = o.get(c)) == null || h(), c.remove();
2319
- }), r.clear(), o.clear(), a.clear(), t.remove();
2320
- }
2321
- };
2322
- }, ni = ["width", "height"], q = (e, t) => {
2323
- var r;
2324
- const n = (r = e[t]) == null ? void 0 : r.trim();
2325
- return n || void 0;
2326
- }, Qe = (e, t) => {
2327
- const n = Number.parseInt(e[t] ?? "", 10);
2328
- return Number.isFinite(n) && n > 0 ? n : void 0;
2329
- }, Ht = (e, t) => ni.reduce((n, r) => {
2330
- const o = Qe(t, r);
2331
- return o === void 0 ? n : { ...n, [r]: o };
2332
- }, e), ri = (e, t) => {
2333
- if (e.type === "format.color" || e.type === "format.backgroundColor" || e.type === "format.fontSize" || e.type === "format.fontFamily" || e.type === "format.lineHeight")
2334
- return t.value !== void 0 ? { ...e, value: t.value } : e;
2335
- if (e.type === "link.set") {
2336
- const n = q(t, "href"), r = q(t, "text");
2337
- return n ? { ...e, href: n, text: r } : null;
2338
- }
2339
- if (e.type === "block.code")
2340
- return t.language ? { type: "block.code", language: t.language } : e;
2341
- if (e.type === "block.setCodeLanguage")
2342
- return t.language !== void 0 ? { ...e, language: t.language } : e;
2343
- if (e.type === "table.insert") {
2344
- const n = Qe(t, "rows"), r = Qe(t, "cols");
2345
- return n && r ? { type: "table.insert", rows: n, cols: r } : null;
2346
- }
2347
- if (e.type === "media.insertImage") {
2348
- const n = q(t, "url");
2349
- return n ? Ht({
2350
- ...e,
2351
- url: n,
2352
- alt: q(t, "alt"),
2353
- title: q(t, "title")
2354
- }, t) : null;
2355
- }
2356
- if (e.type === "media.insertVideo") {
2357
- const n = q(t, "url");
2358
- return n ? Ht({
2359
- ...e,
2360
- url: n,
2361
- poster: q(t, "poster"),
2362
- title: q(t, "title")
2363
- }, t) : null;
2364
- }
2365
- return e;
2366
- }, ee = (e) => Math.min(Math.max(Math.round(e), 0), 255), Ze = ({ r: e, g: t, b: n }) => `#${[e, t, n].map((r) => ee(r).toString(16).padStart(2, "0")).join("")}`, jn = (e) => {
2367
- const n = e.trim().match(/^#([0-9a-f]{6})$/i);
2368
- if (!n) return null;
2369
- const r = n[1] ?? "";
2370
- return {
2371
- r: Number.parseInt(r.slice(0, 2), 16),
2372
- g: Number.parseInt(r.slice(2, 4), 16),
2373
- b: Number.parseInt(r.slice(4, 6), 16)
2374
- };
2375
- }, oi = (e) => {
2376
- const t = e.trim().match(/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i);
2377
- return t ? {
2378
- r: ee(Number(t[1])),
2379
- g: ee(Number(t[2])),
2380
- b: ee(Number(t[3]))
2381
- } : null;
2382
- }, We = (e) => {
2383
- const t = jn(e) ?? oi(e);
2384
- return t ? Ze(t) : null;
2385
- }, Kn = (e) => Math.min(Math.max(e, 0), 1), ai = ({ r: e, g: t, b: n }) => {
2386
- const r = ee(e) / 255, o = ee(t) / 255, a = ee(n) / 255, s = Math.max(r, o, a), l = Math.min(r, o, a), d = s - l;
2387
- let i = 0;
2388
- return d !== 0 && (s === r ? i = 60 * ((o - a) / d % 6) : s === o ? i = 60 * ((a - r) / d + 2) : i = 60 * ((r - o) / d + 4)), {
2389
- h: i < 0 ? i + 360 : i,
2390
- s: s === 0 ? 0 : d / s,
2391
- v: s
2392
- };
2393
- }, Ot = ({
2394
- h: e,
2395
- s: t,
2396
- v: n
2397
- }) => {
2398
- const r = n * t, o = r * (1 - Math.abs(e / 60 % 2 - 1)), a = n - r;
2399
- let s = 0, l = 0, d = 0;
2400
- return e < 60 ? (s = r, l = o) : e < 120 ? (s = o, l = r) : e < 180 ? (l = r, d = o) : e < 240 ? (l = o, d = r) : e < 300 ? (s = o, d = r) : (s = r, d = o), {
2401
- r: (s + a) * 255,
2402
- g: (l + a) * 255,
2403
- b: (d + a) * 255
2404
- };
2405
- }, si = ({ h: e, s: t }) => {
2406
- const n = e * Math.PI / 180, r = Kn(t) * 50;
2407
- return {
2408
- x: 50 + Math.cos(n) * r,
2409
- y: 50 + Math.sin(n) * r
2410
- };
2411
- }, $t = (e, t) => {
2412
- const n = t.getBoundingClientRect(), r = n.left + n.width / 2, o = n.top + n.height / 2, a = e.clientX - r, s = e.clientY - o, l = Math.min(Math.sqrt(a * a + s * s), n.width / 2), d = Math.atan2(s, a) * 180 / Math.PI;
2413
- return {
2414
- h: d < 0 ? d + 360 : d,
2415
- s: Kn(l / (n.width / 2)),
2416
- v: 1
2417
- };
2418
- }, ii = [
2419
- "#000000",
2420
- "#ffffff"
2421
- ], li = (e) => {
2422
- var t;
2423
- return (t = e.options) != null && t.length ? e.options : ii.map((n) => ({ label: n, value: n }));
2424
- }, qn = () => {
2425
- const e = document.createElement("section");
2426
- return e.className = "bridgerte__payload-panel-field", e;
2427
- }, ci = (e, t, n) => {
2428
- const r = qn(), o = document.createElement("div");
2429
- return o.className = "bridgerte__payload-panel-option-list", e.options.forEach((a) => {
2430
- const s = document.createElement("button");
2431
- 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", U(s), s.addEventListener("pointerdown", (l) => {
2432
- l.preventDefault();
2433
- }), s.addEventListener("click", () => {
2434
- n({
2435
- ...t,
2436
- [e.name]: a.value
2437
- });
2438
- }), o.append(s);
2439
- }), r.append(o), r;
2440
- }, di = (e, t, n) => {
2441
- const r = qn(), o = document.createElement("div"), a = document.createElement("div"), s = document.createElement("span"), l = document.createElement("div"), d = document.createElement("div"), i = li(e), g = i.length === 2;
2442
- let v = { h: 0, s: 0, v: 1 }, b = null;
2443
- const T = (u) => {
2444
- const p = We(u);
2445
- return !!(p && i.some((E) => We(E.value) === p));
2446
- }, f = (u, p = !0) => {
2447
- const E = We(u);
2448
- if (!E) return;
2449
- t[e.name] = E, d.style.background = E, v = ai(jn(E) ?? { r: 255, g: 255, b: 255 });
2450
- const _ = si(v);
2451
- a.dataset.active = p ? "true" : "false", d.dataset.empty = "false", p && (s.style.left = `${_.x}%`, s.style.top = `${_.y}%`);
2452
- }, y = () => {
2453
- const u = t[e.name];
2454
- u && n({
2455
- ...t,
2456
- [e.name]: u
2457
- });
2458
- };
2459
- r.className = "bridgerte__payload-panel-field", o.className = "bridgerte__payload-panel-color-picker", a.className = "bridgerte__payload-panel-color-wheel", a.setAttribute("aria-label", `${e.label}选择区域`), s.className = "bridgerte__payload-panel-color-wheel-handle", l.className = "bridgerte__payload-panel-color-actions", l.dataset.layout = g ? "sides" : "grid", d.className = "bridgerte__payload-panel-color-preview", d.dataset.empty = "true", a.append(s), i.forEach((u) => {
2460
- const p = document.createElement("button"), E = u.value;
2461
- p.type = "button", p.className = "bridgerte__payload-panel-color-swatch", p.dataset.value = E, p.style.background = E, p.setAttribute("aria-label", `选择颜色 ${u.label}`), U(p), p.addEventListener("pointerdown", (_) => {
2462
- _.preventDefault();
2463
- }), p.addEventListener("click", () => {
2464
- f(E, !1), y();
2465
- }), l.append(p);
2466
- }), a.addEventListener("pointerdown", (u) => {
2467
- b = u.pointerId, a.setPointerCapture(u.pointerId), v = $t(u, a), f(Ze(Ot(v))), u.preventDefault();
2468
- }), a.addEventListener("pointermove", (u) => {
2469
- b === u.pointerId && (v = $t(u, a), f(Ze(Ot(v))));
2470
- }), a.addEventListener("pointerup", (u) => {
2471
- b === u.pointerId && (b = null, a.releasePointerCapture(u.pointerId), y());
2472
- }), a.addEventListener("pointercancel", (u) => {
2473
- b === u.pointerId && (b = null, a.releasePointerCapture(u.pointerId));
2474
- });
2475
- const x = t[e.name];
2476
- return x && f(x, !(g && T(x))), o.append(a, l), r.append(o, d), r;
2477
- }, ui = (e, t, n) => {
2478
- const r = document.createElement("label"), o = document.createElement("input");
2479
- 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", () => {
2480
- t[e.name] = o.value;
2481
- }), o.addEventListener("keydown", (a) => {
2482
- a.key === "Enter" && (a.preventDefault(), n(t));
2483
- }), r.append(o), r;
2484
- }, mi = (e, t, n) => {
2485
- const r = document.createElement("label"), o = document.createElement("input");
2486
- 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", () => {
2487
- t[e.name] = o.value;
2488
- }), o.addEventListener("keydown", (a) => {
2489
- a.key === "Enter" && (a.preventDefault(), n(t));
2490
- }), r.append(o), r;
2491
- }, gi = ({
2492
- field: e,
2493
- values: t,
2494
- onSubmit: n
2495
- }) => e.type === "color" ? di(e, t, n) : e.type === "text" ? ui(e, t, n) : e.type === "number" ? mi(e, t, n) : ci(e, t, n), hi = (e) => {
2496
- var t, n, r;
2497
- 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) ?? "";
2498
- }, pi = (e, t) => (t == null ? void 0 : t[e.name]) ?? (e.type === "color" ? "" : hi(e)), Ft = (e) => e.some((t) => t.type === "text" || t.type === "number"), fi = (e) => {
2499
- const t = e.querySelector(
2500
- ".bridgerte__payload-panel-text-input"
2501
- );
2502
- queueMicrotask(() => {
2503
- t == null || t.focus(), t == null || t.select();
2504
- });
2505
- }, bi = (e, t, n) => {
2506
- const r = document.createElement("div"), o = document.createElement("span"), a = (n == null ? void 0 : n(e)) ?? null;
2507
- if (r.className = "bridgerte__payload-panel-title", o.textContent = e.panel.title, r.append(o), a) {
2508
- const s = document.createElement("button");
2509
- s.type = "button", s.className = "bridgerte__payload-panel-clear", s.textContent = "清除", s.setAttribute("aria-label", `清除${e.panel.title}`), U(s), s.addEventListener("pointerdown", (l) => {
2510
- l.preventDefault();
2511
- }), s.addEventListener("click", () => {
2512
- t(a);
2513
- }), r.append(s);
2514
- }
2515
- return r;
2516
- }, yi = (e) => (
2517
- /*
2518
- * 字体类面板只需要紧凑候选列表,颜色面板需要保留一点横向空间给圆盘和黑白按钮。
2519
- * 输入型面板保留默认宽度;table-insert 会按 schema 网格列数单独计算。
2520
- */
2521
- e === "font-size" || e === "font-family" || e === "line-height" ? "180px" : "220px"
2522
- ), vi = 3, wi = 3, Ci = 10, Gn = 10, _i = 16, ki = 2, Ei = 24, xi = () => {
2523
- var e;
2524
- return typeof window < "u" && ((e = window.matchMedia) == null ? void 0 : e.call(window, "(hover: hover) and (pointer: fine)").matches) === !0;
2525
- }, ue = (e, t) => {
2526
- const n = Number.parseInt(e ?? "", 10);
2527
- return Number.isFinite(n) ? Math.min(Math.max(n, t.min), t.max) : t.defaultValue;
2528
- }, Mi = (e, t) => e.type === "number" && e.name === t, zt = (e, t) => typeof e == "number" && Number.isFinite(e) && e > 0 ? Math.floor(e) : t, Vt = (e, t, n, r) => {
2529
- const o = e.find((g) => Mi(g, t)), a = zt(o == null ? void 0 : o.min, 1), s = zt(o == null ? void 0 : o.max, n), l = Math.max(a, s), d = Math.min(Math.max(r, a), l), i = ue(o == null ? void 0 : o.defaultValue, {
2530
- min: a,
2531
- max: l,
2532
- defaultValue: d
2533
- });
2534
- return {
2535
- min: a,
2536
- max: l,
2537
- defaultValue: i
2538
- };
2539
- }, Xn = (e) => ({
2540
- rows: Vt(
2541
- e,
2542
- "rows",
2543
- tn,
2544
- vi
2545
- ),
2546
- cols: Vt(
2547
- e,
2548
- "cols",
2549
- nn,
2550
- wi
2551
- )
2552
- }), Ti = (e) => {
2553
- const t = Math.min(e.cols.max, Gn);
2554
- return `${t * _i + Math.max(t - 1, 0) * ki + Ei}px`;
2555
- }, Li = ({
2556
- fields: e,
2557
- values: t,
2558
- onSubmit: n
2559
- }) => {
2560
- const r = Xn(e), o = document.createElement("section"), a = document.createElement("div"), s = document.createElement("div"), l = [], d = xi(), i = Math.min(r.rows.max, Ci), g = Math.min(r.cols.max, Gn), v = {
2561
- ...r.rows,
2562
- max: i,
2563
- defaultValue: Math.min(r.rows.defaultValue, i)
2564
- }, b = {
2565
- ...r.cols,
2566
- max: g,
2567
- defaultValue: Math.min(r.cols.defaultValue, g)
2568
- };
2569
- let T = ue(
2570
- t.rows,
2571
- v
2572
- ), f = ue(
2573
- t.cols,
2574
- b
2575
- ), y = null;
2576
- const x = (I, w) => {
2577
- T = I, f = w, t.rows = String(I), t.cols = String(w), s.textContent = `${I} x ${w}`, l.forEach((c) => {
2578
- const h = Number.parseInt(c.dataset.rows ?? "0", 10), m = Number.parseInt(c.dataset.cols ?? "0", 10);
2579
- c.dataset.active = String(h <= I && m <= w);
2580
- });
2581
- }, u = (I) => {
2582
- var w;
2583
- return ((w = document.elementFromPoint(I.clientX, I.clientY)) == null ? void 0 : w.closest(".bridgerte__payload-panel-table-cell")) ?? null;
2584
- }, p = (I) => {
2585
- if (!I) return;
2586
- const w = ue(
2587
- I.dataset.rows,
2588
- v
2589
- ), c = ue(
2590
- I.dataset.cols,
2591
- b
2592
- );
2593
- x(w, c);
2594
- }, E = () => {
2595
- n({
2596
- ...t,
2597
- rows: String(T),
2598
- cols: String(f)
2599
- });
2600
- }, _ = () => {
2601
- y = null;
2602
- }, B = () => {
2603
- window.setTimeout(_, 0);
2604
- }, H = (I, w) => {
2605
- if (I.detail > 0 && y !== w) {
2606
- I.preventDefault(), I.stopPropagation();
2607
- return;
2608
- }
2609
- _(), p(w), E();
2610
- };
2611
- for (let I = 1; I <= i; I += 1)
2612
- for (let w = 1; w <= g; w += 1) {
2613
- const c = document.createElement("button");
2614
- c.type = "button", c.className = "bridgerte__payload-panel-table-cell", c.dataset.rows = String(I), c.dataset.cols = String(w), c.setAttribute("aria-label", `插入 ${I} 行 ${w} 列表格`), U(c), c.addEventListener("pointerdown", (h) => {
2615
- y = c, p(c), h.preventDefault();
2616
- }), c.addEventListener("pointerup", B), c.addEventListener("pointercancel", _), c.addEventListener("click", (h) => {
2617
- H(h, c);
2618
- }), d && c.addEventListener("pointerenter", () => {
2619
- p(c);
2620
- }), l.push(c), a.append(c);
2621
- }
2622
- return o.className = "bridgerte__payload-panel-field", a.className = "bridgerte__payload-panel-table-grid", a.setAttribute("aria-label", "选择表格行列"), a.style.setProperty(
2623
- "--bridgerte-payload-panel-table-cols",
2624
- String(g)
2625
- ), s.className = "bridgerte__payload-panel-table-status", s.setAttribute("aria-live", "polite"), a.addEventListener("pointermove", (I) => {
2626
- d || p(u(I));
2627
- }), x(T, f), o.append(a, s), o;
2628
- }, Si = "bridgerte-payload-panel";
2629
- let Wt = 0;
2630
- const Ni = () => (Wt += 1, `${Si}-${Wt}`), xe = (e) => e.panel.id === "table-insert", Pi = (e, t) => {
2631
- const n = document.createElement("button");
2632
- return n.type = "button", n.className = "bridgerte__payload-panel-submit", n.textContent = "应用", U(n), n.addEventListener("pointerdown", (r) => {
2633
- r.preventDefault();
2634
- }), n.addEventListener("click", () => {
2635
- t(e);
2636
- }), n;
2637
- }, Ii = (e) => {
2638
- let t = null, n = {};
2639
- const r = zn({
2640
- root: e.editorRoot,
2641
- className: "bridgerte__payload-panel",
2642
- onBackdropClick: () => {
2643
- o();
2644
- }
2645
- });
2646
- function o() {
2647
- t = null, n = {}, r.close(), r.content.replaceChildren();
2648
- }
2649
- const a = (i) => {
2650
- var v;
2651
- if (!t || t.readonly || e.isReadonly()) return;
2652
- const g = ri(t.command, i);
2653
- g && ((v = e.restoreEditorFocus) == null || v.call(e, () => {
2654
- o(), e.isReadonly() || e.executeCommand(g);
2655
- }));
2656
- }, s = (i) => {
2657
- var g;
2658
- !t || t.readonly || e.isReadonly() || (g = e.restoreEditorFocus) == null || g.call(e, () => {
2659
- o(), e.isReadonly() || e.executeCommand(i);
2660
- });
2661
- }, l = (i) => {
2662
- n = i.panel.fields.reduce((v, b) => (v[b.name] = pi(b, i.currentValues), v), {});
2663
- const g = xe(i) ? Ti(Xn(i.panel.fields)) : yi(i.panel.id);
2664
- r.element.style.width = `min(${g}, calc(100vw - 24px))`, r.content.append(bi(i, s, e.getClearCommand)), xe(i) ? r.content.append(Li({
2665
- fields: i.panel.fields,
2666
- values: n,
2667
- onSubmit: a
2668
- })) : i.panel.fields.forEach((v) => {
2669
- r.content.append(gi({
2670
- field: v,
2671
- values: n,
2672
- onSubmit: a
2673
- }));
2674
- }), !xe(i) && Ft(i.panel.fields) && r.content.append(Pi(n, a)), r.open(i.anchorRect), !xe(i) && Ft(i.panel.fields) && fi(r.content);
2675
- };
2676
- return {
2677
- open: (i) => {
2678
- var b;
2679
- o();
2680
- const g = {
2681
- ...i,
2682
- id: Ni(),
2683
- readonly: e.isReadonly(),
2684
- submit: a,
2685
- cancel: o
2686
- };
2687
- if (t = g, ((b = e.onRequest) == null ? void 0 : b.call(e, g)) !== !0) {
2688
- if (g.readonly) {
2689
- o();
2690
- return;
2691
- }
2692
- l(i);
2693
- }
2694
- },
2695
- close: o,
2696
- destroy() {
2697
- o(), r.destroy();
2698
- }
2699
- };
2700
- }, me = "bridgerte__table-controls-button", Ri = [
2701
- "table-insert-row-after",
2702
- "table-delete-row",
2703
- "table-insert-column-after",
2704
- "table-delete-column",
2705
- "table-delete"
2706
- ], Ai = () => {
2707
- const e = new Map(De.map((t) => [t.id, t]));
2708
- return Ri.map((t) => Eo.find((n) => n.id === t) ?? e.get(t)).filter((t) => t !== void 0);
2709
- }, Yn = Ai(), Bi = new Map(
2710
- /*
2711
- * Controls 按钮用 MenuItem.id 查完整 command,同类命令的不同 payload 不能用 command.type 合并。
2712
- * 后续加入插入前/后、合并/拆分等表格菜单时,只要 id 稳定,就不会互相覆盖。
2713
- */
2714
- Yn.map((e) => [e.id, e])
2715
- ), Di = (e) => e.matches(".bridgerte__table") ? e : e.querySelector(".bridgerte__table") ?? e, Hi = (e, t) => e.classList.contains("bridgerte__table-wrapper") ? e : t.parentElement instanceof HTMLElement ? t.parentElement : t, Oi = (e) => e.querySelector(".bridgerte__content") ?? e, $i = (e) => e instanceof Element ? e.closest(".bridgerte__table-wrapper") : null, Fi = (e) => {
2716
- const t = e.getFirstChild();
2717
- if (!ao(t)) return null;
2718
- const n = t.getFirstChild();
2719
- return so(n) ? n : null;
2720
- }, zi = (e) => {
2721
- const t = document.createElement("button");
2722
- return t.type = "button", t.className = me, t.textContent = e.label, t.dataset.menuItemId = e.id, t.setAttribute("aria-label", e.label), t;
2723
- }, Vi = () => {
2724
- const e = document.createElement("div");
2725
- return e.className = "bridgerte__table-controls", e.contentEditable = "false", e.setAttribute("aria-label", "表格操作"), Yn.forEach((t) => {
2726
- e.append(zi(t));
2727
- }), e;
2728
- }, Wi = (e) => {
2729
- const t = document.createElement("div"), n = Oi(e.root), r = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map();
2730
- let s = null, l = null, d = !1, i = null;
2731
- const g = (m, C) => {
2732
- const P = e.root.getBoundingClientRect(), M = C.getBoundingClientRect(), L = M.bottom < P.top || M.top > P.bottom, N = Math.max(
2733
- 8,
2734
- P.width - m.offsetWidth - 8
2735
- ), R = Math.min(
2736
- Math.max(M.left - P.left + 8, 8),
2737
- N
2738
- ), S = Math.max(8, M.top - P.top - m.offsetHeight - 8);
2739
- m.hidden = L, m.style.transform = `translate(${R}px, ${S}px)`;
2740
- }, v = (m) => i === m, b = (m) => {
2741
- const C = e.editor.getElementByKey(m);
2742
- if (!C) {
2743
- T(m);
2744
- return;
2745
- }
2746
- C.dataset.lexicalKey = m;
2747
- const P = Di(C), M = Hi(C, P);
2748
- a.set(M, m);
2749
- const L = r.get(m);
2750
- if (!v(m)) {
2751
- T(m);
2752
- return;
2753
- }
2754
- if (L) {
2755
- g(L, M);
2756
- return;
2757
- }
2758
- const N = Vi(), R = U(N, {
2759
- targetSelector: `.${me}`
2760
- });
2761
- N.dataset.lexicalKey = m, r.set(m, N), o.set(N, R), t.append(N), g(N, M);
2762
- }, T = (m) => {
2763
- var P;
2764
- const C = r.get(m);
2765
- C && ((P = o.get(C)) == null || P(), o.delete(C), C.remove(), r.delete(m), i === m && (i = null));
2766
- }, f = () => {
2767
- s = null, a.forEach((m, C) => {
2768
- e.root.contains(C) || (a.delete(C), T(m));
2769
- }), e.root.querySelectorAll(".bridgerte__table-wrapper").forEach((m) => {
2770
- const C = m.dataset.lexicalKey;
2771
- C && (a.set(m, C), b(C));
2772
- }), r.forEach((m, C) => {
2773
- b(C);
2774
- }), i !== null && b(i);
2775
- }, y = () => {
2776
- s === null && (s = Re(f));
2777
- }, x = (m) => {
2778
- e.editor.update(() => {
2779
- var P;
2780
- const C = he(m);
2781
- C instanceof Ge && ((P = Fi(C)) == null || P.selectStart());
2782
- }), e.editor.focus();
2783
- }, u = (m, C) => {
2784
- x(m), e.executeCommand(C);
2785
- }, p = (m, C) => {
2786
- const P = C.dataset.lexicalKey, M = m.dataset.menuItemId, L = M ? Bi.get(M) : void 0;
2787
- !P || !L || u(P, L.command);
2788
- }, E = (m) => {
2789
- if (!m) {
2790
- const M = i;
2791
- i = null, M !== null && b(M);
2792
- return;
2793
- }
2794
- const C = m.dataset.lexicalKey ? m.dataset.lexicalKey : a.get(m) ?? null;
2795
- if (!C || i === C) return;
2796
- const P = i;
2797
- i = C, P !== null && b(P), b(C);
2798
- }, _ = (m) => {
2799
- const C = m.target;
2800
- if (!(C instanceof HTMLElement)) return;
2801
- const P = C.closest(`.${me}`);
2802
- P && (m.preventDefault(), l = m.pointerType === "mouse" ? null : P);
2803
- }, B = (m) => {
2804
- if (m.pointerType === "mouse" || !l) return;
2805
- const C = m.target, P = C instanceof HTMLElement ? C.closest(".bridgerte__table-controls") : null, M = C instanceof HTMLElement ? C.closest(`.${me}`) : null;
2806
- M === l && P && (m.preventDefault(), m.stopPropagation(), p(M, P), d = !0), l = null;
2807
- }, H = () => {
2808
- l = null;
2809
- }, I = (m) => {
2810
- if (d) {
2811
- d = !1, m.preventDefault(), m.stopPropagation();
2812
- return;
2813
- }
2814
- const C = m.target;
2815
- if (!(C instanceof HTMLElement)) return;
2816
- const P = C.closest(`.${me}`), M = C.closest(".bridgerte__table-controls");
2817
- !P || !M || (m.preventDefault(), m.stopPropagation(), p(P, M));
2818
- }, w = e.editor.registerMutationListener(
2819
- Ge,
2820
- (m) => {
2821
- m.forEach((C, P) => {
2822
- if (C === "destroyed") {
2823
- T(P);
2824
- return;
2825
- }
2826
- b(P);
2827
- });
2828
- }
2829
- ), c = e.editor.registerUpdateListener(y), h = ct({
2830
- root: e.root,
2831
- content: n,
2832
- getBlockFromTarget: $i,
2833
- activateBlock: E,
2834
- clearBlock: () => E(null)
2835
- });
2836
- return t.className = "bridgerte__table-controls-layer", e.root.append(t), t.addEventListener("pointerdown", _), t.addEventListener("pointerup", B), t.addEventListener("pointercancel", H), t.addEventListener("click", I), n.addEventListener("scroll", y, { passive: !0 }), window.addEventListener("resize", y), {
2837
- destroy() {
2838
- w(), c(), s !== null && (lt(s), s = null), t.removeEventListener("pointerdown", _), t.removeEventListener("pointerup", B), t.removeEventListener("pointercancel", H), t.removeEventListener("click", I), h.destroy(), n.removeEventListener("scroll", y), window.removeEventListener("resize", y), r.forEach((m) => {
2839
- var C;
2840
- (C = o.get(m)) == null || C(), m.remove();
2841
- }), r.clear(), o.clear(), a.clear(), t.remove();
2842
- }
2843
- };
2844
- }, Ui = (e) => {
2845
- const t = Ii({
2846
- editorRoot: e.editorRoot,
2847
- isReadonly: e.isReadonly,
2848
- restoreEditorFocus: e.restoreEditorFocus,
2849
- executeCommand: e.executeCommand,
2850
- getClearCommand: e.getClearCommand,
2851
- onRequest: e.onRequest
2852
- }), n = Hs({
2853
- editor: e.lexicalEditor,
2854
- root: e.editorRoot,
2855
- isReadonly: e.isReadonly,
2856
- languagePanel: e.codeBlockLanguagePanel,
2857
- payloadPanelConfig: e.payloadPanelConfig,
2858
- onRequest: e.onRequest
2859
- }), r = Wi({
2860
- editor: e.lexicalEditor,
2861
- root: e.editorRoot,
2862
- executeCommand: e.executeCommand
2863
- }), o = ti({
2864
- editor: e.lexicalEditor,
2865
- root: e.editorRoot,
2866
- defaultWidthPercent: e.defaultMediaWidthPercent,
2867
- executeCommand: e.executeCommand,
2868
- mediaControlsConfig: e.mediaControlsConfig,
2869
- menuLabels: e.menuLabels
2870
- });
2871
- return {
2872
- payloadPanelController: t,
2873
- codeBlockController: n,
2874
- tableHeaderController: r,
2875
- mediaControlsController: o,
2876
- destroy() {
2877
- t.destroy(), n.destroy(), r.destroy(), o.destroy();
2878
- }
2879
- };
2880
- }, ji = (e, t) => {
2881
- const n = document.createElement("div"), r = document.createElement("div"), o = document.createElement("div"), a = document.createElement("div");
2882
- return e.classList.add("bridgerte"), e.textContent = "", n.className = "bridgerte__editor", r.className = "bridgerte__body", o.className = "bridgerte__content", a.className = "bridgerte__placeholder", a.textContent = t.placeholder, a.setAttribute("aria-hidden", "true"), o.dataset.placeholder = t.placeholder, o.setAttribute("role", "textbox"), o.setAttribute("aria-multiline", "true"), r.append(o, a), n.append(r), e.append(n), {
2883
- rootElement: n,
2884
- bodyElement: r,
2885
- contentElement: o,
2886
- placeholderElement: a
2887
- };
2888
- }, Ki = ({
2889
- editor: e
2890
- }) => {
2891
- let t = null;
2892
- return {
2893
- capture() {
2894
- e.getEditorState().read(() => {
2895
- var n;
2896
- t = ((n = D()) == null ? void 0 : n.clone()) ?? null;
2897
- });
2898
- },
2899
- restore() {
2900
- t && e.update(() => {
2901
- kr((t == null ? void 0 : t.clone()) ?? null);
2902
- });
2903
- },
2904
- clear() {
2905
- t = null;
2906
- }
2907
- };
2908
- }, qi = /((https?:\/\/|www\.)[^\s<>()]+[^\s<>().,;:!?])/i, Gi = /([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})/i, Xi = {
2909
- changeHandlers: [],
2910
- excludeParents: [],
2911
- matchers: [
2912
- bt(qi, (e) => e.startsWith("http://") || e.startsWith("https://") ? e : `https://${e}`),
2913
- bt(Gi, (e) => `mailto:${e}`)
2914
- ]
2915
- }, Yi = ({
2916
- editor: e
2917
- }) => ho(e, Xi), Ji = [
2918
- ".bridgerte__code-header",
2919
- ".bridgerte__code-block-controls",
2920
- ".bridgerte__code-block-control-button",
2921
- ".bridgerte__code-block-control",
2922
- ".bridgerte__code-block-controls-layer",
2923
- ".bridgerte__code-block-menu",
2924
- ".bridgerte__table-controls-layer",
2925
- ".bridgerte__table-controls",
2926
- ".bridgerte__media-controls-layer",
2927
- ".bridgerte__media-controls",
2928
- ".bridgerte__dialog-backdrop",
2929
- ".bridgerte__dialog",
2930
- ".bridgerte__payload-panel"
2931
- ].join(","), Qi = (e, t) => {
2932
- const n = e.anchorNode, r = e.focusNode;
2933
- return n !== null && r !== null && t.contains(n) && t.contains(r);
2934
- }, Zi = (e) => {
2935
- e.querySelectorAll(Ji).forEach((t) => {
2936
- t.remove();
2937
- }), e.querySelectorAll('[contenteditable="false"]').forEach((t) => {
2938
- t.classList.contains("bridgerte__media") || t.remove();
2939
- });
2940
- }, el = (e) => {
2941
- const t = e.ownerDocument.getSelection();
2942
- if (!t || t.rangeCount === 0 || !Qi(t, e))
2943
- return null;
2944
- const n = t.getRangeAt(0).cloneContents();
2945
- Zi(n);
2946
- const r = e.ownerDocument.createElement("div");
2947
- return r.append(n), {
2948
- html: r.innerHTML,
2949
- text: r.textContent ?? ""
2950
- };
2951
- }, tl = ({
2952
- target: e,
2953
- isReadonly: t
2954
- }) => {
2955
- const n = (o) => {
2956
- const a = el(e);
2957
- !a || !o.clipboardData || (o.clipboardData.setData("text/html", a.html), o.clipboardData.setData("text/plain", a.text), o.preventDefault(), o.stopImmediatePropagation());
2958
- }, r = (o) => {
2959
- if (t()) {
2960
- n(o);
2961
- return;
2962
- }
2963
- n(o);
2964
- };
2965
- return e.addEventListener("copy", n, { capture: !0 }), e.addEventListener("cut", r, { capture: !0 }), () => {
2966
- e.removeEventListener("copy", n, { capture: !0 }), e.removeEventListener("cut", r, { capture: !0 });
2967
- };
2968
- }, Me = 8, nl = () => {
2969
- const e = window.visualViewport;
2970
- return {
2971
- left: (e == null ? void 0 : e.offsetLeft) ?? 0,
2972
- top: (e == null ? void 0 : e.offsetTop) ?? 0,
2973
- width: (e == null ? void 0 : e.width) ?? window.innerWidth,
2974
- height: (e == null ? void 0 : e.height) ?? window.innerHeight
2975
- };
2976
- }, Ut = (e, t, n) => Math.min(Math.max(e, t), Math.max(t, n));
2977
- function Jn(e, t, n = {}) {
2978
- const r = n.placement ?? "bottom-start", o = n.offset ?? 8, a = n.shiftPadding ?? 8, s = n.strategy ?? "absolute";
2979
- let l = null, d = !1;
2980
- const i = () => {
2981
- t.style.position = s, t.style.left = "0px", t.style.top = "0px", t.style.opacity = "0", t.style.pointerEvents = "none";
2982
- }, g = (f, y) => {
2983
- const x = nl(), u = t.getBoundingClientRect(), p = x.left + Me, E = x.top + Me, _ = x.left + x.width - u.width - Me, B = x.top + x.height - u.height - Me;
2984
- t.style.left = `${Ut(f, p, _)}px`, t.style.top = `${Ut(y, E, B)}px`, t.style.opacity = "", t.style.pointerEvents = "";
2985
- }, v = async () => {
2986
- const f = await vn(e, t, {
2987
- placement: r,
2988
- strategy: s,
2989
- platform: wn,
2990
- middleware: [
2991
- Cn(o),
2992
- _n(),
2993
- kn({ padding: a })
2994
- ]
2995
- });
2996
- g(f.x, f.y);
2997
- }, b = () => {
2998
- l == null || l(), l = null;
2999
- }, T = (f) => {
3000
- if (d !== f) {
3001
- if (d = f, b(), d) {
3002
- i(), t.hidden = !1, l = xo(e, t, v), v();
3003
- return;
3004
- }
3005
- t.hidden = !0, t.style.opacity = "", t.style.pointerEvents = "";
3006
- }
3007
- };
3008
- return i(), t.hidden = !0, {
3009
- update: v,
3010
- setOpen: T,
3011
- destroy() {
3012
- b(), t.hidden = !0;
3013
- }
3014
- };
3015
- }
3016
- const Qn = {
3017
- // 居中对齐菜单使用,和 align 命令的 center value 对应。
3018
- "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>',
3019
- // 两端对齐菜单使用,保留段落排版语义,不和普通居中/左右对齐混用。
3020
- "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>',
3021
- // 左对齐菜单使用,是段落默认对齐方向的显式入口。
3022
- "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>',
3023
- // 右对齐菜单使用,和 align 命令的 right value 对应。
3024
- "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>',
3025
- // @ mention 插入入口使用,后续 mention 候选菜单仍复用同一语义 key。
3026
- "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>',
3027
- // 加粗菜单和 hoverbar 加粗按钮共用,表示 format.bold。
3028
- 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>',
3029
- // 字号菜单使用,表示 format.fontSize,baseline 三角+基线笔画粗细统一视觉一致。
3030
- "case-sensitive": '<svg aria-hidden="true" class="lucide lucide-baseline" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M4 20h16" /> <path d="m6 16 6-12 6 12" /> <path d="M8 12h8" /> </svg>',
3031
- // 行内代码菜单和 hoverbar 行内代码按钮共用,表示 format.inlineCode,code-xml `</>` 比纯尖括号更直观。
3032
- code: '<svg aria-hidden="true" class="lucide lucide-code-xml" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="m18 16 4-4-4-4" /> <path d="m6 8-4 4 4 4" /> <path d="m14.5 4-5 16" /> </svg>',
3033
- // 表格删除列入口使用,图形保持列方向,和 rows-minus 区分。
3034
- "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>',
3035
- // 表格插入列入口使用,图形保持列方向,和 rows-plus 区分。
3036
- "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>',
3037
- // 一级标题菜单使用,和 block.heading level 1 对应。
3038
- "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>',
3039
- // 二级标题菜单使用,和 block.heading level 2 对应。
3040
- "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>',
3041
- // 三级标题菜单使用,和 block.heading level 3 对应。
3042
- "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>',
3043
- // 四级标题菜单使用,和 block.heading level 4 对应。
3044
- "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>',
3045
- // 五级标题菜单使用,和 block.heading level 5 对应。
3046
- "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>',
3047
- // 六级标题菜单使用,和 block.heading level 6 对应。
3048
- "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>',
3049
- // 减少缩进菜单使用,和 indent.decrease 命令对应。
3050
- "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>',
3051
- // 增加缩进菜单使用,和 indent.increase 命令对应。
3052
- "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>',
3053
- // 斜体菜单和 hoverbar 斜体按钮共用,表示 format.italic。
3054
- 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>',
3055
- // 有序列表菜单使用,表示 list.ordered。
3056
- "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>',
3057
- // slash command 入口使用,表示打开候选命令列表。
3058
- "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>',
3059
- // 待办列表菜单使用,表示 list.todo。
3060
- "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>',
3061
- // 无序列表菜单使用,表示 list.unordered。
3062
- 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>',
3063
- // 全屏切换菜单使用,表示 fullscreen.toggle。
3064
- 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>',
3065
- // 分割线菜单使用,表示 block.divider。
3066
- minus: '<svg aria-hidden="true" class="lucide lucide-separator-horizontal" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="m16 16-4 4-4-4" /> <path d="M3 12h18" /> <path d="m8 8 4-4 4 4" /> </svg>',
3067
- // 背景色菜单使用,表示 format.backgroundColor。
3068
- "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>',
3069
- // 文字颜色菜单使用,表示 format.color。
3070
- 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>',
3071
- // 正文段落菜单使用,表示 block.paragraph。
3072
- 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>',
3073
- // 引用块菜单使用,表示 block.quote。
3074
- 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>',
3075
- // 重做菜单使用,表示 history.redo。
3076
- 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>',
3077
- // 清除样式菜单和 hoverbar 清除样式按钮共用,表示 format.clear
3078
- "remove-formatting": '<svg aria-hidden="true" class="lucide lucide-eraser" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21" /> <path d="m5.082 11.09 8.828 8.828" /> </svg>',
3079
- // 表格删除行入口使用,图形保持行方向,和 columns-minus 区分。
3080
- "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>',
3081
- // 表格插入行入口使用,图形保持行方向,和 columns-plus 区分。
3082
- "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>',
3083
- // 代码块菜单使用,和行内代码的 code icon 区分为块级入口。
3084
- "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>',
3085
- // 删除线菜单和 hoverbar 删除线按钮共用,表示 format.strike。
3086
- 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>',
3087
- // 下标菜单使用,表示 format.subscript。
3088
- 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>',
3089
- // 上标菜单使用,表示 format.superscript。
3090
- 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>',
3091
- // 删除整张表格入口使用,沿用 table 轮廓保持表格上下文语义。
3092
- "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>',
3093
- // 插入表格菜单使用,表示 table.insert。
3094
- 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>',
3095
- // 清空内容菜单使用,表示 content.clear。
3096
- "trash-2": '<svg aria-hidden="true" class="lucide lucide-trash" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" /> <path d="M3 6h18" /> <path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" /> </svg>',
3097
- // 字体菜单使用,表示 format.fontFamily。
3098
- 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>',
3099
- // 下划线菜单和 hoverbar 下划线按钮共用,表示 format.underline。
3100
- 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>',
3101
- // 撤销菜单使用,表示 history.undo。
3102
- 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>',
3103
- // 上传图片菜单使用,和 upload-video 分开,避免媒体类型在原生侧混淆。
3104
- "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>',
3105
- // 上传视频菜单使用,和 upload-image 分开,避免媒体类型在原生侧混淆。
3106
- "upload-video": '<svg aria-hidden="true" class="lucide lucide-film" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <rect width="18" height="18" x="3" y="3" rx="2" /> <path d="M7 3v18" /> <path d="M3 7.5h4" /> <path d="M3 12h18" /> <path d="M3 16.5h4" /> <path d="M17 3v18" /> <path d="M17 7.5h4" /> <path d="M17 16.5h4" /> </svg>',
3107
- // 行高菜单使用,表示 format.lineHeight。
3108
- "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>'
3109
- }, rl = (e) => {
3110
- const t = document.createElement("span");
3111
- return t.className = "bridgerte__menu-icon-text", t.textContent = e, t;
3112
- }, Zn = (e, t, n) => {
3113
- if (t) {
3114
- e.innerHTML = t;
3115
- return;
3116
- }
3117
- e.append(rl(n));
3118
- }, et = () => {
3119
- const e = window.getSelection(), t = e != null && e.rangeCount ? e.getRangeAt(0) : null, n = t == null ? void 0 : t.getBoundingClientRect();
3120
- return !n || n.width === 0 && n.height === 0 ? null : n;
3121
- }, ol = 160, al = {
3122
- toolbarKeys: [
3123
- "bold",
3124
- "italic",
3125
- "underline",
3126
- "strike",
3127
- "inline-code",
3128
- "clear-style",
3129
- "|",
3130
- "color",
3131
- "background-color",
3132
- "font-size",
3133
- "font-family",
3134
- "line-height"
3135
- ]
3136
- }, sl = () => {
3137
- const e = D();
3138
- return O(e) && !e.isCollapsed();
3139
- }, jt = (e, t) => e.target instanceof Node && t.contains(e.target), Kt = (e) => e instanceof Element ? e.closest(".bridgerte__hoverbar-button") : null, il = (e) => e.flatMap((t) => t.type === "button" ? [t.item] : t.type === "group" ? t.items : []), ll = (e) => {
3140
- const t = document.createElement("span");
3141
- return t.className = "bridgerte__hoverbar-separator", t.dataset.separatorId = e.key, t.setAttribute("aria-hidden", "true"), t;
3142
- }, cl = (e, t, n) => {
3143
- const r = $s(e, t), o = document.createElement("button");
3144
- 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)), Zn(o, n[e.icon] ?? Qn[e.icon], e.label), o;
3145
- }, dl = ({
3146
- editorRoot: e,
3147
- contentElement: t,
3148
- editor: n,
3149
- isReadonly: r,
3150
- executeCommand: o,
3151
- requestPayloadPanel: a,
3152
- getCommandStates: s,
3153
- menuSchema: l,
3154
- hoverbarConfig: d,
3155
- menuLabels: i,
3156
- payloadPanelConfig: g,
3157
- icons: v = {}
3158
- }) => {
3159
- const b = dt(l ?? De, {
3160
- menuLabels: i,
3161
- payloadPanelConfig: g
3162
- }), T = ot(d ?? al, b), f = il(T), y = document.createElement("span"), x = document.createElement("div");
3163
- let u = null, p = !1, E = null;
3164
- const _ = U(x, {
3165
- targetSelector: ".bridgerte__hoverbar-button"
3166
- });
3167
- y.className = "bridgerte__hoverbar-anchor", y.setAttribute("aria-hidden", "true"), x.className = "bridgerte__floating-menu bridgerte__hoverbar", x.setAttribute("role", "toolbar"), x.setAttribute("aria-label", "BridgeRTE hoverbar"), e.append(y, x), u = Jn(y, x, {
3168
- placement: "top",
3169
- offset: 8,
3170
- strategy: "fixed"
3171
- });
3172
- const B = () => {
3173
- E && (window.clearTimeout(E), E = null);
3174
- }, H = () => {
3175
- B(), p = !1, x.replaceChildren(), x.dataset.visible = "false", u == null || u.setOpen(!1);
3176
- }, I = () => {
3177
- const S = et(), k = t.getBoundingClientRect();
3178
- y.style.left = `${(S == null ? void 0 : S.left) ?? k.left}px`, y.style.top = `${(S == null ? void 0 : S.top) ?? k.top}px`, y.style.width = `${(S == null ? void 0 : S.width) || 1}px`, y.style.height = `${(S == null ? void 0 : S.height) || 1}px`;
3179
- }, w = () => {
3180
- const S = s();
3181
- x.replaceChildren(...T.flatMap((k) => k.type === "separator" ? [ll(k)] : (k.type === "button" ? [k.item] : k.items).map(($) => cl($, S, v)))), I(), p = !0, x.dataset.visible = "true", u == null || u.setOpen(!0), u == null || u.update();
3182
- }, c = () => r() ? !1 : n.getEditorState().read(sl), h = (S = !1) => {
3183
- if (B(), !c()) {
3184
- H();
3185
- return;
3186
- }
3187
- if (S) {
3188
- w();
3189
- return;
3190
- }
3191
- p && H(), E = window.setTimeout(() => {
3192
- E = null, c() && w();
3193
- }, ol);
3194
- }, m = (S) => {
3195
- const k = f.find((A) => A.id === S.dataset.hoverbarItemId);
3196
- if (!(!k || S.disabled)) {
3197
- if (k.payloadPanel) {
3198
- const A = S.getBoundingClientRect();
3199
- a({
3200
- menuId: k.id,
3201
- command: k.command,
3202
- panel: k.payloadPanel,
3203
- currentValues: Os(k, s()),
3204
- anchorRect: {
3205
- x: A.left,
3206
- y: A.top,
3207
- width: A.width,
3208
- height: A.height
3209
- }
3210
- }), h(!0);
3211
- return;
3212
- }
3213
- o(k.command), h(!0);
3214
- }
3215
- }, C = (S) => {
3216
- Kt(S.target) && S.preventDefault();
3217
- }, P = (S) => {
3218
- const k = Kt(S.target);
3219
- k && (S.preventDefault(), m(k));
3220
- }, M = (S) => {
3221
- !p || jt(S, x) || jt(S, t) || H();
3222
- }, L = n.registerCommand(
3223
- ln,
3224
- () => (h(), !1),
3225
- j
3226
- ), N = n.registerUpdateListener(() => {
3227
- h();
3228
- }), R = n.registerCommand(
3229
- cn,
3230
- (S) => p ? (S == null || S.preventDefault(), H(), !0) : !1,
3231
- j
3232
- );
3233
- return x.addEventListener("pointerdown", C), x.addEventListener("click", P), document.addEventListener("pointerdown", M, !0), () => {
3234
- B(), L(), N(), R(), x.removeEventListener("pointerdown", C), x.removeEventListener("click", P), document.removeEventListener("pointerdown", M, !0), _(), u == null || u.destroy(), y.remove(), x.remove();
3235
- };
3236
- }, ul = (e) => e.metaKey || e.ctrlKey, ml = {
3237
- b: { type: "format.bold" },
3238
- i: { type: "format.italic" },
3239
- u: { type: "format.underline" },
3240
- "\\": { type: "format.clear" }
3241
- }, gl = {
3242
- x: { type: "format.strike" },
3243
- l: { type: "align", value: "left" },
3244
- e: { type: "align", value: "center" },
3245
- r: { type: "align", value: "right" },
3246
- j: { type: "align", value: "justify" }
3247
- }, hl = {
3248
- 0: { type: "block.paragraph" },
3249
- 1: { type: "block.heading", level: 1 },
3250
- 2: { type: "block.heading", level: 2 },
3251
- 3: { type: "block.heading", level: 3 },
3252
- 4: { type: "block.heading", level: 4 },
3253
- 5: { type: "block.heading", level: 5 },
3254
- 6: { type: "block.heading", level: 6 }
3255
- }, pl = (e) => {
3256
- const t = e.key.toLowerCase(), n = e.code;
3257
- if (!e.metaKey && !e.ctrlKey && !e.altKey && !e.shiftKey || !ul(e)) return null;
3258
- if (e.altKey) {
3259
- if (e.shiftKey) return null;
3260
- if (t === "c" || n === "KeyC") return { type: "block.code" };
3261
- const r = n.startsWith("Digit") ? n.slice(5) : t;
3262
- return hl[r] ?? null;
3263
- }
3264
- 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" } : gl[t] ?? null : t === "z" ? { type: "history.undo" } : t === "y" && e.ctrlKey && !e.metaKey ? { type: "history.redo" } : t === "`" || t === "~" || n === "Backquote" ? { type: "format.inlineCode" } : ml[t] ?? null;
3265
- }, fl = ({
3266
- target: e,
3267
- isReadonly: t,
3268
- executeCommand: n
3269
- }) => {
3270
- const r = (o) => {
3271
- if (t()) return;
3272
- const a = pl(o);
3273
- a && (o.preventDefault(), n(a));
3274
- };
3275
- return e.addEventListener("keydown", r), () => {
3276
- e.removeEventListener("keydown", r);
3277
- };
3278
- }, bl = (e, t) => {
3279
- const n = t.offsetTop, r = n + t.offsetHeight, o = e.scrollTop, a = o + e.clientHeight;
3280
- if (n < o) {
3281
- e.scrollTop = n;
3282
- return;
3283
- }
3284
- r > a && (e.scrollTop = r - e.clientHeight);
3285
- }, ut = (e, t) => {
3286
- var n;
3287
- if (e instanceof Text && t <= (((n = e.textContent) == null ? void 0 : n.length) ?? 0)) return e;
3288
- for (const r of Array.from((e == null ? void 0 : e.childNodes) ?? [])) {
3289
- const o = ut(r, t);
3290
- if (o) return o;
3291
- }
3292
- return null;
3293
- }, er = ({
3294
- editorRoot: e,
3295
- contentElement: t,
3296
- editor: n,
3297
- isReadonly: r,
3298
- menu: o,
3299
- anchor: a,
3300
- itemSelector: s,
3301
- getCurrentTrigger: l,
3302
- getTriggerRect: d,
3303
- resolveItems: i,
3304
- renderItem: g,
3305
- renderStatus: v,
3306
- onStateChange: b,
3307
- onSelect: T
3308
- }) => {
3309
- let f = null, y = 0;
3310
- const x = U(o, {
3311
- targetSelector: s
3312
- }), u = Jn(a, o, {
3313
- placement: "bottom-start",
3314
- offset: 2,
3315
- strategy: "fixed"
3316
- });
3317
- e.append(a, o);
3318
- const p = () => {
3319
- const k = f ? d(f.trigger) ?? et() : et(), A = t.getBoundingClientRect();
3320
- return k ?? A;
3321
- }, E = () => {
3322
- const k = p();
3323
- a.style.left = `${k.left}px`, a.style.top = `${k.top}px`, a.style.height = `${k.height || 1}px`;
3324
- }, _ = (k = !0) => {
3325
- f = null, o.dataset.visible = "false", k && o.replaceChildren(), u.setOpen(!1);
3326
- }, B = () => {
3327
- const k = o.querySelector(`${s}[data-active="true"]`);
3328
- k && bl(o, k);
3329
- }, H = (k, A) => {
3330
- !f || f.requestId !== A.requestId || (_(), T(k, A.trigger));
3331
- }, I = () => {
3332
- if (!f) {
3333
- _();
3334
- return;
3335
- }
3336
- const k = f, A = p();
3337
- if ((b == null ? void 0 : b(k, {
3338
- anchorRect: A,
3339
- close: _,
3340
- selectItem: (re) => H(re, k)
3341
- })) === !0) {
3342
- o.replaceChildren(), o.dataset.visible = "false", u.setOpen(!1);
3343
- return;
3344
- }
3345
- if (k.status === "success")
3346
- o.replaceChildren(
3347
- ...k.items.map((re, pt) => g(re, pt, pt === k.activeIndex))
3348
- );
3349
- else {
3350
- const re = v == null ? void 0 : v(
3351
- k.status,
3352
- k.trigger.query,
3353
- k.error
3354
- );
3355
- o.replaceChildren(...re ? [re] : []);
3356
- }
3357
- const J = o.children.length > 0;
3358
- o.dataset.visible = String(J), E(), u.setOpen(J), B(), u.update();
3359
- }, w = async (k, A) => {
3360
- let $;
3361
- try {
3362
- $ = await Promise.resolve(i(k));
3363
- } catch (J) {
3364
- (f == null ? void 0 : f.requestId) === A && (f = {
3365
- ...f,
3366
- items: [],
3367
- activeIndex: 0,
3368
- status: "error",
3369
- error: J
3370
- }, I());
3371
- return;
3372
- }
3373
- !f || A !== f.requestId || (f = {
3374
- ...f,
3375
- items: $,
3376
- activeIndex: Math.min(f.activeIndex, Math.max($.length - 1, 0)),
3377
- status: $.length > 0 ? "success" : "empty",
3378
- error: void 0
3379
- }, I());
3380
- }, c = () => {
3381
- if (r()) {
3382
- _();
3383
- return;
3384
- }
3385
- const k = n.getEditorState().read(l);
3386
- if (!k) {
3387
- _(!1);
3388
- return;
3389
- }
3390
- y += 1, f = {
3391
- trigger: k,
3392
- items: [],
3393
- activeIndex: 0,
3394
- requestId: y,
3395
- status: "loading",
3396
- error: void 0
3397
- }, I(), w(k.query, y);
3398
- }, h = () => {
3399
- if (!f || f.status !== "success") return !1;
3400
- const k = f.items[f.activeIndex], A = f.trigger;
3401
- return k ? (_(), T(k, A), !0) : !1;
3402
- }, m = (k) => !f || f.status !== "success" || f.items.length === 0 ? !1 : (f = {
3403
- ...f,
3404
- activeIndex: (f.activeIndex + k + f.items.length) % f.items.length
3405
- }, I(), !0), C = (k) => {
3406
- const A = k.target, $ = A instanceof HTMLElement ? A.closest(s) : null, J = $ != null && $.dataset.index ? Number.parseInt($.dataset.index, 10) : Number.NaN;
3407
- !f || f.status !== "success" || Number.isNaN(J) || (f = { ...f, activeIndex: J }, k.preventDefault(), h());
3408
- }, P = (k) => {
3409
- const A = k.target;
3410
- A instanceof HTMLElement && A.closest(s) && k.preventDefault();
3411
- }, M = n.registerUpdateListener(() => {
3412
- c();
3413
- }), L = n.registerCommand(
3414
- Er,
3415
- (k) => m(1) ? (k == null || k.preventDefault(), !0) : !1,
3416
- j
3417
- ), N = n.registerCommand(
3418
- xr,
3419
- (k) => m(-1) ? (k == null || k.preventDefault(), !0) : !1,
3420
- j
3421
- ), R = n.registerCommand(
3422
- Mr,
3423
- (k) => h() ? (k == null || k.preventDefault(), !0) : !1,
3424
- j
3425
- ), S = n.registerCommand(
3426
- cn,
3427
- (k) => f ? (k == null || k.preventDefault(), _(), !0) : !1,
3428
- j
3429
- );
3430
- return o.addEventListener("click", C), o.addEventListener("pointerdown", P), {
3431
- close: _,
3432
- destroy() {
3433
- M(), L(), N(), R(), S(), o.removeEventListener("click", C), o.removeEventListener("pointerdown", P), x(), u.destroy(), a.remove(), o.remove();
3434
- }
3435
- };
3436
- }, yl = {
3437
- labelField: "label",
3438
- descriptionField: "description",
3439
- avatarField: "avatar",
3440
- iconField: "data.icon",
3441
- showAvatar: !0,
3442
- showIcon: !0,
3443
- showDescription: !0,
3444
- loadingText: "加载中",
3445
- emptyText: "没有匹配的提及",
3446
- errorText: "提及加载失败"
3447
- }, vl = (e) => ({
3448
- ...yl,
3449
- ...e
3450
- }), wl = (e, t) => {
3451
- var o;
3452
- const n = t.slice(5), r = (o = e.data) == null ? void 0 : o[n];
3453
- return typeof r == "string" && r ? r : void 0;
3454
- }, Te = (e, t) => {
3455
- if (t.startsWith("data.")) return wl(e, t);
3456
- const n = t === "id" ? e.id : t === "label" ? e.label : t === "value" ? e.value : t === "avatar" ? e.avatar : e.description;
3457
- return typeof n == "string" && n ? n : void 0;
3458
- }, Cl = (e) => e.startsWith("@") ? e : `@${e}`, tr = (e, t) => {
3459
- const n = Te(e, t.labelField) ?? e.label ?? e.value ?? e.id, r = t.showDescription ? Te(e, t.descriptionField) ?? e.description : void 0, o = t.showAvatar ? Te(e, t.avatarField) ?? e.avatar : void 0, a = t.showIcon && !o ? Te(e, t.iconField) : void 0;
3460
- return {
3461
- item: e,
3462
- label: Cl(n),
3463
- ...r ? { description: r } : {},
3464
- ...o ? { avatar: o } : {},
3465
- ...a ? { icon: a } : {}
3466
- };
3467
- }, _l = (e, t) => e.map((n) => tr(n, t)), tt = (e) => e instanceof Y && e.getTextContent().startsWith(" "), kl = (e) => {
3468
- const n = e.getTextContent().slice(1);
3469
- if (!n) {
3470
- e.remove();
3471
- return;
3472
- }
3473
- e.setTextContent(n);
3474
- }, El = (e, t) => {
3475
- const n = e.getPreviousSibling(), r = e.getNextSibling(), o = tt(r) ? r.getNextSibling() : r;
3476
- if (tt(r) && kl(r), e.remove(), t) {
3477
- n == null || n.selectEnd();
3478
- return;
3479
- }
3480
- o == null || o.selectStart();
3481
- }, xl = (e) => {
3482
- const t = D();
3483
- if (!O(t) || !t.isCollapsed()) return null;
3484
- const n = t.anchor, r = n.getNode();
3485
- if (Lt(r)) return r;
3486
- if (!(r instanceof Y)) return null;
3487
- const o = r.getTextContentSize(), a = r.getPreviousSibling(), s = r.getNextSibling(), l = tt(r) && n.offset === 1, d = e ? n.offset === 0 || l ? a : null : n.offset === o ? s : null;
3488
- return Lt(d) ? d : null;
3489
- }, Ml = (e, t, n) => {
3490
- const r = (a) => {
3491
- if (t()) return !1;
3492
- const s = xl(a);
3493
- return s ? (El(s, a), n(), !0) : !1;
3494
- }, o = (a, s) => {
3495
- const l = r(s);
3496
- return l && a.preventDefault(), l;
3497
- };
3498
- return [
3499
- e.registerCommand(
3500
- on,
3501
- (a) => o(a, !0),
3502
- G
3503
- ),
3504
- e.registerCommand(
3505
- an,
3506
- (a) => o(a, !1),
3507
- G
3508
- ),
3509
- e.registerCommand(
3510
- sn,
3511
- (a) => r(a),
3512
- G
3513
- )
3514
- ];
3515
- }, Tl = /(?:^|\s)@([\p{L}\p{N}_-]*)$/u, qt = [
3516
- { id: "bridgerte-team", label: "BridgeRTE Team", value: "bridgerte-team" },
3517
- { id: "frontend", label: "Frontend", value: "frontend" },
3518
- { id: "designer", label: "Designer", value: "designer" }
3519
- ], Ll = (e) => e.trim().toLowerCase(), Sl = (e) => [e.label, e.value, e.description].filter(Boolean).join(" ").toLowerCase(), Nl = (e) => {
3520
- const t = Ll(e);
3521
- return t ? qt.filter((n) => Sl(n).includes(t)) : qt;
3522
- }, Pl = () => {
3523
- const e = D();
3524
- if (!O(e) || !e.isCollapsed()) return null;
3525
- const t = e.anchor, n = t.getNode();
3526
- if (!(n instanceof Y)) return null;
3527
- const o = n.getTextContent().slice(0, t.offset).match(Tl);
3528
- if (!o) return null;
3529
- const a = o[1] ?? "", s = o[0] ?? "", l = s.startsWith("@") ? 0 : 1, d = t.offset - s.length + l;
3530
- return {
3531
- query: a,
3532
- nodeKey: n.getKey(),
3533
- startOffset: d,
3534
- endOffset: t.offset
3535
- };
3536
- }, Il = () => {
3537
- const e = document.createElement("div");
3538
- return e.className = "bridgerte__floating-menu bridgerte__mention-menu", e.dataset.visible = "false", e;
3539
- }, Rl = () => {
3540
- const e = document.createElement("span");
3541
- return e.className = "bridgerte__mention-anchor", e.setAttribute("aria-hidden", "true"), e;
3542
- }, Al = (e, t) => {
3543
- var s;
3544
- const n = e.getElementByKey(t.nodeKey), r = ut(n, t.startOffset + 1);
3545
- if (!(r instanceof Text)) return null;
3546
- const o = document.createRange(), a = Math.min(t.startOffset + 1, ((s = r.textContent) == null ? void 0 : s.length) ?? 0);
3547
- return a <= t.startOffset ? null : (o.setStart(r, t.startOffset), o.setEnd(r, a), o.getBoundingClientRect());
3548
- }, Bl = (e, t, n) => {
3549
- const r = document.createElement("button"), o = document.createElement("span");
3550
- 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) {
3551
- const a = document.createElement("img");
3552
- a.className = "bridgerte__mention-item-avatar", a.src = e.avatar, a.alt = "", a.setAttribute("aria-hidden", "true"), r.append(a);
3553
- } else if (e.icon) {
3554
- const a = document.createElement("span");
3555
- a.className = "bridgerte__mention-item-icon", a.setAttribute("aria-hidden", "true"), a.textContent = e.icon, r.append(a);
3556
- }
3557
- if (o.className = "bridgerte__mention-item-title", o.textContent = e.label, r.append(o), e.description) {
3558
- const a = document.createElement("span");
3559
- a.className = "bridgerte__mention-item-description", a.textContent = e.description, r.append(a);
3560
- }
3561
- return r;
3562
- }, Dl = (e, t) => {
3563
- const n = document.createElement("div");
3564
- return n.className = "bridgerte__mention-status", n.dataset.status = e, n.textContent = t, n;
3565
- }, Hl = (e, t) => {
3566
- switch (e) {
3567
- case "loading":
3568
- return t.loadingText;
3569
- case "empty":
3570
- return t.emptyText;
3571
- case "error":
3572
- return t.errorText;
3573
- }
3574
- }, Ol = (e) => e ? {
3575
- x: e.x,
3576
- y: e.y,
3577
- width: e.width,
3578
- height: e.height
3579
- } : void 0, $l = ({
3580
- editorRoot: e,
3581
- contentElement: t,
3582
- editor: n,
3583
- isReadonly: r,
3584
- executeCommand: o,
3585
- mentionProvider: a,
3586
- mentionMenuConfig: s,
3587
- onMentionMenuRequest: l
3588
- }) => {
3589
- const d = Il(), i = Rl(), g = vl(s), v = (f, y) => {
3590
- n.update(() => {
3591
- const x = he(y.nodeKey);
3592
- x instanceof Y && (x.spliceText(y.startOffset, y.endOffset - y.startOffset, ""), x.select(y.startOffset, y.startOffset));
3593
- }), o({ type: "mention.insert", item: f });
3594
- }, b = er({
3595
- editorRoot: e,
3596
- contentElement: t,
3597
- editor: n,
3598
- isReadonly: r,
3599
- menu: d,
3600
- anchor: i,
3601
- itemSelector: ".bridgerte__mention-item",
3602
- getCurrentTrigger: Pl,
3603
- getTriggerRect: (f) => Al(n, f),
3604
- resolveItems: async (f) => {
3605
- const y = await Promise.resolve(
3606
- a ? a(f) : Nl(f)
3607
- );
3608
- return _l(y, g);
3609
- },
3610
- renderItem: Bl,
3611
- renderStatus: (f) => Dl(
3612
- f,
3613
- Hl(f, g)
3614
- ),
3615
- onStateChange: l ? (f, y) => l({
3616
- id: `bridgerte-mention-menu-${f.requestId}`,
3617
- query: f.trigger.query,
3618
- status: f.status,
3619
- items: f.items,
3620
- config: g,
3621
- readonly: r(),
3622
- anchorRect: Ol(y.anchorRect),
3623
- ...f.error ? { error: f.error } : {},
3624
- submit: (x) => y.selectItem(
3625
- tr(x, g)
3626
- ),
3627
- cancel: y.close
3628
- }) : void 0,
3629
- onSelect: (f, y) => v(f.item, y)
3630
- }), T = dn(
3631
- ...Ml(n, r, () => b.close(!1))
3632
- );
3633
- return () => {
3634
- T(), b.destroy();
3635
- };
3636
- }, Fl = [
3637
- "script",
3638
- "style",
3639
- "iframe",
3640
- "object",
3641
- "embed",
3642
- "meta",
3643
- "link",
3644
- "xml",
3645
- "svg",
3646
- "math",
3647
- "canvas",
3648
- "form",
3649
- "input",
3650
- "button",
3651
- "select",
3652
- "textarea"
3653
- ].join(","), zl = [
3654
- ".bridgerte__code-header",
3655
- ".bridgerte__code-block-controls",
3656
- ".bridgerte__code-block-control-button",
3657
- ".bridgerte__code-block-control",
3658
- ".bridgerte__code-block-controls-layer",
3659
- ".bridgerte__code-block-menu",
3660
- ".bridgerte__table-controls-layer",
3661
- ".bridgerte__table-controls",
3662
- ".bridgerte__media-controls-layer",
3663
- ".bridgerte__media-controls",
3664
- ".bridgerte__dialog-backdrop",
3665
- ".bridgerte__dialog",
3666
- ".bridgerte__payload-panel",
3667
- '[data-bridgerte-clipboard-ui="true"]'
3668
- ].join(","), Vl = /* @__PURE__ */ new Set([
3669
- "A",
3670
- "B",
3671
- "BLOCKQUOTE",
3672
- "BR",
3673
- "CODE",
3674
- "DEL",
3675
- "DIV",
3676
- "EM",
3677
- "H1",
3678
- "H2",
3679
- "H3",
3680
- "H4",
3681
- "H5",
3682
- "H6",
3683
- "FONT",
3684
- "I",
3685
- "LI",
3686
- "OL",
3687
- "P",
3688
- "PRE",
3689
- "S",
3690
- "SPAN",
3691
- "STRIKE",
3692
- "STRONG",
3693
- "SUB",
3694
- "SUP",
3695
- "TABLE",
3696
- "TBODY",
3697
- "TFOOT",
3698
- "TD",
3699
- "TH",
3700
- "THEAD",
3701
- "TR",
3702
- "TT",
3703
- "U",
3704
- "UL"
3705
- ]), Wl = /* @__PURE__ */ new Set(["http:", "https:", "mailto:"]), Ul = "p,div,blockquote,pre,h1,h2,h3,h4,h5,h6,ul,ol,table", jl = "p,blockquote,pre,h1,h2,h3,h4,h5,h6,ul,ol,table", Kl = /* @__PURE__ */ new Set(["colspan", "rowspan"]), ql = /* @__PURE__ */ new Set(["TD", "TH"]), Gl = /* @__PURE__ */ new Set(["M", "O", "V", "W"]), Xl = /* @__PURE__ */ new Set(["SPAN"]), Yl = /* @__PURE__ */ new Set(["color", "background-color"]), Jl = /^#([\da-f]{3}|[\da-f]{6}|[\da-f]{8})$/i, Gt = /* @__PURE__ */ new Map([
3706
- ["B", "strong"],
3707
- ["DEL", "s"],
3708
- ["I", "em"],
3709
- ["STRIKE", "s"],
3710
- ["TT", "code"]
3711
- ]), Ql = (e) => {
3712
- try {
3713
- const t = new URL(e, window.location.href);
3714
- return Wl.has(t.protocol);
3715
- } catch {
3716
- return !1;
3717
- }
3718
- }, mt = (e) => {
3719
- e.replaceWith(...e.childNodes);
3720
- }, gt = (e, t) => {
3721
- const n = e.ownerDocument.createElement(t);
3722
- return n.append(...e.childNodes), e.replaceWith(n), n;
3723
- }, Zl = (e) => {
3724
- const t = e.tagName.split(":")[0] ?? "";
3725
- return e.tagName.includes(":") && Gl.has(t);
3726
- }, nr = (e) => {
3727
- [...e.childNodes].forEach((t) => {
3728
- if (t.nodeType === Node.COMMENT_NODE) {
3729
- t.remove();
3730
- return;
3731
- }
3732
- nr(t);
3733
- });
3734
- }, rr = (e) => {
3735
- [...e.childNodes].forEach((t) => {
3736
- if (t.nodeType === Node.TEXT_NODE) {
3737
- const n = t.parentElement, r = !!(n != null && n.closest("pre,code,textarea")), o = (t.textContent ?? "").replace(/[\u200B-\u200D\uFEFF]/g, "").replace(/\u00A0/g, r ? " " : " ");
3738
- if (r) {
3739
- t.textContent = o;
3740
- return;
3741
- }
3742
- let a = o.replace(/\s+/g, " ");
3743
- t.previousSibling || (a = a.trimStart()), t.nextSibling || (a = a.trimEnd()), t.textContent = a;
3744
- return;
3745
- }
3746
- rr(t);
3747
- });
3748
- }, ec = (e) => /^[1-9]\d*$/.test(e.trim()), ht = (e) => {
3749
- const t = e.trim().toLowerCase(), [, n] = t.match(Jl) ?? [];
3750
- return n ? n.length === 8 ? `#${n.slice(2)}` : t : null;
3751
- }, tc = (e, t) => {
3752
- if (!Xl.has(e)) return null;
3753
- const n = t.split(";").flatMap((r) => {
3754
- const [o, ...a] = r.split(":"), s = o == null ? void 0 : o.trim().toLowerCase(), l = ht(a.join(":"));
3755
- return !s || !l || !Yl.has(s) ? [] : [`${s}: ${l}`];
3756
- });
3757
- return n.length > 0 ? `${n.join("; ")};` : null;
3758
- }, nc = (e) => {
3759
- if (Zl(e)) {
3760
- e.remove();
3761
- return;
3762
- }
3763
- if (!Vl.has(e.tagName)) {
3764
- mt(e);
3765
- return;
3766
- }
3767
- [...e.attributes].forEach((t) => {
3768
- const n = t.name.toLowerCase();
3769
- if (n.startsWith("on")) {
3770
- e.removeAttribute(t.name);
3771
- return;
3772
- }
3773
- if (n === "style") {
3774
- const r = tc(e.tagName, t.value);
3775
- if (r) {
3776
- e.setAttribute(t.name, r);
3777
- return;
3778
- }
3779
- e.removeAttribute(t.name);
3780
- return;
3781
- }
3782
- if (e.tagName === "A" && n === "href") {
3783
- if (Ql(t.value)) return;
3784
- e.removeAttribute(t.name);
3785
- return;
3786
- }
3787
- if (!(e.tagName === "A" && ["target", "rel", "title"].includes(n))) {
3788
- if (e.tagName === "PRE" && n === He) {
3789
- const r = ne(t.value);
3790
- if (r) {
3791
- e.setAttribute(t.name, r);
3792
- return;
3793
- }
3794
- e.removeAttribute(t.name);
3795
- return;
3796
- }
3797
- if (e.tagName === "FONT" && n === "color") {
3798
- if (ht(t.value)) return;
3799
- e.removeAttribute(t.name);
3800
- return;
3801
- }
3802
- ql.has(e.tagName) && Kl.has(n) && ec(t.value) || e.removeAttribute(t.name);
3803
- }
3804
- });
3805
- }, rc = (e) => {
3806
- [...e.querySelectorAll("font")].forEach((t) => {
3807
- const n = t.getAttribute("color"), r = n ? ht(n) : null, o = gt(t, "span");
3808
- r && o.setAttribute("style", `color: ${r};`);
3809
- });
3810
- }, oc = (e) => {
3811
- [...e.querySelectorAll([...Gt.keys()].join(","))].forEach((t) => {
3812
- const n = Gt.get(t.tagName);
3813
- n && gt(t, n);
3814
- });
3815
- }, ac = (e) => {
3816
- [...e.querySelectorAll("div")].reverse().forEach((t) => {
3817
- if (t.querySelector(jl)) {
3818
- mt(t);
3819
- return;
3820
- }
3821
- gt(t, "p");
3822
- });
3823
- }, sc = (e) => {
3824
- [...e.querySelectorAll("span")].forEach((t) => {
3825
- t.attributes.length === 0 && mt(t);
3826
- });
3827
- }, ic = (e) => !["P", "DIV", "SPAN"].includes(e.tagName) || e.querySelector("br,table,ul,ol") ? !1 : !(e.textContent ?? "").trim(), Xt = (e) => {
3828
- [...e.querySelectorAll("p,div,span")].reverse().forEach((t) => {
3829
- ic(t) && t.remove();
3830
- });
3831
- }, lc = (e) => {
3832
- var t;
3833
- return e.nodeType === Node.TEXT_NODE ? !!((t = e.textContent) != null && t.trim()) : e.nodeType !== Node.ELEMENT_NODE ? !1 : !e.matches(Ul);
3834
- }, cc = (e) => {
3835
- let t = [];
3836
- const n = () => {
3837
- if (t.length === 0) return;
3838
- const r = e.ownerDocument.createElement("p"), o = t[0];
3839
- o && (e.insertBefore(r, o), t.forEach((a) => {
3840
- r.append(a);
3841
- }), t = []);
3842
- };
3843
- [...e.childNodes].forEach((r) => {
3844
- var o;
3845
- if (r.nodeType === Node.TEXT_NODE && !((o = r.textContent) != null && o.trim())) {
3846
- r.remove();
3847
- return;
3848
- }
3849
- if (lc(r)) {
3850
- t.push(r);
3851
- return;
3852
- }
3853
- n();
3854
- }), n();
3855
- }, dc = (e) => {
3856
- const t = document.createElement("template");
3857
- t.innerHTML = e, t.content.querySelectorAll(Fl).forEach((r) => {
3858
- r.remove();
3859
- }), t.content.querySelectorAll(zl).forEach((r) => {
3860
- r.remove();
3861
- }), nr(t.content), gs(t.content), [...t.content.querySelectorAll("*")].forEach(nc), rr(t.content), rc(t.content), oc(t.content), ac(t.content), sc(t.content), Xt(t.content);
3862
- const n = document.createElement("div");
3863
- return n.append(t.content.cloneNode(!0)), cc(n), Xt(n), n.innerHTML;
3864
- }, uc = /^https?:\/\/[^\s<>"']+\.[^\s<>"']+$/i, mc = /^www\.[^\s<>"']+\.[^\s<>"']+$/i, gc = new RegExp(
3865
- `^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+(?:/[^\\s<>"']*)?$`,
3866
- "i"
3867
- ), hc = /^[^\s@]+@[^\s@]+\.[^\s@]+$/i, pc = /^\s*```([a-z0-9_+#.-]+)\s*\n([\s\S]*?)\n?```\s*$/i, fc = (e) => e.type.startsWith("image/") ? "image" : e.type.startsWith("video/") ? "video" : null, or = (e) => e ? [...e].flatMap((t) => {
3868
- const n = fc(t);
3869
- return n ? [{ type: n, file: t }] : [];
3870
- }) : [], Oe = (e) => ({
3871
- text: (e == null ? void 0 : e.getData("text/plain")) ?? "",
3872
- html: (e == null ? void 0 : e.getData("text/html")) ?? "",
3873
- files: e != null && e.files ? [...e.files] : []
3874
- }), bc = (e) => ({
3875
- name: e.name,
3876
- mimeType: e.type || void 0,
3877
- size: e.size,
3878
- data: e
3879
- }), yc = (e) => {
3880
- const [, t, n] = e.replace(/\r\n/g, `
3881
- `).match(pc) ?? [], r = ne(t);
3882
- return n !== void 0 && r !== null ? { code: n, language: r } : null;
3883
- }, vc = (e) => {
3884
- const t = e.trim();
3885
- return !t || /\s/.test(t) || t.includes("<") || t.includes(">") || /^[a-z][a-z0-9+.-]*:/i.test(t) && !/^https?:\/\//i.test(t) || hc.test(t) ? !1 : uc.test(t) || mc.test(t) || gc.test(t);
3886
- }, ar = (e, {
3887
- isReadonly: t,
3888
- executeCommand: n
3889
- }) => t() || !vc(e.text) ? !1 : (n({
3890
- type: "link.set",
3891
- href: e.text.trim()
3892
- }), !0), nt = (e, {
3893
- isReadonly: t,
3894
- canUploadMedia: n,
3895
- uploadMediaFile: r
3896
- }) => {
3897
- if (t() || !n()) return !1;
3898
- const o = or(e.files);
3899
- return o.length === 0 ? !1 : (o.forEach(({ type: a, file: s }) => {
3900
- r(a, s);
3901
- }), !0);
3902
- }, wc = (e, t) => {
3903
- const r = new DOMParser().parseFromString(t, "text/html");
3904
- hs(r.body);
3905
- const o = fn(e, r);
3906
- return ps(o, r.body), o;
3907
- }, Cc = (e, t) => {
3908
- const n = wc(e, t);
3909
- if (n.length === 0) return !1;
3910
- if (D() || F().selectEnd(), n.some(X)) {
3911
- n.forEach((o) => {
3912
- bn(o);
3913
- });
3914
- const r = n[n.length - 1];
3915
- return r && X(r) && W([z()]), !0;
3916
- }
3917
- return W(n), !0;
3918
- }, _c = (e, {
3919
- editor: t,
3920
- isReadonly: n
3921
- }) => {
3922
- if (n()) return !1;
3923
- if (!e.html.trim()) return Ec(e, { editor: t, isReadonly: n });
3924
- const r = dc(e.html);
3925
- return r.trim() ? (t.update(() => {
3926
- Cc(t, r);
3927
- }), !0) : !1;
3928
- }, kc = (e, {
3929
- editor: t,
3930
- isReadonly: n
3931
- }) => {
3932
- if (n() || e.html.trim() || !e.text.trim()) return !1;
3933
- const r = yc(e.text);
3934
- return r ? (t.update(() => {
3935
- const o = Bn(r.language || void 0), a = z();
3936
- D() || F().selectEnd(), o.append(Be(r.code)), bn(o), W([a]), a.selectStart();
3937
- }), !0) : !1;
3938
- }, Ec = (e, {
3939
- editor: t,
3940
- isReadonly: n
3941
- }) => n() || e.html.trim() || !e.text ? !1 : (t.update(() => {
3942
- D() || F().selectEnd(), W([Be(e.text)]);
3943
- }), !0), sr = (e, t) => kc(e, t) || _c(e, t), te = (e) => {
3944
- e.preventDefault(), e.stopImmediatePropagation();
3945
- }, xc = (e, t) => nt(e, t) || ar(e, t) || sr(e, t), Mc = (e) => {
3946
- const t = (n) => {
3947
- n.defaultPrevented || ar(Oe(n.clipboardData), e) && te(n);
3948
- };
3949
- return e.target.addEventListener("paste", t, { capture: !0 }), () => {
3950
- e.target.removeEventListener("paste", t, { capture: !0 });
3951
- };
3952
- }, Tc = (e) => {
3953
- const t = (o) => {
3954
- o.defaultPrevented || nt(Oe(o.clipboardData), e) && te(o);
3955
- }, n = (o) => {
3956
- var s;
3957
- if (e.isReadonly() || !e.canUploadMedia()) return;
3958
- const a = (s = o.dataTransfer) != null && s.files ? [...o.dataTransfer.files] : [];
3959
- or(a).length !== 0 && (o.preventDefault(), o.dataTransfer && (o.dataTransfer.dropEffect = "copy"));
3960
- }, r = (o) => {
3961
- var s;
3962
- const a = {
3963
- files: (s = o.dataTransfer) != null && s.files ? [...o.dataTransfer.files] : []
3964
- };
3965
- nt(a, e) && te(o);
3966
- };
3967
- return e.target.addEventListener("paste", t, { capture: !0 }), e.target.addEventListener("dragover", n), e.target.addEventListener("drop", r), () => {
3968
- e.target.removeEventListener("paste", t, { capture: !0 }), e.target.removeEventListener("dragover", n), e.target.removeEventListener("drop", r);
3969
- };
3970
- }, Lc = (e) => {
3971
- const t = (n) => {
3972
- n.defaultPrevented || !sr(Oe(n.clipboardData), e) || te(n);
3973
- };
3974
- return e.target.addEventListener("paste", t, { capture: !0 }), () => {
3975
- e.target.removeEventListener("paste", t, { capture: !0 });
3976
- };
3977
- }, Sc = ({
3978
- target: e,
3979
- isReadonly: t,
3980
- onPaste: n,
3981
- canUploadMedia: r,
3982
- uploadMediaFile: o,
3983
- executeCommand: a,
3984
- editor: s
3985
- }) => {
3986
- const l = (i, g) => xc({
3987
- text: g.text ?? i.text,
3988
- html: g.html ?? i.html,
3989
- files: i.files
3990
- }, {
3991
- isReadonly: t,
3992
- canUploadMedia: r,
3993
- uploadMediaFile: o,
3994
- executeCommand: a,
3995
- editor: s
3996
- }), d = (i) => {
3997
- if (t() || !n) return;
3998
- const g = Oe(i.clipboardData), v = n({
3999
- text: g.text,
4000
- html: g.html,
4001
- files: g.files.map(bc)
4002
- });
4003
- if (v instanceof Promise) {
4004
- te(i), v.then((b) => {
4005
- b !== !0 && b && l(g, b);
4006
- });
4007
- return;
4008
- }
4009
- if (v === !0) {
4010
- te(i);
4011
- return;
4012
- }
4013
- v && (te(i), l(g, v));
4014
- };
4015
- return e.addEventListener("paste", d, { capture: !0 }), () => {
4016
- e.removeEventListener("paste", d, { capture: !0 });
4017
- };
4018
- }, Nc = (e) => e.getKey() === "root" ? null : e.getTopLevelElement(), Pc = (e, t, n) => {
4019
- const r = e.getLastDescendant();
4020
- return ie(t) ? t === e && n === e.getChildrenSize() : r ? t === r && n === t.getTextContentSize() : !0;
4021
- }, Ic = (e) => {
4022
- const t = e.getLastChild();
4023
- return un(t);
4024
- }, Rc = (e) => {
4025
- const t = z(), n = e.getLastChild();
4026
- un(n) && n.remove(), e.insertAfter(t), t.selectStart();
4027
- }, Ac = (e, t) => {
4028
- const n = () => {
4029
- if (t()) return !1;
4030
- const r = D();
4031
- if (!O(r) || !r.isCollapsed()) return !1;
4032
- const o = r.anchor, a = o.getNode(), s = Nc(a);
4033
- return !mn(s) || !Pc(s, a, o.offset) ? !1 : Ic(s) ? (Rc(s), !0) : (r.insertLineBreak(), !0);
4034
- };
4035
- return [
4036
- e.registerCommand(
4037
- Tr,
4038
- n,
4039
- G
4040
- ),
4041
- e.registerCommand(
4042
- Lr,
4043
- (r) => r ? !1 : n(),
4044
- G
4045
- )
4046
- ];
4047
- }, Bc = [
4048
- "paragraph",
4049
- "heading-1",
4050
- "heading-2",
4051
- "heading-3",
4052
- "quote",
4053
- "code-block",
4054
- "ordered-list",
4055
- "unordered-list",
4056
- "todo-list",
4057
- "divider",
4058
- "upload-image",
4059
- "upload-video",
4060
- "table"
4061
- ], Dc = {
4062
- showIcon: !0,
4063
- loadingText: "加载中",
4064
- emptyText: "没有匹配的命令",
4065
- errorText: "命令加载失败"
4066
- }, Hc = (e) => ({
4067
- ...Dc,
4068
- ...e
4069
- }), Oc = (e) => e.flatMap((t) => t.type === "button" ? [t.item] : t.type === "group" ? t.items : []), $c = (e) => ({
4070
- ...e,
4071
- toolbarKeys: (e == null ? void 0 : e.toolbarKeys) ?? Bc
4072
- }), Fc = (e) => ({
4073
- id: e.id,
4074
- label: e.label,
4075
- command: e.command,
4076
- icon: e.icon,
4077
- requiresPayload: e.requiresPayload,
4078
- payloadPanel: e.payloadPanel,
4079
- source: "schema"
4080
- }), zc = (e, t) => Oc(ot(
4081
- $c(t),
4082
- e
4083
- )).map(Fc), ir = (e) => ({
4084
- ...e,
4085
- source: "provider"
4086
- }), Vc = /(?:^|\s)\/([\p{L}\p{N}_-]*)$/u, Wc = (e) => e.trim().toLowerCase(), Uc = (e) => [e.label, e.id, e.description, ...e.keywords ?? []].filter(Boolean).join(" ").toLowerCase(), jc = (e, t) => {
4087
- const n = Wc(t);
4088
- return n ? e.filter((r) => Uc(r).includes(n)) : e;
4089
- }, Kc = async (e, t) => (await Promise.resolve((t == null ? void 0 : t(e)) ?? [])).map(ir), qc = (e) => "source" in e ? e : ir(e), Gc = ({
4090
- menuSchema: e,
4091
- slashCommandConfig: t
4092
- }) => e !== void 0 || t !== void 0, Xc = () => {
4093
- const e = D();
4094
- if (!O(e) || !e.isCollapsed()) return null;
4095
- const t = e.anchor, n = t.getNode();
4096
- if (!(n instanceof Y)) return null;
4097
- const o = n.getTextContent().slice(0, t.offset).match(Vc);
4098
- if (!o) return null;
4099
- const a = o[1] ?? "", s = o[0] ?? "", l = s.startsWith("/") ? 0 : 1, d = t.offset - s.length + l;
4100
- return {
4101
- query: a,
4102
- nodeKey: n.getKey(),
4103
- startOffset: d,
4104
- endOffset: t.offset
4105
- };
4106
- }, Yc = () => {
4107
- const e = document.createElement("div");
4108
- return e.className = "bridgerte__floating-menu bridgerte__slash-command-menu", e.dataset.visible = "false", e;
4109
- }, Jc = () => {
4110
- const e = document.createElement("span");
4111
- return e.className = "bridgerte__slash-command-anchor", e.setAttribute("aria-hidden", "true"), e;
4112
- }, Yt = (e, t) => {
4113
- var s;
4114
- const n = e.getElementByKey(t.nodeKey), r = ut(n, t.startOffset + 1);
4115
- if (!(r instanceof Text)) return null;
4116
- const o = document.createRange(), a = Math.min(t.startOffset + 1, ((s = r.textContent) == null ? void 0 : s.length) ?? 0);
4117
- return a <= t.startOffset ? null : (o.setStart(r, t.startOffset), o.setEnd(r, a), o.getBoundingClientRect());
4118
- }, Qc = (e, t, n, r, o) => {
4119
- const a = document.createElement("button"), s = document.createElement("span");
4120
- if (a.type = "button", a.className = "bridgerte__menu-item bridgerte__slash-command-item", a.dataset.commandId = e.id, a.dataset.index = String(t), a.dataset.active = String(n), r.showIcon && e.icon) {
4121
- const l = document.createElement("span");
4122
- l.className = "bridgerte__slash-command-item-icon", l.setAttribute("aria-hidden", "true"), Zn(l, o[e.icon] ?? Qn[e.icon], e.label), a.append(l);
4123
- }
4124
- if (s.className = "bridgerte__slash-command-item-title", s.textContent = e.label, a.append(s), e.description) {
4125
- const l = document.createElement("span");
4126
- l.className = "bridgerte__slash-command-item-description", l.textContent = e.description, a.append(l);
4127
- }
4128
- return a;
4129
- }, Zc = (e, t) => {
4130
- const n = document.createElement("div");
4131
- return n.className = "bridgerte__slash-command-status", n.dataset.status = e, n.textContent = t, n;
4132
- }, ed = (e, t) => {
4133
- switch (e) {
4134
- case "loading":
4135
- return t.loadingText;
4136
- case "empty":
4137
- return t.emptyText;
4138
- case "error":
4139
- return t.errorText;
4140
- }
4141
- }, Jt = (e) => e ? {
4142
- x: e.x,
4143
- y: e.y,
4144
- width: e.width,
4145
- height: e.height
4146
- } : void 0, td = ({
4147
- editorRoot: e,
4148
- contentElement: t,
4149
- editor: n,
4150
- isReadonly: r,
4151
- executeCommand: o,
4152
- requestPayloadPanel: a,
4153
- menuSchema: s,
4154
- slashCommandConfig: l,
4155
- icons: d = {},
4156
- menuLabels: i,
4157
- payloadPanelConfig: g,
4158
- slashCommandMenuConfig: v,
4159
- onSlashCommandMenuRequest: b,
4160
- slashCommandProvider: T
4161
- }) => {
4162
- const f = Yc(), y = Jc(), x = Hc(v), u = dt(s ?? De, {
4163
- menuLabels: i,
4164
- payloadPanelConfig: g
4165
- }), p = zc(u, l), E = new Map(u.map((c) => [c.id, c])), _ = Gc({
4166
- menuSchema: s,
4167
- slashCommandConfig: l
4168
- }), B = (c) => {
4169
- n.update(() => {
4170
- const h = he(c.nodeKey);
4171
- h instanceof Y && (h.spliceText(c.startOffset, c.endOffset - c.startOffset, ""), h.select(c.startOffset, c.startOffset));
4172
- });
4173
- };
4174
- return er({
4175
- editorRoot: e,
4176
- contentElement: t,
4177
- editor: n,
4178
- isReadonly: r,
4179
- menu: f,
4180
- anchor: y,
4181
- itemSelector: ".bridgerte__slash-command-item",
4182
- getCurrentTrigger: Xc,
4183
- getTriggerRect: (c) => Yt(n, c),
4184
- resolveItems: async (c) => {
4185
- const h = _ || !T ? jc(p, c) : [];
4186
- try {
4187
- const m = await Kc(c, T);
4188
- return [...h, ...m];
4189
- } catch (m) {
4190
- if (h.length > 0) return h;
4191
- throw m;
4192
- }
4193
- },
4194
- renderItem: (c, h, m) => Qc(
4195
- c,
4196
- h,
4197
- m,
4198
- x,
4199
- d
4200
- ),
4201
- renderStatus: (c) => Zc(
4202
- c,
4203
- ed(c, x)
4204
- ),
4205
- onStateChange: b ? (c, h) => b({
4206
- id: `bridgerte-slash-command-menu-${c.requestId}`,
4207
- query: c.trigger.query,
4208
- status: c.status,
4209
- items: c.items,
4210
- config: x,
4211
- readonly: r(),
4212
- anchorRect: Jt(h.anchorRect),
4213
- ...c.error ? { error: c.error } : {},
4214
- submit: (m) => h.selectItem(qc(m)),
4215
- cancel: h.close
4216
- }) : void 0,
4217
- onSelect: (c, h) => {
4218
- B(h);
4219
- const m = c.source === "schema" ? E.get(c.id) : void 0;
4220
- if (m != null && m.payloadPanel) {
4221
- const C = Yt(n, h);
4222
- a({
4223
- menuId: m.id,
4224
- command: m.command,
4225
- panel: m.payloadPanel,
4226
- anchorRect: Jt(C ?? void 0)
4227
- });
4228
- return;
4229
- }
4230
- o(c.command);
4231
- }
4232
- }).destroy;
4233
- }, Qt = 32, Ue = (e) => {
4234
- var t;
4235
- return e instanceof HTMLElement && e.getAttribute("role") === "checkbox" && ((t = e.parentElement) == null ? void 0 : t.classList.contains("bridgerte__list--todo")) === !0;
4236
- }, je = (e) => e instanceof HTMLElement ? e.closest('[role="checkbox"]') : null, nd = (e) => Sr(e), Zt = (e) => e.button === 0, Ke = (e, t) => {
4237
- const n = t.getBoundingClientRect();
4238
- return t.dir === "rtl" ? e.clientX >= n.right - Qt && e.clientX <= n.right : e.clientX >= n.left && e.clientX <= n.left + Qt;
4239
- }, en = (e) => {
4240
- e.preventDefault(), e.stopPropagation(), e.stopImmediatePropagation();
4241
- }, rd = ({
4242
- contentElement: e,
4243
- editor: t,
4244
- isReadonly: n
4245
- }) => {
4246
- let r = 0;
4247
- const o = (d) => {
4248
- if (n() || !Zt(d)) return;
4249
- const i = je(d.target);
4250
- !i || !Ue(i) || Ke(d, i) && en(d);
4251
- }, a = (d, i) => {
4252
- en(d), t.update(() => {
4253
- const g = nd(i);
4254
- Gr(g) && g.toggleChecked();
4255
- });
4256
- }, s = (d) => {
4257
- if (n() || !Zt(d) || Date.now() - r < 700) return;
4258
- const i = je(d.target);
4259
- !i || !Ue(i) || Ke(d, i) && a(d, i);
4260
- }, l = (d) => {
4261
- if (n() || d.pointerType !== "touch") return;
4262
- const i = je(d.target);
4263
- !i || !Ue(i) || Ke(d, i) && (r = Date.now(), a(d, i));
4264
- };
4265
- return e.addEventListener("pointerdown", o, !0), e.addEventListener("pointerup", l, !0), e.addEventListener("click", s, !0), () => {
4266
- e.removeEventListener("pointerdown", o, !0), e.removeEventListener("pointerup", l, !0), e.removeEventListener("click", s, !0);
4267
- };
4268
- }, qe = (e, t) => {
4269
- var n;
4270
- return ((n = e.floatingMenus) == null ? void 0 : n[t]) !== !1;
4271
- }, od = ({
4272
- options: e,
4273
- lexicalEditor: t,
4274
- editorRoot: n,
4275
- contentElement: r,
4276
- historyState: o,
4277
- isReadonly: a,
4278
- executeCommand: s,
4279
- requestPayloadPanel: l,
4280
- uploadMediaFile: d,
4281
- canUploadMedia: i,
4282
- syncAfterEditorUpdate: g,
4283
- refreshCommandStates: v,
4284
- getCommandStates: b,
4285
- setCanUndo: T,
4286
- setCanRedo: f,
4287
- enableKeyboardShortcuts: y
4288
- }) => {
4289
- const x = qe(e, "mention"), u = qe(e, "slash"), p = qe(e, "hoverbar"), E = dn(
4290
- /*
4291
- * 业务自定义 paste hook 最先看到原始剪贴板摘要;返回 undefined 时完全不拦截,
4292
- * 继续走 BridgeRTE 内置媒体、URL 和 HTML 清洗链路。
4293
- */
4294
- Sc({
4295
- target: r,
4296
- isReadonly: a,
4297
- onPaste: e.onPaste,
4298
- canUploadMedia: i,
4299
- uploadMediaFile: d,
4300
- executeCommand: s,
4301
- editor: t
4302
- }),
4303
- /*
4304
- * 媒体文件粘贴/拖拽优先于 URL 粘贴快速路径;剪贴板里有文件时直接进入上传管线,
4305
- * 没有文件再交给纯文本 URL 链接处理或 Lexical 默认粘贴。
4306
- */
4307
- Tc({
4308
- target: r,
4309
- isReadonly: a,
4310
- canUploadMedia: i,
4311
- uploadMediaFile: d
4312
- }),
4313
- /*
4314
- * URL 粘贴是 BridgeRTE 的高意图快捷路径,必须先于 Lexical 默认 paste 监听注册。
4315
- * 否则 Lexical 会先把 URL 当普通文本插入,后续就失去“选区变链接”的语义。
4316
- */
4317
- Mc({
4318
- target: r,
4319
- isReadonly: a,
4320
- executeCommand: s
4321
- }),
4322
- /*
4323
- * HTML 清洗放在媒体和纯文本 URL 之后、Lexical 默认 rich text paste 之前。
4324
- * 这样外部网页/办公软件片段会先进入 BridgeRTE 白名单清洗,再转成 Lexical 节点。
4325
- */
4326
- Lc({
4327
- target: r,
4328
- editor: t,
4329
- isReadonly: a
4330
- }),
4331
- tl({
4332
- target: r,
4333
- isReadonly: a
4334
- }),
4335
- Hr(t),
4336
- /*
4337
- * 代码块高亮一刀切使用 Lexical 官方 Shiki 管线。BridgeRTE tokenizer 只保留稳定 class,
4338
- * 不把 Shiki theme 的 inline style 写进内容 HTML。
4339
- */
4340
- No(t, ys),
4341
- bo(t, o, Za),
4342
- Xr(t),
4343
- Yr(t),
4344
- ...Ac(t, a),
4345
- ...oa(t, a),
4346
- rd({
4347
- contentElement: r,
4348
- editor: t,
4349
- isReadonly: a
4350
- }),
4351
- x ? $l({
4352
- editorRoot: n,
4353
- contentElement: r,
4354
- editor: t,
4355
- isReadonly: a,
4356
- executeCommand: s,
4357
- mentionProvider: e.mentionProvider,
4358
- mentionMenuConfig: e.mentionMenuConfig,
4359
- onMentionMenuRequest: e.onMentionMenuRequest
4360
- }) : () => {
4361
- },
4362
- p ? dl({
4363
- editorRoot: n,
4364
- contentElement: r,
4365
- editor: t,
4366
- isReadonly: a,
4367
- executeCommand: s,
4368
- requestPayloadPanel: l,
4369
- getCommandStates: b,
4370
- menuSchema: e.menuSchema,
4371
- hoverbarConfig: e.hoverbarConfig,
4372
- icons: e.icons,
4373
- menuLabels: e.menuLabels,
4374
- payloadPanelConfig: e.payloadPanelConfig
4375
- }) : () => {
4376
- },
4377
- io(t),
4378
- Yi({ editor: t }),
4379
- u ? td({
4380
- editorRoot: n,
4381
- contentElement: r,
4382
- editor: t,
4383
- isReadonly: a,
4384
- executeCommand: s,
4385
- requestPayloadPanel: l,
4386
- menuSchema: e.menuSchema,
4387
- slashCommandConfig: e.slashCommandConfig,
4388
- icons: e.icons,
4389
- menuLabels: e.menuLabels,
4390
- payloadPanelConfig: e.payloadPanelConfig,
4391
- slashCommandMenuConfig: e.slashCommandMenuConfig,
4392
- onSlashCommandMenuRequest: e.onSlashCommandMenuRequest,
4393
- slashCommandProvider: e.slashCommandProvider
4394
- }) : () => {
4395
- },
4396
- ua({
4397
- editor: t,
4398
- contentElement: r,
4399
- isReadonly: a
4400
- }),
4401
- y ? fl({
4402
- target: r,
4403
- isReadonly: a,
4404
- executeCommand: s
4405
- }) : () => {
4406
- },
4407
- t.registerUpdateListener(() => {
4408
- g(), v();
4409
- }),
4410
- t.registerCommand(
4411
- ln,
4412
- () => (v(), !1),
4413
- j
4414
- ),
4415
- t.registerCommand(
4416
- Nr,
4417
- (_) => (T(_), !1),
4418
- j
4419
- ),
4420
- t.registerCommand(
4421
- Pr,
4422
- (_) => (f(_), !1),
4423
- j
4424
- )
4425
- );
4426
- return {
4427
- destroy() {
4428
- E();
4429
- }
4430
- };
4431
- };
4432
- function ad(e, t = {}) {
4433
- const n = yo(), r = t.mediaDefaultWidthPercent ?? 50, { contentElement: o } = ji(e, {
4434
- placeholder: t.placeholder ?? la
4435
- }), a = t.keyboardShortcuts === !0;
4436
- let s = t.readonly ?? !1, l = !1, d = Ye(t.value);
4437
- const i = Ir({
4438
- namespace: es,
4439
- editable: !s,
4440
- nodes: [
4441
- Or,
4442
- $r,
4443
- gn,
4444
- Wr,
4445
- hn,
4446
- Jr,
4447
- Ge,
4448
- lo,
4449
- co,
4450
- po,
4451
- fo,
4452
- pe,
4453
- le,
4454
- ye
4455
- ],
4456
- theme: $a,
4457
- onError: (c) => {
4458
- K(t, "lexical.runtime", "Lexical runtime error.", c);
4459
- }
4460
- });
4461
- uo(i, !0);
4462
- const g = () => l, v = () => s, b = () => {
4463
- g() || da({ editor: i, contentElement: o });
4464
- }, T = Ki({ editor: i }), f = ts({
4465
- lexicalEditor: i,
4466
- options: t,
4467
- isDestroyed: g,
4468
- setContent: (c) => {
4469
- d = c;
4470
- },
4471
- syncPlaceholder: b
4472
- }), y = Sa({
4473
- lexicalEditor: i,
4474
- options: t,
4475
- isDestroyed: g,
4476
- canUploadMedia: () => t.uploadAdapter !== void 0,
4477
- isReadonly: v
4478
- }), x = Qa({
4479
- container: e,
4480
- lexicalEditor: i,
4481
- options: t,
4482
- isDestroyed: g,
4483
- isReadonly: v,
4484
- reportError: K
4485
- }), u = () => {
4486
- o.contentEditable = String(!s), i.setEditable(!s);
4487
- }, E = Ui({
4488
- editorRoot: e,
4489
- lexicalEditor: i,
4490
- isReadonly: v,
4491
- restoreEditorFocus: (c) => {
4492
- T.restore(), i.focus(c);
4493
- },
4494
- executeCommand: x,
4495
- getClearCommand: (c) => {
4496
- switch (c.command.type) {
4497
- case "format.color":
4498
- case "format.backgroundColor":
4499
- case "format.fontSize":
4500
- case "format.fontFamily":
4501
- case "format.lineHeight":
4502
- return { ...c.command, value: "" };
4503
- default:
4504
- return null;
4505
- }
4506
- },
4507
- codeBlockLanguagePanel: t.codeBlockLanguagePanel,
4508
- payloadPanelConfig: t.payloadPanelConfig,
4509
- mediaControlsConfig: t.mediaControlsConfig,
4510
- menuLabels: t.menuLabels,
4511
- onRequest: t.onPayloadPanelRequest,
4512
- defaultMediaWidthPercent: r
4513
- }), _ = () => Ma(t), B = () => Ta(t), H = (c) => {
4514
- g() || (T.capture(), E.payloadPanelController.open(c));
4515
- };
4516
- e.dataset.readonly = String(s), e.addEventListener("focusin", _), e.addEventListener("focusout", B), e.style.setProperty(
4517
- "--bridgerte-media-display-width",
4518
- `${r}%`
4519
- );
4520
- const I = od({
4521
- options: t,
4522
- lexicalEditor: i,
4523
- editorRoot: e,
4524
- contentElement: o,
4525
- historyState: n,
4526
- isReadonly: v,
4527
- executeCommand: x,
4528
- requestPayloadPanel: H,
4529
- uploadMediaFile: x.uploadMediaFile,
4530
- canUploadMedia: () => t.uploadAdapter !== void 0,
4531
- syncAfterEditorUpdate: f.syncAfterEditorUpdate,
4532
- refreshCommandStates: y.refreshCommandStates,
4533
- getCommandStates: y.getCommandStates,
4534
- setCanUndo: y.setCanUndo,
4535
- setCanRedo: y.setCanRedo,
4536
- enableKeyboardShortcuts: a
4537
- });
4538
- i.setRootElement(o), f.suppressNextChange(), d = Yo(i, t.value), u();
4539
- const w = {
4540
- getContent() {
4541
- return g() || (f.clearContentChangeTimer(), f.syncContent(!1)), d;
4542
- },
4543
- setContent(c) {
4544
- g() || (f.clearContentChangeTimer(), d = Ye(c), f.suppressNextChange(), Pn(i, d), f.enforceCurrentMaxLength(), b(), i.dispatchCommand(Rr, void 0), y.setHistoryAvailability(!1, !1), f.syncContent(!0));
4545
- },
4546
- executeCommand(c) {
4547
- x(c);
4548
- },
4549
- requestPayloadPanel: H,
4550
- getCommandStates: y.getCommandStates,
4551
- subscribeCommandStateChange: y.subscribeCommandStateChange,
4552
- setReadonly(c) {
4553
- g() || (s = c, e.dataset.readonly = String(s), u(), y.refreshCommandStates());
4554
- },
4555
- focus() {
4556
- g() || i.focus();
4557
- },
4558
- blur() {
4559
- g() || o.blur();
4560
- },
4561
- destroy() {
4562
- g() || (l = !0, f.clearContentChangeTimer(), E.destroy(), x.destroy(), y.destroy(), T.clear(), I.destroy(), i.setRootElement(null), e.removeEventListener("focusin", _), e.removeEventListener("focusout", B), e.classList.remove("bridgerte"), e.textContent = "", delete e.dataset.readonly);
4563
- }
4564
- };
4565
- return f.syncContent(!1), b(), y.refreshCommandStates(), La(t, w), w;
4566
- }
4567
- const sd = (e) => !ur(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", id = (e) => ({
4568
- id: e,
4569
- type: "editor.ready",
4570
- payload: {
4571
- menuSchema: De,
4572
- eventTiming: gr,
4573
- version: Ae
4574
- }
4575
- }), ld = (e) => `native-upload:${e}:${Date.now()}:${Math.random().toString(36).slice(2)}`, Md = ({
4576
- container: e,
4577
- transport: t
4578
- }) => {
4579
- var I;
4580
- let n = null, r = !1, o = null, a = null, s = null, l = 0;
4581
- const d = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), g = (w) => {
4582
- r || t.postMessage(w);
4583
- }, v = () => {
4584
- s && (clearTimeout(s), s = null);
4585
- }, b = () => {
4586
- v(), s = setTimeout(() => {
4587
- if (r) return;
4588
- const w = Math.ceil(e.getBoundingClientRect().height);
4589
- w !== l && (l = w, g({
4590
- type: "editor.heightChange",
4591
- payload: { height: w }
4592
- }));
4593
- }, mr);
4594
- }, T = (w) => {
4595
- if (!n) return;
4596
- const c = n.getContent();
4597
- g({
4598
- id: w,
4599
- type: "editor.content",
4600
- payload: c
4601
- }), g({
4602
- id: w,
4603
- type: "editor.contentChange",
4604
- payload: c
4605
- });
4606
- }, f = (w) => {
4607
- const c = w.payload, h = d.get(c.assetId);
4608
- if (h) {
4609
- if (d.delete(c.assetId), h.source === "uploadAdapter") {
4610
- h.resolve(c.result);
4611
- return;
4612
- }
4613
- n == null || n.executeCommand({
4614
- type: h.type === "image" ? "media.insertImage" : "media.insertVideo",
4615
- url: c.result.url,
4616
- poster: c.result.poster,
4617
- width: c.result.width,
4618
- height: c.result.height,
4619
- displayWidthPercent: 50,
4620
- assetId: c.assetId
4621
- });
4622
- }
4623
- }, y = (w) => {
4624
- const c = w.payload, h = d.get(c.assetId);
4625
- if (h) {
4626
- if (d.delete(c.assetId), h.source === "uploadAdapter") {
4627
- h.reject(new Error(c.message));
4628
- return;
4629
- }
4630
- g({
4631
- id: w.id,
4632
- type: "editor.error",
4633
- payload: {
4634
- code: "bridge.uploadRejected",
4635
- message: c.message
4636
- }
4637
- });
4638
- }
4639
- }, x = (w, c) => new Promise((h, m) => {
4640
- d.set(c, {
4641
- type: w,
4642
- assetId: c,
4643
- source: "uploadAdapter",
4644
- resolve: h,
4645
- reject: m
4646
- }), g({
4647
- type: "editor.uploadRequest",
4648
- payload: {
4649
- assetId: c,
4650
- type: w,
4651
- accept: w === "image" ? "image/*" : "video/*"
4652
- }
4653
- });
4654
- }), u = (w) => {
4655
- const c = ld(w);
4656
- d.set(c, {
4657
- type: w,
4658
- assetId: c,
4659
- source: "nativePicker"
4660
- }), g({
4661
- type: "editor.uploadRequest",
4662
- payload: {
4663
- assetId: c,
4664
- type: w,
4665
- accept: w === "image" ? "image/*" : "video/*"
4666
- }
4667
- });
4668
- }, p = (w) => {
4669
- const c = i.get(w.payload.requestId);
4670
- c && (i.delete(w.payload.requestId), c.request.submit(w.payload.values));
4671
- }, E = (w) => {
4672
- const c = i.get(w.payload.requestId);
4673
- c && (i.delete(w.payload.requestId), c.request.cancel());
4674
- }, _ = (w, c) => {
4675
- n == null || n.destroy(), o == null || o(), d.clear(), i.clear(), n = ad(e, {
4676
- ...c,
4677
- uploadAdapter: {
4678
- uploadImage(h, m) {
4679
- return x("image", m.assetId);
4680
- },
4681
- uploadVideo(h, m) {
4682
- return x("video", m.assetId);
4683
- }
4684
- },
4685
- onContentChange: (h) => {
4686
- g({
4687
- type: "editor.contentChange",
4688
- payload: h
4689
- }), b();
4690
- },
4691
- onCommandStateChange: (h) => {
4692
- g({
4693
- type: "editor.commandStateChange",
4694
- payload: h
4695
- });
4696
- },
4697
- onPayloadPanelRequest: (h) => (i.set(h.id, { request: h }), g({
4698
- type: "editor.payloadPanelRequest",
4699
- payload: {
4700
- menuId: h.menuId,
4701
- command: h.command,
4702
- panel: h.panel,
4703
- anchorRect: h.anchorRect,
4704
- currentValues: h.currentValues,
4705
- id: h.id,
4706
- readonly: h.readonly
4707
- }
4708
- }), !0),
4709
- onError: (h) => {
4710
- g({
4711
- type: "editor.error",
4712
- payload: h
4713
- });
4714
- }
4715
- }), o = n.subscribeCommandStateChange((h) => {
4716
- g({
4717
- type: "editor.commandStateChange",
4718
- payload: h
4719
- });
4720
- }), g(id(w)), b();
4721
- }, B = (w) => {
4722
- if (w.type === "media.pickImage") {
4723
- u("image");
4724
- return;
4725
- }
4726
- if (w.type === "media.pickVideo") {
4727
- u("video");
4728
- return;
4729
- }
4730
- n == null || n.executeCommand(w);
4731
- }, H = (w) => {
4732
- if (!(r || !sd(w)))
4733
- switch (w.type) {
4734
- case "editor.init":
4735
- _(w.id, w.payload);
4736
- return;
4737
- case "editor.executeCommand":
4738
- B(w.payload);
4739
- return;
4740
- case "editor.setContent":
4741
- n == null || n.setContent(w.payload);
4742
- return;
4743
- case "editor.setReadonly":
4744
- n == null || n.setReadonly(w.payload.readonly);
4745
- return;
4746
- case "editor.requestContent":
4747
- T(w.id);
4748
- return;
4749
- case "editor.payloadPanelResolved":
4750
- p(w);
4751
- return;
4752
- case "editor.payloadPanelCanceled":
4753
- E(w);
4754
- return;
4755
- case "editor.uploadResolved":
4756
- f(w);
4757
- return;
4758
- case "editor.uploadRejected":
4759
- y(w);
4760
- return;
4761
- }
4762
- };
4763
- return a = ((I = t.addMessageListener) == null ? void 0 : I.call(t, H)) ?? null, {
4764
- receive: H,
4765
- destroy() {
4766
- r || (r = !0, v(), a == null || a(), o == null || o(), d.clear(), i.clear(), n == null || n.destroy(), n = null);
4767
- }
4768
- };
4769
- };
4770
- export {
4771
- ad as a,
4772
- Md as b,
4773
- Jn as c,
4774
- Qn as d,
4775
- Zn as e,
4776
- U as f,
4777
- $s as g,
4778
- Os as h,
4779
- dt as r
4780
- };
4781
- //# sourceMappingURL=index-BJMFpGLi.js.map