@prosekit/extensions 0.11.6 → 0.12.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/dist/{drop-indicator-E7nCfdnR.js → drop-indicator-BMvWUDXz.js} +2 -2
- package/dist/{drop-indicator-E7nCfdnR.js.map → drop-indicator-BMvWUDXz.js.map} +1 -1
- package/dist/{enter-rule-RdhEA900.js → enter-rule-D-p4ykfv.js} +3 -4
- package/dist/enter-rule-D-p4ykfv.js.map +1 -0
- package/dist/{file-DVUhe5KJ.js → file-DKoIIa7q.js} +3 -5
- package/dist/{file-DVUhe5KJ.js.map → file-DKoIIa7q.js.map} +1 -1
- package/dist/{index-DY6lIIYV.d.ts → index-DdjnBeho.d.ts} +2 -2
- package/dist/index-DdjnBeho.d.ts.map +1 -0
- package/dist/{input-rule-B17tpW4m.js → input-rule-COGr_GBb.js} +5 -8
- package/dist/input-rule-COGr_GBb.js.map +1 -0
- package/dist/{mark-rule-CGmswjQ_.js → mark-rule-v2E7B4C0.js} +2 -2
- package/dist/{mark-rule-CGmswjQ_.js.map → mark-rule-v2E7B4C0.js.map} +1 -1
- package/dist/{paste-rule-BIztzELg.js → paste-rule-qSz46pqD.js} +3 -4
- package/dist/{paste-rule-BIztzELg.js.map → paste-rule-qSz46pqD.js.map} +1 -1
- package/dist/prosekit-extensions-autocomplete.d.ts.map +1 -1
- package/dist/prosekit-extensions-autocomplete.js +1 -2
- package/dist/prosekit-extensions-autocomplete.js.map +1 -1
- package/dist/prosekit-extensions-blockquote.d.ts.map +1 -1
- package/dist/prosekit-extensions-blockquote.js +1 -1
- package/dist/prosekit-extensions-bold.d.ts.map +1 -1
- package/dist/prosekit-extensions-bold.js +1 -1
- package/dist/prosekit-extensions-code-block.d.ts +1 -1
- package/dist/prosekit-extensions-code-block.d.ts.map +1 -1
- package/dist/prosekit-extensions-code-block.js +4 -5
- package/dist/prosekit-extensions-code-block.js.map +1 -1
- package/dist/prosekit-extensions-code.d.ts.map +1 -1
- package/dist/prosekit-extensions-code.js +1 -1
- package/dist/prosekit-extensions-commit.d.ts.map +1 -1
- package/dist/prosekit-extensions-commit.js +2 -4
- package/dist/prosekit-extensions-commit.js.map +1 -1
- package/dist/prosekit-extensions-doc.d.ts.map +1 -1
- package/dist/prosekit-extensions-drop-cursor.d.ts.map +1 -1
- package/dist/prosekit-extensions-drop-indicator.d.ts.map +1 -1
- package/dist/prosekit-extensions-drop-indicator.js +1 -1
- package/dist/prosekit-extensions-enter-rule.d.ts.map +1 -1
- package/dist/prosekit-extensions-enter-rule.js +1 -1
- package/dist/prosekit-extensions-file.d.ts +1 -1
- package/dist/prosekit-extensions-file.js +1 -1
- package/dist/prosekit-extensions-hard-break.d.ts.map +1 -1
- package/dist/prosekit-extensions-heading.d.ts.map +1 -1
- package/dist/prosekit-extensions-heading.js +1 -1
- package/dist/prosekit-extensions-horizontal-rule.d.ts.map +1 -1
- package/dist/prosekit-extensions-horizontal-rule.js +1 -1
- package/dist/prosekit-extensions-image.d.ts +86 -30
- package/dist/prosekit-extensions-image.d.ts.map +1 -1
- package/dist/prosekit-extensions-image.js +93 -52
- package/dist/prosekit-extensions-image.js.map +1 -1
- package/dist/prosekit-extensions-input-rule.d.ts.map +1 -1
- package/dist/prosekit-extensions-input-rule.js +1 -1
- package/dist/prosekit-extensions-italic.d.ts.map +1 -1
- package/dist/prosekit-extensions-italic.js +1 -1
- package/dist/prosekit-extensions-link.d.ts.map +1 -1
- package/dist/prosekit-extensions-link.js +4 -4
- package/dist/prosekit-extensions-list.d.ts.map +1 -1
- package/dist/prosekit-extensions-list.js +37 -10
- package/dist/prosekit-extensions-list.js.map +1 -1
- package/dist/prosekit-extensions-loro.d.ts.map +1 -1
- package/dist/prosekit-extensions-mark-rule.d.ts.map +1 -1
- package/dist/prosekit-extensions-mark-rule.js +1 -1
- package/dist/prosekit-extensions-mention.d.ts.map +1 -1
- package/dist/prosekit-extensions-paragraph.d.ts.map +1 -1
- package/dist/prosekit-extensions-paste-rule.d.ts.map +1 -1
- package/dist/prosekit-extensions-paste-rule.js +1 -1
- package/dist/prosekit-extensions-placeholder.d.ts.map +1 -1
- package/dist/prosekit-extensions-placeholder.js +3 -4
- package/dist/prosekit-extensions-placeholder.js.map +1 -1
- package/dist/prosekit-extensions-search.d.ts.map +1 -1
- package/dist/prosekit-extensions-search.js +1 -2
- package/dist/prosekit-extensions-search.js.map +1 -1
- package/dist/prosekit-extensions-strike.d.ts.map +1 -1
- package/dist/prosekit-extensions-strike.js +1 -1
- package/dist/prosekit-extensions-table.d.ts.map +1 -1
- package/dist/prosekit-extensions-table.js +2 -2
- package/dist/prosekit-extensions-text-align.d.ts.map +1 -1
- package/dist/prosekit-extensions-text.d.ts.map +1 -1
- package/dist/prosekit-extensions-underline.d.ts.map +1 -1
- package/dist/prosekit-extensions-yjs.d.ts.map +1 -1
- package/dist/{shiki-highlighter-chunk-Cwu1Jr9o.d.ts → shiki-highlighter-chunk-DcY3Ud8v.d.ts} +2 -2
- package/dist/shiki-highlighter-chunk-DcY3Ud8v.d.ts.map +1 -0
- package/dist/shiki-highlighter-chunk.d.ts +1 -1
- package/dist/{table-BNwuK7xg.js → table-BLjD91VB.js} +11 -20
- package/dist/{table-BNwuK7xg.js.map → table-BLjD91VB.js.map} +1 -1
- package/package.json +14 -14
- package/src/file/file-upload.ts +2 -10
- package/src/image/image-commands/insert-image.ts +14 -0
- package/src/image/image-commands/upload-image.ts +137 -0
- package/src/image/image-commands.ts +7 -12
- package/src/image/image-upload-handler.ts +10 -70
- package/src/image/index.ts +8 -3
- package/src/link/index.spec.ts +1 -1
- package/src/list/list-serializer.ts +57 -3
- package/src/list/list.spec.ts +129 -0
- package/src/testing/keyboard.ts +1 -1
- package/src/testing/markdown.ts +3 -0
- package/dist/enter-rule-RdhEA900.js.map +0 -1
- package/dist/index-DY6lIIYV.d.ts.map +0 -1
- package/dist/input-rule-B17tpW4m.js.map +0 -1
- package/dist/shiki-highlighter-chunk-Cwu1Jr9o.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-image.js","names":["width: number | null","height: number | null","defaultOnError: ImageUploadErrorHandler","attrs: ImageAttrs","handlePaste: FilePasteHandler","handleDrop: FileDropHandler","positions: number[]"],"sources":["../src/image/image-commands.ts","../src/image/image-spec.ts","../src/image/image.ts","../src/image/image-upload-handler.ts"],"sourcesContent":["import {\n defineCommands,\n insertNode,\n type Extension,\n} from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\n\nimport type { ImageAttrs } from './image-spec'\n\n/**\n * @internal\n */\nexport type ImageCommandsExtension = Extension<{\n Commands: {\n insertImage: [attrs?: ImageAttrs]\n }\n}>\n\n/**\n * Returns a command that inserts an image node with the given attributes at the\n * current selection position.\n *\n * @public\n */\nexport function insertImage(attrs?: ImageAttrs): Command {\n return insertNode({ type: 'image', attrs })\n}\n\n/**\n * @internal\n */\nexport function defineImageCommands(): ImageCommandsExtension {\n return defineCommands({\n insertImage,\n })\n}\n","import {\n defineNodeSpec,\n type Extension,\n} from '@prosekit/core'\n\n/**\n * @public\n */\nexport interface ImageAttrs {\n src?: string | null\n width?: number | null\n height?: number | null\n}\n\n/**\n * @internal\n */\nexport type ImageSpecExtension = Extension<{\n Nodes: {\n image: ImageAttrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineImageSpec(): ImageSpecExtension {\n return defineNodeSpec({\n name: 'image',\n attrs: {\n src: { default: null, validate: 'string|null' },\n width: { default: null, validate: 'number|null' },\n height: { default: null, validate: 'number|null' },\n },\n group: 'block',\n defining: true,\n draggable: true,\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (element): ImageAttrs => {\n if (typeof element === 'string') {\n return { src: null }\n }\n\n const src = element.getAttribute('src') || null\n\n let width: number | null = null\n let height: number | null = null\n\n const rect = element.getBoundingClientRect()\n if (rect.width > 0 && rect.height > 0) {\n width = rect.width\n height = rect.height\n } else if (\n element instanceof HTMLImageElement\n && element.naturalWidth > 0\n && element.naturalHeight > 0\n ) {\n width = element.naturalWidth\n height = element.naturalHeight\n }\n return { src, width, height }\n },\n },\n ],\n toDOM(node) {\n const attrs = node.attrs as ImageAttrs\n return ['img', attrs]\n },\n })\n}\n","import {\n union,\n type Union,\n} from '@prosekit/core'\n\nimport {\n defineImageCommands,\n type ImageCommandsExtension,\n} from './image-commands'\nimport {\n defineImageSpec,\n type ImageSpecExtension,\n} from './image-spec'\n\n/**\n * @internal\n */\nexport type ImageExtension = Union<[ImageSpecExtension, ImageCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineImage(): ImageExtension {\n return union(defineImageSpec(), defineImageCommands())\n}\n","import {\n insertNode,\n ProseKitError,\n union,\n type PlainExtension,\n} from '@prosekit/core'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport {\n defineFileDropHandler,\n defineFilePasteHandler,\n UploadTask,\n type FileDropHandler,\n type FileDropHandlerOptions,\n type FilePasteHandler,\n type FilePasteHandlerOptions,\n type Uploader,\n} from '../file'\n\nimport type { ImageAttrs } from './image-spec'\n\n/**\n * A predicate to determine if the pasted file should be uploaded and inserted as an image.\n */\nexport type ImageCanPastePredicate = (options: FilePasteHandlerOptions) => boolean\n\n/**\n * A predicate to determine if the dropped file should be uploaded and inserted as an image.\n */\nexport type ImageCanDropPredicate = (options: FileDropHandlerOptions) => boolean\n\n/**\n * A handler to be called when an error occurs during the upload.\n */\nexport type ImageUploadErrorHandler = (options: ImageUploadErrorHandlerOptions) => void\n\n/**\n * Options for the {@link ImageUploadErrorHandler} callback.\n */\nexport interface ImageUploadErrorHandlerOptions {\n /**\n * The file that was uploaded.\n */\n file: File\n /**\n * The error that occurred during the upload.\n */\n error: unknown\n /**\n * The upload task that was used to upload the file.\n */\n uploadTask: UploadTask<string>\n}\n\n/**\n * Options for {@link defineImageUploadHandler}.\n */\nexport interface ImageUploadHandlerOptions {\n /**\n * The uploader used to upload the file. It should return a promise that\n * resolves to the URL of the uploaded image.\n */\n uploader: Uploader<string>\n /**\n * A predicate to determine if the pasted file should be uploaded and inserted as an image.\n * If not provided, it defaults to only allowing paste of files with a content type starting with `image/`.\n */\n canPaste?: ImageCanPastePredicate\n /**\n * A predicate to determine if the dropped file should be uploaded and inserted as an image.\n * If not provided, it defaults to only allowing drop of files with a content type starting with `image/`.\n */\n canDrop?: ImageCanDropPredicate\n /**\n * A handler to be called when an error occurs during the upload.\n * If not provided, it defaults to logging the error to the console.\n */\n onError?: ImageUploadErrorHandler\n}\n\nfunction defaultCanUpload({ file }: { file: File }): boolean {\n // Only handle image files by default\n return file.type.startsWith('image/')\n}\n\nconst defaultOnError: ImageUploadErrorHandler = ({ error }) => {\n console.error('[prosekit] Failed to upload image:', error)\n}\n\n/**\n * Returns an extension that handles image file uploads when pasting or dropping\n * images into the editor.\n *\n * @param options\n */\nexport function defineImageUploadHandler({\n uploader,\n canPaste = defaultCanUpload,\n canDrop = defaultCanUpload,\n onError = defaultOnError,\n}: ImageUploadHandlerOptions): PlainExtension {\n const handleInsert = (view: EditorView, file: File, pos?: number): boolean => {\n const uploadTask = new UploadTask({ file, uploader })\n const objectURL = uploadTask.objectURL\n const attrs: ImageAttrs = { src: objectURL }\n uploadTask.finished.then((resultURL) => {\n if (view.isDestroyed) {\n return\n } else if (typeof resultURL !== 'string') {\n const error = new ProseKitError(`Unexpected upload result. Expected a string but got ${typeof resultURL}`)\n onError({ file, error, uploadTask })\n } else {\n replaceImageURL(view, objectURL, resultURL)\n UploadTask.delete(objectURL)\n }\n }).catch((error) => {\n onError({ file, error, uploadTask })\n })\n const command = insertNode({ type: 'image', attrs, pos })\n return command(view.state, view.dispatch, view)\n }\n\n const handlePaste: FilePasteHandler = (options) => {\n if (!canPaste(options)) return false\n return handleInsert(options.view, options.file)\n }\n\n const handleDrop: FileDropHandler = (options) => {\n if (!canDrop(options)) return false\n return handleInsert(options.view, options.file, options.pos)\n }\n\n return union(\n defineFilePasteHandler(handlePaste),\n defineFileDropHandler(handleDrop),\n )\n}\n\nfunction replaceImageURL(view: EditorView, oldURL: string, newURL: string) {\n const positions: number[] = []\n view.state.doc.descendants((node, pos) => {\n if (node.type.name === 'image') {\n const attrs = node.attrs as ImageAttrs\n if (attrs.src === oldURL) {\n positions.push(pos)\n }\n }\n })\n if (positions.length > 0) {\n const tr = view.state.tr\n for (const pos of positions) {\n tr.setNodeAttribute(pos, 'src', newURL)\n }\n view.dispatch(tr)\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-image.js","names":["attrs: ImageAttrs","positions: number[]","width: number | null","height: number | null","defaultOnError: ImageUploadErrorHandler","handlePaste: FilePasteHandler","handleDrop: FileDropHandler"],"sources":["../src/image/image-commands/insert-image.ts","../src/image/image-commands/upload-image.ts","../src/image/image-commands.ts","../src/image/image-spec.ts","../src/image/image.ts","../src/image/image-upload-handler.ts"],"sourcesContent":["import { insertNode } from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\n\nimport type { ImageAttrs } from '../image-spec'\n\n/**\n * Returns a command that inserts an image node with the given attributes at the\n * current selection position.\n *\n * @public\n */\nexport function insertImage(attrs?: ImageAttrs): Command {\n return insertNode({ type: 'image', attrs })\n}\n","import {\n insertNode,\n ProseKitError,\n} from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport {\n UploadTask,\n type Uploader,\n} from '../../file'\nimport type { ImageAttrs } from '../image-spec'\n\n/**\n * Options for {@link uploadImage}.\n *\n * @public\n */\nexport interface UploadImageOptions {\n /**\n * The uploader used to upload the file. It should return a promise that\n * resolves to the URL of the uploaded image.\n */\n uploader: Uploader<string>\n /**\n * The file that will be uploaded.\n */\n file: File\n /**\n * The position where the image should be inserted. If not provided, the\n * image is inserted at the current selection.\n */\n pos?: number\n /**\n * A handler to be called when an error occurs during the upload.\n */\n onError?: ImageUploadErrorHandler\n}\n\n/**\n * Options for the {@link ImageUploadErrorHandler} callback.\n *\n * @public\n */\nexport interface ImageUploadErrorHandlerOptions {\n /**\n * The file that was uploaded.\n */\n file: File\n /**\n * The error that occurred during the upload.\n */\n error: unknown\n /**\n * The upload task that was used to upload the file.\n */\n uploadTask: UploadTask<string>\n}\n\n/**\n * A handler to be called when an error occurs during the upload.\n *\n * @public\n */\nexport type ImageUploadErrorHandler = (options: ImageUploadErrorHandlerOptions) => void\n\n/**\n * Returns a command that uploads an image file and inserts an image node with a\n * temporary URL which is replaced once the upload completes.\n *\n * @param options\n *\n * @public\n */\nexport function uploadImage({ uploader, file, pos, onError }: UploadImageOptions): Command {\n return (state, dispatch, view) => {\n const uploadTask = new UploadTask({ file, uploader })\n const objectURL = uploadTask.objectURL\n const attrs: ImageAttrs = { src: objectURL }\n\n uploadTask.finished\n .then((resultURL) => {\n if (view && view.isDestroyed) {\n return\n } else if (typeof resultURL !== 'string') {\n const error = new ProseKitError(\n `Unexpected upload result. Expected a string but got ${typeof resultURL}`,\n )\n onError?.({ file, error, uploadTask })\n } else if (!view) {\n const error = new ProseKitError(\n 'View must be available to replace the image URL',\n )\n onError?.({ file, error, uploadTask })\n } else {\n replaceImageURL(view, objectURL, resultURL)\n UploadTask.delete(objectURL)\n }\n })\n .catch((error) => {\n onError?.({ file, error, uploadTask })\n })\n\n return insertNode({ type: 'image', attrs, pos })(state, dispatch, view)\n }\n}\n\n/**\n * Replaces the temporary image URL with the final uploaded URL.\n *\n * @internal\n */\nexport function replaceImageURL(\n view: EditorView,\n oldURL: string,\n newURL: string,\n): void {\n const positions: number[] = []\n view.state.doc.descendants((node, pos) => {\n if (node.type.name === 'image') {\n const attrs = node.attrs as ImageAttrs\n if (attrs.src === oldURL) {\n positions.push(pos)\n }\n }\n })\n\n if (positions.length === 0) {\n return\n }\n\n const tr = view.state.tr\n for (const pos of positions) {\n tr.setNodeAttribute(pos, 'src', newURL)\n }\n view.dispatch(tr)\n}\n","import {\n defineCommands,\n type Extension,\n} from '@prosekit/core'\n\nimport { insertImage } from './image-commands/insert-image'\nimport {\n uploadImage,\n type UploadImageOptions,\n} from './image-commands/upload-image'\nimport type { ImageAttrs } from './image-spec'\n\n/**\n * @internal\n */\nexport type ImageCommandsExtension = Extension<{\n Commands: {\n insertImage: [attrs?: ImageAttrs]\n uploadImage: [options: UploadImageOptions]\n }\n}>\n\n/**\n * @internal\n */\nexport function defineImageCommands(): ImageCommandsExtension {\n return defineCommands({\n insertImage,\n uploadImage,\n })\n}\n","import {\n defineNodeSpec,\n type Extension,\n} from '@prosekit/core'\n\n/**\n * @public\n */\nexport interface ImageAttrs {\n src?: string | null\n width?: number | null\n height?: number | null\n}\n\n/**\n * @internal\n */\nexport type ImageSpecExtension = Extension<{\n Nodes: {\n image: ImageAttrs\n }\n}>\n\n/**\n * @internal\n */\nexport function defineImageSpec(): ImageSpecExtension {\n return defineNodeSpec({\n name: 'image',\n attrs: {\n src: { default: null, validate: 'string|null' },\n width: { default: null, validate: 'number|null' },\n height: { default: null, validate: 'number|null' },\n },\n group: 'block',\n defining: true,\n draggable: true,\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (element): ImageAttrs => {\n if (typeof element === 'string') {\n return { src: null }\n }\n\n const src = element.getAttribute('src') || null\n\n let width: number | null = null\n let height: number | null = null\n\n const rect = element.getBoundingClientRect()\n if (rect.width > 0 && rect.height > 0) {\n width = rect.width\n height = rect.height\n } else if (\n element instanceof HTMLImageElement\n && element.naturalWidth > 0\n && element.naturalHeight > 0\n ) {\n width = element.naturalWidth\n height = element.naturalHeight\n }\n return { src, width, height }\n },\n },\n ],\n toDOM(node) {\n const attrs = node.attrs as ImageAttrs\n return ['img', attrs]\n },\n })\n}\n","import {\n union,\n type Union,\n} from '@prosekit/core'\n\nimport {\n defineImageCommands,\n type ImageCommandsExtension,\n} from './image-commands'\nimport {\n defineImageSpec,\n type ImageSpecExtension,\n} from './image-spec'\n\n/**\n * @internal\n */\nexport type ImageExtension = Union<[ImageSpecExtension, ImageCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineImage(): ImageExtension {\n return union(defineImageSpec(), defineImageCommands())\n}\n","import {\n union,\n type PlainExtension,\n} from '@prosekit/core'\n\nimport {\n defineFileDropHandler,\n defineFilePasteHandler,\n type FileDropHandler,\n type FileDropHandlerOptions,\n type FilePasteHandler,\n type FilePasteHandlerOptions,\n type Uploader,\n} from '../file'\n\nimport {\n uploadImage,\n type ImageUploadErrorHandler,\n} from './image-commands/upload-image'\n\n/**\n * A predicate to determine if the pasted file should be uploaded and inserted as an image.\n */\nexport type ImageCanPastePredicate = (options: FilePasteHandlerOptions) => boolean\n\n/**\n * A predicate to determine if the dropped file should be uploaded and inserted as an image.\n */\nexport type ImageCanDropPredicate = (options: FileDropHandlerOptions) => boolean\n\n/**\n * A handler to be called when an error occurs during the upload.\n */\nexport interface ImageUploadHandlerOptions {\n /**\n * The uploader used to upload the file. It should return a promise that\n * resolves to the URL of the uploaded image.\n */\n uploader: Uploader<string>\n /**\n * A predicate to determine if the pasted file should be uploaded and inserted as an image.\n * If not provided, it defaults to only allowing paste of files with a content type starting with `image/`.\n */\n canPaste?: ImageCanPastePredicate\n /**\n * A predicate to determine if the dropped file should be uploaded and inserted as an image.\n * If not provided, it defaults to only allowing drop of files with a content type starting with `image/`.\n */\n canDrop?: ImageCanDropPredicate\n /**\n * A handler to be called when an error occurs during the upload.\n * If not provided, it defaults to logging the error to the console.\n */\n onError?: ImageUploadErrorHandler\n}\n\nfunction defaultCanUpload({ file }: { file: File }): boolean {\n // Only handle image files by default\n return file.type.startsWith('image/')\n}\n\nconst defaultOnError: ImageUploadErrorHandler = ({ error }) => {\n console.error('[prosekit] Failed to upload image:', error)\n}\n\n/**\n * Returns an extension that handles image file uploads when pasting or dropping\n * images into the editor.\n *\n * @param options\n */\nexport function defineImageUploadHandler({\n uploader,\n canPaste = defaultCanUpload,\n canDrop = defaultCanUpload,\n onError = defaultOnError,\n}: ImageUploadHandlerOptions): PlainExtension {\n const handlePaste: FilePasteHandler = (options) => {\n if (!canPaste(options)) return false\n const { view, file } = options\n const command = uploadImage({ uploader, file, onError })\n return command(view.state, view.dispatch, view)\n }\n\n const handleDrop: FileDropHandler = (options) => {\n if (!canDrop(options)) return false\n const { view, file, pos } = options\n const command = uploadImage({ uploader, file, onError, pos })\n return command(view.state, view.dispatch, view)\n }\n\n return union(\n defineFilePasteHandler(handlePaste),\n defineFileDropHandler(handleDrop),\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-input-rule.d.ts","names":[],"sources":["../src/input-rule/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAiCA
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-input-rule.d.ts","names":[],"sources":["../src/input-rule/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAiCA;AASA;;;;AAgBkC,iBAzBlB,eAAA,CAyBkB,IAAA,EAzBI,SAyBJ,CAAA,EAzBgB,cAyBhB;;;AAalC;;;AAGE,UAhCe,oBAAA,CAgCf;EACA;;;;AAsDF;EAgBgB,KAAA,EAjGP,MAiGO;EACd;;;EASO,IAAA,EAAA,MAAA,GAtGQ,QAsGR;EAKQ;;;EAKsC,KAAA,CAAA,EA3G7C,KA2G6C,GAAA,IAAA,GAAA,CAAA,CAAA,KAAA,EA3GrB,gBA2GqB,EAAA,GA3GA,KA2GA,GAAA,IAAA,CAAA;EACnD;;AAiBJ;;;EAGE,UAAA,CAAA,EAAA,OAAA;;;;;AAkBgC,iBArIlB,mBAAA,CAqIkB;EAAA,KAAA;EAAA,IAAA;EAAA,KAAA;EAAA;AAAA,CAAA,EAhI/B,oBAgI+B,CAAA,EAhIR,SAgIQ;;;;;;;iBA3ElB,mBAAA,UACL,uBACR;;;;;;;;;;;iBAca,wBAAA;;;;;;;;;;SAUP;;;;iBAKQ;;;;UAKP,wBAAwB,qBAAqB;IACnD;;;;;;;;;;;iBAiBY,uBAAA;;;;;;;;;;;SAWP;;;;iBAKQ;;;;UAKP,wBAAwB,qBAAqB;;;;;;;;;iBAUtC,wBAAwB;IACrC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as defineWrappingInputRule, i as defineTextBlockInputRule, n as defineInputRule, r as defineMarkInputRule, t as createMarkInputRule } from "./input-rule-COGr_GBb.js";
|
|
2
2
|
|
|
3
3
|
export { createMarkInputRule, defineInputRule, defineMarkInputRule, defineTextBlockInputRule, defineWrappingInputRule };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-italic.d.ts","names":[],"sources":["../src/italic/italic-commands.ts","../src/italic/italic-spec.ts","../src/italic/italic.ts","../src/italic/italic-input-rule.ts","../src/italic/italic-keymap.ts"],"sourcesContent":[],"mappings":";;;;;;;AASY,KAAA,uBAAA,GAA0B,SAAA,CAAA;EAStB,QAAA,EAAA;;;;ACThB
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-italic.d.ts","names":[],"sources":["../src/italic/italic-commands.ts","../src/italic/italic-spec.ts","../src/italic/italic.ts","../src/italic/italic-input-rule.ts","../src/italic/italic-keymap.ts"],"sourcesContent":[],"mappings":";;;;;;;AASY,KAAA,uBAAA,GAA0B,SAAA,CAAA;EAStB,QAAA,EAAA;;;;ACThB;AASA;;iBDAgB,oBAAA,CAAA,GAAwB;;;;;AATxC;AASgB,KCTJ,mBAAA,GAAsB,SDSM,CAAA;;YCP5B;;AAFZ,CAAA,CAAA;AASA;;;iBAAgB,gBAAA,CAAA,GAAoB;;;;ADTpC;AASA;KECY,eAAA,GAAkB,OAC3B,qBAAqB,wBDXxB,CAAA;AASA;;;iBCQgB,YAAA,CAAA,GAAgB;;;;;;AFjBpB,iBGCI,qBAAA,CAAA,CHDsB,EGCG,cHDM;;;;;;AAAnC,iBIAI,kBAAA,CAAA,CJAsB,EIAA,cJAS"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineMarkInputRule } from "./input-rule-
|
|
1
|
+
import { r as defineMarkInputRule } from "./input-rule-COGr_GBb.js";
|
|
2
2
|
import { canUseRegexLookbehind, defineCommands, defineKeymap, defineMarkSpec, toggleMark, union } from "@prosekit/core";
|
|
3
3
|
|
|
4
4
|
//#region src/italic/italic-commands.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-link.d.ts","names":[],"sources":["../src/link/link-paste-rule.ts","../src/link/link-types.ts","../src/link/index.ts"],"sourcesContent":[],"mappings":";;;;;;AAUA;iBAAgB,mBAAA,CAAA,GAAuB;;;;;;AAAvB,UCPC,SAAA,CDOkB;;;;ACPnC;;;;;AAAA;KC6BY,iBAAA,GAAoB;;UAEtB;EAFE,CAAA;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-link.d.ts","names":[],"sources":["../src/link/link-paste-rule.ts","../src/link/link-types.ts","../src/link/index.ts"],"sourcesContent":[],"mappings":";;;;;;AAUA;iBAAgB,mBAAA,CAAA,GAAuB;;;;;;AAAvB,UCPC,SAAA,CDOkB;;;;ACPnC;;;;;AAAA;KC6BY,iBAAA,GAAoB;;UAEtB;EAFE,CAAA;AASZ,CAAA,CAAA;AA+BA;;;AAAoC,iBA/BpB,cAAA,CAAA,CA+BoB,EA/BF,iBA+BE;;AASpC;AAcA;AAiBgB,KAxCJ,qBAAA,GAAwB,SAwCG,CAAA;EAmBvB,QAAA,EAAA;IAWJ,OAAA,EAAA,CAAA,KAAa,EApEJ,SAoEI,CAAA;IAAU,UAAA,EAAA,EAAA;IAAmB,UAAA,EAAA,CAAA,KAAA,EAlE9B,SAkE8B,CAAA;IAA1B,UAAA,EAAA,EAAA;EAAK,CAAA;AAKjC,CAAA,CAAA;iBAlEgB,kBAAA,CAAA,GAAsB;;;;;;iBActB,mBAAA,CAAA,GAAuB;;;;;;iBAiBvB,mBAAA,CAAA,GAAuB;;;;;;iBAmBvB,kBAAA,CAAA,GAAsB;;;;KAW1B,aAAA,GAAgB,OAAO,mBAAmB;;;;iBAKtC,UAAA,CAAA,GAAc"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { defineInputRule } from "./input-rule-
|
|
2
|
-
import { defineEnterRule } from "./enter-rule-
|
|
3
|
-
import { defineMarkRule } from "./mark-rule-
|
|
4
|
-
import { defineMarkPasteRule } from "./paste-rule-
|
|
1
|
+
import { n as defineInputRule } from "./input-rule-COGr_GBb.js";
|
|
2
|
+
import { t as defineEnterRule } from "./enter-rule-D-p4ykfv.js";
|
|
3
|
+
import { t as defineMarkRule } from "./mark-rule-v2E7B4C0.js";
|
|
4
|
+
import { t as defineMarkPasteRule } from "./paste-rule-qSz46pqD.js";
|
|
5
5
|
import { addMark, defineCommands, defineMarkSpec, expandMark, removeMark, toggleMark, union } from "@prosekit/core";
|
|
6
6
|
import { InputRule } from "@prosekit/pm/inputrules";
|
|
7
7
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-list.d.ts","names":[],"sources":["../src/list/list-commands.ts","../src/list/list-types.ts","../src/list/list-spec.ts","../src/list/list.ts","../src/list/list-input-rules.ts","../src/list/list-keymap.ts","../src/list/list-plugins.ts","../src/list/list-serializer.ts"],"sourcesContent":[],"mappings":";;;;;;;AA6BA;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-list.d.ts","names":[],"sources":["../src/list/list-commands.ts","../src/list/list-types.ts","../src/list/list-spec.ts","../src/list/list.ts","../src/list/list-input-rules.ts","../src/list/list-keymap.ts","../src/list/list-plugins.ts","../src/list/list-serializer.ts"],"sourcesContent":[],"mappings":";;;;;;;AA6BA;AAE2B,KAFf,qBAAA,GAAwB,SAET,CAAA;EACA,QAAA,EAAA;IAGK,UAAA,EAAA,CAAA,OAAA,GAJL,mBAIK,CAAA;IACL,UAAA,EAAA,CAAA,OAAA,GAJA,mBAIA,CAAA;IACF,QAAA,EAAA,CAAA,SAAA,EAAA,IAAA,GAAA,MAAA,CAAA;IACA,SAAA,EAAA,EAAA;IACA,eAAA,EAAA,CAAA,OAAA,GAJO,wBAIP,CAAA;IAVW,UAAA,EAAA,CAAA,OAAA,GAOT,mBAPS,CAAA;IAAS,UAAA,EAAA,CAAA,KAAA,GAQpB,cARoB,CAAA;IAmB7B,UAAA,EAAA,CAAA,KAAkB,GAVT,cAUa,CAAA;yBATb;;;AClCzB;;;;ACcA;AA8BgB,iBFDA,kBAAA,CAAA,CECkB,EFDI,qBECa;;;;;;;AFpBnD;AAE2B,UC1BV,SAAA,CD0BU;EACA;;;EAKF,IAAA,CAAA,EAAA,QAAA,GAAA,SAAA,GAAA,MAAA,GAAA,QAAA;EACA;;;EAToB,KAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAmB7B;;;;EC3CC;;;;ACcjB;;;;;AFUA;AAE2B,KEZf,iBAAA,GAAoB,SFYL,CAAA;EACA,KAAA,EAAA;IAGK,IAAA,EEdtB,SFcsB;EACL,CAAA;CACF,CAAA;;;;AARoB,iBEoB7B,cAAA,CAAA,CFpB6B,EEoBX,iBFpBW;;;;AAA7C;;AAG2B,KGVf,aAAA,GAAgB,KHUD,CAAA,CGVQ,iBHUR,EGV2B,qBHU3B,CAAA,CAAA;;;;AAMF,iBGXT,UAAA,CAAA,CHWS,EGXK,aHWL;;;;;;AATb,iBIlBI,oBAAA,CAAA,CJkBiB,EIlBO,SJkBP;;;;;;AAAjC;;AAG2B,iBKaX,gBAAA,CAAA,CLbW,EKaS,cLbT;;;;;;AAHf,iBMGI,iBAAA,CAAA,CNHiB,EMGI,cNHJ;;;;;;AAArB,iBOfI,oBAAA,CAAA,CPeiB,EOfO,cPeP"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { defineInputRule } from "./input-rule-
|
|
2
|
-
import { defineDropIndicator } from "./drop-indicator-
|
|
1
|
+
import { n as defineInputRule } from "./input-rule-COGr_GBb.js";
|
|
2
|
+
import { t as defineDropIndicator } from "./drop-indicator-BMvWUDXz.js";
|
|
3
3
|
import { defineClipboardSerializer, defineCommands, defineKeymap, defineNodeSpec, definePlugin, insertNode, union } from "@prosekit/core";
|
|
4
4
|
import { Plugin } from "@prosekit/pm/state";
|
|
5
5
|
import { chainCommands, deleteSelection } from "@prosekit/pm/commands";
|
|
6
|
-
import { ListDOMSerializer, createDedentListCommand, createIndentListCommand, createListEventPlugin, createListRenderingPlugin, createListSpec, createMoveListCommand, createSafariInputMethodWorkaroundPlugin, createSplitListCommand, createToggleCollapsedCommand, createToggleListCommand, createUnwrapListCommand, createWrapInListCommand, deleteCommand, enterCommand, joinCollapsedListBackward, joinListElements, joinListUp, listInputRules, listToDOM, protectCollapsed, unwrapListSlice } from "prosemirror-flat-list";
|
|
6
|
+
import { ListDOMSerializer, createDedentListCommand, createIndentListCommand, createListEventPlugin, createListRenderingPlugin, createListSpec, createMoveListCommand, createSafariInputMethodWorkaroundPlugin, createSplitListCommand, createToggleCollapsedCommand, createToggleListCommand, createUnwrapListCommand, createWrapInListCommand, deleteCommand, enterCommand, findCheckboxInListItem, joinCollapsedListBackward, joinListElements, joinListUp, listInputRules, listToDOM, protectCollapsed, unwrapListSlice } from "prosemirror-flat-list";
|
|
7
7
|
import { isElementLike } from "@ocavue/utils";
|
|
8
8
|
|
|
9
9
|
//#region src/list/list-commands.ts
|
|
@@ -117,14 +117,13 @@ function defineListSerializer() {
|
|
|
117
117
|
return defineClipboardSerializer({
|
|
118
118
|
serializeFragmentWrapper: (fn) => {
|
|
119
119
|
return (...args) => {
|
|
120
|
-
|
|
121
|
-
return joinListElements(dom);
|
|
120
|
+
return normalizeElementTree(joinListElements(fn(...args)));
|
|
122
121
|
};
|
|
123
122
|
},
|
|
124
123
|
serializeNodeWrapper: (fn) => {
|
|
125
124
|
return (...args) => {
|
|
126
125
|
const dom = fn(...args);
|
|
127
|
-
return isElementLike(dom) ? joinListElements(dom) : dom;
|
|
126
|
+
return isElementLike(dom) ? normalizeElementTree(joinListElements(dom)) : dom;
|
|
128
127
|
};
|
|
129
128
|
},
|
|
130
129
|
nodesFromSchemaWrapper: (fn) => {
|
|
@@ -133,14 +132,43 @@ function defineListSerializer() {
|
|
|
133
132
|
...fn(...args),
|
|
134
133
|
list: (node) => listToDOM({
|
|
135
134
|
node,
|
|
136
|
-
nativeList: true
|
|
137
|
-
getMarkers: () => null
|
|
135
|
+
nativeList: true
|
|
138
136
|
})
|
|
139
137
|
};
|
|
140
138
|
};
|
|
141
139
|
}
|
|
142
140
|
});
|
|
143
141
|
}
|
|
142
|
+
function normalizeElementTree(node) {
|
|
143
|
+
if (isElementLike(node)) normalizeTaskList(node);
|
|
144
|
+
for (const child of node.children) normalizeElementTree(child);
|
|
145
|
+
return node;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Modifies the DOM tree for task lists to ensure that the output HTML can be
|
|
149
|
+
* parsed by rehype-remark.
|
|
150
|
+
*/
|
|
151
|
+
function normalizeTaskList(node) {
|
|
152
|
+
if (!node.classList.contains("prosemirror-flat-list") || node.getAttribute("data-list-kind") !== "task" || node.children.length !== 2) return;
|
|
153
|
+
const marker = node.children.item(0);
|
|
154
|
+
if (!marker || !marker.classList.contains("list-marker")) return;
|
|
155
|
+
const checkbox = findCheckboxInListItem(marker);
|
|
156
|
+
if (!checkbox) return;
|
|
157
|
+
const content = node.children.item(1);
|
|
158
|
+
if (!content || !content.classList.contains("list-content")) return;
|
|
159
|
+
const textBlock = content.children.item(0);
|
|
160
|
+
if (!textBlock || ![
|
|
161
|
+
"P",
|
|
162
|
+
"H1",
|
|
163
|
+
"H2",
|
|
164
|
+
"H3",
|
|
165
|
+
"H4",
|
|
166
|
+
"H5",
|
|
167
|
+
"H6"
|
|
168
|
+
].includes(textBlock.tagName)) return;
|
|
169
|
+
node.replaceChildren(...content.children);
|
|
170
|
+
textBlock.prepend(checkbox);
|
|
171
|
+
}
|
|
144
172
|
|
|
145
173
|
//#endregion
|
|
146
174
|
//#region src/list/list-spec.ts
|
|
@@ -158,9 +186,8 @@ function getMarkers(node) {
|
|
|
158
186
|
* @internal
|
|
159
187
|
*/
|
|
160
188
|
function defineListSpec() {
|
|
161
|
-
const spec = createListSpec();
|
|
162
189
|
return defineNodeSpec({
|
|
163
|
-
...
|
|
190
|
+
...createListSpec(),
|
|
164
191
|
toDOM: (node) => {
|
|
165
192
|
return listToDOM({
|
|
166
193
|
node,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-list.js","names":["onDrag: DragEventHandler"],"sources":["../src/list/list-commands.ts","../src/list/list-drop-indicator.ts","../src/list/list-input-rules.ts","../src/list/list-keymap.ts","../src/list/list-plugins.ts","../src/list/list-serializer.ts","../src/list/list-spec.ts","../src/list/list.ts"],"sourcesContent":["import {\n defineCommands,\n insertNode,\n type Extension,\n} from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\nimport {\n createDedentListCommand as dedentList,\n createIndentListCommand as indentList,\n createMoveListCommand as moveList,\n createSplitListCommand as splitList,\n createToggleCollapsedCommand as toggleCollapsed,\n createToggleListCommand as toggleList,\n createUnwrapListCommand as unwrapList,\n createWrapInListCommand as wrapInList,\n type DedentListOptions,\n type IndentListOptions,\n type ListAttributes,\n type ToggleCollapsedOptions,\n type UnwrapListOptions,\n} from 'prosemirror-flat-list'\n\nfunction insertList(attrs?: ListAttributes): Command {\n return insertNode({ type: 'list', attrs })\n}\n\n/**\n * @internal\n */\nexport type ListCommandsExtension = Extension<{\n Commands: {\n dedentList: [options?: DedentListOptions]\n indentList: [options?: IndentListOptions]\n moveList: [direction: 'up' | 'down']\n splitList: []\n toggleCollapsed: [options?: ToggleCollapsedOptions]\n unwrapList: [options?: UnwrapListOptions]\n toggleList: [attrs?: ListAttributes]\n wrapInList: [attrs?: ListAttributes]\n insertList: [attrs?: ListAttributes]\n }\n}>\n\n/**\n * Defines list commands.\n *\n * @internal\n */\nexport function defineListCommands(): ListCommandsExtension {\n return defineCommands({\n dedentList,\n indentList,\n moveList,\n splitList,\n toggleCollapsed,\n unwrapList,\n toggleList,\n wrapInList,\n insertList,\n })\n}\n","import type { PlainExtension } from '@prosekit/core'\n\nimport type { DragEventHandler } from '../drop-indicator'\nimport { defineDropIndicator } from '../drop-indicator'\n\n/**\n * Configures drop indicator to avoid unexpected drop point.\n *\n * We don't want to drag a list node and drop it as the first\n * child of another list node.\n *\n * @internal\n */\nexport function defineListDropIndicator(): PlainExtension {\n return defineDropIndicator({\n onDrag,\n })\n}\n\nconst onDrag: DragEventHandler = ({ view, pos }): boolean => {\n const slice = view.dragging?.slice\n if (\n slice\n && slice.openStart === 0\n && slice.openEnd === 0\n && slice.content.childCount === 1\n ) {\n const node = slice.content.child(0)\n if (node.type.name === 'list') {\n const $pos = view.state.doc.resolve(pos)\n if ($pos.parent.type.name === 'list' && $pos.index() === 0) {\n return false\n }\n }\n }\n return true\n}\n","import {\n union,\n type Extension,\n} from '@prosekit/core'\nimport { listInputRules } from 'prosemirror-flat-list'\n\nimport { defineInputRule } from '../input-rule'\n\n/**\n * @internal\n */\nexport function defineListInputRules(): Extension {\n return union(listInputRules.map(defineInputRule))\n}\n","import {\n defineKeymap,\n type PlainExtension,\n} from '@prosekit/core'\nimport {\n chainCommands,\n deleteSelection,\n} from '@prosekit/pm/commands'\nimport {\n createDedentListCommand,\n createIndentListCommand,\n deleteCommand,\n enterCommand,\n joinCollapsedListBackward,\n joinListUp,\n protectCollapsed,\n} from 'prosemirror-flat-list'\n\n// This is different from the one exported by prosemirror-flat-list, because\n// some commands are moved to `defineBaseKeymap` in `prosekit/core`.\nconst backspaceCommand = chainCommands(\n protectCollapsed,\n deleteSelection,\n joinListUp,\n joinCollapsedListBackward,\n)\n\nconst dedentListCommand = createDedentListCommand()\nconst indentListCommand = createIndentListCommand()\n\nconst listKeymap = {\n 'Enter': enterCommand,\n 'Backspace': backspaceCommand,\n 'Delete': deleteCommand,\n 'Mod-]': indentListCommand,\n 'Mod-[': dedentListCommand,\n 'Tab': indentListCommand,\n 'Shift-Tab': dedentListCommand,\n}\n\n/**\n * Returns a extension that adds key bindings for list.\n *\n * @internal\n */\nexport function defineListKeymap(): PlainExtension {\n return defineKeymap(listKeymap)\n}\n","import {\n definePlugin,\n type PlainExtension,\n} from '@prosekit/core'\nimport { Plugin } from '@prosekit/pm/state'\nimport {\n createListEventPlugin,\n createListRenderingPlugin,\n createSafariInputMethodWorkaroundPlugin,\n unwrapListSlice,\n} from 'prosemirror-flat-list'\n\nfunction createListClipboardPlugin(): Plugin {\n return new Plugin({\n props: {\n transformCopied: unwrapListSlice,\n },\n })\n}\n\nfunction createListPlugins(): Plugin[] {\n return [\n createListEventPlugin(),\n createListRenderingPlugin(),\n createListClipboardPlugin(),\n createSafariInputMethodWorkaroundPlugin(),\n ]\n}\n\n/**\n * @internal\n */\nexport function defineListPlugins(): PlainExtension {\n return definePlugin(createListPlugins)\n}\n","import { isElementLike } from '@ocavue/utils'\nimport {\n defineClipboardSerializer,\n type PlainExtension,\n} from '@prosekit/core'\nimport {\n joinListElements,\n listToDOM,\n} from 'prosemirror-flat-list'\n\n/**\n * @internal\n */\nexport function defineListSerializer(): PlainExtension {\n return defineClipboardSerializer({\n serializeFragmentWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return joinListElements(dom)\n }\n },\n serializeNodeWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return isElementLike(dom) ? joinListElements(dom) : dom\n }\n },\n nodesFromSchemaWrapper: (fn) => {\n return (...args) => {\n const nodes = fn(...args)\n return {\n ...nodes,\n list: (node) => listToDOM({ node, nativeList: true, getMarkers: () => null }),\n }\n }\n },\n })\n}\n","import {\n defineNodeSpec,\n type Extension,\n} from '@prosekit/core'\nimport type {\n DOMOutputSpec,\n ProseMirrorNode,\n} from '@prosekit/pm/model'\nimport {\n createListSpec,\n listToDOM,\n type ListAttributes,\n} from 'prosemirror-flat-list'\n\nimport type { ListAttrs } from './list-types'\n\n/**\n * @internal\n */\nexport type ListSpecExtension = Extension<{\n Nodes: {\n list: ListAttrs\n }\n}>\n\nfunction getMarkers(node: ProseMirrorNode): DOMOutputSpec[] {\n const attrs = node.attrs as ListAttributes\n switch (attrs.kind) {\n case 'task':\n // Use a `label` element here so that the area around the checkbox is also checkable.\n return [\n [\n 'label',\n [\n 'input',\n { type: 'checkbox', checked: attrs.checked ? '' : undefined },\n ],\n ],\n ]\n default:\n // Always return an empty array so that the marker element is rendered. This\n // is required to make the drop indicator locate the correct position.\n return []\n }\n}\n\n/**\n * @internal\n */\nexport function defineListSpec(): ListSpecExtension {\n const spec = createListSpec()\n\n return defineNodeSpec<'list', ListAttrs>({\n ...spec,\n toDOM: (node) => {\n return listToDOM({ node, getMarkers })\n },\n name: 'list',\n })\n}\n","import {\n union,\n type Union,\n} from '@prosekit/core'\n\nimport {\n defineListCommands,\n type ListCommandsExtension,\n} from './list-commands'\nimport { defineListDropIndicator } from './list-drop-indicator'\nimport { defineListInputRules } from './list-input-rules'\nimport { defineListKeymap } from './list-keymap'\nimport { defineListPlugins } from './list-plugins'\nimport { defineListSerializer } from './list-serializer'\nimport {\n defineListSpec,\n type ListSpecExtension,\n} from './list-spec'\n\n/**\n * @internal\n */\nexport type ListExtension = Union<[ListSpecExtension, ListCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineList(): ListExtension {\n return union(\n defineListSpec(),\n defineListPlugins(),\n defineListKeymap(),\n defineListInputRules(),\n defineListCommands(),\n defineListSerializer(),\n defineListDropIndicator(),\n )\n}\n"],"mappings":";;;;;;;;;AAsBA,SAAS,WAAW,OAAiC;AACnD,QAAO,WAAW;EAAE,MAAM;EAAQ;EAAO,CAAC;;;;;;;AAyB5C,SAAgB,qBAA4C;AAC1D,QAAO,eAAe;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;;;;;;;;;;;;;AC9CJ,SAAgB,0BAA0C;AACxD,QAAO,oBAAoB,EACzB,QACD,CAAC;;AAGJ,MAAMA,UAA4B,EAAE,MAAM,UAAmB;CAC3D,MAAM,QAAQ,KAAK,UAAU;AAC7B,KACE,SACG,MAAM,cAAc,KACpB,MAAM,YAAY,KAClB,MAAM,QAAQ,eAAe,GAGhC;MADa,MAAM,QAAQ,MAAM,EAAE,CAC1B,KAAK,SAAS,QAAQ;GAC7B,MAAM,OAAO,KAAK,MAAM,IAAI,QAAQ,IAAI;AACxC,OAAI,KAAK,OAAO,KAAK,SAAS,UAAU,KAAK,OAAO,KAAK,EACvD,QAAO;;;AAIb,QAAO;;;;;;;;ACxBT,SAAgB,uBAAkC;AAChD,QAAO,MAAM,eAAe,IAAI,gBAAgB,CAAC;;;;;ACQnD,MAAM,mBAAmB,cACvB,kBACA,iBACA,YACA,0BACD;AAED,MAAM,oBAAoB,yBAAyB;AACnD,MAAM,oBAAoB,yBAAyB;AAEnD,MAAM,aAAa;CACjB,SAAS;CACT,aAAa;CACb,UAAU;CACV,SAAS;CACT,SAAS;CACT,OAAO;CACP,aAAa;CACd;;;;;;AAOD,SAAgB,mBAAmC;AACjD,QAAO,aAAa,WAAW;;;;;AClCjC,SAAS,4BAAoC;AAC3C,QAAO,IAAI,OAAO,EAChB,OAAO,EACL,iBAAiB,iBAClB,EACF,CAAC;;AAGJ,SAAS,oBAA8B;AACrC,QAAO;EACL,uBAAuB;EACvB,2BAA2B;EAC3B,2BAA2B;EAC3B,yCAAyC;EAC1C;;;;;AAMH,SAAgB,oBAAoC;AAClD,QAAO,aAAa,kBAAkB;;;;;;;;ACpBxC,SAAgB,uBAAuC;AACrD,QAAO,0BAA0B;EAC/B,2BAA2B,OAAO;AAChC,WAAQ,GAAG,SAAS;IAClB,MAAM,MAAM,GAAG,GAAG,KAAK;AACvB,WAAO,iBAAiB,IAAI;;;EAGhC,uBAAuB,OAAO;AAC5B,WAAQ,GAAG,SAAS;IAClB,MAAM,MAAM,GAAG,GAAG,KAAK;AACvB,WAAO,cAAc,IAAI,GAAG,iBAAiB,IAAI,GAAG;;;EAGxD,yBAAyB,OAAO;AAC9B,WAAQ,GAAG,SAAS;AAElB,WAAO;KACL,GAFY,GAAG,GAAG,KAAK;KAGvB,OAAO,SAAS,UAAU;MAAE;MAAM,YAAY;MAAM,kBAAkB;MAAM,CAAC;KAC9E;;;EAGN,CAAC;;;;;ACXJ,SAAS,WAAW,MAAwC;CAC1D,MAAM,QAAQ,KAAK;AACnB,SAAQ,MAAM,MAAd;EACE,KAAK,OAEH,QAAO,CACL,CACE,SACA,CACE,SACA;GAAE,MAAM;GAAY,SAAS,MAAM,UAAU,KAAK;GAAW,CAC9D,CACF,CACF;EACH,QAGE,QAAO,EAAE;;;;;;AAOf,SAAgB,iBAAoC;CAClD,MAAM,OAAO,gBAAgB;AAE7B,QAAO,eAAkC;EACvC,GAAG;EACH,QAAQ,SAAS;AACf,UAAO,UAAU;IAAE;IAAM;IAAY,CAAC;;EAExC,MAAM;EACP,CAAC;;;;;;;;AC/BJ,SAAgB,aAA4B;AAC1C,QAAO,MACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,CAC1B"}
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-list.js","names":["onDrag: DragEventHandler"],"sources":["../src/list/list-commands.ts","../src/list/list-drop-indicator.ts","../src/list/list-input-rules.ts","../src/list/list-keymap.ts","../src/list/list-plugins.ts","../src/list/list-serializer.ts","../src/list/list-spec.ts","../src/list/list.ts"],"sourcesContent":["import {\n defineCommands,\n insertNode,\n type Extension,\n} from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\nimport {\n createDedentListCommand as dedentList,\n createIndentListCommand as indentList,\n createMoveListCommand as moveList,\n createSplitListCommand as splitList,\n createToggleCollapsedCommand as toggleCollapsed,\n createToggleListCommand as toggleList,\n createUnwrapListCommand as unwrapList,\n createWrapInListCommand as wrapInList,\n type DedentListOptions,\n type IndentListOptions,\n type ListAttributes,\n type ToggleCollapsedOptions,\n type UnwrapListOptions,\n} from 'prosemirror-flat-list'\n\nfunction insertList(attrs?: ListAttributes): Command {\n return insertNode({ type: 'list', attrs })\n}\n\n/**\n * @internal\n */\nexport type ListCommandsExtension = Extension<{\n Commands: {\n dedentList: [options?: DedentListOptions]\n indentList: [options?: IndentListOptions]\n moveList: [direction: 'up' | 'down']\n splitList: []\n toggleCollapsed: [options?: ToggleCollapsedOptions]\n unwrapList: [options?: UnwrapListOptions]\n toggleList: [attrs?: ListAttributes]\n wrapInList: [attrs?: ListAttributes]\n insertList: [attrs?: ListAttributes]\n }\n}>\n\n/**\n * Defines list commands.\n *\n * @internal\n */\nexport function defineListCommands(): ListCommandsExtension {\n return defineCommands({\n dedentList,\n indentList,\n moveList,\n splitList,\n toggleCollapsed,\n unwrapList,\n toggleList,\n wrapInList,\n insertList,\n })\n}\n","import type { PlainExtension } from '@prosekit/core'\n\nimport type { DragEventHandler } from '../drop-indicator'\nimport { defineDropIndicator } from '../drop-indicator'\n\n/**\n * Configures drop indicator to avoid unexpected drop point.\n *\n * We don't want to drag a list node and drop it as the first\n * child of another list node.\n *\n * @internal\n */\nexport function defineListDropIndicator(): PlainExtension {\n return defineDropIndicator({\n onDrag,\n })\n}\n\nconst onDrag: DragEventHandler = ({ view, pos }): boolean => {\n const slice = view.dragging?.slice\n if (\n slice\n && slice.openStart === 0\n && slice.openEnd === 0\n && slice.content.childCount === 1\n ) {\n const node = slice.content.child(0)\n if (node.type.name === 'list') {\n const $pos = view.state.doc.resolve(pos)\n if ($pos.parent.type.name === 'list' && $pos.index() === 0) {\n return false\n }\n }\n }\n return true\n}\n","import {\n union,\n type Extension,\n} from '@prosekit/core'\nimport { listInputRules } from 'prosemirror-flat-list'\n\nimport { defineInputRule } from '../input-rule'\n\n/**\n * @internal\n */\nexport function defineListInputRules(): Extension {\n return union(listInputRules.map(defineInputRule))\n}\n","import {\n defineKeymap,\n type PlainExtension,\n} from '@prosekit/core'\nimport {\n chainCommands,\n deleteSelection,\n} from '@prosekit/pm/commands'\nimport {\n createDedentListCommand,\n createIndentListCommand,\n deleteCommand,\n enterCommand,\n joinCollapsedListBackward,\n joinListUp,\n protectCollapsed,\n} from 'prosemirror-flat-list'\n\n// This is different from the one exported by prosemirror-flat-list, because\n// some commands are moved to `defineBaseKeymap` in `prosekit/core`.\nconst backspaceCommand = chainCommands(\n protectCollapsed,\n deleteSelection,\n joinListUp,\n joinCollapsedListBackward,\n)\n\nconst dedentListCommand = createDedentListCommand()\nconst indentListCommand = createIndentListCommand()\n\nconst listKeymap = {\n 'Enter': enterCommand,\n 'Backspace': backspaceCommand,\n 'Delete': deleteCommand,\n 'Mod-]': indentListCommand,\n 'Mod-[': dedentListCommand,\n 'Tab': indentListCommand,\n 'Shift-Tab': dedentListCommand,\n}\n\n/**\n * Returns a extension that adds key bindings for list.\n *\n * @internal\n */\nexport function defineListKeymap(): PlainExtension {\n return defineKeymap(listKeymap)\n}\n","import {\n definePlugin,\n type PlainExtension,\n} from '@prosekit/core'\nimport { Plugin } from '@prosekit/pm/state'\nimport {\n createListEventPlugin,\n createListRenderingPlugin,\n createSafariInputMethodWorkaroundPlugin,\n unwrapListSlice,\n} from 'prosemirror-flat-list'\n\nfunction createListClipboardPlugin(): Plugin {\n return new Plugin({\n props: {\n transformCopied: unwrapListSlice,\n },\n })\n}\n\nfunction createListPlugins(): Plugin[] {\n return [\n createListEventPlugin(),\n createListRenderingPlugin(),\n createListClipboardPlugin(),\n createSafariInputMethodWorkaroundPlugin(),\n ]\n}\n\n/**\n * @internal\n */\nexport function defineListPlugins(): PlainExtension {\n return definePlugin(createListPlugins)\n}\n","import { isElementLike } from '@ocavue/utils'\nimport {\n defineClipboardSerializer,\n type PlainExtension,\n} from '@prosekit/core'\nimport {\n findCheckboxInListItem,\n joinListElements,\n listToDOM,\n} from 'prosemirror-flat-list'\n\n/**\n * @internal\n */\nexport function defineListSerializer(): PlainExtension {\n return defineClipboardSerializer({\n serializeFragmentWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return normalizeElementTree(joinListElements(dom))\n }\n },\n serializeNodeWrapper: (fn) => {\n return (...args) => {\n const dom = fn(...args)\n return isElementLike(dom)\n ? normalizeElementTree(joinListElements(dom))\n : dom\n }\n },\n nodesFromSchemaWrapper: (fn) => {\n return (...args) => {\n const nodes = fn(...args)\n return {\n ...nodes,\n list: (node) => listToDOM({ node, nativeList: true }),\n }\n }\n },\n })\n}\n\nfunction normalizeElementTree<T extends Element | DocumentFragment>(\n node: T,\n): T {\n if (isElementLike(node)) {\n normalizeTaskList(node)\n }\n\n for (const child of node.children) {\n normalizeElementTree(child)\n }\n\n return node\n}\n\n/**\n * Modifies the DOM tree for task lists to ensure that the output HTML can be\n * parsed by rehype-remark.\n */\nfunction normalizeTaskList(node: Element): void {\n if (\n !node.classList.contains('prosemirror-flat-list')\n || node.getAttribute('data-list-kind') !== 'task'\n || node.children.length !== 2\n ) {\n return\n }\n\n const marker = node.children.item(0)\n if (!marker || !marker.classList.contains('list-marker')) {\n return\n }\n\n const checkbox = findCheckboxInListItem(marker)\n if (!checkbox) {\n return\n }\n\n const content = node.children.item(1)\n if (!content || !content.classList.contains('list-content')) {\n return\n }\n\n const textBlock = content.children.item(0)\n if (!textBlock || !['P', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(textBlock.tagName)) {\n return\n }\n\n node.replaceChildren(...content.children)\n textBlock.prepend(checkbox)\n}\n","import {\n defineNodeSpec,\n type Extension,\n} from '@prosekit/core'\nimport type {\n DOMOutputSpec,\n ProseMirrorNode,\n} from '@prosekit/pm/model'\nimport {\n createListSpec,\n listToDOM,\n type ListAttributes,\n} from 'prosemirror-flat-list'\n\nimport type { ListAttrs } from './list-types'\n\n/**\n * @internal\n */\nexport type ListSpecExtension = Extension<{\n Nodes: {\n list: ListAttrs\n }\n}>\n\nfunction getMarkers(node: ProseMirrorNode): DOMOutputSpec[] {\n const attrs = node.attrs as ListAttributes\n switch (attrs.kind) {\n case 'task':\n // Use a `label` element here so that the area around the checkbox is also checkable.\n return [\n [\n 'label',\n [\n 'input',\n { type: 'checkbox', checked: attrs.checked ? '' : undefined },\n ],\n ],\n ]\n default:\n // Always return an empty array so that the marker element is rendered. This\n // is required to make the drop indicator locate the correct position.\n return []\n }\n}\n\n/**\n * @internal\n */\nexport function defineListSpec(): ListSpecExtension {\n const spec = createListSpec()\n\n return defineNodeSpec<'list', ListAttrs>({\n ...spec,\n toDOM: (node) => {\n return listToDOM({ node, getMarkers })\n },\n name: 'list',\n })\n}\n","import {\n union,\n type Union,\n} from '@prosekit/core'\n\nimport {\n defineListCommands,\n type ListCommandsExtension,\n} from './list-commands'\nimport { defineListDropIndicator } from './list-drop-indicator'\nimport { defineListInputRules } from './list-input-rules'\nimport { defineListKeymap } from './list-keymap'\nimport { defineListPlugins } from './list-plugins'\nimport { defineListSerializer } from './list-serializer'\nimport {\n defineListSpec,\n type ListSpecExtension,\n} from './list-spec'\n\n/**\n * @internal\n */\nexport type ListExtension = Union<[ListSpecExtension, ListCommandsExtension]>\n\n/**\n * @public\n */\nexport function defineList(): ListExtension {\n return union(\n defineListSpec(),\n defineListPlugins(),\n defineListKeymap(),\n defineListInputRules(),\n defineListCommands(),\n defineListSerializer(),\n defineListDropIndicator(),\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-loro.d.ts","names":[],"sources":["../src/loro/loro-commands.ts","../src/loro/loro-cursor-plugin.ts","../src/loro/loro.ts","../src/loro/loro-keymap.ts","../src/loro/loro-sync-plugin.ts","../src/loro/loro-undo-plugin.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;KAiBY,qBAAA,GAAwB;;;IAAxB,IAAA,EAAA,EAAA;EAOI,CAAA;;iBAAA,kBAAA,CAAA,GAAsB;;;UCTrB,iBAAA;aACJ;EDCD,YAAA,CAAA,EAAA,CAAA,KAAA,ECAa,WDAQ,
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-loro.d.ts","names":[],"sources":["../src/loro/loro-commands.ts","../src/loro/loro-cursor-plugin.ts","../src/loro/loro.ts","../src/loro/loro-keymap.ts","../src/loro/loro-sync-plugin.ts","../src/loro/loro-undo-plugin.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;KAiBY,qBAAA,GAAwB;;;IAAxB,IAAA,EAAA,EAAA;EAOI,CAAA;;iBAAA,kBAAA,CAAA,GAAsB;;;UCTrB,iBAAA;aACJ;EDCD,YAAA,CAAA,EAAA,CAAA,KAAA,ECAa,WDAQ,EAAA,GCAQ,SDAI;EAO7B,YAAA,CAAA,EAAA,CAAA,IAAA,ECNQ,MDMU,EAAA,GCNC,ODMG;2BCLX,WAAW;;iBAGtB,sBAAA,UACL,oBACR;;;UCEc,WAAA;;;AFTjB;EAOgB,GAAA,EEMT,WFNS;;;;ECTC,SAAA,ECoBJ,eDpBqB;EACrB;;;EAEW,IAAA,CAAA,ECsBf,IDtBe,CCsBV,qBDtBU,EAAA,KAAA,CAAA;EAAW;;;EACkB,IAAA,CAAA,EC0B5C,ID1B4C,CC0BvC,qBD1BuC,EAAA,KAAA,CAAA;EAGrC;;;WC4BL,KAAK;AAxBhB;;;;AAcS,KAgBG,aAAA,GAAgB,KAhBnB,CAAA,CAgB0B,qBAhB1B,EAgBiD,cAhBjD,CAAA,CAAA;;;;AAUE,iBAWK,UAAA,CAXL,OAAA,EAWyB,WAXzB,CAAA,EAWuC,aAXvC;;;iBC9BK,gBAAA,CAAA,GAAoB;;;iBCXpB,oBAAA,UACL,wBACR;;;iBCFa,oBAAA,UAA8B,wBAAsB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-mark-rule.d.ts","names":[],"sources":["../src/mark-rule/types.ts","../src/mark-rule/mark-rule.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAUA;;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-mark-rule.d.ts","names":[],"sources":["../src/mark-rule/types.ts","../src/mark-rule/mark-rule.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAUA;;AAUiB,UAVA,eAAA,CAUA;EAQP;;;;SAbD;;;ACMT;iBDDiB;;;;;;;UAQP,wBAAwB,qBAAqB;;;;;;AAlBvD;;AAUiB,iBCCD,cAAA,CDDC,OAAA,ECCuB,eDDvB,CAAA,ECCyC,cDDzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-mention.d.ts","names":[],"sources":["../src/mention/index.ts"],"sourcesContent":[],"mappings":";;;UASiB,YAAA;;EAAA,KAAA,EAAA,MAAA;EASL,IAAA,EAAA,MAAA
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-mention.d.ts","names":[],"sources":["../src/mention/index.ts"],"sourcesContent":[],"mappings":";;;UASiB,YAAA;;EAAA,KAAA,EAAA,MAAA;EASL,IAAA,EAAA,MAAA;AASZ;AAsCA;AAMA;AAWA;AAAsC,KAhE1B,oBAAA,GAAuB,SAgEG,CAAA;EAAsB,KAAA,EAAA;IAA7B,OAAA,EA9DlB,YA8DkB;EAAK,CAAA;AAKpC,CAAA,CAAA;;;;iBA5DgB,iBAAA,CAAA,GAAqB;;;;KAsCzB,wBAAA,GAA2B;;2BAEZ;;;iBAIX,qBAAA,CAAA,GAAyB;;;;KAW7B,gBAAA,GAAmB,OAAO,sBAAsB;;;;iBAK5C,aAAA,CAAA,GAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-paragraph.d.ts","names":[],"sources":["../src/paragraph/paragraph-commands.ts","../src/paragraph/paragraph-spec.ts","../src/paragraph/paragraph.ts","../src/paragraph/paragraph-keymap.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAUY,KAAA,0BAAA,GAA6B,SAAA,CAAA;EAgBzB,QAAA,EAAA;;;;;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-paragraph.d.ts","names":[],"sources":["../src/paragraph/paragraph-commands.ts","../src/paragraph/paragraph-spec.ts","../src/paragraph/paragraph.ts","../src/paragraph/paragraph-keymap.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAUY,KAAA,0BAAA,GAA6B,SAAA,CAAA;EAgBzB,QAAA,EAAA;;;;;AENhB;;AAAgE,iBFMhD,uBAAA,CAAA,CENgD,EFMrB,0BENqB;;;;;;AFVpD,KCDA,sBAAA,GAAyB,SDCI,CAAA;EAgBzB,KAAA,EAAA;eCfD;;;AAFf;AAWA;;;;ACAY,iBDAI,mBAAA,CAAA,CCAc,EDAS,sBCAT;;;;;AFV9B;AAgBgB,KENJ,kBAAA,GAAqB,KFMM,CAAA,CENC,sBFMG,EENqB,0BFMK,CAAA,CAAA;;;;ACjBrE;AAWA;;;;ACAY,iBAUI,eAAA,CAAA,CAVc,EAUK,kBAVL;;;;;;iBCVd,qBAAA,CAAA,GAAyB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-paste-rule.d.ts","names":[],"sources":["../src/paste-rule/mark-paste-rule.ts","../src/paste-rule/paste-rule.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAsBA;;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-paste-rule.d.ts","names":[],"sources":["../src/paste-rule/mark-paste-rule.ts","../src/paste-rule/paste-rule.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAsBA;;AAUiB,UAVA,oBAAA,CAUA;EAQI;;;;EAcL,KAAA,EA3BP,MA2BO;;;;EC3CC,IAAA,EAAA,MAAA,GDqBA,QCrBA;EAwBL;AAOZ;AAeA;;;;EAA8E,QAAA,CAAA,EAAA,CAAA,KAAA,EDjBzD,eCiByD,EAAA,GDjBrC,KCiBqC,GAAA,IAAA,GAAA,SAAA,GAAA,KAAA;;;;;sBDXxD;;;;;;;iBAQN,mBAAA,UAA6B,uBAAuB;;;;;AAhCpE;;;AAkBqB,UC7BJ,uBAAA,CD6BI;EAAoB;;;EAczB,KAAA,ECvCP,KDuCO;;;;EC3CC,IAAA,EAST,UATS;EAwBL;AAOZ;AAeA;;EAA6C,KAAA,EAAA,OAAA;;;;;;;;KAtBjC,gBAAA,aAA6B,4BAA4B;;;;;;UAOpD,gBAAA;;;;WAIN;;;;;;;;;;iBAWK,eAAA;;GAA6B,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-placeholder.d.ts","names":[],"sources":["../src/placeholder/index.ts"],"sourcesContent":[],"mappings":";;;;UAmBiB,kBAAA;;AAAjB
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-placeholder.d.ts","names":[],"sources":["../src/placeholder/index.ts"],"sourcesContent":[],"mappings":";;;;UAmBiB,kBAAA;;AAAjB;AA4BA;;iCAvBiC;;;;;;;;;;;;;;;wCAgBO;;;;;;iBAOxB,iBAAA,UAA2B,qBAAqB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./drop-indicator-
|
|
2
|
-
import { findTable } from "./table-
|
|
1
|
+
import "./drop-indicator-BMvWUDXz.js";
|
|
2
|
+
import { p as findTable } from "./table-BLjD91VB.js";
|
|
3
3
|
import { definePlugin, isInCodeBlock, maybeRun } from "@prosekit/core";
|
|
4
4
|
import { Plugin, PluginKey } from "@prosekit/pm/state";
|
|
5
5
|
import { Decoration, DecorationSet } from "@prosekit/pm/view";
|
|
@@ -17,8 +17,7 @@ function createPlaceholderPlugin({ placeholder, strategy = "block" }) {
|
|
|
17
17
|
key: new PluginKey("prosekit-placeholder"),
|
|
18
18
|
props: { decorations: (state) => {
|
|
19
19
|
if (!(typeof strategy === "function" ? strategy : strategy === "doc" ? docStrategy : defaultStrategy)(state)) return null;
|
|
20
|
-
const
|
|
21
|
-
const deco = createPlaceholderDecoration(state, placeholderText);
|
|
20
|
+
const deco = createPlaceholderDecoration(state, maybeRun(placeholder, state));
|
|
22
21
|
if (!deco) return null;
|
|
23
22
|
return DecorationSet.create(state.doc, [deco]);
|
|
24
23
|
} }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-placeholder.js","names":[
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-placeholder.js","names":[],"sources":["../src/placeholder/index.ts"],"sourcesContent":["import {\n definePlugin,\n isInCodeBlock,\n maybeRun,\n type PlainExtension,\n} from '@prosekit/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\nimport {\n Plugin,\n PluginKey,\n type EditorState,\n} from '@prosekit/pm/state'\nimport {\n Decoration,\n DecorationSet,\n} from '@prosekit/pm/view'\n\nimport { findTable } from '../table'\n\nexport interface PlaceholderOptions {\n /**\n * The placeholder to use. It can be a static string or a function that\n * receives the current editor state and returns a string.\n */\n placeholder: string | ((state: EditorState) => string)\n\n /**\n * By default, the placeholder text will be shown whenever the current text\n * cursor is in an empty text node and it's not inside a code block or a\n * table node.\n *\n * If you only want to show the placeholder when the whole doc is empty, you\n * can set this option to 'doc'.\n *\n * You can also pass a function that receives the current editor state and\n * returns a boolean value to determine whether the placeholder should be\n * shown.\n *\n * @default 'block'\n */\n strategy?: 'doc' | 'block' | ((state: EditorState) => boolean)\n}\n\n/**\n * Add a placeholder text to the editor when the current block or document is\n * empty.\n */\nexport function definePlaceholder(options: PlaceholderOptions): PlainExtension {\n return definePlugin(createPlaceholderPlugin(options))\n}\n\nfunction createPlaceholderPlugin({\n placeholder,\n strategy = 'block',\n}: PlaceholderOptions): Plugin {\n return new Plugin({\n key: new PluginKey('prosekit-placeholder'),\n props: {\n decorations: (state) => {\n const strategyFn = typeof strategy === 'function'\n ? strategy\n : strategy === 'doc'\n ? docStrategy\n : defaultStrategy\n\n if (!strategyFn(state)) {\n return null\n }\n\n const placeholderText: string = maybeRun(placeholder, state)\n const deco = createPlaceholderDecoration(state, placeholderText)\n if (!deco) {\n return null\n }\n\n return DecorationSet.create(state.doc, [deco])\n },\n },\n })\n}\n\nfunction defaultStrategy(state: EditorState): boolean {\n return !isInCodeBlock(state.selection) && !findTable(state.selection.$from)\n}\n\nfunction docStrategy(state: EditorState): boolean {\n return isDocEmpty(state.doc) && defaultStrategy(state)\n}\n\nfunction isDocEmpty(doc: ProseMirrorNode) {\n return doc.childCount <= 1 && !doc.firstChild?.content.size\n}\n\nfunction createPlaceholderDecoration(\n state: EditorState,\n placeholderText: string,\n): Decoration | null {\n if (!placeholderText) return null\n\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 before = $pos.before()\n\n return Decoration.node(before, before + node.nodeSize, {\n 'class': 'prosekit-placeholder',\n 'data-placeholder': placeholderText,\n })\n}\n"],"mappings":";;;;;;;;;;;AA+CA,SAAgB,kBAAkB,SAA6C;AAC7E,QAAO,aAAa,wBAAwB,QAAQ,CAAC;;AAGvD,SAAS,wBAAwB,EAC/B,aACA,WAAW,WACkB;AAC7B,QAAO,IAAI,OAAO;EAChB,KAAK,IAAI,UAAU,uBAAuB;EAC1C,OAAO,EACL,cAAc,UAAU;AAOtB,OAAI,EANe,OAAO,aAAa,aACnC,WACA,aAAa,QACb,cACA,iBAEY,MAAM,CACpB,QAAO;GAIT,MAAM,OAAO,4BAA4B,OADT,SAAS,aAAa,MAAM,CACI;AAChE,OAAI,CAAC,KACH,QAAO;AAGT,UAAO,cAAc,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC;KAEjD;EACF,CAAC;;AAGJ,SAAS,gBAAgB,OAA6B;AACpD,QAAO,CAAC,cAAc,MAAM,UAAU,IAAI,CAAC,UAAU,MAAM,UAAU,MAAM;;AAG7E,SAAS,YAAY,OAA6B;AAChD,QAAO,WAAW,MAAM,IAAI,IAAI,gBAAgB,MAAM;;AAGxD,SAAS,WAAW,KAAsB;AACxC,QAAO,IAAI,cAAc,KAAK,CAAC,IAAI,YAAY,QAAQ;;AAGzD,SAAS,4BACP,OACA,iBACmB;AACnB,KAAI,CAAC,gBAAiB,QAAO;CAE7B,MAAM,EAAE,cAAc;AACtB,KAAI,CAAC,UAAU,MAAO,QAAO;CAE7B,MAAM,OAAO,UAAU;CACvB,MAAM,OAAO,KAAK;AAClB,KAAI,KAAK,QAAQ,OAAO,EAAG,QAAO;CAElC,MAAM,SAAS,KAAK,QAAQ;AAE5B,QAAO,WAAW,KAAK,QAAQ,SAAS,KAAK,UAAU;EACrD,SAAS;EACT,oBAAoB;EACrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-search.d.ts","names":[],"sources":["../src/search/index.ts"],"sourcesContent":[],"mappings":";;;;;;AA0BA;AA+CA
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-search.d.ts","names":[],"sources":["../src/search/index.ts"],"sourcesContent":[],"mappings":";;;;;;AA0BA;AA+CA;AAqCA;AAkBgB,UAtGC,kBAAA,CAsGmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAvDpB,iBAAA,UAA2B,qBAAqB;;;;KAqCpD,uBAAA,GAA0B;;;;;;;;;;;;;;;;;iBAkBtB,oBAAA,CAAA,GAAwB"}
|
|
@@ -8,8 +8,7 @@ import { SearchQuery, findNext, findNextNoWrap, findPrev, findPrevNoWrap, replac
|
|
|
8
8
|
* @public
|
|
9
9
|
*/
|
|
10
10
|
function defineSearchQuery(options) {
|
|
11
|
-
|
|
12
|
-
return definePlugin(search({ initialQuery: query }));
|
|
11
|
+
return definePlugin(search({ initialQuery: new SearchQuery(options) }));
|
|
13
12
|
}
|
|
14
13
|
/**
|
|
15
14
|
* Scrolls the active search match into view.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-search.js","names":[],"sources":["../src/search/index.ts"],"sourcesContent":["import {\n defineCommands,\n definePlugin,\n type Extension,\n type PlainExtension,\n} from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\nimport {\n findNext,\n findNextNoWrap,\n findPrev,\n findPrevNoWrap,\n replaceAll,\n replaceCurrent,\n replaceNext,\n replaceNextNoWrap,\n search,\n SearchQuery,\n} from 'prosemirror-search'\n\n/**\n * Options for {@link defineSearchQuery}\n *\n * @public\n */\nexport interface SearchQueryOptions {\n /**\n * The search string (or regular expression).\n */\n search: string\n\n /**\n * The replace text.\n */\n replace?: string\n\n /**\n * Indicates whether the search is case-sensitive\n *\n * @default false\n */\n caseSensitive?: boolean\n\n /**\n * By default, string search will replace `\\n`, `\\r`, and `\\t` in the query\n * with newline, return, and tab characters. When this is set to true, that\n * behavior is disabled.\n *\n * @default false\n */\n literal?: boolean\n\n /**\n * When true, the search string is interpreted as a regular expression.\n *\n * @default false\n */\n regexp?: boolean\n\n /**\n * Enable whole-word matching.\n *\n * @default false\n */\n wholeWord?: boolean\n}\n\n/**\n * Defines an extension that stores a current search query and replace string.\n *\n * @public\n */\nexport function defineSearchQuery(options: SearchQueryOptions): PlainExtension {\n const query = new SearchQuery(options)\n return definePlugin(search({ initialQuery: query }))\n}\n\n/**\n * Scrolls the active search match into view.\n */\nfunction scrollActiveIntoView(view: EditorView) {\n if (view.isDestroyed) return\n const active = view.dom.querySelector('.ProseMirror-active-search-match')\n active?.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n behavior: 'smooth',\n })\n}\n\n/**\n * Wraps a command and scrolls the active search match into view when the command\n * is applied.\n */\nfunction withScrollActiveIntoView(command: Command): Command {\n return (state, dispatch, view) => {\n const result = command(state, dispatch, view)\n if (result && dispatch && view) {\n // Add a small delay because the command itself will handle scrolling if\n // the view is focused.\n setTimeout(() => scrollActiveIntoView(view), 50)\n }\n return result\n }\n}\n\n/**\n * @internal\n */\nexport type SearchCommandsExtension = Extension<{\n Commands: {\n findNext: []\n findPrev: []\n findNextNoWrap: []\n findPrevNoWrap: []\n replaceNext: []\n replaceNextNoWrap: []\n replaceCurrent: []\n replaceAll: []\n }\n}>\n\n/**\n * Defines commands for search and replace.\n *\n * @public\n */\nexport function defineSearchCommands(): SearchCommandsExtension {\n return defineCommands({\n findNext: () => withScrollActiveIntoView(findNext),\n findPrev: () => withScrollActiveIntoView(findPrev),\n findNextNoWrap: () => withScrollActiveIntoView(findNextNoWrap),\n findPrevNoWrap: () => withScrollActiveIntoView(findPrevNoWrap),\n replaceNext: () => withScrollActiveIntoView(replaceNext),\n replaceNextNoWrap: () => withScrollActiveIntoView(replaceNextNoWrap),\n replaceCurrent: () => withScrollActiveIntoView(replaceCurrent),\n replaceAll: () => withScrollActiveIntoView(replaceAll),\n })\n}\n"],"mappings":";;;;;;;;;AAyEA,SAAgB,kBAAkB,SAA6C;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-search.js","names":[],"sources":["../src/search/index.ts"],"sourcesContent":["import {\n defineCommands,\n definePlugin,\n type Extension,\n type PlainExtension,\n} from '@prosekit/core'\nimport type { Command } from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\nimport {\n findNext,\n findNextNoWrap,\n findPrev,\n findPrevNoWrap,\n replaceAll,\n replaceCurrent,\n replaceNext,\n replaceNextNoWrap,\n search,\n SearchQuery,\n} from 'prosemirror-search'\n\n/**\n * Options for {@link defineSearchQuery}\n *\n * @public\n */\nexport interface SearchQueryOptions {\n /**\n * The search string (or regular expression).\n */\n search: string\n\n /**\n * The replace text.\n */\n replace?: string\n\n /**\n * Indicates whether the search is case-sensitive\n *\n * @default false\n */\n caseSensitive?: boolean\n\n /**\n * By default, string search will replace `\\n`, `\\r`, and `\\t` in the query\n * with newline, return, and tab characters. When this is set to true, that\n * behavior is disabled.\n *\n * @default false\n */\n literal?: boolean\n\n /**\n * When true, the search string is interpreted as a regular expression.\n *\n * @default false\n */\n regexp?: boolean\n\n /**\n * Enable whole-word matching.\n *\n * @default false\n */\n wholeWord?: boolean\n}\n\n/**\n * Defines an extension that stores a current search query and replace string.\n *\n * @public\n */\nexport function defineSearchQuery(options: SearchQueryOptions): PlainExtension {\n const query = new SearchQuery(options)\n return definePlugin(search({ initialQuery: query }))\n}\n\n/**\n * Scrolls the active search match into view.\n */\nfunction scrollActiveIntoView(view: EditorView) {\n if (view.isDestroyed) return\n const active = view.dom.querySelector('.ProseMirror-active-search-match')\n active?.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n behavior: 'smooth',\n })\n}\n\n/**\n * Wraps a command and scrolls the active search match into view when the command\n * is applied.\n */\nfunction withScrollActiveIntoView(command: Command): Command {\n return (state, dispatch, view) => {\n const result = command(state, dispatch, view)\n if (result && dispatch && view) {\n // Add a small delay because the command itself will handle scrolling if\n // the view is focused.\n setTimeout(() => scrollActiveIntoView(view), 50)\n }\n return result\n }\n}\n\n/**\n * @internal\n */\nexport type SearchCommandsExtension = Extension<{\n Commands: {\n findNext: []\n findPrev: []\n findNextNoWrap: []\n findPrevNoWrap: []\n replaceNext: []\n replaceNextNoWrap: []\n replaceCurrent: []\n replaceAll: []\n }\n}>\n\n/**\n * Defines commands for search and replace.\n *\n * @public\n */\nexport function defineSearchCommands(): SearchCommandsExtension {\n return defineCommands({\n findNext: () => withScrollActiveIntoView(findNext),\n findPrev: () => withScrollActiveIntoView(findPrev),\n findNextNoWrap: () => withScrollActiveIntoView(findNextNoWrap),\n findPrevNoWrap: () => withScrollActiveIntoView(findPrevNoWrap),\n replaceNext: () => withScrollActiveIntoView(replaceNext),\n replaceNextNoWrap: () => withScrollActiveIntoView(replaceNextNoWrap),\n replaceCurrent: () => withScrollActiveIntoView(replaceCurrent),\n replaceAll: () => withScrollActiveIntoView(replaceAll),\n })\n}\n"],"mappings":";;;;;;;;;AAyEA,SAAgB,kBAAkB,SAA6C;AAE7E,QAAO,aAAa,OAAO,EAAE,cADf,IAAI,YAAY,QAAQ,EACY,CAAC,CAAC;;;;;AAMtD,SAAS,qBAAqB,MAAkB;AAC9C,KAAI,KAAK,YAAa;AAEtB,CADe,KAAK,IAAI,cAAc,mCAAmC,EACjE,eAAe;EACrB,OAAO;EACP,QAAQ;EACR,UAAU;EACX,CAAC;;;;;;AAOJ,SAAS,yBAAyB,SAA2B;AAC3D,SAAQ,OAAO,UAAU,SAAS;EAChC,MAAM,SAAS,QAAQ,OAAO,UAAU,KAAK;AAC7C,MAAI,UAAU,YAAY,KAGxB,kBAAiB,qBAAqB,KAAK,EAAE,GAAG;AAElD,SAAO;;;;;;;;AAyBX,SAAgB,uBAAgD;AAC9D,QAAO,eAAe;EACpB,gBAAgB,yBAAyB,SAAS;EAClD,gBAAgB,yBAAyB,SAAS;EAClD,sBAAsB,yBAAyB,eAAe;EAC9D,sBAAsB,yBAAyB,eAAe;EAC9D,mBAAmB,yBAAyB,YAAY;EACxD,yBAAyB,yBAAyB,kBAAkB;EACpE,sBAAsB,yBAAyB,eAAe;EAC9D,kBAAkB,yBAAyB,WAAW;EACvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-strike.d.ts","names":[],"sources":["../src/strike/index.ts"],"sourcesContent":[],"mappings":";;;;;;;AAkBA;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-strike.d.ts","names":[],"sources":["../src/strike/index.ts"],"sourcesContent":[],"mappings":";;;;;;;AAkBA;AASgB,KATJ,mBAAA,GAAsB,SASE,CAAA;EAmBxB,KAAA,EAAA;IASI,MAAA,EAnCJ,KAmCI;EASA,CAAA;AAUhB,CAAA,CAAA;AAYA;;;AAA8B,iBA3Dd,gBAAA,CAAA,CA2Dc,EA3DM,mBA2DN;;AAO9B;;KA/CY,uBAAA,GAA0B;;;;;;;;iBAStB,oBAAA,CAAA,GAAwB;;;;iBASxB,kBAAA,CAAA,GAAsB;;;;iBAUtB,qBAAA,CAAA,GAAyB;;;;KAY7B,eAAA,GAAkB,OAC3B,qBAAqB;;;;iBAMR,YAAA,CAAA,GAAgB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineMarkInputRule } from "./input-rule-
|
|
1
|
+
import { r as defineMarkInputRule } from "./input-rule-COGr_GBb.js";
|
|
2
2
|
import { canUseRegexLookbehind, defineCommands, defineKeymap, defineMarkSpec, toggleMark, union } from "@prosekit/core";
|
|
3
3
|
|
|
4
4
|
//#region src/strike/index.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-table.d.ts","names":[],"sources":["../src/table/table-commands/insert-table.ts","../src/table/table-commands/select-table.ts","../src/table/table-commands/select-table-cell.ts","../src/table/table-commands/select-table-column.ts","../src/table/table-commands/select-table-row.ts","../src/table/table-commands.ts","../src/table/table-spec.ts","../src/table/table.ts","../src/table/table-commands/exit-table.ts","../src/table/table-drop-indicator.ts","../src/table/table-plugins.ts","../src/table/table-utils.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UA8CiB,kBAAA;;AAAjB;AA2BA;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-table.d.ts","names":[],"sources":["../src/table/table-commands/insert-table.ts","../src/table/table-commands/select-table.ts","../src/table/table-commands/select-table-cell.ts","../src/table/table-commands/select-table-column.ts","../src/table/table-commands/select-table-row.ts","../src/table/table-commands.ts","../src/table/table-spec.ts","../src/table/table.ts","../src/table/table-commands/exit-table.ts","../src/table/table-drop-indicator.ts","../src/table/table-plugins.ts","../src/table/table-utils.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UA8CiB,kBAAA;;AAAjB;AA2BA;;;;AC9DA;EAWgB,GAAA,EAAA,MAAA;;;;ACdhB;AAWA;;;;ACXA;AAiBA;;;;ACjBA;AAiBA;iBJgDgB,WAAA,UAAqB,qBAAqB;;;;;;UC9DzC,kBAAA;;ADmCjB;AA2BA;;;;AC9DA;AAWA;;iBAAgB,WAAA,WAAsB,qBAAqB;;;;;;UCd1C,sBAAA;;AFsCjB;AA2BA;;;;AC9DA;AAWA;;iBCHgB,eAAA,WAA0B,yBAAyB;;;;;;UCXlD,wBAAA;;AHsCjB;AA2BA;;;;AC9DA;AAWA;;;;ACdA;AAWA;;iBCMgB,iBAAA,WAA4B,2BAA2B;;;;;;UCjBtD,qBAAA;;AJsCjB;AA2BA;;;;AC9DA;AAWA;;;;ACdA;AAWA;;iBEMgB,cAAA,WAAyB,wBAAwB;;;;;;AHdhD,KIuCL,sBAAA,GAAyB,SJvCF,CAAA;EAWnB,QAAA,EAAA;2BI8BW;;4BAGC;IH/CX,eAAA,EAAA,CAAA,OAAsB,GGgDP,sBHhDO,CAAA;IAWvB,iBAAe,EAAA,CAAA,OAAW,GGsCR,wBHtCiC,CAAA;+BGuCpC;;;IFlDd,gBAAA,EAAA,EAAA;IAiBD,gBAAiB,EAAA,EAAA;;;;ICjBhB,mBAAA,EAAqB,EAAA;IAiBtB,eAAc,EAAA,EAAA;;4BCgDF;+BACG;EAxBnB,CAAA;CAEe,CAAA;;;;;;AAsBI,iBASf,mBAAA,CAAA,CATe,EASQ,sBATR;;;;;;UC3Dd,SAAA;EN+BA,OAAA,CAAA,EAAA,MAAA;EA2BD,OAAA,CAAA,EAAA,MAAW;;;;AC9D3B;AAWA;KKQY,kBAAA,GAAqB;;WAEtB;EJxBM,CAAA;AAWjB,CAAA,CAAA;;;;ACXiB,iBGqCD,eAAA,CAAA,CHrCyB,EGqCN,kBHrCM;AAiBzC;;;KG+BY,qBAAA,GAAwB;EFhDnB,KAAA,EAAA;IAiBD,QAAA,EEiCF,KFjCgB;;;;ACyB9B;;AAK4B,iBCUZ,kBAAA,CAAA,CDVY,ECUU,qBDVV;;;;AAkBA,KCGhB,sBAAA,GAAyB,SDHT,CAAA;EACG,KAAA,EAAA;IAxBM,SAAA,EC4BtB,SD5BsB;EAAS,CAAA;AAiC9C,CAAA,CAAA;;;;ACpEiB,iBAsED,mBAAA,CAAA,CAtEU,EAsEa,sBAtEb;AAe1B;AAeA;AAWA;AASgB,KA+BJ,4BAAA,GAA+B,SA/BL,CAAA;EAW1B,KAAA,EAAA;IASI,eAAA,EAaK,SAbc;EAWvB,CAAA;AAMZ,CAAA,CAAA;iBAAgB,yBAAA,CAAA,GAA6B;;;;;;ANxD5B,KOrBL,cAAA,GAAiB,KPqBM,CAAA,COnB/B,kBP8CuB,EO7CvB,uBACA,wBACA,8BACA,sBNpB+B,CAWnC,CAAA;;;;ACdiB,iBK8BD,WAAA,CAAA,CL9BuB,EK8BR,cL9BQ;;;;;;;;AFsCvC;AA2BgB,cQ9DH,SR8Dc,EQ9DH,OR8Da;;;;;;;;AA3BrC;AA2BgB,iBS9DA,wBAAA,CAAA,CT8DqB,ES9DO,cT8DqB;;;;;;iBU7DjD,kBAAA,CAAA,GAAsB;;;;;;;AVkCtC;AA2BgB,iBW5DA,eAAA,CX4DqB,KAAA,EAAA,OAAqB,CAAA,EAAA,KAAO,IW5DP,aX4DO"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./drop-indicator-
|
|
2
|
-
import {
|
|
1
|
+
import "./drop-indicator-BMvWUDXz.js";
|
|
2
|
+
import { _ as insertTable, a as defineTableSpec, c as defineTableCommands, d as selectTableCell, f as selectTable, g as moveTableColumn, h as moveTableRow, i as defineTableRowSpec, l as selectTableRow, m as isCellSelection, n as defineTableCellSpec, o as defineTablePlugins, p as findTable, r as defineTableHeaderCellSpec, s as defineTableDropIndicator, t as defineTable, u as selectTableColumn, v as exitTable } from "./table-BLjD91VB.js";
|
|
3
3
|
|
|
4
4
|
export { defineTable, defineTableCellSpec, defineTableCommands, defineTableDropIndicator, defineTableHeaderCellSpec, defineTablePlugins, defineTableRowSpec, defineTableSpec, exitTable, findTable, insertTable, isCellSelection, moveTableColumn, moveTableRow, selectTable, selectTableCell, selectTableColumn, selectTableRow };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-text-align.d.ts","names":[],"sources":["../src/text-align/index.ts"],"sourcesContent":[],"mappings":";;;;;;;AAeA;AAqCY,UArCK,gBAqCkB,CAAA,
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-text-align.d.ts","names":[],"sources":["../src/text-align/index.ts"],"sourcesContent":[],"mappings":";;;;;;;AAeA;AAqCY,UArCK,gBAqCkB,CAAA,iBAClB,MAAA,GAD8C,MAAA,CAAA,CAAA;EAiB/C;;;;;AAahB;AASA;EAWgB,KAAA,EA/EP,QA+EO,EAAA;EAYJ;;;;;EAAmD,OAAA,CAAA,EAAA,MAAA;AAU/D;;;;AAEG,KA1ES,uBA0ET,CAAA,iBAAA,MAAA,CAAA,GA1E4D,SA0E5D,CAAA;EAAkB,KAAA,EAAA,QAzEJ;;;;;;;iBAgBD,YAAA;;;;;;IAMZ;;;;KAOQ,0BAAA,GAA6B;;;;;;;;iBASzB,uBAAA,mBAEb;;;;iBASa,qBAAA,mBAAwC;;;;KAY5C,8CAA8C,OACvD,wBAAwB,WAAW;;;;;;;iBAStB,2DACL,iBAAiB,YACzB,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-text.d.ts","names":[],"sources":["../src/text/index.ts"],"sourcesContent":[],"mappings":";;;;;;;AASA;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-text.d.ts","names":[],"sources":["../src/text/index.ts"],"sourcesContent":[],"mappings":";;;;;;;AASA;AASgB,KATJ,aAAA,GAAgB,SASE,CAAA;;UAPpB;;;;;;iBAOM,UAAA,CAAA,GAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-underline.d.ts","names":[],"sources":["../src/underline/index.ts"],"sourcesContent":[],"mappings":";;;;;;;AAeA;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-underline.d.ts","names":[],"sources":["../src/underline/index.ts"],"sourcesContent":[],"mappings":";;;;;;;AAeA;AASgB,KATJ,sBAAA,GAAyB,SASE,CAAA;EAkB3B,KAAA,EAAA;IASI,SAAA,EAlCD,KAkCC;EASA,CAAA;AAShB,CAAA,CAAA;;;;AAAsC,iBA7CtB,mBAAA,CAAA,CA6CsB,EA7CC,sBA6CD;AAOtC;;;KAlCY,0BAAA,GAA6B;;;;;;;;iBASzB,uBAAA,CAAA,GAA2B;;;;iBAS3B,qBAAA,CAAA,GAAyB;;;;KAS7B,kBAAA,GAAqB,OAC9B,wBAAwB;;;;iBAMX,eAAA,CAAA,GAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-extensions-yjs.d.ts","names":[],"sources":["../src/yjs/yjs-commands.ts","../src/yjs/yjs-cursor-plugin.ts","../src/yjs/yjs-sync-plugin.ts","../src/yjs/yjs-undo-plugin.ts","../src/yjs/yjs.ts","../src/yjs/yjs-keymap.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAiBY,oBAAA,GAAuB;;IAAvB,IAAA,EAAA,EAAA;IAOI,IAAA,EAAA,EAAA;;;iBAAA,iBAAA,CAAA,GAAqB;;;;;;AAPzB,KCNA,sBAAA,GAAyB,WDMF,CCLjC,UDK0C,CAAA,OCLxB,aDKwB,CAAA,CAAA,CAAA,CAAA,CAAA;AAO5B,UCTC,gBAAA,SAAyB,sBDSe,CAAA;aCR5C;;iBAGG,qBAAA,UACL,mBACR;;;;;;ADJS,KENA,oBAAA,GAAuB,WFMA,CELjC,UFK0C,CAAA,OELxB,WFKwB,CAAA,CAAA,CAAA,CAAA,CAAA;AAO5B,UETC,cAAA,SAAuB,oBFSiB,CAAA;YER7C,CAAA,CAAE;;iBAGE,mBAAA,UAA6B,iBAAiB;;;;;;KC+ClD,oBAAA,GAAuB,YACjC,kBAAkB;AHlDR,UGqDK,cAAA,SAAuB,oBHrDI,CAAA,CAO5C;;;;ACbY,iBEyEI,mBAAA,CFzEkB,OAAA,EEyEW,cFzEX,CAAA,EEyE4B,cFzE5B;;;ADalB,UIIC,UAAA,CJJgB;;;;ECbrB,GAAA,EGqBL,CAAA,CAAE,GHrBG;
|
|
1
|
+
{"version":3,"file":"prosekit-extensions-yjs.d.ts","names":[],"sources":["../src/yjs/yjs-commands.ts","../src/yjs/yjs-cursor-plugin.ts","../src/yjs/yjs-sync-plugin.ts","../src/yjs/yjs-undo-plugin.ts","../src/yjs/yjs.ts","../src/yjs/yjs-keymap.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAiBY,oBAAA,GAAuB;;IAAvB,IAAA,EAAA,EAAA;IAOI,IAAA,EAAA,EAAA;;;iBAAA,iBAAA,CAAA,GAAqB;;;;;;AAPzB,KCNA,sBAAA,GAAyB,WDMF,CCLjC,UDK0C,CAAA,OCLxB,aDKwB,CAAA,CAAA,CAAA,CAAA,CAAA;AAO5B,UCTC,gBAAA,SAAyB,sBDSe,CAAA;aCR5C;;iBAGG,qBAAA,UACL,mBACR;;;;;;ADJS,KENA,oBAAA,GAAuB,WFMA,CELjC,UFK0C,CAAA,OELxB,WFKwB,CAAA,CAAA,CAAA,CAAA,CAAA;AAO5B,UETC,cAAA,SAAuB,oBFSiB,CAAA;YER7C,CAAA,CAAE;;iBAGE,mBAAA,UAA6B,iBAAiB;;;;;;KC+ClD,oBAAA,GAAuB,YACjC,kBAAkB;AHlDR,UGqDK,cAAA,SAAuB,oBHrDI,CAAA,CAO5C;;;;ACbY,iBEyEI,mBAAA,CFzEkB,OAAA,EEyEW,cFzEX,CAAA,EEyE4B,cFzE5B;;;ADalB,UIIC,UAAA,CJJgB;;;;ECbrB,GAAA,EGqBL,CAAA,CAAE,GHrBG;EACQ;;;EAD4B,SAAA,EG0BnC,SH1BmC;EAI/B;AAIjB;;;aGwBa,CAAA,CAAE;EFhCH;;;EAAuB,IAAA,CAAA,EEqC1B,oBFrC0B;EAAW;AAI9C;AAIA;SEkCS;;;ADaT;EACoB,MAAA,CAAA,ECTT,sBDSS;;;;AAGpB;AAcgB,KCpBJ,YAAA,GAAe,KDoBQ,CAAA,CCpBD,oBDoBW,ECpBW,cDoBoB,CAAA,CAAA;;;;ACxD3D,iBAyCD,SAAA,CAzCW,OAAA,EAyCQ,UAzCR,CAAA,EAyCqB,YAzCrB;;;iBCRX,eAAA,CAAA,GAAmB"}
|
package/dist/{shiki-highlighter-chunk-Cwu1Jr9o.d.ts → shiki-highlighter-chunk-DcY3Ud8v.d.ts}
RENAMED
|
@@ -15,5 +15,5 @@ type HighlighterResult = {
|
|
|
15
15
|
};
|
|
16
16
|
declare function createOrGetHighlighter(options: HighlighterOptions): HighlighterResult;
|
|
17
17
|
//#endregion
|
|
18
|
-
export {
|
|
19
|
-
//# sourceMappingURL=shiki-highlighter-chunk-
|
|
18
|
+
export { createOrGetHighlighter as i, HighlighterResult as n, ShikiHighlighterOptions as r, HighlighterOptions as t };
|
|
19
|
+
//# sourceMappingURL=shiki-highlighter-chunk-DcY3Ud8v.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shiki-highlighter-chunk-DcY3Ud8v.d.ts","names":[],"sources":["../src/code-block/shiki-highlighter-chunk.ts"],"sourcesContent":[],"mappings":";;;UAeiB,uBAAA,SAAgC,0BAA0B,iBAAiB;AAA3E,UAEA,kBAAA,SAA2B,IAFH,CAEQ,uBAFR,EAAA,OAAA,GAAA,QAAA,CAAA,CAAA;EAAkC,MAAA,EAGjE,YAHiE,EAAA;EAAiB,KAAA,EAAA,CAIlF,eAJkF,GAIhE,eAJgE,CAAA,EAAA;;AAAlB,KAwC9D,iBAAA,GAxC8D;EAEzD,WAAA,EAwCA,WAxCmB;EAAa,OAAA,CAAA,EAAA,SAAA;CACvC,GAAA;EACA,WAAA,CAAA,EAAA,SAAA;EAAkB,OAAA,EA2Cf,OA3Ce,CAAA,IAAA,CAAA;CAFgB;AAAI,iBAgDhC,sBAAA,CAhDgC,OAAA,EAiDrC,kBAjDqC,CAAA,EAkD7C,iBAlD6C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { i as createOrGetHighlighter, n as HighlighterResult, r as ShikiHighlighterOptions, t as HighlighterOptions } from "./shiki-highlighter-chunk-DcY3Ud8v.js";
|
|
2
2
|
export { HighlighterOptions, HighlighterResult, ShikiHighlighterOptions, createOrGetHighlighter };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineDropIndicator } from "./drop-indicator-
|
|
1
|
+
import { t as defineDropIndicator } from "./drop-indicator-BMvWUDXz.js";
|
|
2
2
|
import { defaultBlockAt, defineCommands, defineNodeSpec, definePlugin, getNodeType, insertNode, union } from "@prosekit/core";
|
|
3
3
|
import { TextSelection } from "@prosekit/pm/state";
|
|
4
4
|
import { CellSelection, TableMap, addColumnAfter, addColumnBefore, addRowAfter, addRowBefore, columnResizing, deleteCellSelection, deleteColumn, deleteRow, deleteTable, findCellPos, findCellRange, findTable, mergeCells, moveTableColumn, moveTableRow, splitCell, tableEditing, tableNodes } from "prosemirror-tables";
|
|
@@ -42,19 +42,14 @@ function createEmptyTable(schema, row, col, header) {
|
|
|
42
42
|
const tableCellType = getNodeType(schema, "tableCell");
|
|
43
43
|
const tableHeaderCellType = getNodeType(schema, "tableHeaderCell");
|
|
44
44
|
if (header) {
|
|
45
|
-
const
|
|
46
|
-
const headerCells = repeat(headerCell, col);
|
|
45
|
+
const headerCells = repeat(tableHeaderCellType.createAndFill(), col);
|
|
47
46
|
const headerRow = tableRowType.createAndFill(null, headerCells);
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const bodyRow = tableRowType.createAndFill(null, bodyCells);
|
|
51
|
-
const bodyRows = repeat(bodyRow, row - 1);
|
|
47
|
+
const bodyCells = repeat(tableCellType.createAndFill(), col);
|
|
48
|
+
const bodyRows = repeat(tableRowType.createAndFill(null, bodyCells), row - 1);
|
|
52
49
|
return tableType.createAndFill(null, [headerRow, ...bodyRows]);
|
|
53
50
|
} else {
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
const bodyRow = tableRowType.createAndFill(null, bodyCells);
|
|
57
|
-
const bodyRows = repeat(bodyRow, row);
|
|
51
|
+
const bodyCells = repeat(tableCellType.createAndFill(), col);
|
|
52
|
+
const bodyRows = repeat(tableRowType.createAndFill(null, bodyCells), row);
|
|
58
53
|
return tableType.createAndFill(null, bodyRows);
|
|
59
54
|
}
|
|
60
55
|
}
|
|
@@ -72,8 +67,7 @@ function repeat(node, length) {
|
|
|
72
67
|
function insertTable(options) {
|
|
73
68
|
return (state, dispatch, view) => {
|
|
74
69
|
const { row, col, header = false } = options;
|
|
75
|
-
|
|
76
|
-
return insertNode({ node: table })(state, dispatch, view);
|
|
70
|
+
return insertNode({ node: createEmptyTable(state.schema, row, col, header) })(state, dispatch, view);
|
|
77
71
|
};
|
|
78
72
|
}
|
|
79
73
|
|
|
@@ -95,8 +89,7 @@ function isCellSelection(value) {
|
|
|
95
89
|
*/
|
|
96
90
|
function selectTable(options) {
|
|
97
91
|
return (state, dispatch) => {
|
|
98
|
-
const
|
|
99
|
-
const table = findTable($pos);
|
|
92
|
+
const table = findTable(options?.pos ? state.doc.resolve(options.pos) : state.selection.$anchor);
|
|
100
93
|
if (!table) return false;
|
|
101
94
|
const map = TableMap.get(table.node);
|
|
102
95
|
if (map.map.length === 0) return false;
|
|
@@ -106,9 +99,7 @@ function selectTable(options) {
|
|
|
106
99
|
const lastCellPosInTable = map.map[map.map.length - 1];
|
|
107
100
|
const firstCellPos = table.pos + firstCellPosInTable + 1;
|
|
108
101
|
const lastCellPos = table.pos + lastCellPosInTable + 1;
|
|
109
|
-
const
|
|
110
|
-
const $lastCellPos = tr.doc.resolve(lastCellPos);
|
|
111
|
-
const selection = new CellSelection($firstCellPos, $lastCellPos);
|
|
102
|
+
const selection = new CellSelection(tr.doc.resolve(firstCellPos), tr.doc.resolve(lastCellPos));
|
|
112
103
|
tr = tr.setSelection(selection);
|
|
113
104
|
dispatch?.(tr);
|
|
114
105
|
}
|
|
@@ -293,5 +284,5 @@ function defineTable() {
|
|
|
293
284
|
}
|
|
294
285
|
|
|
295
286
|
//#endregion
|
|
296
|
-
export {
|
|
297
|
-
//# sourceMappingURL=table-
|
|
287
|
+
export { insertTable as _, defineTableSpec as a, defineTableCommands as c, selectTableCell as d, selectTable as f, moveTableColumn as g, moveTableRow as h, defineTableRowSpec as i, selectTableRow as l, isCellSelection as m, defineTableCellSpec as n, defineTablePlugins as o, findTable as p, defineTableHeaderCellSpec as r, defineTableDropIndicator as s, defineTable as t, selectTableColumn as u, exitTable as v };
|
|
288
|
+
//# sourceMappingURL=table-BLjD91VB.js.map
|