@hkyhy/marsun-components-core 0.1.89 → 0.1.98

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 (278) hide show
  1. package/dist/components/Audit/AuditLogList.d.ts +27 -0
  2. package/dist/components/Audit/AuditLogList.js +272 -0
  3. package/dist/components/Audit/AuditLogList.js.map +1 -0
  4. package/dist/components/Audit/formatAuditCurl.d.ts +27 -0
  5. package/dist/components/Audit/formatAuditCurl.js +115 -0
  6. package/dist/components/Audit/formatAuditCurl.js.map +1 -0
  7. package/dist/components/Audit/formatAuditJson.d.ts +15 -0
  8. package/dist/components/Audit/formatAuditJson.js +135 -0
  9. package/dist/components/Audit/formatAuditJson.js.map +1 -0
  10. package/dist/components/Audit/index.d.ts +3 -0
  11. package/dist/components/Audit/style.module.scss.js +30 -0
  12. package/dist/components/Audit/style.module.scss.js.map +1 -0
  13. package/dist/components/Audit/types.d.ts +39 -0
  14. package/dist/components/Editor/RichTextEditor/RichTextEditor.d.ts +24 -0
  15. package/dist/components/Editor/RichTextEditor/RichTextEditor.js +93 -0
  16. package/dist/components/Editor/RichTextEditor/RichTextEditor.js.map +1 -0
  17. package/dist/components/Editor/RichTextEditor/index.d.ts +2 -0
  18. package/dist/components/Editor/RichTextEditor/style.module.scss.js +11 -0
  19. package/dist/components/Editor/RichTextEditor/style.module.scss.js.map +1 -0
  20. package/dist/components/Editor/VariablePicker.d.ts +19 -0
  21. package/dist/components/Editor/VariablePicker.js +55 -0
  22. package/dist/components/Editor/VariablePicker.js.map +1 -0
  23. package/dist/components/Editor/index.d.ts +7 -0
  24. package/dist/components/Editor/index.js +21 -0
  25. package/dist/components/Editor/index.js.map +1 -0
  26. package/dist/components/Editor/msgVarTokenPlugin.d.ts +13 -0
  27. package/dist/components/Editor/msgVarTokenPlugin.js +94 -0
  28. package/dist/components/Editor/msgVarTokenPlugin.js.map +1 -0
  29. package/dist/components/Editor/variableMention.d.ts +37 -0
  30. package/dist/components/Editor/variableMention.js +64 -0
  31. package/dist/components/Editor/variableMention.js.map +1 -0
  32. package/dist/components/FormInfo/RichTextField/index.d.ts +21 -0
  33. package/dist/components/FormInfo/RichTextField/index.js +82 -0
  34. package/dist/components/FormInfo/RichTextField/index.js.map +1 -0
  35. package/dist/components/FormInfo/RichTextField/style.module.scss.js +9 -0
  36. package/dist/components/FormInfo/RichTextField/style.module.scss.js.map +1 -0
  37. package/dist/components/FormInfo/VariableMentionInput/index.d.ts +17 -0
  38. package/dist/components/FormInfo/VariableMentionInput/index.js +73 -0
  39. package/dist/components/FormInfo/VariableMentionInput/index.js.map +1 -0
  40. package/dist/components/FormInfo/VariableMentionInput/style.module.scss.js +11 -0
  41. package/dist/components/FormInfo/VariableMentionInput/style.module.scss.js.map +1 -0
  42. package/dist/components/FormInfo/fields.d.ts +5 -0
  43. package/dist/components/FormInfo/fields.js +32 -23
  44. package/dist/components/FormInfo/fields.js.map +1 -1
  45. package/dist/components/FormInfo/index.d.ts +4 -0
  46. package/dist/components/StateBar/StateBar.d.ts +19 -6
  47. package/dist/components/StateBar/StateBar.js +87 -50
  48. package/dist/components/StateBar/StateBar.js.map +1 -1
  49. package/dist/components/StateBar/style.module.scss.js +13 -10
  50. package/dist/components/StateBar/style.module.scss.js.map +1 -1
  51. package/dist/components/Tools/Inbox/InboxBell/InboxBell.d.ts +45 -0
  52. package/dist/components/Tools/Inbox/InboxBell/InboxBell.js +156 -0
  53. package/dist/components/Tools/Inbox/InboxBell/InboxBell.js.map +1 -0
  54. package/dist/components/Tools/Inbox/InboxBell/index.d.ts +2 -0
  55. package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js +30 -0
  56. package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js.map +1 -0
  57. package/dist/components/Tools/Inbox/index.d.ts +2 -0
  58. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.d.ts +8 -0
  59. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.js +56 -0
  60. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.js.map +1 -0
  61. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.d.ts +8 -0
  62. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js +216 -0
  63. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js.map +1 -0
  64. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.d.ts +26 -0
  65. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.js +190 -0
  66. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.js.map +1 -0
  67. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/index.d.ts +3 -0
  68. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/style.module.scss.js +12 -0
  69. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/style.module.scss.js.map +1 -0
  70. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.d.ts +76 -0
  71. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js +26 -0
  72. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js.map +1 -0
  73. package/dist/components/Tools/MessageCenter/index.d.ts +3 -0
  74. package/dist/components/Tools/MessageCenter/utils/templateCode.d.ts +8 -0
  75. package/dist/components/Tools/MessageCenter/utils/templateCode.js +25 -0
  76. package/dist/components/Tools/MessageCenter/utils/templateCode.js.map +1 -0
  77. package/dist/components/Tools/index.d.ts +5 -0
  78. package/dist/components/index.d.ts +3 -0
  79. package/dist/editor.d.ts +5 -0
  80. package/dist/editor.js +21 -0
  81. package/dist/editor.js.map +1 -0
  82. package/dist/form-info.js +33 -29
  83. package/dist/form-info.js.map +1 -1
  84. package/dist/index.d.ts +5 -0
  85. package/dist/index.js +805 -773
  86. package/dist/index.js.map +1 -1
  87. package/dist/marsun-components-core.css +4 -1
  88. package/dist/node_modules/@ckeditor/ckeditor5-basic-styles/dist/index.js +301 -0
  89. package/dist/node_modules/@ckeditor/ckeditor5-basic-styles/dist/index.js.map +1 -0
  90. package/dist/node_modules/@ckeditor/ckeditor5-clipboard/dist/index.js +1256 -0
  91. package/dist/node_modules/@ckeditor/ckeditor5-clipboard/dist/index.js.map +1 -0
  92. package/dist/node_modules/@ckeditor/ckeditor5-core/dist/index.js +2107 -0
  93. package/dist/node_modules/@ckeditor/ckeditor5-core/dist/index.js.map +1 -0
  94. package/dist/node_modules/@ckeditor/ckeditor5-editor-classic/dist/index.js +259 -0
  95. package/dist/node_modules/@ckeditor/ckeditor5-editor-classic/dist/index.js.map +1 -0
  96. package/dist/node_modules/@ckeditor/ckeditor5-engine/dist/index.js +23990 -0
  97. package/dist/node_modules/@ckeditor/ckeditor5-engine/dist/index.js.map +1 -0
  98. package/dist/node_modules/@ckeditor/ckeditor5-enter/dist/index.js +249 -0
  99. package/dist/node_modules/@ckeditor/ckeditor5-enter/dist/index.js.map +1 -0
  100. package/dist/node_modules/@ckeditor/ckeditor5-essentials/dist/index.js +47 -0
  101. package/dist/node_modules/@ckeditor/ckeditor5-essentials/dist/index.js.map +1 -0
  102. package/dist/node_modules/@ckeditor/ckeditor5-font/dist/index.js +100 -0
  103. package/dist/node_modules/@ckeditor/ckeditor5-font/dist/index.js.map +1 -0
  104. package/dist/node_modules/@ckeditor/ckeditor5-icons/dist/index.js +31 -0
  105. package/dist/node_modules/@ckeditor/ckeditor5-icons/dist/index.js.map +1 -0
  106. package/dist/node_modules/@ckeditor/ckeditor5-integrations-common/dist/index.js +194 -0
  107. package/dist/node_modules/@ckeditor/ckeditor5-integrations-common/dist/index.js.map +1 -0
  108. package/dist/node_modules/@ckeditor/ckeditor5-list/dist/index.js +2042 -0
  109. package/dist/node_modules/@ckeditor/ckeditor5-list/dist/index.js.map +1 -0
  110. package/dist/node_modules/@ckeditor/ckeditor5-mention/dist/index.js +9 -0
  111. package/dist/node_modules/@ckeditor/ckeditor5-mention/dist/index.js.map +1 -0
  112. package/dist/node_modules/@ckeditor/ckeditor5-paragraph/dist/index.js +167 -0
  113. package/dist/node_modules/@ckeditor/ckeditor5-paragraph/dist/index.js.map +1 -0
  114. package/dist/node_modules/@ckeditor/ckeditor5-react/dist/index.js +471 -0
  115. package/dist/node_modules/@ckeditor/ckeditor5-react/dist/index.js.map +1 -0
  116. package/dist/node_modules/@ckeditor/ckeditor5-select-all/dist/index.js +139 -0
  117. package/dist/node_modules/@ckeditor/ckeditor5-select-all/dist/index.js.map +1 -0
  118. package/dist/node_modules/@ckeditor/ckeditor5-typing/dist/index.js +755 -0
  119. package/dist/node_modules/@ckeditor/ckeditor5-typing/dist/index.js.map +1 -0
  120. package/dist/node_modules/@ckeditor/ckeditor5-ui/dist/index.js +7838 -0
  121. package/dist/node_modules/@ckeditor/ckeditor5-ui/dist/index.js.map +1 -0
  122. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/conversions.js +422 -0
  123. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/conversions.js.map +1 -0
  124. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/index.js +33 -0
  125. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/index.js.map +1 -0
  126. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/route.js +47 -0
  127. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/route.js.map +1 -0
  128. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-name/index.js +156 -0
  129. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-name/index.js.map +1 -0
  130. package/dist/node_modules/@ckeditor/ckeditor5-undo/dist/index.js +313 -0
  131. package/dist/node_modules/@ckeditor/ckeditor5-undo/dist/index.js.map +1 -0
  132. package/dist/node_modules/@ckeditor/ckeditor5-utils/dist/index.js +2942 -0
  133. package/dist/node_modules/@ckeditor/ckeditor5-utils/dist/index.js.map +1 -0
  134. package/dist/node_modules/@ckeditor/ckeditor5-watchdog/dist/index.js +892 -0
  135. package/dist/node_modules/@ckeditor/ckeditor5-watchdog/dist/index.js.map +1 -0
  136. package/dist/node_modules/@ckeditor/ckeditor5-widget/dist/index.js +1047 -0
  137. package/dist/node_modules/@ckeditor/ckeditor5-widget/dist/index.js.map +1 -0
  138. package/dist/node_modules/color-parse/node_modules/color-name/index.js +153 -0
  139. package/dist/node_modules/color-parse/node_modules/color-name/index.js.map +1 -0
  140. package/dist/node_modules/es-toolkit/dist/_internal/globalThis.js +7 -0
  141. package/dist/node_modules/es-toolkit/dist/_internal/globalThis.js.map +1 -0
  142. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js +7 -0
  143. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js.map +1 -0
  144. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeToWriteProperty.js +7 -0
  145. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeToWriteProperty.js.map +1 -0
  146. package/dist/node_modules/es-toolkit/dist/compat/_internal/assignValue.js +9 -0
  147. package/dist/node_modules/es-toolkit/dist/compat/_internal/assignValue.js.map +1 -0
  148. package/dist/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js +7 -0
  149. package/dist/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js.map +1 -0
  150. package/dist/node_modules/es-toolkit/dist/compat/_internal/getTag.js +7 -0
  151. package/dist/node_modules/es-toolkit/dist/compat/_internal/getTag.js.map +1 -0
  152. package/dist/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js +16 -0
  153. package/dist/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js.map +1 -0
  154. package/dist/node_modules/es-toolkit/dist/compat/_internal/isIndex.js +15 -0
  155. package/dist/node_modules/es-toolkit/dist/compat/_internal/isIndex.js.map +1 -0
  156. package/dist/node_modules/es-toolkit/dist/compat/_internal/isKey.js +9 -0
  157. package/dist/node_modules/es-toolkit/dist/compat/_internal/isKey.js.map +1 -0
  158. package/dist/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js +8 -0
  159. package/dist/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js.map +1 -0
  160. package/dist/node_modules/es-toolkit/dist/compat/_internal/tags.js +30 -0
  161. package/dist/node_modules/es-toolkit/dist/compat/_internal/tags.js.map +1 -0
  162. package/dist/node_modules/es-toolkit/dist/compat/_internal/toKey.js +8 -0
  163. package/dist/node_modules/es-toolkit/dist/compat/_internal/toKey.js.map +1 -0
  164. package/dist/node_modules/es-toolkit/dist/compat/function/debounce.js +17 -0
  165. package/dist/node_modules/es-toolkit/dist/compat/function/debounce.js.map +1 -0
  166. package/dist/node_modules/es-toolkit/dist/compat/function/throttle.js +13 -0
  167. package/dist/node_modules/es-toolkit/dist/compat/function/throttle.js.map +1 -0
  168. package/dist/node_modules/es-toolkit/dist/compat/object/assignIn.js +17 -0
  169. package/dist/node_modules/es-toolkit/dist/compat/object/assignIn.js.map +1 -0
  170. package/dist/node_modules/es-toolkit/dist/compat/object/clone.js +102 -0
  171. package/dist/node_modules/es-toolkit/dist/compat/object/clone.js.map +1 -0
  172. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeep.js +8 -0
  173. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeep.js.map +1 -0
  174. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js +33 -0
  175. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js.map +1 -0
  176. package/dist/node_modules/es-toolkit/dist/compat/object/get.js +39 -0
  177. package/dist/node_modules/es-toolkit/dist/compat/object/get.js.map +1 -0
  178. package/dist/node_modules/es-toolkit/dist/compat/object/has.js +21 -0
  179. package/dist/node_modules/es-toolkit/dist/compat/object/has.js.map +1 -0
  180. package/dist/node_modules/es-toolkit/dist/compat/object/keysIn.js +33 -0
  181. package/dist/node_modules/es-toolkit/dist/compat/object/keysIn.js.map +1 -0
  182. package/dist/node_modules/es-toolkit/dist/compat/object/mapValues.js +10 -0
  183. package/dist/node_modules/es-toolkit/dist/compat/object/mapValues.js.map +1 -0
  184. package/dist/node_modules/es-toolkit/dist/compat/object/merge.js +9 -0
  185. package/dist/node_modules/es-toolkit/dist/compat/object/merge.js.map +1 -0
  186. package/dist/node_modules/es-toolkit/dist/compat/object/mergeWith.js +53 -0
  187. package/dist/node_modules/es-toolkit/dist/compat/object/mergeWith.js.map +1 -0
  188. package/dist/node_modules/es-toolkit/dist/compat/object/property.js +10 -0
  189. package/dist/node_modules/es-toolkit/dist/compat/object/property.js.map +1 -0
  190. package/dist/node_modules/es-toolkit/dist/compat/object/set.js +9 -0
  191. package/dist/node_modules/es-toolkit/dist/compat/object/set.js.map +1 -0
  192. package/dist/node_modules/es-toolkit/dist/compat/object/updateWith.js +31 -0
  193. package/dist/node_modules/es-toolkit/dist/compat/object/updateWith.js.map +1 -0
  194. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArguments.js +8 -0
  195. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArguments.js.map +1 -0
  196. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArray.js +7 -0
  197. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArray.js.map +1 -0
  198. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js +8 -0
  199. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js.map +1 -0
  200. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js +9 -0
  201. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js.map +1 -0
  202. package/dist/node_modules/es-toolkit/dist/compat/predicate/isElement.js +9 -0
  203. package/dist/node_modules/es-toolkit/dist/compat/predicate/isElement.js.map +1 -0
  204. package/dist/node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js +15 -0
  205. package/dist/node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js.map +1 -0
  206. package/dist/node_modules/es-toolkit/dist/compat/predicate/isFunction.js +7 -0
  207. package/dist/node_modules/es-toolkit/dist/compat/predicate/isFunction.js.map +1 -0
  208. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatch.js +9 -0
  209. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatch.js.map +1 -0
  210. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js +81 -0
  211. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js.map +1 -0
  212. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObject.js +7 -0
  213. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObject.js.map +1 -0
  214. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js +7 -0
  215. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js.map +1 -0
  216. package/dist/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js +16 -0
  217. package/dist/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js.map +1 -0
  218. package/dist/node_modules/es-toolkit/dist/compat/predicate/isString.js +7 -0
  219. package/dist/node_modules/es-toolkit/dist/compat/predicate/isString.js.map +1 -0
  220. package/dist/node_modules/es-toolkit/dist/compat/predicate/isSymbol.js +7 -0
  221. package/dist/node_modules/es-toolkit/dist/compat/predicate/isSymbol.js.map +1 -0
  222. package/dist/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js +8 -0
  223. package/dist/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js.map +1 -0
  224. package/dist/node_modules/es-toolkit/dist/compat/predicate/matches.js +9 -0
  225. package/dist/node_modules/es-toolkit/dist/compat/predicate/matches.js.map +1 -0
  226. package/dist/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js +23 -0
  227. package/dist/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js.map +1 -0
  228. package/dist/node_modules/es-toolkit/dist/compat/util/eq.js +7 -0
  229. package/dist/node_modules/es-toolkit/dist/compat/util/eq.js.map +1 -0
  230. package/dist/node_modules/es-toolkit/dist/compat/util/iteratee.js +19 -0
  231. package/dist/node_modules/es-toolkit/dist/compat/util/iteratee.js.map +1 -0
  232. package/dist/node_modules/es-toolkit/dist/compat/util/times.js +11 -0
  233. package/dist/node_modules/es-toolkit/dist/compat/util/times.js.map +1 -0
  234. package/dist/node_modules/es-toolkit/dist/compat/util/toFinite.js +8 -0
  235. package/dist/node_modules/es-toolkit/dist/compat/util/toFinite.js.map +1 -0
  236. package/dist/node_modules/es-toolkit/dist/compat/util/toInteger.js +9 -0
  237. package/dist/node_modules/es-toolkit/dist/compat/util/toInteger.js.map +1 -0
  238. package/dist/node_modules/es-toolkit/dist/compat/util/toNumber.js +8 -0
  239. package/dist/node_modules/es-toolkit/dist/compat/util/toNumber.js.map +1 -0
  240. package/dist/node_modules/es-toolkit/dist/compat/util/toPath.js +37 -0
  241. package/dist/node_modules/es-toolkit/dist/compat/util/toPath.js.map +1 -0
  242. package/dist/node_modules/es-toolkit/dist/compat/util/toString.js +15 -0
  243. package/dist/node_modules/es-toolkit/dist/compat/util/toString.js.map +1 -0
  244. package/dist/node_modules/es-toolkit/dist/function/after.js +11 -0
  245. package/dist/node_modules/es-toolkit/dist/function/after.js.map +1 -0
  246. package/dist/node_modules/es-toolkit/dist/function/debounce.js +30 -0
  247. package/dist/node_modules/es-toolkit/dist/function/debounce.js.map +1 -0
  248. package/dist/node_modules/es-toolkit/dist/function/identity.js +7 -0
  249. package/dist/node_modules/es-toolkit/dist/function/identity.js.map +1 -0
  250. package/dist/node_modules/es-toolkit/dist/function/noop.js +6 -0
  251. package/dist/node_modules/es-toolkit/dist/function/noop.js.map +1 -0
  252. package/dist/node_modules/es-toolkit/dist/object/clone.js +27 -0
  253. package/dist/node_modules/es-toolkit/dist/object/clone.js.map +1 -0
  254. package/dist/node_modules/es-toolkit/dist/object/cloneDeep.js +8 -0
  255. package/dist/node_modules/es-toolkit/dist/object/cloneDeep.js.map +1 -0
  256. package/dist/node_modules/es-toolkit/dist/object/cloneDeepWith.js +121 -0
  257. package/dist/node_modules/es-toolkit/dist/object/cloneDeepWith.js.map +1 -0
  258. package/dist/node_modules/es-toolkit/dist/object/mapValues.js +12 -0
  259. package/dist/node_modules/es-toolkit/dist/object/mapValues.js.map +1 -0
  260. package/dist/node_modules/es-toolkit/dist/predicate/isBuffer.js +8 -0
  261. package/dist/node_modules/es-toolkit/dist/predicate/isBuffer.js.map +1 -0
  262. package/dist/node_modules/es-toolkit/dist/predicate/isEqual.js +9 -0
  263. package/dist/node_modules/es-toolkit/dist/predicate/isEqual.js.map +1 -0
  264. package/dist/node_modules/es-toolkit/dist/predicate/isEqualWith.js +110 -0
  265. package/dist/node_modules/es-toolkit/dist/predicate/isEqualWith.js.map +1 -0
  266. package/dist/node_modules/es-toolkit/dist/predicate/isLength.js +7 -0
  267. package/dist/node_modules/es-toolkit/dist/predicate/isLength.js.map +1 -0
  268. package/dist/node_modules/es-toolkit/dist/predicate/isPlainObject.js +9 -0
  269. package/dist/node_modules/es-toolkit/dist/predicate/isPlainObject.js.map +1 -0
  270. package/dist/node_modules/es-toolkit/dist/predicate/isPrimitive.js +7 -0
  271. package/dist/node_modules/es-toolkit/dist/predicate/isPrimitive.js.map +1 -0
  272. package/dist/node_modules/es-toolkit/dist/predicate/isTypedArray.js +7 -0
  273. package/dist/node_modules/es-toolkit/dist/predicate/isTypedArray.js.map +1 -0
  274. package/dist/styles/global.css +4 -1
  275. package/dist/utils/copyText.d.ts +4 -0
  276. package/dist/utils/copyText.js +21 -0
  277. package/dist/utils/copyText.js.map +1 -0
  278. package/package.json +9 -2
@@ -0,0 +1,9 @@
1
+ import { keyCodes as r } from "../../ckeditor5-utils/dist/index.js";
2
+ import "../../ckeditor5-engine/dist/index.js";
3
+ /**
4
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
5
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
6
+ */
7
+ r.arrowup, r.arrowdown, r.esc;
8
+ r.enter, r.tab;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../node_modules/@ckeditor/ckeditor5-mention/dist/index.js"],"sourcesContent":["/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nimport { Command, Plugin } from \"@ckeditor/ckeditor5-core\";\nimport { CKEditorError, Collection, Rect, env, keyCodes, logWarning, toMap, uid } from \"@ckeditor/ckeditor5-utils\";\nimport { ButtonView, ContextualBalloon, ListItemView, ListView, View, clickOutsideHandler } from \"@ckeditor/ckeditor5-ui\";\nimport { TextWatcher } from \"@ckeditor/ckeditor5-typing\";\nimport { debounce } from \"es-toolkit/compat\";\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module mention/mentioncommand\n*/\nconst BRACKET_PAIRS = {\n\t\"(\": \")\",\n\t\"[\": \"]\",\n\t\"{\": \"}\"\n};\n/**\n* The mention command.\n*\n* The command is registered by {@link module:mention/mentionediting~MentionEditing} as `'mention'`.\n*\n* To insert a mention into a range, execute the command and specify a mention object with a range to replace:\n*\n* ```ts\n* const focus = editor.model.document.selection.focus;\n*\n* // It will replace one character before the selection focus with the '#1234' text\n* // with the mention attribute filled with passed attributes.\n* editor.execute( 'mention', {\n* \tmarker: '#',\n* \tmention: {\n* \t\tid: '#1234',\n* \t\tname: 'Foo',\n* \t\ttitle: 'Big Foo'\n* \t},\n* \trange: editor.model.createRange( focus.getShiftedBy( -1 ), focus )\n* } );\n*\n* // It will replace one character before the selection focus with the 'The \"Big Foo\"' text\n* // with the mention attribute filled with passed attributes.\n* editor.execute( 'mention', {\n* \tmarker: '#',\n* \tmention: {\n* \t\tid: '#1234',\n* \t\tname: 'Foo',\n* \t\ttitle: 'Big Foo'\n* \t},\n* \ttext: 'The \"Big Foo\"',\n* \trange: editor.model.createRange( focus.getShiftedBy( -1 ), focus )\n* } );\n*\t```\n*/\nvar MentionCommand = class extends Command {\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor(editor) {\n\t\tsuper(editor);\n\t\tthis._isEnabledBasedOnSelection = false;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\trefresh() {\n\t\tconst model = this.editor.model;\n\t\tconst doc = model.document;\n\t\tthis.isEnabled = model.schema.checkAttributeInSelection(doc.selection, \"mention\");\n\t}\n\t/**\n\t* Executes the command.\n\t*\n\t* @param options Options for the executed command.\n\t* @param options.mention The mention object to insert. When a string is passed, it will be used to create a plain\n\t* object with the name attribute that equals the passed string.\n\t* @param options.marker The marker character (e.g. `'@'`).\n\t* @param options.text The text of the inserted mention. Defaults to the full mention string composed from `marker` and\n\t* `mention` string or `mention.id` if an object is passed.\n\t* @param options.range The range to replace.\n\t* Note that the replaced range might be shorter than the inserted text with the mention attribute.\n\t* @fires execute\n\t*/\n\texecute(options) {\n\t\tconst model = this.editor.model;\n\t\tconst selection = model.document.selection;\n\t\tconst mentionData = typeof options.mention == \"string\" ? { id: options.mention } : options.mention;\n\t\tconst mentionID = mentionData.id;\n\t\tconst range = options.range || selection.getFirstRange();\n\t\tif (!model.canEditAt(range)) return;\n\t\tconst mentionText = options.text || mentionID;\n\t\tconst mention = _addMentionAttributes({\n\t\t\t_text: mentionText,\n\t\t\tid: mentionID\n\t\t}, mentionData);\n\t\tif (!mentionID.startsWith(options.marker))\n /**\n\t\t* The feed item ID must start with the marker character(s).\n\t\t*\n\t\t* Correct mention feed setting:\n\t\t*\n\t\t* ```ts\n\t\t* mentions: [\n\t\t* \t{\n\t\t* \t\tmarker: '@',\n\t\t* \t\tfeed: [ '@Ann', '@Barney', ... ]\n\t\t* \t}\n\t\t* ]\n\t\t* ```\n\t\t*\n\t\t* Incorrect mention feed setting:\n\t\t*\n\t\t* ```ts\n\t\t* mentions: [\n\t\t* \t{\n\t\t* \t\tmarker: '@',\n\t\t* \t\tfeed: [ 'Ann', 'Barney', ... ]\n\t\t* \t}\n\t\t* ]\n\t\t* ```\n\t\t*\n\t\t* See {@link module:mention/mentionconfig~MentionConfig}.\n\t\t*\n\t\t* @error mentioncommand-incorrect-id\n\t\t*/\n\t\tthrow new CKEditorError(\"mentioncommand-incorrect-id\", this);\n\t\tmodel.change((writer) => {\n\t\t\tconst currentAttributes = toMap(selection.getAttributes());\n\t\t\tconst attributesWithMention = new Map(currentAttributes.entries());\n\t\t\tattributesWithMention.set(\"mention\", mention);\n\t\t\tconst insertionRange = model.insertContent(writer.createText(mentionText, attributesWithMention), range);\n\t\t\tconst nodeBefore = insertionRange.start.nodeBefore;\n\t\t\tconst nodeAfter = insertionRange.end.nodeAfter;\n\t\t\tconst isFollowedByWhiteSpace = nodeAfter && nodeAfter.is(\"$text\") && nodeAfter.data.startsWith(\" \");\n\t\t\tlet isInsertedInBrackets = false;\n\t\t\tif (nodeBefore && nodeAfter && nodeBefore.is(\"$text\") && nodeAfter.is(\"$text\")) {\n\t\t\t\tconst precedingCharacter = nodeBefore.data.slice(-1);\n\t\t\t\tconst isPrecededByOpeningBracket = precedingCharacter in BRACKET_PAIRS;\n\t\t\t\tconst isFollowedByBracketClosure = isPrecededByOpeningBracket && nodeAfter.data.startsWith(BRACKET_PAIRS[precedingCharacter]);\n\t\t\t\tisInsertedInBrackets = isPrecededByOpeningBracket && isFollowedByBracketClosure;\n\t\t\t}\n\t\t\tif (!isInsertedInBrackets && !isFollowedByWhiteSpace) model.insertContent(writer.createText(\" \", currentAttributes), range.start.getShiftedBy(mentionText.length));\n\t\t});\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module mention/mentionediting\n*/\n/**\n* The mention editing feature.\n*\n* It introduces the {@link module:mention/mentioncommand~MentionCommand command} and the `mention`\n* attribute in the {@link module:engine/model/model~Model model} which renders in the {@link module:engine/view/view view}\n* as a `<span class=\"mention\" data-mention=\"@mention\">`.\n*/\nvar MentionEditing = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"MentionEditing\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst doc = model.document;\n\t\tmodel.schema.extend(\"$text\", { allowAttributes: \"mention\" });\n\t\tmodel.schema.addAttributeCheck((context) => {\n\t\t\tif (context.endsWith(\"codeBlock $text\")) return false;\n\t\t}, \"mention\");\n\t\teditor.conversion.for(\"upcast\").elementToAttribute({\n\t\t\tview: {\n\t\t\t\tname: \"span\",\n\t\t\t\tattributes: \"data-mention\",\n\t\t\t\tclasses: \"mention\"\n\t\t\t},\n\t\t\tmodel: {\n\t\t\t\tkey: \"mention\",\n\t\t\t\tvalue: (viewElement) => _toMentionAttribute(viewElement)\n\t\t\t}\n\t\t});\n\t\teditor.conversion.for(\"downcast\").attributeToElement({\n\t\t\tmodel: \"mention\",\n\t\t\tview: createViewMentionElement\n\t\t});\n\t\teditor.conversion.for(\"downcast\").add(preventPartialMentionDowncast);\n\t\tdoc.registerPostFixer((writer) => removePartialMentionPostFixer(writer, doc, model.schema));\n\t\tdoc.registerPostFixer((writer) => extendAttributeOnMentionPostFixer(writer, doc));\n\t\tdoc.registerPostFixer((writer) => selectionMentionAttributePostFixer(writer, doc));\n\t\teditor.commands.add(\"mention\", new MentionCommand(editor));\n\t}\n};\n/**\n* @internal\n*/\nfunction _addMentionAttributes(baseMentionData, data) {\n\treturn Object.assign({ uid: uid().slice(0, 8) }, baseMentionData, data || {});\n}\n/**\n* Creates a mention attribute value from the provided view element and optional data.\n*\n* This function is exposed as\n* {@link module:mention/mention~Mention#toMentionAttribute `editor.plugins.get( 'Mention' ).toMentionAttribute()`}.\n*\n* @internal\n*/\nfunction _toMentionAttribute(viewElementOrMention, data) {\n\tconst dataMention = viewElementOrMention.getAttribute(\"data-mention\");\n\tconst textNode = viewElementOrMention.getChild(0);\n\tif (!textNode) return;\n\tconst dataUid = viewElementOrMention.getAttribute(\"data-mention-uid\");\n\treturn _addMentionAttributes({\n\t\tid: dataMention,\n\t\t_text: textNode.data\n\t}, dataUid ? {\n\t\tuid: dataUid,\n\t\t...data\n\t} : data);\n}\n/**\n* A converter that blocks partial mention from being converted.\n*\n* This converter is registered with 'highest' priority in order to consume mention attribute before it is converted by\n* any other converters. This converter only consumes partial mention - those whose `_text` attribute is not equal to text with mention\n* attribute. This may happen when copying part of mention text.\n*/\nfunction preventPartialMentionDowncast(dispatcher) {\n\tdispatcher.on(\"attribute:mention\", (evt, data, conversionApi) => {\n\t\tconst mention = data.attributeNewValue;\n\t\tif (!data.item.is(\"$textProxy\") || !mention) return;\n\t\tconst start = data.range.start;\n\t\tif ((start.textNode || start.nodeAfter).data != mention._text) conversionApi.consumable.consume(data.item, evt.name);\n\t}, { priority: \"highest\" });\n}\n/**\n* Creates a mention element from the mention data.\n*/\nfunction createViewMentionElement(mention, { writer, options }) {\n\tif (!mention) return;\n\treturn writer.createAttributeElement(\"span\", {\n\t\tclass: \"mention\",\n\t\t\"data-mention\": mention.id,\n\t\t...!options.isClipboardPipeline && { \"data-mention-uid\": mention.uid }\n\t}, {\n\t\tid: mention.uid,\n\t\tpriority: 20\n\t});\n}\n/**\n* Model post-fixer that disallows typing with selection when the selection is placed after the text node with the mention attribute or\n* before a text node with mention attribute.\n*/\nfunction selectionMentionAttributePostFixer(writer, doc) {\n\tconst selection = doc.selection;\n\tconst focus = selection.focus;\n\tif (selection.isCollapsed && selection.hasAttribute(\"mention\") && shouldNotTypeWithMentionAt(focus)) {\n\t\twriter.removeSelectionAttribute(\"mention\");\n\t\treturn true;\n\t}\n\treturn false;\n}\n/**\n* Helper function to detect if mention attribute should be removed from selection.\n* This check makes only sense if the selection has mention attribute.\n*\n* The mention attribute should be removed from a selection when selection focus is placed:\n* a) after a text node\n* b) the position is at parents start - the selection will set attributes from node after.\n*/\nfunction shouldNotTypeWithMentionAt(position) {\n\tconst isAtStart = position.isAtStart;\n\treturn position.nodeBefore && position.nodeBefore.is(\"$text\") || isAtStart;\n}\n/**\n* Model post-fixer that removes the mention attribute from the modified text node.\n*/\nfunction removePartialMentionPostFixer(writer, doc, schema) {\n\tconst changes = doc.differ.getChanges();\n\tlet wasChanged = false;\n\tfor (const change of changes) {\n\t\tif (change.type == \"attribute\") continue;\n\t\tconst position = change.position;\n\t\tif (change.name == \"$text\") {\n\t\t\tconst nodeAfterInsertedTextNode = position.textNode && position.textNode.nextSibling;\n\t\t\twasChanged = checkAndFix(position.textNode, writer) || wasChanged;\n\t\t\twasChanged = checkAndFix(nodeAfterInsertedTextNode, writer) || wasChanged;\n\t\t\twasChanged = checkAndFix(position.nodeBefore, writer) || wasChanged;\n\t\t\twasChanged = checkAndFix(position.nodeAfter, writer) || wasChanged;\n\t\t}\n\t\tif (change.name != \"$text\" && change.type == \"insert\") {\n\t\t\tconst insertedNode = position.nodeAfter;\n\t\t\tfor (const item of writer.createRangeIn(insertedNode).getItems()) wasChanged = checkAndFix(item, writer) || wasChanged;\n\t\t}\n\t\tif (change.type == \"insert\" && schema.isInline(change.name)) {\n\t\t\tconst nodeAfterInserted = position.nodeAfter && position.nodeAfter.nextSibling;\n\t\t\twasChanged = checkAndFix(position.nodeBefore, writer) || wasChanged;\n\t\t\twasChanged = checkAndFix(nodeAfterInserted, writer) || wasChanged;\n\t\t}\n\t}\n\treturn wasChanged;\n}\n/**\n* This post-fixer will extend the attribute applied on the part of the mention so the whole text node of the mention will have\n* the added attribute.\n*/\nfunction extendAttributeOnMentionPostFixer(writer, doc) {\n\tconst changes = doc.differ.getChanges();\n\tlet wasChanged = false;\n\tfor (const change of changes) if (change.type === \"attribute\" && change.attributeKey != \"mention\") {\n\t\tconst nodeBefore = change.range.start.nodeBefore;\n\t\tconst nodeAfter = change.range.end.nodeAfter;\n\t\tfor (const node of [nodeBefore, nodeAfter]) if (isBrokenMentionNode(node) && node.getAttribute(change.attributeKey) != change.attributeNewValue) {\n\t\t\twriter.setAttribute(change.attributeKey, change.attributeNewValue, node);\n\t\t\twasChanged = true;\n\t\t}\n\t}\n\treturn wasChanged;\n}\n/**\n* Checks if a node has a correct mention attribute if present.\n* Returns `true` if the node is text and has a mention attribute whose text does not match the expected mention text.\n*/\nfunction isBrokenMentionNode(node) {\n\tif (!node || !(node.is(\"$text\") || node.is(\"$textProxy\")) || !node.hasAttribute(\"mention\")) return false;\n\treturn node.data != node.getAttribute(\"mention\")._text;\n}\n/**\n* Fixes a mention on a text node if it needs a fix.\n*/\nfunction checkAndFix(textNode, writer) {\n\tif (isBrokenMentionNode(textNode)) {\n\t\twriter.removeAttribute(\"mention\", textNode);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module mention/ui/mentionsview\n*/\n/**\n* The mention ui view.\n*/\nvar MentionsView = class extends ListView {\n\tselected;\n\tposition;\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor(locale) {\n\t\tsuper(locale);\n\t\tthis.extendTemplate({ attributes: {\n\t\t\tclass: [\"ck-mentions\"],\n\t\t\ttabindex: \"-1\"\n\t\t} });\n\t}\n\t/**\n\t* {@link #select Selects} the first item.\n\t*/\n\tselectFirst() {\n\t\tthis.select(0);\n\t}\n\t/**\n\t* Selects next item to the currently {@link #select selected}.\n\t*\n\t* If the last item is already selected, it will select the first item.\n\t*/\n\tselectNext() {\n\t\tconst item = this.selected;\n\t\tconst index = this.items.getIndex(item);\n\t\tthis.select(index + 1);\n\t}\n\t/**\n\t* Selects previous item to the currently {@link #select selected}.\n\t*\n\t* If the first item is already selected, it will select the last item.\n\t*/\n\tselectPrevious() {\n\t\tconst item = this.selected;\n\t\tconst index = this.items.getIndex(item);\n\t\tthis.select(index - 1);\n\t}\n\t/**\n\t* Marks item at a given index as selected.\n\t*\n\t* Handles selection cycling when passed index is out of bounds:\n\t* - if the index is lower than 0, it will select the last item,\n\t* - if the index is higher than the last item index, it will select the first item.\n\t*\n\t* @param index Index of an item to be marked as selected.\n\t*/\n\tselect(index) {\n\t\tlet indexToGet = 0;\n\t\tif (index > 0 && index < this.items.length) indexToGet = index;\n\t\telse if (index < 0) indexToGet = this.items.length - 1;\n\t\tconst item = this.items.get(indexToGet);\n\t\tif (this.selected === item) return;\n\t\tif (this.selected) this.selected.removeHighlight();\n\t\titem.highlight();\n\t\tthis.selected = item;\n\t\tif (!this._isItemVisibleInScrolledArea(item)) this.element.scrollTop = item.element.offsetTop;\n\t}\n\t/**\n\t* Triggers the `execute` event on the {@link #select selected} item.\n\t*/\n\texecuteSelected() {\n\t\tthis.selected.fire(\"execute\");\n\t}\n\t/**\n\t* Checks if an item is visible in the scrollable area.\n\t*\n\t* The item is considered visible when:\n\t* - its top boundary is inside the scrollable rect\n\t* - its bottom boundary is inside the scrollable rect (the whole item must be visible)\n\t*/\n\t_isItemVisibleInScrolledArea(item) {\n\t\treturn new Rect(this.element).contains(new Rect(item.element));\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module mention/ui/domwrapperview\n*/\n/**\n* This class wraps DOM element as a CKEditor5 UI View.\n*\n* It allows to render any DOM element and use it in mentions list.\n*/\nvar MentionDomWrapperView = class extends View {\n\t/**\n\t* The DOM element for which wrapper was created.\n\t*/\n\tdomElement;\n\t/**\n\t* Creates an instance of {@link module:mention/ui/domwrapperview~MentionDomWrapperView} class.\n\t*\n\t* Also see {@link #render}.\n\t*/\n\tconstructor(locale, domElement) {\n\t\tsuper(locale);\n\t\tthis.template = void 0;\n\t\tthis.domElement = domElement;\n\t\tthis.domElement.classList.add(\"ck-button\");\n\t\tthis.set(\"isOn\", false);\n\t\tthis.on(\"change:isOn\", (evt, name, isOn) => {\n\t\t\tif (isOn) {\n\t\t\t\tthis.domElement.classList.add(\"ck-on\");\n\t\t\t\tthis.domElement.classList.remove(\"ck-off\");\n\t\t\t} else {\n\t\t\t\tthis.domElement.classList.add(\"ck-off\");\n\t\t\t\tthis.domElement.classList.remove(\"ck-on\");\n\t\t\t}\n\t\t});\n\t\tthis.listenTo(this.domElement, \"click\", () => {\n\t\t\tthis.fire(\"execute\");\n\t\t});\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\trender() {\n\t\tsuper.render();\n\t\tthis.element = this.domElement;\n\t}\n\t/**\n\t* Focuses the DOM element.\n\t*/\n\tfocus() {\n\t\tthis.domElement.focus();\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module mention/ui/mentionlistitemview\n*/\nvar MentionListItemView = class extends ListItemView {\n\titem;\n\tmarker;\n\thighlight() {\n\t\tconst child = this.children.first;\n\t\tchild.isOn = true;\n\t}\n\tremoveHighlight() {\n\t\tconst child = this.children.first;\n\t\tchild.isOn = false;\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module mention/mentionui\n*/\nconst VERTICAL_SPACING = 3;\nconst defaultHandledKeyCodes = [\n\tkeyCodes.arrowup,\n\tkeyCodes.arrowdown,\n\tkeyCodes.esc\n];\nconst defaultCommitKeyCodes = [keyCodes.enter, keyCodes.tab];\n/**\n* The mention UI feature.\n*/\nvar MentionUI = class extends Plugin {\n\t/**\n\t* The mention view.\n\t*/\n\t_mentionsView;\n\t/**\n\t* Stores mention feeds configurations.\n\t*/\n\t_mentionsConfigurations;\n\t/**\n\t* The contextual balloon plugin instance.\n\t*/\n\t_balloon;\n\t_items = new Collection();\n\t_lastRequested;\n\t/**\n\t* Debounced feed requester. It uses `es-toolkit#debounce` method to delay function call.\n\t*/\n\t_requestFeedDebounced;\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"MentionUI\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [ContextualBalloon];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor(editor) {\n\t\tsuper(editor);\n\t\tthis._mentionsView = this._createMentionView();\n\t\tthis._mentionsConfigurations = /* @__PURE__ */ new Map();\n\t\tthis._requestFeedDebounced = debounce(this._requestFeed, 100);\n\t\teditor.config.define(\"mention\", { feeds: [] });\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst commitKeys = editor.config.get(\"mention.commitKeys\") || defaultCommitKeyCodes;\n\t\tconst handledKeyCodes = defaultHandledKeyCodes.concat(commitKeys);\n\t\tthis._balloon = editor.plugins.get(ContextualBalloon);\n\t\teditor.editing.view.document.on(\"keydown\", (evt, data) => {\n\t\t\tif (isHandledKey(data.keyCode) && this._isUIVisible) {\n\t\t\t\tdata.preventDefault();\n\t\t\t\tevt.stop();\n\t\t\t\tif (data.keyCode == keyCodes.arrowdown) this._mentionsView.selectNext();\n\t\t\t\tif (data.keyCode == keyCodes.arrowup) this._mentionsView.selectPrevious();\n\t\t\t\tif (commitKeys.includes(data.keyCode)) this._mentionsView.executeSelected();\n\t\t\t\tif (data.keyCode == keyCodes.esc) this._hideUIAndRemoveMarker();\n\t\t\t}\n\t\t}, { priority: \"highest\" });\n\t\tclickOutsideHandler({\n\t\t\temitter: this._mentionsView,\n\t\t\tactivator: () => this._isUIVisible,\n\t\t\tcontextElements: () => [this._balloon.view.element],\n\t\t\tcallback: () => this._hideUIAndRemoveMarker()\n\t\t});\n\t\tconst feeds = editor.config.get(\"mention.feeds\");\n\t\tfor (const mentionDescription of feeds) {\n\t\t\tconst { feed, marker, dropdownLimit } = mentionDescription;\n\t\t\tif (!isValidMentionMarker(marker))\n /**\n\t\t\t* The marker must be a single character.\n\t\t\t*\n\t\t\t* Correct markers: `'@'`, `'#'`.\n\t\t\t*\n\t\t\t* Incorrect markers: `'$$'`, `'[@'`.\n\t\t\t*\n\t\t\t* See {@link module:mention/mentionconfig~MentionConfig}.\n\t\t\t*\n\t\t\t* @error mentionconfig-incorrect-marker\n\t\t\t* @param {string} marker Configured marker\n\t\t\t*/\n\t\t\tthrow new CKEditorError(\"mentionconfig-incorrect-marker\", null, { marker });\n\t\t\tconst definition = {\n\t\t\t\tmarker,\n\t\t\t\tfeedCallback: typeof feed == \"function\" ? feed.bind(this.editor) : createFeedCallback(feed),\n\t\t\t\titemRenderer: mentionDescription.itemRenderer,\n\t\t\t\tdropdownLimit\n\t\t\t};\n\t\t\tthis._mentionsConfigurations.set(marker, definition);\n\t\t}\n\t\tthis._setupTextWatcher(feeds);\n\t\tthis.listenTo(editor, \"change:isReadOnly\", () => {\n\t\t\tthis._hideUIAndRemoveMarker();\n\t\t});\n\t\tthis.on(\"requestFeed:response\", (evt, data) => this._handleFeedResponse(data));\n\t\tthis.on(\"requestFeed:error\", () => this._hideUIAndRemoveMarker());\n\t\t/**\n\t\t* Checks if a given key code is handled by the mention UI.\n\t\t*/\n\t\tfunction isHandledKey(keyCode) {\n\t\t\treturn handledKeyCodes.includes(keyCode);\n\t\t}\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tdestroy() {\n\t\tsuper.destroy();\n\t\tthis._mentionsView.destroy();\n\t}\n\t/**\n\t* Returns true when {@link #_mentionsView} is in the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon} and it is\n\t* currently visible.\n\t*/\n\tget _isUIVisible() {\n\t\treturn this._balloon.visibleView === this._mentionsView;\n\t}\n\t/**\n\t* Creates the {@link #_mentionsView}.\n\t*/\n\t_createMentionView() {\n\t\tconst locale = this.editor.locale;\n\t\tconst mentionsView = new MentionsView(locale);\n\t\tmentionsView.items.bindTo(this._items).using((data) => {\n\t\t\tconst { item, marker } = data;\n\t\t\tconst { dropdownLimit: markerDropdownLimit } = this._mentionsConfigurations.get(marker);\n\t\t\tconst dropdownLimit = markerDropdownLimit || this.editor.config.get(\"mention.dropdownLimit\") || 10;\n\t\t\tif (mentionsView.items.length >= dropdownLimit) return null;\n\t\t\tconst listItemView = new MentionListItemView(locale);\n\t\t\tconst view = this._renderItem(item, marker);\n\t\t\tview.delegate(\"execute\").to(listItemView);\n\t\t\tlistItemView.children.add(view);\n\t\t\tlistItemView.item = item;\n\t\t\tlistItemView.marker = marker;\n\t\t\tlistItemView.on(\"execute\", () => {\n\t\t\t\tmentionsView.fire(\"execute\", {\n\t\t\t\t\titem,\n\t\t\t\t\tmarker\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn listItemView;\n\t\t});\n\t\tmentionsView.on(\"execute\", (evt, data) => {\n\t\t\tconst editor = this.editor;\n\t\t\tconst model = editor.model;\n\t\t\tconst item = data.item;\n\t\t\tconst marker = data.marker;\n\t\t\tconst mentionMarker = editor.model.markers.get(\"mention\");\n\t\t\tconst end = model.createPositionAt(model.document.selection.focus);\n\t\t\tconst start = model.createPositionAt(mentionMarker.getStart());\n\t\t\tconst range = model.createRange(start, end);\n\t\t\tthis._hideUIAndRemoveMarker();\n\t\t\teditor.execute(\"mention\", {\n\t\t\t\tmention: item,\n\t\t\t\ttext: item.text,\n\t\t\t\tmarker,\n\t\t\t\trange\n\t\t\t});\n\t\t\teditor.editing.view.focus();\n\t\t});\n\t\treturn mentionsView;\n\t}\n\t/**\n\t* Returns item renderer for the marker.\n\t*/\n\t_getItemRenderer(marker) {\n\t\tconst { itemRenderer } = this._mentionsConfigurations.get(marker);\n\t\treturn itemRenderer;\n\t}\n\t/**\n\t* Requests a feed from a configured callbacks.\n\t*/\n\t_requestFeed(marker, feedText) {\n\t\tthis._lastRequested = feedText;\n\t\tconst { feedCallback } = this._mentionsConfigurations.get(marker);\n\t\tconst feedResponse = feedCallback(feedText);\n\t\tif (!(feedResponse instanceof Promise)) {\n\t\t\tthis.fire(\"requestFeed:response\", {\n\t\t\t\tfeed: feedResponse,\n\t\t\t\tmarker,\n\t\t\t\tfeedText\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tfeedResponse.then((response) => {\n\t\t\tif (this._lastRequested == feedText) this.fire(\"requestFeed:response\", {\n\t\t\t\tfeed: response,\n\t\t\t\tmarker,\n\t\t\t\tfeedText\n\t\t\t});\n\t\t\telse this.fire(\"requestFeed:discarded\", {\n\t\t\t\tfeed: response,\n\t\t\t\tmarker,\n\t\t\t\tfeedText\n\t\t\t});\n\t\t}).catch((error) => {\n\t\t\tthis.fire(\"requestFeed:error\", { error });\n\t\t\t/**\n\t\t\t* The callback used for obtaining mention autocomplete feed thrown and error and the mention UI was hidden or\n\t\t\t* not displayed at all.\n\t\t\t*\n\t\t\t* @error mention-feed-callback-error\n\t\t\t*/\n\t\t\tlogWarning(\"mention-feed-callback-error\", { marker });\n\t\t});\n\t}\n\t/**\n\t* Registers a text watcher for the marker.\n\t*/\n\t_setupTextWatcher(feeds) {\n\t\tconst editor = this.editor;\n\t\tconst feedsWithPattern = feeds.map((feed) => ({\n\t\t\t...feed,\n\t\t\tpattern: createRegExp(feed.marker, feed.minimumCharacters || 0)\n\t\t}));\n\t\tconst watcher = new TextWatcher(editor.model, createTestCallback(feedsWithPattern));\n\t\twatcher.on(\"matched\", (evt, data) => {\n\t\t\tconst markerDefinition = getLastValidMarkerInText(feedsWithPattern, data.text);\n\t\t\tconst focus = editor.model.document.selection.focus;\n\t\t\tconst markerPosition = editor.model.createPositionAt(focus.parent, markerDefinition.position);\n\t\t\tif (isPositionInExistingMention(focus) || isMarkerInExistingMention(markerPosition)) {\n\t\t\t\tthis._hideUIAndRemoveMarker();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst feedText = requestFeedText(markerDefinition, data.text);\n\t\t\tconst matchedTextLength = markerDefinition.marker.length + feedText.length;\n\t\t\tconst start = focus.getShiftedBy(-matchedTextLength);\n\t\t\tconst end = focus.getShiftedBy(-feedText.length);\n\t\t\tconst markerRange = editor.model.createRange(start, end);\n\t\t\tif (checkIfStillInCompletionMode(editor)) {\n\t\t\t\tconst mentionMarker = editor.model.markers.get(\"mention\");\n\t\t\t\teditor.model.change((writer) => {\n\t\t\t\t\twriter.updateMarker(mentionMarker, { range: markerRange });\n\t\t\t\t});\n\t\t\t} else editor.model.change((writer) => {\n\t\t\t\twriter.addMarker(\"mention\", {\n\t\t\t\t\trange: markerRange,\n\t\t\t\t\tusingOperation: false,\n\t\t\t\t\taffectsData: false\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis._requestFeedDebounced(markerDefinition.marker, feedText);\n\t\t});\n\t\twatcher.on(\"unmatched\", () => {\n\t\t\tthis._hideUIAndRemoveMarker();\n\t\t});\n\t\tconst mentionCommand = editor.commands.get(\"mention\");\n\t\twatcher.bind(\"isEnabled\").to(mentionCommand);\n\t\treturn watcher;\n\t}\n\t/**\n\t* Handles the feed response event data.\n\t*/\n\t_handleFeedResponse(data) {\n\t\tconst { feed, marker } = data;\n\t\tif (!checkIfStillInCompletionMode(this.editor)) return;\n\t\tif (!this.editor.commands.get(\"mention\").isEnabled) {\n\t\t\tthis._hideUIAndRemoveMarker();\n\t\t\treturn;\n\t\t}\n\t\tthis._items.clear();\n\t\tfor (const feedItem of feed) {\n\t\t\tconst item = typeof feedItem != \"object\" ? {\n\t\t\t\tid: feedItem,\n\t\t\t\ttext: feedItem\n\t\t\t} : feedItem;\n\t\t\tthis._items.add({\n\t\t\t\titem,\n\t\t\t\tmarker\n\t\t\t});\n\t\t}\n\t\tconst mentionMarker = this.editor.model.markers.get(\"mention\");\n\t\tif (this._items.length) this._showOrUpdateUI(mentionMarker);\n\t\telse this._hideUIAndRemoveMarker();\n\t}\n\t/**\n\t* Shows the mentions balloon. If the panel is already visible, it will reposition it.\n\t*/\n\t_showOrUpdateUI(markerMarker) {\n\t\tif (this._isUIVisible) this._balloon.updatePosition(this._getBalloonPanelPositionData(markerMarker, this._mentionsView.position));\n\t\telse this._balloon.add({\n\t\t\tview: this._mentionsView,\n\t\t\tposition: this._getBalloonPanelPositionData(markerMarker, this._mentionsView.position),\n\t\t\tsingleViewMode: true,\n\t\t\tballoonClassName: \"ck-mention-balloon\"\n\t\t});\n\t\tthis._mentionsView.position = this._balloon.view.position;\n\t\tthis._mentionsView.selectFirst();\n\t}\n\t/**\n\t* Hides the mentions balloon and removes the 'mention' marker from the markers collection.\n\t*/\n\t_hideUIAndRemoveMarker() {\n\t\tif (this._balloon.hasView(this._mentionsView)) this._balloon.remove(this._mentionsView);\n\t\tif (checkIfStillInCompletionMode(this.editor)) this.editor.model.change((writer) => writer.removeMarker(\"mention\"));\n\t\tthis._mentionsView.position = void 0;\n\t}\n\t/**\n\t* Renders a single item in the autocomplete list.\n\t*/\n\t_renderItem(item, marker) {\n\t\tconst editor = this.editor;\n\t\tlet view;\n\t\tlet label = item.id;\n\t\tconst renderer = this._getItemRenderer(marker);\n\t\tif (renderer) {\n\t\t\tconst renderResult = renderer(item);\n\t\t\tif (typeof renderResult != \"string\") view = new MentionDomWrapperView(editor.locale, renderResult);\n\t\t\telse label = renderResult;\n\t\t}\n\t\tif (!view) {\n\t\t\tconst buttonView = new ButtonView(editor.locale);\n\t\t\tbuttonView.label = label;\n\t\t\tbuttonView.withText = true;\n\t\t\tview = buttonView;\n\t\t}\n\t\treturn view;\n\t}\n\t/**\n\t* Creates a position options object used to position the balloon panel.\n\t*\n\t* @param mentionMarker\n\t* @param preferredPosition The name of the last matched position name.\n\t*/\n\t_getBalloonPanelPositionData(mentionMarker, preferredPosition) {\n\t\tconst editor = this.editor;\n\t\tconst editing = editor.editing;\n\t\tconst domConverter = editing.view.domConverter;\n\t\tconst mapper = editing.mapper;\n\t\tconst uiLanguageDirection = editor.locale.uiLanguageDirection;\n\t\treturn {\n\t\t\ttarget: () => {\n\t\t\t\tlet modelRange = mentionMarker.getRange();\n\t\t\t\tif (modelRange.start.root.rootName == \"$graveyard\") modelRange = editor.model.document.selection.getFirstRange();\n\t\t\t\tconst viewRange = mapper.toViewRange(modelRange);\n\t\t\t\treturn Rect.getDomRangeRects(domConverter.viewRangeToDom(viewRange)).pop();\n\t\t\t},\n\t\t\tlimiter: () => {\n\t\t\t\tconst view = this.editor.editing.view;\n\t\t\t\tconst editableElement = view.document.selection.editableElement;\n\t\t\t\tif (editableElement) return view.domConverter.mapViewToDom(editableElement.root);\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tpositions: getBalloonPanelPositions(preferredPosition, uiLanguageDirection)\n\t\t};\n\t}\n};\n/**\n* Returns the balloon positions data callbacks.\n*/\nfunction getBalloonPanelPositions(preferredPosition, uiLanguageDirection) {\n\tconst positions = {\n\t\t\"caret_se\": (targetRect, balloonRect, viewportRect) => {\n\t\t\treturn {\n\t\t\t\ttop: targetRect.bottom + VERTICAL_SPACING,\n\t\t\t\tleft: fitLeftInViewport(targetRect.right, balloonRect, viewportRect),\n\t\t\t\tname: \"caret_se\",\n\t\t\t\tconfig: { withArrow: false }\n\t\t\t};\n\t\t},\n\t\t\"caret_ne\": (targetRect, balloonRect, viewportRect) => {\n\t\t\treturn {\n\t\t\t\ttop: targetRect.top - balloonRect.height - VERTICAL_SPACING,\n\t\t\t\tleft: fitLeftInViewport(targetRect.right, balloonRect, viewportRect),\n\t\t\t\tname: \"caret_ne\",\n\t\t\t\tconfig: { withArrow: false }\n\t\t\t};\n\t\t},\n\t\t\"caret_sw\": (targetRect, balloonRect, viewportRect) => {\n\t\t\treturn {\n\t\t\t\ttop: targetRect.bottom + VERTICAL_SPACING,\n\t\t\t\tleft: fitLeftInViewport(targetRect.right - balloonRect.width, balloonRect, viewportRect),\n\t\t\t\tname: \"caret_sw\",\n\t\t\t\tconfig: { withArrow: false }\n\t\t\t};\n\t\t},\n\t\t\"caret_nw\": (targetRect, balloonRect, viewportRect) => {\n\t\t\treturn {\n\t\t\t\ttop: targetRect.top - balloonRect.height - VERTICAL_SPACING,\n\t\t\t\tleft: fitLeftInViewport(targetRect.right - balloonRect.width, balloonRect, viewportRect),\n\t\t\t\tname: \"caret_nw\",\n\t\t\t\tconfig: { withArrow: false }\n\t\t\t};\n\t\t}\n\t};\n\tif (Object.prototype.hasOwnProperty.call(positions, preferredPosition)) return [positions[preferredPosition]];\n\treturn uiLanguageDirection !== \"rtl\" ? [\n\t\tpositions.caret_se,\n\t\tpositions.caret_sw,\n\t\tpositions.caret_ne,\n\t\tpositions.caret_nw\n\t] : [\n\t\tpositions.caret_sw,\n\t\tpositions.caret_se,\n\t\tpositions.caret_nw,\n\t\tpositions.caret_ne\n\t];\n}\n/**\n* Keeps the panel within the viewport horizontally, so it does not get cut off\n* when the caret is close to the screen edge (e.g. on mobile).\n*\n* See https://github.com/ckeditor/ckeditor5/issues/20182.\n*/\nfunction fitLeftInViewport(left, balloonRect, viewportRect) {\n\treturn Math.max(viewportRect.left, Math.min(left, viewportRect.right - balloonRect.width));\n}\n/**\n* Returns a marker definition of the last valid occurring marker in a given string.\n* If there is no valid marker in a string, it returns undefined.\n*\n* Example of returned object:\n*\n* ```ts\n* {\n* \tmarker: '@',\n* \tposition: 4,\n* \tminimumCharacters: 0\n* }\n* ````\n*\n* @param feedsWithPattern Registered feeds in editor for mention plugin with created RegExp for matching marker.\n* @param text String to find the marker in\n* @returns Matched marker's definition\n*/\nfunction getLastValidMarkerInText(feedsWithPattern, text) {\n\tlet lastValidMarker;\n\tfor (const feed of feedsWithPattern) {\n\t\tconst currentMarkerLastIndex = text.lastIndexOf(feed.marker);\n\t\tif (currentMarkerLastIndex > 0 && !text.substring(currentMarkerLastIndex - 1).match(feed.pattern)) continue;\n\t\tif (!lastValidMarker || currentMarkerLastIndex >= lastValidMarker.position) lastValidMarker = {\n\t\t\tmarker: feed.marker,\n\t\t\tposition: currentMarkerLastIndex,\n\t\t\tminimumCharacters: feed.minimumCharacters,\n\t\t\tpattern: feed.pattern\n\t\t};\n\t}\n\treturn lastValidMarker;\n}\n/**\n* Creates a RegExp pattern for the marker.\n*\n* Function has to be exported to achieve 100% code coverage.\n*\n* @internal\n*/\nfunction createRegExp(marker, minimumCharacters) {\n\tconst numberOfCharacters = minimumCharacters == 0 ? \"*\" : `{${minimumCharacters},}`;\n\tconst openAfterCharacters = env.features.isRegExpUnicodePropertySupported ? \"\\\\p{Ps}\\\\p{Pi}\\\"'\" : \"\\\\(\\\\[{\\\"'\";\n\tconst mentionCharacters = \".\";\n\tmarker = marker.replace(/[.*+?^${}()\\-|[\\]\\\\]/g, \"\\\\$&\");\n\tconst pattern = `(?:^|[ ${openAfterCharacters}])(${marker})(${mentionCharacters}${numberOfCharacters})$`;\n\treturn new RegExp(pattern, \"u\");\n}\n/**\n* Creates a test callback for the marker to be used in the text watcher instance.\n*\n* @param feedsWithPattern Feeds of mention plugin configured in editor with RegExp to match marker in text\n*/\nfunction createTestCallback(feedsWithPattern) {\n\tconst textMatcher = (text) => {\n\t\tconst markerDefinition = getLastValidMarkerInText(feedsWithPattern, text);\n\t\tif (!markerDefinition) return false;\n\t\tlet splitStringFrom = 0;\n\t\tif (markerDefinition.position !== 0) splitStringFrom = markerDefinition.position - 1;\n\t\tconst textToTest = text.substring(splitStringFrom);\n\t\treturn markerDefinition.pattern.test(textToTest);\n\t};\n\treturn textMatcher;\n}\n/**\n* Creates a text matcher from the marker.\n*/\nfunction requestFeedText(markerDefinition, text) {\n\tlet splitStringFrom = 0;\n\tif (markerDefinition.position !== 0) splitStringFrom = markerDefinition.position - 1;\n\tconst regExp = createRegExp(markerDefinition.marker, 0);\n\treturn text.substring(splitStringFrom).match(regExp)[2];\n}\n/**\n* The default feed callback.\n*/\nfunction createFeedCallback(feedItems) {\n\treturn (feedText) => {\n\t\treturn feedItems.filter((item) => {\n\t\t\treturn (typeof item == \"string\" ? item : String(item.id)).toLowerCase().includes(feedText.toLowerCase());\n\t\t});\n\t};\n}\n/**\n* Checks if position in inside or right after a text with a mention.\n*/\nfunction isPositionInExistingMention(position) {\n\tconst hasMention = position.textNode && position.textNode.hasAttribute(\"mention\");\n\tconst nodeBefore = position.nodeBefore;\n\treturn hasMention || nodeBefore && nodeBefore.is(\"$text\") && nodeBefore.hasAttribute(\"mention\");\n}\n/**\n* Checks if the closest marker offset is at the beginning of a mention.\n*\n* See https://github.com/ckeditor/ckeditor5/issues/11400.\n*/\nfunction isMarkerInExistingMention(markerPosition) {\n\tconst nodeAfter = markerPosition.nodeAfter;\n\treturn nodeAfter && nodeAfter.is(\"$text\") && nodeAfter.hasAttribute(\"mention\");\n}\n/**\n* Checks if string is a valid mention marker.\n*/\nfunction isValidMentionMarker(marker) {\n\treturn !!marker;\n}\n/**\n* Checks the mention plugins is in completion mode (e.g. when typing is after a valid mention string like @foo).\n*/\nfunction checkIfStillInCompletionMode(editor) {\n\treturn editor.model.markers.has(\"mention\");\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module mention/mention\n*/\n/**\n* The mention plugin.\n*\n* For a detailed overview, check the {@glink features/mentions Mention feature} guide.\n*/\nvar Mention = class extends Plugin {\n\ttoMentionAttribute(viewElement, data) {\n\t\treturn _toMentionAttribute(viewElement, data);\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"Mention\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [MentionEditing, MentionUI];\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n\nexport { Mention, MentionCommand, MentionDomWrapperView, MentionEditing, MentionListItemView, MentionUI, MentionsView, _addMentionAttributes, createRegExp as _createMentionMarkerRegExp, _toMentionAttribute };\n//# sourceMappingURL=index.js.map"],"names":["keyCodes"],"mappings":";;AAAA;AAAA;AAAA;AAAA;AA+gBCA,EAAS,SACTA,EAAS,WACTA,EAAS;AAEqBA,EAAS,OAAOA,EAAS;","x_google_ignoreList":[0]}
@@ -0,0 +1,167 @@
1
+ var h = Object.defineProperty;
2
+ var m = (t, e, r) => e in t ? h(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
+ var c = (t, e, r) => m(t, typeof e != "symbol" ? e + "" : e, r);
4
+ import { Plugin as p, Command as d } from "../../ckeditor5-core/dist/index.js";
5
+ import { first as u } from "../../ckeditor5-utils/dist/index.js";
6
+ /**
7
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
8
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
9
+ */
10
+ /**
11
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
12
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
13
+ */
14
+ var g = class extends d {
15
+ constructor(t) {
16
+ super(t), this._isEnabledBasedOnSelection = !1;
17
+ }
18
+ /**
19
+ * @inheritDoc
20
+ */
21
+ refresh() {
22
+ const t = this.editor.model, e = t.document, r = u(e.selection.getSelectedBlocks());
23
+ this.value = !!r && r.is("element", "paragraph"), this.isEnabled = !!r && l(r, t.schema);
24
+ }
25
+ /**
26
+ * Executes the command. All the blocks (see {@link module:engine/model/schema~ModelSchema}) in the selection
27
+ * will be turned to paragraphs.
28
+ *
29
+ * @fires execute
30
+ * @param options Options for the executed command.
31
+ * @param options.selection The selection that the command should be applied to. By default,
32
+ * if not provided, the command is applied to the {@link module:engine/model/document~ModelDocument#selection}.
33
+ */
34
+ execute(t = {}) {
35
+ const e = this.editor.model, r = e.document, n = t.selection || r.selection;
36
+ e.canEditAt(n) && e.change((a) => {
37
+ const s = n.getSelectedBlocks();
38
+ for (const i of s) !i.is("element", "paragraph") && l(i, e.schema) && a.rename(i, "paragraph");
39
+ });
40
+ }
41
+ };
42
+ function l(t, e) {
43
+ return e.checkChild(t.parent, "paragraph") && !e.isObject(t);
44
+ }
45
+ /**
46
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
47
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
48
+ */
49
+ var f = class extends d {
50
+ constructor(t) {
51
+ super(t), this._isEnabledBasedOnSelection = !1;
52
+ }
53
+ /**
54
+ * Executes the command.
55
+ *
56
+ * @param options Options for the executed command.
57
+ * @param options.position The model position at which the new paragraph will be inserted.
58
+ * @param options.attributes Attributes keys and values to set on a inserted paragraph.
59
+ * @fires execute
60
+ */
61
+ execute(t) {
62
+ const e = this.editor.model, r = t.attributes;
63
+ let n = t.position;
64
+ return e.canEditAt(n) ? e.change((a) => {
65
+ if (n = this._findPositionToInsertParagraph(n, a), !n) return null;
66
+ const s = a.createElement("paragraph");
67
+ return r && e.schema.setAllowedAttributes(s, r, a), e.insertContent(s, n), a.setSelection(s, "in"), a.createPositionAt(s, 0);
68
+ }) : null;
69
+ }
70
+ /**
71
+ * Returns the best position to insert a new paragraph.
72
+ */
73
+ _findPositionToInsertParagraph(t, e) {
74
+ const r = this.editor.model;
75
+ if (r.schema.checkChild(t, "paragraph")) return t;
76
+ const n = r.schema.findAllowedParent(t, "paragraph");
77
+ if (!n) return null;
78
+ const a = t.parent, s = r.schema.checkChild(a, "$text");
79
+ return a.isEmpty || s && t.isAtEnd ? r.createPositionAfter(a) : !a.isEmpty && s && t.isAtStart ? r.createPositionBefore(a) : e.split(t, n).position;
80
+ }
81
+ };
82
+ /**
83
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
84
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
85
+ */
86
+ var o, b = (o = class extends p {
87
+ /**
88
+ * @inheritDoc
89
+ */
90
+ static get pluginName() {
91
+ return "Paragraph";
92
+ }
93
+ /**
94
+ * @inheritDoc
95
+ */
96
+ static get isOfficialPlugin() {
97
+ return !0;
98
+ }
99
+ /**
100
+ * @inheritDoc
101
+ */
102
+ init() {
103
+ const e = this.editor, r = e.model;
104
+ e.commands.add("paragraph", new g(e)), e.commands.add("insertParagraph", new f(e)), r.schema.register("paragraph", { inheritAllFrom: "$block" }), e.conversion.elementToElement({
105
+ model: "paragraph",
106
+ view: "p"
107
+ }), e.conversion.for("upcast").elementToElement({
108
+ model: (n, { writer: a }) => !o.paragraphLikeElements.has(n.name) || n.isEmpty ? null : a.createElement("paragraph"),
109
+ view: /.+/,
110
+ converterPriority: "low"
111
+ });
112
+ }
113
+ }, /**
114
+ * A list of element names which should be treated by the autoparagraphing algorithms as
115
+ * paragraph-like. This means that e.g. the following content:
116
+ *
117
+ * ```html
118
+ * <h1>Foo</h1>
119
+ * <table>
120
+ * <tr>
121
+ * <td>X</td>
122
+ * <td>
123
+ * <ul>
124
+ * <li>Y</li>
125
+ * <li>Z</li>
126
+ * </ul>
127
+ * </td>
128
+ * </tr>
129
+ * </table>
130
+ * ```
131
+ *
132
+ * contains five paragraph-like elements: `<h1>`, two `<td>`s and two `<li>`s.
133
+ * Hence, if none of the features is going to convert those elements the above content will be automatically handled
134
+ * by the paragraph feature and converted to:
135
+ *
136
+ * ```html
137
+ * <p>Foo</p>
138
+ * <p>X</p>
139
+ * <p>Y</p>
140
+ * <p>Z</p>
141
+ * ```
142
+ *
143
+ * Note: The `<td>` containing two `<li>` elements was ignored as the innermost paragraph-like elements
144
+ * have a priority upon conversion.
145
+ */
146
+ c(o, "paragraphLikeElements", /* @__PURE__ */ new Set([
147
+ "blockquote",
148
+ "dd",
149
+ "div",
150
+ "dt",
151
+ "h1",
152
+ "h2",
153
+ "h3",
154
+ "h4",
155
+ "h5",
156
+ "h6",
157
+ "li",
158
+ "p",
159
+ "td",
160
+ "th"
161
+ ])), o);
162
+ export {
163
+ f as InsertParagraphCommand,
164
+ b as Paragraph,
165
+ g as ParagraphCommand
166
+ };
167
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../node_modules/@ckeditor/ckeditor5-paragraph/dist/index.js"],"sourcesContent":["/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\nimport { Command, Plugin } from \"@ckeditor/ckeditor5-core\";\nimport { first } from \"@ckeditor/ckeditor5-utils\";\nimport { ButtonView } from \"@ckeditor/ckeditor5-ui\";\nimport { IconParagraph } from \"@ckeditor/ckeditor5-icons\";\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module paragraph/paragraphcommand\n*/\n/**\n* The paragraph command.\n*/\nvar ParagraphCommand = class extends Command {\n\tconstructor(editor) {\n\t\tsuper(editor);\n\t\tthis._isEnabledBasedOnSelection = false;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\trefresh() {\n\t\tconst model = this.editor.model;\n\t\tconst document = model.document;\n\t\tconst block = first(document.selection.getSelectedBlocks());\n\t\tthis.value = !!block && block.is(\"element\", \"paragraph\");\n\t\tthis.isEnabled = !!block && checkCanBecomeParagraph(block, model.schema);\n\t}\n\t/**\n\t* Executes the command. All the blocks (see {@link module:engine/model/schema~ModelSchema}) in the selection\n\t* will be turned to paragraphs.\n\t*\n\t* @fires execute\n\t* @param options Options for the executed command.\n\t* @param options.selection The selection that the command should be applied to. By default,\n\t* if not provided, the command is applied to the {@link module:engine/model/document~ModelDocument#selection}.\n\t*/\n\texecute(options = {}) {\n\t\tconst model = this.editor.model;\n\t\tconst document = model.document;\n\t\tconst selection = options.selection || document.selection;\n\t\tif (!model.canEditAt(selection)) return;\n\t\tmodel.change((writer) => {\n\t\t\tconst blocks = selection.getSelectedBlocks();\n\t\t\tfor (const block of blocks) if (!block.is(\"element\", \"paragraph\") && checkCanBecomeParagraph(block, model.schema)) writer.rename(block, \"paragraph\");\n\t\t});\n\t}\n};\n/**\n* Checks whether the given block can be replaced by a paragraph.\n*\n* @param block A block to be tested.\n* @param schema The schema of the document.\n*/\nfunction checkCanBecomeParagraph(block, schema) {\n\treturn schema.checkChild(block.parent, \"paragraph\") && !schema.isObject(block);\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module paragraph/insertparagraphcommand\n*/\n/**\n* The insert paragraph command. It inserts a new paragraph at a specific\n* {@link module:engine/model/position~ModelPosition document position}.\n*\n* ```ts\n* // Insert a new paragraph before an element in the document.\n* editor.execute( 'insertParagraph', {\n* position: editor.model.createPositionBefore( element )\n* } );\n* ```\n*\n* If a paragraph is disallowed in the context of the specific position, the command\n* will attempt to split position ancestors to find a place where it is possible\n* to insert a paragraph.\n*\n* **Note**: This command moves the selection to the inserted paragraph.\n*/\nvar InsertParagraphCommand = class extends Command {\n\tconstructor(editor) {\n\t\tsuper(editor);\n\t\tthis._isEnabledBasedOnSelection = false;\n\t}\n\t/**\n\t* Executes the command.\n\t*\n\t* @param options Options for the executed command.\n\t* @param options.position The model position at which the new paragraph will be inserted.\n\t* @param options.attributes Attributes keys and values to set on a inserted paragraph.\n\t* @fires execute\n\t*/\n\texecute(options) {\n\t\tconst model = this.editor.model;\n\t\tconst attributes = options.attributes;\n\t\tlet position = options.position;\n\t\tif (!model.canEditAt(position)) return null;\n\t\treturn model.change((writer) => {\n\t\t\tposition = this._findPositionToInsertParagraph(position, writer);\n\t\t\tif (!position) return null;\n\t\t\tconst paragraph = writer.createElement(\"paragraph\");\n\t\t\tif (attributes) model.schema.setAllowedAttributes(paragraph, attributes, writer);\n\t\t\tmodel.insertContent(paragraph, position);\n\t\t\twriter.setSelection(paragraph, \"in\");\n\t\t\treturn writer.createPositionAt(paragraph, 0);\n\t\t});\n\t}\n\t/**\n\t* Returns the best position to insert a new paragraph.\n\t*/\n\t_findPositionToInsertParagraph(position, writer) {\n\t\tconst model = this.editor.model;\n\t\tif (model.schema.checkChild(position, \"paragraph\")) return position;\n\t\tconst allowedParent = model.schema.findAllowedParent(position, \"paragraph\");\n\t\tif (!allowedParent) return null;\n\t\tconst positionParent = position.parent;\n\t\tconst isTextAllowed = model.schema.checkChild(positionParent, \"$text\");\n\t\tif (positionParent.isEmpty || isTextAllowed && position.isAtEnd) return model.createPositionAfter(positionParent);\n\t\tif (!positionParent.isEmpty && isTextAllowed && position.isAtStart) return model.createPositionBefore(positionParent);\n\t\treturn writer.split(position, allowedParent).position;\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module paragraph/paragraph\n*/\n/**\n* The paragraph feature for the editor.\n*\n* It introduces the `<paragraph>` element in the model which renders as a `<p>` element in the DOM and data.\n*\n* It also brings two editors commands:\n*\n* * The {@link module:paragraph/paragraphcommand~ParagraphCommand `'paragraph'`} command that converts all\n* blocks in the model selection into paragraphs.\n* * The {@link module:paragraph/insertparagraphcommand~InsertParagraphCommand `'insertParagraph'`} command\n* that inserts a new paragraph at a specified location in the model.\n*/\nvar Paragraph = class Paragraph extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"Paragraph\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\teditor.commands.add(\"paragraph\", new ParagraphCommand(editor));\n\t\teditor.commands.add(\"insertParagraph\", new InsertParagraphCommand(editor));\n\t\tmodel.schema.register(\"paragraph\", { inheritAllFrom: \"$block\" });\n\t\teditor.conversion.elementToElement({\n\t\t\tmodel: \"paragraph\",\n\t\t\tview: \"p\"\n\t\t});\n\t\teditor.conversion.for(\"upcast\").elementToElement({\n\t\t\tmodel: (viewElement, { writer }) => {\n\t\t\t\tif (!Paragraph.paragraphLikeElements.has(viewElement.name)) return null;\n\t\t\t\tif (viewElement.isEmpty) return null;\n\t\t\t\treturn writer.createElement(\"paragraph\");\n\t\t\t},\n\t\t\tview: /.+/,\n\t\t\tconverterPriority: \"low\"\n\t\t});\n\t}\n\t/**\n\t* A list of element names which should be treated by the autoparagraphing algorithms as\n\t* paragraph-like. This means that e.g. the following content:\n\t*\n\t* ```html\n\t* <h1>Foo</h1>\n\t* <table>\n\t* <tr>\n\t* <td>X</td>\n\t* <td>\n\t* <ul>\n\t* <li>Y</li>\n\t* <li>Z</li>\n\t* </ul>\n\t* </td>\n\t* </tr>\n\t* </table>\n\t* ```\n\t*\n\t* contains five paragraph-like elements: `<h1>`, two `<td>`s and two `<li>`s.\n\t* Hence, if none of the features is going to convert those elements the above content will be automatically handled\n\t* by the paragraph feature and converted to:\n\t*\n\t* ```html\n\t* <p>Foo</p>\n\t* <p>X</p>\n\t* <p>Y</p>\n\t* <p>Z</p>\n\t* ```\n\t*\n\t* Note: The `<td>` containing two `<li>` elements was ignored as the innermost paragraph-like elements\n\t* have a priority upon conversion.\n\t*/\n\tstatic paragraphLikeElements = /* @__PURE__ */ new Set([\n\t\t\"blockquote\",\n\t\t\"dd\",\n\t\t\"div\",\n\t\t\"dt\",\n\t\t\"h1\",\n\t\t\"h2\",\n\t\t\"h3\",\n\t\t\"h4\",\n\t\t\"h5\",\n\t\t\"h6\",\n\t\t\"li\",\n\t\t\"p\",\n\t\t\"td\",\n\t\t\"th\"\n\t]);\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module paragraph/paragraphbuttonui\n*/\n/**\n* This plugin defines the `'paragraph'` button. It can be used together with\n* {@link module:heading/headingbuttonsui~HeadingButtonsUI} to replace the standard heading dropdown.\n*\n* This plugin is not loaded automatically by the {@link module:paragraph/paragraph~Paragraph} plugin. It must\n* be added manually.\n*\n* ```ts\n* ClassicEditor\n* .create( {\n* plugins: [ ..., Heading, Paragraph, HeadingButtonsUI, ParagraphButtonUI ]\n* toolbar: [ 'paragraph', 'heading1', 'heading2', 'heading3' ]\n* } )\n* .then( ... )\n* .catch( ... );\n* ```\n*/\nvar ParagraphButtonUI = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [Paragraph];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst t = editor.t;\n\t\teditor.ui.componentFactory.add(\"paragraph\", (locale) => {\n\t\t\tconst view = new ButtonView(locale);\n\t\t\tconst command = editor.commands.get(\"paragraph\");\n\t\t\tview.label = t(\"Paragraph\");\n\t\t\tview.icon = IconParagraph;\n\t\t\tview.tooltip = true;\n\t\t\tview.isToggleable = true;\n\t\t\tview.bind(\"isEnabled\").to(command);\n\t\t\tview.bind(\"isOn\").to(command, \"value\");\n\t\t\tview.on(\"execute\", () => {\n\t\t\t\teditor.execute(\"paragraph\");\n\t\t\t});\n\t\t\treturn view;\n\t\t});\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n\nexport { InsertParagraphCommand, Paragraph, ParagraphButtonUI, ParagraphCommand };\n//# sourceMappingURL=index.js.map"],"names":["ParagraphCommand","Command","editor","model","document","block","first","checkCanBecomeParagraph","options","selection","writer","blocks","schema","InsertParagraphCommand","attributes","position","paragraph","allowedParent","positionParent","isTextAllowed","Paragraph","_a","Plugin","viewElement","__publicField"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAUG,IAACA,IAAmB,cAAcC,EAAQ;AAAA,EAC5C,YAAYC,GAAQ;AACnB,UAAMA,CAAM,GACZ,KAAK,6BAA6B;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAIA,UAAU;AACT,UAAMC,IAAQ,KAAK,OAAO,OACpBC,IAAWD,EAAM,UACjBE,IAAQC,EAAMF,EAAS,UAAU,kBAAiB,CAAE;AAC1D,SAAK,QAAQ,CAAC,CAACC,KAASA,EAAM,GAAG,WAAW,WAAW,GACvD,KAAK,YAAY,CAAC,CAACA,KAASE,EAAwBF,GAAOF,EAAM,MAAM;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,QAAQK,IAAU,IAAI;AACrB,UAAML,IAAQ,KAAK,OAAO,OACpBC,IAAWD,EAAM,UACjBM,IAAYD,EAAQ,aAAaJ,EAAS;AAChD,IAAKD,EAAM,UAAUM,CAAS,KAC9BN,EAAM,OAAO,CAACO,MAAW;AACxB,YAAMC,IAASF,EAAU,kBAAiB;AAC1C,iBAAWJ,KAASM,EAAQ,CAAI,CAACN,EAAM,GAAG,WAAW,WAAW,KAAKE,EAAwBF,GAAOF,EAAM,MAAM,KAAGO,EAAO,OAAOL,GAAO,WAAW;AAAA,IACpJ,CAAC;AAAA,EACF;AACD;AAOA,SAASE,EAAwBF,GAAOO,GAAQ;AAC/C,SAAOA,EAAO,WAAWP,EAAM,QAAQ,WAAW,KAAK,CAACO,EAAO,SAASP,CAAK;AAC9E;AAEA;AAAA;AAAA;AAAA;AAwBG,IAACQ,IAAyB,cAAcZ,EAAQ;AAAA,EAClD,YAAYC,GAAQ;AACnB,UAAMA,CAAM,GACZ,KAAK,6BAA6B;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQM,GAAS;AAChB,UAAML,IAAQ,KAAK,OAAO,OACpBW,IAAaN,EAAQ;AAC3B,QAAIO,IAAWP,EAAQ;AACvB,WAAKL,EAAM,UAAUY,CAAQ,IACtBZ,EAAM,OAAO,CAACO,MAAW;AAE/B,UADAK,IAAW,KAAK,+BAA+BA,GAAUL,CAAM,GAC3D,CAACK,EAAU,QAAO;AACtB,YAAMC,IAAYN,EAAO,cAAc,WAAW;AAClD,aAAII,KAAYX,EAAM,OAAO,qBAAqBa,GAAWF,GAAYJ,CAAM,GAC/EP,EAAM,cAAca,GAAWD,CAAQ,GACvCL,EAAO,aAAaM,GAAW,IAAI,GAC5BN,EAAO,iBAAiBM,GAAW,CAAC;AAAA,IAC5C,CAAC,IATsC;AAAA,EAUxC;AAAA;AAAA;AAAA;AAAA,EAIA,+BAA+BD,GAAUL,GAAQ;AAChD,UAAMP,IAAQ,KAAK,OAAO;AAC1B,QAAIA,EAAM,OAAO,WAAWY,GAAU,WAAW,EAAG,QAAOA;AAC3D,UAAME,IAAgBd,EAAM,OAAO,kBAAkBY,GAAU,WAAW;AAC1E,QAAI,CAACE,EAAe,QAAO;AAC3B,UAAMC,IAAiBH,EAAS,QAC1BI,IAAgBhB,EAAM,OAAO,WAAWe,GAAgB,OAAO;AACrE,WAAIA,EAAe,WAAWC,KAAiBJ,EAAS,UAAgBZ,EAAM,oBAAoBe,CAAc,IAC5G,CAACA,EAAe,WAAWC,KAAiBJ,EAAS,YAAkBZ,EAAM,qBAAqBe,CAAc,IAC7GR,EAAO,MAAMK,GAAUE,CAAa,EAAE;AAAA,EAC9C;AACD;AAEA;AAAA;AAAA;AAAA;OAmBIG,KAAYC,IAAA,cAAwBC,EAAO;AAAA;AAAA;AAAA;AAAA,EAI9C,WAAW,aAAa;AACvB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,mBAAmB;AAC7B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO;AACN,UAAMpB,IAAS,KAAK,QACdC,IAAQD,EAAO;AACrB,IAAAA,EAAO,SAAS,IAAI,aAAa,IAAIF,EAAiBE,CAAM,CAAC,GAC7DA,EAAO,SAAS,IAAI,mBAAmB,IAAIW,EAAuBX,CAAM,CAAC,GACzEC,EAAM,OAAO,SAAS,aAAa,EAAE,gBAAgB,UAAU,GAC/DD,EAAO,WAAW,iBAAiB;AAAA,MAClC,OAAO;AAAA,MACP,MAAM;AAAA,IACT,CAAG,GACDA,EAAO,WAAW,IAAI,QAAQ,EAAE,iBAAiB;AAAA,MAChD,OAAO,CAACqB,GAAa,EAAE,QAAAb,QAClB,CAACW,EAAU,sBAAsB,IAAIE,EAAY,IAAI,KACrDA,EAAY,UAAgB,OACzBb,EAAO,cAAc,WAAW;AAAA,MAExC,MAAM;AAAA,MACN,mBAAmB;AAAA,IACtB,CAAG;AAAA,EACF;AAkDD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBCc,EArEeH,GAqER,yBAAwC,oBAAI,IAAI;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAE,IApFcA;","x_google_ignoreList":[0]}