@zentto/report-core 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../src/engine/expression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type { Unit, PageSize, Margins, Position, ElementStyle, LineStyle, DataSourceDef, FieldDef, ElementType, BaseElement, TextElement, FieldElement, ImageElement, LineElement, RectElement, BarcodeElement, PageNumberElement, TotalPagesElement, CurrentDateElement, ReportElement, BandType, Band, SortDef, GroupDef, AggregateFunction, ReportLayout, ParameterDef, DataSet, RenderPage, RenderResult, RenderOptions, } from './types.js';
2
+ export { reportLayoutSchema, validateLayout, safeValidateLayout, } from './schema/report-schema.js';
3
+ export { processLayout, mmToPx, inToPx, ptToPx, toPx, } from './engine/band-engine.js';
4
+ export type { RenderedBand, PageContent, } from './engine/band-engine.js';
5
+ export { resolveField, resolveTemplate, computeAggregate, formatValue, resolveElementValue, evaluateSimpleExpression, } from './engine/data-binding.js';
6
+ export type { BindingContext, } from './engine/data-binding.js';
7
+ export { evaluateExpression, } from './engine/expression.js';
8
+ export { renderToHtml, renderToFullHtml, } from './render/html-renderer.js';
9
+ export { layoutToJson, jsonToLayout, safeJsonToLayout, downloadLayoutJson, createBlankLayout, } from './serialization/json.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EACL,aAAa,EACb,MAAM,EACN,MAAM,EACN,MAAM,EACN,IAAI,GACL,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,cAAc,GACf,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EACL,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EACL,YAAY,EACZ,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ // @zentto/report-core — Pure logic engine, zero UI dependencies.
2
+ // ─── Schema Validation ─────────────────────────────────────────────
3
+ export { reportLayoutSchema, validateLayout, safeValidateLayout, } from './schema/report-schema.js';
4
+ // ─── Band Engine ────────────────────────────────────────────────────
5
+ export { processLayout, mmToPx, inToPx, ptToPx, toPx, } from './engine/band-engine.js';
6
+ // ─── Data Binding ───────────────────────────────────────────────────
7
+ export { resolveField, resolveTemplate, computeAggregate, formatValue, resolveElementValue, evaluateSimpleExpression, } from './engine/data-binding.js';
8
+ // ─── Expression Engine ──────────────────────────────────────────────
9
+ export { evaluateExpression, } from './engine/expression.js';
10
+ // ─── HTML Renderer ──────────────────────────────────────────────────
11
+ export { renderToHtml, renderToFullHtml, } from './render/html-renderer.js';
12
+ // ─── Serialization ──────────────────────────────────────────────────
13
+ export { layoutToJson, jsonToLayout, safeJsonToLayout, downloadLayoutJson, createBlankLayout, } from './serialization/json.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAsCjE,sEAAsE;AAEtE,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,uEAAuE;AAEvE,OAAO,EACL,aAAa,EACb,MAAM,EACN,MAAM,EACN,MAAM,EACN,IAAI,GACL,MAAM,yBAAyB,CAAC;AAOjC,uEAAuE;AAEvE,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAMlC,uEAAuE;AAEvE,OAAO,EACL,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,uEAAuE;AAEvE,OAAO,EACL,YAAY,EACZ,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,uEAAuE;AAEvE,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ReportLayout, DataSet, RenderResult, RenderOptions } from '../types.js';
2
+ /** Render a full report to paginated HTML */
3
+ export declare function renderToHtml(layout: ReportLayout, dataSets: DataSet, options?: RenderOptions): RenderResult;
4
+ /** Render all pages into a single HTML document */
5
+ export declare function renderToFullHtml(layout: ReportLayout, dataSets: DataSet, options?: RenderOptions): string;
6
+ //# sourceMappingURL=html-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-renderer.d.ts","sourceRoot":"","sources":["../../src/render/html-renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,YAAY,EAEZ,aAAa,EAId,MAAM,aAAa,CAAC;AAIrB,6CAA6C;AAC7C,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,aAAa,GACtB,YAAY,CAoBd;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAuDR"}
@@ -0,0 +1,228 @@
1
+ // @zentto/report-core — HTML Renderer
2
+ // Converts a ReportLayout + DataSet into paginated HTML
3
+ import { processLayout, toPx } from '../engine/band-engine.js';
4
+ import { resolveElementValue } from '../engine/data-binding.js';
5
+ /** Render a full report to paginated HTML */
6
+ export function renderToHtml(layout, dataSets, options) {
7
+ const pageContents = processLayout(layout, dataSets, options);
8
+ const totalPages = pageContents.length;
9
+ const prefix = options?.cssPrefix || 'zr';
10
+ // Update totalPages in all contexts
11
+ const pages = pageContents.map((pc) => {
12
+ const html = renderPage(layout, pc, totalPages, prefix);
13
+ return {
14
+ pageNumber: pc.pageNumber,
15
+ totalPages,
16
+ html,
17
+ };
18
+ });
19
+ return {
20
+ pages,
21
+ totalPages,
22
+ generatedAt: new Date().toISOString(),
23
+ };
24
+ }
25
+ /** Render all pages into a single HTML document */
26
+ export function renderToFullHtml(layout, dataSets, options) {
27
+ const result = renderToHtml(layout, dataSets, options);
28
+ const prefix = options?.cssPrefix || 'zr';
29
+ const unit = layout.pageSize.unit;
30
+ const pageW = toPx(layout.pageSize.width, unit);
31
+ const pageH = toPx(layout.pageSize.height, unit);
32
+ const pagesHtml = result.pages.map(p => p.html).join('\n');
33
+ return `<!DOCTYPE html>
34
+ <html lang="es">
35
+ <head>
36
+ <meta charset="UTF-8">
37
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
38
+ <title>${escapeHtml(layout.name)}</title>
39
+ <style>
40
+ * { margin: 0; padding: 0; box-sizing: border-box; }
41
+ body { background: #e0e0e0; font-family: ${layout.defaultStyle?.fontFamily || 'Arial, sans-serif'}; }
42
+ .${prefix}-page {
43
+ width: ${pageW}px;
44
+ min-height: ${pageH}px;
45
+ background: white;
46
+ margin: 20px auto;
47
+ position: relative;
48
+ overflow: hidden;
49
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
50
+ page-break-after: always;
51
+ }
52
+ .${prefix}-band {
53
+ position: absolute;
54
+ left: 0;
55
+ right: 0;
56
+ overflow: hidden;
57
+ }
58
+ .${prefix}-element {
59
+ position: absolute;
60
+ overflow: hidden;
61
+ }
62
+ .${prefix}-line {
63
+ position: absolute;
64
+ }
65
+ @media print {
66
+ body { background: white; }
67
+ .${prefix}-page {
68
+ margin: 0;
69
+ box-shadow: none;
70
+ page-break-after: always;
71
+ }
72
+ }
73
+ </style>
74
+ </head>
75
+ <body>
76
+ ${pagesHtml}
77
+ </body>
78
+ </html>`;
79
+ }
80
+ function renderPage(layout, page, totalPages, prefix) {
81
+ const unit = layout.pageSize.unit;
82
+ const pageW = toPx(layout.pageSize.width, unit);
83
+ const pageH = toPx(layout.pageSize.height, unit);
84
+ const marginLeft = toPx(layout.margins.left, unit);
85
+ const marginTop = toPx(layout.margins.top, unit);
86
+ let html = `<div class="${prefix}-page" style="width:${pageW}px;min-height:${pageH}px;padding:${marginTop}px ${toPx(layout.margins.right, unit)}px ${toPx(layout.margins.bottom, unit)}px ${marginLeft}px;">`;
87
+ for (const rb of page.bands) {
88
+ const ctx = {
89
+ ...rb.context,
90
+ pageNumber: page.pageNumber,
91
+ totalPages,
92
+ };
93
+ if (rb.rowData)
94
+ ctx.currentRow = rb.rowData;
95
+ if (rb.rowIndex !== undefined)
96
+ ctx.currentIndex = rb.rowIndex;
97
+ if (rb.groupRows)
98
+ ctx.groupRows = rb.groupRows;
99
+ html += renderBand(rb.band, rb.y, ctx, layout, prefix);
100
+ }
101
+ html += '</div>';
102
+ return html;
103
+ }
104
+ function renderBand(band, y, ctx, layout, prefix) {
105
+ const unit = layout.pageSize.unit;
106
+ const bandHeight = toPx(band.height, unit);
107
+ const bgStyle = band.backgroundColor ? `background-color:${band.backgroundColor};` : '';
108
+ let html = `<div class="${prefix}-band ${prefix}-band-${band.type}" data-band-id="${band.id}" style="top:${y}px;height:${bandHeight}px;${bgStyle}">`;
109
+ for (const element of band.elements) {
110
+ if (element.visible === false)
111
+ continue;
112
+ // Check printOn condition
113
+ if (element.printOn && element.printOn !== 'all') {
114
+ const pn = ctx.pageNumber || 1;
115
+ const tp = ctx.totalPages || 1;
116
+ if (element.printOn === 'first' && pn !== 1)
117
+ continue;
118
+ if (element.printOn === 'last' && pn !== tp)
119
+ continue;
120
+ if (element.printOn === 'odd' && pn % 2 === 0)
121
+ continue;
122
+ if (element.printOn === 'even' && pn % 2 !== 0)
123
+ continue;
124
+ }
125
+ html += renderElement(element, ctx, layout, prefix);
126
+ }
127
+ html += '</div>';
128
+ return html;
129
+ }
130
+ function renderElement(element, ctx, layout, prefix) {
131
+ const unit = layout.pageSize.unit;
132
+ const x = toPx(element.x, unit);
133
+ const y = toPx(element.y, unit);
134
+ const w = toPx(element.width, unit);
135
+ const h = toPx(element.height, unit);
136
+ // Merge default style + element style
137
+ const style = mergeStyles(layout.defaultStyle, element.style);
138
+ const cssStyle = styleToCss(style);
139
+ switch (element.type) {
140
+ case 'line': {
141
+ const x2 = toPx(element.x2, unit);
142
+ const y2 = toPx(element.y2, unit);
143
+ const ls = element.lineStyle || {};
144
+ const color = ls.color || '#000';
145
+ const width = ls.width || 1;
146
+ const lineLen = Math.sqrt((x2 - x) ** 2 + (y2 - y) ** 2);
147
+ const angle = Math.atan2(y2 - y, x2 - x) * (180 / Math.PI);
148
+ return `<div class="${prefix}-line" style="left:${x}px;top:${y}px;width:${lineLen}px;height:0;border-top:${width}px ${ls.style || 'solid'} ${color};transform-origin:0 0;transform:rotate(${angle}deg);"></div>`;
149
+ }
150
+ case 'rect': {
151
+ const ls = element.lineStyle || {};
152
+ const border = ls.width ? `border:${ls.width}px ${ls.style || 'solid'} ${ls.color || '#000'};` : '';
153
+ const fill = element.fill ? `background-color:${element.fill};` : '';
154
+ const radius = element.cornerRadius ? `border-radius:${element.cornerRadius}px;` : '';
155
+ return `<div class="${prefix}-element ${prefix}-rect" style="left:${x}px;top:${y}px;width:${w}px;height:${h}px;${border}${fill}${radius}"></div>`;
156
+ }
157
+ case 'image': {
158
+ const src = resolveElementValue(element, ctx);
159
+ const fit = element.fit || 'contain';
160
+ return `<div class="${prefix}-element ${prefix}-image" style="left:${x}px;top:${y}px;width:${w}px;height:${h}px;"><img src="${escapeHtml(src)}" style="width:100%;height:100%;object-fit:${fit};" /></div>`;
161
+ }
162
+ case 'barcode': {
163
+ const value = resolveElementValue(element, ctx);
164
+ // Render as text placeholder — actual barcode rendering happens in the viewer/designer component
165
+ return `<div class="${prefix}-element ${prefix}-barcode" data-barcode-type="${element.barcodeType}" data-barcode-value="${escapeHtml(value)}" style="left:${x}px;top:${y}px;width:${w}px;height:${h}px;display:flex;align-items:center;justify-content:center;border:1px dashed #ccc;font-size:10px;color:#666;">[${element.barcodeType}: ${escapeHtml(value)}]</div>`;
166
+ }
167
+ default: {
168
+ // Text, field, pageNumber, totalPages, currentDate
169
+ const value = resolveElementValue(element, ctx);
170
+ return `<div class="${prefix}-element ${prefix}-${element.type}" style="left:${x}px;top:${y}px;width:${w}px;height:${h}px;${cssStyle}">${escapeHtml(value)}</div>`;
171
+ }
172
+ }
173
+ }
174
+ function mergeStyles(base, override) {
175
+ if (!base)
176
+ return override || {};
177
+ if (!override)
178
+ return base;
179
+ return { ...base, ...override };
180
+ }
181
+ function styleToCss(style) {
182
+ const parts = [];
183
+ if (style.fontFamily)
184
+ parts.push(`font-family:${style.fontFamily}`);
185
+ if (style.fontSize)
186
+ parts.push(`font-size:${style.fontSize}px`);
187
+ if (style.fontWeight)
188
+ parts.push(`font-weight:${style.fontWeight}`);
189
+ if (style.fontStyle)
190
+ parts.push(`font-style:${style.fontStyle}`);
191
+ if (style.textDecoration)
192
+ parts.push(`text-decoration:${style.textDecoration}`);
193
+ if (style.textAlign)
194
+ parts.push(`text-align:${style.textAlign}`);
195
+ if (style.verticalAlign)
196
+ parts.push(`vertical-align:${style.verticalAlign}`);
197
+ if (style.color)
198
+ parts.push(`color:${style.color}`);
199
+ if (style.backgroundColor)
200
+ parts.push(`background-color:${style.backgroundColor}`);
201
+ if (style.borderTop)
202
+ parts.push(`border-top:${style.borderTop}`);
203
+ if (style.borderRight)
204
+ parts.push(`border-right:${style.borderRight}`);
205
+ if (style.borderBottom)
206
+ parts.push(`border-bottom:${style.borderBottom}`);
207
+ if (style.borderLeft)
208
+ parts.push(`border-left:${style.borderLeft}`);
209
+ if (style.borderRadius !== undefined)
210
+ parts.push(`border-radius:${style.borderRadius}px`);
211
+ if (style.padding !== undefined)
212
+ parts.push(`padding:${typeof style.padding === 'number' ? style.padding + 'px' : style.padding}`);
213
+ if (style.opacity !== undefined)
214
+ parts.push(`opacity:${style.opacity}`);
215
+ if (style.wordWrap)
216
+ parts.push('word-wrap:break-word');
217
+ if (style.lineHeight)
218
+ parts.push(`line-height:${style.lineHeight}`);
219
+ return parts.join(';') + (parts.length ? ';' : '');
220
+ }
221
+ function escapeHtml(str) {
222
+ return str
223
+ .replace(/&/g, '&amp;')
224
+ .replace(/</g, '&lt;')
225
+ .replace(/>/g, '&gt;')
226
+ .replace(/"/g, '&quot;');
227
+ }
228
+ //# sourceMappingURL=html-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-renderer.js","sourceRoot":"","sources":["../../src/render/html-renderer.ts"],"names":[],"mappings":"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"}