@opengis/richtext 0.0.13 → 0.0.16

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,170 +1,364 @@
1
- # @opengis/richtext
2
-
3
- <!-- [![NPM version](https://img.shields.io/npm/v/@opengis/richtext?style=plain)](https://www.npmjs.com/package/@opengis/richtext) -->
4
-
5
- A powerful and extensible rich text editor component for Vue 3.
6
- Built with TipTap editor, featuring comprehensive formatting tools, table support, and markdown integration.
7
-
8
- ## Features
9
-
10
- - **Rich Text Formatting**: Bold, italic, underline, strikethrough, superscript, subscript
11
- - **History Management**: Combined undo/redo functionality with keyboard shortcuts
12
- - **Help System**: Markdown shortcuts reference popover
13
- - **Text Alignment**: Left, center, right, justify alignment options
14
- - **Lists**: Bullet lists and ordered lists with full nesting support
15
- - **Tables**: Full table support with resizable columns and sticky headers
16
- - **Links**: Automatic link detection and manual link insertion
17
- - **Code Support**: Inline code and code blocks with syntax highlighting
18
- - **Color Support**: Text color and background color picker
19
- - **Blockquotes**: Styled blockquotes with custom formatting
20
- - **Images**: Image insertion and management
21
- - **Markdown Integration**: Built-in markdown to HTML conversion and vice versa
22
- - **Customizable Toolbar**: Configurable toolbar with selective feature inclusion
23
- - **Internationalization**: Built-in i18n support (English/Ukrainian)
24
- - **Responsive Design**: Mobile-friendly and fully responsive
25
- - **TypeScript Support**: Written in TypeScript with full type definitions
26
- - **Vue 3 Composition API**: Modern Vue 3 with `<script setup>` syntax
27
-
28
- ## Documentation
29
-
30
- ### Local Development
31
- To run the documentation locally:
32
-
33
- ```bash
34
- cd docs
35
- npm install
36
- npm run docs:dev
37
- ```
38
-
39
- The documentation will be available at `http://localhost:5173/`
40
-
41
- ### Online Documentation
42
- Complete documentation and examples available at [https://richtext.opengis.info](https://richtext.opengis.info)
43
-
44
- - [Component documentation](https://richtext.opengis.info/guide/)
45
- - [API Reference](https://richtext.opengis.info/api/)
46
- - [Examples](https://richtext.opengis.info/examples/)
47
-
48
- ## Changelog
49
-
50
- Full change log available at [https://richtext.opengis.info/changelog/](https://richtext.opengis.info/changelog/)
51
-
52
- Local changelog: [docs/changelog/](docs/changelog/)
53
-
54
-
55
- ## Install & Usage
56
-
57
- ### Install
58
-
59
- ```bash
60
- npm i @opengis/richtext
61
- ```
62
-
63
- ### Usage
64
-
65
- #### Complete Editor Example
66
- ```vue
67
- <template>
68
- <VsRichText
69
- v-model="content"
70
- :height="'400px'"
71
- :toolbar="toolbarOptions"
72
- @update:modelValue="handleContentChange"
73
- />
74
- </template>
75
-
76
- <script setup lang="ts">
77
- import VsRichText from "@opengis/richtext";
78
- import { ref } from 'vue'
79
-
80
- const content = ref('<p>Start typing your content here...</p>')
81
-
82
- const toolbarOptions = [
83
- 'bold',
84
- 'italic',
85
- 'underline',
86
- 'text_align',
87
- 'color',
88
- 'blockquote',
89
- 'bullet_list',
90
- 'ordered_list',
91
- 'codeblock',
92
- 'link',
93
- 'table'
94
- ]
95
-
96
- const handleContentChange = (newContent: string) => {
97
- console.log('Content changed:', newContent)
98
- }
99
- </script>
100
- ```
101
-
102
- #### Toolbar Controls
103
-
104
- - **`bold`** - Жирний текст
105
- - **`italic`** - Курсив
106
- - **`underline`** - Підкреслення
107
- - **`strike`** - Закреслення
108
- - **`text_align`** - Вирівнювання тексту
109
- - **`color`** - Колір тексту
110
- - **`color_picker`** - Розширений вибір кольору
111
- - **`blockquote`** - Цитати
112
- - **`bullet_list`** - Маркований список
113
- - **`ordered_list`** - Нумерований список
114
- - **`codeblock`** - Блок коду
115
- - **`text_more`** - Додаткове форматування
116
- - **`link`** - Посилання
117
- - **`table`** - Таблиці
118
-
119
- ### Register
120
-
121
- ```ts
122
- // main.ts
123
- import VsRichText from '@opengis/richtext';
124
- app.use(VsRichText);
125
- ```
126
-
127
- ### Style
128
-
129
- ```html
130
- <script src="https://cdn.tailwindcss.com"></script>
131
- ```
132
-
133
- ---
134
-
135
- ## Props
136
-
137
- | Prop | Type | Default | Description |
138
- |------|------|---------|-------------|
139
- | `modelValue` | String | `""` | The HTML content of the editor |
140
- | `height` | String | `"300px"` | Height of the editor container |
141
- | `toolbar` | Array | `[...]` | Array of toolbar controls to display |
142
-
143
- ## Events
144
-
145
- | Event | Payload | Description |
146
- |-------|---------|-------------|
147
- | `update:modelValue` | String | Emitted when content changes |
148
-
149
- ## Styling
150
-
151
- The component uses Tailwind CSS classes and can be fully customized with CSS variables:
152
-
153
- ```css
154
- .editor-content {
155
- /* Customize editor content area */
156
- }
157
-
158
- .editor-toolbar {
159
- /* Customize toolbar appearance */
160
- }
161
- ```
162
-
163
- ## Contributions
164
-
165
- We welcome contributions!
166
- Feel free to open issues, suggest features, or submit pull requests.
167
-
168
- ## License
169
-
170
- MIT
1
+ # VsRichtext - Потужний Rich Text Editor для Vue 3
2
+
3
+ ## 📋 Опис
4
+
5
+ **VsRichtext** - це сучасний, повнофункціональний rich text редактор для Vue 3, побудований на базі TipTap. Компонент надає широкий спектр можливостей для редагування тексту, включаючи форматування, вставку медіа-контенту, роботу з таблицями та багато іншого.
6
+
7
+ ## ✨ Основні можливості
8
+
9
+ ### 🎨 Форматування тексту
10
+ - **Жирний текст** - зручне перемикання жирного шрифту
11
+ - **Курсив** - підкреслення важливих частин тексту
12
+ - **Підкреслення** - виділення ключових моментів
13
+ - **Закреслення** - позначення застарілої інформації
14
+ - **Верхній/нижній індекс** - для математичних формул та хімічних позначень
15
+
16
+ ### 🎯 Типографіка
17
+ - **Заголовки** - 6 рівнів заголовків (H1-H6) з автоматичним стилюванням
18
+ - **Параграфи** - зручне форматування основних блоків тексту
19
+ - **Цитати** - виділення важливих цитат зі спеціальним стилюванням
20
+ - **Код** - вбудований код та блоки коду з підсвічуванням синтаксису
21
+
22
+ ### 🌈 Кольори та стилі
23
+ - **Колір тексту** - вибір з палітри кольорів або власний колір
24
+ - **Колір фону** - виділення тексту кольором фону
25
+ - **Підсвічування** - маркерне виділення важливих частин
26
+ - **Шрифти** - вибір сімейства шрифтів
27
+ - **Розмір шрифту** - налаштування розміру тексту
28
+
29
+ ### 📝 Структурування контенту
30
+ - **Списки** - марковані та нумеровані списки
31
+ - **Вирівнювання** - ліві, центральні, праві та по ширині
32
+ - **Горизонтальні лінії** - розділення контенту
33
+ - **Таблиці** - повнофункціональні таблиці з можливістю редагування
34
+
35
+ ### 🔗 Медіа та посилання
36
+ - **Посилання** - створення та редагування посилань
37
+ - **Зображення** - завантаження та вставка зображень
38
+ - **Файли** - підтримка завантаження файлів
39
+
40
+ ### 🛠️ Додаткові функції
41
+ - **HTML режим** - прямий редагування HTML коду з Monaco Editor
42
+ - **Повноекранний режим** - зручне редагування на весь екран
43
+ - **Історія змін** - відміна та повернення дій
44
+ - **Очищення форматування** - швидке видалення всіх стилів
45
+ - **Довідка** - вбудована система допомоги
46
+
47
+ ## 🚀 Встановлення
48
+
49
+ ```bash
50
+ npm install @opengis/richtext
51
+ ```
52
+
53
+ ## 📖 Використання
54
+
55
+ ### Базове використання
56
+
57
+ ```vue
58
+ <template>
59
+ <div>
60
+ <VsRichtext v-model="content" />
61
+ </div>
62
+ </template>
63
+
64
+ <script setup>
65
+ import { ref } from 'vue'
66
+ import VsRichtext from '@opengis/richtext'
67
+
68
+ const content = ref('')
69
+ </script>
70
+ ```
71
+
72
+ ### Налаштування висоти
73
+
74
+ ```vue
75
+ <VsRichtext v-model="content" height="500px" />
76
+ ```
77
+
78
+ ### Кастомний toolbar
79
+
80
+ ```vue
81
+ <VsRichtext
82
+ v-model="content"
83
+ :toolbar="['bold', 'italic', 'underline', 'link']"
84
+ />
85
+ ```
86
+
87
+ ### Використання готових наборів
88
+
89
+ ```vue
90
+ <!-- Базовий набір -->
91
+ <VsRichtext v-model="content" toolbar="basic" />
92
+
93
+ <!-- Стандартний набір (за замовчуванням) -->
94
+ <VsRichtext v-model="content" toolbar="default" />
95
+
96
+ <!-- Повний набір -->
97
+ <VsRichtext v-model="content" toolbar="full" />
98
+ ```
99
+
100
+ ## 🎛️ API
101
+
102
+ ### Props
103
+
104
+ | Параметр | Тип | За замовчуванням | Опис |
105
+ |----------|-----|------------------|------|
106
+ | `modelValue` | `String` | `""` | Вміст редактора (v-model) |
107
+ | `height` | `String` | `"300px"` | Висота редактора |
108
+ | `toolbar` | `Array \| String` | `"default"` | Набір кнопок toolbar |
109
+
110
+ ### Toolbar Presets
111
+
112
+ #### `basic` - Базовий набір
113
+ - Історія змін
114
+ - Жирний, курсив, підкреслення, закреслення
115
+ - Вирівнювання тексту
116
+ - Списки (марковані та нумеровані)
117
+ - Посилання та зображення
118
+ - Очищення форматування
119
+ - Довідка
120
+
121
+ #### `default` - Стандартний набір (рекомендований)
122
+ - Всі функції з `basic`
123
+ - Заголовки
124
+ - Кольори тексту та фону
125
+ - Підсвічування
126
+ - Блоки коду
127
+ - Таблиці
128
+ - Горизонтальні лінії
129
+ - Повноекранний режим
130
+ - HTML режим
131
+
132
+ #### `full` - Повний набір
133
+ - Всі функції з `default`
134
+ - Сімейство шрифтів
135
+ - Розмір шрифту
136
+ - Цитати
137
+ - Верхній/нижній індекс
138
+ - Історія змін
139
+
140
+ ### Доступні контроли
141
+
142
+ | Контроль | Опис | Preset |
143
+ |----------|------|--------|
144
+ | `history` | Історія змін (відміна/повернення) | full |
145
+ | `heading` | Заголовки (H1-H6) | default, full |
146
+ | `font_family` | Сімейство шрифтів | full |
147
+ | `font_size` | Розмір шрифту | full |
148
+ | `bold` | Жирний текст | basic, default, full |
149
+ | `italic` | Курсив | basic, default, full |
150
+ | `underline` | Підкреслення | basic, default, full |
151
+ | `strike` | Закреслення | basic, default, full |
152
+ | `color` | Колір тексту | default, full |
153
+ | `background_color` | Колір фону | default, full |
154
+ | `highlight` | Підсвічування | default, full |
155
+ | `text_align` | Вирівнювання тексту | basic, default, full |
156
+ | `bullet_list` | Марковані списки | basic, default, full |
157
+ | `ordered_list` | Нумеровані списки | basic, default, full |
158
+ | `blockquote` | Цитати | full |
159
+ | `codeblock` | Блоки коду | default, full |
160
+ | `table` | Таблиці | default, full |
161
+ | `link` | Посилання | basic, default, full |
162
+ | `image` | Зображення | basic, default, full |
163
+ | `horizontal_rule` | Горизонтальні лінії | default, full |
164
+ | `superscript` | Верхній індекс | full |
165
+ | `subscript` | Нижній індекс | full |
166
+ | `clear_formatting` | Очищення форматування | basic, default, full |
167
+ | `fullscreen` | Повноекранний режим | default, full |
168
+ | `html_mode` | HTML режим | default, full |
169
+ | `help` | Довідка | basic, default, full |
170
+
171
+ ## 🌍 Міжнародна підтримка (i18n)
172
+
173
+ Компонент підтримує багатомовність з наступними мовами:
174
+ - **Українська** (за замовчуванням)
175
+ - **Англійська**
176
+
177
+ ### Налаштування мови
178
+
179
+ ```javascript
180
+ import { createI18n } from 'vue-i18n'
181
+ import i18n from '@opengis/richtext/i18n'
182
+
183
+ const app = createApp(App)
184
+ app.use(i18n)
185
+ ```
186
+
187
+ ## 🎨 Стилізація
188
+
189
+ Компонент використовує Tailwind CSS для стилізації. Всі стилі можна кастомізувати через CSS змінні або прямим перевизначенням класів.
190
+
191
+ ### Кастомні стилі
192
+
193
+ ```css
194
+ /* Кастомізація toolbar */
195
+ .vs-richtext .toolbar {
196
+ background-color: #f8f9fa;
197
+ border-bottom: 1px solid #e9ecef;
198
+ }
199
+
200
+ /* Кастомізація редактора */
201
+ .vs-richtext .editor-content {
202
+ min-height: 200px;
203
+ padding: 16px;
204
+ }
205
+ ```
206
+
207
+ ## 🔧 Розширення функціоналу
208
+
209
+ ### Додавання власних контролів
210
+
211
+ ```vue
212
+ <!-- Власний контроль -->
213
+ <template>
214
+ <button @click="customAction" class="custom-control">
215
+ Custom Action
216
+ </button>
217
+ </template>
218
+
219
+ <script setup>
220
+ const props = defineProps({ editor: Object })
221
+
222
+ const customAction = () => {
223
+ if (props.editor) {
224
+ // Ваша логіка
225
+ props.editor.commands.insertContent('Custom content')
226
+ }
227
+ }
228
+ </script>
229
+ ```
230
+
231
+ ### Кастомні розширення TipTap
232
+
233
+ ```javascript
234
+ import { useRichTextEditor } from '@opengis/richtext/composables'
235
+
236
+ const { editor } = useRichTextEditor({
237
+ extensions: [
238
+ // Ваші кастомні розширення
239
+ CustomExtension.configure({
240
+ // налаштування
241
+ })
242
+ ]
243
+ })
244
+ ```
245
+
246
+ ## 📱 Адаптивність
247
+
248
+ Компонент повністю адаптивний та працює на всіх пристроях:
249
+ - **Desktop** - повний функціонал з усіма контролами
250
+ - **Tablet** - оптимізований інтерфейс
251
+ - **Mobile** - спрощений toolbar з основними функціями
252
+
253
+ ## 🎯 HTML режим
254
+
255
+ HTML режим надає можливість прямого редагування HTML коду з використанням Monaco Editor:
256
+
257
+ ### Особливості HTML режиму:
258
+ - **Підсвічування синтаксису** - яскраве підсвічування HTML тегів, атрибутів та значень
259
+ - **Автодоповнення** - розумні підказки для HTML атрибутів
260
+ - **Форматування коду** - автоматичне форматування HTML
261
+ - **Валідація** - перевірка синтаксису HTML
262
+ - **Теми** - підтримка світлої та темної теми
263
+
264
+ ## 🗂️ Робота з таблицями
265
+
266
+ Компонент надає повнофункціональну роботу з таблицями:
267
+
268
+ ### Можливості таблиць:
269
+ - **Створення таблиць** - таблиці різних розмірів
270
+ - **Додавання рядків/стовпців** - динамічне розширення
271
+ - **Видалення рядків/стовпців** - очищення структури
272
+ - **Об'єднання клітинок** - створення складних структур
273
+ - **Розділення клітинок** - повернення до стандартної структури
274
+ - **Зміна розміру** - інтерактивне змінення розмірів
275
+ - **Стилювання** - налаштування зовнішнього вигляду
276
+
277
+ ## 📁 Структура проекту
278
+
279
+ ```
280
+ src/
281
+ ├── components/
282
+ │ ├── vs-richtext.vue # Основний компонент
283
+ │ ├── controls/ # Контроли toolbar
284
+ │ │ ├── index.ts
285
+ │ │ ├── vs-editor-boldtext.vue
286
+ │ │ ├── vs-editor-italic.vue
287
+ │ │ ├── vs-editor-table.vue
288
+ │ │ └── ...
289
+ │ ├── helpers/ # Допоміжні компоненти
290
+ │ │ ├── monaco-editor.vue
291
+ │ │ ├── handlePaste.js
292
+ │ │ ├── customHeading.js
293
+ │ │ └── customParagraph.js
294
+ │ ├── shared-components/ # Спільні компоненти
295
+ │ │ ├── vs-popover.vue
296
+ │ │ ├── vs-dialog.vue
297
+ │ │ └── vs-form-color-picker.vue
298
+ │ └── toolbarPresets.js # Набори кнопок
299
+ ├── composables/ # Vue 3 композабли
300
+ │ ├── useRichTextEditor.js
301
+ │ ├── useHtmlMode.js
302
+ │ └── useFullscreen.js
303
+ ├── i18n/ # Міжнародна підтримка
304
+ │ ├── i18n.js
305
+ │ └── locales/
306
+ │ ├── en/
307
+ │ └── uk/
308
+ └── utils/ # Утиліти
309
+ ├── index.js
310
+ └── dynamic.position.js
311
+ ```
312
+
313
+ ## 🔄 Життєвий цикл
314
+
315
+ ### Ініціалізація
316
+ 1. Створення TipTap редактора з розширеннями
317
+ 2. Налаштування toolbar з обраними контролами
318
+ 3. Ініціалізація композаблів (HTML режим, повноекранний режим)
319
+ 4. Підключення обробників подій
320
+
321
+ ### Оновлення контенту
322
+ 1. Відстеження змін в редакторі
323
+ 2. Синхронізація з v-model
324
+ 3. Оновлення HTML контенту
325
+ 4. Емітування подій до батьківського компонента
326
+
327
+ ### Очищення
328
+ 1. Відключення обробників подій
329
+ 2. Очищення TipTap редактора
330
+ 3. Знищення Monaco Editor (якщо використовується)
331
+
332
+ ## 🐛 Відомі обмеження
333
+
334
+ 1. **Завантаження файлів** - потребує налаштування backend endpoint
335
+ 2. **Зображення** - автоматичне зменшення розміру не підтримується
336
+ 3. **Печатка** - стилі можуть відрізнятися від екрану
337
+ 4. **Стара браузерна підтримка** - потребує поліфілів для IE11
338
+
339
+ ## 🤝 Внесок у розробку
340
+
341
+ 1. Fork репозиторію
342
+ 2. Створіть feature branch (`git checkout -b feature/amazing-feature`)
343
+ 3. Commit зміни (`git commit -m 'Add amazing feature'`)
344
+ 4. Push до branch (`git push origin feature/amazing-feature`)
345
+ 5. Створіть Pull Request
346
+
347
+ ## 📄 Ліцензія
348
+
349
+ Цей проект ліцензовано під MIT License - дивіться файл [LICENSE](LICENSE) для деталей.
350
+
351
+ ## 👥 Автори
352
+
353
+ - **Softpro** - *Початкова розробка* - [@softpro](https://github.com/softpro)
354
+
355
+ ## 🙏 Подяки
356
+
357
+ - [TipTap](https://tiptap.dev/) - за чудовий rich text editor
358
+ - [Monaco Editor](https://microsoft.github.io/monaco-editor/) - за потужний code editor
359
+ - [Vue 3](https://vuejs.org/) - за сучасний фреймворк
360
+ - [Tailwind CSS](https://tailwindcss.com/) - за утилітарні CSS класи
361
+
362
+ ---
363
+
364
+ **VsRichtext** - ваш надійний помічник для створення багатого текстового контенту! 🚀