Add vitepress docs

This commit is contained in:
Ticruz
2025-02-04 14:43:40 +01:00
committed by Jon Staab
parent 43255bcb74
commit 94375a56ec
84 changed files with 10821 additions and 139 deletions
+154
View File
@@ -0,0 +1,154 @@
# @welshman/editor
`@welshman/editor` provides a comprehensive Nostr-ready text editor, built on top of [nostr-editor](https://github.com/cesardeazevedo/nostr-editor).
This package powers the editors of [Coracle](https://coracle.social) and [Flotilla](https://flotilla.social).
## Installation
```bash
npm install @welshman/editor
```
## WelshmanExtension
The `WelshmanExtension` is the main entry point of the package, providing a pre-configured collection of extensions optimized for Nostr content creation.
### Configuration
```typescript
interface WelshmanOptions {
// Required: Function to sign events
sign: (event: StampedEvent) => Promise<SignedEvent>
// Required: Handler for submit action
submit: () => void
// File upload configuration
defaultUploadUrl?: string // Default: "https://nostr.build"
defaultUploadType?: "nip96" | "blossom" // Default: "nip96"
// Extension configuration
extensions?: WelshmanExtensionOptions
}
```
### Included Extensions
The extension bundles and configures multiple TipTap and nostr-editor extensions:
#### Core TipTap Extensions
- Document
- Text
- Paragraph
- History
- CodeBlock
- CodeInline
- Dropcursor
- Gapcursor
- Placeholder
#### Nostr-specific Extensions
- NostrExtension (base)
- Bolt11Extension (Lightning invoices)
- FileUploadExtension
- ImageExtension
- LinkExtension
- NAddrExtension (Nostr addresses)
- NEventExtension (Nostr events)
- NProfileExtension (Nostr profiles)
- TagExtension
- VideoExtension
- NSecRejectExtension
#### Custom Extensions
- BreakOrSubmit (Enter key handling)
- WordCount
### Usage
```typescript
import { Editor } from '@tiptap/core'
import { WelshmanExtension } from '@welshman/editor'
const editor = new Editor({
extensions: [
WelshmanExtension.configure({
// Required: Event signing function
sign: async (event) => {
return signEvent(event)
},
// Required: Submit handler
submit: () => {
handleSubmit(editor.getText())
},
// Optional: Custom upload configuration
defaultUploadUrl: "https://nostr.build",
defaultUploadType: "nip96",
// Optional: Extension configuration
extensions: {
// Disable specific extensions
wordCount: false,
tag: false,
// Configure extensions
placeholder: {
config: {
placeholder: 'What\'s on your mind?'
}
},
// Extend existing extensions
codeBlock: {
extend: {
renderText: (props) => '```' + props.node.textContent + '```'
}
},
fileUpload: {
config: {
immediateUpload: true,
allowedMimeTypes: [
"image/jpeg",
"image/png",
"video/mp4"
]
}
}
}
})
]
})
```
### Extension Configuration
Each extension can be configured using the `WelshmanExtensionOptions`:
```typescript
type WelshmanExtensionOptions = {
[ExtensionName: string]: {
// Disable the extension
false |
// Configure the extension
{
// Extension-specific configuration
config?: Partial<ExtensionConfig>
// Extend the extension's functionality
extend?: Partial<ExtensionAPI>
}
}
}
```
### Custom Components
The extension includes Svelte components for rendering various Nostr entities in the editor:
- EditBolt11: Lightning invoice
- EditMedia: Image and video
- EditEvent: Nostr event
- EditMention: Nostr profile mention