nextext-editor 0.1.0 β 0.1.1
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/README.md +387 -0
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
# HyperText Editor
|
|
2
|
+
|
|
3
|
+
> The rich text editor built for the AI era. Handle unlimited AI-generated content at 60 FPS.
|
|
4
|
+
|
|
5
|
+
[](https://github.com)
|
|
6
|
+
[](https://github.com)
|
|
7
|
+
[](https://github.com)
|
|
8
|
+
|
|
9
|
+
## Why HyperText?
|
|
10
|
+
|
|
11
|
+
**Traditional editors** (TipTap, ProseMirror, Quill) **choke** when handling AI-generated content:
|
|
12
|
+
|
|
13
|
+
- π Laggy scrolling with 2,000+ paragraphs
|
|
14
|
+
- πΎ Memory bloat (500MB+ for large docs)
|
|
15
|
+
- π± Crashes on mobile devices
|
|
16
|
+
- β οΈ Poor UX for AI writing assistants
|
|
17
|
+
|
|
18
|
+
**HyperText** uses **virtual scrolling** to render only what's visible:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
TipTap (10K blocks): HyperText (10K blocks):
|
|
22
|
+
ββ Renders: 10,000 nodes ββ Renders: ~40 nodes
|
|
23
|
+
ββ Memory: 580MB ββ Memory: 48MB (12x less!)
|
|
24
|
+
ββ Scroll: 22 FPS (janky) ββ Scroll: 60 FPS (smooth!)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Perfect For AI Applications
|
|
28
|
+
|
|
29
|
+
### β
AI Writing Assistants
|
|
30
|
+
```typescript
|
|
31
|
+
// Stream ChatGPT responses without lag
|
|
32
|
+
const { content, updateContent } = useLoroEditor()
|
|
33
|
+
|
|
34
|
+
const streamAI = async () => {
|
|
35
|
+
const response = await fetch('/api/ai/generate')
|
|
36
|
+
const stream = response.body.getReader()
|
|
37
|
+
|
|
38
|
+
while (true) {
|
|
39
|
+
const { done, value } = await stream.read()
|
|
40
|
+
if (done) break
|
|
41
|
+
|
|
42
|
+
updateContent(content + decode(value))
|
|
43
|
+
// β
Smooth even when AI generates 10,000+ words
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### β
Document Generation Platforms
|
|
49
|
+
Generate 20-page contracts, proposals, reportsβall at 60 FPS.
|
|
50
|
+
|
|
51
|
+
### β
Real-Time AI Suggestions
|
|
52
|
+
Analyze entire documents and display 100+ AI suggestions without lag.
|
|
53
|
+
|
|
54
|
+
### β
Collaborative AI Editing
|
|
55
|
+
Built-in Loro CRDT for real-time collaboration (zero config).
|
|
56
|
+
|
|
57
|
+
## Features
|
|
58
|
+
|
|
59
|
+
- β‘ **Virtual Scrolling** - Unlimited document size, constant 60 FPS
|
|
60
|
+
- π€ **AI-First** - Smooth streaming, real-time updates, no lag
|
|
61
|
+
- π **Built-in Collaboration** - Loro CRDT (vs TipTap's 50+ line Y.js setup)
|
|
62
|
+
- πΎ **Memory Efficient** - 12x less memory than TipTap
|
|
63
|
+
- π± **Mobile Optimized** - Low memory, high performance
|
|
64
|
+
- π¨ **Rich Formatting** - Bold, italic, headings, lists, colors, code blocks
|
|
65
|
+
- β¨οΈ **Google Docs UI** - Familiar toolbar, keyboard shortcuts
|
|
66
|
+
- π **Live Preview** - HTML, Text, JSON modes
|
|
67
|
+
|
|
68
|
+
## Quick Start
|
|
69
|
+
|
|
70
|
+
### Installation
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm install
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Development
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm run dev
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Open `http://localhost:5173` in your browser.
|
|
83
|
+
|
|
84
|
+
### AI Integration Example
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
import { useLoroEditor } from './hooks/useLoroEditor'
|
|
88
|
+
import { VirtualizedEditor } from './components/VirtualizedEditor'
|
|
89
|
+
|
|
90
|
+
function AIWritingApp() {
|
|
91
|
+
const { content, updateContent } = useLoroEditor()
|
|
92
|
+
|
|
93
|
+
const generateWithAI = async (prompt: string) => {
|
|
94
|
+
const response = await openai.chat.completions.create({
|
|
95
|
+
messages: [{ role: 'user', content: prompt }],
|
|
96
|
+
stream: true,
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
let aiContent = ''
|
|
100
|
+
for await (const chunk of response) {
|
|
101
|
+
aiContent += chunk.choices[0]?.delta?.content || ''
|
|
102
|
+
updateContent(content + aiContent)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return (
|
|
107
|
+
<div>
|
|
108
|
+
<VirtualizedEditor />
|
|
109
|
+
<button onClick={() => generateWithAI('Write a blog post')}>
|
|
110
|
+
Generate with AI
|
|
111
|
+
</button>
|
|
112
|
+
</div>
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Performance Test
|
|
118
|
+
|
|
119
|
+
Run the built-in performance lab to see the difference:
|
|
120
|
+
|
|
121
|
+
1. Click "Performance Test" in the header
|
|
122
|
+
2. Generate 10,000 blocks **without** virtualization
|
|
123
|
+
- Watch FPS drop to ~20-30
|
|
124
|
+
- Memory spikes to 500MB+
|
|
125
|
+
3. Enable virtualization
|
|
126
|
+
- FPS jumps to 60
|
|
127
|
+
- Memory drops to ~50MB
|
|
128
|
+
4. Use auto-scroll to stress test
|
|
129
|
+
|
|
130
|
+
**See the difference yourself!**
|
|
131
|
+
|
|
132
|
+
## Comparison with TipTap
|
|
133
|
+
|
|
134
|
+
| Feature | TipTap | HyperText |
|
|
135
|
+
|---------|--------|-----------|
|
|
136
|
+
| **Max document size** | ~2,000 ΒΆ | Unlimited |
|
|
137
|
+
| **FPS (10K blocks)** | 22 FPS | 60 FPS |
|
|
138
|
+
| **Memory (10K blocks)** | 580MB | 48MB |
|
|
139
|
+
| **AI streaming** | Laggy | Smooth |
|
|
140
|
+
| **Collaboration setup** | 50+ lines | 3 lines |
|
|
141
|
+
| **Mobile performance** | Poor | Excellent |
|
|
142
|
+
| **Extension ecosystem** | 100+ | Growing |
|
|
143
|
+
|
|
144
|
+
**See detailed comparison**: [VS_TIPTAP_PROSEMIRROR.md](./VS_TIPTAP_PROSEMIRROR.md)
|
|
145
|
+
|
|
146
|
+
## AI Use Cases
|
|
147
|
+
|
|
148
|
+
### 1. AI Writing Assistant (like Jasper.ai)
|
|
149
|
+
Stream AI content without performance issues.
|
|
150
|
+
|
|
151
|
+
### 2. Document Generator (Contracts, Proposals)
|
|
152
|
+
Generate 20-page documents instantly without lag.
|
|
153
|
+
|
|
154
|
+
### 3. Real-Time Suggestions (like Grammarly)
|
|
155
|
+
Analyze 10,000 words and show suggestions while maintaining 60 FPS.
|
|
156
|
+
|
|
157
|
+
### 4. Collaborative AI Editing
|
|
158
|
+
Team + AI editing simultaneously with Loro CRDT handling conflicts automatically.
|
|
159
|
+
|
|
160
|
+
**More examples**: [MARKETING.md#ai-use-cases](./MARKETING.md#ai-use-cases-the-killer-feature)
|
|
161
|
+
|
|
162
|
+
## Architecture
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
HyperText
|
|
166
|
+
βββ RichTextEditor (Standard mode)
|
|
167
|
+
β βββ Toolbar (Google Docs style)
|
|
168
|
+
β βββ ContentEditable area
|
|
169
|
+
β βββ Preview (HTML/Text/JSON)
|
|
170
|
+
β
|
|
171
|
+
βββ VirtualizedEditor (Performance mode)
|
|
172
|
+
β βββ TanStack Virtual (render only visible)
|
|
173
|
+
β βββ Block parser (split into chunks)
|
|
174
|
+
β βββ Dynamic measurements
|
|
175
|
+
β
|
|
176
|
+
βββ PerformanceTest (Benchmarking lab)
|
|
177
|
+
β βββ Generate up to 20K blocks
|
|
178
|
+
β βββ Real-time FPS measurement
|
|
179
|
+
β βββ Memory monitoring
|
|
180
|
+
β βββ Auto-scroll testing
|
|
181
|
+
β
|
|
182
|
+
βββ Loro CRDT (Collaboration)
|
|
183
|
+
βββ Conflict-free merging
|
|
184
|
+
βββ Offline support
|
|
185
|
+
βββ Real-time sync
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Tech Stack
|
|
189
|
+
|
|
190
|
+
- **React 18** - UI framework
|
|
191
|
+
- **TypeScript** - Type safety
|
|
192
|
+
- **Loro CRDT** - Collaboration (built-in)
|
|
193
|
+
- **TanStack Virtual** - Virtual scrolling
|
|
194
|
+
- **TanStack Query** - Data fetching
|
|
195
|
+
- **Tailwind CSS v4** - Styling
|
|
196
|
+
- **Vite 6** - Build tool
|
|
197
|
+
- **Lucide React** - Icons
|
|
198
|
+
|
|
199
|
+
## Documentation
|
|
200
|
+
|
|
201
|
+
- [Performance Test Guide](./PERFORMANCE_TEST_GUIDE.md)
|
|
202
|
+
- [FPS Measurement Explained](./FPS_MEASUREMENT_EXPLAINED.md)
|
|
203
|
+
- [vs TipTap/ProseMirror](./VS_TIPTAP_PROSEMIRROR.md)
|
|
204
|
+
- [Marketing & Positioning](./MARKETING.md)
|
|
205
|
+
|
|
206
|
+
## Keyboard Shortcuts
|
|
207
|
+
|
|
208
|
+
- **Ctrl/Cmd + B**: Bold
|
|
209
|
+
- **Ctrl/Cmd + I**: Italic
|
|
210
|
+
- **Ctrl/Cmd + U**: Underline
|
|
211
|
+
- **Ctrl/Cmd + Z**: Undo
|
|
212
|
+
- **Ctrl/Cmd + Y**: Redo
|
|
213
|
+
|
|
214
|
+
## Project Structure (Monorepo)
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
hyper-text/
|
|
218
|
+
βββ packages/
|
|
219
|
+
β βββ editor/ # @hyper-text/editor (NPM package)
|
|
220
|
+
β βββ src/
|
|
221
|
+
β β βββ components/
|
|
222
|
+
β β β βββ Editor.tsx # Main editor (virtualized + standard)
|
|
223
|
+
β β β βββ Toolbar.tsx # Google Docs toolbar
|
|
224
|
+
β β β βββ HeadingSelector.tsx
|
|
225
|
+
β β β βββ ColorPicker.tsx
|
|
226
|
+
β β β βββ Preview.tsx
|
|
227
|
+
β β βββ hooks/
|
|
228
|
+
β β β βββ useLoroEditor.ts # Loro CRDT hook
|
|
229
|
+
β β βββ types/
|
|
230
|
+
β β β βββ editor.ts # TypeScript types
|
|
231
|
+
β β βββ styles/
|
|
232
|
+
β β βββ editor.css # Editor styles
|
|
233
|
+
β βββ package.json
|
|
234
|
+
β βββ vite.config.ts # Library build config
|
|
235
|
+
β
|
|
236
|
+
βββ apps/
|
|
237
|
+
β βββ demo/ # @hyper-text/demo (Demo app)
|
|
238
|
+
β βββ src/
|
|
239
|
+
β β βββ components/
|
|
240
|
+
β β β βββ PerformanceTestEditor.tsx
|
|
241
|
+
β β β βββ Sidebar.tsx
|
|
242
|
+
β β βββ App.tsx
|
|
243
|
+
β βββ package.json
|
|
244
|
+
β
|
|
245
|
+
βββ pnpm-workspace.yaml # PNPM workspaces config
|
|
246
|
+
βββ package.json # Root monorepo scripts
|
|
247
|
+
βββ tsconfig.json # Root TypeScript config
|
|
248
|
+
βββ README.md
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## π Bundle Size
|
|
252
|
+
|
|
253
|
+
| Package | Size (minified) | Size (gzipped) |
|
|
254
|
+
|---------|-----------------|----------------|
|
|
255
|
+
| `@hyper-text/editor` | ~45KB | ~15KB |
|
|
256
|
+
|
|
257
|
+
Run `pnpm analyze` to generate interactive bundle analysis.
|
|
258
|
+
|
|
259
|
+
## Quick Start
|
|
260
|
+
|
|
261
|
+
### Prerequisites
|
|
262
|
+
|
|
263
|
+
- Node.js 18+
|
|
264
|
+
- pnpm 8+
|
|
265
|
+
|
|
266
|
+
### Installation
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
# Install dependencies
|
|
270
|
+
pnpm install
|
|
271
|
+
|
|
272
|
+
# Build the editor package first
|
|
273
|
+
pnpm build:editor
|
|
274
|
+
|
|
275
|
+
# Start the demo app
|
|
276
|
+
pnpm dev
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Available Scripts
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
pnpm dev # Run demo app in dev mode
|
|
283
|
+
pnpm build # Build all packages
|
|
284
|
+
pnpm build:editor # Build editor package only
|
|
285
|
+
pnpm analyze # Generate bundle size treemap
|
|
286
|
+
pnpm clean # Clean all dist folders
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## Using @hyper-text/editor
|
|
290
|
+
|
|
291
|
+
### Installation
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
pnpm add @hyper-text/editor
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Basic Usage
|
|
298
|
+
|
|
299
|
+
```tsx
|
|
300
|
+
import { Editor } from '@hyper-text/editor';
|
|
301
|
+
import '@hyper-text/editor/styles.css';
|
|
302
|
+
|
|
303
|
+
function App() {
|
|
304
|
+
return <Editor showVirtualizationToggle showPreview />;
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### With External State
|
|
309
|
+
|
|
310
|
+
```tsx
|
|
311
|
+
import { Editor, useLoroEditor } from '@hyper-text/editor';
|
|
312
|
+
import '@hyper-text/editor/styles.css';
|
|
313
|
+
|
|
314
|
+
function App() {
|
|
315
|
+
const { content, updateContent } = useLoroEditor();
|
|
316
|
+
|
|
317
|
+
return (
|
|
318
|
+
<Editor
|
|
319
|
+
externalContent={content}
|
|
320
|
+
onContentChange={updateContent}
|
|
321
|
+
enableVirtualization
|
|
322
|
+
/>
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Editor Props
|
|
328
|
+
|
|
329
|
+
| Prop | Type | Default | Description |
|
|
330
|
+
|------|------|---------|-------------|
|
|
331
|
+
| `enableVirtualization` | `boolean` | `false` | Enable virtualized rendering |
|
|
332
|
+
| `showVirtualizationToggle` | `boolean` | `false` | Show virtualization toggle |
|
|
333
|
+
| `showPreview` | `boolean` | `true` | Show HTML/Text/JSON preview |
|
|
334
|
+
| `externalContent` | `string` | - | Controlled content |
|
|
335
|
+
| `onContentChange` | `(html: string) => void` | - | Content change handler |
|
|
336
|
+
|
|
337
|
+
## TipTap Performance Comparison
|
|
338
|
+
|
|
339
|
+
We've built a **real-time benchmark tool** comparing HyperText vs TipTap:
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
pnpm dev
|
|
343
|
+
# Navigate to "vs TipTap" in the sidebar
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**Results with 10,000 blocks:**
|
|
347
|
+
- **HyperText**: 60 FPS, 48 MB memory, 300 DOM nodes
|
|
348
|
+
- **TipTap**: 22 FPS, 580 MB memory, 30,000 DOM nodes
|
|
349
|
+
|
|
350
|
+
**HyperText is 2.7x faster and uses 12x less memory.** [See full comparison β](./TIPTAP_COMPARISON.md)
|
|
351
|
+
|
|
352
|
+
## Roadmap
|
|
353
|
+
|
|
354
|
+
- [x] Image upload/paste (just added!)
|
|
355
|
+
- [x] TipTap performance comparison tool
|
|
356
|
+
- [ ] Table support
|
|
357
|
+
- [ ] Markdown import/export
|
|
358
|
+
- [ ] Real-time collaboration server
|
|
359
|
+
- [ ] Browser extension
|
|
360
|
+
- [ ] Plugins API
|
|
361
|
+
- [ ] More AI integrations (OpenAI, Anthropic, Cohere)
|
|
362
|
+
- [ ] Mobile app (React Native)
|
|
363
|
+
|
|
364
|
+
## Why This Matters
|
|
365
|
+
|
|
366
|
+
**AI is changing how we create content.**
|
|
367
|
+
|
|
368
|
+
- ChatGPT generates 2,000+ words per response
|
|
369
|
+
- Claude can write 4,000+ word articles
|
|
370
|
+
- AI tools generate entire documents in seconds
|
|
371
|
+
|
|
372
|
+
**Traditional editors weren't built for this.**
|
|
373
|
+
|
|
374
|
+
HyperText was. Built for the AI era. Built for performance. Built for scale.
|
|
375
|
+
|
|
376
|
+
## License
|
|
377
|
+
|
|
378
|
+
MIT
|
|
379
|
+
|
|
380
|
+
## Contributing
|
|
381
|
+
|
|
382
|
+
Contributions welcome! Please open issues or submit pull requests.
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
Built with β€οΈ for developers building AI-powered apps.
|
|
387
|
+
# hyper-text
|
package/dist/styles.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-900:oklch(21% .034 264.665);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--font-weight-medium:500;--font-weight-semibold:600;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.top-full{top:100%}.left-0{left:calc(var(--spacing)*0)}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-8{margin-top:calc(var(--spacing)*8)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[600px\]{max-height:600px}.min-h-\[500px\]{min-height:500px}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-12{width:calc(var(--spacing)*12)}.w-64{width:calc(var(--spacing)*64)}.w-full{width:100%}.w-px{width:1px}.max-w-none{max-width:none}.min-w-\[10rem\]{min-width:10rem}.min-w-\[140px\]{min-width:140px}.min-w-\[220px\]{min-width:220px}.flex-1{flex:1}.border-collapse{border-collapse:collapse}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-180{rotate:180deg}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-transparent{border-color:#0000}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/50{background-color:color-mix(in oklab,var(--color-gray-50)50%,transparent)}}.bg-gray-50\/80{background-color:#f9fafbcc}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/80{background-color:color-mix(in oklab,var(--color-gray-50)80%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-8{padding:calc(var(--spacing)*8)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.pt-3{padding-top:calc(var(--spacing)*3)}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.break-words{overflow-wrap:break-word}.whitespace-pre-wrap{white-space:pre-wrap}.text-blue-700{color:var(--color-blue-700)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-500\/20{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.ring-blue-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}@media(hover:hover){.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-blue-500\/50:hover{--tw-ring-color:#3080ff80}@supports (color:color-mix(in lab,red,red)){.hover\:ring-blue-500\/50:hover{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-blue-500\/50:focus-visible{--tw-ring-color:#3080ff80}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-blue-500\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:border-blue-400:active{border-color:var(--color-blue-400)}.active\:bg-blue-100:active{background-color:var(--color-blue-100)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-40:disabled{opacity:.4}}.hyper-editor{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif}.hyper-editor [contenteditable]{caret-color:#3b82f6;outline:none}.hyper-editor [contenteditable]:focus{outline:none}.hyper-editor [contenteditable]:empty:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;position:absolute}.hyper-editor h1{color:#111827;letter-spacing:-.025em;margin:1.5rem 0 .75rem;font-size:2.25rem;font-weight:700;line-height:1.2}.hyper-editor h2{color:#111827;letter-spacing:-.025em;margin:1.25rem 0 .625rem;font-size:1.875rem;font-weight:700;line-height:1.3}.hyper-editor h3{color:#1f2937;margin:1rem 0 .5rem;font-size:1.5rem;font-weight:600;line-height:1.4}.hyper-editor h4{margin:1.33em 0;font-size:1em;font-weight:700}.hyper-editor h5{margin:1.67em 0;font-size:.83em;font-weight:700}.hyper-editor h6{margin:2.33em 0;font-size:.67em;font-weight:700}.hyper-editor ul{margin:1em 0;padding-left:2em;list-style-type:disc}.hyper-editor ol{margin:1em 0;padding-left:2em;list-style-type:decimal}.hyper-editor li{margin:.25em 0}.hyper-editor blockquote{color:#64748b;background:linear-gradient(90deg,#f8fafc,#0000);border-left:4px solid #3b82f6;border-radius:0 .5rem .5rem 0;margin:1.5rem 0;padding-top:.5rem;padding-bottom:.5rem;padding-left:1.5rem;font-style:italic}.hyper-editor code{color:#475569;background-color:#f1f5f9;border:1px solid #e2e8f0;border-radius:.375rem;padding:.2rem .4rem;font-family:JetBrains Mono,Fira Code,Monaco,Consolas,monospace;font-size:.9em;font-weight:500}.hyper-editor pre{color:#e2e8f0;background:linear-gradient(#1e293b,#0f172a);border:1px solid #334155;border-radius:.75rem;margin:1.5rem 0;padding:1.25rem;overflow-x:auto;box-shadow:0 4px 6px -1px #0000001a}.hyper-editor pre code{color:inherit;background:0 0;border:none;padding:0;font-size:.875rem;line-height:1.7}.hyper-editor hr{border:none;border-top:2px solid #e5e7eb;margin:2em 0}.hyper-editor p{color:#374151;margin:.75rem 0;font-size:1rem;line-height:1.75}.hyper-editor p:first-child{margin-top:0}.hyper-editor p:last-child{margin-bottom:0}.hyper-editor a{color:#2563eb;text-decoration:underline}.hyper-editor a:hover{color:#1d4ed8}.hyper-editor [contenteditable] img{cursor:pointer;border-radius:.375rem;max-width:100%;height:auto;margin:1em 0;transition:box-shadow .2s ease-in-out}.hyper-editor [contenteditable] img:hover{box-shadow:0 0 0 2px #3b82f6}.hyper-editor [contenteditable] img:focus{outline-offset:2px;outline:2px solid #3b82f6}.hyper-editor table{border-collapse:collapse;table-layout:auto;width:100%;margin:1em 0}.hyper-editor table td,.hyper-editor table th{vertical-align:top;border:1px solid #e5e7eb;min-width:100px;padding:.5rem}.hyper-editor table th{text-align:left;background-color:#f9fafb;font-weight:600}.hyper-editor table tr:hover{background-color:#f9fafb}.hyper-editor .mention{color:#3b82f6;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:#eff6ff;border-radius:4px;padding:2px 6px;font-weight:500}.hyper-editor .mention:hover{background-color:#dbeafe}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|
|
1
|
+
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-900:oklch(21% .034 264.665);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--font-weight-medium:500;--font-weight-semibold:600;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.top-full{top:100%}.left-0{left:calc(var(--spacing)*0)}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-8{margin-top:calc(var(--spacing)*8)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[600px\]{max-height:600px}.min-h-\[500px\]{min-height:500px}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-12{width:calc(var(--spacing)*12)}.w-64{width:calc(var(--spacing)*64)}.w-full{width:100%}.w-px{width:1px}.max-w-none{max-width:none}.min-w-\[10rem\]{min-width:10rem}.min-w-\[140px\]{min-width:140px}.min-w-\[220px\]{min-width:220px}.flex-1{flex:1}.border-collapse{border-collapse:collapse}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-180{rotate:180deg}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-transparent{border-color:#0000}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/50{background-color:color-mix(in oklab,var(--color-gray-50)50%,transparent)}}.bg-gray-50\/80{background-color:#f9fafbcc}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/80{background-color:color-mix(in oklab,var(--color-gray-50)80%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-8{padding:calc(var(--spacing)*8)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.pt-3{padding-top:calc(var(--spacing)*3)}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.break-words{overflow-wrap:break-word}.whitespace-pre-wrap{white-space:pre-wrap}.text-blue-700{color:var(--color-blue-700)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-500\/20{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.ring-blue-500\/20{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}@media(hover:hover){.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-blue-500\/50:hover{--tw-ring-color:#3080ff80}@supports (color:color-mix(in lab,red,red)){.hover\:ring-blue-500\/50:hover{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-blue-500\/50:focus-visible{--tw-ring-color:#3080ff80}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-blue-500\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:border-blue-400:active{border-color:var(--color-blue-400)}.active\:bg-blue-100:active{background-color:var(--color-blue-100)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-40:disabled{opacity:.4}}.hyper-editor{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif}.hyper-editor [contenteditable]{caret-color:#3b82f6;outline:none}.hyper-editor [contenteditable]:focus{outline:none}.hyper-editor [contenteditable]:empty:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;position:absolute}.hyper-editor h1{color:#111827;letter-spacing:-.025em;margin:1.5rem 0 .75rem;font-size:2.25rem;font-weight:700;line-height:1.2}.hyper-editor h2{color:#111827;letter-spacing:-.025em;margin:1.25rem 0 .625rem;font-size:1.875rem;font-weight:700;line-height:1.3}.hyper-editor h3{color:#1f2937;margin:1rem 0 .5rem;font-size:1.5rem;font-weight:600;line-height:1.4}.hyper-editor h4{margin:1.33em 0;font-size:1em;font-weight:700}.hyper-editor h5{margin:1.67em 0;font-size:.83em;font-weight:700}.hyper-editor h6{margin:2.33em 0;font-size:.67em;font-weight:700}.hyper-editor ul{margin:1em 0;padding-left:2em;list-style-type:disc}.hyper-editor ol{margin:1em 0;padding-left:2em;list-style-type:decimal}.hyper-editor li{margin:.25em 0}.hyper-editor blockquote{color:#64748b;background:linear-gradient(90deg,#f8fafc,#0000);border-left:4px solid #3b82f6;border-radius:0 .5rem .5rem 0;margin:1.5rem 0;padding-top:.5rem;padding-bottom:.5rem;padding-left:1.5rem;font-style:italic}.hyper-editor code{color:#475569;background-color:#f1f5f9;border:1px solid #e2e8f0;border-radius:.375rem;padding:.2rem .4rem;font-family:JetBrains Mono,Fira Code,Monaco,Consolas,monospace;font-size:.9em;font-weight:500}.hyper-editor pre{color:#e2e8f0;background:linear-gradient(#1e293b,#0f172a);border:1px solid #334155;border-radius:.75rem;margin:1.5rem 0;padding:1.25rem;overflow-x:auto;box-shadow:0 4px 6px -1px #0000001a}.hyper-editor pre code{color:inherit;background:0 0;border:none;padding:0;font-size:.875rem;line-height:1.7}.hyper-editor hr{border:none;border-top:2px solid #e5e7eb;margin:2em 0}.hyper-editor p{color:#374151;margin:.75rem 0;font-size:1rem;line-height:1.75}.hyper-editor p:first-child{margin-top:0}.hyper-editor p:last-child{margin-bottom:0}.hyper-editor a{color:#2563eb;text-decoration:underline}.hyper-editor a:hover{color:#1d4ed8}.hyper-editor [contenteditable] img{cursor:pointer;border-radius:.375rem;max-width:100%;height:auto;margin:1em 0;transition:box-shadow .2s ease-in-out}.hyper-editor [contenteditable] img:hover{box-shadow:0 0 0 2px #3b82f6}.hyper-editor [contenteditable] img:focus{outline-offset:2px;outline:2px solid #3b82f6}.hyper-editor table{border-collapse:collapse;table-layout:auto;width:100%;margin:1em 0}.hyper-editor table td,.hyper-editor table th{vertical-align:top;border:1px solid #e5e7eb;min-width:100px;padding:.5rem}.hyper-editor table th{text-align:left;background-color:#f9fafb;font-weight:600}.hyper-editor table tr:hover{background-color:#f9fafb}.hyper-editor .mention{color:#3b82f6;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:#eff6ff;border-radius:4px;padding:2px 6px;font-weight:500}.hyper-editor .mention:hover{background-color:#dbeafe}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nextext-editor",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "A modern, customizable rich text editor for React with shadcn/ui patterns, Tailwind CSS styling, and collaborative editing powered by Loro CRDT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|