@milkdown/crepe 7.19.2 → 7.21.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 (209) hide show
  1. package/lib/cjs/builder.js +44 -1
  2. package/lib/cjs/builder.js.map +1 -1
  3. package/lib/cjs/feature/ai/index.js +1492 -0
  4. package/lib/cjs/feature/ai/index.js.map +1 -0
  5. package/lib/cjs/feature/block-edit/index.js +9 -2
  6. package/lib/cjs/feature/block-edit/index.js.map +1 -1
  7. package/lib/cjs/feature/code-mirror/index.js +2 -0
  8. package/lib/cjs/feature/code-mirror/index.js.map +1 -1
  9. package/lib/cjs/feature/cursor/index.js +2 -0
  10. package/lib/cjs/feature/cursor/index.js.map +1 -1
  11. package/lib/cjs/feature/image-block/index.js +5 -1
  12. package/lib/cjs/feature/image-block/index.js.map +1 -1
  13. package/lib/cjs/feature/latex/index.js +7 -0
  14. package/lib/cjs/feature/latex/index.js.map +1 -1
  15. package/lib/cjs/feature/link-tooltip/index.js +2 -0
  16. package/lib/cjs/feature/link-tooltip/index.js.map +1 -1
  17. package/lib/cjs/feature/list-item/index.js +2 -0
  18. package/lib/cjs/feature/list-item/index.js.map +1 -1
  19. package/lib/cjs/feature/placeholder/index.js +2 -0
  20. package/lib/cjs/feature/placeholder/index.js.map +1 -1
  21. package/lib/cjs/feature/table/index.js +2 -0
  22. package/lib/cjs/feature/table/index.js.map +1 -1
  23. package/lib/cjs/feature/toolbar/index.js +497 -5
  24. package/lib/cjs/feature/toolbar/index.js.map +1 -1
  25. package/lib/cjs/feature/top-bar/index.js +791 -0
  26. package/lib/cjs/feature/top-bar/index.js.map +1 -0
  27. package/lib/cjs/index.js +2047 -160
  28. package/lib/cjs/index.js.map +1 -1
  29. package/lib/cjs/llm-providers/anthropic/index.js +147 -0
  30. package/lib/cjs/llm-providers/anthropic/index.js.map +1 -0
  31. package/lib/cjs/llm-providers/openai/index.js +138 -0
  32. package/lib/cjs/llm-providers/openai/index.js.map +1 -0
  33. package/lib/esm/builder.js +44 -1
  34. package/lib/esm/builder.js.map +1 -1
  35. package/lib/esm/feature/ai/index.js +1487 -0
  36. package/lib/esm/feature/ai/index.js.map +1 -0
  37. package/lib/esm/feature/block-edit/index.js +9 -2
  38. package/lib/esm/feature/block-edit/index.js.map +1 -1
  39. package/lib/esm/feature/code-mirror/index.js +2 -0
  40. package/lib/esm/feature/code-mirror/index.js.map +1 -1
  41. package/lib/esm/feature/cursor/index.js +2 -0
  42. package/lib/esm/feature/cursor/index.js.map +1 -1
  43. package/lib/esm/feature/image-block/index.js +5 -1
  44. package/lib/esm/feature/image-block/index.js.map +1 -1
  45. package/lib/esm/feature/latex/index.js +7 -0
  46. package/lib/esm/feature/latex/index.js.map +1 -1
  47. package/lib/esm/feature/link-tooltip/index.js +2 -0
  48. package/lib/esm/feature/link-tooltip/index.js.map +1 -1
  49. package/lib/esm/feature/list-item/index.js +2 -0
  50. package/lib/esm/feature/list-item/index.js.map +1 -1
  51. package/lib/esm/feature/placeholder/index.js +2 -0
  52. package/lib/esm/feature/placeholder/index.js.map +1 -1
  53. package/lib/esm/feature/table/index.js +2 -0
  54. package/lib/esm/feature/table/index.js.map +1 -1
  55. package/lib/esm/feature/toolbar/index.js +499 -7
  56. package/lib/esm/feature/toolbar/index.js.map +1 -1
  57. package/lib/esm/feature/top-bar/index.js +789 -0
  58. package/lib/esm/feature/top-bar/index.js.map +1 -0
  59. package/lib/esm/index.js +2040 -153
  60. package/lib/esm/index.js.map +1 -1
  61. package/lib/esm/llm-providers/anthropic/index.js +145 -0
  62. package/lib/esm/llm-providers/anthropic/index.js.map +1 -0
  63. package/lib/esm/llm-providers/openai/index.js +136 -0
  64. package/lib/esm/llm-providers/openai/index.js.map +1 -0
  65. package/lib/theme/common/ai.css +446 -0
  66. package/lib/theme/common/code-mirror.css +14 -0
  67. package/lib/theme/common/diff.css +177 -0
  68. package/lib/theme/common/style.css +3 -0
  69. package/lib/theme/common/top-bar.css +152 -0
  70. package/lib/tsconfig.tsbuildinfo +1 -1
  71. package/lib/types/core/builder.d.ts +2 -1
  72. package/lib/types/core/builder.d.ts.map +1 -1
  73. package/lib/types/feature/ai/ai.spec.d.ts +2 -0
  74. package/lib/types/feature/ai/ai.spec.d.ts.map +1 -0
  75. package/lib/types/feature/ai/commands.d.ts +24 -0
  76. package/lib/types/feature/ai/commands.d.ts.map +1 -0
  77. package/lib/types/feature/ai/context.d.ts +4 -0
  78. package/lib/types/feature/ai/context.d.ts.map +1 -0
  79. package/lib/types/feature/ai/diff-actions/index.d.ts +12 -0
  80. package/lib/types/feature/ai/diff-actions/index.d.ts.map +1 -0
  81. package/lib/types/feature/ai/diff-actions/view.d.ts +21 -0
  82. package/lib/types/feature/ai/diff-actions/view.d.ts.map +1 -0
  83. package/lib/types/feature/ai/index.d.ts +7 -0
  84. package/lib/types/feature/ai/index.d.ts.map +1 -0
  85. package/lib/types/feature/ai/instruction-tooltip/component.d.ts +26 -0
  86. package/lib/types/feature/ai/instruction-tooltip/component.d.ts.map +1 -0
  87. package/lib/types/feature/ai/instruction-tooltip/index.d.ts +17 -0
  88. package/lib/types/feature/ai/instruction-tooltip/index.d.ts.map +1 -0
  89. package/lib/types/feature/ai/instruction-tooltip/suggestions.d.ts +50 -0
  90. package/lib/types/feature/ai/instruction-tooltip/suggestions.d.ts.map +1 -0
  91. package/lib/types/feature/ai/instruction-tooltip/view.d.ts +19 -0
  92. package/lib/types/feature/ai/instruction-tooltip/view.d.ts.map +1 -0
  93. package/lib/types/feature/ai/streaming-indicator.d.ts +9 -0
  94. package/lib/types/feature/ai/streaming-indicator.d.ts.map +1 -0
  95. package/lib/types/feature/ai/types.d.ts +58 -0
  96. package/lib/types/feature/ai/types.d.ts.map +1 -0
  97. package/lib/types/feature/block-edit/handle/component.d.ts.map +1 -1
  98. package/lib/types/feature/block-edit/menu/component.d.ts.map +1 -1
  99. package/lib/types/feature/image-block/index.d.ts +2 -0
  100. package/lib/types/feature/image-block/index.d.ts.map +1 -1
  101. package/lib/types/feature/index.d.ts +7 -1
  102. package/lib/types/feature/index.d.ts.map +1 -1
  103. package/lib/types/feature/latex/inline-tooltip/component.d.ts.map +1 -1
  104. package/lib/types/feature/latex/inline-tooltip/inline-tooltip.spec.d.ts +2 -0
  105. package/lib/types/feature/latex/inline-tooltip/inline-tooltip.spec.d.ts.map +1 -0
  106. package/lib/types/feature/latex/inline-tooltip/view.d.ts.map +1 -1
  107. package/lib/types/feature/loader.d.ts.map +1 -1
  108. package/lib/types/feature/toolbar/component.d.ts.map +1 -1
  109. package/lib/types/feature/toolbar/config.d.ts +1 -1
  110. package/lib/types/feature/toolbar/config.d.ts.map +1 -1
  111. package/lib/types/feature/toolbar/index.d.ts +1 -0
  112. package/lib/types/feature/toolbar/index.d.ts.map +1 -1
  113. package/lib/types/feature/top-bar/component.d.ts +11 -0
  114. package/lib/types/feature/top-bar/component.d.ts.map +1 -0
  115. package/lib/types/feature/top-bar/config.d.ts +34 -0
  116. package/lib/types/feature/top-bar/config.d.ts.map +1 -0
  117. package/lib/types/feature/top-bar/index.d.ts +26 -0
  118. package/lib/types/feature/top-bar/index.d.ts.map +1 -0
  119. package/lib/types/icons/ai.d.ts +2 -0
  120. package/lib/types/icons/ai.d.ts.map +1 -0
  121. package/lib/types/icons/chevron-left.d.ts +2 -0
  122. package/lib/types/icons/chevron-left.d.ts.map +1 -0
  123. package/lib/types/icons/chevron-right.d.ts +2 -0
  124. package/lib/types/icons/chevron-right.d.ts.map +1 -0
  125. package/lib/types/icons/code-block.d.ts +2 -0
  126. package/lib/types/icons/code-block.d.ts.map +1 -0
  127. package/lib/types/icons/enter-key.d.ts +2 -0
  128. package/lib/types/icons/enter-key.d.ts.map +1 -0
  129. package/lib/types/icons/grammar-check.d.ts +2 -0
  130. package/lib/types/icons/grammar-check.d.ts.map +1 -0
  131. package/lib/types/icons/index.d.ts +12 -0
  132. package/lib/types/icons/index.d.ts.map +1 -1
  133. package/lib/types/icons/longer.d.ts +2 -0
  134. package/lib/types/icons/longer.d.ts.map +1 -0
  135. package/lib/types/icons/retry.d.ts +2 -0
  136. package/lib/types/icons/retry.d.ts.map +1 -0
  137. package/lib/types/icons/send-prompt.d.ts +2 -0
  138. package/lib/types/icons/send-prompt.d.ts.map +1 -0
  139. package/lib/types/icons/send.d.ts +2 -0
  140. package/lib/types/icons/send.d.ts.map +1 -0
  141. package/lib/types/icons/shorter.d.ts +2 -0
  142. package/lib/types/icons/shorter.d.ts.map +1 -0
  143. package/lib/types/icons/translate.d.ts +2 -0
  144. package/lib/types/icons/translate.d.ts.map +1 -0
  145. package/lib/types/llm-providers/anthropic/index.d.ts +21 -0
  146. package/lib/types/llm-providers/anthropic/index.d.ts.map +1 -0
  147. package/lib/types/llm-providers/openai/index.d.ts +15 -0
  148. package/lib/types/llm-providers/openai/index.d.ts.map +1 -0
  149. package/lib/types/llm-providers/providers.spec.d.ts +2 -0
  150. package/lib/types/llm-providers/providers.spec.d.ts.map +1 -0
  151. package/lib/types/llm-providers/shared.d.ts +16 -0
  152. package/lib/types/llm-providers/shared.d.ts.map +1 -0
  153. package/lib/types/utils/group-builder.d.ts +1 -1
  154. package/lib/types/utils/group-builder.d.ts.map +1 -1
  155. package/lib/types/utils/keep-alive.d.ts +2 -0
  156. package/lib/types/utils/keep-alive.d.ts.map +1 -0
  157. package/package.json +34 -13
  158. package/src/core/builder.ts +39 -2
  159. package/src/feature/ai/ai.spec.ts +742 -0
  160. package/src/feature/ai/commands.ts +257 -0
  161. package/src/feature/ai/context.ts +45 -0
  162. package/src/feature/ai/diff-actions/index.ts +95 -0
  163. package/src/feature/ai/diff-actions/view.ts +237 -0
  164. package/src/feature/ai/index.ts +118 -0
  165. package/src/feature/ai/instruction-tooltip/component.tsx +414 -0
  166. package/src/feature/ai/instruction-tooltip/index.ts +101 -0
  167. package/src/feature/ai/instruction-tooltip/suggestions.ts +249 -0
  168. package/src/feature/ai/instruction-tooltip/view.ts +159 -0
  169. package/src/feature/ai/streaming-indicator.ts +183 -0
  170. package/src/feature/ai/types.ts +178 -0
  171. package/src/feature/block-edit/handle/component.tsx +3 -2
  172. package/src/feature/block-edit/menu/component.tsx +3 -2
  173. package/src/feature/block-edit/menu/config.ts +1 -1
  174. package/src/feature/image-block/index.ts +4 -0
  175. package/src/feature/index.ts +14 -2
  176. package/src/feature/latex/inline-tooltip/component.tsx +4 -2
  177. package/src/feature/latex/inline-tooltip/inline-tooltip.spec.ts +81 -0
  178. package/src/feature/latex/inline-tooltip/view.ts +2 -0
  179. package/src/feature/loader.ts +8 -0
  180. package/src/feature/toolbar/component.tsx +7 -5
  181. package/src/feature/toolbar/config.ts +27 -1
  182. package/src/feature/toolbar/index.ts +1 -0
  183. package/src/feature/top-bar/component.tsx +198 -0
  184. package/src/feature/top-bar/config.ts +367 -0
  185. package/src/feature/top-bar/index.ts +113 -0
  186. package/src/icons/ai.ts +14 -0
  187. package/src/icons/chevron-left.ts +15 -0
  188. package/src/icons/chevron-right.ts +15 -0
  189. package/src/icons/code-block.ts +12 -0
  190. package/src/icons/enter-key.ts +13 -0
  191. package/src/icons/grammar-check.ts +13 -0
  192. package/src/icons/index.ts +12 -0
  193. package/src/icons/longer.ts +13 -0
  194. package/src/icons/retry.ts +13 -0
  195. package/src/icons/send-prompt.ts +13 -0
  196. package/src/icons/send.ts +13 -0
  197. package/src/icons/shorter.ts +13 -0
  198. package/src/icons/translate.ts +13 -0
  199. package/src/llm-providers/anthropic/index.ts +132 -0
  200. package/src/llm-providers/openai/index.ts +109 -0
  201. package/src/llm-providers/providers.spec.ts +472 -0
  202. package/src/llm-providers/shared.ts +160 -0
  203. package/src/theme/common/ai.css +430 -0
  204. package/src/theme/common/code-mirror.css +14 -0
  205. package/src/theme/common/diff.css +196 -0
  206. package/src/theme/common/style.css +3 -0
  207. package/src/theme/common/top-bar.css +156 -0
  208. package/src/utils/group-builder.ts +1 -1
  209. package/src/utils/keep-alive.ts +3 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/feature/index.ts","../../src/icons/align-center.ts","../../src/icons/align-left.ts","../../src/icons/align-right.ts","../../src/icons/bold.ts","../../src/icons/bullet.ts","../../src/icons/bullet-list.ts","../../src/icons/caption.ts","../../src/icons/check-box-checked.ts","../../src/icons/check-box-unchecked.ts","../../src/icons/chevron-down.ts","../../src/icons/clear.ts","../../src/icons/code.ts","../../src/icons/confirm.ts","../../src/icons/copy.ts","../../src/icons/divider.ts","../../src/icons/drag-handle.ts","../../src/icons/edit.ts","../../src/icons/h1.ts","../../src/icons/h2.ts","../../src/icons/h3.ts","../../src/icons/h4.ts","../../src/icons/h5.ts","../../src/icons/h6.ts","../../src/icons/image.ts","../../src/icons/italic.ts","../../src/icons/link.ts","../../src/icons/menu.ts","../../src/icons/ordered-list.ts","../../src/icons/plus.ts","../../src/icons/quote.ts","../../src/icons/remove.ts","../../src/icons/search.ts","../../src/icons/strikethrough.ts","../../src/icons/table.ts","../../src/icons/text.ts","../../src/icons/todo-list.ts","../../src/icons/functions.ts","../../src/icons/visibility-off.ts","../../src/default-config/index.ts","../../src/core/slice.ts","../../src/utils/checker.ts","../../src/utils/group-builder.ts","../../src/feature/block-edit/menu/config.ts","../../src/feature/block-edit/menu/component.tsx","../../src/feature/block-edit/menu/index.ts","../../src/feature/block-edit/handle/component.tsx","../../src/feature/block-edit/handle/index.ts","../../src/feature/block-edit/index.ts","../../src/feature/code-mirror/index.ts","../../src/feature/cursor/index.ts","../../src/feature/image-block/index.ts","../../src/feature/latex/block-latex.ts","../../src/feature/latex/inline-latex.ts","../../src/feature/latex/command.ts","../../src/feature/latex/inline-tooltip/tooltip.ts","../../src/feature/latex/inline-tooltip/component.tsx","../../src/feature/latex/inline-tooltip/view.ts","../../src/feature/latex/input-rule.ts","../../src/feature/latex/remark.ts","../../src/feature/latex/index.ts","../../src/feature/link-tooltip/index.ts","../../src/feature/list-item/index.ts","../../src/feature/placeholder/index.ts","../../src/feature/table/index.ts","../../src/feature/toolbar/config.ts","../../src/feature/toolbar/component.tsx","../../src/feature/toolbar/index.ts","../../src/feature/loader.ts","../../src/core/builder.ts","../../src/core/crepe.ts"],"sourcesContent":["import type { BlockEditFeatureConfig } from './block-edit'\nimport type { CodeMirrorFeatureConfig } from './code-mirror'\nimport type { CursorFeatureConfig } from './cursor'\nimport type { ImageBlockFeatureConfig } from './image-block'\nimport type { LatexFeatureConfig } from './latex'\nimport type { LinkTooltipFeatureConfig } from './link-tooltip'\nimport type { ListItemFeatureConfig } from './list-item'\nimport type { PlaceholderFeatureConfig } from './placeholder'\nimport type { TableFeatureConfig } from './table'\nimport type { ToolbarFeatureConfig } from './toolbar'\n\n/// The crepe editor feature flags.\n/// Every feature is enabled by default.\n/// Every feature is a string literal type.\nexport enum CrepeFeature {\n /// Syntax highlighting and editing for code blocks with language support, theme customization, and preview capabilities.\n CodeMirror = 'code-mirror',\n\n /// Support for bullet lists, ordered lists, and todo lists with customizable icons and formatting.\n ListItem = 'list-item',\n\n /// Enhanced link editing and preview with customizable tooltips, edit/remove actions, and copy functionality.\n LinkTooltip = 'link-tooltip',\n\n /// Enhanced cursor experience with drop cursor and gap cursor for better content placement.\n Cursor = 'cursor',\n\n /// Image upload and management with resizing, captions, and support for both inline and block images.\n ImageBlock = 'image-block',\n\n /// Drag-and-drop block management and slash commands for quick content insertion and organization.\n BlockEdit = 'block-edit',\n\n /// Formatting toolbar for selected text with customizable icons and actions.\n Toolbar = 'toolbar',\n\n /// Document or block level placeholders to guide users when content is empty.\n Placeholder = 'placeholder',\n\n /// Full-featured table editing with row/column management, alignment options, and drag-and-drop functionality.\n Table = 'table',\n\n /// Mathematical formula support with both inline and block math rendering using KaTeX.\n Latex = 'latex',\n}\n\nexport interface CrepeFeatureConfig {\n [CrepeFeature.Cursor]?: CursorFeatureConfig\n [CrepeFeature.ListItem]?: ListItemFeatureConfig\n [CrepeFeature.LinkTooltip]?: LinkTooltipFeatureConfig\n [CrepeFeature.ImageBlock]?: ImageBlockFeatureConfig\n [CrepeFeature.BlockEdit]?: BlockEditFeatureConfig\n [CrepeFeature.Placeholder]?: PlaceholderFeatureConfig\n [CrepeFeature.Toolbar]?: ToolbarFeatureConfig\n [CrepeFeature.CodeMirror]?: CodeMirrorFeatureConfig\n [CrepeFeature.Table]?: TableFeatureConfig\n [CrepeFeature.Latex]?: LatexFeatureConfig\n}\n\nexport const defaultFeatures: Record<CrepeFeature, boolean> = {\n [CrepeFeature.Cursor]: true,\n [CrepeFeature.ListItem]: true,\n [CrepeFeature.LinkTooltip]: true,\n [CrepeFeature.ImageBlock]: true,\n [CrepeFeature.BlockEdit]: true,\n [CrepeFeature.Placeholder]: true,\n [CrepeFeature.Toolbar]: true,\n [CrepeFeature.CodeMirror]: true,\n [CrepeFeature.Table]: true,\n [CrepeFeature.Latex]: true,\n}\n","export const alignCenterIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M4.25 20.5C4.0375 20.5 3.85942 20.4281 3.71575 20.2843C3.57192 20.1404 3.5 19.9622 3.5 19.7498C3.5 19.5371 3.57192 19.359 3.71575 19.2155C3.85942 19.0718 4.0375 19 4.25 19H19.75C19.9625 19 20.1406 19.0719 20.2843 19.2158C20.4281 19.3596 20.5 19.5378 20.5 19.7502C20.5 19.9629 20.4281 20.141 20.2843 20.2845C20.1406 20.4282 19.9625 20.5 19.75 20.5H4.25ZM8.25 16.625C8.0375 16.625 7.85942 16.5531 7.71575 16.4093C7.57192 16.2654 7.5 16.0872 7.5 15.8748C7.5 15.6621 7.57192 15.484 7.71575 15.3405C7.85942 15.1968 8.0375 15.125 8.25 15.125H15.75C15.9625 15.125 16.1406 15.1969 16.2843 15.3408C16.4281 15.4846 16.5 15.6628 16.5 15.8753C16.5 16.0879 16.4281 16.266 16.2843 16.4095C16.1406 16.5532 15.9625 16.625 15.75 16.625H8.25ZM4.25 12.75C4.0375 12.75 3.85942 12.6781 3.71575 12.5343C3.57192 12.3904 3.5 12.2122 3.5 11.9998C3.5 11.7871 3.57192 11.609 3.71575 11.4655C3.85942 11.3218 4.0375 11.25 4.25 11.25H19.75C19.9625 11.25 20.1406 11.3219 20.2843 11.4658C20.4281 11.6096 20.5 11.7878 20.5 12.0003C20.5 12.2129 20.4281 12.391 20.2843 12.5345C20.1406 12.6782 19.9625 12.75 19.75 12.75H4.25ZM8.25 8.875C8.0375 8.875 7.85942 8.80308 7.71575 8.65925C7.57192 8.51542 7.5 8.33725 7.5 8.12475C7.5 7.91208 7.57192 7.734 7.71575 7.5905C7.85942 7.44683 8.0375 7.375 8.25 7.375H15.75C15.9625 7.375 16.1406 7.44692 16.2843 7.59075C16.4281 7.73458 16.5 7.91275 16.5 8.12525C16.5 8.33792 16.4281 8.516 16.2843 8.6595C16.1406 8.80317 15.9625 8.875 15.75 8.875H8.25ZM4.25 5C4.0375 5 3.85942 4.92808 3.71575 4.78425C3.57192 4.64042 3.5 4.46225 3.5 4.24975C3.5 4.03708 3.57192 3.859 3.71575 3.7155C3.85942 3.57183 4.0375 3.5 4.25 3.5H19.75C19.9625 3.5 20.1406 3.57192 20.2843 3.71575C20.4281 3.85958 20.5 4.03775 20.5 4.25025C20.5 4.46292 20.4281 4.641 20.2843 4.7845C20.1406 4.92817 19.9625 5 19.75 5H4.25Z\"\n />\n </svg>\n`\n","export const alignLeftIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M4.25 20.5C4.0375 20.5 3.85942 20.4281 3.71575 20.2843C3.57192 20.1404 3.5 19.9622 3.5 19.7498C3.5 19.5371 3.57192 19.359 3.71575 19.2155C3.85942 19.0718 4.0375 19 4.25 19H19.75C19.9625 19 20.1406 19.0719 20.2843 19.2158C20.4281 19.3596 20.5 19.5378 20.5 19.7502C20.5 19.9629 20.4281 20.141 20.2843 20.2845C20.1406 20.4282 19.9625 20.5 19.75 20.5H4.25ZM4.25 16.625C4.0375 16.625 3.85942 16.5531 3.71575 16.4093C3.57192 16.2654 3.5 16.0872 3.5 15.8748C3.5 15.6621 3.57192 15.484 3.71575 15.3405C3.85942 15.1968 4.0375 15.125 4.25 15.125H13.75C13.9625 15.125 14.1406 15.1969 14.2843 15.3408C14.4281 15.4846 14.5 15.6628 14.5 15.8753C14.5 16.0879 14.4281 16.266 14.2843 16.4095C14.1406 16.5532 13.9625 16.625 13.75 16.625H4.25ZM4.25 12.75C4.0375 12.75 3.85942 12.6781 3.71575 12.5343C3.57192 12.3904 3.5 12.2122 3.5 11.9998C3.5 11.7871 3.57192 11.609 3.71575 11.4655C3.85942 11.3218 4.0375 11.25 4.25 11.25H19.75C19.9625 11.25 20.1406 11.3219 20.2843 11.4658C20.4281 11.6096 20.5 11.7878 20.5 12.0003C20.5 12.2129 20.4281 12.391 20.2843 12.5345C20.1406 12.6782 19.9625 12.75 19.75 12.75H4.25ZM4.25 8.875C4.0375 8.875 3.85942 8.80308 3.71575 8.65925C3.57192 8.51542 3.5 8.33725 3.5 8.12475C3.5 7.91208 3.57192 7.734 3.71575 7.5905C3.85942 7.44683 4.0375 7.375 4.25 7.375H13.75C13.9625 7.375 14.1406 7.44692 14.2843 7.59075C14.4281 7.73458 14.5 7.91275 14.5 8.12525C14.5 8.33792 14.4281 8.516 14.2843 8.6595C14.1406 8.80317 13.9625 8.875 13.75 8.875H4.25ZM4.25 5C4.0375 5 3.85942 4.92808 3.71575 4.78425C3.57192 4.64042 3.5 4.46225 3.5 4.24975C3.5 4.03708 3.57192 3.859 3.71575 3.7155C3.85942 3.57183 4.0375 3.5 4.25 3.5H19.75C19.9625 3.5 20.1406 3.57192 20.2843 3.71575C20.4281 3.85958 20.5 4.03775 20.5 4.25025C20.5 4.46292 20.4281 4.641 20.2843 4.7845C20.1406 4.92817 19.9625 5 19.75 5H4.25Z\"\n />\n </svg>\n`\n","export const alignRightIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M4.25 5C4.0375 5 3.85942 4.92808 3.71575 4.78425C3.57192 4.64042 3.5 4.46225 3.5 4.24975C3.5 4.03708 3.57192 3.859 3.71575 3.7155C3.85942 3.57183 4.0375 3.5 4.25 3.5H19.75C19.9625 3.5 20.1406 3.57192 20.2843 3.71575C20.4281 3.85958 20.5 4.03775 20.5 4.25025C20.5 4.46292 20.4281 4.641 20.2843 4.7845C20.1406 4.92817 19.9625 5 19.75 5H4.25ZM10.25 8.875C10.0375 8.875 9.85942 8.80308 9.71575 8.65925C9.57192 8.51542 9.5 8.33725 9.5 8.12475C9.5 7.91208 9.57192 7.734 9.71575 7.5905C9.85942 7.44683 10.0375 7.375 10.25 7.375H19.75C19.9625 7.375 20.1406 7.44692 20.2843 7.59075C20.4281 7.73458 20.5 7.91275 20.5 8.12525C20.5 8.33792 20.4281 8.516 20.2843 8.6595C20.1406 8.80317 19.9625 8.875 19.75 8.875H10.25ZM4.25 12.75C4.0375 12.75 3.85942 12.6781 3.71575 12.5343C3.57192 12.3904 3.5 12.2122 3.5 11.9998C3.5 11.7871 3.57192 11.609 3.71575 11.4655C3.85942 11.3218 4.0375 11.25 4.25 11.25H19.75C19.9625 11.25 20.1406 11.3219 20.2843 11.4658C20.4281 11.6096 20.5 11.7878 20.5 12.0003C20.5 12.2129 20.4281 12.391 20.2843 12.5345C20.1406 12.6782 19.9625 12.75 19.75 12.75H4.25ZM10.25 16.625C10.0375 16.625 9.85942 16.5531 9.71575 16.4093C9.57192 16.2654 9.5 16.0872 9.5 15.8748C9.5 15.6621 9.57192 15.484 9.71575 15.3405C9.85942 15.1968 10.0375 15.125 10.25 15.125H19.75C19.9625 15.125 20.1406 15.1969 20.2843 15.3408C20.4281 15.4846 20.5 15.6628 20.5 15.8753C20.5 16.0879 20.4281 16.266 20.2843 16.4095C20.1406 16.5532 19.9625 16.625 19.75 16.625H10.25ZM4.25 20.5C4.0375 20.5 3.85942 20.4281 3.71575 20.2843C3.57192 20.1404 3.5 19.9622 3.5 19.7498C3.5 19.5371 3.57192 19.359 3.71575 19.2155C3.85942 19.0718 4.0375 19 4.25 19H19.75C19.9625 19 20.1406 19.0719 20.2843 19.2158C20.4281 19.3596 20.5 19.5378 20.5 19.7502C20.5 19.9629 20.4281 20.141 20.2843 20.2845C20.1406 20.4282 19.9625 20.5 19.75 20.5H4.25Z\"\n />\n </svg>\n`\n","export const boldIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M8.85758 18.625C8.4358 18.625 8.07715 18.4772 7.78163 18.1817C7.48613 17.8862 7.33838 17.5275 7.33838 17.1058V6.8942C7.33838 6.47242 7.48613 6.11377 7.78163 5.81825C8.07715 5.52275 8.4358 5.375 8.85758 5.375H12.1999C13.2191 5.375 14.1406 5.69231 14.9643 6.32693C15.788 6.96154 16.1999 7.81603 16.1999 8.89038C16.1999 9.63779 16.0194 10.2471 15.6585 10.7183C15.2976 11.1894 14.9088 11.5314 14.4922 11.7442C15.005 11.9211 15.4947 12.2708 15.9614 12.7933C16.428 13.3157 16.6614 14.0192 16.6614 14.9038C16.6614 16.182 16.1902 17.1217 15.2479 17.723C14.3056 18.3243 13.3563 18.625 12.3999 18.625H8.85758ZM9.4883 16.6327H12.3191C13.1063 16.6327 13.6627 16.4141 13.9884 15.9769C14.314 15.5397 14.4768 15.1205 14.4768 14.7192C14.4768 14.3179 14.314 13.8987 13.9884 13.4615C13.6627 13.0243 13.0909 12.8057 12.273 12.8057H9.4883V16.6327ZM9.4883 10.875H12.0826C12.6903 10.875 13.172 10.7013 13.5278 10.3539C13.8836 10.0064 14.0615 9.59037 14.0615 9.10575C14.0615 8.59035 13.8733 8.16918 13.497 7.84225C13.1207 7.51533 12.6595 7.35188 12.1133 7.35188H9.4883V10.875Z\"\n />\n </svg>\n`\n","export const bulletIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_952_6527)\">\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </g>\n <defs>\n <clipPath id=\"clip0_952_6527\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const bulletListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8070)\">\n <path\n d=\"M4 10.5C3.17 10.5 2.5 11.17 2.5 12C2.5 12.83 3.17 13.5 4 13.5C4.83 13.5 5.5 12.83 5.5 12C5.5 11.17 4.83 10.5 4 10.5ZM4 4.5C3.17 4.5 2.5 5.17 2.5 6C2.5 6.83 3.17 7.5 4 7.5C4.83 7.5 5.5 6.83 5.5 6C5.5 5.17 4.83 4.5 4 4.5ZM4 16.5C3.17 16.5 2.5 17.18 2.5 18C2.5 18.82 3.18 19.5 4 19.5C4.82 19.5 5.5 18.82 5.5 18C5.5 17.18 4.83 16.5 4 16.5ZM8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19ZM8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM7 6C7 6.55 7.45 7 8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8070\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const captionIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M9 22a1 1 0 0 1-1-1v-3H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6.1l-3.7 3.71c-.2.19-.45.29-.7.29zm1-6v3.08L13.08 16H20V4H4v12z\"\n />\n </svg>\n`\n","export const checkBoxCheckedIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_1803_1151)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM10.71 16.29C10.32 16.68 9.69 16.68 9.3 16.29L5.71 12.7C5.32 12.31 5.32 11.68 5.71 11.29C6.1 10.9 6.73 10.9 7.12 11.29L10 14.17L16.88 7.29C17.27 6.9 17.9 6.9 18.29 7.29C18.68 7.68 18.68 8.31 18.29 8.7L10.71 16.29Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1803_1151\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const checkBoxUncheckedIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_1803_535)\">\n <path\n d=\"M18 19H6C5.45 19 5 18.55 5 18V6C5 5.45 5.45 5 6 5H18C18.55 5 19 5.45 19 6V18C19 18.55 18.55 19 18 19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1803_535\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const chevronDownIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n />\n </svg>\n`\n","export const clearIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_1098_15553)\">\n <path\n d=\"M18.3007 5.70973C17.9107 5.31973 17.2807 5.31973 16.8907 5.70973L12.0007 10.5897L7.1107 5.69973C6.7207 5.30973 6.0907 5.30973 5.7007 5.69973C5.3107 6.08973 5.3107 6.71973 5.7007 7.10973L10.5907 11.9997L5.7007 16.8897C5.3107 17.2797 5.3107 17.9097 5.7007 18.2997C6.0907 18.6897 6.7207 18.6897 7.1107 18.2997L12.0007 13.4097L16.8907 18.2997C17.2807 18.6897 17.9107 18.6897 18.3007 18.2997C18.6907 17.9097 18.6907 17.2797 18.3007 16.8897L13.4107 11.9997L18.3007 7.10973C18.6807 6.72973 18.6807 6.08973 18.3007 5.70973Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1098_15553\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const codeIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8081)\">\n <path\n d=\"M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8081\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const confirmIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <g clip-path=\"url(#clip0_1013_1606)\">\n <path\n d=\"M9.00012 16.1998L5.50012 12.6998C5.11012 12.3098 4.49012 12.3098 4.10012 12.6998C3.71012 13.0898 3.71012 13.7098 4.10012 14.0998L8.29012 18.2898C8.68012 18.6798 9.31012 18.6798 9.70012 18.2898L20.3001 7.69982C20.6901 7.30982 20.6901 6.68982 20.3001 6.29982C19.9101 5.90982 19.2901 5.90982 18.9001 6.29982L9.00012 16.1998Z\"\n fill=\"#817567\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1013_1606\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const copyIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"none\"\n >\n <path\n d=\"M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z\"\n />\n </svg>\n`\n","export const dividerIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7900)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19 13H5C4.45 13 4 12.55 4 12C4 11.45 4.45 11 5 11H19C19.55 11 20 11.45 20 12C20 12.55 19.55 13 19 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7900\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const dragHandleIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M3.5 9.83366C3.35833 9.83366 3.23961 9.78571 3.14383 9.68983C3.04794 9.59394 3 9.47516 3 9.33349C3 9.19171 3.04794 9.07299 3.14383 8.97733C3.23961 8.88155 3.35833 8.83366 3.5 8.83366H12.5C12.6417 8.83366 12.7604 8.8816 12.8562 8.97749C12.9521 9.07338 13 9.19216 13 9.33383C13 9.4756 12.9521 9.59433 12.8562 9.68999C12.7604 9.78577 12.6417 9.83366 12.5 9.83366H3.5ZM3.5 7.16699C3.35833 7.16699 3.23961 7.11905 3.14383 7.02316C3.04794 6.92727 3 6.80849 3 6.66683C3 6.52505 3.04794 6.40633 3.14383 6.31066C3.23961 6.21488 3.35833 6.16699 3.5 6.16699H12.5C12.6417 6.16699 12.7604 6.21494 12.8562 6.31083C12.9521 6.40671 13 6.52549 13 6.66716C13 6.80894 12.9521 6.92766 12.8562 7.02333C12.7604 7.1191 12.6417 7.16699 12.5 7.16699H3.5Z\"\n />\n </svg>\n`\n","export const editIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_1013_1585)\">\n <path\n d=\"M14.06 9.02L14.98 9.94L5.92 19H5V18.08L14.06 9.02ZM17.66 3C17.41 3 17.15 3.1 16.96 3.29L15.13 5.12L18.88 8.87L20.71 7.04C21.1 6.65 21.1 6.02 20.71 5.63L18.37 3.29C18.17 3.09 17.92 3 17.66 3ZM14.06 6.19L3 17.25V21H6.75L17.81 9.94L14.06 6.19Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1013_1585\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h1Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5553)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM12 17H14V7H10V9H12V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5553\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h2Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5559)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15H11V13H13C14.1 13 15 12.11 15 11V9C15 7.89 14.1 7 13 7H9V9H13V11H11C9.9 11 9 11.89 9 13V17H15V15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5559\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h3Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5565)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13.5C15 12.67 14.33 12 13.5 12C14.33 12 15 11.33 15 10.5V9C15 7.89 14.1 7 13 7H9V9H13V11H11V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5565\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h4Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7757)\">\n <path\n d=\"M19.04 3H5.04004C3.94004 3 3.04004 3.9 3.04004 5V19C3.04004 20.1 3.94004 21 5.04004 21H19.04C20.14 21 21.04 20.1 21.04 19V5C21.04 3.9 20.14 3 19.04 3ZM19.04 19H5.04004V5H19.04V19ZM13.04 17H15.04V7H13.04V11H11.04V7H9.04004V13H13.04V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7757\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h5Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7760)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H9V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7760\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h6Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7763)\">\n <path\n d=\"M11 17H13C14.1 17 15 16.11 15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H11C9.9 7 9 7.89 9 9V15C9 16.11 9.9 17 11 17ZM11 13H13V15H11V13ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7763\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const imageIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8075)\">\n <path\n d=\"M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14.14 11.86L11.14 15.73L9 13.14L6 17H18L14.14 11.86Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8075\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const italicIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M6.29811 18.625C6.04505 18.625 5.83115 18.5375 5.65641 18.3626C5.48166 18.1877 5.39429 17.9736 5.39429 17.7203C5.39429 17.467 5.48166 17.2532 5.65641 17.0788C5.83115 16.9045 6.04505 16.8173 6.29811 16.8173H9.21159L12.452 7.18265H9.53851C9.28545 7.18265 9.07155 7.0952 8.89681 6.9203C8.72206 6.7454 8.63469 6.5313 8.63469 6.278C8.63469 6.02472 8.72206 5.81089 8.89681 5.63652C9.07155 5.46217 9.28545 5.375 9.53851 5.375H16.8847C17.1377 5.375 17.3516 5.46245 17.5264 5.63735C17.7011 5.81225 17.7885 6.02634 17.7885 6.27962C17.7885 6.53293 17.7011 6.74676 17.5264 6.92113C17.3516 7.09548 17.1377 7.18265 16.8847 7.18265H14.2789L11.0385 16.8173H13.6443C13.8973 16.8173 14.1112 16.9048 14.286 17.0797C14.4607 17.2546 14.5481 17.4687 14.5481 17.722C14.5481 17.9752 14.4607 18.1891 14.286 18.3634C14.1112 18.5378 13.8973 18.625 13.6443 18.625H6.29811Z\"\n />\n </svg>\n`\n","export const linkIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M17.0385 19.5003V16.5388H14.0769V15.0388H17.0385V12.0773H18.5384V15.0388H21.5V16.5388H18.5384V19.5003H17.0385ZM10.8077 16.5388H7.03845C5.78282 16.5388 4.7125 16.0963 3.8275 15.2114C2.9425 14.3266 2.5 13.2564 2.5 12.0009C2.5 10.7454 2.9425 9.67504 3.8275 8.78979C4.7125 7.90454 5.78282 7.46191 7.03845 7.46191H10.8077V8.96186H7.03845C6.1987 8.96186 5.48235 9.25834 4.8894 9.85129C4.29645 10.4442 3.99998 11.1606 3.99998 12.0003C3.99998 12.8401 4.29645 13.5564 4.8894 14.1494C5.48235 14.7423 6.1987 15.0388 7.03845 15.0388H10.8077V16.5388ZM8.25 12.7503V11.2504H15.75V12.7503H8.25ZM21.5 12.0003H20C20 11.1606 19.7035 10.4442 19.1106 9.85129C18.5176 9.25834 17.8013 8.96186 16.9615 8.96186H13.1923V7.46191H16.9615C18.2171 7.46191 19.2875 7.90441 20.1725 8.78939C21.0575 9.67439 21.5 10.7447 21.5 12.0003Z\"\n />\n </svg>\n`\n","export const menuIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7680)\">\n <path\n d=\"M11 18C11 19.1 10.1 20 9 20C7.9 20 7 19.1 7 18C7 16.9 7.9 16 9 16C10.1 16 11 16.9 11 18ZM9 10C7.9 10 7 10.9 7 12C7 13.1 7.9 14 9 14C10.1 14 11 13.1 11 12C11 10.9 10.1 10 9 10ZM9 4C7.9 4 7 4.9 7 6C7 7.1 7.9 8 9 8C10.1 8 11 7.1 11 6C11 4.9 10.1 4 9 4ZM15 8C16.1 8 17 7.1 17 6C17 4.9 16.1 4 15 4C13.9 4 13 4.9 13 6C13 7.1 13.9 8 15 8ZM15 10C13.9 10 13 10.9 13 12C13 13.1 13.9 14 15 14C16.1 14 17 13.1 17 12C17 10.9 16.1 10 15 10ZM15 16C13.9 16 13 16.9 13 18C13 19.1 13.9 20 15 20C16.1 20 17 19.1 17 18C17 16.9 16.1 16 15 16Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7680\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const orderedListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8067)\">\n <path\n d=\"M8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6C7 6.55 7.45 7 8 7ZM20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17ZM20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11ZM4.5 16H2.5C2.22 16 2 16.22 2 16.5C2 16.78 2.22 17 2.5 17H4V17.5H3.5C3.22 17.5 3 17.72 3 18C3 18.28 3.22 18.5 3.5 18.5H4V19H2.5C2.22 19 2 19.22 2 19.5C2 19.78 2.22 20 2.5 20H4.5C4.78 20 5 19.78 5 19.5V16.5C5 16.22 4.78 16 4.5 16ZM2.5 5H3V7.5C3 7.78 3.22 8 3.5 8C3.78 8 4 7.78 4 7.5V4.5C4 4.22 3.78 4 3.5 4H2.5C2.22 4 2 4.22 2 4.5C2 4.78 2.22 5 2.5 5ZM4.5 10H2.5C2.22 10 2 10.22 2 10.5C2 10.78 2.22 11 2.5 11H3.8L2.12 12.96C2.04 13.05 2 13.17 2 13.28V13.5C2 13.78 2.22 14 2.5 14H4.5C4.78 14 5 13.78 5 13.5C5 13.22 4.78 13 4.5 13H3.2L4.88 11.04C4.96 10.95 5 10.83 5 10.72V10.5C5 10.22 4.78 10 4.5 10Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8067\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const plusIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7676)\">\n <path\n d=\"M18 13H13V18C13 18.55 12.55 19 12 19C11.45 19 11 18.55 11 18V13H6C5.45 13 5 12.55 5 12C5 11.45 5.45 11 6 11H11V6C11 5.45 11.45 5 12 5C12.55 5 13 5.45 13 6V11H18C18.55 11 19 11.45 19 12C19 12.55 18.55 13 18 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7676\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const quoteIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7897)\">\n <path\n d=\"M7.17 17C7.68 17 8.15 16.71 8.37 16.26L9.79 13.42C9.93 13.14 10 12.84 10 12.53V8C10 7.45 9.55 7 9 7H5C4.45 7 4 7.45 4 8V12C4 12.55 4.45 13 5 13H7L5.97 15.06C5.52 15.95 6.17 17 7.17 17ZM17.17 17C17.68 17 18.15 16.71 18.37 16.26L19.79 13.42C19.93 13.14 20 12.84 20 12.53V8C20 7.45 19.55 7 19 7H15C14.45 7 14 7.45 14 8V12C14 12.55 14.45 13 15 13H17L15.97 15.06C15.52 15.95 16.17 17 17.17 17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7897\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const removeIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M7.30775 20.4997C6.81058 20.4997 6.385 20.3227 6.031 19.9687C5.677 19.6147 5.5 19.1892 5.5 18.692V5.99973H5.25C5.0375 5.99973 4.85942 5.92782 4.71575 5.78398C4.57192 5.64015 4.5 5.46198 4.5 5.24948C4.5 5.03682 4.57192 4.85873 4.71575 4.71523C4.85942 4.57157 5.0375 4.49973 5.25 4.49973H9C9 4.2549 9.08625 4.04624 9.25875 3.87374C9.43108 3.7014 9.63967 3.61523 9.8845 3.61523H14.1155C14.3603 3.61523 14.5689 3.7014 14.7413 3.87374C14.9138 4.04624 15 4.2549 15 4.49973H18.75C18.9625 4.49973 19.1406 4.57165 19.2843 4.71548C19.4281 4.85932 19.5 5.03748 19.5 5.24998C19.5 5.46265 19.4281 5.64073 19.2843 5.78423C19.1406 5.9279 18.9625 5.99973 18.75 5.99973H18.5V18.692C18.5 19.1892 18.323 19.6147 17.969 19.9687C17.615 20.3227 17.1894 20.4997 16.6923 20.4997H7.30775ZM17 5.99973H7V18.692C7 18.7818 7.02883 18.8556 7.0865 18.9132C7.14417 18.9709 7.21792 18.9997 7.30775 18.9997H16.6923C16.7821 18.9997 16.8558 18.9709 16.9135 18.9132C16.9712 18.8556 17 18.7818 17 18.692V5.99973ZM10.1543 16.9997C10.3668 16.9997 10.5448 16.9279 10.6885 16.7842C10.832 16.6404 10.9037 16.4622 10.9037 16.2497V8.74973C10.9037 8.53723 10.8318 8.35907 10.688 8.21523C10.5443 8.07157 10.3662 7.99973 10.1535 7.99973C9.941 7.99973 9.76292 8.07157 9.61925 8.21523C9.47575 8.35907 9.404 8.53723 9.404 8.74973V16.2497C9.404 16.4622 9.47583 16.6404 9.6195 16.7842C9.76333 16.9279 9.94158 16.9997 10.1543 16.9997ZM13.8465 16.9997C14.059 16.9997 14.2371 16.9279 14.3807 16.7842C14.5243 16.6404 14.596 16.4622 14.596 16.2497V8.74973C14.596 8.53723 14.5242 8.35907 14.3805 8.21523C14.2367 8.07157 14.0584 7.99973 13.8458 7.99973C13.6333 7.99973 13.4552 8.07157 13.3115 8.21523C13.168 8.35907 13.0962 8.53723 13.0962 8.74973V16.2497C13.0962 16.4622 13.1682 16.6404 13.312 16.7842C13.4557 16.9279 13.6338 16.9997 13.8465 16.9997Z\"\n />\n </svg>\n`\n","export const searchIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z\"\n />\n </svg>\n`\n","export const strikethroughIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M3.25 13.7404C3.0375 13.7404 2.85938 13.6684 2.71563 13.5246C2.57188 13.3808 2.5 13.2026 2.5 12.99C2.5 12.7774 2.57188 12.5993 2.71563 12.4558C2.85938 12.3122 3.0375 12.2404 3.25 12.2404H20.75C20.9625 12.2404 21.1406 12.3123 21.2843 12.4561C21.4281 12.5999 21.5 12.7781 21.5 12.9907C21.5 13.2033 21.4281 13.3814 21.2843 13.525C21.1406 13.6686 20.9625 13.7404 20.75 13.7404H3.25ZM10.9423 10.2596V6.62495H6.5673C6.2735 6.62495 6.02377 6.52201 5.8181 6.31613C5.61245 6.11026 5.50963 5.86027 5.50963 5.56615C5.50963 5.27205 5.61245 5.02083 5.8181 4.8125C6.02377 4.60417 6.2735 4.5 6.5673 4.5H17.4423C17.7361 4.5 17.9858 4.60294 18.1915 4.80883C18.3971 5.01471 18.5 5.2647 18.5 5.5588C18.5 5.85292 18.3971 6.10413 18.1915 6.31245C17.9858 6.52078 17.7361 6.62495 17.4423 6.62495H13.0673V10.2596H10.9423ZM10.9423 15.7211H13.0673V18.4423C13.0673 18.7361 12.9643 18.9858 12.7584 19.1915C12.5526 19.3971 12.3026 19.5 12.0085 19.5C11.7144 19.5 11.4631 19.3962 11.2548 19.1887C11.0465 18.9811 10.9423 18.7291 10.9423 18.4327V15.7211Z\"\n />\n </svg>\n`\n","export const tableIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8078)\">\n <path\n d=\"M20 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H20C21.1 21 22 20.1 22 19V5C22 3.9 21.1 3 20 3ZM20 5V8H5V5H20ZM15 19H10V10H15V19ZM5 10H8V19H5V10ZM17 19V10H20V19H17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8078\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const textIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5547)\">\n <path\n d=\"M5 5.5C5 6.33 5.67 7 6.5 7H10.5V17.5C10.5 18.33 11.17 19 12 19C12.83 19 13.5 18.33 13.5 17.5V7H17.5C18.33 7 19 6.33 19 5.5C19 4.67 18.33 4 17.5 4H6.5C5.67 4 5 4.67 5 5.5Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5547\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const todoListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M5.66936 16.3389L9.39244 12.6158C9.54115 12.4671 9.71679 12.3937 9.91936 12.3957C10.1219 12.3976 10.2975 12.4761 10.4463 12.6312C10.5847 12.7823 10.654 12.9585 10.654 13.1599C10.654 13.3613 10.5847 13.5363 10.4463 13.6851L6.32704 17.8197C6.14627 18.0004 5.93538 18.0908 5.69436 18.0908C5.45333 18.0908 5.24243 18.0004 5.06166 17.8197L3.01744 15.7754C2.87899 15.637 2.81136 15.4629 2.81456 15.2533C2.81776 15.0437 2.88859 14.8697 3.02706 14.7312C3.16551 14.5928 3.34008 14.5235 3.55076 14.5235C3.76144 14.5235 3.93494 14.5928 4.07126 14.7312L5.66936 16.3389ZM5.66936 8.72359L9.39244 5.00049C9.54115 4.85177 9.71679 4.77838 9.91936 4.78031C10.1219 4.78223 10.2975 4.86075 10.4463 5.01586C10.5847 5.16691 10.654 5.34314 10.654 5.54454C10.654 5.74592 10.5847 5.92097 10.4463 6.06969L6.32704 10.2043C6.14627 10.3851 5.93538 10.4755 5.69436 10.4755C5.45333 10.4755 5.24243 10.3851 5.06166 10.2043L3.01744 8.16009C2.87899 8.02162 2.81136 7.84759 2.81456 7.63799C2.81776 7.42837 2.88859 7.25433 3.02706 7.11586C3.16551 6.97741 3.34008 6.90819 3.55076 6.90819C3.76144 6.90819 3.93494 6.97741 4.07126 7.11586L5.66936 8.72359ZM13.7597 16.5581C13.5472 16.5581 13.3691 16.4862 13.2253 16.3424C13.0816 16.1986 13.0097 16.0204 13.0097 15.8078C13.0097 15.5952 13.0816 15.4171 13.2253 15.2735C13.3691 15.13 13.5472 15.0582 13.7597 15.0582H20.7597C20.9722 15.0582 21.1503 15.1301 21.2941 15.2739C21.4378 15.4177 21.5097 15.5959 21.5097 15.8085C21.5097 16.0211 21.4378 16.1992 21.2941 16.3427C21.1503 16.4863 20.9722 16.5581 20.7597 16.5581H13.7597ZM13.7597 8.94276C13.5472 8.94276 13.3691 8.87085 13.2253 8.72704C13.0816 8.58324 13.0097 8.40504 13.0097 8.19244C13.0097 7.97985 13.0816 7.80177 13.2253 7.65819C13.3691 7.5146 13.5472 7.44281 13.7597 7.44281H20.7597C20.9722 7.44281 21.1503 7.51471 21.2941 7.65851C21.4378 7.80233 21.5097 7.98053 21.5097 8.19311C21.5097 8.40571 21.4378 8.5838 21.2941 8.72739C21.1503 8.87097 20.9722 8.94276 20.7597 8.94276H13.7597Z\"\n />\n </svg>\n`\n","export const functionsIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z\"\n />\n </svg>\n`\n","export const visibilityOffIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n >\n <path\n d=\"m644-428-58-58q9-47-27-88t-93-32l-58-58q17-8 34.5-12t37.5-4q75 0 127.5 52.5T660-500q0 20-4 37.5T644-428Zm128 126-58-56q38-29 67.5-63.5T832-500q-50-101-143.5-160.5T480-720q-29 0-57 4t-55 12l-62-62q41-17 84-25.5t90-8.5q151 0 269 83.5T920-500q-23 59-60.5 109.5T772-302Zm20 246L624-222q-35 11-70.5 16.5T480-200q-151 0-269-83.5T40-500q21-53 53-98.5t73-81.5L56-792l56-56 736 736-56 56ZM222-624q-29 26-53 57t-41 67q50 101 143.5 160.5T480-280q20 0 39-2.5t39-5.5l-36-38q-11 3-21 4.5t-21 1.5q-75 0-127.5-52.5T300-500q0-11 1.5-21t4.5-21l-84-82Zm319 93Zm-151 75Z\"\n />\n </svg>\n`\n","import { languages } from '@codemirror/language-data'\nimport { oneDark } from '@codemirror/theme-one-dark'\nimport { mergeWith } from 'lodash-es'\n\nimport { CrepeFeature, type CrepeFeatureConfig } from '../feature'\nimport {\n chevronDownIcon,\n clearIcon,\n editIcon,\n searchIcon,\n visibilityOffIcon,\n} from '../icons'\n\nexport const defaultConfig: CrepeFeatureConfig = {\n [CrepeFeature.CodeMirror]: {\n theme: oneDark,\n languages,\n expandIcon: chevronDownIcon,\n searchIcon: searchIcon,\n clearSearchIcon: clearIcon,\n searchPlaceholder: 'Search language',\n noResultText: 'No result',\n previewToggleIcon: (previewOnlyMode) =>\n previewOnlyMode ? editIcon : visibilityOffIcon,\n },\n}\n\nexport const applyConfig = (userConfig: Partial<CrepeFeatureConfig>) => {\n return mergeWith({}, defaultConfig, userConfig, (_objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue\n }\n return undefined\n })\n}\n","import { createSlice, type Ctx } from '@milkdown/kit/ctx'\n\nimport type { CrepeFeature } from '../feature'\nimport type { CrepeBuilder } from './builder'\n\n/// @internal\n/// The feature flags context.\n/// ⚠️ Most of the time, you should use `useCrepeFeatures` to get the features.\nexport const FeaturesCtx = createSlice([] as CrepeFeature[], 'FeaturesCtx')\n\n/// @internal\n/// The crepe editor context.\n/// ⚠️ Most of the time, you should use `useCrepe` to get the crepe editor instance.\nexport const CrepeCtx = createSlice({} as CrepeBuilder, 'CrepeCtx')\n\n/// The crepe editor context.\n/// You can use this context to access the crepe editor instance within Milkdown plugins.\n/// ```ts\n/// import { crepeCtx } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// return () => {\n/// const crepe = useCrepe(ctx)\n/// crepe.setReadonly(true)\n/// }\n/// }\n/// ```\nexport function useCrepe(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.get<CrepeBuilder, 'CrepeCtx'>('CrepeCtx')\n}\n\n/// Check the enabled FeatureFlags\n/// ```ts\n/// import { useCrepeFeatures } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// const features = useCrepeFeatures(ctx)\n/// if (features.get().includes(CrepeFeature.CodeMirror)) {\n/// // Do something with CodeMirror\n/// }\n/// }\nexport function useCrepeFeatures(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.use<CrepeFeature[], 'FeaturesCtx'>('FeaturesCtx')\n}\n\n/// @internal\nexport function crepeFeatureConfig(feature: CrepeFeature) {\n return (ctx: Ctx) => {\n useCrepeFeatures(ctx).update((features) => {\n if (features.includes(feature)) {\n return features\n }\n return [...features, feature]\n })\n }\n}\n","import type { Selection } from '@milkdown/kit/prose/state'\n\nexport function isInCodeBlock(selection: Selection) {\n const type = selection.$from.parent.type\n return type.name === 'code_block'\n}\n\nexport function isInList(selection: Selection) {\n const type = selection.$from.node(selection.$from.depth - 1)?.type\n return type?.name === 'list_item'\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\ntype MenuItem<T> = {\n index: number\n key: string\n onRun: (ctx: Ctx) => void\n} & T\n\ntype WithRange<T, HasIndex extends true | false = true> = HasIndex extends true\n ? T & { range: [start: number, end: number] }\n : T\n\nexport type MenuItemGroup<T, HasIndex extends true | false = true> = WithRange<\n {\n key: string\n label: string\n items: HasIndex extends true ? MenuItem<T>[] : Omit<MenuItem<T>, 'index'>[]\n },\n HasIndex\n>\n\nexport class GroupBuilder<T> {\n #groups: MenuItemGroup<T, false>[] = []\n\n clear = () => {\n this.#groups = []\n return this\n }\n\n #getGroupInstance = (group: MenuItemGroup<T, false>) => {\n const groupInstance = {\n group,\n addItem: (key: string, item: Omit<MenuItem<T>, 'key' | 'index'>) => {\n const data = { ...item, key } as MenuItem<T>\n group.items.push(data)\n return groupInstance\n },\n clear: () => {\n group.items = []\n return groupInstance\n },\n }\n return groupInstance\n }\n\n addGroup = (key: string, label: string) => {\n const items: Omit<MenuItem<T>, 'index'>[] = []\n const group: MenuItemGroup<T, false> = {\n key,\n label,\n items,\n }\n this.#groups.push(group)\n\n return this.#getGroupInstance(group)\n }\n\n getGroup = (key: string) => {\n const group = this.#groups.find((group) => group.key === key)\n if (!group) throw new Error(`Group with key ${key} not found`)\n\n return this.#getGroupInstance(group)\n }\n\n build = () => {\n return this.#groups\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { imageBlockSchema } from '@milkdown/kit/component/image-block'\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core'\nimport {\n addBlockTypeCommand,\n blockquoteSchema,\n bulletListSchema,\n clearTextInCurrentBlockCommand,\n codeBlockSchema,\n headingSchema,\n hrSchema,\n listItemSchema,\n orderedListSchema,\n paragraphSchema,\n selectTextNearPosCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n} from '@milkdown/kit/preset/commonmark'\nimport { createTable } from '@milkdown/kit/preset/gfm'\n\nimport type { BlockEditFeatureConfig } from '../index'\nimport type { SlashMenuItem } from './utils'\n\nimport { useCrepeFeatures } from '../../../core/slice'\nimport { CrepeFeature } from '../../../feature'\nimport {\n bulletListIcon,\n codeIcon,\n dividerIcon,\n functionsIcon,\n h1Icon,\n h2Icon,\n h3Icon,\n h4Icon,\n h5Icon,\n h6Icon,\n imageIcon,\n orderedListIcon,\n quoteIcon,\n tableIcon,\n textIcon,\n todoListIcon,\n} from '../../../icons'\nimport { GroupBuilder, type MenuItemGroup } from '../../../utils/group-builder'\n\nexport function getGroups(\n filter?: string,\n config?: BlockEditFeatureConfig,\n ctx?: Ctx\n) {\n const flags = ctx && useCrepeFeatures(ctx).get()\n const isLatexEnabled = flags?.includes(CrepeFeature.Latex)\n const isImageBlockEnabled = flags?.includes(CrepeFeature.ImageBlock)\n const isTableEnabled = flags?.includes(CrepeFeature.Table)\n\n const groupBuilder = new GroupBuilder<SlashMenuItem>()\n if (config?.textGroup !== null) {\n const textGroup = groupBuilder.addGroup(\n 'text',\n config?.textGroup?.label ?? 'Text'\n )\n if (config?.textGroup?.text !== null) {\n textGroup.addItem('text', {\n label: config?.textGroup?.text?.label ?? 'Text',\n icon: config?.textGroup?.text?.icon ?? textIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const paragraph = paragraphSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: paragraph,\n })\n },\n })\n }\n\n if (config?.textGroup?.h1 !== null) {\n textGroup.addItem('h1', {\n label: config?.textGroup?.h1?.label ?? 'Heading 1',\n icon: config?.textGroup?.h1?.icon ?? h1Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 1,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h2 !== null) {\n textGroup.addItem('h2', {\n label: config?.textGroup?.h2?.label ?? 'Heading 2',\n icon: config?.textGroup?.h2?.icon ?? h2Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 2,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h3 !== null) {\n textGroup.addItem('h3', {\n label: config?.textGroup?.h3?.label ?? 'Heading 3',\n icon: config?.textGroup?.h3?.icon ?? h3Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 3,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h4 !== null) {\n textGroup.addItem('h4', {\n label: config?.textGroup?.h4?.label ?? 'Heading 4',\n icon: config?.textGroup?.h4?.icon ?? h4Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 4,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h5 !== null) {\n textGroup.addItem('h5', {\n label: config?.textGroup?.h5?.label ?? 'Heading 5',\n icon: config?.textGroup?.h5?.icon ?? h5Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 5,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h6 !== null) {\n textGroup.addItem('h6', {\n label: config?.textGroup?.h6?.label ?? 'Heading 6',\n icon: config?.textGroup?.h6?.icon ?? h6Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 6,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.quote !== null) {\n textGroup.addItem('quote', {\n label: config?.textGroup?.quote?.label ?? 'Quote',\n icon: config?.textGroup?.quote?.icon ?? quoteIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const blockquote = blockquoteSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: blockquote,\n })\n },\n })\n }\n\n if (config?.textGroup?.divider !== null) {\n textGroup.addItem('divider', {\n label: config?.textGroup?.divider?.label ?? 'Divider',\n icon: config?.textGroup?.divider?.icon ?? dividerIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const hr = hrSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: hr,\n })\n },\n })\n }\n }\n\n if (config?.listGroup !== null) {\n const listGroup = groupBuilder.addGroup(\n 'list',\n config?.listGroup?.label ?? 'List'\n )\n if (config?.listGroup?.bulletList !== null) {\n listGroup.addItem('bullet-list', {\n label: config?.listGroup?.bulletList?.label ?? 'Bullet List',\n icon: config?.listGroup?.bulletList?.icon ?? bulletListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const bulletList = bulletListSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: bulletList,\n })\n },\n })\n }\n\n if (config?.listGroup?.orderedList !== null) {\n listGroup.addItem('ordered-list', {\n label: config?.listGroup?.orderedList?.label ?? 'Ordered List',\n icon: config?.listGroup?.orderedList?.icon ?? orderedListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const orderedList = orderedListSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: orderedList,\n })\n },\n })\n }\n\n if (config?.listGroup?.taskList !== null) {\n listGroup.addItem('task-list', {\n label: config?.listGroup?.taskList?.label ?? 'Task List',\n icon: config?.listGroup?.taskList?.icon ?? todoListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const listItem = listItemSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: listItem,\n attrs: { checked: false },\n })\n },\n })\n }\n }\n\n if (config?.advancedGroup !== null) {\n const advancedGroup = groupBuilder.addGroup(\n 'advanced',\n config?.advancedGroup?.label ?? 'Advanced'\n )\n\n if (config?.advancedGroup?.image !== null && isImageBlockEnabled) {\n advancedGroup.addItem('image', {\n label: config?.advancedGroup?.image?.label ?? 'Image',\n icon: config?.advancedGroup?.image?.icon ?? imageIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const imageBlock = imageBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: imageBlock,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.codeBlock !== null) {\n advancedGroup.addItem('code', {\n label: config?.advancedGroup?.codeBlock?.label ?? 'Code',\n icon: config?.advancedGroup?.codeBlock?.icon ?? codeIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const codeBlock = codeBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: codeBlock,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.table !== null && isTableEnabled) {\n advancedGroup.addItem('table', {\n label: config?.advancedGroup?.table?.label ?? 'Table',\n icon: config?.advancedGroup?.table?.icon ?? tableIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const view = ctx.get(editorViewCtx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n\n // record the position before the table is inserted\n const { from } = view.state.selection\n commands.call(addBlockTypeCommand.key, {\n nodeType: createTable(ctx, 3, 3),\n })\n\n commands.call(selectTextNearPosCommand.key, {\n pos: from,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.math !== null && isLatexEnabled) {\n advancedGroup.addItem('math', {\n label: config?.advancedGroup?.math?.label ?? 'Math',\n icon: config?.advancedGroup?.math?.icon ?? functionsIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const codeBlock = codeBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: codeBlock,\n attrs: { language: 'LaTex' },\n })\n },\n })\n }\n }\n\n config?.buildMenu?.(groupBuilder)\n\n let groups = groupBuilder.build()\n\n if (filter) {\n groups = groups\n .map((group) => {\n const items = group.items.filter((item) =>\n item.label.toLowerCase().includes(filter.toLowerCase())\n )\n\n return {\n ...group,\n items,\n }\n })\n .filter((group) => group.items.length > 0)\n }\n\n const items = groups.flatMap((groups) => groups.items)\n items.forEach((item, index) => {\n Object.assign(item, { index })\n })\n\n groups.reduce((acc, group) => {\n const end = acc + group.items.length\n Object.assign(group, {\n range: [acc, end],\n })\n return end\n }, 0)\n\n return {\n groups: groups as MenuItemGroup<SlashMenuItem>[],\n size: items.length,\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { Icon } from '@milkdown/kit/component'\nimport {\n computed,\n defineComponent,\n onUnmounted,\n ref,\n watch,\n watchEffect,\n type Ref,\n h,\n} from 'vue'\n\nimport type { BlockEditFeatureConfig } from '..'\n\nimport { getGroups } from './config'\n\nh\n\ntype MenuProps = {\n ctx: Ctx\n show: Ref<boolean>\n filter: Ref<string>\n hide: () => void\n config?: BlockEditFeatureConfig\n}\n\nexport const Menu = defineComponent<MenuProps>({\n props: {\n ctx: {\n type: Object,\n required: true,\n },\n show: {\n type: Object,\n required: true,\n },\n filter: {\n type: Object,\n required: true,\n },\n hide: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n setup({ ctx, show, filter, hide, config }) {\n const host = ref<HTMLElement>()\n const groupInfo = computed(() => getGroups(filter.value, config, ctx))\n const hoverIndex = ref(0)\n const prevMousePosition = ref({ x: -999, y: -999 })\n\n const onPointerMove = (e: MouseEvent) => {\n const { x, y } = e\n prevMousePosition.value = { x, y }\n }\n\n watch([groupInfo, show], () => {\n const { size } = groupInfo.value\n if (size === 0 && show.value) hide()\n else if (hoverIndex.value >= size) hoverIndex.value = 0\n })\n\n const onHover = (\n index: number | ((prev: number) => number),\n after?: (index: number) => void\n ) => {\n const prevHoverIndex = hoverIndex.value\n const next = typeof index === 'function' ? index(prevHoverIndex) : index\n after?.(next)\n hoverIndex.value = next\n }\n\n const scrollToIndex = (index: number) => {\n const target = host.value?.querySelector<HTMLElement>(\n `[data-index=\"${index}\"]`\n )\n const scrollRoot = host.value?.querySelector<HTMLElement>('.menu-groups')\n\n if (!target || !scrollRoot) return\n\n scrollRoot.scrollTop = target.offsetTop - scrollRoot.offsetTop\n }\n\n const runByIndex = (index: number) => {\n const item = groupInfo.value.groups\n .flatMap((group) => group.items)\n .at(index)\n if (item && ctx) item.onRun(ctx)\n\n hide()\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n const { size, groups } = groupInfo.value\n if (e.key === 'Escape') {\n e.preventDefault()\n hide?.()\n return\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n return onHover(\n (index) => (index < size - 1 ? index + 1 : index),\n scrollToIndex\n )\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n return onHover(\n (index) => (index <= 0 ? index : index - 1),\n scrollToIndex\n )\n }\n\n if (e.key === 'ArrowLeft') {\n e.preventDefault()\n return onHover((index) => {\n const group = groups.find(\n (group) => group.range[0] <= index && group.range[1] > index\n )\n if (!group) return index\n\n const prevGroup = groups[groups.indexOf(group) - 1]\n if (!prevGroup) return index\n\n return prevGroup.range[1] - 1\n }, scrollToIndex)\n }\n\n if (e.key === 'ArrowRight') {\n e.preventDefault()\n return onHover((index) => {\n const group = groups.find(\n (group) => group.range[0] <= index && group.range[1] > index\n )\n if (!group) return index\n\n const nextGroup = groups[groups.indexOf(group) + 1]\n if (!nextGroup) return index\n\n return nextGroup.range[0]\n }, scrollToIndex)\n }\n\n if (e.key === 'Enter') {\n e.preventDefault()\n runByIndex(hoverIndex.value)\n }\n }\n\n const getOnPointerEnter = (index: number) => (e: MouseEvent) => {\n const prevPos = prevMousePosition.value\n if (!prevPos) return\n\n const { x, y } = e\n if (x === prevPos.x && y === prevPos.y) return\n\n onHover(index)\n }\n\n watchEffect(() => {\n const isShown = show.value\n if (isShown) {\n window.addEventListener('keydown', onKeydown, { capture: true })\n } else {\n window.removeEventListener('keydown', onKeydown, { capture: true })\n }\n })\n onUnmounted(() => {\n window.removeEventListener('keydown', onKeydown, { capture: true })\n })\n\n return () => {\n return (\n <div ref={host} onPointerdown={(e) => e.preventDefault()}>\n <nav class=\"tab-group\">\n <ul>\n {groupInfo.value.groups.map((group) => (\n <li\n key={group.key}\n onPointerdown={() => onHover(group.range[0], scrollToIndex)}\n class={\n hoverIndex.value >= group.range[0] &&\n hoverIndex.value < group.range[1]\n ? 'selected'\n : ''\n }\n >\n {group.label}\n </li>\n ))}\n </ul>\n </nav>\n <div class=\"menu-groups\" onPointermove={onPointerMove}>\n {groupInfo.value.groups.map((group) => (\n <div key={group.key} class=\"menu-group\">\n <h6>{group.label}</h6>\n <ul>\n {group.items.map((item) => (\n <li\n key={item.key}\n data-index={item.index}\n class={hoverIndex.value === item.index ? 'hover' : ''}\n onPointerenter={getOnPointerEnter(item.index)}\n onPointerdown={() => {\n host.value\n ?.querySelector(`[data-index=\"${item.index}\"]`)\n ?.classList.add('active')\n }}\n onPointerup={() => {\n host.value\n ?.querySelector(`[data-index=\"${item.index}\"]`)\n ?.classList.remove('active')\n runByIndex(item.index)\n }}\n >\n <Icon icon={item.icon} />\n <span>{item.label}</span>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { SlashProvider, slashFactory } from '@milkdown/kit/plugin/slash'\nimport {\n TextSelection,\n type PluginView,\n type Selection,\n} from '@milkdown/kit/prose/state'\nimport { $ctx } from '@milkdown/kit/utils'\nimport { createApp, ref, type App, type Ref } from 'vue'\n\nimport type { BlockEditFeatureConfig } from '../index'\n\nimport { isInCodeBlock, isInList } from '../../../utils'\nimport { Menu } from './component'\n\nexport const menu = slashFactory('CREPE_MENU')\n\ninterface MenuAPI {\n show: (pos: number) => void\n hide: () => void\n}\n\nexport const menuAPI = $ctx(\n {\n show: () => {},\n hide: () => {},\n } as MenuAPI,\n 'menuAPICtx'\n)\n\nexport function configureMenu(ctx: Ctx, config?: BlockEditFeatureConfig) {\n ctx.set(menu.key, {\n view: (view) => new MenuView(ctx, view, config),\n })\n}\n\nclass MenuView implements PluginView {\n readonly #content: HTMLElement\n readonly #app: App\n readonly #filter: Ref<string>\n readonly #slashProvider: SlashProvider\n #programmaticallyPos: number | null = null\n\n constructor(ctx: Ctx, view: EditorView, config?: BlockEditFeatureConfig) {\n const content = document.createElement('div')\n content.classList.add('milkdown-slash-menu')\n const show = ref(false)\n\n const filter = ref('')\n this.#filter = filter\n\n const hide = this.hide\n\n const app = createApp(Menu, {\n ctx,\n config,\n show,\n filter,\n hide,\n })\n this.#app = app\n app.mount(content)\n\n this.#content = content\n // oxlint-disable-next-line ts/no-this-alias\n const self = this\n this.#slashProvider = new SlashProvider({\n content: this.#content,\n debounce: 20,\n shouldShow(this: SlashProvider, view: EditorView) {\n if (\n isInCodeBlock(view.state.selection) ||\n isInList(view.state.selection)\n )\n return false\n\n const currentText = this.getContent(view, (node) =>\n ['paragraph', 'heading'].includes(node.type.name)\n )\n\n if (currentText == null) return false\n\n if (!isSelectionAtEndOfNode(view.state.selection)) {\n return false\n }\n\n const pos = self.#programmaticallyPos\n\n filter.value = currentText.startsWith('/')\n ? currentText.slice(1)\n : currentText\n\n if (typeof pos === 'number') {\n const maxSize = view.state.doc.nodeSize - 2\n const validPos = Math.min(pos, maxSize)\n if (\n view.state.doc.resolve(validPos).node() !==\n view.state.doc.resolve(view.state.selection.from).node()\n ) {\n self.#programmaticallyPos = null\n\n return false\n }\n\n return true\n }\n\n if (!currentText.startsWith('/')) return false\n\n return true\n },\n offset: 10,\n })\n\n this.#slashProvider.onShow = () => {\n show.value = true\n }\n this.#slashProvider.onHide = () => {\n show.value = false\n }\n this.update(view)\n\n ctx.set(menuAPI.key, {\n show: (pos) => this.show(pos),\n hide: () => this.hide(),\n })\n }\n\n update = (view: EditorView) => {\n this.#slashProvider.update(view)\n }\n\n show = (pos: number) => {\n this.#programmaticallyPos = pos\n this.#filter.value = ''\n this.#slashProvider.show()\n }\n\n hide = () => {\n this.#programmaticallyPos = null\n this.#slashProvider.hide()\n }\n\n destroy = () => {\n this.#slashProvider.destroy()\n this.#app.unmount()\n this.#content.remove()\n }\n}\n\nfunction isSelectionAtEndOfNode(selection: Selection) {\n if (!(selection instanceof TextSelection)) return false\n\n const { $head } = selection\n const parent = $head.parent\n const offset = $head.parentOffset\n\n return offset === parent.content.size\n}\n","import { Icon } from '@milkdown/kit/component'\nimport { defineComponent, ref, h, Fragment } from 'vue'\n\nh\nFragment\n\ninterface BlockHandleProps {\n onAdd: () => void\n addIcon: string\n handleIcon: string\n}\n\nexport const BlockHandle = defineComponent<BlockHandleProps>({\n props: {\n onAdd: {\n type: Function,\n required: true,\n },\n addIcon: {\n type: String,\n required: true,\n },\n handleIcon: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const addButton = ref<HTMLDivElement>()\n\n return () => {\n return (\n <>\n <div\n ref={addButton}\n class=\"operation-item\"\n onPointerdown={(e) => {\n e.preventDefault()\n e.stopPropagation()\n addButton.value?.classList.add('active')\n }}\n onPointerup={(e) => {\n e.preventDefault()\n e.stopPropagation()\n addButton.value?.classList.remove('active')\n props.onAdd()\n }}\n >\n <Icon icon={props.addIcon} />\n </div>\n <div class=\"operation-item\">\n <Icon icon={props.handleIcon} />\n </div>\n </>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { PluginView } from '@milkdown/kit/prose/state'\n\nimport { editorViewCtx } from '@milkdown/kit/core'\nimport {\n BlockProvider,\n block,\n blockConfig,\n type BlockProviderOptions,\n} from '@milkdown/kit/plugin/block'\nimport { paragraphSchema } from '@milkdown/kit/preset/commonmark'\nimport { findParent } from '@milkdown/kit/prose'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { createApp, type App } from 'vue'\n\nimport type { BlockEditFeatureConfig } from '../index'\n\nimport { menuIcon, plusIcon } from '../../../icons'\nimport { menuAPI } from '../menu'\nimport { BlockHandle } from './component'\n\nclass BlockHandleView implements PluginView {\n #content: HTMLElement\n #provider: BlockProvider\n #app: App\n readonly #ctx: Ctx\n\n constructor(ctx: Ctx, config?: BlockEditFeatureConfig) {\n this.#ctx = ctx\n const content = document.createElement('div')\n content.classList.add('milkdown-block-handle')\n const app = createApp(BlockHandle, {\n onAdd: this.onAdd,\n addIcon: config?.handleAddIcon ?? plusIcon,\n handleIcon: config?.handleDragIcon ?? menuIcon,\n })\n app.mount(content)\n this.#app = app\n this.#content = content\n const blockProviderOptions = config?.blockHandle ?? {}\n this.#provider = new BlockProvider({\n ctx,\n content,\n getOffset: () => 16,\n getPlacement: ({ active, blockDom }) => {\n if (active.node.type.name === 'heading') return 'left'\n\n let totalDescendant = 0\n active.node.descendants((node) => {\n totalDescendant += node.childCount\n })\n const dom = active.el\n const domRect = dom.getBoundingClientRect()\n const handleRect = blockDom.getBoundingClientRect()\n const style = window.getComputedStyle(dom)\n const paddingTop = Number.parseInt(style.paddingTop, 10) || 0\n const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0\n const height = domRect.height - paddingTop - paddingBottom\n const handleHeight = handleRect.height\n return totalDescendant > 2 || handleHeight < height\n ? 'left-start'\n : 'left'\n },\n ...(blockProviderOptions as Partial<BlockProviderOptions>),\n })\n this.update()\n }\n\n update = () => {\n this.#provider.update()\n }\n\n destroy = () => {\n this.#provider.destroy()\n this.#content.remove()\n this.#app.unmount()\n }\n\n onAdd = () => {\n const ctx = this.#ctx\n const view = ctx.get(editorViewCtx)\n if (!view.hasFocus()) view.focus()\n\n const { state, dispatch } = view\n const active = this.#provider.active\n if (!active) return\n\n const $pos = active.$pos\n const pos = $pos.pos + active.node.nodeSize\n let tr = state.tr.insert(pos, paragraphSchema.type(ctx).create())\n tr = tr.setSelection(TextSelection.near(tr.doc.resolve(pos)))\n dispatch(tr.scrollIntoView())\n\n this.#provider.hide()\n ctx.get(menuAPI.key).show(tr.selection.from)\n }\n}\n\nexport function configureBlockHandle(\n ctx: Ctx,\n config?: BlockEditFeatureConfig\n) {\n ctx.set(blockConfig.key, {\n filterNodes: (pos) => {\n const filter = findParent((node) =>\n ['table', 'blockquote', 'math_inline'].includes(node.type.name)\n )(pos)\n if (filter) return false\n\n return true\n },\n })\n ctx.set(block.key, {\n view: () => new BlockHandleView(ctx, config),\n })\n}\n","import { block, type BlockProviderOptions } from '@milkdown/kit/plugin/block'\n\nimport type { DeepPartial } from '../../utils'\nimport type { GroupBuilder } from '../../utils/group-builder'\nimport type { DefineFeature } from '../shared'\nimport type { SlashMenuItem } from './menu/utils'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../index'\nimport { configureBlockHandle } from './handle'\nimport { configureMenu, menu, menuAPI } from './menu'\n\ninterface BlockEditConfig {\n handleAddIcon: string\n handleDragIcon: string\n buildMenu: (builder: GroupBuilder<SlashMenuItem>) => void\n\n blockHandle: Pick<\n BlockProviderOptions,\n | 'shouldShow'\n | 'getOffset'\n | 'getPosition'\n | 'getPlacement'\n | 'middleware'\n | 'floatingUIOptions'\n | 'root'\n >\n\n textGroup: {\n label: string\n text: {\n label: string\n icon: string\n } | null\n h1: {\n label: string\n icon: string\n } | null\n h2: {\n label: string\n icon: string\n } | null\n h3: {\n label: string\n icon: string\n } | null\n h4: {\n label: string\n icon: string\n } | null\n h5: {\n label: string\n icon: string\n } | null\n h6: {\n label: string\n icon: string\n } | null\n quote: {\n label: string\n icon: string\n } | null\n divider: {\n label: string\n icon: string\n } | null\n } | null\n\n listGroup: {\n label: string\n bulletList: {\n label: string\n icon: string\n } | null\n orderedList: {\n label: string\n icon: string\n } | null\n taskList: {\n label: string\n icon: string\n } | null\n } | null\n\n advancedGroup: {\n label: string\n image: {\n label: string\n icon: string\n } | null\n codeBlock: {\n label: string\n icon: string\n } | null\n table: {\n label: string\n icon: string\n } | null\n math: {\n label: string\n icon: string\n } | null\n } | null\n}\n\nexport type BlockEditFeatureConfig = DeepPartial<BlockEditConfig>\n\nexport const blockEdit: DefineFeature<BlockEditFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.BlockEdit))\n .config((ctx) => configureBlockHandle(ctx, config))\n .config((ctx) => configureMenu(ctx, config))\n .use(menuAPI)\n .use(block)\n .use(menu)\n}\n","import type { Extension } from '@codemirror/state'\n\nimport { defaultKeymap, indentWithTab } from '@codemirror/commands'\nimport { keymap } from '@codemirror/view'\nimport {\n codeBlockComponent,\n codeBlockConfig,\n type CodeBlockConfig,\n} from '@milkdown/kit/component/code-block'\nimport { basicSetup } from 'codemirror'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport {\n chevronDownIcon,\n clearIcon,\n copyIcon,\n editIcon,\n searchIcon,\n visibilityOffIcon,\n} from '../../icons'\nimport { CrepeFeature } from '../index'\n\ninterface CodeMirrorConfig extends CodeBlockConfig {\n theme: Extension\n previewToggleIcon: (previewOnlyMode: boolean) => string\n previewToggleText: (previewOnlyMode: boolean) => string\n}\n\nexport type CodeMirrorFeatureConfig = Partial<CodeMirrorConfig>\n\nexport const codeMirror: DefineFeature<CodeMirrorFeatureConfig> = (\n editor,\n config = {}\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.CodeMirror))\n .config((ctx) => {\n const { languages = [], theme } = config\n const extensions = [\n keymap.of(defaultKeymap.concat(indentWithTab)),\n basicSetup,\n ]\n if (theme) {\n extensions.push(theme)\n }\n if (config.extensions) {\n extensions.push(...config.extensions)\n }\n\n ctx.update(codeBlockConfig.key, (defaultConfig) => ({\n extensions,\n languages,\n\n expandIcon: config.expandIcon || chevronDownIcon,\n searchIcon: config.searchIcon || searchIcon,\n clearSearchIcon: config.clearSearchIcon || clearIcon,\n searchPlaceholder: config.searchPlaceholder || 'Search language',\n copyText: config.copyText || 'Copy',\n copyIcon: config.copyIcon || copyIcon,\n onCopy: config.onCopy || (() => {}),\n noResultText: config.noResultText || 'No result',\n renderLanguage: config.renderLanguage || defaultConfig.renderLanguage,\n renderPreview: config.renderPreview || defaultConfig.renderPreview,\n previewToggleButton: (previewOnlyMode) => {\n const icon =\n config.previewToggleIcon?.(previewOnlyMode) ||\n (previewOnlyMode ? editIcon : visibilityOffIcon)\n const text =\n config.previewToggleText?.(previewOnlyMode) ||\n (previewOnlyMode ? 'Edit' : 'Hide')\n return [icon, text].map((v) => v.trim()).join(' ')\n },\n previewLabel: config.previewLabel || defaultConfig.previewLabel,\n previewLoading: config.previewLoading || defaultConfig.previewLoading,\n previewOnlyByDefault:\n config.previewOnlyByDefault ?? defaultConfig.previewOnlyByDefault,\n }))\n })\n .use(codeBlockComponent)\n}\n","import {\n cursor as cursorPlugin,\n dropIndicatorConfig,\n} from '@milkdown/kit/plugin/cursor'\nimport { $prose } from '@milkdown/kit/utils'\nimport { createVirtualCursor } from 'prosemirror-virtual-cursor'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../index'\n\ninterface CursorConfig {\n color: string | false\n width: number\n virtual: boolean\n}\nexport type CursorFeatureConfig = Partial<CursorConfig>\n\nexport const cursor: DefineFeature<CursorFeatureConfig> = (editor, config) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Cursor))\n .config((ctx) => {\n ctx.update(dropIndicatorConfig.key, () => ({\n class: 'crepe-drop-cursor',\n width: config?.width ?? 4,\n color: config?.color ?? false,\n }))\n })\n .use(cursorPlugin)\n\n if (config?.virtual === false) {\n return\n }\n\n const virtualCursor = createVirtualCursor()\n editor.use($prose(() => virtualCursor))\n}\n","import {\n imageBlockComponent,\n imageBlockConfig,\n} from '@milkdown/kit/component/image-block'\nimport {\n imageInlineComponent,\n inlineImageConfig,\n} from '@milkdown/kit/component/image-inline'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { captionIcon, imageIcon, confirmIcon } from '../../icons'\nimport { CrepeFeature } from '../index'\n\ninterface ImageBlockConfig {\n onUpload: (file: File) => Promise<string>\n proxyDomURL: (url: string) => Promise<string> | string\n\n inlineImageIcon: string\n inlineConfirmButton: string\n inlineUploadButton: string\n inlineUploadPlaceholderText: string\n inlineOnUpload: (file: File) => Promise<string>\n\n blockImageIcon: string\n blockConfirmButton: string\n blockCaptionIcon: string\n blockUploadButton: string\n blockCaptionPlaceholderText: string\n blockUploadPlaceholderText: string\n blockOnUpload: (file: File) => Promise<string>\n onImageLoadError: (event: Event) => void | Promise<void>\n}\n\nexport type ImageBlockFeatureConfig = Partial<ImageBlockConfig>\n\nexport const imageBlock: DefineFeature<ImageBlockFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.ImageBlock))\n .config((ctx) => {\n ctx.update(inlineImageConfig.key, (value) => ({\n uploadButton: config?.inlineUploadButton ?? 'Upload',\n imageIcon: config?.inlineImageIcon ?? imageIcon,\n confirmButton: config?.inlineConfirmButton ?? confirmIcon,\n uploadPlaceholderText:\n config?.inlineUploadPlaceholderText ?? 'or paste link',\n onUpload: config?.inlineOnUpload ?? config?.onUpload ?? value.onUpload,\n proxyDomURL: config?.proxyDomURL,\n }))\n ctx.update(imageBlockConfig.key, (value) => ({\n uploadButton: config?.blockUploadButton ?? 'Upload file',\n imageIcon: config?.blockImageIcon ?? imageIcon,\n captionIcon: config?.blockCaptionIcon ?? captionIcon,\n confirmButton: config?.blockConfirmButton ?? 'Confirm',\n captionPlaceholderText:\n config?.blockCaptionPlaceholderText ?? 'Write Image Caption',\n uploadPlaceholderText:\n config?.blockUploadPlaceholderText ?? 'or paste link',\n onUpload: config?.blockOnUpload ?? config?.onUpload ?? value.onUpload,\n proxyDomURL: config?.proxyDomURL,\n onImageLoadError: config?.onImageLoadError ?? value.onImageLoadError,\n }))\n })\n .use(imageBlockComponent)\n .use(imageInlineComponent)\n}\n","import { codeBlockSchema } from '@milkdown/kit/preset/commonmark'\n\nexport const blockLatexSchema = codeBlockSchema.extendSchema((prev) => {\n return (ctx) => {\n const baseSchema = prev(ctx)\n return {\n ...baseSchema,\n toMarkdown: {\n match: baseSchema.toMarkdown.match,\n runner: (state, node) => {\n const language = node.attrs.language ?? ''\n if (language.toLowerCase() === 'latex') {\n state.addNode(\n 'math',\n undefined,\n node.content.firstChild?.text || ''\n )\n } else {\n return baseSchema.toMarkdown.runner(state, node)\n }\n },\n },\n }\n }\n})\n","import { $nodeSchema } from '@milkdown/kit/utils'\nimport katex from 'katex'\n\nexport const mathInlineId = 'math_inline'\n\n/// Schema for inline math node.\n/// Add support for:\n///\n/// ```markdown\n/// $a^2 + b^2 = c^2$\n/// ```\nexport const mathInlineSchema = $nodeSchema(mathInlineId, () => ({\n group: 'inline',\n inline: true,\n draggable: true,\n atom: true,\n attrs: {\n value: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `span[data-type=\"${mathInlineId}\"]`,\n getAttrs: (dom) => {\n return {\n value: (dom as HTMLElement).dataset.value ?? '',\n }\n },\n },\n ],\n toDOM: (node) => {\n const code: string = node.attrs.value\n const dom = document.createElement('span')\n dom.dataset.type = mathInlineId\n dom.dataset.value = code\n katex.render(code, dom, {\n throwOnError: false,\n })\n\n return dom\n },\n parseMarkdown: {\n match: (node) => node.type === 'inlineMath',\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value as string })\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === mathInlineId,\n runner: (state, node) => {\n state.addNode('inlineMath', undefined, node.attrs.value)\n },\n },\n}))\n","import type { Node } from '@milkdown/kit/prose/model'\n\nimport { findNodeInSelection } from '@milkdown/kit/prose'\nimport { NodeSelection, TextSelection } from '@milkdown/kit/prose/state'\nimport { $command } from '@milkdown/kit/utils'\n\nimport { mathInlineSchema } from './inline-latex'\n\nexport const toggleLatexCommand = $command('ToggleLatex', (ctx) => {\n return () => (state, dispatch) => {\n const {\n hasNode: hasLatex,\n pos: latexPos,\n target: latexNode,\n } = findNodeInSelection(state, mathInlineSchema.type(ctx))\n\n const { selection, doc, tr } = state\n if (!hasLatex) {\n const text = doc.textBetween(selection.from, selection.to)\n let _tr = tr.replaceSelectionWith(\n mathInlineSchema.type(ctx).create({\n value: text,\n })\n )\n if (dispatch) {\n dispatch(\n _tr.setSelection(NodeSelection.create(_tr.doc, selection.from))\n )\n }\n return true\n }\n\n const { from, to } = selection\n if (!latexNode || latexPos < 0) return false\n\n let _tr = tr.delete(latexPos, latexPos + 1)\n const content = (latexNode as Node).attrs.value\n _tr = _tr.insertText(content, latexPos)\n if (dispatch) {\n dispatch(\n _tr.setSelection(\n TextSelection.create(_tr.doc, from, to + content.length - 1)\n )\n )\n }\n return true\n }\n})\n","import { tooltipFactory } from '@milkdown/kit/plugin/tooltip'\n\nexport const inlineLatexTooltip = tooltipFactory('INLINE_LATEX')\n","import type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { Icon } from '@milkdown/kit/component'\nimport { defineComponent, type ShallowRef, type VNodeRef, h } from 'vue'\n\nimport type { LatexConfig } from '..'\n\ntype LatexTooltipProps = {\n config: Partial<LatexConfig>\n innerView: ShallowRef<EditorView | null>\n updateValue: ShallowRef<() => void>\n}\n\nh\n\nexport const LatexTooltip = defineComponent<LatexTooltipProps>({\n props: {\n config: {\n type: Object,\n required: true,\n },\n innerView: {\n type: Object,\n required: true,\n },\n updateValue: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const innerViewRef: VNodeRef = (el) => {\n if (!el || !(el instanceof HTMLElement)) return\n while (el.firstChild) {\n el.removeChild(el.firstChild)\n }\n if (props.innerView.value) {\n el.appendChild(props.innerView.value.dom)\n }\n }\n const onUpdate = (e: Event) => {\n e.preventDefault()\n props.updateValue.value()\n }\n\n return () => {\n return (\n <div class=\"container\">\n {props.innerView && <div ref={innerViewRef} />}\n <button type=\"button\" onPointerdown={onUpdate}>\n <Icon icon={props.config.inlineEditConfirm} />\n </button>\n </div>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { PluginView } from '@milkdown/kit/prose/state'\n\nimport { TooltipProvider } from '@milkdown/kit/plugin/tooltip'\nimport { redo, undo } from '@milkdown/kit/prose/history'\nimport { keymap } from '@milkdown/kit/prose/keymap'\nimport { Schema } from '@milkdown/kit/prose/model'\nimport { EditorState, NodeSelection } from '@milkdown/kit/prose/state'\nimport { EditorView } from '@milkdown/kit/prose/view'\nimport { createApp, shallowRef, type App, type ShallowRef } from 'vue'\n\nimport type { LatexConfig } from '..'\n\nimport { mathInlineId } from '../inline-latex'\nimport { LatexTooltip } from './component'\n\nexport class LatexInlineTooltip implements PluginView {\n #content: HTMLElement\n #provider: TooltipProvider\n #dom: HTMLElement\n #innerView: ShallowRef<EditorView | null> = shallowRef(null)\n #updateValue: ShallowRef<() => void> = shallowRef(() => {})\n #app: App\n\n constructor(\n readonly ctx: Ctx,\n view: EditorView,\n config: Partial<LatexConfig>\n ) {\n const content = document.createElement('div')\n content.className = 'milkdown-latex-inline-edit'\n this.#content = content\n this.#app = createApp(LatexTooltip, {\n config,\n innerView: this.#innerView,\n updateValue: this.#updateValue,\n })\n this.#app.mount(content)\n this.#provider = new TooltipProvider({\n debounce: 0,\n content: this.#content,\n shouldShow: this.#shouldShow,\n offset: 10,\n floatingUIOptions: {\n placement: 'bottom',\n },\n })\n this.#provider.update(view)\n this.#dom = document.createElement('div')\n }\n\n #onHide = () => {\n if (this.#innerView.value) {\n this.#innerView.value.destroy()\n this.#innerView.value = null\n }\n }\n\n #shouldShow = (view: EditorView) => {\n const shouldShow = () => {\n const { selection, schema } = view.state\n if (selection.empty) return false\n if (!(selection instanceof NodeSelection)) return false\n const node = selection.node\n if (node.type.name !== mathInlineId) return false\n\n const textFrom = selection.from\n\n const paragraph = schema.nodes.paragraph!.create(\n null,\n schema.text(node.attrs.value)\n )\n\n const innerView = new EditorView(this.#dom, {\n state: EditorState.create({\n doc: paragraph,\n schema: new Schema({\n nodes: {\n doc: {\n content: 'block+',\n },\n paragraph: {\n content: 'inline*',\n group: 'block',\n parseDOM: [{ tag: 'p' }],\n toDOM() {\n return ['p', 0]\n },\n },\n text: {\n group: 'inline',\n },\n },\n }),\n plugins: [\n keymap({\n 'Mod-z': undo,\n 'Mod-Z': redo,\n 'Mod-y': redo,\n Enter: () => {\n this.#updateValue.value()\n return true\n },\n }),\n ],\n }),\n })\n\n this.#innerView.value = innerView\n this.#updateValue.value = () => {\n const { tr } = view.state\n tr.setNodeAttribute(textFrom, 'value', innerView.state.doc.textContent)\n view.dispatch(tr)\n requestAnimationFrame(() => {\n view.focus()\n })\n }\n return true\n }\n\n const show = shouldShow()\n if (!show) this.#onHide()\n return show\n }\n\n update = (view: EditorView, prevState?: EditorState) => {\n this.#provider.update(view, prevState)\n }\n\n destroy = () => {\n this.#app.unmount()\n this.#provider.destroy()\n this.#content.remove()\n }\n}\n","import { codeBlockSchema } from '@milkdown/kit/preset/commonmark'\nimport { nodeRule } from '@milkdown/kit/prose'\nimport { textblockTypeInputRule } from '@milkdown/kit/prose/inputrules'\nimport { $inputRule } from '@milkdown/kit/utils'\n\nimport { mathInlineSchema } from './inline-latex'\n\n/// Input rule for inline math.\n/// When you type $E=MC^2$, it will create an inline math node.\nexport const mathInlineInputRule = $inputRule((ctx) =>\n nodeRule(/(?:\\$)([^$]+)(?:\\$)$/, mathInlineSchema.type(ctx), {\n getAttr: (match) => {\n return {\n value: match[1] ?? '',\n }\n },\n })\n)\n\n/// A input rule for creating block math.\n/// For example, `$$ ` will create a code block with language javascript.\nexport const mathBlockInputRule = $inputRule((ctx) =>\n textblockTypeInputRule(/^\\$\\$[\\s\\n]$/, codeBlockSchema.type(ctx), () => ({\n language: 'LaTeX',\n }))\n)\n","import type { Node } from '@milkdown/kit/transformer'\n\nimport { $remark } from '@milkdown/kit/utils'\nimport remarkMath from 'remark-math'\nimport { visit } from 'unist-util-visit'\n\nexport const remarkMathPlugin = $remark<'remarkMath', undefined>(\n 'remarkMath',\n () => remarkMath\n)\n\nfunction visitMathBlock(ast: Node) {\n return visit(\n ast,\n 'math',\n (\n node: Node & { value: string },\n index: number,\n parent: Node & { children: Node[] }\n ) => {\n const { value } = node as Node & { value: string }\n const newNode = {\n type: 'code',\n lang: 'LaTeX',\n value,\n }\n parent.children.splice(index, 1, newNode)\n }\n )\n}\n\n/// Turn math block into code block with language LaTeX.\nexport const remarkMathBlockPlugin = $remark(\n 'remarkMathBlock',\n () => () => visitMathBlock\n)\n","import type { KatexOptions } from 'katex'\n\nimport { codeBlockConfig } from '@milkdown/kit/component/code-block'\nimport katex from 'katex'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig, useCrepeFeatures } from '../../core/slice'\nimport { CrepeFeature } from '../../feature'\nimport { confirmIcon } from '../../icons'\nimport { blockLatexSchema } from './block-latex'\nimport { toggleLatexCommand } from './command'\nimport { mathInlineSchema } from './inline-latex'\nimport { inlineLatexTooltip } from './inline-tooltip/tooltip'\nimport { LatexInlineTooltip } from './inline-tooltip/view'\nimport { mathBlockInputRule, mathInlineInputRule } from './input-rule'\nimport { remarkMathBlockPlugin, remarkMathPlugin } from './remark'\n\nexport interface LatexConfig {\n katexOptions: KatexOptions\n inlineEditConfirm: string\n}\n\nexport type LatexFeatureConfig = Partial<LatexConfig>\n\nexport const latex: DefineFeature<LatexFeatureConfig> = (editor, config) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Latex))\n .config((ctx) => {\n const flags = useCrepeFeatures(ctx).get()\n const isCodeMirrorEnabled = flags.includes(CrepeFeature.CodeMirror)\n if (!isCodeMirrorEnabled) {\n throw new Error('You need to enable CodeMirror to use LaTeX feature')\n }\n\n ctx.update(codeBlockConfig.key, (prev) => ({\n ...prev,\n renderPreview: (language, content, applyPreview) => {\n if (language.toLowerCase() === 'latex' && content.length > 0) {\n return renderLatex(content, config?.katexOptions)\n }\n const renderPreview = prev.renderPreview\n return renderPreview(language, content, applyPreview)\n },\n }))\n\n ctx.set(inlineLatexTooltip.key, {\n view: (view) => {\n return new LatexInlineTooltip(ctx, view, {\n inlineEditConfirm: config?.inlineEditConfirm ?? confirmIcon,\n ...config,\n })\n },\n })\n })\n .use(remarkMathPlugin)\n .use(remarkMathBlockPlugin)\n .use(mathInlineSchema)\n .use(inlineLatexTooltip)\n .use(mathInlineInputRule)\n .use(mathBlockInputRule)\n .use(blockLatexSchema)\n .use(toggleLatexCommand)\n}\n\nfunction renderLatex(content: string, options?: KatexOptions) {\n const html = katex.renderToString(content, {\n ...options,\n throwOnError: false,\n displayMode: true,\n })\n return html\n}\n","import {\n configureLinkTooltip,\n linkTooltipConfig,\n linkTooltipPlugin,\n} from '@milkdown/kit/component/link-tooltip'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { copyIcon, editIcon, removeIcon, confirmIcon } from '../../icons'\nimport { CrepeFeature } from '../index'\n\ninterface LinkTooltipConfig {\n linkIcon: string\n editButton: string\n removeButton: string\n confirmButton: string\n inputPlaceholder: string\n onCopyLink: (link: string) => void\n}\n\nexport type LinkTooltipFeatureConfig = Partial<LinkTooltipConfig>\n\nexport const linkTooltip: DefineFeature<LinkTooltipFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.LinkTooltip))\n .config(configureLinkTooltip)\n .config((ctx) => {\n ctx.update(linkTooltipConfig.key, (prev) => ({\n ...prev,\n linkIcon: config?.linkIcon ?? copyIcon,\n editButton: config?.editButton ?? editIcon,\n removeButton: config?.removeButton ?? removeIcon,\n confirmButton: config?.confirmButton ?? confirmIcon,\n inputPlaceholder: config?.inputPlaceholder ?? 'Paste link...',\n onCopyLink: config?.onCopyLink ?? (() => {}),\n }))\n })\n .use(linkTooltipPlugin)\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport {\n listItemBlockComponent,\n listItemBlockConfig,\n} from '@milkdown/kit/component/list-item-block'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport {\n bulletIcon,\n checkBoxCheckedIcon,\n checkBoxUncheckedIcon,\n} from '../../icons'\nimport { CrepeFeature } from '../index'\n\nexport interface ListItemConfig {\n bulletIcon: string\n checkBoxCheckedIcon: string\n checkBoxUncheckedIcon: string\n}\n\nexport type ListItemFeatureConfig = Partial<ListItemConfig>\n\nfunction configureListItem(ctx: Ctx, config?: ListItemFeatureConfig) {\n ctx.set(listItemBlockConfig.key, {\n renderLabel: ({ label, listType, checked }) => {\n if (checked == null) {\n if (listType === 'bullet') return config?.bulletIcon ?? bulletIcon\n\n return label\n }\n\n if (checked) return config?.checkBoxCheckedIcon ?? checkBoxCheckedIcon\n\n return config?.checkBoxUncheckedIcon ?? checkBoxUncheckedIcon\n },\n })\n}\n\nexport const listItem: DefineFeature<ListItemFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.ListItem))\n .config((ctx) => configureListItem(ctx, config))\n .use(listItemBlockComponent)\n}\n","import type { Node } from '@milkdown/kit/prose/model'\nimport type { EditorState } from '@milkdown/kit/prose/state'\n\nimport { findParent } from '@milkdown/kit/prose'\nimport { Plugin, PluginKey } from '@milkdown/kit/prose/state'\nimport { Decoration, DecorationSet } from '@milkdown/kit/prose/view'\nimport { $ctx, $prose } from '@milkdown/kit/utils'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig, useCrepe } from '../../core/slice'\nimport { isInCodeBlock, isInList } from '../../utils'\nimport { CrepeFeature } from '../index'\n\nfunction isDocEmpty(doc: Node) {\n return doc.childCount <= 1 && !doc.firstChild?.content.size\n}\n\nfunction createPlaceholderDecoration(\n state: EditorState,\n placeholderText: string\n): Decoration | null {\n const { selection } = state\n if (!selection.empty) return null\n\n const $pos = selection.$anchor\n const node = $pos.parent\n if (node.content.size > 0) return null\n\n const inTable = findParent((node) => node.type.name === 'table')($pos)\n if (inTable) return null\n\n const before = $pos.before()\n\n return Decoration.node(before, before + node.nodeSize, {\n class: 'crepe-placeholder',\n 'data-placeholder': placeholderText,\n })\n}\n\ninterface PlaceholderConfig {\n text: string\n mode: 'doc' | 'block'\n}\n\nexport type PlaceholderFeatureConfig = Partial<PlaceholderConfig>\n\nexport const placeholderConfig = $ctx(\n {\n text: 'Please enter...',\n mode: 'block',\n } as PlaceholderConfig,\n 'placeholderConfigCtx'\n)\n\nexport const placeholderPlugin = $prose((ctx) => {\n return new Plugin({\n key: new PluginKey('CREPE_PLACEHOLDER'),\n props: {\n decorations: (state) => {\n const crepe = useCrepe(ctx)\n if (crepe.readonly) return null\n\n const config = ctx.get(placeholderConfig.key)\n if (config.mode === 'doc' && !isDocEmpty(state.doc)) return null\n\n if (isInCodeBlock(state.selection) || isInList(state.selection))\n return null\n\n const placeholderText = config.text ?? 'Please enter...'\n const deco = createPlaceholderDecoration(state, placeholderText)\n if (!deco) return null\n\n return DecorationSet.create(state.doc, [deco])\n },\n },\n })\n})\n\nexport const placeholder: DefineFeature<PlaceholderFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Placeholder))\n .config((ctx) => {\n if (config) {\n ctx.update(placeholderConfig.key, (prev) => {\n return {\n ...prev,\n ...config,\n }\n })\n }\n })\n .use(placeholderPlugin)\n .use(placeholderConfig)\n}\n","import {\n tableBlock,\n tableBlockConfig,\n} from '@milkdown/kit/component/table-block'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport {\n alignCenterIcon,\n alignLeftIcon,\n alignRightIcon,\n dragHandleIcon,\n plusIcon,\n removeIcon,\n} from '../../icons'\nimport { CrepeFeature } from '../index'\n\ninterface TableConfig {\n addRowIcon: string\n addColIcon: string\n deleteRowIcon: string\n deleteColIcon: string\n alignLeftIcon: string\n alignCenterIcon: string\n alignRightIcon: string\n colDragHandleIcon: string\n rowDragHandleIcon: string\n}\n\nexport type TableFeatureConfig = Partial<TableConfig>\n\nexport const table: DefineFeature<TableFeatureConfig> = (editor, config) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Table))\n .config((ctx) => {\n ctx.update(tableBlockConfig.key, (defaultConfig) => ({\n ...defaultConfig,\n renderButton: (renderType) => {\n switch (renderType) {\n case 'add_row':\n return config?.addRowIcon ?? plusIcon\n case 'add_col':\n return config?.addColIcon ?? plusIcon\n case 'delete_row':\n return config?.deleteRowIcon ?? removeIcon\n case 'delete_col':\n return config?.deleteColIcon ?? removeIcon\n case 'align_col_left':\n return config?.alignLeftIcon ?? alignLeftIcon\n case 'align_col_center':\n return config?.alignCenterIcon ?? alignCenterIcon\n case 'align_col_right':\n return config?.alignRightIcon ?? alignRightIcon\n case 'col_drag_handle':\n return config?.colDragHandleIcon ?? dragHandleIcon\n case 'row_drag_handle':\n return config?.rowDragHandleIcon ?? dragHandleIcon\n }\n },\n }))\n })\n .use(tableBlock)\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { toggleLinkCommand } from '@milkdown/kit/component/link-tooltip'\nimport { commandsCtx } from '@milkdown/kit/core'\nimport {\n emphasisSchema,\n inlineCodeSchema,\n isMarkSelectedCommand,\n isNodeSelectedCommand,\n linkSchema,\n strongSchema,\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n} from '@milkdown/kit/preset/commonmark'\nimport {\n strikethroughSchema,\n toggleStrikethroughCommand,\n} from '@milkdown/kit/preset/gfm'\n\nimport type { ToolbarFeatureConfig } from '.'\n\nimport { CrepeFeature } from '..'\nimport { useCrepeFeatures } from '../../core/slice'\nimport {\n boldIcon,\n codeIcon,\n functionsIcon,\n italicIcon,\n linkIcon,\n strikethroughIcon,\n} from '../../icons'\nimport { GroupBuilder } from '../../utils/group-builder'\nimport { toggleLatexCommand } from '../latex/command'\nimport { mathInlineSchema } from '../latex/inline-latex'\n\nexport type ToolbarItem = {\n active: (ctx: Ctx) => boolean\n icon: string\n}\n\nexport function getGroups(config?: ToolbarFeatureConfig, ctx?: Ctx) {\n const groupBuilder = new GroupBuilder<ToolbarItem>()\n\n groupBuilder\n .addGroup('formatting', 'Formatting')\n .addItem('bold', {\n icon: config?.boldIcon ?? boldIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(isMarkSelectedCommand.key, strongSchema.type(ctx))\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleStrongCommand.key)\n },\n })\n .addItem('italic', {\n icon: config?.italicIcon ?? italicIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n emphasisSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleEmphasisCommand.key)\n },\n })\n .addItem('strikethrough', {\n icon: config?.strikethroughIcon ?? strikethroughIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n strikethroughSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleStrikethroughCommand.key)\n },\n })\n\n const functionGroup = groupBuilder.addGroup('function', 'Function')\n functionGroup.addItem('code', {\n icon: config?.codeIcon ?? codeIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n inlineCodeSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleInlineCodeCommand.key)\n },\n })\n\n const flags = ctx && useCrepeFeatures(ctx).get()\n const isLatexEnabled = flags?.includes(CrepeFeature.Latex)\n if (isLatexEnabled) {\n functionGroup.addItem('latex', {\n icon: config?.latexIcon ?? functionsIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isNodeSelectedCommand.key,\n mathInlineSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleLatexCommand.key)\n },\n })\n }\n functionGroup.addItem('link', {\n icon: config?.linkIcon ?? linkIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(isMarkSelectedCommand.key, linkSchema.type(ctx))\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleLinkCommand.key)\n },\n })\n\n config?.buildToolbar?.(groupBuilder)\n\n return groupBuilder.build()\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { Selection } from '@milkdown/kit/prose/state'\n\nimport { Icon } from '@milkdown/kit/component'\nimport { editorCtx, EditorStatus } from '@milkdown/kit/core'\nimport clsx from 'clsx'\nimport {\n defineComponent,\n type Ref,\n type ShallowRef,\n h,\n Fragment,\n computed,\n} from 'vue'\n\nimport type { ToolbarFeatureConfig } from '.'\n\nimport { getGroups, type ToolbarItem } from './config'\n\nh\nFragment\n\ntype ToolbarProps = {\n ctx: Ctx\n hide: () => void\n show: Ref<boolean>\n selection: ShallowRef<Selection>\n config?: ToolbarFeatureConfig\n}\n\nexport const Toolbar = defineComponent<ToolbarProps>({\n props: {\n ctx: {\n type: Object,\n required: true,\n },\n hide: {\n type: Function,\n required: true,\n },\n show: {\n type: Object,\n required: true,\n },\n selection: {\n type: Object,\n required: true,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n setup(props) {\n const { ctx, config } = props\n\n const onClick = (fn: (ctx: Ctx) => void) => (e: MouseEvent) => {\n e.preventDefault()\n ctx && fn(ctx)\n }\n\n function checkActive(checker: ToolbarItem['active']) {\n // make sure the function subscribed to vue reactive\n props.selection.value\n // Check if the edtior is ready\n const status = ctx.get(editorCtx).status\n if (status !== EditorStatus.Created) return false\n\n return checker(ctx)\n }\n\n const groupInfo = computed(() => getGroups(config, ctx))\n\n return () => {\n return (\n <>\n {groupInfo.value\n .map((group) => {\n return group.items.map((item) => {\n return (\n <button\n type=\"button\"\n class={clsx(\n 'toolbar-item',\n ctx && checkActive(item.active) && 'active'\n )}\n onPointerdown={onClick(item.onRun)}\n >\n <Icon icon={item.icon} />\n </button>\n )\n })\n })\n .reduce((acc, curr, index) => {\n if (index === 0) {\n acc.push(...curr)\n } else {\n acc.push(<div class=\"divider\"></div>, ...curr)\n }\n return acc\n }, [])}\n </>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type {\n EditorState,\n PluginView,\n Selection,\n} from '@milkdown/kit/prose/state'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { TooltipProvider, tooltipFactory } from '@milkdown/kit/plugin/tooltip'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { createApp, ref, shallowRef, type App, type ShallowRef } from 'vue'\n\nimport type { GroupBuilder } from '../../utils'\nimport type { DefineFeature } from '../shared'\nimport type { ToolbarItem } from './config'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../../feature'\nimport { Toolbar } from './component'\n\ninterface ToolbarConfig {\n boldIcon: string\n codeIcon: string\n italicIcon: string\n linkIcon: string\n strikethroughIcon: string\n latexIcon: string\n buildToolbar: (builder: GroupBuilder<ToolbarItem>) => void\n}\n\nexport type ToolbarFeatureConfig = Partial<ToolbarConfig>\n\nconst toolbarTooltip = tooltipFactory('CREPE_TOOLBAR')\n\nclass ToolbarView implements PluginView {\n #tooltipProvider: TooltipProvider\n #content: HTMLElement\n #app: App\n #selection: ShallowRef<Selection>\n #show = ref(false)\n\n constructor(ctx: Ctx, view: EditorView, config?: ToolbarFeatureConfig) {\n const content = document.createElement('div')\n content.className = 'milkdown-toolbar'\n this.#selection = shallowRef(view.state.selection)\n const app = createApp(Toolbar, {\n ctx,\n hide: this.hide,\n config,\n selection: this.#selection,\n show: this.#show,\n })\n app.mount(content)\n this.#content = content\n this.#app = app\n\n this.#tooltipProvider = new TooltipProvider({\n content: this.#content,\n debounce: 20,\n offset: 10,\n shouldShow(view: EditorView) {\n const { doc, selection } = view.state\n const { empty, from, to } = selection\n\n const isEmptyTextBlock =\n !doc.textBetween(from, to).length &&\n selection instanceof TextSelection\n\n const isNotTextBlock = !(selection instanceof TextSelection)\n\n const activeElement = (view.dom.getRootNode() as ShadowRoot | Document)\n .activeElement\n const isTooltipChildren = content.contains(activeElement)\n\n const notHasFocus = !view.hasFocus() && !isTooltipChildren\n\n const isReadonly = !view.editable\n\n if (\n notHasFocus ||\n isNotTextBlock ||\n empty ||\n isEmptyTextBlock ||\n isReadonly\n )\n return false\n\n return true\n },\n })\n this.#tooltipProvider.onShow = () => {\n this.#show.value = true\n }\n this.#tooltipProvider.onHide = () => {\n this.#show.value = false\n }\n this.update(view)\n }\n\n update = (view: EditorView, prevState?: EditorState) => {\n this.#tooltipProvider.update(view, prevState)\n this.#selection.value = view.state.selection\n }\n\n destroy = () => {\n this.#tooltipProvider.destroy()\n this.#app.unmount()\n this.#content.remove()\n }\n\n hide = () => {\n this.#tooltipProvider.hide()\n }\n}\n\nexport const toolbar: DefineFeature<ToolbarFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Toolbar))\n .config((ctx) => {\n ctx.set(toolbarTooltip.key, {\n view: (view) => new ToolbarView(ctx, view, config),\n })\n })\n .use(toolbarTooltip)\n}\n","import type { Editor } from '@milkdown/kit/core'\n\nimport { blockEdit } from './block-edit'\nimport { codeMirror } from './code-mirror'\nimport { cursor } from './cursor'\nimport { imageBlock } from './image-block'\nimport { CrepeFeature } from './index'\nimport { latex } from './latex'\nimport { linkTooltip } from './link-tooltip'\nimport { listItem } from './list-item'\nimport { placeholder } from './placeholder'\nimport { table } from './table'\nimport { toolbar } from './toolbar'\n\nexport function loadFeature(\n feature: CrepeFeature,\n editor: Editor,\n config?: never\n) {\n switch (feature) {\n case CrepeFeature.CodeMirror: {\n return codeMirror(editor, config)\n }\n case CrepeFeature.ListItem: {\n return listItem(editor, config)\n }\n case CrepeFeature.LinkTooltip: {\n return linkTooltip(editor, config)\n }\n case CrepeFeature.ImageBlock: {\n return imageBlock(editor, config)\n }\n case CrepeFeature.Cursor: {\n return cursor(editor, config)\n }\n case CrepeFeature.BlockEdit: {\n return blockEdit(editor, config)\n }\n case CrepeFeature.Placeholder: {\n return placeholder(editor, config)\n }\n case CrepeFeature.Toolbar: {\n return toolbar(editor, config)\n }\n case CrepeFeature.Table: {\n return table(editor, config)\n }\n case CrepeFeature.Latex: {\n return latex(editor, config)\n }\n }\n}\n","import {\n type DefaultValue,\n defaultValueCtx,\n Editor,\n EditorStatus,\n editorViewCtx,\n editorViewOptionsCtx,\n rootCtx,\n} from '@milkdown/kit/core'\nimport { clipboard } from '@milkdown/kit/plugin/clipboard'\nimport { history } from '@milkdown/kit/plugin/history'\nimport { indent, indentConfig } from '@milkdown/kit/plugin/indent'\nimport {\n listener,\n listenerCtx,\n type ListenerManager,\n} from '@milkdown/kit/plugin/listener'\nimport { trailing } from '@milkdown/kit/plugin/trailing'\nimport { commonmark } from '@milkdown/kit/preset/commonmark'\nimport { gfm } from '@milkdown/kit/preset/gfm'\nimport { getMarkdown } from '@milkdown/kit/utils'\n\nimport type { CrepeFeature, CrepeFeatureConfig } from '../feature'\nimport type { DefineFeature } from '../feature/shared'\n\nimport { CrepeCtx, FeaturesCtx } from './slice'\n\n/// The crepe builder configuration.\nexport interface CrepeBuilderConfig {\n /// The root element for the editor.\n /// Supports both DOM nodes and CSS selectors,\n /// If not provided, the editor will be appended to the body.\n root?: Node | string | null\n\n /// The default value for the editor.\n defaultValue?: DefaultValue\n}\n\n/// The crepe builder class.\n/// This class allows users to manually add features to the editor.\nexport class CrepeBuilder {\n /// @internal\n readonly #editor: Editor\n\n /// @internal\n readonly #rootElement: Node\n\n /// @internal\n #editable = true\n\n /// The constructor of the crepe builder.\n /// You can pass configs to the builder to configure the editor.\n constructor({ root, defaultValue = '' }: CrepeBuilderConfig = {}) {\n this.#rootElement =\n (typeof root === 'string' ? document.querySelector(root) : root) ??\n document.body\n this.#editor = Editor.make()\n .config((ctx) => {\n ctx.inject(CrepeCtx, this)\n ctx.inject(FeaturesCtx, [])\n })\n .config((ctx) => {\n ctx.set(rootCtx, this.#rootElement)\n ctx.set(defaultValueCtx, defaultValue)\n ctx.set(editorViewOptionsCtx, {\n editable: () => this.#editable,\n })\n ctx.update(indentConfig.key, (value) => ({\n ...value,\n size: 4,\n }))\n })\n .use(commonmark)\n .use(listener)\n .use(history)\n .use(indent)\n .use(trailing)\n .use(clipboard)\n .use(gfm)\n }\n\n /// Add a feature to the editor.\n addFeature: {\n <T extends CrepeFeature>(\n feature: DefineFeature<CrepeFeatureConfig[T]>,\n config?: CrepeFeatureConfig[T]\n ): CrepeBuilder\n <C>(feature: DefineFeature<C>, config?: C): CrepeBuilder\n } = (feature: DefineFeature, config?: never) => {\n feature(this.#editor, config)\n return this\n }\n\n /// Create the editor.\n create = () => {\n return this.#editor.create()\n }\n\n /// Destroy the editor.\n destroy = () => {\n return this.#editor.destroy()\n }\n\n /// Get the milkdown editor instance.\n get editor(): Editor {\n return this.#editor\n }\n\n /// Get the readonly state of the editor.\n get readonly() {\n return !this.#editable\n }\n\n /// Set the readonly mode of the editor.\n setReadonly = (value: boolean) => {\n this.#editable = !value\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n const view = ctx.get(editorViewCtx)\n view.setProps({\n editable: () => !value,\n })\n }\n })\n return this\n }\n\n /// Get the markdown content of the editor.\n getMarkdown = () => {\n return this.#editor.action(getMarkdown())\n }\n\n /// Register event listeners.\n on = (fn: (api: ListenerManager) => void) => {\n if (this.#editor.status !== EditorStatus.Created) {\n this.#editor.config((ctx) => {\n const listener = ctx.get(listenerCtx)\n fn(listener)\n })\n return this\n }\n this.#editor.action((ctx) => {\n const listener = ctx.get(listenerCtx)\n fn(listener)\n })\n return this\n }\n}\n","import { defaultsDeep } from 'lodash-es'\n\nimport type { CrepeFeatureConfig } from '../feature'\n\nimport { defaultConfig } from '../default-config'\nimport { CrepeFeature, defaultFeatures } from '../feature'\nimport { loadFeature } from '../feature/loader'\nimport { CrepeBuilder, type CrepeBuilderConfig } from './builder'\n\n/// The crepe editor configuration.\nexport interface CrepeConfig extends CrepeBuilderConfig {\n /// Enable/disable specific features.\n features?: Partial<Record<CrepeFeature, boolean>>\n\n /// Configure individual features.\n featureConfigs?: CrepeFeatureConfig\n}\n\n/// The crepe editor class.\nexport class Crepe extends CrepeBuilder {\n /// This is an alias for the `CrepeFeature` enum.\n static Feature = CrepeFeature\n\n /// The constructor of the crepe editor.\n /// You can pass configs to the editor to configure the editor.\n /// Calling the constructor will not create the editor, you need to call `create` to create the editor.\n constructor({\n features = {},\n featureConfigs = {},\n ...crepeBuilderConfig\n }: CrepeConfig = {}) {\n super(crepeBuilderConfig)\n\n const finalConfigs = defaultsDeep(featureConfigs, defaultConfig)\n\n const enabledFeatures = Object.entries({\n ...defaultFeatures,\n ...features,\n })\n .filter(([, enabled]) => enabled)\n .map(([feature]) => feature as CrepeFeature)\n\n enabledFeatures.forEach((feature) => {\n const config = (finalConfigs as Partial<Record<CrepeFeature, never>>)[\n feature\n ]\n loadFeature(feature, this.editor, config)\n })\n }\n}\n"],"names":["CrepeFeature","__privateAdd","__privateSet","__privateGet","group","getGroups","ctx","items","groups","_content","_app","view","_provider","_a","cursorPlugin","_tr","keymap","node","listener"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/feature/index.ts","../../src/icons/ai.ts","../../src/icons/align-center.ts","../../src/icons/align-left.ts","../../src/icons/align-right.ts","../../src/icons/bold.ts","../../src/icons/bullet.ts","../../src/icons/bullet-list.ts","../../src/icons/caption.ts","../../src/icons/check-box-checked.ts","../../src/icons/check-box-unchecked.ts","../../src/icons/chevron-down.ts","../../src/icons/chevron-left.ts","../../src/icons/chevron-right.ts","../../src/icons/clear.ts","../../src/icons/code.ts","../../src/icons/code-block.ts","../../src/icons/confirm.ts","../../src/icons/copy.ts","../../src/icons/divider.ts","../../src/icons/drag-handle.ts","../../src/icons/edit.ts","../../src/icons/enter-key.ts","../../src/icons/grammar-check.ts","../../src/icons/h1.ts","../../src/icons/h2.ts","../../src/icons/h3.ts","../../src/icons/h4.ts","../../src/icons/h5.ts","../../src/icons/h6.ts","../../src/icons/image.ts","../../src/icons/italic.ts","../../src/icons/link.ts","../../src/icons/longer.ts","../../src/icons/menu.ts","../../src/icons/ordered-list.ts","../../src/icons/plus.ts","../../src/icons/quote.ts","../../src/icons/remove.ts","../../src/icons/retry.ts","../../src/icons/search.ts","../../src/icons/send.ts","../../src/icons/send-prompt.ts","../../src/icons/shorter.ts","../../src/icons/strikethrough.ts","../../src/icons/table.ts","../../src/icons/text.ts","../../src/icons/todo-list.ts","../../src/icons/translate.ts","../../src/icons/functions.ts","../../src/icons/visibility-off.ts","../../src/default-config/index.ts","../../src/core/slice.ts","../../src/feature/ai/context.ts","../../src/feature/ai/commands.ts","../../src/feature/ai/diff-actions/view.ts","../../src/feature/ai/diff-actions/index.ts","../../src/feature/ai/instruction-tooltip/suggestions.ts","../../src/utils/keep-alive.ts","../../src/feature/ai/instruction-tooltip/component.tsx","../../src/feature/ai/instruction-tooltip/view.ts","../../src/feature/ai/instruction-tooltip/index.ts","../../src/feature/ai/streaming-indicator.ts","../../src/feature/ai/index.ts","../../src/utils/checker.ts","../../src/utils/group-builder.ts","../../src/feature/block-edit/menu/config.ts","../../src/feature/block-edit/menu/component.tsx","../../src/feature/block-edit/menu/index.ts","../../src/feature/block-edit/handle/component.tsx","../../src/feature/block-edit/handle/index.ts","../../src/feature/block-edit/index.ts","../../src/feature/code-mirror/index.ts","../../src/feature/cursor/index.ts","../../src/feature/image-block/index.ts","../../src/feature/latex/block-latex.ts","../../src/feature/latex/inline-latex.ts","../../src/feature/latex/command.ts","../../src/feature/latex/inline-tooltip/tooltip.ts","../../src/feature/latex/inline-tooltip/component.tsx","../../src/feature/latex/inline-tooltip/view.ts","../../src/feature/latex/input-rule.ts","../../src/feature/latex/remark.ts","../../src/feature/latex/index.ts","../../src/feature/link-tooltip/index.ts","../../src/feature/list-item/index.ts","../../src/feature/placeholder/index.ts","../../src/feature/table/index.ts","../../src/feature/toolbar/config.ts","../../src/feature/toolbar/component.tsx","../../src/feature/toolbar/index.ts","../../src/feature/top-bar/config.ts","../../src/feature/top-bar/component.tsx","../../src/feature/top-bar/index.ts","../../src/feature/loader.ts","../../src/core/builder.ts","../../src/core/crepe.ts"],"sourcesContent":["import type { AIFeatureConfig } from './ai'\nimport type { BlockEditFeatureConfig } from './block-edit'\nimport type { CodeMirrorFeatureConfig } from './code-mirror'\nimport type { CursorFeatureConfig } from './cursor'\nimport type { ImageBlockFeatureConfig } from './image-block'\nimport type { LatexFeatureConfig } from './latex'\nimport type { LinkTooltipFeatureConfig } from './link-tooltip'\nimport type { ListItemFeatureConfig } from './list-item'\nimport type { PlaceholderFeatureConfig } from './placeholder'\nimport type { TableFeatureConfig } from './table'\nimport type { ToolbarFeatureConfig } from './toolbar'\nimport type { TopBarFeatureConfig } from './top-bar'\n\n/// The crepe editor feature flags.\n/// Most features are enabled by default; `TopBar` and `AI` are opt-in.\n/// See `defaultFeatures` for the per-flag default.\nexport enum CrepeFeature {\n /// Syntax highlighting and editing for code blocks with language support, theme customization, and preview capabilities.\n CodeMirror = 'code-mirror',\n\n /// Support for bullet lists, ordered lists, and todo lists with customizable icons and formatting.\n ListItem = 'list-item',\n\n /// Enhanced link editing and preview with customizable tooltips, edit/remove actions, and copy functionality.\n LinkTooltip = 'link-tooltip',\n\n /// Enhanced cursor experience with drop cursor and gap cursor for better content placement.\n Cursor = 'cursor',\n\n /// Image upload and management with resizing, captions, and support for both inline and block images.\n ImageBlock = 'image-block',\n\n /// Drag-and-drop block management and slash commands for quick content insertion and organization.\n BlockEdit = 'block-edit',\n\n /// Formatting toolbar for selected text with customizable icons and actions.\n Toolbar = 'toolbar',\n\n /// Document or block level placeholders to guide users when content is empty.\n Placeholder = 'placeholder',\n\n /// Full-featured table editing with row/column management, alignment options, and drag-and-drop functionality.\n Table = 'table',\n\n /// Mathematical formula support with both inline and block math rendering using KaTeX.\n Latex = 'latex',\n\n /// Fixed top toolbar with heading selector, formatting buttons, insert actions, and block commands.\n TopBar = 'top-bar',\n\n /// AI-assisted editing: streaming input, diff review, and provider integration.\n AI = 'ai',\n}\n\nexport interface CrepeFeatureConfig {\n [CrepeFeature.Cursor]?: CursorFeatureConfig\n [CrepeFeature.ListItem]?: ListItemFeatureConfig\n [CrepeFeature.LinkTooltip]?: LinkTooltipFeatureConfig\n [CrepeFeature.ImageBlock]?: ImageBlockFeatureConfig\n [CrepeFeature.BlockEdit]?: BlockEditFeatureConfig\n [CrepeFeature.Placeholder]?: PlaceholderFeatureConfig\n [CrepeFeature.Toolbar]?: ToolbarFeatureConfig\n [CrepeFeature.CodeMirror]?: CodeMirrorFeatureConfig\n [CrepeFeature.Table]?: TableFeatureConfig\n [CrepeFeature.Latex]?: LatexFeatureConfig\n [CrepeFeature.TopBar]?: TopBarFeatureConfig\n [CrepeFeature.AI]?: AIFeatureConfig\n}\n\nexport const defaultFeatures: Record<CrepeFeature, boolean> = {\n [CrepeFeature.Cursor]: true,\n [CrepeFeature.ListItem]: true,\n [CrepeFeature.LinkTooltip]: true,\n [CrepeFeature.ImageBlock]: true,\n [CrepeFeature.BlockEdit]: true,\n [CrepeFeature.Placeholder]: true,\n [CrepeFeature.Toolbar]: true,\n [CrepeFeature.CodeMirror]: true,\n [CrepeFeature.Table]: true,\n [CrepeFeature.Latex]: true,\n [CrepeFeature.TopBar]: false,\n [CrepeFeature.AI]: false,\n}\n","export const aiIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25zm0 14l1.25-2.75L23 19l-2.75-1.25L19 15l-1.25 2.75L15 19l2.75 1.25zM9 20l3-6.5L18 10l-6-3.5L9 0L6 6.5L0 10l6 3.5z\"\n transform=\"translate(3 3) scale(0.75)\"\n />\n </svg>\n`\n","export const alignCenterIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M4.25 20.5C4.0375 20.5 3.85942 20.4281 3.71575 20.2843C3.57192 20.1404 3.5 19.9622 3.5 19.7498C3.5 19.5371 3.57192 19.359 3.71575 19.2155C3.85942 19.0718 4.0375 19 4.25 19H19.75C19.9625 19 20.1406 19.0719 20.2843 19.2158C20.4281 19.3596 20.5 19.5378 20.5 19.7502C20.5 19.9629 20.4281 20.141 20.2843 20.2845C20.1406 20.4282 19.9625 20.5 19.75 20.5H4.25ZM8.25 16.625C8.0375 16.625 7.85942 16.5531 7.71575 16.4093C7.57192 16.2654 7.5 16.0872 7.5 15.8748C7.5 15.6621 7.57192 15.484 7.71575 15.3405C7.85942 15.1968 8.0375 15.125 8.25 15.125H15.75C15.9625 15.125 16.1406 15.1969 16.2843 15.3408C16.4281 15.4846 16.5 15.6628 16.5 15.8753C16.5 16.0879 16.4281 16.266 16.2843 16.4095C16.1406 16.5532 15.9625 16.625 15.75 16.625H8.25ZM4.25 12.75C4.0375 12.75 3.85942 12.6781 3.71575 12.5343C3.57192 12.3904 3.5 12.2122 3.5 11.9998C3.5 11.7871 3.57192 11.609 3.71575 11.4655C3.85942 11.3218 4.0375 11.25 4.25 11.25H19.75C19.9625 11.25 20.1406 11.3219 20.2843 11.4658C20.4281 11.6096 20.5 11.7878 20.5 12.0003C20.5 12.2129 20.4281 12.391 20.2843 12.5345C20.1406 12.6782 19.9625 12.75 19.75 12.75H4.25ZM8.25 8.875C8.0375 8.875 7.85942 8.80308 7.71575 8.65925C7.57192 8.51542 7.5 8.33725 7.5 8.12475C7.5 7.91208 7.57192 7.734 7.71575 7.5905C7.85942 7.44683 8.0375 7.375 8.25 7.375H15.75C15.9625 7.375 16.1406 7.44692 16.2843 7.59075C16.4281 7.73458 16.5 7.91275 16.5 8.12525C16.5 8.33792 16.4281 8.516 16.2843 8.6595C16.1406 8.80317 15.9625 8.875 15.75 8.875H8.25ZM4.25 5C4.0375 5 3.85942 4.92808 3.71575 4.78425C3.57192 4.64042 3.5 4.46225 3.5 4.24975C3.5 4.03708 3.57192 3.859 3.71575 3.7155C3.85942 3.57183 4.0375 3.5 4.25 3.5H19.75C19.9625 3.5 20.1406 3.57192 20.2843 3.71575C20.4281 3.85958 20.5 4.03775 20.5 4.25025C20.5 4.46292 20.4281 4.641 20.2843 4.7845C20.1406 4.92817 19.9625 5 19.75 5H4.25Z\"\n />\n </svg>\n`\n","export const alignLeftIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M4.25 20.5C4.0375 20.5 3.85942 20.4281 3.71575 20.2843C3.57192 20.1404 3.5 19.9622 3.5 19.7498C3.5 19.5371 3.57192 19.359 3.71575 19.2155C3.85942 19.0718 4.0375 19 4.25 19H19.75C19.9625 19 20.1406 19.0719 20.2843 19.2158C20.4281 19.3596 20.5 19.5378 20.5 19.7502C20.5 19.9629 20.4281 20.141 20.2843 20.2845C20.1406 20.4282 19.9625 20.5 19.75 20.5H4.25ZM4.25 16.625C4.0375 16.625 3.85942 16.5531 3.71575 16.4093C3.57192 16.2654 3.5 16.0872 3.5 15.8748C3.5 15.6621 3.57192 15.484 3.71575 15.3405C3.85942 15.1968 4.0375 15.125 4.25 15.125H13.75C13.9625 15.125 14.1406 15.1969 14.2843 15.3408C14.4281 15.4846 14.5 15.6628 14.5 15.8753C14.5 16.0879 14.4281 16.266 14.2843 16.4095C14.1406 16.5532 13.9625 16.625 13.75 16.625H4.25ZM4.25 12.75C4.0375 12.75 3.85942 12.6781 3.71575 12.5343C3.57192 12.3904 3.5 12.2122 3.5 11.9998C3.5 11.7871 3.57192 11.609 3.71575 11.4655C3.85942 11.3218 4.0375 11.25 4.25 11.25H19.75C19.9625 11.25 20.1406 11.3219 20.2843 11.4658C20.4281 11.6096 20.5 11.7878 20.5 12.0003C20.5 12.2129 20.4281 12.391 20.2843 12.5345C20.1406 12.6782 19.9625 12.75 19.75 12.75H4.25ZM4.25 8.875C4.0375 8.875 3.85942 8.80308 3.71575 8.65925C3.57192 8.51542 3.5 8.33725 3.5 8.12475C3.5 7.91208 3.57192 7.734 3.71575 7.5905C3.85942 7.44683 4.0375 7.375 4.25 7.375H13.75C13.9625 7.375 14.1406 7.44692 14.2843 7.59075C14.4281 7.73458 14.5 7.91275 14.5 8.12525C14.5 8.33792 14.4281 8.516 14.2843 8.6595C14.1406 8.80317 13.9625 8.875 13.75 8.875H4.25ZM4.25 5C4.0375 5 3.85942 4.92808 3.71575 4.78425C3.57192 4.64042 3.5 4.46225 3.5 4.24975C3.5 4.03708 3.57192 3.859 3.71575 3.7155C3.85942 3.57183 4.0375 3.5 4.25 3.5H19.75C19.9625 3.5 20.1406 3.57192 20.2843 3.71575C20.4281 3.85958 20.5 4.03775 20.5 4.25025C20.5 4.46292 20.4281 4.641 20.2843 4.7845C20.1406 4.92817 19.9625 5 19.75 5H4.25Z\"\n />\n </svg>\n`\n","export const alignRightIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M4.25 5C4.0375 5 3.85942 4.92808 3.71575 4.78425C3.57192 4.64042 3.5 4.46225 3.5 4.24975C3.5 4.03708 3.57192 3.859 3.71575 3.7155C3.85942 3.57183 4.0375 3.5 4.25 3.5H19.75C19.9625 3.5 20.1406 3.57192 20.2843 3.71575C20.4281 3.85958 20.5 4.03775 20.5 4.25025C20.5 4.46292 20.4281 4.641 20.2843 4.7845C20.1406 4.92817 19.9625 5 19.75 5H4.25ZM10.25 8.875C10.0375 8.875 9.85942 8.80308 9.71575 8.65925C9.57192 8.51542 9.5 8.33725 9.5 8.12475C9.5 7.91208 9.57192 7.734 9.71575 7.5905C9.85942 7.44683 10.0375 7.375 10.25 7.375H19.75C19.9625 7.375 20.1406 7.44692 20.2843 7.59075C20.4281 7.73458 20.5 7.91275 20.5 8.12525C20.5 8.33792 20.4281 8.516 20.2843 8.6595C20.1406 8.80317 19.9625 8.875 19.75 8.875H10.25ZM4.25 12.75C4.0375 12.75 3.85942 12.6781 3.71575 12.5343C3.57192 12.3904 3.5 12.2122 3.5 11.9998C3.5 11.7871 3.57192 11.609 3.71575 11.4655C3.85942 11.3218 4.0375 11.25 4.25 11.25H19.75C19.9625 11.25 20.1406 11.3219 20.2843 11.4658C20.4281 11.6096 20.5 11.7878 20.5 12.0003C20.5 12.2129 20.4281 12.391 20.2843 12.5345C20.1406 12.6782 19.9625 12.75 19.75 12.75H4.25ZM10.25 16.625C10.0375 16.625 9.85942 16.5531 9.71575 16.4093C9.57192 16.2654 9.5 16.0872 9.5 15.8748C9.5 15.6621 9.57192 15.484 9.71575 15.3405C9.85942 15.1968 10.0375 15.125 10.25 15.125H19.75C19.9625 15.125 20.1406 15.1969 20.2843 15.3408C20.4281 15.4846 20.5 15.6628 20.5 15.8753C20.5 16.0879 20.4281 16.266 20.2843 16.4095C20.1406 16.5532 19.9625 16.625 19.75 16.625H10.25ZM4.25 20.5C4.0375 20.5 3.85942 20.4281 3.71575 20.2843C3.57192 20.1404 3.5 19.9622 3.5 19.7498C3.5 19.5371 3.57192 19.359 3.71575 19.2155C3.85942 19.0718 4.0375 19 4.25 19H19.75C19.9625 19 20.1406 19.0719 20.2843 19.2158C20.4281 19.3596 20.5 19.5378 20.5 19.7502C20.5 19.9629 20.4281 20.141 20.2843 20.2845C20.1406 20.4282 19.9625 20.5 19.75 20.5H4.25Z\"\n />\n </svg>\n`\n","export const boldIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M8.85758 18.625C8.4358 18.625 8.07715 18.4772 7.78163 18.1817C7.48613 17.8862 7.33838 17.5275 7.33838 17.1058V6.8942C7.33838 6.47242 7.48613 6.11377 7.78163 5.81825C8.07715 5.52275 8.4358 5.375 8.85758 5.375H12.1999C13.2191 5.375 14.1406 5.69231 14.9643 6.32693C15.788 6.96154 16.1999 7.81603 16.1999 8.89038C16.1999 9.63779 16.0194 10.2471 15.6585 10.7183C15.2976 11.1894 14.9088 11.5314 14.4922 11.7442C15.005 11.9211 15.4947 12.2708 15.9614 12.7933C16.428 13.3157 16.6614 14.0192 16.6614 14.9038C16.6614 16.182 16.1902 17.1217 15.2479 17.723C14.3056 18.3243 13.3563 18.625 12.3999 18.625H8.85758ZM9.4883 16.6327H12.3191C13.1063 16.6327 13.6627 16.4141 13.9884 15.9769C14.314 15.5397 14.4768 15.1205 14.4768 14.7192C14.4768 14.3179 14.314 13.8987 13.9884 13.4615C13.6627 13.0243 13.0909 12.8057 12.273 12.8057H9.4883V16.6327ZM9.4883 10.875H12.0826C12.6903 10.875 13.172 10.7013 13.5278 10.3539C13.8836 10.0064 14.0615 9.59037 14.0615 9.10575C14.0615 8.59035 13.8733 8.16918 13.497 7.84225C13.1207 7.51533 12.6595 7.35188 12.1133 7.35188H9.4883V10.875Z\"\n />\n </svg>\n`\n","export const bulletIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_952_6527)\">\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </g>\n <defs>\n <clipPath id=\"clip0_952_6527\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const bulletListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8070)\">\n <path\n d=\"M4 10.5C3.17 10.5 2.5 11.17 2.5 12C2.5 12.83 3.17 13.5 4 13.5C4.83 13.5 5.5 12.83 5.5 12C5.5 11.17 4.83 10.5 4 10.5ZM4 4.5C3.17 4.5 2.5 5.17 2.5 6C2.5 6.83 3.17 7.5 4 7.5C4.83 7.5 5.5 6.83 5.5 6C5.5 5.17 4.83 4.5 4 4.5ZM4 16.5C3.17 16.5 2.5 17.18 2.5 18C2.5 18.82 3.18 19.5 4 19.5C4.82 19.5 5.5 18.82 5.5 18C5.5 17.18 4.83 16.5 4 16.5ZM8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19ZM8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM7 6C7 6.55 7.45 7 8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8070\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const captionIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M9 22a1 1 0 0 1-1-1v-3H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6.1l-3.7 3.71c-.2.19-.45.29-.7.29zm1-6v3.08L13.08 16H20V4H4v12z\"\n />\n </svg>\n`\n","export const checkBoxCheckedIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_1803_1151)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM10.71 16.29C10.32 16.68 9.69 16.68 9.3 16.29L5.71 12.7C5.32 12.31 5.32 11.68 5.71 11.29C6.1 10.9 6.73 10.9 7.12 11.29L10 14.17L16.88 7.29C17.27 6.9 17.9 6.9 18.29 7.29C18.68 7.68 18.68 8.31 18.29 8.7L10.71 16.29Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1803_1151\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const checkBoxUncheckedIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_1803_535)\">\n <path\n d=\"M18 19H6C5.45 19 5 18.55 5 18V6C5 5.45 5.45 5 6 5H18C18.55 5 19 5.45 19 6V18C19 18.55 18.55 19 18 19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1803_535\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const chevronDownIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n />\n </svg>\n`\n","export const chevronLeftIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M15.75 19.5L8.25 12l7.5-7.5\"\n />\n </svg>\n`\n","export const chevronRightIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M8.25 4.5l7.5 7.5-7.5 7.5\"\n />\n </svg>\n`\n","export const clearIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_1098_15553)\">\n <path\n d=\"M18.3007 5.70973C17.9107 5.31973 17.2807 5.31973 16.8907 5.70973L12.0007 10.5897L7.1107 5.69973C6.7207 5.30973 6.0907 5.30973 5.7007 5.69973C5.3107 6.08973 5.3107 6.71973 5.7007 7.10973L10.5907 11.9997L5.7007 16.8897C5.3107 17.2797 5.3107 17.9097 5.7007 18.2997C6.0907 18.6897 6.7207 18.6897 7.1107 18.2997L12.0007 13.4097L16.8907 18.2997C17.2807 18.6897 17.9107 18.6897 18.3007 18.2997C18.6907 17.9097 18.6907 17.2797 18.3007 16.8897L13.4107 11.9997L18.3007 7.10973C18.6807 6.72973 18.6807 6.08973 18.3007 5.70973Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1098_15553\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const codeIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8081)\">\n <path\n d=\"M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8081\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const codeBlockIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M3 3h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm1 2v14h16V5H4zm8 10h6v2h-6v-2zm-3.333-3L5.838 9.172l1.415-1.415L11.495 12l-4.242 4.243-1.415-1.415L8.667 12z\"\n />\n </svg>\n`\n","export const confirmIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <g clip-path=\"url(#clip0_1013_1606)\">\n <path\n d=\"M9.00012 16.1998L5.50012 12.6998C5.11012 12.3098 4.49012 12.3098 4.10012 12.6998C3.71012 13.0898 3.71012 13.7098 4.10012 14.0998L8.29012 18.2898C8.68012 18.6798 9.31012 18.6798 9.70012 18.2898L20.3001 7.69982C20.6901 7.30982 20.6901 6.68982 20.3001 6.29982C19.9101 5.90982 19.2901 5.90982 18.9001 6.29982L9.00012 16.1998Z\"\n fill=\"#817567\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1013_1606\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const copyIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"none\"\n >\n <path\n d=\"M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z\"\n />\n </svg>\n`\n","export const dividerIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7900)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19 13H5C4.45 13 4 12.55 4 12C4 11.45 4.45 11 5 11H19C19.55 11 20 11.45 20 12C20 12.55 19.55 13 19 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7900\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const dragHandleIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M3.5 9.83366C3.35833 9.83366 3.23961 9.78571 3.14383 9.68983C3.04794 9.59394 3 9.47516 3 9.33349C3 9.19171 3.04794 9.07299 3.14383 8.97733C3.23961 8.88155 3.35833 8.83366 3.5 8.83366H12.5C12.6417 8.83366 12.7604 8.8816 12.8562 8.97749C12.9521 9.07338 13 9.19216 13 9.33383C13 9.4756 12.9521 9.59433 12.8562 9.68999C12.7604 9.78577 12.6417 9.83366 12.5 9.83366H3.5ZM3.5 7.16699C3.35833 7.16699 3.23961 7.11905 3.14383 7.02316C3.04794 6.92727 3 6.80849 3 6.66683C3 6.52505 3.04794 6.40633 3.14383 6.31066C3.23961 6.21488 3.35833 6.16699 3.5 6.16699H12.5C12.6417 6.16699 12.7604 6.21494 12.8562 6.31083C12.9521 6.40671 13 6.52549 13 6.66716C13 6.80894 12.9521 6.92766 12.8562 7.02333C12.7604 7.1191 12.6417 7.16699 12.5 7.16699H3.5Z\"\n />\n </svg>\n`\n","export const editIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_1013_1585)\">\n <path\n d=\"M14.06 9.02L14.98 9.94L5.92 19H5V18.08L14.06 9.02ZM17.66 3C17.41 3 17.15 3.1 16.96 3.29L15.13 5.12L18.88 8.87L20.71 7.04C21.1 6.65 21.1 6.02 20.71 5.63L18.37 3.29C18.17 3.09 17.92 3 17.66 3ZM14.06 6.19L3 17.25V21H6.75L17.81 9.94L14.06 6.19Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1013_1585\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const enterKeyIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M9 16l-5-5l5-5l1.4 1.4L7.825 10H18V6h2v6H7.825l2.575 2.6z\"\n />\n </svg>\n`\n","export const grammarCheckIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M9.55 17.575L4.225 12.25l1.4-1.425L9.55 14.75l8.825-8.825l1.4 1.425z\"\n />\n </svg>\n`\n","export const h1Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5553)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM12 17H14V7H10V9H12V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5553\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h2Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5559)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15H11V13H13C14.1 13 15 12.11 15 11V9C15 7.89 14.1 7 13 7H9V9H13V11H11C9.9 11 9 11.89 9 13V17H15V15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5559\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h3Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5565)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13.5C15 12.67 14.33 12 13.5 12C14.33 12 15 11.33 15 10.5V9C15 7.89 14.1 7 13 7H9V9H13V11H11V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5565\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h4Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7757)\">\n <path\n d=\"M19.04 3H5.04004C3.94004 3 3.04004 3.9 3.04004 5V19C3.04004 20.1 3.94004 21 5.04004 21H19.04C20.14 21 21.04 20.1 21.04 19V5C21.04 3.9 20.14 3 19.04 3ZM19.04 19H5.04004V5H19.04V19ZM13.04 17H15.04V7H13.04V11H11.04V7H9.04004V13H13.04V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7757\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h5Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7760)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H9V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7760\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h6Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7763)\">\n <path\n d=\"M11 17H13C14.1 17 15 16.11 15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H11C9.9 7 9 7.89 9 9V15C9 16.11 9.9 17 11 17ZM11 13H13V15H11V13ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7763\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const imageIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8075)\">\n <path\n d=\"M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14.14 11.86L11.14 15.73L9 13.14L6 17H18L14.14 11.86Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8075\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const italicIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M6.29811 18.625C6.04505 18.625 5.83115 18.5375 5.65641 18.3626C5.48166 18.1877 5.39429 17.9736 5.39429 17.7203C5.39429 17.467 5.48166 17.2532 5.65641 17.0788C5.83115 16.9045 6.04505 16.8173 6.29811 16.8173H9.21159L12.452 7.18265H9.53851C9.28545 7.18265 9.07155 7.0952 8.89681 6.9203C8.72206 6.7454 8.63469 6.5313 8.63469 6.278C8.63469 6.02472 8.72206 5.81089 8.89681 5.63652C9.07155 5.46217 9.28545 5.375 9.53851 5.375H16.8847C17.1377 5.375 17.3516 5.46245 17.5264 5.63735C17.7011 5.81225 17.7885 6.02634 17.7885 6.27962C17.7885 6.53293 17.7011 6.74676 17.5264 6.92113C17.3516 7.09548 17.1377 7.18265 16.8847 7.18265H14.2789L11.0385 16.8173H13.6443C13.8973 16.8173 14.1112 16.9048 14.286 17.0797C14.4607 17.2546 14.5481 17.4687 14.5481 17.722C14.5481 17.9752 14.4607 18.1891 14.286 18.3634C14.1112 18.5378 13.8973 18.625 13.6443 18.625H6.29811Z\"\n />\n </svg>\n`\n","export const linkIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M17.0385 19.5003V16.5388H14.0769V15.0388H17.0385V12.0773H18.5384V15.0388H21.5V16.5388H18.5384V19.5003H17.0385ZM10.8077 16.5388H7.03845C5.78282 16.5388 4.7125 16.0963 3.8275 15.2114C2.9425 14.3266 2.5 13.2564 2.5 12.0009C2.5 10.7454 2.9425 9.67504 3.8275 8.78979C4.7125 7.90454 5.78282 7.46191 7.03845 7.46191H10.8077V8.96186H7.03845C6.1987 8.96186 5.48235 9.25834 4.8894 9.85129C4.29645 10.4442 3.99998 11.1606 3.99998 12.0003C3.99998 12.8401 4.29645 13.5564 4.8894 14.1494C5.48235 14.7423 6.1987 15.0388 7.03845 15.0388H10.8077V16.5388ZM8.25 12.7503V11.2504H15.75V12.7503H8.25ZM21.5 12.0003H20C20 11.1606 19.7035 10.4442 19.1106 9.85129C18.5176 9.25834 17.8013 8.96186 16.9615 8.96186H13.1923V7.46191H16.9615C18.2171 7.46191 19.2875 7.90441 20.1725 8.78939C21.0575 9.67439 21.5 10.7447 21.5 12.0003Z\"\n />\n </svg>\n`\n","export const longerIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M3 18v-2h13v2zm0-5v-2h18v2zm0-5V6h18v2zm15 13v-3h-3v-2h3v-3h2v3h3v2h-3v3z\"\n />\n </svg>\n`\n","export const menuIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7680)\">\n <path\n d=\"M11 18C11 19.1 10.1 20 9 20C7.9 20 7 19.1 7 18C7 16.9 7.9 16 9 16C10.1 16 11 16.9 11 18ZM9 10C7.9 10 7 10.9 7 12C7 13.1 7.9 14 9 14C10.1 14 11 13.1 11 12C11 10.9 10.1 10 9 10ZM9 4C7.9 4 7 4.9 7 6C7 7.1 7.9 8 9 8C10.1 8 11 7.1 11 6C11 4.9 10.1 4 9 4ZM15 8C16.1 8 17 7.1 17 6C17 4.9 16.1 4 15 4C13.9 4 13 4.9 13 6C13 7.1 13.9 8 15 8ZM15 10C13.9 10 13 10.9 13 12C13 13.1 13.9 14 15 14C16.1 14 17 13.1 17 12C17 10.9 16.1 10 15 10ZM15 16C13.9 16 13 16.9 13 18C13 19.1 13.9 20 15 20C16.1 20 17 19.1 17 18C17 16.9 16.1 16 15 16Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7680\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const orderedListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8067)\">\n <path\n d=\"M8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6C7 6.55 7.45 7 8 7ZM20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17ZM20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11ZM4.5 16H2.5C2.22 16 2 16.22 2 16.5C2 16.78 2.22 17 2.5 17H4V17.5H3.5C3.22 17.5 3 17.72 3 18C3 18.28 3.22 18.5 3.5 18.5H4V19H2.5C2.22 19 2 19.22 2 19.5C2 19.78 2.22 20 2.5 20H4.5C4.78 20 5 19.78 5 19.5V16.5C5 16.22 4.78 16 4.5 16ZM2.5 5H3V7.5C3 7.78 3.22 8 3.5 8C3.78 8 4 7.78 4 7.5V4.5C4 4.22 3.78 4 3.5 4H2.5C2.22 4 2 4.22 2 4.5C2 4.78 2.22 5 2.5 5ZM4.5 10H2.5C2.22 10 2 10.22 2 10.5C2 10.78 2.22 11 2.5 11H3.8L2.12 12.96C2.04 13.05 2 13.17 2 13.28V13.5C2 13.78 2.22 14 2.5 14H4.5C4.78 14 5 13.78 5 13.5C5 13.22 4.78 13 4.5 13H3.2L4.88 11.04C4.96 10.95 5 10.83 5 10.72V10.5C5 10.22 4.78 10 4.5 10Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8067\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const plusIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7676)\">\n <path\n d=\"M18 13H13V18C13 18.55 12.55 19 12 19C11.45 19 11 18.55 11 18V13H6C5.45 13 5 12.55 5 12C5 11.45 5.45 11 6 11H11V6C11 5.45 11.45 5 12 5C12.55 5 13 5.45 13 6V11H18C18.55 11 19 11.45 19 12C19 12.55 18.55 13 18 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7676\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const quoteIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7897)\">\n <path\n d=\"M7.17 17C7.68 17 8.15 16.71 8.37 16.26L9.79 13.42C9.93 13.14 10 12.84 10 12.53V8C10 7.45 9.55 7 9 7H5C4.45 7 4 7.45 4 8V12C4 12.55 4.45 13 5 13H7L5.97 15.06C5.52 15.95 6.17 17 7.17 17ZM17.17 17C17.68 17 18.15 16.71 18.37 16.26L19.79 13.42C19.93 13.14 20 12.84 20 12.53V8C20 7.45 19.55 7 19 7H15C14.45 7 14 7.45 14 8V12C14 12.55 14.45 13 15 13H17L15.97 15.06C15.52 15.95 16.17 17 17.17 17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7897\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const removeIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M7.30775 20.4997C6.81058 20.4997 6.385 20.3227 6.031 19.9687C5.677 19.6147 5.5 19.1892 5.5 18.692V5.99973H5.25C5.0375 5.99973 4.85942 5.92782 4.71575 5.78398C4.57192 5.64015 4.5 5.46198 4.5 5.24948C4.5 5.03682 4.57192 4.85873 4.71575 4.71523C4.85942 4.57157 5.0375 4.49973 5.25 4.49973H9C9 4.2549 9.08625 4.04624 9.25875 3.87374C9.43108 3.7014 9.63967 3.61523 9.8845 3.61523H14.1155C14.3603 3.61523 14.5689 3.7014 14.7413 3.87374C14.9138 4.04624 15 4.2549 15 4.49973H18.75C18.9625 4.49973 19.1406 4.57165 19.2843 4.71548C19.4281 4.85932 19.5 5.03748 19.5 5.24998C19.5 5.46265 19.4281 5.64073 19.2843 5.78423C19.1406 5.9279 18.9625 5.99973 18.75 5.99973H18.5V18.692C18.5 19.1892 18.323 19.6147 17.969 19.9687C17.615 20.3227 17.1894 20.4997 16.6923 20.4997H7.30775ZM17 5.99973H7V18.692C7 18.7818 7.02883 18.8556 7.0865 18.9132C7.14417 18.9709 7.21792 18.9997 7.30775 18.9997H16.6923C16.7821 18.9997 16.8558 18.9709 16.9135 18.9132C16.9712 18.8556 17 18.7818 17 18.692V5.99973ZM10.1543 16.9997C10.3668 16.9997 10.5448 16.9279 10.6885 16.7842C10.832 16.6404 10.9037 16.4622 10.9037 16.2497V8.74973C10.9037 8.53723 10.8318 8.35907 10.688 8.21523C10.5443 8.07157 10.3662 7.99973 10.1535 7.99973C9.941 7.99973 9.76292 8.07157 9.61925 8.21523C9.47575 8.35907 9.404 8.53723 9.404 8.74973V16.2497C9.404 16.4622 9.47583 16.6404 9.6195 16.7842C9.76333 16.9279 9.94158 16.9997 10.1543 16.9997ZM13.8465 16.9997C14.059 16.9997 14.2371 16.9279 14.3807 16.7842C14.5243 16.6404 14.596 16.4622 14.596 16.2497V8.74973C14.596 8.53723 14.5242 8.35907 14.3805 8.21523C14.2367 8.07157 14.0584 7.99973 13.8458 7.99973C13.6333 7.99973 13.4552 8.07157 13.3115 8.21523C13.168 8.35907 13.0962 8.53723 13.0962 8.74973V16.2497C13.0962 16.4622 13.1682 16.6404 13.312 16.7842C13.4557 16.9279 13.6338 16.9997 13.8465 16.9997Z\"\n />\n </svg>\n`\n","export const retryIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M12 20q-3.35 0-5.675-2.325T4 12q0-3.35 2.325-5.675T12 4q1.725 0 3.3.713T18 6.75V4h2v7h-7V9h4.2q-.8-1.4-2.187-2.2T12 6Q9.5 6 7.75 7.75T6 12q0 2.5 1.75 4.25T12 18q1.925 0 3.475-1.1T17.65 14h2.1q-.7 2.65-2.85 4.325T12 20\"\n />\n </svg>\n`\n","export const searchIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n class=\"w-6 h-6\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z\"\n />\n </svg>\n`\n","export const sendIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M11 20V7.825l-5.6 5.6L4 12l8-8l8 8l-1.4 1.425l-5.6-5.6V20z\"\n />\n </svg>\n`\n","export const sendPromptIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M3 20v-6l8-2l-8-2V4l19 8z\"\n />\n </svg>\n`\n","export const shorterIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M5 13v-2h14v2z\"\n />\n </svg>\n`\n","export const strikethroughIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M3.25 13.7404C3.0375 13.7404 2.85938 13.6684 2.71563 13.5246C2.57188 13.3808 2.5 13.2026 2.5 12.99C2.5 12.7774 2.57188 12.5993 2.71563 12.4558C2.85938 12.3122 3.0375 12.2404 3.25 12.2404H20.75C20.9625 12.2404 21.1406 12.3123 21.2843 12.4561C21.4281 12.5999 21.5 12.7781 21.5 12.9907C21.5 13.2033 21.4281 13.3814 21.2843 13.525C21.1406 13.6686 20.9625 13.7404 20.75 13.7404H3.25ZM10.9423 10.2596V6.62495H6.5673C6.2735 6.62495 6.02377 6.52201 5.8181 6.31613C5.61245 6.11026 5.50963 5.86027 5.50963 5.56615C5.50963 5.27205 5.61245 5.02083 5.8181 4.8125C6.02377 4.60417 6.2735 4.5 6.5673 4.5H17.4423C17.7361 4.5 17.9858 4.60294 18.1915 4.80883C18.3971 5.01471 18.5 5.2647 18.5 5.5588C18.5 5.85292 18.3971 6.10413 18.1915 6.31245C17.9858 6.52078 17.7361 6.62495 17.4423 6.62495H13.0673V10.2596H10.9423ZM10.9423 15.7211H13.0673V18.4423C13.0673 18.7361 12.9643 18.9858 12.7584 19.1915C12.5526 19.3971 12.3026 19.5 12.0085 19.5C11.7144 19.5 11.4631 19.3962 11.2548 19.1887C11.0465 18.9811 10.9423 18.7291 10.9423 18.4327V15.7211Z\"\n />\n </svg>\n`\n","export const tableIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8078)\">\n <path\n d=\"M20 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H20C21.1 21 22 20.1 22 19V5C22 3.9 21.1 3 20 3ZM20 5V8H5V5H20ZM15 19H10V10H15V19ZM5 10H8V19H5V10ZM17 19V10H20V19H17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8078\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const textIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5547)\">\n <path\n d=\"M5 5.5C5 6.33 5.67 7 6.5 7H10.5V17.5C10.5 18.33 11.17 19 12 19C12.83 19 13.5 18.33 13.5 17.5V7H17.5C18.33 7 19 6.33 19 5.5C19 4.67 18.33 4 17.5 4H6.5C5.67 4 5 4.67 5 5.5Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5547\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const todoListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M5.66936 16.3389L9.39244 12.6158C9.54115 12.4671 9.71679 12.3937 9.91936 12.3957C10.1219 12.3976 10.2975 12.4761 10.4463 12.6312C10.5847 12.7823 10.654 12.9585 10.654 13.1599C10.654 13.3613 10.5847 13.5363 10.4463 13.6851L6.32704 17.8197C6.14627 18.0004 5.93538 18.0908 5.69436 18.0908C5.45333 18.0908 5.24243 18.0004 5.06166 17.8197L3.01744 15.7754C2.87899 15.637 2.81136 15.4629 2.81456 15.2533C2.81776 15.0437 2.88859 14.8697 3.02706 14.7312C3.16551 14.5928 3.34008 14.5235 3.55076 14.5235C3.76144 14.5235 3.93494 14.5928 4.07126 14.7312L5.66936 16.3389ZM5.66936 8.72359L9.39244 5.00049C9.54115 4.85177 9.71679 4.77838 9.91936 4.78031C10.1219 4.78223 10.2975 4.86075 10.4463 5.01586C10.5847 5.16691 10.654 5.34314 10.654 5.54454C10.654 5.74592 10.5847 5.92097 10.4463 6.06969L6.32704 10.2043C6.14627 10.3851 5.93538 10.4755 5.69436 10.4755C5.45333 10.4755 5.24243 10.3851 5.06166 10.2043L3.01744 8.16009C2.87899 8.02162 2.81136 7.84759 2.81456 7.63799C2.81776 7.42837 2.88859 7.25433 3.02706 7.11586C3.16551 6.97741 3.34008 6.90819 3.55076 6.90819C3.76144 6.90819 3.93494 6.97741 4.07126 7.11586L5.66936 8.72359ZM13.7597 16.5581C13.5472 16.5581 13.3691 16.4862 13.2253 16.3424C13.0816 16.1986 13.0097 16.0204 13.0097 15.8078C13.0097 15.5952 13.0816 15.4171 13.2253 15.2735C13.3691 15.13 13.5472 15.0582 13.7597 15.0582H20.7597C20.9722 15.0582 21.1503 15.1301 21.2941 15.2739C21.4378 15.4177 21.5097 15.5959 21.5097 15.8085C21.5097 16.0211 21.4378 16.1992 21.2941 16.3427C21.1503 16.4863 20.9722 16.5581 20.7597 16.5581H13.7597ZM13.7597 8.94276C13.5472 8.94276 13.3691 8.87085 13.2253 8.72704C13.0816 8.58324 13.0097 8.40504 13.0097 8.19244C13.0097 7.97985 13.0816 7.80177 13.2253 7.65819C13.3691 7.5146 13.5472 7.44281 13.7597 7.44281H20.7597C20.9722 7.44281 21.1503 7.51471 21.2941 7.65851C21.4378 7.80233 21.5097 7.98053 21.5097 8.19311C21.5097 8.40571 21.4378 8.5838 21.2941 8.72739C21.1503 8.87097 20.9722 8.94276 20.7597 8.94276H13.7597Z\"\n />\n </svg>\n`\n","export const translateIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"m12.9 16l-2.55-2.5l.05-.05q1.45-1.6 2.262-3.117T13.95 7H16V5h-6V3H8v2H2v2h9.1q-.5 1.2-1.225 2.387T8 11.7q-.6-.6-1.187-1.412T5.85 8.6H3.85q.5 1.4 1.3 2.7T6.95 13.7L2.85 17.75L4.25 19.15L8 15.4L10.55 17.95zM18.5 22h-2L21 10h2l4.5 12h-2l-1.05-3h-4.9zm1.6-5h3.6l-1.8-5.1z\"\n />\n </svg>\n`\n","export const functionsIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z\"\n />\n </svg>\n`\n","export const visibilityOffIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n >\n <path\n d=\"m644-428-58-58q9-47-27-88t-93-32l-58-58q17-8 34.5-12t37.5-4q75 0 127.5 52.5T660-500q0 20-4 37.5T644-428Zm128 126-58-56q38-29 67.5-63.5T832-500q-50-101-143.5-160.5T480-720q-29 0-57 4t-55 12l-62-62q41-17 84-25.5t90-8.5q151 0 269 83.5T920-500q-23 59-60.5 109.5T772-302Zm20 246L624-222q-35 11-70.5 16.5T480-200q-151 0-269-83.5T40-500q21-53 53-98.5t73-81.5L56-792l56-56 736 736-56 56ZM222-624q-29 26-53 57t-41 67q50 101 143.5 160.5T480-280q20 0 39-2.5t39-5.5l-36-38q-11 3-21 4.5t-21 1.5q-75 0-127.5-52.5T300-500q0-11 1.5-21t4.5-21l-84-82Zm319 93Zm-151 75Z\"\n />\n </svg>\n`\n","import { languages } from '@codemirror/language-data'\nimport { oneDark } from '@codemirror/theme-one-dark'\nimport { mergeWith } from 'lodash-es'\n\nimport { CrepeFeature, type CrepeFeatureConfig } from '../feature'\nimport {\n chevronDownIcon,\n clearIcon,\n editIcon,\n searchIcon,\n visibilityOffIcon,\n} from '../icons'\n\nexport const defaultConfig: CrepeFeatureConfig = {\n [CrepeFeature.CodeMirror]: {\n theme: oneDark,\n languages,\n expandIcon: chevronDownIcon,\n searchIcon: searchIcon,\n clearSearchIcon: clearIcon,\n searchPlaceholder: 'Search language',\n noResultText: 'No result',\n previewToggleIcon: (previewOnlyMode) =>\n previewOnlyMode ? editIcon : visibilityOffIcon,\n },\n}\n\nexport const applyConfig = (userConfig: Partial<CrepeFeatureConfig>) => {\n return mergeWith({}, defaultConfig, userConfig, (_objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue\n }\n return undefined\n })\n}\n","import { createSlice, type Ctx } from '@milkdown/kit/ctx'\n\nimport type { CrepeFeature } from '../feature'\nimport type { CrepeBuilder } from './builder'\n\n/// @internal\n/// The feature flags context.\n/// ⚠️ Most of the time, you should use `useCrepeFeatures` to get the features.\nexport const FeaturesCtx = createSlice([] as CrepeFeature[], 'FeaturesCtx')\n\n/// @internal\n/// The crepe editor context.\n/// ⚠️ Most of the time, you should use `useCrepe` to get the crepe editor instance.\nexport const CrepeCtx = createSlice({} as CrepeBuilder, 'CrepeCtx')\n\n/// The crepe editor context.\n/// You can use this context to access the crepe editor instance within Milkdown plugins.\n/// ```ts\n/// import { crepeCtx } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// return () => {\n/// const crepe = useCrepe(ctx)\n/// crepe.setReadonly(true)\n/// }\n/// }\n/// ```\nexport function useCrepe(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.get<CrepeBuilder, 'CrepeCtx'>('CrepeCtx')\n}\n\n/// Check the enabled FeatureFlags\n/// ```ts\n/// import { useCrepeFeatures } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// const features = useCrepeFeatures(ctx)\n/// if (features.get().includes(CrepeFeature.CodeMirror)) {\n/// // Do something with CodeMirror\n/// }\n/// }\nexport function useCrepeFeatures(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.use<CrepeFeature[], 'FeaturesCtx'>('FeaturesCtx')\n}\n\n/// @internal\nexport function crepeFeatureConfig(feature: CrepeFeature) {\n return (ctx: Ctx) => {\n useCrepeFeatures(ctx).update((features) => {\n if (features.includes(feature)) {\n return features\n }\n return [...features, feature]\n })\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { editorViewCtx, serializerCtx } from '@milkdown/kit/core'\n\nimport type { AIPromptContext } from './types'\n\n/// Default prompt context builder. Serializes the full document and\n/// the current selection (if any) as markdown, then pairs them with\n/// the user instruction.\nexport function defaultBuildContext(\n ctx: Ctx,\n instruction: string\n): AIPromptContext {\n const view = ctx.get(editorViewCtx)\n const serializer = ctx.get(serializerCtx)\n const { state } = view\n\n // Full document as markdown\n const document = serializer(state.doc)\n\n // Selected text as markdown (empty if selection is collapsed).\n // For block-level selections (whole paragraphs, list items, etc.)\n // we wrap the slice content in a doc node and serialize it. For\n // inline-only selections (text inside a single paragraph),\n // createAndFill on the doc type returns null because inline content\n // isn't valid as direct doc children — wrap it in a paragraph first\n // so marks (bold, italic, links) survive into the markdown output.\n let selection = ''\n if (!state.selection.empty) {\n const { from, to } = state.selection\n const slice = state.doc.slice(from, to)\n const { schema } = state.doc.type\n let wrapper = schema.topNodeType.createAndFill(null, slice.content)\n if (!wrapper) {\n const paragraph = schema.nodes.paragraph?.createAndFill(\n null,\n slice.content\n )\n if (paragraph) wrapper = schema.topNodeType.createAndFill(null, paragraph)\n }\n selection = wrapper ? serializer(wrapper) : state.doc.textBetween(from, to)\n }\n\n return { document, selection, instruction }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { MilkdownError } from '@milkdown/kit/exception'\n\nimport { commandsCtx } from '@milkdown/kit/core'\nimport { aiBuildContextError, aiProviderError } from '@milkdown/kit/exception'\nimport { diffPluginKey } from '@milkdown/kit/plugin/diff'\nimport {\n abortStreamingCmd,\n endStreamingCmd,\n pushChunkCmd,\n startStreamingCmd,\n streamingPluginKey,\n} from '@milkdown/kit/plugin/streaming'\nimport { $command, $ctx } from '@milkdown/kit/utils'\n\nimport type { AIProvider, AIPromptContext, RunAIOptions } from './types'\n\nimport { defaultBuildContext } from './context'\n\n// ---------------------------------------------------------------------------\n// Context slices\n// ---------------------------------------------------------------------------\n\n/// Holds the user-supplied provider and prompt builder. Populated by\n/// the AI feature's setup function from `AIFeatureConfig`. `aiIcon`\n/// lives here too so that other features (notably the toolbar) can pick\n/// up the AI feature's icon override at render time.\nexport const aiProviderConfig = $ctx(\n {\n provider: undefined as AIProvider | undefined,\n buildContext: undefined as\n | ((ctx: Ctx, instruction: string) => AIPromptContext)\n | undefined,\n diffReviewOnEnd: true,\n onError: (error: MilkdownError) => {\n console.error(`[milkdown/ai] [${error.code}]`, error)\n },\n aiIcon: undefined as string | undefined,\n },\n 'aiProviderConfig'\n)\n\n/// Holds the AbortController and active-form label for the current AI\n/// session (null/empty when idle). `label` is shown in the streaming\n/// indicator. `lastInstruction`, `lastLabel`, `lastFrom`, `lastTo` are\n/// kept after the session ends so the diff-actions Retry button can\n/// re-run the same prompt on the same text range. `diffOwnedByAI` is\n/// flipped on right before our `endStreamingCmd` activates diff review\n/// and back off when the diff panel sees the diff close, so a manually\n/// started diff review (via `startDiffReviewCmd`) doesn't inherit the\n/// previous AI session's Retry affordance.\nexport const aiSessionCtx = $ctx(\n {\n abortController: null as AbortController | null,\n label: '',\n lastInstruction: '',\n lastLabel: undefined as string | undefined,\n lastFrom: -1,\n lastTo: -1,\n diffOwnedByAI: false,\n },\n 'aiSession'\n)\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction emitAIError(ctx: Ctx, error: MilkdownError): void {\n const config = ctx.get(aiProviderConfig.key)\n try {\n config.onError(error)\n } catch (handlerError) {\n console.error('[milkdown/ai] onError handler failed:', handlerError)\n }\n}\n\n/// Clear the live (`abortController`, `label`) portion of the session\n/// while preserving the `last*` fields used by the diff-actions Retry\n/// button.\nfunction clearActiveSession(ctx: Ctx): void {\n const current = ctx.get(aiSessionCtx.key)\n ctx.set(aiSessionCtx.key, {\n ...current,\n abortController: null,\n label: '',\n })\n}\n\n// ---------------------------------------------------------------------------\n// Async provider runner\n// ---------------------------------------------------------------------------\n\nasync function runProvider(\n ctx: Ctx,\n provider: AIProvider,\n promptContext: AIPromptContext,\n abortController: AbortController\n): Promise<void> {\n try {\n const iterable = provider(promptContext, abortController.signal)\n const commands = ctx.get(commandsCtx)\n for await (const chunk of iterable) {\n if (abortController.signal.aborted) break\n commands.call(pushChunkCmd.key, chunk)\n }\n if (abortController.signal.aborted) return\n // Streaming complete — hand off to diff review if configured. The\n // ownership flag is flipped *before* the dispatch so the diff-actions\n // panel reads `true` during the same transaction's update cycle.\n // If the dispatch is rejected (e.g. host code already ended the\n // streaming session), revert the flag so the next manually-started\n // diff review isn't misclassified as AI-owned — `clearActiveSession`\n // intentionally preserves `diffOwnedByAI` because the panel is\n // responsible for clearing it on the diff true→false edge, but no\n // such edge fires when the dispatch never landed.\n const config = ctx.get(aiProviderConfig.key)\n if (config.diffReviewOnEnd) {\n const cur = ctx.get(aiSessionCtx.key)\n ctx.set(aiSessionCtx.key, { ...cur, diffOwnedByAI: true })\n }\n const dispatched = commands.call(endStreamingCmd.key, {\n diffReview: config.diffReviewOnEnd,\n })\n if (config.diffReviewOnEnd && !dispatched) {\n const cur = ctx.get(aiSessionCtx.key)\n ctx.set(aiSessionCtx.key, { ...cur, diffOwnedByAI: false })\n }\n } catch (error) {\n if (abortController.signal.aborted) return\n const milkdownError = aiProviderError(error)\n emitAIError(ctx, milkdownError)\n const commands = ctx.get(commandsCtx)\n commands.call(abortStreamingCmd.key, { keep: false })\n } finally {\n // Only clean up if this session is still the active one. If the\n // user aborted and immediately started a new session, the new\n // session owns the ctx now and we must not clobber it.\n const current = ctx.get(aiSessionCtx.key)\n if (current.abortController === abortController) {\n clearActiveSession(ctx)\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Commands\n// ---------------------------------------------------------------------------\n\n/// Start an AI session: capture context, start streaming, and call the\n/// provider asynchronously. The command returns synchronously; the\n/// provider runs in the background.\n///\n/// When the user has a text selection, the streamed output replaces the\n/// selected text. The provider also receives the selected text in\n/// `AIPromptContext.selection` for context-aware generation.\nexport const runAICmd = $command('RunAI', (ctx) => {\n return (options?: RunAIOptions) => (state, dispatch) => {\n if (!options?.instruction) return false\n\n const config = ctx.get(aiProviderConfig.key)\n if (!config.provider) return false\n\n // Reject if a session is already running, streaming is active, or\n // diff review is active (the diff plugin blocks non-diff transactions,\n // so streaming flushes would be silently rejected).\n const session = ctx.get(aiSessionCtx.key)\n if (session.abortController) return false\n if (streamingPluginKey.getState(state)?.active) return false\n if (diffPluginKey.getState(state)?.active) return false\n\n // Dry-run: when dispatch is undefined, ProseMirror is probing\n // whether this command can execute. All precondition checks above\n // are side-effect-free so we can return true here.\n if (!dispatch) return true\n\n // Set the session label before starting the streaming plugin, so\n // the streaming-indicator widget reads the right label when its\n // decoration is first built. Empty string means \"no caller-supplied\n // label\" — the indicator widget falls through to its configured\n // `fallbackLabel`. `lastInstruction` / `lastLabel` are also stored\n // here so the diff-actions Retry button can re-run the same prompt\n // later.\n const abortController = new AbortController()\n const { from, to } = state.selection\n ctx.set(aiSessionCtx.key, {\n abortController,\n label: options.label ?? '',\n lastInstruction: options.instruction,\n lastLabel: options.label,\n lastFrom: from,\n lastTo: to,\n // Reset every run; only the success path that hands off to diff\n // review flips it back on.\n diffOwnedByAI: false,\n })\n\n // Start streaming — replaces the selection if non-empty.\n const commands = ctx.get(commandsCtx)\n const insertAt = state.selection.empty\n ? ('cursor' as const)\n : ('selection' as const)\n if (!commands.call(startStreamingCmd.key, { insertAt })) {\n clearActiveSession(ctx)\n return false\n }\n\n // Everything after startStreamingCmd is wrapped in try/catch: if\n // buildContext or anything else throws, we must abort the streaming\n // session to avoid leaving the editor locked with no way to recover.\n let promptContext: AIPromptContext\n try {\n const buildContext = config.buildContext ?? defaultBuildContext\n promptContext = buildContext(ctx, options.instruction)\n } catch (error) {\n const milkdownError = aiBuildContextError(error)\n emitAIError(ctx, milkdownError)\n commands.call(abortStreamingCmd.key, { keep: false })\n clearActiveSession(ctx)\n return false\n }\n\n // Fire-and-forget: the provider pushes chunks asynchronously.\n // startStreamingCmd already dispatched its own transaction — we\n // must NOT dispatch state.tr here as it would overwrite the\n // streaming plugin's state with a stale doc.\n void runProvider(ctx, config.provider, promptContext, abortController)\n\n return true\n }\n})\n\n/// Abort the current AI session. Signals the provider to stop and\n/// delegates to `abortStreamingCmd` if streaming is still active.\n/// Returns true whenever an AI session was actually cleaned up.\nexport const abortAICmd = $command('AbortAI', (ctx) => {\n return (options?: { keep?: boolean }) => (state, dispatch) => {\n const session = ctx.get(aiSessionCtx.key)\n // Dry-run: return whether there's something to abort, without\n // performing any side effects.\n if (!dispatch) return !!session.abortController\n\n if (!session.abortController) return false\n\n session.abortController.abort()\n clearActiveSession(ctx)\n\n // Only call abortStreamingCmd if the streaming plugin is still\n // active — it may have already finished/errored by the time the\n // user clicks abort.\n if (streamingPluginKey.getState(state)?.active) {\n const commands = ctx.get(commandsCtx)\n commands.call(abortStreamingCmd.key, options)\n }\n return true\n }\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { Node } from '@milkdown/kit/prose/model'\nimport type { PluginView } from '@milkdown/kit/prose/state'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core'\nimport {\n acceptAllDiffsCmd,\n clearDiffReviewCmd,\n diffPluginKey,\n} from '@milkdown/kit/plugin/diff'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport DOMPurify from 'dompurify'\n\nimport { aiSessionCtx, runAICmd } from '../commands'\n\nconst PANEL_CLASS = 'milkdown-ai-diff-actions'\n\n/// Icons in `ResolvedDiffActionsConfig` are user-supplied SVG strings,\n/// so route them through DOMPurify before assigning to `innerHTML` —\n/// matches the sanitization the shared `Icon` component already does\n/// for Vue-rendered icons.\nfunction setSanitizedIcon(host: HTMLElement, svg: string): void {\n host.innerHTML = DOMPurify.sanitize(svg.trim())\n}\n\n/// Fully resolved diff actions config — every field has a value, so the\n/// view doesn't have to know about defaults.\nexport interface ResolvedDiffActionsConfig {\n retryLabel: string\n rejectAllLabel: string\n acceptAllLabel: string\n retryIcon: string\n rejectIcon: string\n acceptIcon: string\n enterKeyIcon: string\n modSymbol: string\n}\n\nfunction createIcon(svg: string): HTMLElement {\n const span = document.createElement('span')\n span.className = `${PANEL_CLASS}-icon`\n setSanitizedIcon(span, svg)\n return span\n}\n\nexport class DiffActionsPanelView implements PluginView {\n readonly #panel: HTMLElement\n readonly #host: HTMLElement\n readonly #retryBtn: HTMLButtonElement\n readonly #config: ResolvedDiffActionsConfig\n #visible = false\n /// Tracks the diff plugin's `active` flag across transactions so we\n /// can detect false→true / true→false edges independently of whether\n /// the panel is actually being shown.\n #diffActive = false\n /// Doc snapshot at the moment diff review activated. If the live doc\n /// drifts from this snapshot the user has accepted some per-change\n /// diffs and the stored `lastFrom`/`lastTo` no longer point at the\n /// original range — Retry is unsafe at that point.\n #diffStartDoc: Node | null = null\n /// Whether the active diff review came from this AI session's\n /// streaming hand-off (vs being started manually via\n /// `startDiffReviewCmd`). Captured at the false→true transition.\n /// The panel only renders when this is true so it doesn't take over\n /// non-AI diff flows that exist independently of the AI feature.\n #ownedByAI = false\n\n constructor(\n readonly ctx: Ctx,\n view: EditorView,\n config: ResolvedDiffActionsConfig\n ) {\n this.#config = config\n this.#host = this.#findHost(view)\n\n const panel = document.createElement('div')\n panel.className = PANEL_CLASS\n panel.dataset.show = 'false'\n\n this.#retryBtn = this.#makeButton(\n 'retry',\n config.retryIcon,\n config.retryLabel,\n this.#retry\n )\n panel.appendChild(this.#retryBtn)\n panel.appendChild(\n this.#makeButton(\n 'reject',\n config.rejectIcon,\n config.rejectAllLabel,\n this.#rejectAll\n )\n )\n const acceptBtn = this.#makeButton(\n 'accept',\n config.acceptIcon,\n config.acceptAllLabel,\n this.#acceptAll\n )\n acceptBtn.appendChild(this.#makeShortcutChip())\n panel.appendChild(acceptBtn)\n\n this.#panel = panel\n this.#host.appendChild(panel)\n this.update(view)\n }\n\n #findHost(view: EditorView): HTMLElement {\n return (view.dom.closest('.milkdown') as HTMLElement) ?? document.body\n }\n\n #makeButton(\n variant: 'retry' | 'reject' | 'accept',\n icon: string,\n label: string,\n onClick: () => void\n ): HTMLButtonElement {\n const btn = document.createElement('button')\n btn.type = 'button'\n btn.className = `${PANEL_CLASS}-btn ${PANEL_CLASS}-btn-${variant}`\n btn.appendChild(createIcon(icon))\n const text = document.createElement('span')\n text.textContent = label\n btn.appendChild(text)\n btn.addEventListener('mousedown', (e) => e.preventDefault())\n btn.addEventListener('click', (e) => {\n e.preventDefault()\n e.stopPropagation()\n onClick()\n })\n return btn\n }\n\n #makeShortcutChip(): HTMLElement {\n const shortcut = document.createElement('span')\n shortcut.className = `${PANEL_CLASS}-shortcut`\n const cmd = document.createElement('span')\n cmd.textContent = this.#config.modSymbol\n const enter = document.createElement('span')\n enter.className = `${PANEL_CLASS}-shortcut-icon`\n setSanitizedIcon(enter, this.#config.enterKeyIcon)\n shortcut.append(cmd, enter)\n return shortcut\n }\n\n #retry = (): void => {\n const session = this.ctx.get(aiSessionCtx.key)\n if (!session.lastInstruction) return\n // Refuse to retry when the active diff didn't originate from this\n // AI session, or once the user has accepted any individual diff —\n // `clearDiffReviewCmd` only exits diff mode, it doesn't roll back\n // accepted changes, so the stored range would point at shifted text.\n if (!this.#ownedByAI || !this.#canRetry()) return\n\n const commands = this.ctx.get(commandsCtx)\n commands.call(clearDiffReviewCmd.key)\n const editorView = this.ctx.get(editorViewCtx)\n const { doc } = editorView.state\n const from = Math.min(Math.max(session.lastFrom, 0), doc.content.size)\n const to = Math.min(Math.max(session.lastTo, 0), doc.content.size)\n editorView.dispatch(\n editorView.state.tr.setSelection(\n TextSelection.create(editorView.state.doc, from, to)\n )\n )\n commands.call(runAICmd.key, {\n instruction: session.lastInstruction,\n label: session.lastLabel,\n })\n }\n\n #canRetry(): boolean {\n if (!this.#diffStartDoc) return false\n const editorView = this.ctx.get(editorViewCtx)\n return editorView.state.doc.eq(this.#diffStartDoc)\n }\n\n #rejectAll = (): void => {\n this.ctx.get(commandsCtx).call(clearDiffReviewCmd.key)\n }\n\n #acceptAll = (): void => {\n this.ctx.get(commandsCtx).call(acceptAllDiffsCmd.key)\n }\n\n update(view: EditorView): void {\n const diffActive = !!diffPluginKey.getState(view.state)?.active\n\n if (diffActive !== this.#diffActive) {\n this.#diffActive = diffActive\n if (diffActive) {\n // false → true. Capture ownership now; from this point on any\n // doc drift means the user has accepted individual diffs.\n const session = this.ctx.get(aiSessionCtx.key)\n this.#ownedByAI = session.diffOwnedByAI\n this.#diffStartDoc = view.state.doc\n } else {\n // true → false. Clear local state and the session-level flag so\n // a subsequent manual diff doesn't pick up stale ownership.\n this.#ownedByAI = false\n this.#diffStartDoc = null\n const session = this.ctx.get(aiSessionCtx.key)\n if (session.diffOwnedByAI) {\n this.ctx.set(aiSessionCtx.key, {\n ...session,\n diffOwnedByAI: false,\n })\n }\n }\n }\n\n // Render only for AI-owned diff reviews. Non-AI diffs (started via\n // `startDiffReviewCmd` directly) are left to whatever UX the host\n // had in place before this feature shipped.\n const shouldShow = diffActive && this.#ownedByAI\n if (shouldShow !== this.#visible) {\n this.#visible = shouldShow\n this.#panel.dataset.show = shouldShow ? 'true' : 'false'\n }\n\n if (shouldShow) {\n // Re-evaluate Retry every transaction so the button disables the\n // moment a per-change accept shifts the doc out of its initial\n // form.\n const session = this.ctx.get(aiSessionCtx.key)\n const docUntouched =\n !!this.#diffStartDoc && view.state.doc.eq(this.#diffStartDoc)\n this.#retryBtn.disabled = !session.lastInstruction || !docUntouched\n }\n }\n\n destroy(): void {\n this.#panel.remove()\n }\n}\n","import { commandsCtx } from '@milkdown/kit/core'\nimport { acceptAllDiffsCmd, diffPluginKey } from '@milkdown/kit/plugin/diff'\nimport { Plugin, PluginKey } from '@milkdown/kit/prose/state'\nimport { $prose } from '@milkdown/kit/utils'\n\nimport type { AIDiffActionsConfig } from '../types'\n\nimport {\n clearIcon as defaultRejectIcon,\n confirmIcon as defaultAcceptIcon,\n enterKeyIcon as defaultEnterKeyIcon,\n retryIcon as defaultRetryIcon,\n} from '../../../icons'\nimport { aiSessionCtx } from '../commands'\nimport { DiffActionsPanelView, type ResolvedDiffActionsConfig } from './view'\n\nconst diffActionsPanelKey = new PluginKey('CREPE_AI_DIFF_ACTIONS_PANEL')\n\nexport const DEFAULT_DIFF_ACTIONS_RETRY_LABEL = 'Retry'\nexport const DEFAULT_DIFF_ACTIONS_REJECT_ALL_LABEL = 'Reject all'\nexport const DEFAULT_DIFF_ACTIONS_ACCEPT_ALL_LABEL = 'Accept all'\n\nfunction detectModSymbol(): string {\n if (typeof navigator === 'undefined') return '⌘'\n // `userAgentData.platform` is the modern accessor; fall back to the\n // legacy `platform` / `userAgent` strings for older browsers and\n // jsdom-based test environments.\n const ua = navigator as unknown as {\n userAgentData?: { platform?: string }\n platform?: string\n userAgent?: string\n }\n const platform =\n ua.userAgentData?.platform ?? ua.platform ?? ua.userAgent ?? ''\n return /mac|iphone|ipad|ipod/i.test(platform) ? '⌘' : 'Ctrl'\n}\n\n/// Detected per renderer process. Override via\n/// `AIDiffActionsConfig.modSymbol` when the UI should diverge from the\n/// runtime platform (e.g. always render `⌘` in a macOS-themed product).\nexport const DEFAULT_DIFF_ACTIONS_MOD_SYMBOL = detectModSymbol()\n\ninterface DiffActionsPluginOptions {\n config?: AIDiffActionsConfig\n /// The enter-key icon is owned by the top-level `AIFeatureConfig` so a\n /// single override applies to both the instruction tooltip and this\n /// panel's shortcut chip.\n enterKeyIcon?: string\n}\n\nfunction resolveDiffActionsConfig(\n options: DiffActionsPluginOptions\n): ResolvedDiffActionsConfig {\n const { config, enterKeyIcon } = options\n return {\n retryLabel: config?.retryLabel ?? DEFAULT_DIFF_ACTIONS_RETRY_LABEL,\n rejectAllLabel:\n config?.rejectAllLabel ?? DEFAULT_DIFF_ACTIONS_REJECT_ALL_LABEL,\n acceptAllLabel:\n config?.acceptAllLabel ?? DEFAULT_DIFF_ACTIONS_ACCEPT_ALL_LABEL,\n retryIcon: config?.retryIcon ?? defaultRetryIcon,\n rejectIcon: config?.rejectIcon ?? defaultRejectIcon,\n acceptIcon: config?.acceptIcon ?? defaultAcceptIcon,\n enterKeyIcon: enterKeyIcon ?? defaultEnterKeyIcon,\n modSymbol: config?.modSymbol ?? DEFAULT_DIFF_ACTIONS_MOD_SYMBOL,\n }\n}\n\nexport function diffActionsPanelPlugin(options: DiffActionsPluginOptions = {}) {\n const resolved = resolveDiffActionsConfig(options)\n\n return $prose((ctx) => {\n return new Plugin({\n key: diffActionsPanelKey,\n view(view) {\n return new DiffActionsPanelView(ctx, view, resolved)\n },\n props: {\n handleKeyDown(view, event) {\n if (event.key !== 'Enter') return false\n if (!(event.metaKey || event.ctrlKey)) return false\n if (!diffPluginKey.getState(view.state)?.active) return false\n // Only intercept Mod-Enter for diffs this AI session started.\n // Manual `startDiffReviewCmd` flows shouldn't have their key\n // bindings mutated just because the AI feature is loaded.\n if (!ctx.get(aiSessionCtx.key).diffOwnedByAI) return false\n event.preventDefault()\n const commands = ctx.get(commandsCtx)\n commands.call(acceptAllDiffsCmd.key)\n return true\n },\n },\n })\n })\n}\n","import {\n aiIcon,\n editIcon,\n grammarCheckIcon,\n longerIcon,\n shorterIcon,\n translateIcon,\n} from '../../../icons'\n\n/// A single AI suggestion. `prompt` is sent to the provider; `streamingLabel`\n/// is the active-form text shown in the streaming indicator while AI runs.\nexport interface AISuggestionItem {\n icon: string\n label: string\n streamingLabel?: string\n prompt: string\n}\n\n/// A submenu definition. `title` is shown next to the back arrow when the\n/// submenu is open; `searchPlaceholder` replaces the input placeholder.\nexport interface AISubmenuDef {\n icon: string\n label: string\n title: string\n searchPlaceholder: string\n}\n\n/// Mutates a submenu's items in place. Obtained from\n/// `AISuggestionsBuilder.addSubmenu` (via the build callback) or\n/// `AISuggestionsBuilder.getSubmenu(id)`.\nexport interface AISubmenuBuilder {\n addItem: (id: string, item: AISuggestionItem) => AISubmenuBuilder\n removeItem: (id: string) => AISubmenuBuilder\n getItem: (id: string) => AISuggestionItem | undefined\n clear: () => AISubmenuBuilder\n}\n\ninterface SubmenuNode {\n def: AISubmenuDef\n items: Map<string, AISuggestionItem>\n}\n\nfunction createSubmenuBuilder(node: SubmenuNode): AISubmenuBuilder {\n const builder: AISubmenuBuilder = {\n addItem: (id, item) => {\n node.items.set(id, item)\n return builder\n },\n removeItem: (id) => {\n node.items.delete(id)\n return builder\n },\n getItem: (id) => node.items.get(id),\n clear: () => {\n node.items.clear()\n return builder\n },\n }\n return builder\n}\n\ntype RootNode =\n | { kind: 'item'; id: string; item: AISuggestionItem }\n | { kind: 'submenu'; id: string; node: SubmenuNode }\n\nexport type ResolvedItemEntry = {\n kind: 'item'\n id: string\n item: AISuggestionItem\n}\n\nexport type ResolvedSubmenuEntry = {\n kind: 'submenu'\n id: string\n def: AISubmenuDef\n}\n\n/// Resolved tree consumed by the tooltip view. `submenus` is keyed by\n/// submenu id so the view can switch between main and submenu lists.\nexport interface ResolvedSuggestions {\n main: Array<ResolvedItemEntry | ResolvedSubmenuEntry>\n submenus: Record<\n string,\n { def: AISubmenuDef; items: Array<{ id: string; item: AISuggestionItem }> }\n >\n}\n\nexport class AISuggestionsBuilder {\n #nodes: RootNode[] = []\n\n addItem = (id: string, item: AISuggestionItem) => {\n this.#removeById(id)\n this.#nodes.push({ kind: 'item', id, item })\n return this\n }\n\n /// Add a submenu. Populate items via the optional `build` callback,\n /// or call `getSubmenu(id)` afterward. Returns `this` so calls can be\n /// chained at the parent level alongside `addItem`.\n addSubmenu = (\n id: string,\n def: AISubmenuDef,\n build?: (sub: AISubmenuBuilder) => void\n ) => {\n this.#removeById(id)\n const node: SubmenuNode = { def, items: new Map() }\n if (build) build(createSubmenuBuilder(node))\n this.#nodes.push({ kind: 'submenu', id, node })\n return this\n }\n\n removeItem = (id: string) => {\n this.#removeById(id)\n return this\n }\n\n getItem = (id: string) => {\n const node = this.#nodes.find((n) => n.kind === 'item' && n.id === id)\n return node?.kind === 'item' ? node.item : undefined\n }\n\n /// Return a builder that mutates the submenu's items in place.\n /// Multiple calls return distinct builder objects backed by the same\n /// underlying node, so changes are always visible.\n getSubmenu = (id: string) => {\n const node = this.#nodes.find((n) => n.kind === 'submenu' && n.id === id)\n return node?.kind === 'submenu'\n ? createSubmenuBuilder(node.node)\n : undefined\n }\n\n clear = () => {\n this.#nodes = []\n return this\n }\n\n build = (): ResolvedSuggestions => {\n const main: ResolvedSuggestions['main'] = []\n const submenus: ResolvedSuggestions['submenus'] = {}\n for (const node of this.#nodes) {\n if (node.kind === 'item') {\n main.push({ kind: 'item', id: node.id, item: node.item })\n } else {\n main.push({ kind: 'submenu', id: node.id, def: node.node.def })\n submenus[node.id] = {\n def: node.node.def,\n items: Array.from(node.node.items.entries()).map(([id, item]) => ({\n id,\n item,\n })),\n }\n }\n }\n return { main, submenus }\n }\n\n #removeById = (id: string) => {\n this.#nodes = this.#nodes.filter((n) => n.id !== id)\n }\n}\n\n/// Populate a builder with the built-in defaults. Called before the\n/// user's `buildAISuggestions` callback so the user can add to,\n/// inspect, or remove any default.\nexport function applyDefaultSuggestions(builder: AISuggestionsBuilder): void {\n builder\n .addItem('improve', {\n icon: aiIcon,\n label: 'Improve writing',\n streamingLabel: 'Improving writing',\n prompt: 'Improve the writing while preserving the original meaning.',\n })\n .addItem('grammar', {\n icon: grammarCheckIcon,\n label: 'Fix grammar & spelling',\n streamingLabel: 'Fixing grammar & spelling',\n prompt:\n 'Fix any grammar and spelling errors without changing the meaning.',\n })\n .addItem('shorter', {\n icon: shorterIcon,\n label: 'Make shorter',\n streamingLabel: 'Making shorter',\n prompt: 'Make this shorter while preserving the key information.',\n })\n .addItem('longer', {\n icon: longerIcon,\n label: 'Make longer',\n streamingLabel: 'Expanding',\n prompt: 'Expand this with more detail and examples.',\n })\n\n builder.addSubmenu(\n 'tone',\n {\n icon: editIcon,\n label: 'Change tone…',\n title: 'Change tone',\n searchPlaceholder: 'Search tones…',\n },\n (sub) => {\n const tones: Array<[string, string]> = [\n ['professional', 'Professional'],\n ['casual', 'Casual'],\n ['confident', 'Confident'],\n ['friendly', 'Friendly'],\n ['direct', 'Direct'],\n ['formal', 'Formal'],\n ]\n for (const [id, label] of tones) {\n sub.addItem(id, {\n icon: editIcon,\n label,\n streamingLabel: 'Adjusting tone',\n prompt: `Rewrite this in a ${label.toLowerCase()} tone.`,\n })\n }\n }\n )\n\n builder.addSubmenu(\n 'translate',\n {\n icon: translateIcon,\n label: 'Translate…',\n title: 'Translate',\n searchPlaceholder: 'Search languages…',\n },\n (sub) => {\n const languages: Array<[string, string, string]> = [\n ['english', 'English', 'English'],\n ['chinese', 'Chinese', 'Chinese (Simplified)'],\n ['japanese', 'Japanese', 'Japanese'],\n ['korean', 'Korean', 'Korean'],\n ['spanish', 'Spanish', 'Spanish'],\n ['french', 'French', 'French'],\n ['german', 'German', 'German'],\n ]\n for (const [id, label, promptName] of languages) {\n sub.addItem(id, {\n icon: translateIcon,\n label,\n streamingLabel: `Translating to ${label}`,\n prompt: `Translate this to ${promptName}.`,\n })\n }\n }\n )\n}\n","// Prevent tree-shaking from removing Vue's `h` and `Fragment`,\n// which are required at runtime for TSX to work.\nexport function keepAlive(..._args: unknown[]) {}\n","import { Icon } from '@milkdown/kit/component'\nimport {\n computed,\n defineComponent,\n h,\n nextTick,\n ref,\n watch,\n type Ref,\n} from 'vue'\n\nimport type { AISuggestionItem, ResolvedSuggestions } from './suggestions'\n\nimport { keepAlive } from '../../../utils/keep-alive'\n\nkeepAlive(h)\n\n/// Resolved chrome (icons + labels) for the tooltip. All fields required —\n/// the view layer fills in defaults before mounting the component.\nexport interface AIInstructionTooltipChrome {\n aiIcon: string\n sendIcon: string\n sendPromptIcon: string\n enterKeyIcon: string\n chevronLeftIcon: string\n chevronRightIcon: string\n suggestionsHeaderLabel: string\n sendAsPromptHeaderLabel: string\n sendAsPromptLabel: string\n submitButtonLabel: string\n listboxLabel: string\n}\n\ntype ViewMode = { kind: 'main' } | { kind: 'submenu'; id: string }\n\ninterface DisplayItem {\n id: string\n icon: string\n label: string\n hasSubmenu: boolean\n /// undefined when the item opens a submenu; defined when it sends a prompt\n prompt?: { text: string; streamingLabel?: string }\n}\n\nfunction renderHighlighted(label: string, query: string) {\n const q = query.trim()\n if (!q) return [label]\n const lower = label.toLowerCase()\n const lq = q.toLowerCase()\n const idx = lower.indexOf(lq)\n if (idx === -1) return [label]\n return [\n label.slice(0, idx),\n h('mark', null, label.slice(idx, idx + q.length)),\n label.slice(idx + q.length),\n ]\n}\n\ntype AIInstructionInputProps = {\n placeholder: Ref<string>\n /// Bumped by the view layer every time the tooltip is shown, so the\n /// component can reset transient state (input value, submenu, cursor).\n resetSignal: Ref<number>\n suggestions: ResolvedSuggestions\n chrome: AIInstructionTooltipChrome\n onConfirm: (instruction: string, label?: string) => void\n onCancel: () => void\n}\n\nexport const AIInstructionInput = defineComponent<AIInstructionInputProps>({\n props: {\n placeholder: { type: Object, required: true },\n resetSignal: { type: Object, required: true },\n suggestions: { type: Object, required: true },\n chrome: { type: Object, required: true },\n onConfirm: { type: Function, required: true },\n onCancel: { type: Function, required: true },\n },\n setup({\n placeholder,\n resetSignal,\n suggestions,\n chrome,\n onConfirm,\n onCancel,\n }) {\n const inputValue = ref('')\n const view = ref<ViewMode>({ kind: 'main' })\n const selectedIndex = ref(0)\n const inputRef = ref<HTMLInputElement | null>(null)\n const listRef = ref<HTMLDivElement | null>(null)\n\n // Stable id pair used to wire the input ↔ listbox combobox so that\n // screen readers announce the highlighted option as the user moves\n // through the suggestions with the arrow keys.\n const listboxId = `ai-instruction-list-${Math.random().toString(36).slice(2, 9)}`\n const optionId = (idx: number) => `${listboxId}-opt-${idx}`\n\n watch(resetSignal, () => {\n inputValue.value = ''\n view.value = { kind: 'main' }\n selectedIndex.value = 0\n })\n\n const allItems = computed<DisplayItem[]>(() => {\n if (view.value.kind === 'submenu') {\n const submenu = suggestions.submenus[view.value.id]\n if (!submenu) return []\n return submenu.items.map(({ id, item }) => ({\n id,\n icon: item.icon,\n label: item.label,\n hasSubmenu: false,\n prompt: { text: item.prompt, streamingLabel: item.streamingLabel },\n }))\n }\n return suggestions.main.map((entry) => {\n if (entry.kind === 'item') {\n return {\n id: entry.id,\n icon: entry.item.icon,\n label: entry.item.label,\n hasSubmenu: false,\n prompt: {\n text: entry.item.prompt,\n streamingLabel: entry.item.streamingLabel,\n },\n }\n }\n return {\n id: entry.id,\n icon: entry.def.icon,\n label: entry.def.label,\n hasSubmenu: true,\n }\n })\n })\n\n const currentSubmenuDef = computed(() => {\n if (view.value.kind !== 'submenu') return null\n return suggestions.submenus[view.value.id]?.def ?? null\n })\n\n const filteredItems = computed(() => {\n const q = inputValue.value.trim().toLowerCase()\n if (!q) return allItems.value\n return allItems.value.filter((item) =>\n item.label.toLowerCase().includes(q)\n )\n })\n\n const showSendAsPrompt = computed(() => inputValue.value.trim().length > 0)\n\n const totalItems = computed(\n () => filteredItems.value.length + (showSendAsPrompt.value ? 1 : 0)\n )\n\n watch([filteredItems, view, showSendAsPrompt], () => {\n // When the user has typed something, default the highlight to the\n // \"Send as prompt\" row (always last in the list) so pressing Enter\n // sends the typed text instead of running whichever built-in\n // suggestion happens to substring-match the query.\n selectedIndex.value = showSendAsPrompt.value\n ? filteredItems.value.length\n : 0\n })\n\n const focusInput = () => {\n void nextTick(() => inputRef.value?.focus())\n }\n\n const enterSubmenu = (id: string) => {\n view.value = { kind: 'submenu', id }\n inputValue.value = ''\n selectedIndex.value = 0\n focusInput()\n }\n\n const exitSubmenu = () => {\n view.value = { kind: 'main' }\n inputValue.value = ''\n selectedIndex.value = 0\n focusInput()\n }\n\n const runItem = (item: DisplayItem) => {\n if (item.hasSubmenu) {\n enterSubmenu(item.id)\n } else if (item.prompt) {\n onConfirm(item.prompt.text, item.prompt.streamingLabel)\n inputValue.value = ''\n }\n }\n\n const submitRaw = () => {\n const v = inputValue.value.trim()\n if (!v) return\n onConfirm(v)\n inputValue.value = ''\n }\n\n const onSelectCurrent = () => {\n const idx = selectedIndex.value\n const items = filteredItems.value\n if (idx < items.length) {\n runItem(items[idx]!)\n } else if (showSendAsPrompt.value) {\n submitRaw()\n }\n }\n\n const scrollToSelected = () => {\n void nextTick(() => {\n const list = listRef.value\n if (!list) return\n const el = list.querySelector(\n `[data-index=\"${selectedIndex.value}\"]`\n ) as HTMLElement | null\n el?.scrollIntoView({ block: 'nearest' })\n })\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n e.stopPropagation()\n\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n if (totalItems.value === 0) return\n selectedIndex.value = (selectedIndex.value + 1) % totalItems.value\n scrollToSelected()\n return\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n if (totalItems.value === 0) return\n selectedIndex.value =\n (selectedIndex.value - 1 + totalItems.value) % totalItems.value\n scrollToSelected()\n return\n }\n\n if (e.key === 'Enter') {\n e.preventDefault()\n onSelectCurrent()\n return\n }\n\n if (e.key === 'Escape') {\n e.preventDefault()\n if (view.value.kind === 'submenu') exitSubmenu()\n else onCancel()\n return\n }\n\n if (\n e.key === 'Backspace' &&\n inputValue.value === '' &&\n view.value.kind === 'submenu'\n ) {\n e.preventDefault()\n exitSubmenu()\n }\n }\n\n const onItemPointerDown = (e: Event) => {\n e.preventDefault()\n }\n\n return () => {\n const items = filteredItems.value\n const showPrompt = showSendAsPrompt.value\n const submenuDef = currentSubmenuDef.value\n\n return (\n <div class=\"ai-instruction\">\n <div class=\"ai-instruction-input\">\n <span class=\"ai-instruction-input-prefix\">\n <Icon icon={chrome.aiIcon} />\n </span>\n <input\n ref={inputRef}\n class=\"ai-instruction-input-field\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-activedescendant={\n totalItems.value > 0 ? optionId(selectedIndex.value) : undefined\n }\n placeholder={\n submenuDef ? submenuDef.searchPlaceholder : placeholder.value\n }\n value={inputValue.value}\n onInput={(e: Event) => {\n inputValue.value = (e.target as HTMLInputElement).value\n }}\n onKeydown={onKeydown}\n />\n <button\n type=\"button\"\n class=\"ai-instruction-submit\"\n aria-label={chrome.submitButtonLabel}\n disabled={!showPrompt}\n onMousedown={onItemPointerDown}\n onClick={submitRaw}\n >\n <Icon icon={chrome.sendIcon} />\n </button>\n </div>\n\n <div\n class=\"ai-instruction-list\"\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={chrome.listboxLabel}\n >\n {submenuDef && (\n <button\n type=\"button\"\n class=\"ai-instruction-back\"\n onMousedown={onItemPointerDown}\n onClick={exitSubmenu}\n >\n <span class=\"ai-instruction-back-icon\" aria-hidden=\"true\">\n <Icon icon={chrome.chevronLeftIcon} />\n </span>\n <span>{submenuDef.title}</span>\n </button>\n )}\n\n {items.length > 0 && (\n <div class=\"ai-instruction-section\">\n <div class=\"ai-instruction-section-header\">\n {chrome.suggestionsHeaderLabel}\n </div>\n {items.map((item, idx) => (\n <div\n key={item.id}\n id={optionId(idx)}\n data-index={idx}\n role=\"option\"\n aria-selected={idx === selectedIndex.value}\n class={[\n 'ai-instruction-item',\n idx === selectedIndex.value ? 'active' : '',\n ]}\n onMousedown={onItemPointerDown}\n onClick={() => runItem(item)}\n onPointerenter={() => {\n selectedIndex.value = idx\n }}\n >\n <span class=\"ai-instruction-item-icon\">\n <Icon icon={item.icon} />\n </span>\n <span class=\"ai-instruction-item-label\">\n {renderHighlighted(item.label, inputValue.value)}\n </span>\n {item.hasSubmenu && (\n <span class=\"ai-instruction-item-arrow\">\n <Icon icon={chrome.chevronRightIcon} />\n </span>\n )}\n </div>\n ))}\n </div>\n )}\n\n {showPrompt && (\n <div class=\"ai-instruction-section\">\n <div class=\"ai-instruction-section-header\">\n {chrome.sendAsPromptHeaderLabel}\n </div>\n <div\n id={optionId(items.length)}\n data-index={items.length}\n role=\"option\"\n aria-selected={selectedIndex.value === items.length}\n class={[\n 'ai-instruction-item',\n 'ai-instruction-item-prompt',\n selectedIndex.value === items.length ? 'active' : '',\n ]}\n onMousedown={onItemPointerDown}\n onClick={submitRaw}\n onPointerenter={() => {\n selectedIndex.value = items.length\n }}\n >\n <span class=\"ai-instruction-item-icon\">\n <Icon icon={chrome.sendPromptIcon} />\n </span>\n <span class=\"ai-instruction-item-label\">\n {chrome.sendAsPromptLabel}{' '}\n <span class=\"ai-instruction-item-quote\">\n \"{inputValue.value}\"\n </span>\n </span>\n <span class=\"ai-instruction-item-shortcut\">\n <Icon icon={chrome.enterKeyIcon} />\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n }\n },\n})\n\nexport type { AISuggestionItem }\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { EditorState, PluginView } from '@milkdown/kit/prose/state'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core'\nimport { TooltipProvider } from '@milkdown/kit/plugin/tooltip'\nimport { posToDOMRect } from '@milkdown/kit/prose'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { createApp, ref, type App } from 'vue'\n\nimport type { ResolvedSuggestions } from './suggestions'\n\nimport { runAICmd } from '../commands'\nimport {\n AIInstructionInput,\n type AIInstructionTooltipChrome,\n} from './component'\n\nexport interface AIInstructionTooltipViewConfig {\n placeholder: string\n chrome: AIInstructionTooltipChrome\n suggestions: ResolvedSuggestions\n}\n\nexport class AIInstructionTooltipView implements PluginView {\n #content: HTMLElement\n #provider: TooltipProvider\n #app: App\n #placeholder\n #resetSignal\n #from = -1\n #to = -1\n /// Source of truth for \"should the palette currently be showing\".\n /// `TooltipProvider.shouldShow` reads this so that forwarding `update()`\n /// to the provider on every editor transition (needed to keep the\n /// floating position in sync with layout changes) doesn't dismiss the\n /// palette behind our back.\n #wantsShow = false\n\n constructor(\n readonly ctx: Ctx,\n view: EditorView,\n config: AIInstructionTooltipViewConfig\n ) {\n // Wrapped in a ref so the Vue component re-renders if it ever\n // changes; today there's no setter, but keeping it reactive lets a\n // future API (e.g. context-sensitive placeholders) plug in cleanly.\n this.#placeholder = ref(config.placeholder)\n // Bumped on each `show()` so the component clears input/submenu/cursor\n // state — the Vue app stays mounted across hide/show cycles, so its\n // local state would otherwise persist into the next session.\n this.#resetSignal = ref(0)\n\n const content = document.createElement('div')\n content.className = 'milkdown-ai-instruction'\n\n const app = createApp(AIInstructionInput, {\n placeholder: this.#placeholder,\n resetSignal: this.#resetSignal,\n suggestions: config.suggestions,\n chrome: config.chrome,\n onConfirm: this.#onConfirm,\n onCancel: this.#onCancel,\n })\n app.mount(content)\n this.#app = app\n this.#content = content\n\n this.#provider = new TooltipProvider({\n content,\n debounce: 0,\n offset: 10,\n shouldShow: () => this.#wantsShow,\n floatingUIOptions: {\n placement: 'bottom',\n },\n })\n this.#provider.onHide = () => {\n this.#wantsShow = false\n requestAnimationFrame(() => {\n try {\n // Only restore focus to the editor when the palette itself\n // was holding focus at hide time (Escape, Enter-to-confirm,\n // selection-driven dismissal). If the user dismissed the\n // palette by clicking somewhere else, focus is already on\n // that target and stealing it back would frustrate keyboard\n // and assistive-technology users trying to leave the editor.\n const root = this.#content.getRootNode() as Document | ShadowRoot\n const active = root.activeElement\n if (!active || !this.#content.contains(active)) return\n const v = this.ctx.get(editorViewCtx)\n v.dom.focus({ preventScroll: true })\n } catch {\n // Editor may be destroyed\n }\n })\n }\n this.#provider.update(view)\n }\n\n #onConfirm = (instruction: string, label?: string) => {\n if (!instruction.trim()) return\n // Dispatch first and only dismiss the palette on success. If\n // `runAICmd` rejects (no provider, an active streaming session, an\n // active diff review, …) the user's typed instruction stays visible\n // so they can retry once the editor is in a state that accepts it.\n const commands = this.ctx.get(commandsCtx)\n const accepted = commands.call(runAICmd.key, { instruction, label })\n if (!accepted) return\n this.#wantsShow = false\n this.#provider.hide()\n }\n\n #onCancel = () => {\n this.#wantsShow = false\n this.#provider.hide()\n }\n\n show = (from: number, to: number) => {\n this.#from = from\n this.#to = to\n this.#resetSignal.value++\n this.#wantsShow = true\n const view = this.ctx.get(editorViewCtx)\n this.#provider.show(\n { getBoundingClientRect: () => posToDOMRect(view, from, to) },\n view\n )\n requestAnimationFrame(() => {\n this.#content.querySelector('input')?.focus()\n })\n }\n\n update = (view: EditorView, prevState?: EditorState) => {\n const { selection } = view.state\n // Hide whenever the anchor selection moves OR becomes a non-text\n // selection (e.g. user clicks an image or table node). Otherwise the\n // tooltip would stay orphaned on screen with no valid range.\n const isTextSelection = selection instanceof TextSelection\n const movedRange =\n selection.from !== this.#from || selection.to !== this.#to\n if (!isTextSelection || movedRange) {\n this.#wantsShow = false\n this.#provider.hide()\n return\n }\n\n // Forward to the provider so floating UI re-runs its position\n // calculation against the current view (anchor coordinates can shift\n // with layout/document changes even when from/to stay the same).\n this.#provider.update(view, prevState)\n }\n\n destroy = () => {\n this.#app.unmount()\n this.#provider.destroy()\n this.#content.remove()\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { tooltipFactory } from '@milkdown/kit/plugin/tooltip'\nimport { $ctx } from '@milkdown/kit/utils'\n\nimport type { AIFeatureConfig } from '../types'\nimport type { AIInstructionTooltipChrome } from './component'\n\nimport {\n aiIcon as defaultAiIcon,\n chevronLeftIcon as defaultChevronLeftIcon,\n chevronRightIcon as defaultChevronRightIcon,\n enterKeyIcon as defaultEnterKeyIcon,\n sendIcon as defaultSendIcon,\n sendPromptIcon as defaultSendPromptIcon,\n} from '../../../icons'\nimport { AISuggestionsBuilder, applyDefaultSuggestions } from './suggestions'\nimport {\n AIInstructionTooltipView,\n type AIInstructionTooltipViewConfig,\n} from './view'\n\nexport interface AIInstructionTooltipAPI {\n show: (from: number, to: number) => void\n}\n\nconst defaultAPI: AIInstructionTooltipAPI = {\n show: () => {},\n}\n\nexport const aiInstructionTooltipAPI = $ctx(\n { ...defaultAPI },\n 'aiInstructionTooltipAPI'\n)\n\nexport const aiInstructionTooltip = tooltipFactory('CREPE_AI_INSTRUCTION')\n\n/// Default strings for the instruction tooltip. Exported so the JSDoc on\n/// `AIFeatureConfig` and consumers stay in sync with what the resolver\n/// actually uses.\nexport const DEFAULT_SUGGESTIONS_HEADER_LABEL = 'SUGGESTIONS'\nexport const DEFAULT_SEND_AS_PROMPT_HEADER_LABEL = 'SEND AS PROMPT'\nexport const DEFAULT_SEND_AS_PROMPT_LABEL = 'Ask AI:'\nexport const DEFAULT_SUBMIT_BUTTON_LABEL = 'Send prompt'\nexport const DEFAULT_LISTBOX_LABEL = 'AI suggestions'\nexport const DEFAULT_INSTRUCTION_PLACEHOLDER =\n 'Tell AI what to do with the selection…'\n\nfunction resolveChrome(config?: AIFeatureConfig): AIInstructionTooltipChrome {\n return {\n aiIcon: config?.aiIcon ?? defaultAiIcon,\n sendIcon: config?.sendIcon ?? defaultSendIcon,\n sendPromptIcon: config?.sendPromptIcon ?? defaultSendPromptIcon,\n enterKeyIcon: config?.enterKeyIcon ?? defaultEnterKeyIcon,\n chevronLeftIcon: config?.chevronLeftIcon ?? defaultChevronLeftIcon,\n chevronRightIcon: config?.chevronRightIcon ?? defaultChevronRightIcon,\n suggestionsHeaderLabel:\n config?.suggestionsHeaderLabel ?? DEFAULT_SUGGESTIONS_HEADER_LABEL,\n sendAsPromptHeaderLabel:\n config?.sendAsPromptHeaderLabel ?? DEFAULT_SEND_AS_PROMPT_HEADER_LABEL,\n sendAsPromptLabel:\n config?.sendAsPromptLabel ?? DEFAULT_SEND_AS_PROMPT_LABEL,\n submitButtonLabel: config?.submitButtonLabel ?? DEFAULT_SUBMIT_BUTTON_LABEL,\n listboxLabel: config?.listboxLabel ?? DEFAULT_LISTBOX_LABEL,\n }\n}\n\nfunction resolveViewConfig(\n config?: AIFeatureConfig\n): AIInstructionTooltipViewConfig {\n const builder = new AISuggestionsBuilder()\n applyDefaultSuggestions(builder)\n config?.buildAISuggestions?.(builder)\n return {\n placeholder:\n config?.instructionPlaceholder ?? DEFAULT_INSTRUCTION_PLACEHOLDER,\n chrome: resolveChrome(config),\n suggestions: builder.build(),\n }\n}\n\nexport function configureAIInstructionTooltip(config?: AIFeatureConfig) {\n return (ctx: Ctx) => {\n const viewConfig = resolveViewConfig(config)\n let tooltipView: AIInstructionTooltipView | null = null\n\n ctx.update(aiInstructionTooltipAPI.key, (api) => ({\n ...api,\n show: (from, to) => {\n tooltipView?.show(from, to)\n },\n }))\n\n ctx.set(aiInstructionTooltip.key, {\n view: (view) => {\n tooltipView = new AIInstructionTooltipView(ctx, view, viewConfig)\n return tooltipView\n },\n })\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { Node } from '@milkdown/kit/prose/model'\n\nimport { commandsCtx } from '@milkdown/kit/core'\nimport {\n abortStreamingCmd,\n streamingPluginKey,\n} from '@milkdown/kit/plugin/streaming'\nimport { Plugin, PluginKey } from '@milkdown/kit/prose/state'\nimport { Decoration, DecorationSet } from '@milkdown/kit/prose/view'\nimport { $prose } from '@milkdown/kit/utils'\n\nimport type { AIStreamingIndicatorConfig } from './types'\n\nimport { abortAICmd, aiSessionCtx } from './commands'\n\nconst CLASS_PREFIX = 'milkdown-ai-streaming'\nconst SPINNER_PERIOD_MS = 800\n\nexport const DEFAULT_STREAMING_FALLBACK_LABEL = 'Generating'\nexport const DEFAULT_STREAMING_CANCEL_HINT = 'Esc to cancel'\n\nconst indicatorKey = new PluginKey<DecorationSet>(\n 'CREPE_AI_STREAMING_INDICATOR'\n)\n\n/// One spinner per streaming session. The rotation is driven by\n/// requestAnimationFrame instead of CSS keyframes so that DOM moves\n/// (which happen every chunk as the indicator's position advances) do\n/// not reset the animation back to 0deg.\nclass IndicatorWidget {\n readonly dom: HTMLElement\n readonly #spinner: HTMLElement\n readonly #label: HTMLElement\n readonly #fallbackLabel: string\n readonly #start = performance.now()\n #lastLabelText = ''\n #rafId = 0\n\n constructor(ctx: Ctx, fallbackLabel: string, cancelHint: string) {\n this.#fallbackLabel = fallbackLabel\n\n const dom = document.createElement('span')\n dom.className = `${CLASS_PREFIX}-indicator`\n dom.contentEditable = 'false'\n // Treat the pill as a status live region so assistive technologies\n // get notified when AI starts streaming and when the active-form\n // label changes between sessions (\"Improving writing…\",\n // \"Translating to French…\", etc.).\n dom.setAttribute('role', 'status')\n dom.setAttribute('aria-live', 'polite')\n\n const spinner = document.createElement('span')\n spinner.className = `${CLASS_PREFIX}-spinner`\n // The decorative rotation has no semantic value for screen readers.\n spinner.setAttribute('aria-hidden', 'true')\n dom.appendChild(spinner)\n\n const label = document.createElement('span')\n label.className = `${CLASS_PREFIX}-label`\n dom.appendChild(label)\n\n const escHint = document.createElement('span')\n escHint.className = `${CLASS_PREFIX}-esc`\n escHint.textContent = cancelHint\n dom.appendChild(escHint)\n\n this.dom = dom\n this.#spinner = spinner\n this.#label = label\n this.setLabel(ctx)\n this.#tick()\n }\n\n setLabel(ctx: Ctx) {\n const session = ctx.get(aiSessionCtx.key)\n const text = `${session.label || this.#fallbackLabel}…`\n if (text === this.#lastLabelText) return\n this.#lastLabelText = text\n this.#label.textContent = text\n }\n\n destroy() {\n if (this.#rafId) cancelAnimationFrame(this.#rafId)\n this.#rafId = 0\n }\n\n #tick = () => {\n const elapsed = performance.now() - this.#start\n const angle = (elapsed / SPINNER_PERIOD_MS) * 360\n this.#spinner.style.transform = `rotate(${angle}deg)`\n this.#rafId = requestAnimationFrame(this.#tick)\n }\n}\n\ninterface StreamingIndicatorPluginOptions {\n config?: AIStreamingIndicatorConfig\n}\n\nexport function streamingIndicatorPlugin(\n options: StreamingIndicatorPluginOptions = {}\n) {\n const { config } = options\n const fallbackLabel =\n config?.fallbackLabel ?? DEFAULT_STREAMING_FALLBACK_LABEL\n const cancelHint = config?.cancelHint ?? DEFAULT_STREAMING_CANCEL_HINT\n\n return $prose((ctx) => {\n let widget: IndicatorWidget | null = null\n\n function ensureWidget(): IndicatorWidget {\n if (!widget) widget = new IndicatorWidget(ctx, fallbackLabel, cancelHint)\n else widget.setLabel(ctx)\n return widget\n }\n\n function dropWidget(): void {\n if (widget) {\n widget.destroy()\n widget = null\n }\n }\n\n function buildSet(doc: Node, insertEndPos: number): DecorationSet {\n const pos = Math.min(insertEndPos, doc.content.size)\n const decoration = Decoration.widget(pos, ensureWidget().dom, {\n side: 1,\n key: 'ai-streaming-indicator',\n })\n return DecorationSet.create(doc, [decoration])\n }\n\n return new Plugin<DecorationSet>({\n key: indicatorKey,\n state: {\n init: () => DecorationSet.empty,\n apply(tr, decorations, _oldState, newState) {\n const streaming = streamingPluginKey.getState(newState)\n if (!streaming?.active || streaming.insertEndPos == null) {\n dropWidget()\n return DecorationSet.empty\n }\n if (tr.getMeta(streamingPluginKey) || tr.docChanged) {\n return buildSet(newState.doc, streaming.insertEndPos)\n }\n return decorations.map(tr.mapping, tr.doc)\n },\n },\n view() {\n return {\n destroy() {\n dropWidget()\n },\n }\n },\n props: {\n decorations(state) {\n return indicatorKey.getState(state) ?? DecorationSet.empty\n },\n handleKeyDown(view, event) {\n if (event.key !== 'Escape') return false\n const commands = ctx.get(commandsCtx)\n // AI-driven session: route through abortAICmd so the AI\n // session state (abortController, label) cleans up too.\n if (ctx.get(aiSessionCtx.key).abortController) {\n event.preventDefault()\n commands.call(abortAICmd.key, { keep: true })\n return true\n }\n // Manual streaming session (no AI session in flight) — abort\n // the streaming plugin directly so the \"Esc to cancel\" hint\n // shown in the pill isn't misleading.\n if (streamingPluginKey.getState(view.state)?.active) {\n event.preventDefault()\n commands.call(abortStreamingCmd.key, { keep: true })\n return true\n }\n return false\n },\n },\n })\n })\n}\n","import {\n diffComponent,\n diffComponentConfig,\n} from '@milkdown/kit/component/diff'\nimport { diff, diffConfig } from '@milkdown/kit/plugin/diff'\nimport { streaming, streamingConfig } from '@milkdown/kit/plugin/streaming'\n\nimport type { DefineFeature } from '../shared'\nimport type { AIFeatureConfig } from './types'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../index'\nimport {\n aiProviderConfig,\n aiSessionCtx,\n abortAICmd,\n runAICmd,\n} from './commands'\nimport { diffActionsPanelPlugin } from './diff-actions'\nimport {\n aiInstructionTooltip,\n aiInstructionTooltipAPI,\n configureAIInstructionTooltip,\n} from './instruction-tooltip'\nimport { streamingIndicatorPlugin } from './streaming-indicator'\n\n/// Default node types in Crepe that use custom node views.\nconst CREPE_CUSTOM_BLOCK_TYPES = ['table', 'image-block', 'code_block']\n\n/// Default attrs to ignore in Crepe's diff and streaming features.\nconst CREPE_IGNORE_ATTRS: Record<string, string[]> = { heading: ['id'] }\n\nexport type {\n AIDiffActionsConfig,\n AIFeatureConfig,\n AIPromptContext,\n AIProvider,\n AIStreamingIndicatorConfig,\n AISubmenuBuilder,\n AISubmenuDef,\n AISuggestionItem,\n AISuggestionsBuilder,\n} from './types'\nexport { runAICmd, abortAICmd } from './commands'\nexport { defaultBuildContext } from './context'\n\nexport const ai: DefineFeature<AIFeatureConfig> = (editor, config) => {\n const diffCfg = config?.diff ?? {}\n const streamingCfg = config?.streaming ?? {}\n\n editor\n .config(crepeFeatureConfig(CrepeFeature.AI))\n // -- Diff plugin + component --\n .config((ctx) => {\n ctx.update(diffConfig.key, (prev) => ({\n ...prev,\n ignoreAttrs: diffCfg.ignoreAttrs ?? CREPE_IGNORE_ATTRS,\n }))\n const { ignoreAttrs: _, ...componentConfig } = diffCfg\n ctx.update(diffComponentConfig.key, (prev) => ({\n ...prev,\n customBlockTypes:\n componentConfig.customBlockTypes ?? CREPE_CUSTOM_BLOCK_TYPES,\n ...componentConfig,\n }))\n })\n .use(diff)\n .use(diffComponent)\n // -- Streaming plugin --\n .config((ctx) => {\n ctx.update(streamingConfig.key, (prev) => ({\n ...prev,\n ...streamingCfg,\n ignoreAttrs: streamingCfg.ignoreAttrs ?? CREPE_IGNORE_ATTRS,\n // Wire diffReviewOnEnd into the streaming plugin so manual\n // endStreamingCmd calls (outside runAICmd) also respect it.\n // Only override if the user explicitly set it — otherwise\n // keep the streaming plugin's own default so tests and\n // manual-streaming use cases aren't surprised.\n ...(config?.diffReviewOnEnd !== undefined\n ? { diffReviewOnEnd: config.diffReviewOnEnd }\n : {}),\n }))\n })\n .use(streaming)\n // -- AI orchestration --\n .config((ctx) => {\n ctx.update(aiProviderConfig.key, (prev) => ({\n ...prev,\n ...(config?.provider !== undefined\n ? { provider: config.provider }\n : {}),\n ...(config?.buildContext !== undefined\n ? { buildContext: config.buildContext }\n : {}),\n diffReviewOnEnd: config?.diffReviewOnEnd ?? prev.diffReviewOnEnd,\n ...(config?.onError !== undefined ? { onError: config.onError } : {}),\n ...(config?.aiIcon !== undefined ? { aiIcon: config.aiIcon } : {}),\n }))\n })\n .use(aiProviderConfig)\n .use(aiSessionCtx)\n .use(runAICmd)\n .use(abortAICmd)\n // -- AI instruction tooltip --\n .config(configureAIInstructionTooltip(config))\n .use(aiInstructionTooltipAPI)\n .use(aiInstructionTooltip)\n // -- Streaming indicator --\n .use(streamingIndicatorPlugin({ config: config?.streamingIndicator }))\n // -- Diff actions panel --\n .use(\n diffActionsPanelPlugin({\n config: config?.diffActions,\n enterKeyIcon: config?.enterKeyIcon,\n })\n )\n}\n","import type { Selection } from '@milkdown/kit/prose/state'\n\nexport function isInCodeBlock(selection: Selection) {\n const type = selection.$from.parent.type\n return type.name === 'code_block'\n}\n\nexport function isInList(selection: Selection) {\n const type = selection.$from.node(selection.$from.depth - 1)?.type\n return type?.name === 'list_item'\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\ntype MenuItem<T> = {\n index: number\n key: string\n onRun?: (ctx: Ctx) => void\n} & T\n\ntype WithRange<T, HasIndex extends true | false = true> = HasIndex extends true\n ? T & { range: [start: number, end: number] }\n : T\n\nexport type MenuItemGroup<T, HasIndex extends true | false = true> = WithRange<\n {\n key: string\n label: string\n items: HasIndex extends true ? MenuItem<T>[] : Omit<MenuItem<T>, 'index'>[]\n },\n HasIndex\n>\n\nexport class GroupBuilder<T> {\n #groups: MenuItemGroup<T, false>[] = []\n\n clear = () => {\n this.#groups = []\n return this\n }\n\n #getGroupInstance = (group: MenuItemGroup<T, false>) => {\n const groupInstance = {\n group,\n addItem: (key: string, item: Omit<MenuItem<T>, 'key' | 'index'>) => {\n const data = { ...item, key } as MenuItem<T>\n group.items.push(data)\n return groupInstance\n },\n clear: () => {\n group.items = []\n return groupInstance\n },\n }\n return groupInstance\n }\n\n addGroup = (key: string, label: string) => {\n const items: Omit<MenuItem<T>, 'index'>[] = []\n const group: MenuItemGroup<T, false> = {\n key,\n label,\n items,\n }\n this.#groups.push(group)\n\n return this.#getGroupInstance(group)\n }\n\n getGroup = (key: string) => {\n const group = this.#groups.find((group) => group.key === key)\n if (!group) throw new Error(`Group with key ${key} not found`)\n\n return this.#getGroupInstance(group)\n }\n\n build = () => {\n return this.#groups\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { imageBlockSchema } from '@milkdown/kit/component/image-block'\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core'\nimport {\n addBlockTypeCommand,\n blockquoteSchema,\n bulletListSchema,\n clearTextInCurrentBlockCommand,\n codeBlockSchema,\n headingSchema,\n hrSchema,\n listItemSchema,\n orderedListSchema,\n paragraphSchema,\n selectTextNearPosCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n} from '@milkdown/kit/preset/commonmark'\nimport { createTable } from '@milkdown/kit/preset/gfm'\n\nimport type { BlockEditFeatureConfig } from '../index'\nimport type { SlashMenuItem } from './utils'\n\nimport { useCrepeFeatures } from '../../../core/slice'\nimport { CrepeFeature } from '../../../feature'\nimport {\n bulletListIcon,\n codeIcon,\n dividerIcon,\n functionsIcon,\n h1Icon,\n h2Icon,\n h3Icon,\n h4Icon,\n h5Icon,\n h6Icon,\n imageIcon,\n orderedListIcon,\n quoteIcon,\n tableIcon,\n textIcon,\n todoListIcon,\n} from '../../../icons'\nimport { GroupBuilder, type MenuItemGroup } from '../../../utils/group-builder'\n\nexport function getGroups(\n filter?: string,\n config?: BlockEditFeatureConfig,\n ctx?: Ctx\n) {\n const flags = ctx && useCrepeFeatures(ctx).get()\n const isLatexEnabled = flags?.includes(CrepeFeature.Latex)\n const isImageBlockEnabled = flags?.includes(CrepeFeature.ImageBlock)\n const isTableEnabled = flags?.includes(CrepeFeature.Table)\n\n const groupBuilder = new GroupBuilder<SlashMenuItem>()\n if (config?.textGroup !== null) {\n const textGroup = groupBuilder.addGroup(\n 'text',\n config?.textGroup?.label ?? 'Text'\n )\n if (config?.textGroup?.text !== null) {\n textGroup.addItem('text', {\n label: config?.textGroup?.text?.label ?? 'Text',\n icon: config?.textGroup?.text?.icon ?? textIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const paragraph = paragraphSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: paragraph,\n })\n },\n })\n }\n\n if (config?.textGroup?.h1 !== null) {\n textGroup.addItem('h1', {\n label: config?.textGroup?.h1?.label ?? 'Heading 1',\n icon: config?.textGroup?.h1?.icon ?? h1Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 1,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h2 !== null) {\n textGroup.addItem('h2', {\n label: config?.textGroup?.h2?.label ?? 'Heading 2',\n icon: config?.textGroup?.h2?.icon ?? h2Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 2,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h3 !== null) {\n textGroup.addItem('h3', {\n label: config?.textGroup?.h3?.label ?? 'Heading 3',\n icon: config?.textGroup?.h3?.icon ?? h3Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 3,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h4 !== null) {\n textGroup.addItem('h4', {\n label: config?.textGroup?.h4?.label ?? 'Heading 4',\n icon: config?.textGroup?.h4?.icon ?? h4Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 4,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h5 !== null) {\n textGroup.addItem('h5', {\n label: config?.textGroup?.h5?.label ?? 'Heading 5',\n icon: config?.textGroup?.h5?.icon ?? h5Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 5,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h6 !== null) {\n textGroup.addItem('h6', {\n label: config?.textGroup?.h6?.label ?? 'Heading 6',\n icon: config?.textGroup?.h6?.icon ?? h6Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 6,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.quote !== null) {\n textGroup.addItem('quote', {\n label: config?.textGroup?.quote?.label ?? 'Quote',\n icon: config?.textGroup?.quote?.icon ?? quoteIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const blockquote = blockquoteSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: blockquote,\n })\n },\n })\n }\n\n if (config?.textGroup?.divider !== null) {\n textGroup.addItem('divider', {\n label: config?.textGroup?.divider?.label ?? 'Divider',\n icon: config?.textGroup?.divider?.icon ?? dividerIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const hr = hrSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: hr,\n })\n },\n })\n }\n }\n\n if (config?.listGroup !== null) {\n const listGroup = groupBuilder.addGroup(\n 'list',\n config?.listGroup?.label ?? 'List'\n )\n if (config?.listGroup?.bulletList !== null) {\n listGroup.addItem('bullet-list', {\n label: config?.listGroup?.bulletList?.label ?? 'Bullet List',\n icon: config?.listGroup?.bulletList?.icon ?? bulletListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const bulletList = bulletListSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: bulletList,\n })\n },\n })\n }\n\n if (config?.listGroup?.orderedList !== null) {\n listGroup.addItem('ordered-list', {\n label: config?.listGroup?.orderedList?.label ?? 'Ordered List',\n icon: config?.listGroup?.orderedList?.icon ?? orderedListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const orderedList = orderedListSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: orderedList,\n })\n },\n })\n }\n\n if (config?.listGroup?.taskList !== null) {\n listGroup.addItem('task-list', {\n label: config?.listGroup?.taskList?.label ?? 'Task List',\n icon: config?.listGroup?.taskList?.icon ?? todoListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const listItem = listItemSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: listItem,\n attrs: { checked: false },\n })\n },\n })\n }\n }\n\n if (config?.advancedGroup !== null) {\n const advancedGroup = groupBuilder.addGroup(\n 'advanced',\n config?.advancedGroup?.label ?? 'Advanced'\n )\n\n if (config?.advancedGroup?.image !== null && isImageBlockEnabled) {\n advancedGroup.addItem('image', {\n label: config?.advancedGroup?.image?.label ?? 'Image',\n icon: config?.advancedGroup?.image?.icon ?? imageIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const imageBlock = imageBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: imageBlock,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.codeBlock !== null) {\n advancedGroup.addItem('code', {\n label: config?.advancedGroup?.codeBlock?.label ?? 'Code',\n icon: config?.advancedGroup?.codeBlock?.icon ?? codeIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const codeBlock = codeBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: codeBlock,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.table !== null && isTableEnabled) {\n advancedGroup.addItem('table', {\n label: config?.advancedGroup?.table?.label ?? 'Table',\n icon: config?.advancedGroup?.table?.icon ?? tableIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const view = ctx.get(editorViewCtx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n\n // record the position before the table is inserted\n const { from } = view.state.selection\n commands.call(addBlockTypeCommand.key, {\n nodeType: createTable(ctx, 3, 3),\n })\n\n commands.call(selectTextNearPosCommand.key, {\n pos: from,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.math !== null && isLatexEnabled) {\n advancedGroup.addItem('math', {\n label: config?.advancedGroup?.math?.label ?? 'Math',\n icon: config?.advancedGroup?.math?.icon ?? functionsIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const codeBlock = codeBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: codeBlock,\n attrs: { language: 'LaTeX' },\n })\n },\n })\n }\n }\n\n config?.buildMenu?.(groupBuilder)\n\n let groups = groupBuilder.build()\n\n if (filter) {\n groups = groups\n .map((group) => {\n const items = group.items.filter((item) =>\n item.label.toLowerCase().includes(filter.toLowerCase())\n )\n\n return {\n ...group,\n items,\n }\n })\n .filter((group) => group.items.length > 0)\n }\n\n const items = groups.flatMap((groups) => groups.items)\n items.forEach((item, index) => {\n Object.assign(item, { index })\n })\n\n groups.reduce((acc, group) => {\n const end = acc + group.items.length\n Object.assign(group, {\n range: [acc, end],\n })\n return end\n }, 0)\n\n return {\n groups: groups as MenuItemGroup<SlashMenuItem>[],\n size: items.length,\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { Icon } from '@milkdown/kit/component'\nimport {\n computed,\n defineComponent,\n onUnmounted,\n ref,\n watch,\n watchEffect,\n type Ref,\n h,\n} from 'vue'\n\nimport type { BlockEditFeatureConfig } from '..'\n\nimport { keepAlive } from '../../../utils/keep-alive'\nimport { getGroups } from './config'\n\nkeepAlive(h)\n\ntype MenuProps = {\n ctx: Ctx\n show: Ref<boolean>\n filter: Ref<string>\n hide: () => void\n config?: BlockEditFeatureConfig\n}\n\nexport const Menu = defineComponent<MenuProps>({\n props: {\n ctx: {\n type: Object,\n required: true,\n },\n show: {\n type: Object,\n required: true,\n },\n filter: {\n type: Object,\n required: true,\n },\n hide: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n setup({ ctx, show, filter, hide, config }) {\n const host = ref<HTMLElement>()\n const groupInfo = computed(() => getGroups(filter.value, config, ctx))\n const hoverIndex = ref(0)\n const prevMousePosition = ref({ x: -999, y: -999 })\n\n const onPointerMove = (e: MouseEvent) => {\n const { x, y } = e\n prevMousePosition.value = { x, y }\n }\n\n watch([groupInfo, show], () => {\n const { size } = groupInfo.value\n if (size === 0 && show.value) hide()\n else if (hoverIndex.value >= size) hoverIndex.value = 0\n })\n\n const onHover = (\n index: number | ((prev: number) => number),\n after?: (index: number) => void\n ) => {\n const prevHoverIndex = hoverIndex.value\n const next = typeof index === 'function' ? index(prevHoverIndex) : index\n after?.(next)\n hoverIndex.value = next\n }\n\n const scrollToIndex = (index: number) => {\n const target = host.value?.querySelector<HTMLElement>(\n `[data-index=\"${index}\"]`\n )\n const scrollRoot = host.value?.querySelector<HTMLElement>('.menu-groups')\n\n if (!target || !scrollRoot) return\n\n scrollRoot.scrollTop = target.offsetTop - scrollRoot.offsetTop\n }\n\n const runByIndex = (index: number) => {\n const item = groupInfo.value.groups\n .flatMap((group) => group.items)\n .at(index)\n if (item?.onRun && ctx) item.onRun(ctx)\n\n hide()\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n const { size, groups } = groupInfo.value\n if (e.key === 'Escape') {\n e.preventDefault()\n hide?.()\n return\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n return onHover(\n (index) => (index < size - 1 ? index + 1 : index),\n scrollToIndex\n )\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n return onHover(\n (index) => (index <= 0 ? index : index - 1),\n scrollToIndex\n )\n }\n\n if (e.key === 'ArrowLeft') {\n e.preventDefault()\n return onHover((index) => {\n const group = groups.find(\n (group) => group.range[0] <= index && group.range[1] > index\n )\n if (!group) return index\n\n const prevGroup = groups[groups.indexOf(group) - 1]\n if (!prevGroup) return index\n\n return prevGroup.range[1] - 1\n }, scrollToIndex)\n }\n\n if (e.key === 'ArrowRight') {\n e.preventDefault()\n return onHover((index) => {\n const group = groups.find(\n (group) => group.range[0] <= index && group.range[1] > index\n )\n if (!group) return index\n\n const nextGroup = groups[groups.indexOf(group) + 1]\n if (!nextGroup) return index\n\n return nextGroup.range[0]\n }, scrollToIndex)\n }\n\n if (e.key === 'Enter') {\n e.preventDefault()\n runByIndex(hoverIndex.value)\n }\n }\n\n const getOnPointerEnter = (index: number) => (e: MouseEvent) => {\n const prevPos = prevMousePosition.value\n if (!prevPos) return\n\n const { x, y } = e\n if (x === prevPos.x && y === prevPos.y) return\n\n onHover(index)\n }\n\n watchEffect(() => {\n const isShown = show.value\n if (isShown) {\n window.addEventListener('keydown', onKeydown, { capture: true })\n } else {\n window.removeEventListener('keydown', onKeydown, { capture: true })\n }\n })\n onUnmounted(() => {\n window.removeEventListener('keydown', onKeydown, { capture: true })\n })\n\n return () => {\n return (\n <div ref={host} onPointerdown={(e) => e.preventDefault()}>\n <nav class=\"tab-group\">\n <ul>\n {groupInfo.value.groups.map((group) => (\n <li\n key={group.key}\n onPointerdown={() => onHover(group.range[0], scrollToIndex)}\n class={\n hoverIndex.value >= group.range[0] &&\n hoverIndex.value < group.range[1]\n ? 'selected'\n : ''\n }\n >\n {group.label}\n </li>\n ))}\n </ul>\n </nav>\n <div class=\"menu-groups\" onPointermove={onPointerMove}>\n {groupInfo.value.groups.map((group) => (\n <div key={group.key} class=\"menu-group\">\n <h6>{group.label}</h6>\n <ul>\n {group.items.map((item) => (\n <li\n key={item.key}\n data-index={item.index}\n class={hoverIndex.value === item.index ? 'hover' : ''}\n onPointerenter={getOnPointerEnter(item.index)}\n onPointerdown={() => {\n host.value\n ?.querySelector(`[data-index=\"${item.index}\"]`)\n ?.classList.add('active')\n }}\n onPointerup={() => {\n host.value\n ?.querySelector(`[data-index=\"${item.index}\"]`)\n ?.classList.remove('active')\n runByIndex(item.index)\n }}\n >\n <Icon icon={item.icon} />\n <span>{item.label}</span>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { SlashProvider, slashFactory } from '@milkdown/kit/plugin/slash'\nimport {\n TextSelection,\n type PluginView,\n type Selection,\n} from '@milkdown/kit/prose/state'\nimport { $ctx } from '@milkdown/kit/utils'\nimport { createApp, ref, type App, type Ref } from 'vue'\n\nimport type { BlockEditFeatureConfig } from '../index'\n\nimport { isInCodeBlock, isInList } from '../../../utils'\nimport { Menu } from './component'\n\nexport const menu = slashFactory('CREPE_MENU')\n\ninterface MenuAPI {\n show: (pos: number) => void\n hide: () => void\n}\n\nexport const menuAPI = $ctx(\n {\n show: () => {},\n hide: () => {},\n } as MenuAPI,\n 'menuAPICtx'\n)\n\nexport function configureMenu(ctx: Ctx, config?: BlockEditFeatureConfig) {\n ctx.set(menu.key, {\n view: (view) => new MenuView(ctx, view, config),\n })\n}\n\nclass MenuView implements PluginView {\n readonly #content: HTMLElement\n readonly #app: App\n readonly #filter: Ref<string>\n readonly #slashProvider: SlashProvider\n #programmaticallyPos: number | null = null\n\n constructor(ctx: Ctx, view: EditorView, config?: BlockEditFeatureConfig) {\n const content = document.createElement('div')\n content.classList.add('milkdown-slash-menu')\n const show = ref(false)\n\n const filter = ref('')\n this.#filter = filter\n\n const hide = this.hide\n\n const app = createApp(Menu, {\n ctx,\n config,\n show,\n filter,\n hide,\n })\n this.#app = app\n app.mount(content)\n\n this.#content = content\n // oxlint-disable-next-line ts/no-this-alias\n const self = this\n this.#slashProvider = new SlashProvider({\n content: this.#content,\n debounce: 20,\n shouldShow(this: SlashProvider, view: EditorView) {\n if (\n isInCodeBlock(view.state.selection) ||\n isInList(view.state.selection)\n )\n return false\n\n const currentText = this.getContent(view, (node) =>\n ['paragraph', 'heading'].includes(node.type.name)\n )\n\n if (currentText == null) return false\n\n if (!isSelectionAtEndOfNode(view.state.selection)) {\n return false\n }\n\n const pos = self.#programmaticallyPos\n\n filter.value = currentText.startsWith('/')\n ? currentText.slice(1)\n : currentText\n\n if (typeof pos === 'number') {\n const maxSize = view.state.doc.nodeSize - 2\n const validPos = Math.min(pos, maxSize)\n if (\n view.state.doc.resolve(validPos).node() !==\n view.state.doc.resolve(view.state.selection.from).node()\n ) {\n self.#programmaticallyPos = null\n\n return false\n }\n\n return true\n }\n\n if (!currentText.startsWith('/')) return false\n\n return true\n },\n offset: 10,\n })\n\n this.#slashProvider.onShow = () => {\n show.value = true\n }\n this.#slashProvider.onHide = () => {\n show.value = false\n }\n this.update(view)\n\n ctx.set(menuAPI.key, {\n show: (pos) => this.show(pos),\n hide: () => this.hide(),\n })\n }\n\n update = (view: EditorView) => {\n this.#slashProvider.update(view)\n }\n\n show = (pos: number) => {\n this.#programmaticallyPos = pos\n this.#filter.value = ''\n this.#slashProvider.show()\n }\n\n hide = () => {\n this.#programmaticallyPos = null\n this.#slashProvider.hide()\n }\n\n destroy = () => {\n this.#slashProvider.destroy()\n this.#app.unmount()\n this.#content.remove()\n }\n}\n\nfunction isSelectionAtEndOfNode(selection: Selection) {\n if (!(selection instanceof TextSelection)) return false\n\n const { $head } = selection\n const parent = $head.parent\n const offset = $head.parentOffset\n\n return offset === parent.content.size\n}\n","import { Icon } from '@milkdown/kit/component'\nimport { defineComponent, ref, h, Fragment } from 'vue'\n\nimport { keepAlive } from '../../../utils/keep-alive'\n\nkeepAlive(h, Fragment)\n\ninterface BlockHandleProps {\n onAdd: () => void\n addIcon: string\n handleIcon: string\n}\n\nexport const BlockHandle = defineComponent<BlockHandleProps>({\n props: {\n onAdd: {\n type: Function,\n required: true,\n },\n addIcon: {\n type: String,\n required: true,\n },\n handleIcon: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const addButton = ref<HTMLDivElement>()\n\n return () => {\n return (\n <>\n <div\n ref={addButton}\n class=\"operation-item\"\n onPointerdown={(e) => {\n e.preventDefault()\n e.stopPropagation()\n addButton.value?.classList.add('active')\n }}\n onPointerup={(e) => {\n e.preventDefault()\n e.stopPropagation()\n addButton.value?.classList.remove('active')\n props.onAdd()\n }}\n >\n <Icon icon={props.addIcon} />\n </div>\n <div class=\"operation-item\">\n <Icon icon={props.handleIcon} />\n </div>\n </>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { PluginView } from '@milkdown/kit/prose/state'\n\nimport { editorViewCtx } from '@milkdown/kit/core'\nimport {\n BlockProvider,\n block,\n blockConfig,\n type BlockProviderOptions,\n} from '@milkdown/kit/plugin/block'\nimport { paragraphSchema } from '@milkdown/kit/preset/commonmark'\nimport { findParent } from '@milkdown/kit/prose'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { createApp, type App } from 'vue'\n\nimport type { BlockEditFeatureConfig } from '../index'\n\nimport { menuIcon, plusIcon } from '../../../icons'\nimport { menuAPI } from '../menu'\nimport { BlockHandle } from './component'\n\nclass BlockHandleView implements PluginView {\n #content: HTMLElement\n #provider: BlockProvider\n #app: App\n readonly #ctx: Ctx\n\n constructor(ctx: Ctx, config?: BlockEditFeatureConfig) {\n this.#ctx = ctx\n const content = document.createElement('div')\n content.classList.add('milkdown-block-handle')\n const app = createApp(BlockHandle, {\n onAdd: this.onAdd,\n addIcon: config?.handleAddIcon ?? plusIcon,\n handleIcon: config?.handleDragIcon ?? menuIcon,\n })\n app.mount(content)\n this.#app = app\n this.#content = content\n const blockProviderOptions = config?.blockHandle ?? {}\n this.#provider = new BlockProvider({\n ctx,\n content,\n getOffset: () => 16,\n getPlacement: ({ active, blockDom }) => {\n if (active.node.type.name === 'heading') return 'left'\n\n let totalDescendant = 0\n active.node.descendants((node) => {\n totalDescendant += node.childCount\n })\n const dom = active.el\n const domRect = dom.getBoundingClientRect()\n const handleRect = blockDom.getBoundingClientRect()\n const style = window.getComputedStyle(dom)\n const paddingTop = Number.parseInt(style.paddingTop, 10) || 0\n const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0\n const height = domRect.height - paddingTop - paddingBottom\n const handleHeight = handleRect.height\n return totalDescendant > 2 || handleHeight < height\n ? 'left-start'\n : 'left'\n },\n ...(blockProviderOptions as Partial<BlockProviderOptions>),\n })\n this.update()\n }\n\n update = () => {\n this.#provider.update()\n }\n\n destroy = () => {\n this.#provider.destroy()\n this.#content.remove()\n this.#app.unmount()\n }\n\n onAdd = () => {\n const ctx = this.#ctx\n const view = ctx.get(editorViewCtx)\n if (!view.hasFocus()) view.focus()\n\n const { state, dispatch } = view\n const active = this.#provider.active\n if (!active) return\n\n const $pos = active.$pos\n const pos = $pos.pos + active.node.nodeSize\n let tr = state.tr.insert(pos, paragraphSchema.type(ctx).create())\n tr = tr.setSelection(TextSelection.near(tr.doc.resolve(pos)))\n dispatch(tr.scrollIntoView())\n\n this.#provider.hide()\n ctx.get(menuAPI.key).show(tr.selection.from)\n }\n}\n\nexport function configureBlockHandle(\n ctx: Ctx,\n config?: BlockEditFeatureConfig\n) {\n ctx.set(blockConfig.key, {\n filterNodes: (pos) => {\n const filter = findParent((node) =>\n ['table', 'blockquote', 'math_inline'].includes(node.type.name)\n )(pos)\n if (filter) return false\n\n return true\n },\n })\n ctx.set(block.key, {\n view: () => new BlockHandleView(ctx, config),\n })\n}\n","import { block, type BlockProviderOptions } from '@milkdown/kit/plugin/block'\n\nimport type { DeepPartial } from '../../utils'\nimport type { GroupBuilder } from '../../utils/group-builder'\nimport type { DefineFeature } from '../shared'\nimport type { SlashMenuItem } from './menu/utils'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../index'\nimport { configureBlockHandle } from './handle'\nimport { configureMenu, menu, menuAPI } from './menu'\n\ninterface BlockEditConfig {\n handleAddIcon: string\n handleDragIcon: string\n buildMenu: (builder: GroupBuilder<SlashMenuItem>) => void\n\n blockHandle: Pick<\n BlockProviderOptions,\n | 'shouldShow'\n | 'getOffset'\n | 'getPosition'\n | 'getPlacement'\n | 'middleware'\n | 'floatingUIOptions'\n | 'root'\n >\n\n textGroup: {\n label: string\n text: {\n label: string\n icon: string\n } | null\n h1: {\n label: string\n icon: string\n } | null\n h2: {\n label: string\n icon: string\n } | null\n h3: {\n label: string\n icon: string\n } | null\n h4: {\n label: string\n icon: string\n } | null\n h5: {\n label: string\n icon: string\n } | null\n h6: {\n label: string\n icon: string\n } | null\n quote: {\n label: string\n icon: string\n } | null\n divider: {\n label: string\n icon: string\n } | null\n } | null\n\n listGroup: {\n label: string\n bulletList: {\n label: string\n icon: string\n } | null\n orderedList: {\n label: string\n icon: string\n } | null\n taskList: {\n label: string\n icon: string\n } | null\n } | null\n\n advancedGroup: {\n label: string\n image: {\n label: string\n icon: string\n } | null\n codeBlock: {\n label: string\n icon: string\n } | null\n table: {\n label: string\n icon: string\n } | null\n math: {\n label: string\n icon: string\n } | null\n } | null\n}\n\nexport type BlockEditFeatureConfig = DeepPartial<BlockEditConfig>\n\nexport const blockEdit: DefineFeature<BlockEditFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.BlockEdit))\n .config((ctx) => configureBlockHandle(ctx, config))\n .config((ctx) => configureMenu(ctx, config))\n .use(menuAPI)\n .use(block)\n .use(menu)\n}\n","import type { Extension } from '@codemirror/state'\n\nimport { defaultKeymap, indentWithTab } from '@codemirror/commands'\nimport { keymap } from '@codemirror/view'\nimport {\n codeBlockComponent,\n codeBlockConfig,\n type CodeBlockConfig,\n} from '@milkdown/kit/component/code-block'\nimport { basicSetup } from 'codemirror'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport {\n chevronDownIcon,\n clearIcon,\n copyIcon,\n editIcon,\n searchIcon,\n visibilityOffIcon,\n} from '../../icons'\nimport { CrepeFeature } from '../index'\n\ninterface CodeMirrorConfig extends CodeBlockConfig {\n theme: Extension\n previewToggleIcon: (previewOnlyMode: boolean) => string\n previewToggleText: (previewOnlyMode: boolean) => string\n}\n\nexport type CodeMirrorFeatureConfig = Partial<CodeMirrorConfig>\n\nexport const codeMirror: DefineFeature<CodeMirrorFeatureConfig> = (\n editor,\n config = {}\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.CodeMirror))\n .config((ctx) => {\n const { languages = [], theme } = config\n const extensions = [\n keymap.of(defaultKeymap.concat(indentWithTab)),\n basicSetup,\n ]\n if (theme) {\n extensions.push(theme)\n }\n if (config.extensions) {\n extensions.push(...config.extensions)\n }\n\n ctx.update(codeBlockConfig.key, (defaultConfig) => ({\n extensions,\n languages,\n\n expandIcon: config.expandIcon || chevronDownIcon,\n searchIcon: config.searchIcon || searchIcon,\n clearSearchIcon: config.clearSearchIcon || clearIcon,\n searchPlaceholder: config.searchPlaceholder || 'Search language',\n copyText: config.copyText || 'Copy',\n copyIcon: config.copyIcon || copyIcon,\n onCopy: config.onCopy || (() => {}),\n noResultText: config.noResultText || 'No result',\n renderLanguage: config.renderLanguage || defaultConfig.renderLanguage,\n renderPreview: config.renderPreview || defaultConfig.renderPreview,\n previewToggleButton: (previewOnlyMode) => {\n const icon =\n config.previewToggleIcon?.(previewOnlyMode) ||\n (previewOnlyMode ? editIcon : visibilityOffIcon)\n const text =\n config.previewToggleText?.(previewOnlyMode) ||\n (previewOnlyMode ? 'Edit' : 'Hide')\n return [icon, text].map((v) => v.trim()).join(' ')\n },\n previewLabel: config.previewLabel || defaultConfig.previewLabel,\n previewLoading: config.previewLoading || defaultConfig.previewLoading,\n previewOnlyByDefault:\n config.previewOnlyByDefault ?? defaultConfig.previewOnlyByDefault,\n }))\n })\n .use(codeBlockComponent)\n}\n","import {\n cursor as cursorPlugin,\n dropIndicatorConfig,\n} from '@milkdown/kit/plugin/cursor'\nimport { $prose } from '@milkdown/kit/utils'\nimport { createVirtualCursor } from 'prosemirror-virtual-cursor'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../index'\n\ninterface CursorConfig {\n color: string | false\n width: number\n virtual: boolean\n}\nexport type CursorFeatureConfig = Partial<CursorConfig>\n\nexport const cursor: DefineFeature<CursorFeatureConfig> = (editor, config) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Cursor))\n .config((ctx) => {\n ctx.update(dropIndicatorConfig.key, () => ({\n class: 'crepe-drop-cursor',\n width: config?.width ?? 4,\n color: config?.color ?? false,\n }))\n })\n .use(cursorPlugin)\n\n if (config?.virtual === false) {\n return\n }\n\n const virtualCursor = createVirtualCursor()\n editor.use($prose(() => virtualCursor))\n}\n","import {\n imageBlockComponent,\n imageBlockConfig,\n} from '@milkdown/kit/component/image-block'\nimport {\n imageInlineComponent,\n inlineImageConfig,\n} from '@milkdown/kit/component/image-inline'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { captionIcon, imageIcon, confirmIcon } from '../../icons'\nimport { CrepeFeature } from '../index'\n\ninterface ImageBlockConfig {\n onUpload: (file: File) => Promise<string>\n proxyDomURL: (url: string) => Promise<string> | string\n\n inlineImageIcon: string\n inlineConfirmButton: string\n inlineUploadButton: string\n inlineUploadPlaceholderText: string\n inlineOnUpload: (file: File) => Promise<string>\n\n blockImageIcon: string\n blockConfirmButton: string\n blockCaptionIcon: string\n blockUploadButton: string\n blockCaptionPlaceholderText: string\n blockUploadPlaceholderText: string\n blockOnUpload: (file: File) => Promise<string>\n onImageLoadError: (event: Event) => void | Promise<void>\n maxWidth: number\n maxHeight: number\n}\n\nexport type ImageBlockFeatureConfig = Partial<ImageBlockConfig>\n\nexport const imageBlock: DefineFeature<ImageBlockFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.ImageBlock))\n .config((ctx) => {\n ctx.update(inlineImageConfig.key, (value) => ({\n uploadButton: config?.inlineUploadButton ?? 'Upload',\n imageIcon: config?.inlineImageIcon ?? imageIcon,\n confirmButton: config?.inlineConfirmButton ?? confirmIcon,\n uploadPlaceholderText:\n config?.inlineUploadPlaceholderText ?? 'or paste link',\n onUpload: config?.inlineOnUpload ?? config?.onUpload ?? value.onUpload,\n proxyDomURL: config?.proxyDomURL,\n }))\n ctx.update(imageBlockConfig.key, (value) => ({\n uploadButton: config?.blockUploadButton ?? 'Upload file',\n imageIcon: config?.blockImageIcon ?? imageIcon,\n captionIcon: config?.blockCaptionIcon ?? captionIcon,\n confirmButton: config?.blockConfirmButton ?? 'Confirm',\n captionPlaceholderText:\n config?.blockCaptionPlaceholderText ?? 'Write Image Caption',\n uploadPlaceholderText:\n config?.blockUploadPlaceholderText ?? 'or paste link',\n onUpload: config?.blockOnUpload ?? config?.onUpload ?? value.onUpload,\n proxyDomURL: config?.proxyDomURL,\n onImageLoadError: config?.onImageLoadError ?? value.onImageLoadError,\n maxWidth: config?.maxWidth,\n maxHeight: config?.maxHeight,\n }))\n })\n .use(imageBlockComponent)\n .use(imageInlineComponent)\n}\n","import { codeBlockSchema } from '@milkdown/kit/preset/commonmark'\n\nexport const blockLatexSchema = codeBlockSchema.extendSchema((prev) => {\n return (ctx) => {\n const baseSchema = prev(ctx)\n return {\n ...baseSchema,\n toMarkdown: {\n match: baseSchema.toMarkdown.match,\n runner: (state, node) => {\n const language = node.attrs.language ?? ''\n if (language.toLowerCase() === 'latex') {\n state.addNode(\n 'math',\n undefined,\n node.content.firstChild?.text || ''\n )\n } else {\n return baseSchema.toMarkdown.runner(state, node)\n }\n },\n },\n }\n }\n})\n","import { $nodeSchema } from '@milkdown/kit/utils'\nimport katex from 'katex'\n\nexport const mathInlineId = 'math_inline'\n\n/// Schema for inline math node.\n/// Add support for:\n///\n/// ```markdown\n/// $a^2 + b^2 = c^2$\n/// ```\nexport const mathInlineSchema = $nodeSchema(mathInlineId, () => ({\n group: 'inline',\n inline: true,\n draggable: true,\n atom: true,\n attrs: {\n value: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `span[data-type=\"${mathInlineId}\"]`,\n getAttrs: (dom) => {\n return {\n value: (dom as HTMLElement).dataset.value ?? '',\n }\n },\n },\n ],\n toDOM: (node) => {\n const code: string = node.attrs.value\n const dom = document.createElement('span')\n dom.dataset.type = mathInlineId\n dom.dataset.value = code\n katex.render(code, dom, {\n throwOnError: false,\n })\n\n return dom\n },\n parseMarkdown: {\n match: (node) => node.type === 'inlineMath',\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value as string })\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === mathInlineId,\n runner: (state, node) => {\n state.addNode('inlineMath', undefined, node.attrs.value)\n },\n },\n}))\n","import type { Node } from '@milkdown/kit/prose/model'\n\nimport { findNodeInSelection } from '@milkdown/kit/prose'\nimport { NodeSelection, TextSelection } from '@milkdown/kit/prose/state'\nimport { $command } from '@milkdown/kit/utils'\n\nimport { mathInlineSchema } from './inline-latex'\n\nexport const toggleLatexCommand = $command('ToggleLatex', (ctx) => {\n return () => (state, dispatch) => {\n const {\n hasNode: hasLatex,\n pos: latexPos,\n target: latexNode,\n } = findNodeInSelection(state, mathInlineSchema.type(ctx))\n\n const { selection, doc, tr } = state\n if (!hasLatex) {\n const text = doc.textBetween(selection.from, selection.to)\n let _tr = tr.replaceSelectionWith(\n mathInlineSchema.type(ctx).create({\n value: text,\n })\n )\n if (dispatch) {\n dispatch(\n _tr.setSelection(NodeSelection.create(_tr.doc, selection.from))\n )\n }\n return true\n }\n\n const { from, to } = selection\n if (!latexNode || latexPos < 0) return false\n\n let _tr = tr.delete(latexPos, latexPos + 1)\n const content = (latexNode as Node).attrs.value\n _tr = _tr.insertText(content, latexPos)\n if (dispatch) {\n dispatch(\n _tr.setSelection(\n TextSelection.create(_tr.doc, from, to + content.length - 1)\n )\n )\n }\n return true\n }\n})\n","import { tooltipFactory } from '@milkdown/kit/plugin/tooltip'\n\nexport const inlineLatexTooltip = tooltipFactory('INLINE_LATEX')\n","import type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { Icon } from '@milkdown/kit/component'\nimport { defineComponent, type ShallowRef, type VNodeRef, h } from 'vue'\n\nimport type { LatexConfig } from '..'\n\nimport { keepAlive } from '../../../utils/keep-alive'\n\nkeepAlive(h)\n\ntype LatexTooltipProps = {\n config: Partial<LatexConfig>\n innerView: ShallowRef<EditorView | null>\n updateValue: ShallowRef<() => void>\n}\n\nexport const LatexTooltip = defineComponent<LatexTooltipProps>({\n props: {\n config: {\n type: Object,\n required: true,\n },\n innerView: {\n type: Object,\n required: true,\n },\n updateValue: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const innerViewRef: VNodeRef = (el) => {\n if (!el || !(el instanceof HTMLElement)) return\n while (el.firstChild) {\n el.removeChild(el.firstChild)\n }\n if (props.innerView.value) {\n el.appendChild(props.innerView.value.dom)\n }\n }\n const onUpdate = (e: Event) => {\n e.preventDefault()\n props.updateValue.value()\n }\n\n return () => {\n return (\n <div class=\"container\">\n {props.innerView && <div ref={innerViewRef} />}\n <button type=\"button\" onPointerdown={onUpdate}>\n <Icon icon={props.config.inlineEditConfirm} />\n </button>\n </div>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { PluginView } from '@milkdown/kit/prose/state'\n\nimport { TooltipProvider } from '@milkdown/kit/plugin/tooltip'\nimport { redo, undo } from '@milkdown/kit/prose/history'\nimport { keymap } from '@milkdown/kit/prose/keymap'\nimport { Schema } from '@milkdown/kit/prose/model'\nimport { EditorState, NodeSelection } from '@milkdown/kit/prose/state'\nimport { EditorView } from '@milkdown/kit/prose/view'\nimport { createApp, shallowRef, type App, type ShallowRef } from 'vue'\n\nimport type { LatexConfig } from '..'\n\nimport { mathInlineId } from '../inline-latex'\nimport { LatexTooltip } from './component'\n\nexport class LatexInlineTooltip implements PluginView {\n #content: HTMLElement\n #provider: TooltipProvider\n #dom: HTMLElement\n #innerView: ShallowRef<EditorView | null> = shallowRef(null)\n #updateValue: ShallowRef<() => void> = shallowRef(() => {})\n #app: App\n\n constructor(\n readonly ctx: Ctx,\n view: EditorView,\n config: Partial<LatexConfig>\n ) {\n const content = document.createElement('div')\n content.className = 'milkdown-latex-inline-edit'\n this.#content = content\n this.#app = createApp(LatexTooltip, {\n config,\n innerView: this.#innerView,\n updateValue: this.#updateValue,\n })\n this.#app.mount(content)\n this.#provider = new TooltipProvider({\n debounce: 0,\n content: this.#content,\n shouldShow: this.#shouldShow,\n offset: 10,\n floatingUIOptions: {\n placement: 'bottom',\n },\n })\n this.#provider.update(view)\n this.#dom = document.createElement('div')\n }\n\n #onHide = () => {\n if (this.#innerView.value) {\n this.#innerView.value.destroy()\n this.#innerView.value = null\n }\n }\n\n #shouldShow = (view: EditorView) => {\n const shouldShow = () => {\n if (!view.editable) return false\n\n const { selection, schema } = view.state\n if (selection.empty) return false\n if (!(selection instanceof NodeSelection)) return false\n const node = selection.node\n if (node.type.name !== mathInlineId) return false\n\n const textFrom = selection.from\n\n const paragraph = schema.nodes.paragraph!.create(\n null,\n schema.text(node.attrs.value)\n )\n\n const innerView = new EditorView(this.#dom, {\n state: EditorState.create({\n doc: paragraph,\n schema: new Schema({\n nodes: {\n doc: {\n content: 'block+',\n },\n paragraph: {\n content: 'inline*',\n group: 'block',\n parseDOM: [{ tag: 'p' }],\n toDOM() {\n return ['p', 0]\n },\n },\n text: {\n group: 'inline',\n },\n },\n }),\n plugins: [\n keymap({\n 'Mod-z': undo,\n 'Mod-Z': redo,\n 'Mod-y': redo,\n Enter: () => {\n this.#updateValue.value()\n return true\n },\n }),\n ],\n }),\n })\n\n this.#innerView.value = innerView\n this.#updateValue.value = () => {\n const { tr } = view.state\n tr.setNodeAttribute(textFrom, 'value', innerView.state.doc.textContent)\n view.dispatch(tr)\n requestAnimationFrame(() => {\n view.focus()\n })\n }\n return true\n }\n\n const show = shouldShow()\n if (!show) this.#onHide()\n return show\n }\n\n update = (view: EditorView, prevState?: EditorState) => {\n this.#provider.update(view, prevState)\n }\n\n destroy = () => {\n this.#app.unmount()\n this.#provider.destroy()\n this.#content.remove()\n }\n}\n","import { codeBlockSchema } from '@milkdown/kit/preset/commonmark'\nimport { nodeRule } from '@milkdown/kit/prose'\nimport { textblockTypeInputRule } from '@milkdown/kit/prose/inputrules'\nimport { $inputRule } from '@milkdown/kit/utils'\n\nimport { mathInlineSchema } from './inline-latex'\n\n/// Input rule for inline math.\n/// When you type $E=MC^2$, it will create an inline math node.\nexport const mathInlineInputRule = $inputRule((ctx) =>\n nodeRule(/(?:\\$)([^$]+)(?:\\$)$/, mathInlineSchema.type(ctx), {\n getAttr: (match) => {\n return {\n value: match[1] ?? '',\n }\n },\n })\n)\n\n/// A input rule for creating block math.\n/// For example, `$$ ` will create a code block with language javascript.\nexport const mathBlockInputRule = $inputRule((ctx) =>\n textblockTypeInputRule(/^\\$\\$[\\s\\n]$/, codeBlockSchema.type(ctx), () => ({\n language: 'LaTeX',\n }))\n)\n","import type { Node } from '@milkdown/kit/transformer'\n\nimport { $remark } from '@milkdown/kit/utils'\nimport remarkMath from 'remark-math'\nimport { visit } from 'unist-util-visit'\n\nexport const remarkMathPlugin = $remark<'remarkMath', undefined>(\n 'remarkMath',\n () => remarkMath\n)\n\nfunction visitMathBlock(ast: Node) {\n return visit(\n ast,\n 'math',\n (\n node: Node & { value: string },\n index: number,\n parent: Node & { children: Node[] }\n ) => {\n const { value } = node as Node & { value: string }\n const newNode = {\n type: 'code',\n lang: 'LaTeX',\n value,\n }\n parent.children.splice(index, 1, newNode)\n }\n )\n}\n\n/// Turn math block into code block with language LaTeX.\nexport const remarkMathBlockPlugin = $remark(\n 'remarkMathBlock',\n () => () => visitMathBlock\n)\n","import type { KatexOptions } from 'katex'\n\nimport { codeBlockConfig } from '@milkdown/kit/component/code-block'\nimport katex from 'katex'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig, useCrepeFeatures } from '../../core/slice'\nimport { CrepeFeature } from '../../feature'\nimport { confirmIcon } from '../../icons'\nimport { blockLatexSchema } from './block-latex'\nimport { toggleLatexCommand } from './command'\nimport { mathInlineSchema } from './inline-latex'\nimport { inlineLatexTooltip } from './inline-tooltip/tooltip'\nimport { LatexInlineTooltip } from './inline-tooltip/view'\nimport { mathBlockInputRule, mathInlineInputRule } from './input-rule'\nimport { remarkMathBlockPlugin, remarkMathPlugin } from './remark'\n\nexport interface LatexConfig {\n katexOptions: KatexOptions\n inlineEditConfirm: string\n}\n\nexport type LatexFeatureConfig = Partial<LatexConfig>\n\nexport const latex: DefineFeature<LatexFeatureConfig> = (editor, config) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Latex))\n .config((ctx) => {\n const flags = useCrepeFeatures(ctx).get()\n const isCodeMirrorEnabled = flags.includes(CrepeFeature.CodeMirror)\n if (!isCodeMirrorEnabled) {\n throw new Error('You need to enable CodeMirror to use LaTeX feature')\n }\n\n ctx.update(codeBlockConfig.key, (prev) => ({\n ...prev,\n renderPreview: (language, content, applyPreview) => {\n if (language.toLowerCase() === 'latex' && content.length > 0) {\n return renderLatex(content, config?.katexOptions)\n }\n const renderPreview = prev.renderPreview\n return renderPreview(language, content, applyPreview)\n },\n }))\n\n ctx.set(inlineLatexTooltip.key, {\n view: (view) => {\n return new LatexInlineTooltip(ctx, view, {\n inlineEditConfirm: config?.inlineEditConfirm ?? confirmIcon,\n ...config,\n })\n },\n })\n })\n .use(remarkMathPlugin)\n .use(remarkMathBlockPlugin)\n .use(mathInlineSchema)\n .use(inlineLatexTooltip)\n .use(mathInlineInputRule)\n .use(mathBlockInputRule)\n .use(blockLatexSchema)\n .use(toggleLatexCommand)\n}\n\nfunction renderLatex(content: string, options?: KatexOptions) {\n const html = katex.renderToString(content, {\n ...options,\n throwOnError: false,\n displayMode: true,\n })\n return html\n}\n","import {\n configureLinkTooltip,\n linkTooltipConfig,\n linkTooltipPlugin,\n} from '@milkdown/kit/component/link-tooltip'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { copyIcon, editIcon, removeIcon, confirmIcon } from '../../icons'\nimport { CrepeFeature } from '../index'\n\ninterface LinkTooltipConfig {\n linkIcon: string\n editButton: string\n removeButton: string\n confirmButton: string\n inputPlaceholder: string\n onCopyLink: (link: string) => void\n}\n\nexport type LinkTooltipFeatureConfig = Partial<LinkTooltipConfig>\n\nexport const linkTooltip: DefineFeature<LinkTooltipFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.LinkTooltip))\n .config(configureLinkTooltip)\n .config((ctx) => {\n ctx.update(linkTooltipConfig.key, (prev) => ({\n ...prev,\n linkIcon: config?.linkIcon ?? copyIcon,\n editButton: config?.editButton ?? editIcon,\n removeButton: config?.removeButton ?? removeIcon,\n confirmButton: config?.confirmButton ?? confirmIcon,\n inputPlaceholder: config?.inputPlaceholder ?? 'Paste link...',\n onCopyLink: config?.onCopyLink ?? (() => {}),\n }))\n })\n .use(linkTooltipPlugin)\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport {\n listItemBlockComponent,\n listItemBlockConfig,\n} from '@milkdown/kit/component/list-item-block'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport {\n bulletIcon,\n checkBoxCheckedIcon,\n checkBoxUncheckedIcon,\n} from '../../icons'\nimport { CrepeFeature } from '../index'\n\nexport interface ListItemConfig {\n bulletIcon: string\n checkBoxCheckedIcon: string\n checkBoxUncheckedIcon: string\n}\n\nexport type ListItemFeatureConfig = Partial<ListItemConfig>\n\nfunction configureListItem(ctx: Ctx, config?: ListItemFeatureConfig) {\n ctx.set(listItemBlockConfig.key, {\n renderLabel: ({ label, listType, checked }) => {\n if (checked == null) {\n if (listType === 'bullet') return config?.bulletIcon ?? bulletIcon\n\n return label\n }\n\n if (checked) return config?.checkBoxCheckedIcon ?? checkBoxCheckedIcon\n\n return config?.checkBoxUncheckedIcon ?? checkBoxUncheckedIcon\n },\n })\n}\n\nexport const listItem: DefineFeature<ListItemFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.ListItem))\n .config((ctx) => configureListItem(ctx, config))\n .use(listItemBlockComponent)\n}\n","import type { Node } from '@milkdown/kit/prose/model'\nimport type { EditorState } from '@milkdown/kit/prose/state'\n\nimport { findParent } from '@milkdown/kit/prose'\nimport { Plugin, PluginKey } from '@milkdown/kit/prose/state'\nimport { Decoration, DecorationSet } from '@milkdown/kit/prose/view'\nimport { $ctx, $prose } from '@milkdown/kit/utils'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig, useCrepe } from '../../core/slice'\nimport { isInCodeBlock, isInList } from '../../utils'\nimport { CrepeFeature } from '../index'\n\nfunction isDocEmpty(doc: Node) {\n return doc.childCount <= 1 && !doc.firstChild?.content.size\n}\n\nfunction createPlaceholderDecoration(\n state: EditorState,\n placeholderText: string\n): Decoration | null {\n const { selection } = state\n if (!selection.empty) return null\n\n const $pos = selection.$anchor\n const node = $pos.parent\n if (node.content.size > 0) return null\n\n const inTable = findParent((node) => node.type.name === 'table')($pos)\n if (inTable) return null\n\n const before = $pos.before()\n\n return Decoration.node(before, before + node.nodeSize, {\n class: 'crepe-placeholder',\n 'data-placeholder': placeholderText,\n })\n}\n\ninterface PlaceholderConfig {\n text: string\n mode: 'doc' | 'block'\n}\n\nexport type PlaceholderFeatureConfig = Partial<PlaceholderConfig>\n\nexport const placeholderConfig = $ctx(\n {\n text: 'Please enter...',\n mode: 'block',\n } as PlaceholderConfig,\n 'placeholderConfigCtx'\n)\n\nexport const placeholderPlugin = $prose((ctx) => {\n return new Plugin({\n key: new PluginKey('CREPE_PLACEHOLDER'),\n props: {\n decorations: (state) => {\n const crepe = useCrepe(ctx)\n if (crepe.readonly) return null\n\n const config = ctx.get(placeholderConfig.key)\n if (config.mode === 'doc' && !isDocEmpty(state.doc)) return null\n\n if (isInCodeBlock(state.selection) || isInList(state.selection))\n return null\n\n const placeholderText = config.text ?? 'Please enter...'\n const deco = createPlaceholderDecoration(state, placeholderText)\n if (!deco) return null\n\n return DecorationSet.create(state.doc, [deco])\n },\n },\n })\n})\n\nexport const placeholder: DefineFeature<PlaceholderFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Placeholder))\n .config((ctx) => {\n if (config) {\n ctx.update(placeholderConfig.key, (prev) => {\n return {\n ...prev,\n ...config,\n }\n })\n }\n })\n .use(placeholderPlugin)\n .use(placeholderConfig)\n}\n","import {\n tableBlock,\n tableBlockConfig,\n} from '@milkdown/kit/component/table-block'\n\nimport type { DefineFeature } from '../shared'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport {\n alignCenterIcon,\n alignLeftIcon,\n alignRightIcon,\n dragHandleIcon,\n plusIcon,\n removeIcon,\n} from '../../icons'\nimport { CrepeFeature } from '../index'\n\ninterface TableConfig {\n addRowIcon: string\n addColIcon: string\n deleteRowIcon: string\n deleteColIcon: string\n alignLeftIcon: string\n alignCenterIcon: string\n alignRightIcon: string\n colDragHandleIcon: string\n rowDragHandleIcon: string\n}\n\nexport type TableFeatureConfig = Partial<TableConfig>\n\nexport const table: DefineFeature<TableFeatureConfig> = (editor, config) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Table))\n .config((ctx) => {\n ctx.update(tableBlockConfig.key, (defaultConfig) => ({\n ...defaultConfig,\n renderButton: (renderType) => {\n switch (renderType) {\n case 'add_row':\n return config?.addRowIcon ?? plusIcon\n case 'add_col':\n return config?.addColIcon ?? plusIcon\n case 'delete_row':\n return config?.deleteRowIcon ?? removeIcon\n case 'delete_col':\n return config?.deleteColIcon ?? removeIcon\n case 'align_col_left':\n return config?.alignLeftIcon ?? alignLeftIcon\n case 'align_col_center':\n return config?.alignCenterIcon ?? alignCenterIcon\n case 'align_col_right':\n return config?.alignRightIcon ?? alignRightIcon\n case 'col_drag_handle':\n return config?.colDragHandleIcon ?? dragHandleIcon\n case 'row_drag_handle':\n return config?.rowDragHandleIcon ?? dragHandleIcon\n }\n },\n }))\n })\n .use(tableBlock)\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { toggleLinkCommand } from '@milkdown/kit/component/link-tooltip'\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core'\nimport {\n emphasisSchema,\n inlineCodeSchema,\n isMarkSelectedCommand,\n isNodeSelectedCommand,\n linkSchema,\n strongSchema,\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n} from '@milkdown/kit/preset/commonmark'\nimport {\n strikethroughSchema,\n toggleStrikethroughCommand,\n} from '@milkdown/kit/preset/gfm'\n\nimport type { ToolbarFeatureConfig } from '.'\n\nimport { CrepeFeature } from '..'\nimport { useCrepeFeatures } from '../../core/slice'\nimport {\n aiIcon,\n boldIcon,\n codeIcon,\n functionsIcon,\n italicIcon,\n linkIcon,\n strikethroughIcon,\n} from '../../icons'\nimport { GroupBuilder } from '../../utils/group-builder'\nimport { aiProviderConfig } from '../ai/commands'\nimport { aiInstructionTooltipAPI } from '../ai/instruction-tooltip'\nimport { toggleLatexCommand } from '../latex/command'\nimport { mathInlineSchema } from '../latex/inline-latex'\n\nexport type ToolbarItem = {\n active: (ctx: Ctx) => boolean\n icon: string\n}\n\nexport function getGroups(config?: ToolbarFeatureConfig, ctx?: Ctx) {\n const groupBuilder = new GroupBuilder<ToolbarItem>()\n\n groupBuilder\n .addGroup('formatting', 'Formatting')\n .addItem('bold', {\n icon: config?.boldIcon ?? boldIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(isMarkSelectedCommand.key, strongSchema.type(ctx))\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleStrongCommand.key)\n },\n })\n .addItem('italic', {\n icon: config?.italicIcon ?? italicIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n emphasisSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleEmphasisCommand.key)\n },\n })\n .addItem('strikethrough', {\n icon: config?.strikethroughIcon ?? strikethroughIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n strikethroughSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleStrikethroughCommand.key)\n },\n })\n\n const functionGroup = groupBuilder.addGroup('function', 'Function')\n functionGroup.addItem('code', {\n icon: config?.codeIcon ?? codeIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n inlineCodeSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleInlineCodeCommand.key)\n },\n })\n\n const flags = ctx && useCrepeFeatures(ctx).get()\n const isLatexEnabled = flags?.includes(CrepeFeature.Latex)\n if (isLatexEnabled) {\n functionGroup.addItem('latex', {\n icon: config?.latexIcon ?? functionsIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isNodeSelectedCommand.key,\n mathInlineSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleLatexCommand.key)\n },\n })\n }\n functionGroup.addItem('link', {\n icon: config?.linkIcon ?? linkIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(isMarkSelectedCommand.key, linkSchema.type(ctx))\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleLinkCommand.key)\n },\n })\n\n // Skip the AI button entirely when the feature is disabled or when no\n // provider is configured — without a provider the palette would open\n // but `runAICmd` would silently reject every action. Toolbar-level\n // `aiIcon` wins over `AIFeatureConfig.aiIcon` so consumers can override\n // just the toolbar entry without touching the tooltip prefix.\n // The aiProviderConfig slice is only injected when the AI feature is\n // active, so guard the lookup behind the flag check.\n if (ctx && flags?.includes(CrepeFeature.AI)) {\n const aiCfg = ctx.get(aiProviderConfig.key)\n if (aiCfg.provider) {\n functionGroup.addItem('ai', {\n icon: config?.aiIcon ?? aiCfg.aiIcon ?? aiIcon,\n active: () => false,\n onRun: (ctx) => {\n const api = ctx.get(aiInstructionTooltipAPI.key)\n const view = ctx.get(editorViewCtx)\n const { from, to } = view.state.selection\n api.show(from, to)\n },\n })\n }\n }\n\n config?.buildToolbar?.(groupBuilder)\n\n return groupBuilder.build()\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { Selection } from '@milkdown/kit/prose/state'\n\nimport { Icon } from '@milkdown/kit/component'\nimport { editorCtx, EditorStatus } from '@milkdown/kit/core'\nimport clsx from 'clsx'\nimport {\n defineComponent,\n type Ref,\n type ShallowRef,\n h,\n Fragment,\n computed,\n} from 'vue'\n\nimport type { ToolbarFeatureConfig } from '.'\n\nimport { keepAlive } from '../../utils/keep-alive'\nimport { getGroups, type ToolbarItem } from './config'\n\nkeepAlive(h, Fragment)\n\ntype ToolbarProps = {\n ctx: Ctx\n hide: () => void\n show: Ref<boolean>\n selection: ShallowRef<Selection>\n config?: ToolbarFeatureConfig\n}\n\nexport const Toolbar = defineComponent<ToolbarProps>({\n props: {\n ctx: {\n type: Object,\n required: true,\n },\n hide: {\n type: Function,\n required: true,\n },\n show: {\n type: Object,\n required: true,\n },\n selection: {\n type: Object,\n required: true,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n setup(props) {\n const { ctx, config } = props\n\n const onClick = (fn?: (ctx: Ctx) => void) => (e: MouseEvent) => {\n e.preventDefault()\n if (ctx) {\n fn?.(ctx)\n }\n }\n\n function checkActive(checker: ToolbarItem['active']) {\n // make sure the function subscribed to vue reactive\n keepAlive(props.selection.value)\n // Check if the edtior is ready\n const status = ctx.get(editorCtx).status\n if (status !== EditorStatus.Created) return false\n\n return checker(ctx)\n }\n\n const groupInfo = computed(() => getGroups(config, ctx))\n\n return () => {\n return (\n <>\n {groupInfo.value\n .map((group) => {\n return group.items.map((item) => {\n return (\n <button\n type=\"button\"\n class={clsx(\n 'toolbar-item',\n ctx && checkActive(item.active) && 'active'\n )}\n onPointerdown={onClick(item.onRun)}\n >\n <Icon icon={item.icon} />\n </button>\n )\n })\n })\n .reduce((acc, curr, index) => {\n if (index === 0) {\n acc.push(...curr)\n } else {\n acc.push(<div class=\"divider\"></div>, ...curr)\n }\n return acc\n }, [])}\n </>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type {\n EditorState,\n PluginView,\n Selection,\n} from '@milkdown/kit/prose/state'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { TooltipProvider, tooltipFactory } from '@milkdown/kit/plugin/tooltip'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { createApp, ref, shallowRef, type App, type ShallowRef } from 'vue'\n\nimport type { GroupBuilder } from '../../utils'\nimport type { DefineFeature } from '../shared'\nimport type { ToolbarItem } from './config'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../../feature'\nimport { Toolbar } from './component'\n\ninterface ToolbarConfig {\n boldIcon: string\n codeIcon: string\n italicIcon: string\n linkIcon: string\n strikethroughIcon: string\n latexIcon: string\n aiIcon: string\n buildToolbar: (builder: GroupBuilder<ToolbarItem>) => void\n}\n\nexport type ToolbarFeatureConfig = Partial<ToolbarConfig>\n\nconst toolbarTooltip = tooltipFactory('CREPE_TOOLBAR')\n\nclass ToolbarView implements PluginView {\n #tooltipProvider: TooltipProvider\n #content: HTMLElement\n #app: App\n #selection: ShallowRef<Selection>\n #show = ref(false)\n\n constructor(ctx: Ctx, view: EditorView, config?: ToolbarFeatureConfig) {\n const content = document.createElement('div')\n content.className = 'milkdown-toolbar'\n this.#selection = shallowRef(view.state.selection)\n const app = createApp(Toolbar, {\n ctx,\n hide: this.hide,\n config,\n selection: this.#selection,\n show: this.#show,\n })\n app.mount(content)\n this.#content = content\n this.#app = app\n\n this.#tooltipProvider = new TooltipProvider({\n content: this.#content,\n debounce: 20,\n offset: 10,\n shouldShow(view: EditorView) {\n const { doc, selection } = view.state\n const { empty, from, to } = selection\n\n const isEmptyTextBlock =\n !doc.textBetween(from, to).length &&\n selection instanceof TextSelection\n\n const isNotTextBlock = !(selection instanceof TextSelection)\n\n const activeElement = (view.dom.getRootNode() as ShadowRoot | Document)\n .activeElement\n const isTooltipChildren = content.contains(activeElement)\n\n const notHasFocus = !view.hasFocus() && !isTooltipChildren\n\n const isReadonly = !view.editable\n\n if (\n notHasFocus ||\n isNotTextBlock ||\n empty ||\n isEmptyTextBlock ||\n isReadonly\n )\n return false\n\n return true\n },\n })\n this.#tooltipProvider.onShow = () => {\n this.#show.value = true\n }\n this.#tooltipProvider.onHide = () => {\n this.#show.value = false\n }\n this.update(view)\n }\n\n update = (view: EditorView, prevState?: EditorState) => {\n this.#tooltipProvider.update(view, prevState)\n this.#selection.value = view.state.selection\n }\n\n destroy = () => {\n this.#tooltipProvider.destroy()\n this.#app.unmount()\n this.#content.remove()\n }\n\n hide = () => {\n this.#tooltipProvider.hide()\n }\n}\n\nexport const toolbar: DefineFeature<ToolbarFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Toolbar))\n .config((ctx) => {\n ctx.set(toolbarTooltip.key, {\n view: (view) => new ToolbarView(ctx, view, config),\n })\n })\n .use(toolbarTooltip)\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { MarkType } from '@milkdown/kit/prose/model'\n\nimport { imageBlockSchema } from '@milkdown/kit/component/image-block'\nimport { toggleLinkCommand } from '@milkdown/kit/component/link-tooltip'\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core'\nimport {\n addBlockTypeCommand,\n blockquoteSchema,\n bulletListSchema,\n codeBlockSchema,\n headingSchema,\n hrSchema,\n listItemSchema,\n orderedListSchema,\n paragraphSchema,\n selectTextNearPosCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n emphasisSchema,\n inlineCodeSchema,\n strongSchema,\n linkSchema,\n isMarkSelectedCommand,\n} from '@milkdown/kit/preset/commonmark'\nimport {\n strikethroughSchema,\n toggleStrikethroughCommand,\n createTable,\n} from '@milkdown/kit/preset/gfm'\nimport { TextSelection } from '@milkdown/kit/prose/state'\n\nimport type { TopBarFeatureConfig } from '.'\n\nimport { useCrepeFeatures } from '../../core/slice'\nimport { CrepeFeature } from '../../feature'\nimport {\n boldIcon,\n bulletListIcon,\n chevronDownIcon,\n codeBlockIcon,\n codeIcon,\n dividerIcon,\n functionsIcon,\n imageIcon,\n italicIcon,\n linkIcon,\n orderedListIcon,\n quoteIcon,\n strikethroughIcon,\n tableIcon,\n todoListIcon,\n} from '../../icons'\nimport { GroupBuilder } from '../../utils/group-builder'\n\nexport interface TopBarSelectorOption {\n label: string\n onSelect: (ctx: Ctx) => void\n}\n\nexport interface TopBarSelector {\n options: TopBarSelectorOption[]\n activeLabel: (ctx: Ctx) => string\n chevronIcon?: string\n}\n\nexport type TopBarItem = {\n active: (ctx: Ctx) => boolean\n icon: string\n selector?: TopBarSelector\n}\n\nexport type HeadingOption = {\n label: string\n level: number | null\n}\n\nexport const defaultHeadingOptions: HeadingOption[] = [\n { label: 'Paragraph', level: null },\n { label: 'Heading 1', level: 1 },\n { label: 'Heading 2', level: 2 },\n { label: 'Heading 3', level: 3 },\n { label: 'Heading 4', level: 4 },\n { label: 'Heading 5', level: 5 },\n { label: 'Heading 6', level: 6 },\n]\n\nexport function getCurrentHeading(\n ctx: Ctx,\n options?: HeadingOption[]\n): HeadingOption {\n const headingOptions = options ?? defaultHeadingOptions\n const view = ctx.get(editorViewCtx)\n const { $from } = view.state.selection\n const node = $from.parent\n\n const paragraphOption =\n headingOptions.find((o) => o.level === null) ?? headingOptions[0]!\n\n if (node.type === headingSchema.type(ctx)) {\n const level = node.attrs.level as number\n return headingOptions.find((o) => o.level === level) ?? paragraphOption\n }\n\n return paragraphOption\n}\n\nexport function setHeading(ctx: Ctx, level: number | null) {\n const commands = ctx.get(commandsCtx)\n if (level === null || level === undefined) {\n const paragraph = paragraphSchema.type(ctx)\n commands.call(setBlockTypeCommand.key, { nodeType: paragraph })\n } else {\n const heading = headingSchema.type(ctx)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: { level },\n })\n }\n}\n\nfunction isMarkActive(ctx: Ctx, markType: MarkType): boolean {\n const commands = ctx.get(commandsCtx)\n const selected = commands.call(isMarkSelectedCommand.key, markType)\n if (selected) return true\n\n const view = ctx.get(editorViewCtx)\n const { state } = view\n\n // Check stored marks (pending marks for next input)\n if (state.storedMarks) {\n return state.storedMarks.some((m) => m.type === markType)\n }\n\n // Check marks at cursor position (collapsed selection inside marked text)\n if (state.selection instanceof TextSelection) {\n const { $cursor } = state.selection\n if ($cursor) {\n return $cursor.marks().some((m) => m.type === markType)\n }\n }\n\n return false\n}\n\nexport function buildHeadingSelector(\n headingOptions?: HeadingOption[],\n chevronIcon?: string\n): TopBarItem {\n const options = headingOptions ?? defaultHeadingOptions\n return {\n icon: '',\n active: () => false,\n selector: {\n chevronIcon: chevronIcon ?? chevronDownIcon,\n activeLabel: (ctx) => getCurrentHeading(ctx, options).label,\n options: options.map((opt) => ({\n label: opt.label,\n onSelect: (ctx) => setHeading(ctx, opt.level),\n })),\n },\n }\n}\n\nexport function getGroups(config?: TopBarFeatureConfig, ctx?: Ctx) {\n const flags = ctx && useCrepeFeatures(ctx).get()\n const isLatexEnabled = flags?.includes(CrepeFeature.Latex)\n const isImageBlockEnabled = flags?.includes(CrepeFeature.ImageBlock)\n const isTableEnabled = flags?.includes(CrepeFeature.Table)\n\n const groupBuilder = new GroupBuilder<TopBarItem>()\n\n // Heading selector group\n groupBuilder.addGroup('heading', 'Heading').addItem('heading-selector', {\n ...buildHeadingSelector(config?.headingOptions, config?.chevronDownIcon),\n })\n\n // Formatting group\n groupBuilder\n .addGroup('formatting', 'Formatting')\n .addItem('bold', {\n icon: config?.boldIcon ?? boldIcon,\n active: (ctx) => isMarkActive(ctx, strongSchema.type(ctx)),\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleStrongCommand.key)\n },\n })\n .addItem('italic', {\n icon: config?.italicIcon ?? italicIcon,\n active: (ctx) => isMarkActive(ctx, emphasisSchema.type(ctx)),\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleEmphasisCommand.key)\n },\n })\n .addItem('strikethrough', {\n icon: config?.strikethroughIcon ?? strikethroughIcon,\n active: (ctx) => isMarkActive(ctx, strikethroughSchema.type(ctx)),\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleStrikethroughCommand.key)\n },\n })\n .addItem('code', {\n icon: config?.codeIcon ?? codeIcon,\n active: (ctx) => isMarkActive(ctx, inlineCodeSchema.type(ctx)),\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { state } = view\n if (state.selection.empty) {\n // toggleInlineCodeCommand doesn't support empty selection,\n // so handle stored marks manually\n const markType = inlineCodeSchema.type(ctx)\n const has = isMarkActive(ctx, markType)\n if (has) {\n view.dispatch(state.tr.removeStoredMark(markType))\n } else {\n view.dispatch(state.tr.addStoredMark(markType.create()))\n }\n } else {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleInlineCodeCommand.key)\n }\n },\n })\n\n // List group\n groupBuilder\n .addGroup('list', 'List')\n .addItem('bullet-list', {\n icon: config?.bulletListIcon ?? bulletListIcon,\n active: () => false,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const bulletList = bulletListSchema.type(ctx)\n commands.call(wrapInBlockTypeCommand.key, { nodeType: bulletList })\n },\n })\n .addItem('ordered-list', {\n icon: config?.orderedListIcon ?? orderedListIcon,\n active: () => false,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const orderedList = orderedListSchema.type(ctx)\n commands.call(wrapInBlockTypeCommand.key, { nodeType: orderedList })\n },\n })\n .addItem('task-list', {\n icon: config?.taskListIcon ?? todoListIcon,\n active: () => false,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const listItem = listItemSchema.type(ctx)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: listItem,\n attrs: { checked: false },\n })\n },\n })\n\n // Insert group\n const insertGroup = groupBuilder.addGroup('insert', 'Insert')\n insertGroup.addItem('link', {\n icon: config?.linkIcon ?? linkIcon,\n active: (ctx) => isMarkActive(ctx, linkSchema.type(ctx)),\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { state } = view\n const markType = linkSchema.type(ctx)\n\n // When cursor is inside a link with empty selection,\n // remove the stored link mark so next input won't be a link\n if (state.selection.empty && isMarkActive(ctx, markType)) {\n view.dispatch(state.tr.removeStoredMark(markType))\n return\n }\n\n const commands = ctx.get(commandsCtx)\n commands.call(toggleLinkCommand.key)\n },\n })\n\n if (isImageBlockEnabled) {\n insertGroup.addItem('image', {\n icon: config?.imageIcon ?? imageIcon,\n active: () => false,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const imageBlock = imageBlockSchema.type(ctx)\n commands.call(addBlockTypeCommand.key, { nodeType: imageBlock })\n },\n })\n }\n\n if (isTableEnabled) {\n insertGroup.addItem('table', {\n icon: config?.tableIcon ?? tableIcon,\n active: () => false,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const view = ctx.get(editorViewCtx)\n const { from } = view.state.selection\n commands.call(addBlockTypeCommand.key, {\n nodeType: createTable(ctx, 3, 3),\n })\n commands.call(selectTextNearPosCommand.key, { pos: from })\n },\n })\n }\n\n // Block group\n const blockGroup = groupBuilder.addGroup('block', 'Block')\n blockGroup.addItem('code-block', {\n icon: config?.codeBlockIcon ?? codeBlockIcon,\n active: () => false,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const codeBlock = codeBlockSchema.type(ctx)\n commands.call(setBlockTypeCommand.key, { nodeType: codeBlock })\n },\n })\n\n if (isLatexEnabled) {\n blockGroup.addItem('math', {\n icon: config?.mathIcon ?? functionsIcon,\n active: () => false,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const codeBlock = codeBlockSchema.type(ctx)\n commands.call(addBlockTypeCommand.key, {\n nodeType: codeBlock,\n attrs: { language: 'LaTeX' },\n })\n },\n })\n }\n\n // More group\n groupBuilder\n .addGroup('more', 'More')\n .addItem('quote', {\n icon: config?.quoteIcon ?? quoteIcon,\n active: () => false,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const blockquote = blockquoteSchema.type(ctx)\n commands.call(wrapInBlockTypeCommand.key, { nodeType: blockquote })\n },\n })\n .addItem('hr', {\n icon: config?.hrIcon ?? dividerIcon,\n active: () => false,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const hr = hrSchema.type(ctx)\n commands.call(addBlockTypeCommand.key, { nodeType: hr })\n },\n })\n\n config?.buildTopBar?.(groupBuilder)\n\n return groupBuilder.build()\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { Icon } from '@milkdown/kit/component'\nimport { editorCtx, EditorStatus, editorViewCtx } from '@milkdown/kit/core'\nimport clsx from 'clsx'\nimport {\n defineComponent,\n type Ref,\n type VNode,\n h,\n Fragment,\n computed,\n ref,\n onMounted,\n onUnmounted,\n} from 'vue'\n\nimport type { TopBarFeatureConfig } from '.'\n\nimport { keepAlive } from '../../utils/keep-alive'\nimport { getGroups, type TopBarItem, type TopBarSelector } from './config'\n\nkeepAlive(h, Fragment)\n\ntype TopBarProps = {\n ctx: Ctx\n version: Ref<number>\n config?: TopBarFeatureConfig\n}\n\nexport const TopBar = defineComponent<TopBarProps>({\n props: {\n ctx: {\n type: Object,\n required: true,\n },\n version: {\n type: Object,\n required: true,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n setup(props) {\n const { ctx, config } = props\n const openSelectorKey = ref<string | null>(null)\n\n const onClick = (fn: (ctx: Ctx) => void) => (e: MouseEvent) => {\n e.preventDefault()\n if (ctx) {\n fn(ctx)\n }\n }\n\n function isReady() {\n const status = ctx.get(editorCtx).status\n return status === EditorStatus.Created\n }\n\n function subscribeState() {\n keepAlive(props.version.value)\n }\n\n function checkActive(checker: TopBarItem['active']) {\n subscribeState()\n if (!isReady()) return false\n return checker(ctx)\n }\n\n function getSelectorLabel(selector: TopBarSelector): string {\n subscribeState()\n if (!isReady()) return selector.options[0]?.label ?? ''\n return selector.activeLabel(ctx)\n }\n\n function onToggleSelector(key: string, e: Event) {\n e.preventDefault()\n e.stopPropagation()\n openSelectorKey.value = openSelectorKey.value === key ? null : key\n }\n\n const clickOutsideHandler = (e: PointerEvent) => {\n const target = e.target as HTMLElement\n if (target.closest('.top-bar-heading-selector')) return\n openSelectorKey.value = null\n }\n\n onMounted(() => {\n window.addEventListener('pointerdown', clickOutsideHandler)\n })\n\n onUnmounted(() => {\n window.removeEventListener('pointerdown', clickOutsideHandler)\n })\n\n const groupInfo = computed(() => getGroups(config, ctx))\n\n function renderSelector(itemKey: string, selector: TopBarSelector): VNode {\n const isOpen = openSelectorKey.value === itemKey\n const activeLabel = getSelectorLabel(selector)\n\n return (\n <div key={itemKey} class=\"top-bar-heading-selector\">\n <button\n type=\"button\"\n class=\"top-bar-heading-button\"\n onPointerdown={(e: Event) => onToggleSelector(itemKey, e)}\n >\n <span class=\"top-bar-heading-label\">{activeLabel}</span>\n {selector.chevronIcon && (\n <span class=\"top-bar-chevron\">\n <Icon icon={selector.chevronIcon} />\n </span>\n )}\n </button>\n {isOpen && (\n <div class=\"top-bar-heading-dropdown\">\n {selector.options.map((option, index) => (\n <button\n key={`${itemKey}-${index}`}\n type=\"button\"\n class={clsx(\n 'top-bar-heading-option',\n activeLabel === option.label && 'active'\n )}\n onPointerdown={(e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n openSelectorKey.value = null\n option.onSelect(ctx)\n }}\n >\n {option.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n }\n\n function renderButton(\n item: TopBarItem & { key: string; onRun: (ctx: Ctx) => void }\n ): VNode {\n return (\n <button\n key={item.key}\n type=\"button\"\n class={clsx('top-bar-item', checkActive(item.active) && 'active')}\n onPointerdown={onClick(item.onRun)}\n >\n <Icon icon={item.icon} />\n </button>\n )\n }\n\n return () => {\n const view = isReady() ? ctx.get(editorViewCtx) : null\n const isReadonly = view ? !view.editable : false\n\n if (isReadonly) return null\n\n return (\n <div class=\"top-bar-inner\">\n {groupInfo.value\n .map((group) => {\n return group.items.map((item) => {\n if (item.selector) {\n return renderSelector(item.key, item.selector)\n }\n if (!item.onRun) return null\n return renderButton(\n item as TopBarItem & {\n key: string\n onRun: (ctx: Ctx) => void\n }\n )\n })\n })\n .reduce((acc, curr, index) => {\n if (index === 0) {\n acc.push(...curr)\n } else {\n const groupKey = groupInfo.value[index]?.key ?? index\n acc.push(\n <div key={`divider-${groupKey}`} class=\"top-bar-divider\" />,\n ...curr\n )\n }\n return acc\n }, [] as VNode[])}\n </div>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { EditorState, PluginView } from '@milkdown/kit/prose/state'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { Plugin, PluginKey } from '@milkdown/kit/prose/state'\nimport { $ctx, $prose } from '@milkdown/kit/utils'\nimport { createApp, ref, type App, type Ref } from 'vue'\n\nimport type { GroupBuilder } from '../../utils'\nimport type { DefineFeature } from '../shared'\nimport type { HeadingOption, TopBarItem } from './config'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../../feature'\nimport { TopBar } from './component'\n\ninterface TopBarConfig {\n headingOptions: HeadingOption[]\n boldIcon: string\n italicIcon: string\n strikethroughIcon: string\n codeIcon: string\n linkIcon: string\n imageIcon: string\n tableIcon: string\n codeBlockIcon: string\n mathIcon: string\n quoteIcon: string\n hrIcon: string\n bulletListIcon: string\n orderedListIcon: string\n taskListIcon: string\n chevronDownIcon: string\n buildTopBar: (builder: GroupBuilder<TopBarItem>) => void\n}\n\nexport type TopBarFeatureConfig = Partial<TopBarConfig>\n\nconst topBarPluginKey = new PluginKey('CREPE_TOP_BAR')\n\nclass TopBarView implements PluginView {\n #container: HTMLElement\n #app: App\n #version: Ref<number>\n\n constructor(ctx: Ctx, view: EditorView, config?: TopBarFeatureConfig) {\n this.#version = ref(0)\n\n const container = document.createElement('div')\n container.className = 'milkdown-top-bar'\n\n const app = createApp(TopBar, {\n ctx,\n config,\n version: this.#version,\n })\n app.mount(container)\n this.#container = container\n this.#app = app\n\n // Insert the top bar before the editor content\n const editorRoot = view.dom.parentElement\n if (editorRoot) {\n editorRoot.insertBefore(container, editorRoot.firstChild)\n }\n\n this.update(view)\n }\n\n update = (view: EditorView, _prevState?: EditorState) => {\n this.#container.style.display = view.editable ? '' : 'none'\n this.#version.value++\n }\n\n destroy = () => {\n this.#app.unmount()\n this.#container.remove()\n }\n}\n\ninterface TopBarPluginConfig {\n view: (view: EditorView) => PluginView\n}\n\nconst topBarSlice = $ctx(\n {\n view: () => ({\n update: () => {},\n destroy: () => {},\n }),\n } as TopBarPluginConfig,\n 'topBarConfig'\n)\n\nconst topBarPlugin = $prose((ctx) => {\n const config = ctx.get(topBarSlice.key)\n return new Plugin({\n key: topBarPluginKey,\n view: config.view,\n })\n})\n\nexport const topBar: DefineFeature<TopBarFeatureConfig> = (editor, config) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.TopBar))\n .config((ctx) => {\n ctx.set(topBarSlice.key, {\n view: (view) => new TopBarView(ctx, view, config),\n })\n })\n .use(topBarSlice)\n .use(topBarPlugin)\n}\n","import type { Editor } from '@milkdown/kit/core'\n\nimport { ai } from './ai'\nimport { blockEdit } from './block-edit'\nimport { codeMirror } from './code-mirror'\nimport { cursor } from './cursor'\nimport { imageBlock } from './image-block'\nimport { CrepeFeature } from './index'\nimport { latex } from './latex'\nimport { linkTooltip } from './link-tooltip'\nimport { listItem } from './list-item'\nimport { placeholder } from './placeholder'\nimport { table } from './table'\nimport { toolbar } from './toolbar'\nimport { topBar } from './top-bar'\n\nexport function loadFeature(\n feature: CrepeFeature,\n editor: Editor,\n config?: never\n) {\n switch (feature) {\n case CrepeFeature.CodeMirror: {\n return codeMirror(editor, config)\n }\n case CrepeFeature.ListItem: {\n return listItem(editor, config)\n }\n case CrepeFeature.LinkTooltip: {\n return linkTooltip(editor, config)\n }\n case CrepeFeature.ImageBlock: {\n return imageBlock(editor, config)\n }\n case CrepeFeature.Cursor: {\n return cursor(editor, config)\n }\n case CrepeFeature.BlockEdit: {\n return blockEdit(editor, config)\n }\n case CrepeFeature.Placeholder: {\n return placeholder(editor, config)\n }\n case CrepeFeature.Toolbar: {\n return toolbar(editor, config)\n }\n case CrepeFeature.Table: {\n return table(editor, config)\n }\n case CrepeFeature.Latex: {\n return latex(editor, config)\n }\n case CrepeFeature.TopBar: {\n return topBar(editor, config)\n }\n case CrepeFeature.AI: {\n return ai(editor, config)\n }\n }\n}\n","import { imageBlockConfig } from '@milkdown/kit/component/image-block'\nimport {\n type DefaultValue,\n defaultValueCtx,\n Editor,\n EditorStatus,\n editorViewCtx,\n editorViewOptionsCtx,\n rootCtx,\n} from '@milkdown/kit/core'\nimport { clipboard } from '@milkdown/kit/plugin/clipboard'\nimport { history } from '@milkdown/kit/plugin/history'\nimport { indent, indentConfig } from '@milkdown/kit/plugin/indent'\nimport {\n listener,\n listenerCtx,\n type ListenerManager,\n} from '@milkdown/kit/plugin/listener'\nimport { trailing } from '@milkdown/kit/plugin/trailing'\nimport { upload, uploadConfig } from '@milkdown/kit/plugin/upload'\nimport { commonmark } from '@milkdown/kit/preset/commonmark'\nimport { gfm } from '@milkdown/kit/preset/gfm'\nimport { getMarkdown } from '@milkdown/kit/utils'\n\nimport type { CrepeFeatureConfig } from '../feature'\nimport type { DefineFeature } from '../feature/shared'\n\nimport { CrepeFeature } from '../feature'\nimport { CrepeCtx, FeaturesCtx, useCrepeFeatures } from './slice'\n\n/// The crepe builder configuration.\nexport interface CrepeBuilderConfig {\n /// The root element for the editor.\n /// Supports both DOM nodes and CSS selectors,\n /// If not provided, the editor will be appended to the body.\n root?: Node | string | null\n\n /// The default value for the editor.\n defaultValue?: DefaultValue\n}\n\n/// The crepe builder class.\n/// This class allows users to manually add features to the editor.\nexport class CrepeBuilder {\n /// @internal\n readonly #editor: Editor\n\n /// @internal\n readonly #rootElement: Node\n\n /// @internal\n #editable = true\n\n /// The constructor of the crepe builder.\n /// You can pass configs to the builder to configure the editor.\n constructor({ root, defaultValue = '' }: CrepeBuilderConfig = {}) {\n this.#rootElement =\n (typeof root === 'string' ? document.querySelector(root) : root) ??\n document.body\n this.#editor = Editor.make()\n .config((ctx) => {\n ctx.inject(CrepeCtx, this)\n ctx.inject(FeaturesCtx, [])\n })\n .config((ctx) => {\n ctx.set(rootCtx, this.#rootElement)\n ctx.set(defaultValueCtx, defaultValue)\n ctx.set(editorViewOptionsCtx, {\n editable: () => this.#editable,\n })\n ctx.update(indentConfig.key, (value) => ({\n ...value,\n size: 4,\n }))\n ctx.update(uploadConfig.key, (prev) => ({\n ...prev,\n uploader: async (files, schema, ctx) => {\n const features = useCrepeFeatures(ctx).get()\n const hasImageBlock = features.includes(CrepeFeature.ImageBlock)\n const nodeType = hasImageBlock\n ? schema.nodes['image-block']\n : schema.nodes['image']\n\n if (!nodeType) return []\n\n const onUpload = hasImageBlock\n ? ctx.get(imageBlockConfig.key).onUpload\n : undefined\n\n const images: File[] = []\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i)\n if (file && file.type.includes('image')) images.push(file)\n }\n\n const nodes = await Promise.all(\n images.map(async (file) => {\n const src = onUpload\n ? await onUpload(file)\n : URL.createObjectURL(file)\n return nodeType.createAndFill({ src })!\n })\n )\n\n return nodes\n },\n }))\n })\n .use(commonmark)\n .use(listener)\n .use(history)\n .use(indent)\n .use(trailing)\n .use(clipboard)\n .use(upload)\n .use(gfm)\n }\n\n /// Add a feature to the editor.\n addFeature: {\n <T extends CrepeFeature>(\n feature: DefineFeature<CrepeFeatureConfig[T]>,\n config?: CrepeFeatureConfig[T]\n ): CrepeBuilder\n <C>(feature: DefineFeature<C>, config?: C): CrepeBuilder\n } = (feature: DefineFeature, config?: never) => {\n feature(this.#editor, config)\n return this\n }\n\n /// Create the editor.\n create = () => {\n return this.#editor.create()\n }\n\n /// Destroy the editor.\n destroy = () => {\n return this.#editor.destroy()\n }\n\n /// Get the milkdown editor instance.\n get editor(): Editor {\n return this.#editor\n }\n\n /// Get the readonly state of the editor.\n get readonly() {\n return !this.#editable\n }\n\n /// Set the readonly mode of the editor.\n setReadonly = (value: boolean) => {\n this.#editable = !value\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n const view = ctx.get(editorViewCtx)\n view.setProps({\n editable: () => !value,\n })\n }\n })\n return this\n }\n\n /// Get the markdown content of the editor.\n getMarkdown = () => {\n return this.#editor.action(getMarkdown())\n }\n\n /// Register event listeners.\n on = (fn: (api: ListenerManager) => void) => {\n if (this.#editor.status !== EditorStatus.Created) {\n this.#editor.config((ctx) => {\n const listener = ctx.get(listenerCtx)\n fn(listener)\n })\n return this\n }\n this.#editor.action((ctx) => {\n const listener = ctx.get(listenerCtx)\n fn(listener)\n })\n return this\n }\n}\n","import { defaultsDeep } from 'lodash-es'\n\nimport type { CrepeFeatureConfig } from '../feature'\n\nimport { defaultConfig } from '../default-config'\nimport { CrepeFeature, defaultFeatures } from '../feature'\nimport { loadFeature } from '../feature/loader'\nimport { CrepeBuilder, type CrepeBuilderConfig } from './builder'\n\n/// The crepe editor configuration.\nexport interface CrepeConfig extends CrepeBuilderConfig {\n /// Enable/disable specific features.\n features?: Partial<Record<CrepeFeature, boolean>>\n\n /// Configure individual features.\n featureConfigs?: CrepeFeatureConfig\n}\n\n/// The crepe editor class.\nexport class Crepe extends CrepeBuilder {\n /// This is an alias for the `CrepeFeature` enum.\n static Feature = CrepeFeature\n\n /// The constructor of the crepe editor.\n /// You can pass configs to the editor to configure the editor.\n /// Calling the constructor will not create the editor, you need to call `create` to create the editor.\n constructor({\n features = {},\n featureConfigs = {},\n ...crepeBuilderConfig\n }: CrepeConfig = {}) {\n super(crepeBuilderConfig)\n\n const finalConfigs = defaultsDeep(featureConfigs, defaultConfig)\n\n const enabledFeatures = Object.entries({\n ...defaultFeatures,\n ...features,\n })\n .filter(([, enabled]) => enabled)\n .map(([feature]) => feature as CrepeFeature)\n\n enabledFeatures.forEach((feature) => {\n const config = (finalConfigs as Partial<Record<CrepeFeature, never>>)[\n feature\n ]\n loadFeature(feature, this.editor, config)\n })\n }\n}\n"],"names":["CrepeFeature","__privateAdd","__privateGet","__privateSet","enterKeyIcon","defaultRetryIcon","defaultRejectIcon","defaultAcceptIcon","defaultEnterKeyIcon","_content","_provider","_app","defaultAiIcon","defaultSendIcon","defaultSendPromptIcon","defaultChevronLeftIcon","defaultChevronRightIcon","_a","group","getGroups","ctx","items","groups","view","cursorPlugin","_tr","keymap","node","listener"],"mappings":"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"}