@payloadcms/richtext-lexical 3.33.0-internal.d1efdd8 → 3.34.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/index.d.ts +1 -0
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +10 -10
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/server/rsc.d.ts +1 -0
- package/dist/exports/server/rsc.d.ts.map +1 -1
- package/dist/exports/server/rsc.js +1 -0
- package/dist/exports/server/rsc.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/types.d.ts +1 -0
- package/dist/features/converters/lexicalToHtml/async/types.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/types.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.js +3 -3
- package/dist/features/converters/lexicalToHtml/shared/findConverterForNode.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/types.d.ts +1 -0
- package/dist/features/converters/lexicalToHtml/sync/types.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/types.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/index.d.ts.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/index.js +3 -3
- package/dist/features/converters/lexicalToJSX/converter/index.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/types.d.ts +1 -0
- package/dist/features/converters/lexicalToJSX/converter/types.d.ts.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/types.js.map +1 -1
- package/dist/features/debug/jsxConverter/client/index.d.ts +2 -0
- package/dist/features/debug/jsxConverter/client/index.d.ts.map +1 -0
- package/dist/features/debug/jsxConverter/client/index.js +11 -0
- package/dist/features/debug/jsxConverter/client/index.js.map +1 -0
- package/dist/features/debug/jsxConverter/client/plugin/index.d.ts +2 -0
- package/dist/features/debug/jsxConverter/client/plugin/index.d.ts.map +1 -0
- package/dist/features/debug/jsxConverter/client/plugin/index.js +52 -0
- package/dist/features/debug/jsxConverter/client/plugin/index.js.map +1 -0
- package/dist/features/debug/jsxConverter/server/index.d.ts +2 -0
- package/dist/features/debug/jsxConverter/server/index.d.ts.map +1 -0
- package/dist/features/debug/jsxConverter/server/index.js +8 -0
- package/dist/features/debug/jsxConverter/server/index.js.map +1 -0
- package/dist/features/upload/server/validate.d.ts.map +1 -1
- package/dist/features/upload/server/validate.js.map +1 -1
- package/dist/field/Diff/converters/link.d.ts +9 -0
- package/dist/field/Diff/converters/link.d.ts.map +1 -0
- package/dist/field/Diff/converters/link.js +48 -0
- package/dist/field/Diff/converters/link.js.map +1 -0
- package/dist/field/Diff/converters/listitem/index.d.ts +5 -0
- package/dist/field/Diff/converters/listitem/index.d.ts.map +1 -0
- package/dist/field/Diff/converters/listitem/index.js +65 -0
- package/dist/field/Diff/converters/listitem/index.js.map +1 -0
- package/dist/field/Diff/converters/relationship/index.d.ts +10 -0
- package/dist/field/Diff/converters/relationship/index.d.ts.map +1 -0
- package/dist/field/Diff/converters/relationship/index.js +63 -0
- package/dist/field/Diff/converters/relationship/index.js.map +1 -0
- package/dist/field/Diff/converters/unknown/index.d.ts +10 -0
- package/dist/field/Diff/converters/unknown/index.d.ts.map +1 -0
- package/dist/field/Diff/converters/unknown/index.js +45 -0
- package/dist/field/Diff/converters/unknown/index.js.map +1 -0
- package/dist/field/Diff/converters/upload/index.d.ts +10 -0
- package/dist/field/Diff/converters/upload/index.d.ts.map +1 -0
- package/dist/field/Diff/converters/upload/index.js +76 -0
- package/dist/field/Diff/converters/upload/index.js.map +1 -0
- package/dist/field/Diff/htmlDiff/index.d.ts +63 -0
- package/dist/field/Diff/htmlDiff/index.d.ts.map +1 -0
- package/dist/field/Diff/htmlDiff/index.js +501 -0
- package/dist/field/Diff/htmlDiff/index.js.map +1 -0
- package/dist/field/Diff/index.d.ts +5 -0
- package/dist/field/Diff/index.d.ts.map +1 -0
- package/dist/field/Diff/index.js +81 -0
- package/dist/field/Diff/index.js.map +1 -0
- package/dist/field/bundled.css +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/utilities/generateImportMap.d.ts.map +1 -1
- package/dist/utilities/generateImportMap.js +1 -0
- package/dist/utilities/generateImportMap.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CheckIcon } from '@payloadcms/ui/rsc';
|
|
3
|
+
export const ListItemDiffHTMLConverterAsync = {
|
|
4
|
+
listitem: async ({
|
|
5
|
+
node,
|
|
6
|
+
nodesToHTML,
|
|
7
|
+
parent,
|
|
8
|
+
providedCSSString
|
|
9
|
+
}) => {
|
|
10
|
+
const hasSubLists = node.children.some(child => child.type === 'list');
|
|
11
|
+
const children = (await nodesToHTML({
|
|
12
|
+
nodes: node.children
|
|
13
|
+
})).join('');
|
|
14
|
+
if ('listType' in parent && parent?.listType === 'check') {
|
|
15
|
+
const ReactDOMServer = (await import('react-dom/server')).default;
|
|
16
|
+
const JSX = /*#__PURE__*/_jsx("li", {
|
|
17
|
+
"aria-checked": node.checked ? true : false,
|
|
18
|
+
className: `checkboxItem ${node.checked ? 'checkboxItem--checked' : 'checkboxItem--unchecked'}${hasSubLists ? ' checkboxItem--nested' : ''}`,
|
|
19
|
+
// eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role
|
|
20
|
+
role: "checkbox",
|
|
21
|
+
tabIndex: -1,
|
|
22
|
+
value: node.value,
|
|
23
|
+
children: hasSubLists ?
|
|
24
|
+
// When sublists exist, just render them safely as HTML
|
|
25
|
+
/*#__PURE__*/
|
|
26
|
+
_jsx("div", {
|
|
27
|
+
dangerouslySetInnerHTML: {
|
|
28
|
+
__html: children
|
|
29
|
+
}
|
|
30
|
+
}) :
|
|
31
|
+
// Otherwise, show our custom styled checkbox
|
|
32
|
+
/*#__PURE__*/
|
|
33
|
+
_jsxs("div", {
|
|
34
|
+
className: "checkboxItem__wrapper",
|
|
35
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
36
|
+
className: "checkboxItem__icon",
|
|
37
|
+
"data-checked": node.checked,
|
|
38
|
+
"data-enable-match": "true",
|
|
39
|
+
children: node.checked && /*#__PURE__*/_jsx(CheckIcon, {})
|
|
40
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
41
|
+
className: "checkboxItem__label",
|
|
42
|
+
children: children
|
|
43
|
+
})]
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
const html = ReactDOMServer.renderToString(JSX);
|
|
47
|
+
// Add style="list-style-type: none;${providedCSSString}" to html
|
|
48
|
+
const styleIndex = html.indexOf('class="list-item-checkbox');
|
|
49
|
+
const classIndex = html.indexOf('class="list-item-checkbox', styleIndex);
|
|
50
|
+
const classEndIndex = html.indexOf('"', classIndex + 6);
|
|
51
|
+
const className = html.substring(classIndex, classEndIndex);
|
|
52
|
+
const classNameWithStyle = `${className} style="list-style-type: none;${providedCSSString}"`;
|
|
53
|
+
const htmlWithStyle = html.replace(className, classNameWithStyle);
|
|
54
|
+
return htmlWithStyle;
|
|
55
|
+
} else {
|
|
56
|
+
return `<li
|
|
57
|
+
class="${hasSubLists ? 'nestedListItem' : ''}"
|
|
58
|
+
style="${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}"
|
|
59
|
+
value="${node.value}"
|
|
60
|
+
data-enable-match="true"
|
|
61
|
+
>${children}</li>`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["CheckIcon","ListItemDiffHTMLConverterAsync","listitem","node","nodesToHTML","parent","providedCSSString","hasSubLists","children","some","child","type","nodes","join","listType","ReactDOMServer","default","JSX","_jsx","checked","className","role","tabIndex","value","dangerouslySetInnerHTML","__html","_jsxs","html","renderToString","styleIndex","indexOf","classIndex","classEndIndex","substring","classNameWithStyle","htmlWithStyle","replace"],"sources":["../../../../../src/field/Diff/converters/listitem/index.tsx"],"sourcesContent":["import { CheckIcon } from '@payloadcms/ui/rsc'\n\nimport type { HTMLConvertersAsync } from '../../../../features/converters/lexicalToHtml/async/types.js'\nimport type { SerializedListItemNode } from '../../../../nodeTypes.js'\n\nimport './index.scss'\n\nexport const ListItemDiffHTMLConverterAsync: HTMLConvertersAsync<SerializedListItemNode> = {\n listitem: async ({ node, nodesToHTML, parent, providedCSSString }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n if ('listType' in parent && parent?.listType === 'check') {\n const ReactDOMServer = (await import('react-dom/server')).default\n\n const JSX = (\n <li\n aria-checked={node.checked ? true : false}\n className={`checkboxItem ${node.checked ? 'checkboxItem--checked' : 'checkboxItem--unchecked'}${\n hasSubLists ? ' checkboxItem--nested' : ''\n }`}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n role=\"checkbox\"\n tabIndex={-1}\n value={node.value}\n >\n {hasSubLists ? (\n // When sublists exist, just render them safely as HTML\n <div dangerouslySetInnerHTML={{ __html: children }} />\n ) : (\n // Otherwise, show our custom styled checkbox\n <div className=\"checkboxItem__wrapper\">\n <div\n className=\"checkboxItem__icon\"\n data-checked={node.checked}\n data-enable-match=\"true\"\n >\n {node.checked && <CheckIcon />}\n </div>\n <span className=\"checkboxItem__label\">{children}</span>\n </div>\n )}\n </li>\n )\n\n const html = ReactDOMServer.renderToString(JSX)\n\n // Add style=\"list-style-type: none;${providedCSSString}\" to html\n const styleIndex = html.indexOf('class=\"list-item-checkbox')\n const classIndex = html.indexOf('class=\"list-item-checkbox', styleIndex)\n const classEndIndex = html.indexOf('\"', classIndex + 6)\n const className = html.substring(classIndex, classEndIndex)\n const classNameWithStyle = `${className} style=\"list-style-type: none;${providedCSSString}\"`\n const htmlWithStyle = html.replace(className, classNameWithStyle)\n\n return htmlWithStyle\n } else {\n return `<li\n class=\"${hasSubLists ? 'nestedListItem' : ''}\"\n style=\"${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}\"\n value=\"${node.value}\"\n data-enable-match=\"true\"\n >${children}</li>`\n }\n },\n}\n"],"mappings":";AAAA,SAASA,SAAS,QAAQ;AAO1B,OAAO,MAAMC,8BAAA,GAA8E;EACzFC,QAAA,EAAU,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC,MAAM;IAAEC;EAAiB,CAAE;IAC/D,MAAMC,WAAA,GAAcJ,IAAA,CAAKK,QAAQ,CAACC,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMH,QAAA,GAAW,CACf,MAAMJ,WAAA,CAAY;MAChBQ,KAAA,EAAOT,IAAA,CAAKK;IACd,EAAC,EACDK,IAAI,CAAC;IAEP,IAAI,cAAcR,MAAA,IAAUA,MAAA,EAAQS,QAAA,KAAa,SAAS;MACxD,MAAMC,cAAA,GAAiB,CAAC,MAAM,MAAM,CAAC,mBAAkB,EAAGC,OAAO;MAEjE,MAAMC,GAAA,gBACJC,IAAA,CAAC;QACC,gBAAcf,IAAA,CAAKgB,OAAO,GAAG,OAAO;QACpCC,SAAA,EAAW,gBAAgBjB,IAAA,CAAKgB,OAAO,GAAG,0BAA0B,4BAClEZ,WAAA,GAAc,0BAA0B,IACxC;QACF;QACAc,IAAA,EAAK;QACLC,QAAA,EAAU,CAAC;QACXC,KAAA,EAAOpB,IAAA,CAAKoB,KAAK;kBAEhBhB,WAAA;QACC;;QACAW,IAAA,CAAC;UAAIM,uBAAA,EAAyB;YAAEC,MAAA,EAAQjB;UAAS;;QAEjD;;QACAkB,KAAA,CAAC;UAAIN,SAAA,EAAU;kCACbF,IAAA,CAAC;YACCE,SAAA,EAAU;YACV,gBAAcjB,IAAA,CAAKgB,OAAO;YAC1B,qBAAkB;sBAEjBhB,IAAA,CAAKgB,OAAO,iBAAID,IAAA,CAAClB,SAAA;2BAEpBkB,IAAA,CAAC;YAAKE,SAAA,EAAU;sBAAuBZ;;;;MAM/C,MAAMmB,IAAA,GAAOZ,cAAA,CAAea,cAAc,CAACX,GAAA;MAE3C;MACA,MAAMY,UAAA,GAAaF,IAAA,CAAKG,OAAO,CAAC;MAChC,MAAMC,UAAA,GAAaJ,IAAA,CAAKG,OAAO,CAAC,6BAA6BD,UAAA;MAC7D,MAAMG,aAAA,GAAgBL,IAAA,CAAKG,OAAO,CAAC,KAAKC,UAAA,GAAa;MACrD,MAAMX,SAAA,GAAYO,IAAA,CAAKM,SAAS,CAACF,UAAA,EAAYC,aAAA;MAC7C,MAAME,kBAAA,GAAqB,GAAGd,SAAA,iCAA0Cd,iBAAA,GAAoB;MAC5F,MAAM6B,aAAA,GAAgBR,IAAA,CAAKS,OAAO,CAAChB,SAAA,EAAWc,kBAAA;MAE9C,OAAOC,aAAA;IACT,OAAO;MACL,OAAO;mBACM5B,WAAA,GAAc,mBAAmB;mBACjCA,WAAA,GAAc,yBAAyBD,iBAAA,EAAmB,GAAGA,iBAAA;mBAC7DH,IAAA,CAAKoB,KAAK;;WAElBf,QAAA,OAAe;IACtB;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PayloadRequest } from 'payload';
|
|
2
|
+
import { type I18nClient } from '@payloadcms/translations';
|
|
3
|
+
import './index.scss';
|
|
4
|
+
import type { HTMLConvertersAsync } from '../../../../features/converters/lexicalToHtml/async/types.js';
|
|
5
|
+
import type { SerializedRelationshipNode } from '../../../../nodeTypes.js';
|
|
6
|
+
export declare const RelationshipDiffHTMLConverterAsync: (args: {
|
|
7
|
+
i18n: I18nClient;
|
|
8
|
+
req: PayloadRequest;
|
|
9
|
+
}) => HTMLConvertersAsync<SerializedRelationshipNode>;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/Diff/converters/relationship/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,cAAc,EAAc,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1E,OAAO,cAAc,CAAA;AAErB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8DAA8D,CAAA;AACvG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AAI1E,eAAO,MAAM,kCAAkC,EAAE,CAAC,IAAI,EAAE;IACtD,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;CACpB,KAAK,mBAAmB,CAAC,0BAA0B,CAgEnD,CAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getTranslation } from '@payloadcms/translations';
|
|
3
|
+
const baseClass = 'lexical-relationship-diff';
|
|
4
|
+
export const RelationshipDiffHTMLConverterAsync = ({
|
|
5
|
+
i18n,
|
|
6
|
+
req
|
|
7
|
+
}) => {
|
|
8
|
+
return {
|
|
9
|
+
relationship: async ({
|
|
10
|
+
node,
|
|
11
|
+
populate,
|
|
12
|
+
providedCSSString
|
|
13
|
+
}) => {
|
|
14
|
+
let data = undefined;
|
|
15
|
+
// If there's no valid upload data, populate return an empty string
|
|
16
|
+
if (typeof node.value !== 'object') {
|
|
17
|
+
if (!populate) {
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
20
|
+
data = await populate({
|
|
21
|
+
id: node.value,
|
|
22
|
+
collectionSlug: node.relationTo
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
data = node.value;
|
|
26
|
+
}
|
|
27
|
+
const relatedCollection = req.payload.collections[node.relationTo]?.config;
|
|
28
|
+
const ReactDOMServer = (await import('react-dom/server')).default;
|
|
29
|
+
const JSX = /*#__PURE__*/_jsx("div", {
|
|
30
|
+
className: `${baseClass}${providedCSSString}`,
|
|
31
|
+
"data-enable-match": "true",
|
|
32
|
+
"data-id": node.value,
|
|
33
|
+
"data-slug": node.relationTo,
|
|
34
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
35
|
+
className: `${baseClass}__card`,
|
|
36
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
37
|
+
className: `${baseClass}__collectionLabel`,
|
|
38
|
+
children: i18n.t('fields:labelRelationship', {
|
|
39
|
+
label: relatedCollection?.labels?.singular ? getTranslation(relatedCollection?.labels?.singular, i18n) : relatedCollection?.slug
|
|
40
|
+
})
|
|
41
|
+
}), data && relatedCollection?.admin?.useAsTitle && data[relatedCollection.admin.useAsTitle] ? /*#__PURE__*/_jsx("strong", {
|
|
42
|
+
className: `${baseClass}__title`,
|
|
43
|
+
"data-enable-match": "false",
|
|
44
|
+
children: /*#__PURE__*/_jsx("a", {
|
|
45
|
+
className: `${baseClass}__link`,
|
|
46
|
+
"data-enable-match": "false",
|
|
47
|
+
href: `/${relatedCollection.slug}/${data.id}`,
|
|
48
|
+
rel: "noopener noreferrer",
|
|
49
|
+
target: "_blank",
|
|
50
|
+
children: data[relatedCollection.admin.useAsTitle]
|
|
51
|
+
})
|
|
52
|
+
}) : /*#__PURE__*/_jsx("strong", {
|
|
53
|
+
children: node.value
|
|
54
|
+
})]
|
|
55
|
+
})
|
|
56
|
+
});
|
|
57
|
+
// Render to HTML
|
|
58
|
+
const html = ReactDOMServer.renderToString(JSX);
|
|
59
|
+
return html;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["getTranslation","baseClass","RelationshipDiffHTMLConverterAsync","i18n","req","relationship","node","populate","providedCSSString","data","undefined","value","id","collectionSlug","relationTo","relatedCollection","payload","collections","config","ReactDOMServer","default","JSX","_jsx","className","_jsxs","t","label","labels","singular","slug","admin","useAsTitle","href","rel","target","html","renderToString"],"sources":["../../../../../src/field/Diff/converters/relationship/index.tsx"],"sourcesContent":["import type { FileData, PayloadRequest, TypeWithID } from 'payload'\n\nimport { getTranslation, type I18nClient } from '@payloadcms/translations'\n\nimport './index.scss'\n\nimport type { HTMLConvertersAsync } from '../../../../features/converters/lexicalToHtml/async/types.js'\nimport type { SerializedRelationshipNode } from '../../../../nodeTypes.js'\n\nconst baseClass = 'lexical-relationship-diff'\n\nexport const RelationshipDiffHTMLConverterAsync: (args: {\n i18n: I18nClient\n req: PayloadRequest\n}) => HTMLConvertersAsync<SerializedRelationshipNode> = ({ i18n, req }) => {\n return {\n relationship: async ({ node, populate, providedCSSString }) => {\n let data: (Record<string, any> & TypeWithID) | undefined = undefined\n\n // If there's no valid upload data, populate return an empty string\n if (typeof node.value !== 'object') {\n if (!populate) {\n return ''\n }\n data = await populate<FileData & TypeWithID>({\n id: node.value,\n collectionSlug: node.relationTo,\n })\n } else {\n data = node.value as unknown as FileData & TypeWithID\n }\n\n const relatedCollection = req.payload.collections[node.relationTo]?.config\n\n const ReactDOMServer = (await import('react-dom/server')).default\n\n const JSX = (\n <div\n className={`${baseClass}${providedCSSString}`}\n data-enable-match=\"true\"\n data-id={node.value}\n data-slug={node.relationTo}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__collectionLabel`}>\n {i18n.t('fields:labelRelationship', {\n label: relatedCollection?.labels?.singular\n ? getTranslation(relatedCollection?.labels?.singular, i18n)\n : relatedCollection?.slug,\n })}\n </div>\n {data &&\n relatedCollection?.admin?.useAsTitle &&\n data[relatedCollection.admin.useAsTitle] ? (\n <strong className={`${baseClass}__title`} data-enable-match=\"false\">\n <a\n className={`${baseClass}__link`}\n data-enable-match=\"false\"\n href={`/${relatedCollection.slug}/${data.id}`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {data[relatedCollection.admin.useAsTitle]}\n </a>\n </strong>\n ) : (\n <strong>{node.value as string}</strong>\n )}\n </div>\n </div>\n )\n\n // Render to HTML\n const html = ReactDOMServer.renderToString(JSX)\n\n return html\n },\n }\n}\n"],"mappings":";AAEA,SAASA,cAAc,QAAyB;AAOhD,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,kCAAA,GAG2CA,CAAC;EAAEC,IAAI;EAAEC;AAAG,CAAE;EACpE,OAAO;IACLC,YAAA,EAAc,MAAAA,CAAO;MAAEC,IAAI;MAAEC,QAAQ;MAAEC;IAAiB,CAAE;MACxD,IAAIC,IAAA,GAAuDC,SAAA;MAE3D;MACA,IAAI,OAAOJ,IAAA,CAAKK,KAAK,KAAK,UAAU;QAClC,IAAI,CAACJ,QAAA,EAAU;UACb,OAAO;QACT;QACAE,IAAA,GAAO,MAAMF,QAAA,CAAgC;UAC3CK,EAAA,EAAIN,IAAA,CAAKK,KAAK;UACdE,cAAA,EAAgBP,IAAA,CAAKQ;QACvB;MACF,OAAO;QACLL,IAAA,GAAOH,IAAA,CAAKK,KAAK;MACnB;MAEA,MAAMI,iBAAA,GAAoBX,GAAA,CAAIY,OAAO,CAACC,WAAW,CAACX,IAAA,CAAKQ,UAAU,CAAC,EAAEI,MAAA;MAEpE,MAAMC,cAAA,GAAiB,CAAC,MAAM,MAAM,CAAC,mBAAkB,EAAGC,OAAO;MAEjE,MAAMC,GAAA,gBACJC,IAAA,CAAC;QACCC,SAAA,EAAW,GAAGtB,SAAA,GAAYO,iBAAA,EAAmB;QAC7C,qBAAkB;QAClB,WAASF,IAAA,CAAKK,KAAK;QACnB,aAAWL,IAAA,CAAKQ,UAAU;kBAE1B,aAAAU,KAAA,CAAC;UAAID,SAAA,EAAW,GAAGtB,SAAA,QAAiB;kCAClCqB,IAAA,CAAC;YAAIC,SAAA,EAAW,GAAGtB,SAAA,mBAA4B;sBAC5CE,IAAA,CAAKsB,CAAC,CAAC,4BAA4B;cAClCC,KAAA,EAAOX,iBAAA,EAAmBY,MAAA,EAAQC,QAAA,GAC9B5B,cAAA,CAAee,iBAAA,EAAmBY,MAAA,EAAQC,QAAA,EAAUzB,IAAA,IACpDY,iBAAA,EAAmBc;YACzB;cAEDpB,IAAA,IACDM,iBAAA,EAAmBe,KAAA,EAAOC,UAAA,IAC1BtB,IAAI,CAACM,iBAAA,CAAkBe,KAAK,CAACC,UAAU,CAAC,gBACtCT,IAAA,CAAC;YAAOC,SAAA,EAAW,GAAGtB,SAAA,SAAkB;YAAE,qBAAkB;sBAC1D,aAAAqB,IAAA,CAAC;cACCC,SAAA,EAAW,GAAGtB,SAAA,QAAiB;cAC/B,qBAAkB;cAClB+B,IAAA,EAAM,IAAIjB,iBAAA,CAAkBc,IAAI,IAAIpB,IAAA,CAAKG,EAAE,EAAE;cAC7CqB,GAAA,EAAI;cACJC,MAAA,EAAO;wBAENzB,IAAI,CAACM,iBAAA,CAAkBe,KAAK,CAACC,UAAU;;4BAI5CT,IAAA,CAAC;sBAAQhB,IAAA,CAAKK;;;;MAMtB;MACA,MAAMwB,IAAA,GAAOhB,cAAA,CAAeiB,cAAc,CAACf,GAAA;MAE3C,OAAOc,IAAA;IACT;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LexicalNode } from 'lexical';
|
|
2
|
+
import type { PayloadRequest } from 'payload';
|
|
3
|
+
import { type I18nClient } from '@payloadcms/translations';
|
|
4
|
+
import './index.scss';
|
|
5
|
+
import type { HTMLConvertersAsync } from '../../../../features/converters/lexicalToHtml/async/types.js';
|
|
6
|
+
export declare const UnknownDiffHTMLConverterAsync: (args: {
|
|
7
|
+
i18n: I18nClient;
|
|
8
|
+
req: PayloadRequest;
|
|
9
|
+
}) => HTMLConvertersAsync<LexicalNode>;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/Diff/converters/unknown/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8DAA8D,CAAA;AAKvG,eAAO,MAAM,6BAA6B,EAAE,CAAC,IAAI,EAAE;IACjD,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;CACpB,KAAK,mBAAmB,CAAC,WAAW,CA4CpC,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createHash } from 'crypto';
|
|
3
|
+
const baseClass = 'lexical-unknown-diff';
|
|
4
|
+
export const UnknownDiffHTMLConverterAsync = ({
|
|
5
|
+
i18n,
|
|
6
|
+
req
|
|
7
|
+
}) => {
|
|
8
|
+
return {
|
|
9
|
+
unknown: async ({
|
|
10
|
+
node,
|
|
11
|
+
providedCSSString
|
|
12
|
+
}) => {
|
|
13
|
+
const ReactDOMServer = (await import('react-dom/server')).default;
|
|
14
|
+
// hash fields to ensure they are diffed if they change
|
|
15
|
+
const nodeFieldsHash = createHash('sha256').update(JSON.stringify(node ?? {})).digest('hex');
|
|
16
|
+
let nodeType = node.type;
|
|
17
|
+
let nodeTypeSpecifier = null;
|
|
18
|
+
if (node.type === 'block') {
|
|
19
|
+
nodeTypeSpecifier = node.fields.blockType;
|
|
20
|
+
nodeType = 'Block';
|
|
21
|
+
} else if (node.type === 'inlineBlock') {
|
|
22
|
+
nodeTypeSpecifier = node.fields.blockType;
|
|
23
|
+
nodeType = 'InlineBlock';
|
|
24
|
+
}
|
|
25
|
+
const JSX = /*#__PURE__*/_jsxs("div", {
|
|
26
|
+
className: `${baseClass}${providedCSSString}`,
|
|
27
|
+
"data-enable-match": "true",
|
|
28
|
+
"data-fields-hash": `${nodeFieldsHash}`,
|
|
29
|
+
children: [nodeTypeSpecifier && /*#__PURE__*/_jsxs("span", {
|
|
30
|
+
className: `${baseClass}__specifier`,
|
|
31
|
+
children: [nodeTypeSpecifier, " "]
|
|
32
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
33
|
+
children: nodeType
|
|
34
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
35
|
+
className: `${baseClass}__meta`,
|
|
36
|
+
children: /*#__PURE__*/_jsx("br", {})
|
|
37
|
+
})]
|
|
38
|
+
});
|
|
39
|
+
// Render to HTML
|
|
40
|
+
const html = ReactDOMServer.renderToString(JSX);
|
|
41
|
+
return html;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["createHash","baseClass","UnknownDiffHTMLConverterAsync","i18n","req","unknown","node","providedCSSString","ReactDOMServer","default","nodeFieldsHash","update","JSON","stringify","digest","nodeType","type","nodeTypeSpecifier","fields","blockType","JSX","_jsxs","className","_jsx","html","renderToString"],"sources":["../../../../../src/field/Diff/converters/unknown/index.tsx"],"sourcesContent":["import type { LexicalNode } from 'lexical'\nimport type { PayloadRequest } from 'payload'\n\nimport { type I18nClient } from '@payloadcms/translations'\n\nimport './index.scss'\n\nimport { createHash } from 'crypto'\n\nimport type { HTMLConvertersAsync } from '../../../../features/converters/lexicalToHtml/async/types.js'\nimport type { SerializedBlockNode } from '../../../../nodeTypes.js'\n\nconst baseClass = 'lexical-unknown-diff'\n\nexport const UnknownDiffHTMLConverterAsync: (args: {\n i18n: I18nClient\n req: PayloadRequest\n}) => HTMLConvertersAsync<LexicalNode> = ({ i18n, req }) => {\n return {\n unknown: async ({ node, providedCSSString }) => {\n const ReactDOMServer = (await import('react-dom/server')).default\n\n // hash fields to ensure they are diffed if they change\n const nodeFieldsHash = createHash('sha256')\n .update(JSON.stringify(node ?? {}))\n .digest('hex')\n\n let nodeType = node.type\n\n let nodeTypeSpecifier: null | string = null\n\n if (node.type === 'block') {\n nodeTypeSpecifier = (node as SerializedBlockNode).fields.blockType\n nodeType = 'Block'\n } else if (node.type === 'inlineBlock') {\n nodeTypeSpecifier = (node as SerializedBlockNode).fields.blockType\n nodeType = 'InlineBlock'\n }\n\n const JSX = (\n <div\n className={`${baseClass}${providedCSSString}`}\n data-enable-match=\"true\"\n data-fields-hash={`${nodeFieldsHash}`}\n >\n {nodeTypeSpecifier && (\n <span className={`${baseClass}__specifier`}>{nodeTypeSpecifier} </span>\n )}\n <span>{nodeType}</span>\n <div className={`${baseClass}__meta`}>\n <br />\n </div>\n </div>\n )\n\n // Render to HTML\n const html = ReactDOMServer.renderToString(JSX)\n\n return html\n },\n }\n}\n"],"mappings":";AAOA,SAASA,UAAU,QAAQ;AAK3B,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,6BAAA,GAG4BA,CAAC;EAAEC,IAAI;EAAEC;AAAG,CAAE;EACrD,OAAO;IACLC,OAAA,EAAS,MAAAA,CAAO;MAAEC,IAAI;MAAEC;IAAiB,CAAE;MACzC,MAAMC,cAAA,GAAiB,CAAC,MAAM,MAAM,CAAC,mBAAkB,EAAGC,OAAO;MAEjE;MACA,MAAMC,cAAA,GAAiBV,UAAA,CAAW,UAC/BW,MAAM,CAACC,IAAA,CAAKC,SAAS,CAACP,IAAA,IAAQ,CAAC,IAC/BQ,MAAM,CAAC;MAEV,IAAIC,QAAA,GAAWT,IAAA,CAAKU,IAAI;MAExB,IAAIC,iBAAA,GAAmC;MAEvC,IAAIX,IAAA,CAAKU,IAAI,KAAK,SAAS;QACzBC,iBAAA,GAAoBX,IAAC,CAA6BY,MAAM,CAACC,SAAS;QAClEJ,QAAA,GAAW;MACb,OAAO,IAAIT,IAAA,CAAKU,IAAI,KAAK,eAAe;QACtCC,iBAAA,GAAoBX,IAAC,CAA6BY,MAAM,CAACC,SAAS;QAClEJ,QAAA,GAAW;MACb;MAEA,MAAMK,GAAA,gBACJC,KAAA,CAAC;QACCC,SAAA,EAAW,GAAGrB,SAAA,GAAYM,iBAAA,EAAmB;QAC7C,qBAAkB;QAClB,oBAAkB,GAAGG,cAAA,EAAgB;mBAEpCO,iBAAA,iBACCI,KAAA,CAAC;UAAKC,SAAA,EAAW,GAAGrB,SAAA,aAAsB;qBAAGgB,iBAAA,EAAkB;yBAEjEM,IAAA,CAAC;oBAAMR;yBACPQ,IAAA,CAAC;UAAID,SAAA,EAAW,GAAGrB,SAAA,QAAiB;oBAClC,aAAAsB,IAAA,CAAC;;;MAKP;MACA,MAAMC,IAAA,GAAOhB,cAAA,CAAeiB,cAAc,CAACL,GAAA;MAE3C,OAAOI,IAAA;IACT;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PayloadRequest } from 'payload';
|
|
2
|
+
import { type I18nClient } from '@payloadcms/translations';
|
|
3
|
+
import './index.scss';
|
|
4
|
+
import type { HTMLConvertersAsync } from '../../../../features/converters/lexicalToHtml/async/types.js';
|
|
5
|
+
import type { SerializedUploadNode } from '../../../../nodeTypes.js';
|
|
6
|
+
export declare const UploadDiffHTMLConverterAsync: (args: {
|
|
7
|
+
i18n: I18nClient;
|
|
8
|
+
req: PayloadRequest;
|
|
9
|
+
}) => HTMLConvertersAsync<SerializedUploadNode>;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/Diff/converters/upload/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,cAAc,EAAc,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAI1D,OAAO,cAAc,CAAA;AAKrB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8DAA8D,CAAA;AAEvG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAIpE,eAAO,MAAM,4BAA4B,EAAE,CAAC,IAAI,EAAE;IAChD,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;CACpB,KAAK,mBAAmB,CAAC,oBAAoB,CAkF7C,CAAA"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { File } from '@payloadcms/ui/rsc';
|
|
3
|
+
import { createHash } from 'crypto';
|
|
4
|
+
import { formatFilesize } from 'payload/shared';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
const baseClass = 'lexical-upload-diff';
|
|
7
|
+
export const UploadDiffHTMLConverterAsync = ({
|
|
8
|
+
i18n,
|
|
9
|
+
req
|
|
10
|
+
}) => {
|
|
11
|
+
return {
|
|
12
|
+
upload: async ({
|
|
13
|
+
node,
|
|
14
|
+
populate,
|
|
15
|
+
providedCSSString
|
|
16
|
+
}) => {
|
|
17
|
+
const uploadNode = node;
|
|
18
|
+
let uploadDoc = undefined;
|
|
19
|
+
// If there's no valid upload data, populate return an empty string
|
|
20
|
+
if (typeof uploadNode.value !== 'object') {
|
|
21
|
+
if (!populate) {
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
uploadDoc = await populate({
|
|
25
|
+
id: uploadNode.value,
|
|
26
|
+
collectionSlug: uploadNode.relationTo
|
|
27
|
+
});
|
|
28
|
+
} else {
|
|
29
|
+
uploadDoc = uploadNode.value;
|
|
30
|
+
}
|
|
31
|
+
if (!uploadDoc) {
|
|
32
|
+
return '';
|
|
33
|
+
}
|
|
34
|
+
const relatedCollection = req.payload.collections[uploadNode.relationTo]?.config;
|
|
35
|
+
const thumbnailSRC = 'thumbnailURL' in uploadDoc && uploadDoc?.thumbnailURL || uploadDoc?.url || '';
|
|
36
|
+
const ReactDOMServer = (await import('react-dom/server')).default;
|
|
37
|
+
// hash fields to ensure they are diffed if they change
|
|
38
|
+
const nodeFieldsHash = createHash('sha256').update(JSON.stringify(node.fields ?? {})).digest('hex');
|
|
39
|
+
const JSX = /*#__PURE__*/_jsx("div", {
|
|
40
|
+
className: `${baseClass}${providedCSSString}`,
|
|
41
|
+
"data-enable-match": "true",
|
|
42
|
+
"data-fields-hash": `${nodeFieldsHash}`,
|
|
43
|
+
"data-filename": uploadDoc?.filename,
|
|
44
|
+
"data-lexical-upload-id": uploadNode.value,
|
|
45
|
+
"data-lexical-upload-relation-to": uploadNode.relationTo,
|
|
46
|
+
"data-src": thumbnailSRC,
|
|
47
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
48
|
+
className: `${baseClass}__card`,
|
|
49
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
50
|
+
className: `${baseClass}__thumbnail`,
|
|
51
|
+
children: thumbnailSRC?.length ? /*#__PURE__*/_jsx("img", {
|
|
52
|
+
alt: uploadDoc?.filename,
|
|
53
|
+
src: thumbnailSRC
|
|
54
|
+
}) : /*#__PURE__*/_jsx(File, {})
|
|
55
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
56
|
+
className: `${baseClass}__info`,
|
|
57
|
+
children: [/*#__PURE__*/_jsx("strong", {
|
|
58
|
+
children: uploadDoc?.filename
|
|
59
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
60
|
+
className: `${baseClass}__meta`,
|
|
61
|
+
children: [formatFilesize(uploadDoc?.filesize), typeof uploadDoc?.width === 'number' && typeof uploadDoc?.height === 'number' && /*#__PURE__*/_jsxs(React.Fragment, {
|
|
62
|
+
children: [" - ", uploadDoc?.width, "x", uploadDoc?.height]
|
|
63
|
+
}), uploadDoc?.mimeType && /*#__PURE__*/_jsxs(React.Fragment, {
|
|
64
|
+
children: [" - ", uploadDoc?.mimeType]
|
|
65
|
+
})]
|
|
66
|
+
})]
|
|
67
|
+
})]
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
// Render to HTML
|
|
71
|
+
const html = ReactDOMServer.renderToString(JSX);
|
|
72
|
+
return html;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["File","createHash","formatFilesize","React","baseClass","UploadDiffHTMLConverterAsync","i18n","req","upload","node","populate","providedCSSString","uploadNode","uploadDoc","undefined","value","id","collectionSlug","relationTo","relatedCollection","payload","collections","config","thumbnailSRC","thumbnailURL","url","ReactDOMServer","default","nodeFieldsHash","update","JSON","stringify","fields","digest","JSX","_jsx","className","filename","_jsxs","length","alt","src","filesize","width","height","Fragment","mimeType","html","renderToString"],"sources":["../../../../../src/field/Diff/converters/upload/index.tsx"],"sourcesContent":["import type { FileData, PayloadRequest, TypeWithID } from 'payload'\n\nimport { type I18nClient } from '@payloadcms/translations'\nimport { File } from '@payloadcms/ui/rsc'\nimport { createHash } from 'crypto'\n\nimport './index.scss'\n\nimport { formatFilesize } from 'payload/shared'\nimport React from 'react'\n\nimport type { HTMLConvertersAsync } from '../../../../features/converters/lexicalToHtml/async/types.js'\nimport type { UploadDataImproved } from '../../../../features/upload/server/nodes/UploadNode.js'\nimport type { SerializedUploadNode } from '../../../../nodeTypes.js'\n\nconst baseClass = 'lexical-upload-diff'\n\nexport const UploadDiffHTMLConverterAsync: (args: {\n i18n: I18nClient\n req: PayloadRequest\n}) => HTMLConvertersAsync<SerializedUploadNode> = ({ i18n, req }) => {\n return {\n upload: async ({ node, populate, providedCSSString }) => {\n const uploadNode = node as UploadDataImproved\n\n let uploadDoc: (FileData & TypeWithID) | undefined = undefined\n\n // If there's no valid upload data, populate return an empty string\n if (typeof uploadNode.value !== 'object') {\n if (!populate) {\n return ''\n }\n uploadDoc = await populate<FileData & TypeWithID>({\n id: uploadNode.value,\n collectionSlug: uploadNode.relationTo,\n })\n } else {\n uploadDoc = uploadNode.value as unknown as FileData & TypeWithID\n }\n\n if (!uploadDoc) {\n return ''\n }\n\n const relatedCollection = req.payload.collections[uploadNode.relationTo]?.config\n\n const thumbnailSRC: string =\n ('thumbnailURL' in uploadDoc && (uploadDoc?.thumbnailURL as string)) || uploadDoc?.url || ''\n\n const ReactDOMServer = (await import('react-dom/server')).default\n\n // hash fields to ensure they are diffed if they change\n const nodeFieldsHash = createHash('sha256')\n .update(JSON.stringify(node.fields ?? {}))\n .digest('hex')\n\n const JSX = (\n <div\n className={`${baseClass}${providedCSSString}`}\n data-enable-match=\"true\"\n data-fields-hash={`${nodeFieldsHash}`}\n data-filename={uploadDoc?.filename}\n data-lexical-upload-id={uploadNode.value}\n data-lexical-upload-relation-to={uploadNode.relationTo}\n data-src={thumbnailSRC}\n >\n <div className={`${baseClass}__card`}>\n <div className={`${baseClass}__thumbnail`}>\n {thumbnailSRC?.length ? (\n <img alt={uploadDoc?.filename} src={thumbnailSRC} />\n ) : (\n <File />\n )}\n </div>\n <div className={`${baseClass}__info`}>\n <strong>{uploadDoc?.filename}</strong>\n <div className={`${baseClass}__meta`}>\n {formatFilesize(uploadDoc?.filesize)}\n {typeof uploadDoc?.width === 'number' && typeof uploadDoc?.height === 'number' && (\n <React.Fragment>\n - \n {uploadDoc?.width}x{uploadDoc?.height}\n </React.Fragment>\n )}\n {uploadDoc?.mimeType && (\n <React.Fragment>\n - \n {uploadDoc?.mimeType}\n </React.Fragment>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n\n // Render to HTML\n const html = ReactDOMServer.renderToString(JSX)\n\n return html\n },\n }\n}\n"],"mappings":";AAGA,SAASA,IAAI,QAAQ;AACrB,SAASC,UAAU,QAAQ;AAI3B,SAASC,cAAc,QAAQ;AAC/B,OAAOC,KAAA,MAAW;AAMlB,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,4BAAA,GAGqCA,CAAC;EAAEC,IAAI;EAAEC;AAAG,CAAE;EAC9D,OAAO;IACLC,MAAA,EAAQ,MAAAA,CAAO;MAAEC,IAAI;MAAEC,QAAQ;MAAEC;IAAiB,CAAE;MAClD,MAAMC,UAAA,GAAaH,IAAA;MAEnB,IAAII,SAAA,GAAiDC,SAAA;MAErD;MACA,IAAI,OAAOF,UAAA,CAAWG,KAAK,KAAK,UAAU;QACxC,IAAI,CAACL,QAAA,EAAU;UACb,OAAO;QACT;QACAG,SAAA,GAAY,MAAMH,QAAA,CAAgC;UAChDM,EAAA,EAAIJ,UAAA,CAAWG,KAAK;UACpBE,cAAA,EAAgBL,UAAA,CAAWM;QAC7B;MACF,OAAO;QACLL,SAAA,GAAYD,UAAA,CAAWG,KAAK;MAC9B;MAEA,IAAI,CAACF,SAAA,EAAW;QACd,OAAO;MACT;MAEA,MAAMM,iBAAA,GAAoBZ,GAAA,CAAIa,OAAO,CAACC,WAAW,CAACT,UAAA,CAAWM,UAAU,CAAC,EAAEI,MAAA;MAE1E,MAAMC,YAAA,GACJ,cAAC,IAAkBV,SAAA,IAAcA,SAAA,EAAWW,YAAA,IAA4BX,SAAA,EAAWY,GAAA,IAAO;MAE5F,MAAMC,cAAA,GAAiB,CAAC,MAAM,MAAM,CAAC,mBAAkB,EAAGC,OAAO;MAEjE;MACA,MAAMC,cAAA,GAAiB3B,UAAA,CAAW,UAC/B4B,MAAM,CAACC,IAAA,CAAKC,SAAS,CAACtB,IAAA,CAAKuB,MAAM,IAAI,CAAC,IACtCC,MAAM,CAAC;MAEV,MAAMC,GAAA,gBACJC,IAAA,CAAC;QACCC,SAAA,EAAW,GAAGhC,SAAA,GAAYO,iBAAA,EAAmB;QAC7C,qBAAkB;QAClB,oBAAkB,GAAGiB,cAAA,EAAgB;QACrC,iBAAef,SAAA,EAAWwB,QAAA;QAC1B,0BAAwBzB,UAAA,CAAWG,KAAK;QACxC,mCAAiCH,UAAA,CAAWM,UAAU;QACtD,YAAUK,YAAA;kBAEV,aAAAe,KAAA,CAAC;UAAIF,SAAA,EAAW,GAAGhC,SAAA,QAAiB;kCAClC+B,IAAA,CAAC;YAAIC,SAAA,EAAW,GAAGhC,SAAA,aAAsB;sBACtCmB,YAAA,EAAcgB,MAAA,gBACbJ,IAAA,CAAC;cAAIK,GAAA,EAAK3B,SAAA,EAAWwB,QAAA;cAAUI,GAAA,EAAKlB;8BAEpCY,IAAA,CAACnC,IAAA;2BAGLsC,KAAA,CAAC;YAAIF,SAAA,EAAW,GAAGhC,SAAA,QAAiB;oCAClC+B,IAAA,CAAC;wBAAQtB,SAAA,EAAWwB;6BACpBC,KAAA,CAAC;cAAIF,SAAA,EAAW,GAAGhC,SAAA,QAAiB;yBACjCF,cAAA,CAAeW,SAAA,EAAW6B,QAAA,GAC1B,OAAO7B,SAAA,EAAW8B,KAAA,KAAU,YAAY,OAAO9B,SAAA,EAAW+B,MAAA,KAAW,yBACpEN,KAAA,CAACnC,KAAA,CAAM0C,QAAQ;2BAAC,OAEbhC,SAAA,EAAW8B,KAAA,EAAM,KAAE9B,SAAA,EAAW+B,MAAA;kBAGlC/B,SAAA,EAAWiC,QAAA,iBACVR,KAAA,CAACnC,KAAA,CAAM0C,QAAQ;2BAAC,OAEbhC,SAAA,EAAWiC,QAAA;;;;;;MAS1B;MACA,MAAMC,IAAA,GAAOrB,cAAA,CAAesB,cAAc,CAACd,GAAA;MAE3C,OAAOa,IAAA;IACT;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export interface HtmlDiffOptions {
|
|
2
|
+
/**
|
|
3
|
+
* The classNames for wrapper DOM.
|
|
4
|
+
* Use this to configure your own styles without importing the built-in CSS file
|
|
5
|
+
*/
|
|
6
|
+
classNames?: Partial<{
|
|
7
|
+
createBlock?: string;
|
|
8
|
+
createInline?: string;
|
|
9
|
+
deleteBlock?: string;
|
|
10
|
+
deleteInline?: string;
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* @defaultValue 1000
|
|
14
|
+
*/
|
|
15
|
+
greedyBoundary?: number;
|
|
16
|
+
/**
|
|
17
|
+
* When greedyMatch is enabled, if the length of the sub-tokens exceeds greedyBoundary,
|
|
18
|
+
* we will use the matched sub-tokens that are sufficiently good, even if they are not optimal, to enhance performance.
|
|
19
|
+
* @defaultValue true
|
|
20
|
+
*/
|
|
21
|
+
greedyMatch?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Determine the minimum threshold for calculating common sub-tokens.
|
|
24
|
+
* You may adjust it to a value larger than 2, but not lower, due to the potential inclusion of HTML tags in the count.
|
|
25
|
+
* @defaultValue 2
|
|
26
|
+
*/
|
|
27
|
+
minMatchedSize?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare class HtmlDiff {
|
|
30
|
+
private readonly config;
|
|
31
|
+
private leastCommonLength;
|
|
32
|
+
private readonly matchedBlockList;
|
|
33
|
+
private readonly newTokens;
|
|
34
|
+
private readonly oldTokens;
|
|
35
|
+
private readonly operationList;
|
|
36
|
+
private sideBySideContents?;
|
|
37
|
+
private unifiedContent?;
|
|
38
|
+
constructor(oldHtml: string, newHtml: string, { classNames, greedyBoundary, greedyMatch, minMatchedSize, }?: HtmlDiffOptions);
|
|
39
|
+
private computeBestMatchedBlock;
|
|
40
|
+
private computeMatchedBlockList;
|
|
41
|
+
private dressUpBlockTag;
|
|
42
|
+
private dressUpDiffContent;
|
|
43
|
+
private dressUpInlineTag;
|
|
44
|
+
private dressupMatchEnabledHtmlTag;
|
|
45
|
+
private dressUpText;
|
|
46
|
+
/**
|
|
47
|
+
* Generates a list of token entries that are matched between the old and new HTML. This list will not
|
|
48
|
+
* include token ranges that differ.
|
|
49
|
+
*/
|
|
50
|
+
private getMatchedBlockList;
|
|
51
|
+
private getOperationList;
|
|
52
|
+
private slideBestMatchedBlock;
|
|
53
|
+
/**
|
|
54
|
+
* convert HTML to tokens
|
|
55
|
+
* @example
|
|
56
|
+
* tokenize("<a> Hello World </a>")
|
|
57
|
+
* ["<a>"," ", "Hello", " ", "World", " ", "</a>"]
|
|
58
|
+
*/
|
|
59
|
+
private tokenize;
|
|
60
|
+
getSideBySideContents(): string[];
|
|
61
|
+
getUnifiedContent(): string;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/field/Diff/htmlDiff/index.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAC,CAAA;IACF;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAWD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAChD,OAAO,CAAC,kBAAkB,CAAC,CAAkB;IAC7C,OAAO,CAAC,cAAc,CAAC,CAAQ;gBAG7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,EACE,UAKC,EACD,cAAqB,EACrB,WAAkB,EAClB,cAAkB,GACnB,GAAE,eAAoB;IA2CzB,OAAO,CAAC,uBAAuB;IA8B/B,OAAO,CAAC,uBAAuB;IAmC/B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,kBAAkB;IAwD1B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,WAAW;IAcnB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA+D3B,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,CAAC,qBAAqB;IA0B7B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAST,qBAAqB,IAAI,MAAM,EAAE;IAiEjC,iBAAiB,IAAI,MAAM;CA4HnC"}
|