Files
upstream-tiptap/packages/extension-subscript/src/subscript.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

98 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Mark, mergeAttributes } from '@tiptap/core'
import type { StyleParseRule } from '@tiptap/pm/model'
export interface SubscriptExtensionOptions {
/**
* HTML attributes to add to the subscript element.
* @default {}
* @example { class: 'foo' }
*/
HTMLAttributes: Record<string, any>
}
declare module '@tiptap/core' {
interface Commands<ReturnType> {
subscript: {
/**
* Set a subscript mark
* @example editor.commands.setSubscript()
*/
setSubscript: () => ReturnType
/**
* Toggle a subscript mark
* @example editor.commands.toggleSubscript()
*/
toggleSubscript: () => ReturnType
/**
* Unset a subscript mark
* @example editor.commands.unsetSubscript()
*/
unsetSubscript: () => ReturnType
}
}
}
/**
* This extension allows you to create subscript text.
* @see https://www.tiptap.dev/api/marks/subscript
*/
export const Subscript = Mark.create<SubscriptExtensionOptions>({
name: 'subscript',
addOptions() {
return {
HTMLAttributes: {},
}
},
parseHTML() {
return [
{
tag: 'sub',
},
{
style: 'vertical-align',
getAttrs(value) {
// Don’t match this rule if the vertical align isn’t sub.
if (value !== 'sub') {
return false
}
// If it falls through we’ll match, and this mark will be applied.
return null
},
} as StyleParseRule,
]
},
renderHTML({ HTMLAttributes }) {
return ['sub', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]
},
addCommands() {
return {
setSubscript:
() =>
({ commands }) => {
return commands.setMark(this.name)
},
toggleSubscript:
() =>
({ commands }) => {
return commands.toggleMark(this.name)
},
unsetSubscript:
() =>
({ commands }) => {
return commands.unsetMark(this.name)
},
}
},
addKeyboardShortcuts() {
return {
'Mod-,': () => this.editor.commands.toggleSubscript(),
}
},
})