@silentsheet/core
Version:
a quiet space to write.
117 lines (88 loc) • 3 kB
Markdown
core functionality for silentsheet - a minimalist text editor.
```bash
npm install @silentsheet/core
```
```typescript
import { SilentSheet } from '@silentsheet/core';
// Create a new instance with optional initial state
const editor = new SilentSheet({
content: 'Hello world',
theme: 'light'
});
// Get current state
const state = editor.getState();
// Get actions
const actions = editor.getActions();
// Subscribe to UI changes
const unsubscribe = editor.subscribeToUI(() => {
console.log('UI updated:', editor.getState());
});
// Example: Set content and save it
actions.setContent('New content');
actions.saveContent();
// Example: Toggle timer
actions.toggleTimer(); // Starts 15-minute timer
actions.resetTimer(); // Resets to 15:00
// Cleanup
unsubscribe();
```
- automatic settings persistence in localStorage
- manual content persistence via `saveContent()`
- 15-minute focus timer with start/stop/reset
- four sizes (small, medium, large, full)
- font size control (number)
- three themes (light, sepia, night)
- three font families (serif, sans-serif, monospace)
- typescript support
## api
### constructor
```typescript
new SilentSheet(initialState?: Partial<SilentSheetState>)
```
Creates a new editor instance. The `initialState` is optional and will override both defaults and any saved state from localStorage. Timer state (running/seconds) is always reset on initialization.
### state
```typescript
interface SilentSheetState {
content: string;
font: 'serif' | 'sans-serif' | 'monospace';
fontSize: number;
theme: 'light' | 'sepia' | 'night';
size: 'small' | 'medium' | 'large' | 'full';
timerRunning: boolean;
timerSeconds: number;
}
```
Default values:
```typescript
{
content: '',
font: 'sans-serif',
fontSize: 24,
theme: 'sepia',
size: 'medium',
timerRunning: false,
timerSeconds: 900 // 15 minutes
}
```
- `getState(): SilentSheetState` - Get current state
- `getActions(): SilentSheetActions` - Get available actions
- `subscribeToUI(callback: () => void): () => void` - Subscribe to UI changes, returns unsubscribe function
- `setContent(content: string)` - Update content (does not auto-save)
- `saveContent()` - Save current content to localStorage
- `clearContent()` - Clear and save empty content
- `setFont(font: Font)` - Change font family (auto-saves)
- `setFontSize(size: number)` - Change font size (auto-saves)
- `setTheme(theme: Theme)` - Change theme (auto-saves)
- `setSize(size: Size)` - Change size (auto-saves)
- `toggleTimer()` - Start timer (15:00) or stop and reset if running
- `resetTimer()` - Stop timer and reset to 15:00
## storage
The editor uses localStorage with key 'silentsheet' to persist state. All UI settings (font, fontSize, theme, size) are automatically saved when changed. Content must be explicitly saved using `saveContent()`.
## license
mit © [hamza saleem](https://github.com/hamzasaleem2)