@abduljebar/text-editor 1.2.1 → 2.2.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 CHANGED
@@ -1,18 +1,357 @@
1
- # React Text Editor
1
+ # @abduljebar/text-editor
2
2
 
3
- A professional, customizable React text editor with rich text editing capabilities, export functionality, and real-time validation.
3
+ A modern, feature-rich React text editor component with beautiful styling and extensive customization options. Perfect for blogs, content management systems, and any application requiring rich text editing capabilities.
4
4
 
5
- ## Features
5
+ ## Features
6
6
 
7
- - 📝 Rich text editing with formatting tools
8
- - 💾 Save functionality with validation
9
- - 📤 Export to HTML files
10
- - 🎨 Built with Tailwind CSS
11
- - 🔒 Zod validation
12
- - 📊 Real-time word and character count
13
- - Accessible UI components
7
+ ### 🎨 Rich Text Editing
8
+ - **Text Formatting**: Bold, italic, underline, strikethrough
9
+ - **Color Support**: 20 text colors & 25 background colors with intuitive pickers
10
+ - **Headings**: H1, H2, H3 with automatic styling
11
+ - **Lists**: Bulleted and numbered lists
12
+ - **Block Elements**: Quotes and code blocks with syntax styling
13
+ - **Undo/Redo**: Full history support
14
14
 
15
- ## Installation
15
+ ### 🎯 Smart UX
16
+ - **Auto-styling**: Automatic application of beautiful Tailwind CSS styles
17
+ - **Contextual Toolbar**: Appears only when focused and editable
18
+ - **Real-time Stats**: Word and character count in status bar
19
+ - **Smart Format Detection**: Visual indicators for active text formats
20
+ - **Tab Support**: Indentation with Tab key
21
+
22
+ ### 🔧 Flexible Configuration
23
+ - **Read-only Mode**: Display content without editing capabilities
24
+ - **Customizable Height**: Flexible sizing options
25
+ - **Title Support**: Optional document title with real-time updates
26
+ - **Action Buttons**: Built-in save and export functionality
27
+ - **Event Handling**: Comprehensive callback system
28
+
29
+ ### 🚀 Advanced Features
30
+ - **React Hook**: `useTextEditor` for custom implementations
31
+ - **HTML Export**: Generate complete HTML documents
32
+ - **Validation**: Built-in content validation
33
+ - **State Management**: Full control over editor state
34
+ - **TypeScript**: Fully typed for better development experience
35
+
36
+ ## 📦 Installation
16
37
 
17
38
  ```bash
18
- npm install @abduljebar/text-editor
39
+ npm install @abduljebar/text-editor
40
+ # or
41
+ yarn add @abduljebar/text-editor
42
+ # or
43
+ pnpm add @abduljebar/text-editor
44
+ ```
45
+
46
+ ## 🚀 Quick Start
47
+
48
+ ```tsx
49
+ import { TextEditor } from "@abduljebar/text-editor";
50
+
51
+ function App() {
52
+ return (
53
+ <TextEditor
54
+ height="min-h-[400px]"
55
+ onChange={(content, html, title) => {
56
+ console.log("Content:", content);
57
+ console.log("HTML:", html);
58
+ console.log("Title:", title);
59
+ }}
60
+ initialContent="<h1>Welcome to Your Document</h1><p>Start editing here...</p>"
61
+ />
62
+ );
63
+ }
64
+ ```
65
+
66
+ ## 📖 Basic Usage
67
+
68
+ ### Simple Implementation
69
+
70
+ ```tsx
71
+ import { TextEditor } from "@abduljebar/text-editor";
72
+
73
+ function MyEditor() {
74
+ const handleSave = (content: string, html: string) => {
75
+ // Save to your backend or state management
76
+ console.log("Saving:", { content, html });
77
+ };
78
+
79
+ const handleExport = (html: string) => {
80
+ // Export as HTML file
81
+ const blob = new Blob([html], { type: 'text/html' });
82
+ const url = URL.createObjectURL(blob);
83
+ const a = document.createElement('a');
84
+ a.href = url;
85
+ a.download = 'document.html';
86
+ a.click();
87
+ };
88
+
89
+ return (
90
+ <TextEditor
91
+ showButtons={true}
92
+ showSaveTitle={true}
93
+ showStatusBar={true}
94
+ onSave={handleSave}
95
+ onExport={handleExport}
96
+ onChange={(content, html, title) => {
97
+ // Real-time updates
98
+ console.log("Changes:", { content, html, title });
99
+ }}
100
+ />
101
+ );
102
+ }
103
+ ```
104
+
105
+ ### Read-only Mode
106
+
107
+ ```tsx
108
+ function ReadOnlyView() {
109
+ return (
110
+ <TextEditor
111
+ readOnly={true}
112
+ initialContent="<h1>Published Article</h1><p>This content cannot be edited.</p>"
113
+ showStatusBar={true}
114
+ />
115
+ );
116
+ }
117
+ ```
118
+
119
+ ## ⚙️ API Reference
120
+
121
+ ### TextEditor Props
122
+
123
+ | Prop | Type | Default | Description |
124
+ |------|------|---------|-------------|
125
+ | `initialContent` | `string` | `""` | Initial HTML content for the editor |
126
+ | `onChange` | `(content: string, html: string, title?: string) => void` | `undefined` | Callback when content changes |
127
+ | `onSave` | `(content: string, html: string) => void` | `undefined` | Callback when save is triggered |
128
+ | `onExport` | `(html: string) => void` | `undefined` | Callback when export is triggered |
129
+ | `readOnly` | `boolean` | `false` | Disable editing when true |
130
+ | `showButtons` | `boolean` | `false` | Show save/export buttons |
131
+ | `showSaveTitle` | `boolean` | `false` | Show document title input |
132
+ | `showStatusBar` | `boolean` | `false` | Show word/character count |
133
+ | `height` | `string` | `"500px"` | Editor height (any CSS value) |
134
+
135
+ ### useTextEditor Hook
136
+
137
+ For advanced usage and custom implementations:
138
+
139
+ ```tsx
140
+ import { useTextEditor } from "@abduljebar/text-editor";
141
+
142
+ function CustomEditor() {
143
+ const {
144
+ editorState,
145
+ editorRef,
146
+ updateContent,
147
+ updateTitle,
148
+ executeCommand,
149
+ getValidationResult,
150
+ exportToHTML,
151
+ clearEditor,
152
+ resetToInitial,
153
+ activeFormats,
154
+ isLinkActive,
155
+ } = useTextEditor("Initial content", false);
156
+
157
+ // Use the state and methods to build custom UI
158
+ return (
159
+ <div>
160
+ <div
161
+ ref={editorRef}
162
+ contentEditable
163
+ onInput={(e) => updateContent(e.currentTarget.innerHTML)}
164
+ className="border p-4 min-h-[200px]"
165
+ />
166
+ <button onClick={() => executeCommand('bold')}>
167
+ Bold
168
+ </button>
169
+ </div>
170
+ );
171
+ }
172
+ ```
173
+
174
+ #### Hook Return Values
175
+
176
+ | Property | Type | Description |
177
+ |----------|------|-------------|
178
+ | `editorState` | `object` | Current editor state (content, title, counts) |
179
+ | `editorRef` | `RefObject` | Reference to the editable element |
180
+ | `updateContent` | `(content: string) => void` | Update editor content |
181
+ | `updateTitle` | `(title: string) => void` | Update document title |
182
+ | `executeCommand` | `(command: string, value?: string) => void` | Execute formatting commands |
183
+ | `getValidationResult` | `() => ValidationResult` | Validate and get editor data |
184
+ | `exportToHTML` | `(options?) => string` | Generate HTML export |
185
+ | `clearEditor` | `() => void` | Clear all content |
186
+ | `resetToInitial` | `() => void` | Reset to initial content |
187
+ | `activeFormats` | `object` | Current active text formats |
188
+ | `isLinkActive` | `boolean` | Whether a link is currently selected |
189
+
190
+ ## 🎨 Styling & Customization
191
+
192
+ ### Default Styling
193
+
194
+ The editor comes with beautiful default styling using Tailwind CSS classes:
195
+
196
+ - **Headings**: Proper hierarchy with borders and spacing
197
+ - **Paragraphs**: Optimal line height and margins
198
+ - **Lists**: Clean indentation and spacing
199
+ - **Code Blocks**: Dark theme with proper monospace fonts
200
+ - **Quotes**: Elegant bordered design
201
+ - **Links**: Blue color with hover effects
202
+
203
+ ### Custom Styling
204
+
205
+ You can override the default styles by targeting the editor's CSS classes or using the `className` prop:
206
+
207
+ ```tsx
208
+ <TextEditor
209
+ className="custom-editor-styles"
210
+ // ... other props
211
+ />
212
+ ```
213
+
214
+ ```css
215
+ .custom-editor-styles {
216
+ /* Your custom styles */
217
+ }
218
+
219
+ .custom-editor-styles h1 {
220
+ /* Custom heading styles */
221
+ }
222
+ ```
223
+
224
+ ## 🔧 Advanced Examples
225
+
226
+ ### Integration with Form Libraries
227
+
228
+ ```tsx
229
+ import { useForm } from 'react-hook-form';
230
+ import { TextEditor } from "@abduljebar/text-editor";
231
+
232
+ function ArticleForm() {
233
+ const { register, handleSubmit, setValue, watch } = useForm();
234
+
235
+ const handleEditorChange = (content: string, html: string, title?: string) => {
236
+ setValue('content', html);
237
+ setValue('title', title);
238
+ };
239
+
240
+ return (
241
+ <form onSubmit={handleSubmit(data => console.log(data))}>
242
+ <TextEditor
243
+ showSaveTitle={true}
244
+ showButtons={true}
245
+ onChange={handleEditorChange}
246
+ onSave={(content, html) => {
247
+ // Handle form submission
248
+ handleSubmit(data => console.log(data))();
249
+ }}
250
+ />
251
+ </form>
252
+ );
253
+ }
254
+ ```
255
+
256
+ ### Custom Toolbar Implementation
257
+
258
+ ```tsx
259
+ import { useTextEditor } from "@abduljebar/text-editor";
260
+
261
+ function CustomToolbarEditor() {
262
+ const { executeCommand, activeFormats, editorRef } = useTextEditor();
263
+
264
+ return (
265
+ <div className="editor-container">
266
+ <div className="custom-toolbar">
267
+ <button
268
+ onClick={() => executeCommand('bold')}
269
+ className={activeFormats.bold ? 'active' : ''}
270
+ >
271
+ B
272
+ </button>
273
+ <button
274
+ onClick={() => executeCommand('italic')}
275
+ className={activeFormats.italic ? 'active' : ''}
276
+ >
277
+ I
278
+ </button>
279
+ {/* Add more custom buttons */}
280
+ </div>
281
+ <div
282
+ ref={editorRef}
283
+ contentEditable
284
+ className="editor-content"
285
+ />
286
+ </div>
287
+ );
288
+ }
289
+ ```
290
+
291
+ ## 🌈 Color Palettes
292
+
293
+ ### Text Colors (20 colors)
294
+ - Basic: Black, White
295
+ - Primary: Red, Green, Blue
296
+ - Secondary: Yellow, Magenta, Cyan, Orange, Purple
297
+ - Additional: Dark Green, Maroon, Teal, Navy, Gray, Brown, Pink, Gold, Light Green, Light Blue
298
+
299
+ ### Background Colors (25 colors)
300
+ - Same as text colors plus light variants
301
+ - Light variants: Misty Rose, Honeydew, Alice Blue, Lemon Chiffon, White Smoke, Lavender, and more
302
+
303
+ ## 📋 Browser Support
304
+
305
+ - Chrome 60+
306
+ - Firefox 55+
307
+ - Safari 12+
308
+ - Edge 79+
309
+
310
+ ## 🔒 Accessibility
311
+
312
+ - Keyboard navigation support
313
+ - ARIA labels for toolbar buttons
314
+ - Focus management
315
+ - Screen reader compatible
316
+
317
+ ## 🐛 Troubleshooting
318
+
319
+ ### Common Issues
320
+
321
+ 1. **Content not updating**: Ensure you're using the `onChange` callback properly
322
+ 2. **Styles not applying**: Make sure Tailwind CSS is properly configured in your project
323
+ 3. **Toolbar not appearing**: Check that `readOnly` is set to `false` and the editor is focused
324
+
325
+ ### Performance Tips
326
+
327
+ - Use `React.memo` if embedding in frequently re-rendering components
328
+ - Debounce `onChange` callbacks for heavy operations
329
+ - Consider using the hook version for complex custom implementations
330
+
331
+ ## 🤝 Contributing
332
+
333
+ We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
334
+
335
+ ## 📄 License
336
+
337
+ MIT License - see the [LICENSE](LICENSE) file for details.
338
+
339
+ ## 🆘 Support
340
+
341
+ If you encounter any issues or have questions:
342
+
343
+ 1. Check the [documentation](#)
344
+ 2. Search [existing issues](https://github.com/abduljebar/text-editor/issues)
345
+ 3. Create a [new issue](https://github.com/abduljebar/text-editor/issues/new)
346
+
347
+ ## 🚀 Changelog
348
+
349
+ ### v1.0.0
350
+ - Initial release with core editing features
351
+ - Comprehensive text formatting options
352
+ - Color support and styling system
353
+ - React hook for advanced usage
354
+
355
+ ---
356
+
357
+ Built with ❤️ by [Abdul Jebar](https://github.com/abduljebar)
package/dist/App.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"AAGA,iBAAS,GAAG,4CAEX;AAED,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"AAGA,iBAAS,GAAG,4CAYX;AAED,eAAe,GAAG,CAAC"}
@@ -1,4 +1,15 @@
1
1
  import React from "react";
2
- import type { TextEditorProps } from "../types/editor";
2
+ interface TextEditorProps {
3
+ initialContent?: string;
4
+ onChange?: (content: string, html: string, title?: string) => void;
5
+ onSave?: (content: string, html: string) => void;
6
+ onExport?: (html: string) => void;
7
+ readOnly?: boolean;
8
+ showButtons?: boolean;
9
+ showSaveTitle?: boolean;
10
+ showStatusBar?: boolean;
11
+ height?: string;
12
+ }
3
13
  export declare const TextEditor: React.FC<TextEditorProps>;
14
+ export {};
4
15
  //# sourceMappingURL=TextEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../src/components/TextEditor.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAIhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA+JhD,CAAC"}
1
+ {"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../src/components/TextEditor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE,UAAU,eAAe;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA2kBhD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../src/components/Toolbar.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAoBnD,UAAU,YAAY;IACpB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAwP1C,CAAC"}
1
+ {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../src/components/Toolbar.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAoBnD,UAAU,YAAY;IACpB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAyP1C,CAAC"}
package/dist/demo.jpg ADDED
Binary file
@@ -1,5 +1,4 @@
1
- import { type EditorContent } from '../schemas/editor.schema';
2
- export declare const useTextEditor: (initialContent?: string) => {
1
+ export declare const useTextEditor: (initialContent?: string, readOnly?: boolean) => {
3
2
  editorState: {
4
3
  content: string;
5
4
  title: string;
@@ -13,7 +12,7 @@ export declare const useTextEditor: (initialContent?: string) => {
13
12
  executeCommand: (command: string, value?: string) => void;
14
13
  getValidationResult: () => {
15
14
  success: boolean;
16
- data?: EditorContent;
15
+ data?: any;
17
16
  error?: string;
18
17
  };
19
18
  exportToHTML: (options?: {
@@ -21,5 +20,22 @@ export declare const useTextEditor: (initialContent?: string) => {
21
20
  includeMeta: boolean;
22
21
  }) => string;
23
22
  clearEditor: () => void;
23
+ resetToInitial: () => void;
24
+ activeFormats: {
25
+ bold: boolean;
26
+ italic: boolean;
27
+ underline: boolean;
28
+ strikeThrough: boolean;
29
+ justifyLeft: boolean;
30
+ justifyCenter: boolean;
31
+ justifyRight: boolean;
32
+ justifyFull: boolean;
33
+ insertUnorderedList: boolean;
34
+ insertOrderedList: boolean;
35
+ h1: boolean;
36
+ h2: boolean;
37
+ h3: boolean;
38
+ };
39
+ isLinkActive: boolean;
24
40
  };
25
41
  //# sourceMappingURL=useTextEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTextEditor.d.ts","sourceRoot":"","sources":["../../src/hooks/useTextEditor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGnF,eAAO,MAAM,aAAa,GAAI,iBAAgB,MAAW;;;;;;;;;6BAwBX,MAAM;yBAaV,MAAM;8BAQD,MAAM,UAAU,MAAM;+BAKvB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,aAAa,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;CAoGvG,CAAC"}
1
+ {"version":3,"file":"useTextEditor.d.ts","sourceRoot":"","sources":["../../src/hooks/useTextEditor.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,GAAI,iBAAgB,MAAW,EAAE,WAAU,OAAe;;;;;;;;;6BAyGtC,MAAM;yBAiBV,MAAM;8BAUD,MAAM,UAAU,MAAM;+BAoCvB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;CAgJ7F,CAAC"}
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- /*! tailwindcss v4.1.14 | 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-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-duration:initial;--tw-space-y-reverse:0}}}@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-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-600:oklch(64.6% .222 41.116);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--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-blue-800:oklch(42.4% .199 265.638);--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-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-white:#fff;--spacing:.25rem;--container-6xl:72rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-bold:700;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--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{.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-2{margin-inline:calc(var(--spacing)*2)}.mx-auto{margin-inline:auto}.mt-2{margin-top:calc(var(--spacing)*2)}.block{display:block}.flex{display:flex}.inline{display:inline}.h-6{height:calc(var(--spacing)*6)}.h-9{height:calc(var(--spacing)*9)}.min-h-\[500px\]{min-height:500px}.w-9{width:calc(var(--spacing)*9)}.w-full{width:100%}.w-px{width:1px}.max-w-6xl{max-width:var(--container-6xl)}.max-w-none{max-width:none}.resize-none{resize:none}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-6{gap:calc(var(--spacing)*6)}.overflow-hidden{overflow:hidden}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.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-none{--tw-border-style:none;border-style:none}.border-blue-300{border-color:var(--color-blue-300)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-600{background-color:var(--color-green-600)}.bg-red-600{background-color:var(--color-red-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-3{padding:calc(var(--spacing)*3)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-blue-600{color:var(--color-blue-600)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-green-600{color:var(--color-green-600)}.text-orange-600{color:var(--color-orange-600)}.text-red-600{color:var(--color-red-600)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.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)}.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))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-blue-300:disabled{background-color:var(--color-blue-300)}@media (min-width:40rem){.sm\:mt-0{margin-top:calc(var(--spacing)*0)}}.\[\&_a\]\:text-blue-600 a{color:var(--color-blue-600)}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_a\]\:transition-colors a{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))}@media (hover:hover){.\[\&_a\]\:hover\:text-blue-800 a:hover{color:var(--color-blue-800)}}.\[\&_blockquote\]\:my-4 blockquote{margin-block:calc(var(--spacing)*4)}.\[\&_blockquote\]\:border-l-4 blockquote{border-left-style:var(--tw-border-style);border-left-width:4px}.\[\&_blockquote\]\:border-blue-500 blockquote{border-color:var(--color-blue-500)}.\[\&_blockquote\]\:pl-4 blockquote{padding-left:calc(var(--spacing)*4)}.\[\&_blockquote\]\:text-gray-600 blockquote{color:var(--color-gray-600)}.\[\&_blockquote\]\:italic blockquote{font-style:italic}.\[\&_code\]\:rounded code{border-radius:.25rem}.\[\&_code\]\:bg-gray-100 code{background-color:var(--color-gray-100)}.\[\&_code\]\:px-2 code{padding-inline:calc(var(--spacing)*2)}.\[\&_code\]\:py-1 code{padding-block:calc(var(--spacing)*1)}.\[\&_code\]\:font-mono code{font-family:var(--font-mono)}.\[\&_code\]\:text-sm code{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_h1\]\:mt-6 h1{margin-top:calc(var(--spacing)*6)}.\[\&_h1\]\:mb-4 h1{margin-bottom:calc(var(--spacing)*4)}.\[\&_h1\]\:border-b h1{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_h1\]\:pb-2 h1{padding-bottom:calc(var(--spacing)*2)}.\[\&_h1\]\:text-3xl h1{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.\[\&_h1\]\:font-bold h1{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_h1\]\:text-gray-800 h1{color:var(--color-gray-800)}.\[\&_h2\]\:mt-5 h2{margin-top:calc(var(--spacing)*5)}.\[\&_h2\]\:mb-3 h2{margin-bottom:calc(var(--spacing)*3)}.\[\&_h2\]\:text-2xl h2{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.\[\&_h2\]\:font-bold h2{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_h2\]\:text-gray-800 h2{color:var(--color-gray-800)}.\[\&_h3\]\:mt-4 h3{margin-top:calc(var(--spacing)*4)}.\[\&_h3\]\:mb-2 h3{margin-bottom:calc(var(--spacing)*2)}.\[\&_h3\]\:text-xl h3{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.\[\&_h3\]\:font-bold h3{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_h3\]\:text-gray-800 h3{color:var(--color-gray-800)}.\[\&_li\]\:mb-1 li{margin-bottom:calc(var(--spacing)*1)}.\[\&_ol\]\:mb-4 ol{margin-bottom:calc(var(--spacing)*4)}.\[\&_ol\]\:ml-4 ol{margin-left:calc(var(--spacing)*4)}.\[\&_ol\]\:list-inside ol{list-style-position:inside}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}:where(.\[\&_ol\]\:space-y-1 ol>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}.\[\&_p\]\:mb-4 p{margin-bottom:calc(var(--spacing)*4)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_p\]\:text-gray-700 p{color:var(--color-gray-700)}.\[\&_pre\]\:my-4 pre{margin-block:calc(var(--spacing)*4)}.\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.\[\&_pre\]\:rounded-lg pre{border-radius:var(--radius-lg)}.\[\&_pre\]\:bg-gray-800 pre{background-color:var(--color-gray-800)}.\[\&_pre\]\:p-4 pre{padding:calc(var(--spacing)*4)}.\[\&_pre\]\:text-gray-100 pre{color:var(--color-gray-100)}.\[\&_pre_code\]\:bg-transparent pre code{background-color:#0000}.\[\&_pre_code\]\:p-0 pre code{padding:calc(var(--spacing)*0)}.\[\&_pre_code\]\:text-inherit pre code{color:inherit}.\[\&_ul\]\:mb-4 ul{margin-bottom:calc(var(--spacing)*4)}.\[\&_ul\]\:ml-4 ul{margin-left:calc(var(--spacing)*4)}.\[\&_ul\]\:list-inside ul{list-style-position:inside}.\[\&_ul\]\:list-disc ul{list-style-type:disc}:where(.\[\&_ul\]\:space-y-1 ul>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}}@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-duration{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}
1
+ /*! tailwindcss v4.1.16 | 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-space-y-reverse:0;--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-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@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-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-600:oklch(64.6% .222 41.116);--color-yellow-200:oklch(94.5% .129 101.54);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--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-blue-800:oklch(42.4% .199 265.638);--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-800:oklch(27.8% .033 256.848);--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);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-bold:700;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--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{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.top-full{top:100%}.-right-1{right:calc(var(--spacing)*-1)}.-bottom-1{bottom:calc(var(--spacing)*-1)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-20{z-index:20}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.my-4{margin-block:calc(var(--spacing)*4)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-\[-2px\]{margin-top:-2px}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-4{margin-left:calc(var(--spacing)*4)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.h-1{height:calc(var(--spacing)*1)}.h-3{height:calc(var(--spacing)*3)}.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)}.min-h-\[200px\]{min-height:200px}.min-h-\[400px\]{min-height:400px}.min-h-\[500px\]{min-height:500px}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-full{width:100%}.w-px{width:1px}.min-w-\[140px\]{min-width:140px}.cursor-default{cursor:default}.cursor-text{cursor:text}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.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-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-blue-300{border-color:var(--color-blue-300)}.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-gray-400{border-color:var(--color-gray-400)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-600{background-color:var(--color-green-600)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-200{background-color:var(--color-yellow-200)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-blue-600{color:var(--color-blue-600)}.text-gray-100{color:var(--color-gray-100)}.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-800{color:var(--color-gray-800)}.text-green-600{color:var(--color-green-600)}.text-orange-600{color:var(--color-orange-600)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{color:var(--color-gray-400)}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.opacity-80{opacity:.8}.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)}.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-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style: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\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-blue-300:disabled{background-color:var(--color-blue-300)}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:mt-0{margin-top:calc(var(--spacing)*0)}}.\[\&_a\]\:text-blue-600 a{color:var(--color-blue-600)}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_a\]\:transition-colors a{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))}@media(hover:hover){.\[\&_a\]\:hover\:text-blue-800 a:hover{color:var(--color-blue-800)}}.\[\&_blockquote\]\:my-4 blockquote{margin-block:calc(var(--spacing)*4)}.\[\&_blockquote\]\:border-l-4 blockquote{border-left-style:var(--tw-border-style);border-left-width:4px}.\[\&_blockquote\]\:border-blue-500 blockquote{border-color:var(--color-blue-500)}.\[\&_blockquote\]\:pl-4 blockquote{padding-left:calc(var(--spacing)*4)}.\[\&_blockquote\]\:text-gray-600 blockquote{color:var(--color-gray-600)}.\[\&_blockquote\]\:italic blockquote{font-style:italic}.\[\&_code\]\:rounded code{border-radius:.25rem}.\[\&_code\]\:bg-gray-100 code{background-color:var(--color-gray-100)}.\[\&_code\]\:px-2 code{padding-inline:calc(var(--spacing)*2)}.\[\&_code\]\:py-1 code{padding-block:calc(var(--spacing)*1)}.\[\&_code\]\:font-mono code{font-family:var(--font-mono)}.\[\&_code\]\:text-sm code{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_h1\]\:mt-6 h1{margin-top:calc(var(--spacing)*6)}.\[\&_h1\]\:mb-4 h1{margin-bottom:calc(var(--spacing)*4)}.\[\&_h1\]\:border-b h1{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_h1\]\:pb-2 h1{padding-bottom:calc(var(--spacing)*2)}.\[\&_h1\]\:text-3xl h1{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.\[\&_h1\]\:font-bold h1{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_h1\]\:text-gray-800 h1{color:var(--color-gray-800)}.\[\&_h2\]\:mt-5 h2{margin-top:calc(var(--spacing)*5)}.\[\&_h2\]\:mb-3 h2{margin-bottom:calc(var(--spacing)*3)}.\[\&_h2\]\:text-2xl h2{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.\[\&_h2\]\:font-bold h2{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_h2\]\:text-gray-800 h2{color:var(--color-gray-800)}.\[\&_h3\]\:mt-4 h3{margin-top:calc(var(--spacing)*4)}.\[\&_h3\]\:mb-2 h3{margin-bottom:calc(var(--spacing)*2)}.\[\&_h3\]\:text-xl h3{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.\[\&_h3\]\:font-bold h3{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_h3\]\:text-gray-800 h3{color:var(--color-gray-800)}.\[\&_li\]\:mb-1 li{margin-bottom:calc(var(--spacing)*1)}.\[\&_ol\]\:mb-4 ol{margin-bottom:calc(var(--spacing)*4)}.\[\&_ol\]\:ml-4 ol{margin-left:calc(var(--spacing)*4)}.\[\&_ol\]\:list-inside ol{list-style-position:inside}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}:where(.\[\&_ol\]\:space-y-1 ol>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}.\[\&_p\]\:mb-4 p{margin-bottom:calc(var(--spacing)*4)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_p\]\:text-gray-700 p{color:var(--color-gray-700)}.\[\&_pre\]\:my-4 pre{margin-block:calc(var(--spacing)*4)}.\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.\[\&_pre\]\:rounded-lg pre{border-radius:var(--radius-lg)}.\[\&_pre\]\:bg-gray-800 pre{background-color:var(--color-gray-800)}.\[\&_pre\]\:p-4 pre{padding:calc(var(--spacing)*4)}.\[\&_pre\]\:text-gray-100 pre{color:var(--color-gray-100)}.\[\&_pre_code\]\:bg-transparent pre code{background-color:#0000}.\[\&_pre_code\]\:p-0 pre code{padding:calc(var(--spacing)*0)}.\[\&_pre_code\]\:text-inherit pre code{color:inherit}.\[\&_ul\]\:mb-4 ul{margin-bottom:calc(var(--spacing)*4)}.\[\&_ul\]\:ml-4 ul{margin-left:calc(var(--spacing)*4)}.\[\&_ul\]\:list-inside ul{list-style-position:inside}.\[\&_ul\]\:list-disc ul{list-style-type:disc}:where(.\[\&_ul\]\:space-y-1 ul>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@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-duration{syntax:"*";inherits:false}@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}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  import './index.css';
2
2
  export { TextEditor } from './components/TextEditor';
3
- export { useTextEditor } from './hooks/useTextEditor';
4
3
  export type { TextEditorProps } from './types/editor';
5
- export type { EditorContent } from './schemas/editor.schema';
6
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}