@hkyhy/marsun-components-core 0.1.82 → 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 (285) 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/Table/ResizableHeaderCell.js +37 -38
  52. package/dist/components/Table/ResizableHeaderCell.js.map +1 -1
  53. package/dist/components/Table/Table.js +88 -89
  54. package/dist/components/Table/Table.js.map +1 -1
  55. package/dist/components/Table/columnConfigUtils.d.ts +1 -1
  56. package/dist/components/Table/columnConfigUtils.js.map +1 -1
  57. package/dist/components/Table/style.module.scss.js +34 -34
  58. package/dist/components/Tools/Inbox/InboxBell/InboxBell.d.ts +45 -0
  59. package/dist/components/Tools/Inbox/InboxBell/InboxBell.js +156 -0
  60. package/dist/components/Tools/Inbox/InboxBell/InboxBell.js.map +1 -0
  61. package/dist/components/Tools/Inbox/InboxBell/index.d.ts +2 -0
  62. package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js +30 -0
  63. package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js.map +1 -0
  64. package/dist/components/Tools/Inbox/index.d.ts +2 -0
  65. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.d.ts +8 -0
  66. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.js +56 -0
  67. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.js.map +1 -0
  68. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.d.ts +8 -0
  69. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js +216 -0
  70. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js.map +1 -0
  71. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.d.ts +26 -0
  72. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.js +190 -0
  73. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.js.map +1 -0
  74. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/index.d.ts +3 -0
  75. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/style.module.scss.js +12 -0
  76. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/style.module.scss.js.map +1 -0
  77. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.d.ts +76 -0
  78. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js +26 -0
  79. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js.map +1 -0
  80. package/dist/components/Tools/MessageCenter/index.d.ts +3 -0
  81. package/dist/components/Tools/MessageCenter/utils/templateCode.d.ts +8 -0
  82. package/dist/components/Tools/MessageCenter/utils/templateCode.js +25 -0
  83. package/dist/components/Tools/MessageCenter/utils/templateCode.js.map +1 -0
  84. package/dist/components/Tools/index.d.ts +5 -0
  85. package/dist/components/index.d.ts +3 -0
  86. package/dist/editor.d.ts +5 -0
  87. package/dist/editor.js +21 -0
  88. package/dist/editor.js.map +1 -0
  89. package/dist/form-info.js +33 -29
  90. package/dist/form-info.js.map +1 -1
  91. package/dist/index.d.ts +5 -0
  92. package/dist/index.js +805 -773
  93. package/dist/index.js.map +1 -1
  94. package/dist/marsun-components-core.css +4 -1
  95. package/dist/node_modules/@ckeditor/ckeditor5-basic-styles/dist/index.js +301 -0
  96. package/dist/node_modules/@ckeditor/ckeditor5-basic-styles/dist/index.js.map +1 -0
  97. package/dist/node_modules/@ckeditor/ckeditor5-clipboard/dist/index.js +1256 -0
  98. package/dist/node_modules/@ckeditor/ckeditor5-clipboard/dist/index.js.map +1 -0
  99. package/dist/node_modules/@ckeditor/ckeditor5-core/dist/index.js +2107 -0
  100. package/dist/node_modules/@ckeditor/ckeditor5-core/dist/index.js.map +1 -0
  101. package/dist/node_modules/@ckeditor/ckeditor5-editor-classic/dist/index.js +259 -0
  102. package/dist/node_modules/@ckeditor/ckeditor5-editor-classic/dist/index.js.map +1 -0
  103. package/dist/node_modules/@ckeditor/ckeditor5-engine/dist/index.js +23990 -0
  104. package/dist/node_modules/@ckeditor/ckeditor5-engine/dist/index.js.map +1 -0
  105. package/dist/node_modules/@ckeditor/ckeditor5-enter/dist/index.js +249 -0
  106. package/dist/node_modules/@ckeditor/ckeditor5-enter/dist/index.js.map +1 -0
  107. package/dist/node_modules/@ckeditor/ckeditor5-essentials/dist/index.js +47 -0
  108. package/dist/node_modules/@ckeditor/ckeditor5-essentials/dist/index.js.map +1 -0
  109. package/dist/node_modules/@ckeditor/ckeditor5-font/dist/index.js +100 -0
  110. package/dist/node_modules/@ckeditor/ckeditor5-font/dist/index.js.map +1 -0
  111. package/dist/node_modules/@ckeditor/ckeditor5-icons/dist/index.js +31 -0
  112. package/dist/node_modules/@ckeditor/ckeditor5-icons/dist/index.js.map +1 -0
  113. package/dist/node_modules/@ckeditor/ckeditor5-integrations-common/dist/index.js +194 -0
  114. package/dist/node_modules/@ckeditor/ckeditor5-integrations-common/dist/index.js.map +1 -0
  115. package/dist/node_modules/@ckeditor/ckeditor5-list/dist/index.js +2042 -0
  116. package/dist/node_modules/@ckeditor/ckeditor5-list/dist/index.js.map +1 -0
  117. package/dist/node_modules/@ckeditor/ckeditor5-mention/dist/index.js +9 -0
  118. package/dist/node_modules/@ckeditor/ckeditor5-mention/dist/index.js.map +1 -0
  119. package/dist/node_modules/@ckeditor/ckeditor5-paragraph/dist/index.js +167 -0
  120. package/dist/node_modules/@ckeditor/ckeditor5-paragraph/dist/index.js.map +1 -0
  121. package/dist/node_modules/@ckeditor/ckeditor5-react/dist/index.js +471 -0
  122. package/dist/node_modules/@ckeditor/ckeditor5-react/dist/index.js.map +1 -0
  123. package/dist/node_modules/@ckeditor/ckeditor5-select-all/dist/index.js +139 -0
  124. package/dist/node_modules/@ckeditor/ckeditor5-select-all/dist/index.js.map +1 -0
  125. package/dist/node_modules/@ckeditor/ckeditor5-typing/dist/index.js +755 -0
  126. package/dist/node_modules/@ckeditor/ckeditor5-typing/dist/index.js.map +1 -0
  127. package/dist/node_modules/@ckeditor/ckeditor5-ui/dist/index.js +7838 -0
  128. package/dist/node_modules/@ckeditor/ckeditor5-ui/dist/index.js.map +1 -0
  129. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/conversions.js +422 -0
  130. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/conversions.js.map +1 -0
  131. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/index.js +33 -0
  132. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/index.js.map +1 -0
  133. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/route.js +47 -0
  134. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/route.js.map +1 -0
  135. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-name/index.js +156 -0
  136. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-name/index.js.map +1 -0
  137. package/dist/node_modules/@ckeditor/ckeditor5-undo/dist/index.js +313 -0
  138. package/dist/node_modules/@ckeditor/ckeditor5-undo/dist/index.js.map +1 -0
  139. package/dist/node_modules/@ckeditor/ckeditor5-utils/dist/index.js +2942 -0
  140. package/dist/node_modules/@ckeditor/ckeditor5-utils/dist/index.js.map +1 -0
  141. package/dist/node_modules/@ckeditor/ckeditor5-watchdog/dist/index.js +892 -0
  142. package/dist/node_modules/@ckeditor/ckeditor5-watchdog/dist/index.js.map +1 -0
  143. package/dist/node_modules/@ckeditor/ckeditor5-widget/dist/index.js +1047 -0
  144. package/dist/node_modules/@ckeditor/ckeditor5-widget/dist/index.js.map +1 -0
  145. package/dist/node_modules/color-parse/node_modules/color-name/index.js +153 -0
  146. package/dist/node_modules/color-parse/node_modules/color-name/index.js.map +1 -0
  147. package/dist/node_modules/es-toolkit/dist/_internal/globalThis.js +7 -0
  148. package/dist/node_modules/es-toolkit/dist/_internal/globalThis.js.map +1 -0
  149. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js +7 -0
  150. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js.map +1 -0
  151. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeToWriteProperty.js +7 -0
  152. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeToWriteProperty.js.map +1 -0
  153. package/dist/node_modules/es-toolkit/dist/compat/_internal/assignValue.js +9 -0
  154. package/dist/node_modules/es-toolkit/dist/compat/_internal/assignValue.js.map +1 -0
  155. package/dist/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js +7 -0
  156. package/dist/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js.map +1 -0
  157. package/dist/node_modules/es-toolkit/dist/compat/_internal/getTag.js +7 -0
  158. package/dist/node_modules/es-toolkit/dist/compat/_internal/getTag.js.map +1 -0
  159. package/dist/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js +16 -0
  160. package/dist/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js.map +1 -0
  161. package/dist/node_modules/es-toolkit/dist/compat/_internal/isIndex.js +15 -0
  162. package/dist/node_modules/es-toolkit/dist/compat/_internal/isIndex.js.map +1 -0
  163. package/dist/node_modules/es-toolkit/dist/compat/_internal/isKey.js +9 -0
  164. package/dist/node_modules/es-toolkit/dist/compat/_internal/isKey.js.map +1 -0
  165. package/dist/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js +8 -0
  166. package/dist/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js.map +1 -0
  167. package/dist/node_modules/es-toolkit/dist/compat/_internal/tags.js +30 -0
  168. package/dist/node_modules/es-toolkit/dist/compat/_internal/tags.js.map +1 -0
  169. package/dist/node_modules/es-toolkit/dist/compat/_internal/toKey.js +8 -0
  170. package/dist/node_modules/es-toolkit/dist/compat/_internal/toKey.js.map +1 -0
  171. package/dist/node_modules/es-toolkit/dist/compat/function/debounce.js +17 -0
  172. package/dist/node_modules/es-toolkit/dist/compat/function/debounce.js.map +1 -0
  173. package/dist/node_modules/es-toolkit/dist/compat/function/throttle.js +13 -0
  174. package/dist/node_modules/es-toolkit/dist/compat/function/throttle.js.map +1 -0
  175. package/dist/node_modules/es-toolkit/dist/compat/object/assignIn.js +17 -0
  176. package/dist/node_modules/es-toolkit/dist/compat/object/assignIn.js.map +1 -0
  177. package/dist/node_modules/es-toolkit/dist/compat/object/clone.js +102 -0
  178. package/dist/node_modules/es-toolkit/dist/compat/object/clone.js.map +1 -0
  179. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeep.js +8 -0
  180. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeep.js.map +1 -0
  181. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js +33 -0
  182. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js.map +1 -0
  183. package/dist/node_modules/es-toolkit/dist/compat/object/get.js +39 -0
  184. package/dist/node_modules/es-toolkit/dist/compat/object/get.js.map +1 -0
  185. package/dist/node_modules/es-toolkit/dist/compat/object/has.js +21 -0
  186. package/dist/node_modules/es-toolkit/dist/compat/object/has.js.map +1 -0
  187. package/dist/node_modules/es-toolkit/dist/compat/object/keysIn.js +33 -0
  188. package/dist/node_modules/es-toolkit/dist/compat/object/keysIn.js.map +1 -0
  189. package/dist/node_modules/es-toolkit/dist/compat/object/mapValues.js +10 -0
  190. package/dist/node_modules/es-toolkit/dist/compat/object/mapValues.js.map +1 -0
  191. package/dist/node_modules/es-toolkit/dist/compat/object/merge.js +9 -0
  192. package/dist/node_modules/es-toolkit/dist/compat/object/merge.js.map +1 -0
  193. package/dist/node_modules/es-toolkit/dist/compat/object/mergeWith.js +53 -0
  194. package/dist/node_modules/es-toolkit/dist/compat/object/mergeWith.js.map +1 -0
  195. package/dist/node_modules/es-toolkit/dist/compat/object/property.js +10 -0
  196. package/dist/node_modules/es-toolkit/dist/compat/object/property.js.map +1 -0
  197. package/dist/node_modules/es-toolkit/dist/compat/object/set.js +9 -0
  198. package/dist/node_modules/es-toolkit/dist/compat/object/set.js.map +1 -0
  199. package/dist/node_modules/es-toolkit/dist/compat/object/updateWith.js +31 -0
  200. package/dist/node_modules/es-toolkit/dist/compat/object/updateWith.js.map +1 -0
  201. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArguments.js +8 -0
  202. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArguments.js.map +1 -0
  203. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArray.js +7 -0
  204. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArray.js.map +1 -0
  205. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js +8 -0
  206. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js.map +1 -0
  207. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js +9 -0
  208. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js.map +1 -0
  209. package/dist/node_modules/es-toolkit/dist/compat/predicate/isElement.js +9 -0
  210. package/dist/node_modules/es-toolkit/dist/compat/predicate/isElement.js.map +1 -0
  211. package/dist/node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js +15 -0
  212. package/dist/node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js.map +1 -0
  213. package/dist/node_modules/es-toolkit/dist/compat/predicate/isFunction.js +7 -0
  214. package/dist/node_modules/es-toolkit/dist/compat/predicate/isFunction.js.map +1 -0
  215. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatch.js +9 -0
  216. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatch.js.map +1 -0
  217. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js +81 -0
  218. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js.map +1 -0
  219. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObject.js +7 -0
  220. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObject.js.map +1 -0
  221. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js +7 -0
  222. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js.map +1 -0
  223. package/dist/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js +16 -0
  224. package/dist/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js.map +1 -0
  225. package/dist/node_modules/es-toolkit/dist/compat/predicate/isString.js +7 -0
  226. package/dist/node_modules/es-toolkit/dist/compat/predicate/isString.js.map +1 -0
  227. package/dist/node_modules/es-toolkit/dist/compat/predicate/isSymbol.js +7 -0
  228. package/dist/node_modules/es-toolkit/dist/compat/predicate/isSymbol.js.map +1 -0
  229. package/dist/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js +8 -0
  230. package/dist/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js.map +1 -0
  231. package/dist/node_modules/es-toolkit/dist/compat/predicate/matches.js +9 -0
  232. package/dist/node_modules/es-toolkit/dist/compat/predicate/matches.js.map +1 -0
  233. package/dist/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js +23 -0
  234. package/dist/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js.map +1 -0
  235. package/dist/node_modules/es-toolkit/dist/compat/util/eq.js +7 -0
  236. package/dist/node_modules/es-toolkit/dist/compat/util/eq.js.map +1 -0
  237. package/dist/node_modules/es-toolkit/dist/compat/util/iteratee.js +19 -0
  238. package/dist/node_modules/es-toolkit/dist/compat/util/iteratee.js.map +1 -0
  239. package/dist/node_modules/es-toolkit/dist/compat/util/times.js +11 -0
  240. package/dist/node_modules/es-toolkit/dist/compat/util/times.js.map +1 -0
  241. package/dist/node_modules/es-toolkit/dist/compat/util/toFinite.js +8 -0
  242. package/dist/node_modules/es-toolkit/dist/compat/util/toFinite.js.map +1 -0
  243. package/dist/node_modules/es-toolkit/dist/compat/util/toInteger.js +9 -0
  244. package/dist/node_modules/es-toolkit/dist/compat/util/toInteger.js.map +1 -0
  245. package/dist/node_modules/es-toolkit/dist/compat/util/toNumber.js +8 -0
  246. package/dist/node_modules/es-toolkit/dist/compat/util/toNumber.js.map +1 -0
  247. package/dist/node_modules/es-toolkit/dist/compat/util/toPath.js +37 -0
  248. package/dist/node_modules/es-toolkit/dist/compat/util/toPath.js.map +1 -0
  249. package/dist/node_modules/es-toolkit/dist/compat/util/toString.js +15 -0
  250. package/dist/node_modules/es-toolkit/dist/compat/util/toString.js.map +1 -0
  251. package/dist/node_modules/es-toolkit/dist/function/after.js +11 -0
  252. package/dist/node_modules/es-toolkit/dist/function/after.js.map +1 -0
  253. package/dist/node_modules/es-toolkit/dist/function/debounce.js +30 -0
  254. package/dist/node_modules/es-toolkit/dist/function/debounce.js.map +1 -0
  255. package/dist/node_modules/es-toolkit/dist/function/identity.js +7 -0
  256. package/dist/node_modules/es-toolkit/dist/function/identity.js.map +1 -0
  257. package/dist/node_modules/es-toolkit/dist/function/noop.js +6 -0
  258. package/dist/node_modules/es-toolkit/dist/function/noop.js.map +1 -0
  259. package/dist/node_modules/es-toolkit/dist/object/clone.js +27 -0
  260. package/dist/node_modules/es-toolkit/dist/object/clone.js.map +1 -0
  261. package/dist/node_modules/es-toolkit/dist/object/cloneDeep.js +8 -0
  262. package/dist/node_modules/es-toolkit/dist/object/cloneDeep.js.map +1 -0
  263. package/dist/node_modules/es-toolkit/dist/object/cloneDeepWith.js +121 -0
  264. package/dist/node_modules/es-toolkit/dist/object/cloneDeepWith.js.map +1 -0
  265. package/dist/node_modules/es-toolkit/dist/object/mapValues.js +12 -0
  266. package/dist/node_modules/es-toolkit/dist/object/mapValues.js.map +1 -0
  267. package/dist/node_modules/es-toolkit/dist/predicate/isBuffer.js +8 -0
  268. package/dist/node_modules/es-toolkit/dist/predicate/isBuffer.js.map +1 -0
  269. package/dist/node_modules/es-toolkit/dist/predicate/isEqual.js +9 -0
  270. package/dist/node_modules/es-toolkit/dist/predicate/isEqual.js.map +1 -0
  271. package/dist/node_modules/es-toolkit/dist/predicate/isEqualWith.js +110 -0
  272. package/dist/node_modules/es-toolkit/dist/predicate/isEqualWith.js.map +1 -0
  273. package/dist/node_modules/es-toolkit/dist/predicate/isLength.js +7 -0
  274. package/dist/node_modules/es-toolkit/dist/predicate/isLength.js.map +1 -0
  275. package/dist/node_modules/es-toolkit/dist/predicate/isPlainObject.js +9 -0
  276. package/dist/node_modules/es-toolkit/dist/predicate/isPlainObject.js.map +1 -0
  277. package/dist/node_modules/es-toolkit/dist/predicate/isPrimitive.js +7 -0
  278. package/dist/node_modules/es-toolkit/dist/predicate/isPrimitive.js.map +1 -0
  279. package/dist/node_modules/es-toolkit/dist/predicate/isTypedArray.js +7 -0
  280. package/dist/node_modules/es-toolkit/dist/predicate/isTypedArray.js.map +1 -0
  281. package/dist/styles/global.css +4 -1
  282. package/dist/utils/copyText.d.ts +4 -0
  283. package/dist/utils/copyText.js +21 -0
  284. package/dist/utils/copyText.js.map +1 -0
  285. package/package.json +9 -2
@@ -0,0 +1,249 @@
1
+ import { Plugin as u, Command as m } from "../../ckeditor5-core/dist/index.js";
2
+ import { Observer as E, BubblingEventInfo as b, ViewDocumentDomEventData as v } from "../../ckeditor5-engine/dist/index.js";
3
+ import { env as k } from "../../ckeditor5-utils/dist/index.js";
4
+ /**
5
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
6
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
7
+ */
8
+ /**
9
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
10
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
11
+ */
12
+ function* p(e, t) {
13
+ for (const n of t) n && e.getAttributeProperties(n[0]).copyOnEnter && (yield n);
14
+ }
15
+ /**
16
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
17
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
18
+ */
19
+ var S = class extends m {
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ execute() {
24
+ this.editor.model.change((e) => {
25
+ this.enterBlock(e), this.fire("afterExecute", { writer: e });
26
+ });
27
+ }
28
+ /**
29
+ * Splits a block where the document selection is placed, in the way how the <kbd>Enter</kbd> key is expected to work:
30
+ *
31
+ * ```
32
+ * <p>Foo[]bar</p> -> <p>Foo</p><p>[]bar</p>
33
+ * <p>Foobar[]</p> -> <p>Foobar</p><p>[]</p>
34
+ * <p>Fo[ob]ar</p> -> <p>Fo</p><p>[]ar</p>
35
+ * ```
36
+ *
37
+ * In some cases, the split will not happen:
38
+ *
39
+ * ```
40
+ * // The selection parent is a limit element:
41
+ * <figcaption>A[bc]d</figcaption> -> <figcaption>A[]d</figcaption>
42
+ *
43
+ * // The selection spans over multiple elements:
44
+ * <h>x[x</h><p>y]y<p> -> <h>x</h><p>[]y</p>
45
+ * ```
46
+ *
47
+ * @param writer Writer to use when performing the enter action.
48
+ * @returns Boolean indicating if the block was split.
49
+ */
50
+ enterBlock(e) {
51
+ const t = this.editor.model, n = t.document.selection, s = t.schema, r = n.isCollapsed, i = n.getFirstRange(), a = i.start.parent, o = i.end.parent;
52
+ if (s.isLimit(a) || s.isLimit(o))
53
+ return !r && a == o && t.deleteContent(n), !1;
54
+ if (r) {
55
+ const c = p(e.model.schema, n.getAttributes());
56
+ return f(e, i.start), e.setSelectionAttribute(c), !0;
57
+ } else {
58
+ const c = !(i.start.isAtStart && i.end.isAtEnd), h = a == o;
59
+ if (t.deleteContent(n, { leaveUnmerged: c }), c) {
60
+ if (h)
61
+ return f(e, n.focus), !0;
62
+ e.setSelection(o, 0);
63
+ }
64
+ }
65
+ return !1;
66
+ }
67
+ };
68
+ function f(e, t) {
69
+ e.split(t), e.setSelection(t.parent.nextSibling, 0);
70
+ }
71
+ /**
72
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
73
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
74
+ */
75
+ const y = {
76
+ insertParagraph: { isSoft: !1 },
77
+ insertLineBreak: { isSoft: !0 }
78
+ };
79
+ var g = class extends E {
80
+ /**
81
+ * @inheritDoc
82
+ */
83
+ constructor(e) {
84
+ super(e);
85
+ const t = this.document;
86
+ let n = !1;
87
+ t.on("keydown", (s, r) => {
88
+ n = r.shiftKey;
89
+ }), t.on("beforeinput", (s, r) => {
90
+ if (!this.isEnabled) return;
91
+ let i = r.inputType;
92
+ k.isSafari && n && i == "insertParagraph" && (i = "insertLineBreak");
93
+ const a = r.domEvent, o = y[i];
94
+ if (!o) return;
95
+ const c = new b(t, "enter", r.targetRanges[0]);
96
+ t.fire(c, new v(e, a, { isSoft: o.isSoft })), c.stop.called && s.stop();
97
+ });
98
+ }
99
+ /**
100
+ * @inheritDoc
101
+ */
102
+ observe() {
103
+ }
104
+ /**
105
+ * @inheritDoc
106
+ */
107
+ stopObserving() {
108
+ }
109
+ };
110
+ /**
111
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
112
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
113
+ */
114
+ var D = class extends u {
115
+ /**
116
+ * @inheritDoc
117
+ */
118
+ static get pluginName() {
119
+ return "Enter";
120
+ }
121
+ /**
122
+ * @inheritDoc
123
+ */
124
+ static get isOfficialPlugin() {
125
+ return !0;
126
+ }
127
+ init() {
128
+ const e = this.editor, t = e.editing.view, n = t.document, s = this.editor.t;
129
+ t.addObserver(g), e.commands.add("enter", new S(e)), this.listenTo(n, "enter", (r, i) => {
130
+ n.isComposing || i.preventDefault(), !i.isSoft && (e.execute("enter"), t.scrollToTheSelection());
131
+ }, { priority: "low" }), e.accessibility.addKeystrokeInfos({ keystrokes: [{
132
+ label: s("Insert a hard break (a new paragraph)"),
133
+ keystroke: "Enter"
134
+ }] });
135
+ }
136
+ };
137
+ /**
138
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
139
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
140
+ */
141
+ var C = class extends m {
142
+ /**
143
+ * @inheritDoc
144
+ */
145
+ execute() {
146
+ const e = this.editor.model, t = e.document;
147
+ e.change((n) => {
148
+ x(e, n, t.selection), this.fire("afterExecute", { writer: n });
149
+ });
150
+ }
151
+ /**
152
+ * @inheritDoc
153
+ */
154
+ refresh() {
155
+ const e = this.editor.model, t = e.document;
156
+ this.isEnabled = A(e.schema, t.selection);
157
+ }
158
+ };
159
+ function A(e, t) {
160
+ if (t.rangeCount > 1) return !1;
161
+ const n = t.anchor;
162
+ if (!n || !e.checkChild(n, "softBreak")) return !1;
163
+ const s = t.getFirstRange(), r = s.start.parent, i = s.end.parent;
164
+ return !((l(r, e) || l(i, e)) && r !== i);
165
+ }
166
+ function x(e, t, n) {
167
+ const s = n.isCollapsed, r = n.getFirstRange(), i = r.start.parent, a = r.end.parent, o = i == a;
168
+ if (s) d(e, t, r.end, n.getAttributes());
169
+ else {
170
+ const c = !(r.start.isAtStart && r.end.isAtEnd);
171
+ e.deleteContent(n, { leaveUnmerged: c }), o ? d(e, t, n.focus, n.getAttributes()) : c && t.setSelection(a, 0);
172
+ }
173
+ }
174
+ function d(e, t, n, s) {
175
+ const r = Array.from(p(e.schema, s)), i = t.createElement("softBreak", r);
176
+ e.insertContent(i, n), t.setSelection(i, "after");
177
+ }
178
+ function l(e, t) {
179
+ return e.is("rootElement") ? !1 : t.isLimit(e) || l(e.parent, t);
180
+ }
181
+ /**
182
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
183
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
184
+ */
185
+ var I = class extends u {
186
+ /**
187
+ * @inheritDoc
188
+ */
189
+ static get pluginName() {
190
+ return "ShiftEnter";
191
+ }
192
+ /**
193
+ * @inheritDoc
194
+ */
195
+ static get isOfficialPlugin() {
196
+ return !0;
197
+ }
198
+ init() {
199
+ const e = this.editor, t = e.model.schema, n = e.conversion, s = e.editing.view, r = s.document, i = this.editor.t;
200
+ t.register("softBreak", {
201
+ allowWhere: "$text",
202
+ allowAttributesOf: "$text",
203
+ isInline: !0
204
+ }), n.for("upcast").elementToElement({
205
+ model: "softBreak",
206
+ view: "br"
207
+ }), n.for("downcast").elementToElement({
208
+ model: "softBreak",
209
+ view: (a, { writer: o }) => o.createEmptyElement("br")
210
+ }), s.addObserver(g), e.commands.add("shiftEnter", new C(e)), e.model.document.registerPostFixer((a) => T(a)), this.listenTo(r, "enter", (a, o) => {
211
+ r.isComposing || o.preventDefault(), o.isSoft && (e.execute("shiftEnter"), s.scrollToTheSelection());
212
+ }, { priority: "low" }), e.accessibility.addKeystrokeInfos({ keystrokes: [{
213
+ label: i("Insert a soft break (a <code>&lt;br&gt;</code> element)"),
214
+ keystroke: "Shift+Enter"
215
+ }] });
216
+ }
217
+ };
218
+ function T(e) {
219
+ const t = /* @__PURE__ */ new Set();
220
+ for (const s of e.model.document.differ.getChanges()) if (s.type == "insert" || s.type == "remove") {
221
+ /* v8 ignore else -- @preserve */
222
+ s.position.parent.is("element") && t.add(s.position.parent);
223
+ } else if (s.type == "attribute") {
224
+ /* v8 ignore else -- @preserve */
225
+ s.range.start.parent.is("element") && t.add(s.range.start.parent);
226
+ }
227
+ let n = !1;
228
+ for (const s of t) for (const r of s.getChildren()) {
229
+ if (!r.is("element", "softBreak")) continue;
230
+ const i = r.nextSibling;
231
+ if (!i || i.is("element")) continue;
232
+ const a = Array.from(r.getAttributes()).filter(([o, c]) => !B(i, o, c));
233
+ for (const [o] of a)
234
+ e.removeAttribute(o, r), n = !0;
235
+ }
236
+ return n;
237
+ }
238
+ function B(e, t, n) {
239
+ return (e == null ? void 0 : e.getAttribute(t)) === n;
240
+ }
241
+ export {
242
+ D as Enter,
243
+ S as EnterCommand,
244
+ g as EnterObserver,
245
+ I as ShiftEnter,
246
+ C as ShiftEnterCommand,
247
+ p as _getCopyOnEnterAttributes
248
+ };
249
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../node_modules/@ckeditor/ckeditor5-enter/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 { BubblingEventInfo, Observer, ViewDocumentDomEventData } from \"@ckeditor/ckeditor5-engine\";\nimport { env } from \"@ckeditor/ckeditor5-utils\";\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* Returns attributes that should be preserved on the enter keystroke.\n*\n* Filtering is realized based on `copyOnEnter` attribute property. Read more about attribute properties\n* {@link module:engine/model/schema~ModelSchema#setAttributeProperties here}.\n*\n* @param schema Model's schema.\n* @param allAttributes Attributes to filter.\n* @internal\n*/\nfunction* getCopyOnEnterAttributes(schema, allAttributes) {\n\tfor (const attribute of allAttributes) if (attribute && schema.getAttributeProperties(attribute[0]).copyOnEnter) yield attribute;\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 enter/entercommand\n*/\n/**\n* Enter command used by the {@link module:enter/enter~Enter Enter feature} to handle the <kbd>Enter</kbd> keystroke.\n*/\nvar EnterCommand = class extends Command {\n\t/**\n\t* @inheritDoc\n\t*/\n\texecute() {\n\t\tthis.editor.model.change((writer) => {\n\t\t\tthis.enterBlock(writer);\n\t\t\tthis.fire(\"afterExecute\", { writer });\n\t\t});\n\t}\n\t/**\n\t* Splits a block where the document selection is placed, in the way how the <kbd>Enter</kbd> key is expected to work:\n\t*\n\t* ```\n\t* <p>Foo[]bar</p> -> <p>Foo</p><p>[]bar</p>\n\t* <p>Foobar[]</p> -> <p>Foobar</p><p>[]</p>\n\t* <p>Fo[ob]ar</p> -> <p>Fo</p><p>[]ar</p>\n\t* ```\n\t*\n\t* In some cases, the split will not happen:\n\t*\n\t* ```\n\t* // The selection parent is a limit element:\n\t* <figcaption>A[bc]d</figcaption> -> <figcaption>A[]d</figcaption>\n\t*\n\t* // The selection spans over multiple elements:\n\t* <h>x[x</h><p>y]y<p> -> <h>x</h><p>[]y</p>\n\t* ```\n\t*\n\t* @param writer Writer to use when performing the enter action.\n\t* @returns Boolean indicating if the block was split.\n\t*/\n\tenterBlock(writer) {\n\t\tconst model = this.editor.model;\n\t\tconst selection = model.document.selection;\n\t\tconst schema = model.schema;\n\t\tconst isSelectionEmpty = selection.isCollapsed;\n\t\tconst range = selection.getFirstRange();\n\t\tconst startElement = range.start.parent;\n\t\tconst endElement = range.end.parent;\n\t\tif (schema.isLimit(startElement) || schema.isLimit(endElement)) {\n\t\t\tif (!isSelectionEmpty && startElement == endElement) model.deleteContent(selection);\n\t\t\treturn false;\n\t\t}\n\t\tif (isSelectionEmpty) {\n\t\t\tconst attributesToCopy = getCopyOnEnterAttributes(writer.model.schema, selection.getAttributes());\n\t\t\tsplitBlock(writer, range.start);\n\t\t\twriter.setSelectionAttribute(attributesToCopy);\n\t\t\treturn true;\n\t\t} else {\n\t\t\tconst leaveUnmerged = !(range.start.isAtStart && range.end.isAtEnd);\n\t\t\tconst isContainedWithinOneElement = startElement == endElement;\n\t\t\tmodel.deleteContent(selection, { leaveUnmerged });\n\t\t\tif (leaveUnmerged) if (isContainedWithinOneElement) {\n\t\t\t\tsplitBlock(writer, selection.focus);\n\t\t\t\treturn true;\n\t\t\t} else writer.setSelection(endElement, 0);\n\t\t}\n\t\treturn false;\n\t}\n};\nfunction splitBlock(writer, splitPos) {\n\twriter.split(splitPos);\n\twriter.setSelection(splitPos.parent.nextSibling, 0);\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 enter/enterobserver\n*/\nconst ENTER_EVENT_TYPES = {\n\tinsertParagraph: { isSoft: false },\n\tinsertLineBreak: { isSoft: true }\n};\n/**\n* Enter observer introduces the {@link module:engine/view/document~ViewDocument#event:enter `Document#enter`} event.\n*/\nvar EnterObserver = class extends Observer {\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor(view) {\n\t\tsuper(view);\n\t\tconst doc = this.document;\n\t\tlet shiftPressed = false;\n\t\tdoc.on(\"keydown\", (evt, data) => {\n\t\t\tshiftPressed = data.shiftKey;\n\t\t});\n\t\tdoc.on(\"beforeinput\", (evt, data) => {\n\t\t\tif (!this.isEnabled) return;\n\t\t\tlet inputType = data.inputType;\n\t\t\tif (env.isSafari && shiftPressed && inputType == \"insertParagraph\") inputType = \"insertLineBreak\";\n\t\t\tconst domEvent = data.domEvent;\n\t\t\tconst enterEventSpec = ENTER_EVENT_TYPES[inputType];\n\t\t\tif (!enterEventSpec) return;\n\t\t\tconst event = new BubblingEventInfo(doc, \"enter\", data.targetRanges[0]);\n\t\t\tdoc.fire(event, new ViewDocumentDomEventData(view, domEvent, { isSoft: enterEventSpec.isSoft }));\n\t\t\tif (event.stop.called) evt.stop();\n\t\t});\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tobserve() {}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstopObserving() {}\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 enter/enter\n*/\n/**\n* This plugin handles the <kbd>Enter</kbd> keystroke (hard line break) in the editor.\n*\n* See also the {@link module:enter/shiftenter~ShiftEnter} plugin.\n*\n* For more information about this feature see the {@glink api/enter package page}.\n*/\nvar Enter = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"Enter\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst t = this.editor.t;\n\t\tview.addObserver(EnterObserver);\n\t\teditor.commands.add(\"enter\", new EnterCommand(editor));\n\t\tthis.listenTo(viewDocument, \"enter\", (evt, data) => {\n\t\t\tif (!viewDocument.isComposing) data.preventDefault();\n\t\t\tif (data.isSoft) return;\n\t\t\teditor.execute(\"enter\");\n\t\t\tview.scrollToTheSelection();\n\t\t}, { priority: \"low\" });\n\t\teditor.accessibility.addKeystrokeInfos({ keystrokes: [{\n\t\t\tlabel: t(\"Insert a hard break (a new paragraph)\"),\n\t\t\tkeystroke: \"Enter\"\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 enter/shiftentercommand\n*/\n/**\n* ShiftEnter command. It is used by the {@link module:enter/shiftenter~ShiftEnter ShiftEnter feature} to handle\n* the <kbd>Shift</kbd>+<kbd>Enter</kbd> keystroke.\n*/\nvar ShiftEnterCommand = class extends Command {\n\t/**\n\t* @inheritDoc\n\t*/\n\texecute() {\n\t\tconst model = this.editor.model;\n\t\tconst doc = model.document;\n\t\tmodel.change((writer) => {\n\t\t\tsoftBreakAction(model, writer, doc.selection);\n\t\t\tthis.fire(\"afterExecute\", { writer });\n\t\t});\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 = isEnabled(model.schema, doc.selection);\n\t}\n};\n/**\n* Checks whether the ShiftEnter command should be enabled in the specified selection.\n*/\nfunction isEnabled(schema, selection) {\n\tif (selection.rangeCount > 1) return false;\n\tconst anchorPos = selection.anchor;\n\tif (!anchorPos || !schema.checkChild(anchorPos, \"softBreak\")) return false;\n\tconst range = selection.getFirstRange();\n\tconst startElement = range.start.parent;\n\tconst endElement = range.end.parent;\n\tif ((isInsideLimitElement(startElement, schema) || isInsideLimitElement(endElement, schema)) && startElement !== endElement) return false;\n\treturn true;\n}\n/**\n* Creates a break in the way that the <kbd>Shift</kbd>+<kbd>Enter</kbd> keystroke is expected to work.\n*/\nfunction softBreakAction(model, writer, selection) {\n\tconst isSelectionEmpty = selection.isCollapsed;\n\tconst range = selection.getFirstRange();\n\tconst startElement = range.start.parent;\n\tconst endElement = range.end.parent;\n\tconst isContainedWithinOneElement = startElement == endElement;\n\tif (isSelectionEmpty) insertBreak(model, writer, range.end, selection.getAttributes());\n\telse {\n\t\tconst leaveUnmerged = !(range.start.isAtStart && range.end.isAtEnd);\n\t\tmodel.deleteContent(selection, { leaveUnmerged });\n\t\tif (isContainedWithinOneElement) insertBreak(model, writer, selection.focus, selection.getAttributes());\n\t\telse if (leaveUnmerged) writer.setSelection(endElement, 0);\n\t}\n}\n/**\n* Inserts a softBreak with applicable attributes.\n*/\nfunction insertBreak(model, writer, position, selectionAttributes) {\n\tconst attributes = Array.from(getCopyOnEnterAttributes(model.schema, selectionAttributes));\n\tconst breakLineElement = writer.createElement(\"softBreak\", attributes);\n\tmodel.insertContent(breakLineElement, position);\n\twriter.setSelection(breakLineElement, \"after\");\n}\n/**\n* Checks whether the specified `element` is a child of the limit element.\n*\n* Checking whether the `<p>` element is inside a limit element:\n* - `<$root><p>Text.</p></$root> => false`\n* - `<$root><limitElement><p>Text</p></limitElement></$root> => true`\n*/\nfunction isInsideLimitElement(element, schema) {\n\tif (element.is(\"rootElement\")) return false;\n\treturn schema.isLimit(element) || isInsideLimitElement(element.parent, schema);\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 enter/shiftenter\n*/\n/**\n* This plugin handles the <kbd>Shift</kbd>+<kbd>Enter</kbd> keystroke (soft line break) in the editor.\n*\n* See also the {@link module:enter/enter~Enter} plugin.\n*\n* For more information about this feature see the {@glink api/enter package page}.\n*/\nvar ShiftEnter = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"ShiftEnter\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst schema = editor.model.schema;\n\t\tconst conversion = editor.conversion;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst t = this.editor.t;\n\t\tschema.register(\"softBreak\", {\n\t\t\tallowWhere: \"$text\",\n\t\t\tallowAttributesOf: \"$text\",\n\t\t\tisInline: true\n\t\t});\n\t\tconversion.for(\"upcast\").elementToElement({\n\t\t\tmodel: \"softBreak\",\n\t\t\tview: \"br\"\n\t\t});\n\t\tconversion.for(\"downcast\").elementToElement({\n\t\t\tmodel: \"softBreak\",\n\t\t\tview: (modelElement, { writer }) => writer.createEmptyElement(\"br\")\n\t\t});\n\t\tview.addObserver(EnterObserver);\n\t\teditor.commands.add(\"shiftEnter\", new ShiftEnterCommand(editor));\n\t\teditor.model.document.registerPostFixer((writer) => removeStaleSoftBreakAttributes(writer));\n\t\tthis.listenTo(viewDocument, \"enter\", (evt, data) => {\n\t\t\tif (!viewDocument.isComposing) data.preventDefault();\n\t\t\tif (!data.isSoft) return;\n\t\t\teditor.execute(\"shiftEnter\");\n\t\t\tview.scrollToTheSelection();\n\t\t}, { priority: \"low\" });\n\t\teditor.accessibility.addKeystrokeInfos({ keystrokes: [{\n\t\t\tlabel: t(\"Insert a soft break (a <code>&lt;br&gt;</code> element)\"),\n\t\t\tkeystroke: \"Shift+Enter\"\n\t\t}] });\n\t}\n};\n/**\n* The post-fixer that removes attributes from stale soft-break elements.\n*/\nfunction removeStaleSoftBreakAttributes(writer) {\n\tconst parentsToCheck = /* @__PURE__ */ new Set();\n\tfor (const change of writer.model.document.differ.getChanges()) if (change.type == \"insert\" || change.type == \"remove\") {\n\t\t/* v8 ignore else -- @preserve */\n\t\tif (change.position.parent.is(\"element\")) parentsToCheck.add(change.position.parent);\n\t} else if (change.type == \"attribute\") {\n\t\t/* v8 ignore else -- @preserve */\n\t\tif (change.range.start.parent.is(\"element\")) parentsToCheck.add(change.range.start.parent);\n\t}\n\tlet wasChanged = false;\n\tfor (const parent of parentsToCheck) for (const child of parent.getChildren()) {\n\t\tif (!child.is(\"element\", \"softBreak\")) continue;\n\t\tconst nextSibling = child.nextSibling;\n\t\tif (!nextSibling || nextSibling.is(\"element\")) continue;\n\t\tconst attributesToRemove = Array.from(child.getAttributes()).filter(([key, value]) => !hasSameAttribute(nextSibling, key, value));\n\t\tfor (const [key] of attributesToRemove) {\n\t\t\twriter.removeAttribute(key, child);\n\t\t\twasChanged = true;\n\t\t}\n\t}\n\treturn wasChanged;\n}\n/**\n* Returns `true` if the given node has the same attribute as the one provided in the parameters.\n*/\nfunction hasSameAttribute(node, key, value) {\n\treturn node?.getAttribute(key) === value;\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 { Enter, EnterCommand, EnterObserver, ShiftEnter, ShiftEnterCommand, getCopyOnEnterAttributes as _getCopyOnEnterAttributes };\n//# sourceMappingURL=index.js.map"],"names":["getCopyOnEnterAttributes","schema","allAttributes","attribute","EnterCommand","Command","writer","model","selection","isSelectionEmpty","range","startElement","endElement","attributesToCopy","splitBlock","leaveUnmerged","isContainedWithinOneElement","splitPos","ENTER_EVENT_TYPES","EnterObserver","Observer","view","doc","shiftPressed","evt","data","inputType","env","domEvent","enterEventSpec","event","BubblingEventInfo","ViewDocumentDomEventData","Enter","Plugin","editor","viewDocument","t","ShiftEnterCommand","softBreakAction","isEnabled","anchorPos","isInsideLimitElement","insertBreak","position","selectionAttributes","attributes","breakLineElement","element","ShiftEnter","conversion","modelElement","removeStaleSoftBreakAttributes","parentsToCheck","change","wasChanged","parent","child","nextSibling","attributesToRemove","key","value","hasSameAttribute","node"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,47 @@
1
+ import { Plugin as t } from "../../ckeditor5-core/dist/index.js";
2
+ import { Clipboard as r } from "../../ckeditor5-clipboard/dist/index.js";
3
+ import { Enter as i, ShiftEnter as e } from "../../ckeditor5-enter/dist/index.js";
4
+ import { SelectAll as o } from "../../ckeditor5-select-all/dist/index.js";
5
+ import { Typing as s } from "../../ckeditor5-typing/dist/index.js";
6
+ import { Undo as m } from "../../ckeditor5-undo/dist/index.js";
7
+ import { AccessibilityHelp as l } from "../../ckeditor5-ui/dist/index.js";
8
+ /**
9
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
10
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
11
+ */
12
+ /**
13
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
14
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
15
+ */
16
+ var E = class extends t {
17
+ /**
18
+ * @inheritDoc
19
+ */
20
+ static get requires() {
21
+ return [
22
+ l,
23
+ r,
24
+ i,
25
+ o,
26
+ e,
27
+ s,
28
+ m
29
+ ];
30
+ }
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ static get pluginName() {
35
+ return "Essentials";
36
+ }
37
+ /**
38
+ * @inheritDoc
39
+ */
40
+ static get isOfficialPlugin() {
41
+ return !0;
42
+ }
43
+ };
44
+ export {
45
+ E as Essentials
46
+ };
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../node_modules/@ckeditor/ckeditor5-essentials/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 { Plugin } from \"@ckeditor/ckeditor5-core\";\nimport { Clipboard } from \"@ckeditor/ckeditor5-clipboard\";\nimport { Enter, ShiftEnter } from \"@ckeditor/ckeditor5-enter\";\nimport { SelectAll } from \"@ckeditor/ckeditor5-select-all\";\nimport { Typing } from \"@ckeditor/ckeditor5-typing\";\nimport { Undo } from \"@ckeditor/ckeditor5-undo\";\nimport { AccessibilityHelp } from \"@ckeditor/ckeditor5-ui\";\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 essentials/essentials\n*/\n/**\n* A plugin including all essential editing features. It represents a set of features that enables similar functionalities\n* to a `<textarea>` element.\n*\n* It includes:\n*\n* * {@link module:ui/editorui/accessibilityhelp/accessibilityhelp~AccessibilityHelp},\n* * {@link module:clipboard/clipboard~Clipboard},\n* * {@link module:enter/enter~Enter},\n* * {@link module:select-all/selectall~SelectAll},\n* * {@link module:enter/shiftenter~ShiftEnter},\n* * {@link module:typing/typing~Typing},\n* * {@link module:undo/undo~Undo}.\n*\n* This plugin set does not define any block-level containers (such as {@link module:paragraph/paragraph~Paragraph}).\n* If your editor is supposed to handle block content, make sure to include it.\n*/\nvar Essentials = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [\n\t\t\tAccessibilityHelp,\n\t\t\tClipboard,\n\t\t\tEnter,\n\t\t\tSelectAll,\n\t\t\tShiftEnter,\n\t\t\tTyping,\n\t\t\tUndo\n\t\t];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"Essentials\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\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 { Essentials };\n//# sourceMappingURL=index.js.map"],"names":["Essentials","Plugin","AccessibilityHelp","Clipboard","Enter","SelectAll","ShiftEnter","Typing","Undo"],"mappings":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AAAA;AAAA;AAwBG,IAACA,IAAa,cAAcC,EAAO;AAAA;AAAA;AAAA;AAAA,EAIrC,WAAW,WAAW;AACrB,WAAO;AAAA,MACNC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IACH;AAAA,EACC;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,aAAa;AACvB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,mBAAmB;AAC7B,WAAO;AAAA,EACR;AACD;","x_google_ignoreList":[0]}
@@ -0,0 +1,100 @@
1
+ import { CKEditorError as s } 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
+ /**
8
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
9
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
10
+ */
11
+ function g(e) {
12
+ return e.map((t) => a(t)).filter((t) => t !== void 0);
13
+ }
14
+ const l = {
15
+ get tiny() {
16
+ return {
17
+ title: "Tiny",
18
+ model: "tiny",
19
+ view: {
20
+ name: "span",
21
+ classes: "text-tiny",
22
+ priority: 7
23
+ }
24
+ };
25
+ },
26
+ get small() {
27
+ return {
28
+ title: "Small",
29
+ model: "small",
30
+ view: {
31
+ name: "span",
32
+ classes: "text-small",
33
+ priority: 7
34
+ }
35
+ };
36
+ },
37
+ get big() {
38
+ return {
39
+ title: "Big",
40
+ model: "big",
41
+ view: {
42
+ name: "span",
43
+ classes: "text-big",
44
+ priority: 7
45
+ }
46
+ };
47
+ },
48
+ get huge() {
49
+ return {
50
+ title: "Huge",
51
+ model: "huge",
52
+ view: {
53
+ name: "span",
54
+ classes: "text-huge",
55
+ priority: 7
56
+ }
57
+ };
58
+ }
59
+ };
60
+ function a(e) {
61
+ if (typeof e == "number" && (e = String(e)), typeof e == "object" && i(e)) return r(e);
62
+ const t = m(e);
63
+ if (t) return r(t);
64
+ if (e === "default") return {
65
+ model: void 0,
66
+ title: "Default"
67
+ };
68
+ if (!n(e))
69
+ return u(e);
70
+ }
71
+ function u(e) {
72
+ return typeof e == "string" && (e = {
73
+ title: e,
74
+ model: `${parseFloat(e)}px`
75
+ }), e.view = {
76
+ name: "span",
77
+ styles: { "font-size": e.model }
78
+ }, r(e);
79
+ }
80
+ function r(e) {
81
+ return e.view && typeof e.view != "string" && !e.view.priority && (e.view.priority = 7), e;
82
+ }
83
+ function m(e) {
84
+ return typeof e == "string" ? l[e] : l[e.model];
85
+ }
86
+ function i(e) {
87
+ return e.title && e.model && e.view;
88
+ }
89
+ function n(e) {
90
+ let t;
91
+ if (typeof e == "object") if (e.model)
92
+ t = parseFloat(e.model);
93
+ else throw new s("font-size-invalid-definition", null, e);
94
+ else t = parseFloat(e);
95
+ return isNaN(t);
96
+ }
97
+ export {
98
+ g as _normalizeFontSizeOptions
99
+ };
100
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../node_modules/@ckeditor/ckeditor5-font/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 { ModelDocumentSelection, addBackgroundStylesRules, isLengthStyleValue, isPercentageStyleValue } from \"@ckeditor/ckeditor5-engine\";\nimport { ColorSelectorView, MenuBarMenuListItemButtonView, MenuBarMenuListItemView, MenuBarMenuListView, MenuBarMenuView, UIModel, addListToDropdown, createDropdown, focusChildOnDropdownOpen, getLocalizedColorOptions, normalizeColorOptions } from \"@ckeditor/ckeditor5-ui\";\nimport { CKEditorError, Collection } from \"@ckeditor/ckeditor5-utils\";\nimport { IconFontBackground, IconFontColor, IconFontFamily, IconFontSize } 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 font/fontcommand\n*/\n/**\n* The base font command.\n*/\nvar FontCommand = class extends Command {\n\t/**\n\t* A model attribute on which this command operates.\n\t*/\n\tattributeKey;\n\t/**\n\t* Creates an instance of the command.\n\t*\n\t* @param editor Editor instance.\n\t* @param attributeKey The name of a model attribute on which this command operates.\n\t*/\n\tconstructor(editor, attributeKey) {\n\t\tsuper(editor);\n\t\tthis.attributeKey = attributeKey;\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.value = doc.selection.getAttribute(this.attributeKey);\n\t\tthis.isEnabled = model.schema.checkAttributeInSelection(doc.selection, this.attributeKey);\n\t}\n\t/**\n\t* Executes the command. Applies the `value` of the {@link #attributeKey} to the selection.\n\t* If no `value` is passed, it removes the attribute from the selection.\n\t*\n\t* @param options Options for the executed command.\n\t* @param options.value The value to apply.\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 value = options.value;\n\t\tconst batch = options.batch;\n\t\tconst updateAttribute = (writer) => {\n\t\t\tif (selection.isCollapsed) if (value) writer.setSelectionAttribute(this.attributeKey, value);\n\t\t\telse writer.removeSelectionAttribute(this.attributeKey);\n\t\t\telse {\n\t\t\t\tconst ranges = model.schema.getValidRanges(selection.getRanges(), this.attributeKey, { includeEmptyRanges: true });\n\t\t\t\tfor (const range of ranges) {\n\t\t\t\t\tlet itemOrRange = range;\n\t\t\t\t\tlet attributeKey = this.attributeKey;\n\t\t\t\t\tif (range.isCollapsed) {\n\t\t\t\t\t\titemOrRange = range.start.parent;\n\t\t\t\t\t\tattributeKey = ModelDocumentSelection._getStoreAttributeKey(this.attributeKey);\n\t\t\t\t\t}\n\t\t\t\t\tif (value) writer.setAttribute(attributeKey, value, itemOrRange);\n\t\t\t\t\telse writer.removeAttribute(attributeKey, itemOrRange);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (batch) model.enqueueChange(batch, (writer) => {\n\t\t\tupdateAttribute(writer);\n\t\t});\n\t\telse model.change((writer) => {\n\t\t\tupdateAttribute(writer);\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* The name of the font size plugin.\n*/\nconst FONT_SIZE = \"fontSize\";\n/**\n* The name of the font family plugin.\n*/\nconst FONT_FAMILY = \"fontFamily\";\n/**\n* The name of the font color plugin.\n*/\nconst FONT_COLOR = \"fontColor\";\n/**\n* The name of the font background color plugin.\n*/\nconst FONT_BACKGROUND_COLOR = \"fontBackgroundColor\";\n/**\n* Builds a proper converter definition out of input data.\n*\n* @internal\n*/\nfunction buildDefinition(modelAttributeKey, options) {\n\tconst definition = {\n\t\tmodel: {\n\t\t\tkey: modelAttributeKey,\n\t\t\tvalues: []\n\t\t},\n\t\tview: {},\n\t\tupcastAlso: {}\n\t};\n\tfor (const option of options) {\n\t\tdefinition.model.values.push(option.model);\n\t\tdefinition.view[option.model] = option.view;\n\t\tif (option.upcastAlso) definition.upcastAlso[option.model] = option.upcastAlso;\n\t}\n\treturn definition;\n}\n/**\n* A {@link module:font/fontcolor~FontColor font color} and\n* {@link module:font/fontbackgroundcolor~FontBackgroundColor font background color} helper\n* responsible for upcasting data to the model.\n*\n* **Note**: The `styleAttr` parameter should be either `'color'` or `'background-color'`.\n*\n* @internal\n*/\nfunction renderUpcastAttribute(styleAttr) {\n\treturn (viewElement) => normalizeColorCode(viewElement.getStyle(styleAttr));\n}\n/**\n* A {@link module:font/fontcolor~FontColor font color} and\n* {@link module:font/fontbackgroundcolor~FontBackgroundColor font background color} helper\n* responsible for downcasting a color attribute to a `<span>` element.\n*\n* **Note**: The `styleAttr` parameter should be either `'color'` or `'background-color'`.\n*\n* @internal\n*/\nfunction renderDowncastElement(styleAttr) {\n\treturn (modelAttributeValue, { writer }) => writer.createAttributeElement(\"span\", { style: `${styleAttr}:${modelAttributeValue}` }, { priority: 7 });\n}\n/**\n* A helper that adds {@link module:ui/colorselector/colorselectorview~ColorSelectorView} to the color dropdown with proper initial values.\n*\n* @param options Configuration options\n* @param options.dropdownView The dropdown view to which a {@link module:ui/colorselector/colorselectorview~ColorSelectorView}\n* will be added.\n* @param options.colors An array with definitions representing colors to be displayed in the color selector.\n* @param options.columns The number of columns in the color grid.\n* @param options.removeButtonLabel The label for the button responsible for removing the color.\n* @param options.colorPickerLabel The label for the color picker button.\n* @param options.documentColorsLabel The label for the section with document colors.\n* @param options.documentColorsCount The number of document colors inside the dropdown.\n* @param options.colorPickerViewConfig Configuration of the color picker view.\n* @returns The new color selector view.\n* @internal\n*/\nfunction addColorSelectorToDropdown({ dropdownView, colors, columns, removeButtonLabel, colorPickerLabel, documentColorsLabel, documentColorsCount, colorPickerViewConfig }) {\n\tconst locale = dropdownView.locale;\n\tconst colorSelectorView = new ColorSelectorView(locale, {\n\t\tcolors,\n\t\tcolumns,\n\t\tremoveButtonLabel,\n\t\tcolorPickerLabel,\n\t\tdocumentColorsLabel,\n\t\tdocumentColorsCount,\n\t\tcolorPickerViewConfig\n\t});\n\tdropdownView.colorSelectorView = colorSelectorView;\n\tdropdownView.panelView.children.add(colorSelectorView);\n\treturn colorSelectorView;\n}\n/**\n* Fixes the color value string.\n*/\nfunction normalizeColorCode(value) {\n\treturn value.replace(/\\s/g, \"\");\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* The font family command. It is used by {@link module:font/fontfamily/fontfamilyediting~FontFamilyEditing}\n* to apply the font family.\n*\n* ```ts\n* editor.execute( 'fontFamily', { value: 'Arial' } );\n* ```\n*\n* **Note**: Executing the command without the value removes the attribute from the model.\n*/\nvar FontFamilyCommand = class extends FontCommand {\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor(editor) {\n\t\tsuper(editor, FONT_FAMILY);\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* Normalizes the {@link module:font/fontconfig~FontFamilyConfig#options configuration options}\n* to the {@link module:font/fontconfig~FontFamilyOption} format.\n*\n* @param configuredOptions An array of options taken from the configuration.\n* @internal\n*/\nfunction normalizeOptions(configuredOptions) {\n\treturn configuredOptions.map(getOptionDefinition$1).filter((option) => option !== void 0);\n}\n/**\n* Normalizes the CSS `font-family` property value to an array of unquoted and trimmed font faces.\n*\n* @internal\n*/\nfunction normalizeFontFamilies(fontDefinition) {\n\treturn fontDefinition.replace(/[\"']/g, \"\").split(\",\").map((name) => name.trim());\n}\n/**\n* Returns an option definition either created from string shortcut.\n* If object is passed then this method will return it without alternating it. Returns undefined for item than cannot be parsed.\n*\n*/\nfunction getOptionDefinition$1(option) {\n\tif (typeof option === \"object\") return option;\n\tif (option === \"default\") return {\n\t\ttitle: \"Default\",\n\t\tmodel: void 0\n\t};\n\tif (typeof option !== \"string\") return;\n\treturn generateFontPreset(option);\n}\n/**\n* Creates a predefined preset for pixel size. It deconstructs font-family like string into full configuration option.\n* A font definition is passed as coma delimited set of font family names. Font names might be quoted.\n*\n* @param fontDefinition A font definition form configuration.\n*/\nfunction generateFontPreset(fontDefinition) {\n\tconst fontNames = normalizeFontFamilies(fontDefinition);\n\tconst firstFontName = fontNames[0];\n\tconst cssFontNames = fontNames.map(normalizeFontNameForCSS).join(\", \");\n\treturn {\n\t\ttitle: firstFontName,\n\t\tmodel: cssFontNames,\n\t\tview: {\n\t\t\tname: \"span\",\n\t\t\tstyles: { \"font-family\": cssFontNames },\n\t\t\tpriority: 7\n\t\t}\n\t};\n}\n/**\n* Normalizes font name for the style attribute. It adds braces (') if font name contains spaces.\n*/\nfunction normalizeFontNameForCSS(fontName) {\n\tfontName = fontName.trim();\n\tif (fontName.indexOf(\" \") > 0) fontName = `'${fontName}'`;\n\treturn fontName;\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 font/fontfamily/fontfamilyediting\n*/\n/**\n* The font family editing feature.\n*\n* It introduces the {@link module:font/fontfamily/fontfamilycommand~FontFamilyCommand command} and\n* the `fontFamily` attribute in the {@link module:engine/model/model~Model model} which renders\n* in the {@link module:engine/view/view view} as an inline `<span>` element (`<span style=\"font-family: Arial\">`),\n* depending on the {@link module:font/fontconfig~FontFamilyConfig configuration}.\n*/\nvar FontFamilyEditing = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontFamilyEditing\";\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\tconstructor(editor) {\n\t\tsuper(editor);\n\t\teditor.config.define(FONT_FAMILY, {\n\t\t\toptions: [\n\t\t\t\t\"default\",\n\t\t\t\t\"Arial, Helvetica, sans-serif\",\n\t\t\t\t\"Courier New, Courier, monospace\",\n\t\t\t\t\"Georgia, serif\",\n\t\t\t\t\"Lucida Sans Unicode, Lucida Grande, sans-serif\",\n\t\t\t\t\"Tahoma, Geneva, sans-serif\",\n\t\t\t\t\"Times New Roman, Times, serif\",\n\t\t\t\t\"Trebuchet MS, Helvetica, sans-serif\",\n\t\t\t\t\"Verdana, Geneva, sans-serif\"\n\t\t\t],\n\t\t\tsupportAllValues: false\n\t\t});\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\teditor.model.schema.extend(\"$text\", { allowAttributes: FONT_FAMILY });\n\t\teditor.model.schema.setAttributeProperties(FONT_FAMILY, {\n\t\t\tisFormatting: true,\n\t\t\tcopyOnEnter: true\n\t\t});\n\t\tconst options = normalizeOptions(editor.config.get(\"fontFamily.options\")).filter((item) => item.model);\n\t\tconst definition = buildDefinition(FONT_FAMILY, options);\n\t\tif (editor.config.get(\"fontFamily.supportAllValues\")) {\n\t\t\tthis._prepareAnyValueConverters();\n\t\t\tthis._prepareCompatibilityConverter();\n\t\t} else editor.conversion.attributeToElement(definition);\n\t\teditor.commands.add(FONT_FAMILY, new FontFamilyCommand(editor));\n\t}\n\t/**\n\t* These converters enable keeping any value found as `style=\"font-family: *\"` as a value of an attribute on a text even\n\t* if it is not defined in the plugin configuration.\n\t*/\n\t_prepareAnyValueConverters() {\n\t\tconst editor = this.editor;\n\t\teditor.conversion.for(\"downcast\").attributeToElement({\n\t\t\tmodel: FONT_FAMILY,\n\t\t\tview: (attributeValue, { writer }) => {\n\t\t\t\treturn writer.createAttributeElement(\"span\", { style: \"font-family:\" + attributeValue }, { priority: 7 });\n\t\t\t}\n\t\t});\n\t\teditor.conversion.for(\"upcast\").elementToAttribute({\n\t\t\tmodel: {\n\t\t\t\tkey: FONT_FAMILY,\n\t\t\t\tvalue: (viewElement) => viewElement.getStyle(\"font-family\")\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tname: \"span\",\n\t\t\t\tstyles: { \"font-family\": /.*/ }\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Adds support for legacy `<font face=\"..\">` formatting.\n\t*/\n\t_prepareCompatibilityConverter() {\n\t\tthis.editor.conversion.for(\"upcast\").elementToAttribute({\n\t\t\tview: {\n\t\t\t\tname: \"font\",\n\t\t\t\tattributes: { \"face\": /.*/ }\n\t\t\t},\n\t\t\tmodel: {\n\t\t\t\tkey: FONT_FAMILY,\n\t\t\t\tvalue: (viewElement) => viewElement.getAttribute(\"face\")\n\t\t\t}\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 font/fontfamily/fontfamilyui\n*/\n/**\n* The font family UI plugin. It introduces the `'fontFamily'` dropdown.\n*/\nvar FontFamilyUI = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontFamilyUI\";\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 t = editor.t;\n\t\tconst options = this._getLocalizedOptions();\n\t\tconst command = editor.commands.get(FONT_FAMILY);\n\t\tconst accessibleLabel = t(\"Font Family\");\n\t\tconst listOptions = _prepareListOptions$1(options, command);\n\t\teditor.ui.componentFactory.add(FONT_FAMILY, (locale) => {\n\t\t\tconst dropdownView = createDropdown(locale);\n\t\t\taddListToDropdown(dropdownView, listOptions, {\n\t\t\t\trole: \"menu\",\n\t\t\t\tariaLabel: accessibleLabel\n\t\t\t});\n\t\t\tdropdownView.buttonView.set({\n\t\t\t\tlabel: accessibleLabel,\n\t\t\t\ticon: IconFontFamily,\n\t\t\t\ttooltip: true\n\t\t\t});\n\t\t\tdropdownView.extendTemplate({ attributes: { class: \"ck-font-family-dropdown\" } });\n\t\t\tdropdownView.bind(\"isEnabled\").to(command);\n\t\t\tthis.listenTo(dropdownView, \"execute\", (evt) => {\n\t\t\t\teditor.execute(evt.source.commandName, { value: evt.source.commandParam });\n\t\t\t\teditor.editing.view.focus();\n\t\t\t});\n\t\t\treturn dropdownView;\n\t\t});\n\t\teditor.ui.componentFactory.add(`menuBar:${FONT_FAMILY}`, (locale) => {\n\t\t\tconst menuView = new MenuBarMenuView(locale);\n\t\t\tmenuView.buttonView.set({\n\t\t\t\tlabel: accessibleLabel,\n\t\t\t\ticon: IconFontFamily\n\t\t\t});\n\t\t\tmenuView.bind(\"isEnabled\").to(command);\n\t\t\tconst listView = new MenuBarMenuListView(locale);\n\t\t\tfor (const definition of listOptions) {\n\t\t\t\tconst listItemView = new MenuBarMenuListItemView(locale, menuView);\n\t\t\t\tconst buttonView = new MenuBarMenuListItemButtonView(locale);\n\t\t\t\tbuttonView.set({\n\t\t\t\t\trole: \"menuitemradio\",\n\t\t\t\t\tisToggleable: true\n\t\t\t\t});\n\t\t\t\tbuttonView.bind(...Object.keys(definition.model)).to(definition.model);\n\t\t\t\tbuttonView.delegate(\"execute\").to(menuView);\n\t\t\t\tbuttonView.on(\"execute\", () => {\n\t\t\t\t\teditor.execute(definition.model.commandName, { value: definition.model.commandParam });\n\t\t\t\t\teditor.editing.view.focus();\n\t\t\t\t});\n\t\t\t\tlistItemView.children.add(buttonView);\n\t\t\t\tlistView.items.add(listItemView);\n\t\t\t}\n\t\t\tmenuView.panelView.children.add(listView);\n\t\t\treturn menuView;\n\t\t});\n\t}\n\t/**\n\t* Returns options as defined in `config.fontFamily.options` but processed to account for\n\t* editor localization, i.e. to display {@link module:font/fontconfig~FontFamilyOption}\n\t* in the correct language.\n\t*\n\t* Note: The reason behind this method is that there is no way to use {@link module:utils/locale~Locale#t}\n\t* when the user configuration is defined because the editor does not exist yet.\n\t*/\n\t_getLocalizedOptions() {\n\t\tconst editor = this.editor;\n\t\tconst t = editor.t;\n\t\treturn normalizeOptions(editor.config.get(FONT_FAMILY).options).map((option) => {\n\t\t\tif (option.title === \"Default\") option.title = t(\"Default\");\n\t\t\treturn option;\n\t\t});\n\t}\n};\n/**\n* Prepares FontFamily dropdown items.\n*/\nfunction _prepareListOptions$1(options, command) {\n\tconst itemDefinitions = new Collection();\n\tfor (const option of options) {\n\t\tconst def = {\n\t\t\ttype: \"button\",\n\t\t\tmodel: new UIModel({\n\t\t\t\tcommandName: FONT_FAMILY,\n\t\t\t\tcommandParam: option.model,\n\t\t\t\tlabel: option.title,\n\t\t\t\trole: \"menuitemradio\",\n\t\t\t\twithText: true\n\t\t\t})\n\t\t};\n\t\tdef.model.bind(\"isOn\").to(command, \"value\", (value) => {\n\t\t\tif (value === option.model) return true;\n\t\t\tif (!value || !option.model) return false;\n\t\t\treturn normalizeFontFamilies(value)[0].toLowerCase() === normalizeFontFamilies(option.model)[0].toLowerCase();\n\t\t});\n\t\tif (option.view && typeof option.view !== \"string\" && option.view.styles) def.model.set(\"labelStyle\", `font-family: ${option.view.styles[\"font-family\"]}`);\n\t\titemDefinitions.add(def);\n\t}\n\treturn itemDefinitions;\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 font/fontfamily\n*/\n/**\n* The font family plugin.\n*\n* For a detailed overview, check the {@glink features/font font feature} documentatiom\n* and the {@glink api/font package page}.\n*\n* This is a \"glue\" plugin which loads the {@link module:font/fontfamily/fontfamilyediting~FontFamilyEditing} and\n* {@link module:font/fontfamily/fontfamilyui~FontFamilyUI} features in the editor.\n*/\nvar FontFamily = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [FontFamilyEditing, FontFamilyUI];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontFamily\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\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* The font size command. It is used by {@link module:font/fontsize/fontsizeediting~FontSizeEditing}\n* to apply the font size.\n*\n* ```ts\n* editor.execute( 'fontSize', { value: 'small' } );\n* ```\n*\n* **Note**: Executing the command without the value removes the attribute from the model.\n*/\nvar FontSizeCommand = class extends FontCommand {\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor(editor) {\n\t\tsuper(editor, FONT_SIZE);\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 font/fontsize/utils\n*/\n/**\n* Normalizes and translates the {@link module:font/fontconfig~FontSizeConfig#options configuration options}\n* to the {@link module:font/fontconfig~FontSizeOption} format.\n*\n* @param configuredOptions An array of options taken from the configuration.\n* @internal\n*/\nfunction normalizeOptions$1(configuredOptions) {\n\treturn configuredOptions.map((item) => getOptionDefinition(item)).filter((option) => option !== void 0);\n}\nconst namedPresets = {\n\tget tiny() {\n\t\treturn {\n\t\t\ttitle: \"Tiny\",\n\t\t\tmodel: \"tiny\",\n\t\t\tview: {\n\t\t\t\tname: \"span\",\n\t\t\t\tclasses: \"text-tiny\",\n\t\t\t\tpriority: 7\n\t\t\t}\n\t\t};\n\t},\n\tget small() {\n\t\treturn {\n\t\t\ttitle: \"Small\",\n\t\t\tmodel: \"small\",\n\t\t\tview: {\n\t\t\t\tname: \"span\",\n\t\t\t\tclasses: \"text-small\",\n\t\t\t\tpriority: 7\n\t\t\t}\n\t\t};\n\t},\n\tget big() {\n\t\treturn {\n\t\t\ttitle: \"Big\",\n\t\t\tmodel: \"big\",\n\t\t\tview: {\n\t\t\t\tname: \"span\",\n\t\t\t\tclasses: \"text-big\",\n\t\t\t\tpriority: 7\n\t\t\t}\n\t\t};\n\t},\n\tget huge() {\n\t\treturn {\n\t\t\ttitle: \"Huge\",\n\t\t\tmodel: \"huge\",\n\t\t\tview: {\n\t\t\t\tname: \"span\",\n\t\t\t\tclasses: \"text-huge\",\n\t\t\t\tpriority: 7\n\t\t\t}\n\t\t};\n\t}\n};\n/**\n* Returns an option definition either from preset or creates one from number shortcut.\n* If object is passed then this method will return it without alternating it. Returns undefined for item than cannot be parsed.\n*/\nfunction getOptionDefinition(option) {\n\tif (typeof option === \"number\") option = String(option);\n\tif (typeof option === \"object\" && isFullItemDefinition(option)) return attachPriority(option);\n\tconst preset = findPreset(option);\n\tif (preset) return attachPriority(preset);\n\tif (option === \"default\") return {\n\t\tmodel: void 0,\n\t\ttitle: \"Default\"\n\t};\n\tif (isNumericalDefinition(option)) return;\n\treturn generatePixelPreset(option);\n}\n/**\n* Creates a predefined preset for pixel size.\n* @param definition Font size in pixels.\n* @returns\n*/\nfunction generatePixelPreset(definition) {\n\tif (typeof definition === \"string\") definition = {\n\t\ttitle: definition,\n\t\tmodel: `${parseFloat(definition)}px`\n\t};\n\tdefinition.view = {\n\t\tname: \"span\",\n\t\tstyles: { \"font-size\": definition.model }\n\t};\n\treturn attachPriority(definition);\n}\n/**\n* Adds the priority to the view element definition if missing. It's required due to https://github.com/ckeditor/ckeditor5/issues/2291\n*/\nfunction attachPriority(definition) {\n\tif (definition.view && typeof definition.view !== \"string\" && !definition.view.priority) definition.view.priority = 7;\n\treturn definition;\n}\n/**\n* Returns a prepared preset definition. If passed an object, a name of preset should be defined as `model` value.\n*\n* @param definition.model A preset name.\n*/\nfunction findPreset(definition) {\n\treturn typeof definition === \"string\" ? namedPresets[definition] : namedPresets[definition.model];\n}\n/**\n* We treat `definition` as completed if it is an object that contains `title`, `model` and `view` values.\n*/\nfunction isFullItemDefinition(definition) {\n\treturn definition.title && definition.model && definition.view;\n}\nfunction isNumericalDefinition(definition) {\n\tlet numberValue;\n\tif (typeof definition === \"object\") if (!definition.model)\n /**\n\t* Provided value as an option for {@link module:font/fontsize~FontSize} seems to invalid.\n\t*\n\t* See valid examples described in the {@link module:font/fontconfig~FontSizeConfig#options plugin configuration}.\n\t*\n\t* @error font-size-invalid-definition\n\t*/\n\tthrow new CKEditorError(\"font-size-invalid-definition\", null, definition);\n\telse numberValue = parseFloat(definition.model);\n\telse numberValue = parseFloat(definition);\n\treturn isNaN(numberValue);\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 font/fontsize/fontsizeediting\n*/\nconst styleFontSize = [\n\t\"x-small\",\n\t\"x-small\",\n\t\"small\",\n\t\"medium\",\n\t\"large\",\n\t\"x-large\",\n\t\"xx-large\",\n\t\"xxx-large\"\n];\n/**\n* The font size editing feature.\n*\n* It introduces the {@link module:font/fontsize/fontsizecommand~FontSizeCommand command} and the `fontSize`\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>` element with either:\n* * a style attribute (`<span style=\"font-size:12px\">...</span>`),\n* * or a class attribute (`<span class=\"text-small\">...</span>`)\n*\n* depending on the {@link module:font/fontconfig~FontSizeConfig configuration}.\n*/\nvar FontSizeEditing = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontSizeEditing\";\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\tconstructor(editor) {\n\t\tsuper(editor);\n\t\teditor.config.define(FONT_SIZE, {\n\t\t\toptions: [\n\t\t\t\t\"tiny\",\n\t\t\t\t\"small\",\n\t\t\t\t\"default\",\n\t\t\t\t\"big\",\n\t\t\t\t\"huge\"\n\t\t\t],\n\t\t\tsupportAllValues: false\n\t\t});\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\teditor.model.schema.extend(\"$text\", { allowAttributes: FONT_SIZE });\n\t\teditor.model.schema.setAttributeProperties(FONT_SIZE, {\n\t\t\tisFormatting: true,\n\t\t\tcopyOnEnter: true\n\t\t});\n\t\tconst supportAllValues = editor.config.get(\"fontSize.supportAllValues\");\n\t\tconst options = normalizeOptions$1(this.editor.config.get(\"fontSize.options\")).filter((item) => item.model);\n\t\tconst definition = buildDefinition(FONT_SIZE, options);\n\t\tif (supportAllValues) {\n\t\t\tthis._prepareAnyValueConverters(definition);\n\t\t\tthis._prepareCompatibilityConverter();\n\t\t} else editor.conversion.attributeToElement(definition);\n\t\teditor.commands.add(FONT_SIZE, new FontSizeCommand(editor));\n\t}\n\t/**\n\t* These converters enable keeping any value found as `style=\"font-size: *\"` as a value of an attribute on a text even\n\t* if it is not defined in the plugin configuration.\n\t*\n\t* @param definition Converter definition out of input data.\n\t*/\n\t_prepareAnyValueConverters(definition) {\n\t\tconst editor = this.editor;\n\t\tconst presets = definition.model.values.filter((value) => {\n\t\t\treturn !isLengthStyleValue(String(value)) && !isPercentageStyleValue(String(value));\n\t\t});\n\t\tif (presets.length)\n /**\n\t\t* If {@link module:font/fontconfig~FontSizeConfig#supportAllValues `config.fontSize.supportAllValues`} is `true`,\n\t\t* you need to use numerical values as font size options.\n\t\t*\n\t\t* See valid examples described in the {@link module:font/fontconfig~FontSizeConfig#options plugin configuration}.\n\t\t*\n\t\t* @error font-size-invalid-use-of-named-presets\n\t\t* @param {Array.<string>} presets Invalid values.\n\t\t*/\n\t\tthrow new CKEditorError(\"font-size-invalid-use-of-named-presets\", null, { presets });\n\t\teditor.conversion.for(\"downcast\").attributeToElement({\n\t\t\tmodel: FONT_SIZE,\n\t\t\tview: (attributeValue, { writer }) => {\n\t\t\t\tif (!attributeValue) return;\n\t\t\t\treturn writer.createAttributeElement(\"span\", { style: \"font-size:\" + attributeValue }, { priority: 7 });\n\t\t\t}\n\t\t});\n\t\teditor.conversion.for(\"upcast\").elementToAttribute({\n\t\t\tmodel: {\n\t\t\t\tkey: FONT_SIZE,\n\t\t\t\tvalue: (viewElement) => viewElement.getStyle(\"font-size\")\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tname: \"span\",\n\t\t\t\tstyles: { \"font-size\": /.*/ }\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Adds support for legacy `<font size=\"..\">` formatting.\n\t*/\n\t_prepareCompatibilityConverter() {\n\t\tthis.editor.conversion.for(\"upcast\").elementToAttribute({\n\t\t\tview: {\n\t\t\t\tname: \"font\",\n\t\t\t\tattributes: { \"size\": /^[+-]?\\d{1,3}$/ }\n\t\t\t},\n\t\t\tmodel: {\n\t\t\t\tkey: FONT_SIZE,\n\t\t\t\tvalue: (viewElement) => {\n\t\t\t\t\tconst value = viewElement.getAttribute(\"size\");\n\t\t\t\t\tconst isRelative = value[0] === \"-\" || value[0] === \"+\";\n\t\t\t\t\tlet size = parseInt(value, 10);\n\t\t\t\t\tif (isRelative) size = 3 + size;\n\t\t\t\t\tconst maxSize = styleFontSize.length - 1;\n\t\t\t\t\treturn styleFontSize[Math.min(Math.max(size, 0), maxSize)];\n\t\t\t\t}\n\t\t\t}\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 font/fontsize/fontsizeui\n*/\n/**\n* The font size UI plugin. It introduces the `'fontSize'` dropdown.\n*/\nvar FontSizeUI = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontSizeUI\";\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 t = editor.t;\n\t\tconst options = this._getLocalizedOptions();\n\t\tconst command = editor.commands.get(FONT_SIZE);\n\t\tconst accessibleLabel = t(\"Font Size\");\n\t\tconst listOptions = _prepareListOptions(options, command);\n\t\teditor.ui.componentFactory.add(FONT_SIZE, (locale) => {\n\t\t\tconst dropdownView = createDropdown(locale);\n\t\t\taddListToDropdown(dropdownView, listOptions, {\n\t\t\t\trole: \"menu\",\n\t\t\t\tariaLabel: accessibleLabel\n\t\t\t});\n\t\t\tdropdownView.buttonView.set({\n\t\t\t\tlabel: accessibleLabel,\n\t\t\t\ticon: IconFontSize,\n\t\t\t\ttooltip: true\n\t\t\t});\n\t\t\tdropdownView.extendTemplate({ attributes: { class: [\"ck-font-size-dropdown\"] } });\n\t\t\tdropdownView.bind(\"isEnabled\").to(command);\n\t\t\tthis.listenTo(dropdownView, \"execute\", (evt) => {\n\t\t\t\teditor.execute(evt.source.commandName, { value: evt.source.commandParam });\n\t\t\t\teditor.editing.view.focus();\n\t\t\t});\n\t\t\treturn dropdownView;\n\t\t});\n\t\teditor.ui.componentFactory.add(`menuBar:${FONT_SIZE}`, (locale) => {\n\t\t\tconst menuView = new MenuBarMenuView(locale);\n\t\t\tmenuView.buttonView.set({\n\t\t\t\tlabel: accessibleLabel,\n\t\t\t\ticon: IconFontSize\n\t\t\t});\n\t\t\tmenuView.bind(\"isEnabled\").to(command);\n\t\t\tconst listView = new MenuBarMenuListView(locale);\n\t\t\tfor (const definition of listOptions) {\n\t\t\t\tconst listItemView = new MenuBarMenuListItemView(locale, menuView);\n\t\t\t\tconst buttonView = new MenuBarMenuListItemButtonView(locale);\n\t\t\t\tbuttonView.set({\n\t\t\t\t\trole: \"menuitemradio\",\n\t\t\t\t\tisToggleable: true\n\t\t\t\t});\n\t\t\t\tbuttonView.bind(...Object.keys(definition.model)).to(definition.model);\n\t\t\t\tbuttonView.delegate(\"execute\").to(menuView);\n\t\t\t\tbuttonView.on(\"execute\", () => {\n\t\t\t\t\teditor.execute(definition.model.commandName, { value: definition.model.commandParam });\n\t\t\t\t\teditor.editing.view.focus();\n\t\t\t\t});\n\t\t\t\tlistItemView.children.add(buttonView);\n\t\t\t\tlistView.items.add(listItemView);\n\t\t\t}\n\t\t\tmenuView.panelView.children.add(listView);\n\t\t\treturn menuView;\n\t\t});\n\t}\n\t/**\n\t* Returns options as defined in `config.fontSize.options` but processed to account for\n\t* editor localization, i.e. to display {@link module:font/fontconfig~FontSizeOption}\n\t* in the correct language.\n\t*\n\t* Note: The reason behind this method is that there is no way to use {@link module:utils/locale~Locale#t}\n\t* when the user configuration is defined because the editor does not exist yet.\n\t*/\n\t_getLocalizedOptions() {\n\t\tconst editor = this.editor;\n\t\tconst t = editor.t;\n\t\tconst localizedTitles = {\n\t\t\tDefault: t(\"Default\"),\n\t\t\tTiny: t(\"Tiny\"),\n\t\t\tSmall: t(\"Small\"),\n\t\t\tBig: t(\"Big\"),\n\t\t\tHuge: t(\"Huge\")\n\t\t};\n\t\treturn normalizeOptions$1(editor.config.get(FONT_SIZE).options).map((option) => {\n\t\t\tconst title = localizedTitles[option.title];\n\t\t\tif (title && title != option.title) option = Object.assign({}, option, { title });\n\t\t\treturn option;\n\t\t});\n\t}\n};\n/**\n* Prepares FontSize dropdown items.\n*/\nfunction _prepareListOptions(options, command) {\n\tconst itemDefinitions = new Collection();\n\tfor (const option of options) {\n\t\tconst def = {\n\t\t\ttype: \"button\",\n\t\t\tmodel: new UIModel({\n\t\t\t\tcommandName: FONT_SIZE,\n\t\t\t\tcommandParam: option.model,\n\t\t\t\tlabel: option.title,\n\t\t\t\tclass: \"ck-fontsize-option\",\n\t\t\t\trole: \"menuitemradio\",\n\t\t\t\twithText: true\n\t\t\t})\n\t\t};\n\t\tif (option.view && typeof option.view !== \"string\") {\n\t\t\tif (option.view.styles) def.model.set(\"labelStyle\", `font-size:${option.view.styles[\"font-size\"]}`);\n\t\t\tif (option.view.classes) def.model.set(\"class\", `${def.model.class} ${option.view.classes}`);\n\t\t}\n\t\tdef.model.bind(\"isOn\").to(command, \"value\", (value) => value === option.model);\n\t\titemDefinitions.add(def);\n\t}\n\treturn itemDefinitions;\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 font/fontsize\n*/\n/**\n* The font size plugin.\n*\n* For a detailed overview, check the {@glink features/font font feature} documentation\n* and the {@glink api/font package page}.\n*\n* This is a \"glue\" plugin which loads the {@link module:font/fontsize/fontsizeediting~FontSizeEditing} and\n* {@link module:font/fontsize/fontsizeui~FontSizeUI} features in the editor.\n*/\nvar FontSize = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [FontSizeEditing, FontSizeUI];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontSize\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* Normalizes and translates the {@link module:font/fontconfig~FontSizeConfig#options configuration options}\n\t* to the {@link module:font/fontconfig~FontSizeOption} format.\n\t*\n\t* @param options An array of options taken from the configuration.\n\t*/\n\tnormalizeSizeOptions(options) {\n\t\treturn normalizeOptions$1(options);\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* The font color command. It is used by {@link module:font/fontcolor/fontcolorediting~FontColorEditing}\n* to apply the font color.\n*\n* ```ts\n* editor.execute( 'fontColor', { value: 'rgb(250, 20, 20)' } );\n* ```\n*\n* **Note**: Executing the command with the `null` value removes the attribute from the model.\n*/\nvar FontColorCommand = class extends FontCommand {\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor(editor) {\n\t\tsuper(editor, FONT_COLOR);\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 font/fontcolor/fontcolorediting\n*/\n/**\n* The font color editing feature.\n*\n* It introduces the {@link module:font/fontcolor/fontcolorcommand~FontColorCommand command} and\n* the `fontColor` attribute in the {@link module:engine/model/model~Model model} which renders\n* in the {@link module:engine/view/view view} as a `<span>` element (`<span style=\"color: ...\">`),\n* depending on the {@link module:font/fontconfig~FontColorConfig configuration}.\n*/\nvar FontColorEditing = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontColorEditing\";\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\tconstructor(editor) {\n\t\tsuper(editor);\n\t\teditor.config.define(FONT_COLOR, {\n\t\t\tcolors: [\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 0%, 0%)\",\n\t\t\t\t\tlabel: \"Black\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 0%, 30%)\",\n\t\t\t\t\tlabel: \"Dim grey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 0%, 60%)\",\n\t\t\t\t\tlabel: \"Grey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 0%, 90%)\",\n\t\t\t\t\tlabel: \"Light grey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 0%, 100%)\",\n\t\t\t\t\tlabel: \"White\",\n\t\t\t\t\thasBorder: true\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Red\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(30, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Orange\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(60, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Yellow\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(90, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Light green\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(120, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Green\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(150, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Aquamarine\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(180, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Turquoise\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(210, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Light blue\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(240, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Blue\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(270, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Purple\"\n\t\t\t\t}\n\t\t\t],\n\t\t\tcolumns: 5\n\t\t});\n\t\teditor.conversion.for(\"upcast\").elementToAttribute({\n\t\t\tview: {\n\t\t\t\tname: \"span\",\n\t\t\t\tstyles: { \"color\": /[\\s\\S]+/ }\n\t\t\t},\n\t\t\tmodel: {\n\t\t\t\tkey: FONT_COLOR,\n\t\t\t\tvalue: renderUpcastAttribute(\"color\")\n\t\t\t}\n\t\t});\n\t\teditor.conversion.for(\"upcast\").elementToAttribute({\n\t\t\tview: {\n\t\t\t\tname: \"font\",\n\t\t\t\tattributes: { \"color\": /^#?\\w+$/ }\n\t\t\t},\n\t\t\tmodel: {\n\t\t\t\tkey: FONT_COLOR,\n\t\t\t\tvalue: (viewElement) => viewElement.getAttribute(\"color\")\n\t\t\t}\n\t\t});\n\t\teditor.conversion.for(\"downcast\").attributeToElement({\n\t\t\tmodel: FONT_COLOR,\n\t\t\tview: renderDowncastElement(\"color\")\n\t\t});\n\t\teditor.commands.add(FONT_COLOR, new FontColorCommand(editor));\n\t\teditor.model.schema.extend(\"$text\", { allowAttributes: FONT_COLOR });\n\t\teditor.model.schema.setAttributeProperties(FONT_COLOR, {\n\t\t\tisFormatting: true,\n\t\t\tcopyOnEnter: true\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 font/ui/colorui\n*/\n/**\n* The color UI plugin which isolates the common logic responsible for displaying dropdowns with color grids.\n*\n* It is used to create the `'fontBackgroundColor'` and `'fontColor'` dropdowns, each hosting\n* a {@link module:ui/colorselector/colorselectorview~ColorSelectorView}.\n*/\nvar FontColorUIBase = class extends Plugin {\n\t/**\n\t* The name of the command which will be executed when a color tile is clicked.\n\t*/\n\tcommandName;\n\t/**\n\t* The name of this component in the {@link module:ui/componentfactory~ComponentFactory}.\n\t* Also the configuration scope name in `editor.config`.\n\t*/\n\tcomponentName;\n\t/**\n\t* The SVG icon used by the dropdown.\n\t*/\n\ticon;\n\t/**\n\t* The label used by the dropdown.\n\t*/\n\tdropdownLabel;\n\t/**\n\t* The number of columns in the color grid.\n\t*/\n\tcolumns;\n\t/**\n\t* Creates a plugin which introduces a dropdown with a pre–configured\n\t* {@link module:ui/colorselector/colorselectorview~ColorSelectorView}.\n\t*\n\t* @param editor An editor instance.\n\t* @param config The configuration object.\n\t* @param config.commandName The name of the command which will be executed when a color tile is clicked.\n\t* @param config.componentName The name of the dropdown in the {@link module:ui/componentfactory~ComponentFactory}\n\t* and the configuration scope name in `editor.config`.\n\t* @param config.icon The SVG icon used by the dropdown.\n\t* @param config.dropdownLabel The label used by the dropdown.\n\t*/\n\tconstructor(editor, { commandName, componentName, icon, dropdownLabel }) {\n\t\tsuper(editor);\n\t\tthis.commandName = commandName;\n\t\tthis.componentName = componentName;\n\t\tthis.icon = icon;\n\t\tthis.dropdownLabel = dropdownLabel;\n\t\tthis.columns = editor.config.get(`${this.componentName}.columns`);\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst locale = editor.locale;\n\t\tconst t = locale.t;\n\t\tconst command = editor.commands.get(this.commandName);\n\t\tconst componentConfig = editor.config.get(this.componentName);\n\t\tconst colorsConfig = normalizeColorOptions(componentConfig.colors);\n\t\tconst localizedColors = getLocalizedColorOptions(locale, colorsConfig);\n\t\tconst documentColorsCount = componentConfig.documentColors;\n\t\tconst hasColorPicker = componentConfig.colorPicker !== false;\n\t\teditor.ui.componentFactory.add(this.componentName, (locale) => {\n\t\t\tconst dropdownView = createDropdown(locale);\n\t\t\tlet dropdownContentRendered = false;\n\t\t\tconst colorSelectorView = addColorSelectorToDropdown({\n\t\t\t\tdropdownView,\n\t\t\t\tcolors: localizedColors.map((option) => ({\n\t\t\t\t\tlabel: option.label,\n\t\t\t\t\tcolor: option.model,\n\t\t\t\t\toptions: { hasBorder: option.hasBorder }\n\t\t\t\t})),\n\t\t\t\tcolumns: this.columns,\n\t\t\t\tremoveButtonLabel: t(\"Remove color\"),\n\t\t\t\tcolorPickerLabel: t(\"Color picker\"),\n\t\t\t\tdocumentColorsLabel: documentColorsCount !== 0 ? t(\"Document colors\") : \"\",\n\t\t\t\tdocumentColorsCount: documentColorsCount === void 0 ? this.columns : documentColorsCount,\n\t\t\t\tcolorPickerViewConfig: hasColorPicker ? componentConfig.colorPicker || {} : false\n\t\t\t});\n\t\t\tcolorSelectorView.bind(\"selectedColor\").to(command, \"value\");\n\t\t\tdropdownView.buttonView.set({\n\t\t\t\tlabel: this.dropdownLabel,\n\t\t\t\ticon: this.icon,\n\t\t\t\ttooltip: true\n\t\t\t});\n\t\t\tdropdownView.extendTemplate({ attributes: { class: \"ck-color-ui-dropdown\" } });\n\t\t\tdropdownView.bind(\"isEnabled\").to(command);\n\t\t\tcolorSelectorView.on(\"execute\", (evt, data) => {\n\t\t\t\tif (dropdownView.isOpen) editor.execute(this.commandName, {\n\t\t\t\t\tvalue: data.value,\n\t\t\t\t\tbatch: this._undoStepBatch\n\t\t\t\t});\n\t\t\t\tif (data.source !== \"colorPicker\") editor.editing.view.focus();\n\t\t\t\tif (data.source === \"colorPickerSaveButton\") dropdownView.isOpen = false;\n\t\t\t});\n\t\t\tcolorSelectorView.on(\"colorPicker:show\", () => {\n\t\t\t\tthis._undoStepBatch = editor.model.createBatch();\n\t\t\t});\n\t\t\tcolorSelectorView.on(\"colorPicker:cancel\", () => {\n\t\t\t\tif (this._undoStepBatch.operations.length) {\n\t\t\t\t\tdropdownView.isOpen = false;\n\t\t\t\t\teditor.execute(\"undo\", this._undoStepBatch);\n\t\t\t\t}\n\t\t\t\teditor.editing.view.focus();\n\t\t\t});\n\t\t\tdropdownView.on(\"change:isOpen\", (evt, name, isVisible) => {\n\t\t\t\tif (!dropdownContentRendered) {\n\t\t\t\t\tdropdownContentRendered = true;\n\t\t\t\t\tdropdownView.colorSelectorView.appendUI();\n\t\t\t\t}\n\t\t\t\tif (isVisible) {\n\t\t\t\t\tif (documentColorsCount !== 0) colorSelectorView.updateDocumentColors(editor.model, this.componentName);\n\t\t\t\t\tcolorSelectorView.updateSelectedColors();\n\t\t\t\t\tcolorSelectorView.showColorGridsFragment();\n\t\t\t\t}\n\t\t\t});\n\t\t\tfocusChildOnDropdownOpen(dropdownView, () => dropdownView.colorSelectorView.colorGridsFragmentView.staticColorsGrid.items.find((item) => item.isOn));\n\t\t\treturn dropdownView;\n\t\t});\n\t\teditor.ui.componentFactory.add(`menuBar:${this.componentName}`, (locale) => {\n\t\t\tconst menuView = new MenuBarMenuView(locale);\n\t\t\tmenuView.buttonView.set({\n\t\t\t\tlabel: this.dropdownLabel,\n\t\t\t\ticon: this.icon\n\t\t\t});\n\t\t\tmenuView.bind(\"isEnabled\").to(command);\n\t\t\tlet contentRendered = false;\n\t\t\tconst colorSelectorView = new ColorSelectorView(locale, {\n\t\t\t\tcolors: localizedColors.map((option) => ({\n\t\t\t\t\tlabel: option.label,\n\t\t\t\t\tcolor: option.model,\n\t\t\t\t\toptions: { hasBorder: option.hasBorder }\n\t\t\t\t})),\n\t\t\t\tcolumns: this.columns,\n\t\t\t\tremoveButtonLabel: t(\"Remove color\"),\n\t\t\t\tcolorPickerLabel: t(\"Color picker\"),\n\t\t\t\tdocumentColorsLabel: documentColorsCount !== 0 ? t(\"Document colors\") : \"\",\n\t\t\t\tdocumentColorsCount: documentColorsCount === void 0 ? this.columns : documentColorsCount,\n\t\t\t\tcolorPickerViewConfig: false\n\t\t\t});\n\t\t\tcolorSelectorView.bind(\"selectedColor\").to(command, \"value\");\n\t\t\tcolorSelectorView.delegate(\"execute\").to(menuView);\n\t\t\tcolorSelectorView.on(\"execute\", (evt, data) => {\n\t\t\t\teditor.execute(this.commandName, {\n\t\t\t\t\tvalue: data.value,\n\t\t\t\t\tbatch: this._undoStepBatch\n\t\t\t\t});\n\t\t\t\teditor.editing.view.focus();\n\t\t\t});\n\t\t\tmenuView.on(\"change:isOpen\", (evt, name, isVisible) => {\n\t\t\t\tif (!contentRendered) {\n\t\t\t\t\tcontentRendered = true;\n\t\t\t\t\tcolorSelectorView.appendUI();\n\t\t\t\t}\n\t\t\t\tif (isVisible) {\n\t\t\t\t\tif (documentColorsCount !== 0) colorSelectorView.updateDocumentColors(editor.model, this.componentName);\n\t\t\t\t\tcolorSelectorView.updateSelectedColors();\n\t\t\t\t\tcolorSelectorView.showColorGridsFragment();\n\t\t\t\t}\n\t\t\t});\n\t\t\tmenuView.panelView.children.add(colorSelectorView);\n\t\t\treturn menuView;\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 font/fontcolor/fontcolorui\n*/\n/**\n* The font color UI plugin. It introduces the `'fontColor'` dropdown.\n*/\nvar FontColorUI = class extends FontColorUIBase {\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor(editor) {\n\t\tconst t = editor.locale.t;\n\t\tsuper(editor, {\n\t\t\tcommandName: FONT_COLOR,\n\t\t\tcomponentName: FONT_COLOR,\n\t\t\ticon: IconFontColor,\n\t\t\tdropdownLabel: t(\"Font Color\")\n\t\t});\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontColorUI\";\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 font/fontcolor\n*/\n/**\n* The font color plugin.\n*\n* For a detailed overview, check the {@glink features/font font feature} documentation\n* and the {@glink api/font package page}.\n*\n* This is a \"glue\" plugin which loads the {@link module:font/fontcolor/fontcolorediting~FontColorEditing} and\n* {@link module:font/fontcolor/fontcolorui~FontColorUI} features in the editor.\n*/\nvar FontColor = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [FontColorEditing, FontColorUI];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontColor\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\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* The font background color command. It is used by\n* {@link module:font/fontbackgroundcolor/fontbackgroundcolorediting~FontBackgroundColorEditing}\n* to apply the font background color.\n*\n* ```ts\n* editor.execute( 'fontBackgroundColor', { value: 'rgb(250, 20, 20)' } );\n* ```\n*\n* **Note**: Executing the command with the `null` value removes the attribute from the model.\n*/\nvar FontBackgroundColorCommand = class extends FontCommand {\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor(editor) {\n\t\tsuper(editor, FONT_BACKGROUND_COLOR);\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 font/fontbackgroundcolor/fontbackgroundcolorediting\n*/\n/**\n* The font background color editing feature.\n*\n* It introduces the {@link module:font/fontbackgroundcolor/fontbackgroundcolorcommand~FontBackgroundColorCommand command} and\n* the `fontBackgroundColor` attribute in the {@link module:engine/model/model~Model model} which renders\n* in the {@link module:engine/view/view view} as a `<span>` element (`<span style=\"background-color: ...\">`),\n* depending on the {@link module:font/fontconfig~FontColorConfig configuration}.\n*/\nvar FontBackgroundColorEditing = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontBackgroundColorEditing\";\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\tconstructor(editor) {\n\t\tsuper(editor);\n\t\teditor.config.define(FONT_BACKGROUND_COLOR, {\n\t\t\tcolors: [\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 0%, 0%)\",\n\t\t\t\t\tlabel: \"Black\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 0%, 30%)\",\n\t\t\t\t\tlabel: \"Dim grey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 0%, 60%)\",\n\t\t\t\t\tlabel: \"Grey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 0%, 90%)\",\n\t\t\t\t\tlabel: \"Light grey\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 0%, 100%)\",\n\t\t\t\t\tlabel: \"White\",\n\t\t\t\t\thasBorder: true\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(0, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Red\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(30, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Orange\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(60, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Yellow\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(90, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Light green\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(120, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Green\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(150, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Aquamarine\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(180, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Turquoise\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(210, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Light blue\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(240, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Blue\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcolor: \"hsl(270, 75%, 60%)\",\n\t\t\t\t\tlabel: \"Purple\"\n\t\t\t\t}\n\t\t\t],\n\t\t\tcolumns: 5\n\t\t});\n\t\teditor.data.addStyleProcessorRules(addBackgroundStylesRules);\n\t\teditor.conversion.for(\"upcast\").elementToAttribute({\n\t\t\tview: {\n\t\t\t\tname: \"span\",\n\t\t\t\tstyles: { \"background-color\": /[\\s\\S]+/ }\n\t\t\t},\n\t\t\tmodel: {\n\t\t\t\tkey: FONT_BACKGROUND_COLOR,\n\t\t\t\tvalue: renderUpcastAttribute(\"background-color\")\n\t\t\t}\n\t\t});\n\t\teditor.conversion.for(\"downcast\").attributeToElement({\n\t\t\tmodel: FONT_BACKGROUND_COLOR,\n\t\t\tview: renderDowncastElement(\"background-color\")\n\t\t});\n\t\teditor.commands.add(FONT_BACKGROUND_COLOR, new FontBackgroundColorCommand(editor));\n\t\teditor.model.schema.extend(\"$text\", { allowAttributes: FONT_BACKGROUND_COLOR });\n\t\teditor.model.schema.setAttributeProperties(FONT_BACKGROUND_COLOR, {\n\t\t\tisFormatting: true,\n\t\t\tcopyOnEnter: true\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 font/fontbackgroundcolor/fontbackgroundcolorui\n*/\n/**\n* The font background color UI plugin. It introduces the `'fontBackgroundColor'` dropdown.\n*/\nvar FontBackgroundColorUI = class extends FontColorUIBase {\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor(editor) {\n\t\tconst t = editor.locale.t;\n\t\tsuper(editor, {\n\t\t\tcommandName: FONT_BACKGROUND_COLOR,\n\t\t\tcomponentName: FONT_BACKGROUND_COLOR,\n\t\t\ticon: IconFontBackground,\n\t\t\tdropdownLabel: t(\"Font Background Color\")\n\t\t});\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontBackgroundColorUI\";\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 font/fontbackgroundcolor\n*/\n/**\n* The font background color plugin.\n*\n* For a detailed overview, check the {@glink features/font font feature} documentation\n* and the {@glink api/font package page}.\n*\n* This is a \"glue\" plugin which loads\n* the {@link module:font/fontbackgroundcolor/fontbackgroundcolorediting~FontBackgroundColorEditing} and\n* {@link module:font/fontbackgroundcolor/fontbackgroundcolorui~FontBackgroundColorUI} features in the editor.\n*/\nvar FontBackgroundColor = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [FontBackgroundColorEditing, FontBackgroundColorUI];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"FontBackgroundColor\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\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 font/font\n*/\n/**\n* A plugin that enables a set of text styling features:\n*\n* * {@link module:font/fontsize~FontSize},\n* * {@link module:font/fontfamily~FontFamily}.\n* * {@link module:font/fontcolor~FontColor},\n* * {@link module:font/fontbackgroundcolor~FontBackgroundColor}.\n*\n* For a detailed overview, check the {@glink features/font Font feature} documentation\n* and the {@glink api/font package page}.\n*/\nvar Font = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [\n\t\t\tFontFamily,\n\t\t\tFontSize,\n\t\t\tFontColor,\n\t\t\tFontBackgroundColor\n\t\t];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"Font\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\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 { Font, FontBackgroundColor, FontBackgroundColorCommand, FontBackgroundColorEditing, FontBackgroundColorUI, FontColor, FontColorCommand, FontColorEditing, FontColorUI, FontColorUIBase, FontCommand, FontFamily, FontFamilyCommand, FontFamilyEditing, FontFamilyUI, FontSize, FontSizeCommand, FontSizeEditing, FontSizeUI, addColorSelectorToDropdown as _addFontColorSelectorToDropdown, buildDefinition as _buildFontDefinition, normalizeOptions as _normalizeFontFamilyOptions, normalizeOptions$1 as _normalizeFontSizeOptions, renderDowncastElement as _renderDowncastFontElement, renderUpcastAttribute as _renderUpcastFontColorAttribute };\n//# sourceMappingURL=index.js.map"],"names":["normalizeOptions$1","configuredOptions","item","getOptionDefinition","option","namedPresets","isFullItemDefinition","attachPriority","preset","findPreset","isNumericalDefinition","generatePixelPreset","definition","numberValue","CKEditorError"],"mappings":";;AAAA;AAAA;AAAA;AAAA;AAojBA;AAAA;AAAA;AAAA;AAcA,SAASA,EAAmBC,GAAmB;AAC9C,SAAOA,EAAkB,IAAI,CAACC,MAASC,EAAoBD,CAAI,CAAC,EAAE,OAAO,CAACE,MAAWA,MAAW,MAAM;AACvG;AACA,MAAMC,IAAe;AAAA,EACpB,IAAI,OAAO;AACV,WAAO;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,MACd;AAAA,IACA;AAAA,EACC;AAAA,EACA,IAAI,QAAQ;AACX,WAAO;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,MACd;AAAA,IACA;AAAA,EACC;AAAA,EACA,IAAI,MAAM;AACT,WAAO;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,MACd;AAAA,IACA;AAAA,EACC;AAAA,EACA,IAAI,OAAO;AACV,WAAO;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,MACd;AAAA,IACA;AAAA,EACC;AACD;AAKA,SAASF,EAAoBC,GAAQ;AAEpC,MADI,OAAOA,KAAW,aAAUA,IAAS,OAAOA,CAAM,IAClD,OAAOA,KAAW,YAAYE,EAAqBF,CAAM,EAAG,QAAOG,EAAeH,CAAM;AAC5F,QAAMI,IAASC,EAAWL,CAAM;AAChC,MAAII,EAAQ,QAAOD,EAAeC,CAAM;AACxC,MAAIJ,MAAW,UAAW,QAAO;AAAA,IAChC,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACC,MAAI,CAAAM,EAAsBN,CAAM;AAChC,WAAOO,EAAoBP,CAAM;AAClC;AAMA,SAASO,EAAoBC,GAAY;AACxC,SAAI,OAAOA,KAAe,aAAUA,IAAa;AAAA,IAChD,OAAOA;AAAA,IACP,OAAO,GAAG,WAAWA,CAAU,CAAC;AAAA,EAClC,IACCA,EAAW,OAAO;AAAA,IACjB,MAAM;AAAA,IACN,QAAQ,EAAE,aAAaA,EAAW,MAAK;AAAA,EACzC,GACQL,EAAeK,CAAU;AACjC;AAIA,SAASL,EAAeK,GAAY;AACnC,SAAIA,EAAW,QAAQ,OAAOA,EAAW,QAAS,YAAY,CAACA,EAAW,KAAK,aAAUA,EAAW,KAAK,WAAW,IAC7GA;AACR;AAMA,SAASH,EAAWG,GAAY;AAC/B,SAAO,OAAOA,KAAe,WAAWP,EAAaO,CAAU,IAAIP,EAAaO,EAAW,KAAK;AACjG;AAIA,SAASN,EAAqBM,GAAY;AACzC,SAAOA,EAAW,SAASA,EAAW,SAASA,EAAW;AAC3D;AACA,SAASF,EAAsBE,GAAY;AAC1C,MAAIC;AACJ,MAAI,OAAOD,KAAe,SAAU,KAAKA,EAAW;AAS/C,IAAAC,IAAc,WAAWD,EAAW,KAAK;AAAA,MAD9C,OAAM,IAAIE,EAAc,gCAAgC,MAAMF,CAAU;AAAA,MAEnE,CAAAC,IAAc,WAAWD,CAAU;AACxC,SAAO,MAAMC,CAAW;AACzB;","x_google_ignoreList":[0]}