@opentiny/fluent-editor 3.25.1 → 3.25.3-alpha.0

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 (274) hide show
  1. package/README.md +105 -105
  2. package/es/attributors/line-height.es.js.map +1 -1
  3. package/es/config/base64-image.es.js.map +1 -1
  4. package/es/config/editor.config.es.js.map +1 -1
  5. package/es/config/editor.utils.es.js.map +1 -1
  6. package/es/config/i18n/en-us.es.js.map +1 -1
  7. package/es/config/i18n/zh-cn.es.js.map +1 -1
  8. package/es/config/index.es.js.map +1 -1
  9. package/es/core/fluent-editor.es.js.map +1 -1
  10. package/es/fluent-editor.es.js.map +1 -1
  11. package/es/formats/soft-break.es.js.map +1 -1
  12. package/es/formats/strike.es.js.map +1 -1
  13. package/es/formats/video.es.js.map +1 -1
  14. package/es/modules/counter.es.js.map +1 -1
  15. package/es/modules/custom-clipboard.es.js.map +1 -1
  16. package/es/modules/custom-image/BlotFormatter.es.js +28 -0
  17. package/es/modules/custom-image/BlotFormatter.es.js.map +1 -1
  18. package/es/modules/custom-image/Options.es.js.map +1 -1
  19. package/es/modules/custom-image/actions/Action.es.js.map +1 -1
  20. package/es/modules/custom-image/actions/CustomResizeAction.es.js.map +1 -1
  21. package/es/modules/custom-image/actions/DeleteAction.es.js.map +1 -1
  22. package/es/modules/custom-image/image-bar.es.js +126 -0
  23. package/es/modules/custom-image/image-bar.es.js.map +1 -0
  24. package/es/modules/custom-image/image.es.js.map +1 -1
  25. package/es/modules/custom-image/specs/BlotSpec.es.js.map +1 -1
  26. package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +1 -1
  27. package/es/modules/custom-image/specs/ImageSpec.es.js.map +1 -1
  28. package/es/modules/custom-uploader.es.js.map +1 -1
  29. package/es/modules/divider.es.js.map +1 -1
  30. package/es/modules/emoji/emoji-list/people.es.js.map +1 -1
  31. package/es/modules/emoji/emoji-list.es.js.map +1 -1
  32. package/es/modules/emoji/emoji-map.es.js.map +1 -1
  33. package/es/modules/emoji/emoji-sprite.es.js.map +1 -1
  34. package/es/modules/emoji/formats/emoji-blot.es.js.map +1 -1
  35. package/es/modules/emoji/index.es.js.map +1 -1
  36. package/es/modules/emoji/modules/emoji.es.js.map +1 -1
  37. package/es/modules/emoji/modules/toolbar-emoji.es.js.map +1 -1
  38. package/es/modules/emoji/utils.es.js.map +1 -1
  39. package/es/modules/file/formats/file.es.js.map +1 -1
  40. package/es/modules/file/index.es.js.map +1 -1
  41. package/es/modules/file/modules/file-bar.es.js.map +1 -1
  42. package/es/modules/global-link/constants.es.js.map +1 -1
  43. package/es/modules/global-link/formats/customer-widget-link.es.js.map +1 -1
  44. package/es/modules/global-link/formats/doc-link.es.js.map +1 -1
  45. package/es/modules/global-link/formats/wiki-link.es.js.map +1 -1
  46. package/es/modules/global-link/formats/work-item-link.es.js.map +1 -1
  47. package/es/modules/global-link/index.es.js.map +1 -1
  48. package/es/modules/global-link/utils/createTable.es.js.map +1 -1
  49. package/es/modules/link/formats/link.es.js.map +1 -1
  50. package/es/modules/link/index.es.js.map +1 -1
  51. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  52. package/es/modules/mathlive/formats.es.js.map +1 -1
  53. package/es/modules/mathlive/index.es.js.map +1 -1
  54. package/es/modules/mathlive/tooltip.es.js.map +1 -1
  55. package/es/modules/mention/Mention.es.js.map +1 -1
  56. package/es/modules/mention/MentionLink.es.js.map +1 -1
  57. package/es/modules/mention/constants.es.js.map +1 -1
  58. package/es/modules/quick-menu.es.js.map +1 -1
  59. package/es/modules/syntax.es.js.map +1 -1
  60. package/es/modules/table/better-table.es.js.map +1 -1
  61. package/es/modules/table/formats/header.es.js.map +1 -1
  62. package/es/modules/table/formats/list.es.js.map +1 -1
  63. package/es/modules/table/formats/table.es.js.map +1 -1
  64. package/es/modules/table/modules/table-column-tool.es.js.map +1 -1
  65. package/es/modules/table/modules/table-operation-menu.es.js.map +1 -1
  66. package/es/modules/table/modules/table-scroll-bar.es.js.map +1 -1
  67. package/es/modules/table/modules/table-selection.es.js.map +1 -1
  68. package/es/modules/table/modules/table-selector.es.js.map +1 -1
  69. package/es/modules/table/table-config.es.js.map +1 -1
  70. package/es/modules/table/utils/index.es.js.map +1 -1
  71. package/es/modules/table/utils/node-matchers.es.js.map +1 -1
  72. package/es/modules/toolbar/better-picker.es.js.map +1 -1
  73. package/es/modules/toolbar/index.es.js.map +1 -1
  74. package/es/themes/snow.es.js.map +1 -1
  75. package/es/tools/screenshot.es.js.map +1 -1
  76. package/es/ui/icons.config.es.js.map +1 -1
  77. package/es/ui/icons.es.js.map +1 -1
  78. package/es/utils/debounce.es.js.map +1 -1
  79. package/es/utils/method.es.js.map +1 -1
  80. package/lib/attributors/line-height.cjs.js.map +1 -1
  81. package/lib/config/base64-image.cjs.js.map +1 -1
  82. package/lib/config/editor.config.cjs.js.map +1 -1
  83. package/lib/config/editor.utils.cjs.js.map +1 -1
  84. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  85. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  86. package/lib/config/index.cjs.js.map +1 -1
  87. package/lib/core/fluent-editor.cjs.js.map +1 -1
  88. package/lib/fluent-editor.cjs.js.map +1 -1
  89. package/lib/formats/soft-break.cjs.js.map +1 -1
  90. package/lib/formats/strike.cjs.js.map +1 -1
  91. package/lib/formats/video.cjs.js.map +1 -1
  92. package/lib/modules/counter.cjs.js.map +1 -1
  93. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  94. package/lib/modules/custom-image/BlotFormatter.cjs.js +28 -0
  95. package/lib/modules/custom-image/BlotFormatter.cjs.js.map +1 -1
  96. package/lib/modules/custom-image/Options.cjs.js.map +1 -1
  97. package/lib/modules/custom-image/actions/Action.cjs.js.map +1 -1
  98. package/lib/modules/custom-image/actions/CustomResizeAction.cjs.js.map +1 -1
  99. package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +1 -1
  100. package/lib/modules/custom-image/image-bar.cjs.js +126 -0
  101. package/lib/modules/custom-image/image-bar.cjs.js.map +1 -0
  102. package/lib/modules/custom-image/image.cjs.js.map +1 -1
  103. package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +1 -1
  104. package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +1 -1
  105. package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +1 -1
  106. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  107. package/lib/modules/divider.cjs.js.map +1 -1
  108. package/lib/modules/emoji/emoji-list/people.cjs.js.map +1 -1
  109. package/lib/modules/emoji/emoji-list.cjs.js.map +1 -1
  110. package/lib/modules/emoji/emoji-map.cjs.js.map +1 -1
  111. package/lib/modules/emoji/emoji-sprite.cjs.js.map +1 -1
  112. package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +1 -1
  113. package/lib/modules/emoji/index.cjs.js.map +1 -1
  114. package/lib/modules/emoji/modules/emoji.cjs.js.map +1 -1
  115. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +1 -1
  116. package/lib/modules/emoji/utils.cjs.js.map +1 -1
  117. package/lib/modules/file/formats/file.cjs.js.map +1 -1
  118. package/lib/modules/file/index.cjs.js.map +1 -1
  119. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
  120. package/lib/modules/global-link/constants.cjs.js.map +1 -1
  121. package/lib/modules/global-link/formats/customer-widget-link.cjs.js.map +1 -1
  122. package/lib/modules/global-link/formats/doc-link.cjs.js.map +1 -1
  123. package/lib/modules/global-link/formats/wiki-link.cjs.js.map +1 -1
  124. package/lib/modules/global-link/formats/work-item-link.cjs.js.map +1 -1
  125. package/lib/modules/global-link/index.cjs.js.map +1 -1
  126. package/lib/modules/global-link/utils/createTable.cjs.js.map +1 -1
  127. package/lib/modules/link/formats/link.cjs.js.map +1 -1
  128. package/lib/modules/link/index.cjs.js.map +1 -1
  129. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  130. package/lib/modules/mathlive/formats.cjs.js.map +1 -1
  131. package/lib/modules/mathlive/index.cjs.js.map +1 -1
  132. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
  133. package/lib/modules/mention/Mention.cjs.js.map +1 -1
  134. package/lib/modules/mention/MentionLink.cjs.js.map +1 -1
  135. package/lib/modules/mention/constants.cjs.js.map +1 -1
  136. package/lib/modules/quick-menu.cjs.js.map +1 -1
  137. package/lib/modules/syntax.cjs.js.map +1 -1
  138. package/lib/modules/table/better-table.cjs.js.map +1 -1
  139. package/lib/modules/table/formats/header.cjs.js.map +1 -1
  140. package/lib/modules/table/formats/list.cjs.js.map +1 -1
  141. package/lib/modules/table/formats/table.cjs.js.map +1 -1
  142. package/lib/modules/table/modules/table-column-tool.cjs.js.map +1 -1
  143. package/lib/modules/table/modules/table-operation-menu.cjs.js.map +1 -1
  144. package/lib/modules/table/modules/table-scroll-bar.cjs.js.map +1 -1
  145. package/lib/modules/table/modules/table-selection.cjs.js.map +1 -1
  146. package/lib/modules/table/modules/table-selector.cjs.js.map +1 -1
  147. package/lib/modules/table/table-config.cjs.js.map +1 -1
  148. package/lib/modules/table/utils/index.cjs.js.map +1 -1
  149. package/lib/modules/table/utils/node-matchers.cjs.js.map +1 -1
  150. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
  151. package/lib/modules/toolbar/index.cjs.js.map +1 -1
  152. package/lib/themes/snow.cjs.js.map +1 -1
  153. package/lib/tools/screenshot.cjs.js.map +1 -1
  154. package/lib/ui/icons.cjs.js.map +1 -1
  155. package/lib/ui/icons.config.cjs.js.map +1 -1
  156. package/lib/utils/debounce.cjs.js.map +1 -1
  157. package/lib/utils/method.cjs.js.map +1 -1
  158. package/package.json +57 -56
  159. package/style.css +193 -0
  160. package/types/attributors/font-size.d.ts +1 -1
  161. package/types/attributors/font-style.d.ts +1 -1
  162. package/types/attributors/index.d.ts +4 -4
  163. package/types/attributors/line-height.d.ts +1 -1
  164. package/types/attributors/text-indent.d.ts +1 -1
  165. package/types/config/base64-image.d.ts +2 -2
  166. package/types/config/editor.config.d.ts +229 -229
  167. package/types/config/editor.utils.d.ts +42 -42
  168. package/types/config/i18n/en-us.d.ts +108 -108
  169. package/types/config/i18n/zh-cn.d.ts +108 -108
  170. package/types/config/index.d.ts +6 -6
  171. package/types/config/types/additional-toolbar-item.interface.d.ts +7 -6
  172. package/types/config/types/content-change.interface.d.ts +13 -13
  173. package/types/config/types/content-save.interface.d.ts +6 -6
  174. package/types/config/types/counter-option.interface.d.ts +8 -7
  175. package/types/config/types/editor-config.interface.d.ts +34 -33
  176. package/types/config/types/editor-modules.interface.d.ts +30 -29
  177. package/types/config/types/editor-toolbar.interface.d.ts +4 -3
  178. package/types/config/types/file-operation.interface.d.ts +11 -10
  179. package/types/config/types/focus-change.interface.d.ts +4 -4
  180. package/types/config/types/fullscreen-module.interface.d.ts +4 -4
  181. package/types/config/types/help-panel-item.interface.d.ts +5 -5
  182. package/types/config/types/help-panel-option.interface.d.ts +6 -5
  183. package/types/config/types/image-module.interface.d.ts +3 -3
  184. package/types/config/types/image-upload.interface.d.ts +6 -5
  185. package/types/config/types/index.d.ts +23 -23
  186. package/types/config/types/load-on-demand-module.interface.d.ts +5 -5
  187. package/types/config/types/mention-module.interface.d.ts +8 -8
  188. package/types/config/types/paste-change.interface.d.ts +5 -4
  189. package/types/config/types/quick-menu-module.interface.d.ts +3 -3
  190. package/types/config/types/range.interface.d.ts +4 -4
  191. package/types/config/types/registry-options.interface.d.ts +5 -5
  192. package/types/config/types/selection-change.interface.d.ts +7 -6
  193. package/types/config/types/toolbar-item.interface.d.ts +13 -13
  194. package/types/config/types/type.d.ts +5 -4
  195. package/types/config/types/validate-error.interface.d.ts +13 -13
  196. package/types/core/fluent-editor.d.ts +10 -9
  197. package/types/fluent-editor.d.ts +2 -1
  198. package/types/formats/soft-break.d.ts +14 -14
  199. package/types/formats/strike.d.ts +7 -7
  200. package/types/formats/video.d.ts +15 -14
  201. package/types/index.d.ts +4 -3
  202. package/types/modules/counter.d.ts +15 -14
  203. package/types/modules/custom-clipboard.d.ts +27 -26
  204. package/types/modules/custom-image/BlotFormatter.d.ts +26 -20
  205. package/types/modules/custom-image/Options.d.ts +36 -36
  206. package/types/modules/custom-image/actions/Action.d.ts +7 -7
  207. package/types/modules/custom-image/actions/CustomResizeAction.d.ts +23 -22
  208. package/types/modules/custom-image/actions/DeleteAction.d.ts +6 -5
  209. package/types/modules/custom-image/image-bar.d.ts +15 -0
  210. package/types/modules/custom-image/image.d.ts +28 -28
  211. package/types/modules/custom-image/specs/BlotSpec.d.ts +11 -10
  212. package/types/modules/custom-image/specs/CustomImageSpec.d.ts +18 -17
  213. package/types/modules/custom-image/specs/ImageSpec.d.ts +9 -8
  214. package/types/modules/custom-uploader.d.ts +30 -29
  215. package/types/modules/divider.d.ts +7 -7
  216. package/types/modules/emoji/emoji-list/index.d.ts +1 -1
  217. package/types/modules/emoji/emoji-list/people.d.ts +1 -1
  218. package/types/modules/emoji/emoji-list.d.ts +2 -2
  219. package/types/modules/emoji/emoji-map.d.ts +2 -2
  220. package/types/modules/emoji/emoji-sprite.d.ts +1 -1
  221. package/types/modules/emoji/formats/emoji-blot.d.ts +13 -13
  222. package/types/modules/emoji/index.d.ts +7 -6
  223. package/types/modules/emoji/modules/emoji.d.ts +38 -38
  224. package/types/modules/emoji/modules/toolbar-emoji.d.ts +8 -8
  225. package/types/modules/emoji/utils.d.ts +1 -1
  226. package/types/modules/file/formats/file.d.ts +15 -15
  227. package/types/modules/file/index.d.ts +10 -9
  228. package/types/modules/file/modules/file-bar.d.ts +14 -14
  229. package/types/modules/global-link/constants.d.ts +3 -3
  230. package/types/modules/global-link/formats/customer-widget-link.d.ts +14 -14
  231. package/types/modules/global-link/formats/doc-link.d.ts +17 -17
  232. package/types/modules/global-link/formats/wiki-link.d.ts +16 -16
  233. package/types/modules/global-link/formats/work-item-link.d.ts +16 -16
  234. package/types/modules/global-link/global-link-panel.d.ts +18 -17
  235. package/types/modules/global-link/index.d.ts +18 -18
  236. package/types/modules/global-link/utils/createTable.d.ts +1 -1
  237. package/types/modules/i18n.d.ts +15 -14
  238. package/types/modules/link/formats/link.d.ts +15 -14
  239. package/types/modules/link/index.d.ts +6 -6
  240. package/types/modules/link/modules/tooltip.d.ts +32 -31
  241. package/types/modules/mathlive/formats.d.ts +21 -20
  242. package/types/modules/mathlive/index.d.ts +7 -6
  243. package/types/modules/mathlive/tooltip.d.ts +15 -14
  244. package/types/modules/mention/Mention.d.ts +54 -53
  245. package/types/modules/mention/MentionLink.d.ts +15 -14
  246. package/types/modules/mention/constants.d.ts +3 -3
  247. package/types/modules/quick-menu.d.ts +21 -20
  248. package/types/modules/syntax.d.ts +13 -12
  249. package/types/modules/table/better-table.d.ts +32 -31
  250. package/types/modules/table/formats/header.d.ts +22 -21
  251. package/types/modules/table/formats/list.d.ts +34 -34
  252. package/types/modules/table/formats/table.d.ts +146 -145
  253. package/types/modules/table/modules/table-column-tool.d.ts +23 -23
  254. package/types/modules/table/modules/table-operation-menu.d.ts +38 -38
  255. package/types/modules/table/modules/table-scroll-bar.d.ts +33 -33
  256. package/types/modules/table/modules/table-selection.d.ts +37 -37
  257. package/types/modules/table/modules/table-selector.d.ts +22 -22
  258. package/types/modules/table/table-config.d.ts +38 -38
  259. package/types/modules/table/utils/index.d.ts +17 -17
  260. package/types/modules/table/utils/node-matchers.d.ts +9 -9
  261. package/types/modules/toolbar/better-picker.d.ts +1 -1
  262. package/types/modules/toolbar/index.d.ts +8 -7
  263. package/types/modules/toolbar/toolbar-tip.d.ts +8 -7
  264. package/types/themes/snow.d.ts +3 -2
  265. package/types/tools/format-painter.d.ts +14 -13
  266. package/types/tools/fullscreen.d.ts +2 -1
  267. package/types/tools/screenshot.d.ts +18 -17
  268. package/types/ui/icons.config.d.ts +36 -36
  269. package/types/ui/icons.d.ts +6 -6
  270. package/types/utils/debounce.d.ts +6 -6
  271. package/types/utils/image.d.ts +1 -1
  272. package/types/utils/is.d.ts +4 -4
  273. package/types/utils/method.d.ts +6 -6
  274. package/types/utils/scroll-lock.d.ts +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"node-matchers.cjs.js","sources":["../../../../../src/modules/table/utils/node-matchers.ts"],"sourcesContent":["import Quill from 'quill'\nimport { omit, splitWithBreak } from '../../../config/editor.utils'\nimport { cellId as tableCellId, rowId as tableRowId, TableViewWrapper } from '../formats/table'\nimport { CELL_MIN_WIDTH } from '../table-config'\n\nconst Delta = Quill.imports.delta\nconst InlineBlot = Quill.imports.parchment.InlineBlot\n\n// rebuild delta\nexport function matchTableCell(node, delta) {\n // fix: 移除旧数据中的pt高度,避免由于高度平均分导致无法插入行\n if (node.style.height.indexOf('pt')) {\n node.removeAttribute('style')\n }\n\n const row = node.parentNode\n let rowId = row.dataset.row\n if (!rowId) {\n rowId = row.dataset.row = tableRowId()\n }\n let cellId = node.dataset.cell\n // fix: dataset.cell in td will be 'undefined' when insert row/column\n if (!cellId || cellId === 'undefined') {\n cellId = tableCellId()\n }\n const colspan = node.getAttribute('colspan') || 1\n const rowspan = node.getAttribute('rowspan') || 1\n\n // fix: empty table cells copied from other place will be removed unexpectedly\n if (delta.length() === 0) {\n delta = new Delta().insert('\\n', {\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\n })\n return delta\n }\n\n delta = delta.reduce((newDelta, op) => {\n if (op.insert && typeof op.insert === 'string') {\n const lines = splitWithBreak(op.insert)\n\n lines.forEach((text) => {\n if (text === '\\n') {\n let attributes = {}\n const cellAttributes = {\n row: rowId,\n cell: cellId,\n rowspan,\n colspan,\n }\n if (op.attributes.table) {\n delete op.attributes.table\n }\n switch (true) {\n case !!op.attributes.header:\n attributes = Object.assign(op.attributes.header, cellAttributes)\n break\n case !!op.attributes.list:\n attributes = { list: Object.assign(op.attributes.list, cellAttributes) }\n break\n default:\n attributes = { 'table-cell-line': cellAttributes }\n }\n // fix: when td has background-color, quill can't set it to table-cell bolt\n if (op.attributes.background && attributes['table-cell-line']) {\n attributes['table-cell-line'].tdBgColor = op.attributes.background\n }\n newDelta.insert('\\n', Object.assign(op.attributes, attributes))\n }\n else {\n newDelta.insert(text, omit(op.attributes, ['table', 'table-cell-line', 'header', 'list']))\n }\n })\n }\n else {\n newDelta.insert(op.insert, op.attributes)\n }\n\n return newDelta\n }, new Delta())\n\n // fix: table cell height becomes larger(because insert unnecessary <div> on both sides of cell) when init table ngModel\n const regexp = /^[\\n]+$/\n const firstDelta = delta.ops[0]\n if (delta.ops.length >= 3) {\n const lastDelta = delta.ops[delta.ops.length - 1]\n if (regexp.test(firstDelta.insert) && firstDelta.attributes['table-cell-line']) {\n delta.ops.splice(0, 1)\n }\n if (regexp.test(lastDelta.insert) && lastDelta.attributes['table-cell-line']) {\n delta.ops[delta.ops.length - 1].insert = '\\n'\n }\n }\n else if (delta.ops.length === 1 && regexp.test(firstDelta.insert) && firstDelta.attributes['table-cell-line']) {\n delta.ops[0].insert = '\\n'\n }\n\n return delta\n}\n\n// replace th tag with td tag\nexport function matchTableHeader(node, delta, _scroll) {\n const row = node.parentNode\n const cells = Array.from(row.querySelectorAll('th'))\n let rowId = row.dataset.row\n if (!rowId) {\n rowId = row.dataset.row = tableRowId()\n }\n const cellId = cells.indexOf(node) + 1\n const colspan = node.getAttribute('colspan') || false\n const rowspan = node.getAttribute('rowspan') || false\n\n // fix: empty table cells copied from other place will be removed unexpectedly\n if (delta.length() === 0) {\n delta = new Delta().insert('\\n', {\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\n })\n return delta\n }\n\n delta = delta.reduce((newDelta, op) => {\n if (op.insert && typeof op.insert === 'string') {\n const lines = splitWithBreak(op.insert)\n\n // fix: no '\\n' in the end of op.insert, push a '\\n' to lines\n if (lines[lines.length - 1] !== '\\n') {\n lines.push('\\n')\n }\n\n lines.forEach((text) => {\n text === '\\n'\n ? newDelta.insert('\\n', { 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan } })\n : newDelta.insert(text, op.attributes)\n })\n }\n else {\n newDelta.insert(op.insert, op.attributes)\n }\n\n return newDelta\n }, new Delta())\n\n delta = delta.reduce((newDelta, op) => {\n if (op.insert && typeof op.insert === 'string' && op.insert.startsWith('\\n')) {\n newDelta.insert(op.insert, { 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan } })\n }\n else {\n newDelta.insert(op.insert, { ...omit(op.attributes, ['table', 'table-cell-line']) })\n }\n\n return newDelta\n }, new Delta())\n\n return delta\n}\n\n// supplement colgroup and col\nexport function matchTable(node, delta, scroll) {\n const isWordTable = node.children.length === 1\n if (!(node instanceof Element)) {\n return\n }\n const getMaxColNumber = (tds) => {\n if (isWordTable) {\n return tds.length\n }\n let colsNumber = 0\n tds.forEach((td) => {\n colsNumber += td.colSpan\n })\n return Math.max(tds.length, colsNumber)\n }\n\n const checkMinWidth = (width) => {\n if (Number.isNaN(width)) {\n // 无指定值时默认为auto,待渲染后修正\n return { 'table-col': { width: 'auto' } }\n }\n else if (width < CELL_MIN_WIDTH) {\n // 当列宽度小于默认宽度时取默认宽度\n return { 'table-col': true }\n }\n else {\n // 大于默认值取实际指定值\n return { 'table-col': { width } }\n }\n }\n\n // fix: a table with an empty tr is invalid, should not be displayed\n const rows = node.querySelectorAll('tr')\n const topRow = rows[0]\n const onlyEmptyTr = rows.length === 1 && !topRow.querySelector('td')\n\n // fix: empty table will return empty delta\n if (!topRow || onlyEmptyTr) {\n return new Delta().insert('\\n')\n }\n\n const colsNumber = node.querySelectorAll('col').length\n let maxCellsNumber = 0\n let maxCells\n // 遍历行获取最大列数和该行的所有单元格\n Array.prototype.slice.call(rows).forEach((row) => {\n const tds = row.querySelectorAll('td')\n maxCellsNumber = Math.max(getMaxColNumber(tds), maxCellsNumber)\n maxCells = tds\n })\n\n // 列的累计器\n let colCount = 0\n delta = delta.reduce((newDelta, op) => {\n // 当colCount与colsNumber相等时,则补充相差列\n if (colCount === colsNumber) {\n const fillNumber = maxCellsNumber - colCount\n const outset = colCount\n // index为差值列索引,通过遍历差值得到mexCells行中对应索引的单元格宽度\n for (let i = 0; i < fillNumber; i++) {\n const index = outset + i\n const colWidth = Number.parseInt(\n index < maxCells.length\n ? maxCells[index].width\n // maxCells[index].style && maxCells[index].style.width ? maxCells[index].style.width :\n : maxCells[maxCells.length - 1].width,\n 10,\n )\n newDelta.insert('\\n', checkMinWidth(colWidth))\n colCount++\n }\n }\n const attr = op.attributes || {}\n switch (true) {\n case !!attr['table-col']:\n // 只有当前列数小于实际总列数才操作,所以不存在大于的情况\n if (colCount < maxCellsNumber) {\n // 当table-col宽度一致时会合并为单一insert,insert长度大于1,截取符合实际总列数的长度来插入\n const insert = op.insert.slice(0, maxCellsNumber)\n const colWidth = Number.parseInt(attr['table-col'].width, 10)\n newDelta.insert(insert, checkMinWidth(colWidth))\n colCount += insert.length\n }\n break\n case !!attr.notFilled:\n { // 将标记的空tr填充对应列数的单元格\n const rowId = tableRowId()\n for (let x = 0; x < maxCellsNumber; x++) {\n newDelta.insert('\\n', { 'table-cell-line': { row: rowId, cell: tableCellId(), rowspan: 1, colspan: 1 } })\n }\n break }\n default:\n newDelta.insert(op.insert, op.attributes)\n }\n return newDelta\n }, new Delta())\n\n const tableItem = node.closest('.quill-better-table-wrapper') || node\n const prevBlot = tableItem.previousElementSibling && scroll.query(tableItem.previousElementSibling)\n const nextBlot = tableItem.nextElementSibling && scroll.query(tableItem.nextElementSibling)\n // fix: prevent two adjacent tables from sticking together\n if (!nextBlot || nextBlot.prototype instanceof InlineBlot) {\n delta = delta.insert('\\n')\n }\n // fix: When there is no line break in front of the table, pressing the Enter key will cause a problem with the table.\n if (!prevBlot || prevBlot.prototype instanceof InlineBlot) {\n const newLine = new Delta().insert('\\n')\n delta = newLine.concat(delta)\n }\n if (nextBlot === TableViewWrapper) {\n delta = delta.insert('\\n')\n }\n\n return delta\n}\n\nexport function matchTableRow(_node, delta) {\n // fix: 处理空<tr>标签被忽略的情况\n if (delta.ops.length === 1 && !delta.ops[0].attributes) {\n delta = new Delta().insert('\\n', { notFilled: true })\n }\n return delta\n}\n\n// match h tags, distinguish between headers in the table and headers outside the table\nexport function matchHeader(node, delta) {\n const newDelta = new Delta()\n const fontSize = node.style.fontSize\n delta.forEach((op) => {\n newDelta.insert(\n op.insert,\n Object.assign({}, op.attributes, {\n size: fontSize,\n }),\n )\n })\n return newDelta\n}\n\nexport function matchList(node, delta) {\n const value = node.tagName === 'UL' ? 'bullet' : 'ordered'\n delta.forEach((op) => {\n if (typeof op.attributes.list === 'string') {\n delete op.attributes.list\n }\n else if (typeof op.attributes.list === 'object' && !op.attributes.list.value) {\n op.attributes.list.value = value\n }\n })\n return delta\n}\n\nexport function matchInline(node, delta, scroll) {\n const quill = Quill.find(scroll.domNode.parentNode)\n const currentRange = quill.getSelection()\n const formats = currentRange && quill.getFormat(currentRange)\n if (\n formats\n && formats['table-cell-line'] // 当前光标节点在表格内,否则不操作delta\n && node.nextElementSibling\n ) {\n // 插入节点是否存在下一个兄弟元素\n const match = scroll.query(node)\n const nodeHtml = node.nextElementSibling.innerHTML\n const nodeText = node.nextElementSibling.textContent\n if (\n (match && match.prototype instanceof InlineBlot) // 判断当前节点是否为内联\n || (node.tagName === 'P' && nodeHtml !== nodeText)\n ) {\n // 非内联时如果为P且下一个不为text节点\n delta.forEach((op) => {\n op.insert += '\\n'\n })\n }\n }\n return delta\n}\n\n// 匹配 word 自带的 v:shape 标签中的图片 v:imageData\nexport function matchWordShapeImage(node, delta) {\n if (node) {\n const imageUrl = node.attributes.src?.nodeValue\n delta = new Delta().insert({ image: imageUrl })\n }\n return delta\n}\n\nexport function matchMentionLink(node, delta, scroll) {\n const name = node.dataset.mentionId\n if (name) {\n const quill = Quill.find(scroll.domNode.parentNode)\n const mention = quill.getModule('mention')\n if (mention) {\n mention.options.search(name).then((res) => {\n const [item] = res\n if (item) {\n mention.options.select(item)\n }\n })\n }\n }\n return delta\n}\n"],"names":["tableRowId","tableCellId","splitWithBreak","omit","colsNumber","CELL_MIN_WIDTH","TableViewWrapper"],"mappings":"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"}
1
+ {"version":3,"file":"node-matchers.cjs.js","sources":["../../../../../src/modules/table/utils/node-matchers.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { omit, splitWithBreak } from '../../../config/editor.utils'\r\nimport { cellId as tableCellId, rowId as tableRowId, TableViewWrapper } from '../formats/table'\r\nimport { CELL_MIN_WIDTH } from '../table-config'\r\n\r\nconst Delta = Quill.imports.delta\r\nconst InlineBlot = Quill.imports.parchment.InlineBlot\r\n\r\n// rebuild delta\r\nexport function matchTableCell(node, delta) {\r\n // fix: 移除旧数据中的pt高度,避免由于高度平均分导致无法插入行\r\n if (node.style.height.indexOf('pt')) {\r\n node.removeAttribute('style')\r\n }\r\n\r\n const row = node.parentNode\r\n let rowId = row.dataset.row\r\n if (!rowId) {\r\n rowId = row.dataset.row = tableRowId()\r\n }\r\n let cellId = node.dataset.cell\r\n // fix: dataset.cell in td will be 'undefined' when insert row/column\r\n if (!cellId || cellId === 'undefined') {\r\n cellId = tableCellId()\r\n }\r\n const colspan = node.getAttribute('colspan') || 1\r\n const rowspan = node.getAttribute('rowspan') || 1\r\n\r\n // fix: empty table cells copied from other place will be removed unexpectedly\r\n if (delta.length() === 0) {\r\n delta = new Delta().insert('\\n', {\r\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\r\n })\r\n return delta\r\n }\r\n\r\n delta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n\r\n lines.forEach((text) => {\r\n if (text === '\\n') {\r\n let attributes = {}\r\n const cellAttributes = {\r\n row: rowId,\r\n cell: cellId,\r\n rowspan,\r\n colspan,\r\n }\r\n if (op.attributes.table) {\r\n delete op.attributes.table\r\n }\r\n switch (true) {\r\n case !!op.attributes.header:\r\n attributes = Object.assign(op.attributes.header, cellAttributes)\r\n break\r\n case !!op.attributes.list:\r\n attributes = { list: Object.assign(op.attributes.list, cellAttributes) }\r\n break\r\n default:\r\n attributes = { 'table-cell-line': cellAttributes }\r\n }\r\n // fix: when td has background-color, quill can't set it to table-cell bolt\r\n if (op.attributes.background && attributes['table-cell-line']) {\r\n attributes['table-cell-line'].tdBgColor = op.attributes.background\r\n }\r\n newDelta.insert('\\n', Object.assign(op.attributes, attributes))\r\n }\r\n else {\r\n newDelta.insert(text, omit(op.attributes, ['table', 'table-cell-line', 'header', 'list']))\r\n }\r\n })\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n // fix: table cell height becomes larger(because insert unnecessary <div> on both sides of cell) when init table ngModel\r\n const regexp = /^[\\n]+$/\r\n const firstDelta = delta.ops[0]\r\n if (delta.ops.length >= 3) {\r\n const lastDelta = delta.ops[delta.ops.length - 1]\r\n if (regexp.test(firstDelta.insert) && firstDelta.attributes['table-cell-line']) {\r\n delta.ops.splice(0, 1)\r\n }\r\n if (regexp.test(lastDelta.insert) && lastDelta.attributes['table-cell-line']) {\r\n delta.ops[delta.ops.length - 1].insert = '\\n'\r\n }\r\n }\r\n else if (delta.ops.length === 1 && regexp.test(firstDelta.insert) && firstDelta.attributes['table-cell-line']) {\r\n delta.ops[0].insert = '\\n'\r\n }\r\n\r\n return delta\r\n}\r\n\r\n// replace th tag with td tag\r\nexport function matchTableHeader(node, delta, _scroll) {\r\n const row = node.parentNode\r\n const cells = Array.from(row.querySelectorAll('th'))\r\n let rowId = row.dataset.row\r\n if (!rowId) {\r\n rowId = row.dataset.row = tableRowId()\r\n }\r\n const cellId = cells.indexOf(node) + 1\r\n const colspan = node.getAttribute('colspan') || false\r\n const rowspan = node.getAttribute('rowspan') || false\r\n\r\n // fix: empty table cells copied from other place will be removed unexpectedly\r\n if (delta.length() === 0) {\r\n delta = new Delta().insert('\\n', {\r\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\r\n })\r\n return delta\r\n }\r\n\r\n delta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n\r\n // fix: no '\\n' in the end of op.insert, push a '\\n' to lines\r\n if (lines[lines.length - 1] !== '\\n') {\r\n lines.push('\\n')\r\n }\r\n\r\n lines.forEach((text) => {\r\n text === '\\n'\r\n ? newDelta.insert('\\n', { 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan } })\r\n : newDelta.insert(text, op.attributes)\r\n })\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n delta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string' && op.insert.startsWith('\\n')) {\r\n newDelta.insert(op.insert, { 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan } })\r\n }\r\n else {\r\n newDelta.insert(op.insert, { ...omit(op.attributes, ['table', 'table-cell-line']) })\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n return delta\r\n}\r\n\r\n// supplement colgroup and col\r\nexport function matchTable(node, delta, scroll) {\r\n const isWordTable = node.children.length === 1\r\n if (!(node instanceof Element)) {\r\n return\r\n }\r\n const getMaxColNumber = (tds) => {\r\n if (isWordTable) {\r\n return tds.length\r\n }\r\n let colsNumber = 0\r\n tds.forEach((td) => {\r\n colsNumber += td.colSpan\r\n })\r\n return Math.max(tds.length, colsNumber)\r\n }\r\n\r\n const checkMinWidth = (width) => {\r\n if (Number.isNaN(width)) {\r\n // 无指定值时默认为auto,待渲染后修正\r\n return { 'table-col': { width: 'auto' } }\r\n }\r\n else if (width < CELL_MIN_WIDTH) {\r\n // 当列宽度小于默认宽度时取默认宽度\r\n return { 'table-col': true }\r\n }\r\n else {\r\n // 大于默认值取实际指定值\r\n return { 'table-col': { width } }\r\n }\r\n }\r\n\r\n // fix: a table with an empty tr is invalid, should not be displayed\r\n const rows = node.querySelectorAll('tr')\r\n const topRow = rows[0]\r\n const onlyEmptyTr = rows.length === 1 && !topRow.querySelector('td')\r\n\r\n // fix: empty table will return empty delta\r\n if (!topRow || onlyEmptyTr) {\r\n return new Delta().insert('\\n')\r\n }\r\n\r\n const colsNumber = node.querySelectorAll('col').length\r\n let maxCellsNumber = 0\r\n let maxCells\r\n // 遍历行获取最大列数和该行的所有单元格\r\n Array.prototype.slice.call(rows).forEach((row) => {\r\n const tds = row.querySelectorAll('td')\r\n maxCellsNumber = Math.max(getMaxColNumber(tds), maxCellsNumber)\r\n maxCells = tds\r\n })\r\n\r\n // 列的累计器\r\n let colCount = 0\r\n delta = delta.reduce((newDelta, op) => {\r\n // 当colCount与colsNumber相等时,则补充相差列\r\n if (colCount === colsNumber) {\r\n const fillNumber = maxCellsNumber - colCount\r\n const outset = colCount\r\n // index为差值列索引,通过遍历差值得到mexCells行中对应索引的单元格宽度\r\n for (let i = 0; i < fillNumber; i++) {\r\n const index = outset + i\r\n const colWidth = Number.parseInt(\r\n index < maxCells.length\r\n ? maxCells[index].width\r\n // maxCells[index].style && maxCells[index].style.width ? maxCells[index].style.width :\r\n : maxCells[maxCells.length - 1].width,\r\n 10,\r\n )\r\n newDelta.insert('\\n', checkMinWidth(colWidth))\r\n colCount++\r\n }\r\n }\r\n const attr = op.attributes || {}\r\n switch (true) {\r\n case !!attr['table-col']:\r\n // 只有当前列数小于实际总列数才操作,所以不存在大于的情况\r\n if (colCount < maxCellsNumber) {\r\n // 当table-col宽度一致时会合并为单一insert,insert长度大于1,截取符合实际总列数的长度来插入\r\n const insert = op.insert.slice(0, maxCellsNumber)\r\n const colWidth = Number.parseInt(attr['table-col'].width, 10)\r\n newDelta.insert(insert, checkMinWidth(colWidth))\r\n colCount += insert.length\r\n }\r\n break\r\n case !!attr.notFilled:\r\n { // 将标记的空tr填充对应列数的单元格\r\n const rowId = tableRowId()\r\n for (let x = 0; x < maxCellsNumber; x++) {\r\n newDelta.insert('\\n', { 'table-cell-line': { row: rowId, cell: tableCellId(), rowspan: 1, colspan: 1 } })\r\n }\r\n break }\r\n default:\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n return newDelta\r\n }, new Delta())\r\n\r\n const tableItem = node.closest('.quill-better-table-wrapper') || node\r\n const prevBlot = tableItem.previousElementSibling && scroll.query(tableItem.previousElementSibling)\r\n const nextBlot = tableItem.nextElementSibling && scroll.query(tableItem.nextElementSibling)\r\n // fix: prevent two adjacent tables from sticking together\r\n if (!nextBlot || nextBlot.prototype instanceof InlineBlot) {\r\n delta = delta.insert('\\n')\r\n }\r\n // fix: When there is no line break in front of the table, pressing the Enter key will cause a problem with the table.\r\n if (!prevBlot || prevBlot.prototype instanceof InlineBlot) {\r\n const newLine = new Delta().insert('\\n')\r\n delta = newLine.concat(delta)\r\n }\r\n if (nextBlot === TableViewWrapper) {\r\n delta = delta.insert('\\n')\r\n }\r\n\r\n return delta\r\n}\r\n\r\nexport function matchTableRow(_node, delta) {\r\n // fix: 处理空<tr>标签被忽略的情况\r\n if (delta.ops.length === 1 && !delta.ops[0].attributes) {\r\n delta = new Delta().insert('\\n', { notFilled: true })\r\n }\r\n return delta\r\n}\r\n\r\n// match h tags, distinguish between headers in the table and headers outside the table\r\nexport function matchHeader(node, delta) {\r\n const newDelta = new Delta()\r\n const fontSize = node.style.fontSize\r\n delta.forEach((op) => {\r\n newDelta.insert(\r\n op.insert,\r\n Object.assign({}, op.attributes, {\r\n size: fontSize,\r\n }),\r\n )\r\n })\r\n return newDelta\r\n}\r\n\r\nexport function matchList(node, delta) {\r\n const value = node.tagName === 'UL' ? 'bullet' : 'ordered'\r\n delta.forEach((op) => {\r\n if (typeof op.attributes.list === 'string') {\r\n delete op.attributes.list\r\n }\r\n else if (typeof op.attributes.list === 'object' && !op.attributes.list.value) {\r\n op.attributes.list.value = value\r\n }\r\n })\r\n return delta\r\n}\r\n\r\nexport function matchInline(node, delta, scroll) {\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n const currentRange = quill.getSelection()\r\n const formats = currentRange && quill.getFormat(currentRange)\r\n if (\r\n formats\r\n && formats['table-cell-line'] // 当前光标节点在表格内,否则不操作delta\r\n && node.nextElementSibling\r\n ) {\r\n // 插入节点是否存在下一个兄弟元素\r\n const match = scroll.query(node)\r\n const nodeHtml = node.nextElementSibling.innerHTML\r\n const nodeText = node.nextElementSibling.textContent\r\n if (\r\n (match && match.prototype instanceof InlineBlot) // 判断当前节点是否为内联\r\n || (node.tagName === 'P' && nodeHtml !== nodeText)\r\n ) {\r\n // 非内联时如果为P且下一个不为text节点\r\n delta.forEach((op) => {\r\n op.insert += '\\n'\r\n })\r\n }\r\n }\r\n return delta\r\n}\r\n\r\n// 匹配 word 自带的 v:shape 标签中的图片 v:imageData\r\nexport function matchWordShapeImage(node, delta) {\r\n if (node) {\r\n const imageUrl = node.attributes.src?.nodeValue\r\n delta = new Delta().insert({ image: imageUrl })\r\n }\r\n return delta\r\n}\r\n\r\nexport function matchMentionLink(node, delta, scroll) {\r\n const name = node.dataset.mentionId\r\n if (name) {\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n const mention = quill.getModule('mention')\r\n if (mention) {\r\n mention.options.search(name).then((res) => {\r\n const [item] = res\r\n if (item) {\r\n mention.options.select(item)\r\n }\r\n })\r\n }\r\n }\r\n return delta\r\n}\r\n"],"names":["tableRowId","tableCellId","splitWithBreak","omit","colsNumber","CELL_MIN_WIDTH","TableViewWrapper"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"better-picker.cjs.js","sources":["../../../../src/modules/toolbar/better-picker.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../../config/editor.utils'\n\nconst SnowTheme = Quill.imports['themes/snow']\n\nlet optionsCounter = 0\n\nfunction toggleAriaAttribute(element, attribute) {\n element.setAttribute(\n attribute,\n element.getAttribute(attribute) !== 'true',\n )\n}\n\nclass Picker {\n container: any\n label: any\n options: any\n select: any\n constructor(select) {\n this.select = select\n this.container = document.createElement('span')\n this.buildPicker()\n this.select.style.display = 'none'\n this.select.parentNode.insertBefore(this.container, this.select)\n\n this.label.addEventListener('mousedown', (e) => {\n this.togglePicker()\n e.preventDefault()\n })\n this.label.addEventListener('keydown', (event) => {\n switch (event.key) {\n case 'Enter':\n this.togglePicker()\n break\n case 'Escape':\n this.escape()\n event.preventDefault()\n break\n default:\n }\n })\n this.select.addEventListener('change', this.update.bind(this))\n }\n\n togglePicker() {\n this.container.classList.toggle('ql-expanded')\n // Toggle aria-expanded and aria-hidden to make the picker accessible\n toggleAriaAttribute(this.label, 'aria-expanded')\n toggleAriaAttribute(this.options, 'aria-hidden')\n }\n\n buildItem(option) {\n const item = document.createElement('span')\n item.tabIndex = 0\n item.setAttribute('role', 'button')\n item.classList.add('ql-picker-item')\n if (option.hasAttribute('value')) {\n item.setAttribute('data-value', option.getAttribute('value'))\n }\n if (option.textContent) {\n item.setAttribute('data-label', option.textContent)\n }\n item.addEventListener('click', () => {\n this.selectItem(item, true)\n })\n item.addEventListener('keydown', (event) => {\n switch (event.key) {\n case 'Enter':\n this.selectItem(item, true)\n event.preventDefault()\n break\n case 'Escape':\n this.escape()\n event.preventDefault()\n break\n default:\n }\n })\n\n return item\n }\n\n buildLabel() {\n const label = document.createElement('span')\n label.classList.add('ql-picker-label')\n label.innerHTML = `\n <svg viewbox=\"0 0 18 18\">\n <polygon class=\"ql-stroke\" points=\"7 11 9 13 11 11 7 11\"></polygon>\n <polygon class=\"ql-stroke\" points=\"7 7 9 5 11 7 7 7\"></polygon>\n </svg>\n `\n label.tabIndex = 0\n label.setAttribute('role', 'button')\n label.setAttribute('aria-expanded', 'false')\n this.container.appendChild(label)\n return label\n }\n\n buildOptions() {\n const options = document.createElement('span')\n options.classList.add('ql-picker-options')\n\n // Don't want screen readers to read this until options are visible\n options.setAttribute('aria-hidden', 'true')\n options.tabIndex = -1\n\n // Need a unique id for aria-controls\n options.id = `ql-picker-options-${optionsCounter}`\n optionsCounter += 1\n this.label.setAttribute('aria-controls', options.id)\n\n this.options = options\n\n Array.from(this.select.options).forEach((option: any) => {\n const item = this.buildItem(option)\n options.appendChild(item)\n if (option.selected === true) {\n this.selectItem(item)\n }\n })\n this.container.appendChild(options)\n }\n\n buildPicker() {\n Array.from(this.select.attributes).forEach((item: any) => {\n this.container.setAttribute(item.name, item.value)\n })\n this.container.classList.add('ql-picker')\n this.label = this.buildLabel()\n this.buildOptions()\n }\n\n escape() {\n // Close menu and return focus to trigger label\n this.close()\n // Need setTimeout for accessibility to ensure that the browser executes\n // focus on the next process thread and after any DOM content changes\n setTimeout(() => this.label.focus(), 1)\n }\n\n close() {\n this.container.classList.remove('ql-expanded')\n this.label.setAttribute('aria-expanded', 'false')\n this.options.setAttribute('aria-hidden', 'true')\n }\n\n selectItem(item, trigger = false) {\n const selected = this.container.querySelector('.ql-selected')\n if (item === selected) return\n if (!isNullOrUndefined(selected)) {\n selected.classList.remove('ql-selected')\n }\n if (isNullOrUndefined(item)) return\n item.classList.add('ql-selected')\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(\n item,\n )\n if (item.hasAttribute('data-value')) {\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\n }\n else {\n this.label.removeAttribute('data-value')\n }\n if (item.hasAttribute('data-label')) {\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\n }\n else {\n this.label.removeAttribute('data-label')\n }\n if (trigger) {\n let ev\n if (typeof Event === 'function') {\n ev = new Event('change')\n }\n else {\n ev = document.createEvent('Event')\n ev.initEvent('change', true, true)\n }\n this.select.dispatchEvent(ev)\n this.close()\n }\n }\n\n update() {\n let option\n if (this.select.selectedIndex > -1) {\n const item = this.container.querySelector('.ql-picker-options').children[\n this.select.selectedIndex\n ]\n option = this.select.options[this.select.selectedIndex]\n this.selectItem(item)\n }\n else {\n this.selectItem(null)\n }\n const isActive\n = !isNullOrUndefined(option)\n && option !== this.select.querySelector('option[selected]')\n\n if (isActive) {\n this.label.classList.add('ql-active')\n }\n else {\n this.label.classList.remove('ql-active')\n }\n }\n}\n\nclass IconPicker extends Picker {\n defaultItem: any\n constructor(select, icons) {\n super(select)\n this.container.classList.add('ql-icon-picker')\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(\n (item: any) => {\n item.innerHTML = icons[item.getAttribute('data-value') || '']\n },\n )\n this.defaultItem = this.container.querySelector('.ql-selected')\n this.selectItem(this.defaultItem, null)\n }\n\n selectItem(target, trigger) {\n super.selectItem(target, trigger)\n const item = target || this.defaultItem\n if (this.label.innerHTML === item.innerHTML) return\n this.label.innerHTML = item.innerHTML\n }\n}\n\nclass ColorPicker extends Picker {\n constructor(select, label) {\n super(select)\n this.label.innerHTML = label\n this.container.classList.add('ql-color-picker')\n Array.from(this.container.querySelectorAll('.ql-picker-item'))\n .slice(0, 7)\n .forEach((item: any) => {\n item.classList.add('ql-primary')\n })\n }\n\n buildItem(option) {\n const item = super.buildItem(option)\n item.style.backgroundColor = option.getAttribute('value') || ''\n return item\n }\n\n selectItem(item, trigger) {\n super.selectItem(item, trigger)\n const colorLabel = this.label.querySelector('.ql-color-label')\n const value = item ? item.getAttribute('data-value') || '' : ''\n if (colorLabel) {\n if (colorLabel.tagName === 'line') {\n colorLabel.style.stroke = value\n }\n else {\n colorLabel.style.fill = value\n }\n }\n }\n}\n\nQuill.register('ui/picker', Picker, true)\nQuill.register('ui/icon-picker', IconPicker, true)\nQuill.register('ui/color-picker', ColorPicker, true)\n\nconst ALIGNS = [false, 'center', 'right']\n\nconst COLORS = [\n '#000000',\n '#e60000',\n '#ff9900',\n '#ffff00',\n '#008a00',\n '#0066cc',\n '#9933ff',\n '#ffffff',\n '#facccc',\n '#ffebcc',\n '#ffffcc',\n '#cce8cc',\n '#cce0f5',\n '#ebd6ff',\n '#bbbbbb',\n '#f06666',\n '#ffc266',\n '#ffff66',\n '#66b966',\n '#66a3e0',\n '#c285ff',\n '#888888',\n '#a10000',\n '#b26b00',\n '#b2b200',\n '#006100',\n '#0047b2',\n '#6b24b2',\n '#444444',\n '#5c0000',\n '#663d00',\n '#666600',\n '#003700',\n '#002966',\n '#3d1466',\n]\n\nconst FONTS = [false, 'serif', 'monospace']\n\nconst HEADERS = ['1', '2', '3', false]\n\nconst SIZES = ['small', false, 'large', 'huge']\n\nSnowTheme.prototype.buildPickers = function (selects, icons) {\n this.pickers = Array.from(selects).map((select: any) => {\n if (select.classList.contains('ql-align')) {\n if (isNullOrUndefined(select.querySelector('option'))) {\n fillSelect(select, ALIGNS)\n }\n return new IconPicker(select, icons.align)\n }\n if (\n select.classList.contains('ql-background')\n || select.classList.contains('ql-color')\n ) {\n const format = select.classList.contains('ql-background')\n ? 'background'\n : 'color'\n if (isNullOrUndefined(select.querySelector('option'))) {\n fillSelect(\n select,\n COLORS,\n )\n }\n return new ColorPicker(select, icons[format])\n }\n if (isNullOrUndefined(select.querySelector('option'))) {\n if (select.classList.contains('ql-font')) {\n fillSelect(select, FONTS)\n }\n else if (select.classList.contains('ql-header')) {\n fillSelect(select, HEADERS)\n }\n else if (select.classList.contains('ql-size')) {\n fillSelect(select, SIZES)\n }\n }\n return new Picker(select)\n })\n const update = () => {\n this.pickers.forEach((picker) => {\n picker.update()\n })\n }\n this.quill.on(Quill.events.EDITOR_CHANGE, update)\n}\n\nfunction fillSelect(select, values, defaultValue = false) {\n values.forEach((value) => {\n const option = document.createElement('option')\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected')\n }\n else {\n option.setAttribute('value', value)\n }\n select.appendChild(option)\n })\n}\n"],"names":["isNullOrUndefined"],"mappings":"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"}
1
+ {"version":3,"file":"better-picker.cjs.js","sources":["../../../../src/modules/toolbar/better-picker.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\n\r\nconst SnowTheme = Quill.imports['themes/snow']\r\n\r\nlet optionsCounter = 0\r\n\r\nfunction toggleAriaAttribute(element, attribute) {\r\n element.setAttribute(\r\n attribute,\r\n element.getAttribute(attribute) !== 'true',\r\n )\r\n}\r\n\r\nclass Picker {\r\n container: any\r\n label: any\r\n options: any\r\n select: any\r\n constructor(select) {\r\n this.select = select\r\n this.container = document.createElement('span')\r\n this.buildPicker()\r\n this.select.style.display = 'none'\r\n this.select.parentNode.insertBefore(this.container, this.select)\r\n\r\n this.label.addEventListener('mousedown', (e) => {\r\n this.togglePicker()\r\n e.preventDefault()\r\n })\r\n this.label.addEventListener('keydown', (event) => {\r\n switch (event.key) {\r\n case 'Enter':\r\n this.togglePicker()\r\n break\r\n case 'Escape':\r\n this.escape()\r\n event.preventDefault()\r\n break\r\n default:\r\n }\r\n })\r\n this.select.addEventListener('change', this.update.bind(this))\r\n }\r\n\r\n togglePicker() {\r\n this.container.classList.toggle('ql-expanded')\r\n // Toggle aria-expanded and aria-hidden to make the picker accessible\r\n toggleAriaAttribute(this.label, 'aria-expanded')\r\n toggleAriaAttribute(this.options, 'aria-hidden')\r\n }\r\n\r\n buildItem(option) {\r\n const item = document.createElement('span')\r\n item.tabIndex = 0\r\n item.setAttribute('role', 'button')\r\n item.classList.add('ql-picker-item')\r\n if (option.hasAttribute('value')) {\r\n item.setAttribute('data-value', option.getAttribute('value'))\r\n }\r\n if (option.textContent) {\r\n item.setAttribute('data-label', option.textContent)\r\n }\r\n item.addEventListener('click', () => {\r\n this.selectItem(item, true)\r\n })\r\n item.addEventListener('keydown', (event) => {\r\n switch (event.key) {\r\n case 'Enter':\r\n this.selectItem(item, true)\r\n event.preventDefault()\r\n break\r\n case 'Escape':\r\n this.escape()\r\n event.preventDefault()\r\n break\r\n default:\r\n }\r\n })\r\n\r\n return item\r\n }\r\n\r\n buildLabel() {\r\n const label = document.createElement('span')\r\n label.classList.add('ql-picker-label')\r\n label.innerHTML = `\r\n <svg viewbox=\"0 0 18 18\">\r\n <polygon class=\"ql-stroke\" points=\"7 11 9 13 11 11 7 11\"></polygon>\r\n <polygon class=\"ql-stroke\" points=\"7 7 9 5 11 7 7 7\"></polygon>\r\n </svg>\r\n `\r\n label.tabIndex = 0\r\n label.setAttribute('role', 'button')\r\n label.setAttribute('aria-expanded', 'false')\r\n this.container.appendChild(label)\r\n return label\r\n }\r\n\r\n buildOptions() {\r\n const options = document.createElement('span')\r\n options.classList.add('ql-picker-options')\r\n\r\n // Don't want screen readers to read this until options are visible\r\n options.setAttribute('aria-hidden', 'true')\r\n options.tabIndex = -1\r\n\r\n // Need a unique id for aria-controls\r\n options.id = `ql-picker-options-${optionsCounter}`\r\n optionsCounter += 1\r\n this.label.setAttribute('aria-controls', options.id)\r\n\r\n this.options = options\r\n\r\n Array.from(this.select.options).forEach((option: any) => {\r\n const item = this.buildItem(option)\r\n options.appendChild(item)\r\n if (option.selected === true) {\r\n this.selectItem(item)\r\n }\r\n })\r\n this.container.appendChild(options)\r\n }\r\n\r\n buildPicker() {\r\n Array.from(this.select.attributes).forEach((item: any) => {\r\n this.container.setAttribute(item.name, item.value)\r\n })\r\n this.container.classList.add('ql-picker')\r\n this.label = this.buildLabel()\r\n this.buildOptions()\r\n }\r\n\r\n escape() {\r\n // Close menu and return focus to trigger label\r\n this.close()\r\n // Need setTimeout for accessibility to ensure that the browser executes\r\n // focus on the next process thread and after any DOM content changes\r\n setTimeout(() => this.label.focus(), 1)\r\n }\r\n\r\n close() {\r\n this.container.classList.remove('ql-expanded')\r\n this.label.setAttribute('aria-expanded', 'false')\r\n this.options.setAttribute('aria-hidden', 'true')\r\n }\r\n\r\n selectItem(item, trigger = false) {\r\n const selected = this.container.querySelector('.ql-selected')\r\n if (item === selected) return\r\n if (!isNullOrUndefined(selected)) {\r\n selected.classList.remove('ql-selected')\r\n }\r\n if (isNullOrUndefined(item)) return\r\n item.classList.add('ql-selected')\r\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(\r\n item,\r\n )\r\n if (item.hasAttribute('data-value')) {\r\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-value')\r\n }\r\n if (item.hasAttribute('data-label')) {\r\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-label')\r\n }\r\n if (trigger) {\r\n let ev\r\n if (typeof Event === 'function') {\r\n ev = new Event('change')\r\n }\r\n else {\r\n ev = document.createEvent('Event')\r\n ev.initEvent('change', true, true)\r\n }\r\n this.select.dispatchEvent(ev)\r\n this.close()\r\n }\r\n }\r\n\r\n update() {\r\n let option\r\n if (this.select.selectedIndex > -1) {\r\n const item = this.container.querySelector('.ql-picker-options').children[\r\n this.select.selectedIndex\r\n ]\r\n option = this.select.options[this.select.selectedIndex]\r\n this.selectItem(item)\r\n }\r\n else {\r\n this.selectItem(null)\r\n }\r\n const isActive\r\n = !isNullOrUndefined(option)\r\n && option !== this.select.querySelector('option[selected]')\r\n\r\n if (isActive) {\r\n this.label.classList.add('ql-active')\r\n }\r\n else {\r\n this.label.classList.remove('ql-active')\r\n }\r\n }\r\n}\r\n\r\nclass IconPicker extends Picker {\r\n defaultItem: any\r\n constructor(select, icons) {\r\n super(select)\r\n this.container.classList.add('ql-icon-picker')\r\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(\r\n (item: any) => {\r\n item.innerHTML = icons[item.getAttribute('data-value') || '']\r\n },\r\n )\r\n this.defaultItem = this.container.querySelector('.ql-selected')\r\n this.selectItem(this.defaultItem, null)\r\n }\r\n\r\n selectItem(target, trigger) {\r\n super.selectItem(target, trigger)\r\n const item = target || this.defaultItem\r\n if (this.label.innerHTML === item.innerHTML) return\r\n this.label.innerHTML = item.innerHTML\r\n }\r\n}\r\n\r\nclass ColorPicker extends Picker {\r\n constructor(select, label) {\r\n super(select)\r\n this.label.innerHTML = label\r\n this.container.classList.add('ql-color-picker')\r\n Array.from(this.container.querySelectorAll('.ql-picker-item'))\r\n .slice(0, 7)\r\n .forEach((item: any) => {\r\n item.classList.add('ql-primary')\r\n })\r\n }\r\n\r\n buildItem(option) {\r\n const item = super.buildItem(option)\r\n item.style.backgroundColor = option.getAttribute('value') || ''\r\n return item\r\n }\r\n\r\n selectItem(item, trigger) {\r\n super.selectItem(item, trigger)\r\n const colorLabel = this.label.querySelector('.ql-color-label')\r\n const value = item ? item.getAttribute('data-value') || '' : ''\r\n if (colorLabel) {\r\n if (colorLabel.tagName === 'line') {\r\n colorLabel.style.stroke = value\r\n }\r\n else {\r\n colorLabel.style.fill = value\r\n }\r\n }\r\n }\r\n}\r\n\r\nQuill.register('ui/picker', Picker, true)\r\nQuill.register('ui/icon-picker', IconPicker, true)\r\nQuill.register('ui/color-picker', ColorPicker, true)\r\n\r\nconst ALIGNS = [false, 'center', 'right']\r\n\r\nconst COLORS = [\r\n '#000000',\r\n '#e60000',\r\n '#ff9900',\r\n '#ffff00',\r\n '#008a00',\r\n '#0066cc',\r\n '#9933ff',\r\n '#ffffff',\r\n '#facccc',\r\n '#ffebcc',\r\n '#ffffcc',\r\n '#cce8cc',\r\n '#cce0f5',\r\n '#ebd6ff',\r\n '#bbbbbb',\r\n '#f06666',\r\n '#ffc266',\r\n '#ffff66',\r\n '#66b966',\r\n '#66a3e0',\r\n '#c285ff',\r\n '#888888',\r\n '#a10000',\r\n '#b26b00',\r\n '#b2b200',\r\n '#006100',\r\n '#0047b2',\r\n '#6b24b2',\r\n '#444444',\r\n '#5c0000',\r\n '#663d00',\r\n '#666600',\r\n '#003700',\r\n '#002966',\r\n '#3d1466',\r\n]\r\n\r\nconst FONTS = [false, 'serif', 'monospace']\r\n\r\nconst HEADERS = ['1', '2', '3', false]\r\n\r\nconst SIZES = ['small', false, 'large', 'huge']\r\n\r\nSnowTheme.prototype.buildPickers = function (selects, icons) {\r\n this.pickers = Array.from(selects).map((select: any) => {\r\n if (select.classList.contains('ql-align')) {\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(select, ALIGNS)\r\n }\r\n return new IconPicker(select, icons.align)\r\n }\r\n if (\r\n select.classList.contains('ql-background')\r\n || select.classList.contains('ql-color')\r\n ) {\r\n const format = select.classList.contains('ql-background')\r\n ? 'background'\r\n : 'color'\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(\r\n select,\r\n COLORS,\r\n )\r\n }\r\n return new ColorPicker(select, icons[format])\r\n }\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n if (select.classList.contains('ql-font')) {\r\n fillSelect(select, FONTS)\r\n }\r\n else if (select.classList.contains('ql-header')) {\r\n fillSelect(select, HEADERS)\r\n }\r\n else if (select.classList.contains('ql-size')) {\r\n fillSelect(select, SIZES)\r\n }\r\n }\r\n return new Picker(select)\r\n })\r\n const update = () => {\r\n this.pickers.forEach((picker) => {\r\n picker.update()\r\n })\r\n }\r\n this.quill.on(Quill.events.EDITOR_CHANGE, update)\r\n}\r\n\r\nfunction fillSelect(select, values, defaultValue = false) {\r\n values.forEach((value) => {\r\n const option = document.createElement('option')\r\n if (value === defaultValue) {\r\n option.setAttribute('selected', 'selected')\r\n }\r\n else {\r\n option.setAttribute('value', value)\r\n }\r\n select.appendChild(option)\r\n })\r\n}\r\n"],"names":["isNullOrUndefined"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/toolbar/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\nimport Quill from 'quill'\nimport { isNullOrUndefined } from '../../config/editor.utils'\nimport './better-picker'\n\nconst Delta = Quill.import('delta')\nconst Parchment = Quill.import('parchment')\nconst levels = ['error', 'warn', 'log', 'info'] as const\nlet level = 'warn' as const\n\nfunction debuglogger(method: typeof levels[number], ...args) {\n if (levels.indexOf(method) <= levels.indexOf(level)) {\n console[method](...args) // eslint-disable-line no-console\n }\n}\n\nfunction namespace(ns) {\n return levels.reduce((logger, method) => {\n logger[method] = debuglogger.bind(console, method, ns)\n return logger\n }, {} as Record<typeof levels[number], (...args: any) => void>)\n}\n\nnamespace.level = (newLevel) => {\n level = newLevel\n}\ndebuglogger.level = namespace.level\nconst debug = namespace('quill:toolbar')\n\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\n// let oldClean = Toolbar.DEFAULTS.handlers.clean\n\nclass BetterToolbar extends Toolbar {\n update(range) {\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\n this.controls.forEach((pair) => {\n const [format, input] = pair\n if (input.tagName === 'SELECT') {\n const select = input as HTMLSelectElement\n let option\n if (isNullOrUndefined(range)) {\n option = null\n }\n else if (isNullOrUndefined(formats[format])) {\n option = select.querySelector('option[selected]')\n }\n else if (!Array.isArray(formats[format])) {\n let value = format === 'header' ? formats[format].value : formats[format]\n if (typeof value === 'string') {\n value = value.replace(/\"/g, '\\\\\"')\n }\n option = select.querySelector(`option[value=\"${value}\"]`)\n }\n if (isNullOrUndefined(option)) {\n select.value = '' // TODO make configurable?\n select.selectedIndex = -1\n }\n else {\n option.selected = true\n }\n }\n else if (isNullOrUndefined(range)) {\n input.classList.remove('ql-active')\n }\n else if (input.hasAttribute('value')) {\n // both being null should match (default values)\n // '1' should match with 1 (headers)\n let isActive\n = formats[format] === input.getAttribute('value')\n || (!isNullOrUndefined(formats[format])\n && (formats[format].value === input.getAttribute('value')\n || formats[format].toString() === input.getAttribute('value')))\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\n\n if (!isActive) {\n const checkFormat = formats[format]\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\n isActive = input.getAttribute('value') === 'check'\n }\n }\n\n if (isActive) {\n input.classList.add('ql-active')\n }\n else {\n input.classList.remove('ql-active')\n }\n }\n else {\n if (!isNullOrUndefined(formats[format])) {\n input.classList.add('ql-active')\n }\n else {\n input.classList.remove('ql-active')\n }\n }\n })\n }\n\n attach(input: HTMLElement) {\n let format = Array.from(input.classList).find((className) => {\n return className.indexOf('ql-') === 0\n })\n if (!format) return\n format = format.slice('ql-'.length)\n\n if (input.tagName === 'BUTTON') {\n input.setAttribute('type', 'button')\n }\n\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\n debug.warn('ignoring attaching to nonexistent format', format, input)\n return\n }\n\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\n input.addEventListener(eventName, (e) => {\n let value: boolean | string\n\n if (input.tagName === 'SELECT') {\n const select = input as HTMLSelectElement\n if (select.selectedIndex < 0) return\n const selected = select.options[select.selectedIndex]\n\n if (selected.hasAttribute('selected')) {\n value = false\n }\n else {\n value = selected.value || false\n }\n }\n else {\n const button = input as HTMLButtonElement\n if (button.classList.contains('ql-active')) {\n value = false\n }\n else {\n value = button.value || !button.hasAttribute('value')\n }\n e.preventDefault()\n }\n\n this.quill.focus({ preventScroll: format === 'screenshot' })\n const [range] = this.quill.selection.getRange()\n if (this.handlers[format] != null) {\n // @ts-ignore\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\n return\n }\n this.handlers[format].call(this, value)\n }\n else if (\n // @ts-ignore\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\n ) {\n value = prompt(`Enter ${format}`)\n if (!value) return\n this.quill.updateContents(\n new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert({ [format]: value }),\n Quill.sources.USER,\n )\n }\n else {\n // @ts-ignore\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\n return\n }\n this.quill.format(format, value, Quill.sources.USER)\n }\n\n this.update(range)\n })\n this.controls.push([format, input])\n }\n}\n\nexport default BetterToolbar\nexport * from './toolbar-tip'\n"],"names":["isNullOrUndefined"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/toolbar/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\nimport './better-picker'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst levels = ['error', 'warn', 'log', 'info'] as const\r\nlet level = 'warn' as const\r\n\r\nfunction debuglogger(method: typeof levels[number], ...args) {\r\n if (levels.indexOf(method) <= levels.indexOf(level)) {\r\n console[method](...args) // eslint-disable-line no-console\r\n }\r\n}\r\n\r\nfunction namespace(ns) {\r\n return levels.reduce((logger, method) => {\r\n logger[method] = debuglogger.bind(console, method, ns)\r\n return logger\r\n }, {} as Record<typeof levels[number], (...args: any) => void>)\r\n}\r\n\r\nnamespace.level = (newLevel) => {\r\n level = newLevel\r\n}\r\ndebuglogger.level = namespace.level\r\nconst debug = namespace('quill:toolbar')\r\n\r\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\r\n// let oldClean = Toolbar.DEFAULTS.handlers.clean\r\n\r\nclass BetterToolbar extends Toolbar {\r\n update(range) {\r\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\r\n this.controls.forEach((pair) => {\r\n const [format, input] = pair\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n let option\r\n if (isNullOrUndefined(range)) {\r\n option = null\r\n }\r\n else if (isNullOrUndefined(formats[format])) {\r\n option = select.querySelector('option[selected]')\r\n }\r\n else if (!Array.isArray(formats[format])) {\r\n let value = format === 'header' ? formats[format].value : formats[format]\r\n if (typeof value === 'string') {\r\n value = value.replace(/\"/g, '\\\\\"')\r\n }\r\n option = select.querySelector(`option[value=\"${value}\"]`)\r\n }\r\n if (isNullOrUndefined(option)) {\r\n select.value = '' // TODO make configurable?\r\n select.selectedIndex = -1\r\n }\r\n else {\r\n option.selected = true\r\n }\r\n }\r\n else if (isNullOrUndefined(range)) {\r\n input.classList.remove('ql-active')\r\n }\r\n else if (input.hasAttribute('value')) {\r\n // both being null should match (default values)\r\n // '1' should match with 1 (headers)\r\n let isActive\r\n = formats[format] === input.getAttribute('value')\r\n || (!isNullOrUndefined(formats[format])\r\n && (formats[format].value === input.getAttribute('value')\r\n || formats[format].toString() === input.getAttribute('value')))\r\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\r\n\r\n if (!isActive) {\r\n const checkFormat = formats[format]\r\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\r\n isActive = input.getAttribute('value') === 'check'\r\n }\r\n }\r\n\r\n if (isActive) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n else {\r\n if (!isNullOrUndefined(formats[format])) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n })\r\n }\r\n\r\n attach(input: HTMLElement) {\r\n let format = Array.from(input.classList).find((className) => {\r\n return className.indexOf('ql-') === 0\r\n })\r\n if (!format) return\r\n format = format.slice('ql-'.length)\r\n\r\n if (input.tagName === 'BUTTON') {\r\n input.setAttribute('type', 'button')\r\n }\r\n\r\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\r\n debug.warn('ignoring attaching to nonexistent format', format, input)\r\n return\r\n }\r\n\r\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\r\n input.addEventListener(eventName, (e) => {\r\n let value: boolean | string\r\n\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n if (select.selectedIndex < 0) return\r\n const selected = select.options[select.selectedIndex]\r\n\r\n if (selected.hasAttribute('selected')) {\r\n value = false\r\n }\r\n else {\r\n value = selected.value || false\r\n }\r\n }\r\n else {\r\n const button = input as HTMLButtonElement\r\n if (button.classList.contains('ql-active')) {\r\n value = false\r\n }\r\n else {\r\n value = button.value || !button.hasAttribute('value')\r\n }\r\n e.preventDefault()\r\n }\r\n\r\n this.quill.focus({ preventScroll: format === 'screenshot' })\r\n const [range] = this.quill.selection.getRange()\r\n if (this.handlers[format] != null) {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.handlers[format].call(this, value)\r\n }\r\n else if (\r\n // @ts-ignore\r\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\r\n ) {\r\n value = prompt(`Enter ${format}`)\r\n if (!value) return\r\n this.quill.updateContents(\r\n new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ [format]: value }),\r\n Quill.sources.USER,\r\n )\r\n }\r\n else {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.quill.format(format, value, Quill.sources.USER)\r\n }\r\n\r\n this.update(range)\r\n })\r\n this.controls.push([format, input])\r\n }\r\n}\r\n\r\nexport default BetterToolbar\r\nexport * from './toolbar-tip'\r\n"],"names":["isNullOrUndefined"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"snow.cjs.js","sources":["../../../src/themes/snow.ts"],"sourcesContent":["import type { Module, TypeParchment } from '../core/fluent-editor'\nimport { getListValue, inputFile } from '../config'\nimport FluentEditor from '../core/fluent-editor'\nimport { CustomImageSpec } from '../modules/custom-image/specs/CustomImageSpec'\nimport BetterTable from '../modules/table/better-table'\nimport { FormatPainter } from '../tools/format-painter'\nimport { fullscreenHandler } from '../tools/fullscreen'\nimport { Screenshot } from '../tools/screenshot'\n\nconst SnowTheme = FluentEditor.imports['themes/snow'] as typeof Module\n\nSnowTheme.DEFAULTS = {\n modules: {\n 'i18n': true,\n 'keyboard': {\n bindings: {\n ...BetterTable.keyboardBindings,\n },\n },\n 'toolbar': {\n handlers: {\n ...(SnowTheme.DEFAULTS as Record<string, any>).modules.toolbar.handlers,\n 'formula': function () {\n if (!this.quill.isEnabled()) return\n const mathlive = this.quill.getModule('mathlive')\n if (!mathlive) {\n this.quill.theme.tooltip.edit('formula')\n }\n else {\n mathlive.createDialog()\n }\n },\n 'undo': function () {\n this.quill.history.undo()\n },\n 'redo': function () {\n this.quill.history.redo()\n },\n 'better-table': function () {\n this.quill.getModule('better-table').insertTable(3, 3)\n },\n 'file': function () {\n const accept = this.quill.options?.uploadOption?.fileAccept\n inputFile.call(this, 'file', accept)\n },\n 'image': function () {\n const accept = this.quill.options?.uploadOption?.imageAccept\n inputFile.call(this, 'image', accept)\n },\n 'emoji': function () {},\n 'fullscreen': fullscreenHandler,\n 'list': function (value) {\n const range = this.quill.getSelection()\n const formats = this.quill.getFormat(range)\n const preListValue = Array.isArray(formats.list) ? formats.list[0]?.value : formats.list?.value\n const curListValue = getListValue(value, preListValue)\n // 如果设置list的选区中有表格,判断第一个table-col位置,将表格前的内容设置为list格式\n const lines = this.quill.getLines(range.index, range.length)\n const tableCols = lines.filter(line => line.statics.blotName === 'table-col' && !line.prev)\n if (tableCols.length) {\n let start = range.index\n // 遍历table-col群组,以之获取表格,将表格前选区设置为对应list格式\n tableCols.forEach((item, index) => {\n const table = item.domNode.closest('table.quill-better-table')\n const tableBlot = FluentEditor.find(table) as TypeParchment.Blot\n const tableLength = tableBlot.length()\n const tableStart = this.quill.getIndex(item)\n const tableEnd = tableStart + tableLength\n const beforeTableRangeLength = tableStart - start\n // 在表格前设置列表\n this.quill.setSelection(start, beforeTableRangeLength, FluentEditor.sources.SILENT)\n this.quill.format('list', curListValue, FluentEditor.sources.USER)\n table.parentNode.classList.remove('quill-better-table-selected')\n // 当前表格末尾为下一个选取的开始\n start = tableEnd\n if (index === tableCols.length - 1) {\n // 将最后一个表格之后所有选区内容设置list格式\n this.quill.setSelection(tableEnd, range.index + range.length - tableEnd)\n this.quill.format('list', curListValue, FluentEditor.sources.USER)\n }\n })\n }\n else {\n this.quill.format('list', curListValue, FluentEditor.sources.USER)\n }\n },\n [FormatPainter.toolName]: FormatPainter,\n [Screenshot.toolName]: Screenshot,\n 'lineheight': function (value) {\n this.quill.format('line-height', value)\n },\n 'divider': function () {\n const range = this.quill.getSelection(true)\n this.quill.insertText(range.index, '\\n', FluentEditor.sources.USER)\n this.quill.insertEmbed(range.index + 1, 'divider', true, FluentEditor.sources.USER)\n this.quill.setSelection(range.index + 2, FluentEditor.sources.SILENT)\n },\n },\n },\n 'better-table': {\n operationMenu: {\n color: true,\n },\n },\n 'image': {\n specs: [CustomImageSpec],\n overlay: {\n style: {\n border: '1px dashed rgb(68, 68, 68)',\n },\n },\n align: {\n icons: {\n left: '<i class=\"icon-text-align-left\"></i>',\n center: '<i class=\"icon-text-align-center\"></i>',\n right: '<i class=\"icon-text-align-right\"></i>',\n },\n },\n },\n },\n}\n\nexport default SnowTheme\n"],"names":["FluentEditor","BetterTable","inputFile","fullscreenHandler","getListValue","index","FormatPainter","Screenshot","CustomImageSpec"],"mappings":";;;;;;;;;AASM,MAAA,YAAYA,aAAAA,QAAa,QAAQ,aAAa;AAEpD,UAAU,WAAW;AAAA,EACnB,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,MACV,UAAU;AAAA,QACR,GAAGC,oBAAY;AAAA,MAAA;AAAA,IAEnB;AAAA,IACA,WAAW;AAAA,MACT,UAAU;AAAA,QACR,GAAI,UAAU,SAAiC,QAAQ,QAAQ;AAAA,QAC/D,WAAW,WAAY;AACrB,cAAI,CAAC,KAAK,MAAM,YAAa;AAC7B,gBAAM,WAAW,KAAK,MAAM,UAAU,UAAU;AAChD,cAAI,CAAC,UAAU;AACb,iBAAK,MAAM,MAAM,QAAQ,KAAK,SAAS;AAAA,UAAA,OAEpC;AACH,qBAAS,aAAa;AAAA,UAAA;AAAA,QAE1B;AAAA,QACA,QAAQ,WAAY;AACb,eAAA,MAAM,QAAQ,KAAK;AAAA,QAC1B;AAAA,QACA,QAAQ,WAAY;AACb,eAAA,MAAM,QAAQ,KAAK;AAAA,QAC1B;AAAA,QACA,gBAAgB,WAAY;AAC1B,eAAK,MAAM,UAAU,cAAc,EAAE,YAAY,GAAG,CAAC;AAAA,QACvD;AAAA,QACA,QAAQ,WAAY;;AAClB,gBAAM,UAAS,gBAAK,MAAM,YAAX,mBAAoB,iBAApB,mBAAkC;AACvCC,gBAAAA,UAAA,KAAK,MAAM,QAAQ,MAAM;AAAA,QACrC;AAAA,QACA,SAAS,WAAY;;AACnB,gBAAM,UAAS,gBAAK,MAAM,YAAX,mBAAoB,iBAApB,mBAAkC;AACvCA,gBAAAA,UAAA,KAAK,MAAM,SAAS,MAAM;AAAA,QACtC;AAAA,QACA,SAAS,WAAY;AAAA,QAAC;AAAA,QACtB,cAAcC,WAAA;AAAA,QACd,QAAQ,SAAU,OAAO;;AACjB,gBAAA,QAAQ,KAAK,MAAM,aAAa;AACtC,gBAAM,UAAU,KAAK,MAAM,UAAU,KAAK;AAC1C,gBAAM,eAAe,MAAM,QAAQ,QAAQ,IAAI,KAAI,aAAQ,KAAK,CAAC,MAAd,mBAAiB,SAAQ,aAAQ,SAAR,mBAAc;AACpF,gBAAA,eAAeC,MAAAA,aAAa,OAAO,YAAY;AAErD,gBAAM,QAAQ,KAAK,MAAM,SAAS,MAAM,OAAO,MAAM,MAAM;AACrD,gBAAA,YAAY,MAAM,OAAO,CAAQ,SAAA,KAAK,QAAQ,aAAa,eAAe,CAAC,KAAK,IAAI;AAC1F,cAAI,UAAU,QAAQ;AACpB,gBAAI,QAAQ,MAAM;AAER,sBAAA,QAAQ,CAAC,MAAMC,WAAU;AACjC,oBAAM,QAAQ,KAAK,QAAQ,QAAQ,0BAA0B;AACvD,oBAAA,YAAYL,aAAAA,QAAa,KAAK,KAAK;AACnC,oBAAA,cAAc,UAAU,OAAO;AACrC,oBAAM,aAAa,KAAK,MAAM,SAAS,IAAI;AAC3C,oBAAM,WAAW,aAAa;AAC9B,oBAAM,yBAAyB,aAAa;AAE5C,mBAAK,MAAM,aAAa,OAAO,wBAAwBA,aAAA,QAAa,QAAQ,MAAM;AAClF,mBAAK,MAAM,OAAO,QAAQ,cAAcA,aAAA,QAAa,QAAQ,IAAI;AAC3D,oBAAA,WAAW,UAAU,OAAO,6BAA6B;AAEvD,sBAAA;AACJ,kBAAAK,WAAU,UAAU,SAAS,GAAG;AAElC,qBAAK,MAAM,aAAa,UAAU,MAAM,QAAQ,MAAM,SAAS,QAAQ;AACvE,qBAAK,MAAM,OAAO,QAAQ,cAAcL,aAAA,QAAa,QAAQ,IAAI;AAAA,cAAA;AAAA,YACnE,CACD;AAAA,UAAA,OAEE;AACH,iBAAK,MAAM,OAAO,QAAQ,cAAcA,aAAA,QAAa,QAAQ,IAAI;AAAA,UAAA;AAAA,QAErE;AAAA,QACA,CAACM,cAAAA,cAAc,QAAQ,GAAGA,cAAA;AAAA,QAC1B,CAACC,WAAAA,WAAW,QAAQ,GAAGA,WAAA;AAAA,QACvB,cAAc,SAAU,OAAO;AACxB,eAAA,MAAM,OAAO,eAAe,KAAK;AAAA,QACxC;AAAA,QACA,WAAW,WAAY;AACrB,gBAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AAC1C,eAAK,MAAM,WAAW,MAAM,OAAO,MAAMP,aAAAA,QAAa,QAAQ,IAAI;AAC7D,eAAA,MAAM,YAAY,MAAM,QAAQ,GAAG,WAAW,MAAMA,qBAAa,QAAQ,IAAI;AAClF,eAAK,MAAM,aAAa,MAAM,QAAQ,GAAGA,aAAAA,QAAa,QAAQ,MAAM;AAAA,QAAA;AAAA,MACtE;AAAA,IAEJ;AAAA,IACA,gBAAgB;AAAA,MACd,eAAe;AAAA,QACb,OAAO;AAAA,MAAA;AAAA,IAEX;AAAA,IACA,SAAS;AAAA,MACP,OAAO,CAACQ,gBAAAA,eAAe;AAAA,MACvB,SAAS;AAAA,QACP,OAAO;AAAA,UACL,QAAQ;AAAA,QAAA;AAAA,MAEZ;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEJ;;"}
1
+ {"version":3,"file":"snow.cjs.js","sources":["../../../src/themes/snow.ts"],"sourcesContent":["import type { Module, TypeParchment } from '../core/fluent-editor'\r\nimport { getListValue, inputFile } from '../config'\r\nimport FluentEditor from '../core/fluent-editor'\r\nimport { CustomImageSpec } from '../modules/custom-image/specs/CustomImageSpec'\r\nimport BetterTable from '../modules/table/better-table'\r\nimport { FormatPainter } from '../tools/format-painter'\r\nimport { fullscreenHandler } from '../tools/fullscreen'\r\nimport { Screenshot } from '../tools/screenshot'\r\n\r\nconst SnowTheme = FluentEditor.imports['themes/snow'] as typeof Module\r\n\r\nSnowTheme.DEFAULTS = {\r\n modules: {\r\n 'i18n': true,\r\n 'keyboard': {\r\n bindings: {\r\n ...BetterTable.keyboardBindings,\r\n },\r\n },\r\n 'toolbar': {\r\n handlers: {\r\n ...(SnowTheme.DEFAULTS as Record<string, any>).modules.toolbar.handlers,\r\n 'formula': function () {\r\n if (!this.quill.isEnabled()) return\r\n const mathlive = this.quill.getModule('mathlive')\r\n if (!mathlive) {\r\n this.quill.theme.tooltip.edit('formula')\r\n }\r\n else {\r\n mathlive.createDialog()\r\n }\r\n },\r\n 'undo': function () {\r\n this.quill.history.undo()\r\n },\r\n 'redo': function () {\r\n this.quill.history.redo()\r\n },\r\n 'better-table': function () {\r\n this.quill.getModule('better-table').insertTable(3, 3)\r\n },\r\n 'file': function () {\r\n const accept = this.quill.options?.uploadOption?.fileAccept\r\n inputFile.call(this, 'file', accept)\r\n },\r\n 'image': function () {\r\n const accept = this.quill.options?.uploadOption?.imageAccept\r\n inputFile.call(this, 'image', accept)\r\n },\r\n 'emoji': function () {},\r\n 'fullscreen': fullscreenHandler,\r\n 'list': function (value) {\r\n const range = this.quill.getSelection()\r\n const formats = this.quill.getFormat(range)\r\n const preListValue = Array.isArray(formats.list) ? formats.list[0]?.value : formats.list?.value\r\n const curListValue = getListValue(value, preListValue)\r\n // 如果设置list的选区中有表格,判断第一个table-col位置,将表格前的内容设置为list格式\r\n const lines = this.quill.getLines(range.index, range.length)\r\n const tableCols = lines.filter(line => line.statics.blotName === 'table-col' && !line.prev)\r\n if (tableCols.length) {\r\n let start = range.index\r\n // 遍历table-col群组,以之获取表格,将表格前选区设置为对应list格式\r\n tableCols.forEach((item, index) => {\r\n const table = item.domNode.closest('table.quill-better-table')\r\n const tableBlot = FluentEditor.find(table) as TypeParchment.Blot\r\n const tableLength = tableBlot.length()\r\n const tableStart = this.quill.getIndex(item)\r\n const tableEnd = tableStart + tableLength\r\n const beforeTableRangeLength = tableStart - start\r\n // 在表格前设置列表\r\n this.quill.setSelection(start, beforeTableRangeLength, FluentEditor.sources.SILENT)\r\n this.quill.format('list', curListValue, FluentEditor.sources.USER)\r\n table.parentNode.classList.remove('quill-better-table-selected')\r\n // 当前表格末尾为下一个选取的开始\r\n start = tableEnd\r\n if (index === tableCols.length - 1) {\r\n // 将最后一个表格之后所有选区内容设置list格式\r\n this.quill.setSelection(tableEnd, range.index + range.length - tableEnd)\r\n this.quill.format('list', curListValue, FluentEditor.sources.USER)\r\n }\r\n })\r\n }\r\n else {\r\n this.quill.format('list', curListValue, FluentEditor.sources.USER)\r\n }\r\n },\r\n [FormatPainter.toolName]: FormatPainter,\r\n [Screenshot.toolName]: Screenshot,\r\n 'lineheight': function (value) {\r\n this.quill.format('line-height', value)\r\n },\r\n 'divider': function () {\r\n const range = this.quill.getSelection(true)\r\n this.quill.insertText(range.index, '\\n', FluentEditor.sources.USER)\r\n this.quill.insertEmbed(range.index + 1, 'divider', true, FluentEditor.sources.USER)\r\n this.quill.setSelection(range.index + 2, FluentEditor.sources.SILENT)\r\n },\r\n },\r\n },\r\n 'better-table': {\r\n operationMenu: {\r\n color: true,\r\n },\r\n },\r\n 'image': {\r\n specs: [CustomImageSpec],\r\n overlay: {\r\n style: {\r\n border: '1px dashed rgb(68, 68, 68)',\r\n },\r\n },\r\n align: {\r\n icons: {\r\n left: '<i class=\"icon-text-align-left\"></i>',\r\n center: '<i class=\"icon-text-align-center\"></i>',\r\n right: '<i class=\"icon-text-align-right\"></i>',\r\n },\r\n },\r\n },\r\n },\r\n}\r\n\r\nexport default SnowTheme\r\n"],"names":["FluentEditor","BetterTable","inputFile","fullscreenHandler","getListValue","index","FormatPainter","Screenshot","CustomImageSpec"],"mappings":";;;;;;;;;AASM,MAAA,YAAYA,aAAAA,QAAa,QAAQ,aAAa;AAEpD,UAAU,WAAW;AAAA,EACnB,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,MACV,UAAU;AAAA,QACR,GAAGC,oBAAY;AAAA,MAAA;AAAA,IAEnB;AAAA,IACA,WAAW;AAAA,MACT,UAAU;AAAA,QACR,GAAI,UAAU,SAAiC,QAAQ,QAAQ;AAAA,QAC/D,WAAW,WAAY;AACrB,cAAI,CAAC,KAAK,MAAM,YAAa;AAC7B,gBAAM,WAAW,KAAK,MAAM,UAAU,UAAU;AAChD,cAAI,CAAC,UAAU;AACb,iBAAK,MAAM,MAAM,QAAQ,KAAK,SAAS;AAAA,UAAA,OAEpC;AACH,qBAAS,aAAa;AAAA,UAAA;AAAA,QAE1B;AAAA,QACA,QAAQ,WAAY;AACb,eAAA,MAAM,QAAQ,KAAK;AAAA,QAC1B;AAAA,QACA,QAAQ,WAAY;AACb,eAAA,MAAM,QAAQ,KAAK;AAAA,QAC1B;AAAA,QACA,gBAAgB,WAAY;AAC1B,eAAK,MAAM,UAAU,cAAc,EAAE,YAAY,GAAG,CAAC;AAAA,QACvD;AAAA,QACA,QAAQ,WAAY;;AAClB,gBAAM,UAAS,gBAAK,MAAM,YAAX,mBAAoB,iBAApB,mBAAkC;AACvCC,gBAAAA,UAAA,KAAK,MAAM,QAAQ,MAAM;AAAA,QACrC;AAAA,QACA,SAAS,WAAY;;AACnB,gBAAM,UAAS,gBAAK,MAAM,YAAX,mBAAoB,iBAApB,mBAAkC;AACvCA,gBAAAA,UAAA,KAAK,MAAM,SAAS,MAAM;AAAA,QACtC;AAAA,QACA,SAAS,WAAY;AAAA,QAAC;AAAA,QACtB,cAAcC,WAAA;AAAA,QACd,QAAQ,SAAU,OAAO;;AACjB,gBAAA,QAAQ,KAAK,MAAM,aAAa;AACtC,gBAAM,UAAU,KAAK,MAAM,UAAU,KAAK;AAC1C,gBAAM,eAAe,MAAM,QAAQ,QAAQ,IAAI,KAAI,aAAQ,KAAK,CAAC,MAAd,mBAAiB,SAAQ,aAAQ,SAAR,mBAAc;AACpF,gBAAA,eAAeC,MAAAA,aAAa,OAAO,YAAY;AAErD,gBAAM,QAAQ,KAAK,MAAM,SAAS,MAAM,OAAO,MAAM,MAAM;AACrD,gBAAA,YAAY,MAAM,OAAO,CAAQ,SAAA,KAAK,QAAQ,aAAa,eAAe,CAAC,KAAK,IAAI;AAC1F,cAAI,UAAU,QAAQ;AACpB,gBAAI,QAAQ,MAAM;AAER,sBAAA,QAAQ,CAAC,MAAMC,WAAU;AACjC,oBAAM,QAAQ,KAAK,QAAQ,QAAQ,0BAA0B;AACvD,oBAAA,YAAYL,aAAAA,QAAa,KAAK,KAAK;AACnC,oBAAA,cAAc,UAAU,OAAO;AACrC,oBAAM,aAAa,KAAK,MAAM,SAAS,IAAI;AAC3C,oBAAM,WAAW,aAAa;AAC9B,oBAAM,yBAAyB,aAAa;AAE5C,mBAAK,MAAM,aAAa,OAAO,wBAAwBA,aAAA,QAAa,QAAQ,MAAM;AAClF,mBAAK,MAAM,OAAO,QAAQ,cAAcA,aAAA,QAAa,QAAQ,IAAI;AAC3D,oBAAA,WAAW,UAAU,OAAO,6BAA6B;AAEvD,sBAAA;AACJ,kBAAAK,WAAU,UAAU,SAAS,GAAG;AAElC,qBAAK,MAAM,aAAa,UAAU,MAAM,QAAQ,MAAM,SAAS,QAAQ;AACvE,qBAAK,MAAM,OAAO,QAAQ,cAAcL,aAAA,QAAa,QAAQ,IAAI;AAAA,cAAA;AAAA,YACnE,CACD;AAAA,UAAA,OAEE;AACH,iBAAK,MAAM,OAAO,QAAQ,cAAcA,aAAA,QAAa,QAAQ,IAAI;AAAA,UAAA;AAAA,QAErE;AAAA,QACA,CAACM,cAAAA,cAAc,QAAQ,GAAGA,cAAA;AAAA,QAC1B,CAACC,WAAAA,WAAW,QAAQ,GAAGA,WAAA;AAAA,QACvB,cAAc,SAAU,OAAO;AACxB,eAAA,MAAM,OAAO,eAAe,KAAK;AAAA,QACxC;AAAA,QACA,WAAW,WAAY;AACrB,gBAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AAC1C,eAAK,MAAM,WAAW,MAAM,OAAO,MAAMP,aAAAA,QAAa,QAAQ,IAAI;AAC7D,eAAA,MAAM,YAAY,MAAM,QAAQ,GAAG,WAAW,MAAMA,qBAAa,QAAQ,IAAI;AAClF,eAAK,MAAM,aAAa,MAAM,QAAQ,GAAGA,aAAAA,QAAa,QAAQ,MAAM;AAAA,QAAA;AAAA,MACtE;AAAA,IAEJ;AAAA,IACA,gBAAgB;AAAA,MACd,eAAe;AAAA,QACb,OAAO;AAAA,MAAA;AAAA,IAEX;AAAA,IACA,SAAS;AAAA,MACP,OAAO,CAACQ,gBAAAA,eAAe;AAAA,MACvB,SAAS;AAAA,QACP,OAAO;AAAA,UACL,QAAQ;AAAA,QAAA;AAAA,MAEZ;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.cjs.js","sources":["../../../src/tools/screenshot.ts"],"sourcesContent":["import type html2canvas from 'html2canvas'\nimport type { Options as Html2CanvasOptions } from 'html2canvas'\nimport type Toolbar from 'quill/modules/toolbar'\nimport Quill from 'quill'\nimport { imgToBase64 } from '../utils/image'\nimport { lockScroll } from '../utils/scroll-lock'\n\nconst Delta = Quill.import('delta')\n\nexport type ScreenShotOptions = Partial<Html2CanvasOptions> & {\n Html2Canvas: typeof html2canvas\n beforeCreateCanvas: () => void | Promise<void>\n beforeCreateImage: (canvas: HTMLCanvasElement) => HTMLCanvasElement | string | Promise<HTMLCanvasElement | string>\n}\ninterface ScreenShotOptionsInQuill {\n quill: {\n options: {\n screenshot: Partial<ScreenShotOptions>\n }\n }\n}\n\nfunction resolveOptions(options: Partial<ScreenShotOptions>) {\n return Object.assign({\n // @ts-ignore\n Html2Canvas: window.Html2Canvas,\n useCORS: true,\n scale: 1,\n foreignObjectRendering: true,\n beforeCreateImage: undefined,\n beforeCreateCanvas: undefined,\n }, options)\n}\n\nfunction init() {\n const maskExits = document.querySelectorAll('.ql-screenshot-mask')\n if (maskExits) {\n maskExits.forEach(item => item && item.remove())\n }\n // 创建截图图层\n const wrapper = document.createElement('div')\n wrapper.classList.add('ql-screenshot-wrapper')\n const mask = document.createElement('div')\n mask.className = 'ql-screenshot-mask'\n const cutter = document.createElement('div')\n cutter.className = 'ql-screenshot-cutter'\n const coordinate = document.createElement('p')\n coordinate.className = 'ql-screenshot-coordinate'\n cutter.appendChild(coordinate)\n wrapper.appendChild(mask)\n wrapper.appendChild(cutter)\n document.body.appendChild(wrapper)\n return { wrapper, mask, cutter, coordinate }\n}\n\nfunction findParentFixed(dom: HTMLElement) {\n if (dom.tagName === 'BODY') return false\n if (['fixed', 'sticky'].includes(dom.parentElement.style.position)) return true\n return findParentFixed(dom.parentElement)\n}\nasync function renderImage(\n Html2Canvas: typeof html2canvas,\n html2canvasOptions: Partial<Html2CanvasOptions>,\n rect: DOMRect,\n options?: Omit<ScreenShotOptions, 'Html2Canvas' | keyof Html2CanvasOptions>,\n) {\n if (options && options.beforeCreateCanvas) {\n await options.beforeCreateCanvas()\n }\n const canvas: CanvasImageSource = await Html2Canvas(document.body, {\n ...html2canvasOptions,\n onclone: async (doc: Document, el: HTMLElement) => {\n // find all fixed or sticky dom\n const fixedDom = Array.from(doc.querySelectorAll('*[style*=\"position: fixed\"]')) as HTMLElement[]\n const stickyDom = Array.from(doc.querySelectorAll('*[style*=\"position: sticky\"]')) as HTMLElement[]\n const fixedDomList = new Set([...fixedDom, ...stickyDom])\n for (const dom of fixedDomList) {\n // if parent dom already has fixed or sticky style\n // means that transform will be settle. skip\n if (findParentFixed(dom)) continue\n // use transform move to correct position\n let x = 0\n let y = 0\n if (dom.style.top !== 'auto') {\n y = window.scrollY\n }\n if (dom.style.left !== 'auto') {\n x = window.scrollX\n }\n if (x !== 0 || y !== 0) {\n dom.style.transform = `translate(${x}px, ${y}px)`\n }\n }\n\n const imgs = doc.querySelectorAll('img')\n const promises = Array.from(imgs).map(async (img) => {\n img.src = await imgToBase64(img.src)\n })\n await Promise.all(promises)\n html2canvasOptions.onclone && await html2canvasOptions.onclone(doc, el)\n },\n })\n // 当前canvas为body全局截图,从当前截图中截取想要的部分重新绘制转成base64插入富文本\n let cropCanvas: HTMLCanvasElement | string = document.createElement('canvas')\n cropCanvas.width = rect.width\n cropCanvas.height = rect.height\n const cropCanvasCtx = cropCanvas.getContext('2d')\n cropCanvasCtx.drawImage(\n canvas,\n rect.x + window.scrollX,\n rect.y + window.scrollY,\n rect.width,\n rect.height,\n 0,\n 0,\n rect.width,\n rect.height,\n )\n if (options && options.beforeCreateImage) {\n cropCanvas = await options.beforeCreateImage(cropCanvas)\n }\n return typeof cropCanvas === 'string' ? cropCanvas : cropCanvas.toDataURL()\n}\n\nexport function Screenshot(this: Toolbar & ScreenShotOptionsInQuill) {\n this.quill.options.screenshot = resolveOptions(this.quill.options.screenshot)\n const options = this.quill.options.screenshot\n // @ts-ignore\n const { Html2Canvas, beforeCreateImage, beforeCreateCanvas, ...html2CanvasOptions } = options\n if (!Html2Canvas) {\n throw new Error('ScreenShot module requires html2canvas. Please include the library on the page before FluentEditor.')\n }\n const range = this.quill.getSelection()\n const { wrapper, mask, cutter, coordinate } = init()\n const status: {\n leftClickLockFlag: boolean\n start?: {\n x: number\n y: number\n }\n } = {\n leftClickLockFlag: false,\n start: undefined,\n }\n const cleanLock = lockScroll()\n\n const removeContextmenu = (event: Event) => {\n event.preventDefault()\n wrapper.remove()\n cleanLock()\n document.removeEventListener('contextmenu', removeContextmenu)\n }\n const afterShotCtrl = async (event: MouseEvent) => {\n document.removeEventListener('mousedown', toggleRect)\n const cutterRect = cutter.getBoundingClientRect()\n const target = event.target as HTMLElement\n wrapper.remove()\n cleanLock()\n if (target && target.className === 'ql-screenshot-confirm') {\n const image = await renderImage(Html2Canvas, html2CanvasOptions, cutterRect, { beforeCreateCanvas, beforeCreateImage })\n\n const delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert({ image })\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\n }\n status.start = undefined\n }\n const drawRect = (event: MouseEvent) => {\n // 通过鼠标移动描绘截图图层\n const startX = status.start.x\n const startY = status.start.y\n const endX = event.clientX\n const endY = event.clientY\n const width = Math.abs(endX - startX)\n const height = Math.abs(endY - startY)\n const top = startY < endY ? startY : endY\n const left = startX < endX ? startX : endX\n const bottom = window.innerHeight - height - top\n const right = window.innerWidth - width - left\n\n const maskPath = `\n linear-gradient(to top, #fff, #fff) top / 100% ${top}px,\n linear-gradient(to bottom, #fff, #fff) bottom /100% ${bottom}px,\n linear-gradient(to left, #fff, #fff) left / ${left}px 100%,\n linear-gradient(to right, #fff, #fff) right / ${right}px 100%\n `\n Object.assign(cutter.style, {\n width: `${width}px`,\n height: `${height}px`,\n left: `${left}px`,\n top: `${top}px`,\n })\n Object.assign(mask.style, {\n 'mask': maskPath,\n '-webkit-mask-repeat': 'no-repeat',\n })\n coordinate.textContent = `${width}, ${height}`\n }\n const toggleRect = (event: MouseEvent) => {\n // 右键取消截图操作\n if (event.button === 2) {\n document.removeEventListener('mousemove', drawRect)\n document.removeEventListener('mousedown', toggleRect)\n document.addEventListener('contextmenu', removeContextmenu)\n return\n }\n if (!status.leftClickLockFlag) {\n if (status.start) {\n // 如果有起点,则当前触发坐标为终点,移除监听事件并添加确认和取消按钮\n document.removeEventListener('mousemove', drawRect)\n const doneBtn = document.createElement('div')\n doneBtn.innerHTML = `<div class=\"ql-screenshot-confirm\"></div><div class=\"ql-screenshot-cancel\"></div>`\n doneBtn.className = 'ql-screenshot-done'\n doneBtn.addEventListener('click', afterShotCtrl)\n coordinate.remove()\n cutter.appendChild(doneBtn)\n status.leftClickLockFlag = true\n }\n else {\n // 无起点则设置起点坐标,监听鼠标移动\n status.start = { x: event.clientX, y: event.clientY }\n document.addEventListener('mousemove', drawRect)\n }\n }\n }\n document.addEventListener('mousedown', toggleRect)\n}\nScreenshot.toolName = 'screenshot'\n"],"names":["imgToBase64","lockScroll","image"],"mappings":"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"}
1
+ {"version":3,"file":"screenshot.cjs.js","sources":["../../../src/tools/screenshot.ts"],"sourcesContent":["import type html2canvas from 'html2canvas'\r\nimport type { Options as Html2CanvasOptions } from 'html2canvas'\r\nimport type Toolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { imgToBase64 } from '../utils/image'\r\nimport { lockScroll } from '../utils/scroll-lock'\r\n\r\nconst Delta = Quill.import('delta')\r\n\r\nexport type ScreenShotOptions = Partial<Html2CanvasOptions> & {\r\n Html2Canvas: typeof html2canvas\r\n beforeCreateCanvas: () => void | Promise<void>\r\n beforeCreateImage: (canvas: HTMLCanvasElement) => HTMLCanvasElement | string | Promise<HTMLCanvasElement | string>\r\n}\r\ninterface ScreenShotOptionsInQuill {\r\n quill: {\r\n options: {\r\n screenshot: Partial<ScreenShotOptions>\r\n }\r\n }\r\n}\r\n\r\nfunction resolveOptions(options: Partial<ScreenShotOptions>) {\r\n return Object.assign({\r\n // @ts-ignore\r\n Html2Canvas: window.Html2Canvas,\r\n useCORS: true,\r\n scale: 1,\r\n foreignObjectRendering: true,\r\n beforeCreateImage: undefined,\r\n beforeCreateCanvas: undefined,\r\n }, options)\r\n}\r\n\r\nfunction init() {\r\n const maskExits = document.querySelectorAll('.ql-screenshot-mask')\r\n if (maskExits) {\r\n maskExits.forEach(item => item && item.remove())\r\n }\r\n // 创建截图图层\r\n const wrapper = document.createElement('div')\r\n wrapper.classList.add('ql-screenshot-wrapper')\r\n const mask = document.createElement('div')\r\n mask.className = 'ql-screenshot-mask'\r\n const cutter = document.createElement('div')\r\n cutter.className = 'ql-screenshot-cutter'\r\n const coordinate = document.createElement('p')\r\n coordinate.className = 'ql-screenshot-coordinate'\r\n cutter.appendChild(coordinate)\r\n wrapper.appendChild(mask)\r\n wrapper.appendChild(cutter)\r\n document.body.appendChild(wrapper)\r\n return { wrapper, mask, cutter, coordinate }\r\n}\r\n\r\nfunction findParentFixed(dom: HTMLElement) {\r\n if (dom.tagName === 'BODY') return false\r\n if (['fixed', 'sticky'].includes(dom.parentElement.style.position)) return true\r\n return findParentFixed(dom.parentElement)\r\n}\r\nasync function renderImage(\r\n Html2Canvas: typeof html2canvas,\r\n html2canvasOptions: Partial<Html2CanvasOptions>,\r\n rect: DOMRect,\r\n options?: Omit<ScreenShotOptions, 'Html2Canvas' | keyof Html2CanvasOptions>,\r\n) {\r\n if (options && options.beforeCreateCanvas) {\r\n await options.beforeCreateCanvas()\r\n }\r\n const canvas: CanvasImageSource = await Html2Canvas(document.body, {\r\n ...html2canvasOptions,\r\n onclone: async (doc: Document, el: HTMLElement) => {\r\n // find all fixed or sticky dom\r\n const fixedDom = Array.from(doc.querySelectorAll('*[style*=\"position: fixed\"]')) as HTMLElement[]\r\n const stickyDom = Array.from(doc.querySelectorAll('*[style*=\"position: sticky\"]')) as HTMLElement[]\r\n const fixedDomList = new Set([...fixedDom, ...stickyDom])\r\n for (const dom of fixedDomList) {\r\n // if parent dom already has fixed or sticky style\r\n // means that transform will be settle. skip\r\n if (findParentFixed(dom)) continue\r\n // use transform move to correct position\r\n let x = 0\r\n let y = 0\r\n if (dom.style.top !== 'auto') {\r\n y = window.scrollY\r\n }\r\n if (dom.style.left !== 'auto') {\r\n x = window.scrollX\r\n }\r\n if (x !== 0 || y !== 0) {\r\n dom.style.transform = `translate(${x}px, ${y}px)`\r\n }\r\n }\r\n\r\n const imgs = doc.querySelectorAll('img')\r\n const promises = Array.from(imgs).map(async (img) => {\r\n img.src = await imgToBase64(img.src)\r\n })\r\n await Promise.all(promises)\r\n html2canvasOptions.onclone && await html2canvasOptions.onclone(doc, el)\r\n },\r\n })\r\n // 当前canvas为body全局截图,从当前截图中截取想要的部分重新绘制转成base64插入富文本\r\n let cropCanvas: HTMLCanvasElement | string = document.createElement('canvas')\r\n cropCanvas.width = rect.width\r\n cropCanvas.height = rect.height\r\n const cropCanvasCtx = cropCanvas.getContext('2d')\r\n cropCanvasCtx.drawImage(\r\n canvas,\r\n rect.x + window.scrollX,\r\n rect.y + window.scrollY,\r\n rect.width,\r\n rect.height,\r\n 0,\r\n 0,\r\n rect.width,\r\n rect.height,\r\n )\r\n if (options && options.beforeCreateImage) {\r\n cropCanvas = await options.beforeCreateImage(cropCanvas)\r\n }\r\n return typeof cropCanvas === 'string' ? cropCanvas : cropCanvas.toDataURL()\r\n}\r\n\r\nexport function Screenshot(this: Toolbar & ScreenShotOptionsInQuill) {\r\n this.quill.options.screenshot = resolveOptions(this.quill.options.screenshot)\r\n const options = this.quill.options.screenshot\r\n // @ts-ignore\r\n const { Html2Canvas, beforeCreateImage, beforeCreateCanvas, ...html2CanvasOptions } = options\r\n if (!Html2Canvas) {\r\n throw new Error('ScreenShot module requires html2canvas. Please include the library on the page before FluentEditor.')\r\n }\r\n const range = this.quill.getSelection()\r\n const { wrapper, mask, cutter, coordinate } = init()\r\n const status: {\r\n leftClickLockFlag: boolean\r\n start?: {\r\n x: number\r\n y: number\r\n }\r\n } = {\r\n leftClickLockFlag: false,\r\n start: undefined,\r\n }\r\n const cleanLock = lockScroll()\r\n\r\n const removeContextmenu = (event: Event) => {\r\n event.preventDefault()\r\n wrapper.remove()\r\n cleanLock()\r\n document.removeEventListener('contextmenu', removeContextmenu)\r\n }\r\n const afterShotCtrl = async (event: MouseEvent) => {\r\n document.removeEventListener('mousedown', toggleRect)\r\n const cutterRect = cutter.getBoundingClientRect()\r\n const target = event.target as HTMLElement\r\n wrapper.remove()\r\n cleanLock()\r\n if (target && target.className === 'ql-screenshot-confirm') {\r\n const image = await renderImage(Html2Canvas, html2CanvasOptions, cutterRect, { beforeCreateCanvas, beforeCreateImage })\r\n\r\n const delta = new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ image })\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\r\n }\r\n status.start = undefined\r\n }\r\n const drawRect = (event: MouseEvent) => {\r\n // 通过鼠标移动描绘截图图层\r\n const startX = status.start.x\r\n const startY = status.start.y\r\n const endX = event.clientX\r\n const endY = event.clientY\r\n const width = Math.abs(endX - startX)\r\n const height = Math.abs(endY - startY)\r\n const top = startY < endY ? startY : endY\r\n const left = startX < endX ? startX : endX\r\n const bottom = window.innerHeight - height - top\r\n const right = window.innerWidth - width - left\r\n\r\n const maskPath = `\r\n linear-gradient(to top, #fff, #fff) top / 100% ${top}px,\r\n linear-gradient(to bottom, #fff, #fff) bottom /100% ${bottom}px,\r\n linear-gradient(to left, #fff, #fff) left / ${left}px 100%,\r\n linear-gradient(to right, #fff, #fff) right / ${right}px 100%\r\n `\r\n Object.assign(cutter.style, {\r\n width: `${width}px`,\r\n height: `${height}px`,\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n })\r\n Object.assign(mask.style, {\r\n 'mask': maskPath,\r\n '-webkit-mask-repeat': 'no-repeat',\r\n })\r\n coordinate.textContent = `${width}, ${height}`\r\n }\r\n const toggleRect = (event: MouseEvent) => {\r\n // 右键取消截图操作\r\n if (event.button === 2) {\r\n document.removeEventListener('mousemove', drawRect)\r\n document.removeEventListener('mousedown', toggleRect)\r\n document.addEventListener('contextmenu', removeContextmenu)\r\n return\r\n }\r\n if (!status.leftClickLockFlag) {\r\n if (status.start) {\r\n // 如果有起点,则当前触发坐标为终点,移除监听事件并添加确认和取消按钮\r\n document.removeEventListener('mousemove', drawRect)\r\n const doneBtn = document.createElement('div')\r\n doneBtn.innerHTML = `<div class=\"ql-screenshot-confirm\"></div><div class=\"ql-screenshot-cancel\"></div>`\r\n doneBtn.className = 'ql-screenshot-done'\r\n doneBtn.addEventListener('click', afterShotCtrl)\r\n coordinate.remove()\r\n cutter.appendChild(doneBtn)\r\n status.leftClickLockFlag = true\r\n }\r\n else {\r\n // 无起点则设置起点坐标,监听鼠标移动\r\n status.start = { x: event.clientX, y: event.clientY }\r\n document.addEventListener('mousemove', drawRect)\r\n }\r\n }\r\n }\r\n document.addEventListener('mousedown', toggleRect)\r\n}\r\nScreenshot.toolName = 'screenshot'\r\n"],"names":["imgToBase64","lockScroll","image"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"icons.cjs.js","sources":["../../../src/ui/icons.ts"],"sourcesContent":["import FluentEditor from '../core/fluent-editor'\nimport {\n ALIGN_CENTER_ICON,\n ALIGN_JUSTIFY_ICON,\n ALIGN_LEFT_ICON,\n ALIGN_RIGHT_ICON,\n BACKGROUND_COLOR_ICON,\n BLOCKQUOTE_ICON,\n BOLD_ICON,\n CLEAN_ICON,\n CODE_BLOCK_ICON,\n CODE_ICON,\n COLOR_ICON,\n DIVIDER_ICON,\n EMOJI_ICON,\n FILE_ICON,\n FORMAT_PAINTER_ICON,\n FULLSCREEN_EXIT_ICON,\n FULLSCREEN_ICON,\n GLOBAL_LINK_ICON,\n HELP_ICON,\n IMAGE_ICON,\n ITALIC_ICON,\n LINK_ICON,\n LIST_CHECK_ICON,\n LIST_ORDERED_ICON,\n LIST_UNORDERED_ICON,\n REDO_ICON,\n SCREENSHOT_ICON,\n STRIKE_ICON,\n TABLE_ICON,\n TRIANGLE_DOWN_ICON,\n UNDERLINE_ICON,\n UNDO_ICON,\n} from './icons.config'\n\nconst ICONS_CONFIG: { [key: string]: any } = {\n 'undo': UNDO_ICON,\n 'redo': REDO_ICON,\n 'clean': CLEAN_ICON,\n\n 'bold': BOLD_ICON,\n 'italic': ITALIC_ICON,\n 'underline': UNDERLINE_ICON,\n 'strike': STRIKE_ICON,\n\n 'font': '',\n 'size': '',\n\n 'color': `<span class=\"ql-color-inner\">\n ${COLOR_ICON}\n ${TRIANGLE_DOWN_ICON}\n <span class=\"current-color-line\"></span>\n </span>`,\n 'background': `<span class=\"ql-color-inner\">\n ${BACKGROUND_COLOR_ICON}\n ${TRIANGLE_DOWN_ICON}\n <span class=\"current-color-line color-line-background\"></span>\n </span>`,\n\n 'align': {\n '': ALIGN_LEFT_ICON,\n 'center': ALIGN_CENTER_ICON,\n 'right': ALIGN_RIGHT_ICON,\n 'justify': ALIGN_JUSTIFY_ICON,\n },\n 'list': {\n bullet: LIST_UNORDERED_ICON,\n ordered: LIST_ORDERED_ICON,\n check: LIST_CHECK_ICON,\n },\n\n 'code': CODE_ICON,\n 'code-block': CODE_BLOCK_ICON,\n 'blockquote': BLOCKQUOTE_ICON,\n\n 'image': IMAGE_ICON,\n 'file': FILE_ICON,\n 'better-table': TABLE_ICON,\n 'link': LINK_ICON,\n 'global-link': GLOBAL_LINK_ICON,\n 'fullscreen': FULLSCREEN_ICON,\n 'fullscreen-exit': FULLSCREEN_EXIT_ICON,\n 'emoji': EMOJI_ICON,\n 'help': HELP_ICON,\n 'screenshot': SCREENSHOT_ICON,\n 'format-painter': FORMAT_PAINTER_ICON,\n 'divider': DIVIDER_ICON,\n}\n\nconst Icons = FluentEditor.import('ui/icons')\nObject.entries(ICONS_CONFIG).forEach(([key, icon]) => {\n Icons[key] = icon\n})\n\nexport { ICONS_CONFIG }\n\nexport default Icons\n"],"names":["UNDO_ICON","REDO_ICON","CLEAN_ICON","BOLD_ICON","ITALIC_ICON","UNDERLINE_ICON","STRIKE_ICON","COLOR_ICON","TRIANGLE_DOWN_ICON","BACKGROUND_COLOR_ICON","ALIGN_LEFT_ICON","ALIGN_CENTER_ICON","ALIGN_RIGHT_ICON","ALIGN_JUSTIFY_ICON","LIST_UNORDERED_ICON","LIST_ORDERED_ICON","LIST_CHECK_ICON","CODE_ICON","CODE_BLOCK_ICON","BLOCKQUOTE_ICON","IMAGE_ICON","FILE_ICON","TABLE_ICON","LINK_ICON","GLOBAL_LINK_ICON","FULLSCREEN_ICON","FULLSCREEN_EXIT_ICON","EMOJI_ICON","HELP_ICON","SCREENSHOT_ICON","FORMAT_PAINTER_ICON","DIVIDER_ICON","FluentEditor"],"mappings":";;;;AAoCA,MAAM,eAAuC;AAAA,EAC3C,QAAQA,aAAA;AAAA,EACR,QAAQC,aAAA;AAAA,EACR,SAASC,aAAA;AAAA,EAET,QAAQC,aAAA;AAAA,EACR,UAAUC,aAAA;AAAA,EACV,aAAaC,aAAA;AAAA,EACb,UAAUC,aAAA;AAAA,EAEV,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,SAAS;AAAA,MACLC,aAAU,UAAA;AAAA,MACVC,aAAkB,kBAAA;AAAA;AAAA;AAAA,EAGtB,cAAc;AAAA,MACVC,aAAqB,qBAAA;AAAA,MACrBD,aAAkB,kBAAA;AAAA;AAAA;AAAA,EAItB,SAAS;AAAA,IACP,IAAIE,aAAA;AAAA,IACJ,UAAUC,aAAA;AAAA,IACV,SAASC,aAAA;AAAA,IACT,WAAWC,aAAAA;AAAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,QAAQC,aAAA;AAAA,IACR,SAASC,aAAA;AAAA,IACT,OAAOC,aAAAA;AAAAA,EACT;AAAA,EAEA,QAAQC,aAAA;AAAA,EACR,cAAcC,aAAA;AAAA,EACd,cAAcC,aAAA;AAAA,EAEd,SAASC,aAAA;AAAA,EACT,QAAQC,aAAA;AAAA,EACR,gBAAgBC,aAAA;AAAA,EAChB,QAAQC,aAAA;AAAA,EACR,eAAeC,aAAA;AAAA,EACf,cAAcC,aAAA;AAAA,EACd,mBAAmBC,aAAA;AAAA,EACnB,SAASC,aAAA;AAAA,EACT,QAAQC,aAAA;AAAA,EACR,cAAcC,aAAA;AAAA,EACd,kBAAkBC,aAAA;AAAA,EAClB,WAAWC,aAAAA;AACb;AAEM,MAAA,QAAQC,aAAAA,QAAa,OAAO,UAAU;AAC5C,OAAO,QAAQ,YAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,MAAM;AACpD,QAAM,GAAG,IAAI;AACf,CAAC;;;"}
1
+ {"version":3,"file":"icons.cjs.js","sources":["../../../src/ui/icons.ts"],"sourcesContent":["import FluentEditor from '../core/fluent-editor'\r\nimport {\r\n ALIGN_CENTER_ICON,\r\n ALIGN_JUSTIFY_ICON,\r\n ALIGN_LEFT_ICON,\r\n ALIGN_RIGHT_ICON,\r\n BACKGROUND_COLOR_ICON,\r\n BLOCKQUOTE_ICON,\r\n BOLD_ICON,\r\n CLEAN_ICON,\r\n CODE_BLOCK_ICON,\r\n CODE_ICON,\r\n COLOR_ICON,\r\n DIVIDER_ICON,\r\n EMOJI_ICON,\r\n FILE_ICON,\r\n FORMAT_PAINTER_ICON,\r\n FULLSCREEN_EXIT_ICON,\r\n FULLSCREEN_ICON,\r\n GLOBAL_LINK_ICON,\r\n HELP_ICON,\r\n IMAGE_ICON,\r\n ITALIC_ICON,\r\n LINK_ICON,\r\n LIST_CHECK_ICON,\r\n LIST_ORDERED_ICON,\r\n LIST_UNORDERED_ICON,\r\n REDO_ICON,\r\n SCREENSHOT_ICON,\r\n STRIKE_ICON,\r\n TABLE_ICON,\r\n TRIANGLE_DOWN_ICON,\r\n UNDERLINE_ICON,\r\n UNDO_ICON,\r\n} from './icons.config'\r\n\r\nconst ICONS_CONFIG: { [key: string]: any } = {\r\n 'undo': UNDO_ICON,\r\n 'redo': REDO_ICON,\r\n 'clean': CLEAN_ICON,\r\n\r\n 'bold': BOLD_ICON,\r\n 'italic': ITALIC_ICON,\r\n 'underline': UNDERLINE_ICON,\r\n 'strike': STRIKE_ICON,\r\n\r\n 'font': '',\r\n 'size': '',\r\n\r\n 'color': `<span class=\"ql-color-inner\">\r\n ${COLOR_ICON}\r\n ${TRIANGLE_DOWN_ICON}\r\n <span class=\"current-color-line\"></span>\r\n </span>`,\r\n 'background': `<span class=\"ql-color-inner\">\r\n ${BACKGROUND_COLOR_ICON}\r\n ${TRIANGLE_DOWN_ICON}\r\n <span class=\"current-color-line color-line-background\"></span>\r\n </span>`,\r\n\r\n 'align': {\r\n '': ALIGN_LEFT_ICON,\r\n 'center': ALIGN_CENTER_ICON,\r\n 'right': ALIGN_RIGHT_ICON,\r\n 'justify': ALIGN_JUSTIFY_ICON,\r\n },\r\n 'list': {\r\n bullet: LIST_UNORDERED_ICON,\r\n ordered: LIST_ORDERED_ICON,\r\n check: LIST_CHECK_ICON,\r\n },\r\n\r\n 'code': CODE_ICON,\r\n 'code-block': CODE_BLOCK_ICON,\r\n 'blockquote': BLOCKQUOTE_ICON,\r\n\r\n 'image': IMAGE_ICON,\r\n 'file': FILE_ICON,\r\n 'better-table': TABLE_ICON,\r\n 'link': LINK_ICON,\r\n 'global-link': GLOBAL_LINK_ICON,\r\n 'fullscreen': FULLSCREEN_ICON,\r\n 'fullscreen-exit': FULLSCREEN_EXIT_ICON,\r\n 'emoji': EMOJI_ICON,\r\n 'help': HELP_ICON,\r\n 'screenshot': SCREENSHOT_ICON,\r\n 'format-painter': FORMAT_PAINTER_ICON,\r\n 'divider': DIVIDER_ICON,\r\n}\r\n\r\nconst Icons = FluentEditor.import('ui/icons')\r\nObject.entries(ICONS_CONFIG).forEach(([key, icon]) => {\r\n Icons[key] = icon\r\n})\r\n\r\nexport { ICONS_CONFIG }\r\n\r\nexport default Icons\r\n"],"names":["UNDO_ICON","REDO_ICON","CLEAN_ICON","BOLD_ICON","ITALIC_ICON","UNDERLINE_ICON","STRIKE_ICON","COLOR_ICON","TRIANGLE_DOWN_ICON","BACKGROUND_COLOR_ICON","ALIGN_LEFT_ICON","ALIGN_CENTER_ICON","ALIGN_RIGHT_ICON","ALIGN_JUSTIFY_ICON","LIST_UNORDERED_ICON","LIST_ORDERED_ICON","LIST_CHECK_ICON","CODE_ICON","CODE_BLOCK_ICON","BLOCKQUOTE_ICON","IMAGE_ICON","FILE_ICON","TABLE_ICON","LINK_ICON","GLOBAL_LINK_ICON","FULLSCREEN_ICON","FULLSCREEN_EXIT_ICON","EMOJI_ICON","HELP_ICON","SCREENSHOT_ICON","FORMAT_PAINTER_ICON","DIVIDER_ICON","FluentEditor"],"mappings":";;;;AAoCA,MAAM,eAAuC;AAAA,EAC3C,QAAQA,aAAA;AAAA,EACR,QAAQC,aAAA;AAAA,EACR,SAASC,aAAA;AAAA,EAET,QAAQC,aAAA;AAAA,EACR,UAAUC,aAAA;AAAA,EACV,aAAaC,aAAA;AAAA,EACb,UAAUC,aAAA;AAAA,EAEV,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,SAAS;AAAA,MACLC,aAAU,UAAA;AAAA,MACVC,aAAkB,kBAAA;AAAA;AAAA;AAAA,EAGtB,cAAc;AAAA,MACVC,aAAqB,qBAAA;AAAA,MACrBD,aAAkB,kBAAA;AAAA;AAAA;AAAA,EAItB,SAAS;AAAA,IACP,IAAIE,aAAA;AAAA,IACJ,UAAUC,aAAA;AAAA,IACV,SAASC,aAAA;AAAA,IACT,WAAWC,aAAAA;AAAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,QAAQC,aAAA;AAAA,IACR,SAASC,aAAA;AAAA,IACT,OAAOC,aAAAA;AAAAA,EACT;AAAA,EAEA,QAAQC,aAAA;AAAA,EACR,cAAcC,aAAA;AAAA,EACd,cAAcC,aAAA;AAAA,EAEd,SAASC,aAAA;AAAA,EACT,QAAQC,aAAA;AAAA,EACR,gBAAgBC,aAAA;AAAA,EAChB,QAAQC,aAAA;AAAA,EACR,eAAeC,aAAA;AAAA,EACf,cAAcC,aAAA;AAAA,EACd,mBAAmBC,aAAA;AAAA,EACnB,SAASC,aAAA;AAAA,EACT,QAAQC,aAAA;AAAA,EACR,cAAcC,aAAA;AAAA,EACd,kBAAkBC,aAAA;AAAA,EAClB,WAAWC,aAAAA;AACb;AAEM,MAAA,QAAQC,aAAAA,QAAa,OAAO,UAAU;AAC5C,OAAO,QAAQ,YAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,MAAM;AACpD,QAAM,GAAG,IAAI;AACf,CAAC;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"icons.config.cjs.js","sources":["../../../src/ui/icons.config.ts"],"sourcesContent":["export const UNDO_ICON = `<svg width=\"16px\" height=\"14px\" viewBox=\"0 0 16 14\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(0.000000, -1.000000)\" fill=\"#293040\">\n <path d=\"M11,5 C13.7614237,5 16,7.23857625 16,10 C16,12.7614237 13.7614237,15 11,15 L7,15 L7,14 L11,14\n C13.209139,14 15,12.209139 15,10 C15,7.790861 13.209139,6 11,6 L5,6 L5,10 L0,5.5 L5,1 L5,5 L11,5 Z\"></path>\n </g>\n</g>\n</svg>`\n\nexport const REDO_ICON = `<svg width=\"16px\" height=\"14px\" viewBox=\"0 0 16 14\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(0.000000, -1.000000)\" fill=\"#293040\">\n <path d=\"M5,5 L11,5 L11,1 L16,5.5 L11,10 L11,6 L5,6 C2.790861,6 1,7.790861 1,10 C1,12.209139 2.790861,14 5,14 L9,14\n L9,15 L5,15 C2.23857625,15 0,12.7614237 0,10 C0,7.23857625 2.23857625,5 5,5 Z\"></path>\n </g>\n</g>\n</svg>`\n\nexport const CLEAN_ICON = `<svg width=\"16px\" height=\"15px\" viewBox=\"0 0 16 15\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g fill=\"#293040\">\n <path d=\"M4.32708124,14 L8.37150583,14 L10.5729409,11.5550586 L4.6297198,6.20375828 L1.25465311,9.95542661\n C1.09078634,10.1375782 1.0006437,10.3742369 1.00180556,10.6192474 C1.00295568,10.8617824 1.10621221,11.092615\n 1.28624979,11.2551297 L4.32708124,14 Z M16,14 L16,15 L3.93760008,15 L0.597250175,11.9923354 C0.217072683,11.6500221\n 1.59049582e-13,11.1091757 1.59428026e-13,10.6149383 C1.59806471e-13,10.1207008 0.183000942,9.64396706 0.513710349,9.27667705\n L8.56855175,0.330869394 L16,7.02217546 L9.71713856,14 L16,14 Z\"></path>\n </g>\n</g>\n</svg>`\n\nexport const BOLD_ICON = `<svg width=\"12px\" height=\"16px\" viewBox=\"0 0 12 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(-2.000000, 0.000000)\" fill=\"#293040\" fill-rule=\"nonzero\">\n <path d=\"M11.540636,7.0842147 C13.0068647,7.89340318 14,9.45459285 14,11.2477417 C14,13.8723415 11.8723415,16\n 9.2477417,16 L2,16 L2,7.99258423 L2,-5.06261699e-14 L9.00370789,-4.75175455e-14 C11.2107991,-4.79229815e-14 13,1.78920092\n 13,3.99629211 C13,5.24014846 12.4317244,6.35127692 11.540636,7.0842147 Z M3.5,1.5 L3.5,6.49258423 L9.00370789,6.49258423\n C10.382372,6.49258423 11.5,5.37495618 11.5,3.99629211 C11.5,2.61762805 10.382372,1.5 9.00370789,1.5 L3.5,1.5 Z M3.5,14.5\n L9.2477417,14.5 C11.0439144,14.5 12.5,13.0439144 12.5,11.2477417 C12.5,9.45156904 11.0439144,7.9954834 9.2477417,7.9954834\n L3.5,7.9954834 L3.5,14.5 Z\"></path>\n </g>\n</g>\n</svg>`\n\nexport const ITALIC_ICON = `<svg width=\"9px\" height=\"16px\" viewBox=\"0 0 9 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(-4.000000, 0.000000)\" fill=\"#293040\">\n <path d=\"M10.2565501,1.5 L8.41332415,14.5 L12,14.5 L12,16 L4,16 L4,14.5 L6.90083611,14.5 L8.74406208,1.5 L5,1.5\n L5,0 L13,0 L13,1.5 L10.2565501,1.5 Z\"></path>\n </g>\n</g>\n</svg>`\n\nexport const UNDERLINE_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <polygon fill=\"#293040\" points=\"2 14 14 14 14 16 2 16\"></polygon>\n <path d=\"M4.5,3 L4.5,7 C4.5,8.93299662 6.06700338,10.5 8,10.5 C9.93299662,10.5 11.5,8.93299662 11.5,7 L11.5,1.5\n L11.4998322,0 L13,0 L13,7 C13,9.76142375 10.7614237,12 8,12 C5.23857625,12 3,9.76142375 3,7 L3,0 L4.49893188,0\n L4.49893188,3 L4.5,3 Z\" fill=\"#293040\" fill-rule=\"nonzero\"></path>\n</g>\n</svg>`\n\nexport const STRIKE_ICON = `<svg width=\"14px\" height=\"16px\" viewBox=\"0 0 14 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(-1.000000, 0.000000)\" fill=\"#293040\">\n <path d=\"M9.93321102,9 L1,9 L1,7 L3.84197169,7 C3.31015092,6.28495098 3,5.42507332 3,4.5 C3,2.01471863\n 5.23857625,0 8,0 C10.5736409,0 12.6931261,1.75002477 12.969484,4 L11.4507289,4 C11.1737591,2.60626201 9.76011738,1.5 8,1.5\n C6.03382604,1.5 4.5,2.88044344 4.5,4.5 C4.5,5.52604325 5.11562351,6.45611494 6.06678898,7 L15,7 L15,9 L12.1580283,9\n C12.6898491,9.71504902 13,10.5749267 13,11.5 C13,13.9852814 10.7614237,16 8,16 C5.42635908,16 3.30687393,14.2499752\n 3.03051599,12 L4.54927112,12 C4.82624092,13.393738 6.23988262,14.5 8,14.5 C9.96617396,14.5 11.5,13.1195566 11.5,11.5\n C11.5,10.4739568 10.8843765,9.54388506 9.93321102,9 Z\"></path>\n </g>\n</g>\n</svg>`\n\nexport const COLOR_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <polygon fill=\"#293040\" points=\"2 14 14 14 14 16 2 16\"></polygon>\n <path d=\"M10.9166667,8.5 L5.08333333,8.5 L4.26618123,10.461165 L3.62338765,12 L2,12 L7,0 L9,0 L14,12 L12.3824972,12\n L11.5753038,10.0807292 L10.9166667,8.5 Z M10.2916667,7 L8,1.5 L5.70833333,7 L10.2916667,7 Z\"\n fill=\"#293040\" fill-rule=\"nonzero\"></path>\n</g>\n</svg>`\n\nexport const BACKGROUND_COLOR_ICON = ` <svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M4.64447006,9.66583547 L3.17597929,8.33216965 L6.15933183,5.11039074 L5.42508645,4.44355783\n L9.39179153,1.0658141e-13 L16,6.00149616 L12.0332949,10.445054 L11.2990495,9.77822108 L8.31569698,13 L6.84720621,11.6663342\n L5.69344476,12.9587937 L2.36400649,12.9587937 L2,12.6282074 L4.64447006,9.66583547 Z M4.57134219,8.25840959\n L8.24256911,11.5925741 L10.5648041,9.11138818 L6.89357722,5.77722364 L4.57134219,8.25840959 Z M14.6046371,6.07525623\n L9.4649194,1.40742588 L6.82044935,4.36979777 L11.960167,9.03762811 L14.6046371,6.07525623 Z M2,14 L14,14 L14,16 L2,16 L2,14 Z\"\n fill=\"#293040\"></path>\n</g>\n</svg>`\n\nexport const ALIGN_LEFT_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M0,0 L1.5,0 L1.5,16 L0,16 L0,0 Z M4,3 L13,3 L13,7 L4,7 L4,3 Z M5,4 L5,6 L12,6 L12,4 L5,4 Z M4,9 L16,9\n L16,13 L4,13 L4,9 Z M5,10 L5,12 L15,12 L15,10 L5,10 Z\" fill=\"#293040\"></path>\n</g>\n</svg>`\n\nexport const ALIGN_CENTER_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M8.75,7 L8.75,9 L16,9 L16,13 L8.75,13 L8.75,16 L7.25,16 L7.25,13 L0,13 L0,9 L7.25,9 L7.25,7 L2,7\n L2,3 L7.25,3 L7.25,0 L8.75,0 L8.75,3 L14,3 L14,7 L8.75,7 Z M1,10 L1,12 L15,12 L15,10 L1,10 Z M3,4 L3,6 L13,6\n L13,4 L3,4 Z\" fill=\"#293040\"></path>\n</g>\n</svg>`\n\nexport const ALIGN_JUSTIFY_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 15 15\"><path fill=\"none\" stroke=\"currentColor\" d=\"M0 3.5h15m-15 8h15m-15-4h15\"/></svg>`\n\nexport const ALIGN_RIGHT_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M14.5,0 L16,0 L16,16 L14.5,16 L14.5,0 Z M3,3 L12,3 L12,7 L3,7 L3,3 Z M4,4 L4,6 L11,6 L11,4 L4,4 Z\n M0,9 L12,9 L12,13 L0,13 L0,9 Z M1,10 L1,12 L11,12 L11,10 L1,10 Z\" fill=\"#293040\"></path>\n</g>\n</svg>`\n\nexport const LIST_UNORDERED_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g fill=\"#293040\">\n <path d=\"M5,1 L16,1 L16,2.5 L5,2.5 L5,1 Z M2,4 C0.8954305,4 0,3.1045695 0,2 C0,0.8954305 0.8954305,0 2,0\n C3.1045695,0 4,0.8954305 4,2 C4,3.1045695 3.1045695,4 2,4 Z M2,3 C2.55228475,3 3,2.55228475 3,2 C3,1.44771525\n 2.55228475,1 2,1 C1.44771525,1 1,1.44771525 1,2 C1,2.55228475 1.44771525,3 2,3 Z M2,10 C0.8954305,10 0,9.1045695\n 0,8 C0,6.8954305 0.8954305,6 2,6 C3.1045695,6 4,6.8954305 4,8 C4,9.1045695 3.1045695,10 2,10 Z M2,9 C2.55228475,9\n 3,8.55228475 3,8 C3,7.44771525 2.55228475,7 2,7 C1.44771525,7 1,7.44771525 1,8 C1,8.55228475 1.44771525,9 2,9 Z\n M2,16 C0.8954305,16 0,15.1045695 0,14 C0,12.8954305 0.8954305,12 2,12 C3.1045695,12 4,12.8954305 4,14 C4,15.1045695\n 3.1045695,16 2,16 Z M2,15 C2.55228475,15 3,14.5522847 3,14 C3,13.4477153 2.55228475,13 2,13 C1.44771525,13 1,13.4477153\n 1,14 C1,14.5522847 1.44771525,15 2,15 Z M5,7 L16,7 L16,8.5 L5,8.5 L5,7 Z M5,13 L16,13 L16,14.5 L5,14.5 L5,13 Z\"></path>\n </g>\n</g>\n</svg>`\n\nexport const LIST_ORDERED_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g fill=\"#293040\">\n <path d=\"M5,1 L16,1 L16,2.5 L5,2.5 L5,1 Z M0,0 L2,0 L2,3 L3,3 L3,4 L0,4 L0,3 L1,3 L1,1 L0,1 L0,0 Z M5,7 L16,7\n L16,8.5 L5,8.5 L5,7 Z M5,13 L16,13 L16,14.5 L5,14.5 L5,13 Z M0,15 L1.75,15 C1.88807119,15 2,14.8880712 2,14.75\n C2,14.6119288 1.88807119,14.5 1.75,14.5 L0,14.5 L0,13.5 L1.75,13.5 C1.88807119,13.5 2,13.3880712 2,13.25 C2,13.1119288\n 1.88807119,13 1.75,13 L0,13 L0,12 L1.5,12 C2.32842712,12 3,12.6715729 3,13.5 C3,13.6753177 2.96992289,13.8436105\n 2.91464715,14 C2.96992289,14.1563895 3,14.3246823 3,14.5 C3,15.3284271 2.32842712,16 1.5,16 L0,16 L0,15 Z M2,7.5\n C2,7.35127258 1.9375,7.22627258 1.84375,7.13845444 C1.76307119,7.05596441 1.63807119,7 1.5,7 C1.22385763,7 1,7.22385763\n 1,7.5 L1.62630326e-19,7.5 C0.147399902,6.5 0.647399902,6 1.5,6 C2.32842712,6 3,6.67157288 3,7.5 C3,8.07312512\n 2.50016007,8.55650475 2.22821045,8.74661255 C1.95626083,8.93672035 1.77325955,8.99789088 1.76769962,9 L3,9 L3,10\n L0,10 L1.62630326e-19,9 C0.619515577,8.77257137 1.06188822,8.55939591 1.32711792,8.36047363 C1.6371448,8.12795347\n 1.87259637,7.91592701 1.96143498,7.69289356 C1.98627694,7.633537 2,7.5683711 2,7.5 Z\"></path>\n </g>\n</g>\n</svg>`\n\nexport const LIST_CHECK_ICON = `<svg width=\"15px\" height=\"14px\" viewBox=\"0 0 15 14\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(-1058.000000, -97.000000)\">\n <g transform=\"translate(407.000000, 93.000000)\">\n <g transform=\"translate(650.000000, 2.000000)\">\n <rect x=\"0\" y=\"0\" width=\"16\" height=\"16\"></rect>\n <polygon fill=\"#293040\" fill-rule=\"nonzero\" points=\"14 15 14 9.37100497 15 9.37100497 15\n 16 1 16 1 2 10.1946467 2 10.1946467 3 2 3 2 15\"></polygon>\n <path d=\"M14.4525049,2.48740937 C14.7356009,2.1850362 15.8305911,3.21021745 15.5474951,3.51259063\n L8.45990379,11.0828057 L4.46558382,7.02621226 C4.17496481,6.73106236 4.17863783,6.25620283 4.47378774,5.96558382\n C4.76893764,5.67496481 5.24379717,5.67863783 5.53441618,5.97378774 L8.43263799,8.91719429 L14.4525049,2.48740937 Z\"\n fill=\"#293040\" fill-rule=\"nonzero\"></path>\n </g>\n </g>\n </g>\n</g>\n</svg>`\n\nexport const CODE_BLOCK_ICON = `<svg t=\"1565073788159\" class=\"icon\" viewBox=\"0 0 1024 1024\" width=\"16\" height=\"16\">\n<path d=\"M110.78 469.52l70.44-39.24A60 60 0 0 0 212 377.9L212 212a120 120 0 0 1 120-120l60 0a30\n30 0 0 1 0 60L332 152a60 60 0 0 0-59.99999999 60l0 175.38a120 120 0 0\n1-63.48000001 105.9L173.42 512l35.1 18.72A120 120 0 0 1 272 636.56L272.00000001 812a60 60 0 0 0 59.99999999 60l60 0a30 30\n0 1 1 0 60L332 932a120 120 0 0 1-120-120l0-165.9a60\n60 0 0 0-30.78-52.38l-70.44-39.24a45 45 0 0 1 0-84.96z m742.44 1e-8a45 45 0 0 1 0 84.95999998l-70.44 39.24000001a60\n60 0 0 0-30.78000001 52.38L751.99999999 812a120 120 0 0 1-119.99999999 120L572 932a30 30\n0 1 1 0-60l60 0a60 60 0 0 0 60-60l0-175.38a120 120\n0 0 1 63.48-105.9L790.58 512l-35.1-18.72A120 120 0 0 1 692 387.44L692 212a60 60 0 0 0-60-60L572 152a30\n30 0 0 1 0-60l60 0a120 120 0 0 1 119.99999999 120l0 165.9a60 60 0 0 0 30.78000001 52.38l70.44 39.24000001z\"></path></svg>`\n\nexport const BLOCKQUOTE_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(0.000000, 1.000000)\" fill=\"#000000\" fill-rule=\"nonzero\">\n <path d=\"M6.86733556,12.5574136 L6.86733556,7.99108138 L2.52931996,7.99108138 C2.41516165,5.02296544\n 3.10011148,3.42474916 5.72575251,2.0548495 L5.72575251,0 C1.84437012,1.36989967 -0.0963210702,3.88138239 0.0178372352,7.76276477\n L0.0178372352,12.5574136 L6.86733556,12.5574136 Z M16,12.5574136 L16,7.99108138 L11.6619844,7.99108138 C11.5478261,5.02296544\n 12.2327759,3.42474916 14.8584169,2.0548495 L14.8584169,0 C10.9770346,1.36989967 9.03634337,3.88138239 9.15050167,7.76276477\n L9.15050167,12.5574136 L16,12.5574136 Z\"></path>\n </g>\n</g>\n</svg>`\n\nexport const IMAGE_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(-1196.000000, -96.000000)\" fill=\"#293040\" fill-rule=\"nonzero\">\n <g transform=\"translate(407.000000, 93.000000)\">\n <path d=\"M804,4 L790,4 L790,11.940983 L794.058237,9.91186456 L798.536534,13.3949845 L801.014076,11.908459\n L804,13.8990748 L804,4 Z M803.72265,14.9160251 L800.985924,13.091541 L798.463466,14.6050155 L793.941763,11.0881354\n L790.223607,12.9472136 C790.151699,12.9831673 790.07527,13.000168 790,13.0001094 L790,18 L804,18 L804,15.0000529\n C803.90455,15.0001406 803.80803,14.9729453 803.72265,14.9160251 Z M789,19 L789,3 L805,3 L805,19 L789,19 Z M801,9\n C800.447715,9 800,8.55228475 800,8 C800,7.44771525 800.447715,7 801,7 C801.552285,7 802,7.44771525 802,8 C802,8.55228475\n 801.552285,9 801,9 Z\"></path>\n </g>\n </g>\n</g>\n</svg>`\n\nexport const FILE_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" >\n<g id=\"icon/01\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M16,16 L1,16 L1,0 L12,0 L16,4 L16,16 Z M11,1 L2,1 L2,15 L15,15 L15,\n 5 L11,5 L11,1 Z M12,1.533 L12,4 L14.52,4 L12,1.533 Z\"\n id=\"Combined-Shape\" fill=\"#293040\" fill-rule=\"nonzero\">\n </path>\n <polygon id=\"path\" fill=\"#293040\" points=\"8 8 6 8 8.5 5 11 8 9 8 9 12 8 12\"></polygon>\n</g>\n</svg>`\n\nexport const TABLE_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(-1227.000000, -96.000000)\" fill=\"#293040\">\n <g transform=\"translate(407.000000, 93.000000)\">\n <path d=\"M820,3 L836,3 L836,19 L820,19 L820,3 Z M821,4 L821,8 L835,8 L835,4 L821,4 Z M821,9 L821,13 L825,\n 13 L825,9 L821,9 Z M821,14 L821,18 L825,18 L825,14 L821,14 Z M826,9 L826,13 L830,13 L830,9 L826,9 Z M826,\n 14 L826,18 L830,18 L830,14 L826,14 Z M831,9 L831,13 L835,13 L835,9 L831,9 Z M831,14 L831,18 L835,18 L835,\n 14 L831,14 Z\"></path>\n </g>\n </g>\n</g>\n</svg>`\n\nexport const LINK_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(-1258.000000, -96.000000)\" fill=\"#293040\" fill-rule=\"nonzero\">\n <g transform=\"translate(407.000000, 93.000000)\">\n <path d=\"M855.499,13.863 L861.863,7.499 L862.573,8.209 L856.209,14.573 L855.499,13.863 Z M854.646498,9.99452063\n C854.661947,10.0108615 854.677673,10.0270363 854.693676,10.0430391 L855.388521,10.7378841 L852.802248,13.3241571\n C851.732584,14.3938208 851.732584,16.1280884 852.802248,17.1977522 C853.871912,18.2674159 855.606179,18.2674159\n 856.675843,17.1977522 L859.262116,14.6114792 L859.956961,15.3063242 C859.972964,15.3223269 859.989138,15.3380528\n 860.005479,15.3535018 L857.468863,17.8901187 C855.989021,19.3699604 853.589723,19.3699604 852.109881,17.8901187\n C850.63004,16.4102769 850.63004,14.0109793 852.109881,12.5311375 L854.646498,9.99452063 Z M857.994521,6.64649819\n L860.531137,4.10988134 C862.010979,2.63003955 864.410277,2.63003955 865.890119,4.10988134 C867.36996,5.58972313\n 867.36996,7.98902073 865.890119,9.46886252 L863.353502,12.0054794 C863.338053,11.9891385 863.322327,11.9729637\n 863.306324,11.9569609 L862.611479,11.2621159 L865.197752,8.67584293 C866.267416,7.60617918 866.267416,5.87191157\n 865.197752,4.80224782 C864.128088,3.73258406 862.393821,3.73258406 861.324157,4.80224782 L858.737884,7.38852082\n L858.043039,6.69367584 C858.027036,6.67767307 858.010862,6.66194719 857.994521,6.64649819 Z\"></path>\n </g>\n </g>\n</g>\n</svg>`\n\nexport const EMOJI_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M8,16 C3.581722,16 0,12.418278 0,8 C0,3.581722 3.581722,0 8,0 C12.418278,0 16,3.581722 16,8 C16,12.418278\n 12.418278,16 8,16 Z M8,15 C11.8659932,15 15,11.8659932 15,8 C15,4.13400675 11.8659932,1 8,1 C4.13400675,1 1,4.13400675\n 1,8 C1,11.8659932 4.13400675,15 8,15 Z M5,7 C4.44771525,7 4,6.55228475 4,6 C4,5.44771525 4.44771525,5 5,5 C5.55228475,5\n 6,5.44771525 6,6 C6,6.55228475 5.55228475,7 5,7 Z M11,7 C10.4477153,7 10,6.55228475 10,6 C10,5.44771525 10.4477153,5 11,5\n C11.5522847,5 12,5.44771525 12,6 C12,6.55228475 11.5522847,7 11,7 Z M4,10 L12,10 C11.5415129,11.7252272 9.9244686,13 8,13\n C6.0755314,13 4.45848714,11.7252272 4,10 Z\" fill=\"#293040\"></path>\n</g>\n</svg>`\n\nexport const SCREENSHOT_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" version=\"1.1\">\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(-1529.000000, -96.000000)\">\n <g transform=\"translate(1529.000000, 96.000000)\">\n <rect fill=\"#000000\" fill-rule=\"nonzero\" opacity=\"0\" x=\"0\" y=\"0\" width=\"16\" height=\"16\"></rect>\n <polyline stroke=\"currentColor\" points=\"16 14 2 14 2 0 2 0\"></polyline>\n <polyline stroke=\"currentColor\" points=\"4 2 14 2 14 12\"></polyline>\n <rect fill=\"currentColor\" x=\"0\" y=\"1.5\" width=\"2\" height=\"1\"></rect>\n <rect fill=\"currentColor\"\n transform=\"translate(14.000000, 15.000000)\n rotate(-90.000000)\n translate(-14.000000, -15.000000) \" x=\"13\" y=\"14.5\" width=\"2\" height=\"1\">\n </rect>\n </g>\n </g>\n</g>\n</svg>`\n\nexport const CODE_ICON = `<svg t=\"1721956397010\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"4254\" width=\"20\" height=\"20\"><path d=\"M438.4 849.1l222.7-646.7c0.2-0.5 0.3-1.1 0.4-1.6L438.4 849.1z\" opacity=\".224\" p-id=\"4255\"></path><path d=\"M661.2 168.7h-67.5c-3.4 0-6.5 2.2-7.6 5.4L354.7 846c-0.3 0.8-0.4 1.7-0.4 2.6 0 4.4 3.6 8 8 8h67.8c3.4 0 6.5-2.2 7.6-5.4l0.7-2.1 223.1-648.3 7.4-21.4c0.3-0.8 0.4-1.7 0.4-2.6-0.1-4.5-3.6-8.1-8.1-8.1zM954.6 502.1c-0.8-1-1.7-1.9-2.7-2.7l-219-171.3c-3.5-2.7-8.5-2.1-11.2 1.4-1.1 1.4-1.7 3.1-1.7 4.9v81.3c0 2.5 1.1 4.8 3.1 6.3l115 90-115 90c-1.9 1.5-3.1 3.8-3.1 6.3v81.3c0 4.4 3.6 8 8 8 1.8 0 3.5-0.6 4.9-1.7l219-171.3c6.9-5.4 8.2-15.5 2.7-22.5zM291.1 328.1l-219 171.3c-1 0.8-1.9 1.7-2.7 2.7-5.4 7-4.2 17 2.7 22.5l219 171.3c1.4 1.1 3.1 1.7 4.9 1.7 4.4 0 8-3.6 8-8v-81.3c0-2.5-1.1-4.8-3.1-6.3l-115-90 115-90c1.9-1.5 3.1-3.8 3.1-6.3v-81.3c0-1.8-0.6-3.5-1.7-4.9-2.7-3.5-7.7-4.1-11.2-1.4z\" p-id=\"4256\"></path></svg>`\n\nexport const MENTION_ICON = `<i class=\"icon-set-keyword\"></i>`\n\nexport const QUICK_MENU_ICON = `<i class=\"icon-publish\"></i>`\n\nexport const SAVE_ICON = `<i class=\"icon-save\"></i>`\n\nexport const HELP_ICON = `<svg t=\"1721963829631\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"9764\" width=\"20\" height=\"20\"><path d=\"M512 74.666667C270.933333 74.666667 74.666667 270.933333 74.666667 512S270.933333 949.333333 512 949.333333 949.333333 753.066667 949.333333 512 753.066667 74.666667 512 74.666667z m0 810.666666c-204.8 0-373.333333-168.533333-373.333333-373.333333S307.2 138.666667 512 138.666667 885.333333 307.2 885.333333 512 716.8 885.333333 512 885.333333z\" fill=\"#000000\" p-id=\"9765\"></path><path d=\"M512 746.666667m-42.666667 0a42.666667 42.666667 0 1 0 85.333334 0 42.666667 42.666667 0 1 0-85.333334 0Z\" fill=\"#000000\" p-id=\"9766\"></path><path d=\"M512 245.333333c-76.8 0-138.666667 61.866667-138.666667 138.666667 0 17.066667 14.933333 32 32 32s32-14.933333 32-32c0-40.533333 34.133333-74.666667 74.666667-74.666667s74.666667 34.133333 74.666667 74.666667c0 27.733333-53.333333 76.8-91.733334 100.266667-8.533333 6.4-14.933333 17.066667-14.933333 27.733333v106.666667c0 17.066667 14.933333 32 32 32s32-14.933333 32-32v-89.6c34.133333-25.6 106.666667-83.2 106.666667-145.066667 0-76.8-61.866667-138.666667-138.666667-138.666667z\" fill=\"#000000\" p-id=\"9767\"></path></svg>`\n\nexport const SCROLL_TABLE_ICON = `<i class=\"icon-switch\"></i>`\n\nexport const GLOBAL_LINK_ICON = `<svg t=\"1721963743677\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"8628\" width=\"20\" height=\"20\"><path d=\"M713.130667 283.221333V228.352a9.159111 9.159111 0 0 0-9.130667-9.130667H265.102222a9.159111 9.159111 0 0 0-9.102222 9.130667v54.869333c0 5.034667 4.096 9.130667 9.130667 9.130667H704a9.159111 9.159111 0 0 0 9.130667-9.130667z m-448 100.579556a9.130667 9.130667 0 0 0-9.130667 9.130667v54.869333c0 5.006222 4.096 9.130667 9.130667 9.130667h210.289777a9.159111 9.159111 0 0 0 9.159112-9.130667v-54.869333a9.159111 9.159111 0 0 0-9.159112-9.130667H265.130667z m164.579555 516.551111H164.579556V95.800889h640v279.352889c0 5.034667 4.096 9.159111 9.130666 9.159111h64a9.159111 9.159111 0 0 0 9.130667-9.159111V50.090667c0-20.252444-16.327111-36.579556-36.551111-36.579556H118.840889c-20.195556 0-36.551111 16.327111-36.551111 36.579556v896c0 20.195556 16.327111 36.551111 36.551111 36.551111h310.869333a9.159111 9.159111 0 0 0 9.130667-9.130667v-64a9.159111 9.159111 0 0 0-9.130667-9.159111z\" fill=\"#000000\" fill-opacity=\".85\" p-id=\"8629\"></path><path d=\"M837.859556 656.298667l-107.861334 186.794666-68.977778-39.822222 107.861334-186.794667 68.977778 39.822223z\" fill=\"#000000\" p-id=\"8630\"></path><path d=\"M691.114667 514.844444a159.146667 159.146667 0 0 1 217.315555-58.225777 159.061333 159.061333 0 0 1 58.197334 217.315555l-55.637334 96.369778-68.977778-39.822222 55.637334-96.369778a79.416889 79.416889 0 1 0-137.557334-79.416889l-55.637333 96.369778-68.977778-39.822222 55.637334-96.369778V514.844444z m-28.558223 208.782223l-56.462222 97.792a79.416889 79.416889 0 0 0 137.557334 79.388444l56.462222-97.763555 68.977778 39.822222-56.462223 97.763555a159.061333 159.061333 0 1 1-275.484444-159.061333l56.433778-97.763556 68.977777 39.822223z\" fill=\"#000000\" p-id=\"8631\"></path></svg>`\n\nexport const FULLSCREEN_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon\" width=\"100%\" height=\"100%\" viewBox=\"0 0 1024 1024\" version=\"1.1\">\n <path fill=\"#333333\" d=\"M64 384h96V160h224.2V64H64zM639.8 64v96H864v224h96V64zM864 864H639.8v96H960V639.61h-96zM160 639.61H64V960h320.2v-96H160z\"/>\n</svg>`\n\nexport const FULLSCREEN_EXIT_ICON = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M6 21v-3H3v-2h5v5zm10 0v-5h5v2h-3v3zM3 8V6h3V3h2v5zm13 0V3h2v3h3v2z\"/>\n </svg>\n`\n\nexport const TRIANGLE_DOWN_ICON = `<i class=\"icon-triangle-down\"></i>`\n\nexport const FORMAT_PAINTER_ICON = `<svg viewBox=\"0 0 32 32\"><path fill=\"currentColor\" d=\"M28.83 23.17L23 17.33V13a1 1 0 0 0-.29-.71l-10-10a1 1 0 0 0-1.42 0l-9 9a1 1 0 0 0 0 1.42l10 10A1 1 0 0 0 13 23h4.34l5.83 5.84a4 4 0 0 0 5.66-5.66ZM6 10.41l2.29 2.3l1.42-1.42L7.41 9L9 7.41l4.29 4.3l1.42-1.42L10.41 6L12 4.41L18.59 11L11 18.59L4.41 12Zm21.41 17a2 2 0 0 1-2.82 0l-6.13-6.12a1.8 1.8 0 0 0-.71-.29h-4.34l-1-1L20 12.41l1 1v4.34a1 1 0 0 0 .29.7l6.12 6.14a2 2 0 0 1 0 2.82\"/></svg>`\n\nexport const DIVIDER_ICON = `<svg viewBox=\"0 0 18 18\"><line x1=\"0\" y1=\"9\" x2=\"18\" y2=\"9\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>`\n"],"names":[],"mappings":";;AAAO,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASlB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASlB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYnB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAalB,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASpB,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASvB,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAapB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASnB,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW9B,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAOxB,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ1B,MAAM,qBAAqB;AAE3B,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe5B,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiB1B,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBxB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWxB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYxB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAenB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUlB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAanB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBlB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWnB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBxB,MAAM,YAAY;AAElB,MAAM,eAAe;AAErB,MAAM,kBAAkB;AAExB,MAAM,YAAY;AAElB,MAAM,YAAY;AAElB,MAAM,oBAAoB;AAE1B,MAAM,mBAAmB;AAEzB,MAAM,kBAAkB;AAAA;AAAA;AAIxB,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAM7B,MAAM,qBAAqB;AAE3B,MAAM,sBAAsB;AAE5B,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"icons.config.cjs.js","sources":["../../../src/ui/icons.config.ts"],"sourcesContent":["export const UNDO_ICON = `<svg width=\"16px\" height=\"14px\" viewBox=\"0 0 16 14\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(0.000000, -1.000000)\" fill=\"#293040\">\r\n <path d=\"M11,5 C13.7614237,5 16,7.23857625 16,10 C16,12.7614237 13.7614237,15 11,15 L7,15 L7,14 L11,14\r\n C13.209139,14 15,12.209139 15,10 C15,7.790861 13.209139,6 11,6 L5,6 L5,10 L0,5.5 L5,1 L5,5 L11,5 Z\"></path>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const REDO_ICON = `<svg width=\"16px\" height=\"14px\" viewBox=\"0 0 16 14\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(0.000000, -1.000000)\" fill=\"#293040\">\r\n <path d=\"M5,5 L11,5 L11,1 L16,5.5 L11,10 L11,6 L5,6 C2.790861,6 1,7.790861 1,10 C1,12.209139 2.790861,14 5,14 L9,14\r\n L9,15 L5,15 C2.23857625,15 0,12.7614237 0,10 C0,7.23857625 2.23857625,5 5,5 Z\"></path>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const CLEAN_ICON = `<svg width=\"16px\" height=\"15px\" viewBox=\"0 0 16 15\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g fill=\"#293040\">\r\n <path d=\"M4.32708124,14 L8.37150583,14 L10.5729409,11.5550586 L4.6297198,6.20375828 L1.25465311,9.95542661\r\n C1.09078634,10.1375782 1.0006437,10.3742369 1.00180556,10.6192474 C1.00295568,10.8617824 1.10621221,11.092615\r\n 1.28624979,11.2551297 L4.32708124,14 Z M16,14 L16,15 L3.93760008,15 L0.597250175,11.9923354 C0.217072683,11.6500221\r\n 1.59049582e-13,11.1091757 1.59428026e-13,10.6149383 C1.59806471e-13,10.1207008 0.183000942,9.64396706 0.513710349,9.27667705\r\n L8.56855175,0.330869394 L16,7.02217546 L9.71713856,14 L16,14 Z\"></path>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const BOLD_ICON = `<svg width=\"12px\" height=\"16px\" viewBox=\"0 0 12 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-2.000000, 0.000000)\" fill=\"#293040\" fill-rule=\"nonzero\">\r\n <path d=\"M11.540636,7.0842147 C13.0068647,7.89340318 14,9.45459285 14,11.2477417 C14,13.8723415 11.8723415,16\r\n 9.2477417,16 L2,16 L2,7.99258423 L2,-5.06261699e-14 L9.00370789,-4.75175455e-14 C11.2107991,-4.79229815e-14 13,1.78920092\r\n 13,3.99629211 C13,5.24014846 12.4317244,6.35127692 11.540636,7.0842147 Z M3.5,1.5 L3.5,6.49258423 L9.00370789,6.49258423\r\n C10.382372,6.49258423 11.5,5.37495618 11.5,3.99629211 C11.5,2.61762805 10.382372,1.5 9.00370789,1.5 L3.5,1.5 Z M3.5,14.5\r\n L9.2477417,14.5 C11.0439144,14.5 12.5,13.0439144 12.5,11.2477417 C12.5,9.45156904 11.0439144,7.9954834 9.2477417,7.9954834\r\n L3.5,7.9954834 L3.5,14.5 Z\"></path>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const ITALIC_ICON = `<svg width=\"9px\" height=\"16px\" viewBox=\"0 0 9 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-4.000000, 0.000000)\" fill=\"#293040\">\r\n <path d=\"M10.2565501,1.5 L8.41332415,14.5 L12,14.5 L12,16 L4,16 L4,14.5 L6.90083611,14.5 L8.74406208,1.5 L5,1.5\r\n L5,0 L13,0 L13,1.5 L10.2565501,1.5 Z\"></path>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const UNDERLINE_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <polygon fill=\"#293040\" points=\"2 14 14 14 14 16 2 16\"></polygon>\r\n <path d=\"M4.5,3 L4.5,7 C4.5,8.93299662 6.06700338,10.5 8,10.5 C9.93299662,10.5 11.5,8.93299662 11.5,7 L11.5,1.5\r\n L11.4998322,0 L13,0 L13,7 C13,9.76142375 10.7614237,12 8,12 C5.23857625,12 3,9.76142375 3,7 L3,0 L4.49893188,0\r\n L4.49893188,3 L4.5,3 Z\" fill=\"#293040\" fill-rule=\"nonzero\"></path>\r\n</g>\r\n</svg>`\r\n\r\nexport const STRIKE_ICON = `<svg width=\"14px\" height=\"16px\" viewBox=\"0 0 14 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-1.000000, 0.000000)\" fill=\"#293040\">\r\n <path d=\"M9.93321102,9 L1,9 L1,7 L3.84197169,7 C3.31015092,6.28495098 3,5.42507332 3,4.5 C3,2.01471863\r\n 5.23857625,0 8,0 C10.5736409,0 12.6931261,1.75002477 12.969484,4 L11.4507289,4 C11.1737591,2.60626201 9.76011738,1.5 8,1.5\r\n C6.03382604,1.5 4.5,2.88044344 4.5,4.5 C4.5,5.52604325 5.11562351,6.45611494 6.06678898,7 L15,7 L15,9 L12.1580283,9\r\n C12.6898491,9.71504902 13,10.5749267 13,11.5 C13,13.9852814 10.7614237,16 8,16 C5.42635908,16 3.30687393,14.2499752\r\n 3.03051599,12 L4.54927112,12 C4.82624092,13.393738 6.23988262,14.5 8,14.5 C9.96617396,14.5 11.5,13.1195566 11.5,11.5\r\n C11.5,10.4739568 10.8843765,9.54388506 9.93321102,9 Z\"></path>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const COLOR_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <polygon fill=\"#293040\" points=\"2 14 14 14 14 16 2 16\"></polygon>\r\n <path d=\"M10.9166667,8.5 L5.08333333,8.5 L4.26618123,10.461165 L3.62338765,12 L2,12 L7,0 L9,0 L14,12 L12.3824972,12\r\n L11.5753038,10.0807292 L10.9166667,8.5 Z M10.2916667,7 L8,1.5 L5.70833333,7 L10.2916667,7 Z\"\r\n fill=\"#293040\" fill-rule=\"nonzero\"></path>\r\n</g>\r\n</svg>`\r\n\r\nexport const BACKGROUND_COLOR_ICON = ` <svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path d=\"M4.64447006,9.66583547 L3.17597929,8.33216965 L6.15933183,5.11039074 L5.42508645,4.44355783\r\n L9.39179153,1.0658141e-13 L16,6.00149616 L12.0332949,10.445054 L11.2990495,9.77822108 L8.31569698,13 L6.84720621,11.6663342\r\n L5.69344476,12.9587937 L2.36400649,12.9587937 L2,12.6282074 L4.64447006,9.66583547 Z M4.57134219,8.25840959\r\n L8.24256911,11.5925741 L10.5648041,9.11138818 L6.89357722,5.77722364 L4.57134219,8.25840959 Z M14.6046371,6.07525623\r\n L9.4649194,1.40742588 L6.82044935,4.36979777 L11.960167,9.03762811 L14.6046371,6.07525623 Z M2,14 L14,14 L14,16 L2,16 L2,14 Z\"\r\n fill=\"#293040\"></path>\r\n</g>\r\n</svg>`\r\n\r\nexport const ALIGN_LEFT_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path d=\"M0,0 L1.5,0 L1.5,16 L0,16 L0,0 Z M4,3 L13,3 L13,7 L4,7 L4,3 Z M5,4 L5,6 L12,6 L12,4 L5,4 Z M4,9 L16,9\r\n L16,13 L4,13 L4,9 Z M5,10 L5,12 L15,12 L15,10 L5,10 Z\" fill=\"#293040\"></path>\r\n</g>\r\n</svg>`\r\n\r\nexport const ALIGN_CENTER_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path d=\"M8.75,7 L8.75,9 L16,9 L16,13 L8.75,13 L8.75,16 L7.25,16 L7.25,13 L0,13 L0,9 L7.25,9 L7.25,7 L2,7\r\n L2,3 L7.25,3 L7.25,0 L8.75,0 L8.75,3 L14,3 L14,7 L8.75,7 Z M1,10 L1,12 L15,12 L15,10 L1,10 Z M3,4 L3,6 L13,6\r\n L13,4 L3,4 Z\" fill=\"#293040\"></path>\r\n</g>\r\n</svg>`\r\n\r\nexport const ALIGN_JUSTIFY_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 15 15\"><path fill=\"none\" stroke=\"currentColor\" d=\"M0 3.5h15m-15 8h15m-15-4h15\"/></svg>`\r\n\r\nexport const ALIGN_RIGHT_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path d=\"M14.5,0 L16,0 L16,16 L14.5,16 L14.5,0 Z M3,3 L12,3 L12,7 L3,7 L3,3 Z M4,4 L4,6 L11,6 L11,4 L4,4 Z\r\n M0,9 L12,9 L12,13 L0,13 L0,9 Z M1,10 L1,12 L11,12 L11,10 L1,10 Z\" fill=\"#293040\"></path>\r\n</g>\r\n</svg>`\r\n\r\nexport const LIST_UNORDERED_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g fill=\"#293040\">\r\n <path d=\"M5,1 L16,1 L16,2.5 L5,2.5 L5,1 Z M2,4 C0.8954305,4 0,3.1045695 0,2 C0,0.8954305 0.8954305,0 2,0\r\n C3.1045695,0 4,0.8954305 4,2 C4,3.1045695 3.1045695,4 2,4 Z M2,3 C2.55228475,3 3,2.55228475 3,2 C3,1.44771525\r\n 2.55228475,1 2,1 C1.44771525,1 1,1.44771525 1,2 C1,2.55228475 1.44771525,3 2,3 Z M2,10 C0.8954305,10 0,9.1045695\r\n 0,8 C0,6.8954305 0.8954305,6 2,6 C3.1045695,6 4,6.8954305 4,8 C4,9.1045695 3.1045695,10 2,10 Z M2,9 C2.55228475,9\r\n 3,8.55228475 3,8 C3,7.44771525 2.55228475,7 2,7 C1.44771525,7 1,7.44771525 1,8 C1,8.55228475 1.44771525,9 2,9 Z\r\n M2,16 C0.8954305,16 0,15.1045695 0,14 C0,12.8954305 0.8954305,12 2,12 C3.1045695,12 4,12.8954305 4,14 C4,15.1045695\r\n 3.1045695,16 2,16 Z M2,15 C2.55228475,15 3,14.5522847 3,14 C3,13.4477153 2.55228475,13 2,13 C1.44771525,13 1,13.4477153\r\n 1,14 C1,14.5522847 1.44771525,15 2,15 Z M5,7 L16,7 L16,8.5 L5,8.5 L5,7 Z M5,13 L16,13 L16,14.5 L5,14.5 L5,13 Z\"></path>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const LIST_ORDERED_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g fill=\"#293040\">\r\n <path d=\"M5,1 L16,1 L16,2.5 L5,2.5 L5,1 Z M0,0 L2,0 L2,3 L3,3 L3,4 L0,4 L0,3 L1,3 L1,1 L0,1 L0,0 Z M5,7 L16,7\r\n L16,8.5 L5,8.5 L5,7 Z M5,13 L16,13 L16,14.5 L5,14.5 L5,13 Z M0,15 L1.75,15 C1.88807119,15 2,14.8880712 2,14.75\r\n C2,14.6119288 1.88807119,14.5 1.75,14.5 L0,14.5 L0,13.5 L1.75,13.5 C1.88807119,13.5 2,13.3880712 2,13.25 C2,13.1119288\r\n 1.88807119,13 1.75,13 L0,13 L0,12 L1.5,12 C2.32842712,12 3,12.6715729 3,13.5 C3,13.6753177 2.96992289,13.8436105\r\n 2.91464715,14 C2.96992289,14.1563895 3,14.3246823 3,14.5 C3,15.3284271 2.32842712,16 1.5,16 L0,16 L0,15 Z M2,7.5\r\n C2,7.35127258 1.9375,7.22627258 1.84375,7.13845444 C1.76307119,7.05596441 1.63807119,7 1.5,7 C1.22385763,7 1,7.22385763\r\n 1,7.5 L1.62630326e-19,7.5 C0.147399902,6.5 0.647399902,6 1.5,6 C2.32842712,6 3,6.67157288 3,7.5 C3,8.07312512\r\n 2.50016007,8.55650475 2.22821045,8.74661255 C1.95626083,8.93672035 1.77325955,8.99789088 1.76769962,9 L3,9 L3,10\r\n L0,10 L1.62630326e-19,9 C0.619515577,8.77257137 1.06188822,8.55939591 1.32711792,8.36047363 C1.6371448,8.12795347\r\n 1.87259637,7.91592701 1.96143498,7.69289356 C1.98627694,7.633537 2,7.5683711 2,7.5 Z\"></path>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const LIST_CHECK_ICON = `<svg width=\"15px\" height=\"14px\" viewBox=\"0 0 15 14\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-1058.000000, -97.000000)\">\r\n <g transform=\"translate(407.000000, 93.000000)\">\r\n <g transform=\"translate(650.000000, 2.000000)\">\r\n <rect x=\"0\" y=\"0\" width=\"16\" height=\"16\"></rect>\r\n <polygon fill=\"#293040\" fill-rule=\"nonzero\" points=\"14 15 14 9.37100497 15 9.37100497 15\r\n 16 1 16 1 2 10.1946467 2 10.1946467 3 2 3 2 15\"></polygon>\r\n <path d=\"M14.4525049,2.48740937 C14.7356009,2.1850362 15.8305911,3.21021745 15.5474951,3.51259063\r\n L8.45990379,11.0828057 L4.46558382,7.02621226 C4.17496481,6.73106236 4.17863783,6.25620283 4.47378774,5.96558382\r\n C4.76893764,5.67496481 5.24379717,5.67863783 5.53441618,5.97378774 L8.43263799,8.91719429 L14.4525049,2.48740937 Z\"\r\n fill=\"#293040\" fill-rule=\"nonzero\"></path>\r\n </g>\r\n </g>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const CODE_BLOCK_ICON = `<svg t=\"1565073788159\" class=\"icon\" viewBox=\"0 0 1024 1024\" width=\"16\" height=\"16\">\r\n<path d=\"M110.78 469.52l70.44-39.24A60 60 0 0 0 212 377.9L212 212a120 120 0 0 1 120-120l60 0a30\r\n30 0 0 1 0 60L332 152a60 60 0 0 0-59.99999999 60l0 175.38a120 120 0 0\r\n1-63.48000001 105.9L173.42 512l35.1 18.72A120 120 0 0 1 272 636.56L272.00000001 812a60 60 0 0 0 59.99999999 60l60 0a30 30\r\n0 1 1 0 60L332 932a120 120 0 0 1-120-120l0-165.9a60\r\n60 0 0 0-30.78-52.38l-70.44-39.24a45 45 0 0 1 0-84.96z m742.44 1e-8a45 45 0 0 1 0 84.95999998l-70.44 39.24000001a60\r\n60 0 0 0-30.78000001 52.38L751.99999999 812a120 120 0 0 1-119.99999999 120L572 932a30 30\r\n0 1 1 0-60l60 0a60 60 0 0 0 60-60l0-175.38a120 120\r\n0 0 1 63.48-105.9L790.58 512l-35.1-18.72A120 120 0 0 1 692 387.44L692 212a60 60 0 0 0-60-60L572 152a30\r\n30 0 0 1 0-60l60 0a120 120 0 0 1 119.99999999 120l0 165.9a60 60 0 0 0 30.78000001 52.38l70.44 39.24000001z\"></path></svg>`\r\n\r\nexport const BLOCKQUOTE_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(0.000000, 1.000000)\" fill=\"#000000\" fill-rule=\"nonzero\">\r\n <path d=\"M6.86733556,12.5574136 L6.86733556,7.99108138 L2.52931996,7.99108138 C2.41516165,5.02296544\r\n 3.10011148,3.42474916 5.72575251,2.0548495 L5.72575251,0 C1.84437012,1.36989967 -0.0963210702,3.88138239 0.0178372352,7.76276477\r\n L0.0178372352,12.5574136 L6.86733556,12.5574136 Z M16,12.5574136 L16,7.99108138 L11.6619844,7.99108138 C11.5478261,5.02296544\r\n 12.2327759,3.42474916 14.8584169,2.0548495 L14.8584169,0 C10.9770346,1.36989967 9.03634337,3.88138239 9.15050167,7.76276477\r\n L9.15050167,12.5574136 L16,12.5574136 Z\"></path>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const IMAGE_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-1196.000000, -96.000000)\" fill=\"#293040\" fill-rule=\"nonzero\">\r\n <g transform=\"translate(407.000000, 93.000000)\">\r\n <path d=\"M804,4 L790,4 L790,11.940983 L794.058237,9.91186456 L798.536534,13.3949845 L801.014076,11.908459\r\n L804,13.8990748 L804,4 Z M803.72265,14.9160251 L800.985924,13.091541 L798.463466,14.6050155 L793.941763,11.0881354\r\n L790.223607,12.9472136 C790.151699,12.9831673 790.07527,13.000168 790,13.0001094 L790,18 L804,18 L804,15.0000529\r\n C803.90455,15.0001406 803.80803,14.9729453 803.72265,14.9160251 Z M789,19 L789,3 L805,3 L805,19 L789,19 Z M801,9\r\n C800.447715,9 800,8.55228475 800,8 C800,7.44771525 800.447715,7 801,7 C801.552285,7 802,7.44771525 802,8 C802,8.55228475\r\n 801.552285,9 801,9 Z\"></path>\r\n </g>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const FILE_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" >\r\n<g id=\"icon/01\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path d=\"M16,16 L1,16 L1,0 L12,0 L16,4 L16,16 Z M11,1 L2,1 L2,15 L15,15 L15,\r\n 5 L11,5 L11,1 Z M12,1.533 L12,4 L14.52,4 L12,1.533 Z\"\r\n id=\"Combined-Shape\" fill=\"#293040\" fill-rule=\"nonzero\">\r\n </path>\r\n <polygon id=\"path\" fill=\"#293040\" points=\"8 8 6 8 8.5 5 11 8 9 8 9 12 8 12\"></polygon>\r\n</g>\r\n</svg>`\r\n\r\nexport const TABLE_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-1227.000000, -96.000000)\" fill=\"#293040\">\r\n <g transform=\"translate(407.000000, 93.000000)\">\r\n <path d=\"M820,3 L836,3 L836,19 L820,19 L820,3 Z M821,4 L821,8 L835,8 L835,4 L821,4 Z M821,9 L821,13 L825,\r\n 13 L825,9 L821,9 Z M821,14 L821,18 L825,18 L825,14 L821,14 Z M826,9 L826,13 L830,13 L830,9 L826,9 Z M826,\r\n 14 L826,18 L830,18 L830,14 L826,14 Z M831,9 L831,13 L835,13 L835,9 L831,9 Z M831,14 L831,18 L835,18 L835,\r\n 14 L831,14 Z\"></path>\r\n </g>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const LINK_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-1258.000000, -96.000000)\" fill=\"#293040\" fill-rule=\"nonzero\">\r\n <g transform=\"translate(407.000000, 93.000000)\">\r\n <path d=\"M855.499,13.863 L861.863,7.499 L862.573,8.209 L856.209,14.573 L855.499,13.863 Z M854.646498,9.99452063\r\n C854.661947,10.0108615 854.677673,10.0270363 854.693676,10.0430391 L855.388521,10.7378841 L852.802248,13.3241571\r\n C851.732584,14.3938208 851.732584,16.1280884 852.802248,17.1977522 C853.871912,18.2674159 855.606179,18.2674159\r\n 856.675843,17.1977522 L859.262116,14.6114792 L859.956961,15.3063242 C859.972964,15.3223269 859.989138,15.3380528\r\n 860.005479,15.3535018 L857.468863,17.8901187 C855.989021,19.3699604 853.589723,19.3699604 852.109881,17.8901187\r\n C850.63004,16.4102769 850.63004,14.0109793 852.109881,12.5311375 L854.646498,9.99452063 Z M857.994521,6.64649819\r\n L860.531137,4.10988134 C862.010979,2.63003955 864.410277,2.63003955 865.890119,4.10988134 C867.36996,5.58972313\r\n 867.36996,7.98902073 865.890119,9.46886252 L863.353502,12.0054794 C863.338053,11.9891385 863.322327,11.9729637\r\n 863.306324,11.9569609 L862.611479,11.2621159 L865.197752,8.67584293 C866.267416,7.60617918 866.267416,5.87191157\r\n 865.197752,4.80224782 C864.128088,3.73258406 862.393821,3.73258406 861.324157,4.80224782 L858.737884,7.38852082\r\n L858.043039,6.69367584 C858.027036,6.67767307 858.010862,6.66194719 857.994521,6.64649819 Z\"></path>\r\n </g>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const EMOJI_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path d=\"M8,16 C3.581722,16 0,12.418278 0,8 C0,3.581722 3.581722,0 8,0 C12.418278,0 16,3.581722 16,8 C16,12.418278\r\n 12.418278,16 8,16 Z M8,15 C11.8659932,15 15,11.8659932 15,8 C15,4.13400675 11.8659932,1 8,1 C4.13400675,1 1,4.13400675\r\n 1,8 C1,11.8659932 4.13400675,15 8,15 Z M5,7 C4.44771525,7 4,6.55228475 4,6 C4,5.44771525 4.44771525,5 5,5 C5.55228475,5\r\n 6,5.44771525 6,6 C6,6.55228475 5.55228475,7 5,7 Z M11,7 C10.4477153,7 10,6.55228475 10,6 C10,5.44771525 10.4477153,5 11,5\r\n C11.5522847,5 12,5.44771525 12,6 C12,6.55228475 11.5522847,7 11,7 Z M4,10 L12,10 C11.5415129,11.7252272 9.9244686,13 8,13\r\n C6.0755314,13 4.45848714,11.7252272 4,10 Z\" fill=\"#293040\"></path>\r\n</g>\r\n</svg>`\r\n\r\nexport const SCREENSHOT_ICON = `<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" version=\"1.1\">\r\n<g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(-1529.000000, -96.000000)\">\r\n <g transform=\"translate(1529.000000, 96.000000)\">\r\n <rect fill=\"#000000\" fill-rule=\"nonzero\" opacity=\"0\" x=\"0\" y=\"0\" width=\"16\" height=\"16\"></rect>\r\n <polyline stroke=\"currentColor\" points=\"16 14 2 14 2 0 2 0\"></polyline>\r\n <polyline stroke=\"currentColor\" points=\"4 2 14 2 14 12\"></polyline>\r\n <rect fill=\"currentColor\" x=\"0\" y=\"1.5\" width=\"2\" height=\"1\"></rect>\r\n <rect fill=\"currentColor\"\r\n transform=\"translate(14.000000, 15.000000)\r\n rotate(-90.000000)\r\n translate(-14.000000, -15.000000) \" x=\"13\" y=\"14.5\" width=\"2\" height=\"1\">\r\n </rect>\r\n </g>\r\n </g>\r\n</g>\r\n</svg>`\r\n\r\nexport const CODE_ICON = `<svg t=\"1721956397010\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"4254\" width=\"20\" height=\"20\"><path d=\"M438.4 849.1l222.7-646.7c0.2-0.5 0.3-1.1 0.4-1.6L438.4 849.1z\" opacity=\".224\" p-id=\"4255\"></path><path d=\"M661.2 168.7h-67.5c-3.4 0-6.5 2.2-7.6 5.4L354.7 846c-0.3 0.8-0.4 1.7-0.4 2.6 0 4.4 3.6 8 8 8h67.8c3.4 0 6.5-2.2 7.6-5.4l0.7-2.1 223.1-648.3 7.4-21.4c0.3-0.8 0.4-1.7 0.4-2.6-0.1-4.5-3.6-8.1-8.1-8.1zM954.6 502.1c-0.8-1-1.7-1.9-2.7-2.7l-219-171.3c-3.5-2.7-8.5-2.1-11.2 1.4-1.1 1.4-1.7 3.1-1.7 4.9v81.3c0 2.5 1.1 4.8 3.1 6.3l115 90-115 90c-1.9 1.5-3.1 3.8-3.1 6.3v81.3c0 4.4 3.6 8 8 8 1.8 0 3.5-0.6 4.9-1.7l219-171.3c6.9-5.4 8.2-15.5 2.7-22.5zM291.1 328.1l-219 171.3c-1 0.8-1.9 1.7-2.7 2.7-5.4 7-4.2 17 2.7 22.5l219 171.3c1.4 1.1 3.1 1.7 4.9 1.7 4.4 0 8-3.6 8-8v-81.3c0-2.5-1.1-4.8-3.1-6.3l-115-90 115-90c1.9-1.5 3.1-3.8 3.1-6.3v-81.3c0-1.8-0.6-3.5-1.7-4.9-2.7-3.5-7.7-4.1-11.2-1.4z\" p-id=\"4256\"></path></svg>`\r\n\r\nexport const MENTION_ICON = `<i class=\"icon-set-keyword\"></i>`\r\n\r\nexport const QUICK_MENU_ICON = `<i class=\"icon-publish\"></i>`\r\n\r\nexport const SAVE_ICON = `<i class=\"icon-save\"></i>`\r\n\r\nexport const HELP_ICON = `<svg t=\"1721963829631\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"9764\" width=\"20\" height=\"20\"><path d=\"M512 74.666667C270.933333 74.666667 74.666667 270.933333 74.666667 512S270.933333 949.333333 512 949.333333 949.333333 753.066667 949.333333 512 753.066667 74.666667 512 74.666667z m0 810.666666c-204.8 0-373.333333-168.533333-373.333333-373.333333S307.2 138.666667 512 138.666667 885.333333 307.2 885.333333 512 716.8 885.333333 512 885.333333z\" fill=\"#000000\" p-id=\"9765\"></path><path d=\"M512 746.666667m-42.666667 0a42.666667 42.666667 0 1 0 85.333334 0 42.666667 42.666667 0 1 0-85.333334 0Z\" fill=\"#000000\" p-id=\"9766\"></path><path d=\"M512 245.333333c-76.8 0-138.666667 61.866667-138.666667 138.666667 0 17.066667 14.933333 32 32 32s32-14.933333 32-32c0-40.533333 34.133333-74.666667 74.666667-74.666667s74.666667 34.133333 74.666667 74.666667c0 27.733333-53.333333 76.8-91.733334 100.266667-8.533333 6.4-14.933333 17.066667-14.933333 27.733333v106.666667c0 17.066667 14.933333 32 32 32s32-14.933333 32-32v-89.6c34.133333-25.6 106.666667-83.2 106.666667-145.066667 0-76.8-61.866667-138.666667-138.666667-138.666667z\" fill=\"#000000\" p-id=\"9767\"></path></svg>`\r\n\r\nexport const SCROLL_TABLE_ICON = `<i class=\"icon-switch\"></i>`\r\n\r\nexport const GLOBAL_LINK_ICON = `<svg t=\"1721963743677\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"8628\" width=\"20\" height=\"20\"><path d=\"M713.130667 283.221333V228.352a9.159111 9.159111 0 0 0-9.130667-9.130667H265.102222a9.159111 9.159111 0 0 0-9.102222 9.130667v54.869333c0 5.034667 4.096 9.130667 9.130667 9.130667H704a9.159111 9.159111 0 0 0 9.130667-9.130667z m-448 100.579556a9.130667 9.130667 0 0 0-9.130667 9.130667v54.869333c0 5.006222 4.096 9.130667 9.130667 9.130667h210.289777a9.159111 9.159111 0 0 0 9.159112-9.130667v-54.869333a9.159111 9.159111 0 0 0-9.159112-9.130667H265.130667z m164.579555 516.551111H164.579556V95.800889h640v279.352889c0 5.034667 4.096 9.159111 9.130666 9.159111h64a9.159111 9.159111 0 0 0 9.130667-9.159111V50.090667c0-20.252444-16.327111-36.579556-36.551111-36.579556H118.840889c-20.195556 0-36.551111 16.327111-36.551111 36.579556v896c0 20.195556 16.327111 36.551111 36.551111 36.551111h310.869333a9.159111 9.159111 0 0 0 9.130667-9.130667v-64a9.159111 9.159111 0 0 0-9.130667-9.159111z\" fill=\"#000000\" fill-opacity=\".85\" p-id=\"8629\"></path><path d=\"M837.859556 656.298667l-107.861334 186.794666-68.977778-39.822222 107.861334-186.794667 68.977778 39.822223z\" fill=\"#000000\" p-id=\"8630\"></path><path d=\"M691.114667 514.844444a159.146667 159.146667 0 0 1 217.315555-58.225777 159.061333 159.061333 0 0 1 58.197334 217.315555l-55.637334 96.369778-68.977778-39.822222 55.637334-96.369778a79.416889 79.416889 0 1 0-137.557334-79.416889l-55.637333 96.369778-68.977778-39.822222 55.637334-96.369778V514.844444z m-28.558223 208.782223l-56.462222 97.792a79.416889 79.416889 0 0 0 137.557334 79.388444l56.462222-97.763555 68.977778 39.822222-56.462223 97.763555a159.061333 159.061333 0 1 1-275.484444-159.061333l56.433778-97.763556 68.977777 39.822223z\" fill=\"#000000\" p-id=\"8631\"></path></svg>`\r\n\r\nexport const FULLSCREEN_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon\" width=\"100%\" height=\"100%\" viewBox=\"0 0 1024 1024\" version=\"1.1\">\r\n <path fill=\"#333333\" d=\"M64 384h96V160h224.2V64H64zM639.8 64v96H864v224h96V64zM864 864H639.8v96H960V639.61h-96zM160 639.61H64V960h320.2v-96H160z\"/>\r\n</svg>`\r\n\r\nexport const FULLSCREEN_EXIT_ICON = `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\">\r\n <path fill=\"currentColor\" d=\"M6 21v-3H3v-2h5v5zm10 0v-5h5v2h-3v3zM3 8V6h3V3h2v5zm13 0V3h2v3h3v2z\"/>\r\n </svg>\r\n`\r\n\r\nexport const TRIANGLE_DOWN_ICON = `<i class=\"icon-triangle-down\"></i>`\r\n\r\nexport const FORMAT_PAINTER_ICON = `<svg viewBox=\"0 0 32 32\"><path fill=\"currentColor\" d=\"M28.83 23.17L23 17.33V13a1 1 0 0 0-.29-.71l-10-10a1 1 0 0 0-1.42 0l-9 9a1 1 0 0 0 0 1.42l10 10A1 1 0 0 0 13 23h4.34l5.83 5.84a4 4 0 0 0 5.66-5.66ZM6 10.41l2.29 2.3l1.42-1.42L7.41 9L9 7.41l4.29 4.3l1.42-1.42L10.41 6L12 4.41L18.59 11L11 18.59L4.41 12Zm21.41 17a2 2 0 0 1-2.82 0l-6.13-6.12a1.8 1.8 0 0 0-.71-.29h-4.34l-1-1L20 12.41l1 1v4.34a1 1 0 0 0 .29.7l6.12 6.14a2 2 0 0 1 0 2.82\"/></svg>`\r\n\r\nexport const DIVIDER_ICON = `<svg viewBox=\"0 0 18 18\"><line x1=\"0\" y1=\"9\" x2=\"18\" y2=\"9\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>`\r\n"],"names":[],"mappings":";;AAAO,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASlB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASlB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYnB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAalB,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASpB,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASvB,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAapB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASnB,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW9B,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAOxB,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ1B,MAAM,qBAAqB;AAE3B,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe5B,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiB1B,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBxB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWxB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYxB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAenB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUlB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAanB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBlB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWnB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBxB,MAAM,YAAY;AAElB,MAAM,eAAe;AAErB,MAAM,kBAAkB;AAExB,MAAM,YAAY;AAElB,MAAM,YAAY;AAElB,MAAM,oBAAoB;AAE1B,MAAM,mBAAmB;AAEzB,MAAM,kBAAkB;AAAA;AAAA;AAIxB,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAM7B,MAAM,qBAAqB;AAE3B,MAAM,sBAAsB;AAE5B,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"debounce.cjs.js","sources":["../../../src/utils/debounce.ts"],"sourcesContent":["import { isObject } from './is'\nimport { root } from './method'\n\nexport function debounce(func, wait, options = undefined) {\n let lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime\n\n let lastInvokeTime = 0\n let leading = false\n let maxing = false\n let trailing = true\n\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\n const useRAF = (!wait && wait !== 0 && typeof root.requestAnimationFrame === 'function')\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function')\n }\n wait = +wait || 0\n if (isObject(options)) {\n leading = !!options.leading\n maxing = 'maxWait' in options\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait\n trailing = 'trailing' in options ? !!options.trailing : trailing\n }\n\n function invokeFunc(time) {\n const args = lastArgs\n const thisArg = lastThis\n\n lastArgs = lastThis = undefined\n lastInvokeTime = time\n result = func.apply(thisArg, args)\n return result\n }\n\n function startTimer(pendingFunc, wait) {\n if (useRAF) {\n root.cancelAnimationFrame(timerId)\n return root.requestAnimationFrame(pendingFunc)\n }\n return setTimeout(pendingFunc, wait)\n }\n\n function cancelTimer(id) {\n if (useRAF) {\n return root.cancelAnimationFrame(id)\n }\n clearTimeout(id)\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time\n // Start the timer for the trailing edge.\n timerId = startTimer(timerExpired, wait)\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result\n }\n\n function remainingWait(time) {\n const timeSinceLastCall = time - lastCallTime\n const timeSinceLastInvoke = time - lastInvokeTime\n const timeWaiting = wait - timeSinceLastCall\n\n return maxing\n ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting\n }\n\n function shouldInvoke(time) {\n const timeSinceLastCall = time - lastCallTime\n const timeSinceLastInvoke = time - lastInvokeTime\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait)\n || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait))\n }\n\n function timerExpired() {\n const time = Date.now()\n if (shouldInvoke(time)) {\n return trailingEdge(time)\n }\n // Restart the timer.\n timerId = startTimer(timerExpired, remainingWait(time))\n }\n\n function trailingEdge(time) {\n timerId = undefined\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time)\n }\n lastArgs = lastThis = undefined\n return result\n }\n\n function cancel() {\n if (timerId !== undefined) {\n cancelTimer(timerId)\n }\n lastInvokeTime = 0\n lastArgs = lastCallTime = lastThis = timerId = undefined\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now())\n }\n\n function pending() {\n return timerId !== undefined\n }\n\n function debounced(...args) {\n const time = Date.now()\n const isInvoking = shouldInvoke(time)\n\n lastArgs = args\n lastThis = this\n lastCallTime = time\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime)\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = startTimer(timerExpired, wait)\n return invokeFunc(lastCallTime)\n }\n }\n if (timerId === undefined) {\n timerId = startTimer(timerExpired, wait)\n }\n return result\n }\n debounced.cancel = cancel\n debounced.flush = flush\n debounced.pending = pending\n return debounced\n}\n"],"names":["root","isObject","wait"],"mappings":"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"}
1
+ {"version":3,"file":"debounce.cjs.js","sources":["../../../src/utils/debounce.ts"],"sourcesContent":["import { isObject } from './is'\r\nimport { root } from './method'\r\n\r\nexport function debounce(func, wait, options = undefined) {\r\n let lastArgs,\r\n lastThis,\r\n maxWait,\r\n result,\r\n timerId,\r\n lastCallTime\r\n\r\n let lastInvokeTime = 0\r\n let leading = false\r\n let maxing = false\r\n let trailing = true\r\n\r\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\r\n const useRAF = (!wait && wait !== 0 && typeof root.requestAnimationFrame === 'function')\r\n\r\n if (typeof func !== 'function') {\r\n throw new TypeError('Expected a function')\r\n }\r\n wait = +wait || 0\r\n if (isObject(options)) {\r\n leading = !!options.leading\r\n maxing = 'maxWait' in options\r\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait\r\n trailing = 'trailing' in options ? !!options.trailing : trailing\r\n }\r\n\r\n function invokeFunc(time) {\r\n const args = lastArgs\r\n const thisArg = lastThis\r\n\r\n lastArgs = lastThis = undefined\r\n lastInvokeTime = time\r\n result = func.apply(thisArg, args)\r\n return result\r\n }\r\n\r\n function startTimer(pendingFunc, wait) {\r\n if (useRAF) {\r\n root.cancelAnimationFrame(timerId)\r\n return root.requestAnimationFrame(pendingFunc)\r\n }\r\n return setTimeout(pendingFunc, wait)\r\n }\r\n\r\n function cancelTimer(id) {\r\n if (useRAF) {\r\n return root.cancelAnimationFrame(id)\r\n }\r\n clearTimeout(id)\r\n }\r\n\r\n function leadingEdge(time) {\r\n // Reset any `maxWait` timer.\r\n lastInvokeTime = time\r\n // Start the timer for the trailing edge.\r\n timerId = startTimer(timerExpired, wait)\r\n // Invoke the leading edge.\r\n return leading ? invokeFunc(time) : result\r\n }\r\n\r\n function remainingWait(time) {\r\n const timeSinceLastCall = time - lastCallTime\r\n const timeSinceLastInvoke = time - lastInvokeTime\r\n const timeWaiting = wait - timeSinceLastCall\r\n\r\n return maxing\r\n ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke)\r\n : timeWaiting\r\n }\r\n\r\n function shouldInvoke(time) {\r\n const timeSinceLastCall = time - lastCallTime\r\n const timeSinceLastInvoke = time - lastInvokeTime\r\n\r\n // Either this is the first call, activity has stopped and we're at the\r\n // trailing edge, the system time has gone backwards and we're treating\r\n // it as the trailing edge, or we've hit the `maxWait` limit.\r\n return (lastCallTime === undefined || (timeSinceLastCall >= wait)\r\n || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait))\r\n }\r\n\r\n function timerExpired() {\r\n const time = Date.now()\r\n if (shouldInvoke(time)) {\r\n return trailingEdge(time)\r\n }\r\n // Restart the timer.\r\n timerId = startTimer(timerExpired, remainingWait(time))\r\n }\r\n\r\n function trailingEdge(time) {\r\n timerId = undefined\r\n\r\n // Only invoke if we have `lastArgs` which means `func` has been\r\n // debounced at least once.\r\n if (trailing && lastArgs) {\r\n return invokeFunc(time)\r\n }\r\n lastArgs = lastThis = undefined\r\n return result\r\n }\r\n\r\n function cancel() {\r\n if (timerId !== undefined) {\r\n cancelTimer(timerId)\r\n }\r\n lastInvokeTime = 0\r\n lastArgs = lastCallTime = lastThis = timerId = undefined\r\n }\r\n\r\n function flush() {\r\n return timerId === undefined ? result : trailingEdge(Date.now())\r\n }\r\n\r\n function pending() {\r\n return timerId !== undefined\r\n }\r\n\r\n function debounced(...args) {\r\n const time = Date.now()\r\n const isInvoking = shouldInvoke(time)\r\n\r\n lastArgs = args\r\n lastThis = this\r\n lastCallTime = time\r\n\r\n if (isInvoking) {\r\n if (timerId === undefined) {\r\n return leadingEdge(lastCallTime)\r\n }\r\n if (maxing) {\r\n // Handle invocations in a tight loop.\r\n timerId = startTimer(timerExpired, wait)\r\n return invokeFunc(lastCallTime)\r\n }\r\n }\r\n if (timerId === undefined) {\r\n timerId = startTimer(timerExpired, wait)\r\n }\r\n return result\r\n }\r\n debounced.cancel = cancel\r\n debounced.flush = flush\r\n debounced.pending = pending\r\n return debounced\r\n}\r\n"],"names":["root","isObject","wait"],"mappings":"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"}