@makhmudov.kay/az-editor 0.1.0-beta.11 → 0.1.0-beta.13
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/CHANGELOG.md +11 -0
- package/README.md +2 -2
- package/dist/az-editor.css +1 -1
- package/dist/az-editor.js +1139 -678
- package/dist/library/EditorFrame.d.ts +1 -0
- package/dist/library/ImageInsertControl.d.ts +5 -0
- package/dist/library/hujjat/docx-images.d.ts +11 -0
- package/dist/library/hujjat/image-resource.d.ts +21 -0
- package/dist/library/image-insertion.d.ts +8 -0
- package/docs/inline-images.ru.md +21 -0
- package/docs/integration.ru.md +7 -5
- package/package.json +2 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type JSZip from 'jszip';
|
|
2
|
+
export declare const IMAGE_R = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
|
|
3
|
+
type Resource = {
|
|
4
|
+
src: string;
|
|
5
|
+
} | {
|
|
6
|
+
error: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function readDocxImages(zip: JSZip): Promise<Map<string, Resource>>;
|
|
9
|
+
export declare function drawingHtml(element: Element, story: string, resources: Map<string, Resource>, loss: (code: string, message: string) => void): string;
|
|
10
|
+
export declare function imageDrawing(id: number, rel: string, width: number, height: number, alt: string): string;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Shared bounded raster contract. Decoding pixels is done by the picker/server. */
|
|
2
|
+
export declare const IMAGE_MAX_BYTES: number;
|
|
3
|
+
export declare const IMAGE_MAX_COUNT = 32;
|
|
4
|
+
export declare const IMAGE_MAX_EDGE = 4096;
|
|
5
|
+
export declare const IMAGE_MAX_PIXELS: number;
|
|
6
|
+
export type RasterInfo = {
|
|
7
|
+
mime: 'image/png' | 'image/jpeg';
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
orientation?: number;
|
|
11
|
+
};
|
|
12
|
+
export declare function readRaster(data: Uint8Array): RasterInfo;
|
|
13
|
+
export declare function imageDataUri(data: Uint8Array, mime: RasterInfo['mime']): string;
|
|
14
|
+
export declare function validateImageDataUri(src: string): RasterInfo & {
|
|
15
|
+
data: Uint8Array;
|
|
16
|
+
};
|
|
17
|
+
/** HTML dimensions are canonicalized to physical points before sending to Hujjat. */
|
|
18
|
+
export declare function imageDimensions(element: Element, info: RasterInfo): {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Decode only bounded raster input, apply EXIF orientation, and strip metadata. */
|
|
2
|
+
export declare function prepareImageFile(file: File, signal: AbortSignal): Promise<{
|
|
3
|
+
data: Uint8Array<ArrayBuffer>;
|
|
4
|
+
mime: "image/jpeg" | "image/png";
|
|
5
|
+
widthPoints: number;
|
|
6
|
+
heightPoints: number;
|
|
7
|
+
description: string;
|
|
8
|
+
}>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Вставка изображений
|
|
2
|
+
|
|
3
|
+
Кнопка «Вставить изображение» добавляет PNG/JPEG в текущую позицию курсора. Вставка работает в абзацах, ячейках и полноэкранном редакторе, поддерживает отмену/повтор. Файл нормализуется перед вставкой: уменьшается разрешение и размер, удаляются метаданные; прозрачность PNG сохраняется.
|
|
4
|
+
|
|
5
|
+
В текущем движке вставка внутри некоторых текстовых фрагментов ячейки ограничена. В таком случае редактор просит установить курсор в начале или конце текста ячейки; самопроизвольного перемещения изображения нет.
|
|
6
|
+
|
|
7
|
+
В HTML сохраняется `<img src="data:image/png;base64,..." alt="Описание" style="width:72pt;height:36pt">` (также `image/jpeg`). Байты принадлежат версии шаблона Hujjat: отдельный ресурс, публичный URL и endpoint загрузки не создаются. Экспорт JSON и сохранение старых версий включают изображения; доступ совпадает с доступом к соответствующему шаблону/документу.
|
|
8
|
+
|
|
9
|
+
Контракт библиотеки и Hujjat:
|
|
10
|
+
|
|
11
|
+
- PNG/JPEG, до 256 КиБ на изображение после нормализации; до 4096 пикселей по каждой стороне и 16 Мп. До 32 изображений в HTML-фрагменте.
|
|
12
|
+
- Общий HTML остаётся ограничен 1 МиБ на тело и 100 КиБ на колонтитул, включая base64 (примерно на треть больше бинарных данных). При превышении сохранение выдаёт ошибку; изображения не удаляются автоматически.
|
|
13
|
+
- Размеры от 1 EMU (1/12700 pt — минимальная единица DOCX) до 600 pt; API получает канонические `width`/`height` в pt. Описание `alt` — до 500 символов.
|
|
14
|
+
- Встроенное размещение в строке, включая таблицы и общие колонтитулы. Выравнивание задаётся абзацем. Внешние URL, пути файлов, SVG, анимация, обтекание, обрезка, повороты и эффекты не входят в контракт. Для изменённого рисунка сначала примените преобразования к файлу и вставьте его заново.
|
|
15
|
+
- Сервер проверяет фактический формат и декодирование изображения. Некорректные изображения при сохранении шаблона отклоняются с ошибкой валидации.
|
|
16
|
+
|
|
17
|
+
DOCX хранит бинарные media parts и отдельные relationships для тела/колонтитула. Экспорт в HTML переносит те же байты и размеры; импорт восстанавливает inline drawing. Неподдерживаемые объекты дают явную диагностику потери. mPDF читает только проверенный встроенный ресурс этого контракта, без сетевого запроса.
|
|
18
|
+
|
|
19
|
+
Уже встроенное в Word изображение не нужно вставлять заново. Его физический размер берётся из `wp:extent` (12700 EMU = 1 pt), а не из разрешения PNG/JPEG. Явное отсутствие заливки/линии и остаточные `effectExtent` без фактического эффекта допустимы; обрезка, видимая рамка и тень по-прежнему требуют предварительного преобразования изображения. Исправление библиотеки доступно с `0.1.0-beta.13`; для серверного DOCX-импорта также необходимы соответствующие изменения Hujjat.
|
|
20
|
+
|
|
21
|
+
Для включения необходимы новая сборка библиотеки **и** изменения Hujjat: старый sanitizer удаляет `img`. Изменений схемы БД не требуется. Agrodox передаёт HTML существующим сохранением и предпросмотром PDF; опубликованную зависимость нужно обновить после выпуска новой версии библиотеки.
|
package/docs/integration.ru.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Интеграция Az Editor в React-приложение
|
|
2
2
|
|
|
3
|
-
Руководство описывает API `@makhmudov.kay/az-editor` версии `0.1.0-beta.
|
|
3
|
+
Руководство описывает API `@makhmudov.kay/az-editor` версии `0.1.0-beta.13`.
|
|
4
4
|
Поддержка серверного `page`, описанная ниже, добавлена в beta.5.
|
|
5
5
|
Совместимые исправления разрывов и строк таблиц добавлены в beta.6 и описаны ниже.
|
|
6
6
|
Исправление общей сетки таблиц и более строгая диагностика размеров добавлены в beta.7.
|
|
@@ -129,7 +129,7 @@ npm install @makhmudov.kay/az-editor@beta
|
|
|
129
129
|
Для фиксации опубликованной версии:
|
|
130
130
|
|
|
131
131
|
```sh
|
|
132
|
-
npm install --save-exact @makhmudov.kay/az-editor@0.1.0-beta.
|
|
132
|
+
npm install --save-exact @makhmudov.kay/az-editor@0.1.0-beta.13
|
|
133
133
|
```
|
|
134
134
|
|
|
135
135
|
Тег `beta` может указывать на более новую версию. Сохраняйте lockfile и проверяйте
|
|
@@ -985,12 +985,13 @@ export default function Page() {
|
|
|
985
985
|
```text
|
|
986
986
|
div p span br hr b strong i em u s sub sup
|
|
987
987
|
h1 h2 h3 h4 h5 h6 ul ol li
|
|
988
|
-
table thead tbody tfoot tr td th
|
|
988
|
+
table thead tbody tfoot tr td th img
|
|
989
989
|
```
|
|
990
990
|
|
|
991
991
|
Сохраняются разрешённые inline-стили и `colspan`/`rowspan` ячеек в пределах 1–100.
|
|
992
992
|
Произвольные `class`, `id`, обработчики событий и `data-*` в контракт не входят.
|
|
993
|
-
`
|
|
993
|
+
PNG/JPEG сохраняются как встроенные data URI: до 256 КиБ на изображение, 4096 пикселей по стороне, 32 изображения; общий лимит HTML учитывает base64. Размеры — положительные `width`/`height` в pt, до 600 pt. Нужен обновлённый sanitizer Hujjat. Подробнее: [вставка изображений](inline-images.ru.md).
|
|
994
|
+
`a` превращается в текст: ссылка как ссылка не сохраняется. `svg`, `script`,
|
|
994
995
|
`style`, `iframe`, формы и медиа удаляются с диагностикой потери.
|
|
995
996
|
|
|
996
997
|
CSS ограничен шрифтом/цветом, базовым оформлением, выравниванием, интервалами,
|
|
@@ -1006,7 +1007,8 @@ CSS ограничен шрифтом/цветом, базовым оформл
|
|
|
1006
1007
|
| Простой bullet/decimal список | Поддерживается |
|
|
1007
1008
|
| Многоуровневая нумерация, нестандартный старт/продолжение | Возможны потери; атрибут `start` удаляется |
|
|
1008
1009
|
| Явный разрыв страницы | Передаётся, автоматическая пагинация рассчитывается заново |
|
|
1009
|
-
|
|
|
1010
|
+
| Строчные PNG/JPEG | Встроены в HTML как проверенные data URI с размерами в pt |
|
|
1011
|
+
| Плавающие картинки, фигуры, текстовые блоки | Не входят в HTML-контракт |
|
|
1010
1012
|
| Общие колонтитулы | Через `page.header/footer`; разные варианты требуют отдельного решения |
|
|
1011
1013
|
| Сноски, комментарии, исправления, поля | Не сохраняются как интерактивные HTML-объекты |
|
|
1012
1014
|
| Скрытый текст | Не раскрывается при экспорте; удаление требует принятия потерь |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@makhmudov.kay/az-editor",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.13",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/library/index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"files": [
|
|
18
18
|
"dist",
|
|
19
19
|
"docs/integration.ru.md",
|
|
20
|
+
"docs/inline-images.ru.md",
|
|
20
21
|
"docs/layout-metadata-v1.ru.md",
|
|
21
22
|
"CHANGELOG.md",
|
|
22
23
|
"examples/integration",
|