office-viewer 0.3.15 → 0.3.16

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/esm/Word.d.ts CHANGED
@@ -170,6 +170,10 @@ export default class Word implements OfficeViewer {
170
170
  currentParagraph: Paragraph;
171
171
  footNotes: Record<string, Note>;
172
172
  endNotes: Record<string, Note>;
173
+ /**
174
+ * 脚注/尾注 id 到显示序号的映射,key 为 type+'-'+id,value 为从 1 开始的序号
175
+ */
176
+ noteIndexMap: Record<string, number>;
173
177
  /**
174
178
  * 当前页码
175
179
  */
package/esm/Word.js CHANGED
@@ -77,6 +77,10 @@ var Word = /** @class */ (function () {
77
77
  this.wrapClassName = 'docx-viewer-wrapper';
78
78
  this.footNotes = {};
79
79
  this.endNotes = {};
80
+ /**
81
+ * 脚注/尾注 id 到显示序号的映射,key 为 type+'-'+id,value 为从 1 开始的序号
82
+ */
83
+ this.noteIndexMap = {};
80
84
  this.inited = false;
81
85
  /**
82
86
  * 分页标记,如果为 true,那么在渲染的时候会强制分页
@@ -280,6 +284,29 @@ var Word = /** @class */ (function () {
280
284
  }
281
285
  finally { if (e_6) throw e_6.error; }
282
286
  }
287
+ // Fallback: some docx files declare footnotes/endnotes via relationships
288
+ // rather than ContentTypes overrides (e.g., Word-generated files)
289
+ if (Object.keys(this.footNotes).length === 0 &&
290
+ this.parser.fileExists('/word/footnotes.xml')) {
291
+ this.footNotes = parseFootnotes(this, this.parser.getXML('/word/footnotes.xml'));
292
+ }
293
+ if (Object.keys(this.endNotes).length === 0 &&
294
+ this.parser.fileExists('/word/endnotes.xml')) {
295
+ this.endNotes = parseEndnotes(this, this.parser.getXML('/word/endnotes.xml'));
296
+ }
297
+ // 建立序号映射,供正文引用渲染使用
298
+ var fnIndex = 1;
299
+ for (var id in this.footNotes) {
300
+ if (id !== '0' && id !== '-1' && !this.footNotes[id].isEmpty()) {
301
+ this.noteIndexMap['footnote-' + id] = fnIndex++;
302
+ }
303
+ }
304
+ var enIndex = 1;
305
+ for (var id in this.endNotes) {
306
+ if (id !== '0' && id !== '-1' && !this.endNotes[id].isEmpty()) {
307
+ this.noteIndexMap['endnote-' + id] = enIndex++;
308
+ }
309
+ }
283
310
  };
284
311
  /**
285
312
  * 获取全局关系
@@ -446,8 +473,14 @@ var Word = /** @class */ (function () {
446
473
  return [];
447
474
  }
448
475
  var classNames = [this.getStyleIdDisplayName(stylId)];
476
+ if (stylId.match(/^[a-zA-Z]+[a-zA-Z0-9\-\_]*$/)) {
477
+ classNames.push('docx-' + stylId);
478
+ }
449
479
  if (style.basedOn) {
450
480
  classNames.unshift(this.getStyleIdDisplayName(style.basedOn));
481
+ if (style.basedOn.match(/^[a-zA-Z]+[a-zA-Z0-9\-\_]*$/)) {
482
+ classNames.push('docx-' + style.basedOn);
483
+ }
451
484
  }
452
485
  return classNames;
453
486
  };
@@ -492,6 +525,7 @@ var Word = /** @class */ (function () {
492
525
  */
493
526
  Word.prototype.addClass = function (element, className) {
494
527
  element.classList.add("".concat(this.getClassPrefix(), "-").concat(className));
528
+ element.classList.add("docx-".concat(className));
495
529
  };
496
530
  /**
497
531
  * 更新页面中的变量,这个要在 render 后运行
@@ -8,5 +8,6 @@ export type NoteChild = Paragraph | Table;
8
8
  export declare class Note {
9
9
  children: NoteChild[];
10
10
  addChild(child: NoteChild): void;
11
+ isEmpty(): boolean;
11
12
  static fromXML(word: Word, element: Element): Note;
12
13
  }
@@ -12,6 +12,9 @@ var Note = /** @class */ (function () {
12
12
  Note.prototype.addChild = function (child) {
13
13
  this.children.push(child);
14
14
  };
15
+ Note.prototype.isEmpty = function () {
16
+ return this.children.length === 0;
17
+ };
15
18
  Note.fromXML = function (word, element) {
16
19
  var e_1, _a;
17
20
  var note = new Note();
@@ -23,7 +23,12 @@ export declare class Text {
23
23
  text: string;
24
24
  constructor(text: string | number);
25
25
  }
26
- type RunChild = Break | Drawing | Text | Tab | Pict | Ruby | InstrText | Sym | SoftHyphen | Separator | NoBreakHyphen;
26
+ export declare class FootnoteRef {
27
+ id: string;
28
+ type: 'footnote' | 'endnote';
29
+ constructor(id: string, type: 'footnote' | 'endnote');
30
+ }
31
+ type RunChild = Break | Drawing | Text | Tab | Pict | Ruby | InstrText | Sym | SoftHyphen | Separator | NoBreakHyphen | FootnoteRef;
27
32
  export declare class Run {
28
33
  properties: RunPr;
29
34
  children: RunChild[];
@@ -19,6 +19,13 @@ var Text = /** @class */ (function () {
19
19
  }
20
20
  return Text;
21
21
  }());
22
+ var FootnoteRef = /** @class */ (function () {
23
+ function FootnoteRef(id, type) {
24
+ this.id = id;
25
+ this.type = type;
26
+ }
27
+ return FootnoteRef;
28
+ }());
22
29
  var Run = /** @class */ (function () {
23
30
  function Run() {
24
31
  this.properties = {};
@@ -96,6 +103,12 @@ var Run = /** @class */ (function () {
96
103
  case 'w:noBreakHyphen':
97
104
  run.addChild(new NoBreakHyphen());
98
105
  break;
106
+ case 'w:footnoteReference':
107
+ run.addChild(new FootnoteRef(child.getAttribute('w:id') || '', 'footnote'));
108
+ break;
109
+ case 'w:endnoteReference':
110
+ run.addChild(new FootnoteRef(child.getAttribute('w:id') || '', 'endnote'));
111
+ break;
99
112
  case 'w:separator':
100
113
  run.addChild(new Separator());
101
114
  break;
@@ -119,4 +132,4 @@ var Run = /** @class */ (function () {
119
132
  return Run;
120
133
  }());
121
134
 
122
- export { Run, Text };
135
+ export { FootnoteRef, Run, Text };
@@ -10,12 +10,23 @@ import renderTable from './renderTable.js';
10
10
  */
11
11
  function renderNote(word, noteRoot, type, id, note) {
12
12
  var e_1, _a;
13
+ var _b;
13
14
  var noteChild = note.children;
14
15
  var noteElement = createElement('div');
16
+ noteElement.style.display = 'flex';
17
+ noteElement.style.alignItems = 'baseline';
15
18
  var mark = createElement('a');
16
19
  var fName = type + '-' + id;
17
20
  mark.name = fName;
18
21
  mark.id = fName;
22
+ var index = (_b = word.noteIndexMap[fName]) !== null && _b !== void 0 ? _b : id;
23
+ var indexAnchor = createElement('a');
24
+ indexAnchor.style.flexShrink = '0';
25
+ indexAnchor.style.marginRight = '0.3em';
26
+ indexAnchor.style.textDecoration = 'none';
27
+ indexAnchor.textContent = '[' + String(index) + ']';
28
+ noteElement.appendChild(mark);
29
+ noteElement.appendChild(indexAnchor);
19
30
  noteRoot.appendChild(noteElement);
20
31
  try {
21
32
  for (var noteChild_1 = __values(noteChild), noteChild_1_1 = noteChild_1.next(); !noteChild_1_1.done; noteChild_1_1 = noteChild_1.next()) {
@@ -58,11 +69,19 @@ function renderNotes(word) {
58
69
  var noteRoot = createElement('div');
59
70
  if (hasNote(word.footNotes)) {
60
71
  for (var fId in word.footNotes) {
72
+ if (fId === '0' || fId === '-1')
73
+ continue;
74
+ if (word.footNotes[fId].isEmpty())
75
+ continue;
61
76
  renderNote(word, noteRoot, 'footnote', fId, word.footNotes[fId]);
62
77
  }
63
78
  }
64
79
  if (hasNote(word.endNotes)) {
65
80
  for (var fId in word.endNotes || {}) {
81
+ if (fId === '0' || fId === '-1')
82
+ continue;
83
+ if (word.endNotes[fId].isEmpty())
84
+ continue;
66
85
  renderNote(word, noteRoot, 'endnote', fId, word.endNotes[fId]);
67
86
  }
68
87
  }
@@ -1,7 +1,7 @@
1
1
  import { __values } from 'tslib';
2
2
  import { renderBr } from './renderBr.js';
3
3
  import { createElement, applyStyle, appendChild } from '../../util/dom.js';
4
- import { Text } from '../../openxml/word/Run.js';
4
+ import { Text, FootnoteRef } from '../../openxml/word/Run.js';
5
5
  import { Break } from '../../openxml/word/Break.js';
6
6
  import { Drawing } from '../../openxml/drawing/Drawing.js';
7
7
  import { renderDrawing } from './renderDrawing.js';
@@ -127,6 +127,22 @@ function renderRun(word, run, paragraph, inFldChar, inHeader) {
127
127
  else if (child instanceof Separator) {
128
128
  appendChild(span, renderSeparator());
129
129
  }
130
+ else if (child instanceof FootnoteRef) {
131
+ var target = child.type + '-' + child.id;
132
+ var displayIndex = word.noteIndexMap[target];
133
+ // 如果脚注内容为空(不在映射中),不渲染引用
134
+ if (displayIndex == null)
135
+ break;
136
+ var anchor = createElement('a');
137
+ anchor.href = '#' + target;
138
+ anchor.style.verticalAlign = 'super';
139
+ anchor.style.fontSize = '0.75em';
140
+ anchor.style.textDecoration = 'none';
141
+ anchor.dataset.noteId = child.id;
142
+ anchor.dataset.noteType = child.type;
143
+ anchor.textContent = '[' + String(displayIndex) + ']';
144
+ appendChild(span, anchor);
145
+ }
130
146
  else {
131
147
  console.warn('unknown child', child);
132
148
  }
package/lib/Word.d.ts CHANGED
@@ -170,6 +170,10 @@ export default class Word implements OfficeViewer {
170
170
  currentParagraph: Paragraph;
171
171
  footNotes: Record<string, Note>;
172
172
  endNotes: Record<string, Note>;
173
+ /**
174
+ * 脚注/尾注 id 到显示序号的映射,key 为 type+'-'+id,value 为从 1 开始的序号
175
+ */
176
+ noteIndexMap: Record<string, number>;
173
177
  /**
174
178
  * 当前页码
175
179
  */
package/lib/Word.js CHANGED
@@ -81,6 +81,10 @@ var Word = /** @class */ (function () {
81
81
  this.wrapClassName = 'docx-viewer-wrapper';
82
82
  this.footNotes = {};
83
83
  this.endNotes = {};
84
+ /**
85
+ * 脚注/尾注 id 到显示序号的映射,key 为 type+'-'+id,value 为从 1 开始的序号
86
+ */
87
+ this.noteIndexMap = {};
84
88
  this.inited = false;
85
89
  /**
86
90
  * 分页标记,如果为 true,那么在渲染的时候会强制分页
@@ -284,6 +288,29 @@ var Word = /** @class */ (function () {
284
288
  }
285
289
  finally { if (e_6) throw e_6.error; }
286
290
  }
291
+ // Fallback: some docx files declare footnotes/endnotes via relationships
292
+ // rather than ContentTypes overrides (e.g., Word-generated files)
293
+ if (Object.keys(this.footNotes).length === 0 &&
294
+ this.parser.fileExists('/word/footnotes.xml')) {
295
+ this.footNotes = Footnotes.parseFootnotes(this, this.parser.getXML('/word/footnotes.xml'));
296
+ }
297
+ if (Object.keys(this.endNotes).length === 0 &&
298
+ this.parser.fileExists('/word/endnotes.xml')) {
299
+ this.endNotes = parseEndnotes.parseEndnotes(this, this.parser.getXML('/word/endnotes.xml'));
300
+ }
301
+ // 建立序号映射,供正文引用渲染使用
302
+ var fnIndex = 1;
303
+ for (var id in this.footNotes) {
304
+ if (id !== '0' && id !== '-1' && !this.footNotes[id].isEmpty()) {
305
+ this.noteIndexMap['footnote-' + id] = fnIndex++;
306
+ }
307
+ }
308
+ var enIndex = 1;
309
+ for (var id in this.endNotes) {
310
+ if (id !== '0' && id !== '-1' && !this.endNotes[id].isEmpty()) {
311
+ this.noteIndexMap['endnote-' + id] = enIndex++;
312
+ }
313
+ }
287
314
  };
288
315
  /**
289
316
  * 获取全局关系
@@ -450,8 +477,14 @@ var Word = /** @class */ (function () {
450
477
  return [];
451
478
  }
452
479
  var classNames = [this.getStyleIdDisplayName(stylId)];
480
+ if (stylId.match(/^[a-zA-Z]+[a-zA-Z0-9\-\_]*$/)) {
481
+ classNames.push('docx-' + stylId);
482
+ }
453
483
  if (style.basedOn) {
454
484
  classNames.unshift(this.getStyleIdDisplayName(style.basedOn));
485
+ if (style.basedOn.match(/^[a-zA-Z]+[a-zA-Z0-9\-\_]*$/)) {
486
+ classNames.push('docx-' + style.basedOn);
487
+ }
455
488
  }
456
489
  return classNames;
457
490
  };
@@ -496,6 +529,7 @@ var Word = /** @class */ (function () {
496
529
  */
497
530
  Word.prototype.addClass = function (element, className) {
498
531
  element.classList.add("".concat(this.getClassPrefix(), "-").concat(className));
532
+ element.classList.add("docx-".concat(className));
499
533
  };
500
534
  /**
501
535
  * 更新页面中的变量,这个要在 render 后运行
@@ -13,4 +13,4 @@ import { PackageParser } from './package/PackageParser';
13
13
  * @param parser 文件解析器,支持 zip 和 xml 两种,也可以扩展
14
14
  * @returns OfficeViewer 实例
15
15
  */
16
- export declare function createOfficeViewer(docFile: ArrayBuffer, renderOptions?: Partial<RenderOptions>, fileName?: string, parser?: PackageParser): Promise<Word | UnSupport | Excel>;
16
+ export declare function createOfficeViewer(docFile: ArrayBuffer, renderOptions?: Partial<RenderOptions>, fileName?: string, parser?: PackageParser): Promise<Word | Excel | UnSupport>;
@@ -2,5 +2,5 @@
2
2
  * 内置函数列表
3
3
  */
4
4
  export declare const builtinFunctions: readonly ["ABS", "ACCRINT", "ACCRINTM", "ACOS", "ACOSH", "ACOT", "ACOTH", "ADDRESS", "AGGREGATE", "AMORDEGRC", "AMORLINC", "AND", "ARABIC", "AREAS", "ARRAYTOTEXT", "ASC", "ASIN", "ASINH", "ATAN", "ATAN2", "ATANH", "AVEDEV", "AVERAGE", "AVERAGEA", "AVERAGEIF", "AVERAGEIFS", "BAHTTEXT", "BASE", "BESSELI", "BESSELJ", "BESSELK", "BESSELY", "BETA.DIST", "BETA.INV", "BETADIST", "BETAINV", "BIN2DEC", "BIN2HEX", "BIN2OCT", "BINOM.DIST", "BINOM.DIST.RANGE", "BINOM.INV", "BINOMDIST", "BITAND", "BITLSHIFT", "BITOR", "BITRSHIFT", "BITXOR", "CALL", "CEILING", "CEILING.MATH", "CEILING.PRECISE", "CELL", "CHAR", "CHIDIST", "CHIINV", "CHISQ.DIST", "CHISQ.DIST.RT", "CHISQ.INV", "CHISQ.INV.RT", "CHISQ.TEST", "CHITEST", "CLEAN", "CODE", "COLUMN", "COLUMNS", "COMBIN", "COMBINA", "COMPLEX", "CONCAT", "CONCATENATE", "CONFIDENCE", "CONFIDENCE.NORM", "CONFIDENCE.T", "CONVERT", "CORREL", "COS", "COSH", "COT", "COTH", "COUNT", "COUNTA", "COUNTBLANK", "COUNTIF", "COUNTIFS", "COUPDAYBS", "COUPDAYS", "COUPDAYSNC", "COUPNCD", "COUPNUM", "COUPPCD", "COVAR", "COVARIANCE.P", "COVARIANCE.S", "CRITBINOM", "CSC", "CSCH", "CUBEKPIMEMBER", "CUBEMEMBER", "CUBEMEMBERPROPERTY", "CUBERANKEDMEMBER", "CUBESET", "CUBESETCOUNT", "CUBEVALUE", "CUMIPMT", "CUMPRINC", "DATE", "DATEDIF", "DATEVALUE", "DAVERAGE", "DAY", "DAYS", "DAYS360", "DB", "DBCS", "DCOUNT", "DCOUNTA", "DDB", "DEC2BIN", "DEC2HEX", "DEC2OCT", "DECIMAL", "DEGREES", "DELTA", "DEVSQ", "DGET", "DISC", "DMAX", "DMIN", "DOLLAR", "DOLLARDE", "DOLLARFR", "DPRODUCT", "DSTDEV", "DSTDEVP", "DSUM", "DURATION", "DVAR", "DVARP", "EDATE", "EFFECT", "ENCODEURL", "EOMONTH", "ERF", "ERF.PRECISE", "ERFC", "ERFC.PRECISE", "ERROR.TYPE", "EUROCONVERT", "EVEN", "EXACT", "EXP", "EXPON.DIST", "EXPONDIST", "F.DIST", "F.DIST.RT", "F.INV", "F.INV.RT", "F.TEST", "FACT", "FACTDOUBLE", "FALSE", "FDIST", "FILTER", "FILTERXML", "FIND", "FINDB", "FINV", "FISHER", "FISHERINV", "FIXED", "FLOOR", "FLOOR.MATH", "FLOOR.PRECISE", "FORECAST", "FORECAST.ETS", "FORECAST.ETS.CONFINT", "FORECAST.ETS.SEASONALITY", "FORECAST.ETS.STAT", "FORECAST.LINEAR", "FORMULATEXT", "FREQUENCY", "FTEST", "FV", "FVSCHEDULE", "GAMMA", "GAMMA.DIST", "GAMMA.INV", "GAMMADIST", "GAMMAINV", "GAMMALN", "GAMMALN.PRECISE", "GAUSS", "GCD", "GEOMEAN", "GESTEP", "GETPIVOTDATA", "GROWTH", "HARMEAN", "HEX2BIN", "HEX2DEC", "HEX2OCT", "HLOOKUP", "HOUR", "HYPERLINK", "HYPGEOM.DIST", "HYPGEOMDIST", "IF", "IFERROR", "IFNA", "IFS", "IMABS", "IMAGINARY", "IMARGUMENT", "IMCONJUGATE", "IMCOS", "IMCOSH", "IMCOT", "IMCSC", "IMCSCH", "IMDIV", "IMEXP", "IMLN", "IMLOG10", "IMLOG2", "IMPOWER", "IMPRODUCT", "IMREAL", "IMSEC", "IMSECH", "IMSIN", "IMSINH", "IMSQRT", "IMSUB", "IMSUM", "IMTAN", "INFO", "INT", "INTERCEPT", "INTRATE", "IPMT", "IRR", "ISBLANK", "ISERR", "ISERROR", "ISEVEN", "ISFORMULA", "ISLOGICAL", "ISNA", "ISNONTEXT", "ISNUMBER", "ISO.CEILING", "ISODD", "ISOWEEKNUM", "ISPMT", "ISREF", "ISTEXT", "JIS", "KURT", "LARGE", "LCM", "LEFT", "LEFTB", "LEN", "LENB", "LET", "LINEST", "LN", "LOG", "LOG10", "LOGEST", "LOGINV", "LOGNORM.DIST", "LOGNORM.INV", "LOGNORMDIST", "LOOKUP", "LOWER", "MATCH", "MAX", "MAXA", "MAXIFS", "MDETERM", "MDURATION", "MEDIAN", "MID", "MIDB", "MIN", "MINA", "MINIFS", "MINUTE", "MINVERSE", "MIRR", "MMULT", "MOD", "MODE", "MODE.MULT", "MODE.SNGL", "MONTH", "MROUND", "MULTINOMIAL", "MUNIT", "N", "NA", "NEGBINOM.DIST", "NEGBINOMDIST", "NETWORKDAYS", "NETWORKDAYS.INTL", "NOMINAL", "NORM.DIST", "NORM.INV", "NORM.S.DIST", "NORM.S.INV", "NORMDIST", "NORMINV", "NORMSDIST", "NORMSINV", "NOT", "NOW", "NPER", "NPV", "NUMBERVALUE", "OCT2BIN", "OCT2DEC", "OCT2HEX", "ODD", "ODDFPRICE", "ODDFYIELD", "ODDLPRICE", "ODDLYIELD", "OR", "PDURATION", "PEARSON", "PERCENTILE", "PERCENTILE.EXC", "PERCENTILE.INC", "PERCENTRANK", "PERCENTRANK.EXC", "PERCENTRANK.INC", "PERMUT", "PERMUTATIONA", "PHI", "PHONETIC", "PI", "PMT", "POISSON", "POISSON.DIST", "POWER", "PPMT", "PRICE", "PRICEDISC", "PRICEMAT", "PROB", "PRODUCT", "PROPER", "PV", "QUARTILE", "QUARTILE.EXC", "QUARTILE.INC", "QUOTIENT", "RADIANS", "RAND", "RANDARRAY", "RANDBETWEEN", "RANK", "RANK.AVG", "RANK.EQ", "RATE", "RECEIVED", "REGISTER.ID", "REPLACE", "REPLACEB", "REPT", "RIGHT", "RIGHTB", "ROMAN", "ROUND", "ROUNDDOWN", "ROUNDUP", "ROW", "ROWS", "RRI", "RSQ", "RTD", "SEARCH", "SEARCHB", "SEC", "SECH", "SECOND", "SEQUENCE", "SERIESSUM", "SHEET", "SHEETS", "SIGN", "SIN", "SINH", "SKEW", "SKEW.P", "SLN", "SLOPE", "SMALL", "SORT", "SORTBY", "SQRT", "SQRTPI", "STANDARDIZE", "STDEV", "STDEV.P", "STDEV.S", "STDEVA", "STDEVP", "STDEVPA", "STEYX", "SUBSTITUTE", "SUBTOTAL", "SUM", "SUMIF", "SUMIFS", "SUMPRODUCT", "SUMSQ", "SUMX2MY2", "SUMX2PY2", "SUMXMY2", "SWITCH", "SYD", "T", "T.DIST", "T.DIST.2T", "T.DIST.RT", "T.INV", "T.INV.2T", "T.TEST", "TAN", "TANH", "TBILLEQ", "TBILLPRICE", "TBILLYIELD", "TDIST", "TEXT", "TEXTJOIN", "TIME", "TIMEVALUE", "TINV", "TODAY", "TRANSPOSE", "TREND", "TRIM", "TRIMMEAN", "TRUE", "TRUNC", "TTEST", "TYPE", "UNICHAR", "UNICODE", "UNIQUE", "UPPER", "VALUE", "VALUETOTEXT", "VAR", "VAR.P", "VAR.S", "VARA", "VARP", "VARPA", "VDB", "VLOOKUP", "WEBSERVICE", "WEEKDAY", "WEEKNUM", "WEIBULL", "WEIBULL.DIST", "WORKDAY", "WORKDAY.INTL", "XIRR", "XLOOKUP", "XMATCH", "XNPV", "XOR", "YEAR", "YEARFRAC", "YIELD", "YIELDDISC", "YIELDMAT", "Z.TEST", "ZTEST"];
5
- export declare const builtinFunctionSet: Set<"NA" | "SUM" | "SHEET" | "CELL" | "CONCAT" | "ABS" | "ACCRINT" | "ACCRINTM" | "ACOS" | "ACOSH" | "ACOT" | "ACOTH" | "ADDRESS" | "AGGREGATE" | "AMORDEGRC" | "AMORLINC" | "AND" | "ARABIC" | "AREAS" | "ARRAYTOTEXT" | "ASC" | "ASIN" | "ASINH" | "ATAN" | "ATAN2" | "ATANH" | "AVEDEV" | "AVERAGE" | "AVERAGEA" | "AVERAGEIF" | "AVERAGEIFS" | "BAHTTEXT" | "BASE" | "BESSELI" | "BESSELJ" | "BESSELK" | "BESSELY" | "BETA.DIST" | "BETA.INV" | "BETADIST" | "BETAINV" | "BIN2DEC" | "BIN2HEX" | "BIN2OCT" | "BINOM.DIST" | "BINOM.DIST.RANGE" | "BINOM.INV" | "BINOMDIST" | "BITAND" | "BITLSHIFT" | "BITOR" | "BITRSHIFT" | "BITXOR" | "CALL" | "CEILING" | "CEILING.MATH" | "CEILING.PRECISE" | "CHAR" | "CHIDIST" | "CHIINV" | "CHISQ.DIST" | "CHISQ.DIST.RT" | "CHISQ.INV" | "CHISQ.INV.RT" | "CHISQ.TEST" | "CHITEST" | "CLEAN" | "CODE" | "COLUMN" | "COLUMNS" | "COMBIN" | "COMBINA" | "COMPLEX" | "CONCATENATE" | "CONFIDENCE" | "CONFIDENCE.NORM" | "CONFIDENCE.T" | "CONVERT" | "CORREL" | "COS" | "COSH" | "COT" | "COTH" | "COUNT" | "COUNTA" | "COUNTBLANK" | "COUNTIF" | "COUNTIFS" | "COUPDAYBS" | "COUPDAYS" | "COUPDAYSNC" | "COUPNCD" | "COUPNUM" | "COUPPCD" | "COVAR" | "COVARIANCE.P" | "COVARIANCE.S" | "CRITBINOM" | "CSC" | "CSCH" | "CUBEKPIMEMBER" | "CUBEMEMBER" | "CUBEMEMBERPROPERTY" | "CUBERANKEDMEMBER" | "CUBESET" | "CUBESETCOUNT" | "CUBEVALUE" | "CUMIPMT" | "CUMPRINC" | "DATE" | "DATEDIF" | "DATEVALUE" | "DAVERAGE" | "DAY" | "DAYS" | "DAYS360" | "DB" | "DBCS" | "DCOUNT" | "DCOUNTA" | "DDB" | "DEC2BIN" | "DEC2HEX" | "DEC2OCT" | "DECIMAL" | "DEGREES" | "DELTA" | "DEVSQ" | "DGET" | "DISC" | "DMAX" | "DMIN" | "DOLLAR" | "DOLLARDE" | "DOLLARFR" | "DPRODUCT" | "DSTDEV" | "DSTDEVP" | "DSUM" | "DURATION" | "DVAR" | "DVARP" | "EDATE" | "EFFECT" | "ENCODEURL" | "EOMONTH" | "ERF" | "ERF.PRECISE" | "ERFC" | "ERFC.PRECISE" | "ERROR.TYPE" | "EUROCONVERT" | "EVEN" | "EXACT" | "EXP" | "EXPON.DIST" | "EXPONDIST" | "F.DIST" | "F.DIST.RT" | "F.INV" | "F.INV.RT" | "F.TEST" | "FACT" | "FACTDOUBLE" | "FALSE" | "FDIST" | "FILTER" | "FILTERXML" | "FIND" | "FINDB" | "FINV" | "FISHER" | "FISHERINV" | "FIXED" | "FLOOR" | "FLOOR.MATH" | "FLOOR.PRECISE" | "FORECAST" | "FORECAST.ETS" | "FORECAST.ETS.CONFINT" | "FORECAST.ETS.SEASONALITY" | "FORECAST.ETS.STAT" | "FORECAST.LINEAR" | "FORMULATEXT" | "FREQUENCY" | "FTEST" | "FV" | "FVSCHEDULE" | "GAMMA" | "GAMMA.DIST" | "GAMMA.INV" | "GAMMADIST" | "GAMMAINV" | "GAMMALN" | "GAMMALN.PRECISE" | "GAUSS" | "GCD" | "GEOMEAN" | "GESTEP" | "GETPIVOTDATA" | "GROWTH" | "HARMEAN" | "HEX2BIN" | "HEX2DEC" | "HEX2OCT" | "HLOOKUP" | "HOUR" | "HYPERLINK" | "HYPGEOM.DIST" | "HYPGEOMDIST" | "IF" | "IFERROR" | "IFNA" | "IFS" | "IMABS" | "IMAGINARY" | "IMARGUMENT" | "IMCONJUGATE" | "IMCOS" | "IMCOSH" | "IMCOT" | "IMCSC" | "IMCSCH" | "IMDIV" | "IMEXP" | "IMLN" | "IMLOG10" | "IMLOG2" | "IMPOWER" | "IMPRODUCT" | "IMREAL" | "IMSEC" | "IMSECH" | "IMSIN" | "IMSINH" | "IMSQRT" | "IMSUB" | "IMSUM" | "IMTAN" | "INFO" | "INT" | "INTERCEPT" | "INTRATE" | "IPMT" | "IRR" | "ISBLANK" | "ISERR" | "ISERROR" | "ISEVEN" | "ISFORMULA" | "ISLOGICAL" | "ISNA" | "ISNONTEXT" | "ISNUMBER" | "ISO.CEILING" | "ISODD" | "ISOWEEKNUM" | "ISPMT" | "ISREF" | "ISTEXT" | "JIS" | "KURT" | "LARGE" | "LCM" | "LEFT" | "LEFTB" | "LEN" | "LENB" | "LET" | "LINEST" | "LN" | "LOG" | "LOG10" | "LOGEST" | "LOGINV" | "LOGNORM.DIST" | "LOGNORM.INV" | "LOGNORMDIST" | "LOOKUP" | "LOWER" | "MATCH" | "MAX" | "MAXA" | "MAXIFS" | "MDETERM" | "MDURATION" | "MEDIAN" | "MID" | "MIDB" | "MIN" | "MINA" | "MINIFS" | "MINUTE" | "MINVERSE" | "MIRR" | "MMULT" | "MOD" | "MODE" | "MODE.MULT" | "MODE.SNGL" | "MONTH" | "MROUND" | "MULTINOMIAL" | "MUNIT" | "N" | "NEGBINOM.DIST" | "NEGBINOMDIST" | "NETWORKDAYS" | "NETWORKDAYS.INTL" | "NOMINAL" | "NORM.DIST" | "NORM.INV" | "NORM.S.DIST" | "NORM.S.INV" | "NORMDIST" | "NORMINV" | "NORMSDIST" | "NORMSINV" | "NOT" | "NOW" | "NPER" | "NPV" | "NUMBERVALUE" | "OCT2BIN" | "OCT2DEC" | "OCT2HEX" | "ODD" | "ODDFPRICE" | "ODDFYIELD" | "ODDLPRICE" | "ODDLYIELD" | "OR" | "PDURATION" | "PEARSON" | "PERCENTILE" | "PERCENTILE.EXC" | "PERCENTILE.INC" | "PERCENTRANK" | "PERCENTRANK.EXC" | "PERCENTRANK.INC" | "PERMUT" | "PERMUTATIONA" | "PHI" | "PHONETIC" | "PI" | "PMT" | "POISSON" | "POISSON.DIST" | "POWER" | "PPMT" | "PRICE" | "PRICEDISC" | "PRICEMAT" | "PROB" | "PRODUCT" | "PROPER" | "PV" | "QUARTILE" | "QUARTILE.EXC" | "QUARTILE.INC" | "QUOTIENT" | "RADIANS" | "RAND" | "RANDARRAY" | "RANDBETWEEN" | "RANK" | "RANK.AVG" | "RANK.EQ" | "RATE" | "RECEIVED" | "REGISTER.ID" | "REPLACE" | "REPLACEB" | "REPT" | "RIGHT" | "RIGHTB" | "ROMAN" | "ROUND" | "ROUNDDOWN" | "ROUNDUP" | "ROW" | "ROWS" | "RRI" | "RSQ" | "RTD" | "SEARCH" | "SEARCHB" | "SEC" | "SECH" | "SECOND" | "SEQUENCE" | "SERIESSUM" | "SHEETS" | "SIGN" | "SIN" | "SINH" | "SKEW" | "SKEW.P" | "SLN" | "SLOPE" | "SMALL" | "SORT" | "SORTBY" | "SQRT" | "SQRTPI" | "STANDARDIZE" | "STDEV" | "STDEV.P" | "STDEV.S" | "STDEVA" | "STDEVP" | "STDEVPA" | "STEYX" | "SUBSTITUTE" | "SUBTOTAL" | "SUMIF" | "SUMIFS" | "SUMPRODUCT" | "SUMSQ" | "SUMX2MY2" | "SUMX2PY2" | "SUMXMY2" | "SWITCH" | "SYD" | "T" | "T.DIST" | "T.DIST.2T" | "T.DIST.RT" | "T.INV" | "T.INV.2T" | "T.TEST" | "TAN" | "TANH" | "TBILLEQ" | "TBILLPRICE" | "TBILLYIELD" | "TDIST" | "TEXT" | "TEXTJOIN" | "TIME" | "TIMEVALUE" | "TINV" | "TODAY" | "TRANSPOSE" | "TREND" | "TRIM" | "TRIMMEAN" | "TRUE" | "TRUNC" | "TTEST" | "TYPE" | "UNICHAR" | "UNICODE" | "UNIQUE" | "UPPER" | "VALUE" | "VALUETOTEXT" | "VAR" | "VAR.P" | "VAR.S" | "VARA" | "VARP" | "VARPA" | "VDB" | "VLOOKUP" | "WEBSERVICE" | "WEEKDAY" | "WEEKNUM" | "WEIBULL" | "WEIBULL.DIST" | "WORKDAY" | "WORKDAY.INTL" | "XIRR" | "XLOOKUP" | "XMATCH" | "XNPV" | "XOR" | "YEAR" | "YEARFRAC" | "YIELD" | "YIELDDISC" | "YIELDMAT" | "Z.TEST" | "ZTEST">;
5
+ export declare const builtinFunctionSet: Set<"SUM" | "NA" | "SHEET" | "CELL" | "CONCAT" | "ABS" | "ACCRINT" | "ACCRINTM" | "ACOS" | "ACOSH" | "ACOT" | "ACOTH" | "ADDRESS" | "AGGREGATE" | "AMORDEGRC" | "AMORLINC" | "AND" | "ARABIC" | "AREAS" | "ARRAYTOTEXT" | "ASC" | "ASIN" | "ASINH" | "ATAN" | "ATAN2" | "ATANH" | "AVEDEV" | "AVERAGE" | "AVERAGEA" | "AVERAGEIF" | "AVERAGEIFS" | "BAHTTEXT" | "BASE" | "BESSELI" | "BESSELJ" | "BESSELK" | "BESSELY" | "BETA.DIST" | "BETA.INV" | "BETADIST" | "BETAINV" | "BIN2DEC" | "BIN2HEX" | "BIN2OCT" | "BINOM.DIST" | "BINOM.DIST.RANGE" | "BINOM.INV" | "BINOMDIST" | "BITAND" | "BITLSHIFT" | "BITOR" | "BITRSHIFT" | "BITXOR" | "CALL" | "CEILING" | "CEILING.MATH" | "CEILING.PRECISE" | "CHAR" | "CHIDIST" | "CHIINV" | "CHISQ.DIST" | "CHISQ.DIST.RT" | "CHISQ.INV" | "CHISQ.INV.RT" | "CHISQ.TEST" | "CHITEST" | "CLEAN" | "CODE" | "COLUMN" | "COLUMNS" | "COMBIN" | "COMBINA" | "COMPLEX" | "CONCATENATE" | "CONFIDENCE" | "CONFIDENCE.NORM" | "CONFIDENCE.T" | "CONVERT" | "CORREL" | "COS" | "COSH" | "COT" | "COTH" | "COUNT" | "COUNTA" | "COUNTBLANK" | "COUNTIF" | "COUNTIFS" | "COUPDAYBS" | "COUPDAYS" | "COUPDAYSNC" | "COUPNCD" | "COUPNUM" | "COUPPCD" | "COVAR" | "COVARIANCE.P" | "COVARIANCE.S" | "CRITBINOM" | "CSC" | "CSCH" | "CUBEKPIMEMBER" | "CUBEMEMBER" | "CUBEMEMBERPROPERTY" | "CUBERANKEDMEMBER" | "CUBESET" | "CUBESETCOUNT" | "CUBEVALUE" | "CUMIPMT" | "CUMPRINC" | "DATE" | "DATEDIF" | "DATEVALUE" | "DAVERAGE" | "DAY" | "DAYS" | "DAYS360" | "DB" | "DBCS" | "DCOUNT" | "DCOUNTA" | "DDB" | "DEC2BIN" | "DEC2HEX" | "DEC2OCT" | "DECIMAL" | "DEGREES" | "DELTA" | "DEVSQ" | "DGET" | "DISC" | "DMAX" | "DMIN" | "DOLLAR" | "DOLLARDE" | "DOLLARFR" | "DPRODUCT" | "DSTDEV" | "DSTDEVP" | "DSUM" | "DURATION" | "DVAR" | "DVARP" | "EDATE" | "EFFECT" | "ENCODEURL" | "EOMONTH" | "ERF" | "ERF.PRECISE" | "ERFC" | "ERFC.PRECISE" | "ERROR.TYPE" | "EUROCONVERT" | "EVEN" | "EXACT" | "EXP" | "EXPON.DIST" | "EXPONDIST" | "F.DIST" | "F.DIST.RT" | "F.INV" | "F.INV.RT" | "F.TEST" | "FACT" | "FACTDOUBLE" | "FALSE" | "FDIST" | "FILTER" | "FILTERXML" | "FIND" | "FINDB" | "FINV" | "FISHER" | "FISHERINV" | "FIXED" | "FLOOR" | "FLOOR.MATH" | "FLOOR.PRECISE" | "FORECAST" | "FORECAST.ETS" | "FORECAST.ETS.CONFINT" | "FORECAST.ETS.SEASONALITY" | "FORECAST.ETS.STAT" | "FORECAST.LINEAR" | "FORMULATEXT" | "FREQUENCY" | "FTEST" | "FV" | "FVSCHEDULE" | "GAMMA" | "GAMMA.DIST" | "GAMMA.INV" | "GAMMADIST" | "GAMMAINV" | "GAMMALN" | "GAMMALN.PRECISE" | "GAUSS" | "GCD" | "GEOMEAN" | "GESTEP" | "GETPIVOTDATA" | "GROWTH" | "HARMEAN" | "HEX2BIN" | "HEX2DEC" | "HEX2OCT" | "HLOOKUP" | "HOUR" | "HYPERLINK" | "HYPGEOM.DIST" | "HYPGEOMDIST" | "IF" | "IFERROR" | "IFNA" | "IFS" | "IMABS" | "IMAGINARY" | "IMARGUMENT" | "IMCONJUGATE" | "IMCOS" | "IMCOSH" | "IMCOT" | "IMCSC" | "IMCSCH" | "IMDIV" | "IMEXP" | "IMLN" | "IMLOG10" | "IMLOG2" | "IMPOWER" | "IMPRODUCT" | "IMREAL" | "IMSEC" | "IMSECH" | "IMSIN" | "IMSINH" | "IMSQRT" | "IMSUB" | "IMSUM" | "IMTAN" | "INFO" | "INT" | "INTERCEPT" | "INTRATE" | "IPMT" | "IRR" | "ISBLANK" | "ISERR" | "ISERROR" | "ISEVEN" | "ISFORMULA" | "ISLOGICAL" | "ISNA" | "ISNONTEXT" | "ISNUMBER" | "ISO.CEILING" | "ISODD" | "ISOWEEKNUM" | "ISPMT" | "ISREF" | "ISTEXT" | "JIS" | "KURT" | "LARGE" | "LCM" | "LEFT" | "LEFTB" | "LEN" | "LENB" | "LET" | "LINEST" | "LN" | "LOG" | "LOG10" | "LOGEST" | "LOGINV" | "LOGNORM.DIST" | "LOGNORM.INV" | "LOGNORMDIST" | "LOOKUP" | "LOWER" | "MATCH" | "MAX" | "MAXA" | "MAXIFS" | "MDETERM" | "MDURATION" | "MEDIAN" | "MID" | "MIDB" | "MIN" | "MINA" | "MINIFS" | "MINUTE" | "MINVERSE" | "MIRR" | "MMULT" | "MOD" | "MODE" | "MODE.MULT" | "MODE.SNGL" | "MONTH" | "MROUND" | "MULTINOMIAL" | "MUNIT" | "N" | "NEGBINOM.DIST" | "NEGBINOMDIST" | "NETWORKDAYS" | "NETWORKDAYS.INTL" | "NOMINAL" | "NORM.DIST" | "NORM.INV" | "NORM.S.DIST" | "NORM.S.INV" | "NORMDIST" | "NORMINV" | "NORMSDIST" | "NORMSINV" | "NOT" | "NOW" | "NPER" | "NPV" | "NUMBERVALUE" | "OCT2BIN" | "OCT2DEC" | "OCT2HEX" | "ODD" | "ODDFPRICE" | "ODDFYIELD" | "ODDLPRICE" | "ODDLYIELD" | "OR" | "PDURATION" | "PEARSON" | "PERCENTILE" | "PERCENTILE.EXC" | "PERCENTILE.INC" | "PERCENTRANK" | "PERCENTRANK.EXC" | "PERCENTRANK.INC" | "PERMUT" | "PERMUTATIONA" | "PHI" | "PHONETIC" | "PI" | "PMT" | "POISSON" | "POISSON.DIST" | "POWER" | "PPMT" | "PRICE" | "PRICEDISC" | "PRICEMAT" | "PROB" | "PRODUCT" | "PROPER" | "PV" | "QUARTILE" | "QUARTILE.EXC" | "QUARTILE.INC" | "QUOTIENT" | "RADIANS" | "RAND" | "RANDARRAY" | "RANDBETWEEN" | "RANK" | "RANK.AVG" | "RANK.EQ" | "RATE" | "RECEIVED" | "REGISTER.ID" | "REPLACE" | "REPLACEB" | "REPT" | "RIGHT" | "RIGHTB" | "ROMAN" | "ROUND" | "ROUNDDOWN" | "ROUNDUP" | "ROW" | "ROWS" | "RRI" | "RSQ" | "RTD" | "SEARCH" | "SEARCHB" | "SEC" | "SECH" | "SECOND" | "SEQUENCE" | "SERIESSUM" | "SHEETS" | "SIGN" | "SIN" | "SINH" | "SKEW" | "SKEW.P" | "SLN" | "SLOPE" | "SMALL" | "SORT" | "SORTBY" | "SQRT" | "SQRTPI" | "STANDARDIZE" | "STDEV" | "STDEV.P" | "STDEV.S" | "STDEVA" | "STDEVP" | "STDEVPA" | "STEYX" | "SUBSTITUTE" | "SUBTOTAL" | "SUMIF" | "SUMIFS" | "SUMPRODUCT" | "SUMSQ" | "SUMX2MY2" | "SUMX2PY2" | "SUMXMY2" | "SWITCH" | "SYD" | "T" | "T.DIST" | "T.DIST.2T" | "T.DIST.RT" | "T.INV" | "T.INV.2T" | "T.TEST" | "TAN" | "TANH" | "TBILLEQ" | "TBILLPRICE" | "TBILLYIELD" | "TDIST" | "TEXT" | "TEXTJOIN" | "TIME" | "TIMEVALUE" | "TINV" | "TODAY" | "TRANSPOSE" | "TREND" | "TRIM" | "TRIMMEAN" | "TRUE" | "TRUNC" | "TTEST" | "TYPE" | "UNICHAR" | "UNICODE" | "UNIQUE" | "UPPER" | "VALUE" | "VALUETOTEXT" | "VAR" | "VAR.P" | "VAR.S" | "VARA" | "VARP" | "VARPA" | "VDB" | "VLOOKUP" | "WEBSERVICE" | "WEEKDAY" | "WEEKNUM" | "WEIBULL" | "WEIBULL.DIST" | "WORKDAY" | "WORKDAY.INTL" | "XIRR" | "XLOOKUP" | "XMATCH" | "XNPV" | "XOR" | "YEAR" | "YEARFRAC" | "YIELD" | "YIELDDISC" | "YIELDMAT" | "Z.TEST" | "ZTEST">;
6
6
  export type FunctionName = (typeof builtinFunctions)[number];
@@ -23,7 +23,7 @@ declare const languages: {
23
23
  count: string;
24
24
  sum: string;
25
25
  };
26
- zh_CN: Record<"count" | "sum" | "average" | "customFilter.equal" | "customFilter.notEqual" | "customFilter.beginsWith" | "customFilter.notBeginsWith" | "customFilter.endsWith" | "customFilter.notEndsWith" | "customFilter.contains" | "customFilter.notContains" | "customFilter.greaterThan" | "customFilter.greaterThanOrEqual" | "customFilter.lessThan" | "customFilter.lessThanOrEqual" | "autoFilter.sortAscending" | "autoFilter.sortDescending" | "checkBox.selectAll" | "checkBox.search" | "customFilter.and" | "customFilter.or", string>;
26
+ zh_CN: Record<"autoFilter.sortAscending" | "autoFilter.sortDescending" | "checkBox.selectAll" | "checkBox.search" | "customFilter.equal" | "customFilter.notEqual" | "customFilter.greaterThan" | "customFilter.greaterThanOrEqual" | "customFilter.lessThan" | "customFilter.lessThanOrEqual" | "customFilter.beginsWith" | "customFilter.notBeginsWith" | "customFilter.endsWith" | "customFilter.notEndsWith" | "customFilter.contains" | "customFilter.notContains" | "customFilter.and" | "customFilter.or" | "average" | "count" | "sum", string>;
27
27
  };
28
28
  export type Language = keyof typeof languages;
29
29
  export declare function getTranslate(language: string): (key: EnKeys) => string;
@@ -10,7 +10,7 @@ import { HitTestResult } from '../selection/hitTest';
10
10
  export declare function mousedownColHeader(workbook: Workbook, hitTestResult: HitTestResult): {
11
11
  user: string;
12
12
  region: import("../../sheet/ViewRange").Region;
13
- selectType: "cell" | "corner" | "drawing" | "row-header" | "col-header" | "row-grid" | "col-grid";
13
+ selectType: "drawing" | "corner" | "cell" | "row-header" | "col-header" | "row-grid" | "col-grid";
14
14
  activeCell: RangeRef;
15
15
  sheetIndex: number;
16
16
  cellRanges: {
@@ -10,7 +10,7 @@ import { HitTestResult } from '../selection/hitTest';
10
10
  export declare function mousedownRowHeader(workbook: Workbook, hitTestResult: HitTestResult): {
11
11
  user: string;
12
12
  region: import("../../sheet/ViewRange").Region;
13
- selectType: "cell" | "corner" | "drawing" | "row-header" | "col-header" | "row-grid" | "col-grid";
13
+ selectType: "drawing" | "corner" | "cell" | "row-header" | "col-header" | "row-grid" | "col-grid";
14
14
  activeCell: RangeRef;
15
15
  sheetIndex: number;
16
16
  cellRanges: {
@@ -8,5 +8,6 @@ export type NoteChild = Paragraph | Table;
8
8
  export declare class Note {
9
9
  children: NoteChild[];
10
10
  addChild(child: NoteChild): void;
11
+ isEmpty(): boolean;
11
12
  static fromXML(word: Word, element: Element): Note;
12
13
  }
@@ -16,6 +16,9 @@ var Note = /** @class */ (function () {
16
16
  Note.prototype.addChild = function (child) {
17
17
  this.children.push(child);
18
18
  };
19
+ Note.prototype.isEmpty = function () {
20
+ return this.children.length === 0;
21
+ };
19
22
  Note.fromXML = function (word, element) {
20
23
  var e_1, _a;
21
24
  var note = new Note();
@@ -23,7 +23,12 @@ export declare class Text {
23
23
  text: string;
24
24
  constructor(text: string | number);
25
25
  }
26
- type RunChild = Break | Drawing | Text | Tab | Pict | Ruby | InstrText | Sym | SoftHyphen | Separator | NoBreakHyphen;
26
+ export declare class FootnoteRef {
27
+ id: string;
28
+ type: 'footnote' | 'endnote';
29
+ constructor(id: string, type: 'footnote' | 'endnote');
30
+ }
31
+ type RunChild = Break | Drawing | Text | Tab | Pict | Ruby | InstrText | Sym | SoftHyphen | Separator | NoBreakHyphen | FootnoteRef;
27
32
  export declare class Run {
28
33
  properties: RunPr;
29
34
  children: RunChild[];
@@ -23,6 +23,13 @@ var Text = /** @class */ (function () {
23
23
  }
24
24
  return Text;
25
25
  }());
26
+ var FootnoteRef = /** @class */ (function () {
27
+ function FootnoteRef(id, type) {
28
+ this.id = id;
29
+ this.type = type;
30
+ }
31
+ return FootnoteRef;
32
+ }());
26
33
  var Run = /** @class */ (function () {
27
34
  function Run() {
28
35
  this.properties = {};
@@ -100,6 +107,12 @@ var Run = /** @class */ (function () {
100
107
  case 'w:noBreakHyphen':
101
108
  run.addChild(new NoBreakHyphen.NoBreakHyphen());
102
109
  break;
110
+ case 'w:footnoteReference':
111
+ run.addChild(new FootnoteRef(child.getAttribute('w:id') || '', 'footnote'));
112
+ break;
113
+ case 'w:endnoteReference':
114
+ run.addChild(new FootnoteRef(child.getAttribute('w:id') || '', 'endnote'));
115
+ break;
103
116
  case 'w:separator':
104
117
  run.addChild(new Separator.Separator());
105
118
  break;
@@ -123,5 +136,6 @@ var Run = /** @class */ (function () {
123
136
  return Run;
124
137
  }());
125
138
 
139
+ exports.FootnoteRef = FootnoteRef;
126
140
  exports.Run = Run;
127
141
  exports.Text = Text;
@@ -20,7 +20,7 @@ export default class XMLPackageParser implements PackageParser {
20
20
  /**
21
21
  * 在 xml 下基本不用这个
22
22
  */
23
- getFileByType(filePath: string, type: 'string' | 'blob'): string | Uint8Array | Blob | null;
23
+ getFileByType(filePath: string, type: 'string' | 'blob'): string | Blob | Uint8Array | null;
24
24
  /**
25
25
  * 读取文本内容
26
26
  */
@@ -18,7 +18,7 @@ export default class ZipPackageParser implements PackageParser {
18
18
  /**
19
19
  * 根据类型读取文件
20
20
  */
21
- getFileByType(filePath: string, type?: 'string' | 'blob' | 'uint8array'): string | Uint8Array | Blob | null;
21
+ getFileByType(filePath: string, type?: 'string' | 'blob' | 'uint8array'): string | Blob | Uint8Array | null;
22
22
  /**
23
23
  * 读取文本内容
24
24
  */
@@ -2,4 +2,4 @@
2
2
  *
3
3
  * http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/ST_Jc.html
4
4
  */
5
- export declare function jcToTextAlign(jc: string): "left" | "center" | "right" | "justify";
5
+ export declare function jcToTextAlign(jc: string): "center" | "justify" | "left" | "right";
@@ -14,12 +14,23 @@ var renderTable = require('./renderTable.js');
14
14
  */
15
15
  function renderNote(word, noteRoot, type, id, note) {
16
16
  var e_1, _a;
17
+ var _b;
17
18
  var noteChild = note.children;
18
19
  var noteElement = dom.createElement('div');
20
+ noteElement.style.display = 'flex';
21
+ noteElement.style.alignItems = 'baseline';
19
22
  var mark = dom.createElement('a');
20
23
  var fName = type + '-' + id;
21
24
  mark.name = fName;
22
25
  mark.id = fName;
26
+ var index = (_b = word.noteIndexMap[fName]) !== null && _b !== void 0 ? _b : id;
27
+ var indexAnchor = dom.createElement('a');
28
+ indexAnchor.style.flexShrink = '0';
29
+ indexAnchor.style.marginRight = '0.3em';
30
+ indexAnchor.style.textDecoration = 'none';
31
+ indexAnchor.textContent = '[' + String(index) + ']';
32
+ noteElement.appendChild(mark);
33
+ noteElement.appendChild(indexAnchor);
23
34
  noteRoot.appendChild(noteElement);
24
35
  try {
25
36
  for (var noteChild_1 = tslib.__values(noteChild), noteChild_1_1 = noteChild_1.next(); !noteChild_1_1.done; noteChild_1_1 = noteChild_1.next()) {
@@ -62,11 +73,19 @@ function renderNotes(word) {
62
73
  var noteRoot = dom.createElement('div');
63
74
  if (hasNote(word.footNotes)) {
64
75
  for (var fId in word.footNotes) {
76
+ if (fId === '0' || fId === '-1')
77
+ continue;
78
+ if (word.footNotes[fId].isEmpty())
79
+ continue;
65
80
  renderNote(word, noteRoot, 'footnote', fId, word.footNotes[fId]);
66
81
  }
67
82
  }
68
83
  if (hasNote(word.endNotes)) {
69
84
  for (var fId in word.endNotes || {}) {
85
+ if (fId === '0' || fId === '-1')
86
+ continue;
87
+ if (word.endNotes[fId].isEmpty())
88
+ continue;
70
89
  renderNote(word, noteRoot, 'endnote', fId, word.endNotes[fId]);
71
90
  }
72
91
  }
@@ -131,6 +131,22 @@ function renderRun(word, run, paragraph, inFldChar, inHeader) {
131
131
  else if (child instanceof Separator.Separator) {
132
132
  dom.appendChild(span, renderSeparator.renderSeparator());
133
133
  }
134
+ else if (child instanceof Run.FootnoteRef) {
135
+ var target = child.type + '-' + child.id;
136
+ var displayIndex = word.noteIndexMap[target];
137
+ // 如果脚注内容为空(不在映射中),不渲染引用
138
+ if (displayIndex == null)
139
+ break;
140
+ var anchor = dom.createElement('a');
141
+ anchor.href = '#' + target;
142
+ anchor.style.verticalAlign = 'super';
143
+ anchor.style.fontSize = '0.75em';
144
+ anchor.style.textDecoration = 'none';
145
+ anchor.dataset.noteId = child.id;
146
+ anchor.dataset.noteType = child.type;
147
+ anchor.textContent = '[' + String(displayIndex) + ']';
148
+ dom.appendChild(span, anchor);
149
+ }
134
150
  else {
135
151
  console.warn('unknown child', child);
136
152
  }
package/package.json CHANGED
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "office-viewer",
3
- "version": "0.3.15",
3
+ "repository": {
4
+ "type": "git",
5
+ "url": "https://github.com/baidu/amis-inner.git"
6
+ },
7
+ "version": "0.3.16",
4
8
  "description": "office 文档在线预览",
5
9
  "main": "lib/index.js",
6
10
  "module": "esm/index.js",
@@ -77,6 +81,7 @@
77
81
  "amis-formula": "^2.7.2",
78
82
  "jest": "^29.0.3",
79
83
  "jest-environment-jsdom": "^29.0.3",
84
+ "puppeteer": "^22.8.0",
80
85
  "rollup": "^2.60.2",
81
86
  "rollup-plugin-terser": "^7.0.2",
82
87
  "sass": "^1.69.7",