@cbm-common/cbm-types 0.0.366 → 0.0.368
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/lib/components/document-editor/clipboard/document-editor-node-ids.d.ts +2 -0
- package/lib/components/document-editor/clipboard/document-editor-paste.d.ts +3 -0
- package/lib/components/document-editor/document-editor.d.ts +425 -0
- package/lib/components/document-editor/find/document-editor-search.d.ts +23 -0
- package/lib/components/document-editor/find/find-panel/document-editor-find-panel.d.ts +45 -0
- package/lib/components/document-editor/format/document-editor-commands.d.ts +38 -0
- package/lib/components/document-editor/format/document-editor-defaults.d.ts +14 -0
- package/lib/components/document-editor/format/document-editor-format-state.d.ts +62 -0
- package/lib/components/document-editor/format/document-editor-format.d.ts +2 -0
- package/lib/components/document-editor/format/document-editor-typography.d.ts +26 -0
- package/lib/components/document-editor/i18n/document-editor-i18n.d.ts +2 -0
- package/lib/components/document-editor/lists/document-editor-list.d.ts +12 -0
- package/lib/components/document-editor/lists/list-panel/document-editor-list-panel.d.ts +56 -0
- package/lib/components/document-editor/nodes/document-editor-node-attributes.d.ts +16 -0
- package/lib/components/document-editor/nodes/document-editor-node-types.d.ts +83 -0
- package/lib/components/document-editor/nodes/document-editor-node.d.ts +24 -0
- package/lib/components/document-editor/nodes/node-panel/document-editor-node-panel.d.ts +34 -0
- package/lib/components/document-editor/page/document-editor-page-nodes.d.ts +18 -0
- package/lib/components/document-editor/page/document-editor-pages.d.ts +40 -0
- package/lib/components/document-editor/page/document-editor-region-guard.d.ts +2 -0
- package/lib/components/document-editor/public-api.d.ts +48 -0
- package/lib/components/document-editor/ribbon/color-menu/document-editor-color-menu.d.ts +34 -0
- package/lib/components/document-editor/ribbon/link-menu/document-editor-link-menu.d.ts +19 -0
- package/lib/components/document-editor/ribbon/spinner/document-editor-spinner.d.ts +51 -0
- package/lib/components/document-editor/ribbon/symbol-menu/document-editor-symbol-menu.d.ts +10 -0
- package/lib/components/document-editor/tables/borders/border-menu/document-editor-border-menu.d.ts +20 -0
- package/lib/components/document-editor/tables/borders/border-style-picker/document-editor-border-style-picker.d.ts +13 -0
- package/lib/components/document-editor/tables/borders/border-weight-picker/document-editor-border-weight-picker.d.ts +16 -0
- package/lib/components/document-editor/tables/borders/document-editor-table-border-painter.d.ts +14 -0
- package/lib/components/document-editor/tables/borders/document-editor-table-borders.d.ts +52 -0
- package/lib/components/document-editor/tables/document-editor-table-select.d.ts +14 -0
- package/lib/components/document-editor/tables/document-editor-table-selection.d.ts +47 -0
- package/lib/components/document-editor/tables/document-editor-table.d.ts +2 -0
- package/lib/components/document-editor/tables/handles/document-editor-table-handles-commands.d.ts +46 -0
- package/lib/components/document-editor/tables/handles/document-editor-table-handles-dom.d.ts +23 -0
- package/lib/components/document-editor/tables/handles/document-editor-table-handles-geometry.d.ts +104 -0
- package/lib/components/document-editor/tables/handles/document-editor-table-handles.d.ts +14 -0
- package/lib/components/document-editor/tables/layout/alignment-grid/document-editor-alignment-grid.d.ts +32 -0
- package/lib/components/document-editor/tables/layout/cell-margins-menu/document-editor-cell-margins-menu.d.ts +50 -0
- package/lib/components/document-editor/tables/layout/document-editor-table-layout.d.ts +92 -0
- package/lib/components/document-editor/tables/styles/document-editor-table-design-extension.d.ts +2 -0
- package/lib/components/document-editor/tables/styles/document-editor-table-design-state.d.ts +23 -0
- package/lib/components/document-editor/tables/styles/document-editor-table-design.d.ts +39 -0
- package/lib/components/document-editor/tables/styles/document-editor-table-styles.d.ts +114 -0
- package/lib/components/document-editor/tables/styles/style-gallery/document-editor-table-style-gallery.d.ts +65 -0
- package/lib/components/document-editor/tables/table-dialog/document-editor-table-dialog.d.ts +54 -0
- package/lib/components/document-editor/tables/table-grid-menu/document-editor-table-grid-menu.d.ts +31 -0
- package/lib/components/document-editor/variables/document-editor-sample-data.d.ts +4 -0
- package/lib/components/document-editor/variables/document-editor-schema.d.ts +85 -0
- package/lib/components/document-editor/variables/document-editor-template.d.ts +9 -0
- package/lib/components/document-editor/variables/variables-panel/document-editor-variables-panel.d.ts +40 -0
- package/lib/components/document-editor/word-import/document-editor-word-flatten.d.ts +7 -0
- package/lib/components/document-editor/word-import/document-editor-word-float.d.ts +23 -0
- package/lib/components/document-editor/word-import/document-editor-word-format.d.ts +17 -0
- package/lib/components/document-editor/word-import/document-editor-word-images.d.ts +24 -0
- package/lib/components/document-editor/word-import/document-editor-word-import.d.ts +20 -0
- package/lib/components/document-editor/word-import/document-editor-word-page.d.ts +57 -0
- package/lib/components/document-editor/word-import/document-editor-word-styles.d.ts +143 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
import { type TableLook } from '../document-editor-table-styles';
|
|
3
|
+
/** Celda de una miniatura: sus bordes y su fondo ya como CSS, y el color de la barra que hace de texto. */
|
|
4
|
+
export interface TableStyleThumbnailCell {
|
|
5
|
+
borderTop: string;
|
|
6
|
+
borderRight: string;
|
|
7
|
+
borderBottom: string;
|
|
8
|
+
borderLeft: string;
|
|
9
|
+
background: string;
|
|
10
|
+
barColor: string;
|
|
11
|
+
bold: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** Una opción de la galería: un estilo del catálogo o "Sin estilo" (`id` nulo). */
|
|
14
|
+
interface TableStyleGalleryEntry {
|
|
15
|
+
id: string | null;
|
|
16
|
+
label: string;
|
|
17
|
+
rows: readonly (readonly TableStyleThumbnailCell[])[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Galería de estilos de tabla de `document-editor` (el "Estilos de tabla" de la pestaña Diseño de Word): una
|
|
21
|
+
* miniatura por estilo del catálogo, dibujada con las mismas reglas con las que se aplica el estilo a la tabla. Se
|
|
22
|
+
* dibuja dentro de un `popover` del editor (de unos 340 px, con desplazamiento si hace falta) o, con `limit`, en una
|
|
23
|
+
* fila de miniaturas dentro de un grupo de la cinta. No se abre ni se cierra sola ni toca el editor: solo avisa el
|
|
24
|
+
* estilo elegido (`null` = "Sin estilo"). Ningún botón toma el foco con el ratón, así el editor conserva la selección;
|
|
25
|
+
* con el teclado se recorre con las flechas, Inicio y Fin.
|
|
26
|
+
*/
|
|
27
|
+
export declare class DocumentEditorTableStyleGallery {
|
|
28
|
+
private readonly host;
|
|
29
|
+
constructor(host: ElementRef<HTMLElement>);
|
|
30
|
+
/** Código del estilo aplicado a la tabla (`null`: sin estilo). Su miniatura se marca como activa. */
|
|
31
|
+
current: import("@angular/core").InputSignal<string | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Opciones de estilo de la tabla, con las que se dibujan las miniaturas (con "Fila de encabezado" se ve el
|
|
34
|
+
* encabezado, con "Filas con bandas" las bandas…). Una tabla sin estilo, o `null`, se dibuja con las opciones con
|
|
35
|
+
* las que se aplicaría un estilo nuevo (encabezado y filas con bandas).
|
|
36
|
+
*/
|
|
37
|
+
look: import("@angular/core").InputSignal<TableLook | null>;
|
|
38
|
+
/** Cuántas miniaturas de estilos se muestran (las primeras del catálogo); `null` las muestra todas. */
|
|
39
|
+
limit: import("@angular/core").InputSignal<number | null>;
|
|
40
|
+
/** Muestra la opción "Sin estilo" al principio (no cuenta para `limit`). */
|
|
41
|
+
showNone: import("@angular/core").InputSignal<boolean>;
|
|
42
|
+
/** Muestra el botón "Limpiar" debajo, que también quita el estilo (útil en la fila corta, sin "Sin estilo"). */
|
|
43
|
+
showClear: import("@angular/core").InputSignal<boolean>;
|
|
44
|
+
/** Código del estilo elegido, o `null` para quitar el estilo ("Sin estilo" y "Limpiar"). */
|
|
45
|
+
picked: import("@angular/core").OutputEmitterRef<string | null>;
|
|
46
|
+
/** Texto de la opción señalada con el ratón o el teclado; `null` cuando no hay ninguna. */
|
|
47
|
+
hovered: import("@angular/core").WritableSignal<string | null>;
|
|
48
|
+
/** Opción que tomó el foco con el teclado: es la que recibe Tab (tabulación itinerante). */
|
|
49
|
+
private readonly focusedIndex;
|
|
50
|
+
/** Con `limit` la galería va en fila, sin ancho fijo ni título. */
|
|
51
|
+
compact: import("@angular/core").Signal<boolean>;
|
|
52
|
+
private readonly previewLook;
|
|
53
|
+
entries: import("@angular/core").Signal<readonly TableStyleGalleryEntry[]>;
|
|
54
|
+
/** Título: la opción señalada o, si no hay, el estilo aplicado. */
|
|
55
|
+
caption: import("@angular/core").Signal<string>;
|
|
56
|
+
/** Opción que recibe el foco con Tab: la última que lo tuvo o, al entrar, la del estilo aplicado (o la primera). */
|
|
57
|
+
tabStop: import("@angular/core").Signal<number>;
|
|
58
|
+
pick(id: string | null): void;
|
|
59
|
+
hover(label: string): void;
|
|
60
|
+
clearHover(): void;
|
|
61
|
+
focusEntry(index: number, label: string): void;
|
|
62
|
+
/** Flechas, Inicio y Fin mueven el foco entre las miniaturas (arriba y abajo saltan una fila). */
|
|
63
|
+
onKeydown(event: KeyboardEvent): void;
|
|
64
|
+
}
|
|
65
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
|
2
|
+
import { DocumentTableOptions, DocumentTableWidthMode } from '../../format/document-editor-commands';
|
|
3
|
+
/** Lo que se inserta al aceptar el modal: tamaño de la tabla y su autoajuste. */
|
|
4
|
+
export interface DocumentTableRequest {
|
|
5
|
+
rows: number;
|
|
6
|
+
cols: number;
|
|
7
|
+
options: DocumentTableOptions;
|
|
8
|
+
}
|
|
9
|
+
export declare const TABLE_DIALOG_MAX_COLUMNS = 63;
|
|
10
|
+
export declare const TABLE_DIALOG_MAX_ROWS = 100;
|
|
11
|
+
/**
|
|
12
|
+
* Modal "Insertar tabla" de `document-editor`, como el de Word: número de columnas y de filas, cómo se ajusta el
|
|
13
|
+
* ancho (ancho de columna fijo, al contenido o a la ventana) y si la primera fila es de encabezado. Usa el elemento
|
|
14
|
+
* `<dialog>` del navegador (capa superior: queda por encima de la pantalla completa del editor y se cierra con Esc).
|
|
15
|
+
*/
|
|
16
|
+
export declare class DocumentEditorTableDialog {
|
|
17
|
+
confirmed: import("@angular/core").OutputEmitterRef<DocumentTableRequest>;
|
|
18
|
+
private readonly dialog;
|
|
19
|
+
private readonly dialogId;
|
|
20
|
+
readonly titleId: string;
|
|
21
|
+
readonly colsId: string;
|
|
22
|
+
readonly rowsId: string;
|
|
23
|
+
readonly widthId: string;
|
|
24
|
+
readonly widthModeName: string;
|
|
25
|
+
readonly maxColumns = 63;
|
|
26
|
+
readonly maxRows = 100;
|
|
27
|
+
readonly widthModes: readonly {
|
|
28
|
+
value: DocumentTableWidthMode;
|
|
29
|
+
label: string;
|
|
30
|
+
hint: string;
|
|
31
|
+
}[];
|
|
32
|
+
form: FormGroup<{
|
|
33
|
+
cols: FormControl<string>;
|
|
34
|
+
rows: FormControl<string>;
|
|
35
|
+
widthMode: FormControl<DocumentTableWidthMode>;
|
|
36
|
+
columnWidth: FormControl<string>;
|
|
37
|
+
headerRow: FormControl<boolean>;
|
|
38
|
+
remember: FormControl<boolean>;
|
|
39
|
+
}>;
|
|
40
|
+
/** Ancho útil de la hoja (cm): una tabla de ancho fijo no puede pasarse de él. */
|
|
41
|
+
private readonly maxWidthCm;
|
|
42
|
+
private readonly value;
|
|
43
|
+
private readonly parsed;
|
|
44
|
+
colsError: import("@angular/core").Signal<"Indique un número de columnas entre 1 y 63." | null>;
|
|
45
|
+
rowsError: import("@angular/core").Signal<"Indique un número de filas entre 1 y 100." | null>;
|
|
46
|
+
widthError: import("@angular/core").Signal<string | null>;
|
|
47
|
+
valid: import("@angular/core").Signal<boolean>;
|
|
48
|
+
fixedWidth: import("@angular/core").Signal<boolean>;
|
|
49
|
+
/** Abre el modal. `maxWidthCm` es el ancho útil de la hoja (sin márgenes). */
|
|
50
|
+
open(maxWidthCm: number): void;
|
|
51
|
+
close(): void;
|
|
52
|
+
onDialogClick(event: MouseEvent): void;
|
|
53
|
+
accept(event: Event): void;
|
|
54
|
+
}
|
package/lib/components/document-editor/tables/table-grid-menu/document-editor-table-grid-menu.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
/** Tamaño de tabla elegido en la cuadrícula. */
|
|
3
|
+
export interface DocumentTableSize {
|
|
4
|
+
rows: number;
|
|
5
|
+
cols: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Contenido del menú "Insertar tabla" de `document-editor`: cuadrícula al estilo de Word donde se marca,
|
|
9
|
+
* con el ratón o con las flechas, el rectángulo desde la primera celda hasta la señalada. Se dibuja dentro
|
|
10
|
+
* de un `popover` del editor: no se abre ni se cierra solo, solo avisa el tamaño elegido.
|
|
11
|
+
*/
|
|
12
|
+
export declare class DocumentEditorTableGridMenu {
|
|
13
|
+
private readonly host;
|
|
14
|
+
constructor(host: ElementRef<HTMLElement>);
|
|
15
|
+
picked: import("@angular/core").OutputEmitterRef<DocumentTableSize>;
|
|
16
|
+
/** "Insertar tabla…": abre el modal para elegir las columnas, las filas y el autoajuste a mano. */
|
|
17
|
+
customRequested: import("@angular/core").OutputEmitterRef<void>;
|
|
18
|
+
readonly rows: number[];
|
|
19
|
+
readonly cols: number[];
|
|
20
|
+
/** Celda señalada (con el ratón o el teclado); `null` cuando no hay ninguna. */
|
|
21
|
+
hovered: import("@angular/core").WritableSignal<DocumentTableSize | null>;
|
|
22
|
+
title: import("@angular/core").Signal<string>;
|
|
23
|
+
/** Celda que recibe el foco con Tab (tabulación itinerante: una sola celda de la cuadrícula es tabulable). */
|
|
24
|
+
focusCell: import("@angular/core").Signal<DocumentTableSize>;
|
|
25
|
+
hover(rows: number, cols: number): void;
|
|
26
|
+
clearHover(): void;
|
|
27
|
+
pick(rows: number, cols: number): void;
|
|
28
|
+
requestCustom(): void;
|
|
29
|
+
/** Flechas, Inicio y Fin mueven la celda señalada sin salir de la cuadrícula. */
|
|
30
|
+
onKeydown(event: KeyboardEvent): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { DocumentTemplateData } from './document-editor-template';
|
|
2
|
+
import { DocumentSchemaCategory } from './document-editor-schema';
|
|
3
|
+
/** Datos de ejemplo de las categorías que recibe: un valor por campo y tres ítems por listado. */
|
|
4
|
+
export declare function buildSampleData(categories: readonly DocumentSchemaCategory[] | null | undefined): DocumentTemplateData;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/** Campo de una categoría en la respuesta del backend. */
|
|
2
|
+
export interface DocumentSchemaFieldSource {
|
|
3
|
+
name: string;
|
|
4
|
+
/** `String`, `Number`, `Boolean`, `Date`, `Array` o `Mixed`. */
|
|
5
|
+
type?: string | null;
|
|
6
|
+
description?: string | null;
|
|
7
|
+
}
|
|
8
|
+
/** Categoría de la respuesta del backend; sus `fields` pueden ser campos o subcategorías (`vehicle_reception`). */
|
|
9
|
+
export interface DocumentSchemaCategorySource {
|
|
10
|
+
name: string;
|
|
11
|
+
description?: string | null;
|
|
12
|
+
fields: readonly (DocumentSchemaFieldSource | DocumentSchemaCategorySource)[];
|
|
13
|
+
}
|
|
14
|
+
/** Para qué sirve el dato: define el ejemplo que se muestra en la vista previa. */
|
|
15
|
+
export type DocumentFieldKind = 'text' | 'number' | 'date' | 'boolean' | 'list';
|
|
16
|
+
export interface DocumentSchemaField {
|
|
17
|
+
/** Nombre del campo tal como lo lee el backend (`client_business_name`): va en `data-node-value`. */
|
|
18
|
+
name: string;
|
|
19
|
+
/** Descripción en español (si el backend no la trae, el nombre del campo). */
|
|
20
|
+
label: string;
|
|
21
|
+
kind: DocumentFieldKind;
|
|
22
|
+
}
|
|
23
|
+
export interface DocumentSchemaCategory {
|
|
24
|
+
/** Nombre de la categoría (`client`; una subcategoría, `vehicle_reception.client`): va en `data-node-type`. */
|
|
25
|
+
name: string;
|
|
26
|
+
/** Descripción en español de la categoría (si el backend no la trae, su nombre). */
|
|
27
|
+
label: string;
|
|
28
|
+
/** Nombre corto para la etiqueta de la variable en el documento (`Cliente`, `Vehículo`…). */
|
|
29
|
+
shortLabel: string;
|
|
30
|
+
fields: DocumentSchemaField[];
|
|
31
|
+
}
|
|
32
|
+
/** Un campo identificado por lo que guarda el documento. */
|
|
33
|
+
export interface DocumentVariablesHiddenField {
|
|
34
|
+
/**
|
|
35
|
+
* Nombre de la categoría tal como va en `data-node-type` (`client`; una subcategoría, `vehicle_reception.client`).
|
|
36
|
+
* Exacto.
|
|
37
|
+
*/
|
|
38
|
+
category: string;
|
|
39
|
+
/** Nombre del campo tal como va en `data-node-value` (`client_business_name`). Exacto. */
|
|
40
|
+
field: string;
|
|
41
|
+
}
|
|
42
|
+
/** Reglas con las que el editor convierte las variables del backend en lo que ofrece. */
|
|
43
|
+
export interface DocumentVariablesConfig {
|
|
44
|
+
/** Los campos cuyo NOMBRE coincide no se ofrecen (imágenes: el documento no las admite). `null`: sin filtro. */
|
|
45
|
+
readonly imageFieldPattern: RegExp | null;
|
|
46
|
+
/** Campos que el backend entrega pero el editor no debe ofrecer, por nombre de categoría + nombre de campo. */
|
|
47
|
+
readonly hiddenFields: readonly DocumentVariablesHiddenField[];
|
|
48
|
+
/**
|
|
49
|
+
* Descripciones que cuentan como ausentes (se comparan sin espacios ni mayúsculas): se muestra el nombre. La vacía
|
|
50
|
+
* siempre cuenta.
|
|
51
|
+
*/
|
|
52
|
+
readonly missingDescriptions: readonly string[];
|
|
53
|
+
/**
|
|
54
|
+
* Palabras iniciales que se quitan de la descripción de una categoría para su nombre corto ("Datos del cliente" →
|
|
55
|
+
* "Cliente"). `null`: ninguna. Cambiarla cambia las etiquetas generadas.
|
|
56
|
+
*/
|
|
57
|
+
readonly leadingWordsPattern: RegExp | null;
|
|
58
|
+
/** Tipo del backend (en minúsculas) → para qué sirve el dato. Un tipo que no esté es `'text'`. */
|
|
59
|
+
readonly fieldKinds: Readonly<Record<string, DocumentFieldKind>>;
|
|
60
|
+
/** Un campo `'number'` cuyo último tramo del nombre coincide es una fecha. `null`: nunca. */
|
|
61
|
+
readonly dateFieldPattern: RegExp | null;
|
|
62
|
+
/**
|
|
63
|
+
* Cuántos campos (los primeros de la categoría) marca de inicio el asistente "Tabla de listado" y usa
|
|
64
|
+
* "Insertar tabla". Mínimo 1.
|
|
65
|
+
*/
|
|
66
|
+
readonly defaultListColumns: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Reglas de inicio. Están congeladas: el módulo se evalúa una sola vez por página y lo comparten todos los proyectos
|
|
70
|
+
* que usan el editor, así que ninguno debe poder cambiarlas para los demás (cada uno pasa las suyas en
|
|
71
|
+
* `[variablesConfig]`).
|
|
72
|
+
*/
|
|
73
|
+
export declare const DEFAULT_DOCUMENT_VARIABLES_CONFIG: DocumentVariablesConfig;
|
|
74
|
+
/**
|
|
75
|
+
* `{ ...DEFAULT, ...config }`: cada clave que se pasa reemplaza entera a la de inicio. Una clave en `undefined` cuenta
|
|
76
|
+
* como no pasada; `null` es un valor.
|
|
77
|
+
*/
|
|
78
|
+
export declare function resolveDocumentVariablesConfig(config?: Partial<DocumentVariablesConfig> | null): DocumentVariablesConfig;
|
|
79
|
+
/**
|
|
80
|
+
* Convierte la respuesta del backend en las categorías que ofrece el editor: aplana las subcategorías (la subcategoría
|
|
81
|
+
* `client` de `vehicle_reception` pasa a ser `vehicle_reception.client`), quita los campos de imagen, los que el
|
|
82
|
+
* consumidor oculta y las categorías que se quedan sin campos, y cambia las descripciones que faltan por el nombre. Las
|
|
83
|
+
* reglas son las de `config` sobre las de inicio (ver `resolveDocumentVariablesConfig`).
|
|
84
|
+
*/
|
|
85
|
+
export declare function toDocumentSchemaCategories(source: readonly DocumentSchemaCategorySource[] | null | undefined, config?: Partial<DocumentVariablesConfig> | null): DocumentSchemaCategory[];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DocumentListCollection } from '../nodes/document-editor-node-types';
|
|
2
|
+
export type DocumentTemplateValues = Record<string, string>;
|
|
3
|
+
export interface DocumentTemplateData {
|
|
4
|
+
/** Valores de los nodos fijos, por categoría y luego por campo (`values.client.client_business_name`). */
|
|
5
|
+
values: Partial<Record<string, DocumentTemplateValues>>;
|
|
6
|
+
/** Ítems de cada listado, por categoría (`lists.items[0].items_name`). */
|
|
7
|
+
lists: Partial<Record<DocumentListCollection, DocumentTemplateValues[]>>;
|
|
8
|
+
}
|
|
9
|
+
export declare function fillDocumentTemplate(html: string, data: DocumentTemplateData): string;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { IGeneral } from '../../../../domain/models/general.domain.model';
|
|
2
|
+
import { DocumentListCollection, DocumentVariable, DocumentVariableGroup, DocumentVariablesCatalog } from '../../nodes/document-editor-node-types';
|
|
3
|
+
/**
|
|
4
|
+
* Contenido del panel lateral de `document-editor` cuando no hay un nodo, una tabla de listado ni la búsqueda a la
|
|
5
|
+
* vista: las variables que se pueden poner en el documento, agrupadas por categoría tal como las entrega el backend.
|
|
6
|
+
* Una variable se inserta con un clic (en el cursor) o arrastrándola al documento. Cualquier categoría puede ser un
|
|
7
|
+
* listado: "Insertar tabla" arma una tabla con una fila repetible de esa categoría.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DocumentEditorVariablesPanel {
|
|
10
|
+
/** Categoría de la fila repetible donde está el cursor (`null` si no está en una). */
|
|
11
|
+
rowCollection: import("@angular/core").InputSignal<string | null>;
|
|
12
|
+
/** Catálogo del editor que contiene el panel. */
|
|
13
|
+
catalog: import("@angular/core").InputSignal<DocumentVariablesCatalog>;
|
|
14
|
+
/** Estado de la carga de las variables (las entrega el backend). */
|
|
15
|
+
status: import("@angular/core").InputSignal<IGeneral.STATUS>;
|
|
16
|
+
insert: import("@angular/core").OutputEmitterRef<DocumentVariable>;
|
|
17
|
+
insertTable: import("@angular/core").OutputEmitterRef<string>;
|
|
18
|
+
chooseColumns: import("@angular/core").OutputEmitterRef<string>;
|
|
19
|
+
/** Volver a pedir las variables al backend (la carga falló). */
|
|
20
|
+
retry: import("@angular/core").OutputEmitterRef<void>;
|
|
21
|
+
readonly searchId: string;
|
|
22
|
+
readonly skeletonRows: readonly null[];
|
|
23
|
+
query: import("@angular/core").WritableSignal<string>;
|
|
24
|
+
/** Grupo desplegado (uno a la vez; al buscar se despliegan todos los que tienen resultados). `undefined`: el primero. */
|
|
25
|
+
openGroup: import("@angular/core").WritableSignal<string | null | undefined>;
|
|
26
|
+
searching: import("@angular/core").Signal<boolean>;
|
|
27
|
+
loading: import("@angular/core").Signal<boolean>;
|
|
28
|
+
loadFailed: import("@angular/core").Signal<boolean>;
|
|
29
|
+
groups: import("@angular/core").Signal<DocumentVariableGroup[]>;
|
|
30
|
+
/** El backend respondió pero no entregó ninguna variable. */
|
|
31
|
+
noVariables: import("@angular/core").Signal<boolean>;
|
|
32
|
+
noResults: import("@angular/core").Signal<boolean>;
|
|
33
|
+
onSearch(event: Event): void;
|
|
34
|
+
private currentOpen;
|
|
35
|
+
toggleGroup(key: string): void;
|
|
36
|
+
isOpen(key: string): boolean;
|
|
37
|
+
groupLabel(collection: DocumentListCollection): string;
|
|
38
|
+
onDragStart(event: DragEvent, variable: DocumentVariable): void;
|
|
39
|
+
private filter;
|
|
40
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WordPageGeometry } from './document-editor-word-page';
|
|
2
|
+
import { WordStyles } from './document-editor-word-styles';
|
|
3
|
+
/**
|
|
4
|
+
* Escribe el formato de la parte en el XML. Devuelve `null` si el XML no se puede leer. Con la hoja del
|
|
5
|
+
* documento (solo el cuerpo la tiene) también coloca sus tablas flotantes; sin ella, quedan como tablas normales.
|
|
6
|
+
*/
|
|
7
|
+
export declare function flattenWordXml(xml: string, styles: WordStyles, page?: WordPageGeometry | null): string | null;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { WordPageGeometry } from './document-editor-word-page';
|
|
2
|
+
import { Context } from './document-editor-word-styles';
|
|
3
|
+
/** Resultado de analizar una tabla con `w:tblpPr`. */
|
|
4
|
+
export interface FloatingTablePlan {
|
|
5
|
+
table: Element;
|
|
6
|
+
/** Declaraciones CSS del nivel de la tabla: `float` y `margin` (o los márgenes automáticos si va centrada). */
|
|
7
|
+
css: string[];
|
|
8
|
+
/** ¿Flota? Una tabla centrada no: se queda donde está, como bloque. */
|
|
9
|
+
floating: boolean;
|
|
10
|
+
/** Bloque del cuerpo delante del que se coloca la tabla; `null`, al final del cuerpo. */
|
|
11
|
+
before: Element | null;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Analiza las tablas del cuerpo que traen `w:tblpPr` y calcula su CSS y el bloque delante del que van. No
|
|
15
|
+
* modifica el XML: la colocación la hace `placeFloatingTables`, cuando el resto del formato ya se calculó.
|
|
16
|
+
*/
|
|
17
|
+
export declare function planFloatingTables(document: Document, context: Context, page: WordPageGeometry): FloatingTablePlan[];
|
|
18
|
+
/**
|
|
19
|
+
* Coloca las tablas flotantes delante de su bloque, en el orden del plan (el de los bloques y, en un mismo bloque,
|
|
20
|
+
* de fuera adentro en cada lado). Todas se sacan primero del cuerpo y se vuelven a meter, así las que caen en el
|
|
21
|
+
* mismo bloque lo conservan. Si el bloque empieza con un salto de página, la tabla va después de él.
|
|
22
|
+
*/
|
|
23
|
+
export declare function placeFloatingTables(plans: readonly FloatingTablePlan[]): void;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Datos de una marca: el estilo CSS y, en las de celda, el ancho de sus columnas y el estilo de la tabla. */
|
|
2
|
+
export interface WordMarkPayload {
|
|
3
|
+
st?: string;
|
|
4
|
+
/** Solo celdas: ancho (px) de cada columna que ocupa. */
|
|
5
|
+
w?: number[];
|
|
6
|
+
/** Solo la primera celda de una tabla: estilo de la tabla. */
|
|
7
|
+
t?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const runMarkStart: (payload: WordMarkPayload) => string;
|
|
10
|
+
export declare const runMarkEnd: () => string;
|
|
11
|
+
export declare const paragraphMark: (payload: WordMarkPayload) => string;
|
|
12
|
+
export declare const cellMark: (payload: WordMarkPayload) => string;
|
|
13
|
+
export declare const fieldMark: (field: "page" | "pages") => string;
|
|
14
|
+
export declare function replaceSimplePageFields(xml: string): string;
|
|
15
|
+
export declare const stripMarks: (text: string) => string;
|
|
16
|
+
export declare function applyWordFormatting(html: string): string;
|
|
17
|
+
export declare function hoistPageBreaks(html: string): string;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Imagen tal como la entrega `mammoth` (solo lo que se usa). */
|
|
2
|
+
export interface WordImage {
|
|
3
|
+
contentType: string;
|
|
4
|
+
/** Texto alternativo del dibujo; incluye la marca de tamaño que agrega `embedImageSizes`. */
|
|
5
|
+
altText?: string | null;
|
|
6
|
+
readAsArrayBuffer(): Promise<ArrayBuffer>;
|
|
7
|
+
readAsBase64String(): Promise<string>;
|
|
8
|
+
}
|
|
9
|
+
/** Atributos del `<img>` que se genera; `src` vacío con `data-dx-skip` marca una imagen omitida. */
|
|
10
|
+
export interface WordImageAttributes {
|
|
11
|
+
src: string;
|
|
12
|
+
[attribute: string]: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const SKIPPED_IMAGE_MARKER = "data-dx-skip";
|
|
15
|
+
export interface WordImageConverter {
|
|
16
|
+
convert: (image: WordImage) => Promise<WordImageAttributes>;
|
|
17
|
+
/** Cuántas imágenes se omitieron hasta ahora. */
|
|
18
|
+
skipped: () => number;
|
|
19
|
+
}
|
|
20
|
+
export declare function embedImageSizes(documentXml: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* @param maxDisplayWidth ancho máximo (px) con el que se dibuja una imagen: el del área de texto de la hoja.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createWordImageConverter(maxDisplayWidth: number): WordImageConverter;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DocumentDefaults } from '../format/document-editor-defaults';
|
|
2
|
+
import { WordImportPage } from './document-editor-word-page';
|
|
3
|
+
export declare const WORD_IMPORT_ACCEPT = ".docx,.dotx,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.openxmlformats-officedocument.wordprocessingml.template";
|
|
4
|
+
/** Error esperado de la importación: su mensaje ya está listo para mostrárselo al usuario. */
|
|
5
|
+
export declare class WordImportError extends Error {
|
|
6
|
+
constructor(message: string, options?: {
|
|
7
|
+
cause?: unknown;
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
export interface WordImportResult {
|
|
11
|
+
/** HTML del documento, listo para cargarlo en el editor (con su encabezado y pie, si los trae). */
|
|
12
|
+
html: string;
|
|
13
|
+
/** Hoja del documento (tamaño, orientación, márgenes), o `null` si no se pudo leer. */
|
|
14
|
+
page: WordImportPage | null;
|
|
15
|
+
/** Formato base del documento: el de su estilo `Normal`. */
|
|
16
|
+
defaults: DocumentDefaults;
|
|
17
|
+
/** Avisos para el usuario: cosas que el documento traía y no se importaron. */
|
|
18
|
+
warnings: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare function importWordDocument(file: File): Promise<WordImportResult>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type JSZip from 'jszip';
|
|
2
|
+
import { DocumentPageMargins, DocumentPageOrientation, DocumentPageSize } from '../page/document-editor-pages';
|
|
3
|
+
/** Hoja de un documento de Word, en milímetros; cada dato puede faltar. */
|
|
4
|
+
export interface WordSection {
|
|
5
|
+
widthMm: number | null;
|
|
6
|
+
heightMm: number | null;
|
|
7
|
+
margins: DocumentPageMargins | null;
|
|
8
|
+
}
|
|
9
|
+
/** Lo que se aplica al editor: `null` en un dato que el documento no trae. */
|
|
10
|
+
export interface WordImportPage {
|
|
11
|
+
size: DocumentPageSize | null;
|
|
12
|
+
orientation: DocumentPageOrientation | null;
|
|
13
|
+
margins: DocumentPageMargins | null;
|
|
14
|
+
/** El documento trae un tamaño de hoja que el editor no tiene (medidas en mm), para avisar al usuario. */
|
|
15
|
+
unsupportedSize: {
|
|
16
|
+
widthMm: number;
|
|
17
|
+
heightMm: number;
|
|
18
|
+
} | null;
|
|
19
|
+
}
|
|
20
|
+
export declare function readMainDocumentXml(zip: JSZip): Promise<{
|
|
21
|
+
path: string;
|
|
22
|
+
xml: string;
|
|
23
|
+
} | null>;
|
|
24
|
+
export declare function readWordSection(documentXml: string): WordSection | null;
|
|
25
|
+
export declare function toWordImportPage(section: WordSection | null): WordImportPage | null;
|
|
26
|
+
export declare function contentWidthMm(section: WordSection | null): number | null;
|
|
27
|
+
/** Medidas de la hoja del documento, en puntos, que necesita la colocación de las tablas flotantes. */
|
|
28
|
+
export interface WordPageGeometry {
|
|
29
|
+
/** Ancho del área de texto (la hoja menos sus márgenes izquierdo y derecho). */
|
|
30
|
+
contentWidth: number;
|
|
31
|
+
/** Margen izquierdo de la hoja. */
|
|
32
|
+
leftMargin: number;
|
|
33
|
+
/** Margen superior de la hoja. */
|
|
34
|
+
topMargin: number;
|
|
35
|
+
/** Alto del área de texto de una hoja (la hoja menos sus márgenes superior e inferior); `null` si no se sabe. */
|
|
36
|
+
bodyHeight: number | null;
|
|
37
|
+
}
|
|
38
|
+
export declare function readWordPageGeometry(documentXml: string): WordPageGeometry | null;
|
|
39
|
+
export interface WordRelationship {
|
|
40
|
+
type: string;
|
|
41
|
+
target: string;
|
|
42
|
+
}
|
|
43
|
+
export declare function readRelationships(zip: JSZip, ownerPath: string): Promise<{
|
|
44
|
+
map: Map<string, WordRelationship>;
|
|
45
|
+
xml: string | null;
|
|
46
|
+
}>;
|
|
47
|
+
export declare function readRelatedPart(zip: JSZip, relationships: Map<string, WordRelationship>, typeSuffix: string, fallbackPath: string): Promise<string | null>;
|
|
48
|
+
export interface WordHeaderFooter {
|
|
49
|
+
/** Ruta del encabezado y del pie predeterminados de la sección (si los tiene). */
|
|
50
|
+
headerPath: string | null;
|
|
51
|
+
footerPath: string | null;
|
|
52
|
+
/** La sección usa un encabezado o pie distinto en la primera página o en las pares (no se importan). */
|
|
53
|
+
hasVariants: boolean;
|
|
54
|
+
/** Cantidad de secciones del documento (de la hoja solo se importa la de la última). */
|
|
55
|
+
sectionCount: number;
|
|
56
|
+
}
|
|
57
|
+
export declare function findHeaderFooter(documentXml: string, relationships: Map<string, WordRelationship>): WordHeaderFooter;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { DocumentDefaults } from '../format/document-editor-defaults';
|
|
2
|
+
export declare const W_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
|
|
3
|
+
/** Un borde: `null` es "sin borde" explícito; `undefined`, que no se indicó (se hereda). */
|
|
4
|
+
export interface WordBorder {
|
|
5
|
+
width: number;
|
|
6
|
+
style: string;
|
|
7
|
+
color: string;
|
|
8
|
+
}
|
|
9
|
+
export type Border = WordBorder | null;
|
|
10
|
+
export interface Sides<T> {
|
|
11
|
+
top?: T;
|
|
12
|
+
right?: T;
|
|
13
|
+
bottom?: T;
|
|
14
|
+
left?: T;
|
|
15
|
+
}
|
|
16
|
+
export interface Borders extends Sides<Border> {
|
|
17
|
+
insideH?: Border;
|
|
18
|
+
insideV?: Border;
|
|
19
|
+
}
|
|
20
|
+
export interface RunProps {
|
|
21
|
+
font?: string;
|
|
22
|
+
/** Puntos. */
|
|
23
|
+
size?: number;
|
|
24
|
+
/** `null`: color automático (anula el color heredado de un estilo). */
|
|
25
|
+
color?: string | null;
|
|
26
|
+
/** `null`: sin resaltado (anula el heredado). */
|
|
27
|
+
highlight?: string | null;
|
|
28
|
+
bold?: boolean;
|
|
29
|
+
italic?: boolean;
|
|
30
|
+
underline?: boolean;
|
|
31
|
+
strike?: boolean;
|
|
32
|
+
caps?: boolean;
|
|
33
|
+
smallCaps?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export type LineRule = 'auto' | 'exact' | 'atLeast';
|
|
36
|
+
/** Interlineado: múltiplo del sencillo (`auto`) o puntos (`exact` y `atLeast`). Se guarda entero para que un nivel posterior lo reemplace. */
|
|
37
|
+
export interface LineSpacing {
|
|
38
|
+
rule: LineRule;
|
|
39
|
+
value: number;
|
|
40
|
+
}
|
|
41
|
+
export interface ParaProps {
|
|
42
|
+
align?: string;
|
|
43
|
+
/** Puntos. */
|
|
44
|
+
before?: number;
|
|
45
|
+
after?: number;
|
|
46
|
+
lineSpacing?: LineSpacing;
|
|
47
|
+
left?: number;
|
|
48
|
+
right?: number;
|
|
49
|
+
/** Sangría de primera línea (negativa si es francesa). */
|
|
50
|
+
firstLine?: number;
|
|
51
|
+
pageBreakBefore?: boolean;
|
|
52
|
+
/** "No agregar espacio entre párrafos del mismo estilo". */
|
|
53
|
+
contextual?: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface TableProps {
|
|
56
|
+
borders?: Borders;
|
|
57
|
+
/** Márgenes internos de las celdas, en puntos. */
|
|
58
|
+
cellMargins?: Sides<number>;
|
|
59
|
+
align?: string;
|
|
60
|
+
/** Sangría de la tabla, en puntos. */
|
|
61
|
+
indent?: number;
|
|
62
|
+
}
|
|
63
|
+
/** Formato de una parte de la tabla (`w:tblStylePr`): la primera fila, las bandas, la primera columna… */
|
|
64
|
+
export interface TableCondition {
|
|
65
|
+
run: RunProps;
|
|
66
|
+
para: ParaProps;
|
|
67
|
+
fill?: string;
|
|
68
|
+
borders?: Borders;
|
|
69
|
+
vAlign?: string;
|
|
70
|
+
}
|
|
71
|
+
interface StyleDef {
|
|
72
|
+
id: string;
|
|
73
|
+
type: string;
|
|
74
|
+
name: string | null;
|
|
75
|
+
basedOn: string | null;
|
|
76
|
+
run: RunProps;
|
|
77
|
+
para: ParaProps;
|
|
78
|
+
table: TableProps;
|
|
79
|
+
/** Solo estilos de tabla: formato por parte de la tabla, según el tipo (`firstRow`, `band1Horz`…). */
|
|
80
|
+
conditions: Map<string, TableCondition>;
|
|
81
|
+
rowBand: number | null;
|
|
82
|
+
colBand: number | null;
|
|
83
|
+
}
|
|
84
|
+
export interface WordStyles {
|
|
85
|
+
defaultRun: RunProps;
|
|
86
|
+
defaultPara: ParaProps;
|
|
87
|
+
styles: Map<string, StyleDef>;
|
|
88
|
+
defaultParagraphStyle: string | null;
|
|
89
|
+
defaultTableStyle: string | null;
|
|
90
|
+
themeFonts: {
|
|
91
|
+
major: string | null;
|
|
92
|
+
minor: string | null;
|
|
93
|
+
};
|
|
94
|
+
/** Documento de una versión anterior a Word 2013: la sangría de las tablas se mide hasta el texto. */
|
|
95
|
+
legacyTableIndent: boolean;
|
|
96
|
+
}
|
|
97
|
+
/** Dónde está un párrafo dentro de una tabla: su estilo y las partes de la tabla que afectan a su celda. */
|
|
98
|
+
export interface TableScope {
|
|
99
|
+
style: string | null;
|
|
100
|
+
conditions: readonly string[];
|
|
101
|
+
}
|
|
102
|
+
export declare function childElements(element: Element, name: string): Element[];
|
|
103
|
+
export declare function firstChild(element: Element | null | undefined, name: string): Element | null;
|
|
104
|
+
export declare function structuralChildren(parent: Element, name: string): Element[];
|
|
105
|
+
export declare function attr(element: Element | null | undefined, name: string): string | null;
|
|
106
|
+
export declare const isOn: (value: string | null) => boolean;
|
|
107
|
+
export declare function readRunProps(rPr: Element | null, theme: WordStyles['themeFonts']): RunProps;
|
|
108
|
+
export declare function readParaProps(pPr: Element | null): ParaProps;
|
|
109
|
+
export declare function readBorders(element: Element | null): Borders | undefined;
|
|
110
|
+
export declare function readMargins(element: Element | null): Sides<number> | undefined;
|
|
111
|
+
export declare function readTableProps(tblPr: Element | null): TableProps;
|
|
112
|
+
export declare function merge<T extends object>(...items: Array<T | undefined>): T;
|
|
113
|
+
export declare function mergeBorders(...items: Array<Borders | undefined>): Borders;
|
|
114
|
+
export declare function mergeTable(...items: Array<TableProps | undefined>): TableProps;
|
|
115
|
+
export declare function parseXml(xml: string): Document | null;
|
|
116
|
+
export declare function parseWordStyles(stylesXml: string | null, themeXml: string | null, settingsXml?: string | null): WordStyles;
|
|
117
|
+
export interface Context {
|
|
118
|
+
styles: WordStyles;
|
|
119
|
+
base: {
|
|
120
|
+
run: RunProps;
|
|
121
|
+
para: ParaProps;
|
|
122
|
+
};
|
|
123
|
+
cache: Map<string, unknown>;
|
|
124
|
+
}
|
|
125
|
+
export declare function stylePara(context: Context, paragraphStyle: string | null, table: TableScope | null): ParaProps;
|
|
126
|
+
export declare function styleRun(context: Context, paragraphStyle: string | null, characterStyle: string | null, table: TableScope | null): RunProps;
|
|
127
|
+
/** Formato de una tabla que viene de sus estilos: el del estilo (o el de tabla por defecto) y sus bases. */
|
|
128
|
+
export declare function tableStyleProps(context: Context, tableStyle: string | null): TableProps;
|
|
129
|
+
/** Formato de las partes de una tabla (`firstRow`, `band1Horz`…) que afectan a una celda. */
|
|
130
|
+
export declare function tableConditionFor(context: Context, tableStyle: string | null, conditions: readonly string[]): TableCondition;
|
|
131
|
+
/** Tamaño de las bandas (en filas y en columnas) de un estilo de tabla. */
|
|
132
|
+
export declare function tableBandSizes(styles: WordStyles, tableStyle: string | null): {
|
|
133
|
+
rows: number;
|
|
134
|
+
columns: number;
|
|
135
|
+
};
|
|
136
|
+
/** Partes de la tabla ordenadas de menor a mayor prioridad (para aplicarlas en ese orden). */
|
|
137
|
+
export declare const sortConditions: (kinds: readonly string[]) => string[];
|
|
138
|
+
export declare function isHeadingStyle(styles: WordStyles, paragraphStyle: string | null): boolean;
|
|
139
|
+
export declare function toFontStack(name: string): string | null;
|
|
140
|
+
/** `line-height` CSS (sin unidad) de un interlineado de Word para texto de `size` puntos. */
|
|
141
|
+
export declare function lineRatio(spacing: LineSpacing | undefined, size: number): number;
|
|
142
|
+
export declare function readWordDefaults(styles: WordStyles): DocumentDefaults;
|
|
143
|
+
export {};
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -621,3 +621,6 @@ export * from './lib/components/brand-vehicle/add/add';
|
|
|
621
621
|
// #region charges for order vehicle domain repository
|
|
622
622
|
export * from './lib/domain/repositories/charges-for-order-vehicle.domain.repository';
|
|
623
623
|
export * from './lib/domain/models/charges-for-order-vehicle.domain.model';
|
|
624
|
+
|
|
625
|
+
//#region document editor
|
|
626
|
+
export * from './lib/components/document-editor/public-api';
|