@milkdown/crepe 7.7.0 → 7.9.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.
- package/lib/cjs/confirm-CNveM9QH.js +26 -0
- package/lib/cjs/confirm-CNveM9QH.js.map +1 -0
- package/lib/cjs/edit-BUtBJHpV.js +24 -0
- package/lib/cjs/edit-BUtBJHpV.js.map +1 -0
- package/lib/cjs/functions-BAY51plB.js +39 -0
- package/lib/cjs/functions-BAY51plB.js.map +1 -0
- package/lib/cjs/image-BXLkOVnO.js +24 -0
- package/lib/cjs/image-BXLkOVnO.js.map +1 -0
- package/lib/cjs/{index-Dac851tb.js → index-B7gqgc1H.js} +494 -204
- package/lib/cjs/index-B7gqgc1H.js.map +1 -0
- package/lib/cjs/{index-Dub20F3z.js → index-B91KhPew.js} +4 -4
- package/lib/cjs/index-B91KhPew.js.map +1 -0
- package/lib/cjs/{index-nrFkJeLW.js → index-BsrJn8Jp.js} +22 -7
- package/lib/cjs/index-BsrJn8Jp.js.map +1 -0
- package/lib/cjs/{index-BuSAwj4j.js → index-C2CAbC2F.js} +8 -1
- package/lib/cjs/index-C2CAbC2F.js.map +1 -0
- package/lib/cjs/{index-ooYXC5xk.js → index-CnyNb_OH.js} +45 -45
- package/lib/cjs/index-CnyNb_OH.js.map +1 -0
- package/lib/cjs/{index-7pgPMFV4.js → index-CoTb-QdE.js} +123 -105
- package/lib/cjs/index-CoTb-QdE.js.map +1 -0
- package/lib/cjs/index-DEs_IHHy.js +91 -0
- package/lib/cjs/index-DEs_IHHy.js.map +1 -0
- package/lib/cjs/index-DGAwtnNK.js +349 -0
- package/lib/cjs/index-DGAwtnNK.js.map +1 -0
- package/lib/cjs/index-DLIudQKW.js +126 -0
- package/lib/cjs/index-DLIudQKW.js.map +1 -0
- package/lib/cjs/index-Dw6lXgs6.js +81 -0
- package/lib/cjs/index-Dw6lXgs6.js.map +1 -0
- package/lib/cjs/{index-AlHHvSR_.js → index-xbwf60wt.js} +1 -6
- package/lib/cjs/{index-AlHHvSR_.js.map → index-xbwf60wt.js.map} +1 -1
- package/lib/cjs/{index-CvmlYYXX.js → index-xbxqAqH2.js} +21 -7
- package/lib/cjs/index-xbxqAqH2.js.map +1 -0
- package/lib/cjs/index.js +6 -6
- package/lib/cjs/plus-XLomtlXf.js +24 -0
- package/lib/cjs/plus-XLomtlXf.js.map +1 -0
- package/lib/cjs/remove-Ba-ypwBf.js +17 -0
- package/lib/cjs/remove-Ba-ypwBf.js.map +1 -0
- package/lib/esm/confirm-DtE-HkVd.js +24 -0
- package/lib/esm/confirm-DtE-HkVd.js.map +1 -0
- package/lib/esm/edit-D--t_JAb.js +22 -0
- package/lib/esm/edit-D--t_JAb.js.map +1 -0
- package/lib/esm/functions-DlJPkGmE.js +36 -0
- package/lib/esm/functions-DlJPkGmE.js.map +1 -0
- package/lib/esm/image-DoB1o1sl.js +22 -0
- package/lib/esm/image-DoB1o1sl.js.map +1 -0
- package/lib/esm/index-BAQT-9au.js +347 -0
- package/lib/esm/index-BAQT-9au.js.map +1 -0
- package/lib/esm/{index-DOrkOhki.js → index-BCvtgOeI.js} +4 -4
- package/lib/esm/index-BCvtgOeI.js.map +1 -0
- package/lib/esm/{index-s33c_M2f.js → index-BDZ_pnSv.js} +122 -104
- package/lib/esm/index-BDZ_pnSv.js.map +1 -0
- package/lib/esm/{index-D6fLMv29.js → index-BPG8iO8t.js} +2 -6
- package/lib/esm/{index-D6fLMv29.js.map → index-BPG8iO8t.js.map} +1 -1
- package/lib/esm/{index-DcRgwPLd.js → index-BUBXHhHG.js} +18 -3
- package/lib/esm/index-BUBXHhHG.js.map +1 -0
- package/lib/esm/{index-CxJ9fxJm.js → index-Bvz1Yyiz.js} +8 -1
- package/lib/esm/index-Bvz1Yyiz.js.map +1 -0
- package/lib/esm/index-C1aVAv1l.js +124 -0
- package/lib/esm/index-C1aVAv1l.js.map +1 -0
- package/lib/esm/{index-uHWmZXqe.js → index-CM4urRY9.js} +480 -190
- package/lib/esm/index-CM4urRY9.js.map +1 -0
- package/lib/esm/{index-BFsG6770.js → index-ChR5Qhyf.js} +17 -3
- package/lib/esm/index-ChR5Qhyf.js.map +1 -0
- package/lib/esm/index-CwMVnVeI.js +89 -0
- package/lib/esm/index-CwMVnVeI.js.map +1 -0
- package/lib/esm/{index-CLpluqvF.js → index-Dc_wWopW.js} +46 -46
- package/lib/esm/index-Dc_wWopW.js.map +1 -0
- package/lib/esm/index-E8UgFLeN.js +79 -0
- package/lib/esm/index-E8UgFLeN.js.map +1 -0
- package/lib/esm/index.js +6 -6
- package/lib/esm/plus-lrX0Q75O.js +22 -0
- package/lib/esm/plus-lrX0Q75O.js.map +1 -0
- package/lib/esm/remove-D3g0Cd6_.js +15 -0
- package/lib/esm/remove-D3g0Cd6_.js.map +1 -0
- package/lib/theme/_internal/classic-common.css +7 -1
- package/lib/theme/common/block-edit.css +23 -23
- package/lib/theme/common/code-mirror.css +43 -44
- package/lib/theme/common/cursor.css +5 -0
- package/lib/theme/common/image-block.css +79 -81
- package/lib/theme/common/latex.css +6 -6
- package/lib/theme/common/link-tooltip.css +21 -21
- package/lib/theme/common/list-item.css +11 -10
- package/lib/theme/common/table.css +39 -39
- package/lib/theme/common/toolbar.css +8 -8
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types/core/crepe.d.ts +6 -6
- package/lib/types/core/crepe.d.ts.map +1 -1
- package/lib/types/core/slice.d.ts.map +1 -1
- package/lib/types/feature/block-edit/handle/component.d.ts +4 -8
- package/lib/types/feature/block-edit/handle/component.d.ts.map +1 -1
- package/lib/types/feature/block-edit/handle/index.d.ts +1 -1
- package/lib/types/feature/block-edit/handle/index.d.ts.map +1 -1
- package/lib/types/feature/block-edit/index.d.ts.map +1 -1
- package/lib/types/feature/block-edit/menu/component.d.ts +8 -11
- package/lib/types/feature/block-edit/menu/component.d.ts.map +1 -1
- package/lib/types/feature/block-edit/menu/config.d.ts.map +1 -1
- package/lib/types/feature/block-edit/menu/index.d.ts.map +1 -1
- package/lib/types/feature/block-edit/menu/utils.d.ts +2 -3
- package/lib/types/feature/block-edit/menu/utils.d.ts.map +1 -1
- package/lib/types/feature/code-mirror/index.d.ts +3 -4
- package/lib/types/feature/code-mirror/index.d.ts.map +1 -1
- package/lib/types/feature/cursor/index.d.ts +1 -0
- package/lib/types/feature/cursor/index.d.ts.map +1 -1
- package/lib/types/feature/image-block/index.d.ts.map +1 -1
- package/lib/types/feature/index.d.ts +4 -4
- package/lib/types/feature/index.d.ts.map +1 -1
- package/lib/types/feature/latex/index.d.ts.map +1 -1
- package/lib/types/feature/latex/inline-tooltip/component.d.ts +6 -10
- package/lib/types/feature/latex/inline-tooltip/component.d.ts.map +1 -1
- package/lib/types/feature/latex/inline-tooltip/view.d.ts.map +1 -1
- package/lib/types/feature/latex/input-rule.d.ts.map +1 -1
- package/lib/types/feature/latex/remark.d.ts.map +1 -1
- package/lib/types/feature/link-tooltip/index.d.ts.map +1 -1
- package/lib/types/feature/list-item/index.d.ts.map +1 -1
- package/lib/types/feature/placeholder/index.d.ts.map +1 -1
- package/lib/types/feature/shared.d.ts +1 -2
- package/lib/types/feature/shared.d.ts.map +1 -1
- package/lib/types/feature/table/index.d.ts.map +1 -1
- package/lib/types/feature/toolbar/component.d.ts +9 -12
- package/lib/types/feature/toolbar/component.d.ts.map +1 -1
- package/lib/types/feature/toolbar/index.d.ts.map +1 -1
- package/lib/types/icons/align-center.d.ts +1 -1
- package/lib/types/icons/align-center.d.ts.map +1 -1
- package/lib/types/icons/align-left.d.ts +1 -1
- package/lib/types/icons/align-left.d.ts.map +1 -1
- package/lib/types/icons/align-right.d.ts +1 -1
- package/lib/types/icons/align-right.d.ts.map +1 -1
- package/lib/types/icons/bold.d.ts +1 -1
- package/lib/types/icons/bold.d.ts.map +1 -1
- package/lib/types/icons/bullet-list.d.ts +1 -1
- package/lib/types/icons/bullet-list.d.ts.map +1 -1
- package/lib/types/icons/bullet.d.ts +1 -1
- package/lib/types/icons/bullet.d.ts.map +1 -1
- package/lib/types/icons/caption.d.ts +1 -1
- package/lib/types/icons/caption.d.ts.map +1 -1
- package/lib/types/icons/check-box-checked.d.ts +1 -1
- package/lib/types/icons/check-box-checked.d.ts.map +1 -1
- package/lib/types/icons/check-box-unchecked.d.ts +1 -1
- package/lib/types/icons/check-box-unchecked.d.ts.map +1 -1
- package/lib/types/icons/chevron-down.d.ts +1 -1
- package/lib/types/icons/chevron-down.d.ts.map +1 -1
- package/lib/types/icons/clear.d.ts +1 -1
- package/lib/types/icons/clear.d.ts.map +1 -1
- package/lib/types/icons/code.d.ts +1 -1
- package/lib/types/icons/code.d.ts.map +1 -1
- package/lib/types/icons/confirm.d.ts +1 -1
- package/lib/types/icons/confirm.d.ts.map +1 -1
- package/lib/types/icons/copy.d.ts +1 -1
- package/lib/types/icons/copy.d.ts.map +1 -1
- package/lib/types/icons/divider.d.ts +1 -1
- package/lib/types/icons/divider.d.ts.map +1 -1
- package/lib/types/icons/drag-handle.d.ts +1 -1
- package/lib/types/icons/drag-handle.d.ts.map +1 -1
- package/lib/types/icons/edit.d.ts +1 -1
- package/lib/types/icons/edit.d.ts.map +1 -1
- package/lib/types/icons/functions.d.ts +1 -1
- package/lib/types/icons/functions.d.ts.map +1 -1
- package/lib/types/icons/h1.d.ts +1 -1
- package/lib/types/icons/h1.d.ts.map +1 -1
- package/lib/types/icons/h2.d.ts +1 -1
- package/lib/types/icons/h2.d.ts.map +1 -1
- package/lib/types/icons/h3.d.ts +1 -1
- package/lib/types/icons/h3.d.ts.map +1 -1
- package/lib/types/icons/h4.d.ts +1 -1
- package/lib/types/icons/h4.d.ts.map +1 -1
- package/lib/types/icons/h5.d.ts +1 -1
- package/lib/types/icons/h5.d.ts.map +1 -1
- package/lib/types/icons/h6.d.ts +1 -1
- package/lib/types/icons/h6.d.ts.map +1 -1
- package/lib/types/icons/image.d.ts +1 -1
- package/lib/types/icons/image.d.ts.map +1 -1
- package/lib/types/icons/italic.d.ts +1 -1
- package/lib/types/icons/italic.d.ts.map +1 -1
- package/lib/types/icons/link.d.ts +1 -1
- package/lib/types/icons/link.d.ts.map +1 -1
- package/lib/types/icons/menu.d.ts +1 -1
- package/lib/types/icons/menu.d.ts.map +1 -1
- package/lib/types/icons/ordered-list.d.ts +1 -1
- package/lib/types/icons/ordered-list.d.ts.map +1 -1
- package/lib/types/icons/plus.d.ts +1 -1
- package/lib/types/icons/plus.d.ts.map +1 -1
- package/lib/types/icons/quote.d.ts +1 -1
- package/lib/types/icons/quote.d.ts.map +1 -1
- package/lib/types/icons/remove.d.ts +1 -1
- package/lib/types/icons/remove.d.ts.map +1 -1
- package/lib/types/icons/search.d.ts +1 -1
- package/lib/types/icons/search.d.ts.map +1 -1
- package/lib/types/icons/strikethrough.d.ts +1 -1
- package/lib/types/icons/strikethrough.d.ts.map +1 -1
- package/lib/types/icons/table.d.ts +1 -1
- package/lib/types/icons/table.d.ts.map +1 -1
- package/lib/types/icons/text.d.ts +1 -1
- package/lib/types/icons/text.d.ts.map +1 -1
- package/lib/types/icons/todo-list.d.ts +1 -1
- package/lib/types/icons/todo-list.d.ts.map +1 -1
- package/lib/types/icons/visibility-off.d.ts +1 -1
- package/lib/types/icons/visibility-off.d.ts.map +1 -1
- package/package.json +5 -26
- package/src/core/crepe.ts +13 -12
- package/src/core/slice.ts +2 -0
- package/src/feature/block-edit/handle/component.tsx +60 -0
- package/src/feature/block-edit/handle/index.ts +22 -14
- package/src/feature/block-edit/index.ts +3 -1
- package/src/feature/block-edit/menu/component.tsx +237 -0
- package/src/feature/block-edit/menu/config.ts +6 -3
- package/src/feature/block-edit/menu/index.ts +55 -17
- package/src/feature/block-edit/menu/utils.ts +3 -3
- package/src/feature/code-mirror/index.ts +20 -20
- package/src/feature/cursor/index.ts +10 -0
- package/src/feature/image-block/index.ts +3 -1
- package/src/feature/index.ts +5 -4
- package/src/feature/latex/index.ts +8 -8
- package/src/feature/latex/inline-tooltip/component.tsx +57 -0
- package/src/feature/latex/inline-tooltip/view.ts +30 -17
- package/src/feature/latex/input-rule.ts +4 -3
- package/src/feature/latex/remark.ts +3 -2
- package/src/feature/link-tooltip/index.ts +3 -1
- package/src/feature/list-item/index.ts +8 -16
- package/src/feature/placeholder/index.ts +6 -3
- package/src/feature/shared.ts +1 -2
- package/src/feature/table/index.ts +2 -0
- package/src/feature/toolbar/component.tsx +256 -0
- package/src/feature/toolbar/index.ts +34 -17
- package/src/icons/align-center.ts +1 -3
- package/src/icons/align-left.ts +1 -3
- package/src/icons/align-right.ts +1 -3
- package/src/icons/bold.ts +1 -3
- package/src/icons/bullet-list.ts +1 -3
- package/src/icons/bullet.ts +1 -3
- package/src/icons/caption.ts +1 -3
- package/src/icons/check-box-checked.ts +1 -3
- package/src/icons/check-box-unchecked.ts +1 -3
- package/src/icons/chevron-down.ts +1 -3
- package/src/icons/clear.ts +1 -3
- package/src/icons/code.ts +1 -3
- package/src/icons/confirm.ts +1 -3
- package/src/icons/copy.ts +1 -3
- package/src/icons/divider.ts +1 -3
- package/src/icons/drag-handle.ts +1 -3
- package/src/icons/edit.ts +1 -3
- package/src/icons/functions.ts +1 -3
- package/src/icons/h1.ts +1 -3
- package/src/icons/h2.ts +1 -3
- package/src/icons/h3.ts +1 -3
- package/src/icons/h4.ts +1 -3
- package/src/icons/h5.ts +1 -3
- package/src/icons/h6.ts +1 -3
- package/src/icons/image.ts +1 -3
- package/src/icons/italic.ts +1 -3
- package/src/icons/link.ts +1 -3
- package/src/icons/menu.ts +1 -3
- package/src/icons/ordered-list.ts +1 -3
- package/src/icons/plus.ts +1 -3
- package/src/icons/quote.ts +1 -3
- package/src/icons/remove.ts +1 -3
- package/src/icons/search.ts +1 -3
- package/src/icons/strikethrough.ts +1 -3
- package/src/icons/table.ts +1 -3
- package/src/icons/text.ts +1 -3
- package/src/icons/todo-list.ts +1 -3
- package/src/icons/visibility-off.ts +1 -3
- package/src/theme/_internal/classic-common.css +7 -1
- package/src/theme/common/block-edit.css +2 -2
- package/src/theme/common/code-mirror.css +5 -6
- package/src/theme/common/cursor.css +5 -0
- package/src/theme/common/image-block.css +9 -11
- package/src/theme/common/latex.css +1 -1
- package/src/theme/common/link-tooltip.css +2 -2
- package/src/theme/common/list-item.css +3 -2
- package/src/theme/common/table.css +2 -2
- package/src/theme/common/toolbar.css +1 -1
- package/lib/cjs/functions-Dk90yOUc.js +0 -690
- package/lib/cjs/functions-Dk90yOUc.js.map +0 -1
- package/lib/cjs/index-7pgPMFV4.js.map +0 -1
- package/lib/cjs/index-Bjy2DUKs.js +0 -272
- package/lib/cjs/index-Bjy2DUKs.js.map +0 -1
- package/lib/cjs/index-BuSAwj4j.js.map +0 -1
- package/lib/cjs/index-CvmlYYXX.js.map +0 -1
- package/lib/cjs/index-D3lu92SA.js +0 -39
- package/lib/cjs/index-D3lu92SA.js.map +0 -1
- package/lib/cjs/index-DQll67YS.js +0 -65
- package/lib/cjs/index-DQll67YS.js.map +0 -1
- package/lib/cjs/index-Dac851tb.js.map +0 -1
- package/lib/cjs/index-Dub20F3z.js.map +0 -1
- package/lib/cjs/index-hPk2gbSt.js +0 -35
- package/lib/cjs/index-hPk2gbSt.js.map +0 -1
- package/lib/cjs/index-nrFkJeLW.js.map +0 -1
- package/lib/cjs/index-ooYXC5xk.js.map +0 -1
- package/lib/esm/functions-Bsik6ikd.js +0 -652
- package/lib/esm/functions-Bsik6ikd.js.map +0 -1
- package/lib/esm/index-B3KiKTSt.js +0 -63
- package/lib/esm/index-B3KiKTSt.js.map +0 -1
- package/lib/esm/index-BFsG6770.js.map +0 -1
- package/lib/esm/index-CBrOT1fW.js +0 -37
- package/lib/esm/index-CBrOT1fW.js.map +0 -1
- package/lib/esm/index-CLpluqvF.js.map +0 -1
- package/lib/esm/index-CsEtSFhk.js +0 -270
- package/lib/esm/index-CsEtSFhk.js.map +0 -1
- package/lib/esm/index-Cuk7cL-r.js +0 -33
- package/lib/esm/index-Cuk7cL-r.js.map +0 -1
- package/lib/esm/index-CxJ9fxJm.js.map +0 -1
- package/lib/esm/index-DOrkOhki.js.map +0 -1
- package/lib/esm/index-DcRgwPLd.js.map +0 -1
- package/lib/esm/index-s33c_M2f.js.map +0 -1
- package/lib/esm/index-uHWmZXqe.js.map +0 -1
- package/src/feature/block-edit/handle/component.ts +0 -54
- package/src/feature/block-edit/menu/component.ts +0 -241
- package/src/feature/latex/inline-tooltip/component.ts +0 -38
- package/src/feature/toolbar/component.ts +0 -236
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-Cuk7cL-r.js","sources":["../../src/feature/list-item/index.ts"],"sourcesContent":["import type { Ctx } from '@milkdown/kit/ctx'\nimport {\n listItemBlockComponent,\n listItemBlockConfig,\n} from '@milkdown/kit/component/list-item-block'\nimport { html } from 'atomico'\nimport clsx from 'clsx'\nimport type { DefineFeature, Icon } from '../shared'\nimport {\n bulletIcon,\n checkBoxCheckedIcon,\n checkBoxUncheckedIcon,\n} from '../../icons'\n\nexport interface ListItemConfig {\n bulletIcon: Icon\n checkBoxCheckedIcon: Icon\n checkBoxUncheckedIcon: Icon\n}\n\nexport type ListItemFeatureConfig = Partial<ListItemConfig>\n\nfunction configureListItem(ctx: Ctx, config?: ListItemFeatureConfig) {\n ctx.set(listItemBlockConfig.key, {\n renderLabel: ({ label, listType, checked, readonly }) => {\n if (checked == null) {\n if (listType === 'bullet')\n return html`<span class=\"label\"\n >${config?.bulletIcon?.() ?? bulletIcon}</span\n >`\n\n return html`<span class=\"label\">${label}</span>`\n }\n\n if (checked)\n return html`<span\n class=${clsx('label checkbox', readonly && 'readonly')}\n >${config?.checkBoxCheckedIcon?.() ?? checkBoxCheckedIcon}</span\n >`\n\n return html`<span class=${clsx('label checkbox', readonly && 'readonly')}\n >${config?.checkBoxUncheckedIcon?.() ?? checkBoxUncheckedIcon}</span\n >`\n },\n })\n}\n\nexport const defineFeature: DefineFeature<ListItemFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config((ctx) => configureListItem(ctx, config))\n .use(listItemBlockComponent)\n}\n"],"names":[],"mappings":";;;;;AAsBA,SAAS,iBAAA,CAAkB,KAAU,MAAgC,EAAA;AACnE,EAAI,GAAA,CAAA,GAAA,CAAI,oBAAoB,GAAK,EAAA;AAAA,IAC/B,aAAa,CAAC,EAAE,OAAO,QAAU,EAAA,OAAA,EAAS,UAAe,KAAA;AAxB7D,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyBM,MAAA,IAAI,WAAW,IAAM,EAAA;AACnB,QAAA,IAAI,QAAa,KAAA,QAAA;AACf,UAAO,OAAA,IAAA,CAAA;AAAA,aACF,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,UAAR,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAA0B,UAAU,CAAA;AAAA,WAAA,CAAA;AAG3C,QAAA,OAAO,2BAA2B,KAAK,CAAA,OAAA,CAAA;AAAA;AAGzC,MAAI,IAAA,OAAA;AACF,QAAO,OAAA,IAAA,CAAA;AAAA,gBAAA,EACG,IAAK,CAAA,gBAAA,EAAkB,QAAY,IAAA,UAAU,CAAC;AAAA,WACnD,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,mBAAR,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAAmC,mBAAmB,CAAA;AAAA,SAAA,CAAA;AAG7D,MAAA,OAAO,IAAmB,CAAA,YAAA,EAAA,IAAA,CAAK,gBAAkB,EAAA,QAAA,IAAY,UAAU,CAAC;AAAA,SACnE,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,qBAAR,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAAqC,qBAAqB,CAAA;AAAA,OAAA,CAAA;AAAA;AAEjE,GACD,CAAA;AACH;AAEa,MAAA,aAAA,GAAsD,CACjE,MAAA,EACA,MACG,KAAA;AACH,EACG,MAAA,CAAA,MAAA,CAAO,CAAC,GAAQ,KAAA,iBAAA,CAAkB,KAAK,MAAM,CAAC,CAC9C,CAAA,GAAA,CAAI,sBAAsB,CAAA;AAC/B;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-CxJ9fxJm.js","sources":["../../src/feature/cursor/index.ts"],"sourcesContent":["import { cursor, dropCursorConfig } from '@milkdown/kit/plugin/cursor'\n\nimport type { DefineFeature } from '../shared'\n\ninterface CursorConfig {\n color: string | false\n width: number\n}\nexport type CursorFeatureConfig = Partial<CursorConfig>\n\nexport const defineFeature: DefineFeature<CursorFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config((ctx) => {\n ctx.update(dropCursorConfig.key, () => ({\n class: 'crepe-drop-cursor',\n width: config?.width ?? 4,\n color: config?.color ?? false,\n }))\n })\n .use(cursor)\n}\n"],"names":[],"mappings":";;AAUa,MAAA,aAAA,GAAoD,CAC/D,MAAA,EACA,MACG,KAAA;AACH,EACG,MAAA,CAAA,MAAA,CAAO,CAAC,GAAQ,KAAA;AACf,IAAI,GAAA,CAAA,MAAA,CAAO,gBAAiB,CAAA,GAAA,EAAK,MAAG;AAhB1C,MAAA,IAAA,EAAA,EAAA,EAAA;AAgB8C,MAAA,OAAA;AAAA,QACtC,KAAO,EAAA,mBAAA;AAAA,QACP,KAAA,EAAA,CAAO,EAAQ,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,KAAA,KAAR,IAAiB,GAAA,EAAA,GAAA,CAAA;AAAA,QACxB,KAAA,EAAA,CAAO,EAAQ,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,KAAA,KAAR,IAAiB,GAAA,EAAA,GAAA;AAAA,OAC1B;AAAA,KAAE,CAAA;AAAA,GACH,CACA,CAAA,GAAA,CAAI,MAAM,CAAA;AACf;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DOrkOhki.js","sources":["../../src/feature/placeholder/index.ts"],"sourcesContent":["import { $ctx, $prose } from '@milkdown/kit/utils'\nimport type { EditorState } from '@milkdown/kit/prose/state'\nimport { Plugin, PluginKey } from '@milkdown/kit/prose/state'\nimport type { Node } from '@milkdown/kit/prose/model'\nimport { Decoration, DecorationSet } from '@milkdown/kit/prose/view'\nimport { findParent } from '@milkdown/kit/prose'\nimport type { DefineFeature } from '../shared'\nimport { isInCodeBlock, isInList } from '../../utils'\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 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 defineFeature: DefineFeature<PlaceHolderFeatureConfig> = (\n editor,\n config\n) => {\n editor\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"],"names":["node"],"mappings":";;;;;;AASA,SAAS,WAAW,GAAW,EAAA;AAT/B,EAAA,IAAA,EAAA;AAUE,EAAA,OAAO,IAAI,UAAc,IAAA,CAAA,IAAK,GAAC,EAAI,GAAA,GAAA,CAAA,UAAA,KAAJ,mBAAgB,OAAQ,CAAA,IAAA,CAAA;AACzD;AAEA,SAAS,2BAAA,CACP,OACA,eACmB,EAAA;AACnB,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA;AACtB,EAAI,IAAA,CAAC,SAAU,CAAA,KAAA,EAAc,OAAA,IAAA;AAE7B,EAAA,MAAM,OAAO,SAAU,CAAA,OAAA;AACvB,EAAA,MAAM,OAAO,IAAK,CAAA,MAAA;AAClB,EAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,IAAO,GAAA,CAAA,EAAU,OAAA,IAAA;AAElC,EAAM,MAAA,OAAA,GAAU,WAAW,CAACA,KAAAA,KAASA,MAAK,IAAK,CAAA,IAAA,KAAS,OAAO,CAAA,CAAE,IAAI,CAAA;AACrE,EAAA,IAAI,SAAgB,OAAA,IAAA;AAEpB,EAAM,MAAA,MAAA,GAAS,KAAK,MAAO,EAAA;AAE3B,EAAA,OAAO,UAAW,CAAA,IAAA,CAAK,MAAQ,EAAA,MAAA,GAAS,KAAK,QAAU,EAAA;AAAA,IACrD,KAAO,EAAA,mBAAA;AAAA,IACP,kBAAoB,EAAA;AAAA,GACrB,CAAA;AACH;AASO,MAAM,iBAAoB,GAAA,IAAA;AAAA,EAC/B;AAAA,IACE,IAAM,EAAA,iBAAA;AAAA,IACN,IAAM,EAAA;AAAA,GACR;AAAA,EACA;AACF;AAEa,MAAA,iBAAA,GAAoB,MAAO,CAAA,CAAC,GAAQ,KAAA;AAC/C,EAAA,OAAO,IAAI,MAAO,CAAA;AAAA,IAChB,GAAA,EAAK,IAAI,SAAA,CAAU,mBAAmB,CAAA;AAAA,IACtC,KAAO,EAAA;AAAA,MACL,WAAA,EAAa,CAAC,KAAU,KAAA;AAtD9B,QAAA,IAAA,EAAA;AAuDQ,QAAA,MAAM,MAAS,GAAA,GAAA,CAAI,GAAI,CAAA,iBAAA,CAAkB,GAAG,CAAA;AAC5C,QAAI,IAAA,MAAA,CAAO,SAAS,KAAS,IAAA,CAAC,WAAW,KAAM,CAAA,GAAG,GAAU,OAAA,IAAA;AAE5D,QAAA,IAAI,cAAc,KAAM,CAAA,SAAS,CAAK,IAAA,QAAA,CAAS,MAAM,SAAS,CAAA;AAC5D,UAAO,OAAA,IAAA;AAET,QAAM,MAAA,eAAA,GAAA,CAAkB,EAAO,GAAA,MAAA,CAAA,IAAA,KAAP,IAAe,GAAA,EAAA,GAAA,iBAAA;AACvC,QAAM,MAAA,IAAA,GAAO,2BAA4B,CAAA,KAAA,EAAO,eAAe,CAAA;AAC/D,QAAI,IAAA,CAAC,MAAa,OAAA,IAAA;AAElB,QAAA,OAAO,cAAc,MAAO,CAAA,KAAA,CAAM,GAAK,EAAA,CAAC,IAAI,CAAC,CAAA;AAAA;AAC/C;AACF,GACD,CAAA;AACH,CAAC;AAEY,MAAA,aAAA,GAAyD,CACpE,MAAA,EACA,MACG,KAAA;AACH,EACG,MAAA,CAAA,MAAA,CAAO,CAAC,GAAQ,KAAA;AACf,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,GAAA,CAAI,MAAO,CAAA,iBAAA,CAAkB,GAAK,EAAA,CAAC,IAAS,KAAA;AAC1C,QAAO,OAAA;AAAA,UACL,GAAG,IAAA;AAAA,UACH,GAAG;AAAA,SACL;AAAA,OACD,CAAA;AAAA;AACH,GACD,CACA,CAAA,GAAA,CAAI,iBAAiB,CAAA,CACrB,IAAI,iBAAiB,CAAA;AAC1B;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DcRgwPLd.js","sources":["../../src/feature/link-tooltip/index.ts"],"sourcesContent":["import {\n configureLinkTooltip,\n linkTooltipConfig,\n linkTooltipPlugin,\n} from '@milkdown/kit/component/link-tooltip'\nimport type { DefineFeature, Icon } from '../shared'\nimport { confirmIcon, copyIcon, editIcon, removeIcon } from '../../icons'\n\ninterface LinkTooltipConfig {\n linkIcon: Icon\n editButton: Icon\n removeButton: Icon\n confirmButton: Icon\n inputPlaceholder: string\n onCopyLink: (link: string) => void\n}\n\nexport type LinkTooltipFeatureConfig = Partial<LinkTooltipConfig>\n\nexport const defineFeature: DefineFeature<LinkTooltipFeatureConfig> = (\n editor,\n config\n) => {\n editor\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"],"names":[],"mappings":";;;;AAmBa,MAAA,aAAA,GAAyD,CACpE,MAAA,EACA,MACG,KAAA;AACH,EAAA,MAAA,CACG,MAAO,CAAA,oBAAoB,CAC3B,CAAA,MAAA,CAAO,CAAC,GAAQ,KAAA;AACf,IAAA,GAAA,CAAI,MAAO,CAAA,iBAAA,CAAkB,GAAK,EAAA,CAAC,IAAM,KAAA;AA1B/C,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA0BmD,MAAA,OAAA;AAAA,QAC3C,GAAG,IAAA;AAAA,QACH,QAAU,EAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,QAAR,KAAA,IAAA,GAAA,EAAA,GAAqB,MAAM,QAAA;AAAA,QACrC,UAAY,EAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,UAAR,KAAA,IAAA,GAAA,EAAA,GAAuB,MAAM,QAAA;AAAA,QACzC,YAAc,EAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,YAAR,KAAA,IAAA,GAAA,EAAA,GAAyB,MAAM,UAAA;AAAA,QAC7C,aAAe,EAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,aAAR,KAAA,IAAA,GAAA,EAAA,GAA0B,MAAM,WAAA;AAAA,QAC/C,gBAAA,EAAA,CAAkB,EAAQ,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,gBAAA,KAAR,IAA4B,GAAA,EAAA,GAAA,eAAA;AAAA,QAC9C,UAAY,EAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,UAAR,KAAA,IAAA,GAAA,EAAA,GAAuB,MAAM;AAAA;AAAC,OAC5C;AAAA,KAAE,CAAA;AAAA,GACH,CACA,CAAA,GAAA,CAAI,iBAAiB,CAAA;AAC1B;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-s33c_M2f.js","sources":["../../src/feature/latex/remark.ts","../../src/feature/latex/inline-tooltip/component.ts","../../src/feature/latex/inline-tooltip/tooltip.ts","../../src/feature/latex/inline-tooltip/view.ts","../../src/feature/latex/input-rule.ts","../../src/feature/latex/block-latex.ts","../../src/feature/latex/index.ts"],"sourcesContent":["import remarkMath from 'remark-math'\nimport { $remark } from '@milkdown/kit/utils'\nimport type { Node } from '@milkdown/kit/transformer'\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 { c, h, html, type Component } from 'atomico'\nimport type { LatexConfig } from '..'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\ntype LatexEditComponentProps = {\n config: Partial<LatexConfig>\n innerView: EditorView\n updateValue: () => void\n}\n\nexport const latexEditComponent: Component<LatexEditComponentProps> = ({\n config,\n innerView,\n updateValue,\n}) => {\n const onMouseDown = (e: MouseEvent) => {\n e.preventDefault()\n updateValue?.()\n }\n return html`\n <host>\n <div class=\"container\">\n ${innerView && h(innerView.dom, {})}\n <button onmousedown=${onMouseDown}>\n ${config?.inlineEditConfirm?.()}\n </button>\n </div>\n </host>\n `\n}\n\nlatexEditComponent.props = {\n config: Object,\n innerView: Object,\n updateValue: Function,\n}\n\nexport const LatexInlineEditElement = c(latexEditComponent)\n","import { tooltipFactory } from '@milkdown/kit/plugin/tooltip'\n\nexport const inlineLatexTooltip = tooltipFactory('INLINE_LATEX')\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport { TooltipProvider } from '@milkdown/kit/plugin/tooltip'\nimport type { PluginView } from '@milkdown/kit/prose/state'\nimport { EditorState, NodeSelection } from '@milkdown/kit/prose/state'\nimport { EditorView } from '@milkdown/kit/prose/view'\nimport { mathInlineId } from '../inline-latex'\nimport { LatexInlineEditElement } from './component'\nimport type { LatexConfig } from '..'\nimport { keymap } from '@milkdown/kit/prose/keymap'\nimport { redo, undo } from '@milkdown/kit/prose/history'\nimport { Schema } from '@milkdown/kit/prose/model'\n\nexport class LatexInlineTooltip implements PluginView {\n #content = new LatexInlineEditElement()\n #provider: TooltipProvider\n #dom: HTMLElement\n #innerView: EditorView | null\n\n constructor(\n readonly ctx: Ctx,\n view: EditorView,\n config: Partial<LatexConfig>\n ) {\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.#content.config = config\n this.#provider.update(view)\n this.#dom = document.createElement('div')\n this.#innerView = null\n }\n\n #onHide = () => {\n if (this.#innerView) {\n this.#innerView.destroy()\n this.#innerView = 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.#content.updateValue?.()\n return true\n },\n }),\n ],\n }),\n })\n\n this.#innerView = innerView\n this.#content.innerView = this.#innerView\n this.#content.updateValue = () => {\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.#provider.destroy()\n this.#content.remove()\n }\n}\n","import { $inputRule } from '@milkdown/kit/utils'\nimport { nodeRule } from '@milkdown/kit/prose'\nimport { mathInlineSchema } from './inline-latex'\nimport { codeBlockSchema } from '@milkdown/kit/preset/commonmark'\nimport { textblockTypeInputRule } from '@milkdown/kit/prose/inputrules'\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 { 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 type { KatexOptions } from 'katex'\nimport katex from 'katex'\nimport { codeBlockConfig } from '@milkdown/kit/component/code-block'\nimport { CrepeFeature } from '../..'\nimport { FeaturesCtx } from '../../core/slice'\nimport type { DefineFeature, Icon } from '../shared'\nimport { remarkMathBlockPlugin, remarkMathPlugin } from './remark'\nimport { mathInlineSchema } from './inline-latex'\nimport { defIfNotExists } from '../../utils'\nimport { LatexInlineEditElement } from './inline-tooltip/component'\nimport { inlineLatexTooltip } from './inline-tooltip/tooltip'\nimport { LatexInlineTooltip } from './inline-tooltip/view'\nimport { confirmIcon } from '../../icons'\nimport { mathBlockInputRule, mathInlineInputRule } from './input-rule'\nimport { blockLatexSchema } from './block-latex'\n\nexport interface LatexConfig {\n katexOptions: KatexOptions\n inlineEditConfirm: Icon\n}\n\nexport type LatexFeatureConfig = Partial<LatexConfig>\n\ndefIfNotExists('milkdown-latex-inline-edit', LatexInlineEditElement)\nexport const defineFeature: DefineFeature<LatexFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config((ctx) => {\n const flags = ctx.get(FeaturesCtx)\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) => {\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)\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}\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"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-uHWmZXqe.js","sources":["../../src/feature/block-edit/menu/group-builder.ts","../../src/feature/block-edit/menu/utils.ts","../../src/feature/block-edit/menu/config.ts","../../src/feature/block-edit/menu/component.ts","../../src/feature/block-edit/menu/index.ts","../../src/feature/block-edit/handle/component.ts","../../src/feature/block-edit/handle/index.ts","../../src/feature/block-edit/index.ts"],"sourcesContent":["import type { MenuItem, MenuItemGroup } from './utils'\n\nexport class GroupBuilder {\n #groups: MenuItemGroup<false>[] = []\n\n clear = () => {\n this.#groups = []\n return this\n }\n\n #getGroupInstance = (group: MenuItemGroup<false>) => {\n const groupInstance = {\n group,\n addItem: (key: string, item: Omit<MenuItem, 'key' | 'index'>) => {\n const data = { key, ...item }\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, 'index'>[] = []\n const group: MenuItemGroup<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 { html } from 'atomico'\nimport type { Ctx } from '@milkdown/kit/ctx'\nimport type { Command, Transaction } from '@milkdown/kit/prose/state'\nimport type { Attrs, NodeType } from '@milkdown/kit/prose/model'\nimport { findWrapping } from '@milkdown/kit/prose/transform'\n\nexport interface MenuItem {\n index: number\n key: string\n label: string\n icon: ReturnType<typeof html>\n onRun: (ctx: Ctx) => void\n}\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<HasIndex extends true | false = true> = WithRange<\n {\n key: string\n label: string\n items: HasIndex extends true ? MenuItem[] : Omit<MenuItem, 'index'>[]\n },\n HasIndex\n>\n\nexport function clearRange(tr: Transaction) {\n const { $from, $to } = tr.selection\n const { pos: from } = $from\n const { pos: to } = $to\n tr = tr.deleteRange(from - $from.node().content.size, to)\n return tr\n}\n\nexport function setBlockType(\n tr: Transaction,\n nodeType: NodeType,\n attrs: Attrs | null = null\n) {\n const { from, to } = tr.selection\n return tr.setBlockType(from, to, nodeType, attrs)\n}\n\nexport function wrapInBlockType(\n tr: Transaction,\n nodeType: NodeType,\n attrs: Attrs | null = null\n) {\n const { $from, $to } = tr.selection\n\n const range = $from.blockRange($to)\n const wrapping = range && findWrapping(range, nodeType, attrs)\n if (!wrapping) return null\n\n return tr.wrap(range, wrapping)\n}\n\nexport function addBlockType(\n tr: Transaction,\n nodeType: NodeType,\n attrs: Attrs | null = null\n) {\n const node = nodeType.createAndFill(attrs)\n if (!node) return null\n\n return tr.replaceSelectionWith(node)\n}\n\nexport function clearContentAndSetBlockType(\n nodeType: NodeType,\n attrs: Attrs | null = null\n): Command {\n return (state, dispatch) => {\n if (dispatch) {\n const tr = setBlockType(clearRange(state.tr), nodeType, attrs)\n dispatch(tr.scrollIntoView())\n }\n return true\n }\n}\n\nexport function clearContentAndWrapInBlockType(\n nodeType: NodeType,\n attrs: Attrs | null = null\n): Command {\n return (state, dispatch) => {\n const tr = wrapInBlockType(clearRange(state.tr), nodeType, attrs)\n if (!tr) return false\n\n if (dispatch) dispatch(tr.scrollIntoView())\n\n return true\n }\n}\n\nexport function clearContentAndAddBlockType(\n nodeType: NodeType,\n attrs: Attrs | null = null\n): Command {\n return (state, dispatch) => {\n const tr = addBlockType(clearRange(state.tr), nodeType, attrs)\n if (!tr) return false\n\n if (dispatch) dispatch(tr.scrollIntoView())\n\n return true\n }\n}\n","import { imageBlockSchema } from '@milkdown/kit/component/image-block'\nimport { editorViewCtx } from '@milkdown/kit/core'\nimport type { Ctx } from '@milkdown/kit/ctx'\nimport {\n blockquoteSchema,\n bulletListSchema,\n codeBlockSchema,\n headingSchema,\n hrSchema,\n listItemSchema,\n orderedListSchema,\n paragraphSchema,\n} from '@milkdown/kit/preset/commonmark'\nimport { createTable } from '@milkdown/kit/preset/gfm'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { CrepeFeature } from '../../..'\nimport { FeaturesCtx } from '../../../core/slice'\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 type { BlockEditFeatureConfig } from '../index'\nimport { GroupBuilder } from './group-builder'\nimport type { MenuItemGroup } from './utils'\nimport {\n clearContentAndAddBlockType,\n clearContentAndSetBlockType,\n clearContentAndWrapInBlockType,\n clearRange,\n} from './utils'\n\nexport function getGroups(\n filter?: string,\n config?: BlockEditFeatureConfig,\n ctx?: Ctx\n) {\n const flags = ctx?.get(FeaturesCtx)\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()\n groupBuilder\n .addGroup('text', config?.slashMenuTextGroupLabel ?? 'Text')\n .addItem('text', {\n label: config?.slashMenuTextGroupLabel ?? 'Text',\n icon: config?.slashMenuTextIcon?.() ?? textIcon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndSetBlockType(paragraphSchema.type(ctx))\n command(state, dispatch)\n },\n })\n .addItem('h1', {\n label: config?.slashMenuH1Label ?? 'Heading 1',\n icon: config?.slashMenuH1Icon?.() ?? h1Icon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndSetBlockType(headingSchema.type(ctx), {\n level: 1,\n })\n command(state, dispatch)\n },\n })\n .addItem('h2', {\n label: config?.slashMenuH2Label ?? 'Heading 2',\n icon: config?.slashMenuH2Icon?.() ?? h2Icon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndSetBlockType(headingSchema.type(ctx), {\n level: 2,\n })\n command(state, dispatch)\n },\n })\n .addItem('h3', {\n label: config?.slashMenuH3Label ?? 'Heading 3',\n icon: config?.slashMenuH3Icon?.() ?? h3Icon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndSetBlockType(headingSchema.type(ctx), {\n level: 3,\n })\n command(state, dispatch)\n },\n })\n .addItem('h4', {\n label: config?.slashMenuH4Label ?? 'Heading 4',\n icon: config?.slashMenuH4Icon?.() ?? h4Icon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndSetBlockType(headingSchema.type(ctx), {\n level: 4,\n })\n command(state, dispatch)\n },\n })\n .addItem('h5', {\n label: config?.slashMenuH5Label ?? 'Heading 5',\n icon: config?.slashMenuH5Icon?.() ?? h5Icon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndSetBlockType(headingSchema.type(ctx), {\n level: 5,\n })\n command(state, dispatch)\n },\n })\n .addItem('h6', {\n label: config?.slashMenuH6Label ?? 'Heading 6',\n icon: config?.slashMenuH6Icon?.() ?? h6Icon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndSetBlockType(headingSchema.type(ctx), {\n level: 6,\n })\n command(state, dispatch)\n },\n })\n .addItem('quote', {\n label: config?.slashMenuQuoteLabel ?? 'Quote',\n icon: config?.slashMenuQuoteIcon?.() ?? quoteIcon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndWrapInBlockType(\n blockquoteSchema.type(ctx)\n )\n command(state, dispatch)\n },\n })\n .addItem('divider', {\n label: config?.slashMenuDividerLabel ?? 'Divider',\n icon: config?.slashMenuDividerIcon?.() ?? dividerIcon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndAddBlockType(hrSchema.type(ctx))\n command(state, dispatch)\n },\n })\n\n groupBuilder\n .addGroup('list', config?.slashMenuListGroupLabel ?? 'List')\n .addItem('bullet-list', {\n label: config?.slashMenuBulletListLabel ?? 'Bullet List',\n icon: config?.slashMenuBulletListIcon?.() ?? bulletListIcon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndWrapInBlockType(\n bulletListSchema.type(ctx)\n )\n command(state, dispatch)\n },\n })\n .addItem('ordered-list', {\n label: config?.slashMenuOrderedListLabel ?? 'Ordered List',\n icon: config?.slashMenuOrderedListIcon?.() ?? orderedListIcon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndWrapInBlockType(\n orderedListSchema.type(ctx)\n )\n command(state, dispatch)\n },\n })\n .addItem('todo-list', {\n label: config?.slashMenuTaskListLabel ?? 'Todo List',\n icon: config?.slashMenuTaskListIcon?.() ?? todoListIcon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndWrapInBlockType(\n listItemSchema.type(ctx),\n { checked: false }\n )\n command(state, dispatch)\n },\n })\n\n const advancedGroup = groupBuilder.addGroup(\n 'advanced',\n config?.slashMenuAdvancedGroupLabel ?? 'Advanced'\n )\n\n if (isImageBlockEnabled) {\n advancedGroup.addItem('image', {\n label: config?.slashMenuImageLabel ?? 'Image',\n icon: config?.slashMenuImageIcon?.() ?? imageIcon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndAddBlockType(imageBlockSchema.type(ctx))\n command(state, dispatch)\n },\n })\n }\n\n advancedGroup.addItem('code', {\n label: config?.slashMenuCodeBlockLabel ?? 'Code',\n icon: config?.slashMenuCodeBlockIcon?.() ?? codeIcon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndAddBlockType(codeBlockSchema.type(ctx))\n command(state, dispatch)\n },\n })\n\n if (isTableEnabled) {\n advancedGroup.addItem('table', {\n label: config?.slashMenuTableLabel ?? 'Table',\n icon: config?.slashMenuTableIcon?.() ?? tableIcon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n let { tr } = state\n tr = clearRange(tr)\n const from = tr.selection.from\n const table = createTable(ctx, 3, 3)\n tr = tr.replaceSelectionWith(table)\n dispatch(tr)\n\n requestAnimationFrame(() => {\n const docSize = view.state.doc.content.size\n const $pos = view.state.doc.resolve(\n from > docSize ? docSize : from < 0 ? 0 : from\n )\n const selection = TextSelection.near($pos)\n const tr = view.state.tr\n tr.setSelection(selection)\n dispatch(tr.scrollIntoView())\n })\n },\n })\n }\n\n if (isLatexEnabled) {\n advancedGroup.addItem('math', {\n label: config?.slashMenuMathLabel ?? 'Math',\n icon: config?.slashMenuMathIcon?.() ?? functionsIcon,\n onRun: (ctx) => {\n const view = ctx.get(editorViewCtx)\n const { dispatch, state } = view\n\n const command = clearContentAndAddBlockType(codeBlockSchema.type(ctx), {\n language: 'LaTex',\n })\n command(state, dispatch)\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[],\n size: items.length,\n }\n}\n","import type { Component } from 'atomico'\nimport {\n c,\n html,\n useCallback,\n useEffect,\n useHost,\n useMemo,\n useRef,\n useState,\n} from 'atomico'\nimport type { Ctx } from '@milkdown/kit/ctx'\nimport type { BlockEditFeatureConfig } from '../index'\nimport { getGroups } from './config'\n\nexport interface MenuProps {\n ctx: Ctx\n show: boolean\n filter: string\n hide: () => void\n config?: BlockEditFeatureConfig\n}\n\nexport const menuComponent: Component<MenuProps> = ({\n show,\n hide,\n ctx,\n filter,\n config,\n}) => {\n const { groups, size } = useMemo(\n () => getGroups(filter, config, ctx),\n [filter]\n )\n\n const host = useHost()\n const [hoverIndex, setHoverIndex] = useState(0)\n\n const root = useMemo(() => host.current.getRootNode() as HTMLElement, [host])\n\n const prevMousePosition = useRef({ x: -999, y: -999 })\n\n const onMouseMove = useCallback((e: MouseEvent) => {\n const prevPos = prevMousePosition.current\n if (!prevPos) return\n\n const { x, y } = e\n prevPos.x = x\n prevPos.y = y\n }, [])\n\n useEffect(() => {\n if (size === 0 && show) hide?.()\n else if (hoverIndex >= size) setHoverIndex(0)\n }, [size, show])\n\n const onHover = useCallback(\n (\n index: number | ((prev: number) => number),\n after?: (index: number) => void\n ) => {\n setHoverIndex((prev) => {\n const next = typeof index === 'function' ? index(prev) : index\n\n after?.(next)\n return next\n })\n },\n []\n )\n\n const scrollToIndex = useCallback((index: number) => {\n const target = host.current.querySelector<HTMLElement>(\n `[data-index=\"${index}\"]`\n )\n const scrollRoot = host.current.querySelector<HTMLElement>('.menu-groups')\n\n if (!target || !scrollRoot) return\n\n scrollRoot.scrollTop = target.offsetTop - scrollRoot.offsetTop\n }, [])\n\n const runByIndex = useCallback(\n (index: number) => {\n const item = groups.flatMap((group) => group.items).at(index)\n if (item && ctx) item.onRun(ctx)\n\n hide?.()\n },\n [groups]\n )\n\n const onKeydown = useCallback(\n (e: KeyboardEvent) => {\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)\n }\n },\n [hide, groups, hoverIndex]\n )\n\n const onMouseEnter = useCallback((index: number) => {\n return (e: MouseEvent) => {\n const prevPos = prevMousePosition.current\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\n useEffect(() => {\n if (show) root.addEventListener('keydown', onKeydown, { capture: true })\n else root.removeEventListener('keydown', onKeydown, { capture: true })\n\n return () => {\n root.removeEventListener('keydown', onKeydown, { capture: true })\n }\n }, [show, onKeydown])\n\n return html`\n <host onmousedown=${(e: MouseEvent) => e.preventDefault()}>\n <nav class=\"tab-group\">\n <ul>\n ${groups.map(\n (group) =>\n html`<li\n key=${group.key}\n onmousedown=${() => onHover(group.range[0], scrollToIndex)}\n class=${hoverIndex >= group.range[0] &&\n hoverIndex < group.range[1]\n ? 'selected'\n : ''}\n >\n ${group.label}\n </li>`\n )}\n </ul>\n </nav>\n <div class=\"menu-groups\" onmousemove=${onMouseMove}>\n ${groups.map((group) => {\n return html`\n <div key=${group.key} class=\"menu-group\">\n <h6>${group.label}</h6>\n <ul>\n ${group.items.map(\n (item) =>\n html`<li\n key=${item.key}\n data-index=${item.index}\n class=${hoverIndex === item.index ? 'hover' : ''}\n onmouseenter=${onMouseEnter(item.index)}\n onmousedown=${() => {\n host.current\n .querySelector(`[data-index=\"${item.index}\"]`)\n ?.classList.add('active')\n }}\n onmouseup=${() => {\n host.current\n .querySelector(`[data-index=\"${item.index}\"]`)\n ?.classList.remove('active')\n runByIndex(item.index)\n }}\n >\n ${item.icon}\n <span>${item.label}</span>\n </li>`\n )}\n </ul>\n </div>\n `\n })}\n </div>\n </host>\n `\n}\n\nmenuComponent.props = {\n ctx: Object,\n config: Object,\n show: Boolean,\n filter: String,\n hide: Function,\n}\n\nexport const MenuElement = c(menuComponent)\n","import type { PluginView } from '@milkdown/kit/prose/state'\nimport type { EditorView } from '@milkdown/kit/prose/view'\nimport { SlashProvider, slashFactory } from '@milkdown/kit/plugin/slash'\nimport type { Ctx } from '@milkdown/kit/ctx'\nimport type { AtomicoThis } from 'atomico/types/dom'\nimport { $ctx } from '@milkdown/kit/utils'\nimport { defIfNotExists, isInCodeBlock, isInList } from '../../../utils'\nimport type { BlockEditFeatureConfig } from '../index'\nimport type { MenuProps } from './component'\nimport { MenuElement } from './component'\n\nexport const menu = slashFactory('CREPE_MENU')\n\nexport interface 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\ndefIfNotExists('milkdown-slash-menu', MenuElement)\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: AtomicoThis<MenuProps, HTMLElement>\n readonly #slashProvider: SlashProvider\n #programmaticallyPos: number | null = null\n\n constructor(ctx: Ctx, view: EditorView, config?: BlockEditFeatureConfig) {\n this.#content = new MenuElement()\n this.#content.hide = this.hide\n this.#content.ctx = ctx\n this.#content.config = config\n // eslint-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 const pos = self.#programmaticallyPos\n\n self.#content.filter = currentText.startsWith('/')\n ? currentText.slice(1)\n : currentText\n\n if (typeof pos === 'number') {\n if (\n view.state.doc.resolve(pos).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 this.#content.show = true\n }\n this.#slashProvider.onHide = () => {\n this.#content.show = 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.#content.filter = ''\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.#content.remove()\n }\n}\n","import { type Component, c, html, useEffect, useRef } from 'atomico'\nimport { menuIcon, plusIcon } from '../../../icons'\nimport type { Icon } from '../../shared'\n\nexport interface BlockHandleProps {\n show: boolean\n onAdd: () => void\n addIcon?: Icon\n handleIcon?: Icon\n}\n\nconst blockHandleComponent: Component<BlockHandleProps> = ({\n onAdd,\n addIcon,\n handleIcon,\n}) => {\n const ref = useRef<HTMLDivElement>()\n useEffect(() => {\n ref.current?.classList.remove('active')\n })\n const onMouseDown = (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n ref.current?.classList.add('active')\n }\n const onMouseUp = (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n onAdd?.()\n ref.current?.classList.remove('active')\n }\n return html`\n <host>\n <div\n ref=${ref}\n onmousedown=${onMouseDown}\n onmouseup=${onMouseUp}\n class=\"operation-item\"\n >\n ${addIcon?.() || plusIcon}\n </div>\n <div class=\"operation-item\">${handleIcon?.() || menuIcon}</div>\n </host>\n `\n}\n\nblockHandleComponent.props = {\n show: Boolean,\n onAdd: Function,\n addIcon: Function,\n handleIcon: Function,\n}\n\nexport const BlockHandleElement = c(blockHandleComponent)\n","import type { PluginView } from '@milkdown/kit/prose/state'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { BlockProvider, block, blockConfig } from '@milkdown/kit/plugin/block'\nimport type { Ctx } from '@milkdown/kit/ctx'\nimport type { AtomicoThis } from 'atomico/types/dom'\nimport { editorViewCtx } from '@milkdown/kit/core'\nimport { paragraphSchema } from '@milkdown/kit/preset/commonmark'\nimport { findParent } from '@milkdown/kit/prose'\nimport { menuAPI } from '../menu'\nimport { defIfNotExists } from '../../../utils'\nimport type { BlockEditFeatureConfig } from '../index'\nimport type { BlockHandleProps } from './component'\nimport { BlockHandleElement } from './component'\n\nexport class BlockHandleView implements PluginView {\n #content: AtomicoThis<BlockHandleProps>\n #provider: BlockProvider\n readonly #ctx: Ctx\n\n constructor(ctx: Ctx, config?: BlockEditFeatureConfig) {\n this.#ctx = ctx\n const content = new BlockHandleElement()\n this.#content = content\n this.#content.onAdd = this.onAdd\n this.#content.addIcon = config?.handleAddIcon\n this.#content.handleIcon = config?.handleDragIcon\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 })\n this.update()\n }\n\n update = () => {\n this.#provider.update()\n }\n\n destroy = () => {\n this.#provider.destroy()\n this.#content.remove()\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\ndefIfNotExists('milkdown-block-handle', BlockHandleElement)\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 } from '@milkdown/kit/plugin/block'\nimport type { DefineFeature, Icon } from '../shared'\nimport { configureBlockHandle } from './handle'\nimport { configureMenu, menu, menuAPI } from './menu'\nimport type { GroupBuilder } from './menu/group-builder'\n\ninterface BlockEditConfig {\n handleAddIcon: Icon\n handleDragIcon: Icon\n buildMenu: (builder: GroupBuilder) => void\n\n slashMenuTextGroupLabel: string\n slashMenuTextIcon: Icon\n slashMenuTextLabel: string\n slashMenuH1Icon: Icon\n slashMenuH1Label: string\n slashMenuH2Icon: Icon\n slashMenuH2Label: string\n slashMenuH3Icon: Icon\n slashMenuH3Label: string\n slashMenuH4Icon: Icon\n slashMenuH4Label: string\n slashMenuH5Icon: Icon\n slashMenuH5Label: string\n slashMenuH6Icon: Icon\n slashMenuH6Label: string\n slashMenuQuoteIcon: Icon\n slashMenuQuoteLabel: string\n slashMenuDividerIcon: Icon\n slashMenuDividerLabel: string\n\n slashMenuListGroupLabel: string\n slashMenuBulletListIcon: Icon\n slashMenuBulletListLabel: string\n slashMenuOrderedListIcon: Icon\n slashMenuOrderedListLabel: string\n slashMenuTaskListIcon: Icon\n slashMenuTaskListLabel: string\n\n slashMenuAdvancedGroupLabel: string\n slashMenuImageIcon: Icon\n slashMenuImageLabel: string\n slashMenuCodeBlockIcon: Icon\n slashMenuCodeBlockLabel: string\n slashMenuTableIcon: Icon\n slashMenuTableLabel: string\n slashMenuMathIcon: Icon\n slashMenuMathLabel: string\n}\n\nexport type BlockEditFeatureConfig = Partial<BlockEditConfig>\n\nexport const defineFeature: DefineFeature<BlockEditFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config((ctx) => configureBlockHandle(ctx, config))\n .config((ctx) => configureMenu(ctx, config))\n .use(menuAPI)\n .use(block)\n .use(menu)\n}\n"],"names":["__privateAdd","__privateSet","__privateGet","group","ctx","tr","items","groups","_content","view"],"mappings":"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"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { type Component, c, html, useEffect, useRef } from 'atomico'
|
|
2
|
-
import { menuIcon, plusIcon } from '../../../icons'
|
|
3
|
-
import type { Icon } from '../../shared'
|
|
4
|
-
|
|
5
|
-
export interface BlockHandleProps {
|
|
6
|
-
show: boolean
|
|
7
|
-
onAdd: () => void
|
|
8
|
-
addIcon?: Icon
|
|
9
|
-
handleIcon?: Icon
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const blockHandleComponent: Component<BlockHandleProps> = ({
|
|
13
|
-
onAdd,
|
|
14
|
-
addIcon,
|
|
15
|
-
handleIcon,
|
|
16
|
-
}) => {
|
|
17
|
-
const ref = useRef<HTMLDivElement>()
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
ref.current?.classList.remove('active')
|
|
20
|
-
})
|
|
21
|
-
const onMouseDown = (e: MouseEvent) => {
|
|
22
|
-
e.preventDefault()
|
|
23
|
-
e.stopPropagation()
|
|
24
|
-
ref.current?.classList.add('active')
|
|
25
|
-
}
|
|
26
|
-
const onMouseUp = (e: MouseEvent) => {
|
|
27
|
-
e.preventDefault()
|
|
28
|
-
e.stopPropagation()
|
|
29
|
-
onAdd?.()
|
|
30
|
-
ref.current?.classList.remove('active')
|
|
31
|
-
}
|
|
32
|
-
return html`
|
|
33
|
-
<host>
|
|
34
|
-
<div
|
|
35
|
-
ref=${ref}
|
|
36
|
-
onmousedown=${onMouseDown}
|
|
37
|
-
onmouseup=${onMouseUp}
|
|
38
|
-
class="operation-item"
|
|
39
|
-
>
|
|
40
|
-
${addIcon?.() || plusIcon}
|
|
41
|
-
</div>
|
|
42
|
-
<div class="operation-item">${handleIcon?.() || menuIcon}</div>
|
|
43
|
-
</host>
|
|
44
|
-
`
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
blockHandleComponent.props = {
|
|
48
|
-
show: Boolean,
|
|
49
|
-
onAdd: Function,
|
|
50
|
-
addIcon: Function,
|
|
51
|
-
handleIcon: Function,
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export const BlockHandleElement = c(blockHandleComponent)
|
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import type { Component } from 'atomico'
|
|
2
|
-
import {
|
|
3
|
-
c,
|
|
4
|
-
html,
|
|
5
|
-
useCallback,
|
|
6
|
-
useEffect,
|
|
7
|
-
useHost,
|
|
8
|
-
useMemo,
|
|
9
|
-
useRef,
|
|
10
|
-
useState,
|
|
11
|
-
} from 'atomico'
|
|
12
|
-
import type { Ctx } from '@milkdown/kit/ctx'
|
|
13
|
-
import type { BlockEditFeatureConfig } from '../index'
|
|
14
|
-
import { getGroups } from './config'
|
|
15
|
-
|
|
16
|
-
export interface MenuProps {
|
|
17
|
-
ctx: Ctx
|
|
18
|
-
show: boolean
|
|
19
|
-
filter: string
|
|
20
|
-
hide: () => void
|
|
21
|
-
config?: BlockEditFeatureConfig
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const menuComponent: Component<MenuProps> = ({
|
|
25
|
-
show,
|
|
26
|
-
hide,
|
|
27
|
-
ctx,
|
|
28
|
-
filter,
|
|
29
|
-
config,
|
|
30
|
-
}) => {
|
|
31
|
-
const { groups, size } = useMemo(
|
|
32
|
-
() => getGroups(filter, config, ctx),
|
|
33
|
-
[filter]
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
const host = useHost()
|
|
37
|
-
const [hoverIndex, setHoverIndex] = useState(0)
|
|
38
|
-
|
|
39
|
-
const root = useMemo(() => host.current.getRootNode() as HTMLElement, [host])
|
|
40
|
-
|
|
41
|
-
const prevMousePosition = useRef({ x: -999, y: -999 })
|
|
42
|
-
|
|
43
|
-
const onMouseMove = useCallback((e: MouseEvent) => {
|
|
44
|
-
const prevPos = prevMousePosition.current
|
|
45
|
-
if (!prevPos) return
|
|
46
|
-
|
|
47
|
-
const { x, y } = e
|
|
48
|
-
prevPos.x = x
|
|
49
|
-
prevPos.y = y
|
|
50
|
-
}, [])
|
|
51
|
-
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
if (size === 0 && show) hide?.()
|
|
54
|
-
else if (hoverIndex >= size) setHoverIndex(0)
|
|
55
|
-
}, [size, show])
|
|
56
|
-
|
|
57
|
-
const onHover = useCallback(
|
|
58
|
-
(
|
|
59
|
-
index: number | ((prev: number) => number),
|
|
60
|
-
after?: (index: number) => void
|
|
61
|
-
) => {
|
|
62
|
-
setHoverIndex((prev) => {
|
|
63
|
-
const next = typeof index === 'function' ? index(prev) : index
|
|
64
|
-
|
|
65
|
-
after?.(next)
|
|
66
|
-
return next
|
|
67
|
-
})
|
|
68
|
-
},
|
|
69
|
-
[]
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
const scrollToIndex = useCallback((index: number) => {
|
|
73
|
-
const target = host.current.querySelector<HTMLElement>(
|
|
74
|
-
`[data-index="${index}"]`
|
|
75
|
-
)
|
|
76
|
-
const scrollRoot = host.current.querySelector<HTMLElement>('.menu-groups')
|
|
77
|
-
|
|
78
|
-
if (!target || !scrollRoot) return
|
|
79
|
-
|
|
80
|
-
scrollRoot.scrollTop = target.offsetTop - scrollRoot.offsetTop
|
|
81
|
-
}, [])
|
|
82
|
-
|
|
83
|
-
const runByIndex = useCallback(
|
|
84
|
-
(index: number) => {
|
|
85
|
-
const item = groups.flatMap((group) => group.items).at(index)
|
|
86
|
-
if (item && ctx) item.onRun(ctx)
|
|
87
|
-
|
|
88
|
-
hide?.()
|
|
89
|
-
},
|
|
90
|
-
[groups]
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
const onKeydown = useCallback(
|
|
94
|
-
(e: KeyboardEvent) => {
|
|
95
|
-
if (e.key === 'Escape') {
|
|
96
|
-
e.preventDefault()
|
|
97
|
-
hide?.()
|
|
98
|
-
return
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
if (e.key === 'ArrowDown') {
|
|
102
|
-
e.preventDefault()
|
|
103
|
-
return onHover(
|
|
104
|
-
(index) => (index < size - 1 ? index + 1 : index),
|
|
105
|
-
scrollToIndex
|
|
106
|
-
)
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (e.key === 'ArrowUp') {
|
|
110
|
-
e.preventDefault()
|
|
111
|
-
return onHover(
|
|
112
|
-
(index) => (index <= 0 ? index : index - 1),
|
|
113
|
-
scrollToIndex
|
|
114
|
-
)
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (e.key === 'ArrowLeft') {
|
|
118
|
-
e.preventDefault()
|
|
119
|
-
return onHover((index) => {
|
|
120
|
-
const group = groups.find(
|
|
121
|
-
(group) => group.range[0] <= index && group.range[1] > index
|
|
122
|
-
)
|
|
123
|
-
if (!group) return index
|
|
124
|
-
|
|
125
|
-
const prevGroup = groups[groups.indexOf(group) - 1]
|
|
126
|
-
if (!prevGroup) return index
|
|
127
|
-
|
|
128
|
-
return prevGroup.range[1] - 1
|
|
129
|
-
}, scrollToIndex)
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
if (e.key === 'ArrowRight') {
|
|
133
|
-
e.preventDefault()
|
|
134
|
-
return onHover((index) => {
|
|
135
|
-
const group = groups.find(
|
|
136
|
-
(group) => group.range[0] <= index && group.range[1] > index
|
|
137
|
-
)
|
|
138
|
-
if (!group) return index
|
|
139
|
-
|
|
140
|
-
const nextGroup = groups[groups.indexOf(group) + 1]
|
|
141
|
-
if (!nextGroup) return index
|
|
142
|
-
|
|
143
|
-
return nextGroup.range[0]
|
|
144
|
-
}, scrollToIndex)
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (e.key === 'Enter') {
|
|
148
|
-
e.preventDefault()
|
|
149
|
-
runByIndex(hoverIndex)
|
|
150
|
-
}
|
|
151
|
-
},
|
|
152
|
-
[hide, groups, hoverIndex]
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
const onMouseEnter = useCallback((index: number) => {
|
|
156
|
-
return (e: MouseEvent) => {
|
|
157
|
-
const prevPos = prevMousePosition.current
|
|
158
|
-
if (!prevPos) return
|
|
159
|
-
|
|
160
|
-
const { x, y } = e
|
|
161
|
-
if (x === prevPos.x && y === prevPos.y) return
|
|
162
|
-
|
|
163
|
-
onHover(index)
|
|
164
|
-
}
|
|
165
|
-
}, [])
|
|
166
|
-
|
|
167
|
-
useEffect(() => {
|
|
168
|
-
if (show) root.addEventListener('keydown', onKeydown, { capture: true })
|
|
169
|
-
else root.removeEventListener('keydown', onKeydown, { capture: true })
|
|
170
|
-
|
|
171
|
-
return () => {
|
|
172
|
-
root.removeEventListener('keydown', onKeydown, { capture: true })
|
|
173
|
-
}
|
|
174
|
-
}, [show, onKeydown])
|
|
175
|
-
|
|
176
|
-
return html`
|
|
177
|
-
<host onmousedown=${(e: MouseEvent) => e.preventDefault()}>
|
|
178
|
-
<nav class="tab-group">
|
|
179
|
-
<ul>
|
|
180
|
-
${groups.map(
|
|
181
|
-
(group) =>
|
|
182
|
-
html`<li
|
|
183
|
-
key=${group.key}
|
|
184
|
-
onmousedown=${() => onHover(group.range[0], scrollToIndex)}
|
|
185
|
-
class=${hoverIndex >= group.range[0] &&
|
|
186
|
-
hoverIndex < group.range[1]
|
|
187
|
-
? 'selected'
|
|
188
|
-
: ''}
|
|
189
|
-
>
|
|
190
|
-
${group.label}
|
|
191
|
-
</li>`
|
|
192
|
-
)}
|
|
193
|
-
</ul>
|
|
194
|
-
</nav>
|
|
195
|
-
<div class="menu-groups" onmousemove=${onMouseMove}>
|
|
196
|
-
${groups.map((group) => {
|
|
197
|
-
return html`
|
|
198
|
-
<div key=${group.key} class="menu-group">
|
|
199
|
-
<h6>${group.label}</h6>
|
|
200
|
-
<ul>
|
|
201
|
-
${group.items.map(
|
|
202
|
-
(item) =>
|
|
203
|
-
html`<li
|
|
204
|
-
key=${item.key}
|
|
205
|
-
data-index=${item.index}
|
|
206
|
-
class=${hoverIndex === item.index ? 'hover' : ''}
|
|
207
|
-
onmouseenter=${onMouseEnter(item.index)}
|
|
208
|
-
onmousedown=${() => {
|
|
209
|
-
host.current
|
|
210
|
-
.querySelector(`[data-index="${item.index}"]`)
|
|
211
|
-
?.classList.add('active')
|
|
212
|
-
}}
|
|
213
|
-
onmouseup=${() => {
|
|
214
|
-
host.current
|
|
215
|
-
.querySelector(`[data-index="${item.index}"]`)
|
|
216
|
-
?.classList.remove('active')
|
|
217
|
-
runByIndex(item.index)
|
|
218
|
-
}}
|
|
219
|
-
>
|
|
220
|
-
${item.icon}
|
|
221
|
-
<span>${item.label}</span>
|
|
222
|
-
</li>`
|
|
223
|
-
)}
|
|
224
|
-
</ul>
|
|
225
|
-
</div>
|
|
226
|
-
`
|
|
227
|
-
})}
|
|
228
|
-
</div>
|
|
229
|
-
</host>
|
|
230
|
-
`
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
menuComponent.props = {
|
|
234
|
-
ctx: Object,
|
|
235
|
-
config: Object,
|
|
236
|
-
show: Boolean,
|
|
237
|
-
filter: String,
|
|
238
|
-
hide: Function,
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
export const MenuElement = c(menuComponent)
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { c, h, html, type Component } from 'atomico'
|
|
2
|
-
import type { LatexConfig } from '..'
|
|
3
|
-
import type { EditorView } from '@milkdown/kit/prose/view'
|
|
4
|
-
|
|
5
|
-
type LatexEditComponentProps = {
|
|
6
|
-
config: Partial<LatexConfig>
|
|
7
|
-
innerView: EditorView
|
|
8
|
-
updateValue: () => void
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export const latexEditComponent: Component<LatexEditComponentProps> = ({
|
|
12
|
-
config,
|
|
13
|
-
innerView,
|
|
14
|
-
updateValue,
|
|
15
|
-
}) => {
|
|
16
|
-
const onMouseDown = (e: MouseEvent) => {
|
|
17
|
-
e.preventDefault()
|
|
18
|
-
updateValue?.()
|
|
19
|
-
}
|
|
20
|
-
return html`
|
|
21
|
-
<host>
|
|
22
|
-
<div class="container">
|
|
23
|
-
${innerView && h(innerView.dom, {})}
|
|
24
|
-
<button onmousedown=${onMouseDown}>
|
|
25
|
-
${config?.inlineEditConfirm?.()}
|
|
26
|
-
</button>
|
|
27
|
-
</div>
|
|
28
|
-
</host>
|
|
29
|
-
`
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
latexEditComponent.props = {
|
|
33
|
-
config: Object,
|
|
34
|
-
innerView: Object,
|
|
35
|
-
updateValue: Function,
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export const LatexInlineEditElement = c(latexEditComponent)
|