roosterjs-content-model-dom 9.18.0 → 9.20.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.
Files changed (37) hide show
  1. package/lib/config/defaultContentModelFormatMap.js +3 -0
  2. package/lib/config/defaultContentModelFormatMap.js.map +1 -1
  3. package/lib/config/defaultHTMLStyleMap.js +1 -0
  4. package/lib/config/defaultHTMLStyleMap.js.map +1 -1
  5. package/lib/domUtils/event/extractClipboardItems.js +1 -0
  6. package/lib/domUtils/event/extractClipboardItems.js.map +1 -1
  7. package/lib/modelApi/editing/applyTableFormat.js +4 -0
  8. package/lib/modelApi/editing/applyTableFormat.js.map +1 -1
  9. package/lib/modelToDom/handlers/handleTable.js +26 -20
  10. package/lib/modelToDom/handlers/handleTable.js.map +1 -1
  11. package/lib/modelToText/contentModelToText.d.ts +2 -2
  12. package/lib/modelToText/contentModelToText.js.map +1 -1
  13. package/lib-amd/config/defaultContentModelFormatMap.js +3 -0
  14. package/lib-amd/config/defaultContentModelFormatMap.js.map +1 -1
  15. package/lib-amd/config/defaultHTMLStyleMap.js +1 -0
  16. package/lib-amd/config/defaultHTMLStyleMap.js.map +1 -1
  17. package/lib-amd/domUtils/event/extractClipboardItems.js +1 -0
  18. package/lib-amd/domUtils/event/extractClipboardItems.js.map +1 -1
  19. package/lib-amd/modelApi/editing/applyTableFormat.js +4 -0
  20. package/lib-amd/modelApi/editing/applyTableFormat.js.map +1 -1
  21. package/lib-amd/modelToDom/handlers/handleTable.js +26 -21
  22. package/lib-amd/modelToDom/handlers/handleTable.js.map +1 -1
  23. package/lib-amd/modelToText/contentModelToText.d.ts +2 -2
  24. package/lib-amd/modelToText/contentModelToText.js.map +1 -1
  25. package/lib-mjs/config/defaultContentModelFormatMap.js +3 -0
  26. package/lib-mjs/config/defaultContentModelFormatMap.js.map +1 -1
  27. package/lib-mjs/config/defaultHTMLStyleMap.js +1 -0
  28. package/lib-mjs/config/defaultHTMLStyleMap.js.map +1 -1
  29. package/lib-mjs/domUtils/event/extractClipboardItems.js +1 -0
  30. package/lib-mjs/domUtils/event/extractClipboardItems.js.map +1 -1
  31. package/lib-mjs/modelApi/editing/applyTableFormat.js +4 -0
  32. package/lib-mjs/modelApi/editing/applyTableFormat.js.map +1 -1
  33. package/lib-mjs/modelToDom/handlers/handleTable.js +26 -20
  34. package/lib-mjs/modelToDom/handlers/handleTable.js.map +1 -1
  35. package/lib-mjs/modelToText/contentModelToText.d.ts +2 -2
  36. package/lib-mjs/modelToText/contentModelToText.js.map +1 -1
  37. package/package.json +2 -2
@@ -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":"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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"]}
@@ -8,6 +8,7 @@ var ContentHandlers = (_a = {},
8
8
  _a['text/plain'] = function (data, value) { return (data.text = value); },
9
9
  _a['text/*'] = function (data, value, type) { return !!type && (data.customValues[type] = value); },
10
10
  _a['text/link-preview'] = tryParseLinkPreview,
11
+ _a['text/uri-list'] = function (data, value) { return (data.text = value); },
11
12
  _a);
12
13
  /**
13
14
  * Extract clipboard items to be a ClipboardData object for IE
@@ -1 +1 @@
1
- {"version":3,"file":"extractClipboardItems.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from '../readFile';\nimport type { ClipboardData, EdgeLinkPreview } from 'roosterjs-content-model-types';\n\nconst ContentHandlers: {\n [contentType: string]: (data: ClipboardData, value: string, type?: string) => void;\n} = {\n ['text/html']: (data, value) => (data.rawHtml = value),\n ['text/plain']: (data, value) => (data.text = value),\n ['text/*']: (data, value, type?) => !!type && (data.customValues[type] = value),\n ['text/link-preview']: tryParseLinkPreview,\n};\n\n/**\n * Extract clipboard items to be a ClipboardData object for IE\n * @param items The clipboard items retrieve from a DataTransfer object\n * @param allowedCustomPasteType Allowed custom content type when paste besides text/plain, text/html and images\n Only text types are supported, and do not add \"text/\" prefix to the type values\n */\nexport function extractClipboardItems(\n items: DataTransferItem[],\n allowedCustomPasteType?: string[]\n): Promise<ClipboardData> {\n const data: ClipboardData = {\n types: [],\n text: '',\n image: null,\n files: [],\n rawHtml: null,\n customValues: {},\n pasteNativeEvent: true,\n };\n\n return Promise.all(\n (items || []).map(item => {\n const type = item.type;\n\n if (type.indexOf('image/') == 0 && !data.image && item.kind == 'file') {\n data.types.push(type);\n data.image = item.getAsFile();\n return new Promise<void>(resolve => {\n if (data.image) {\n readFile(data.image, dataUrl => {\n data.imageDataUri = dataUrl;\n resolve();\n });\n } else {\n resolve();\n }\n });\n } else if (item.kind == 'file') {\n return new Promise<void>(resolve => {\n const file = item.getAsFile();\n if (!!file) {\n data.types.push(type);\n data.files!.push(file);\n }\n resolve();\n });\n } else {\n const customType = getAllowedCustomType(type, allowedCustomPasteType);\n const handler =\n ContentHandlers[type] || (customType ? ContentHandlers['text/*'] : null);\n return new Promise<void>(resolve =>\n handler\n ? item.getAsString(value => {\n data.types.push(type);\n handler(data, value, customType);\n resolve();\n })\n : resolve()\n );\n }\n })\n ).then(() => data);\n}\n\nfunction tryParseLinkPreview(data: ClipboardData, value: string) {\n try {\n data.customValues['link-preview'] = value;\n data.linkPreview = JSON.parse(value) as EdgeLinkPreview;\n } catch {}\n}\n\nfunction getAllowedCustomType(type: string, allowedCustomPasteType?: string[]) {\n const textType = type.indexOf('text/') == 0 ? type.substring('text/'.length) : null;\n const index =\n allowedCustomPasteType && textType ? allowedCustomPasteType.indexOf(textType) : -1;\n return textType && index >= 0 ? textType : undefined;\n}\n"]}
1
+ {"version":3,"file":"extractClipboardItems.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from '../readFile';\nimport type { ClipboardData, EdgeLinkPreview } from 'roosterjs-content-model-types';\n\nconst ContentHandlers: {\n [contentType: string]: (data: ClipboardData, value: string, type?: string) => void;\n} = {\n ['text/html']: (data, value) => (data.rawHtml = value),\n ['text/plain']: (data, value) => (data.text = value),\n ['text/*']: (data, value, type?) => !!type && (data.customValues[type] = value),\n ['text/link-preview']: tryParseLinkPreview,\n ['text/uri-list']: (data, value) => (data.text = value),\n};\n\n/**\n * Extract clipboard items to be a ClipboardData object for IE\n * @param items The clipboard items retrieve from a DataTransfer object\n * @param allowedCustomPasteType Allowed custom content type when paste besides text/plain, text/html and images\n Only text types are supported, and do not add \"text/\" prefix to the type values\n */\nexport function extractClipboardItems(\n items: DataTransferItem[],\n allowedCustomPasteType?: string[]\n): Promise<ClipboardData> {\n const data: ClipboardData = {\n types: [],\n text: '',\n image: null,\n files: [],\n rawHtml: null,\n customValues: {},\n pasteNativeEvent: true,\n };\n\n return Promise.all(\n (items || []).map(item => {\n const type = item.type;\n\n if (type.indexOf('image/') == 0 && !data.image && item.kind == 'file') {\n data.types.push(type);\n data.image = item.getAsFile();\n return new Promise<void>(resolve => {\n if (data.image) {\n readFile(data.image, dataUrl => {\n data.imageDataUri = dataUrl;\n resolve();\n });\n } else {\n resolve();\n }\n });\n } else if (item.kind == 'file') {\n return new Promise<void>(resolve => {\n const file = item.getAsFile();\n if (!!file) {\n data.types.push(type);\n data.files!.push(file);\n }\n resolve();\n });\n } else {\n const customType = getAllowedCustomType(type, allowedCustomPasteType);\n const handler =\n ContentHandlers[type] || (customType ? ContentHandlers['text/*'] : null);\n return new Promise<void>(resolve =>\n handler\n ? item.getAsString(value => {\n data.types.push(type);\n handler(data, value, customType);\n resolve();\n })\n : resolve()\n );\n }\n })\n ).then(() => data);\n}\n\nfunction tryParseLinkPreview(data: ClipboardData, value: string) {\n try {\n data.customValues['link-preview'] = value;\n data.linkPreview = JSON.parse(value) as EdgeLinkPreview;\n } catch {}\n}\n\nfunction getAllowedCustomType(type: string, allowedCustomPasteType?: string[]) {\n const textType = type.indexOf('text/') == 0 ? type.substring('text/'.length) : null;\n const index =\n allowedCustomPasteType && textType ? allowedCustomPasteType.indexOf(textType) : -1;\n return textType && index >= 0 ? textType : undefined;\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"]}
@@ -1,8 +1,8 @@
1
- import type { ContentModelDocument, ModelToTextCallbacks } from 'roosterjs-content-model-types';
1
+ import type { ModelToTextCallbacks, ReadonlyContentModelDocument } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * Convert Content Model to plain text
4
4
  * @param model The source Content Model
5
5
  * @param [separator='\r\n'] The separator string used for connect lines
6
6
  * @param callbacks Callbacks to customize the behavior of contentModelToText function
7
7
  */
8
- export declare function contentModelToText(model: ContentModelDocument, separator?: string, callbacks?: ModelToTextCallbacks): string;
8
+ export declare function contentModelToText(model: ReadonlyContentModelDocument, separator?: string, callbacks?: ModelToTextCallbacks): string;
@@ -1 +1 @@
1
- {"version":3,"file":"contentModelToText.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/modelToText/contentModelToText.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ContentModelBlockGroup,\n ContentModelDocument,\n ModelToTextCallbacks,\n} from 'roosterjs-content-model-types';\n\nconst TextForHR = '________________________________________';\nconst defaultCallbacks: Required<ModelToTextCallbacks> = {\n onDivider: divider => (divider.tagName == 'hr' ? TextForHR : ''),\n onEntityBlock: () => '',\n onEntitySegment: entity => entity.wrapper.textContent ?? '',\n onGeneralSegment: segment => segment.element.textContent ?? '',\n onImage: () => ' ',\n onText: text => text.text,\n onParagraph: () => true,\n onTable: () => true,\n onBlockGroup: () => true,\n};\n\n/**\n * Convert Content Model to plain text\n * @param model The source Content Model\n * @param [separator='\\r\\n'] The separator string used for connect lines\n * @param callbacks Callbacks to customize the behavior of contentModelToText function\n */\nexport function contentModelToText(\n model: ContentModelDocument,\n separator: string = '\\r\\n',\n callbacks?: ModelToTextCallbacks\n): string {\n const textArray: string[] = [];\n const fullCallbacks = Object.assign({}, defaultCallbacks, callbacks);\n\n contentModelToTextArray(model, textArray, fullCallbacks);\n\n return textArray.join(separator);\n}\n\nfunction contentModelToTextArray(\n group: ContentModelBlockGroup,\n textArray: string[],\n callbacks: Required<ModelToTextCallbacks>\n) {\n if (callbacks.onBlockGroup(group)) {\n group.blocks.forEach(block => {\n switch (block.blockType) {\n case 'Paragraph':\n if (callbacks.onParagraph(block)) {\n let text = '';\n\n block.segments.forEach(segment => {\n switch (segment.segmentType) {\n case 'Br':\n textArray.push(text);\n text = '';\n break;\n\n case 'Entity':\n text += callbacks.onEntitySegment(segment);\n break;\n\n case 'General':\n text += callbacks.onGeneralSegment(segment);\n break;\n\n case 'Text':\n text += callbacks.onText(segment);\n break;\n\n case 'Image':\n text += callbacks.onImage(segment);\n break;\n }\n });\n\n if (text) {\n textArray.push(text);\n }\n }\n\n break;\n\n case 'Divider':\n textArray.push(callbacks.onDivider(block));\n break;\n case 'Entity':\n textArray.push(callbacks.onEntityBlock(block));\n break;\n\n case 'Table':\n if (callbacks.onTable(block)) {\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n contentModelToTextArray(cell, textArray, callbacks);\n })\n );\n }\n break;\n\n case 'BlockGroup':\n contentModelToTextArray(block, textArray, callbacks);\n break;\n }\n });\n }\n}\n"]}
1
+ {"version":3,"file":"contentModelToText.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/modelToText/contentModelToText.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ModelToTextCallbacks,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelDocument,\n} from 'roosterjs-content-model-types';\n\nconst TextForHR = '________________________________________';\nconst defaultCallbacks: Required<ModelToTextCallbacks> = {\n onDivider: divider => (divider.tagName == 'hr' ? TextForHR : ''),\n onEntityBlock: () => '',\n onEntitySegment: entity => entity.wrapper.textContent ?? '',\n onGeneralSegment: segment => segment.element.textContent ?? '',\n onImage: () => ' ',\n onText: text => text.text,\n onParagraph: () => true,\n onTable: () => true,\n onBlockGroup: () => true,\n};\n\n/**\n * Convert Content Model to plain text\n * @param model The source Content Model\n * @param [separator='\\r\\n'] The separator string used for connect lines\n * @param callbacks Callbacks to customize the behavior of contentModelToText function\n */\nexport function contentModelToText(\n model: ReadonlyContentModelDocument,\n separator: string = '\\r\\n',\n callbacks?: ModelToTextCallbacks\n): string {\n const textArray: string[] = [];\n const fullCallbacks = Object.assign({}, defaultCallbacks, callbacks);\n\n contentModelToTextArray(model, textArray, fullCallbacks);\n\n return textArray.join(separator);\n}\n\nfunction contentModelToTextArray(\n group: ReadonlyContentModelBlockGroup,\n textArray: string[],\n callbacks: Required<ModelToTextCallbacks>\n) {\n if (callbacks.onBlockGroup(group)) {\n group.blocks.forEach(block => {\n switch (block.blockType) {\n case 'Paragraph':\n if (callbacks.onParagraph(block)) {\n let text = '';\n\n block.segments.forEach(segment => {\n switch (segment.segmentType) {\n case 'Br':\n textArray.push(text);\n text = '';\n break;\n\n case 'Entity':\n text += callbacks.onEntitySegment(segment);\n break;\n\n case 'General':\n text += callbacks.onGeneralSegment(segment);\n break;\n\n case 'Text':\n text += callbacks.onText(segment);\n break;\n\n case 'Image':\n text += callbacks.onImage(segment);\n break;\n }\n });\n\n if (text) {\n textArray.push(text);\n }\n }\n\n break;\n\n case 'Divider':\n textArray.push(callbacks.onDivider(block));\n break;\n case 'Entity':\n textArray.push(callbacks.onEntityBlock(block));\n break;\n\n case 'Table':\n if (callbacks.onTable(block)) {\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n contentModelToTextArray(cell, textArray, callbacks);\n })\n );\n }\n break;\n\n case 'BlockGroup':\n contentModelToTextArray(block, textArray, callbacks);\n break;\n }\n });\n }\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"]}
@@ -8,6 +8,7 @@ define(["require", "exports", "../readFile"], function (require, exports, readFi
8
8
  _a['text/plain'] = function (data, value) { return (data.text = value); },
9
9
  _a['text/*'] = function (data, value, type) { return !!type && (data.customValues[type] = value); },
10
10
  _a['text/link-preview'] = tryParseLinkPreview,
11
+ _a['text/uri-list'] = function (data, value) { return (data.text = value); },
11
12
  _a);
12
13
  /**
13
14
  * Extract clipboard items to be a ClipboardData object for IE
@@ -1 +1 @@
1
- {"version":3,"file":"extractClipboardItems.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from '../readFile';\nimport type { ClipboardData, EdgeLinkPreview } from 'roosterjs-content-model-types';\n\nconst ContentHandlers: {\n [contentType: string]: (data: ClipboardData, value: string, type?: string) => void;\n} = {\n ['text/html']: (data, value) => (data.rawHtml = value),\n ['text/plain']: (data, value) => (data.text = value),\n ['text/*']: (data, value, type?) => !!type && (data.customValues[type] = value),\n ['text/link-preview']: tryParseLinkPreview,\n};\n\n/**\n * Extract clipboard items to be a ClipboardData object for IE\n * @param items The clipboard items retrieve from a DataTransfer object\n * @param allowedCustomPasteType Allowed custom content type when paste besides text/plain, text/html and images\n Only text types are supported, and do not add \"text/\" prefix to the type values\n */\nexport function extractClipboardItems(\n items: DataTransferItem[],\n allowedCustomPasteType?: string[]\n): Promise<ClipboardData> {\n const data: ClipboardData = {\n types: [],\n text: '',\n image: null,\n files: [],\n rawHtml: null,\n customValues: {},\n pasteNativeEvent: true,\n };\n\n return Promise.all(\n (items || []).map(item => {\n const type = item.type;\n\n if (type.indexOf('image/') == 0 && !data.image && item.kind == 'file') {\n data.types.push(type);\n data.image = item.getAsFile();\n return new Promise<void>(resolve => {\n if (data.image) {\n readFile(data.image, dataUrl => {\n data.imageDataUri = dataUrl;\n resolve();\n });\n } else {\n resolve();\n }\n });\n } else if (item.kind == 'file') {\n return new Promise<void>(resolve => {\n const file = item.getAsFile();\n if (!!file) {\n data.types.push(type);\n data.files!.push(file);\n }\n resolve();\n });\n } else {\n const customType = getAllowedCustomType(type, allowedCustomPasteType);\n const handler =\n ContentHandlers[type] || (customType ? ContentHandlers['text/*'] : null);\n return new Promise<void>(resolve =>\n handler\n ? item.getAsString(value => {\n data.types.push(type);\n handler(data, value, customType);\n resolve();\n })\n : resolve()\n );\n }\n })\n ).then(() => data);\n}\n\nfunction tryParseLinkPreview(data: ClipboardData, value: string) {\n try {\n data.customValues['link-preview'] = value;\n data.linkPreview = JSON.parse(value) as EdgeLinkPreview;\n } catch {}\n}\n\nfunction getAllowedCustomType(type: string, allowedCustomPasteType?: string[]) {\n const textType = type.indexOf('text/') == 0 ? type.substring('text/'.length) : null;\n const index =\n allowedCustomPasteType && textType ? allowedCustomPasteType.indexOf(textType) : -1;\n return textType && index >= 0 ? textType : undefined;\n}\n"]}
1
+ {"version":3,"file":"extractClipboardItems.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from '../readFile';\nimport type { ClipboardData, EdgeLinkPreview } from 'roosterjs-content-model-types';\n\nconst ContentHandlers: {\n [contentType: string]: (data: ClipboardData, value: string, type?: string) => void;\n} = {\n ['text/html']: (data, value) => (data.rawHtml = value),\n ['text/plain']: (data, value) => (data.text = value),\n ['text/*']: (data, value, type?) => !!type && (data.customValues[type] = value),\n ['text/link-preview']: tryParseLinkPreview,\n ['text/uri-list']: (data, value) => (data.text = value),\n};\n\n/**\n * Extract clipboard items to be a ClipboardData object for IE\n * @param items The clipboard items retrieve from a DataTransfer object\n * @param allowedCustomPasteType Allowed custom content type when paste besides text/plain, text/html and images\n Only text types are supported, and do not add \"text/\" prefix to the type values\n */\nexport function extractClipboardItems(\n items: DataTransferItem[],\n allowedCustomPasteType?: string[]\n): Promise<ClipboardData> {\n const data: ClipboardData = {\n types: [],\n text: '',\n image: null,\n files: [],\n rawHtml: null,\n customValues: {},\n pasteNativeEvent: true,\n };\n\n return Promise.all(\n (items || []).map(item => {\n const type = item.type;\n\n if (type.indexOf('image/') == 0 && !data.image && item.kind == 'file') {\n data.types.push(type);\n data.image = item.getAsFile();\n return new Promise<void>(resolve => {\n if (data.image) {\n readFile(data.image, dataUrl => {\n data.imageDataUri = dataUrl;\n resolve();\n });\n } else {\n resolve();\n }\n });\n } else if (item.kind == 'file') {\n return new Promise<void>(resolve => {\n const file = item.getAsFile();\n if (!!file) {\n data.types.push(type);\n data.files!.push(file);\n }\n resolve();\n });\n } else {\n const customType = getAllowedCustomType(type, allowedCustomPasteType);\n const handler =\n ContentHandlers[type] || (customType ? ContentHandlers['text/*'] : null);\n return new Promise<void>(resolve =>\n handler\n ? item.getAsString(value => {\n data.types.push(type);\n handler(data, value, customType);\n resolve();\n })\n : resolve()\n );\n }\n })\n ).then(() => data);\n}\n\nfunction tryParseLinkPreview(data: ClipboardData, value: string) {\n try {\n data.customValues['link-preview'] = value;\n data.linkPreview = JSON.parse(value) as EdgeLinkPreview;\n } catch {}\n}\n\nfunction getAllowedCustomType(type: string, allowedCustomPasteType?: string[]) {\n const textType = type.indexOf('text/') == 0 ? type.substring('text/'.length) : null;\n const index =\n allowedCustomPasteType && textType ? allowedCustomPasteType.indexOf(textType) : -1;\n return textType && index >= 0 ? textType : undefined;\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*/);