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 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
+ [![Performance](https://img.shields.io/badge/FPS-60-success)](https://github.com)
6
+ [![Memory](https://img.shields.io/badge/Memory-12x%20less-blue)](https://github.com)
7
+ [![License](https://img.shields.io/badge/license-MIT-green)](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.0",
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",