@pptx-studio/model 0.3.0 → 0.4.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.
package/dist/index.js CHANGED
@@ -44,6 +44,7 @@ const MODEL_ERROR_CODES = [
44
44
  "MODEL_TEXT_TYPEFACE",
45
45
  "MODEL_TABLE_ATTR",
46
46
  "MODEL_TABLE_STYLE",
47
+ "MODEL_TABLE_POSITION",
47
48
  "BLIP_NO_EMBED",
48
49
  "BLIP_DUOTONE",
49
50
  "BLIP_CLR_CHANGE",
@@ -3502,15 +3503,11 @@ function terminusOf(context) {
3502
3503
  };
3503
3504
  }
3504
3505
  /**
3505
- * The list styles a shape reads, nearest first, ending at whichever terminus it
3506
- * reaches.
3507
- *
3508
- * Exported because it *is* the finding: a caller that wants to show the user
3509
- * where a value could have come from - the inspector's Overrides panel, layout
3510
- * compatibility scoring - needs the same list the resolver walks, not a second
3511
- * opinion about it.
3506
+ * The list styles a shape or a table cell reads, nearest first, ending at whichever terminus it
3507
+ * reaches. Exported so a caller that shows where a value could come from walks the same list.
3512
3508
  */
3513
3509
  function textLevels(context) {
3510
+ if (context.cell !== void 0) return cellLevels(context, context.cell);
3514
3511
  const levels = inheritanceChain(context.shape, context.sheet).map((link, index) => ({
3515
3512
  style: link.shape.text?.lstStyle,
3516
3513
  origin: index === 0 ? "shape" : link.origin,
@@ -3536,18 +3533,40 @@ function textLevels(context) {
3536
3533
  return levels;
3537
3534
  }
3538
3535
  /**
3539
- * The values left when every level has been asked and none of them said.
3540
- *
3541
- * Two quite different things, and which applies turns on one question: does the
3542
- * master declare `p:txStyles` at all? If it does not, PowerPoint substitutes its
3543
- * whole built-in set, and a body placeholder is 28 points with a hanging bullet
3544
- * indent. If it does, there is no per-property backstop underneath it and what
3545
- * remains is the floor - 18 points, no margin, no indent. Measured as two
3546
- * separate probes precisely because the two are easy to conflate and differ on
3547
- * every partially-specified master.
3536
+ * A table cell's walk (C9): its own list style, the table's style, then the master's `p:otherStyle`.
3537
+ * `p:defaultTextStyle` and the frame's placeholder chain are never read, as a shape's walk is.
3538
+ */
3539
+ function cellLevels(context, cell) {
3540
+ const { master } = terminusOf(context);
3541
+ return [
3542
+ {
3543
+ style: cell.lstStyle,
3544
+ origin: "cell",
3545
+ sheet: context.sheet,
3546
+ shape: context.shape
3547
+ },
3548
+ {
3549
+ style: void 0,
3550
+ run: cell.layer,
3551
+ origin: "tableStyle",
3552
+ sheet: context.sheet,
3553
+ shape: context.shape
3554
+ },
3555
+ {
3556
+ style: master?.txStyles?.other,
3557
+ origin: "txStyles",
3558
+ sheet: master,
3559
+ shape: null
3560
+ }
3561
+ ];
3562
+ }
3563
+ /**
3564
+ * The values left when every level has been asked and none of them said (ADR 0027).
3565
+ * A master with `p:txStyles` leaves `TEXT_FLOOR`; one without substitutes PowerPoint's built-ins.
3548
3566
  */
3549
3567
  function floorOf(context, level) {
3550
- const { bucket, master } = terminusOf(context);
3568
+ const { bucket: frame, master } = terminusOf(context);
3569
+ const bucket = context.cell === void 0 ? frame : null;
3551
3570
  if (master?.txStyles !== void 0) return TEXT_FLOOR;
3552
3571
  return BUILTIN_TEXT_STYLES[bucket ?? "other"][clampLevel(level)] ?? TEXT_FLOOR;
3553
3572
  }
@@ -3555,7 +3574,9 @@ function clampLevel(level) {
3555
3574
  if (!Number.isInteger(level)) throw new ModelError("MODEL_TEXT_LEVEL", `paragraph level ${String(level)} is not an integer`);
3556
3575
  return Math.max(0, Math.min(8, level));
3557
3576
  }
3558
- function resolvedAt(value, level, explicit) {
3577
+ /** A value found at `level`: explicit when the text's own shape or table cell wrote that level. */
3578
+ function resolvedAt(value, level) {
3579
+ const explicit = level.origin === "shape" || level.origin === "cell";
3559
3580
  return {
3560
3581
  value,
3561
3582
  origin: level.origin,
@@ -3588,7 +3609,7 @@ function resolveParagraph(context, paragraph, pick) {
3588
3609
  const props = entry.style?.levels[level];
3589
3610
  if (props === void 0) continue;
3590
3611
  const value = pick(props);
3591
- if (value !== void 0) return resolvedAt(value, entry, entry.origin === "shape");
3612
+ if (value !== void 0) return resolvedAt(value, entry);
3592
3613
  }
3593
3614
  }
3594
3615
  /**
@@ -3621,10 +3642,10 @@ function resolveRun(context, paragraph, run, pick) {
3621
3642
  }
3622
3643
  const level = clampLevel(paragraph.level);
3623
3644
  for (const entry of textLevels(context)) {
3624
- const defRPr = entry.style?.levels[level]?.defRPr;
3645
+ const defRPr = entry.run ?? entry.style?.levels[level]?.defRPr;
3625
3646
  if (defRPr === void 0) continue;
3626
3647
  const value = pick(defRPr);
3627
- if (value !== void 0) return resolvedAt(value, entry, entry.origin === "shape");
3648
+ if (value !== void 0) return resolvedAt(value, entry);
3628
3649
  }
3629
3650
  }
3630
3651
  /**
@@ -3822,8 +3843,8 @@ function resolveInsets(shape, sheet) {
3822
3843
  //#endregion
3823
3844
  //#region src/resolve/table.ts
3824
3845
  /**
3825
- * Which style PowerPoint draws a table with. C8 measured one rule (ADR 0063): the built-in its
3826
- * GUID names, in any case, and otherwise none; `ppt/tableStyles.xml` never changes the drawing.
3846
+ * Which style PowerPoint draws a table with (C8, ADR 0063), and what that style, the cells' own
3847
+ * `a:tcPr` and the table's `a:tblPr` give each cell and grid edge (C9, ADR 0064).
3827
3848
  */
3828
3849
  const NS_A = "http://schemas.openxmlformats.org/drawingml/2006/main";
3829
3850
  /** The part name a built-in's errors carry: it comes from no package. */
@@ -3846,7 +3867,305 @@ function tableStyleOf(table) {
3846
3867
  const ref = table.props?.style;
3847
3868
  return ref === void 0 ? null : builtinTableStyle(ref.id) ?? null;
3848
3869
  }
3870
+ /** The order the parts compose in, lowest first: C9 on every drawable table (ADR 0064). */
3871
+ const TABLE_PART_ORDER = [
3872
+ "wholeTbl",
3873
+ "band1H",
3874
+ "band2H",
3875
+ "band1V",
3876
+ "band2V",
3877
+ "lastCol",
3878
+ "firstCol",
3879
+ "lastRow",
3880
+ "seCell",
3881
+ "swCell",
3882
+ "firstRow",
3883
+ "neCell",
3884
+ "nwCell"
3885
+ ];
3886
+ const RANK = new Map(TABLE_PART_ORDER.map((p, i) => [p, i]));
3887
+ /**
3888
+ * The parts reaching grid position (row, col), highest first: ECMA-376's reading, which C9 found
3889
+ * alone fits (ADR 0064). Bands skip the rows and columns their end flags take, and a corner part
3890
+ * needs both of its flags.
3891
+ */
3892
+ function tablePartsAt(props, rows, cols, row, col) {
3893
+ const within = (n, size) => Number.isInteger(n) && n >= 0 && n < size;
3894
+ if (!within(row, rows) || !within(col, cols)) throw new ModelError("MODEL_TABLE_POSITION", `no grid position ${String(row)},${String(col)} in ${String(rows)}x${String(cols)}`);
3895
+ const parts = ["wholeTbl"];
3896
+ const firstRow = props?.firstRow === true && row === 0;
3897
+ const lastRow = props?.lastRow === true && row === rows - 1;
3898
+ const firstCol = props?.firstCol === true && col === 0;
3899
+ const lastCol = props?.lastCol === true && col === cols - 1;
3900
+ if (props?.bandRow === true && !firstRow && !lastRow) parts.push((row - (props.firstRow ? 1 : 0)) % 2 === 0 ? "band1H" : "band2H");
3901
+ if (props?.bandCol === true && !firstCol && !lastCol) parts.push((col - (props.firstCol ? 1 : 0)) % 2 === 0 ? "band1V" : "band2V");
3902
+ if (firstRow) parts.push("firstRow");
3903
+ if (lastRow) parts.push("lastRow");
3904
+ if (firstCol) parts.push("firstCol");
3905
+ if (lastCol) parts.push("lastCol");
3906
+ if (firstRow && firstCol) parts.push("nwCell");
3907
+ if (firstRow && lastCol) parts.push("neCell");
3908
+ if (lastRow && firstCol) parts.push("swCell");
3909
+ if (lastRow && lastCol) parts.push("seCell");
3910
+ return parts.sort((a, b) => (RANK.get(b) ?? 0) - (RANK.get(a) ?? 0));
3911
+ }
3912
+ /** The grid cell at (row, col), or `null` beyond the table. */
3913
+ function cellAt(grid, row, col) {
3914
+ return grid.positions[row]?.[col] ?? null;
3915
+ }
3916
+ /** The grid cell at (row, col); a position beyond the table throws. */
3917
+ function cellOf(grid, row, col) {
3918
+ const cell = cellAt(grid, row, col);
3919
+ if (cell === null) throw new ModelError("MODEL_TABLE_POSITION", `no grid position ${String(row)},${String(col)}`);
3920
+ return cell;
3921
+ }
3922
+ /** A merged cell's parts, highest first: its anchor's, and every covered position's ends and corners (C9). */
3923
+ function partsOf(table, grid, cell) {
3924
+ const pooled = new Set(tablePartsAt(table.props, grid.rows, grid.cols, cell.row, cell.col));
3925
+ for (let row = cell.row; row < cell.row + cell.rows; row++) for (let col = cell.col; col < cell.col + cell.cols; col++) for (const part of tablePartsAt(table.props, grid.rows, grid.cols, row, col)) if (!BANDS.has(part)) pooled.add(part);
3926
+ return [...pooled].sort((a, b) => (RANK.get(b) ?? 0) - (RANK.get(a) ?? 0));
3927
+ }
3928
+ const BANDS = /* @__PURE__ */ new Set([
3929
+ "band1H",
3930
+ "band2H",
3931
+ "band1V",
3932
+ "band2V"
3933
+ ]);
3934
+ /** The edge an end part offers any cell outside it, whichever way the edge runs (C9, merged cells). */
3935
+ const KIND_EDGE = {
3936
+ firstRow: "bottom",
3937
+ lastRow: "top",
3938
+ firstCol: "right",
3939
+ lastCol: "left"
3940
+ };
3941
+ /**
3942
+ * The fill of the cell at grid position (row, col): its own `a:tcPr` fill, else the highest part
3943
+ * that states one. Parts compose per property (C9); `null` paints nothing, and one translucent fill
3944
+ * is painted alone, never over another part's.
3945
+ */
3946
+ function tableCellFill(table, style, grid, row, col) {
3947
+ const cell = cellOf(grid, row, col);
3948
+ const own = cell.cell?.props?.fill;
3949
+ if (own !== void 0) return {
3950
+ value: {
3951
+ kind: "value",
3952
+ value: own
3953
+ },
3954
+ source: "tcPr"
3955
+ };
3956
+ if (style === null) return null;
3957
+ for (const part of partsOf(table, grid, cell)) {
3958
+ const fill = style.parts[part]?.cell?.fill;
3959
+ if (fill !== void 0) return {
3960
+ value: fill,
3961
+ source: part
3962
+ };
3963
+ }
3964
+ return null;
3965
+ }
3966
+ /** What paints under the cells: `a:tblPr`'s own fill in place of the style's `tblBg` (C9). */
3967
+ function tableBackground(table, style) {
3968
+ const own = table.props?.fill;
3969
+ if (own !== void 0) return {
3970
+ value: {
3971
+ kind: "value",
3972
+ value: own
3973
+ },
3974
+ source: "tblPr"
3975
+ };
3976
+ const background = style?.background?.fill;
3977
+ return background === void 0 ? null : {
3978
+ value: background,
3979
+ source: "tblBg"
3980
+ };
3981
+ }
3982
+ /** PowerPoint's default grid: a 1-pt black line on every edge of a table that names no built-in (C8). */
3983
+ const DEFAULT_GRID_LINE = {
3984
+ w: 12700,
3985
+ cap: null,
3986
+ cmpd: null,
3987
+ algn: null,
3988
+ fill: {
3989
+ type: "solid",
3990
+ color: {
3991
+ space: "srgb",
3992
+ hex: "000000",
3993
+ transforms: []
3994
+ }
3995
+ },
3996
+ dash: null,
3997
+ join: null,
3998
+ headEnd: null,
3999
+ tailEnd: null
4000
+ };
4001
+ /** The side of the cell before (above, left of) and after an edge that faces it. */
4002
+ const FACING = {
4003
+ h: {
4004
+ before: "bottom",
4005
+ after: "top",
4006
+ inside: "insideH"
4007
+ },
4008
+ v: {
4009
+ before: "right",
4010
+ after: "left",
4011
+ inside: "insideV"
4012
+ }
4013
+ };
4014
+ /**
4015
+ * The line a grid edge draws: its owner's `a:tcPr` line, else the highest part of either cell that
4016
+ * states it, a part reaching both offering its inside edge (C9).
4017
+ * The owner is the cell before (above, left) where its anchor is level with the edge, else the cell
4018
+ * after where its anchor is, else the cell before; `null` inside a merged cell.
4019
+ */
4020
+ function tableEdgeLine(table, style, grid, edge) {
4021
+ const facing = FACING[edge.axis];
4022
+ const before = edge.axis === "h" ? cellAt(grid, edge.row - 1, edge.col) : cellAt(grid, edge.row, edge.col - 1);
4023
+ const after = edge.row < grid.rows && edge.col < grid.cols ? cellAt(grid, edge.row, edge.col) : null;
4024
+ if (before === null && after === null) throw new ModelError("MODEL_TABLE_POSITION", `no grid edge ${edge.axis}${String(edge.row)},${String(edge.col)}`);
4025
+ if (before !== null && before === after) return null;
4026
+ const level = (cell) => cell !== null && (edge.axis === "h" ? edge.col === cell.col : edge.row === cell.row);
4027
+ const direct = before !== null && (level(before) || !level(after)) ? before.cell?.props?.borders[facing.before] : after?.cell?.props?.borders[facing.after];
4028
+ if (direct !== void 0) return {
4029
+ value: {
4030
+ kind: "value",
4031
+ value: direct
4032
+ },
4033
+ source: "tcPr"
4034
+ };
4035
+ if (style === null) return {
4036
+ value: {
4037
+ kind: "value",
4038
+ value: DEFAULT_GRID_LINE
4039
+ },
4040
+ source: "grid"
4041
+ };
4042
+ const partsBefore = before === null ? [] : partsOf(table, grid, before);
4043
+ const partsAfter = after === null ? [] : partsOf(table, grid, after);
4044
+ const all = [.../* @__PURE__ */ new Set([...partsBefore, ...partsAfter])].sort((a, b) => (RANK.get(b) ?? 0) - (RANK.get(a) ?? 0));
4045
+ for (const part of all) {
4046
+ const inBefore = partsBefore.includes(part);
4047
+ const inAfter = partsAfter.includes(part);
4048
+ const geometric = inBefore && inAfter ? facing.inside : inBefore ? facing.before : facing.after;
4049
+ const role = (before !== null && after !== null && inBefore !== inAfter ? KIND_EDGE[part] : void 0) ?? geometric;
4050
+ const stated = style.parts[part]?.cell?.borders?.[role];
4051
+ if (stated !== void 0) return {
4052
+ value: stated,
4053
+ source: part
4054
+ };
4055
+ }
4056
+ return null;
4057
+ }
4058
+ const themeFace = (typeface) => ({
4059
+ typeface,
4060
+ panose: void 0,
4061
+ pitchFamily: void 0,
4062
+ charset: void 0
4063
+ });
4064
+ function runProps(node, fields) {
4065
+ return {
4066
+ sz: void 0,
4067
+ b: void 0,
4068
+ i: void 0,
4069
+ u: void 0,
4070
+ strike: void 0,
4071
+ cap: void 0,
4072
+ spc: void 0,
4073
+ kern: void 0,
4074
+ baseline: void 0,
4075
+ noProof: void 0,
4076
+ lang: void 0,
4077
+ altLang: void 0,
4078
+ latin: void 0,
4079
+ ea: void 0,
4080
+ cs: void 0,
4081
+ sym: void 0,
4082
+ fill: void 0,
4083
+ line: void 0,
4084
+ effects: void 0,
4085
+ highlight: void 0,
4086
+ node,
4087
+ ...fields
4088
+ };
4089
+ }
4090
+ /**
4091
+ * What the style gives the text of the cell at (row, col): bold, italic, face and colour, each from
4092
+ * the highest part that states it (C9), as run properties for the text cascade.
4093
+ * The default grid gives `tx1` in the minor face whatever the flags; `node` is the style's element,
4094
+ * or the table's for the grid.
4095
+ */
4096
+ function tableTextLayer(table, style, grid, row, col) {
4097
+ const cell = cellOf(grid, row, col);
4098
+ const minor = {
4099
+ latin: themeFace("+mn-lt"),
4100
+ ea: themeFace("+mn-ea"),
4101
+ cs: themeFace("+mn-cs")
4102
+ };
4103
+ if (style === null) return runProps(table.node, {
4104
+ ...minor,
4105
+ fill: {
4106
+ type: "solid",
4107
+ color: {
4108
+ space: "scheme",
4109
+ name: "tx1",
4110
+ transforms: []
4111
+ }
4112
+ }
4113
+ });
4114
+ const texts = partsOf(table, grid, cell).map((part) => style.parts[part]?.text).filter((t) => t !== void 0);
4115
+ const b = texts.find((t) => t.b !== void 0)?.b;
4116
+ const i = texts.find((t) => t.i !== void 0)?.i;
4117
+ const color = texts.find((t) => t.color !== void 0)?.color;
4118
+ const font = texts.find((t) => t.font !== void 0)?.font;
4119
+ const onOff = (v) => v === "on" ? true : v === "off" ? false : void 0;
4120
+ let faces = {};
4121
+ if (font?.kind === "ref" && font.ref.idx !== "none") {
4122
+ const key = font.ref.idx === "major" ? "mj" : "mn";
4123
+ faces = {
4124
+ latin: themeFace(`+${key}-lt`),
4125
+ ea: themeFace(`+${key}-ea`),
4126
+ cs: themeFace(`+${key}-cs`)
4127
+ };
4128
+ } else if (font?.kind === "value") {
4129
+ const face = (name) => name === null ? void 0 : themeFace(name);
4130
+ faces = {
4131
+ latin: face(font.value.latin),
4132
+ ea: face(font.value.ea),
4133
+ cs: face(font.value.cs)
4134
+ };
4135
+ }
4136
+ return runProps(style.node, {
4137
+ b: onOff(b),
4138
+ i: onOff(i),
4139
+ ...faces,
4140
+ ...color === void 0 ? {} : { fill: {
4141
+ type: "solid",
4142
+ color
4143
+ } }
4144
+ });
4145
+ }
4146
+ /** A style fill with a `fillRef` followed into the theme, and the colour `phClr` takes in it. */
4147
+ function themedFill(fill, theme, colors) {
4148
+ if (fill.kind === "value") return {
4149
+ fill: fill.value,
4150
+ phClr: null
4151
+ };
4152
+ return {
4153
+ fill: styleMatrixFill(fill.ref, theme),
4154
+ phClr: fill.ref.color === null ? null : resolveColor(fill.ref.color, colors)
4155
+ };
4156
+ }
4157
+ /** A style line with an `lnRef` followed into the theme, and the colour `phClr` takes in it. */
4158
+ function themedLine(line, theme, colors) {
4159
+ if (line.kind === "value") return {
4160
+ line: line.value,
4161
+ phClr: null
4162
+ };
4163
+ return {
4164
+ line: styleMatrixLine(line.ref, theme),
4165
+ phClr: line.ref.color === null ? null : resolveColor(line.ref.color, colors)
4166
+ };
4167
+ }
3849
4168
  //#endregion
3850
- export { BUILTIN_TABLE_STYLES, BUILTIN_TEXT_STYLES, COLOR_TRANSFORM_OPS, DEFAULT_PLACEHOLDER_IDX, DEFAULT_PLACEHOLDER_TYPE, INVENTED_COLUMN_WIDTH, LEVELS, MASTER_PLACEHOLDER_TYPES, MODEL_ERROR_CODES, ModelError, ORPHAN_RECT, PLACEHOLDER_TYPES, STYLE_MATRIX_OFFSET, TABLE_URI, TEXT_FLOOR, backgroundSheet, bucketOf, builtinTableStyle, colorContextOf, colorMapOf, floorOf, inheritanceChain, isModelError, loadDocument, masterOf, masterPlaceholderType, matchInLayout, matchInMaster, normalizePlaceholder, parseBodyProps, parseBodyPropsChild, parseClrMap, parseColorChild, parseColorElement, parseDefaultTextStyle, parseEffects, parseFill, parseFillElement, parseGeometry, parseLine, parseLineElement, parseListStyle, parseParaProps, parseRunProps, parseSheet, parseTable, parseTableChild, parseTableStyle, parseTextBody, parseTextBodyChild, parseTextStyles, parseTheme, phClrOf, placeholders, requestedTypefaces, resolve, resolveAnchor, resolveAnchorCtr, resolveAppearance, resolveBackground, resolveBackgroundColor, resolveBody, resolveBulletAutoNum, resolveBulletBlip, resolveBulletChar, resolveBulletColor, resolveBulletFont, resolveBulletKind, resolveBulletSize, resolveColumns, resolveIndent, resolveInsets, resolveLatinTypeface, resolveMarginLeft, resolveOnSheet, resolveParagraph, resolveRun, resolveSize, resolveSolidFill, resolveTypeface, resolveTypefaceOf, resolveVertical, resolveWrap, resolveXfrm, schemeOf, sheetChain, styleMatrixEffects, styleMatrixFill, styleMatrixLine, styleMatrixTarget, tableGrid, tableStyleOf, textLevels, themeFontRef, themeOf };
4169
+ export { BUILTIN_TABLE_STYLES, BUILTIN_TEXT_STYLES, COLOR_TRANSFORM_OPS, DEFAULT_GRID_LINE, DEFAULT_PLACEHOLDER_IDX, DEFAULT_PLACEHOLDER_TYPE, INVENTED_COLUMN_WIDTH, LEVELS, MASTER_PLACEHOLDER_TYPES, MODEL_ERROR_CODES, ModelError, ORPHAN_RECT, PLACEHOLDER_TYPES, STYLE_MATRIX_OFFSET, TABLE_PART_ORDER, TABLE_URI, TEXT_FLOOR, backgroundSheet, bucketOf, builtinTableStyle, colorContextOf, colorMapOf, floorOf, inheritanceChain, isModelError, loadDocument, masterOf, masterPlaceholderType, matchInLayout, matchInMaster, normalizePlaceholder, parseBodyProps, parseBodyPropsChild, parseClrMap, parseColorChild, parseColorElement, parseDefaultTextStyle, parseEffects, parseFill, parseFillElement, parseGeometry, parseLine, parseLineElement, parseListStyle, parseParaProps, parseRunProps, parseSheet, parseTable, parseTableChild, parseTableStyle, parseTextBody, parseTextBodyChild, parseTextStyles, parseTheme, phClrOf, placeholders, requestedTypefaces, resolve, resolveAnchor, resolveAnchorCtr, resolveAppearance, resolveBackground, resolveBackgroundColor, resolveBody, resolveBulletAutoNum, resolveBulletBlip, resolveBulletChar, resolveBulletColor, resolveBulletFont, resolveBulletKind, resolveBulletSize, resolveColumns, resolveIndent, resolveInsets, resolveLatinTypeface, resolveMarginLeft, resolveOnSheet, resolveParagraph, resolveRun, resolveSize, resolveSolidFill, resolveTypeface, resolveTypefaceOf, resolveVertical, resolveWrap, resolveXfrm, schemeOf, sheetChain, styleMatrixEffects, styleMatrixFill, styleMatrixLine, styleMatrixTarget, tableBackground, tableCellFill, tableEdgeLine, tableGrid, tablePartsAt, tableStyleOf, tableTextLayer, textLevels, themeFontRef, themeOf, themedFill, themedLine };
3851
4170
 
3852
4171
  //# sourceMappingURL=index.js.map