@makhmudov.kay/az-editor 0.1.0-beta.1 → 0.1.0-beta.11

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.
Files changed (36) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/README.md +74 -217
  3. package/dist/az-editor.css +1 -1
  4. package/dist/az-editor.js +1881 -601
  5. package/dist/library/AzDocumentEditor.d.ts +25 -1
  6. package/dist/library/AzHtmlEditor.d.ts +11 -2
  7. package/dist/library/EditorFrame.d.ts +8 -0
  8. package/dist/library/EditorMount.d.ts +11 -0
  9. package/dist/library/document-diagnostics.d.ts +3 -0
  10. package/dist/library/font-diagnostics.d.ts +16 -0
  11. package/dist/library/hujjat/api.d.ts +1 -3
  12. package/dist/library/hujjat/contract.d.ts +37 -11
  13. package/dist/library/hujjat/docx-chrome.d.ts +4 -0
  14. package/dist/library/hujjat/docx-to-html.d.ts +5 -2
  15. package/dist/library/hujjat/docx.d.ts +6 -3
  16. package/dist/library/hujjat/html-to-docx.d.ts +3 -2
  17. package/dist/library/hujjat/page-layout.d.ts +5 -0
  18. package/dist/library/hujjat/paragraph-format.d.ts +13 -0
  19. package/dist/library/hujjat/server-page.d.ts +8 -0
  20. package/dist/library/hujjat/table-grid.d.ts +10 -0
  21. package/dist/library/hujjat/xml.d.ts +7 -1
  22. package/dist/library/index.d.ts +8 -2
  23. package/dist/library/layout-profile.d.ts +37 -0
  24. package/docs/integration.ru.md +1203 -0
  25. package/docs/layout-metadata-v1.ru.md +148 -0
  26. package/examples/integration/DocxEditorExample.tsx +97 -0
  27. package/examples/{agrodox → integration}/HtmlDraft.tsx +2 -1
  28. package/examples/integration/HtmlFormExample.tsx +25 -0
  29. package/examples/integration/LayoutDraftExample.tsx +39 -0
  30. package/examples/integration/README.md +22 -0
  31. package/examples/integration/ServerPageDraftExample.tsx +73 -0
  32. package/examples/integration/loadFonts.ts +26 -0
  33. package/examples/integration/server-api.ts +28 -0
  34. package/package.json +6 -4
  35. package/docs/agrodox-integration.ru.md +0 -82
  36. package/docs/hujjat-integration.ru.md +0 -165
package/CHANGELOG.md ADDED
@@ -0,0 +1,89 @@
1
+ # Изменения
2
+
3
+ ## 0.1.0-beta.11
4
+
5
+ - Ctrl+Z отменяет, Ctrl+Y и Ctrl+Shift+Z повторяют действие в активном редакторе. Поддерживаются русская раскладка, Cmd на macOS, фокус на панели форматирования и развёрнутый режим.
6
+ - Сочетания используют историю движка один раз за нажатие. Поля ввода, вложенные диалоги и соседние редакторы сохраняют собственную обработку; режим чтения и `actionsDisabled` блокируют изменение истории документа.
7
+
8
+ ## 0.1.0-beta.10
9
+
10
+ - Разворачивание редактора на всю страницу и возврат по кнопке/Escape без пересоздания документа и истории отмены. Поддерживаются `fullscreen`, `onFullscreenChange` и `ui.fullscreen`.
11
+ - Горизонтальная и вертикальная линейки по умолчанию показывают сантиметры. `rulerUnit="inch"` сохраняет выбор дюймов. Поля и абзацные отступы редактируются средствами движка и экспортируются в `layout` и HTML.
12
+ - `ui.titleBar=false` скрывает строку названия; `renderToolbarEnd` добавляет действия приложения рядом с панелью форматирования.
13
+ - Исправлена потеря отступа первой строки при экспорте DOCX с одновременно заданными `firstLine` и `hanging=0`.
14
+ - В Hujjat геометрия передаётся через существующий `locale.render_profile`; формат серверного API не меняется. Изображения не входят в этот этап.
15
+
16
+ ## 0.1.0-beta.9
17
+
18
+ - E01: явные `strike=0`, `caps=0` и `vertAlign=baseline` у фрагмента сбрасывают унаследованное оформление. Подчёркивание и зачёркивание разрешаются независимо. Для `caps`/`strike` учитывается различие между переключателями стилей и прямым форматированием.
19
+ - HTML-импорт сохраняет `text-decoration` в Chromium, где CSSOM раскрывает это свойство в longhand-свойства. Простое подчёркивание/зачёркивание больше не вызывает ложные предупреждения о потере стиля.
20
+ - E02: группы абзацев с `page-break-inside:avoid` преобразуются в `keepLines` и связь `keepNext` внутри группы. Вложенные группы не захватывают соседние абзацы; принудительные разрывы страниц имеют приоритет.
21
+ - Непредставимые группы с таблицами дают адресную диагностику `keep-group-not-representable` уровня `loss`. Строгий импорт отклоняется; принятие импорта не разрешает автоматически экспорт отредактированного документа с потерями.
22
+ - Публичные методы и серверный HTML/JSON-контракт не изменены.
23
+
24
+ ## 0.1.0-beta.8
25
+
26
+ - HTML → DOCX сохраняет шрифт знака абзаца и наследуемый шрифт `<br>`. Обратный экспорт сохраняет семейство и размер знака абзаца отдельно от текста. Авторские пустые строки не удаляются.
27
+ - Нормализация абсолютных интервалов учитывает эффективные размеры Word в половинах пункта, знак абзаца и противоположные смещения фрагментов. Тесный интервал нормализуется при импорте; `line-height-metrics-estimated` явно обозначает отсутствие реальных метрик шрифта в конвертере.
28
+ - `AzHtmlEditor.exportHtml()` возвращает эффективный нормализованный HTML с `changed: true` даже без ручной правки. `dirty` по-прежнему обозначает ручные изменения. Интеграции должны вызывать экспорт перед сохранением независимо от `dirty`.
29
+ - Потеря скрытого знака абзаца при HTML-экспорте диагностируется как `hidden-paragraph-mark-lost` уровня `loss`; его скрытый шрифт не активируется молча.
30
+ - `preserve`, авторские разрывы и сетка таблиц сохраняют прежний контракт. Недостающий во входном HTML шрифт пустых строк библиотека не восстанавливает по первому текстовому фрагменту. Различие Word `exact`/`atLeast` всё ещё требует расширения сохраняемого контракта.
31
+
32
+ ## 0.1.0-beta.7
33
+
34
+ - Сетка таблицы рассчитывается по ограничениям всех строк одновременно. Пересекающиеся `colspan` больше не зависят от порядка обработки; сохраняются совместимые суммы в неполной сетке, `rowspan` и независимые вложенные таблицы.
35
+ - Безопасные `colgroup`/`col`, частичные колонки и `col span` проходят импорт. Экспорт сохраняет `colgroup` вместе с inline-ширинами фиксированных ячеек; дробные размеры округляются по границам без накопления ошибки.
36
+ - Существенный конфликт явных размеров теперь даёт `table-width-normalized` уровня **loss**, с адресом и численными значениями в twips. Строгий режим требует явного принятия потерь. При конфликте приоритет имеют общая ширина, явные колонки, одиночные и затем объединённые ячейки.
37
+ - Некорректные ширины, объединения и явная DOCX-сетка диагностируются как `table-width-invalid`, `table-span-invalid`, `table-grid-invalid`. Пересечения ячеек, выход за лимиты и непредставимое округление отклоняются контролируемой ошибкой.
38
+
39
+ Публичные методы и серверный payload не изменены. Интерактивные merge/split
40
+ недоступны в текущем движке `@docx-editor.dev/core@2.27.0`; сохранение уже
41
+ объединённых ячеек проверяется отдельно. Эта правка не подтверждает совпадение
42
+ пагинации или PDF mPDF: для этого требуется приёмка в приложении-потребителе.
43
+
44
+ ## 0.1.0-beta.6
45
+
46
+ - Исправлена потеря `page-break-*` в Chromium. Поддерживаемые `break-*` приводятся к серверным `page-break-*` с учётом порядка деклараций; `page` соответствует `always`, `avoid-page` — `avoid`.
47
+ - Разрывы на абзацах, контейнерах и до/после таблиц сохраняются после правок и повторного открытия. Смежные правила одного разрыва не создают лишнюю страницу; явные пустые маркеры остаются разрывами.
48
+ - Сохраняются минимальные высоты строк таблиц, `cantSplit`, начальные повторяемые строки шапки и режим `table-layout:auto/fixed`. Ширина таблицы в абсолютных единицах не подгоняется молча под текстовую область.
49
+ - Потеря плавающего размещения таблицы теперь даёт `floating-table-position-lost` уровня `loss`. Строгий HTML-экспорт требует обработки этой диагностики; прямой DOCX-режим не изменён. Правило точной высоты строки диагностируется как `table-row-height-rule-lost`.
50
+ - В адресах диагностик появились необязательные `tableIndex` и `rowIndex` (с нуля, внутри XML-части).
51
+
52
+ Временный CSSOM/Vite-патч потребителя (`azEditorPaginationCompat`) для beta.4/beta.5 можно
53
+ убрать после установки beta.6 и проверки цикла редактирования. Новый формат метаданных,
54
+ изображения и расширение HTTP-контракта
55
+ в этот этап не входят; отсутствующие во входном HTML сведения не восстанавливаются.
56
+
57
+ ## 0.1.0-beta.5
58
+
59
+ - `HujjatPage`, `HujjatLocaleContent`, `validateHujjatPage` и `AzHtmlEditor.page`: ориентация A4, шрифт, межстрочный и абзацный интервалы учитываются при открытии.
60
+ - `withHujjatLocale` сохраняет page выбранной локали. HTML-экспорт возвращает page; импорт/экспорт передают общие колонтитулы отдельно от body, включая переменные. Неподдерживаемые варианты требуют принятия потерь.
61
+ - Исправлены боковые padding абзацев/контейнеров; висячий отступ экспортируется в форме padding-left + margin-left:0 для mPDF. Проверены повторные циклы, списки и локальные отступы ячеек.
62
+ - PDF/payload проверяют действующий контракт page. Новые ключи размеров/полей в HTTP не добавляются. Добавлен независимый пример интеграции с page.
63
+ - Бэкенд и приложение-потребитель не изменены. Эталонное сравнение Word PDF / mPDF требует отдельной серверной приёмки.
64
+
65
+ ## 0.1.0-beta.4
66
+
67
+ - Вложенные HTML-контейнеры сохраняют боковые отступы, висячую первую строку и доступную ширину таблицы. Отступы ячеек остаются локальными.
68
+ - Добавлены `layout`, `AzPageLayout`, `AzLayoutMetadataV1`, `resolveHtmlLayout` и явная политика `lineSpacingPolicy`. Значения по умолчанию совместимы с beta.3; текущие серверные payload не расширены.
69
+ - Численные интервалы можно сохранять с `preserve`; нормализация учитывает крупные фрагменты и вертикальные смещения. Потеря различия exact/atLeast диагностируется.
70
+ - Оба редактора предоставляют `setParagraphPagination`, включая явное выключение наследованных правил и undo.
71
+ - Предупреждения могут содержать адрес, этап и значения до/после. Добавлены `analyzeDocxFormatting`, `onDiagnostics` и состояние ресурсов `status.fonts`.
72
+ - Исправлен цикл уведомлений при inline `onStatusChange`. HTML не сериализуется на каждую клавишу; устаревшие асинхронные результаты не применяются к новому черновику.
73
+ - Добавлены общая инструкция по профилю страницы и пример отдельного хранения HTML и метаданных.
74
+
75
+ ### При обновлении
76
+
77
+ Табуляция, её позиции, `widowControl` и численное вертикальное смещение теперь сообщаются
78
+ как `loss` при преобразовании в ограниченный HTML. Потребителю нужно показать предупреждения
79
+ и получить решение пользователя перед `allowLossy: true`. Прямое сохранение DOCX эти свойства
80
+ не нормализует. Неподдержанная геометрия и разные разделы не сворачиваются молча в один профиль.
81
+
82
+ Профиль нестандартной страницы нужно хранить отдельно и согласовать его применение с PDF-сервером.
83
+ Само обновление не меняет mPDF. `fonts.state: ready` не гарантирует одинаковые метрики с Word.
84
+ Численные интервалы `preserve` могут приводить к авторскому наложению строк.
85
+ В локальных замерах открытие до готовности занимало на 46–82 мс больше, чем в исходной
86
+ версии (11–24% на наборах 2/30/60 страниц); ускорение открытия не заявляется.
87
+ Ввод и экспорт в этих замерах не ухудшились. Результаты зависят от окружения и шрифтов.
88
+ Сопоставление фактических серверного HTML/mPDF и эталона Word PDF в этом выпуске не выполнено:
89
+ эталонные данные отсутствуют. Проверки библиотеки не заменяют эту приёмку.
package/README.md CHANGED
@@ -1,217 +1,74 @@
1
- # AZ Editor — React-библиотека для DOCX
2
-
3
- Встраиваемый редактор документов Word: текст, таблицы, страницы, импорт и сохранение
4
- DOCX. Пакет `@makhmudov.kay/az-editor` использует открытое ядро `@docx-editor.dev` 2.27.0.
5
- Демонстрационное приложение отделено от библиотеки: его шапка, боковые панели,
6
- уведомления, обработка файлов и серверные настройки не входят в компонент.
7
-
8
- Совпадение с Microsoft Word один в один пока не подтверждено. Подробности:
9
- [проверка совместимости](docs/compatibility-2026-10-08.md).
10
-
11
- Для текущего Hujjat (ограниченный HTML → JSON по локалям → mPDF) добавлен адаптер:
12
- `exportHujjat()`, `importHujjatTemplate()` и `requestHujjatPreview()`.
13
- [Инструкция интеграции и ограничения](docs/hujjat-integration.ru.md).
14
-
15
- Для будущего подключения рядом с существующим редактором доступен `AzHtmlEditor`:
16
- `initialHtml` → отдельный черновик → `await ref.exportHtml()`.
17
- В комплекте есть пример применения/отмены и [инструкция для agrodox-front](docs/agrodox-integration.ru.md).
18
- Сам проект agrodox-front не изменён; подключение выполняет приложение отдельно.
19
-
20
- ## Запуск демо
21
-
22
- Node.js 24.15+ (ветка 24) или 26+, npm.
23
-
24
- ```sh
25
- npm ci
26
- npm run dev
27
- ```
28
-
29
- Откройте http://127.0.0.1:5173. Сразу откроется пустой документ. В меню «Файл» доступны
30
- создание документа, открытие DOCX, пример договора, скачивание DOCX/PDF и печать.
31
- Также можно перетащить DOCX в редактор. Сохранение не меняет исходный файл.
32
-
33
- Сборка автономна: код подготовки печатных страниц и профиль рендеринга находятся
34
- в `src/library/print-pages`. Соседний репозиторий backend не требуется.
35
-
36
- ## Сборка и установка пакета
37
-
38
- ```sh
39
- npm pack
40
- # В другом React-проекте:
41
- npm install /path/to/makhmudov.kay-az-editor-0.1.0-beta.1.tgz
42
- ```
43
-
44
- `npm pack` автоматически запускает сборку. Архив содержит ES-модуль, CSS,
45
- TypeScript-декларации и сведения о лицензиях. React и React DOM 19 — peer dependencies.
46
- Пакет подготовлен к публичной публикации `@makhmudov.kay/az-editor@0.1.0-beta.1`.
47
- В `publishConfig` установлены `access: public` и `tag: beta`.
48
- Публичная публикация в npm бесплатна; для прямой публикации от имени аккаунта
49
- требуется двухфакторная аутентификация. Собственный код — `UNLICENSED`:
50
- публичный доступ не предоставляет открытую лицензию. Лицензии зависимостей сохраняются.
51
- Статус публикации проверяется в реестре; наличие архива ещё не означает,
52
- что версия опубликована.
53
-
54
- После публикации пакет можно установить без входа в npm:
55
-
56
- ```sh
57
- npm install @makhmudov.kay/az-editor@beta
58
- ```
59
-
60
- Нужен браузерный сборщик с поддержкой CSS, шрифтов и WASM; проверен Vite.
61
- В приложениях с серверным рендерингом подключайте редактор на клиенте.
62
-
63
- ## Минимальное подключение
64
-
65
- ```tsx
66
- import { useRef } from 'react';
67
- import {
68
- AzDocumentEditor,
69
- downloadDocx,
70
- type AzDocumentEditorHandle,
71
- } from '@makhmudov.kay/az-editor';
72
- import '@makhmudov.kay/az-editor/styles.css';
73
-
74
- export function Editor() {
75
- const editor = useRef<AzDocumentEditorHandle>(null);
76
-
77
- async function save() {
78
- if (!editor.current) return;
79
- const bytes = await editor.current.save();
80
- downloadDocx(bytes, 'document.docx');
81
- // Вместо скачивания приложение может отправить bytes в свой API.
82
- }
83
-
84
- return (
85
- <AzDocumentEditor
86
- ref={editor}
87
- document="blank"
88
- title="Договор.docx"
89
- style={{ height: 700 }}
90
- onSave={save}
91
- onChange={() => console.log('Документ изменён')}
92
- />
93
- );
94
- }
95
- ```
96
-
97
- Без `document` создаётся пустой документ. Для импорта используйте
98
- `const opened = await readDocxFile(file)` и передавайте `opened.original` в `document`.
99
- При замене документа меняйте React `key`, чтобы сбросить историю предыдущего файла.
100
- Проверку несохранённых изменений выполняет приложение до замены `key`.
101
-
102
- Компонент занимает высоту контейнера. Задайте её через `style`/`className` или родителю.
103
- Минимальная высота, размеры окна и глобальные стили страницы не навязываются.
104
-
105
- ## Настройка интерфейса
106
-
107
- ```tsx
108
- <AzDocumentEditor
109
- document={bytes}
110
- style={{ height: '100%' }}
111
- ui={{ menu: false, rulers: false, navigation: false, print: false }}
112
- />
113
-
114
- // Поверхность документа без заголовка, меню, панели форматирования и линеек:
115
- <AzDocumentEditor document={bytes} ui={false} style={{ height: 600 }} />
116
-
117
- // Просмотр без редактирования:
118
- <AzDocumentEditor document={bytes} mode="view" style={{ height: 600 }} />
119
- ```
120
-
121
- Все параметры `ui` по умолчанию включены:
122
-
123
- | Параметр | Назначение |
124
- | --- | --- |
125
- | `chrome` | Заголовок, меню и панель форматирования одним блоком |
126
- | `menu` | Меню «Файл», «Формат», «Вставка», «Рецензирование» |
127
- | `rulers` | Горизонтальная и вертикальная линейки |
128
- | `navigation` | Навигация по заголовкам и поиск |
129
- | `contextMenu` | Контекстное меню редактора |
130
- | `print` | Пункт печати и перехват Ctrl/Cmd+P нашим адаптером |
131
-
132
- `ui={false}` отключает эти элементы; редактирование остаётся доступным, если `mode="edit"`.
133
- Настройки интерфейса можно менять без повторного открытия документа и потери правок.
134
- `ui.chrome=false` использует поверхность движка без его рамки, включая встроенные линейки
135
- и навигацию. Для отдельных переключателей оставьте `chrome` включённым.
136
-
137
- Дополнительные параметры:
138
-
139
- | Prop | Назначение |
140
- | --- | --- |
141
- | `className`, `style` | Контейнер и размеры компонента |
142
- | `colorMode` | `light`, `dark`, `system`; меняется интерфейс, а не лист документа |
143
- | `i18n` | Каталог переводов; по умолчанию частичный русский с английскими запасными строками |
144
- | `locale` | Региональные правила дат и подписей, по умолчанию `ru-RU`; не переключает язык UI |
145
- | `labels` | Подписи `open`, `save`, `exportPdf`, `print` для действий адаптера |
146
- | `fonts` | Своя конфигурация шрифтов; при её замене перемонтируйте компонент |
147
- | `zoom`, `zoomMode` | Масштаб и режим подгонки страниц |
148
- | `renderTitleBarLeft`, `renderTitleBarRight` | Элементы приложения по краям заголовка |
149
- | `fileActions` | Дополнительные действия меню «Файл»: `{ id, label, onSelect, disabled? }` |
150
- | `actionsDisabled` | Блокировка файловых действий при загрузке/сохранении приложением |
151
-
152
- Для оформления используйте CSS, ограниченный вашим классом, например
153
- `.my-editor .docx-editor { --doc-primary: #2563eb; }`.
154
- Диалог локальной печати пока использует русские подписи.
155
-
156
- ## Открытие, сохранение и PDF принадлежат приложению
157
-
158
- - `onOpen` — приложение выбирает источник и передаёт новые байты в компонент.
159
- - `onSave` — приложение получает байты через `ref.save()` и решает, куда их сохранить.
160
- - `onExportPdf` — приложение вызывает собственный сервис и скачивает результат.
161
- - `onChange` — правка содержимого; загрузка исходника не считается правкой.
162
- - `onStatusChange` — `{ pages, loading, error }`, без обязательной полосы статуса в библиотеке.
163
- - `onFontError` — сообщение о неудачной загрузке шрифта.
164
-
165
- Если обработчик `onOpen`, `onSave` или `onExportPdf` не передан, соответствующий пункт
166
- меню отсутствует. Компонент сам не обращается к серверу сохранения или генерации PDF.
167
- Ошибки асинхронных обработчиков приложение обрабатывает самостоятельно.
168
-
169
- Ref предоставляет `save(): Promise<ArrayBuffer>`, `focus()` и `print(): Promise<void>`.
170
- `print()` открывает локальный предпросмотр всех страниц, после которого используется
171
- диалог печати браузера. Ctrl/Cmd+S/O/P адаптер обрабатывает только внутри активного
172
- редактора; поля и кнопки вне компонента остаются под управлением приложения.
173
-
174
- Опциональные функции `requestPdf`, `downloadPdf` и `pdfRenderProfile` поддерживают
175
- контракт отдельного PDF-сервиса. У `requestPdf` можно задать `url`, `headers`, `signal`
176
- и собственный `fetcher`. Эти функции не вызываются при простом подключении редактора.
177
- Демо использует `/api/documents/export/pdf`; настройки прокси находятся в
178
- `.env.pdf.example`. Для другого бэкенда реализуйте свой `onExportPdf`.
179
-
180
- [ТЗ PDF-сервиса](docs/pdf-export-backend-spec.md) ·
181
- [Контракт OpenAPI](docs/pdf-export.openapi.yaml).
182
-
183
- ## Проверки
184
-
185
- ```sh
186
- npm test
187
- npm run build
188
- npm run build:demo
189
- npx playwright install chromium
190
- npm run test:e2e
191
- ```
192
-
193
- Проверяются импорт и повторное открытие DOCX, правки текста и таблиц, undo/redo,
194
- сохранность исходных байтов, отказ от повреждённых файлов, защита несохранённых правок,
195
- экспорт текущего состояния в PDF, подготовка всех 12 страниц при виртуализации,
196
- встраивание в контейнер, скрытие UI, режим просмотра и сочетания клавиш приложения.
197
-
198
- `tests/browser/fixtures/embed.html` — пример отдельного приложения-потребителя без
199
- стилей демо. Личный корпус документов подключается отдельно через `AZ_EDITOR_CORPUS`;
200
- в обычном запуске его проверки пропускаются. Пользовательские файлы не входят в npm-пакет.
201
-
202
- ## Ограничения
203
-
204
- Поддерживается DOCX до 30 МиБ; DOC, DOCM, PDF и защищённые паролем документы не являются
205
- входным форматом редактора. Шрифты-заменители и отличия вёрстки могут менять переносы.
206
- Сложные поля, формулы, плавающие объекты, исправления и комментарии требуют отдельной
207
- проверки. Адаптер Hujjat преобразует поддерживаемое содержимое в HTML/JSON и вызывает
208
- существующий PDF API. Авторизацию, сохранение и версии шаблонов подключает приложение;
209
- сквозная проверка с живым Hujjat пока не выполнена.
210
-
211
- Демо хранит правки в памяти до скачивания. Библиотека позволяет приложению реализовать
212
- свой процесс сохранения. Экспорт через Chromium воспроизводит вёрстку редактора,
213
- а Hujjat заново рассчитывает её через mPDF. Ни один из этих вариантов не является
214
- независимым эталоном Microsoft Word. Сборщик может предупреждать о размере ядра и Node-модулях
215
- в браузерном экспортере; сохранение из байтов проверяется в браузерных тестах.
216
-
217
- Лицензии и происхождение компонентов: [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
1
+ # Az Editor
2
+
3
+ React-библиотека для редактирования DOCX и HTML-документов с постраничным интерфейсом.
4
+ Приложение управляет файлами, сохранением, авторизацией и подключением PDF-сервиса.
5
+
6
+ **[Полное руководство по интеграции →](docs/integration.ru.md)**
7
+
8
+ Установка, React + Vite, Next.js, DOCX, HTML-черновики, применение и отмена правок,
9
+ переменные, JSON, PDF, шрифты, интерфейс, справочник API и устранение ошибок.
10
+
11
+ ## Установка
12
+
13
+ ```sh
14
+ npm install @makhmudov.kay/az-editor@beta
15
+ ```
16
+
17
+ Для воспроизводимой установки версии beta.11:
18
+
19
+ ```sh
20
+ npm install --save-exact @makhmudov.kay/az-editor@0.1.0-beta.11
21
+ ```
22
+
23
+ Требуются React и React DOM 19, Node.js `^24.15.0 || >=26.0.0` для установки/сборки,
24
+ браузерный сборщик с поддержкой CSS, шрифтов и WASM. Пакет — ESM с TypeScript-декларациями.
25
+ Редактор работает в браузере; SSR компонента отключают.
26
+
27
+ ## Минимальное подключение
28
+
29
+ ```tsx
30
+ import { AzDocumentEditor } from '@makhmudov.kay/az-editor';
31
+ import '@makhmudov.kay/az-editor/styles.css';
32
+
33
+ export function Editor() {
34
+ return <AzDocumentEditor document="blank" title="document.docx" style={{ height: 700 }} />;
35
+ }
36
+ ```
37
+
38
+ Для HTML используйте `AzHtmlEditor` с `initialHtml` и асинхронным `exportHtml()`.
39
+ Открытие, сохранение и обработка ошибок подробно разобраны в [руководстве](docs/integration.ru.md).
40
+
41
+ ## Примеры для копирования
42
+
43
+ - [DOCX: открытие, сохранение, несохранённые правки](examples/integration/DocxEditorExample.tsx)
44
+ - [HTML: форма и отдельный черновик](examples/integration/HtmlFormExample.tsx)
45
+ - [HTML: применение, отмена и диагностика](examples/integration/HtmlDraft.tsx)
46
+ - [Свой API и PDF-сервис](examples/integration/server-api.ts)
47
+ - [Загрузка собственных шрифтов](examples/integration/loadFonts.ts)
48
+ - [HTML с отдельным хранением геометрии](examples/integration/LayoutDraftExample.tsx)
49
+ - [HTML и серверный page: ориентация, колонтитулы, PDF](examples/integration/ServerPageDraftExample.tsx) — с версии beta.5.
50
+
51
+ [Геометрия страницы, интервалы и диагностика оформления](docs/layout-metadata-v1.ru.md).
52
+
53
+ Это исходники для копирования в приложение, а не дополнительные экспорты npm-пакета.
54
+
55
+ ## Разработка и сборка
56
+
57
+ ```sh
58
+ npm ci
59
+ npm run dev
60
+ npm run build
61
+ npm pack
62
+ ```
63
+
64
+ Демо: `http://127.0.0.1:5173`. Сборка автономна. `npm pack` включает руководство,
65
+ примеры, JS, CSS, типы и лицензии зависимостей.
66
+
67
+ ## Ограничения и лицензия
68
+
69
+ Внешний вид и переносы могут отличаться от Microsoft Word или серверного PDF.
70
+ HTML поддерживает ограниченный набор тегов и стилей; потери возвращаются в диагностике.
71
+ Подробности и лимиты — в [руководстве](docs/integration.ru.md).
72
+
73
+ Собственный код: [UNLICENSED](LICENSE). Публичная доступность не предоставляет открытую
74
+ лицензию. Лицензии зависимостей: [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).