Files
upstream-tiptap/packages/extension-invisible-characters/src/invisible-characters.ts
upstream-mirror 083a46e93b
Some checks failed
Verify / Install node dependencies (push) Failing after 2s
Verify / Build packages (push) Has been skipped
Verify / Check linting & formatting (push) Has been skipped
Verify / Run unit tests (push) Has been skipped
Verify / Run e2e tests (shard 1/4) (push) Has been skipped
Verify / Run e2e tests (shard 2/4) (push) Has been skipped
Verify / Run e2e tests (shard 3/4) (push) Has been skipped
Verify / Run e2e tests (shard 4/4) (push) Has been skipped
Publish / Resolve publish config (push) Failing after 2s
Publish / Send notification to Slack (push) Has been skipped
Publish / Send failure notification to Slack (push) Failing after 8s
Verify / Merge e2e reports (push) Has been skipped
Publish / Build (push) Has been skipped
Publish / Bump Versions OR Release to Registry (push) Has been skipped
snapshot of https://github.com/ueberdosis/tiptap.git (main, 2026-09-15; blobs > 131072B omitted)
2026-09-15 21:11:02 +05:00

96 lines
2.3 KiB
TypeScript

import { Extension } from '@tiptap/core'
import { InvisibleCharactersPlugin, InvisibleCharactersPluginKey } from './plugin/index.js'
import { HardBreakNode } from './plugin/invisible-characters/hardBreak.js'
import { ParagraphNode } from './plugin/invisible-characters/paragraph.js'
import { SpaceCharacter } from './plugin/invisible-characters/space.js'
import type { InvisibleCharactersOptions } from './types.js'
export { HardBreakNode, ParagraphNode, SpaceCharacter }
declare module '@tiptap/core' {
interface Commands<ReturnType> {
invisibleCharacters: {
/**
* Show invisible characters
*/
showInvisibleCharacters: (show?: boolean) => ReturnType
/**
* Hide invisible characters
*/
hideInvisibleCharacters: () => ReturnType
/**
* Toggle invisible characters
*/
toggleInvisibleCharacters: () => ReturnType
}
}
}
export const InvisibleCharacters = Extension.create<InvisibleCharactersOptions>({
name: 'invisibleCharacters',
addOptions() {
return {
visible: true,
builders: [new SpaceCharacter(), new ParagraphNode(), new HardBreakNode()],
injectCSS: true,
injectNonce: undefined,
}
},
addProseMirrorPlugins() {
return [InvisibleCharactersPlugin(this.editor.state, this.options)]
},
addStorage() {
return {
visibility: () => this.options.visible,
}
},
onBeforeCreate() {
this.storage.visibility = () => {
return InvisibleCharactersPluginKey.getState(this.editor.state)?.visible
}
},
addCommands() {
return {
showInvisibleCharacters:
(visibility = true) =>
({ dispatch, tr }) => {
if (dispatch) {
tr.setMeta('setInvisibleCharactersVisible', visibility)
}
return true
},
hideInvisibleCharacters:
() =>
({ dispatch, tr }) => {
if (dispatch) {
tr.setMeta('setInvisibleCharactersVisible', false)
}
return true
},
toggleInvisibleCharacters:
() =>
({ dispatch, tr, state }) => {
const visibility = !InvisibleCharactersPluginKey.getState(state)?.visible
if (dispatch) {
tr.setMeta('setInvisibleCharactersVisible', visibility)
}
return true
},
}
},
})
export default InvisibleCharacters