@extend-ai/react-docx 0.8.2 → 0.8.3
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/dist/docx-import-worker.cjs.map +1 -1
- package/dist/docx_wasm_bg.wasm +0 -0
- package/dist/index.cjs +216 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +216 -30
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -417,6 +417,17 @@ interface NumberingLevelDefinition {
|
|
|
417
417
|
format?: string;
|
|
418
418
|
text?: string;
|
|
419
419
|
suffix?: "tab" | "space" | "nothing";
|
|
420
|
+
/**
|
|
421
|
+
* `w:lvlRestart`: one-based level whose use restarts this level; 0 means the
|
|
422
|
+
* level never restarts. Absent means the OOXML default (restart when any
|
|
423
|
+
* shallower level is used).
|
|
424
|
+
*/
|
|
425
|
+
lvlRestart?: number;
|
|
426
|
+
/**
|
|
427
|
+
* `w:isLgl`: legal numbering — every placeholder in this level's text
|
|
428
|
+
* renders as decimal regardless of the referenced levels' formats.
|
|
429
|
+
*/
|
|
430
|
+
isLgl?: boolean;
|
|
420
431
|
indent?: ParagraphIndent;
|
|
421
432
|
runStyle?: TextStyle;
|
|
422
433
|
bulletFontFamily?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -417,6 +417,17 @@ interface NumberingLevelDefinition {
|
|
|
417
417
|
format?: string;
|
|
418
418
|
text?: string;
|
|
419
419
|
suffix?: "tab" | "space" | "nothing";
|
|
420
|
+
/**
|
|
421
|
+
* `w:lvlRestart`: one-based level whose use restarts this level; 0 means the
|
|
422
|
+
* level never restarts. Absent means the OOXML default (restart when any
|
|
423
|
+
* shallower level is used).
|
|
424
|
+
*/
|
|
425
|
+
lvlRestart?: number;
|
|
426
|
+
/**
|
|
427
|
+
* `w:isLgl`: legal numbering — every placeholder in this level's text
|
|
428
|
+
* renders as decimal regardless of the referenced levels' formats.
|
|
429
|
+
*/
|
|
430
|
+
isLgl?: boolean;
|
|
420
431
|
indent?: ParagraphIndent;
|
|
421
432
|
runStyle?: TextStyle;
|
|
422
433
|
bulletFontFamily?: string;
|
package/dist/index.js
CHANGED
|
@@ -15135,14 +15135,53 @@ function resolveListParagraphIndent(paragraph, numberingDefinitions) {
|
|
|
15135
15135
|
hangingTwips: nextHangingTwips
|
|
15136
15136
|
};
|
|
15137
15137
|
}
|
|
15138
|
-
function
|
|
15138
|
+
function numberingIndentCandidateWidthPx(paragraph, numberingDefinitions) {
|
|
15139
15139
|
const resolvedIndent = resolveListParagraphIndent(
|
|
15140
15140
|
paragraph,
|
|
15141
15141
|
numberingDefinitions
|
|
15142
15142
|
);
|
|
15143
15143
|
const hangingIndentPx = twipsToSignedPixels(resolvedIndent?.hangingTwips);
|
|
15144
15144
|
const firstLineIndentPx = twipsToSignedPixels(resolvedIndent?.firstLineTwips);
|
|
15145
|
-
|
|
15145
|
+
return Number.isFinite(hangingIndentPx) && Math.abs(hangingIndentPx) > 0 ? Math.abs(hangingIndentPx) : Number.isFinite(firstLineIndentPx) && firstLineIndentPx < 0 ? Math.abs(firstLineIndentPx) : void 0;
|
|
15146
|
+
}
|
|
15147
|
+
function resolvedNumberingLevelForParagraph(paragraph, numberingDefinitions) {
|
|
15148
|
+
const numbering = paragraph.style?.numbering;
|
|
15149
|
+
if (!numberingDefinitions || !numbering || !Number.isFinite(numbering.numId) || numbering.numId <= 0) {
|
|
15150
|
+
return void 0;
|
|
15151
|
+
}
|
|
15152
|
+
const effectiveNumId = effectiveNumberingNumIdForParagraph(paragraph, numberingDefinitions) ?? numbering.numId;
|
|
15153
|
+
return findNumberingLevelDefinition(
|
|
15154
|
+
numberingDefinitions,
|
|
15155
|
+
effectiveNumId,
|
|
15156
|
+
Math.max(0, Math.round(numbering.ilvl ?? 0))
|
|
15157
|
+
);
|
|
15158
|
+
}
|
|
15159
|
+
function numberingTabAdvanceWidthPx(paragraph, numberingDefinitions, numberingLabel) {
|
|
15160
|
+
if (!numberingLabel?.text || numberingLabel.imageSrc || isTableOfContentsParagraph(paragraph)) {
|
|
15161
|
+
return void 0;
|
|
15162
|
+
}
|
|
15163
|
+
const level = resolvedNumberingLevelForParagraph(
|
|
15164
|
+
paragraph,
|
|
15165
|
+
numberingDefinitions
|
|
15166
|
+
);
|
|
15167
|
+
const suffix = level?.suffix ?? "tab";
|
|
15168
|
+
if (suffix !== "tab") {
|
|
15169
|
+
return void 0;
|
|
15170
|
+
}
|
|
15171
|
+
const labelWidthPx = Math.ceil(
|
|
15172
|
+
measureTextWidthPx2(
|
|
15173
|
+
numberingLabel.text.replace(/\t/g, " ").replace(/\u00a0/g, " "),
|
|
15174
|
+
numberingLabel.style,
|
|
15175
|
+
paragraphBaseFontSizePx(paragraph)
|
|
15176
|
+
)
|
|
15177
|
+
);
|
|
15178
|
+
return (Math.floor(labelWidthPx / DEFAULT_TAB_STOP_PX) + 1) * DEFAULT_TAB_STOP_PX;
|
|
15179
|
+
}
|
|
15180
|
+
function resolveNumberingMarkerBoxWidthPx(paragraph, numberingDefinitions, numberingLabel) {
|
|
15181
|
+
const candidateWidthPx = numberingIndentCandidateWidthPx(
|
|
15182
|
+
paragraph,
|
|
15183
|
+
numberingDefinitions
|
|
15184
|
+
);
|
|
15146
15185
|
const labelTextForWidth = numberingLabel?.imageSrc ? numberingLabel.trailingText ?? "" : numberingLabel?.text ?? "";
|
|
15147
15186
|
const normalizedLabelTextForWidth = labelTextForWidth.replace(/\t/g, " ").replace(/\u00a0/g, " ");
|
|
15148
15187
|
const measuredLabelWidthPx = normalizedLabelTextForWidth.length > 0 ? Math.ceil(
|
|
@@ -15168,6 +15207,18 @@ function resolveNumberingMarkerBoxWidthPx(paragraph, numberingDefinitions, numbe
|
|
|
15168
15207
|
tocMarkerTargetWidthPx
|
|
15169
15208
|
);
|
|
15170
15209
|
if (!Number.isFinite(candidateWidthPx) || candidateWidthPx < 8) {
|
|
15210
|
+
const tabAdvanceWidthPx = numberingTabAdvanceWidthPx(
|
|
15211
|
+
paragraph,
|
|
15212
|
+
numberingDefinitions,
|
|
15213
|
+
numberingLabel
|
|
15214
|
+
);
|
|
15215
|
+
if (tabAdvanceWidthPx !== void 0) {
|
|
15216
|
+
return clampNumber(
|
|
15217
|
+
Math.round(Math.max(tabAdvanceWidthPx, minimumVisualWidthPx)),
|
|
15218
|
+
8,
|
|
15219
|
+
220
|
|
15220
|
+
);
|
|
15221
|
+
}
|
|
15171
15222
|
return minimumVisualWidthPx > 0 ? clampNumber(Math.round(minimumVisualWidthPx), 8, 220) : void 0;
|
|
15172
15223
|
}
|
|
15173
15224
|
return Math.max(
|
|
@@ -15182,11 +15233,16 @@ function numberingMarkerStyle(paragraph, numberingDefinitions, numberingLabel, b
|
|
|
15182
15233
|
numberingLabel
|
|
15183
15234
|
);
|
|
15184
15235
|
const markerGapPx = isTableOfContentsParagraph(paragraph) ? 6 : markerBoxWidthPx ? 0 : 2;
|
|
15236
|
+
const tabSynthesized = markerBoxWidthPx !== void 0 && numberingIndentCandidateWidthPx(paragraph, numberingDefinitions) === void 0 && numberingTabAdvanceWidthPx(
|
|
15237
|
+
paragraph,
|
|
15238
|
+
numberingDefinitions,
|
|
15239
|
+
numberingLabel
|
|
15240
|
+
) !== void 0;
|
|
15185
15241
|
return {
|
|
15186
15242
|
...baseStyle ?? {},
|
|
15187
15243
|
display: "inline-flex",
|
|
15188
15244
|
alignItems: "baseline",
|
|
15189
|
-
justifyContent: "flex-end",
|
|
15245
|
+
justifyContent: tabSynthesized ? "flex-start" : "flex-end",
|
|
15190
15246
|
verticalAlign: "baseline",
|
|
15191
15247
|
width: markerBoxWidthPx ? `${markerBoxWidthPx}px` : void 0,
|
|
15192
15248
|
minWidth: markerBoxWidthPx ? `${markerBoxWidthPx}px` : "1.1em",
|
|
@@ -18209,40 +18265,157 @@ function numberToLetters(value) {
|
|
|
18209
18265
|
if (!Number.isFinite(value) || value <= 0) {
|
|
18210
18266
|
return "";
|
|
18211
18267
|
}
|
|
18212
|
-
|
|
18213
|
-
|
|
18214
|
-
|
|
18215
|
-
|
|
18216
|
-
|
|
18217
|
-
|
|
18268
|
+
const rounded = Math.floor(value);
|
|
18269
|
+
const letter = String.fromCharCode(65 + (rounded - 1) % 26);
|
|
18270
|
+
return letter.repeat(Math.floor((rounded - 1) / 26) + 1);
|
|
18271
|
+
}
|
|
18272
|
+
var CARDINAL_ONES = [
|
|
18273
|
+
"zero",
|
|
18274
|
+
"one",
|
|
18275
|
+
"two",
|
|
18276
|
+
"three",
|
|
18277
|
+
"four",
|
|
18278
|
+
"five",
|
|
18279
|
+
"six",
|
|
18280
|
+
"seven",
|
|
18281
|
+
"eight",
|
|
18282
|
+
"nine",
|
|
18283
|
+
"ten",
|
|
18284
|
+
"eleven",
|
|
18285
|
+
"twelve",
|
|
18286
|
+
"thirteen",
|
|
18287
|
+
"fourteen",
|
|
18288
|
+
"fifteen",
|
|
18289
|
+
"sixteen",
|
|
18290
|
+
"seventeen",
|
|
18291
|
+
"eighteen",
|
|
18292
|
+
"nineteen"
|
|
18293
|
+
];
|
|
18294
|
+
var CARDINAL_TENS = [
|
|
18295
|
+
"",
|
|
18296
|
+
"",
|
|
18297
|
+
"twenty",
|
|
18298
|
+
"thirty",
|
|
18299
|
+
"forty",
|
|
18300
|
+
"fifty",
|
|
18301
|
+
"sixty",
|
|
18302
|
+
"seventy",
|
|
18303
|
+
"eighty",
|
|
18304
|
+
"ninety"
|
|
18305
|
+
];
|
|
18306
|
+
var ORDINAL_ONES = [
|
|
18307
|
+
"zeroth",
|
|
18308
|
+
"first",
|
|
18309
|
+
"second",
|
|
18310
|
+
"third",
|
|
18311
|
+
"fourth",
|
|
18312
|
+
"fifth",
|
|
18313
|
+
"sixth",
|
|
18314
|
+
"seventh",
|
|
18315
|
+
"eighth",
|
|
18316
|
+
"ninth",
|
|
18317
|
+
"tenth",
|
|
18318
|
+
"eleventh",
|
|
18319
|
+
"twelfth",
|
|
18320
|
+
"thirteenth",
|
|
18321
|
+
"fourteenth",
|
|
18322
|
+
"fifteenth",
|
|
18323
|
+
"sixteenth",
|
|
18324
|
+
"seventeenth",
|
|
18325
|
+
"eighteenth",
|
|
18326
|
+
"nineteenth"
|
|
18327
|
+
];
|
|
18328
|
+
var ORDINAL_TENS = [
|
|
18329
|
+
"",
|
|
18330
|
+
"",
|
|
18331
|
+
"twentieth",
|
|
18332
|
+
"thirtieth",
|
|
18333
|
+
"fortieth",
|
|
18334
|
+
"fiftieth",
|
|
18335
|
+
"sixtieth",
|
|
18336
|
+
"seventieth",
|
|
18337
|
+
"eightieth",
|
|
18338
|
+
"ninetieth"
|
|
18339
|
+
];
|
|
18340
|
+
function numberToCardinalText(value) {
|
|
18341
|
+
if (value < 20) {
|
|
18342
|
+
return CARDINAL_ONES[value];
|
|
18343
|
+
}
|
|
18344
|
+
if (value < 100) {
|
|
18345
|
+
const tens = Math.floor(value / 10);
|
|
18346
|
+
const ones = value % 10;
|
|
18347
|
+
return ones === 0 ? CARDINAL_TENS[tens] : `${CARDINAL_TENS[tens]}-${CARDINAL_ONES[ones]}`;
|
|
18348
|
+
}
|
|
18349
|
+
if (value < 1e3) {
|
|
18350
|
+
const hundreds = Math.floor(value / 100);
|
|
18351
|
+
const rest = value % 100;
|
|
18352
|
+
const head = `${CARDINAL_ONES[hundreds]} hundred`;
|
|
18353
|
+
return rest === 0 ? head : `${head} ${numberToCardinalText(rest)}`;
|
|
18354
|
+
}
|
|
18355
|
+
return String(value);
|
|
18356
|
+
}
|
|
18357
|
+
function numberToOrdinalText(value) {
|
|
18358
|
+
if (value < 20) {
|
|
18359
|
+
return ORDINAL_ONES[value];
|
|
18360
|
+
}
|
|
18361
|
+
if (value < 100) {
|
|
18362
|
+
const tens = Math.floor(value / 10);
|
|
18363
|
+
const ones = value % 10;
|
|
18364
|
+
return ones === 0 ? ORDINAL_TENS[tens] : `${CARDINAL_TENS[tens]}-${ORDINAL_ONES[ones]}`;
|
|
18365
|
+
}
|
|
18366
|
+
if (value < 1e3) {
|
|
18367
|
+
const hundreds = Math.floor(value / 100);
|
|
18368
|
+
const rest = value % 100;
|
|
18369
|
+
return rest === 0 ? `${CARDINAL_ONES[hundreds]} hundredth` : `${CARDINAL_ONES[hundreds]} hundred ${numberToOrdinalText(rest)}`;
|
|
18370
|
+
}
|
|
18371
|
+
return String(value);
|
|
18372
|
+
}
|
|
18373
|
+
function numberToOrdinalDigits(value) {
|
|
18374
|
+
const mod100 = value % 100;
|
|
18375
|
+
if (mod100 >= 11 && mod100 <= 13) {
|
|
18376
|
+
return `${value}th`;
|
|
18377
|
+
}
|
|
18378
|
+
switch (value % 10) {
|
|
18379
|
+
case 1:
|
|
18380
|
+
return `${value}st`;
|
|
18381
|
+
case 2:
|
|
18382
|
+
return `${value}nd`;
|
|
18383
|
+
case 3:
|
|
18384
|
+
return `${value}rd`;
|
|
18385
|
+
default:
|
|
18386
|
+
return `${value}th`;
|
|
18218
18387
|
}
|
|
18219
|
-
return output;
|
|
18220
18388
|
}
|
|
18221
18389
|
function formatNumberingCounter(format, value) {
|
|
18222
|
-
if (!Number.isFinite(value) || value
|
|
18390
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
18223
18391
|
return "";
|
|
18224
18392
|
}
|
|
18393
|
+
const rounded = Math.round(value);
|
|
18225
18394
|
switch ((format ?? "decimal").toLowerCase()) {
|
|
18226
18395
|
case "decimal":
|
|
18227
|
-
return String(
|
|
18396
|
+
return String(rounded);
|
|
18397
|
+
case "decimalzero":
|
|
18398
|
+
return rounded < 10 ? `0${rounded}` : String(rounded);
|
|
18228
18399
|
case "upperroman":
|
|
18229
|
-
return numberToRoman(
|
|
18400
|
+
return rounded === 0 ? String(rounded) : numberToRoman(rounded);
|
|
18230
18401
|
case "lowerroman":
|
|
18231
|
-
return numberToRoman(
|
|
18402
|
+
return rounded === 0 ? String(rounded) : numberToRoman(rounded).toLowerCase();
|
|
18232
18403
|
case "upperletter":
|
|
18233
|
-
return numberToLetters(
|
|
18404
|
+
return rounded === 0 ? String(rounded) : numberToLetters(rounded);
|
|
18234
18405
|
case "lowerletter":
|
|
18235
|
-
return numberToLetters(
|
|
18406
|
+
return rounded === 0 ? String(rounded) : numberToLetters(rounded).toLowerCase();
|
|
18236
18407
|
case "ordinal":
|
|
18408
|
+
return numberToOrdinalDigits(rounded);
|
|
18237
18409
|
case "cardinaltext":
|
|
18410
|
+
return numberToCardinalText(rounded);
|
|
18238
18411
|
case "ordinaltext":
|
|
18239
|
-
return
|
|
18412
|
+
return numberToOrdinalText(rounded);
|
|
18240
18413
|
case "bullet":
|
|
18241
18414
|
return "\u2022";
|
|
18242
18415
|
case "none":
|
|
18243
18416
|
return "";
|
|
18244
18417
|
default:
|
|
18245
|
-
return String(
|
|
18418
|
+
return String(rounded);
|
|
18246
18419
|
}
|
|
18247
18420
|
}
|
|
18248
18421
|
function formatPageFieldValue(value, format) {
|
|
@@ -18357,10 +18530,10 @@ function numberingStartValue(numbering, numId, ilvl) {
|
|
|
18357
18530
|
const instance = numbering.instances.find((item) => item.numId === numId);
|
|
18358
18531
|
const override = instance?.levelStartOverrides?.[String(ilvl)];
|
|
18359
18532
|
if (Number.isFinite(override)) {
|
|
18360
|
-
return Math.max(
|
|
18533
|
+
return Math.max(0, Math.round(override));
|
|
18361
18534
|
}
|
|
18362
18535
|
const level = findNumberingLevelDefinition(numbering, numId, ilvl);
|
|
18363
|
-
if (Number.isFinite(level?.start) && level?.start
|
|
18536
|
+
if (Number.isFinite(level?.start) && level?.start >= 0) {
|
|
18364
18537
|
return Math.round(level?.start);
|
|
18365
18538
|
}
|
|
18366
18539
|
return 1;
|
|
@@ -18431,14 +18604,27 @@ function buildParagraphNumberingLabels(model) {
|
|
|
18431
18604
|
if (!template || template.trim().length === 0) {
|
|
18432
18605
|
return;
|
|
18433
18606
|
}
|
|
18607
|
+
const restartTriggerCeiling = (levelIndex) => {
|
|
18608
|
+
const rawRestart = findNumberingLevelDefinition(
|
|
18609
|
+
numbering,
|
|
18610
|
+
numId,
|
|
18611
|
+
levelIndex
|
|
18612
|
+
)?.lvlRestart;
|
|
18613
|
+
if (rawRestart === void 0 || !Number.isFinite(rawRestart) || Math.round(rawRestart) > levelIndex) {
|
|
18614
|
+
return levelIndex - 1;
|
|
18615
|
+
}
|
|
18616
|
+
const restart = Math.round(rawRestart);
|
|
18617
|
+
return restart <= 0 ? -1 : restart - 1;
|
|
18618
|
+
};
|
|
18619
|
+
const currentRestartCeiling = restartTriggerCeiling(ilvl);
|
|
18434
18620
|
const counters = countersByNumId.get(numId) ?? [];
|
|
18435
18621
|
const sharedAbstractCounters = Number.isFinite(abstractNumId) ? abstractCountersByAbstractNumId.get(abstractNumId) ?? [] : void 0;
|
|
18436
18622
|
let parentCountersChanged = false;
|
|
18437
18623
|
for (let index = 0; index < ilvl; index += 1) {
|
|
18438
|
-
const abstractCounterValue = sharedAbstractCounters && Number.isFinite(sharedAbstractCounters[index]) ? Math.max(
|
|
18624
|
+
const abstractCounterValue = sharedAbstractCounters && Number.isFinite(sharedAbstractCounters[index]) ? Math.max(0, Math.round(sharedAbstractCounters[index])) : void 0;
|
|
18439
18625
|
if (abstractCounterValue !== void 0) {
|
|
18440
18626
|
const previousCounter = counters[index];
|
|
18441
|
-
if (!Number.isFinite(previousCounter) || Math.max(
|
|
18627
|
+
if ((!Number.isFinite(previousCounter) || Math.max(0, Math.round(previousCounter)) !== abstractCounterValue) && index <= currentRestartCeiling) {
|
|
18442
18628
|
parentCountersChanged = true;
|
|
18443
18629
|
}
|
|
18444
18630
|
counters[index] = abstractCounterValue;
|
|
@@ -18451,7 +18637,9 @@ function buildParagraphNumberingLabels(model) {
|
|
|
18451
18637
|
const currentValue = parentCountersChanged ? void 0 : counters[ilvl];
|
|
18452
18638
|
counters[ilvl] = Number.isFinite(currentValue) ? currentValue + 1 : numberingStartValue(numbering, numId, ilvl);
|
|
18453
18639
|
for (let index = ilvl + 1; index < counters.length; index += 1) {
|
|
18454
|
-
|
|
18640
|
+
if (ilvl <= restartTriggerCeiling(index)) {
|
|
18641
|
+
counters[index] = void 0;
|
|
18642
|
+
}
|
|
18455
18643
|
}
|
|
18456
18644
|
countersByNumId.set(numId, counters);
|
|
18457
18645
|
if (sharedAbstractCounters && Number.isFinite(abstractNumId)) {
|
|
@@ -18459,7 +18647,9 @@ function buildParagraphNumberingLabels(model) {
|
|
|
18459
18647
|
sharedAbstractCounters[index] = counters[index];
|
|
18460
18648
|
}
|
|
18461
18649
|
for (let index = ilvl + 1; index < sharedAbstractCounters.length; index += 1) {
|
|
18462
|
-
|
|
18650
|
+
if (ilvl <= restartTriggerCeiling(index)) {
|
|
18651
|
+
sharedAbstractCounters[index] = void 0;
|
|
18652
|
+
}
|
|
18463
18653
|
}
|
|
18464
18654
|
abstractCountersByAbstractNumId.set(
|
|
18465
18655
|
abstractNumId,
|
|
@@ -18469,12 +18659,8 @@ function buildParagraphNumberingLabels(model) {
|
|
|
18469
18659
|
const label = template.replaceAll(/%(\d+)/g, (_, rawLevel) => {
|
|
18470
18660
|
const levelIndex = Math.max(0, Number(rawLevel) - 1);
|
|
18471
18661
|
const levelValue = counters[levelIndex];
|
|
18472
|
-
const safeValue = Number.isFinite(levelValue) ? Math.max(
|
|
18473
|
-
const levelFormat = findNumberingLevelDefinition(
|
|
18474
|
-
numbering,
|
|
18475
|
-
numId,
|
|
18476
|
-
levelIndex
|
|
18477
|
-
)?.format;
|
|
18662
|
+
const safeValue = Number.isFinite(levelValue) ? Math.max(0, Math.round(levelValue)) : numberingStartValue(numbering, numId, levelIndex);
|
|
18663
|
+
const levelFormat = level?.isLgl ? "decimal" : findNumberingLevelDefinition(numbering, numId, levelIndex)?.format;
|
|
18478
18664
|
return formatNumberingCounter(levelFormat, safeValue);
|
|
18479
18665
|
});
|
|
18480
18666
|
if (!label || label.trim().length === 0) {
|