hexagon-editor 0.1.6 → 0.1.8
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 +385 -49
- package/dist/MarkdownEditor.vue.d.ts +16 -4
- package/dist/MarkdownEditor.vue.d.ts.map +1 -1
- package/dist/{MarkdownEditorLinkForm-B9dEX3WT.js → MarkdownEditorLinkForm-nx1gDLpK.js} +17 -6
- package/dist/{base-BPdMUtQo.js → base-BOV5nzwj.js} +1005 -728
- package/dist/classname.d.ts.map +1 -1
- package/dist/{index-D_CMntQU.js → color-7y9Yd6c7.js} +512 -442
- package/dist/components/MarkdownEditorFloatingMenus.vue.d.ts +5 -1
- package/dist/components/MarkdownEditorFloatingMenus.vue.d.ts.map +1 -1
- package/dist/components/MarkdownEditorImageActions.vue.d.ts.map +1 -1
- package/dist/components/MarkdownEditorToolbar.vue.d.ts +5 -2
- package/dist/components/MarkdownEditorToolbar.vue.d.ts.map +1 -1
- package/dist/components/MarkdownEditorToolbarIcon.vue.d.ts.map +1 -1
- package/dist/composables/useFloatingPanel.d.ts.map +1 -1
- package/dist/composables/useMarkdownEditorValue.d.ts.map +1 -1
- package/dist/configure.d.ts.map +1 -1
- package/dist/core/actions.d.ts.map +1 -1
- package/dist/core/basic-editor-atomic-source.d.ts.map +1 -1
- package/dist/core/basic-editor-command-helpers.d.ts +2 -1
- package/dist/core/basic-editor-command-helpers.d.ts.map +1 -1
- package/dist/core/basic-editor-markdown.d.ts.map +1 -1
- package/dist/core/basic-editor-renderers.d.ts.map +1 -1
- package/dist/core/basic-editor-runtime-plugins.d.ts.map +1 -1
- package/dist/core/basic-editor-selection.d.ts.map +1 -1
- package/dist/core/basic-editor-table-controls.d.ts.map +1 -1
- package/dist/core/basic-editor-types.d.ts +2 -1
- package/dist/core/basic-editor-types.d.ts.map +1 -1
- package/dist/core/basic-editor.d.ts.map +1 -1
- package/dist/core/content-handler.d.ts.map +1 -1
- package/dist/core/editor-instance.d.ts.map +1 -1
- package/dist/core/events.d.ts.map +1 -1
- package/dist/core/extension-builder.d.ts +1 -1
- package/dist/core/extension-builder.d.ts.map +1 -1
- package/dist/core/extensions-manager.d.ts.map +1 -1
- package/dist/core/lists.d.ts.map +1 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/markdown-parser.d.ts.map +1 -1
- package/dist/core/markdown.d.ts.map +1 -1
- package/dist/core/markup-commands.d.ts.map +1 -1
- package/dist/core/markup-editor.d.ts.map +1 -1
- package/dist/core/registries.d.ts.map +1 -1
- package/dist/core/schema-dynamic-modifier.d.ts.map +1 -1
- package/dist/core/vue-renderer.d.ts.map +1 -1
- package/dist/core.js +2 -2
- package/dist/directives.d.ts.map +1 -1
- package/dist/extensions/additional/folding-heading.d.ts.map +1 -1
- package/dist/extensions/additional/math.d.ts.map +1 -1
- package/dist/extensions/additional/mermaid.d.ts.map +1 -1
- package/dist/extensions/additional/quote-link.d.ts.map +1 -1
- package/dist/extensions/additional/yfm-html-block.d.ts.map +1 -1
- package/dist/extensions/base.d.ts.map +1 -1
- package/dist/extensions/behavior/clicks-on-edges.d.ts.map +1 -1
- package/dist/extensions/behavior/clipboard.d.ts.map +1 -1
- package/dist/extensions/behavior/cursor.d.ts.map +1 -1
- package/dist/extensions/behavior/editor-mode-keymap.d.ts.map +1 -1
- package/dist/extensions/behavior/history.d.ts.map +1 -1
- package/dist/extensions/behavior/placeholder.d.ts.map +1 -1
- package/dist/extensions/behavior/resizable.d.ts.map +1 -1
- package/dist/extensions/behavior/selection-commands.d.ts.map +1 -1
- package/dist/extensions/behavior/selection-context.d.ts.map +1 -1
- package/dist/extensions/behavior/selection.d.ts.map +1 -1
- package/dist/extensions/markdown/blockquote-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/blockquote.d.ts.map +1 -1
- package/dist/extensions/markdown/bold-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/bold.d.ts.map +1 -1
- package/dist/extensions/markdown/breaks-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/breaks.d.ts +1 -1
- package/dist/extensions/markdown/breaks.d.ts.map +1 -1
- package/dist/extensions/markdown/code-block-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/code-block.d.ts +1 -1
- package/dist/extensions/markdown/code-block.d.ts.map +1 -1
- package/dist/extensions/markdown/code-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/code.d.ts.map +1 -1
- package/dist/extensions/markdown/color.d.ts +15 -0
- package/dist/extensions/markdown/color.d.ts.map +1 -0
- package/dist/extensions/markdown/deflist-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/deflist.d.ts +1 -1
- package/dist/extensions/markdown/deflist.d.ts.map +1 -1
- package/dist/extensions/markdown/heading-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/heading.d.ts +1 -1
- package/dist/extensions/markdown/heading.d.ts.map +1 -1
- package/dist/extensions/markdown/horizontal-rule-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/horizontal-rule.d.ts.map +1 -1
- package/dist/extensions/markdown/html.d.ts.map +1 -1
- package/dist/extensions/markdown/image.d.ts +1 -1
- package/dist/extensions/markdown/image.d.ts.map +1 -1
- package/dist/extensions/markdown/italic-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/italic.d.ts +1 -1
- package/dist/extensions/markdown/italic.d.ts.map +1 -1
- package/dist/extensions/markdown/link-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/link.d.ts +1 -1
- package/dist/extensions/markdown/link.d.ts.map +1 -1
- package/dist/extensions/markdown/list-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/lists.d.ts.map +1 -1
- package/dist/extensions/markdown/mark.d.ts.map +1 -1
- package/dist/extensions/markdown/strike.d.ts.map +1 -1
- package/dist/extensions/markdown/subscript.d.ts.map +1 -1
- package/dist/extensions/markdown/table-actions.d.ts.map +1 -1
- package/dist/extensions/markdown/table-specs.d.ts.map +1 -1
- package/dist/extensions/markdown/table.d.ts +2 -2
- package/dist/extensions/markdown/table.d.ts.map +1 -1
- package/dist/extensions/markdown/underline.d.ts.map +1 -1
- package/dist/extensions.js +2 -2
- package/dist/forms/MarkdownEditorForm.vue.d.ts.map +1 -1
- package/dist/forms/MarkdownEditorImageForm.vue.d.ts.map +1 -1
- package/dist/forms/MarkdownEditorLinkForm.vue.d.ts.map +1 -1
- package/dist/forms/MarkdownEditorTextInput.vue.d.ts.map +1 -1
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms.js +1 -1
- package/dist/{full-Da8esvj2.js → full-s-sYdwp2.js} +1 -1
- package/dist/{full-specs-hXKoMF-0.js → full-specs-Cm3QffD5.js} +1 -1
- package/dist/{heading-specs-D7Bj4aIM.js → heading-specs-Dnjn5FYs.js} +136 -51
- package/dist/i18n/index.d.ts +7 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n.js +17 -3
- package/dist/index.css +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1388 -3609
- package/dist/{markup-commands-BYsx8ADT.js → markup-commands-uq7LBcNQ.js} +4056 -4404
- package/dist/presets/commonmark-specs.d.ts.map +1 -1
- package/dist/presets/commonmark.d.ts.map +1 -1
- package/dist/presets/default.d.ts.map +1 -1
- package/dist/presets/full-specs.d.ts.map +1 -1
- package/dist/presets/full.d.ts.map +1 -1
- package/dist/presets/index.d.ts.map +1 -1
- package/dist/presets/zero.d.ts.map +1 -1
- package/dist/presets.js +2 -2
- package/dist/public-types.d.ts.map +1 -1
- package/dist/renderer/MarkdownRenderer.vue.d.ts.map +1 -1
- package/dist/renderer/index.d.ts.map +1 -1
- package/dist/renderer/markdown.d.ts.map +1 -1
- package/dist/renderer.css +1 -1
- package/dist/renderer.js +3644 -193
- package/dist/specs.js +53 -14
- package/dist/toolbar/config.d.ts +1 -1
- package/dist/toolbar/config.d.ts.map +1 -1
- package/dist/toolbar/index.d.ts.map +1 -1
- package/dist/toolbar.js +1 -3
- package/dist/use-markdown-editor.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/package.json +1 -2
- package/dist/core/basic-editor-table-popover.d.ts +0 -5
- package/dist/core/basic-editor-table-popover.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,20 +1,292 @@
|
|
|
1
1
|
# hexagon-editor
|
|
2
2
|
|
|
3
|
-
Vue 3
|
|
3
|
+
`hexagon-editor` — Vue 3-редактор Markdown и YFM. Он умеет работать в визуальном (`wysiwyg`), исходном (`markup`) и разделённом (`split`) режимах, а также поставляет лёгкий SSR-совместимый рендерер для страниц, где редактирование не требуется.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Установка
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
pnpm add hexagon-editor
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
`hexagon-editor/style.css` export is available only for integrations that need to load
|
|
13
|
-
the complete stylesheet explicitly.
|
|
11
|
+
Единственная peer dependency — Vue `^3.5.0`. Подключите stylesheet явно: библиотечные JS entry point'ы не импортируют CSS как side effect.
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
```ts
|
|
14
|
+
// nuxt.config.ts
|
|
15
|
+
export default defineNuxtConfig({
|
|
16
|
+
css: ['hexagon-editor/style.css'], // редактор и рендерер
|
|
17
|
+
});
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Для страницы только с предпросмотром достаточно меньшего набора стилей:
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
export default defineNuxtConfig({
|
|
24
|
+
css: ['hexagon-editor/renderer.css'],
|
|
25
|
+
});
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Обычный Vue 3 / Vite
|
|
29
|
+
|
|
30
|
+
В обычном Vue-приложении импортируйте stylesheet один раз в точке входа. Все примеры пакета используют TypeScript, поэтому файл называется `main.ts`:
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
// src/main.ts
|
|
34
|
+
import {createApp} from 'vue';
|
|
35
|
+
import App from './App.vue';
|
|
36
|
+
import 'hexagon-editor/style.css';
|
|
37
|
+
|
|
38
|
+
createApp(App).mount('#app');
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Если приложение использует только `MarkdownRenderer`, вместо полного stylesheet подключите более компактный:
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
// src/main.ts
|
|
45
|
+
import {createApp} from 'vue';
|
|
46
|
+
import App from './App.vue';
|
|
47
|
+
import 'hexagon-editor/renderer.css';
|
|
48
|
+
|
|
49
|
+
createApp(App).mount('#app');
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Импортируйте stylesheet один раз на стороне приложения. Это особенно важно для SSR и для сборщиков, которые не добавляют CSS-asset библиотеки автоматически.
|
|
53
|
+
|
|
54
|
+
## Быстрый старт
|
|
55
|
+
|
|
56
|
+
```vue
|
|
57
|
+
<script setup lang="ts">
|
|
58
|
+
import {ref} from 'vue';
|
|
59
|
+
import {MarkdownEditor} from 'hexagon-editor';
|
|
60
|
+
|
|
61
|
+
const markdown = ref('# Документ\n\nНачните писать…');
|
|
62
|
+
const mode = ref<'wysiwyg' | 'markup' | 'split'>('wysiwyg');
|
|
63
|
+
</script>
|
|
64
|
+
|
|
65
|
+
<template>
|
|
66
|
+
<MarkdownEditor
|
|
67
|
+
v-model="markdown"
|
|
68
|
+
v-model:mode="mode"
|
|
69
|
+
locale="ru"
|
|
70
|
+
theme="auto"
|
|
71
|
+
/>
|
|
72
|
+
</template>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
`v-model` всегда содержит Markdown-исходник, независимо от текущего режима. Режимы: `wysiwyg` — визуальный редактор, `markup` — редактор исходного Markdown, `split` — оба представления одновременно.
|
|
76
|
+
|
|
77
|
+
## Возможности Markdown и YFM
|
|
78
|
+
|
|
79
|
+
Редактор поддерживает следующие конструкции; preset `full` добавляет кнопки для всех доступных действий панели.
|
|
16
80
|
|
|
17
|
-
|
|
81
|
+
| Категория | Возможности |
|
|
82
|
+
| --- | --- |
|
|
83
|
+
| CommonMark | заголовки, абзацы, цитаты, горизонтальные правила, ссылки, изображения, inline/fenced code, вложенные маркированные и нумерованные списки, переносы |
|
|
84
|
+
| Форматирование | **жирный**, *курсив*, `inline code`, зачёркивание, подчёркивание, выделение (`==text==`), нижний индекс, семь именованных цветов |
|
|
85
|
+
| Структура | таблицы с выравниванием, definition lists, атрибуты заголовков, сворачиваемые заголовки `##+` |
|
|
86
|
+
| YFM и расширения | quote links, блоки raw HTML, YFM HTML `:::html`, пользовательские директивы `::: name`, LaTeX, Mermaid |
|
|
87
|
+
|
|
88
|
+
Пример документа, покрывающий расширенные возможности:
|
|
89
|
+
|
|
90
|
+
````markdown
|
|
91
|
+
# Справка {#guide .page-title}
|
|
92
|
+
|
|
93
|
+
##+ Сворачиваемый раздел
|
|
94
|
+
|
|
95
|
+
**Жирный**, *курсив*, ~~зачёркнутый~~, __подчёркнутый__, ==выделенный==, H~2~O и {blue}(синий текст).
|
|
96
|
+
|
|
97
|
+
> Цитата
|
|
98
|
+
|
|
99
|
+
> [Источник цитаты](https://example.com/source){data-quotelink=true}
|
|
100
|
+
|
|
101
|
+
Текст quote link.
|
|
102
|
+
|
|
103
|
+
[Ссылка](https://example.com "Подсказка") и 
|
|
104
|
+
|
|
105
|
+
Термин
|
|
106
|
+
: Определение
|
|
107
|
+
|
|
108
|
+
| Слева | По центру | Справа |
|
|
109
|
+
| :--- | :---: | ---: |
|
|
110
|
+
| 1 | 2 | 3 |
|
|
111
|
+
|
|
112
|
+
Формула: $E = mc^2$
|
|
113
|
+
|
|
114
|
+
$$
|
|
115
|
+
\sum_{i=1}^{n} i = \frac{n(n + 1)}{2}
|
|
116
|
+
$$
|
|
117
|
+
|
|
118
|
+
```mermaid
|
|
119
|
+
graph LR
|
|
120
|
+
Markdown --> Editor
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
:::html
|
|
124
|
+
<section>Доверенный YFM HTML</section>
|
|
125
|
+
:::
|
|
126
|
+
````
|
|
127
|
+
|
|
128
|
+
Формулы и Mermaid сохраняются и редактируются без дополнительных пакетов. Для их визуального рендеринга передайте адаптеры из раздела «Опциональные движки». Некорректная Mermaid-диаграмма остаётся видимой как исходный текст.
|
|
129
|
+
|
|
130
|
+
### Цвет текста
|
|
131
|
+
|
|
132
|
+
Кнопка `color` в preset `full` открывает палитру: `gray`, `yellow`, `orange`, `red`, `green`, `blue` и `violet`. Выделите текст и выберите цвет; без выделения цвет применяется к последующему вводу. Значение сохраняется в переносимом Markdown-формате, а не в HTML:
|
|
133
|
+
|
|
134
|
+
```markdown
|
|
135
|
+
{red}(Важное сообщение) и {blue}(текст с **другим** форматированием).
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Имена чувствительны к регистру. Неизвестное имя, например `{pink}(текст)`, остаётся обычным Markdown-текстом. И редактор, и `MarkdownRenderer` используют CSS-переменные `--markdown-editor-color-gray`, `--markdown-editor-color-yellow`, `--markdown-editor-color-orange`, `--markdown-editor-color-red`, `--markdown-editor-color-green`, `--markdown-editor-color-blue` и `--markdown-editor-color-violet`, поэтому палитру можно переопределить в контейнере компонента.
|
|
139
|
+
|
|
140
|
+
## `MarkdownEditor`: props, события и слоты
|
|
141
|
+
|
|
142
|
+
```vue
|
|
143
|
+
<script setup lang="ts">
|
|
144
|
+
import {ref} from 'vue';
|
|
145
|
+
import {MarkdownEditor} from 'hexagon-editor';
|
|
146
|
+
|
|
147
|
+
const value = ref('');
|
|
148
|
+
const mode = ref<'wysiwyg' | 'markup' | 'split'>('split');
|
|
149
|
+
|
|
150
|
+
function save(markdown: string) {
|
|
151
|
+
console.log(markdown);
|
|
152
|
+
}
|
|
153
|
+
</script>
|
|
154
|
+
|
|
155
|
+
<template>
|
|
156
|
+
<MarkdownEditor
|
|
157
|
+
v-model="value"
|
|
158
|
+
v-model:mode="mode"
|
|
159
|
+
locale="en"
|
|
160
|
+
theme="dark"
|
|
161
|
+
placeholder="Write a document"
|
|
162
|
+
toolbar-preset="full"
|
|
163
|
+
@change="save"
|
|
164
|
+
@mode-change="console.log('mode:', $event)"
|
|
165
|
+
/>
|
|
166
|
+
</template>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
| Prop | Тип / значение по умолчанию | Назначение |
|
|
170
|
+
| --- | --- | --- |
|
|
171
|
+
| `modelValue` | `string`, `''` | Markdown-значение для `v-model` |
|
|
172
|
+
| `mode` | `wysiwyg \| markup \| split`, `wysiwyg` | Режим, поддерживает `v-model:mode` |
|
|
173
|
+
| `locale` | `ru \| en`, `ru` | Язык интерфейса |
|
|
174
|
+
| `theme` | `auto \| light \| dark`, `auto` | Тема интерфейса |
|
|
175
|
+
| `placeholder` | `string`, `''` | Текст пустого визуального редактора |
|
|
176
|
+
| `readonly` | `boolean`, `false` | Режим чтения: панель инструментов скрыта |
|
|
177
|
+
| `toolbarPreset` | см. ниже, `default` | Встроенная конфигурация панели |
|
|
178
|
+
| `toolbarConfig` | `MarkdownEditorToolbarConfig` | Полностью заменяет выбранный preset |
|
|
179
|
+
| `features` | `MarkdownFeatures` | Адаптеры математики, Mermaid и trusted HTML |
|
|
180
|
+
| `directiveComponents` | `Record<string, Component>` | Vue-компоненты для блоковых директив |
|
|
181
|
+
| `uploadImage` | `(file: File) => Promise<string>` | Обработчик загрузки в форме изображения |
|
|
182
|
+
|
|
183
|
+
`modelValue`, `mode`, `locale`, `toolbarPreset`, `toolbarConfig`, `theme` и `uploadImage` обновляются без перемонтирования компонента. Изменение `mode`, `readonly` или `features` пересоздаёт editor hosts, поэтому текущие selection и история undo/redo сбрасываются. `placeholder` и `directiveComponents` применяются при следующем монтировании; чтобы обновить их у уже созданного редактора, измените его `:key`.
|
|
184
|
+
|
|
185
|
+
События: `update:modelValue`, `change` (новый Markdown), `update:mode` и `mode-change` (новый режим), а также `submit` и `cancel` без параметров. Последние возникают в визуальном редакторе по `Mod+Enter` и `Escape`; в режиме `markup` на них полагаться не следует. Компонент также принимает:
|
|
186
|
+
|
|
187
|
+
- слот `header` — содержимое над toolbar;
|
|
188
|
+
- слот `toolbar` — дополнительное содержимое после встроенных групп toolbar; он их не заменяет. В slot props передаются `{commands, execute}`.
|
|
189
|
+
|
|
190
|
+
В режиме `readonly` исходник не меняется; `MarkdownRenderer` обычно лучше подходит для публичного отображения документов.
|
|
191
|
+
|
|
192
|
+
### Методы через template ref
|
|
193
|
+
|
|
194
|
+
```vue
|
|
195
|
+
<script setup lang="ts">
|
|
196
|
+
import {ref} from 'vue';
|
|
197
|
+
import {MarkdownEditor} from 'hexagon-editor';
|
|
198
|
+
import type {MarkdownEditorExposed} from 'hexagon-editor';
|
|
199
|
+
|
|
200
|
+
const editor = ref<MarkdownEditorExposed>();
|
|
201
|
+
|
|
202
|
+
async function insertTemplate() {
|
|
203
|
+
editor.value?.append('## Новый раздел');
|
|
204
|
+
await editor.value?.setMode('markup');
|
|
205
|
+
editor.value?.moveCursor('end');
|
|
206
|
+
editor.value?.focus();
|
|
207
|
+
}
|
|
208
|
+
</script>
|
|
209
|
+
|
|
210
|
+
<template>
|
|
211
|
+
<button @click="insertTemplate">Добавить раздел</button>
|
|
212
|
+
<MarkdownEditor ref="editor" v-model="value" />
|
|
213
|
+
</template>
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Доступны `focus()`, `hasFocus()`, `getValue()`, `setValue()` и синоним `replace()`, `clear()`, `prepend()`, `append()`, `insert()`, `isEmpty()`, `getMode()`, `setMode()` и `moveCursor('start' | 'end' | {line})`. В `split` позиция `{line}` применяется к исходному редактору.
|
|
217
|
+
|
|
218
|
+
## Панель инструментов
|
|
219
|
+
|
|
220
|
+
Presets: `zero`, `commonmark`, `default`, `full` и совместимый `minimal`.
|
|
221
|
+
|
|
222
|
+
| Preset | Содержимое |
|
|
223
|
+
| --- | --- |
|
|
224
|
+
| `zero` | undo / redo |
|
|
225
|
+
| `commonmark` | история, жирный, курсив, заголовки, списки, ссылка, цитата, code, code block, горизонтальное правило |
|
|
226
|
+
| `default` | `commonmark` + зачёркивание |
|
|
227
|
+
| `minimal` | история, базовое форматирование, списки, цитата, сворачиваемые заголовки, ссылка |
|
|
228
|
+
| `full` | все кнопки пакета, включая underline, mark, image, formula, Mermaid, YFM HTML и таблицы |
|
|
229
|
+
|
|
230
|
+
Все идентификаторы кнопок: `undo`, `redo`, `heading`, `bold`, `italic`, `underline`, `strike`, `mark`, `code`, `bullet-list`, `ordered-list`, `quote`, `fold-heading`, `code-block`, `code-language`, `link`, `color`, `image`, `formula`, `mermaid`, `html`, `horizontal-rule`, `table`.
|
|
231
|
+
|
|
232
|
+
Соберите панель с нужным порядком и контекстными условиями:
|
|
233
|
+
|
|
234
|
+
```ts
|
|
235
|
+
import {
|
|
236
|
+
createToolbarConfig,
|
|
237
|
+
createToolbarGroup,
|
|
238
|
+
createToolbarItem,
|
|
239
|
+
} from 'hexagon-editor';
|
|
240
|
+
import type {MarkdownEditorToolbarConfig} from 'hexagon-editor';
|
|
241
|
+
|
|
242
|
+
export const toolbar: MarkdownEditorToolbarConfig = createToolbarConfig([
|
|
243
|
+
createToolbarGroup('history', ['undo', 'redo']),
|
|
244
|
+
createToolbarGroup('text', ['heading', 'bold', 'italic', 'code']),
|
|
245
|
+
createToolbarGroup('insert', [
|
|
246
|
+
'link',
|
|
247
|
+
createToolbarItem('table', {
|
|
248
|
+
isAvailable: (state) => !state.codeBlock,
|
|
249
|
+
}),
|
|
250
|
+
]),
|
|
251
|
+
]);
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
```vue
|
|
255
|
+
<MarkdownEditor v-model="value" :toolbar-config="toolbar" />
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Для продвинутых интеграций объект из `createToolbarItem` принимает `action`: `run({commands, execute, state})`, а также `isActive(state)` и `isEnabled(state)`. Готовые конфигурации `zeroToolbarConfig`, `commonmarkToolbarConfig`, `defaultToolbarConfig`, `fullToolbarConfig` и `minimalToolbarConfig`, как и фабрики, экспортируются из корня и `hexagon-editor/toolbar`.
|
|
259
|
+
|
|
260
|
+
## Загрузка и настройка изображений
|
|
261
|
+
|
|
262
|
+
Редактор не диктует транспорт загрузки: верните URL загруженного файла из `uploadImage`. Форма принимает изображения (`image/*`), показывает ошибку при неудаче и принимает HTTP(S) либо `data:image/` URL.
|
|
263
|
+
|
|
264
|
+
```vue
|
|
265
|
+
<script setup lang="ts">
|
|
266
|
+
import {MarkdownEditor} from 'hexagon-editor';
|
|
267
|
+
|
|
268
|
+
async function uploadImage(file: File): Promise<string> {
|
|
269
|
+
const body = new FormData();
|
|
270
|
+
body.append('image', file);
|
|
271
|
+
const response = await fetch('/api/images', {method: 'POST', body});
|
|
272
|
+
if (!response.ok) throw new Error('Image upload failed');
|
|
273
|
+
|
|
274
|
+
const result: unknown = await response.json();
|
|
275
|
+
if (typeof result !== 'object' || result === null || !('url' in result) || typeof result.url !== 'string') {
|
|
276
|
+
throw new Error('The API must return {url: string}');
|
|
277
|
+
}
|
|
278
|
+
return result.url;
|
|
279
|
+
}
|
|
280
|
+
</script>
|
|
281
|
+
|
|
282
|
+
<template>
|
|
283
|
+
<MarkdownEditor v-model="value" :upload-image="uploadImage" toolbar-preset="full" />
|
|
284
|
+
</template>
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Встроенная форма позволяет указать URL, alt-текст, title, имя и размеры. `MarkdownEditorImageForm`, `MarkdownEditorLinkForm`, `MarkdownEditorForm` и `MarkdownEditorTextInput` экспортируются также для самостоятельного использования. Типы payload: `MarkdownEditorImageSubmitParams` и `MarkdownEditorLinkSubmitParams`.
|
|
288
|
+
|
|
289
|
+
## Рендерер для read-only и SSR
|
|
18
290
|
|
|
19
291
|
```vue
|
|
20
292
|
<script setup lang="ts">
|
|
@@ -28,89 +300,153 @@ defineProps<{content: string}>();
|
|
|
28
300
|
</template>
|
|
29
301
|
```
|
|
30
302
|
|
|
31
|
-
|
|
303
|
+
Этот entry point не тянет редактор, ProseMirror, CodeMirror и toolbar. Он SSR-совместим: Mermaid при SSR выводится как стабильный исходный fallback, а после hydration заменяется SVG. Базовую типографику можно переопределить через `.markdown-renderer`, её семантические потомки и CSS-переменные `--markdown-renderer-link`, `--markdown-renderer-code-background`, а также `--markdown-editor-color-*` для именованных цветов текста.
|
|
32
304
|
|
|
33
|
-
|
|
305
|
+
Raw Markdown HTML отображается как исходный текст. HTML внутри директивы с пробелом после маркера — `::: html` — рендерится как HTML, а `:::html` является YFM-блоком. Передавайте в HTML только доверенный контент: пакет не санитизирует его.
|
|
306
|
+
|
|
307
|
+
`MarkdownRenderer` также принимает `directiveComponents`; зарегистрированные компоненты монтируются в блоки `::: name`, получают `readonly: true`, а их `updateContent()` намеренно ничего не делает.
|
|
308
|
+
|
|
309
|
+
## Опциональные движки: KaTeX, Mermaid и HTML
|
|
310
|
+
|
|
311
|
+
KaTeX и Mermaid не входят в зависимости пакета. Установите только необходимое:
|
|
34
312
|
|
|
35
313
|
```bash
|
|
36
|
-
pnpm add katex
|
|
37
|
-
pnpm add mermaid
|
|
314
|
+
pnpm add katex mermaid
|
|
38
315
|
```
|
|
39
316
|
|
|
40
|
-
Pass local adapters through `features`; Mermaid can be loaded lazily, and KaTeX styles must be imported by the application:
|
|
41
|
-
|
|
42
317
|
```ts
|
|
43
318
|
import katex from 'katex';
|
|
44
319
|
import 'katex/dist/katex.min.css';
|
|
45
320
|
import type {MarkdownFeatures} from 'hexagon-editor';
|
|
46
321
|
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
322
|
+
export const editorFeatures: MarkdownFeatures = {
|
|
323
|
+
math: {
|
|
324
|
+
renderToString: (latex, display) => katex.renderToString(latex, {
|
|
325
|
+
displayMode: display,
|
|
326
|
+
throwOnError: true,
|
|
327
|
+
}),
|
|
328
|
+
},
|
|
329
|
+
mermaid: {
|
|
330
|
+
load: () => import('mermaid').then(({default: mermaid}) => mermaid),
|
|
331
|
+
},
|
|
332
|
+
// source приходит из :::html ... ::: — возвращайте только безопасный DOM.
|
|
333
|
+
html: (source) => {
|
|
334
|
+
const element = document.createElement('div');
|
|
335
|
+
element.textContent = source;
|
|
336
|
+
return element;
|
|
337
|
+
},
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
export const rendererFeatures: MarkdownFeatures = {
|
|
341
|
+
math: editorFeatures.math,
|
|
342
|
+
mermaid: editorFeatures.mermaid,
|
|
50
343
|
};
|
|
51
344
|
```
|
|
52
345
|
|
|
53
|
-
|
|
346
|
+
Передайте адаптер `html` только редактору. Рендереру нужны только адаптеры math/Mermaid:
|
|
54
347
|
|
|
55
|
-
|
|
348
|
+
```vue
|
|
349
|
+
<MarkdownEditor v-model="value" :features="editorFeatures" toolbar-preset="full" />
|
|
350
|
+
<MarkdownRenderer :content="value" :features="rendererFeatures" />
|
|
351
|
+
```
|
|
56
352
|
|
|
57
|
-
|
|
353
|
+
Mermaid загружается лениво, только когда в документе есть диаграмма. В браузерном приложении `features.html` вызывается для YFM HTML-блоков визуального редактора. `MarkdownRenderer` не использует этот адаптер и всегда выводит `:::html` как экранированный исходник; trusted HTML из `::: html` он вставляет напрямую.
|
|
58
354
|
|
|
59
|
-
##
|
|
355
|
+
## Пользовательские директивы
|
|
356
|
+
|
|
357
|
+
Отобразите блок `::: note` собственным Vue-компонентом. В визуальном редакторе `updateContent` записывает изменённый Markdown; в рендерере он намеренно является no-op и `readonly` равен `true`.
|
|
60
358
|
|
|
61
359
|
```vue
|
|
360
|
+
<!-- NoteDirective.vue -->
|
|
62
361
|
<script setup lang="ts">
|
|
63
|
-
import {
|
|
64
|
-
import {MarkdownEditor} from 'hexagon-editor';
|
|
362
|
+
import type {MarkdownDirectiveComponentProps} from 'hexagon-editor';
|
|
65
363
|
|
|
66
|
-
const
|
|
67
|
-
const mode = ref<'wysiwyg' | 'markup' | 'split'>('wysiwyg');
|
|
364
|
+
const props = defineProps<MarkdownDirectiveComponentProps>();
|
|
68
365
|
</script>
|
|
69
366
|
|
|
70
367
|
<template>
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
368
|
+
<aside class="note">
|
|
369
|
+
<textarea
|
|
370
|
+
v-if="!props.readonly"
|
|
371
|
+
:value="props.content"
|
|
372
|
+
@input="props.updateContent(($event.target as HTMLTextAreaElement).value)"
|
|
373
|
+
/>
|
|
374
|
+
<template v-else>{{ props.content }}</template>
|
|
375
|
+
</aside>
|
|
77
376
|
</template>
|
|
78
377
|
```
|
|
79
378
|
|
|
80
|
-
|
|
379
|
+
```vue
|
|
380
|
+
<script setup lang="ts">
|
|
381
|
+
import {MarkdownEditor} from 'hexagon-editor';
|
|
382
|
+
import NoteDirective from './NoteDirective.vue';
|
|
81
383
|
|
|
82
|
-
|
|
384
|
+
const directiveComponents = {note: NoteDirective};
|
|
385
|
+
</script>
|
|
83
386
|
|
|
84
|
-
|
|
387
|
+
<template>
|
|
388
|
+
<MarkdownEditor v-model="value" :directive-components="directiveComponents" />
|
|
389
|
+
</template>
|
|
390
|
+
```
|
|
85
391
|
|
|
86
|
-
|
|
392
|
+
```markdown
|
|
393
|
+
::: note
|
|
394
|
+
Текст заметки
|
|
395
|
+
:::
|
|
396
|
+
```
|
|
87
397
|
|
|
88
|
-
## Composable
|
|
398
|
+
## Composable и headless API
|
|
89
399
|
|
|
90
|
-
`useMarkdownEditor(
|
|
400
|
+
`useMarkdownEditor()` создаёт framework-neutral экземпляр и автоматически уничтожает его при размонтировании Vue-компонента. Это API управляет состоянием и событиями; монтирование визуальных поверхностей выполняется компонентом `MarkdownEditor` или низкоуровневыми функциями из `/core`.
|
|
91
401
|
|
|
92
|
-
|
|
402
|
+
```ts
|
|
403
|
+
import {useMarkdownEditor} from 'hexagon-editor';
|
|
404
|
+
|
|
405
|
+
const {editor, value, mode, readonly, toolbarVisible, destroy} = useMarkdownEditor({
|
|
406
|
+
initialValue: '# Черновик',
|
|
407
|
+
mode: 'markup',
|
|
408
|
+
preset: 'full',
|
|
409
|
+
onChange: (markdown) => saveDraft(markdown),
|
|
410
|
+
beforeEditorModeChange: ({mode}) => mode !== 'split' || canUseSplitMode(),
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
editor.append('Новый абзац');
|
|
414
|
+
editor.setReadonly(true);
|
|
415
|
+
editor.changeToolbarVisibility({visible: false});
|
|
416
|
+
editor.on('modeChange', (nextMode) => console.log(nextMode));
|
|
417
|
+
// destroy() требуется только вне Vue lifecycle или для раннего освобождения.
|
|
418
|
+
```
|
|
93
419
|
|
|
94
|
-
|
|
420
|
+
Экземпляр предоставляет методы значения и курсора из component ref, `setReadonly()`, `changeToolbarVisibility()`, `action(name)`, `on()`/`off()` и `destroy()`. События: `change`, `modeChange`, `changeEditorMode`, `changeReadonly`, `changeToolbarVisibility`, `destroy`. Реактивные `value`, `mode`, `readonly` и `toolbarVisible` composable доступны только для чтения.
|
|
95
421
|
|
|
96
|
-
##
|
|
422
|
+
## Расширения, presets и низкоуровневый API
|
|
97
423
|
|
|
98
|
-
|
|
424
|
+
Используйте public subpaths, когда строите свой ProseMirror-based редактор:
|
|
99
425
|
|
|
100
|
-
|
|
426
|
+
```ts
|
|
427
|
+
import {ExtensionsManager} from 'hexagon-editor/core';
|
|
428
|
+
import {DefaultPreset} from 'hexagon-editor/presets';
|
|
429
|
+
import {Math, Mermaid} from 'hexagon-editor/extensions';
|
|
101
430
|
|
|
102
|
-
|
|
431
|
+
const extensions = new ExtensionsManager((builder) => {
|
|
432
|
+
builder.use(DefaultPreset, {}).use(Math).use(Mermaid);
|
|
433
|
+
}).build();
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
`ZeroPreset` содержит базовую схему, input rules и keymap; `CommonMarkPreset` добавляет CommonMark-узлы и marks; `DefaultPreset` — таблицы и зачёркивание; `FullPreset` — YFM/расширения, историю, placeholder, clipboard, cursor, selection и responsive behavior. Совместимые `CommonMarkSpecsPreset` и `FullSpecsPreset` также экспортируются.
|
|
103
437
|
|
|
104
|
-
|
|
438
|
+
Корневой entry point экспортирует полный публичный API. Стабильные subpaths: `hexagon-editor/core`, `/extensions`, `/specs`, `/presets`, `/renderer`, `/toolbar`, `/forms`, `/configure`, `/classname`, `/i18n`. Внутренние пути `src/**` не входят в контракт совместимости.
|
|
105
439
|
|
|
106
|
-
|
|
440
|
+
`configure({lang: 'en'})` устанавливает process-wide конфигурацию; `getConfig()` читает её, а `subscribeConfigure()` подписывает на изменения. Текущий `MarkdownEditor` не подписывается на неё автоматически: передавайте `locale` каждому экземпляру. `cn('editor')` из `/classname` создаёт BEM-имена с префиксом `hx-md-`.
|
|
107
441
|
|
|
108
|
-
|
|
442
|
+
## Доступность и адаптивность
|
|
109
443
|
|
|
110
|
-
|
|
444
|
+
У toolbar-кнопок и меню переключения режима есть доступные подписи и ARIA-роли. На узком экране toolbar прокручивается горизонтально, а split-режим становится вертикальным. Переключатель режимов реализован как меню, а не как tablist; специальные сочетания `ArrowLeft`, `ArrowRight`, `Home` и `End` для него не поддерживаются.
|
|
111
445
|
|
|
112
|
-
|
|
446
|
+
## Локальный playground
|
|
113
447
|
|
|
114
|
-
|
|
448
|
+
```bash
|
|
449
|
+
pnpm dev
|
|
450
|
+
```
|
|
115
451
|
|
|
116
|
-
|
|
452
|
+
Playground содержит демонстрацию полного toolbar, Markdown/YFM, live-переключатели языка и темы, KaTeX/Mermaid и пример загрузки изображений.
|
|
@@ -46,6 +46,7 @@ declare function __VLS_template(): {
|
|
|
46
46
|
refs: {
|
|
47
47
|
floatingMenus: import('vue').CreateComponentPublicInstanceWithMixins<Readonly<{
|
|
48
48
|
codeVisible: boolean;
|
|
49
|
+
colorVisible: boolean;
|
|
49
50
|
formulaVisible: boolean;
|
|
50
51
|
headingVisible: boolean;
|
|
51
52
|
listVisible: boolean;
|
|
@@ -57,6 +58,7 @@ declare function __VLS_template(): {
|
|
|
57
58
|
translate: (key: MarkdownEditorMessageKey) => string;
|
|
58
59
|
}> & Readonly<{
|
|
59
60
|
"onCode-block"?: (() => any) | undefined;
|
|
61
|
+
"onSelect-color"?: ((color: "gray" | "yellow" | "orange" | "red" | "green" | "blue" | "violet") => any) | undefined;
|
|
60
62
|
"onInline-code"?: (() => any) | undefined;
|
|
61
63
|
"onInline-formula"?: (() => any) | undefined;
|
|
62
64
|
"onMath-block"?: (() => any) | undefined;
|
|
@@ -67,9 +69,10 @@ declare function __VLS_template(): {
|
|
|
67
69
|
"onIndent-list"?: (() => any) | undefined;
|
|
68
70
|
"onOutdent-list"?: (() => any) | undefined;
|
|
69
71
|
}>, {
|
|
70
|
-
getElement(name: "code" | "formula" | "heading" | "list" | "mode"): HTMLElement | undefined;
|
|
72
|
+
getElement(name: "code" | "color" | "formula" | "heading" | "list" | "mode"): HTMLElement | undefined;
|
|
71
73
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
72
74
|
"code-block": () => any;
|
|
75
|
+
"select-color": (color: "gray" | "yellow" | "orange" | "red" | "green" | "blue" | "violet") => any;
|
|
73
76
|
"inline-code": () => any;
|
|
74
77
|
"inline-formula": () => any;
|
|
75
78
|
"math-block": () => any;
|
|
@@ -80,6 +83,7 @@ declare function __VLS_template(): {
|
|
|
80
83
|
"indent-list": () => any;
|
|
81
84
|
"outdent-list": () => any;
|
|
82
85
|
}, import('vue').PublicProps, {}, false, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
|
|
86
|
+
color: HTMLDivElement;
|
|
83
87
|
code: HTMLDivElement;
|
|
84
88
|
heading: HTMLDivElement;
|
|
85
89
|
formula: HTMLDivElement;
|
|
@@ -94,6 +98,7 @@ declare function __VLS_template(): {
|
|
|
94
98
|
Defaults: {};
|
|
95
99
|
}, Readonly<{
|
|
96
100
|
codeVisible: boolean;
|
|
101
|
+
colorVisible: boolean;
|
|
97
102
|
formulaVisible: boolean;
|
|
98
103
|
headingVisible: boolean;
|
|
99
104
|
listVisible: boolean;
|
|
@@ -105,6 +110,7 @@ declare function __VLS_template(): {
|
|
|
105
110
|
translate: (key: MarkdownEditorMessageKey) => string;
|
|
106
111
|
}> & Readonly<{
|
|
107
112
|
"onCode-block"?: (() => any) | undefined;
|
|
113
|
+
"onSelect-color"?: ((color: "gray" | "yellow" | "orange" | "red" | "green" | "blue" | "violet") => any) | undefined;
|
|
108
114
|
"onInline-code"?: (() => any) | undefined;
|
|
109
115
|
"onInline-formula"?: (() => any) | undefined;
|
|
110
116
|
"onMath-block"?: (() => any) | undefined;
|
|
@@ -115,7 +121,7 @@ declare function __VLS_template(): {
|
|
|
115
121
|
"onIndent-list"?: (() => any) | undefined;
|
|
116
122
|
"onOutdent-list"?: (() => any) | undefined;
|
|
117
123
|
}>, {
|
|
118
|
-
getElement(name: "code" | "formula" | "heading" | "list" | "mode"): HTMLElement | undefined;
|
|
124
|
+
getElement(name: "code" | "color" | "formula" | "heading" | "list" | "mode"): HTMLElement | undefined;
|
|
119
125
|
}, {}, {}, {}, {}> | null;
|
|
120
126
|
linkForm: import('vue').CreateComponentPublicInstanceWithMixins<Readonly<{
|
|
121
127
|
autofocus?: boolean;
|
|
@@ -505,6 +511,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
505
511
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
506
512
|
floatingMenus: import('vue').CreateComponentPublicInstanceWithMixins<Readonly<{
|
|
507
513
|
codeVisible: boolean;
|
|
514
|
+
colorVisible: boolean;
|
|
508
515
|
formulaVisible: boolean;
|
|
509
516
|
headingVisible: boolean;
|
|
510
517
|
listVisible: boolean;
|
|
@@ -516,6 +523,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
516
523
|
translate: (key: MarkdownEditorMessageKey) => string;
|
|
517
524
|
}> & Readonly<{
|
|
518
525
|
"onCode-block"?: (() => any) | undefined;
|
|
526
|
+
"onSelect-color"?: ((color: "gray" | "yellow" | "orange" | "red" | "green" | "blue" | "violet") => any) | undefined;
|
|
519
527
|
"onInline-code"?: (() => any) | undefined;
|
|
520
528
|
"onInline-formula"?: (() => any) | undefined;
|
|
521
529
|
"onMath-block"?: (() => any) | undefined;
|
|
@@ -526,9 +534,10 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
526
534
|
"onIndent-list"?: (() => any) | undefined;
|
|
527
535
|
"onOutdent-list"?: (() => any) | undefined;
|
|
528
536
|
}>, {
|
|
529
|
-
getElement(name: "code" | "formula" | "heading" | "list" | "mode"): HTMLElement | undefined;
|
|
537
|
+
getElement(name: "code" | "color" | "formula" | "heading" | "list" | "mode"): HTMLElement | undefined;
|
|
530
538
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
531
539
|
"code-block": () => any;
|
|
540
|
+
"select-color": (color: "gray" | "yellow" | "orange" | "red" | "green" | "blue" | "violet") => any;
|
|
532
541
|
"inline-code": () => any;
|
|
533
542
|
"inline-formula": () => any;
|
|
534
543
|
"math-block": () => any;
|
|
@@ -539,6 +548,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
539
548
|
"indent-list": () => any;
|
|
540
549
|
"outdent-list": () => any;
|
|
541
550
|
}, import('vue').PublicProps, {}, false, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
|
|
551
|
+
color: HTMLDivElement;
|
|
542
552
|
code: HTMLDivElement;
|
|
543
553
|
heading: HTMLDivElement;
|
|
544
554
|
formula: HTMLDivElement;
|
|
@@ -553,6 +563,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
553
563
|
Defaults: {};
|
|
554
564
|
}, Readonly<{
|
|
555
565
|
codeVisible: boolean;
|
|
566
|
+
colorVisible: boolean;
|
|
556
567
|
formulaVisible: boolean;
|
|
557
568
|
headingVisible: boolean;
|
|
558
569
|
listVisible: boolean;
|
|
@@ -564,6 +575,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
564
575
|
translate: (key: MarkdownEditorMessageKey) => string;
|
|
565
576
|
}> & Readonly<{
|
|
566
577
|
"onCode-block"?: (() => any) | undefined;
|
|
578
|
+
"onSelect-color"?: ((color: "gray" | "yellow" | "orange" | "red" | "green" | "blue" | "violet") => any) | undefined;
|
|
567
579
|
"onInline-code"?: (() => any) | undefined;
|
|
568
580
|
"onInline-formula"?: (() => any) | undefined;
|
|
569
581
|
"onMath-block"?: (() => any) | undefined;
|
|
@@ -574,7 +586,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
574
586
|
"onIndent-list"?: (() => any) | undefined;
|
|
575
587
|
"onOutdent-list"?: (() => any) | undefined;
|
|
576
588
|
}>, {
|
|
577
|
-
getElement(name: "code" | "formula" | "heading" | "list" | "mode"): HTMLElement | undefined;
|
|
589
|
+
getElement(name: "code" | "color" | "formula" | "heading" | "list" | "mode"): HTMLElement | undefined;
|
|
578
590
|
}, {}, {}, {}, {}> | null;
|
|
579
591
|
linkForm: import('vue').CreateComponentPublicInstanceWithMixins<Readonly<{
|
|
580
592
|
autofocus?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownEditor.vue.d.ts","sourceRoot":"","sources":["../src/MarkdownEditor.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarkdownEditor.vue.d.ts","sourceRoot":"","sources":["../src/MarkdownEditor.vue"],"names":[],"mappings":"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"}
|