odf-kit 0.9.5 → 0.9.7
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 +161 -34
- package/README.md +242 -279
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ods/content.d.ts +0 -9
- package/dist/ods/content.d.ts.map +1 -1
- package/dist/ods/content.js +274 -97
- package/dist/ods/content.js.map +1 -1
- package/dist/ods/document.d.ts +2 -42
- package/dist/ods/document.d.ts.map +1 -1
- package/dist/ods/document.js +7 -42
- package/dist/ods/document.js.map +1 -1
- package/dist/ods/index.d.ts +1 -1
- package/dist/ods/index.d.ts.map +1 -1
- package/dist/ods/settings.d.ts +13 -0
- package/dist/ods/settings.d.ts.map +1 -0
- package/dist/ods/settings.js +67 -0
- package/dist/ods/settings.js.map +1 -0
- package/dist/ods/sheet-builder.d.ts +42 -28
- package/dist/ods/sheet-builder.d.ts.map +1 -1
- package/dist/ods/sheet-builder.js +57 -42
- package/dist/ods/sheet-builder.js.map +1 -1
- package/dist/ods/types.d.ts +68 -30
- package/dist/ods/types.d.ts.map +1 -1
- package/dist/odt/index.d.ts +2 -0
- package/dist/odt/index.d.ts.map +1 -1
- package/dist/odt/index.js +1 -0
- package/dist/odt/index.js.map +1 -1
- package/dist/odt/tiptap-to-odt.d.ts +116 -0
- package/dist/odt/tiptap-to-odt.d.ts.map +1 -0
- package/dist/odt/tiptap-to-odt.js +447 -0
- package/dist/odt/tiptap-to-odt.js.map +1 -0
- package/package.json +14 -5
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* .addRow(["February", 14200.00])
|
|
13
13
|
* .addRow(["Total", { value: "=SUM(B2:B3)", type: "formula" }])
|
|
14
14
|
* .setColumnWidth(0, "4cm")
|
|
15
|
-
* .setColumnWidth(1, "5cm")
|
|
15
|
+
* .setColumnWidth(1, "5cm")
|
|
16
|
+
* .freezeRows(1);
|
|
16
17
|
*/
|
|
17
18
|
export class OdsSheet {
|
|
18
19
|
/** Internal sheet data — used by OdsDocument.save(). */
|
|
@@ -33,26 +34,20 @@ export class OdsSheet {
|
|
|
33
34
|
* - `boolean` → boolean
|
|
34
35
|
* - `string` → string (never auto-detected as formula)
|
|
35
36
|
* - `null` / `undefined` → empty cell
|
|
36
|
-
* - {@link OdsCellObject} → explicit type (required for formulas)
|
|
37
|
-
*
|
|
38
|
-
* Row options apply formatting defaults to every cell in the row.
|
|
39
|
-
* Per-cell {@link OdsCellObject} options override row-level defaults.
|
|
37
|
+
* - {@link OdsCellObject} → explicit type (required for formulas, percentages, currencies)
|
|
40
38
|
*
|
|
41
39
|
* @param values - Array of cell values in column order.
|
|
42
40
|
* @param options - Optional formatting defaults for all cells in this row.
|
|
43
41
|
* @returns This sheet, for chaining.
|
|
44
42
|
*
|
|
45
43
|
* @example
|
|
46
|
-
* // Simple auto-typed row
|
|
47
|
-
* sheet.addRow([1.23, "Text", new Date("2026-01-15"), true]);
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* // Header row with formatting
|
|
51
44
|
* sheet.addRow(["Month", "Revenue"], { bold: true, backgroundColor: "#DDDDDD" });
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* sheet.addRow([
|
|
45
|
+
* sheet.addRow(["January", 12500.00]);
|
|
46
|
+
* sheet.addRow(["Total", { value: "=SUM(B2:B3)", type: "formula" }]);
|
|
47
|
+
* sheet.addRow([{ value: 0.1234, type: "percentage", numberFormat: "percentage:1" }]);
|
|
48
|
+
* sheet.addRow([{ value: 1234.56, type: "currency", numberFormat: "currency:EUR" }]);
|
|
49
|
+
* sheet.addRow([{ value: "Report", type: "string", colSpan: 3, bold: true }]);
|
|
50
|
+
* sheet.addRow([{ value: "odf-kit", type: "string", href: "https://github.com/GitHubNewbie0/odf-kit" }]);
|
|
56
51
|
*/
|
|
57
52
|
addRow(values, options) {
|
|
58
53
|
const cells = values.map((v) => toCellData(v));
|
|
@@ -62,16 +57,9 @@ export class OdsSheet {
|
|
|
62
57
|
/**
|
|
63
58
|
* Set the width of a column.
|
|
64
59
|
*
|
|
65
|
-
* May be called before or after adding rows. Uses zero-based column index.
|
|
66
|
-
* Columns without an explicit width use the application's optimal width.
|
|
67
|
-
*
|
|
68
60
|
* @param colIndex - Zero-based column index.
|
|
69
61
|
* @param width - Width with units (e.g. `"3cm"`, `"1.5in"`).
|
|
70
62
|
* @returns This sheet, for chaining.
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* sheet.setColumnWidth(0, "4cm");
|
|
74
|
-
* sheet.setColumnWidth(1, "8cm");
|
|
75
63
|
*/
|
|
76
64
|
setColumnWidth(colIndex, width) {
|
|
77
65
|
this.data.columns.set(colIndex, { width });
|
|
@@ -80,17 +68,9 @@ export class OdsSheet {
|
|
|
80
68
|
/**
|
|
81
69
|
* Set the height of a row.
|
|
82
70
|
*
|
|
83
|
-
* The row must already exist (added via {@link addRow}). Uses zero-based
|
|
84
|
-
* row index. Silently ignored for out-of-range indices.
|
|
85
|
-
* Rows without an explicit height use the application's optimal height.
|
|
86
|
-
*
|
|
87
71
|
* @param rowIndex - Zero-based row index.
|
|
88
72
|
* @param height - Height with units (e.g. `"1cm"`, `"18pt"`).
|
|
89
73
|
* @returns This sheet, for chaining.
|
|
90
|
-
*
|
|
91
|
-
* @example
|
|
92
|
-
* sheet.addRow(["Header"]);
|
|
93
|
-
* sheet.setRowHeight(0, "1cm");
|
|
94
74
|
*/
|
|
95
75
|
setRowHeight(rowIndex, height) {
|
|
96
76
|
const row = this.data.rows[rowIndex];
|
|
@@ -99,24 +79,65 @@ export class OdsSheet {
|
|
|
99
79
|
}
|
|
100
80
|
return this;
|
|
101
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Freeze the top N rows so they remain visible when scrolling down.
|
|
84
|
+
*
|
|
85
|
+
* Typically used to keep a header row visible. Call after adding rows.
|
|
86
|
+
*
|
|
87
|
+
* @param rows - Number of rows to freeze (default 1).
|
|
88
|
+
* @returns This sheet, for chaining.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* sheet.addRow(["Name", "Amount", "Date"], { bold: true });
|
|
92
|
+
* sheet.freezeRows(1);
|
|
93
|
+
*/
|
|
94
|
+
freezeRows(rows = 1) {
|
|
95
|
+
this.data.freezeRows = rows;
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Freeze the left N columns so they remain visible when scrolling right.
|
|
100
|
+
*
|
|
101
|
+
* @param cols - Number of columns to freeze (default 1).
|
|
102
|
+
* @returns This sheet, for chaining.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* sheet.freezeColumns(1); // freeze the first column
|
|
106
|
+
*/
|
|
107
|
+
freezeColumns(cols = 1) {
|
|
108
|
+
this.data.freezeColumns = cols;
|
|
109
|
+
return this;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Set the sheet tab color.
|
|
113
|
+
*
|
|
114
|
+
* @param color - Hex color (`"#FF0000"`) or CSS named color (`"red"`).
|
|
115
|
+
* @returns This sheet, for chaining.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* doc.addSheet("Q1").setTabColor("#4CAF50");
|
|
119
|
+
* doc.addSheet("Q2").setTabColor("#2196F3");
|
|
120
|
+
*/
|
|
121
|
+
setTabColor(color) {
|
|
122
|
+
this.data.tabColor = color;
|
|
123
|
+
return this;
|
|
124
|
+
}
|
|
102
125
|
}
|
|
103
126
|
// ─── Internal Helpers ─────────────────────────────────────────────────
|
|
104
|
-
/**
|
|
105
|
-
* Convert an OdsCellValue to internal OdsCellData with resolved type.
|
|
106
|
-
*/
|
|
107
127
|
function toCellData(value) {
|
|
108
128
|
if (value === null || value === undefined) {
|
|
109
129
|
return { value: null, type: "empty" };
|
|
110
130
|
}
|
|
111
|
-
// OdsCellObject — has an explicit 'type' field alongside 'value'
|
|
112
131
|
if (isOdsCellObject(value)) {
|
|
113
132
|
return {
|
|
114
133
|
value: value.value,
|
|
115
134
|
type: value.type,
|
|
116
135
|
options: extractCellOptions(value),
|
|
136
|
+
colSpan: value.colSpan,
|
|
137
|
+
rowSpan: value.rowSpan,
|
|
138
|
+
href: value.href,
|
|
117
139
|
};
|
|
118
140
|
}
|
|
119
|
-
// Auto-typed primitives
|
|
120
141
|
if (value instanceof Date) {
|
|
121
142
|
return { value, type: "date" };
|
|
122
143
|
}
|
|
@@ -126,19 +147,11 @@ function toCellData(value) {
|
|
|
126
147
|
if (typeof value === "number") {
|
|
127
148
|
return { value, type: "float" };
|
|
128
149
|
}
|
|
129
|
-
// string — never auto-detected as formula
|
|
130
150
|
return { value: value, type: "string" };
|
|
131
151
|
}
|
|
132
|
-
/**
|
|
133
|
-
* Type guard: returns true when value is an OdsCellObject.
|
|
134
|
-
*/
|
|
135
152
|
function isOdsCellObject(value) {
|
|
136
153
|
return typeof value === "object" && value !== null && !(value instanceof Date) && "type" in value;
|
|
137
154
|
}
|
|
138
|
-
/**
|
|
139
|
-
* Extract OdsCellOptions fields from an OdsCellObject, excluding 'value' and 'type'.
|
|
140
|
-
* Returns undefined when no formatting options are present.
|
|
141
|
-
*/
|
|
142
155
|
function extractCellOptions(obj) {
|
|
143
156
|
const opts = {};
|
|
144
157
|
if (obj.bold !== undefined)
|
|
@@ -175,6 +188,8 @@ function extractCellOptions(obj) {
|
|
|
175
188
|
opts.wrap = obj.wrap;
|
|
176
189
|
if (obj.dateFormat !== undefined)
|
|
177
190
|
opts.dateFormat = obj.dateFormat;
|
|
191
|
+
if (obj.numberFormat !== undefined)
|
|
192
|
+
opts.numberFormat = obj.numberFormat;
|
|
178
193
|
return Object.keys(opts).length > 0 ? opts : undefined;
|
|
179
194
|
}
|
|
180
195
|
//# sourceMappingURL=sheet-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet-builder.js","sourceRoot":"","sources":["../../src/ods/sheet-builder.ts"],"names":[],"mappings":"AASA
|
|
1
|
+
{"version":3,"file":"sheet-builder.js","sourceRoot":"","sources":["../../src/ods/sheet-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/ods/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Recognized cell types in ODS. */
|
|
2
|
-
export type OdsCellType = "string" | "float" | "date" | "boolean" | "formula";
|
|
2
|
+
export type OdsCellType = "string" | "float" | "date" | "boolean" | "formula" | "percentage" | "currency";
|
|
3
3
|
/** Built-in date display formats. */
|
|
4
4
|
export type OdsDateFormat = "YYYY-MM-DD" | "DD/MM/YYYY" | "MM/DD/YYYY";
|
|
5
5
|
/**
|
|
@@ -7,14 +7,6 @@ export type OdsDateFormat = "YYYY-MM-DD" | "DD/MM/YYYY" | "MM/DD/YYYY";
|
|
|
7
7
|
*
|
|
8
8
|
* Applied at the row level (as defaults for all cells) or at the cell level
|
|
9
9
|
* (as overrides for a single cell via {@link OdsCellObject}).
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* // Row-level defaults
|
|
13
|
-
* sheet.addRow(["Header", "Value"], { bold: true, backgroundColor: "#DDDDDD" });
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* // Cell-level overrides inside OdsCellObject
|
|
17
|
-
* sheet.addRow([{ value: "Special", type: "string", color: "#FF0000" }]);
|
|
18
10
|
*/
|
|
19
11
|
export interface OdsCellOptions {
|
|
20
12
|
/** Bold text. */
|
|
@@ -28,19 +20,15 @@ export interface OdsCellOptions {
|
|
|
28
20
|
fontSize?: number | string;
|
|
29
21
|
/** Font family (e.g. `"Arial"`, `"Liberation Sans"`). */
|
|
30
22
|
fontFamily?: string;
|
|
31
|
-
/**
|
|
32
|
-
* Text color. Accepts hex (`"#FF0000"`) or CSS named colors (`"red"`).
|
|
33
|
-
*/
|
|
23
|
+
/** Text color. Accepts hex (`"#FF0000"`) or CSS named colors (`"red"`). */
|
|
34
24
|
color?: string;
|
|
35
25
|
/** Underline the text. */
|
|
36
26
|
underline?: boolean;
|
|
37
|
-
/**
|
|
38
|
-
* Cell background color. Accepts hex (`"#DDDDDD"`) or CSS named colors.
|
|
39
|
-
*/
|
|
27
|
+
/** Cell background color. Accepts hex (`"#DDDDDD"`) or CSS named colors. */
|
|
40
28
|
backgroundColor?: string;
|
|
41
29
|
/**
|
|
42
|
-
* Border on all four sides.
|
|
43
|
-
*
|
|
30
|
+
* Border on all four sides. CSS shorthand: `"<width> <style> <color>"`
|
|
31
|
+
* (e.g. `"0.5pt solid #000000"`).
|
|
44
32
|
*/
|
|
45
33
|
border?: string;
|
|
46
34
|
/** Top border. Overrides `border` for the top side. */
|
|
@@ -64,6 +52,24 @@ export interface OdsCellOptions {
|
|
|
64
52
|
* Overrides the document-level default set via `OdsDocument.setDateFormat()`.
|
|
65
53
|
*/
|
|
66
54
|
dateFormat?: OdsDateFormat;
|
|
55
|
+
/**
|
|
56
|
+
* Number display format. Applies when the cell contains a numeric value.
|
|
57
|
+
*
|
|
58
|
+
* Predefined formats:
|
|
59
|
+
* - `"integer"` — 1,234 (no decimal places, thousands separator)
|
|
60
|
+
* - `"decimal:N"` — 1,234.56 (N decimal places, thousands separator)
|
|
61
|
+
* - `"percentage"` — 12.34% (raw value × 100, 2 decimal places)
|
|
62
|
+
* - `"percentage:N"` — 12.3% (N decimal places)
|
|
63
|
+
* - `"currency:CODE"` — €1,234.56 (ISO 4217 code, 2 decimal places)
|
|
64
|
+
* - `"currency:CODE:N"` — €1,234.6 (currency with N decimal places)
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* { value: 1234567.89, type: "float", numberFormat: "decimal:2" }
|
|
68
|
+
* { value: 0.1234, type: "percentage", numberFormat: "percentage:1" }
|
|
69
|
+
* { value: 1234.56, type: "currency", numberFormat: "currency:EUR" }
|
|
70
|
+
* { value: 9999, type: "float", numberFormat: "integer" }
|
|
71
|
+
*/
|
|
72
|
+
numberFormat?: string;
|
|
67
73
|
}
|
|
68
74
|
/**
|
|
69
75
|
* Row-level formatting options. Applied to all cells in the row as defaults.
|
|
@@ -73,29 +79,53 @@ export type OdsRowOptions = OdsCellOptions;
|
|
|
73
79
|
/**
|
|
74
80
|
* Explicit typed cell — use when automatic type detection is insufficient.
|
|
75
81
|
*
|
|
76
|
-
* Required for formula cells. Also allows per-cell
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* Extends {@link OdsCellOptions} so individual cell formatting can override
|
|
80
|
-
* row-level defaults.
|
|
82
|
+
* Required for formula, percentage, and currency cells. Also allows per-cell
|
|
83
|
+
* formatting that overrides row-level defaults.
|
|
81
84
|
*
|
|
82
85
|
* @example
|
|
83
86
|
* // Formula — explicit type required
|
|
84
87
|
* { value: "=SUM(B1:B10)", type: "formula" }
|
|
85
88
|
*
|
|
86
89
|
* @example
|
|
87
|
-
* //
|
|
88
|
-
* { value:
|
|
90
|
+
* // Percentage
|
|
91
|
+
* { value: 0.1234, type: "percentage", numberFormat: "percentage:1" }
|
|
89
92
|
*
|
|
90
93
|
* @example
|
|
91
|
-
* //
|
|
92
|
-
* { value:
|
|
94
|
+
* // Currency
|
|
95
|
+
* { value: 1234.56, type: "currency", numberFormat: "currency:EUR" }
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* // Merged cell spanning 3 columns
|
|
99
|
+
* { value: "Q1 Report", type: "string", colSpan: 3, bold: true }
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* // Hyperlink
|
|
103
|
+
* { value: "odf-kit", type: "string", href: "https://github.com/GitHubNewbie0/odf-kit" }
|
|
93
104
|
*/
|
|
94
105
|
export interface OdsCellObject extends OdsCellOptions {
|
|
95
106
|
/** The cell value. */
|
|
96
107
|
value: string | number | boolean | Date | null;
|
|
97
108
|
/** The explicit cell type. */
|
|
98
109
|
type: OdsCellType;
|
|
110
|
+
/**
|
|
111
|
+
* Span this cell across N columns (default 1).
|
|
112
|
+
* The spanned columns in the same row are automatically filled with
|
|
113
|
+
* covered cells.
|
|
114
|
+
*/
|
|
115
|
+
colSpan?: number;
|
|
116
|
+
/**
|
|
117
|
+
* Span this cell across N rows (default 1).
|
|
118
|
+
* The spanned cells in subsequent rows at the same column position are
|
|
119
|
+
* automatically filled with covered cells.
|
|
120
|
+
*/
|
|
121
|
+
rowSpan?: number;
|
|
122
|
+
/**
|
|
123
|
+
* Hyperlink URL. When set, the cell text becomes a clickable link.
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* { value: "odf-kit", type: "string", href: "https://github.com/GitHubNewbie0/odf-kit" }
|
|
127
|
+
*/
|
|
128
|
+
href?: string;
|
|
99
129
|
}
|
|
100
130
|
/**
|
|
101
131
|
* A cell value — either a primitive (auto-typed) or an explicit {@link OdsCellObject}.
|
|
@@ -108,11 +138,7 @@ export interface OdsCellObject extends OdsCellOptions {
|
|
|
108
138
|
* - `null` / `undefined` → empty cell
|
|
109
139
|
*
|
|
110
140
|
* @example
|
|
111
|
-
* // Primitives — auto-typed
|
|
112
141
|
* sheet.addRow(["Hello", 42, new Date("2026-01-15"), true]);
|
|
113
|
-
*
|
|
114
|
-
* @example
|
|
115
|
-
* // Mix of primitives and explicit objects
|
|
116
142
|
* sheet.addRow(["Total", { value: "=SUM(B1:B10)", type: "formula" }]);
|
|
117
143
|
*/
|
|
118
144
|
export type OdsCellValue = string | number | boolean | Date | null | undefined | OdsCellObject;
|
|
@@ -124,6 +150,12 @@ export interface OdsCellData {
|
|
|
124
150
|
type: OdsCellType | "empty";
|
|
125
151
|
/** Cell-level formatting options — merged with row options at render time. */
|
|
126
152
|
options?: OdsCellOptions;
|
|
153
|
+
/** Column span — number of columns this cell covers (default 1). */
|
|
154
|
+
colSpan?: number;
|
|
155
|
+
/** Row span — number of rows this cell covers (default 1). */
|
|
156
|
+
rowSpan?: number;
|
|
157
|
+
/** Hyperlink URL — when set, cell text is rendered as a link. */
|
|
158
|
+
href?: string;
|
|
127
159
|
}
|
|
128
160
|
/** Internal representation of a row. */
|
|
129
161
|
export interface OdsRowData {
|
|
@@ -147,5 +179,11 @@ export interface OdsSheetData {
|
|
|
147
179
|
rows: OdsRowData[];
|
|
148
180
|
/** Sparse column definitions keyed by zero-based column index. */
|
|
149
181
|
columns: Map<number, OdsColumnData>;
|
|
182
|
+
/** Number of rows to freeze at the top (0 = no freeze). */
|
|
183
|
+
freezeRows?: number;
|
|
184
|
+
/** Number of columns to freeze at the left (0 = no freeze). */
|
|
185
|
+
freezeColumns?: number;
|
|
186
|
+
/** Sheet tab color (hex e.g. `"#FF0000"` or CSS named color). */
|
|
187
|
+
tabColor?: string;
|
|
150
188
|
}
|
|
151
189
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/ods/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ods/types.ts"],"names":[],"mappings":"AAEA,oCAAoC;AACpC,MAAM,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ods/types.ts"],"names":[],"mappings":"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"}
|
package/dist/odt/index.d.ts
CHANGED
|
@@ -5,7 +5,9 @@ export { TableBuilder, RowBuilder, CellBuilder } from "./table-builder.js";
|
|
|
5
5
|
export { ListBuilder } from "./list-builder.js";
|
|
6
6
|
export { htmlToOdt } from "./html-to-odt.js";
|
|
7
7
|
export { markdownToOdt } from "./markdown-to-odt.js";
|
|
8
|
+
export { tiptapToOdt } from "./tiptap-to-odt.js";
|
|
8
9
|
export type { ContentElement } from "./content.js";
|
|
9
10
|
export type { HtmlToOdtOptions } from "./html-to-odt.js";
|
|
11
|
+
export type { TiptapNode, TiptapMark, TiptapToOdtOptions } from "./tiptap-to-odt.js";
|
|
10
12
|
export type { TextFormatting, TextRun, TableOptions, CellOptions, PageLayout, ParagraphOptions, TabStop, ListOptions, ImageOptions, ImageData, } from "./types.js";
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/odt/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/odt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,YAAY,EACV,cAAc,EACd,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,YAAY,EACZ,SAAS,GACV,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/odt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACrF,YAAY,EACV,cAAc,EACd,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,YAAY,EACZ,SAAS,GACV,MAAM,YAAY,CAAC"}
|
package/dist/odt/index.js
CHANGED
|
@@ -5,4 +5,5 @@ export { TableBuilder, RowBuilder, CellBuilder } from "./table-builder.js";
|
|
|
5
5
|
export { ListBuilder } from "./list-builder.js";
|
|
6
6
|
export { htmlToOdt } from "./html-to-odt.js";
|
|
7
7
|
export { markdownToOdt } from "./markdown-to-odt.js";
|
|
8
|
+
export { tiptapToOdt } from "./tiptap-to-odt.js";
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
package/dist/odt/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/odt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/odt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TipTap/ProseMirror JSON to ODT converter.
|
|
3
|
+
*
|
|
4
|
+
* Walks a TipTap JSONContent document tree and maps nodes to OdtDocument
|
|
5
|
+
* API calls. No dependency on @tiptap/core — just plain JSON walking.
|
|
6
|
+
*
|
|
7
|
+
* Supported block nodes: doc, paragraph, heading (1–6), bulletList,
|
|
8
|
+
* orderedList, listItem, blockquote, codeBlock, horizontalRule, hardBreak,
|
|
9
|
+
* image (data URI or pre-fetched via images option), table, tableRow,
|
|
10
|
+
* tableCell, tableHeader.
|
|
11
|
+
*
|
|
12
|
+
* Supported marks: bold, italic, underline, strike, code, link, textStyle
|
|
13
|
+
* (color, fontSize, fontFamily), highlight, superscript, subscript.
|
|
14
|
+
*
|
|
15
|
+
* Unknown node types are silently skipped unless unknownNodeHandler is
|
|
16
|
+
* provided in options.
|
|
17
|
+
*/
|
|
18
|
+
import type { OdtDocument } from "./document.js";
|
|
19
|
+
import type { HtmlToOdtOptions } from "./html-to-odt.js";
|
|
20
|
+
/** A TipTap/ProseMirror JSON document node. */
|
|
21
|
+
export interface TiptapNode {
|
|
22
|
+
/** Node type name (e.g. "doc", "paragraph", "heading", "text"). */
|
|
23
|
+
type: string;
|
|
24
|
+
/** Text content — present only on text nodes. */
|
|
25
|
+
text?: string;
|
|
26
|
+
/** Node attributes (e.g. { level: 1 } for headings, { href: "..." } for links). */
|
|
27
|
+
attrs?: Record<string, unknown>;
|
|
28
|
+
/** Child nodes — present on block and inline container nodes. */
|
|
29
|
+
content?: TiptapNode[];
|
|
30
|
+
/** Inline formatting marks — present on text nodes. */
|
|
31
|
+
marks?: TiptapMark[];
|
|
32
|
+
}
|
|
33
|
+
/** A TipTap/ProseMirror inline mark. */
|
|
34
|
+
export interface TiptapMark {
|
|
35
|
+
/** Mark type name (e.g. "bold", "italic", "link", "textStyle"). */
|
|
36
|
+
type: string;
|
|
37
|
+
/** Mark attributes (e.g. { href: "..." } for link, { color: "#ff0000" } for textStyle). */
|
|
38
|
+
attrs?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Options for {@link tiptapToOdt}.
|
|
42
|
+
*
|
|
43
|
+
* Extends {@link HtmlToOdtOptions} — all page format, margin, orientation,
|
|
44
|
+
* and metadata options apply.
|
|
45
|
+
*/
|
|
46
|
+
export interface TiptapToOdtOptions extends HtmlToOdtOptions {
|
|
47
|
+
/**
|
|
48
|
+
* Pre-fetched image bytes keyed by src URL.
|
|
49
|
+
*
|
|
50
|
+
* TipTap image nodes with `attrs.src` are looked up in this map.
|
|
51
|
+
* If found, the image is embedded in the ODT. If not found (and the src
|
|
52
|
+
* is not a data URI), a placeholder paragraph is emitted instead.
|
|
53
|
+
*
|
|
54
|
+
* Data URIs (`data:image/...;base64,...`) are always decoded and embedded
|
|
55
|
+
* regardless of this map.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* const images = {
|
|
59
|
+
* "https://example.com/photo.jpg": jpegBytes,
|
|
60
|
+
* "ipfs://Qm...": ipfsImageBytes,
|
|
61
|
+
* }
|
|
62
|
+
* const bytes = await tiptapToOdt(json, { images })
|
|
63
|
+
*/
|
|
64
|
+
images?: Record<string, Uint8Array>;
|
|
65
|
+
/**
|
|
66
|
+
* Handler for unknown node types — custom TipTap extensions not
|
|
67
|
+
* recognized by odf-kit.
|
|
68
|
+
*
|
|
69
|
+
* Called once per unrecognized node. The handler receives the node and
|
|
70
|
+
* the OdtDocument instance and may call any OdtDocument methods to add
|
|
71
|
+
* content. If not provided, unknown nodes are silently skipped.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* // Handle a custom "callout" node
|
|
75
|
+
* unknownNodeHandler: (node, doc) => {
|
|
76
|
+
* if (node.type === 'callout') {
|
|
77
|
+
* const text = node.content?.[0]?.content?.[0]?.text ?? ''
|
|
78
|
+
* doc.addParagraph(`⚠️ ${text}`)
|
|
79
|
+
* }
|
|
80
|
+
* }
|
|
81
|
+
*/
|
|
82
|
+
unknownNodeHandler?: (node: TiptapNode, doc: OdtDocument) => void;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Convert a TipTap/ProseMirror JSON document to an ODT file.
|
|
86
|
+
*
|
|
87
|
+
* Accepts the JSON object returned by `editor.getJSON()` in TipTap.
|
|
88
|
+
* No dependency on @tiptap/core — the JSON is walked as a plain object.
|
|
89
|
+
*
|
|
90
|
+
* @param json - TipTap JSONContent document (must have type "doc").
|
|
91
|
+
* @param options - Page format, margins, metadata, images, unknownNodeHandler.
|
|
92
|
+
* @returns Promise resolving to a valid `.odt` file as a `Uint8Array`.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* import { tiptapToOdt } from "odf-kit"
|
|
96
|
+
*
|
|
97
|
+
* const json = editor.getJSON()
|
|
98
|
+
* const bytes = await tiptapToOdt(json, { pageFormat: "A4" })
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* // With pre-fetched images
|
|
102
|
+
* const images = { "https://example.com/photo.jpg": jpegBytes }
|
|
103
|
+
* const bytes = await tiptapToOdt(json, { images })
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* // With custom node handler
|
|
107
|
+
* const bytes = await tiptapToOdt(json, {
|
|
108
|
+
* unknownNodeHandler: (node, doc) => {
|
|
109
|
+
* if (node.type === "callout") {
|
|
110
|
+
* doc.addParagraph(`⚠️ ${extractText(node)}`)
|
|
111
|
+
* }
|
|
112
|
+
* }
|
|
113
|
+
* })
|
|
114
|
+
*/
|
|
115
|
+
export declare function tiptapToOdt(json: TiptapNode, options?: TiptapToOdtOptions): Promise<Uint8Array>;
|
|
116
|
+
//# sourceMappingURL=tiptap-to-odt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiptap-to-odt.d.ts","sourceRoot":"","sources":["../../src/odt/tiptap-to-odt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAKzD,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,iEAAiE;IACjE,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,uDAAuD;IACvD,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;OAgBG;IACH,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACnE;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,CAAC,CAsCrB"}
|