roosterjs-content-model-dom 9.18.0 → 9.19.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.
@@ -53,5 +53,8 @@ exports.defaultContentModelFormatMap = {
53
53
  marginTop: '1em',
54
54
  marginBottom: '1em',
55
55
  },
56
+ th: {
57
+ fontWeight: 'bold',
58
+ },
56
59
  };
57
60
  //# sourceMappingURL=defaultContentModelFormatMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultContentModelFormatMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultContentModelFormatMap.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACU,QAAA,4BAA4B,GAA6B;IAClE,CAAC,EAAE;QACC,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,SAAS,EAAE,sLAAsL;KAC/M;IACD,UAAU,EAAE;QACR,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM;KACtB;IACD,IAAI,EAAE;QACF,UAAU,EAAE,WAAW;KAC1B;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,KAAK;KAClB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,OAAO;KACpB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,KAAK,EAAE,wFAAwF;KAC5G;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,CAAC,EAAE;QACC,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;IACD,GAAG,EAAE;QACD,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;CACJ,CAAC","sourcesContent":["import type { DefaultImplicitFormatMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * A map from tag name to its default implicit formats\n */\nexport const defaultContentModelFormatMap: DefaultImplicitFormatMap = {\n a: {\n underline: true,\n textColor: undefined, // Set to undefined to force override color from parent element so we can write correct link color if any, because browser will assign a default color for link if it doesn't have one\n },\n blockquote: {\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n code: {\n fontFamily: 'monospace',\n },\n h1: {\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n fontWeight: 'bold',\n fontSize: '1em', // Set this default value here to overwrite existing font size when change heading level\n },\n h5: {\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n p: {\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n};\n"]}
1
+ {"version":3,"file":"defaultContentModelFormatMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultContentModelFormatMap.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACU,QAAA,4BAA4B,GAA6B;IAClE,CAAC,EAAE;QACC,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,SAAS,EAAE,sLAAsL;KAC/M;IACD,UAAU,EAAE;QACR,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM;KACtB;IACD,IAAI,EAAE;QACF,UAAU,EAAE,WAAW;KAC1B;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,KAAK;KAClB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,OAAO;KACpB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,KAAK,EAAE,wFAAwF;KAC5G;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,CAAC,EAAE;QACC,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;IACD,GAAG,EAAE;QACD,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;KACrB;CACJ,CAAC","sourcesContent":["import type { DefaultImplicitFormatMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * A map from tag name to its default implicit formats\n */\nexport const defaultContentModelFormatMap: DefaultImplicitFormatMap = {\n a: {\n underline: true,\n textColor: undefined, // Set to undefined to force override color from parent element so we can write correct link color if any, because browser will assign a default color for link if it doesn't have one\n },\n blockquote: {\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n code: {\n fontFamily: 'monospace',\n },\n h1: {\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n fontWeight: 'bold',\n fontSize: '1em', // Set this default value here to overwrite existing font size when change heading level\n },\n h5: {\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n p: {\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n th: {\n fontWeight: 'bold',\n },\n};\n"]}
@@ -118,6 +118,7 @@ exports.defaultHTMLStyleMap = {
118
118
  },
119
119
  th: {
120
120
  display: 'table-cell',
121
+ fontWeight: 'bold',
121
122
  },
122
123
  u: {
123
124
  textDecoration: 'underline',
@@ -1 +1 @@
1
- {"version":3,"file":"defaultHTMLStyleMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultHTMLStyleMap.ts"],"names":[],"mappings":";;;;AAEA,IAAM,YAAY,GAAiC;IAC/C,OAAO,EAAE,OAAO;CACnB,CAAC;AAEF;;GAEG;AACU,QAAA,mBAAmB,GAAoB;IAChD,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE,YAAY;IACnB,CAAC,EAAE;QACC,UAAU,EAAE,MAAM;KACrB;IACD,UAAU,EAAE;QACR,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM;KACtB;IACD,EAAE,EAAE,YAAY;IAChB,MAAM,EAAE;QACJ,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,QAAQ;KACtB;IACD,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE;QACA,SAAS,EAAE,QAAQ;KACtB;IACD,QAAQ,EAAE,YAAY;IACtB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,YAAY;IAClB,EAAE,EAAE;QACA,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,KAAK;KAClB;IACD,EAAE,EAAE;QACA,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,OAAO;KACpB;IACD,EAAE,EAAE;QACA,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE;QACA,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,MAAM;KACrB;IACD,EAAE,EAAE;QACA,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE;QACA,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,YAAY;IAChB,CAAC,EAAE;QACC,SAAS,EAAE,QAAQ;KACtB;IACD,EAAE,EAAE;QACA,OAAO,EAAE,WAAW;KACvB;IACD,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,YAAY;IACjB,EAAE,kDAAO,YAAY,KAAE,kBAAkB,EAAE,MAAM,GAAE;IACnD,CAAC,EAAE;QACC,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;IACD,GAAG,EAAE;QACD,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;IACD,CAAC,EAAE;QACC,cAAc,EAAE,cAAc;KACjC;IACD,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE;QACJ,cAAc,EAAE,cAAc;KACjC;IACD,MAAM,EAAE;QACJ,UAAU,EAAE,MAAM;KACrB;IACD,GAAG,EAAE;QACD,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,SAAS;KACtB;IACD,GAAG,EAAE;QACD,aAAa,EAAE,OAAO;QACtB,QAAQ,EAAE,SAAS;KACtB;IACD,KAAK,EAAE;QACH,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,YAAY;KAC1B;IACD,EAAE,EAAE;QACA,OAAO,EAAE,YAAY;KACxB;IACD,EAAE,EAAE;QACA,OAAO,EAAE,YAAY;KACxB;IACD,CAAC,EAAE;QACC,cAAc,EAAE,WAAW;KAC9B;IACD,EAAE,kDAAO,YAAY,KAAE,kBAAkB,EAAE,MAAM,GAAE;CACtD,CAAC","sourcesContent":["import type { DefaultStyleMap } from 'roosterjs-content-model-types';\n\nconst blockElement: Partial<CSSStyleDeclaration> = {\n display: 'block',\n};\n\n/**\n * @internal\n */\nexport const defaultHTMLStyleMap: DefaultStyleMap = {\n address: blockElement,\n article: blockElement,\n aside: blockElement,\n b: {\n fontWeight: 'bold',\n },\n blockquote: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n br: blockElement,\n center: {\n display: 'block',\n textAlign: 'center',\n },\n dd: blockElement,\n div: blockElement,\n dl: blockElement,\n dt: blockElement,\n em: {\n fontStyle: 'italic',\n },\n fieldset: blockElement,\n figcaption: blockElement,\n figure: blockElement,\n footer: blockElement,\n form: blockElement,\n h1: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n display: 'block',\n fontWeight: 'bold',\n },\n h5: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n header: blockElement,\n hr: blockElement,\n i: {\n fontStyle: 'italic',\n },\n li: {\n display: 'list-item',\n },\n main: blockElement,\n nav: blockElement,\n ol: { ...blockElement, paddingInlineStart: '40px' },\n p: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n display: 'block',\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n s: {\n textDecoration: 'line-through',\n },\n section: blockElement,\n strike: {\n textDecoration: 'line-through',\n },\n strong: {\n fontWeight: 'bold',\n },\n sub: {\n verticalAlign: 'sub',\n fontSize: 'smaller',\n },\n sup: {\n verticalAlign: 'super',\n fontSize: 'smaller',\n },\n table: {\n display: 'table',\n boxSizing: 'border-box',\n },\n td: {\n display: 'table-cell',\n },\n th: {\n display: 'table-cell',\n },\n u: {\n textDecoration: 'underline',\n },\n ul: { ...blockElement, paddingInlineStart: '40px' },\n};\n"]}
1
+ {"version":3,"file":"defaultHTMLStyleMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultHTMLStyleMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DefaultStyleMap } from 'roosterjs-content-model-types';\n\nconst blockElement: Partial<CSSStyleDeclaration> = {\n display: 'block',\n};\n\n/**\n * @internal\n */\nexport const defaultHTMLStyleMap: DefaultStyleMap = {\n address: blockElement,\n article: blockElement,\n aside: blockElement,\n b: {\n fontWeight: 'bold',\n },\n blockquote: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n br: blockElement,\n center: {\n display: 'block',\n textAlign: 'center',\n },\n dd: blockElement,\n div: blockElement,\n dl: blockElement,\n dt: blockElement,\n em: {\n fontStyle: 'italic',\n },\n fieldset: blockElement,\n figcaption: blockElement,\n figure: blockElement,\n footer: blockElement,\n form: blockElement,\n h1: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n display: 'block',\n fontWeight: 'bold',\n },\n h5: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n header: blockElement,\n hr: blockElement,\n i: {\n fontStyle: 'italic',\n },\n li: {\n display: 'list-item',\n },\n main: blockElement,\n nav: blockElement,\n ol: { ...blockElement, paddingInlineStart: '40px' },\n p: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n display: 'block',\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n s: {\n textDecoration: 'line-through',\n },\n section: blockElement,\n strike: {\n textDecoration: 'line-through',\n },\n strong: {\n fontWeight: 'bold',\n },\n sub: {\n verticalAlign: 'sub',\n fontSize: 'smaller',\n },\n sup: {\n verticalAlign: 'super',\n fontSize: 'smaller',\n },\n table: {\n display: 'table',\n boxSizing: 'border-box',\n },\n td: {\n display: 'table-cell',\n },\n th: {\n display: 'table-cell',\n fontWeight: 'bold',\n },\n u: {\n textDecoration: 'underline',\n },\n ul: { ...blockElement, paddingInlineStart: '40px' },\n};\n"]}
@@ -217,6 +217,9 @@ function setFirstColumnFormatBorders(rows, format) {
217
217
  switch (rowIndex) {
218
218
  case 0:
219
219
  cell.isHeader = !!format.hasHeaderRow;
220
+ if (cell.isHeader) {
221
+ cell.format.fontWeight = 'bold';
222
+ }
220
223
  break;
221
224
  case rows.length - 1:
222
225
  setBorderColor(cell.format, 'borderTop');
@@ -244,6 +247,7 @@ function setHeaderRowFormat(rows, format, metaOverrides) {
244
247
  (_a = rows[rowIndex]) === null || _a === void 0 ? void 0 : _a.cells.forEach(function (readonlyCell, cellIndex) {
245
248
  var cell = (0, mutate_1.mutateBlock)(readonlyCell);
246
249
  cell.isHeader = true;
250
+ cell.format.fontWeight = 'bold';
247
251
  if (format.headerRowColor) {
248
252
  if (!metaOverrides.bgColorOverrides[rowIndex][cellIndex]) {
249
253
  (0, setTableCellBackgroundColor_1.setTableCellBackgroundColor)(cell, format.headerRowColor, false /*isColorOverride*/, true /*applyToSegments*/);
@@ -1 +1 @@
1
- {"version":3,"file":"applyTableFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/editing/applyTableFormat.ts"],"names":[],"mappings":"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","sourcesContent":["import { BorderKeys } from '../../formatHandlers/common/borderFormatHandler';\nimport { combineBorderValue, extractBorderValues } from '../../domUtils/style/borderValues';\nimport { mutateBlock } from '../common/mutate';\nimport { setTableCellBackgroundColor } from './setTableCellBackgroundColor';\nimport { TableBorderFormat } from '../../constants/TableBorderFormat';\nimport { updateTableCellMetadata } from '../metadata/updateTableCellMetadata';\nimport { updateTableMetadata } from '../metadata/updateTableMetadata';\nimport type {\n BorderFormat,\n ReadonlyContentModelTable,\n ShallowMutableContentModelTableRow,\n TableMetadataFormat,\n} from 'roosterjs-content-model-types';\n\nconst DEFAULT_FORMAT: Required<TableMetadataFormat> = {\n topBorderColor: '#ABABAB',\n bottomBorderColor: '#ABABAB',\n verticalBorderColor: '#ABABAB',\n hasHeaderRow: false,\n hasFirstColumn: false,\n hasBandedRows: false,\n hasBandedColumns: false,\n bgColorEven: null,\n bgColorOdd: '#ABABAB20',\n headerRowColor: '#ABABAB',\n tableBorderFormat: TableBorderFormat.Default,\n verticalAlign: null,\n};\n\ntype MetaOverrides = {\n bgColorOverrides: boolean[][];\n vAlignOverrides: boolean[][];\n borderOverrides: boolean[][];\n};\n\n/**\n * Apply table format from table metadata and the passed in new format\n * @param table The table to apply format to\n * @param newFormat @optional New format to apply. When passed, this value will be merged into existing metadata format and default format\n * @param keepCellShade @optional When pass true, table cells with customized shade color will not be overwritten. @default false\n */\nexport function applyTableFormat(\n table: ReadonlyContentModelTable,\n newFormat?: TableMetadataFormat,\n keepCellShade?: boolean\n) {\n const mutableTable = mutateBlock(table);\n const { rows } = mutableTable;\n\n updateTableMetadata(mutableTable, format => {\n const effectiveMetadata = {\n ...DEFAULT_FORMAT,\n ...format,\n ...newFormat,\n };\n\n const metaOverrides: MetaOverrides = updateOverrides(rows, !keepCellShade);\n\n formatCells(rows, effectiveMetadata, metaOverrides);\n setFirstColumnFormatBorders(rows, effectiveMetadata);\n setHeaderRowFormat(rows, effectiveMetadata, metaOverrides);\n\n return effectiveMetadata;\n });\n}\n\nfunction updateOverrides(\n rows: ShallowMutableContentModelTableRow[],\n removeCellShade: boolean\n): MetaOverrides {\n const overrides: MetaOverrides = {\n bgColorOverrides: [],\n vAlignOverrides: [],\n borderOverrides: [],\n };\n\n rows.forEach(row => {\n const bgColorOverrides: boolean[] = [];\n const vAlignOverrides: boolean[] = [];\n const borderOverrides: boolean[] = [];\n\n overrides.bgColorOverrides.push(bgColorOverrides);\n overrides.vAlignOverrides.push(vAlignOverrides);\n overrides.borderOverrides.push(borderOverrides);\n\n row.cells.forEach(cell => {\n updateTableCellMetadata(mutateBlock(cell), metadata => {\n if (metadata && removeCellShade) {\n bgColorOverrides.push(false);\n delete metadata.bgColorOverride;\n } else {\n bgColorOverrides.push(!!metadata?.bgColorOverride);\n }\n vAlignOverrides.push(!!metadata?.vAlignOverride);\n borderOverrides.push(!!metadata?.borderOverride);\n\n return metadata;\n });\n });\n });\n\n return overrides;\n}\n\ntype ShouldUseTransparentBorder = (indexProp: {\n firstRow: boolean;\n lastRow: boolean;\n firstColumn: boolean;\n lastColumn: boolean;\n}) => [boolean, boolean, boolean, boolean];\n\nconst BorderFormatters: Record<number, ShouldUseTransparentBorder | undefined> = {\n [TableBorderFormat.Default]: _ => [false, false, false, false],\n [TableBorderFormat.ListWithSideBorders]: ({ lastColumn, firstColumn }) => [\n false,\n !lastColumn,\n false,\n !firstColumn,\n ],\n [TableBorderFormat.FirstColumnHeaderExternal]: ({\n firstColumn,\n firstRow,\n lastColumn,\n lastRow,\n }) => [\n !firstRow,\n (!lastColumn && !firstColumn) || (firstColumn && firstRow),\n !lastRow && !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.NoHeaderBorders]: ({ firstRow, firstColumn, lastColumn }) => [\n firstRow,\n firstRow || lastColumn,\n false,\n firstRow || firstColumn,\n ],\n [TableBorderFormat.NoSideBorders]: ({ firstColumn, lastColumn }) => [\n false,\n lastColumn,\n false,\n firstColumn,\n ],\n [TableBorderFormat.EspecialType1]: ({ firstRow, firstColumn }) => [\n firstColumn && !firstRow,\n firstRow,\n firstColumn && !firstRow,\n firstRow && !firstColumn,\n ],\n [TableBorderFormat.EspecialType2]: ({ firstRow, firstColumn }) => [\n !firstRow,\n firstRow || !firstColumn,\n !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.EspecialType3]: ({ firstColumn, firstRow }) => [\n true,\n firstRow || !firstColumn,\n !firstRow,\n true,\n ],\n [TableBorderFormat.Clear]: () => [true, true, true, true],\n};\n\n/*\n * Apply vertical align, borders, and background color to all cells in the table\n */\nfunction formatCells(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n const { hasBandedRows, hasBandedColumns, bgColorOdd, bgColorEven, hasFirstColumn } = format;\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, colIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n // Format Borders\n if (\n !metaOverrides.borderOverrides[rowIndex][colIndex] &&\n typeof format.tableBorderFormat == 'number'\n ) {\n const transparentBorderMatrix = BorderFormatters[format.tableBorderFormat]?.({\n firstRow: rowIndex === 0,\n lastRow: rowIndex === rows.length - 1,\n firstColumn: colIndex === 0,\n lastColumn: colIndex === row.cells.length - 1,\n });\n\n const formatColor = [\n format.topBorderColor,\n format.verticalBorderColor,\n format.bottomBorderColor,\n format.verticalBorderColor,\n ];\n\n transparentBorderMatrix?.forEach((alwaysUseTransparent, i) => {\n const borderColor = (!alwaysUseTransparent && formatColor[i]) || '';\n\n cell.format[BorderKeys[i]] = combineBorderValue({\n style: getBorderStyleFromColor(borderColor),\n width: '1px',\n color: borderColor,\n });\n });\n }\n\n // Format Background Color\n if (!metaOverrides.bgColorOverrides[rowIndex][colIndex]) {\n let color: string | null | undefined;\n if (hasFirstColumn && colIndex == 0 && rowIndex > 0) {\n color = null;\n } else {\n color =\n hasBandedRows || hasBandedColumns\n ? (hasBandedColumns && colIndex % 2 != 0) ||\n (hasBandedRows && rowIndex % 2 != 0)\n ? bgColorOdd\n : bgColorEven\n : bgColorEven; /* bgColorEven is the default color */\n }\n setTableCellBackgroundColor(\n cell,\n color,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n // Format Vertical Align\n if (format.verticalAlign && !metaOverrides.vAlignOverrides[rowIndex][colIndex]) {\n cell.format.verticalAlign = format.verticalAlign;\n }\n\n // Format Header\n cell.isHeader = false;\n });\n });\n}\n\n/**\n * Set the first column format borders for the table as well as header property\n * @param rows The rows of the table\n * @param format The table metadata format\n */\nexport function setFirstColumnFormatBorders(\n rows: ShallowMutableContentModelTableRow[],\n format: Partial<TableMetadataFormat>\n) {\n // Exit early hasFirstColumn is not set\n if (!format.hasFirstColumn) {\n return;\n }\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n if (cellIndex === 0) {\n cell.isHeader = true;\n\n switch (rowIndex) {\n case 0:\n cell.isHeader = !!format.hasHeaderRow;\n break;\n case rows.length - 1:\n setBorderColor(cell.format, 'borderTop');\n break;\n case 1:\n setBorderColor(cell.format, 'borderBottom');\n break;\n default:\n setBorderColor(cell.format, 'borderTop');\n setBorderColor(cell.format, 'borderBottom');\n break;\n }\n }\n });\n });\n}\n\nfunction setHeaderRowFormat(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n // Exit early if hasHeaderRow is not set\n if (!format.hasHeaderRow) {\n return;\n }\n\n const rowIndex = 0;\n\n rows[rowIndex]?.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n cell.isHeader = true;\n\n if (format.headerRowColor) {\n if (!metaOverrides.bgColorOverrides[rowIndex][cellIndex]) {\n setTableCellBackgroundColor(\n cell,\n format.headerRowColor,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n setBorderColor(cell.format, 'borderTop', format.headerRowColor);\n setBorderColor(cell.format, 'borderRight', format.headerRowColor);\n setBorderColor(cell.format, 'borderLeft', format.headerRowColor);\n }\n });\n}\n\n/**\n * @param format The cell format to set the border color\n * @param key The border key to set the color\n * @param value The color to set. If not given, it removes the color and sets the style to transparent\n */\nfunction setBorderColor(format: BorderFormat, key: keyof BorderFormat, value?: string) {\n const border = extractBorderValues(format[key]);\n border.color = value || '';\n border.style = getBorderStyleFromColor(border.color);\n format[key] = combineBorderValue(border);\n}\n\nfunction getBorderStyleFromColor(color?: string): string {\n return !color || color == 'transparent' ? 'none' : 'solid';\n}\n"]}
1
+ {"version":3,"file":"applyTableFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/editing/applyTableFormat.ts"],"names":[],"mappings":"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","sourcesContent":["import { BorderKeys } from '../../formatHandlers/common/borderFormatHandler';\nimport { combineBorderValue, extractBorderValues } from '../../domUtils/style/borderValues';\nimport { mutateBlock } from '../common/mutate';\nimport { setTableCellBackgroundColor } from './setTableCellBackgroundColor';\nimport { TableBorderFormat } from '../../constants/TableBorderFormat';\nimport { updateTableCellMetadata } from '../metadata/updateTableCellMetadata';\nimport { updateTableMetadata } from '../metadata/updateTableMetadata';\nimport type {\n BorderFormat,\n ReadonlyContentModelTable,\n ShallowMutableContentModelTableRow,\n TableMetadataFormat,\n} from 'roosterjs-content-model-types';\n\nconst DEFAULT_FORMAT: Required<TableMetadataFormat> = {\n topBorderColor: '#ABABAB',\n bottomBorderColor: '#ABABAB',\n verticalBorderColor: '#ABABAB',\n hasHeaderRow: false,\n hasFirstColumn: false,\n hasBandedRows: false,\n hasBandedColumns: false,\n bgColorEven: null,\n bgColorOdd: '#ABABAB20',\n headerRowColor: '#ABABAB',\n tableBorderFormat: TableBorderFormat.Default,\n verticalAlign: null,\n};\n\ntype MetaOverrides = {\n bgColorOverrides: boolean[][];\n vAlignOverrides: boolean[][];\n borderOverrides: boolean[][];\n};\n\n/**\n * Apply table format from table metadata and the passed in new format\n * @param table The table to apply format to\n * @param newFormat @optional New format to apply. When passed, this value will be merged into existing metadata format and default format\n * @param keepCellShade @optional When pass true, table cells with customized shade color will not be overwritten. @default false\n */\nexport function applyTableFormat(\n table: ReadonlyContentModelTable,\n newFormat?: TableMetadataFormat,\n keepCellShade?: boolean\n) {\n const mutableTable = mutateBlock(table);\n const { rows } = mutableTable;\n\n updateTableMetadata(mutableTable, format => {\n const effectiveMetadata = {\n ...DEFAULT_FORMAT,\n ...format,\n ...newFormat,\n };\n\n const metaOverrides: MetaOverrides = updateOverrides(rows, !keepCellShade);\n\n formatCells(rows, effectiveMetadata, metaOverrides);\n setFirstColumnFormatBorders(rows, effectiveMetadata);\n setHeaderRowFormat(rows, effectiveMetadata, metaOverrides);\n\n return effectiveMetadata;\n });\n}\n\nfunction updateOverrides(\n rows: ShallowMutableContentModelTableRow[],\n removeCellShade: boolean\n): MetaOverrides {\n const overrides: MetaOverrides = {\n bgColorOverrides: [],\n vAlignOverrides: [],\n borderOverrides: [],\n };\n\n rows.forEach(row => {\n const bgColorOverrides: boolean[] = [];\n const vAlignOverrides: boolean[] = [];\n const borderOverrides: boolean[] = [];\n\n overrides.bgColorOverrides.push(bgColorOverrides);\n overrides.vAlignOverrides.push(vAlignOverrides);\n overrides.borderOverrides.push(borderOverrides);\n\n row.cells.forEach(cell => {\n updateTableCellMetadata(mutateBlock(cell), metadata => {\n if (metadata && removeCellShade) {\n bgColorOverrides.push(false);\n delete metadata.bgColorOverride;\n } else {\n bgColorOverrides.push(!!metadata?.bgColorOverride);\n }\n vAlignOverrides.push(!!metadata?.vAlignOverride);\n borderOverrides.push(!!metadata?.borderOverride);\n\n return metadata;\n });\n });\n });\n\n return overrides;\n}\n\ntype ShouldUseTransparentBorder = (indexProp: {\n firstRow: boolean;\n lastRow: boolean;\n firstColumn: boolean;\n lastColumn: boolean;\n}) => [boolean, boolean, boolean, boolean];\n\nconst BorderFormatters: Record<number, ShouldUseTransparentBorder | undefined> = {\n [TableBorderFormat.Default]: _ => [false, false, false, false],\n [TableBorderFormat.ListWithSideBorders]: ({ lastColumn, firstColumn }) => [\n false,\n !lastColumn,\n false,\n !firstColumn,\n ],\n [TableBorderFormat.FirstColumnHeaderExternal]: ({\n firstColumn,\n firstRow,\n lastColumn,\n lastRow,\n }) => [\n !firstRow,\n (!lastColumn && !firstColumn) || (firstColumn && firstRow),\n !lastRow && !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.NoHeaderBorders]: ({ firstRow, firstColumn, lastColumn }) => [\n firstRow,\n firstRow || lastColumn,\n false,\n firstRow || firstColumn,\n ],\n [TableBorderFormat.NoSideBorders]: ({ firstColumn, lastColumn }) => [\n false,\n lastColumn,\n false,\n firstColumn,\n ],\n [TableBorderFormat.EspecialType1]: ({ firstRow, firstColumn }) => [\n firstColumn && !firstRow,\n firstRow,\n firstColumn && !firstRow,\n firstRow && !firstColumn,\n ],\n [TableBorderFormat.EspecialType2]: ({ firstRow, firstColumn }) => [\n !firstRow,\n firstRow || !firstColumn,\n !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.EspecialType3]: ({ firstColumn, firstRow }) => [\n true,\n firstRow || !firstColumn,\n !firstRow,\n true,\n ],\n [TableBorderFormat.Clear]: () => [true, true, true, true],\n};\n\n/*\n * Apply vertical align, borders, and background color to all cells in the table\n */\nfunction formatCells(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n const { hasBandedRows, hasBandedColumns, bgColorOdd, bgColorEven, hasFirstColumn } = format;\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, colIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n // Format Borders\n if (\n !metaOverrides.borderOverrides[rowIndex][colIndex] &&\n typeof format.tableBorderFormat == 'number'\n ) {\n const transparentBorderMatrix = BorderFormatters[format.tableBorderFormat]?.({\n firstRow: rowIndex === 0,\n lastRow: rowIndex === rows.length - 1,\n firstColumn: colIndex === 0,\n lastColumn: colIndex === row.cells.length - 1,\n });\n\n const formatColor = [\n format.topBorderColor,\n format.verticalBorderColor,\n format.bottomBorderColor,\n format.verticalBorderColor,\n ];\n\n transparentBorderMatrix?.forEach((alwaysUseTransparent, i) => {\n const borderColor = (!alwaysUseTransparent && formatColor[i]) || '';\n\n cell.format[BorderKeys[i]] = combineBorderValue({\n style: getBorderStyleFromColor(borderColor),\n width: '1px',\n color: borderColor,\n });\n });\n }\n\n // Format Background Color\n if (!metaOverrides.bgColorOverrides[rowIndex][colIndex]) {\n let color: string | null | undefined;\n if (hasFirstColumn && colIndex == 0 && rowIndex > 0) {\n color = null;\n } else {\n color =\n hasBandedRows || hasBandedColumns\n ? (hasBandedColumns && colIndex % 2 != 0) ||\n (hasBandedRows && rowIndex % 2 != 0)\n ? bgColorOdd\n : bgColorEven\n : bgColorEven; /* bgColorEven is the default color */\n }\n setTableCellBackgroundColor(\n cell,\n color,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n // Format Vertical Align\n if (format.verticalAlign && !metaOverrides.vAlignOverrides[rowIndex][colIndex]) {\n cell.format.verticalAlign = format.verticalAlign;\n }\n\n // Format Header\n cell.isHeader = false;\n });\n });\n}\n\n/**\n * Set the first column format borders for the table as well as header property\n * @param rows The rows of the table\n * @param format The table metadata format\n */\nexport function setFirstColumnFormatBorders(\n rows: ShallowMutableContentModelTableRow[],\n format: Partial<TableMetadataFormat>\n) {\n // Exit early hasFirstColumn is not set\n if (!format.hasFirstColumn) {\n return;\n }\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n if (cellIndex === 0) {\n cell.isHeader = true;\n\n switch (rowIndex) {\n case 0:\n cell.isHeader = !!format.hasHeaderRow;\n\n if (cell.isHeader) {\n cell.format.fontWeight = 'bold';\n }\n break;\n case rows.length - 1:\n setBorderColor(cell.format, 'borderTop');\n break;\n case 1:\n setBorderColor(cell.format, 'borderBottom');\n break;\n default:\n setBorderColor(cell.format, 'borderTop');\n setBorderColor(cell.format, 'borderBottom');\n break;\n }\n }\n });\n });\n}\n\nfunction setHeaderRowFormat(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n // Exit early if hasHeaderRow is not set\n if (!format.hasHeaderRow) {\n return;\n }\n\n const rowIndex = 0;\n\n rows[rowIndex]?.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n cell.isHeader = true;\n cell.format.fontWeight = 'bold';\n\n if (format.headerRowColor) {\n if (!metaOverrides.bgColorOverrides[rowIndex][cellIndex]) {\n setTableCellBackgroundColor(\n cell,\n format.headerRowColor,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n setBorderColor(cell.format, 'borderTop', format.headerRowColor);\n setBorderColor(cell.format, 'borderRight', format.headerRowColor);\n setBorderColor(cell.format, 'borderLeft', format.headerRowColor);\n }\n });\n}\n\n/**\n * @param format The cell format to set the border color\n * @param key The border key to set the color\n * @param value The color to set. If not given, it removes the color and sets the style to transparent\n */\nfunction setBorderColor(format: BorderFormat, key: keyof BorderFormat, value?: string) {\n const border = extractBorderValues(format[key]);\n border.color = value || '';\n border.style = getBorderStyleFromColor(border.color);\n format[key] = combineBorderValue(border);\n}\n\nfunction getBorderStyleFromColor(color?: string): string {\n return !color || color == 'transparent' ? 'none' : 'solid';\n}\n"]}
@@ -6,6 +6,7 @@ var updateMetadata_1 = require("../../modelApi/metadata/updateMetadata");
6
6
  var isEmpty_1 = require("../../modelApi/common/isEmpty");
7
7
  var moveChildNodes_1 = require("../../domUtils/moveChildNodes");
8
8
  var reuseCachedElement_1 = require("../../domUtils/reuseCachedElement");
9
+ var stackFormat_1 = require("../utils/stackFormat");
9
10
  /**
10
11
  * @internal
11
12
  */
@@ -51,7 +52,7 @@ var handleTable = function (doc, parent, table, context, refNode) {
51
52
  (0, applyFormat_1.applyFormat)(tr, context.formatAppliers.tableRow, tableRow.format, context);
52
53
  }
53
54
  (_b = context.onNodeCreated) === null || _b === void 0 ? void 0 : _b.call(context, tableRow, tr);
54
- for (var col = 0; col < tableRow.cells.length; col++) {
55
+ var _loop_1 = function (col) {
55
56
  var cell = tableRow.cells[col];
56
57
  if (cell.isSelected) {
57
58
  var tableSelection = context.tableSelection || {
@@ -69,9 +70,9 @@ var handleTable = function (doc, parent, table, context, refNode) {
69
70
  context.tableSelection = tableSelection;
70
71
  }
71
72
  if (!cell.spanAbove && !cell.spanLeft) {
72
- var td = (context.allowCacheElement && cell.cachedElement) ||
73
- doc.createElement(cell.isHeader ? 'th' : 'td');
74
- tr.appendChild(td);
73
+ var tag = cell.isHeader ? 'th' : 'td';
74
+ var td_1 = (context.allowCacheElement && cell.cachedElement) || doc.createElement(tag);
75
+ tr.appendChild(td_1);
75
76
  var rowSpan = 1;
76
77
  var colSpan = 1;
77
78
  var width = table.widths[col];
@@ -83,31 +84,36 @@ var handleTable = function (doc, parent, table, context, refNode) {
83
84
  width += table.widths[col + colSpan];
84
85
  }
85
86
  if (rowSpan > 1) {
86
- td.rowSpan = rowSpan;
87
+ td_1.rowSpan = rowSpan;
87
88
  }
88
89
  if (colSpan > 1) {
89
- td.colSpan = colSpan;
90
+ td_1.colSpan = colSpan;
90
91
  }
91
92
  if (!cell.cachedElement || (cell.format.useBorderBox && (0, updateMetadata_1.hasMetadata)(table))) {
92
- if (width > 0 && !td.style.width) {
93
- td.style.width = width + 'px';
93
+ if (width > 0 && !td_1.style.width) {
94
+ td_1.style.width = width + 'px';
94
95
  }
95
- if (height > 0 && !td.style.height) {
96
- td.style.height = height + 'px';
96
+ if (height > 0 && !td_1.style.height) {
97
+ td_1.style.height = height + 'px';
97
98
  }
98
99
  }
99
- if (!cell.cachedElement) {
100
- if (context.allowCacheElement) {
101
- cell.cachedElement = td;
100
+ (0, stackFormat_1.stackFormat)(context, tag, function () {
101
+ if (!cell.cachedElement) {
102
+ if (context.allowCacheElement) {
103
+ cell.cachedElement = td_1;
104
+ }
105
+ (0, applyFormat_1.applyFormat)(td_1, context.formatAppliers.block, cell.format, context);
106
+ (0, applyFormat_1.applyFormat)(td_1, context.formatAppliers.tableCell, cell.format, context);
107
+ (0, applyFormat_1.applyFormat)(td_1, context.formatAppliers.tableCellBorder, cell.format, context);
108
+ (0, applyFormat_1.applyFormat)(td_1, context.formatAppliers.dataset, cell.dataset, context);
102
109
  }
103
- (0, applyFormat_1.applyFormat)(td, context.formatAppliers.block, cell.format, context);
104
- (0, applyFormat_1.applyFormat)(td, context.formatAppliers.tableCell, cell.format, context);
105
- (0, applyFormat_1.applyFormat)(td, context.formatAppliers.tableCellBorder, cell.format, context);
106
- (0, applyFormat_1.applyFormat)(td, context.formatAppliers.dataset, cell.dataset, context);
107
- }
108
- context.modelHandlers.blockGroupChildren(doc, td, cell, context);
109
- (_f = context.onNodeCreated) === null || _f === void 0 ? void 0 : _f.call(context, cell, td);
110
+ context.modelHandlers.blockGroupChildren(doc, td_1, cell, context);
111
+ });
112
+ (_f = context.onNodeCreated) === null || _f === void 0 ? void 0 : _f.call(context, cell, td_1);
110
113
  }
114
+ };
115
+ for (var col = 0; col < tableRow.cells.length; col++) {
116
+ _loop_1(col);
111
117
  }
112
118
  }
113
119
  (_g = context.domIndexer) === null || _g === void 0 ? void 0 : _g.onTable(tableNode, table);
@@ -1 +1 @@
1
- {"version":3,"file":"handleTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../utils/applyFormat';\nimport { hasMetadata } from '../../modelApi/metadata/updateMetadata';\nimport { isBlockEmpty } from '../../modelApi/common/isEmpty';\nimport { moveChildNodes } from '../../domUtils/moveChildNodes';\nimport { reuseCachedElement } from '../../domUtils/reuseCachedElement';\nimport type {\n ContentModelBlockHandler,\n ContentModelTable,\n ModelToDomContext,\n TableSelection,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleTable: ContentModelBlockHandler<ContentModelTable> = (\n doc: Document,\n parent: Node,\n table: ContentModelTable,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n if (isBlockEmpty(table)) {\n // Empty table, do not create TABLE element and just return\n return refNode;\n }\n\n let tableNode = context.allowCacheElement ? table.cachedElement : undefined;\n\n if (tableNode) {\n refNode = reuseCachedElement(parent, tableNode, refNode, context.rewriteFromModel);\n\n moveChildNodes(tableNode);\n } else {\n tableNode = doc.createElement('table');\n\n if (context.allowCacheElement) {\n table.cachedElement = tableNode;\n }\n\n parent.insertBefore(tableNode, refNode);\n context.rewriteFromModel.addedBlockElements.push(tableNode);\n\n applyFormat(tableNode, context.formatAppliers.block, table.format, context);\n applyFormat(tableNode, context.formatAppliers.table, table.format, context);\n applyFormat(tableNode, context.formatAppliers.tableBorder, table.format, context);\n applyFormat(tableNode, context.formatAppliers.dataset, table.dataset, context);\n }\n\n context.onNodeCreated?.(table, tableNode);\n\n const tbody = doc.createElement('tbody');\n tableNode.appendChild(tbody);\n\n for (let row = 0; row < table.rows.length; row++) {\n const tableRow = table.rows[row];\n\n if (tableRow.cells.length == 0) {\n // Skip empty row\n continue;\n }\n\n const tr = (context.allowCacheElement && tableRow.cachedElement) || doc.createElement('tr');\n tbody.appendChild(tr);\n moveChildNodes(tr);\n\n if (!tableRow.cachedElement) {\n if (context.allowCacheElement) {\n tableRow.cachedElement = tr;\n }\n\n applyFormat(tr, context.formatAppliers.tableRow, tableRow.format, context);\n }\n\n context.onNodeCreated?.(tableRow, tr);\n\n for (let col = 0; col < tableRow.cells.length; col++) {\n const cell = tableRow.cells[col];\n\n if (cell.isSelected) {\n const tableSelection: TableSelection = context.tableSelection || {\n type: 'table',\n table: tableNode,\n firstColumn: col,\n lastColumn: col,\n firstRow: row,\n lastRow: row,\n };\n\n if (tableSelection.table == tableNode) {\n tableSelection.lastColumn = Math.max(tableSelection.lastColumn, col);\n tableSelection.lastRow = Math.max(tableSelection.lastRow, row);\n }\n\n context.tableSelection = tableSelection;\n }\n\n if (!cell.spanAbove && !cell.spanLeft) {\n const td =\n (context.allowCacheElement && cell.cachedElement) ||\n doc.createElement(cell.isHeader ? 'th' : 'td');\n\n tr.appendChild(td);\n\n let rowSpan = 1;\n let colSpan = 1;\n let width = table.widths[col];\n let height = tableRow.height;\n\n for (; table.rows[row + rowSpan]?.cells[col]?.spanAbove; rowSpan++) {\n height += table.rows[row + rowSpan].height;\n }\n for (; tableRow.cells[col + colSpan]?.spanLeft; colSpan++) {\n width += table.widths[col + colSpan];\n }\n\n if (rowSpan > 1) {\n td.rowSpan = rowSpan;\n }\n\n if (colSpan > 1) {\n td.colSpan = colSpan;\n }\n\n if (!cell.cachedElement || (cell.format.useBorderBox && hasMetadata(table))) {\n if (width > 0 && !td.style.width) {\n td.style.width = width + 'px';\n }\n\n if (height > 0 && !td.style.height) {\n td.style.height = height + 'px';\n }\n }\n\n if (!cell.cachedElement) {\n if (context.allowCacheElement) {\n cell.cachedElement = td;\n }\n\n applyFormat(td, context.formatAppliers.block, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCell, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCellBorder, cell.format, context);\n applyFormat(td, context.formatAppliers.dataset, cell.dataset, context);\n }\n\n context.modelHandlers.blockGroupChildren(doc, td, cell, context);\n\n context.onNodeCreated?.(cell, td);\n }\n }\n }\n\n context.domIndexer?.onTable(tableNode, table);\n\n return refNode;\n};\n"]}
1
+ {"version":3,"file":"handleTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../utils/applyFormat';\nimport { hasMetadata } from '../../modelApi/metadata/updateMetadata';\nimport { isBlockEmpty } from '../../modelApi/common/isEmpty';\nimport { moveChildNodes } from '../../domUtils/moveChildNodes';\nimport { reuseCachedElement } from '../../domUtils/reuseCachedElement';\nimport { stackFormat } from '../utils/stackFormat';\nimport type {\n ContentModelBlockHandler,\n ContentModelTable,\n ModelToDomContext,\n TableSelection,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleTable: ContentModelBlockHandler<ContentModelTable> = (\n doc: Document,\n parent: Node,\n table: ContentModelTable,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n if (isBlockEmpty(table)) {\n // Empty table, do not create TABLE element and just return\n return refNode;\n }\n\n let tableNode = context.allowCacheElement ? table.cachedElement : undefined;\n\n if (tableNode) {\n refNode = reuseCachedElement(parent, tableNode, refNode, context.rewriteFromModel);\n\n moveChildNodes(tableNode);\n } else {\n tableNode = doc.createElement('table');\n\n if (context.allowCacheElement) {\n table.cachedElement = tableNode;\n }\n\n parent.insertBefore(tableNode, refNode);\n context.rewriteFromModel.addedBlockElements.push(tableNode);\n\n applyFormat(tableNode, context.formatAppliers.block, table.format, context);\n applyFormat(tableNode, context.formatAppliers.table, table.format, context);\n applyFormat(tableNode, context.formatAppliers.tableBorder, table.format, context);\n applyFormat(tableNode, context.formatAppliers.dataset, table.dataset, context);\n }\n\n context.onNodeCreated?.(table, tableNode);\n\n const tbody = doc.createElement('tbody');\n tableNode.appendChild(tbody);\n\n for (let row = 0; row < table.rows.length; row++) {\n const tableRow = table.rows[row];\n\n if (tableRow.cells.length == 0) {\n // Skip empty row\n continue;\n }\n\n const tr = (context.allowCacheElement && tableRow.cachedElement) || doc.createElement('tr');\n tbody.appendChild(tr);\n moveChildNodes(tr);\n\n if (!tableRow.cachedElement) {\n if (context.allowCacheElement) {\n tableRow.cachedElement = tr;\n }\n\n applyFormat(tr, context.formatAppliers.tableRow, tableRow.format, context);\n }\n\n context.onNodeCreated?.(tableRow, tr);\n\n for (let col = 0; col < tableRow.cells.length; col++) {\n const cell = tableRow.cells[col];\n\n if (cell.isSelected) {\n const tableSelection: TableSelection = context.tableSelection || {\n type: 'table',\n table: tableNode,\n firstColumn: col,\n lastColumn: col,\n firstRow: row,\n lastRow: row,\n };\n\n if (tableSelection.table == tableNode) {\n tableSelection.lastColumn = Math.max(tableSelection.lastColumn, col);\n tableSelection.lastRow = Math.max(tableSelection.lastRow, row);\n }\n\n context.tableSelection = tableSelection;\n }\n\n if (!cell.spanAbove && !cell.spanLeft) {\n const tag = cell.isHeader ? 'th' : 'td';\n const td =\n (context.allowCacheElement && cell.cachedElement) || doc.createElement(tag);\n\n tr.appendChild(td);\n\n let rowSpan = 1;\n let colSpan = 1;\n let width = table.widths[col];\n let height = tableRow.height;\n\n for (; table.rows[row + rowSpan]?.cells[col]?.spanAbove; rowSpan++) {\n height += table.rows[row + rowSpan].height;\n }\n for (; tableRow.cells[col + colSpan]?.spanLeft; colSpan++) {\n width += table.widths[col + colSpan];\n }\n\n if (rowSpan > 1) {\n td.rowSpan = rowSpan;\n }\n\n if (colSpan > 1) {\n td.colSpan = colSpan;\n }\n\n if (!cell.cachedElement || (cell.format.useBorderBox && hasMetadata(table))) {\n if (width > 0 && !td.style.width) {\n td.style.width = width + 'px';\n }\n\n if (height > 0 && !td.style.height) {\n td.style.height = height + 'px';\n }\n }\n\n stackFormat(context, tag, () => {\n if (!cell.cachedElement) {\n if (context.allowCacheElement) {\n cell.cachedElement = td;\n }\n\n applyFormat(td, context.formatAppliers.block, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCell, cell.format, context);\n applyFormat(\n td,\n context.formatAppliers.tableCellBorder,\n cell.format,\n context\n );\n applyFormat(td, context.formatAppliers.dataset, cell.dataset, context);\n }\n\n context.modelHandlers.blockGroupChildren(doc, td, cell, context);\n });\n\n context.onNodeCreated?.(cell, td);\n }\n }\n }\n\n context.domIndexer?.onTable(tableNode, table);\n\n return refNode;\n};\n"]}
@@ -54,6 +54,9 @@ define(["require", "exports"], function (require, exports) {
54
54
  marginTop: '1em',
55
55
  marginBottom: '1em',
56
56
  },
57
+ th: {
58
+ fontWeight: 'bold',
59
+ },
57
60
  };
58
61
  });
59
62
  //# sourceMappingURL=defaultContentModelFormatMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultContentModelFormatMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultContentModelFormatMap.ts"],"names":[],"mappings":";;;;IAEA;;;OAGG;IACU,QAAA,4BAA4B,GAA6B;QAClE,CAAC,EAAE;YACC,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,SAAS,EAAE,sLAAsL;SAC/M;QACD,UAAU,EAAE;YACR,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,MAAM;SACtB;QACD,IAAI,EAAE;YACF,UAAU,EAAE,WAAW;SAC1B;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK;SAClB;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,OAAO;SACpB;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,QAAQ;SACrB;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,EAAE,wFAAwF;SAC5G;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,QAAQ;SACrB;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,QAAQ;SACrB;QACD,CAAC,EAAE;YACC,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;SACtB;QACD,GAAG,EAAE;YACD,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;SACtB;KACJ,CAAC","sourcesContent":["import type { DefaultImplicitFormatMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * A map from tag name to its default implicit formats\n */\nexport const defaultContentModelFormatMap: DefaultImplicitFormatMap = {\n a: {\n underline: true,\n textColor: undefined, // Set to undefined to force override color from parent element so we can write correct link color if any, because browser will assign a default color for link if it doesn't have one\n },\n blockquote: {\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n code: {\n fontFamily: 'monospace',\n },\n h1: {\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n fontWeight: 'bold',\n fontSize: '1em', // Set this default value here to overwrite existing font size when change heading level\n },\n h5: {\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n p: {\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n};\n"]}
1
+ {"version":3,"file":"defaultContentModelFormatMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultContentModelFormatMap.ts"],"names":[],"mappings":";;;;IAEA;;;OAGG;IACU,QAAA,4BAA4B,GAA6B;QAClE,CAAC,EAAE;YACC,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,SAAS,EAAE,sLAAsL;SAC/M;QACD,UAAU,EAAE;YACR,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,MAAM;SACtB;QACD,IAAI,EAAE;YACF,UAAU,EAAE,WAAW;SAC1B;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK;SAClB;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,OAAO;SACpB;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,QAAQ;SACrB;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,EAAE,wFAAwF;SAC5G;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,QAAQ;SACrB;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,QAAQ;SACrB;QACD,CAAC,EAAE;YACC,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;SACtB;QACD,GAAG,EAAE;YACD,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;SACtB;QACD,EAAE,EAAE;YACA,UAAU,EAAE,MAAM;SACrB;KACJ,CAAC","sourcesContent":["import type { DefaultImplicitFormatMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * A map from tag name to its default implicit formats\n */\nexport const defaultContentModelFormatMap: DefaultImplicitFormatMap = {\n a: {\n underline: true,\n textColor: undefined, // Set to undefined to force override color from parent element so we can write correct link color if any, because browser will assign a default color for link if it doesn't have one\n },\n blockquote: {\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n code: {\n fontFamily: 'monospace',\n },\n h1: {\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n fontWeight: 'bold',\n fontSize: '1em', // Set this default value here to overwrite existing font size when change heading level\n },\n h5: {\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n p: {\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n th: {\n fontWeight: 'bold',\n },\n};\n"]}
@@ -118,6 +118,7 @@ define(["require", "exports", "tslib"], function (require, exports, tslib_1) {
118
118
  },
119
119
  th: {
120
120
  display: 'table-cell',
121
+ fontWeight: 'bold',
121
122
  },
122
123
  u: {
123
124
  textDecoration: 'underline',
@@ -1 +1 @@
1
- {"version":3,"file":"defaultHTMLStyleMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultHTMLStyleMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DefaultStyleMap } from 'roosterjs-content-model-types';\n\nconst blockElement: Partial<CSSStyleDeclaration> = {\n display: 'block',\n};\n\n/**\n * @internal\n */\nexport const defaultHTMLStyleMap: DefaultStyleMap = {\n address: blockElement,\n article: blockElement,\n aside: blockElement,\n b: {\n fontWeight: 'bold',\n },\n blockquote: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n br: blockElement,\n center: {\n display: 'block',\n textAlign: 'center',\n },\n dd: blockElement,\n div: blockElement,\n dl: blockElement,\n dt: blockElement,\n em: {\n fontStyle: 'italic',\n },\n fieldset: blockElement,\n figcaption: blockElement,\n figure: blockElement,\n footer: blockElement,\n form: blockElement,\n h1: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n display: 'block',\n fontWeight: 'bold',\n },\n h5: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n header: blockElement,\n hr: blockElement,\n i: {\n fontStyle: 'italic',\n },\n li: {\n display: 'list-item',\n },\n main: blockElement,\n nav: blockElement,\n ol: { ...blockElement, paddingInlineStart: '40px' },\n p: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n display: 'block',\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n s: {\n textDecoration: 'line-through',\n },\n section: blockElement,\n strike: {\n textDecoration: 'line-through',\n },\n strong: {\n fontWeight: 'bold',\n },\n sub: {\n verticalAlign: 'sub',\n fontSize: 'smaller',\n },\n sup: {\n verticalAlign: 'super',\n fontSize: 'smaller',\n },\n table: {\n display: 'table',\n boxSizing: 'border-box',\n },\n td: {\n display: 'table-cell',\n },\n th: {\n display: 'table-cell',\n },\n u: {\n textDecoration: 'underline',\n },\n ul: { ...blockElement, paddingInlineStart: '40px' },\n};\n"]}
1
+ {"version":3,"file":"defaultHTMLStyleMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultHTMLStyleMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DefaultStyleMap } from 'roosterjs-content-model-types';\n\nconst blockElement: Partial<CSSStyleDeclaration> = {\n display: 'block',\n};\n\n/**\n * @internal\n */\nexport const defaultHTMLStyleMap: DefaultStyleMap = {\n address: blockElement,\n article: blockElement,\n aside: blockElement,\n b: {\n fontWeight: 'bold',\n },\n blockquote: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n br: blockElement,\n center: {\n display: 'block',\n textAlign: 'center',\n },\n dd: blockElement,\n div: blockElement,\n dl: blockElement,\n dt: blockElement,\n em: {\n fontStyle: 'italic',\n },\n fieldset: blockElement,\n figcaption: blockElement,\n figure: blockElement,\n footer: blockElement,\n form: blockElement,\n h1: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n display: 'block',\n fontWeight: 'bold',\n },\n h5: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n header: blockElement,\n hr: blockElement,\n i: {\n fontStyle: 'italic',\n },\n li: {\n display: 'list-item',\n },\n main: blockElement,\n nav: blockElement,\n ol: { ...blockElement, paddingInlineStart: '40px' },\n p: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n display: 'block',\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n s: {\n textDecoration: 'line-through',\n },\n section: blockElement,\n strike: {\n textDecoration: 'line-through',\n },\n strong: {\n fontWeight: 'bold',\n },\n sub: {\n verticalAlign: 'sub',\n fontSize: 'smaller',\n },\n sup: {\n verticalAlign: 'super',\n fontSize: 'smaller',\n },\n table: {\n display: 'table',\n boxSizing: 'border-box',\n },\n td: {\n display: 'table-cell',\n },\n th: {\n display: 'table-cell',\n fontWeight: 'bold',\n },\n u: {\n textDecoration: 'underline',\n },\n ul: { ...blockElement, paddingInlineStart: '40px' },\n};\n"]}
@@ -210,6 +210,9 @@ define(["require", "exports", "tslib", "../../formatHandlers/common/borderFormat
210
210
  switch (rowIndex) {
211
211
  case 0:
212
212
  cell.isHeader = !!format.hasHeaderRow;
213
+ if (cell.isHeader) {
214
+ cell.format.fontWeight = 'bold';
215
+ }
213
216
  break;
214
217
  case rows.length - 1:
215
218
  setBorderColor(cell.format, 'borderTop');
@@ -237,6 +240,7 @@ define(["require", "exports", "tslib", "../../formatHandlers/common/borderFormat
237
240
  (_a = rows[rowIndex]) === null || _a === void 0 ? void 0 : _a.cells.forEach(function (readonlyCell, cellIndex) {
238
241
  var cell = (0, mutate_1.mutateBlock)(readonlyCell);
239
242
  cell.isHeader = true;
243
+ cell.format.fontWeight = 'bold';
240
244
  if (format.headerRowColor) {
241
245
  if (!metaOverrides.bgColorOverrides[rowIndex][cellIndex]) {
242
246
  (0, setTableCellBackgroundColor_1.setTableCellBackgroundColor)(cell, format.headerRowColor, false /*isColorOverride*/, true /*applyToSegments*/);
@@ -1 +1 @@
1
- {"version":3,"file":"applyTableFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/editing/applyTableFormat.ts"],"names":[],"mappings":"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","sourcesContent":["import { BorderKeys } from '../../formatHandlers/common/borderFormatHandler';\nimport { combineBorderValue, extractBorderValues } from '../../domUtils/style/borderValues';\nimport { mutateBlock } from '../common/mutate';\nimport { setTableCellBackgroundColor } from './setTableCellBackgroundColor';\nimport { TableBorderFormat } from '../../constants/TableBorderFormat';\nimport { updateTableCellMetadata } from '../metadata/updateTableCellMetadata';\nimport { updateTableMetadata } from '../metadata/updateTableMetadata';\nimport type {\n BorderFormat,\n ReadonlyContentModelTable,\n ShallowMutableContentModelTableRow,\n TableMetadataFormat,\n} from 'roosterjs-content-model-types';\n\nconst DEFAULT_FORMAT: Required<TableMetadataFormat> = {\n topBorderColor: '#ABABAB',\n bottomBorderColor: '#ABABAB',\n verticalBorderColor: '#ABABAB',\n hasHeaderRow: false,\n hasFirstColumn: false,\n hasBandedRows: false,\n hasBandedColumns: false,\n bgColorEven: null,\n bgColorOdd: '#ABABAB20',\n headerRowColor: '#ABABAB',\n tableBorderFormat: TableBorderFormat.Default,\n verticalAlign: null,\n};\n\ntype MetaOverrides = {\n bgColorOverrides: boolean[][];\n vAlignOverrides: boolean[][];\n borderOverrides: boolean[][];\n};\n\n/**\n * Apply table format from table metadata and the passed in new format\n * @param table The table to apply format to\n * @param newFormat @optional New format to apply. When passed, this value will be merged into existing metadata format and default format\n * @param keepCellShade @optional When pass true, table cells with customized shade color will not be overwritten. @default false\n */\nexport function applyTableFormat(\n table: ReadonlyContentModelTable,\n newFormat?: TableMetadataFormat,\n keepCellShade?: boolean\n) {\n const mutableTable = mutateBlock(table);\n const { rows } = mutableTable;\n\n updateTableMetadata(mutableTable, format => {\n const effectiveMetadata = {\n ...DEFAULT_FORMAT,\n ...format,\n ...newFormat,\n };\n\n const metaOverrides: MetaOverrides = updateOverrides(rows, !keepCellShade);\n\n formatCells(rows, effectiveMetadata, metaOverrides);\n setFirstColumnFormatBorders(rows, effectiveMetadata);\n setHeaderRowFormat(rows, effectiveMetadata, metaOverrides);\n\n return effectiveMetadata;\n });\n}\n\nfunction updateOverrides(\n rows: ShallowMutableContentModelTableRow[],\n removeCellShade: boolean\n): MetaOverrides {\n const overrides: MetaOverrides = {\n bgColorOverrides: [],\n vAlignOverrides: [],\n borderOverrides: [],\n };\n\n rows.forEach(row => {\n const bgColorOverrides: boolean[] = [];\n const vAlignOverrides: boolean[] = [];\n const borderOverrides: boolean[] = [];\n\n overrides.bgColorOverrides.push(bgColorOverrides);\n overrides.vAlignOverrides.push(vAlignOverrides);\n overrides.borderOverrides.push(borderOverrides);\n\n row.cells.forEach(cell => {\n updateTableCellMetadata(mutateBlock(cell), metadata => {\n if (metadata && removeCellShade) {\n bgColorOverrides.push(false);\n delete metadata.bgColorOverride;\n } else {\n bgColorOverrides.push(!!metadata?.bgColorOverride);\n }\n vAlignOverrides.push(!!metadata?.vAlignOverride);\n borderOverrides.push(!!metadata?.borderOverride);\n\n return metadata;\n });\n });\n });\n\n return overrides;\n}\n\ntype ShouldUseTransparentBorder = (indexProp: {\n firstRow: boolean;\n lastRow: boolean;\n firstColumn: boolean;\n lastColumn: boolean;\n}) => [boolean, boolean, boolean, boolean];\n\nconst BorderFormatters: Record<number, ShouldUseTransparentBorder | undefined> = {\n [TableBorderFormat.Default]: _ => [false, false, false, false],\n [TableBorderFormat.ListWithSideBorders]: ({ lastColumn, firstColumn }) => [\n false,\n !lastColumn,\n false,\n !firstColumn,\n ],\n [TableBorderFormat.FirstColumnHeaderExternal]: ({\n firstColumn,\n firstRow,\n lastColumn,\n lastRow,\n }) => [\n !firstRow,\n (!lastColumn && !firstColumn) || (firstColumn && firstRow),\n !lastRow && !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.NoHeaderBorders]: ({ firstRow, firstColumn, lastColumn }) => [\n firstRow,\n firstRow || lastColumn,\n false,\n firstRow || firstColumn,\n ],\n [TableBorderFormat.NoSideBorders]: ({ firstColumn, lastColumn }) => [\n false,\n lastColumn,\n false,\n firstColumn,\n ],\n [TableBorderFormat.EspecialType1]: ({ firstRow, firstColumn }) => [\n firstColumn && !firstRow,\n firstRow,\n firstColumn && !firstRow,\n firstRow && !firstColumn,\n ],\n [TableBorderFormat.EspecialType2]: ({ firstRow, firstColumn }) => [\n !firstRow,\n firstRow || !firstColumn,\n !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.EspecialType3]: ({ firstColumn, firstRow }) => [\n true,\n firstRow || !firstColumn,\n !firstRow,\n true,\n ],\n [TableBorderFormat.Clear]: () => [true, true, true, true],\n};\n\n/*\n * Apply vertical align, borders, and background color to all cells in the table\n */\nfunction formatCells(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n const { hasBandedRows, hasBandedColumns, bgColorOdd, bgColorEven, hasFirstColumn } = format;\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, colIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n // Format Borders\n if (\n !metaOverrides.borderOverrides[rowIndex][colIndex] &&\n typeof format.tableBorderFormat == 'number'\n ) {\n const transparentBorderMatrix = BorderFormatters[format.tableBorderFormat]?.({\n firstRow: rowIndex === 0,\n lastRow: rowIndex === rows.length - 1,\n firstColumn: colIndex === 0,\n lastColumn: colIndex === row.cells.length - 1,\n });\n\n const formatColor = [\n format.topBorderColor,\n format.verticalBorderColor,\n format.bottomBorderColor,\n format.verticalBorderColor,\n ];\n\n transparentBorderMatrix?.forEach((alwaysUseTransparent, i) => {\n const borderColor = (!alwaysUseTransparent && formatColor[i]) || '';\n\n cell.format[BorderKeys[i]] = combineBorderValue({\n style: getBorderStyleFromColor(borderColor),\n width: '1px',\n color: borderColor,\n });\n });\n }\n\n // Format Background Color\n if (!metaOverrides.bgColorOverrides[rowIndex][colIndex]) {\n let color: string | null | undefined;\n if (hasFirstColumn && colIndex == 0 && rowIndex > 0) {\n color = null;\n } else {\n color =\n hasBandedRows || hasBandedColumns\n ? (hasBandedColumns && colIndex % 2 != 0) ||\n (hasBandedRows && rowIndex % 2 != 0)\n ? bgColorOdd\n : bgColorEven\n : bgColorEven; /* bgColorEven is the default color */\n }\n setTableCellBackgroundColor(\n cell,\n color,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n // Format Vertical Align\n if (format.verticalAlign && !metaOverrides.vAlignOverrides[rowIndex][colIndex]) {\n cell.format.verticalAlign = format.verticalAlign;\n }\n\n // Format Header\n cell.isHeader = false;\n });\n });\n}\n\n/**\n * Set the first column format borders for the table as well as header property\n * @param rows The rows of the table\n * @param format The table metadata format\n */\nexport function setFirstColumnFormatBorders(\n rows: ShallowMutableContentModelTableRow[],\n format: Partial<TableMetadataFormat>\n) {\n // Exit early hasFirstColumn is not set\n if (!format.hasFirstColumn) {\n return;\n }\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n if (cellIndex === 0) {\n cell.isHeader = true;\n\n switch (rowIndex) {\n case 0:\n cell.isHeader = !!format.hasHeaderRow;\n break;\n case rows.length - 1:\n setBorderColor(cell.format, 'borderTop');\n break;\n case 1:\n setBorderColor(cell.format, 'borderBottom');\n break;\n default:\n setBorderColor(cell.format, 'borderTop');\n setBorderColor(cell.format, 'borderBottom');\n break;\n }\n }\n });\n });\n}\n\nfunction setHeaderRowFormat(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n // Exit early if hasHeaderRow is not set\n if (!format.hasHeaderRow) {\n return;\n }\n\n const rowIndex = 0;\n\n rows[rowIndex]?.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n cell.isHeader = true;\n\n if (format.headerRowColor) {\n if (!metaOverrides.bgColorOverrides[rowIndex][cellIndex]) {\n setTableCellBackgroundColor(\n cell,\n format.headerRowColor,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n setBorderColor(cell.format, 'borderTop', format.headerRowColor);\n setBorderColor(cell.format, 'borderRight', format.headerRowColor);\n setBorderColor(cell.format, 'borderLeft', format.headerRowColor);\n }\n });\n}\n\n/**\n * @param format The cell format to set the border color\n * @param key The border key to set the color\n * @param value The color to set. If not given, it removes the color and sets the style to transparent\n */\nfunction setBorderColor(format: BorderFormat, key: keyof BorderFormat, value?: string) {\n const border = extractBorderValues(format[key]);\n border.color = value || '';\n border.style = getBorderStyleFromColor(border.color);\n format[key] = combineBorderValue(border);\n}\n\nfunction getBorderStyleFromColor(color?: string): string {\n return !color || color == 'transparent' ? 'none' : 'solid';\n}\n"]}
1
+ {"version":3,"file":"applyTableFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/editing/applyTableFormat.ts"],"names":[],"mappings":"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","sourcesContent":["import { BorderKeys } from '../../formatHandlers/common/borderFormatHandler';\nimport { combineBorderValue, extractBorderValues } from '../../domUtils/style/borderValues';\nimport { mutateBlock } from '../common/mutate';\nimport { setTableCellBackgroundColor } from './setTableCellBackgroundColor';\nimport { TableBorderFormat } from '../../constants/TableBorderFormat';\nimport { updateTableCellMetadata } from '../metadata/updateTableCellMetadata';\nimport { updateTableMetadata } from '../metadata/updateTableMetadata';\nimport type {\n BorderFormat,\n ReadonlyContentModelTable,\n ShallowMutableContentModelTableRow,\n TableMetadataFormat,\n} from 'roosterjs-content-model-types';\n\nconst DEFAULT_FORMAT: Required<TableMetadataFormat> = {\n topBorderColor: '#ABABAB',\n bottomBorderColor: '#ABABAB',\n verticalBorderColor: '#ABABAB',\n hasHeaderRow: false,\n hasFirstColumn: false,\n hasBandedRows: false,\n hasBandedColumns: false,\n bgColorEven: null,\n bgColorOdd: '#ABABAB20',\n headerRowColor: '#ABABAB',\n tableBorderFormat: TableBorderFormat.Default,\n verticalAlign: null,\n};\n\ntype MetaOverrides = {\n bgColorOverrides: boolean[][];\n vAlignOverrides: boolean[][];\n borderOverrides: boolean[][];\n};\n\n/**\n * Apply table format from table metadata and the passed in new format\n * @param table The table to apply format to\n * @param newFormat @optional New format to apply. When passed, this value will be merged into existing metadata format and default format\n * @param keepCellShade @optional When pass true, table cells with customized shade color will not be overwritten. @default false\n */\nexport function applyTableFormat(\n table: ReadonlyContentModelTable,\n newFormat?: TableMetadataFormat,\n keepCellShade?: boolean\n) {\n const mutableTable = mutateBlock(table);\n const { rows } = mutableTable;\n\n updateTableMetadata(mutableTable, format => {\n const effectiveMetadata = {\n ...DEFAULT_FORMAT,\n ...format,\n ...newFormat,\n };\n\n const metaOverrides: MetaOverrides = updateOverrides(rows, !keepCellShade);\n\n formatCells(rows, effectiveMetadata, metaOverrides);\n setFirstColumnFormatBorders(rows, effectiveMetadata);\n setHeaderRowFormat(rows, effectiveMetadata, metaOverrides);\n\n return effectiveMetadata;\n });\n}\n\nfunction updateOverrides(\n rows: ShallowMutableContentModelTableRow[],\n removeCellShade: boolean\n): MetaOverrides {\n const overrides: MetaOverrides = {\n bgColorOverrides: [],\n vAlignOverrides: [],\n borderOverrides: [],\n };\n\n rows.forEach(row => {\n const bgColorOverrides: boolean[] = [];\n const vAlignOverrides: boolean[] = [];\n const borderOverrides: boolean[] = [];\n\n overrides.bgColorOverrides.push(bgColorOverrides);\n overrides.vAlignOverrides.push(vAlignOverrides);\n overrides.borderOverrides.push(borderOverrides);\n\n row.cells.forEach(cell => {\n updateTableCellMetadata(mutateBlock(cell), metadata => {\n if (metadata && removeCellShade) {\n bgColorOverrides.push(false);\n delete metadata.bgColorOverride;\n } else {\n bgColorOverrides.push(!!metadata?.bgColorOverride);\n }\n vAlignOverrides.push(!!metadata?.vAlignOverride);\n borderOverrides.push(!!metadata?.borderOverride);\n\n return metadata;\n });\n });\n });\n\n return overrides;\n}\n\ntype ShouldUseTransparentBorder = (indexProp: {\n firstRow: boolean;\n lastRow: boolean;\n firstColumn: boolean;\n lastColumn: boolean;\n}) => [boolean, boolean, boolean, boolean];\n\nconst BorderFormatters: Record<number, ShouldUseTransparentBorder | undefined> = {\n [TableBorderFormat.Default]: _ => [false, false, false, false],\n [TableBorderFormat.ListWithSideBorders]: ({ lastColumn, firstColumn }) => [\n false,\n !lastColumn,\n false,\n !firstColumn,\n ],\n [TableBorderFormat.FirstColumnHeaderExternal]: ({\n firstColumn,\n firstRow,\n lastColumn,\n lastRow,\n }) => [\n !firstRow,\n (!lastColumn && !firstColumn) || (firstColumn && firstRow),\n !lastRow && !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.NoHeaderBorders]: ({ firstRow, firstColumn, lastColumn }) => [\n firstRow,\n firstRow || lastColumn,\n false,\n firstRow || firstColumn,\n ],\n [TableBorderFormat.NoSideBorders]: ({ firstColumn, lastColumn }) => [\n false,\n lastColumn,\n false,\n firstColumn,\n ],\n [TableBorderFormat.EspecialType1]: ({ firstRow, firstColumn }) => [\n firstColumn && !firstRow,\n firstRow,\n firstColumn && !firstRow,\n firstRow && !firstColumn,\n ],\n [TableBorderFormat.EspecialType2]: ({ firstRow, firstColumn }) => [\n !firstRow,\n firstRow || !firstColumn,\n !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.EspecialType3]: ({ firstColumn, firstRow }) => [\n true,\n firstRow || !firstColumn,\n !firstRow,\n true,\n ],\n [TableBorderFormat.Clear]: () => [true, true, true, true],\n};\n\n/*\n * Apply vertical align, borders, and background color to all cells in the table\n */\nfunction formatCells(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n const { hasBandedRows, hasBandedColumns, bgColorOdd, bgColorEven, hasFirstColumn } = format;\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, colIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n // Format Borders\n if (\n !metaOverrides.borderOverrides[rowIndex][colIndex] &&\n typeof format.tableBorderFormat == 'number'\n ) {\n const transparentBorderMatrix = BorderFormatters[format.tableBorderFormat]?.({\n firstRow: rowIndex === 0,\n lastRow: rowIndex === rows.length - 1,\n firstColumn: colIndex === 0,\n lastColumn: colIndex === row.cells.length - 1,\n });\n\n const formatColor = [\n format.topBorderColor,\n format.verticalBorderColor,\n format.bottomBorderColor,\n format.verticalBorderColor,\n ];\n\n transparentBorderMatrix?.forEach((alwaysUseTransparent, i) => {\n const borderColor = (!alwaysUseTransparent && formatColor[i]) || '';\n\n cell.format[BorderKeys[i]] = combineBorderValue({\n style: getBorderStyleFromColor(borderColor),\n width: '1px',\n color: borderColor,\n });\n });\n }\n\n // Format Background Color\n if (!metaOverrides.bgColorOverrides[rowIndex][colIndex]) {\n let color: string | null | undefined;\n if (hasFirstColumn && colIndex == 0 && rowIndex > 0) {\n color = null;\n } else {\n color =\n hasBandedRows || hasBandedColumns\n ? (hasBandedColumns && colIndex % 2 != 0) ||\n (hasBandedRows && rowIndex % 2 != 0)\n ? bgColorOdd\n : bgColorEven\n : bgColorEven; /* bgColorEven is the default color */\n }\n setTableCellBackgroundColor(\n cell,\n color,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n // Format Vertical Align\n if (format.verticalAlign && !metaOverrides.vAlignOverrides[rowIndex][colIndex]) {\n cell.format.verticalAlign = format.verticalAlign;\n }\n\n // Format Header\n cell.isHeader = false;\n });\n });\n}\n\n/**\n * Set the first column format borders for the table as well as header property\n * @param rows The rows of the table\n * @param format The table metadata format\n */\nexport function setFirstColumnFormatBorders(\n rows: ShallowMutableContentModelTableRow[],\n format: Partial<TableMetadataFormat>\n) {\n // Exit early hasFirstColumn is not set\n if (!format.hasFirstColumn) {\n return;\n }\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n if (cellIndex === 0) {\n cell.isHeader = true;\n\n switch (rowIndex) {\n case 0:\n cell.isHeader = !!format.hasHeaderRow;\n\n if (cell.isHeader) {\n cell.format.fontWeight = 'bold';\n }\n break;\n case rows.length - 1:\n setBorderColor(cell.format, 'borderTop');\n break;\n case 1:\n setBorderColor(cell.format, 'borderBottom');\n break;\n default:\n setBorderColor(cell.format, 'borderTop');\n setBorderColor(cell.format, 'borderBottom');\n break;\n }\n }\n });\n });\n}\n\nfunction setHeaderRowFormat(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n // Exit early if hasHeaderRow is not set\n if (!format.hasHeaderRow) {\n return;\n }\n\n const rowIndex = 0;\n\n rows[rowIndex]?.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n cell.isHeader = true;\n cell.format.fontWeight = 'bold';\n\n if (format.headerRowColor) {\n if (!metaOverrides.bgColorOverrides[rowIndex][cellIndex]) {\n setTableCellBackgroundColor(\n cell,\n format.headerRowColor,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n setBorderColor(cell.format, 'borderTop', format.headerRowColor);\n setBorderColor(cell.format, 'borderRight', format.headerRowColor);\n setBorderColor(cell.format, 'borderLeft', format.headerRowColor);\n }\n });\n}\n\n/**\n * @param format The cell format to set the border color\n * @param key The border key to set the color\n * @param value The color to set. If not given, it removes the color and sets the style to transparent\n */\nfunction setBorderColor(format: BorderFormat, key: keyof BorderFormat, value?: string) {\n const border = extractBorderValues(format[key]);\n border.color = value || '';\n border.style = getBorderStyleFromColor(border.color);\n format[key] = combineBorderValue(border);\n}\n\nfunction getBorderStyleFromColor(color?: string): string {\n return !color || color == 'transparent' ? 'none' : 'solid';\n}\n"]}
@@ -1,4 +1,4 @@
1
- define(["require", "exports", "../utils/applyFormat", "../../modelApi/metadata/updateMetadata", "../../modelApi/common/isEmpty", "../../domUtils/moveChildNodes", "../../domUtils/reuseCachedElement"], function (require, exports, applyFormat_1, updateMetadata_1, isEmpty_1, moveChildNodes_1, reuseCachedElement_1) {
1
+ define(["require", "exports", "../utils/applyFormat", "../../modelApi/metadata/updateMetadata", "../../modelApi/common/isEmpty", "../../domUtils/moveChildNodes", "../../domUtils/reuseCachedElement", "../utils/stackFormat"], function (require, exports, applyFormat_1, updateMetadata_1, isEmpty_1, moveChildNodes_1, reuseCachedElement_1, stackFormat_1) {
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.handleTable = void 0;
@@ -47,7 +47,7 @@ define(["require", "exports", "../utils/applyFormat", "../../modelApi/metadata/u
47
47
  (0, applyFormat_1.applyFormat)(tr, context.formatAppliers.tableRow, tableRow.format, context);
48
48
  }
49
49
  (_b = context.onNodeCreated) === null || _b === void 0 ? void 0 : _b.call(context, tableRow, tr);
50
- for (var col = 0; col < tableRow.cells.length; col++) {
50
+ var _loop_1 = function (col) {
51
51
  var cell = tableRow.cells[col];
52
52
  if (cell.isSelected) {
53
53
  var tableSelection = context.tableSelection || {
@@ -65,9 +65,9 @@ define(["require", "exports", "../utils/applyFormat", "../../modelApi/metadata/u
65
65
  context.tableSelection = tableSelection;
66
66
  }
67
67
  if (!cell.spanAbove && !cell.spanLeft) {
68
- var td = (context.allowCacheElement && cell.cachedElement) ||
69
- doc.createElement(cell.isHeader ? 'th' : 'td');
70
- tr.appendChild(td);
68
+ var tag = cell.isHeader ? 'th' : 'td';
69
+ var td_1 = (context.allowCacheElement && cell.cachedElement) || doc.createElement(tag);
70
+ tr.appendChild(td_1);
71
71
  var rowSpan = 1;
72
72
  var colSpan = 1;
73
73
  var width = table.widths[col];
@@ -79,31 +79,36 @@ define(["require", "exports", "../utils/applyFormat", "../../modelApi/metadata/u
79
79
  width += table.widths[col + colSpan];
80
80
  }
81
81
  if (rowSpan > 1) {
82
- td.rowSpan = rowSpan;
82
+ td_1.rowSpan = rowSpan;
83
83
  }
84
84
  if (colSpan > 1) {
85
- td.colSpan = colSpan;
85
+ td_1.colSpan = colSpan;
86
86
  }
87
87
  if (!cell.cachedElement || (cell.format.useBorderBox && (0, updateMetadata_1.hasMetadata)(table))) {
88
- if (width > 0 && !td.style.width) {
89
- td.style.width = width + 'px';
88
+ if (width > 0 && !td_1.style.width) {
89
+ td_1.style.width = width + 'px';
90
90
  }
91
- if (height > 0 && !td.style.height) {
92
- td.style.height = height + 'px';
91
+ if (height > 0 && !td_1.style.height) {
92
+ td_1.style.height = height + 'px';
93
93
  }
94
94
  }
95
- if (!cell.cachedElement) {
96
- if (context.allowCacheElement) {
97
- cell.cachedElement = td;
95
+ (0, stackFormat_1.stackFormat)(context, tag, function () {
96
+ if (!cell.cachedElement) {
97
+ if (context.allowCacheElement) {
98
+ cell.cachedElement = td_1;
99
+ }
100
+ (0, applyFormat_1.applyFormat)(td_1, context.formatAppliers.block, cell.format, context);
101
+ (0, applyFormat_1.applyFormat)(td_1, context.formatAppliers.tableCell, cell.format, context);
102
+ (0, applyFormat_1.applyFormat)(td_1, context.formatAppliers.tableCellBorder, cell.format, context);
103
+ (0, applyFormat_1.applyFormat)(td_1, context.formatAppliers.dataset, cell.dataset, context);
98
104
  }
99
- (0, applyFormat_1.applyFormat)(td, context.formatAppliers.block, cell.format, context);
100
- (0, applyFormat_1.applyFormat)(td, context.formatAppliers.tableCell, cell.format, context);
101
- (0, applyFormat_1.applyFormat)(td, context.formatAppliers.tableCellBorder, cell.format, context);
102
- (0, applyFormat_1.applyFormat)(td, context.formatAppliers.dataset, cell.dataset, context);
103
- }
104
- context.modelHandlers.blockGroupChildren(doc, td, cell, context);
105
- (_f = context.onNodeCreated) === null || _f === void 0 ? void 0 : _f.call(context, cell, td);
105
+ context.modelHandlers.blockGroupChildren(doc, td_1, cell, context);
106
+ });
107
+ (_f = context.onNodeCreated) === null || _f === void 0 ? void 0 : _f.call(context, cell, td_1);
106
108
  }
109
+ };
110
+ for (var col = 0; col < tableRow.cells.length; col++) {
111
+ _loop_1(col);
107
112
  }
108
113
  }
109
114
  (_g = context.domIndexer) === null || _g === void 0 ? void 0 : _g.onTable(tableNode, table);
@@ -1 +1 @@
1
- {"version":3,"file":"handleTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../utils/applyFormat';\nimport { hasMetadata } from '../../modelApi/metadata/updateMetadata';\nimport { isBlockEmpty } from '../../modelApi/common/isEmpty';\nimport { moveChildNodes } from '../../domUtils/moveChildNodes';\nimport { reuseCachedElement } from '../../domUtils/reuseCachedElement';\nimport type {\n ContentModelBlockHandler,\n ContentModelTable,\n ModelToDomContext,\n TableSelection,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleTable: ContentModelBlockHandler<ContentModelTable> = (\n doc: Document,\n parent: Node,\n table: ContentModelTable,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n if (isBlockEmpty(table)) {\n // Empty table, do not create TABLE element and just return\n return refNode;\n }\n\n let tableNode = context.allowCacheElement ? table.cachedElement : undefined;\n\n if (tableNode) {\n refNode = reuseCachedElement(parent, tableNode, refNode, context.rewriteFromModel);\n\n moveChildNodes(tableNode);\n } else {\n tableNode = doc.createElement('table');\n\n if (context.allowCacheElement) {\n table.cachedElement = tableNode;\n }\n\n parent.insertBefore(tableNode, refNode);\n context.rewriteFromModel.addedBlockElements.push(tableNode);\n\n applyFormat(tableNode, context.formatAppliers.block, table.format, context);\n applyFormat(tableNode, context.formatAppliers.table, table.format, context);\n applyFormat(tableNode, context.formatAppliers.tableBorder, table.format, context);\n applyFormat(tableNode, context.formatAppliers.dataset, table.dataset, context);\n }\n\n context.onNodeCreated?.(table, tableNode);\n\n const tbody = doc.createElement('tbody');\n tableNode.appendChild(tbody);\n\n for (let row = 0; row < table.rows.length; row++) {\n const tableRow = table.rows[row];\n\n if (tableRow.cells.length == 0) {\n // Skip empty row\n continue;\n }\n\n const tr = (context.allowCacheElement && tableRow.cachedElement) || doc.createElement('tr');\n tbody.appendChild(tr);\n moveChildNodes(tr);\n\n if (!tableRow.cachedElement) {\n if (context.allowCacheElement) {\n tableRow.cachedElement = tr;\n }\n\n applyFormat(tr, context.formatAppliers.tableRow, tableRow.format, context);\n }\n\n context.onNodeCreated?.(tableRow, tr);\n\n for (let col = 0; col < tableRow.cells.length; col++) {\n const cell = tableRow.cells[col];\n\n if (cell.isSelected) {\n const tableSelection: TableSelection = context.tableSelection || {\n type: 'table',\n table: tableNode,\n firstColumn: col,\n lastColumn: col,\n firstRow: row,\n lastRow: row,\n };\n\n if (tableSelection.table == tableNode) {\n tableSelection.lastColumn = Math.max(tableSelection.lastColumn, col);\n tableSelection.lastRow = Math.max(tableSelection.lastRow, row);\n }\n\n context.tableSelection = tableSelection;\n }\n\n if (!cell.spanAbove && !cell.spanLeft) {\n const td =\n (context.allowCacheElement && cell.cachedElement) ||\n doc.createElement(cell.isHeader ? 'th' : 'td');\n\n tr.appendChild(td);\n\n let rowSpan = 1;\n let colSpan = 1;\n let width = table.widths[col];\n let height = tableRow.height;\n\n for (; table.rows[row + rowSpan]?.cells[col]?.spanAbove; rowSpan++) {\n height += table.rows[row + rowSpan].height;\n }\n for (; tableRow.cells[col + colSpan]?.spanLeft; colSpan++) {\n width += table.widths[col + colSpan];\n }\n\n if (rowSpan > 1) {\n td.rowSpan = rowSpan;\n }\n\n if (colSpan > 1) {\n td.colSpan = colSpan;\n }\n\n if (!cell.cachedElement || (cell.format.useBorderBox && hasMetadata(table))) {\n if (width > 0 && !td.style.width) {\n td.style.width = width + 'px';\n }\n\n if (height > 0 && !td.style.height) {\n td.style.height = height + 'px';\n }\n }\n\n if (!cell.cachedElement) {\n if (context.allowCacheElement) {\n cell.cachedElement = td;\n }\n\n applyFormat(td, context.formatAppliers.block, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCell, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCellBorder, cell.format, context);\n applyFormat(td, context.formatAppliers.dataset, cell.dataset, context);\n }\n\n context.modelHandlers.blockGroupChildren(doc, td, cell, context);\n\n context.onNodeCreated?.(cell, td);\n }\n }\n }\n\n context.domIndexer?.onTable(tableNode, table);\n\n return refNode;\n};\n"]}
1
+ {"version":3,"file":"handleTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../utils/applyFormat';\nimport { hasMetadata } from '../../modelApi/metadata/updateMetadata';\nimport { isBlockEmpty } from '../../modelApi/common/isEmpty';\nimport { moveChildNodes } from '../../domUtils/moveChildNodes';\nimport { reuseCachedElement } from '../../domUtils/reuseCachedElement';\nimport { stackFormat } from '../utils/stackFormat';\nimport type {\n ContentModelBlockHandler,\n ContentModelTable,\n ModelToDomContext,\n TableSelection,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleTable: ContentModelBlockHandler<ContentModelTable> = (\n doc: Document,\n parent: Node,\n table: ContentModelTable,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n if (isBlockEmpty(table)) {\n // Empty table, do not create TABLE element and just return\n return refNode;\n }\n\n let tableNode = context.allowCacheElement ? table.cachedElement : undefined;\n\n if (tableNode) {\n refNode = reuseCachedElement(parent, tableNode, refNode, context.rewriteFromModel);\n\n moveChildNodes(tableNode);\n } else {\n tableNode = doc.createElement('table');\n\n if (context.allowCacheElement) {\n table.cachedElement = tableNode;\n }\n\n parent.insertBefore(tableNode, refNode);\n context.rewriteFromModel.addedBlockElements.push(tableNode);\n\n applyFormat(tableNode, context.formatAppliers.block, table.format, context);\n applyFormat(tableNode, context.formatAppliers.table, table.format, context);\n applyFormat(tableNode, context.formatAppliers.tableBorder, table.format, context);\n applyFormat(tableNode, context.formatAppliers.dataset, table.dataset, context);\n }\n\n context.onNodeCreated?.(table, tableNode);\n\n const tbody = doc.createElement('tbody');\n tableNode.appendChild(tbody);\n\n for (let row = 0; row < table.rows.length; row++) {\n const tableRow = table.rows[row];\n\n if (tableRow.cells.length == 0) {\n // Skip empty row\n continue;\n }\n\n const tr = (context.allowCacheElement && tableRow.cachedElement) || doc.createElement('tr');\n tbody.appendChild(tr);\n moveChildNodes(tr);\n\n if (!tableRow.cachedElement) {\n if (context.allowCacheElement) {\n tableRow.cachedElement = tr;\n }\n\n applyFormat(tr, context.formatAppliers.tableRow, tableRow.format, context);\n }\n\n context.onNodeCreated?.(tableRow, tr);\n\n for (let col = 0; col < tableRow.cells.length; col++) {\n const cell = tableRow.cells[col];\n\n if (cell.isSelected) {\n const tableSelection: TableSelection = context.tableSelection || {\n type: 'table',\n table: tableNode,\n firstColumn: col,\n lastColumn: col,\n firstRow: row,\n lastRow: row,\n };\n\n if (tableSelection.table == tableNode) {\n tableSelection.lastColumn = Math.max(tableSelection.lastColumn, col);\n tableSelection.lastRow = Math.max(tableSelection.lastRow, row);\n }\n\n context.tableSelection = tableSelection;\n }\n\n if (!cell.spanAbove && !cell.spanLeft) {\n const tag = cell.isHeader ? 'th' : 'td';\n const td =\n (context.allowCacheElement && cell.cachedElement) || doc.createElement(tag);\n\n tr.appendChild(td);\n\n let rowSpan = 1;\n let colSpan = 1;\n let width = table.widths[col];\n let height = tableRow.height;\n\n for (; table.rows[row + rowSpan]?.cells[col]?.spanAbove; rowSpan++) {\n height += table.rows[row + rowSpan].height;\n }\n for (; tableRow.cells[col + colSpan]?.spanLeft; colSpan++) {\n width += table.widths[col + colSpan];\n }\n\n if (rowSpan > 1) {\n td.rowSpan = rowSpan;\n }\n\n if (colSpan > 1) {\n td.colSpan = colSpan;\n }\n\n if (!cell.cachedElement || (cell.format.useBorderBox && hasMetadata(table))) {\n if (width > 0 && !td.style.width) {\n td.style.width = width + 'px';\n }\n\n if (height > 0 && !td.style.height) {\n td.style.height = height + 'px';\n }\n }\n\n stackFormat(context, tag, () => {\n if (!cell.cachedElement) {\n if (context.allowCacheElement) {\n cell.cachedElement = td;\n }\n\n applyFormat(td, context.formatAppliers.block, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCell, cell.format, context);\n applyFormat(\n td,\n context.formatAppliers.tableCellBorder,\n cell.format,\n context\n );\n applyFormat(td, context.formatAppliers.dataset, cell.dataset, context);\n }\n\n context.modelHandlers.blockGroupChildren(doc, td, cell, context);\n });\n\n context.onNodeCreated?.(cell, td);\n }\n }\n }\n\n context.domIndexer?.onTable(tableNode, table);\n\n return refNode;\n};\n"]}
@@ -50,5 +50,8 @@ export var defaultContentModelFormatMap = {
50
50
  marginTop: '1em',
51
51
  marginBottom: '1em',
52
52
  },
53
+ th: {
54
+ fontWeight: 'bold',
55
+ },
53
56
  };
54
57
  //# sourceMappingURL=defaultContentModelFormatMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultContentModelFormatMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultContentModelFormatMap.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,IAAM,4BAA4B,GAA6B;IAClE,CAAC,EAAE;QACC,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,SAAS,EAAE,sLAAsL;KAC/M;IACD,UAAU,EAAE;QACR,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM;KACtB;IACD,IAAI,EAAE;QACF,UAAU,EAAE,WAAW;KAC1B;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,KAAK;KAClB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,OAAO;KACpB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,KAAK,EAAE,wFAAwF;KAC5G;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,CAAC,EAAE;QACC,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;IACD,GAAG,EAAE;QACD,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;CACJ,CAAC","sourcesContent":["import type { DefaultImplicitFormatMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * A map from tag name to its default implicit formats\n */\nexport const defaultContentModelFormatMap: DefaultImplicitFormatMap = {\n a: {\n underline: true,\n textColor: undefined, // Set to undefined to force override color from parent element so we can write correct link color if any, because browser will assign a default color for link if it doesn't have one\n },\n blockquote: {\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n code: {\n fontFamily: 'monospace',\n },\n h1: {\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n fontWeight: 'bold',\n fontSize: '1em', // Set this default value here to overwrite existing font size when change heading level\n },\n h5: {\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n p: {\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n};\n"]}
1
+ {"version":3,"file":"defaultContentModelFormatMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultContentModelFormatMap.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,IAAM,4BAA4B,GAA6B;IAClE,CAAC,EAAE;QACC,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,SAAS,EAAE,sLAAsL;KAC/M;IACD,UAAU,EAAE;QACR,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM;KACtB;IACD,IAAI,EAAE;QACF,UAAU,EAAE,WAAW;KAC1B;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,KAAK;KAClB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,OAAO;KACpB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,KAAK,EAAE,wFAAwF;KAC5G;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;KACrB;IACD,CAAC,EAAE;QACC,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;IACD,GAAG,EAAE;QACD,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;IACD,EAAE,EAAE;QACA,UAAU,EAAE,MAAM;KACrB;CACJ,CAAC","sourcesContent":["import type { DefaultImplicitFormatMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * A map from tag name to its default implicit formats\n */\nexport const defaultContentModelFormatMap: DefaultImplicitFormatMap = {\n a: {\n underline: true,\n textColor: undefined, // Set to undefined to force override color from parent element so we can write correct link color if any, because browser will assign a default color for link if it doesn't have one\n },\n blockquote: {\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n code: {\n fontFamily: 'monospace',\n },\n h1: {\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n fontWeight: 'bold',\n fontSize: '1em', // Set this default value here to overwrite existing font size when change heading level\n },\n h5: {\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n p: {\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n th: {\n fontWeight: 'bold',\n },\n};\n"]}
@@ -115,6 +115,7 @@ export var defaultHTMLStyleMap = {
115
115
  },
116
116
  th: {
117
117
  display: 'table-cell',
118
+ fontWeight: 'bold',
118
119
  },
119
120
  u: {
120
121
  textDecoration: 'underline',
@@ -1 +1 @@
1
- {"version":3,"file":"defaultHTMLStyleMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultHTMLStyleMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DefaultStyleMap } from 'roosterjs-content-model-types';\n\nconst blockElement: Partial<CSSStyleDeclaration> = {\n display: 'block',\n};\n\n/**\n * @internal\n */\nexport const defaultHTMLStyleMap: DefaultStyleMap = {\n address: blockElement,\n article: blockElement,\n aside: blockElement,\n b: {\n fontWeight: 'bold',\n },\n blockquote: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n br: blockElement,\n center: {\n display: 'block',\n textAlign: 'center',\n },\n dd: blockElement,\n div: blockElement,\n dl: blockElement,\n dt: blockElement,\n em: {\n fontStyle: 'italic',\n },\n fieldset: blockElement,\n figcaption: blockElement,\n figure: blockElement,\n footer: blockElement,\n form: blockElement,\n h1: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n display: 'block',\n fontWeight: 'bold',\n },\n h5: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n header: blockElement,\n hr: blockElement,\n i: {\n fontStyle: 'italic',\n },\n li: {\n display: 'list-item',\n },\n main: blockElement,\n nav: blockElement,\n ol: { ...blockElement, paddingInlineStart: '40px' },\n p: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n display: 'block',\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n s: {\n textDecoration: 'line-through',\n },\n section: blockElement,\n strike: {\n textDecoration: 'line-through',\n },\n strong: {\n fontWeight: 'bold',\n },\n sub: {\n verticalAlign: 'sub',\n fontSize: 'smaller',\n },\n sup: {\n verticalAlign: 'super',\n fontSize: 'smaller',\n },\n table: {\n display: 'table',\n boxSizing: 'border-box',\n },\n td: {\n display: 'table-cell',\n },\n th: {\n display: 'table-cell',\n },\n u: {\n textDecoration: 'underline',\n },\n ul: { ...blockElement, paddingInlineStart: '40px' },\n};\n"]}
1
+ {"version":3,"file":"defaultHTMLStyleMap.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/config/defaultHTMLStyleMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DefaultStyleMap } from 'roosterjs-content-model-types';\n\nconst blockElement: Partial<CSSStyleDeclaration> = {\n display: 'block',\n};\n\n/**\n * @internal\n */\nexport const defaultHTMLStyleMap: DefaultStyleMap = {\n address: blockElement,\n article: blockElement,\n aside: blockElement,\n b: {\n fontWeight: 'bold',\n },\n blockquote: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n marginLeft: '40px',\n marginRight: '40px',\n },\n br: blockElement,\n center: {\n display: 'block',\n textAlign: 'center',\n },\n dd: blockElement,\n div: blockElement,\n dl: blockElement,\n dt: blockElement,\n em: {\n fontStyle: 'italic',\n },\n fieldset: blockElement,\n figcaption: blockElement,\n figure: blockElement,\n footer: blockElement,\n form: blockElement,\n h1: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '2em',\n },\n h2: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.5em',\n },\n h3: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '1.17em',\n },\n h4: {\n display: 'block',\n fontWeight: 'bold',\n },\n h5: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.83em',\n },\n h6: {\n display: 'block',\n fontWeight: 'bold',\n fontSize: '0.67em',\n },\n header: blockElement,\n hr: blockElement,\n i: {\n fontStyle: 'italic',\n },\n li: {\n display: 'list-item',\n },\n main: blockElement,\n nav: blockElement,\n ol: { ...blockElement, paddingInlineStart: '40px' },\n p: {\n display: 'block',\n marginTop: '1em',\n marginBottom: '1em',\n },\n pre: {\n display: 'block',\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n marginTop: '1em',\n marginBottom: '1em',\n },\n s: {\n textDecoration: 'line-through',\n },\n section: blockElement,\n strike: {\n textDecoration: 'line-through',\n },\n strong: {\n fontWeight: 'bold',\n },\n sub: {\n verticalAlign: 'sub',\n fontSize: 'smaller',\n },\n sup: {\n verticalAlign: 'super',\n fontSize: 'smaller',\n },\n table: {\n display: 'table',\n boxSizing: 'border-box',\n },\n td: {\n display: 'table-cell',\n },\n th: {\n display: 'table-cell',\n fontWeight: 'bold',\n },\n u: {\n textDecoration: 'underline',\n },\n ul: { ...blockElement, paddingInlineStart: '40px' },\n};\n"]}
@@ -213,6 +213,9 @@ export function setFirstColumnFormatBorders(rows, format) {
213
213
  switch (rowIndex) {
214
214
  case 0:
215
215
  cell.isHeader = !!format.hasHeaderRow;
216
+ if (cell.isHeader) {
217
+ cell.format.fontWeight = 'bold';
218
+ }
216
219
  break;
217
220
  case rows.length - 1:
218
221
  setBorderColor(cell.format, 'borderTop');
@@ -239,6 +242,7 @@ function setHeaderRowFormat(rows, format, metaOverrides) {
239
242
  (_a = rows[rowIndex]) === null || _a === void 0 ? void 0 : _a.cells.forEach(function (readonlyCell, cellIndex) {
240
243
  var cell = mutateBlock(readonlyCell);
241
244
  cell.isHeader = true;
245
+ cell.format.fontWeight = 'bold';
242
246
  if (format.headerRowColor) {
243
247
  if (!metaOverrides.bgColorOverrides[rowIndex][cellIndex]) {
244
248
  setTableCellBackgroundColor(cell, format.headerRowColor, false /*isColorOverride*/, true /*applyToSegments*/);
@@ -1 +1 @@
1
- {"version":3,"file":"applyTableFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/editing/applyTableFormat.ts"],"names":[],"mappings":"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","sourcesContent":["import { BorderKeys } from '../../formatHandlers/common/borderFormatHandler';\nimport { combineBorderValue, extractBorderValues } from '../../domUtils/style/borderValues';\nimport { mutateBlock } from '../common/mutate';\nimport { setTableCellBackgroundColor } from './setTableCellBackgroundColor';\nimport { TableBorderFormat } from '../../constants/TableBorderFormat';\nimport { updateTableCellMetadata } from '../metadata/updateTableCellMetadata';\nimport { updateTableMetadata } from '../metadata/updateTableMetadata';\nimport type {\n BorderFormat,\n ReadonlyContentModelTable,\n ShallowMutableContentModelTableRow,\n TableMetadataFormat,\n} from 'roosterjs-content-model-types';\n\nconst DEFAULT_FORMAT: Required<TableMetadataFormat> = {\n topBorderColor: '#ABABAB',\n bottomBorderColor: '#ABABAB',\n verticalBorderColor: '#ABABAB',\n hasHeaderRow: false,\n hasFirstColumn: false,\n hasBandedRows: false,\n hasBandedColumns: false,\n bgColorEven: null,\n bgColorOdd: '#ABABAB20',\n headerRowColor: '#ABABAB',\n tableBorderFormat: TableBorderFormat.Default,\n verticalAlign: null,\n};\n\ntype MetaOverrides = {\n bgColorOverrides: boolean[][];\n vAlignOverrides: boolean[][];\n borderOverrides: boolean[][];\n};\n\n/**\n * Apply table format from table metadata and the passed in new format\n * @param table The table to apply format to\n * @param newFormat @optional New format to apply. When passed, this value will be merged into existing metadata format and default format\n * @param keepCellShade @optional When pass true, table cells with customized shade color will not be overwritten. @default false\n */\nexport function applyTableFormat(\n table: ReadonlyContentModelTable,\n newFormat?: TableMetadataFormat,\n keepCellShade?: boolean\n) {\n const mutableTable = mutateBlock(table);\n const { rows } = mutableTable;\n\n updateTableMetadata(mutableTable, format => {\n const effectiveMetadata = {\n ...DEFAULT_FORMAT,\n ...format,\n ...newFormat,\n };\n\n const metaOverrides: MetaOverrides = updateOverrides(rows, !keepCellShade);\n\n formatCells(rows, effectiveMetadata, metaOverrides);\n setFirstColumnFormatBorders(rows, effectiveMetadata);\n setHeaderRowFormat(rows, effectiveMetadata, metaOverrides);\n\n return effectiveMetadata;\n });\n}\n\nfunction updateOverrides(\n rows: ShallowMutableContentModelTableRow[],\n removeCellShade: boolean\n): MetaOverrides {\n const overrides: MetaOverrides = {\n bgColorOverrides: [],\n vAlignOverrides: [],\n borderOverrides: [],\n };\n\n rows.forEach(row => {\n const bgColorOverrides: boolean[] = [];\n const vAlignOverrides: boolean[] = [];\n const borderOverrides: boolean[] = [];\n\n overrides.bgColorOverrides.push(bgColorOverrides);\n overrides.vAlignOverrides.push(vAlignOverrides);\n overrides.borderOverrides.push(borderOverrides);\n\n row.cells.forEach(cell => {\n updateTableCellMetadata(mutateBlock(cell), metadata => {\n if (metadata && removeCellShade) {\n bgColorOverrides.push(false);\n delete metadata.bgColorOverride;\n } else {\n bgColorOverrides.push(!!metadata?.bgColorOverride);\n }\n vAlignOverrides.push(!!metadata?.vAlignOverride);\n borderOverrides.push(!!metadata?.borderOverride);\n\n return metadata;\n });\n });\n });\n\n return overrides;\n}\n\ntype ShouldUseTransparentBorder = (indexProp: {\n firstRow: boolean;\n lastRow: boolean;\n firstColumn: boolean;\n lastColumn: boolean;\n}) => [boolean, boolean, boolean, boolean];\n\nconst BorderFormatters: Record<number, ShouldUseTransparentBorder | undefined> = {\n [TableBorderFormat.Default]: _ => [false, false, false, false],\n [TableBorderFormat.ListWithSideBorders]: ({ lastColumn, firstColumn }) => [\n false,\n !lastColumn,\n false,\n !firstColumn,\n ],\n [TableBorderFormat.FirstColumnHeaderExternal]: ({\n firstColumn,\n firstRow,\n lastColumn,\n lastRow,\n }) => [\n !firstRow,\n (!lastColumn && !firstColumn) || (firstColumn && firstRow),\n !lastRow && !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.NoHeaderBorders]: ({ firstRow, firstColumn, lastColumn }) => [\n firstRow,\n firstRow || lastColumn,\n false,\n firstRow || firstColumn,\n ],\n [TableBorderFormat.NoSideBorders]: ({ firstColumn, lastColumn }) => [\n false,\n lastColumn,\n false,\n firstColumn,\n ],\n [TableBorderFormat.EspecialType1]: ({ firstRow, firstColumn }) => [\n firstColumn && !firstRow,\n firstRow,\n firstColumn && !firstRow,\n firstRow && !firstColumn,\n ],\n [TableBorderFormat.EspecialType2]: ({ firstRow, firstColumn }) => [\n !firstRow,\n firstRow || !firstColumn,\n !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.EspecialType3]: ({ firstColumn, firstRow }) => [\n true,\n firstRow || !firstColumn,\n !firstRow,\n true,\n ],\n [TableBorderFormat.Clear]: () => [true, true, true, true],\n};\n\n/*\n * Apply vertical align, borders, and background color to all cells in the table\n */\nfunction formatCells(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n const { hasBandedRows, hasBandedColumns, bgColorOdd, bgColorEven, hasFirstColumn } = format;\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, colIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n // Format Borders\n if (\n !metaOverrides.borderOverrides[rowIndex][colIndex] &&\n typeof format.tableBorderFormat == 'number'\n ) {\n const transparentBorderMatrix = BorderFormatters[format.tableBorderFormat]?.({\n firstRow: rowIndex === 0,\n lastRow: rowIndex === rows.length - 1,\n firstColumn: colIndex === 0,\n lastColumn: colIndex === row.cells.length - 1,\n });\n\n const formatColor = [\n format.topBorderColor,\n format.verticalBorderColor,\n format.bottomBorderColor,\n format.verticalBorderColor,\n ];\n\n transparentBorderMatrix?.forEach((alwaysUseTransparent, i) => {\n const borderColor = (!alwaysUseTransparent && formatColor[i]) || '';\n\n cell.format[BorderKeys[i]] = combineBorderValue({\n style: getBorderStyleFromColor(borderColor),\n width: '1px',\n color: borderColor,\n });\n });\n }\n\n // Format Background Color\n if (!metaOverrides.bgColorOverrides[rowIndex][colIndex]) {\n let color: string | null | undefined;\n if (hasFirstColumn && colIndex == 0 && rowIndex > 0) {\n color = null;\n } else {\n color =\n hasBandedRows || hasBandedColumns\n ? (hasBandedColumns && colIndex % 2 != 0) ||\n (hasBandedRows && rowIndex % 2 != 0)\n ? bgColorOdd\n : bgColorEven\n : bgColorEven; /* bgColorEven is the default color */\n }\n setTableCellBackgroundColor(\n cell,\n color,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n // Format Vertical Align\n if (format.verticalAlign && !metaOverrides.vAlignOverrides[rowIndex][colIndex]) {\n cell.format.verticalAlign = format.verticalAlign;\n }\n\n // Format Header\n cell.isHeader = false;\n });\n });\n}\n\n/**\n * Set the first column format borders for the table as well as header property\n * @param rows The rows of the table\n * @param format The table metadata format\n */\nexport function setFirstColumnFormatBorders(\n rows: ShallowMutableContentModelTableRow[],\n format: Partial<TableMetadataFormat>\n) {\n // Exit early hasFirstColumn is not set\n if (!format.hasFirstColumn) {\n return;\n }\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n if (cellIndex === 0) {\n cell.isHeader = true;\n\n switch (rowIndex) {\n case 0:\n cell.isHeader = !!format.hasHeaderRow;\n break;\n case rows.length - 1:\n setBorderColor(cell.format, 'borderTop');\n break;\n case 1:\n setBorderColor(cell.format, 'borderBottom');\n break;\n default:\n setBorderColor(cell.format, 'borderTop');\n setBorderColor(cell.format, 'borderBottom');\n break;\n }\n }\n });\n });\n}\n\nfunction setHeaderRowFormat(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n // Exit early if hasHeaderRow is not set\n if (!format.hasHeaderRow) {\n return;\n }\n\n const rowIndex = 0;\n\n rows[rowIndex]?.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n cell.isHeader = true;\n\n if (format.headerRowColor) {\n if (!metaOverrides.bgColorOverrides[rowIndex][cellIndex]) {\n setTableCellBackgroundColor(\n cell,\n format.headerRowColor,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n setBorderColor(cell.format, 'borderTop', format.headerRowColor);\n setBorderColor(cell.format, 'borderRight', format.headerRowColor);\n setBorderColor(cell.format, 'borderLeft', format.headerRowColor);\n }\n });\n}\n\n/**\n * @param format The cell format to set the border color\n * @param key The border key to set the color\n * @param value The color to set. If not given, it removes the color and sets the style to transparent\n */\nfunction setBorderColor(format: BorderFormat, key: keyof BorderFormat, value?: string) {\n const border = extractBorderValues(format[key]);\n border.color = value || '';\n border.style = getBorderStyleFromColor(border.color);\n format[key] = combineBorderValue(border);\n}\n\nfunction getBorderStyleFromColor(color?: string): string {\n return !color || color == 'transparent' ? 'none' : 'solid';\n}\n"]}
1
+ {"version":3,"file":"applyTableFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/editing/applyTableFormat.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAQtE,IAAM,cAAc,GAAkC;IAClD,cAAc,EAAE,SAAS;IACzB,iBAAiB,EAAE,SAAS;IAC5B,mBAAmB,EAAE,SAAS;IAC9B,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,KAAK;IACpB,gBAAgB,EAAE,KAAK;IACvB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,WAAW;IACvB,cAAc,EAAE,SAAS;IACzB,iBAAiB,EAAE,iBAAiB,CAAC,OAAO;IAC5C,aAAa,EAAE,IAAI;CACtB,CAAC;AAQF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC5B,KAAgC,EAChC,SAA+B,EAC/B,aAAuB;IAEvB,IAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAA,IAAI,GAAK,YAAY,KAAjB,CAAkB;IAE9B,mBAAmB,CAAC,YAAY,EAAE,UAAA,MAAM;QACpC,IAAM,iBAAiB,kCAChB,cAAc,GACd,MAAM,GACN,SAAS,CACf,CAAC;QAEF,IAAM,aAAa,GAAkB,eAAe,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC;QAE3E,WAAW,CAAC,IAAI,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;QACpD,2BAA2B,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACrD,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAE3D,OAAO,iBAAiB,CAAC;IAC7B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,eAAe,CACpB,IAA0C,EAC1C,eAAwB;IAExB,IAAM,SAAS,GAAkB;QAC7B,gBAAgB,EAAE,EAAE;QACpB,eAAe,EAAE,EAAE;QACnB,eAAe,EAAE,EAAE;KACtB,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,UAAA,GAAG;QACZ,IAAM,gBAAgB,GAAc,EAAE,CAAC;QACvC,IAAM,eAAe,GAAc,EAAE,CAAC;QACtC,IAAM,eAAe,GAAc,EAAE,CAAC;QAEtC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClD,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChD,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEhD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;YAClB,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,UAAA,QAAQ;gBAC/C,IAAI,QAAQ,IAAI,eAAe,EAAE;oBAC7B,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC7B,OAAO,QAAQ,CAAC,eAAe,CAAC;iBACnC;qBAAM;oBACH,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,CAAA,CAAC,CAAC;iBACtD;gBACD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,cAAc,CAAA,CAAC,CAAC;gBACjD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,cAAc,CAAA,CAAC,CAAC;gBAEjD,OAAO,QAAQ,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACrB,CAAC;AASD,IAAM,gBAAgB;IAClB,GAAC,iBAAiB,CAAC,OAAO,IAAG,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAA5B,CAA4B;IAC9D,GAAC,iBAAiB,CAAC,mBAAmB,IAAG,UAAC,EAA2B;YAAzB,UAAU,gBAAA,EAAE,WAAW,iBAAA;QAAO,OAAA;YACtE,KAAK;YACL,CAAC,UAAU;YACX,KAAK;YACL,CAAC,WAAW;SACf;IALyE,CAKzE;IACD,GAAC,iBAAiB,CAAC,yBAAyB,IAAG,UAAC,EAK/C;YAJG,WAAW,iBAAA,EACX,QAAQ,cAAA,EACR,UAAU,gBAAA,EACV,OAAO,aAAA;QACL,OAAA;YACF,CAAC,QAAQ;YACT,CAAC,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC;YAC1D,CAAC,OAAO,IAAI,CAAC,QAAQ;YACrB,CAAC,WAAW;SACf;IALK,CAKL;IACD,GAAC,iBAAiB,CAAC,eAAe,IAAG,UAAC,EAAqC;YAAnC,QAAQ,cAAA,EAAE,WAAW,iBAAA,EAAE,UAAU,gBAAA;QAAO,OAAA;YAC5E,QAAQ;YACR,QAAQ,IAAI,UAAU;YACtB,KAAK;YACL,QAAQ,IAAI,WAAW;SAC1B;IAL+E,CAK/E;IACD,GAAC,iBAAiB,CAAC,aAAa,IAAG,UAAC,EAA2B;YAAzB,WAAW,iBAAA,EAAE,UAAU,gBAAA;QAAO,OAAA;YAChE,KAAK;YACL,UAAU;YACV,KAAK;YACL,WAAW;SACd;IALmE,CAKnE;IACD,GAAC,iBAAiB,CAAC,aAAa,IAAG,UAAC,EAAyB;YAAvB,QAAQ,cAAA,EAAE,WAAW,iBAAA;QAAO,OAAA;YAC9D,WAAW,IAAI,CAAC,QAAQ;YACxB,QAAQ;YACR,WAAW,IAAI,CAAC,QAAQ;YACxB,QAAQ,IAAI,CAAC,WAAW;SAC3B;IALiE,CAKjE;IACD,GAAC,iBAAiB,CAAC,aAAa,IAAG,UAAC,EAAyB;YAAvB,QAAQ,cAAA,EAAE,WAAW,iBAAA;QAAO,OAAA;YAC9D,CAAC,QAAQ;YACT,QAAQ,IAAI,CAAC,WAAW;YACxB,CAAC,QAAQ;YACT,CAAC,WAAW;SACf;IALiE,CAKjE;IACD,GAAC,iBAAiB,CAAC,aAAa,IAAG,UAAC,EAAyB;YAAvB,WAAW,iBAAA,EAAE,QAAQ,cAAA;QAAO,OAAA;YAC9D,IAAI;YACJ,QAAQ,IAAI,CAAC,WAAW;YACxB,CAAC,QAAQ;YACT,IAAI;SACP;IALiE,CAKjE;IACD,GAAC,iBAAiB,CAAC,KAAK,IAAG,cAAM,OAAA,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAxB,CAAwB;OAC5D,CAAC;AAEF;;GAEG;AACH,SAAS,WAAW,CAChB,IAA0C,EAC1C,MAA2B,EAC3B,aAA4B;IAEpB,IAAA,aAAa,GAAgE,MAAM,cAAtE,EAAE,gBAAgB,GAA8C,MAAM,iBAApD,EAAE,UAAU,GAAkC,MAAM,WAAxC,EAAE,WAAW,GAAqB,MAAM,YAA3B,EAAE,cAAc,GAAK,MAAM,eAAX,CAAY;IAE5F,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,QAAQ;QACvB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,YAAY,EAAE,QAAQ;;YACrC,IAAM,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;YAEvC,iBAAiB;YACjB,IACI,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;gBAClD,OAAO,MAAM,CAAC,iBAAiB,IAAI,QAAQ,EAC7C;gBACE,IAAM,uBAAuB,GAAG,MAAA,gBAAgB,CAAC,MAAM,CAAC,iBAAiB,CAAC,+CAA1C,gBAAgB,EAA6B;oBACzE,QAAQ,EAAE,QAAQ,KAAK,CAAC;oBACxB,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;oBACrC,WAAW,EAAE,QAAQ,KAAK,CAAC;oBAC3B,UAAU,EAAE,QAAQ,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;iBAChD,CAAC,CAAC;gBAEH,IAAM,aAAW,GAAG;oBAChB,MAAM,CAAC,cAAc;oBACrB,MAAM,CAAC,mBAAmB;oBAC1B,MAAM,CAAC,iBAAiB;oBACxB,MAAM,CAAC,mBAAmB;iBAC7B,CAAC;gBAEF,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,OAAO,CAAC,UAAC,oBAAoB,EAAE,CAAC;oBACrD,IAAM,WAAW,GAAG,CAAC,CAAC,oBAAoB,IAAI,aAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAEpE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;wBAC5C,KAAK,EAAE,uBAAuB,CAAC,WAAW,CAAC;wBAC3C,KAAK,EAAE,KAAK;wBACZ,KAAK,EAAE,WAAW;qBACrB,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;aACN;YAED,0BAA0B;YAC1B,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE;gBACrD,IAAI,KAAK,SAA2B,CAAC;gBACrC,IAAI,cAAc,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;oBACjD,KAAK,GAAG,IAAI,CAAC;iBAChB;qBAAM;oBACH,KAAK;wBACD,aAAa,IAAI,gBAAgB;4BAC7B,CAAC,CAAC,CAAC,gBAAgB,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC;gCACvC,CAAC,aAAa,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC;gCAClC,CAAC,CAAC,UAAU;gCACZ,CAAC,CAAC,WAAW;4BACjB,CAAC,CAAC,WAAW,CAAC,CAAC,sCAAsC;iBAChE;gBACD,2BAA2B,CACvB,IAAI,EACJ,KAAK,EACL,KAAK,CAAC,mBAAmB,EACzB,IAAI,CAAC,mBAAmB,CAC3B,CAAC;aACL;YAED,wBAAwB;YACxB,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE;gBAC5E,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;aACpD;YAED,gBAAgB;YAChB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACvC,IAA0C,EAC1C,MAAoC;IAEpC,uCAAuC;IACvC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;QACxB,OAAO;KACV;IAED,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,QAAQ;QACvB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,YAAY,EAAE,SAAS;YACtC,IAAM,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;YAEvC,IAAI,SAAS,KAAK,CAAC,EAAE;gBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAErB,QAAQ,QAAQ,EAAE;oBACd,KAAK,CAAC;wBACF,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;wBAEtC,IAAI,IAAI,CAAC,QAAQ,EAAE;4BACf,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;yBACnC;wBACD,MAAM;oBACV,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;wBAChB,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;wBACzC,MAAM;oBACV,KAAK,CAAC;wBACF,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;wBAC5C,MAAM;oBACV;wBACI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;wBACzC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;wBAC5C,MAAM;iBACb;aACJ;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,kBAAkB,CACvB,IAA0C,EAC1C,MAA2B,EAC3B,aAA4B;;IAE5B,wCAAwC;IACxC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;QACtB,OAAO;KACV;IAED,IAAM,QAAQ,GAAG,CAAC,CAAC;IAEnB,MAAA,IAAI,CAAC,QAAQ,CAAC,0CAAE,KAAK,CAAC,OAAO,CAAC,UAAC,YAAY,EAAE,SAAS;QAClD,IAAM,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;QAEhC,IAAI,MAAM,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE;gBACtD,2BAA2B,CACvB,IAAI,EACJ,MAAM,CAAC,cAAc,EACrB,KAAK,CAAC,mBAAmB,EACzB,IAAI,CAAC,mBAAmB,CAC3B,CAAC;aACL;YAED,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;YAChE,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;YAClE,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;SACpE;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,MAAoB,EAAE,GAAuB,EAAE,KAAc;IACjF,IAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;IAC3B,MAAM,CAAC,KAAK,GAAG,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC3C,OAAO,CAAC,KAAK,IAAI,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/D,CAAC","sourcesContent":["import { BorderKeys } from '../../formatHandlers/common/borderFormatHandler';\nimport { combineBorderValue, extractBorderValues } from '../../domUtils/style/borderValues';\nimport { mutateBlock } from '../common/mutate';\nimport { setTableCellBackgroundColor } from './setTableCellBackgroundColor';\nimport { TableBorderFormat } from '../../constants/TableBorderFormat';\nimport { updateTableCellMetadata } from '../metadata/updateTableCellMetadata';\nimport { updateTableMetadata } from '../metadata/updateTableMetadata';\nimport type {\n BorderFormat,\n ReadonlyContentModelTable,\n ShallowMutableContentModelTableRow,\n TableMetadataFormat,\n} from 'roosterjs-content-model-types';\n\nconst DEFAULT_FORMAT: Required<TableMetadataFormat> = {\n topBorderColor: '#ABABAB',\n bottomBorderColor: '#ABABAB',\n verticalBorderColor: '#ABABAB',\n hasHeaderRow: false,\n hasFirstColumn: false,\n hasBandedRows: false,\n hasBandedColumns: false,\n bgColorEven: null,\n bgColorOdd: '#ABABAB20',\n headerRowColor: '#ABABAB',\n tableBorderFormat: TableBorderFormat.Default,\n verticalAlign: null,\n};\n\ntype MetaOverrides = {\n bgColorOverrides: boolean[][];\n vAlignOverrides: boolean[][];\n borderOverrides: boolean[][];\n};\n\n/**\n * Apply table format from table metadata and the passed in new format\n * @param table The table to apply format to\n * @param newFormat @optional New format to apply. When passed, this value will be merged into existing metadata format and default format\n * @param keepCellShade @optional When pass true, table cells with customized shade color will not be overwritten. @default false\n */\nexport function applyTableFormat(\n table: ReadonlyContentModelTable,\n newFormat?: TableMetadataFormat,\n keepCellShade?: boolean\n) {\n const mutableTable = mutateBlock(table);\n const { rows } = mutableTable;\n\n updateTableMetadata(mutableTable, format => {\n const effectiveMetadata = {\n ...DEFAULT_FORMAT,\n ...format,\n ...newFormat,\n };\n\n const metaOverrides: MetaOverrides = updateOverrides(rows, !keepCellShade);\n\n formatCells(rows, effectiveMetadata, metaOverrides);\n setFirstColumnFormatBorders(rows, effectiveMetadata);\n setHeaderRowFormat(rows, effectiveMetadata, metaOverrides);\n\n return effectiveMetadata;\n });\n}\n\nfunction updateOverrides(\n rows: ShallowMutableContentModelTableRow[],\n removeCellShade: boolean\n): MetaOverrides {\n const overrides: MetaOverrides = {\n bgColorOverrides: [],\n vAlignOverrides: [],\n borderOverrides: [],\n };\n\n rows.forEach(row => {\n const bgColorOverrides: boolean[] = [];\n const vAlignOverrides: boolean[] = [];\n const borderOverrides: boolean[] = [];\n\n overrides.bgColorOverrides.push(bgColorOverrides);\n overrides.vAlignOverrides.push(vAlignOverrides);\n overrides.borderOverrides.push(borderOverrides);\n\n row.cells.forEach(cell => {\n updateTableCellMetadata(mutateBlock(cell), metadata => {\n if (metadata && removeCellShade) {\n bgColorOverrides.push(false);\n delete metadata.bgColorOverride;\n } else {\n bgColorOverrides.push(!!metadata?.bgColorOverride);\n }\n vAlignOverrides.push(!!metadata?.vAlignOverride);\n borderOverrides.push(!!metadata?.borderOverride);\n\n return metadata;\n });\n });\n });\n\n return overrides;\n}\n\ntype ShouldUseTransparentBorder = (indexProp: {\n firstRow: boolean;\n lastRow: boolean;\n firstColumn: boolean;\n lastColumn: boolean;\n}) => [boolean, boolean, boolean, boolean];\n\nconst BorderFormatters: Record<number, ShouldUseTransparentBorder | undefined> = {\n [TableBorderFormat.Default]: _ => [false, false, false, false],\n [TableBorderFormat.ListWithSideBorders]: ({ lastColumn, firstColumn }) => [\n false,\n !lastColumn,\n false,\n !firstColumn,\n ],\n [TableBorderFormat.FirstColumnHeaderExternal]: ({\n firstColumn,\n firstRow,\n lastColumn,\n lastRow,\n }) => [\n !firstRow,\n (!lastColumn && !firstColumn) || (firstColumn && firstRow),\n !lastRow && !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.NoHeaderBorders]: ({ firstRow, firstColumn, lastColumn }) => [\n firstRow,\n firstRow || lastColumn,\n false,\n firstRow || firstColumn,\n ],\n [TableBorderFormat.NoSideBorders]: ({ firstColumn, lastColumn }) => [\n false,\n lastColumn,\n false,\n firstColumn,\n ],\n [TableBorderFormat.EspecialType1]: ({ firstRow, firstColumn }) => [\n firstColumn && !firstRow,\n firstRow,\n firstColumn && !firstRow,\n firstRow && !firstColumn,\n ],\n [TableBorderFormat.EspecialType2]: ({ firstRow, firstColumn }) => [\n !firstRow,\n firstRow || !firstColumn,\n !firstRow,\n !firstColumn,\n ],\n [TableBorderFormat.EspecialType3]: ({ firstColumn, firstRow }) => [\n true,\n firstRow || !firstColumn,\n !firstRow,\n true,\n ],\n [TableBorderFormat.Clear]: () => [true, true, true, true],\n};\n\n/*\n * Apply vertical align, borders, and background color to all cells in the table\n */\nfunction formatCells(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n const { hasBandedRows, hasBandedColumns, bgColorOdd, bgColorEven, hasFirstColumn } = format;\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, colIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n // Format Borders\n if (\n !metaOverrides.borderOverrides[rowIndex][colIndex] &&\n typeof format.tableBorderFormat == 'number'\n ) {\n const transparentBorderMatrix = BorderFormatters[format.tableBorderFormat]?.({\n firstRow: rowIndex === 0,\n lastRow: rowIndex === rows.length - 1,\n firstColumn: colIndex === 0,\n lastColumn: colIndex === row.cells.length - 1,\n });\n\n const formatColor = [\n format.topBorderColor,\n format.verticalBorderColor,\n format.bottomBorderColor,\n format.verticalBorderColor,\n ];\n\n transparentBorderMatrix?.forEach((alwaysUseTransparent, i) => {\n const borderColor = (!alwaysUseTransparent && formatColor[i]) || '';\n\n cell.format[BorderKeys[i]] = combineBorderValue({\n style: getBorderStyleFromColor(borderColor),\n width: '1px',\n color: borderColor,\n });\n });\n }\n\n // Format Background Color\n if (!metaOverrides.bgColorOverrides[rowIndex][colIndex]) {\n let color: string | null | undefined;\n if (hasFirstColumn && colIndex == 0 && rowIndex > 0) {\n color = null;\n } else {\n color =\n hasBandedRows || hasBandedColumns\n ? (hasBandedColumns && colIndex % 2 != 0) ||\n (hasBandedRows && rowIndex % 2 != 0)\n ? bgColorOdd\n : bgColorEven\n : bgColorEven; /* bgColorEven is the default color */\n }\n setTableCellBackgroundColor(\n cell,\n color,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n // Format Vertical Align\n if (format.verticalAlign && !metaOverrides.vAlignOverrides[rowIndex][colIndex]) {\n cell.format.verticalAlign = format.verticalAlign;\n }\n\n // Format Header\n cell.isHeader = false;\n });\n });\n}\n\n/**\n * Set the first column format borders for the table as well as header property\n * @param rows The rows of the table\n * @param format The table metadata format\n */\nexport function setFirstColumnFormatBorders(\n rows: ShallowMutableContentModelTableRow[],\n format: Partial<TableMetadataFormat>\n) {\n // Exit early hasFirstColumn is not set\n if (!format.hasFirstColumn) {\n return;\n }\n\n rows.forEach((row, rowIndex) => {\n row.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n if (cellIndex === 0) {\n cell.isHeader = true;\n\n switch (rowIndex) {\n case 0:\n cell.isHeader = !!format.hasHeaderRow;\n\n if (cell.isHeader) {\n cell.format.fontWeight = 'bold';\n }\n break;\n case rows.length - 1:\n setBorderColor(cell.format, 'borderTop');\n break;\n case 1:\n setBorderColor(cell.format, 'borderBottom');\n break;\n default:\n setBorderColor(cell.format, 'borderTop');\n setBorderColor(cell.format, 'borderBottom');\n break;\n }\n }\n });\n });\n}\n\nfunction setHeaderRowFormat(\n rows: ShallowMutableContentModelTableRow[],\n format: TableMetadataFormat,\n metaOverrides: MetaOverrides\n) {\n // Exit early if hasHeaderRow is not set\n if (!format.hasHeaderRow) {\n return;\n }\n\n const rowIndex = 0;\n\n rows[rowIndex]?.cells.forEach((readonlyCell, cellIndex) => {\n const cell = mutateBlock(readonlyCell);\n\n cell.isHeader = true;\n cell.format.fontWeight = 'bold';\n\n if (format.headerRowColor) {\n if (!metaOverrides.bgColorOverrides[rowIndex][cellIndex]) {\n setTableCellBackgroundColor(\n cell,\n format.headerRowColor,\n false /*isColorOverride*/,\n true /*applyToSegments*/\n );\n }\n\n setBorderColor(cell.format, 'borderTop', format.headerRowColor);\n setBorderColor(cell.format, 'borderRight', format.headerRowColor);\n setBorderColor(cell.format, 'borderLeft', format.headerRowColor);\n }\n });\n}\n\n/**\n * @param format The cell format to set the border color\n * @param key The border key to set the color\n * @param value The color to set. If not given, it removes the color and sets the style to transparent\n */\nfunction setBorderColor(format: BorderFormat, key: keyof BorderFormat, value?: string) {\n const border = extractBorderValues(format[key]);\n border.color = value || '';\n border.style = getBorderStyleFromColor(border.color);\n format[key] = combineBorderValue(border);\n}\n\nfunction getBorderStyleFromColor(color?: string): string {\n return !color || color == 'transparent' ? 'none' : 'solid';\n}\n"]}
@@ -3,6 +3,7 @@ import { hasMetadata } from '../../modelApi/metadata/updateMetadata';
3
3
  import { isBlockEmpty } from '../../modelApi/common/isEmpty';
4
4
  import { moveChildNodes } from '../../domUtils/moveChildNodes';
5
5
  import { reuseCachedElement } from '../../domUtils/reuseCachedElement';
6
+ import { stackFormat } from '../utils/stackFormat';
6
7
  /**
7
8
  * @internal
8
9
  */
@@ -48,7 +49,7 @@ export var handleTable = function (doc, parent, table, context, refNode) {
48
49
  applyFormat(tr, context.formatAppliers.tableRow, tableRow.format, context);
49
50
  }
50
51
  (_b = context.onNodeCreated) === null || _b === void 0 ? void 0 : _b.call(context, tableRow, tr);
51
- for (var col = 0; col < tableRow.cells.length; col++) {
52
+ var _loop_1 = function (col) {
52
53
  var cell = tableRow.cells[col];
53
54
  if (cell.isSelected) {
54
55
  var tableSelection = context.tableSelection || {
@@ -66,9 +67,9 @@ export var handleTable = function (doc, parent, table, context, refNode) {
66
67
  context.tableSelection = tableSelection;
67
68
  }
68
69
  if (!cell.spanAbove && !cell.spanLeft) {
69
- var td = (context.allowCacheElement && cell.cachedElement) ||
70
- doc.createElement(cell.isHeader ? 'th' : 'td');
71
- tr.appendChild(td);
70
+ var tag = cell.isHeader ? 'th' : 'td';
71
+ var td_1 = (context.allowCacheElement && cell.cachedElement) || doc.createElement(tag);
72
+ tr.appendChild(td_1);
72
73
  var rowSpan = 1;
73
74
  var colSpan = 1;
74
75
  var width = table.widths[col];
@@ -80,31 +81,36 @@ export var handleTable = function (doc, parent, table, context, refNode) {
80
81
  width += table.widths[col + colSpan];
81
82
  }
82
83
  if (rowSpan > 1) {
83
- td.rowSpan = rowSpan;
84
+ td_1.rowSpan = rowSpan;
84
85
  }
85
86
  if (colSpan > 1) {
86
- td.colSpan = colSpan;
87
+ td_1.colSpan = colSpan;
87
88
  }
88
89
  if (!cell.cachedElement || (cell.format.useBorderBox && hasMetadata(table))) {
89
- if (width > 0 && !td.style.width) {
90
- td.style.width = width + 'px';
90
+ if (width > 0 && !td_1.style.width) {
91
+ td_1.style.width = width + 'px';
91
92
  }
92
- if (height > 0 && !td.style.height) {
93
- td.style.height = height + 'px';
93
+ if (height > 0 && !td_1.style.height) {
94
+ td_1.style.height = height + 'px';
94
95
  }
95
96
  }
96
- if (!cell.cachedElement) {
97
- if (context.allowCacheElement) {
98
- cell.cachedElement = td;
97
+ stackFormat(context, tag, function () {
98
+ if (!cell.cachedElement) {
99
+ if (context.allowCacheElement) {
100
+ cell.cachedElement = td_1;
101
+ }
102
+ applyFormat(td_1, context.formatAppliers.block, cell.format, context);
103
+ applyFormat(td_1, context.formatAppliers.tableCell, cell.format, context);
104
+ applyFormat(td_1, context.formatAppliers.tableCellBorder, cell.format, context);
105
+ applyFormat(td_1, context.formatAppliers.dataset, cell.dataset, context);
99
106
  }
100
- applyFormat(td, context.formatAppliers.block, cell.format, context);
101
- applyFormat(td, context.formatAppliers.tableCell, cell.format, context);
102
- applyFormat(td, context.formatAppliers.tableCellBorder, cell.format, context);
103
- applyFormat(td, context.formatAppliers.dataset, cell.dataset, context);
104
- }
105
- context.modelHandlers.blockGroupChildren(doc, td, cell, context);
106
- (_f = context.onNodeCreated) === null || _f === void 0 ? void 0 : _f.call(context, cell, td);
107
+ context.modelHandlers.blockGroupChildren(doc, td_1, cell, context);
108
+ });
109
+ (_f = context.onNodeCreated) === null || _f === void 0 ? void 0 : _f.call(context, cell, td_1);
107
110
  }
111
+ };
112
+ for (var col = 0; col < tableRow.cells.length; col++) {
113
+ _loop_1(col);
108
114
  }
109
115
  }
110
116
  (_g = context.domIndexer) === null || _g === void 0 ? void 0 : _g.onTable(tableNode, table);
@@ -1 +1 @@
1
- {"version":3,"file":"handleTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../utils/applyFormat';\nimport { hasMetadata } from '../../modelApi/metadata/updateMetadata';\nimport { isBlockEmpty } from '../../modelApi/common/isEmpty';\nimport { moveChildNodes } from '../../domUtils/moveChildNodes';\nimport { reuseCachedElement } from '../../domUtils/reuseCachedElement';\nimport type {\n ContentModelBlockHandler,\n ContentModelTable,\n ModelToDomContext,\n TableSelection,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleTable: ContentModelBlockHandler<ContentModelTable> = (\n doc: Document,\n parent: Node,\n table: ContentModelTable,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n if (isBlockEmpty(table)) {\n // Empty table, do not create TABLE element and just return\n return refNode;\n }\n\n let tableNode = context.allowCacheElement ? table.cachedElement : undefined;\n\n if (tableNode) {\n refNode = reuseCachedElement(parent, tableNode, refNode, context.rewriteFromModel);\n\n moveChildNodes(tableNode);\n } else {\n tableNode = doc.createElement('table');\n\n if (context.allowCacheElement) {\n table.cachedElement = tableNode;\n }\n\n parent.insertBefore(tableNode, refNode);\n context.rewriteFromModel.addedBlockElements.push(tableNode);\n\n applyFormat(tableNode, context.formatAppliers.block, table.format, context);\n applyFormat(tableNode, context.formatAppliers.table, table.format, context);\n applyFormat(tableNode, context.formatAppliers.tableBorder, table.format, context);\n applyFormat(tableNode, context.formatAppliers.dataset, table.dataset, context);\n }\n\n context.onNodeCreated?.(table, tableNode);\n\n const tbody = doc.createElement('tbody');\n tableNode.appendChild(tbody);\n\n for (let row = 0; row < table.rows.length; row++) {\n const tableRow = table.rows[row];\n\n if (tableRow.cells.length == 0) {\n // Skip empty row\n continue;\n }\n\n const tr = (context.allowCacheElement && tableRow.cachedElement) || doc.createElement('tr');\n tbody.appendChild(tr);\n moveChildNodes(tr);\n\n if (!tableRow.cachedElement) {\n if (context.allowCacheElement) {\n tableRow.cachedElement = tr;\n }\n\n applyFormat(tr, context.formatAppliers.tableRow, tableRow.format, context);\n }\n\n context.onNodeCreated?.(tableRow, tr);\n\n for (let col = 0; col < tableRow.cells.length; col++) {\n const cell = tableRow.cells[col];\n\n if (cell.isSelected) {\n const tableSelection: TableSelection = context.tableSelection || {\n type: 'table',\n table: tableNode,\n firstColumn: col,\n lastColumn: col,\n firstRow: row,\n lastRow: row,\n };\n\n if (tableSelection.table == tableNode) {\n tableSelection.lastColumn = Math.max(tableSelection.lastColumn, col);\n tableSelection.lastRow = Math.max(tableSelection.lastRow, row);\n }\n\n context.tableSelection = tableSelection;\n }\n\n if (!cell.spanAbove && !cell.spanLeft) {\n const td =\n (context.allowCacheElement && cell.cachedElement) ||\n doc.createElement(cell.isHeader ? 'th' : 'td');\n\n tr.appendChild(td);\n\n let rowSpan = 1;\n let colSpan = 1;\n let width = table.widths[col];\n let height = tableRow.height;\n\n for (; table.rows[row + rowSpan]?.cells[col]?.spanAbove; rowSpan++) {\n height += table.rows[row + rowSpan].height;\n }\n for (; tableRow.cells[col + colSpan]?.spanLeft; colSpan++) {\n width += table.widths[col + colSpan];\n }\n\n if (rowSpan > 1) {\n td.rowSpan = rowSpan;\n }\n\n if (colSpan > 1) {\n td.colSpan = colSpan;\n }\n\n if (!cell.cachedElement || (cell.format.useBorderBox && hasMetadata(table))) {\n if (width > 0 && !td.style.width) {\n td.style.width = width + 'px';\n }\n\n if (height > 0 && !td.style.height) {\n td.style.height = height + 'px';\n }\n }\n\n if (!cell.cachedElement) {\n if (context.allowCacheElement) {\n cell.cachedElement = td;\n }\n\n applyFormat(td, context.formatAppliers.block, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCell, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCellBorder, cell.format, context);\n applyFormat(td, context.formatAppliers.dataset, cell.dataset, context);\n }\n\n context.modelHandlers.blockGroupChildren(doc, td, cell, context);\n\n context.onNodeCreated?.(cell, td);\n }\n }\n }\n\n context.domIndexer?.onTable(tableNode, table);\n\n return refNode;\n};\n"]}
1
+ {"version":3,"file":"handleTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../utils/applyFormat';\nimport { hasMetadata } from '../../modelApi/metadata/updateMetadata';\nimport { isBlockEmpty } from '../../modelApi/common/isEmpty';\nimport { moveChildNodes } from '../../domUtils/moveChildNodes';\nimport { reuseCachedElement } from '../../domUtils/reuseCachedElement';\nimport { stackFormat } from '../utils/stackFormat';\nimport type {\n ContentModelBlockHandler,\n ContentModelTable,\n ModelToDomContext,\n TableSelection,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleTable: ContentModelBlockHandler<ContentModelTable> = (\n doc: Document,\n parent: Node,\n table: ContentModelTable,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n if (isBlockEmpty(table)) {\n // Empty table, do not create TABLE element and just return\n return refNode;\n }\n\n let tableNode = context.allowCacheElement ? table.cachedElement : undefined;\n\n if (tableNode) {\n refNode = reuseCachedElement(parent, tableNode, refNode, context.rewriteFromModel);\n\n moveChildNodes(tableNode);\n } else {\n tableNode = doc.createElement('table');\n\n if (context.allowCacheElement) {\n table.cachedElement = tableNode;\n }\n\n parent.insertBefore(tableNode, refNode);\n context.rewriteFromModel.addedBlockElements.push(tableNode);\n\n applyFormat(tableNode, context.formatAppliers.block, table.format, context);\n applyFormat(tableNode, context.formatAppliers.table, table.format, context);\n applyFormat(tableNode, context.formatAppliers.tableBorder, table.format, context);\n applyFormat(tableNode, context.formatAppliers.dataset, table.dataset, context);\n }\n\n context.onNodeCreated?.(table, tableNode);\n\n const tbody = doc.createElement('tbody');\n tableNode.appendChild(tbody);\n\n for (let row = 0; row < table.rows.length; row++) {\n const tableRow = table.rows[row];\n\n if (tableRow.cells.length == 0) {\n // Skip empty row\n continue;\n }\n\n const tr = (context.allowCacheElement && tableRow.cachedElement) || doc.createElement('tr');\n tbody.appendChild(tr);\n moveChildNodes(tr);\n\n if (!tableRow.cachedElement) {\n if (context.allowCacheElement) {\n tableRow.cachedElement = tr;\n }\n\n applyFormat(tr, context.formatAppliers.tableRow, tableRow.format, context);\n }\n\n context.onNodeCreated?.(tableRow, tr);\n\n for (let col = 0; col < tableRow.cells.length; col++) {\n const cell = tableRow.cells[col];\n\n if (cell.isSelected) {\n const tableSelection: TableSelection = context.tableSelection || {\n type: 'table',\n table: tableNode,\n firstColumn: col,\n lastColumn: col,\n firstRow: row,\n lastRow: row,\n };\n\n if (tableSelection.table == tableNode) {\n tableSelection.lastColumn = Math.max(tableSelection.lastColumn, col);\n tableSelection.lastRow = Math.max(tableSelection.lastRow, row);\n }\n\n context.tableSelection = tableSelection;\n }\n\n if (!cell.spanAbove && !cell.spanLeft) {\n const tag = cell.isHeader ? 'th' : 'td';\n const td =\n (context.allowCacheElement && cell.cachedElement) || doc.createElement(tag);\n\n tr.appendChild(td);\n\n let rowSpan = 1;\n let colSpan = 1;\n let width = table.widths[col];\n let height = tableRow.height;\n\n for (; table.rows[row + rowSpan]?.cells[col]?.spanAbove; rowSpan++) {\n height += table.rows[row + rowSpan].height;\n }\n for (; tableRow.cells[col + colSpan]?.spanLeft; colSpan++) {\n width += table.widths[col + colSpan];\n }\n\n if (rowSpan > 1) {\n td.rowSpan = rowSpan;\n }\n\n if (colSpan > 1) {\n td.colSpan = colSpan;\n }\n\n if (!cell.cachedElement || (cell.format.useBorderBox && hasMetadata(table))) {\n if (width > 0 && !td.style.width) {\n td.style.width = width + 'px';\n }\n\n if (height > 0 && !td.style.height) {\n td.style.height = height + 'px';\n }\n }\n\n stackFormat(context, tag, () => {\n if (!cell.cachedElement) {\n if (context.allowCacheElement) {\n cell.cachedElement = td;\n }\n\n applyFormat(td, context.formatAppliers.block, cell.format, context);\n applyFormat(td, context.formatAppliers.tableCell, cell.format, context);\n applyFormat(\n td,\n context.formatAppliers.tableCellBorder,\n cell.format,\n context\n );\n applyFormat(td, context.formatAppliers.dataset, cell.dataset, context);\n }\n\n context.modelHandlers.blockGroupChildren(doc, td, cell, context);\n });\n\n context.onNodeCreated?.(cell, td);\n }\n }\n }\n\n context.domIndexer?.onTable(tableNode, table);\n\n return refNode;\n};\n"]}
package/package.json CHANGED
@@ -3,9 +3,9 @@
3
3
  "description": "Content Model for roosterjs",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.1",
6
- "roosterjs-content-model-types": "^9.18.0"
6
+ "roosterjs-content-model-types": "^9.19.0"
7
7
  },
8
- "version": "9.18.0",
8
+ "version": "9.19.0",
9
9
  "main": "./lib/index.js",
10
10
  "typings": "./lib/index.d.ts",
11
11
  "module": "./lib-mjs/index.js",