roosterjs-content-model-dom 9.44.0 → 9.45.1

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 (127) hide show
  1. package/lib/domToModel/processors/formatContainerProcessor.d.ts +6 -1
  2. package/lib/domToModel/processors/formatContainerProcessor.js +6 -1
  3. package/lib/domToModel/processors/formatContainerProcessor.js.map +1 -1
  4. package/lib/domUtils/style/transformColor.d.ts +10 -1
  5. package/lib/domUtils/style/transformColor.js +26 -1
  6. package/lib/domUtils/style/transformColor.js.map +1 -1
  7. package/lib/formatHandlers/block/textAlignFormatHandler.js +2 -18
  8. package/lib/formatHandlers/block/textAlignFormatHandler.js.map +1 -1
  9. package/lib/formatHandlers/common/borderColorFormatHandler.d.ts +6 -0
  10. package/lib/formatHandlers/common/borderColorFormatHandler.js +66 -0
  11. package/lib/formatHandlers/common/borderColorFormatHandler.js.map +1 -0
  12. package/lib/formatHandlers/common/borderFormatHandler.d.ts +0 -4
  13. package/lib/formatHandlers/common/borderFormatHandler.js +5 -12
  14. package/lib/formatHandlers/common/borderFormatHandler.js.map +1 -1
  15. package/lib/formatHandlers/defaultFormatHandlers.js +9 -8
  16. package/lib/formatHandlers/defaultFormatHandlers.js.map +1 -1
  17. package/lib/formatHandlers/list/listItemAlignFormatHandler.d.ts +6 -0
  18. package/lib/formatHandlers/list/listItemAlignFormatHandler.js +37 -0
  19. package/lib/formatHandlers/list/listItemAlignFormatHandler.js.map +1 -0
  20. package/lib/formatHandlers/table/legacyTableBorderFormatHandler.d.ts +6 -0
  21. package/lib/formatHandlers/table/legacyTableBorderFormatHandler.js +34 -0
  22. package/lib/formatHandlers/table/legacyTableBorderFormatHandler.js.map +1 -0
  23. package/lib/formatHandlers/table/tableSpacingFormatHandler.js +0 -7
  24. package/lib/formatHandlers/table/tableSpacingFormatHandler.js.map +1 -1
  25. package/lib/formatHandlers/utils/borderKeys.d.ts +11 -0
  26. package/lib/formatHandlers/utils/borderKeys.js +22 -0
  27. package/lib/formatHandlers/utils/borderKeys.js.map +1 -0
  28. package/lib/formatHandlers/utils/color.d.ts +13 -1
  29. package/lib/formatHandlers/utils/color.js +42 -13
  30. package/lib/formatHandlers/utils/color.js.map +1 -1
  31. package/lib/index.d.ts +3 -2
  32. package/lib/index.js +8 -6
  33. package/lib/index.js.map +1 -1
  34. package/lib/modelApi/common/normalizeSegmentFormat.js +3 -3
  35. package/lib/modelApi/common/normalizeSegmentFormat.js.map +1 -1
  36. package/lib/modelApi/editing/applyTableFormat.js +2 -2
  37. package/lib/modelApi/editing/applyTableFormat.js.map +1 -1
  38. package/lib/modelApi/editing/normalizeTable.d.ts +1 -1
  39. package/lib/modelApi/editing/normalizeTable.js +11 -24
  40. package/lib/modelApi/editing/normalizeTable.js.map +1 -1
  41. package/lib/modelToDom/handlers/handleImage.js +1 -1
  42. package/lib/modelToDom/handlers/handleImage.js.map +1 -1
  43. package/lib-amd/domToModel/processors/formatContainerProcessor.d.ts +6 -1
  44. package/lib-amd/domToModel/processors/formatContainerProcessor.js +6 -1
  45. package/lib-amd/domToModel/processors/formatContainerProcessor.js.map +1 -1
  46. package/lib-amd/domUtils/style/transformColor.d.ts +10 -1
  47. package/lib-amd/domUtils/style/transformColor.js +25 -2
  48. package/lib-amd/domUtils/style/transformColor.js.map +1 -1
  49. package/lib-amd/formatHandlers/block/textAlignFormatHandler.js +2 -18
  50. package/lib-amd/formatHandlers/block/textAlignFormatHandler.js.map +1 -1
  51. package/lib-amd/formatHandlers/common/borderColorFormatHandler.d.ts +6 -0
  52. package/lib-amd/formatHandlers/common/borderColorFormatHandler.js +65 -0
  53. package/lib-amd/formatHandlers/common/borderColorFormatHandler.js.map +1 -0
  54. package/lib-amd/formatHandlers/common/borderFormatHandler.d.ts +0 -4
  55. package/lib-amd/formatHandlers/common/borderFormatHandler.js +4 -13
  56. package/lib-amd/formatHandlers/common/borderFormatHandler.js.map +1 -1
  57. package/lib-amd/formatHandlers/defaultFormatHandlers.js +7 -9
  58. package/lib-amd/formatHandlers/defaultFormatHandlers.js.map +1 -1
  59. package/lib-amd/formatHandlers/list/listItemAlignFormatHandler.d.ts +6 -0
  60. package/lib-amd/formatHandlers/list/listItemAlignFormatHandler.js +38 -0
  61. package/lib-amd/formatHandlers/list/listItemAlignFormatHandler.js.map +1 -0
  62. package/lib-amd/formatHandlers/table/legacyTableBorderFormatHandler.d.ts +6 -0
  63. package/lib-amd/formatHandlers/table/legacyTableBorderFormatHandler.js +36 -0
  64. package/lib-amd/formatHandlers/table/legacyTableBorderFormatHandler.js.map +1 -0
  65. package/lib-amd/formatHandlers/table/tableSpacingFormatHandler.js +0 -7
  66. package/lib-amd/formatHandlers/table/tableSpacingFormatHandler.js.map +1 -1
  67. package/lib-amd/formatHandlers/utils/borderKeys.d.ts +11 -0
  68. package/lib-amd/formatHandlers/utils/borderKeys.js +24 -0
  69. package/lib-amd/formatHandlers/utils/borderKeys.js.map +1 -0
  70. package/lib-amd/formatHandlers/utils/color.d.ts +13 -1
  71. package/lib-amd/formatHandlers/utils/color.js +42 -14
  72. package/lib-amd/formatHandlers/utils/color.js.map +1 -1
  73. package/lib-amd/index.d.ts +3 -2
  74. package/lib-amd/index.js +4 -3
  75. package/lib-amd/index.js.map +1 -1
  76. package/lib-amd/modelApi/common/normalizeSegmentFormat.js +2 -2
  77. package/lib-amd/modelApi/common/normalizeSegmentFormat.js.map +1 -1
  78. package/lib-amd/modelApi/editing/applyTableFormat.js +2 -2
  79. package/lib-amd/modelApi/editing/applyTableFormat.js.map +1 -1
  80. package/lib-amd/modelApi/editing/normalizeTable.d.ts +1 -1
  81. package/lib-amd/modelApi/editing/normalizeTable.js +11 -24
  82. package/lib-amd/modelApi/editing/normalizeTable.js.map +1 -1
  83. package/lib-amd/modelToDom/handlers/handleImage.js +1 -1
  84. package/lib-amd/modelToDom/handlers/handleImage.js.map +1 -1
  85. package/lib-mjs/domToModel/processors/formatContainerProcessor.d.ts +6 -1
  86. package/lib-mjs/domToModel/processors/formatContainerProcessor.js +6 -1
  87. package/lib-mjs/domToModel/processors/formatContainerProcessor.js.map +1 -1
  88. package/lib-mjs/domUtils/style/transformColor.d.ts +10 -1
  89. package/lib-mjs/domUtils/style/transformColor.js +27 -2
  90. package/lib-mjs/domUtils/style/transformColor.js.map +1 -1
  91. package/lib-mjs/formatHandlers/block/textAlignFormatHandler.js +2 -18
  92. package/lib-mjs/formatHandlers/block/textAlignFormatHandler.js.map +1 -1
  93. package/lib-mjs/formatHandlers/common/borderColorFormatHandler.d.ts +6 -0
  94. package/lib-mjs/formatHandlers/common/borderColorFormatHandler.js +63 -0
  95. package/lib-mjs/formatHandlers/common/borderColorFormatHandler.js.map +1 -0
  96. package/lib-mjs/formatHandlers/common/borderFormatHandler.d.ts +0 -4
  97. package/lib-mjs/formatHandlers/common/borderFormatHandler.js +3 -10
  98. package/lib-mjs/formatHandlers/common/borderFormatHandler.js.map +1 -1
  99. package/lib-mjs/formatHandlers/defaultFormatHandlers.js +9 -8
  100. package/lib-mjs/formatHandlers/defaultFormatHandlers.js.map +1 -1
  101. package/lib-mjs/formatHandlers/list/listItemAlignFormatHandler.d.ts +6 -0
  102. package/lib-mjs/formatHandlers/list/listItemAlignFormatHandler.js +34 -0
  103. package/lib-mjs/formatHandlers/list/listItemAlignFormatHandler.js.map +1 -0
  104. package/lib-mjs/formatHandlers/table/legacyTableBorderFormatHandler.d.ts +6 -0
  105. package/lib-mjs/formatHandlers/table/legacyTableBorderFormatHandler.js +31 -0
  106. package/lib-mjs/formatHandlers/table/legacyTableBorderFormatHandler.js.map +1 -0
  107. package/lib-mjs/formatHandlers/table/tableSpacingFormatHandler.js +0 -7
  108. package/lib-mjs/formatHandlers/table/tableSpacingFormatHandler.js.map +1 -1
  109. package/lib-mjs/formatHandlers/utils/borderKeys.d.ts +11 -0
  110. package/lib-mjs/formatHandlers/utils/borderKeys.js +19 -0
  111. package/lib-mjs/formatHandlers/utils/borderKeys.js.map +1 -0
  112. package/lib-mjs/formatHandlers/utils/color.d.ts +13 -1
  113. package/lib-mjs/formatHandlers/utils/color.js +36 -10
  114. package/lib-mjs/formatHandlers/utils/color.js.map +1 -1
  115. package/lib-mjs/index.d.ts +3 -2
  116. package/lib-mjs/index.js +2 -1
  117. package/lib-mjs/index.js.map +1 -1
  118. package/lib-mjs/modelApi/common/normalizeSegmentFormat.js +3 -3
  119. package/lib-mjs/modelApi/common/normalizeSegmentFormat.js.map +1 -1
  120. package/lib-mjs/modelApi/editing/applyTableFormat.js +1 -1
  121. package/lib-mjs/modelApi/editing/applyTableFormat.js.map +1 -1
  122. package/lib-mjs/modelApi/editing/normalizeTable.d.ts +1 -1
  123. package/lib-mjs/modelApi/editing/normalizeTable.js +11 -24
  124. package/lib-mjs/modelApi/editing/normalizeTable.js.map +1 -1
  125. package/lib-mjs/modelToDom/handlers/handleImage.js +1 -1
  126. package/lib-mjs/modelToDom/handlers/handleImage.js.map +1 -1
  127. package/package.json +3 -3
@@ -4,6 +4,11 @@ import type { ElementProcessor, MarginFormat, PaddingFormat } from 'roosterjs-co
4
4
  */
5
5
  export declare const ContextStyles: (keyof (MarginFormat & PaddingFormat))[];
6
6
  /**
7
- * @internal
7
+ * Content Model Element Processor for format container elements (e.g., blockquote, div)
8
+ * Processes elements that create FormatContainer blocks in the content model.
9
+ * This processor can be used in processorOverride to customize how specific elements are processed.
10
+ * @param group The parent block group
11
+ * @param element The DOM element to process
12
+ * @param context DOM to Content Model context
8
13
  */
9
14
  export declare const formatContainerProcessor: ElementProcessor<HTMLElement>;
@@ -19,7 +19,12 @@ exports.ContextStyles = [
19
19
  'paddingRight',
20
20
  ];
21
21
  /**
22
- * @internal
22
+ * Content Model Element Processor for format container elements (e.g., blockquote, div)
23
+ * Processes elements that create FormatContainer blocks in the content model.
24
+ * This processor can be used in processorOverride to customize how specific elements are processed.
25
+ * @param group The parent block group
26
+ * @param element The DOM element to process
27
+ * @param context DOM to Content Model context
23
28
  */
24
29
  var formatContainerProcessor = function (group, element, context) {
25
30
  (0, stackFormat_1.stackFormat)(context, { segment: 'shallowCloneForBlock', paragraph: 'shallowClone' }, function () {
@@ -1 +1 @@
1
- {"version":3,"file":"formatContainerProcessor.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/processors/formatContainerProcessor.ts"],"names":[],"mappings":";;;;AAAA,2DAA0D;AAC1D,uFAAsF;AACtF,2EAA0E;AAC1E,4DAA2D;AAC3D,oDAAmD;AACnD,wFAAuF;AACvF,oDAAmD;AAUnD;;GAEG;AACU,QAAA,aAAa,GAA6C;IACnE,YAAY;IACZ,aAAa;IACb,aAAa;IACb,cAAc;CACjB,CAAC;AAEF;;GAEG;AACI,IAAM,wBAAwB,GAAkC,UACnE,KAAK,EACL,OAAO,EACP,OAAO;IAEP,IAAA,yBAAW,EAAC,OAAO,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE;QACjF,IAAA,yBAAW,EAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAChF,IAAA,yBAAW,EAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAE3F,IAAM,MAAM,6BACL,OAAO,CAAC,WAAW,CACzB,CAAC;QAEF,IAAA,yBAAW,EAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,IAAM,OAAO,GACT,IAAA,iCAAe,EAAC,OAAO,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACxF,IAAM,eAAe,GAAG,IAAA,6CAAqB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE/D,0FAA0F;QAC1F,kEAAkE;QAClE,mFAAmF;QACnF,qBAAa,CAAC,OAAO,CAAC,UAAA,KAAK;YACvB,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEnE,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACjE,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC;SACvC;QAED,IAAI,yBAAyB,CAAC,eAAe,CAAC,EAAE;YAC5C,oGAAoG;YACpG,qCAAqC;YACrC,IAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAA0B,CAAC;YAErE,IAAI,eAAe,CAAC,YAAY,EAAE;gBAC9B,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,aAAa,EAAE;oBACjE,QAAQ,EAAE,GAAG;iBAChB,CAAC,CAAC;aACN;YAED,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;YACxD,IAAA,iDAAuB,EAAC,SAAS,CAAC,CAAC;YACnC,IAAA,mBAAQ,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;SAC9B;aAAM;YACH,IAAA,mBAAQ,EAAC,KAAK,EAAE,eAAe,CAAC,CAAC;SACpC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,mBAAQ,EAAC,KAAK,EAAE,IAAA,iCAAe,EAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;AAC/E,CAAC,CAAC;AApDW,QAAA,wBAAwB,4BAoDnC;AAEF,SAAS,yBAAyB,CAAC,eAA4C;IAC3E,IAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE7C,OAAO,CACH,eAAe,CAAC,OAAO,IAAI,KAAK;QAChC,eAAe,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC;QAClC,UAAU,CAAC,SAAS,IAAI,WAAW;QACnC,UAAU,CAAC,UAAU,CACxB,CAAC;AACN,CAAC","sourcesContent":["import { addBlock } from '../../modelApi/common/addBlock';\nimport { createFormatContainer } from '../../modelApi/creators/createFormatContainer';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { getDefaultStyle } from '../utils/getDefaultStyle';\nimport { parseFormat } from '../utils/parseFormat';\nimport { setParagraphNotImplicit } from '../../modelApi/block/setParagraphNotImplicit';\nimport { stackFormat } from '../utils/stackFormat';\nimport type {\n ContentModelFormatContainer,\n ContentModelFormatContainerFormat,\n ContentModelParagraph,\n ElementProcessor,\n MarginFormat,\n PaddingFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const ContextStyles: (keyof (MarginFormat & PaddingFormat))[] = [\n 'marginLeft',\n 'marginRight',\n 'paddingLeft',\n 'paddingRight',\n];\n\n/**\n * @internal\n */\nexport const formatContainerProcessor: ElementProcessor<HTMLElement> = (\n group,\n element,\n context\n) => {\n stackFormat(context, { segment: 'shallowCloneForBlock', paragraph: 'shallowClone' }, () => {\n parseFormat(element, context.formatParsers.block, context.blockFormat, context);\n parseFormat(element, context.formatParsers.segmentOnBlock, context.segmentFormat, context);\n\n const format: ContentModelFormatContainerFormat = {\n ...context.blockFormat,\n };\n\n parseFormat(element, context.formatParsers.container, format, context);\n\n const tagName =\n getDefaultStyle(element).display == 'block' ? element.tagName.toLowerCase() : 'div';\n const formatContainer = createFormatContainer(tagName, format);\n\n // It is possible to inherit margin left/right styles from parent DIV or other containers,\n // since we are going into a deeper level of format container now,\n // the container will render these styles so no need to keep them in context format\n ContextStyles.forEach(style => {\n delete context.blockFormat[style];\n });\n\n context.elementProcessors.child(formatContainer, element, context);\n\n if (element.style.fontSize && parseInt(element.style.fontSize) == 0) {\n formatContainer.zeroFontSize = true;\n }\n\n if (shouldFallbackToParagraph(formatContainer)) {\n // For DIV container that only has one paragraph child, container style can be merged into paragraph\n // and no need to have this container\n const paragraph = formatContainer.blocks[0] as ContentModelParagraph;\n\n if (formatContainer.zeroFontSize) {\n paragraph.segmentFormat = Object.assign({}, paragraph.segmentFormat, {\n fontSize: '0',\n });\n }\n\n Object.assign(paragraph.format, formatContainer.format);\n setParagraphNotImplicit(paragraph);\n addBlock(group, paragraph);\n } else {\n addBlock(group, formatContainer);\n }\n });\n\n addBlock(group, createParagraph(true /*isImplicit*/, context.blockFormat));\n};\n\nfunction shouldFallbackToParagraph(formatContainer: ContentModelFormatContainer) {\n const firstChild = formatContainer.blocks[0];\n\n return (\n formatContainer.tagName == 'div' &&\n formatContainer.blocks.length == 1 &&\n firstChild.blockType == 'Paragraph' &&\n firstChild.isImplicit\n );\n}\n"]}
1
+ {"version":3,"file":"formatContainerProcessor.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/processors/formatContainerProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { addBlock } from '../../modelApi/common/addBlock';\nimport { createFormatContainer } from '../../modelApi/creators/createFormatContainer';\nimport { createParagraph } from '../../modelApi/creators/createParagraph';\nimport { getDefaultStyle } from '../utils/getDefaultStyle';\nimport { parseFormat } from '../utils/parseFormat';\nimport { setParagraphNotImplicit } from '../../modelApi/block/setParagraphNotImplicit';\nimport { stackFormat } from '../utils/stackFormat';\nimport type {\n ContentModelFormatContainer,\n ContentModelFormatContainerFormat,\n ContentModelParagraph,\n ElementProcessor,\n MarginFormat,\n PaddingFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const ContextStyles: (keyof (MarginFormat & PaddingFormat))[] = [\n 'marginLeft',\n 'marginRight',\n 'paddingLeft',\n 'paddingRight',\n];\n\n/**\n * Content Model Element Processor for format container elements (e.g., blockquote, div)\n * Processes elements that create FormatContainer blocks in the content model.\n * This processor can be used in processorOverride to customize how specific elements are processed.\n * @param group The parent block group\n * @param element The DOM element to process\n * @param context DOM to Content Model context\n */\nexport const formatContainerProcessor: ElementProcessor<HTMLElement> = (\n group,\n element,\n context\n) => {\n stackFormat(context, { segment: 'shallowCloneForBlock', paragraph: 'shallowClone' }, () => {\n parseFormat(element, context.formatParsers.block, context.blockFormat, context);\n parseFormat(element, context.formatParsers.segmentOnBlock, context.segmentFormat, context);\n\n const format: ContentModelFormatContainerFormat = {\n ...context.blockFormat,\n };\n\n parseFormat(element, context.formatParsers.container, format, context);\n\n const tagName =\n getDefaultStyle(element).display == 'block' ? element.tagName.toLowerCase() : 'div';\n const formatContainer = createFormatContainer(tagName, format);\n\n // It is possible to inherit margin left/right styles from parent DIV or other containers,\n // since we are going into a deeper level of format container now,\n // the container will render these styles so no need to keep them in context format\n ContextStyles.forEach(style => {\n delete context.blockFormat[style];\n });\n\n context.elementProcessors.child(formatContainer, element, context);\n\n if (element.style.fontSize && parseInt(element.style.fontSize) == 0) {\n formatContainer.zeroFontSize = true;\n }\n\n if (shouldFallbackToParagraph(formatContainer)) {\n // For DIV container that only has one paragraph child, container style can be merged into paragraph\n // and no need to have this container\n const paragraph = formatContainer.blocks[0] as ContentModelParagraph;\n\n if (formatContainer.zeroFontSize) {\n paragraph.segmentFormat = Object.assign({}, paragraph.segmentFormat, {\n fontSize: '0',\n });\n }\n\n Object.assign(paragraph.format, formatContainer.format);\n setParagraphNotImplicit(paragraph);\n addBlock(group, paragraph);\n } else {\n addBlock(group, formatContainer);\n }\n });\n\n addBlock(group, createParagraph(true /*isImplicit*/, context.blockFormat));\n};\n\nfunction shouldFallbackToParagraph(formatContainer: ContentModelFormatContainer) {\n const firstChild = formatContainer.blocks[0];\n\n return (\n formatContainer.tagName == 'div' &&\n formatContainer.blocks.length == 1 &&\n firstChild.blockType == 'Paragraph' &&\n firstChild.isImplicit\n );\n}\n"]}
@@ -1,9 +1,18 @@
1
1
  import type { DarkColorHandler } from 'roosterjs-content-model-types';
2
+ /**
3
+ * Configuration options for controlling which elements and styles undergo color transformation.
4
+ * By default, text and background colors are transformed for all elements.
5
+ */
6
+ export interface TransformColorOptions {
7
+ tableBorders: boolean;
8
+ }
2
9
  /**
3
10
  * Edit and transform color of elements between light mode and dark mode
11
+ * By default, text and background colors are transformed for all elements.
4
12
  * @param rootNode The root DOM node to transform
5
13
  * @param includeSelf True to transform the root node as well, otherwise false
6
14
  * @param direction To specify the transform direction, light to dark, or dark to light
7
15
  * @param darkColorHandler The dark color handler object to help do color transformation
16
+ * @param transformColorOptions Configuration options for controlling which elements and styles undergo color transformation.
8
17
  */
9
- export declare function transformColor(rootNode: Node, includeSelf: boolean, direction: 'lightToDark' | 'darkToLight', darkColorHandler?: DarkColorHandler): void;
18
+ export declare function transformColor(rootNode: Node, includeSelf: boolean, direction: 'lightToDark' | 'darkToLight', darkColorHandler?: DarkColorHandler, transformColorOptions?: TransformColorOptions): void;
@@ -1,25 +1,50 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.transformColor = void 0;
4
+ var borderKeys_1 = require("../../formatHandlers/utils/borderKeys");
5
+ var isElementOfType_1 = require("../isElementOfType");
4
6
  var color_1 = require("../../formatHandlers/utils/color");
5
7
  /**
6
8
  * Edit and transform color of elements between light mode and dark mode
9
+ * By default, text and background colors are transformed for all elements.
7
10
  * @param rootNode The root DOM node to transform
8
11
  * @param includeSelf True to transform the root node as well, otherwise false
9
12
  * @param direction To specify the transform direction, light to dark, or dark to light
10
13
  * @param darkColorHandler The dark color handler object to help do color transformation
14
+ * @param transformColorOptions Configuration options for controlling which elements and styles undergo color transformation.
11
15
  */
12
- function transformColor(rootNode, includeSelf, direction, darkColorHandler) {
16
+ function transformColor(rootNode, includeSelf, direction, darkColorHandler, transformColorOptions) {
13
17
  var toDarkMode = direction == 'lightToDark';
18
+ var tableBorders = (transformColorOptions === null || transformColorOptions === void 0 ? void 0 : transformColorOptions.tableBorders) || false;
14
19
  var transformer = function (element) {
15
20
  var textColor = (0, color_1.getColor)(element, false /*isBackground*/, !toDarkMode, darkColorHandler);
16
21
  var backColor = (0, color_1.getColor)(element, true /*isBackground*/, !toDarkMode, darkColorHandler);
17
22
  (0, color_1.setColor)(element, textColor, false /*isBackground*/, toDarkMode, darkColorHandler);
18
23
  (0, color_1.setColor)(element, backColor, true /*isBackground*/, toDarkMode, darkColorHandler);
24
+ if (tableBorders) {
25
+ transformBorderColor(element, toDarkMode, darkColorHandler);
26
+ }
19
27
  };
20
28
  iterateElements(rootNode, transformer, includeSelf);
21
29
  }
22
30
  exports.transformColor = transformColor;
31
+ function transformBorderColor(element, toDarkMode, darkColorHandler) {
32
+ if ((0, isElementOfType_1.isElementOfType)(element, 'td') || (0, isElementOfType_1.isElementOfType)(element, 'th')) {
33
+ borderKeys_1.BorderKeys.forEach(function (key) {
34
+ var borderColorProperty = borderKeys_1.BorderColorKeyMap[key];
35
+ var style = element.style.getPropertyValue(borderColorProperty);
36
+ if (style) {
37
+ var lightColor = (0, color_1.getLightModeColor)(style, !toDarkMode, darkColorHandler);
38
+ if (lightColor) {
39
+ var transformedColor = (0, color_1.adaptColor)(element, lightColor, 'border', toDarkMode, darkColorHandler);
40
+ if (transformedColor) {
41
+ element.style.setProperty(borderColorProperty, transformedColor);
42
+ }
43
+ }
44
+ }
45
+ });
46
+ }
47
+ }
23
48
  function iterateElements(root, transformer, includeSelf) {
24
49
  if (includeSelf && isHTMLElement(root)) {
25
50
  transformer(root);
@@ -1 +1 @@
1
- {"version":3,"file":"transformColor.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/style/transformColor.ts"],"names":[],"mappings":";;;AAAA,0DAAsE;AAGtE;;;;;;GAMG;AACH,SAAgB,cAAc,CAC1B,QAAc,EACd,WAAoB,EACpB,SAAwC,EACxC,gBAAmC;IAEnC,IAAM,UAAU,GAAG,SAAS,IAAI,aAAa,CAAC;IAC9C,IAAM,WAAW,GAAG,UAAC,OAAoB;QACrC,IAAM,SAAS,GAAG,IAAA,gBAAQ,EAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAC3F,IAAM,SAAS,GAAG,IAAA,gBAAQ,EAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAE1F,IAAA,gBAAQ,EAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACnF,IAAA,gBAAQ,EAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACtF,CAAC,CAAC;IAEF,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AACxD,CAAC;AAhBD,wCAgBC;AAED,SAAS,eAAe,CACpB,IAAU,EACV,WAA2C,EAC3C,WAAqB;IAErB,IAAI,WAAW,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;QACpC,WAAW,CAAC,IAAI,CAAC,CAAC;KACrB;IAED,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE;QAChE,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;YACtB,WAAW,CAAC,KAAK,CAAC,CAAC;SACtB;QAED,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;KACvC;AACL,CAAC;AAED,8GAA8G;AAC9G,kHAAkH;AAClH,kEAAkE;AAClE,SAAS,aAAa,CAAC,IAAU;IAC7B,IAAM,WAAW,GAAgB,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;AACrE,CAAC","sourcesContent":["import { getColor, setColor } from '../../formatHandlers/utils/color';\nimport type { DarkColorHandler } from 'roosterjs-content-model-types';\n\n/**\n * Edit and transform color of elements between light mode and dark mode\n * @param rootNode The root DOM node to transform\n * @param includeSelf True to transform the root node as well, otherwise false\n * @param direction To specify the transform direction, light to dark, or dark to light\n * @param darkColorHandler The dark color handler object to help do color transformation\n */\nexport function transformColor(\n rootNode: Node,\n includeSelf: boolean,\n direction: 'lightToDark' | 'darkToLight',\n darkColorHandler?: DarkColorHandler\n) {\n const toDarkMode = direction == 'lightToDark';\n const transformer = (element: HTMLElement) => {\n const textColor = getColor(element, false /*isBackground*/, !toDarkMode, darkColorHandler);\n const backColor = getColor(element, true /*isBackground*/, !toDarkMode, darkColorHandler);\n\n setColor(element, textColor, false /*isBackground*/, toDarkMode, darkColorHandler);\n setColor(element, backColor, true /*isBackground*/, toDarkMode, darkColorHandler);\n };\n\n iterateElements(rootNode, transformer, includeSelf);\n}\n\nfunction iterateElements(\n root: Node,\n transformer: (element: HTMLElement) => void,\n includeSelf?: boolean\n) {\n if (includeSelf && isHTMLElement(root)) {\n transformer(root);\n }\n\n for (let child = root.firstChild; child; child = child.nextSibling) {\n if (isHTMLElement(child)) {\n transformer(child);\n }\n\n iterateElements(child, transformer);\n }\n}\n\n// This is not a strict check, we just need to make sure this element has style so that we can set style to it\n// We don't use safeInstanceOf() here since this function will be called very frequently when extract html content\n// in dark mode, so we need to make sure this check is fast enough\nfunction isHTMLElement(node: Node): node is HTMLElement {\n const htmlElement = <HTMLElement>node;\n return node.nodeType == Node.ELEMENT_NODE && !!htmlElement.style;\n}\n"]}
1
+ {"version":3,"file":"transformColor.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/style/transformColor.ts"],"names":[],"mappings":"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","sourcesContent":["import { BorderColorKeyMap, BorderKeys } from '../../formatHandlers/utils/borderKeys';\nimport { isElementOfType } from '../isElementOfType';\nimport {\n adaptColor,\n getColor,\n getLightModeColor,\n setColor,\n} from '../../formatHandlers/utils/color';\nimport type { DarkColorHandler } from 'roosterjs-content-model-types';\n\n/**\n * Configuration options for controlling which elements and styles undergo color transformation.\n * By default, text and background colors are transformed for all elements.\n */\nexport interface TransformColorOptions {\n tableBorders: boolean;\n}\n\n/**\n * Edit and transform color of elements between light mode and dark mode\n * By default, text and background colors are transformed for all elements.\n * @param rootNode The root DOM node to transform\n * @param includeSelf True to transform the root node as well, otherwise false\n * @param direction To specify the transform direction, light to dark, or dark to light\n * @param darkColorHandler The dark color handler object to help do color transformation\n * @param transformColorOptions Configuration options for controlling which elements and styles undergo color transformation.\n */\nexport function transformColor(\n rootNode: Node,\n includeSelf: boolean,\n direction: 'lightToDark' | 'darkToLight',\n darkColorHandler?: DarkColorHandler,\n transformColorOptions?: TransformColorOptions\n) {\n const toDarkMode = direction == 'lightToDark';\n const tableBorders = transformColorOptions?.tableBorders || false;\n const transformer = (element: HTMLElement) => {\n const textColor = getColor(element, false /*isBackground*/, !toDarkMode, darkColorHandler);\n const backColor = getColor(element, true /*isBackground*/, !toDarkMode, darkColorHandler);\n\n setColor(element, textColor, false /*isBackground*/, toDarkMode, darkColorHandler);\n setColor(element, backColor, true /*isBackground*/, toDarkMode, darkColorHandler);\n\n if (tableBorders) {\n transformBorderColor(element, toDarkMode, darkColorHandler);\n }\n };\n\n iterateElements(rootNode, transformer, includeSelf);\n}\n\nfunction transformBorderColor(\n element: HTMLElement,\n toDarkMode: boolean,\n darkColorHandler?: DarkColorHandler\n) {\n if (isElementOfType(element, 'td') || isElementOfType(element, 'th')) {\n BorderKeys.forEach(key => {\n const borderColorProperty = BorderColorKeyMap[key];\n const style = element.style.getPropertyValue(borderColorProperty);\n if (style) {\n const lightColor = getLightModeColor(style, !toDarkMode, darkColorHandler);\n if (lightColor) {\n const transformedColor = adaptColor(\n element,\n lightColor,\n 'border',\n toDarkMode,\n darkColorHandler\n );\n if (transformedColor) {\n element.style.setProperty(borderColorProperty, transformedColor);\n }\n }\n }\n });\n }\n}\n\nfunction iterateElements(\n root: Node,\n transformer: (element: HTMLElement) => void,\n includeSelf?: boolean\n) {\n if (includeSelf && isHTMLElement(root)) {\n transformer(root);\n }\n\n for (let child = root.firstChild; child; child = child.nextSibling) {\n if (isHTMLElement(child)) {\n transformer(child);\n }\n\n iterateElements(child, transformer);\n }\n}\n\n// This is not a strict check, we just need to make sure this element has style so that we can set style to it\n// We don't use safeInstanceOf() here since this function will be called very frequently when extract html content\n// in dark mode, so we need to make sure this check is fast enough\nfunction isHTMLElement(node: Node): node is HTMLElement {\n const htmlElement = <HTMLElement>node;\n return node.nodeType == Node.ELEMENT_NODE && !!htmlElement.style;\n}\n"]}
@@ -11,30 +11,14 @@ exports.textAlignFormatHandler = {
11
11
  var _a;
12
12
  directionFormatHandler_1.directionFormatHandler.parse(format, element, context, defaultStyle);
13
13
  var textAlign = element.style.textAlign || defaultStyle.textAlign;
14
- if (element.tagName == 'LI' &&
15
- ((_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.style.display) === 'flex' &&
16
- element.parentElement.style.flexDirection === 'column' &&
17
- element.style.alignSelf) {
18
- // For LI element with flex style applied, we use its "align-self" style value instead since LI has a different implementation for align
19
- textAlign = element.style.alignSelf;
20
- }
21
- if (textAlign) {
14
+ if (textAlign && ((_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.style.display) !== 'flex') {
22
15
  format.textAlign = (0, dir_1.calcAlign)(textAlign, format.direction);
23
16
  }
24
17
  },
25
18
  apply: function (format, element) {
26
19
  var dir = format.direction == 'rtl' ? 'rtl' : 'ltr';
27
20
  if (format.textAlign) {
28
- var parent_1 = element.parentElement;
29
- var parentTag = parent_1 === null || parent_1 === void 0 ? void 0 : parent_1.tagName;
30
- if (element.tagName == 'LI' && parent_1 && (parentTag == 'OL' || parentTag == 'UL')) {
31
- element.style.alignSelf = format.textAlign;
32
- element.parentElement.style.flexDirection = 'column';
33
- element.parentElement.style.display = 'flex';
34
- }
35
- else {
36
- element.style.textAlign = dir_1.ResultMap[format.textAlign][dir];
37
- }
21
+ element.style.textAlign = dir_1.ResultMap[format.textAlign][dir];
38
22
  }
39
23
  },
40
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"textAlignFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/block/textAlignFormatHandler.ts"],"names":[],"mappings":";;;AAAA,oCAAoD;AACpD,mEAAkE;AAIlE;;GAEG;AACU,QAAA,sBAAsB,GAAqD;IACpF,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY;;QAC1C,+CAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAErE,IAAI,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC;QAElE,IACI,OAAO,CAAC,OAAO,IAAI,IAAI;YACvB,CAAA,MAAA,OAAO,CAAC,aAAa,0CAAE,KAAK,CAAC,OAAO,MAAK,MAAM;YAC/C,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,KAAK,QAAQ;YACtD,OAAO,CAAC,KAAK,CAAC,SAAS,EACzB;YACE,wIAAwI;YACxI,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;SACvC;QAED,IAAI,SAAS,EAAE;YACX,MAAM,CAAC,SAAS,GAAG,IAAA,eAAS,EAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;SAC7D;IACL,CAAC;IACD,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO;QACnB,IAAM,GAAG,GAAkB,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAErE,IAAI,MAAM,CAAC,SAAS,EAAE;YAClB,IAAM,QAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YACrC,IAAM,SAAS,GAAG,QAAM,aAAN,QAAM,uBAAN,QAAM,CAAE,OAAO,CAAC;YAElC,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,IAAI,QAAM,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,EAAE;gBAC/E,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC3C,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;gBACrD,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;aAChD;iBAAM;gBACH,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,eAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;aAC9D;SACJ;IACL,CAAC;CACJ,CAAC","sourcesContent":["import { calcAlign, ResultMap } from '../utils/dir';\nimport { directionFormatHandler } from './directionFormatHandler';\nimport type { DirectionFormat, TextAlignFormat } from 'roosterjs-content-model-types';\nimport type { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const textAlignFormatHandler: FormatHandler<DirectionFormat & TextAlignFormat> = {\n parse: (format, element, context, defaultStyle) => {\n directionFormatHandler.parse(format, element, context, defaultStyle);\n\n let textAlign = element.style.textAlign || defaultStyle.textAlign;\n\n if (\n element.tagName == 'LI' &&\n element.parentElement?.style.display === 'flex' &&\n element.parentElement.style.flexDirection === 'column' &&\n element.style.alignSelf\n ) {\n // For LI element with flex style applied, we use its \"align-self\" style value instead since LI has a different implementation for align\n textAlign = element.style.alignSelf;\n }\n\n if (textAlign) {\n format.textAlign = calcAlign(textAlign, format.direction);\n }\n },\n apply: (format, element) => {\n const dir: 'ltr' | 'rtl' = format.direction == 'rtl' ? 'rtl' : 'ltr';\n\n if (format.textAlign) {\n const parent = element.parentElement;\n const parentTag = parent?.tagName;\n\n if (element.tagName == 'LI' && parent && (parentTag == 'OL' || parentTag == 'UL')) {\n element.style.alignSelf = format.textAlign;\n element.parentElement.style.flexDirection = 'column';\n element.parentElement.style.display = 'flex';\n } else {\n element.style.textAlign = ResultMap[format.textAlign][dir];\n }\n }\n },\n};\n"]}
1
+ {"version":3,"file":"textAlignFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/block/textAlignFormatHandler.ts"],"names":[],"mappings":";;;AAAA,oCAAoD;AACpD,mEAAkE;AAIlE;;GAEG;AACU,QAAA,sBAAsB,GAAqD;IACpF,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY;;QAC1C,+CAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAErE,IAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC;QAEpE,IAAI,SAAS,IAAI,CAAA,MAAA,OAAO,CAAC,aAAa,0CAAE,KAAK,CAAC,OAAO,MAAK,MAAM,EAAE;YAC9D,MAAM,CAAC,SAAS,GAAG,IAAA,eAAS,EAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;SAC7D;IACL,CAAC;IACD,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO;QACnB,IAAM,GAAG,GAAkB,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAErE,IAAI,MAAM,CAAC,SAAS,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,eAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;SAC9D;IACL,CAAC;CACJ,CAAC","sourcesContent":["import { calcAlign, ResultMap } from '../utils/dir';\nimport { directionFormatHandler } from './directionFormatHandler';\nimport type { DirectionFormat, TextAlignFormat } from 'roosterjs-content-model-types';\nimport type { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const textAlignFormatHandler: FormatHandler<DirectionFormat & TextAlignFormat> = {\n parse: (format, element, context, defaultStyle) => {\n directionFormatHandler.parse(format, element, context, defaultStyle);\n\n const textAlign = element.style.textAlign || defaultStyle.textAlign;\n\n if (textAlign && element.parentElement?.style.display !== 'flex') {\n format.textAlign = calcAlign(textAlign, format.direction);\n }\n },\n apply: (format, element) => {\n const dir: 'ltr' | 'rtl' = format.direction == 'rtl' ? 'rtl' : 'ltr';\n\n if (format.textAlign) {\n element.style.textAlign = ResultMap[format.textAlign][dir];\n }\n },\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import type { BorderFormat } from 'roosterjs-content-model-types';
2
+ import type { FormatHandler } from '../FormatHandler';
3
+ /**
4
+ * @internal
5
+ */
6
+ export declare const borderColorFormatHandler: FormatHandler<BorderFormat>;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.borderColorFormatHandler = void 0;
4
+ var color_1 = require("../utils/color");
5
+ var borderKeys_1 = require("../utils/borderKeys");
6
+ var borderValues_1 = require("../../domUtils/style/borderValues");
7
+ /**
8
+ * Keys of border width
9
+ */
10
+ var BorderWidthKeyMap = {
11
+ borderTop: 'border-top-width',
12
+ borderRight: 'border-right-width',
13
+ borderBottom: 'border-bottom-width',
14
+ borderLeft: 'border-left-width',
15
+ };
16
+ /**
17
+ * Keys of border styles
18
+ */
19
+ var BorderStyleKeyMap = {
20
+ borderTop: 'border-top-style',
21
+ borderRight: 'border-right-style',
22
+ borderBottom: 'border-bottom-style',
23
+ borderLeft: 'border-left-style',
24
+ };
25
+ /**
26
+ * @internal
27
+ */
28
+ exports.borderColorFormatHandler = {
29
+ parse: function (format, element, context) {
30
+ if (context.experimentalFeatures &&
31
+ context.experimentalFeatures.indexOf('TransformTableBorderColors') > -1) {
32
+ borderKeys_1.BorderKeys.forEach(function (key) {
33
+ var width = element.style.getPropertyValue(BorderWidthKeyMap[key]);
34
+ var style = element.style.getPropertyValue(BorderStyleKeyMap[key]);
35
+ var borderColor = (0, color_1.retrieveElementColor)(element, key);
36
+ if (borderColor) {
37
+ var lightModeColor = (0, color_1.getLightModeColor)(borderColor, !!context.isDarkMode, context.darkColorHandler);
38
+ format[key] = (0, borderValues_1.combineBorderValue)({
39
+ width: width,
40
+ style: style,
41
+ color: lightModeColor,
42
+ });
43
+ }
44
+ });
45
+ }
46
+ },
47
+ apply: function (format, element, context) {
48
+ if (context.experimentalFeatures &&
49
+ context.experimentalFeatures.indexOf('TransformTableBorderColors') > -1) {
50
+ borderKeys_1.BorderKeys.forEach(function (key) {
51
+ var value = format[key];
52
+ if (value) {
53
+ var borderValues = (0, borderValues_1.extractBorderValues)(value);
54
+ if (borderValues.color) {
55
+ var transformedColor = (0, color_1.adaptColor)(element, borderValues.color, 'border', !!context.isDarkMode, context.darkColorHandler);
56
+ if (transformedColor) {
57
+ var borderColorProperty = borderKeys_1.BorderColorKeyMap[key];
58
+ element.style.setProperty(borderColorProperty, transformedColor);
59
+ }
60
+ }
61
+ }
62
+ });
63
+ }
64
+ },
65
+ };
66
+ //# sourceMappingURL=borderColorFormatHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderColorFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/common/borderColorFormatHandler.ts"],"names":[],"mappings":";;;AAAA,wCAAqF;AACrF,kDAAoE;AACpE,kEAA4F;AAI5F;;GAEG;AACH,IAAM,iBAAiB,GAEnB;IACA,SAAS,EAAE,kBAAkB;IAC7B,WAAW,EAAE,oBAAoB;IACjC,YAAY,EAAE,qBAAqB;IACnC,UAAU,EAAE,mBAAmB;CAClC,CAAC;AAEF;;GAEG;AACH,IAAM,iBAAiB,GAEnB;IACA,SAAS,EAAE,kBAAkB;IAC7B,WAAW,EAAE,oBAAoB;IACjC,YAAY,EAAE,qBAAqB;IACnC,UAAU,EAAE,mBAAmB;CAClC,CAAC;AAEF;;GAEG;AACU,QAAA,wBAAwB,GAAgC;IACjE,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO;QAC5B,IACI,OAAO,CAAC,oBAAoB;YAC5B,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,EACzE;YACE,uBAAU,CAAC,OAAO,CAAC,UAAA,GAAG;gBAClB,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrE,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrE,IAAM,WAAW,GAAG,IAAA,4BAAoB,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAEvD,IAAI,WAAW,EAAE;oBACb,IAAM,cAAc,GAAG,IAAA,yBAAiB,EACpC,WAAW,EACX,CAAC,CAAC,OAAO,CAAC,UAAU,EACpB,OAAO,CAAC,gBAAgB,CAC3B,CAAC;oBAEF,MAAM,CAAC,GAAG,CAAC,GAAG,IAAA,iCAAkB,EAAC;wBAC7B,KAAK,OAAA;wBACL,KAAK,OAAA;wBACL,KAAK,EAAE,cAAc;qBACxB,CAAC,CAAC;iBACN;YACL,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IACD,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO;QAC5B,IACI,OAAO,CAAC,oBAAoB;YAC5B,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,EACzE;YACE,uBAAU,CAAC,OAAO,CAAC,UAAA,GAAG;gBAClB,IAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,KAAK,EAAE;oBACP,IAAM,YAAY,GAAG,IAAA,kCAAmB,EAAC,KAAK,CAAC,CAAC;oBAChD,IAAI,YAAY,CAAC,KAAK,EAAE;wBACpB,IAAM,gBAAgB,GAAG,IAAA,kBAAU,EAC/B,OAAO,EACP,YAAY,CAAC,KAAK,EAClB,QAAQ,EACR,CAAC,CAAC,OAAO,CAAC,UAAU,EACpB,OAAO,CAAC,gBAAgB,CAC3B,CAAC;wBACF,IAAI,gBAAgB,EAAE;4BAClB,IAAM,mBAAmB,GAAG,8BAAiB,CAAC,GAAG,CAAC,CAAC;4BACnD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;yBACpE;qBACJ;iBACJ;YACL,CAAC,CAAC,CAAC;SACN;IACL,CAAC;CACJ,CAAC","sourcesContent":["import { adaptColor, getLightModeColor, retrieveElementColor } from '../utils/color';\nimport { BorderColorKeyMap, BorderKeys } from '../utils/borderKeys';\nimport { combineBorderValue, extractBorderValues } from '../../domUtils/style/borderValues';\nimport type { BorderFormat, BorderKey } from 'roosterjs-content-model-types';\nimport type { FormatHandler } from '../FormatHandler';\n\n/**\n * Keys of border width\n */\nconst BorderWidthKeyMap: {\n [key in BorderKey]: string;\n} = {\n borderTop: 'border-top-width',\n borderRight: 'border-right-width',\n borderBottom: 'border-bottom-width',\n borderLeft: 'border-left-width',\n};\n\n/**\n * Keys of border styles\n */\nconst BorderStyleKeyMap: {\n [key in BorderKey]: string;\n} = {\n borderTop: 'border-top-style',\n borderRight: 'border-right-style',\n borderBottom: 'border-bottom-style',\n borderLeft: 'border-left-style',\n};\n\n/**\n * @internal\n */\nexport const borderColorFormatHandler: FormatHandler<BorderFormat> = {\n parse: (format, element, context) => {\n if (\n context.experimentalFeatures &&\n context.experimentalFeatures.indexOf('TransformTableBorderColors') > -1\n ) {\n BorderKeys.forEach(key => {\n const width = element.style.getPropertyValue(BorderWidthKeyMap[key]);\n const style = element.style.getPropertyValue(BorderStyleKeyMap[key]);\n const borderColor = retrieveElementColor(element, key);\n\n if (borderColor) {\n const lightModeColor = getLightModeColor(\n borderColor,\n !!context.isDarkMode,\n context.darkColorHandler\n );\n\n format[key] = combineBorderValue({\n width,\n style,\n color: lightModeColor,\n });\n }\n });\n }\n },\n apply: (format, element, context) => {\n if (\n context.experimentalFeatures &&\n context.experimentalFeatures.indexOf('TransformTableBorderColors') > -1\n ) {\n BorderKeys.forEach(key => {\n const value = format[key];\n if (value) {\n const borderValues = extractBorderValues(value);\n if (borderValues.color) {\n const transformedColor = adaptColor(\n element,\n borderValues.color,\n 'border',\n !!context.isDarkMode,\n context.darkColorHandler\n );\n if (transformedColor) {\n const borderColorProperty = BorderColorKeyMap[key];\n element.style.setProperty(borderColorProperty, transformedColor);\n }\n }\n }\n });\n }\n },\n};\n"]}
@@ -1,9 +1,5 @@
1
1
  import type { BorderFormat } from 'roosterjs-content-model-types';
2
2
  import type { FormatHandler } from '../FormatHandler';
3
- /**
4
- * Keys of border items
5
- */
6
- export declare const BorderKeys: (keyof BorderFormat & keyof CSSStyleDeclaration)[];
7
3
  /**
8
4
  * @internal
9
5
  */
@@ -1,15 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.borderFormatHandler = exports.BorderKeys = void 0;
4
- /**
5
- * Keys of border items
6
- */
7
- exports.BorderKeys = [
8
- 'borderTop',
9
- 'borderRight',
10
- 'borderBottom',
11
- 'borderLeft',
12
- ];
3
+ exports.borderFormatHandler = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var borderKeys_1 = require("../utils/borderKeys");
13
6
  // This array needs to match BorderKeys array
14
7
  var BorderWidthKeys = [
15
8
  'borderTopWidth',
@@ -23,13 +16,13 @@ var BorderRadiusKeys = [
23
16
  'borderBottomLeftRadius',
24
17
  'borderBottomRightRadius',
25
18
  ];
26
- var AllKeys = exports.BorderKeys.concat(BorderRadiusKeys);
19
+ var AllKeys = (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(borderKeys_1.BorderKeys), false), (0, tslib_1.__read)(BorderRadiusKeys), false);
27
20
  /**
28
21
  * @internal
29
22
  */
30
23
  exports.borderFormatHandler = {
31
24
  parse: function (format, element, _, defaultStyle) {
32
- exports.BorderKeys.forEach(function (key, i) {
25
+ borderKeys_1.BorderKeys.forEach(function (key, i) {
33
26
  var _a;
34
27
  var value = element.style[key];
35
28
  var defaultWidth = (_a = defaultStyle[BorderWidthKeys[i]]) !== null && _a !== void 0 ? _a : '0px';
@@ -1 +1 @@
1
- {"version":3,"file":"borderFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/common/borderFormatHandler.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACU,QAAA,UAAU,GAAuD;IAC1E,WAAW;IACX,aAAa;IACb,cAAc;IACd,YAAY;CACf,CAAC;AAEF,6CAA6C;AAC7C,IAAM,eAAe,GAAkC;IACnD,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,iBAAiB;CACpB,CAAC;AAEF,IAAM,gBAAgB,GAAuD;IACzE,qBAAqB;IACrB,sBAAsB;IACtB,wBAAwB;IACxB,yBAAyB;CAC5B,CAAC;AAEF,IAAM,OAAO,GAAG,kBAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEpD;;GAEG;AACU,QAAA,mBAAmB,GAAgC;IAC5D,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY;QACpC,kBAAU,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;;YACtB,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjC,IAAM,YAAY,GAAG,MAAA,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,mCAAI,KAAK,CAAC;YAC/D,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YAE9C,IAAI,KAAK,IAAI,GAAG,EAAE;gBACd,KAAK,GAAG,KAAK,CAAC;aACjB;YAED,IAAI,KAAK,IAAI,KAAK,IAAI,YAAY,EAAE;gBAChC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aAC9C;QACL,CAAC,CAAC,CAAC;QAEH,IAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QAEhD,IAAI,YAAY,EAAE;YACd,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;SACtC;aAAM;YACH,gBAAgB,CAAC,OAAO,CAAC,UAAA,GAAG;gBACxB,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEjC,IAAI,KAAK,EAAE;oBACP,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;iBACvB;YACL,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IACD,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO;QACnB,OAAO,CAAC,OAAO,CAAC,UAAA,GAAG;YACf,IAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAE1B,IAAI,KAAK,EAAE;gBACP,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aAC9B;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,YAAY,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;SACpD;IACL,CAAC;CACJ,CAAC","sourcesContent":["import type { BorderFormat } from 'roosterjs-content-model-types';\nimport type { FormatHandler } from '../FormatHandler';\n\n/**\n * Keys of border items\n */\nexport const BorderKeys: (keyof BorderFormat & keyof CSSStyleDeclaration)[] = [\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n];\n\n// This array needs to match BorderKeys array\nconst BorderWidthKeys: (keyof CSSStyleDeclaration)[] = [\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n];\n\nconst BorderRadiusKeys: (keyof BorderFormat & keyof CSSStyleDeclaration)[] = [\n 'borderTopLeftRadius',\n 'borderTopRightRadius',\n 'borderBottomLeftRadius',\n 'borderBottomRightRadius',\n];\n\nconst AllKeys = BorderKeys.concat(BorderRadiusKeys);\n\n/**\n * @internal\n */\nexport const borderFormatHandler: FormatHandler<BorderFormat> = {\n parse: (format, element, _, defaultStyle) => {\n BorderKeys.forEach((key, i) => {\n const value = element.style[key];\n const defaultWidth = defaultStyle[BorderWidthKeys[i]] ?? '0px';\n let width = element.style[BorderWidthKeys[i]];\n\n if (width == '0') {\n width = '0px';\n }\n\n if (value && width != defaultWidth) {\n format[key] = value == 'none' ? '' : value;\n }\n });\n\n const borderRadius = element.style.borderRadius;\n\n if (borderRadius) {\n format.borderRadius = borderRadius;\n } else {\n BorderRadiusKeys.forEach(key => {\n const value = element.style[key];\n\n if (value) {\n format[key] = value;\n }\n });\n }\n },\n apply: (format, element) => {\n AllKeys.forEach(key => {\n const value = format[key];\n\n if (value) {\n element.style[key] = value;\n }\n });\n\n if (format.borderRadius) {\n element.style.borderRadius = format.borderRadius;\n }\n },\n};\n"]}
1
+ {"version":3,"file":"borderFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/common/borderFormatHandler.ts"],"names":[],"mappings":";;;;AAAA,kDAAiD;AAIjD,6CAA6C;AAC7C,IAAM,eAAe,GAAkC;IACnD,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,iBAAiB;CACpB,CAAC;AAEF,IAAM,gBAAgB,GAAuD;IACzE,qBAAqB;IACrB,sBAAsB;IACtB,wBAAwB;IACxB,yBAAyB;CAC5B,CAAC;AAEF,IAAM,OAAO,iFAAO,uBAAU,+BAAK,gBAAgB,SAAC,CAAC;AAErD;;GAEG;AACU,QAAA,mBAAmB,GAAgC;IAC5D,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY;QACpC,uBAAU,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;;YACtB,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjC,IAAM,YAAY,GAAG,MAAA,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,mCAAI,KAAK,CAAC;YAC/D,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YAE9C,IAAI,KAAK,IAAI,GAAG,EAAE;gBACd,KAAK,GAAG,KAAK,CAAC;aACjB;YAED,IAAI,KAAK,IAAI,KAAK,IAAI,YAAY,EAAE;gBAChC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aAC9C;QACL,CAAC,CAAC,CAAC;QAEH,IAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QAEhD,IAAI,YAAY,EAAE;YACd,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;SACtC;aAAM;YACH,gBAAgB,CAAC,OAAO,CAAC,UAAA,GAAG;gBACxB,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEjC,IAAI,KAAK,EAAE;oBACP,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;iBACvB;YACL,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IACD,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO;QACnB,OAAO,CAAC,OAAO,CAAC,UAAA,GAAG;YACf,IAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAE1B,IAAI,KAAK,EAAE;gBACP,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aAC9B;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,YAAY,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;SACpD;IACL,CAAC;CACJ,CAAC","sourcesContent":["import { BorderKeys } from '../utils/borderKeys';\nimport type { BorderFormat } from 'roosterjs-content-model-types';\nimport type { FormatHandler } from '../FormatHandler';\n\n// This array needs to match BorderKeys array\nconst BorderWidthKeys: (keyof CSSStyleDeclaration)[] = [\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n];\n\nconst BorderRadiusKeys: (keyof BorderFormat & keyof CSSStyleDeclaration)[] = [\n 'borderTopLeftRadius',\n 'borderTopRightRadius',\n 'borderBottomLeftRadius',\n 'borderBottomRightRadius',\n];\n\nconst AllKeys = [...BorderKeys, ...BorderRadiusKeys];\n\n/**\n * @internal\n */\nexport const borderFormatHandler: FormatHandler<BorderFormat> = {\n parse: (format, element, _, defaultStyle) => {\n BorderKeys.forEach((key, i) => {\n const value = element.style[key];\n const defaultWidth = defaultStyle[BorderWidthKeys[i]] ?? '0px';\n let width = element.style[BorderWidthKeys[i]];\n\n if (width == '0') {\n width = '0px';\n }\n\n if (value && width != defaultWidth) {\n format[key] = value == 'none' ? '' : value;\n }\n });\n\n const borderRadius = element.style.borderRadius;\n\n if (borderRadius) {\n format.borderRadius = borderRadius;\n } else {\n BorderRadiusKeys.forEach(key => {\n const value = element.style[key];\n\n if (value) {\n format[key] = value;\n }\n });\n }\n },\n apply: (format, element) => {\n AllKeys.forEach(key => {\n const value = format[key];\n\n if (value) {\n element.style[key] = value;\n }\n });\n\n if (format.borderRadius) {\n element.style.borderRadius = format.borderRadius;\n }\n },\n};\n"]}
@@ -6,6 +6,7 @@ var ariaFormatHandler_1 = require("./common/ariaFormatHandler");
6
6
  var backgroundColorFormatHandler_1 = require("./common/backgroundColorFormatHandler");
7
7
  var boldFormatHandler_1 = require("./segment/boldFormatHandler");
8
8
  var borderBoxFormatHandler_1 = require("./common/borderBoxFormatHandler");
9
+ var borderColorFormatHandler_1 = require("./common/borderColorFormatHandler");
9
10
  var borderFormatHandler_1 = require("./common/borderFormatHandler");
10
11
  var boxShadowFormatHandler_1 = require("./common/boxShadowFormatHandler");
11
12
  var datasetFormatHandler_1 = require("./common/datasetFormatHandler");
@@ -20,9 +21,11 @@ var htmlAlignFormatHandler_1 = require("./block/htmlAlignFormatHandler");
20
21
  var idFormatHandler_1 = require("./common/idFormatHandler");
21
22
  var imageStateFormatHandler_1 = require("./segment/imageStateFormatHandler");
22
23
  var italicFormatHandler_1 = require("./segment/italicFormatHandler");
24
+ var legacyTableBorderFormatHandler_1 = require("./table/legacyTableBorderFormatHandler");
23
25
  var letterSpacingFormatHandler_1 = require("./segment/letterSpacingFormatHandler");
24
26
  var lineHeightFormatHandler_1 = require("./block/lineHeightFormatHandler");
25
27
  var linkFormatHandler_1 = require("./segment/linkFormatHandler");
28
+ var listItemAlignFormatHandler_1 = require("./list/listItemAlignFormatHandler");
26
29
  var listItemThreadFormatHandler_1 = require("./list/listItemThreadFormatHandler");
27
30
  var listLevelThreadFormatHandler_1 = require("./list/listLevelThreadFormatHandler");
28
31
  var listStyleFormatHandler_1 = require("./list/listStyleFormatHandler");
@@ -49,6 +52,7 @@ var defaultFormatHandlerMap = {
49
52
  bold: boldFormatHandler_1.boldFormatHandler,
50
53
  border: borderFormatHandler_1.borderFormatHandler,
51
54
  borderBox: borderBoxFormatHandler_1.borderBoxFormatHandler,
55
+ borderColor: borderColorFormatHandler_1.borderColorFormatHandler,
52
56
  boxShadow: boxShadowFormatHandler_1.boxShadowFormatHandler,
53
57
  dataset: datasetFormatHandler_1.datasetFormatHandler,
54
58
  direction: directionFormatHandler_1.directionFormatHandler,
@@ -61,9 +65,11 @@ var defaultFormatHandlerMap = {
61
65
  id: idFormatHandler_1.idFormatHandler,
62
66
  imageState: imageStateFormatHandler_1.imageStateFormatHandler,
63
67
  italic: italicFormatHandler_1.italicFormatHandler,
68
+ legacyTableBorder: legacyTableBorderFormatHandler_1.legacyTableBorderFormatHandler,
64
69
  letterSpacing: letterSpacingFormatHandler_1.letterSpacingFormatHandler,
65
70
  lineHeight: lineHeightFormatHandler_1.lineHeightFormatHandler,
66
71
  link: linkFormatHandler_1.linkFormatHandler,
72
+ listItemAlign: listItemAlignFormatHandler_1.listItemAlignFormatHandler,
67
73
  listItemThread: listItemThreadFormatHandler_1.listItemThreadFormatHandler,
68
74
  listLevelThread: listLevelThreadFormatHandler_1.listLevelThreadFormatHandler,
69
75
  listStyle: listStyleFormatHandler_1.listStyleFormatHandler,
@@ -117,13 +123,7 @@ exports.defaultFormatKeysPerCategory = {
117
123
  block: sharedBlockFormats,
118
124
  listItemThread: ['listItemThread'],
119
125
  listLevelThread: ['listLevelThread'],
120
- listItemElement: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(sharedBlockFormats), false), [
121
- 'direction',
122
- 'textAlign',
123
- 'lineHeight',
124
- 'margin',
125
- 'listStyle',
126
- ], false),
126
+ listItemElement: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(sharedBlockFormats), false), ['listItemAlign', 'margin', 'listStyle'], false),
127
127
  listLevel: ['direction', 'textAlign', 'margin', 'padding', 'listStyle', 'backgroundColor'],
128
128
  styleBasedSegment: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(styleBasedSegmentFormats), false), ['textColor', 'backgroundColor', 'lineHeight'], false),
129
129
  elementBasedSegment: elementBasedSegmentFormats,
@@ -138,6 +138,7 @@ exports.defaultFormatKeysPerCategory = {
138
138
  ], false),
139
139
  tableCell: [
140
140
  'border',
141
+ 'borderColor',
141
142
  'backgroundColor',
142
143
  'padding',
143
144
  'verticalAlign',
@@ -162,7 +163,7 @@ exports.defaultFormatKeysPerCategory = {
162
163
  'direction',
163
164
  'role',
164
165
  ],
165
- tableBorder: ['borderBox', 'tableSpacing'],
166
+ tableBorder: ['borderBox', 'tableSpacing', 'legacyTableBorder'],
166
167
  tableCellBorder: ['borderBox'],
167
168
  image: [
168
169
  'id',
@@ -1 +1 @@
1
- {"version":3,"file":"defaultFormatHandlers.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/defaultFormatHandlers.ts"],"names":[],"mappings":"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","sourcesContent":["import { ariaFormatHandler } from './common/ariaFormatHandler';\nimport { backgroundColorFormatHandler } from './common/backgroundColorFormatHandler';\nimport { boldFormatHandler } from './segment/boldFormatHandler';\nimport { borderBoxFormatHandler } from './common/borderBoxFormatHandler';\nimport { borderFormatHandler } from './common/borderFormatHandler';\nimport { boxShadowFormatHandler } from './common/boxShadowFormatHandler';\nimport { datasetFormatHandler } from './common/datasetFormatHandler';\nimport { directionFormatHandler } from './block/directionFormatHandler';\nimport { displayFormatHandler } from './block/displayFormatHandler';\nimport { entityFormatHandler } from './entity/entityFormatHandler';\nimport { floatFormatHandler } from './common/floatFormatHandler';\nimport { fontFamilyFormatHandler } from './segment/fontFamilyFormatHandler';\nimport { fontSizeFormatHandler } from './segment/fontSizeFormatHandler';\nimport { getObjectKeys } from '../domUtils/getObjectKeys';\nimport { htmlAlignFormatHandler } from './block/htmlAlignFormatHandler';\nimport { idFormatHandler } from './common/idFormatHandler';\nimport { imageStateFormatHandler } from './segment/imageStateFormatHandler';\nimport { italicFormatHandler } from './segment/italicFormatHandler';\nimport { letterSpacingFormatHandler } from './segment/letterSpacingFormatHandler';\nimport { lineHeightFormatHandler } from './block/lineHeightFormatHandler';\nimport { linkFormatHandler } from './segment/linkFormatHandler';\nimport { listItemThreadFormatHandler } from './list/listItemThreadFormatHandler';\nimport { listLevelThreadFormatHandler } from './list/listLevelThreadFormatHandler';\nimport { listStyleFormatHandler } from './list/listStyleFormatHandler';\nimport { marginFormatHandler } from './block/marginFormatHandler';\nimport { paddingFormatHandler } from './block/paddingFormatHandler';\nimport { roleFormatHandler } from './common/roleFormatHandler';\nimport { sizeFormatHandler } from './common/sizeFormatHandler';\nimport { strikeFormatHandler } from './segment/strikeFormatHandler';\nimport { superOrSubScriptFormatHandler } from './segment/superOrSubScriptFormatHandler';\nimport { tableLayoutFormatHandler } from './table/tableLayoutFormatHandler';\nimport { tableSpacingFormatHandler } from './table/tableSpacingFormatHandler';\nimport { textAlignFormatHandler } from './block/textAlignFormatHandler';\nimport { textColorFormatHandler } from './segment/textColorFormatHandler';\nimport { textColorOnTableCellFormatHandler } from './table/textColorOnTableCellFormatHandler';\nimport { textIndentFormatHandler } from './block/textIndentFormatHandler';\nimport { undeletableLinkFormatHandler } from './segment/undeletableLinkFormatHandler';\nimport { underlineFormatHandler } from './segment/underlineFormatHandler';\nimport { verticalAlignFormatHandler } from './common/verticalAlignFormatHandler';\nimport { whiteSpaceFormatHandler } from './block/whiteSpaceFormatHandler';\nimport { wordBreakFormatHandler } from './common/wordBreakFormatHandler';\nimport type { FormatHandler } from './FormatHandler';\nimport type {\n ContentModelFormatMap,\n FormatApplier,\n FormatAppliers,\n FormatHandlerTypeMap,\n FormatKey,\n FormatParser,\n FormatParsers,\n} from 'roosterjs-content-model-types';\n\ntype FormatHandlers = {\n [Key in FormatKey]: FormatHandler<FormatHandlerTypeMap[Key]>;\n};\n\nconst defaultFormatHandlerMap: FormatHandlers = {\n aria: ariaFormatHandler,\n backgroundColor: backgroundColorFormatHandler,\n bold: boldFormatHandler,\n border: borderFormatHandler,\n borderBox: borderBoxFormatHandler,\n boxShadow: boxShadowFormatHandler,\n dataset: datasetFormatHandler,\n direction: directionFormatHandler,\n display: displayFormatHandler,\n float: floatFormatHandler,\n fontFamily: fontFamilyFormatHandler,\n fontSize: fontSizeFormatHandler,\n entity: entityFormatHandler,\n htmlAlign: htmlAlignFormatHandler,\n id: idFormatHandler,\n imageState: imageStateFormatHandler,\n italic: italicFormatHandler,\n letterSpacing: letterSpacingFormatHandler,\n lineHeight: lineHeightFormatHandler,\n link: linkFormatHandler,\n listItemThread: listItemThreadFormatHandler,\n listLevelThread: listLevelThreadFormatHandler,\n listStyle: listStyleFormatHandler,\n margin: marginFormatHandler,\n padding: paddingFormatHandler,\n role: roleFormatHandler,\n size: sizeFormatHandler,\n strike: strikeFormatHandler,\n superOrSubScript: superOrSubScriptFormatHandler,\n tableLayout: tableLayoutFormatHandler,\n tableSpacing: tableSpacingFormatHandler,\n textAlign: textAlignFormatHandler,\n textColor: textColorFormatHandler,\n textColorOnTableCell: textColorOnTableCellFormatHandler,\n textIndent: textIndentFormatHandler,\n undeletableLink: undeletableLinkFormatHandler,\n underline: underlineFormatHandler,\n verticalAlign: verticalAlignFormatHandler,\n whiteSpace: whiteSpaceFormatHandler,\n wordBreak: wordBreakFormatHandler,\n};\n\nconst styleBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n 'letterSpacing',\n 'fontFamily',\n 'fontSize',\n];\n\nconst elementBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n 'strike',\n 'underline',\n 'superOrSubScript',\n 'italic',\n 'bold',\n];\nconst sharedBlockFormats: (keyof FormatHandlerTypeMap)[] = [\n 'direction',\n 'textAlign',\n 'textIndent',\n 'lineHeight',\n 'whiteSpace',\n];\nconst sharedContainerFormats: (keyof FormatHandlerTypeMap)[] = [\n 'backgroundColor',\n 'margin',\n 'padding',\n 'border',\n];\n\n/**\n * @internal\n */\nexport const defaultFormatKeysPerCategory: {\n [key in keyof ContentModelFormatMap]: (keyof FormatHandlerTypeMap)[];\n} = {\n block: sharedBlockFormats,\n listItemThread: ['listItemThread'],\n listLevelThread: ['listLevelThread'],\n listItemElement: [\n ...sharedBlockFormats,\n 'direction',\n 'textAlign',\n 'lineHeight',\n 'margin',\n 'listStyle',\n ],\n listLevel: ['direction', 'textAlign', 'margin', 'padding', 'listStyle', 'backgroundColor'],\n styleBasedSegment: [...styleBasedSegmentFormats, 'textColor', 'backgroundColor', 'lineHeight'],\n elementBasedSegment: elementBasedSegmentFormats,\n segment: [\n ...styleBasedSegmentFormats,\n ...elementBasedSegmentFormats,\n 'textColor',\n 'backgroundColor',\n 'lineHeight',\n ],\n segmentOnBlock: [...styleBasedSegmentFormats, ...elementBasedSegmentFormats, 'textColor'],\n segmentOnTableCell: [\n ...styleBasedSegmentFormats,\n ...elementBasedSegmentFormats,\n 'textColorOnTableCell',\n ],\n tableCell: [\n 'border',\n 'backgroundColor',\n 'padding',\n 'verticalAlign',\n 'wordBreak',\n 'textColor',\n 'htmlAlign',\n 'size',\n ],\n tableRow: ['backgroundColor'],\n tableColumn: ['size'],\n table: [\n 'aria',\n 'id',\n 'border',\n 'backgroundColor',\n 'display',\n 'htmlAlign',\n 'margin',\n 'size',\n 'tableLayout',\n 'textColor',\n 'direction',\n 'role',\n ],\n tableBorder: ['borderBox', 'tableSpacing'],\n tableCellBorder: ['borderBox'],\n image: [\n 'id',\n 'size',\n 'margin',\n 'padding',\n 'borderBox',\n 'border',\n 'boxShadow',\n 'display',\n 'float',\n 'verticalAlign',\n 'imageState',\n ],\n link: [\n 'link',\n 'textColor',\n 'underline',\n 'display',\n 'margin',\n 'padding',\n 'backgroundColor',\n 'border',\n 'size',\n 'textAlign',\n 'undeletableLink',\n ],\n segmentUnderLink: ['textColor'],\n code: ['fontFamily', 'display'],\n dataset: ['dataset'],\n divider: [...sharedBlockFormats, ...sharedContainerFormats, 'display', 'size', 'htmlAlign'],\n container: [...sharedContainerFormats, 'htmlAlign', 'size', 'display', 'id'],\n entity: ['entity'],\n general: ['textColor', 'backgroundColor'], // General model still need to do color transformation in dark mode\n};\n\n/**\n * @internal\n */\nexport const defaultFormatParsers: FormatParsers = getObjectKeys(defaultFormatHandlerMap).reduce(\n (result, key) => {\n result[key] = defaultFormatHandlerMap[key].parse as FormatParser<any>;\n return result;\n },\n <FormatParsers>{}\n);\n\n/**\n * @internal\n */\nexport const defaultFormatAppliers: FormatAppliers = getObjectKeys(defaultFormatHandlerMap).reduce(\n (result, key) => {\n result[key] = defaultFormatHandlerMap[key].apply as FormatApplier<any>;\n return result;\n },\n <FormatAppliers>{}\n);\n"]}
1
+ {"version":3,"file":"defaultFormatHandlers.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/defaultFormatHandlers.ts"],"names":[],"mappings":"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","sourcesContent":["import { ariaFormatHandler } from './common/ariaFormatHandler';\nimport { backgroundColorFormatHandler } from './common/backgroundColorFormatHandler';\nimport { boldFormatHandler } from './segment/boldFormatHandler';\nimport { borderBoxFormatHandler } from './common/borderBoxFormatHandler';\nimport { borderColorFormatHandler } from './common/borderColorFormatHandler';\nimport { borderFormatHandler } from './common/borderFormatHandler';\nimport { boxShadowFormatHandler } from './common/boxShadowFormatHandler';\nimport { datasetFormatHandler } from './common/datasetFormatHandler';\nimport { directionFormatHandler } from './block/directionFormatHandler';\nimport { displayFormatHandler } from './block/displayFormatHandler';\nimport { entityFormatHandler } from './entity/entityFormatHandler';\nimport { floatFormatHandler } from './common/floatFormatHandler';\nimport { fontFamilyFormatHandler } from './segment/fontFamilyFormatHandler';\nimport { fontSizeFormatHandler } from './segment/fontSizeFormatHandler';\nimport { getObjectKeys } from '../domUtils/getObjectKeys';\nimport { htmlAlignFormatHandler } from './block/htmlAlignFormatHandler';\nimport { idFormatHandler } from './common/idFormatHandler';\nimport { imageStateFormatHandler } from './segment/imageStateFormatHandler';\nimport { italicFormatHandler } from './segment/italicFormatHandler';\nimport { legacyTableBorderFormatHandler } from './table/legacyTableBorderFormatHandler';\nimport { letterSpacingFormatHandler } from './segment/letterSpacingFormatHandler';\nimport { lineHeightFormatHandler } from './block/lineHeightFormatHandler';\nimport { linkFormatHandler } from './segment/linkFormatHandler';\nimport { listItemAlignFormatHandler } from './list/listItemAlignFormatHandler';\nimport { listItemThreadFormatHandler } from './list/listItemThreadFormatHandler';\nimport { listLevelThreadFormatHandler } from './list/listLevelThreadFormatHandler';\nimport { listStyleFormatHandler } from './list/listStyleFormatHandler';\nimport { marginFormatHandler } from './block/marginFormatHandler';\nimport { paddingFormatHandler } from './block/paddingFormatHandler';\nimport { roleFormatHandler } from './common/roleFormatHandler';\nimport { sizeFormatHandler } from './common/sizeFormatHandler';\nimport { strikeFormatHandler } from './segment/strikeFormatHandler';\nimport { superOrSubScriptFormatHandler } from './segment/superOrSubScriptFormatHandler';\nimport { tableLayoutFormatHandler } from './table/tableLayoutFormatHandler';\nimport { tableSpacingFormatHandler } from './table/tableSpacingFormatHandler';\nimport { textAlignFormatHandler } from './block/textAlignFormatHandler';\nimport { textColorFormatHandler } from './segment/textColorFormatHandler';\nimport { textColorOnTableCellFormatHandler } from './table/textColorOnTableCellFormatHandler';\nimport { textIndentFormatHandler } from './block/textIndentFormatHandler';\nimport { undeletableLinkFormatHandler } from './segment/undeletableLinkFormatHandler';\nimport { underlineFormatHandler } from './segment/underlineFormatHandler';\nimport { verticalAlignFormatHandler } from './common/verticalAlignFormatHandler';\nimport { whiteSpaceFormatHandler } from './block/whiteSpaceFormatHandler';\nimport { wordBreakFormatHandler } from './common/wordBreakFormatHandler';\nimport type { FormatHandler } from './FormatHandler';\nimport type {\n ContentModelFormatMap,\n FormatApplier,\n FormatAppliers,\n FormatHandlerTypeMap,\n FormatKey,\n FormatParser,\n FormatParsers,\n} from 'roosterjs-content-model-types';\n\ntype FormatHandlers = {\n [Key in FormatKey]: FormatHandler<FormatHandlerTypeMap[Key]>;\n};\n\nconst defaultFormatHandlerMap: FormatHandlers = {\n aria: ariaFormatHandler,\n backgroundColor: backgroundColorFormatHandler,\n bold: boldFormatHandler,\n border: borderFormatHandler,\n borderBox: borderBoxFormatHandler,\n borderColor: borderColorFormatHandler,\n boxShadow: boxShadowFormatHandler,\n dataset: datasetFormatHandler,\n direction: directionFormatHandler,\n display: displayFormatHandler,\n float: floatFormatHandler,\n fontFamily: fontFamilyFormatHandler,\n fontSize: fontSizeFormatHandler,\n entity: entityFormatHandler,\n htmlAlign: htmlAlignFormatHandler,\n id: idFormatHandler,\n imageState: imageStateFormatHandler,\n italic: italicFormatHandler,\n legacyTableBorder: legacyTableBorderFormatHandler,\n letterSpacing: letterSpacingFormatHandler,\n lineHeight: lineHeightFormatHandler,\n link: linkFormatHandler,\n listItemAlign: listItemAlignFormatHandler,\n listItemThread: listItemThreadFormatHandler,\n listLevelThread: listLevelThreadFormatHandler,\n listStyle: listStyleFormatHandler,\n margin: marginFormatHandler,\n padding: paddingFormatHandler,\n role: roleFormatHandler,\n size: sizeFormatHandler,\n strike: strikeFormatHandler,\n superOrSubScript: superOrSubScriptFormatHandler,\n tableLayout: tableLayoutFormatHandler,\n tableSpacing: tableSpacingFormatHandler,\n textAlign: textAlignFormatHandler,\n textColor: textColorFormatHandler,\n textColorOnTableCell: textColorOnTableCellFormatHandler,\n textIndent: textIndentFormatHandler,\n undeletableLink: undeletableLinkFormatHandler,\n underline: underlineFormatHandler,\n verticalAlign: verticalAlignFormatHandler,\n whiteSpace: whiteSpaceFormatHandler,\n wordBreak: wordBreakFormatHandler,\n};\n\nconst styleBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n 'letterSpacing',\n 'fontFamily',\n 'fontSize',\n];\n\nconst elementBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n 'strike',\n 'underline',\n 'superOrSubScript',\n 'italic',\n 'bold',\n];\nconst sharedBlockFormats: (keyof FormatHandlerTypeMap)[] = [\n 'direction',\n 'textAlign',\n 'textIndent',\n 'lineHeight',\n 'whiteSpace',\n];\nconst sharedContainerFormats: (keyof FormatHandlerTypeMap)[] = [\n 'backgroundColor',\n 'margin',\n 'padding',\n 'border',\n];\n\n/**\n * @internal\n */\nexport const defaultFormatKeysPerCategory: {\n [key in keyof ContentModelFormatMap]: (keyof FormatHandlerTypeMap)[];\n} = {\n block: sharedBlockFormats,\n listItemThread: ['listItemThread'],\n listLevelThread: ['listLevelThread'],\n listItemElement: [...sharedBlockFormats, 'listItemAlign', 'margin', 'listStyle'],\n listLevel: ['direction', 'textAlign', 'margin', 'padding', 'listStyle', 'backgroundColor'],\n styleBasedSegment: [...styleBasedSegmentFormats, 'textColor', 'backgroundColor', 'lineHeight'],\n elementBasedSegment: elementBasedSegmentFormats,\n segment: [\n ...styleBasedSegmentFormats,\n ...elementBasedSegmentFormats,\n 'textColor',\n 'backgroundColor',\n 'lineHeight',\n ],\n segmentOnBlock: [...styleBasedSegmentFormats, ...elementBasedSegmentFormats, 'textColor'],\n segmentOnTableCell: [\n ...styleBasedSegmentFormats,\n ...elementBasedSegmentFormats,\n 'textColorOnTableCell',\n ],\n tableCell: [\n 'border',\n 'borderColor',\n 'backgroundColor',\n 'padding',\n 'verticalAlign',\n 'wordBreak',\n 'textColor',\n 'htmlAlign',\n 'size',\n ],\n tableRow: ['backgroundColor'],\n tableColumn: ['size'],\n table: [\n 'aria',\n 'id',\n 'border',\n 'backgroundColor',\n 'display',\n 'htmlAlign',\n 'margin',\n 'size',\n 'tableLayout',\n 'textColor',\n 'direction',\n 'role',\n ],\n tableBorder: ['borderBox', 'tableSpacing', 'legacyTableBorder'],\n tableCellBorder: ['borderBox'],\n image: [\n 'id',\n 'size',\n 'margin',\n 'padding',\n 'borderBox',\n 'border',\n 'boxShadow',\n 'display',\n 'float',\n 'verticalAlign',\n 'imageState',\n ],\n link: [\n 'link',\n 'textColor',\n 'underline',\n 'display',\n 'margin',\n 'padding',\n 'backgroundColor',\n 'border',\n 'size',\n 'textAlign',\n 'undeletableLink',\n ],\n segmentUnderLink: ['textColor'],\n code: ['fontFamily', 'display'],\n dataset: ['dataset'],\n divider: [...sharedBlockFormats, ...sharedContainerFormats, 'display', 'size', 'htmlAlign'],\n container: [...sharedContainerFormats, 'htmlAlign', 'size', 'display', 'id'],\n entity: ['entity'],\n general: ['textColor', 'backgroundColor'], // General model still need to do color transformation in dark mode\n};\n\n/**\n * @internal\n */\nexport const defaultFormatParsers: FormatParsers = getObjectKeys(defaultFormatHandlerMap).reduce(\n (result, key) => {\n result[key] = defaultFormatHandlerMap[key].parse as FormatParser<any>;\n return result;\n },\n <FormatParsers>{}\n);\n\n/**\n * @internal\n */\nexport const defaultFormatAppliers: FormatAppliers = getObjectKeys(defaultFormatHandlerMap).reduce(\n (result, key) => {\n result[key] = defaultFormatHandlerMap[key].apply as FormatApplier<any>;\n return result;\n },\n <FormatAppliers>{}\n);\n"]}
@@ -0,0 +1,6 @@
1
+ import type { DirectionFormat, TextAlignFormat } from 'roosterjs-content-model-types';
2
+ import type { FormatHandler } from '../FormatHandler';
3
+ /**
4
+ * @internal
5
+ */
6
+ export declare const listItemAlignFormatHandler: FormatHandler<TextAlignFormat & DirectionFormat>;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listItemAlignFormatHandler = void 0;
4
+ var dir_1 = require("../utils/dir");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.listItemAlignFormatHandler = {
9
+ parse: function (format, element, context) {
10
+ var _a;
11
+ // For list, we usually use align-self to implement alignment
12
+ if (element.style.alignSelf) {
13
+ format.textAlign = (0, dir_1.calcAlign)(element.style.alignSelf, context.blockFormat.direction);
14
+ }
15
+ else if (element.style.textAlign && ((_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.style.display) !== 'flex') {
16
+ var align = element.style.textAlign;
17
+ // For RTL environment, 'start' and 'end' in textAlign means opposite direction compared to LTR unless parent is using flex display
18
+ if (context.blockFormat.direction === 'rtl' && (align == 'start' || align == 'end')) {
19
+ align = align == 'start' ? 'end' : 'start';
20
+ }
21
+ format.textAlign = (0, dir_1.calcAlign)(align, context.blockFormat.direction);
22
+ }
23
+ },
24
+ apply: function (format, element) {
25
+ if (format.textAlign) {
26
+ var parent_1 = element.parentElement;
27
+ element.style.alignSelf = format.textAlign;
28
+ // For list item we use align-self to implement textAlign rather than text-align
29
+ element.style.removeProperty('text-align');
30
+ if (parent_1) {
31
+ parent_1.style.flexDirection = 'column';
32
+ parent_1.style.display = 'flex';
33
+ }
34
+ }
35
+ },
36
+ };
37
+ //# sourceMappingURL=listItemAlignFormatHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listItemAlignFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/list/listItemAlignFormatHandler.ts"],"names":[],"mappings":";;;AAAA,oCAAyC;AAIzC;;GAEG;AACU,QAAA,0BAA0B,GAAqD;IACxF,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO,EAAE,OAAO;;QAC5B,6DAA6D;QAC7D,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;YACzB,MAAM,CAAC,SAAS,GAAG,IAAA,eAAS,EAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SACxF;aAAM,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,CAAA,MAAA,OAAO,CAAC,aAAa,0CAAE,KAAK,CAAC,OAAO,MAAK,MAAM,EAAE;YACnF,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;YAEpC,mIAAmI;YACnI,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,EAAE;gBACjF,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;aAC9C;YAED,MAAM,CAAC,SAAS,GAAG,IAAA,eAAS,EAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SACtE;IACL,CAAC;IACD,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO;QACnB,IAAI,MAAM,CAAC,SAAS,EAAE;YAClB,IAAM,QAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YAErC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAE3C,gFAAgF;YAChF,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAE3C,IAAI,QAAM,EAAE;gBACR,QAAM,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;gBACtC,QAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;aACjC;SACJ;IACL,CAAC;CACJ,CAAC","sourcesContent":["import { calcAlign } from '../utils/dir';\nimport type { DirectionFormat, TextAlignFormat } from 'roosterjs-content-model-types';\nimport type { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n */\nexport const listItemAlignFormatHandler: FormatHandler<TextAlignFormat & DirectionFormat> = {\n parse: (format, element, context) => {\n // For list, we usually use align-self to implement alignment\n if (element.style.alignSelf) {\n format.textAlign = calcAlign(element.style.alignSelf, context.blockFormat.direction);\n } else if (element.style.textAlign && element.parentElement?.style.display !== 'flex') {\n let align = element.style.textAlign;\n\n // For RTL environment, 'start' and 'end' in textAlign means opposite direction compared to LTR unless parent is using flex display\n if (context.blockFormat.direction === 'rtl' && (align == 'start' || align == 'end')) {\n align = align == 'start' ? 'end' : 'start';\n }\n\n format.textAlign = calcAlign(align, context.blockFormat.direction);\n }\n },\n apply: (format, element) => {\n if (format.textAlign) {\n const parent = element.parentElement;\n\n element.style.alignSelf = format.textAlign;\n\n // For list item we use align-self to implement textAlign rather than text-align\n element.style.removeProperty('text-align');\n\n if (parent) {\n parent.style.flexDirection = 'column';\n parent.style.display = 'flex';\n }\n }\n },\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import type { FormatHandler } from '../FormatHandler';
2
+ import type { LegacyTableBorderFormat } from 'roosterjs-content-model-types';
3
+ /**
4
+ * @internal
5
+ */
6
+ export declare const legacyTableBorderFormatHandler: FormatHandler<LegacyTableBorderFormat>;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.legacyTableBorderFormatHandler = void 0;
4
+ /**
5
+ * @internal
6
+ */
7
+ exports.legacyTableBorderFormatHandler = {
8
+ parse: function (format, element) {
9
+ var border = element.getAttribute('border');
10
+ var cellSpacing = element.getAttribute('cellspacing');
11
+ var cellpadding = element.getAttribute('cellpadding');
12
+ if (border) {
13
+ format.legacyTableBorder = border;
14
+ }
15
+ if (cellSpacing) {
16
+ format.cellSpacing = cellSpacing;
17
+ }
18
+ if (cellpadding) {
19
+ format.cellPadding = cellpadding;
20
+ }
21
+ },
22
+ apply: function (format, element) {
23
+ if (format.legacyTableBorder) {
24
+ element.setAttribute('border', format.legacyTableBorder);
25
+ }
26
+ if (format.cellSpacing) {
27
+ element.setAttribute('cellspacing', format.cellSpacing);
28
+ }
29
+ if (format.cellPadding) {
30
+ element.setAttribute('cellpadding', format.cellPadding);
31
+ }
32
+ },
33
+ };
34
+ //# sourceMappingURL=legacyTableBorderFormatHandler.js.map