roosterjs-content-model-dom 9.54.0 → 9.56.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 (121) hide show
  1. package/lib/domToModel/context/createDomToModelContext.js +3 -0
  2. package/lib/domToModel/context/createDomToModelContext.js.map +1 -1
  3. package/lib/domToModel/context/defaultProcessors.js +2 -0
  4. package/lib/domToModel/context/defaultProcessors.js.map +1 -1
  5. package/lib/domToModel/processors/dataProcessor.d.ts +5 -0
  6. package/lib/domToModel/processors/dataProcessor.js +17 -0
  7. package/lib/domToModel/processors/dataProcessor.js.map +1 -0
  8. package/lib/domToModel/utils/stackFormat.d.ts +1 -0
  9. package/lib/domToModel/utils/stackFormat.js +14 -2
  10. package/lib/domToModel/utils/stackFormat.js.map +1 -1
  11. package/lib/domUtils/event/extractClipboardItems.d.ts +1 -1
  12. package/lib/domUtils/event/extractClipboardItems.js +2 -2
  13. package/lib/domUtils/event/extractClipboardItems.js.map +1 -1
  14. package/lib/domUtils/selection/pruneUnselectedModel.js +8 -5
  15. package/lib/domUtils/selection/pruneUnselectedModel.js.map +1 -1
  16. package/lib/formatHandlers/defaultFormatHandlers.js +3 -0
  17. package/lib/formatHandlers/defaultFormatHandlers.js.map +1 -1
  18. package/lib/formatHandlers/segment/dataValueFormatHandler.d.ts +7 -0
  19. package/lib/formatHandlers/segment/dataValueFormatHandler.js +21 -0
  20. package/lib/formatHandlers/segment/dataValueFormatHandler.js.map +1 -0
  21. package/lib/index.d.ts +2 -1
  22. package/lib/index.js +7 -4
  23. package/lib/index.js.map +1 -1
  24. package/lib/modelApi/common/addDecorators.d.ts +8 -1
  25. package/lib/modelApi/common/addDecorators.js +16 -1
  26. package/lib/modelApi/common/addDecorators.js.map +1 -1
  27. package/lib/modelApi/common/mergeTextSegments.js +5 -1
  28. package/lib/modelApi/common/mergeTextSegments.js.map +1 -1
  29. package/lib/modelApi/common/normalizeSegment.js +33 -2
  30. package/lib/modelApi/common/normalizeSegment.js.map +1 -1
  31. package/lib/modelApi/creators/createText.d.ts +4 -3
  32. package/lib/modelApi/creators/createText.js +6 -2
  33. package/lib/modelApi/creators/createText.js.map +1 -1
  34. package/lib/modelApi/editing/cloneModel.d.ts +6 -0
  35. package/lib/modelApi/editing/cloneModel.js +17 -2
  36. package/lib/modelApi/editing/cloneModel.js.map +1 -1
  37. package/lib/modelToDom/handlers/handleSegmentDecorator.js +9 -1
  38. package/lib/modelToDom/handlers/handleSegmentDecorator.js.map +1 -1
  39. package/lib/modelToDom/optimizers/mergeNode.js +14 -1
  40. package/lib/modelToDom/optimizers/mergeNode.js.map +1 -1
  41. package/lib-amd/domToModel/context/createDomToModelContext.js +3 -0
  42. package/lib-amd/domToModel/context/createDomToModelContext.js.map +1 -1
  43. package/lib-amd/domToModel/context/defaultProcessors.js +2 -1
  44. package/lib-amd/domToModel/context/defaultProcessors.js.map +1 -1
  45. package/lib-amd/domToModel/processors/dataProcessor.d.ts +5 -0
  46. package/lib-amd/domToModel/processors/dataProcessor.js +16 -0
  47. package/lib-amd/domToModel/processors/dataProcessor.js.map +1 -0
  48. package/lib-amd/domToModel/utils/stackFormat.d.ts +1 -0
  49. package/lib-amd/domToModel/utils/stackFormat.js +14 -2
  50. package/lib-amd/domToModel/utils/stackFormat.js.map +1 -1
  51. package/lib-amd/domUtils/event/extractClipboardItems.d.ts +1 -1
  52. package/lib-amd/domUtils/event/extractClipboardItems.js +2 -2
  53. package/lib-amd/domUtils/event/extractClipboardItems.js.map +1 -1
  54. package/lib-amd/domUtils/selection/pruneUnselectedModel.js +8 -5
  55. package/lib-amd/domUtils/selection/pruneUnselectedModel.js.map +1 -1
  56. package/lib-amd/formatHandlers/defaultFormatHandlers.js +3 -1
  57. package/lib-amd/formatHandlers/defaultFormatHandlers.js.map +1 -1
  58. package/lib-amd/formatHandlers/segment/dataValueFormatHandler.d.ts +7 -0
  59. package/lib-amd/formatHandlers/segment/dataValueFormatHandler.js +23 -0
  60. package/lib-amd/formatHandlers/segment/dataValueFormatHandler.js.map +1 -0
  61. package/lib-amd/index.d.ts +2 -1
  62. package/lib-amd/index.js +5 -3
  63. package/lib-amd/index.js.map +1 -1
  64. package/lib-amd/modelApi/common/addDecorators.d.ts +8 -1
  65. package/lib-amd/modelApi/common/addDecorators.js +16 -1
  66. package/lib-amd/modelApi/common/addDecorators.js.map +1 -1
  67. package/lib-amd/modelApi/common/mergeTextSegments.js +5 -1
  68. package/lib-amd/modelApi/common/mergeTextSegments.js.map +1 -1
  69. package/lib-amd/modelApi/common/normalizeSegment.js +33 -2
  70. package/lib-amd/modelApi/common/normalizeSegment.js.map +1 -1
  71. package/lib-amd/modelApi/creators/createText.d.ts +4 -3
  72. package/lib-amd/modelApi/creators/createText.js +6 -2
  73. package/lib-amd/modelApi/creators/createText.js.map +1 -1
  74. package/lib-amd/modelApi/editing/cloneModel.d.ts +6 -0
  75. package/lib-amd/modelApi/editing/cloneModel.js +17 -2
  76. package/lib-amd/modelApi/editing/cloneModel.js.map +1 -1
  77. package/lib-amd/modelToDom/handlers/handleSegmentDecorator.js +9 -1
  78. package/lib-amd/modelToDom/handlers/handleSegmentDecorator.js.map +1 -1
  79. package/lib-amd/modelToDom/optimizers/mergeNode.js +14 -1
  80. package/lib-amd/modelToDom/optimizers/mergeNode.js.map +1 -1
  81. package/lib-mjs/domToModel/context/createDomToModelContext.js +3 -0
  82. package/lib-mjs/domToModel/context/createDomToModelContext.js.map +1 -1
  83. package/lib-mjs/domToModel/context/defaultProcessors.js +2 -0
  84. package/lib-mjs/domToModel/context/defaultProcessors.js.map +1 -1
  85. package/lib-mjs/domToModel/processors/dataProcessor.d.ts +5 -0
  86. package/lib-mjs/domToModel/processors/dataProcessor.js +13 -0
  87. package/lib-mjs/domToModel/processors/dataProcessor.js.map +1 -0
  88. package/lib-mjs/domToModel/utils/stackFormat.d.ts +1 -0
  89. package/lib-mjs/domToModel/utils/stackFormat.js +14 -2
  90. package/lib-mjs/domToModel/utils/stackFormat.js.map +1 -1
  91. package/lib-mjs/domUtils/event/extractClipboardItems.d.ts +1 -1
  92. package/lib-mjs/domUtils/event/extractClipboardItems.js +2 -2
  93. package/lib-mjs/domUtils/event/extractClipboardItems.js.map +1 -1
  94. package/lib-mjs/domUtils/selection/pruneUnselectedModel.js +8 -5
  95. package/lib-mjs/domUtils/selection/pruneUnselectedModel.js.map +1 -1
  96. package/lib-mjs/formatHandlers/defaultFormatHandlers.js +3 -0
  97. package/lib-mjs/formatHandlers/defaultFormatHandlers.js.map +1 -1
  98. package/lib-mjs/formatHandlers/segment/dataValueFormatHandler.d.ts +7 -0
  99. package/lib-mjs/formatHandlers/segment/dataValueFormatHandler.js +18 -0
  100. package/lib-mjs/formatHandlers/segment/dataValueFormatHandler.js.map +1 -0
  101. package/lib-mjs/index.d.ts +2 -1
  102. package/lib-mjs/index.js +2 -1
  103. package/lib-mjs/index.js.map +1 -1
  104. package/lib-mjs/modelApi/common/addDecorators.d.ts +8 -1
  105. package/lib-mjs/modelApi/common/addDecorators.js +14 -0
  106. package/lib-mjs/modelApi/common/addDecorators.js.map +1 -1
  107. package/lib-mjs/modelApi/common/mergeTextSegments.js +5 -1
  108. package/lib-mjs/modelApi/common/mergeTextSegments.js.map +1 -1
  109. package/lib-mjs/modelApi/common/normalizeSegment.js +33 -2
  110. package/lib-mjs/modelApi/common/normalizeSegment.js.map +1 -1
  111. package/lib-mjs/modelApi/creators/createText.d.ts +4 -3
  112. package/lib-mjs/modelApi/creators/createText.js +7 -3
  113. package/lib-mjs/modelApi/creators/createText.js.map +1 -1
  114. package/lib-mjs/modelApi/editing/cloneModel.d.ts +6 -0
  115. package/lib-mjs/modelApi/editing/cloneModel.js +15 -1
  116. package/lib-mjs/modelApi/editing/cloneModel.js.map +1 -1
  117. package/lib-mjs/modelToDom/handlers/handleSegmentDecorator.js +9 -1
  118. package/lib-mjs/modelToDom/handlers/handleSegmentDecorator.js.map +1 -1
  119. package/lib-mjs/modelToDom/optimizers/mergeNode.js +14 -1
  120. package/lib-mjs/modelToDom/optimizers/mergeNode.js.map +1 -1
  121. package/package.json +2 -2
@@ -50,6 +50,9 @@ function createDomToModelDecoratorContext() {
50
50
  code: {
51
51
  format: {},
52
52
  },
53
+ data: {
54
+ format: {},
55
+ },
53
56
  blockDecorator: {
54
57
  format: {},
55
58
  tagName: '',
@@ -1 +1 @@
1
- {"version":3,"file":"createDomToModelContext.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/context/createDomToModelContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { defaultProcessorMap } from './defaultProcessors';\nimport { getObjectKeys } from '../../domUtils/getObjectKeys';\nimport {\n defaultFormatKeysPerCategory,\n defaultFormatParsers,\n} from '../../formatHandlers/defaultFormatHandlers';\nimport type {\n ContentModelBlockFormat,\n DomToModelContext,\n DomToModelDecoratorContext,\n DomToModelFormatContext,\n DomToModelOption,\n DomToModelSelectionContext,\n DomToModelSettings,\n EditorContext,\n FormatParser,\n FormatParsers,\n FormatParsersPerCategory,\n TextFormatParser,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create context object for DOM to Content Model conversion\n * @param editorContext Context of editor\n * @param options Option array to customize the DOM to Model conversion behavior\n */\nexport function createDomToModelContext(\n editorContext?: EditorContext,\n ...options: (DomToModelOption | undefined)[]\n): DomToModelContext {\n return createDomToModelContextWithConfig(createDomToModelConfig(options), editorContext);\n}\n\n/**\n * Create context object for DOM to Content Model conversion with an existing configure\n * @param config A full config object to define how to convert DOM tree to Content Model\n * @param editorContext Context of editor\n */\nexport function createDomToModelContextWithConfig(\n config: DomToModelSettings,\n editorContext?: EditorContext\n): DomToModelContext {\n return Object.assign(\n {},\n editorContext,\n createDomToModelSelectionContext(),\n createDomToModelFormatContext(editorContext?.isRootRtl),\n createDomToModelDecoratorContext(),\n config\n );\n}\n\nfunction createDomToModelSelectionContext(): DomToModelSelectionContext {\n return { isInSelection: false };\n}\n\nfunction createDomToModelFormatContext(isRootRtl?: boolean): DomToModelFormatContext {\n const blockFormat: ContentModelBlockFormat = isRootRtl ? { direction: 'rtl' } : {};\n\n return {\n blockFormat,\n segmentFormat: {},\n\n listFormat: {\n levels: [],\n threadItemCounts: [],\n },\n };\n}\n\nfunction createDomToModelDecoratorContext(): DomToModelDecoratorContext {\n return {\n link: {\n format: {},\n dataset: {},\n },\n code: {\n format: {},\n },\n blockDecorator: {\n format: {},\n tagName: '',\n },\n };\n}\n\n/**\n * Create Dom to Content Model Config object\n * @param options All customizations of content model creation\n */\nexport function createDomToModelConfig(\n options: (DomToModelOption | undefined)[]\n): DomToModelSettings {\n return {\n elementProcessors: Object.assign(\n {},\n defaultProcessorMap,\n ...options.map(x => x?.processorOverride)\n ),\n formatParsers: buildFormatParsers(\n options.map(x => x?.formatParserOverride),\n options.map(x => x?.additionalFormatParsers)\n ),\n defaultElementProcessors: defaultProcessorMap,\n defaultFormatParsers,\n processNonVisibleElements: options.some(x => !!x?.processNonVisibleElements),\n };\n}\n\n/**\n * @internal Export for test only\n * Build format parsers used by DOM to Content Model conversion\n * @param override\n * @param additionalParsersArray\n * @returns\n */\nexport function buildFormatParsers(\n overrides: (Partial<FormatParsers> | undefined)[] = [],\n additionalParsersArray: (Partial<FormatParsersPerCategory> | undefined)[] = []\n): FormatParsersPerCategory {\n const combinedOverrides = Object.assign({}, ...overrides);\n\n const result = getObjectKeys(defaultFormatKeysPerCategory).reduce(\n (result, key) => {\n const value = defaultFormatKeysPerCategory[key]\n .map(\n formatKey =>\n (combinedOverrides[formatKey] === undefined\n ? defaultFormatParsers[formatKey]\n : combinedOverrides[formatKey]) as FormatParser<any>\n )\n .concat(\n ...additionalParsersArray.map(\n parsers => (parsers?.[key] ?? []) as FormatParser<any>[]\n )\n );\n\n result[key] = value;\n\n return result;\n },\n {\n text: [] as TextFormatParser[],\n } as FormatParsersPerCategory\n );\n\n additionalParsersArray.forEach(parsers => {\n if (parsers?.text) {\n result.text = result.text.concat(parsers.text);\n }\n });\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"createDomToModelContext.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/context/createDomToModelContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { defaultProcessorMap } from './defaultProcessors';\nimport { getObjectKeys } from '../../domUtils/getObjectKeys';\nimport {\n defaultFormatKeysPerCategory,\n defaultFormatParsers,\n} from '../../formatHandlers/defaultFormatHandlers';\nimport type {\n ContentModelBlockFormat,\n DomToModelContext,\n DomToModelDecoratorContext,\n DomToModelFormatContext,\n DomToModelOption,\n DomToModelSelectionContext,\n DomToModelSettings,\n EditorContext,\n FormatParser,\n FormatParsers,\n FormatParsersPerCategory,\n TextFormatParser,\n} from 'roosterjs-content-model-types';\n\n/**\n * Create context object for DOM to Content Model conversion\n * @param editorContext Context of editor\n * @param options Option array to customize the DOM to Model conversion behavior\n */\nexport function createDomToModelContext(\n editorContext?: EditorContext,\n ...options: (DomToModelOption | undefined)[]\n): DomToModelContext {\n return createDomToModelContextWithConfig(createDomToModelConfig(options), editorContext);\n}\n\n/**\n * Create context object for DOM to Content Model conversion with an existing configure\n * @param config A full config object to define how to convert DOM tree to Content Model\n * @param editorContext Context of editor\n */\nexport function createDomToModelContextWithConfig(\n config: DomToModelSettings,\n editorContext?: EditorContext\n): DomToModelContext {\n return Object.assign(\n {},\n editorContext,\n createDomToModelSelectionContext(),\n createDomToModelFormatContext(editorContext?.isRootRtl),\n createDomToModelDecoratorContext(),\n config\n );\n}\n\nfunction createDomToModelSelectionContext(): DomToModelSelectionContext {\n return { isInSelection: false };\n}\n\nfunction createDomToModelFormatContext(isRootRtl?: boolean): DomToModelFormatContext {\n const blockFormat: ContentModelBlockFormat = isRootRtl ? { direction: 'rtl' } : {};\n\n return {\n blockFormat,\n segmentFormat: {},\n\n listFormat: {\n levels: [],\n threadItemCounts: [],\n },\n };\n}\n\nfunction createDomToModelDecoratorContext(): DomToModelDecoratorContext {\n return {\n link: {\n format: {},\n dataset: {},\n },\n code: {\n format: {},\n },\n data: {\n format: {},\n },\n blockDecorator: {\n format: {},\n tagName: '',\n },\n };\n}\n\n/**\n * Create Dom to Content Model Config object\n * @param options All customizations of content model creation\n */\nexport function createDomToModelConfig(\n options: (DomToModelOption | undefined)[]\n): DomToModelSettings {\n return {\n elementProcessors: Object.assign(\n {},\n defaultProcessorMap,\n ...options.map(x => x?.processorOverride)\n ),\n formatParsers: buildFormatParsers(\n options.map(x => x?.formatParserOverride),\n options.map(x => x?.additionalFormatParsers)\n ),\n defaultElementProcessors: defaultProcessorMap,\n defaultFormatParsers,\n processNonVisibleElements: options.some(x => !!x?.processNonVisibleElements),\n };\n}\n\n/**\n * @internal Export for test only\n * Build format parsers used by DOM to Content Model conversion\n * @param override\n * @param additionalParsersArray\n * @returns\n */\nexport function buildFormatParsers(\n overrides: (Partial<FormatParsers> | undefined)[] = [],\n additionalParsersArray: (Partial<FormatParsersPerCategory> | undefined)[] = []\n): FormatParsersPerCategory {\n const combinedOverrides = Object.assign({}, ...overrides);\n\n const result = getObjectKeys(defaultFormatKeysPerCategory).reduce(\n (result, key) => {\n const value = defaultFormatKeysPerCategory[key]\n .map(\n formatKey =>\n (combinedOverrides[formatKey] === undefined\n ? defaultFormatParsers[formatKey]\n : combinedOverrides[formatKey]) as FormatParser<any>\n )\n .concat(\n ...additionalParsersArray.map(\n parsers => (parsers?.[key] ?? []) as FormatParser<any>[]\n )\n );\n\n result[key] = value;\n\n return result;\n },\n {\n text: [] as TextFormatParser[],\n } as FormatParsersPerCategory\n );\n\n additionalParsersArray.forEach(parsers => {\n if (parsers?.text) {\n result.text = result.text.concat(parsers.text);\n }\n });\n\n return result;\n}\n"]}
@@ -4,6 +4,7 @@ exports.defaultProcessorMap = void 0;
4
4
  var brProcessor_1 = require("../processors/brProcessor");
5
5
  var childProcessor_1 = require("../processors/childProcessor");
6
6
  var codeProcessor_1 = require("../processors/codeProcessor");
7
+ var dataProcessor_1 = require("../processors/dataProcessor");
7
8
  var delimiterProcessor_1 = require("../processors/delimiterProcessor");
8
9
  var elementProcessor_1 = require("../processors/elementProcessor");
9
10
  var entityProcessor_1 = require("../processors/entityProcessor");
@@ -30,6 +31,7 @@ exports.defaultProcessorMap = {
30
31
  blockquote: knownElementProcessor_1.knownElementProcessor,
31
32
  br: brProcessor_1.brProcessor,
32
33
  code: codeProcessor_1.codeProcessor,
34
+ data: dataProcessor_1.dataProcessor,
33
35
  dd: formatContainerProcessor_1.formatContainerProcessor,
34
36
  del: knownElementProcessor_1.knownElementProcessor,
35
37
  div: knownElementProcessor_1.knownElementProcessor,
@@ -1 +1 @@
1
- {"version":3,"file":"defaultProcessors.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AACxD,+DAA8D;AAC9D,6DAA4D;AAC5D,uEAAsE;AACtE,mEAAkE;AAClE,iEAAgE;AAChE,6DAA4D;AAC5D,mFAAkF;AAClF,mEAAkE;AAClE,mEAAkE;AAClE,yDAAwD;AACxD,+DAA8D;AAC9D,6EAA4E;AAC5E,6DAA4D;AAC5D,qEAAoE;AACpE,6DAA4D;AAC5D,uDAAsD;AACtD,+DAA8D;AAC9D,6DAA4D;AAC5D,uFAAsF;AAGtF;;GAEG;AACU,QAAA,mBAAmB,GAAwB;IACpD,CAAC,EAAE,6BAAa;IAChB,CAAC,EAAE,6CAAqB;IACxB,UAAU,EAAE,6CAAqB;IACjC,EAAE,EAAE,yBAAW;IACf,IAAI,EAAE,6BAAa;IACnB,EAAE,EAAE,mDAAwB;IAC5B,GAAG,EAAE,6CAAqB;IAC1B,GAAG,EAAE,6CAAqB;IAC1B,EAAE,EAAE,mDAAwB;IAC5B,EAAE,EAAE,mDAAwB;IAC5B,EAAE,EAAE,6CAAqB;IACzB,IAAI,EAAE,6BAAa;IACnB,CAAC,EAAE,6CAAqB;IACxB,GAAG,EAAE,+BAAc;IACnB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,yBAAW;IACf,EAAE,EAAE,qCAAiB;IACrB,EAAE,EAAE,6BAAa;IACjB,CAAC,EAAE,uBAAU;IACb,GAAG,EAAE,mDAAwB;IAC7B,CAAC,EAAE,6CAAqB;IACxB,OAAO,EAAE,6CAAqB;IAC9B,IAAI,EAAE,6CAAqB;IAC3B,MAAM,EAAE,6CAAqB;IAC7B,MAAM,EAAE,6CAAqB;IAC7B,GAAG,EAAE,6CAAqB;IAC1B,GAAG,EAAE,6CAAqB;IAC1B,KAAK,EAAE,+BAAc;IACrB,CAAC,EAAE,6CAAqB;IACxB,EAAE,EAAE,6BAAa;IAEjB,GAAG,EAAE,mCAAgB;IACrB,OAAO,EAAE,6BAAa;IACtB,iBAAiB,EAAE,uDAA0B;IAC7C,OAAO,EAAE,mCAAgB;IACzB,MAAM,EAAE,iCAAe;IACvB,KAAK,EAAE,+BAAc;IACrB,SAAS,EAAE,uCAAkB;CAChC,CAAC","sourcesContent":["import { brProcessor } from '../processors/brProcessor';\nimport { childProcessor } from '../processors/childProcessor';\nimport { codeProcessor } from '../processors/codeProcessor';\nimport { delimiterProcessor } from '../processors/delimiterProcessor';\nimport { elementProcessor } from '../processors/elementProcessor';\nimport { entityProcessor } from '../processors/entityProcessor';\nimport { fontProcessor } from '../processors/fontProcessor';\nimport { formatContainerProcessor } from '../processors/formatContainerProcessor';\nimport { generalProcessor } from '../processors/generalProcessor';\nimport { headingProcessor } from '../processors/headingProcessor';\nimport { hrProcessor } from '../processors/hrProcessor';\nimport { imageProcessor } from '../processors/imageProcessor';\nimport { knownElementProcessor } from '../processors/knownElementProcessor';\nimport { linkProcessor } from '../processors/linkProcessor';\nimport { listItemProcessor } from '../processors/listItemProcessor';\nimport { listProcessor } from '../processors/listProcessor';\nimport { pProcessor } from '../processors/pProcessor';\nimport { tableProcessor } from '../processors/tableProcessor';\nimport { textProcessor } from '../processors/textProcessor';\nimport { textWithSelectionProcessor } from '../processors/textWithSelectionProcessor';\nimport type { ElementProcessorMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const defaultProcessorMap: ElementProcessorMap = {\n a: linkProcessor,\n b: knownElementProcessor,\n blockquote: knownElementProcessor,\n br: brProcessor,\n code: codeProcessor,\n dd: formatContainerProcessor,\n del: knownElementProcessor,\n div: knownElementProcessor,\n dl: formatContainerProcessor,\n dt: formatContainerProcessor,\n em: knownElementProcessor,\n font: fontProcessor,\n i: knownElementProcessor,\n img: imageProcessor,\n h1: headingProcessor,\n h2: headingProcessor,\n h3: headingProcessor,\n h4: headingProcessor,\n h5: headingProcessor,\n h6: headingProcessor,\n hr: hrProcessor,\n li: listItemProcessor,\n ol: listProcessor,\n p: pProcessor,\n pre: formatContainerProcessor,\n s: knownElementProcessor,\n section: knownElementProcessor,\n span: knownElementProcessor,\n strike: knownElementProcessor,\n strong: knownElementProcessor,\n sub: knownElementProcessor,\n sup: knownElementProcessor,\n table: tableProcessor,\n u: knownElementProcessor,\n ul: listProcessor,\n\n '*': generalProcessor,\n '#text': textProcessor,\n textWithSelection: textWithSelectionProcessor,\n element: elementProcessor,\n entity: entityProcessor,\n child: childProcessor,\n delimiter: delimiterProcessor,\n};\n"]}
1
+ {"version":3,"file":"defaultProcessors.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/context/defaultProcessors.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AACxD,+DAA8D;AAC9D,6DAA4D;AAC5D,6DAA4D;AAC5D,uEAAsE;AACtE,mEAAkE;AAClE,iEAAgE;AAChE,6DAA4D;AAC5D,mFAAkF;AAClF,mEAAkE;AAClE,mEAAkE;AAClE,yDAAwD;AACxD,+DAA8D;AAC9D,6EAA4E;AAC5E,6DAA4D;AAC5D,qEAAoE;AACpE,6DAA4D;AAC5D,uDAAsD;AACtD,+DAA8D;AAC9D,6DAA4D;AAC5D,uFAAsF;AAGtF;;GAEG;AACU,QAAA,mBAAmB,GAAwB;IACpD,CAAC,EAAE,6BAAa;IAChB,CAAC,EAAE,6CAAqB;IACxB,UAAU,EAAE,6CAAqB;IACjC,EAAE,EAAE,yBAAW;IACf,IAAI,EAAE,6BAAa;IACnB,IAAI,EAAE,6BAAa;IACnB,EAAE,EAAE,mDAAwB;IAC5B,GAAG,EAAE,6CAAqB;IAC1B,GAAG,EAAE,6CAAqB;IAC1B,EAAE,EAAE,mDAAwB;IAC5B,EAAE,EAAE,mDAAwB;IAC5B,EAAE,EAAE,6CAAqB;IACzB,IAAI,EAAE,6BAAa;IACnB,CAAC,EAAE,6CAAqB;IACxB,GAAG,EAAE,+BAAc;IACnB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,mCAAgB;IACpB,EAAE,EAAE,yBAAW;IACf,EAAE,EAAE,qCAAiB;IACrB,EAAE,EAAE,6BAAa;IACjB,CAAC,EAAE,uBAAU;IACb,GAAG,EAAE,mDAAwB;IAC7B,CAAC,EAAE,6CAAqB;IACxB,OAAO,EAAE,6CAAqB;IAC9B,IAAI,EAAE,6CAAqB;IAC3B,MAAM,EAAE,6CAAqB;IAC7B,MAAM,EAAE,6CAAqB;IAC7B,GAAG,EAAE,6CAAqB;IAC1B,GAAG,EAAE,6CAAqB;IAC1B,KAAK,EAAE,+BAAc;IACrB,CAAC,EAAE,6CAAqB;IACxB,EAAE,EAAE,6BAAa;IAEjB,GAAG,EAAE,mCAAgB;IACrB,OAAO,EAAE,6BAAa;IACtB,iBAAiB,EAAE,uDAA0B;IAC7C,OAAO,EAAE,mCAAgB;IACzB,MAAM,EAAE,iCAAe;IACvB,KAAK,EAAE,+BAAc;IACrB,SAAS,EAAE,uCAAkB;CAChC,CAAC","sourcesContent":["import { brProcessor } from '../processors/brProcessor';\nimport { childProcessor } from '../processors/childProcessor';\nimport { codeProcessor } from '../processors/codeProcessor';\nimport { dataProcessor } from '../processors/dataProcessor';\nimport { delimiterProcessor } from '../processors/delimiterProcessor';\nimport { elementProcessor } from '../processors/elementProcessor';\nimport { entityProcessor } from '../processors/entityProcessor';\nimport { fontProcessor } from '../processors/fontProcessor';\nimport { formatContainerProcessor } from '../processors/formatContainerProcessor';\nimport { generalProcessor } from '../processors/generalProcessor';\nimport { headingProcessor } from '../processors/headingProcessor';\nimport { hrProcessor } from '../processors/hrProcessor';\nimport { imageProcessor } from '../processors/imageProcessor';\nimport { knownElementProcessor } from '../processors/knownElementProcessor';\nimport { linkProcessor } from '../processors/linkProcessor';\nimport { listItemProcessor } from '../processors/listItemProcessor';\nimport { listProcessor } from '../processors/listProcessor';\nimport { pProcessor } from '../processors/pProcessor';\nimport { tableProcessor } from '../processors/tableProcessor';\nimport { textProcessor } from '../processors/textProcessor';\nimport { textWithSelectionProcessor } from '../processors/textWithSelectionProcessor';\nimport type { ElementProcessorMap } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const defaultProcessorMap: ElementProcessorMap = {\n a: linkProcessor,\n b: knownElementProcessor,\n blockquote: knownElementProcessor,\n br: brProcessor,\n code: codeProcessor,\n data: dataProcessor,\n dd: formatContainerProcessor,\n del: knownElementProcessor,\n div: knownElementProcessor,\n dl: formatContainerProcessor,\n dt: formatContainerProcessor,\n em: knownElementProcessor,\n font: fontProcessor,\n i: knownElementProcessor,\n img: imageProcessor,\n h1: headingProcessor,\n h2: headingProcessor,\n h3: headingProcessor,\n h4: headingProcessor,\n h5: headingProcessor,\n h6: headingProcessor,\n hr: hrProcessor,\n li: listItemProcessor,\n ol: listProcessor,\n p: pProcessor,\n pre: formatContainerProcessor,\n s: knownElementProcessor,\n section: knownElementProcessor,\n span: knownElementProcessor,\n strike: knownElementProcessor,\n strong: knownElementProcessor,\n sub: knownElementProcessor,\n sup: knownElementProcessor,\n table: tableProcessor,\n u: knownElementProcessor,\n ul: listProcessor,\n\n '*': generalProcessor,\n '#text': textProcessor,\n textWithSelection: textWithSelectionProcessor,\n element: elementProcessor,\n entity: entityProcessor,\n child: childProcessor,\n delimiter: delimiterProcessor,\n};\n"]}
@@ -0,0 +1,5 @@
1
+ import type { ElementProcessor } from 'roosterjs-content-model-types';
2
+ /**
3
+ * @internal
4
+ */
5
+ export declare const dataProcessor: ElementProcessor<HTMLDataElement>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataProcessor = void 0;
4
+ var knownElementProcessor_1 = require("./knownElementProcessor");
5
+ var parseFormat_1 = require("../utils/parseFormat");
6
+ var stackFormat_1 = require("../utils/stackFormat");
7
+ /**
8
+ * @internal
9
+ */
10
+ var dataProcessor = function (group, element, context) {
11
+ (0, stackFormat_1.stackFormat)(context, { data: 'empty' }, function () {
12
+ (0, parseFormat_1.parseFormat)(element, context.formatParsers.data, context.data.format, context);
13
+ (0, knownElementProcessor_1.knownElementProcessor)(group, element, context);
14
+ });
15
+ };
16
+ exports.dataProcessor = dataProcessor;
17
+ //# sourceMappingURL=dataProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataProcessor.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/processors/dataProcessor.ts"],"names":[],"mappings":";;;AAAA,iEAAgE;AAChE,oDAAmD;AACnD,oDAAmD;AAGnD;;GAEG;AACI,IAAM,aAAa,GAAsC,UAAC,KAAK,EAAE,OAAO,EAAE,OAAO;IACpF,IAAA,yBAAW,EAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACpC,IAAA,yBAAW,EAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE/E,IAAA,6CAAqB,EAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB","sourcesContent":["import { knownElementProcessor } from './knownElementProcessor';\nimport { parseFormat } from '../utils/parseFormat';\nimport { stackFormat } from '../utils/stackFormat';\nimport type { ElementProcessor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const dataProcessor: ElementProcessor<HTMLDataElement> = (group, element, context) => {\n stackFormat(context, { data: 'empty' }, () => {\n parseFormat(element, context.formatParsers.data, context.data.format, context);\n\n knownElementProcessor(group, element, context);\n });\n};\n"]}
@@ -8,6 +8,7 @@ export interface StackFormatOptions {
8
8
  blockDecorator?: 'empty';
9
9
  link?: 'linkDefault' | 'cloneFormat' | 'empty';
10
10
  code?: 'codeDefault' | 'empty';
11
+ data?: 'empty';
11
12
  }
12
13
  /**
13
14
  * @internal
@@ -23,13 +23,14 @@ var SkippedStylesForTable = [
23
23
  * @internal
24
24
  */
25
25
  function stackFormat(context, options, callback) {
26
- var segmentFormat = context.segmentFormat, blockFormat = context.blockFormat, linkFormat = context.link, codeFormat = context.code, decoratorFormat = context.blockDecorator;
27
- var segment = options.segment, paragraph = options.paragraph, link = options.link, code = options.code, blockDecorator = options.blockDecorator;
26
+ var segmentFormat = context.segmentFormat, blockFormat = context.blockFormat, linkFormat = context.link, codeFormat = context.code, dataFormat = context.data, decoratorFormat = context.blockDecorator;
27
+ var segment = options.segment, paragraph = options.paragraph, link = options.link, code = options.code, data = options.data, blockDecorator = options.blockDecorator;
28
28
  try {
29
29
  context.segmentFormat = stackFormatInternal(segmentFormat, segment);
30
30
  context.blockFormat = stackFormatInternal(blockFormat, paragraph);
31
31
  context.link = stackLinkInternal(linkFormat, link);
32
32
  context.code = stackCodeInternal(codeFormat, code);
33
+ context.data = stackDataInternal(dataFormat, data);
33
34
  context.blockDecorator = stackDecoratorInternal(decoratorFormat, blockDecorator);
34
35
  callback();
35
36
  }
@@ -38,6 +39,7 @@ function stackFormat(context, options, callback) {
38
39
  context.blockFormat = blockFormat;
39
40
  context.link = linkFormat;
40
41
  context.code = codeFormat;
42
+ context.data = dataFormat;
41
43
  context.blockDecorator = decoratorFormat;
42
44
  }
43
45
  }
@@ -80,6 +82,16 @@ function stackCodeInternal(codeFormat, code) {
80
82
  return codeFormat;
81
83
  }
82
84
  }
85
+ function stackDataInternal(dataFormat, data) {
86
+ switch (data) {
87
+ case 'empty':
88
+ return {
89
+ format: {},
90
+ };
91
+ default:
92
+ return dataFormat;
93
+ }
94
+ }
83
95
  function stackDecoratorInternal(format, decorator) {
84
96
  switch (decorator) {
85
97
  case 'empty':
@@ -1 +1 @@
1
- {"version":3,"file":"stackFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts"],"names":[],"mappings":"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","sourcesContent":["import { getObjectKeys } from '../../domUtils/getObjectKeys';\nimport type {\n ContentModelBlockFormat,\n ContentModelCode,\n ContentModelFormatBase,\n ContentModelLink,\n ContentModelParagraphDecorator,\n ContentModelSegmentFormat,\n DomToModelContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface StackFormatOptions {\n segment?: 'shallowClone' | 'shallowCloneForBlock' | 'empty';\n paragraph?: 'shallowClone' | 'shallowCloneForGroup' | 'empty';\n blockDecorator?: 'empty';\n link?: 'linkDefault' | 'cloneFormat' | 'empty';\n code?: 'codeDefault' | 'empty';\n}\n\n// Some styles, such as background color, won't be inherited by block element if it was originally\n// declared from an inline element. So we need to skip them.\n// e.g.\n// <span style=\"background-color: red\">\n// line 1 <---------------------------- in red here\n// <div>line 2</div> <---------------------- not in red here\n// </span>\nconst SkippedStylesForBlockOnSegmentOnSegment: (keyof ContentModelSegmentFormat)[] = [\n 'backgroundColor',\n];\nconst SkippedStylesForTable: (keyof ContentModelBlockFormat)[] = [\n 'marginLeft',\n 'marginRight',\n 'paddingLeft',\n 'paddingRight',\n];\n\n/**\n * @internal\n */\nexport function stackFormat(\n context: DomToModelContext,\n options: StackFormatOptions,\n callback: () => void\n) {\n const {\n segmentFormat,\n blockFormat,\n link: linkFormat,\n code: codeFormat,\n blockDecorator: decoratorFormat,\n } = context;\n const { segment, paragraph, link, code, blockDecorator } = options;\n\n try {\n context.segmentFormat = stackFormatInternal(segmentFormat, segment);\n context.blockFormat = stackFormatInternal(blockFormat, paragraph);\n context.link = stackLinkInternal(linkFormat, link);\n context.code = stackCodeInternal(codeFormat, code);\n context.blockDecorator = stackDecoratorInternal(decoratorFormat, blockDecorator);\n\n callback();\n } finally {\n context.segmentFormat = segmentFormat;\n context.blockFormat = blockFormat;\n context.link = linkFormat;\n context.code = codeFormat;\n context.blockDecorator = decoratorFormat;\n }\n}\n\nfunction stackLinkInternal(\n linkFormat: ContentModelLink,\n link?: 'linkDefault' | 'cloneFormat' | 'empty'\n) {\n switch (link) {\n case 'linkDefault':\n return {\n format: {\n underline: true,\n },\n dataset: {},\n };\n\n case 'empty':\n return {\n format: {},\n dataset: {},\n };\n\n case 'cloneFormat':\n default:\n return {\n dataset: linkFormat.dataset,\n format: { ...linkFormat.format },\n };\n }\n}\n\nfunction stackCodeInternal(codeFormat: ContentModelCode, code?: 'codeDefault' | 'empty') {\n switch (code) {\n case 'codeDefault':\n return {\n format: {\n fontFamily: 'monospace',\n },\n };\n case 'empty':\n return {\n format: {},\n };\n default:\n return codeFormat;\n }\n}\n\nfunction stackDecoratorInternal(\n format: ContentModelParagraphDecorator,\n decorator?: 'decoratorDefault' | 'empty'\n) {\n switch (decorator) {\n case 'empty':\n return {\n format: {},\n tagName: '',\n };\n default:\n return format;\n }\n}\n\nfunction stackFormatInternal<T extends ContentModelFormatBase>(\n format: T,\n processType?: 'shallowClone' | 'shallowCloneForBlock' | 'shallowCloneForGroup' | 'empty'\n): T | {} {\n switch (processType) {\n case 'empty':\n return {};\n\n case undefined:\n return format;\n\n default:\n const result = { ...format };\n\n getObjectKeys(format).forEach(key => {\n if (\n (processType == 'shallowCloneForBlock' &&\n SkippedStylesForBlockOnSegmentOnSegment.indexOf(\n key as keyof ContentModelSegmentFormat\n ) >= 0) ||\n (processType == 'shallowCloneForGroup' &&\n SkippedStylesForTable.indexOf(key as keyof ContentModelBlockFormat) >= 0)\n ) {\n delete result[key];\n }\n });\n\n if (processType == 'shallowClone' || processType == 'shallowCloneForGroup') {\n const blockFormat = format as ContentModelBlockFormat;\n\n // For a new paragraph, if current text indent is already applied to previous block in the same level,\n // we need to ignore it according to browser rendering behavior\n if (blockFormat.textIndent) {\n delete (result as ContentModelBlockFormat).isTextIndentApplied;\n blockFormat.isTextIndentApplied = true;\n }\n }\n\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"stackFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domToModel/utils/stackFormat.ts"],"names":[],"mappings":"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","sourcesContent":["import { getObjectKeys } from '../../domUtils/getObjectKeys';\nimport type {\n ContentModelBlockFormat,\n ContentModelCode,\n ContentModelData,\n ContentModelFormatBase,\n ContentModelLink,\n ContentModelParagraphDecorator,\n ContentModelSegmentFormat,\n DomToModelContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface StackFormatOptions {\n segment?: 'shallowClone' | 'shallowCloneForBlock' | 'empty';\n paragraph?: 'shallowClone' | 'shallowCloneForGroup' | 'empty';\n blockDecorator?: 'empty';\n link?: 'linkDefault' | 'cloneFormat' | 'empty';\n code?: 'codeDefault' | 'empty';\n data?: 'empty';\n}\n\n// Some styles, such as background color, won't be inherited by block element if it was originally\n// declared from an inline element. So we need to skip them.\n// e.g.\n// <span style=\"background-color: red\">\n// line 1 <---------------------------- in red here\n// <div>line 2</div> <---------------------- not in red here\n// </span>\nconst SkippedStylesForBlockOnSegmentOnSegment: (keyof ContentModelSegmentFormat)[] = [\n 'backgroundColor',\n];\nconst SkippedStylesForTable: (keyof ContentModelBlockFormat)[] = [\n 'marginLeft',\n 'marginRight',\n 'paddingLeft',\n 'paddingRight',\n];\n\n/**\n * @internal\n */\nexport function stackFormat(\n context: DomToModelContext,\n options: StackFormatOptions,\n callback: () => void\n) {\n const {\n segmentFormat,\n blockFormat,\n link: linkFormat,\n code: codeFormat,\n data: dataFormat,\n blockDecorator: decoratorFormat,\n } = context;\n const { segment, paragraph, link, code, data, blockDecorator } = options;\n\n try {\n context.segmentFormat = stackFormatInternal(segmentFormat, segment);\n context.blockFormat = stackFormatInternal(blockFormat, paragraph);\n context.link = stackLinkInternal(linkFormat, link);\n context.code = stackCodeInternal(codeFormat, code);\n context.data = stackDataInternal(dataFormat, data);\n context.blockDecorator = stackDecoratorInternal(decoratorFormat, blockDecorator);\n\n callback();\n } finally {\n context.segmentFormat = segmentFormat;\n context.blockFormat = blockFormat;\n context.link = linkFormat;\n context.code = codeFormat;\n context.data = dataFormat;\n context.blockDecorator = decoratorFormat;\n }\n}\n\nfunction stackLinkInternal(\n linkFormat: ContentModelLink,\n link?: 'linkDefault' | 'cloneFormat' | 'empty'\n) {\n switch (link) {\n case 'linkDefault':\n return {\n format: {\n underline: true,\n },\n dataset: {},\n };\n\n case 'empty':\n return {\n format: {},\n dataset: {},\n };\n\n case 'cloneFormat':\n default:\n return {\n dataset: linkFormat.dataset,\n format: { ...linkFormat.format },\n };\n }\n}\n\nfunction stackCodeInternal(codeFormat: ContentModelCode, code?: 'codeDefault' | 'empty') {\n switch (code) {\n case 'codeDefault':\n return {\n format: {\n fontFamily: 'monospace',\n },\n };\n case 'empty':\n return {\n format: {},\n };\n default:\n return codeFormat;\n }\n}\n\nfunction stackDataInternal(dataFormat: ContentModelData, data?: 'empty') {\n switch (data) {\n case 'empty':\n return {\n format: {},\n };\n default:\n return dataFormat;\n }\n}\n\nfunction stackDecoratorInternal(\n format: ContentModelParagraphDecorator,\n decorator?: 'decoratorDefault' | 'empty'\n) {\n switch (decorator) {\n case 'empty':\n return {\n format: {},\n tagName: '',\n };\n default:\n return format;\n }\n}\n\nfunction stackFormatInternal<T extends ContentModelFormatBase>(\n format: T,\n processType?: 'shallowClone' | 'shallowCloneForBlock' | 'shallowCloneForGroup' | 'empty'\n): T | {} {\n switch (processType) {\n case 'empty':\n return {};\n\n case undefined:\n return format;\n\n default:\n const result = { ...format };\n\n getObjectKeys(format).forEach(key => {\n if (\n (processType == 'shallowCloneForBlock' &&\n SkippedStylesForBlockOnSegmentOnSegment.indexOf(\n key as keyof ContentModelSegmentFormat\n ) >= 0) ||\n (processType == 'shallowCloneForGroup' &&\n SkippedStylesForTable.indexOf(key as keyof ContentModelBlockFormat) >= 0)\n ) {\n delete result[key];\n }\n });\n\n if (processType == 'shallowClone' || processType == 'shallowCloneForGroup') {\n const blockFormat = format as ContentModelBlockFormat;\n\n // For a new paragraph, if current text indent is already applied to previous block in the same level,\n // we need to ignore it according to browser rendering behavior\n if (blockFormat.textIndent) {\n delete (result as ContentModelBlockFormat).isTextIndentApplied;\n blockFormat.isTextIndentApplied = true;\n }\n }\n\n return result;\n }\n}\n"]}
@@ -5,4 +5,4 @@ import type { ClipboardData } from 'roosterjs-content-model-types';
5
5
  * @param allowedCustomPasteType Allowed custom content type when paste besides text/plain, text/html and images
6
6
  Only text types are supported, and do not add "text/" prefix to the type values
7
7
  */
8
- export declare function extractClipboardItems(items: DataTransferItem[], allowedCustomPasteType?: string[]): Promise<ClipboardData>;
8
+ export declare function extractClipboardItems(items: DataTransferItem[], allowedCustomPasteType?: string[], isPasteNative?: boolean): Promise<ClipboardData>;
@@ -16,7 +16,7 @@ var ContentHandlers = (_a = {},
16
16
  * @param allowedCustomPasteType Allowed custom content type when paste besides text/plain, text/html and images
17
17
  Only text types are supported, and do not add "text/" prefix to the type values
18
18
  */
19
- function extractClipboardItems(items, allowedCustomPasteType) {
19
+ function extractClipboardItems(items, allowedCustomPasteType, isPasteNative) {
20
20
  var data = {
21
21
  types: [],
22
22
  text: '',
@@ -24,7 +24,7 @@ function extractClipboardItems(items, allowedCustomPasteType) {
24
24
  files: [],
25
25
  rawHtml: null,
26
26
  customValues: {},
27
- pasteNativeEvent: true,
27
+ pasteNativeEvent: !!isPasteNative,
28
28
  };
29
29
  return Promise.all((items || []).map(function (item) {
30
30
  var type = item.type;
@@ -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 ['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"]}
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 isPasteNative?: boolean\n): Promise<ClipboardData> {\n const data: ClipboardData = {\n types: [],\n text: '',\n image: null,\n files: [],\n rawHtml: null,\n customValues: {},\n pasteNativeEvent: !!isPasteNative,\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"]}
@@ -12,6 +12,7 @@ function pruneUnselectedModel(model) {
12
12
  exports.pruneUnselectedModel = pruneUnselectedModel;
13
13
  function pruneUnselectedModelInternal(model, isSelectionAfterElement) {
14
14
  var e_1, _a, _b;
15
+ var _c;
15
16
  for (var index = model.blocks.length - 1; index >= 0; index--) {
16
17
  var block = model.blocks[index];
17
18
  switch (block.blockType) {
@@ -35,15 +36,17 @@ function pruneUnselectedModelInternal(model, isSelectionAfterElement) {
35
36
  case 'Paragraph':
36
37
  var newSegments = [];
37
38
  try {
38
- for (var _c = (e_1 = void 0, (0, tslib_1.__values)(block.segments)), _d = _c.next(); !_d.done; _d = _c.next()) {
39
- var segment = _d.value;
39
+ for (var _d = (e_1 = void 0, (0, tslib_1.__values)(block.segments)), _e = _d.next(); !_e.done; _e = _d.next()) {
40
+ var segment = _e.value;
41
+ var isSelectedOrUndeletable = segment.isSelected || ((_c = segment.link) === null || _c === void 0 ? void 0 : _c.format.undeletable);
40
42
  if (segment.segmentType == 'General') {
41
43
  pruneUnselectedModel(segment);
42
- if (segment.blocks.length > 0 || segment.isSelected) {
44
+ if (segment.blocks.length > 0 || isSelectedOrUndeletable) {
43
45
  newSegments.push(segment);
44
46
  }
45
47
  }
46
- else if (segment.isSelected && segment.segmentType != 'SelectionMarker') {
48
+ else if (isSelectedOrUndeletable &&
49
+ segment.segmentType != 'SelectionMarker') {
47
50
  newSegments.push(segment);
48
51
  }
49
52
  }
@@ -51,7 +54,7 @@ function pruneUnselectedModelInternal(model, isSelectionAfterElement) {
51
54
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
52
55
  finally {
53
56
  try {
54
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
57
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
55
58
  }
56
59
  finally { if (e_1) throw e_1.error; }
57
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pruneUnselectedModel.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/selection/pruneUnselectedModel.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ContentModelBlockGroupBase,\n ContentModelBlockGroupType,\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelTableCell,\n ContentModelTableRow,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function pruneUnselectedModel(\n model: ContentModelBlockGroupBase<ContentModelBlockGroupType, HTMLElement>\n) {\n pruneUnselectedModelInternal(model, false /* isSelectionAfterElement */);\n\n unwrap(model);\n}\n\nfunction pruneUnselectedModelInternal(\n model: ContentModelBlockGroupBase<ContentModelBlockGroupType, HTMLElement>,\n isSelectionAfterElement: boolean\n) {\n for (let index = model.blocks.length - 1; index >= 0; index--) {\n const block = model.blocks[index];\n\n switch (block.blockType) {\n case 'BlockGroup':\n pruneUnselectedModelInternal(block, isSelectionAfterElement);\n if (\n block.blockGroupType == 'General'\n ? block.blocks.length == 0 && !block.isSelected\n : block.blocks.length == 0\n ) {\n model.blocks.splice(index, 1);\n }\n break;\n case 'Divider':\n case 'Entity':\n if (!block.isSelected) {\n model.blocks.splice(index, 1);\n } else {\n isSelectionAfterElement = true;\n }\n break;\n case 'Paragraph':\n const newSegments: ContentModelSegment[] = [];\n for (const segment of block.segments) {\n if (segment.segmentType == 'General') {\n pruneUnselectedModel(segment);\n if (segment.blocks.length > 0 || segment.isSelected) {\n newSegments.push(segment);\n }\n } else if (segment.isSelected && segment.segmentType != 'SelectionMarker') {\n newSegments.push(segment);\n }\n }\n block.segments = newSegments;\n if (block.segments.length == 0) {\n model.blocks.splice(index, 1);\n } else {\n isSelectionAfterElement = true;\n }\n break;\n case 'Table':\n const filteredRows: ContentModelTableRow[] = [];\n for (let i = 0; i < block.rows.length; i++) {\n const row = block.rows[i];\n for (let j = 0; j < row.cells.length; j++) {\n const cell = row.cells[j];\n if (!cell.isSelected) {\n pruneUnselectedModelInternal(cell, isSelectionAfterElement);\n } else {\n isSelectionAfterElement = true;\n }\n }\n\n const newCells: ContentModelTableCell[] = [];\n for (let k = 0; k < row.cells.length; k++) {\n const cell = row.cells[k];\n if (cell.isSelected || cell.blocks.length > 0) {\n newCells.push(cell);\n }\n }\n row.cells = newCells;\n\n if (row.cells.length > 0) {\n filteredRows.push(row);\n }\n }\n\n if (\n !isSelectionAfterElement &&\n filteredRows.length == 1 &&\n filteredRows[0].cells.length == 1 &&\n !filteredRows[0].cells[0].isSelected\n ) {\n const cell = filteredRows[0].cells[0];\n model.blocks.splice(index, 1, ...cell.blocks);\n } else if (filteredRows.length == 0) {\n model.blocks.splice(index, 1);\n } else {\n block.rows = filteredRows;\n }\n break;\n }\n }\n return isSelectionAfterElement;\n}\n\nfunction unwrap(model: ContentModelBlockGroupBase<ContentModelBlockGroupType, HTMLElement>) {\n let block = model.blocks[0];\n if (model.blocks.length == 1) {\n while (block.blockType == 'BlockGroup') {\n model.blocks = block.blocks;\n block = model.blocks[0];\n\n if (model.blocks.length > 1) {\n return;\n }\n }\n\n if (block.blockType == 'Paragraph') {\n block.isImplicit = true;\n block.format = {};\n inheritSegmentFormatToChildren(block);\n }\n }\n}\n\nfunction inheritSegmentFormatToChildren(parent: ContentModelParagraph) {\n const value = parent.segmentFormat;\n if (value !== undefined) {\n for (let index = 0; index < parent.segments.length; index++) {\n const segment = parent.segments[index];\n segment.format = {\n ...parent.segmentFormat,\n ...segment.format,\n };\n }\n }\n}\n"]}
1
+ {"version":3,"file":"pruneUnselectedModel.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/selection/pruneUnselectedModel.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ContentModelBlockGroupBase,\n ContentModelBlockGroupType,\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelTableCell,\n ContentModelTableRow,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function pruneUnselectedModel(\n model: ContentModelBlockGroupBase<ContentModelBlockGroupType, HTMLElement>\n) {\n pruneUnselectedModelInternal(model, false /* isSelectionAfterElement */);\n\n unwrap(model);\n}\n\nfunction pruneUnselectedModelInternal(\n model: ContentModelBlockGroupBase<ContentModelBlockGroupType, HTMLElement>,\n isSelectionAfterElement: boolean\n) {\n for (let index = model.blocks.length - 1; index >= 0; index--) {\n const block = model.blocks[index];\n\n switch (block.blockType) {\n case 'BlockGroup':\n pruneUnselectedModelInternal(block, isSelectionAfterElement);\n if (\n block.blockGroupType == 'General'\n ? block.blocks.length == 0 && !block.isSelected\n : block.blocks.length == 0\n ) {\n model.blocks.splice(index, 1);\n }\n break;\n case 'Divider':\n case 'Entity':\n if (!block.isSelected) {\n model.blocks.splice(index, 1);\n } else {\n isSelectionAfterElement = true;\n }\n break;\n case 'Paragraph':\n const newSegments: ContentModelSegment[] = [];\n for (const segment of block.segments) {\n const isSelectedOrUndeletable =\n segment.isSelected || segment.link?.format.undeletable;\n\n if (segment.segmentType == 'General') {\n pruneUnselectedModel(segment);\n if (segment.blocks.length > 0 || isSelectedOrUndeletable) {\n newSegments.push(segment);\n }\n } else if (\n isSelectedOrUndeletable &&\n segment.segmentType != 'SelectionMarker'\n ) {\n newSegments.push(segment);\n }\n }\n block.segments = newSegments;\n if (block.segments.length == 0) {\n model.blocks.splice(index, 1);\n } else {\n isSelectionAfterElement = true;\n }\n break;\n case 'Table':\n const filteredRows: ContentModelTableRow[] = [];\n for (let i = 0; i < block.rows.length; i++) {\n const row = block.rows[i];\n for (let j = 0; j < row.cells.length; j++) {\n const cell = row.cells[j];\n if (!cell.isSelected) {\n pruneUnselectedModelInternal(cell, isSelectionAfterElement);\n } else {\n isSelectionAfterElement = true;\n }\n }\n\n const newCells: ContentModelTableCell[] = [];\n for (let k = 0; k < row.cells.length; k++) {\n const cell = row.cells[k];\n if (cell.isSelected || cell.blocks.length > 0) {\n newCells.push(cell);\n }\n }\n row.cells = newCells;\n\n if (row.cells.length > 0) {\n filteredRows.push(row);\n }\n }\n\n if (\n !isSelectionAfterElement &&\n filteredRows.length == 1 &&\n filteredRows[0].cells.length == 1 &&\n !filteredRows[0].cells[0].isSelected\n ) {\n const cell = filteredRows[0].cells[0];\n model.blocks.splice(index, 1, ...cell.blocks);\n } else if (filteredRows.length == 0) {\n model.blocks.splice(index, 1);\n } else {\n block.rows = filteredRows;\n }\n break;\n }\n }\n return isSelectionAfterElement;\n}\n\nfunction unwrap(model: ContentModelBlockGroupBase<ContentModelBlockGroupType, HTMLElement>) {\n let block = model.blocks[0];\n if (model.blocks.length == 1) {\n while (block.blockType == 'BlockGroup') {\n model.blocks = block.blocks;\n block = model.blocks[0];\n\n if (model.blocks.length > 1) {\n return;\n }\n }\n\n if (block.blockType == 'Paragraph') {\n block.isImplicit = true;\n block.format = {};\n inheritSegmentFormatToChildren(block);\n }\n }\n}\n\nfunction inheritSegmentFormatToChildren(parent: ContentModelParagraph) {\n const value = parent.segmentFormat;\n if (value !== undefined) {\n for (let index = 0; index < parent.segments.length; index++) {\n const segment = parent.segments[index];\n segment.format = {\n ...parent.segmentFormat,\n ...segment.format,\n };\n }\n }\n}\n"]}
@@ -10,6 +10,7 @@ var borderColorFormatHandler_1 = require("./common/borderColorFormatHandler");
10
10
  var borderFormatHandler_1 = require("./common/borderFormatHandler");
11
11
  var boxShadowFormatHandler_1 = require("./common/boxShadowFormatHandler");
12
12
  var datasetFormatHandler_1 = require("./common/datasetFormatHandler");
13
+ var dataValueFormatHandler_1 = require("./segment/dataValueFormatHandler");
13
14
  var directionFormatHandler_1 = require("./block/directionFormatHandler");
14
15
  var displayFormatHandler_1 = require("./block/displayFormatHandler");
15
16
  var entityFormatHandler_1 = require("./entity/entityFormatHandler");
@@ -55,6 +56,7 @@ var defaultFormatHandlerMap = {
55
56
  borderColor: borderColorFormatHandler_1.borderColorFormatHandler,
56
57
  boxShadow: boxShadowFormatHandler_1.boxShadowFormatHandler,
57
58
  dataset: datasetFormatHandler_1.datasetFormatHandler,
59
+ dataValue: dataValueFormatHandler_1.dataValueFormatHandler,
58
60
  direction: directionFormatHandler_1.directionFormatHandler,
59
61
  display: displayFormatHandler_1.displayFormatHandler,
60
62
  float: floatFormatHandler_1.floatFormatHandler,
@@ -196,6 +198,7 @@ exports.defaultFormatKeysPerCategory = {
196
198
  ],
197
199
  segmentUnderLink: ['textColor'],
198
200
  code: ['fontFamily', 'display'],
201
+ data: ['dataValue'],
199
202
  dataset: ['dataset'],
200
203
  divider: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(sharedBlockFormats), false), (0, tslib_1.__read)(sharedContainerFormats), false), ['display', 'size', 'htmlAlign'], false),
201
204
  container: (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(sharedContainerFormats), false), ['htmlAlign', 'size', 'display', 'id'], false),
@@ -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 { 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 sizeNeutralElementBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n 'strike',\n 'underline',\n 'italic',\n 'bold',\n];\n\nconst elementBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n ...sizeNeutralElementBasedSegmentFormats,\n 'superOrSubScript',\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: sizeNeutralElementBasedSegmentFormats,\n superOrSubScript: ['superOrSubScript'],\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"]}
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 { dataValueFormatHandler } from './segment/dataValueFormatHandler';\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 dataValue: dataValueFormatHandler,\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 sizeNeutralElementBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n 'strike',\n 'underline',\n 'italic',\n 'bold',\n];\n\nconst elementBasedSegmentFormats: (keyof FormatHandlerTypeMap)[] = [\n ...sizeNeutralElementBasedSegmentFormats,\n 'superOrSubScript',\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: sizeNeutralElementBasedSegmentFormats,\n superOrSubScript: ['superOrSubScript'],\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 data: ['dataValue'],\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,7 @@
1
+ import type { DataValueFormat } from 'roosterjs-content-model-types';
2
+ import type { FormatHandler } from '../FormatHandler';
3
+ /**
4
+ * @internal
5
+ * Format handler for the "value" attribute of a HTML &lt;data&gt; element
6
+ */
7
+ export declare const dataValueFormatHandler: FormatHandler<DataValueFormat>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataValueFormatHandler = void 0;
4
+ /**
5
+ * @internal
6
+ * Format handler for the "value" attribute of a HTML &lt;data&gt; element
7
+ */
8
+ exports.dataValueFormatHandler = {
9
+ parse: function (format, element) {
10
+ var _a;
11
+ if (element.hasAttribute('value')) {
12
+ format.dataValue = (_a = element.getAttribute('value')) !== null && _a !== void 0 ? _a : '';
13
+ }
14
+ },
15
+ apply: function (format, element) {
16
+ if (format.dataValue != undefined) {
17
+ element.setAttribute('value', format.dataValue);
18
+ }
19
+ },
20
+ };
21
+ //# sourceMappingURL=dataValueFormatHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataValueFormatHandler.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/formatHandlers/segment/dataValueFormatHandler.ts"],"names":[],"mappings":";;;AAGA;;;GAGG;AACU,QAAA,sBAAsB,GAAmC;IAClE,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO;;QACnB,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;YAC/B,MAAM,CAAC,SAAS,GAAG,MAAA,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC;SAC1D;IACL,CAAC;IACD,KAAK,EAAE,UAAC,MAAM,EAAE,OAAO;QACnB,IAAI,MAAM,CAAC,SAAS,IAAI,SAAS,EAAE;YAC/B,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;SACnD;IACL,CAAC;CACJ,CAAC","sourcesContent":["import type { DataValueFormat } from 'roosterjs-content-model-types';\nimport type { FormatHandler } from '../FormatHandler';\n\n/**\n * @internal\n * Format handler for the \"value\" attribute of a HTML &lt;data&gt; element\n */\nexport const dataValueFormatHandler: FormatHandler<DataValueFormat> = {\n parse: (format, element) => {\n if (element.hasAttribute('value')) {\n format.dataValue = element.getAttribute('value') ?? '';\n }\n },\n apply: (format, element) => {\n if (format.dataValue != undefined) {\n element.setAttribute('value', format.dataValue);\n }\n },\n};\n"]}
package/lib/index.d.ts CHANGED
@@ -46,6 +46,7 @@ export { createTableRow } from './modelApi/creators/createTableRow';
46
46
  export { mutateBlock, mutateSegments, mutateSegment } from './modelApi/common/mutate';
47
47
  export { addBlock } from './modelApi/common/addBlock';
48
48
  export { addCode } from './modelApi/common/addDecorators';
49
+ export { addData } from './modelApi/common/addDecorators';
49
50
  export { addLink } from './modelApi/common/addDecorators';
50
51
  export { addTextSegment } from './modelApi/common/addTextSegment';
51
52
  export { normalizeParagraph } from './modelApi/common/normalizeParagraph';
@@ -92,7 +93,7 @@ export { hasSelectionInBlock } from './modelApi/selection/hasSelectionInBlock';
92
93
  export { hasSelectionInSegment } from './modelApi/selection/hasSelectionInSegment';
93
94
  export { hasSelectionInBlockGroup } from './modelApi/selection/hasSelectionInBlockGroup';
94
95
  export { setSelection } from './modelApi/selection/setSelection';
95
- export { cloneModel } from './modelApi/editing/cloneModel';
96
+ export { cloneModel, cloneModelForPaste } from './modelApi/editing/cloneModel';
96
97
  export { mergeModel } from './modelApi/editing/mergeModel';
97
98
  export { deleteSelection } from './modelApi/editing/deleteSelection';
98
99
  export { deleteSegment } from './modelApi/editing/deleteSegment';
package/lib/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createImage = exports.createText = exports.createTableCell = exports.createTable = exports.createSelectionMarker = exports.createParagraph = exports.createFormatContainer = exports.createListItem = exports.createBr = exports.isLinkUndeletable = exports.setLinkUndeletable = exports.scrollRectIntoView = exports.normalizeRect = exports.isWhiteSpacePreserved = exports.reuseCachedElement = exports.findClosestBlockEntityContainer = exports.isBlockEntityContainer = exports.isEntityDelimiter = exports.addDelimiters = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = exports.unwrap = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getSafeIdSelector = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.getMetadata = exports.updateMetadata = exports.buildSelectionMarker = exports.isBlockElement = exports.areSameFormats = exports.parseFormat = exports.getRegularSelectionOffsets = exports.formatContainerProcessor = exports.tableProcessor = exports.entityProcessor = exports.processChildNode = exports.handleRegularSelection = exports.childProcessor = exports.contentModelToText = exports.contentModelToDom = exports.domToContentModel = void 0;
4
- exports.trimModelForSelection = exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = void 0;
5
- exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.getNodePositionFromEvent = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = void 0;
6
- exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = void 0;
4
+ exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addData = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = void 0;
5
+ exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModelForPaste = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.getNodePositionFromEvent = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.trimModelForSelection = void 0;
6
+ exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = void 0;
7
7
  var domToContentModel_1 = require("./domToModel/domToContentModel");
8
8
  Object.defineProperty(exports, "domToContentModel", { enumerable: true, get: function () { return domToContentModel_1.domToContentModel; } });
9
9
  var contentModelToDom_1 = require("./modelToDom/contentModelToDom");
@@ -117,7 +117,9 @@ Object.defineProperty(exports, "addBlock", { enumerable: true, get: function ()
117
117
  var addDecorators_1 = require("./modelApi/common/addDecorators");
118
118
  Object.defineProperty(exports, "addCode", { enumerable: true, get: function () { return addDecorators_1.addCode; } });
119
119
  var addDecorators_2 = require("./modelApi/common/addDecorators");
120
- Object.defineProperty(exports, "addLink", { enumerable: true, get: function () { return addDecorators_2.addLink; } });
120
+ Object.defineProperty(exports, "addData", { enumerable: true, get: function () { return addDecorators_2.addData; } });
121
+ var addDecorators_3 = require("./modelApi/common/addDecorators");
122
+ Object.defineProperty(exports, "addLink", { enumerable: true, get: function () { return addDecorators_3.addLink; } });
121
123
  var addTextSegment_1 = require("./modelApi/common/addTextSegment");
122
124
  Object.defineProperty(exports, "addTextSegment", { enumerable: true, get: function () { return addTextSegment_1.addTextSegment; } });
123
125
  var normalizeParagraph_1 = require("./modelApi/common/normalizeParagraph");
@@ -234,6 +236,7 @@ var setSelection_1 = require("./modelApi/selection/setSelection");
234
236
  Object.defineProperty(exports, "setSelection", { enumerable: true, get: function () { return setSelection_1.setSelection; } });
235
237
  var cloneModel_1 = require("./modelApi/editing/cloneModel");
236
238
  Object.defineProperty(exports, "cloneModel", { enumerable: true, get: function () { return cloneModel_1.cloneModel; } });
239
+ Object.defineProperty(exports, "cloneModelForPaste", { enumerable: true, get: function () { return cloneModel_1.cloneModelForPaste; } });
237
240
  var mergeModel_1 = require("./modelApi/editing/mergeModel");
238
241
  Object.defineProperty(exports, "mergeModel", { enumerable: true, get: function () { return mergeModel_1.mergeModel; } });
239
242
  var deleteSelection_1 = require("./modelApi/editing/deleteSelection");