@payloadcms/ui 3.35.0-internal.5e55452 → 3.35.0-internal.b3d367c
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/elements/ColumnSelector/index.d.ts +0 -1
- package/dist/elements/ColumnSelector/index.d.ts.map +1 -1
- package/dist/elements/ColumnSelector/index.js +34 -37
- package/dist/elements/ColumnSelector/index.js.map +1 -1
- package/dist/elements/FieldDiffContainer/index.d.ts +15 -0
- package/dist/elements/FieldDiffContainer/index.d.ts.map +1 -0
- package/dist/elements/FieldDiffContainer/index.js +40 -0
- package/dist/elements/FieldDiffContainer/index.js.map +1 -0
- package/dist/elements/FieldDiffContainer/index.scss +42 -0
- package/dist/elements/FieldDiffLabel/index.scss +1 -1
- package/dist/elements/HTMLDiff/colors.scss +35 -0
- package/dist/elements/HTMLDiff/diff/index.d.ts +75 -0
- package/dist/elements/HTMLDiff/diff/index.d.ts.map +1 -0
- package/dist/elements/HTMLDiff/diff/index.js +536 -0
- package/dist/elements/HTMLDiff/diff/index.js.map +1 -0
- package/dist/elements/HTMLDiff/index.d.ts +11 -0
- package/dist/elements/HTMLDiff/index.d.ts.map +1 -0
- package/dist/elements/HTMLDiff/index.js +32 -0
- package/dist/elements/HTMLDiff/index.js.map +1 -0
- package/dist/elements/HTMLDiff/index.scss +158 -0
- package/dist/elements/PillSelector/index.d.ts +26 -0
- package/dist/elements/PillSelector/index.d.ts.map +1 -0
- package/dist/elements/PillSelector/index.js +71 -0
- package/dist/elements/PillSelector/index.js.map +1 -0
- package/dist/elements/{ColumnSelector → PillSelector}/index.scss +5 -5
- package/dist/elements/ReactSelect/ValueContainer/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/ValueContainer/index.js +7 -4
- package/dist/elements/ReactSelect/ValueContainer/index.js.map +1 -1
- package/dist/elements/ReactSelect/ValueContainer/index.scss +8 -0
- package/dist/elements/ReactSelect/types.d.ts +1 -0
- package/dist/elements/ReactSelect/types.d.ts.map +1 -1
- package/dist/elements/ReactSelect/types.js.map +1 -1
- package/dist/exports/client/index.d.ts +4 -0
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +11 -11
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/rsc/index.d.ts +2 -0
- package/dist/exports/rsc/index.d.ts.map +1 -1
- package/dist/exports/rsc/index.js +2 -0
- package/dist/exports/rsc/index.js.map +1 -1
- package/dist/fields/Checkbox/index.scss +1 -1
- package/dist/fields/FieldLabel/index.d.ts.map +1 -1
- package/dist/fields/FieldLabel/index.js +1 -1
- package/dist/fields/FieldLabel/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ColumnSelector/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAGxD,OAAO,KAAyB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ColumnSelector/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAGxD,OAAO,KAAyB,MAAM,OAAO,CAAA;AAO7C,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;CAC3D,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAmD1C,CAAA"}
|
|
@@ -4,14 +4,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
4
4
|
import { fieldIsHiddenOrDisabled, fieldIsID } from 'payload/shared';
|
|
5
5
|
import React, { useId, useMemo } from 'react';
|
|
6
6
|
import { FieldLabel } from '../../fields/FieldLabel/index.js';
|
|
7
|
-
import { PlusIcon } from '../../icons/Plus/index.js';
|
|
8
|
-
import { XIcon } from '../../icons/X/index.js';
|
|
9
7
|
import { useEditDepth } from '../../providers/EditDepth/index.js';
|
|
10
8
|
import { useTableColumns } from '../../providers/TableColumns/index.js';
|
|
11
|
-
import {
|
|
12
|
-
import { Pill } from '../Pill/index.js';
|
|
13
|
-
import './index.scss';
|
|
14
|
-
const baseClass = 'column-selector';
|
|
9
|
+
import { PillSelector } from '../PillSelector/index.js';
|
|
15
10
|
export const ColumnSelector = ({
|
|
16
11
|
collectionSlug
|
|
17
12
|
}) => {
|
|
@@ -23,43 +18,45 @@ export const ColumnSelector = ({
|
|
|
23
18
|
const uuid = useId();
|
|
24
19
|
const editDepth = useEditDepth();
|
|
25
20
|
const filteredColumns = useMemo(() => columns.filter(col => !(fieldIsHiddenOrDisabled(col.field) && !fieldIsID(col.field)) && !col?.field?.admin?.disableListColumn), [columns]);
|
|
26
|
-
|
|
27
|
-
return
|
|
28
|
-
}
|
|
29
|
-
return /*#__PURE__*/_jsx(DraggableSortable, {
|
|
30
|
-
className: baseClass,
|
|
31
|
-
ids: filteredColumns.map(col_0 => col_0?.accessor),
|
|
32
|
-
onDragEnd: ({
|
|
33
|
-
moveFromIndex,
|
|
34
|
-
moveToIndex
|
|
35
|
-
}) => {
|
|
36
|
-
void moveColumn({
|
|
37
|
-
fromIndex: moveFromIndex,
|
|
38
|
-
toIndex: moveToIndex
|
|
39
|
-
});
|
|
40
|
-
},
|
|
41
|
-
children: filteredColumns.map((col_1, i) => {
|
|
21
|
+
const pills = useMemo(() => {
|
|
22
|
+
return filteredColumns ? filteredColumns.map(col_0 => {
|
|
42
23
|
const {
|
|
43
24
|
accessor,
|
|
44
25
|
active,
|
|
45
26
|
field
|
|
46
|
-
} =
|
|
47
|
-
return
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
draggable: true,
|
|
52
|
-
icon: active ? /*#__PURE__*/_jsx(XIcon, {}) : /*#__PURE__*/_jsx(PlusIcon, {}),
|
|
53
|
-
id: accessor,
|
|
54
|
-
onClick: () => {
|
|
55
|
-
void toggleColumn(accessor);
|
|
56
|
-
},
|
|
57
|
-
children: col_1.CustomLabel ?? /*#__PURE__*/_jsx(FieldLabel, {
|
|
27
|
+
} = col_0;
|
|
28
|
+
return {
|
|
29
|
+
name: accessor,
|
|
30
|
+
key: `${collectionSlug}-${field && 'name' in field ? field?.name : uuid}${editDepth ? `-${editDepth}-` : ''}${uuid}`,
|
|
31
|
+
Label: /*#__PURE__*/_jsx(FieldLabel, {
|
|
58
32
|
label: field && 'label' in field && field.label,
|
|
59
33
|
unstyled: true
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
|
|
34
|
+
}),
|
|
35
|
+
selected: active
|
|
36
|
+
};
|
|
37
|
+
}) : null;
|
|
38
|
+
}, [collectionSlug, editDepth, filteredColumns, uuid]);
|
|
39
|
+
if (!pills) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return /*#__PURE__*/_jsx(PillSelector, {
|
|
43
|
+
draggable: {
|
|
44
|
+
onDragEnd: ({
|
|
45
|
+
moveFromIndex,
|
|
46
|
+
moveToIndex
|
|
47
|
+
}) => {
|
|
48
|
+
void moveColumn({
|
|
49
|
+
fromIndex: moveFromIndex,
|
|
50
|
+
toIndex: moveToIndex
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
onClick: ({
|
|
55
|
+
pill
|
|
56
|
+
}) => {
|
|
57
|
+
void toggleColumn(pill.name);
|
|
58
|
+
},
|
|
59
|
+
pills: pills
|
|
63
60
|
});
|
|
64
61
|
};
|
|
65
62
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["fieldIsHiddenOrDisabled","fieldIsID","React","useId","useMemo","FieldLabel","
|
|
1
|
+
{"version":3,"file":"index.js","names":["fieldIsHiddenOrDisabled","fieldIsID","React","useId","useMemo","FieldLabel","useEditDepth","useTableColumns","PillSelector","ColumnSelector","collectionSlug","columns","moveColumn","toggleColumn","uuid","editDepth","filteredColumns","filter","col","field","admin","disableListColumn","pills","map","accessor","active","name","key","Label","_jsx","label","unstyled","selected","draggable","onDragEnd","moveFromIndex","moveToIndex","fromIndex","toIndex","onClick","pill"],"sources":["../../../src/elements/ColumnSelector/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { fieldIsHiddenOrDisabled, fieldIsID } from 'payload/shared'\nimport React, { useId, useMemo } from 'react'\n\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useTableColumns } from '../../providers/TableColumns/index.js'\nimport { PillSelector, type SelectablePill } from '../PillSelector/index.js'\n\nexport type Props = {\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n}\n\nexport const ColumnSelector: React.FC<Props> = ({ collectionSlug }) => {\n const { columns, moveColumn, toggleColumn } = useTableColumns()\n\n const uuid = useId()\n const editDepth = useEditDepth()\n\n const filteredColumns = useMemo(\n () =>\n columns.filter(\n (col) =>\n !(fieldIsHiddenOrDisabled(col.field) && !fieldIsID(col.field)) &&\n !col?.field?.admin?.disableListColumn,\n ),\n [columns],\n )\n\n const pills: SelectablePill[] = useMemo(() => {\n return filteredColumns\n ? filteredColumns.map((col) => {\n const { accessor, active, field } = col\n\n return {\n name: accessor,\n key: `${collectionSlug}-${field && 'name' in field ? field?.name : uuid}${editDepth ? `-${editDepth}-` : ''}${uuid}`,\n Label: <FieldLabel label={field && 'label' in field && field.label} unstyled />,\n selected: active,\n } as SelectablePill\n })\n : null\n }, [collectionSlug, editDepth, filteredColumns, uuid])\n\n if (!pills) {\n return null\n }\n\n return (\n <PillSelector\n draggable={{\n onDragEnd: ({ moveFromIndex, moveToIndex }) => {\n void moveColumn({\n fromIndex: moveFromIndex,\n toIndex: moveToIndex,\n })\n },\n }}\n onClick={({ pill }) => {\n void toggleColumn(pill.name)\n }}\n pills={pills}\n />\n )\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,uBAAuB,EAAEC,SAAS,QAAQ;AACnD,OAAOC,KAAA,IAASC,KAAK,EAAEC,OAAO,QAAQ;AAEtC,SAASC,UAAU,QAAQ;AAC3B,SAASC,YAAY,QAAQ;AAC7B,SAASC,eAAe,QAAQ;AAChC,SAASC,YAAY,QAA6B;AAMlD,OAAO,MAAMC,cAAA,GAAkCA,CAAC;EAAEC;AAAc,CAAE;EAChE,MAAM;IAAEC,OAAO;IAAEC,UAAU;IAAEC;EAAY,CAAE,GAAGN,eAAA;EAE9C,MAAMO,IAAA,GAAOX,KAAA;EACb,MAAMY,SAAA,GAAYT,YAAA;EAElB,MAAMU,eAAA,GAAkBZ,OAAA,CACtB,MACEO,OAAA,CAAQM,MAAM,CACXC,GAAA,IACC,EAAElB,uBAAA,CAAwBkB,GAAA,CAAIC,KAAK,KAAK,CAAClB,SAAA,CAAUiB,GAAA,CAAIC,KAAK,MAC5D,CAACD,GAAA,EAAKC,KAAA,EAAOC,KAAA,EAAOC,iBAAA,GAE1B,CAACV,OAAA,CAAQ;EAGX,MAAMW,KAAA,GAA0BlB,OAAA,CAAQ;IACtC,OAAOY,eAAA,GACHA,eAAA,CAAgBO,GAAG,CAAEL,KAAA;MACnB,MAAM;QAAEM,QAAQ;QAAEC,MAAM;QAAEN;MAAK,CAAE,GAAGD,KAAA;MAEpC,OAAO;QACLQ,IAAA,EAAMF,QAAA;QACNG,GAAA,EAAK,GAAGjB,cAAA,IAAkBS,KAAA,IAAS,UAAUA,KAAA,GAAQA,KAAA,EAAOO,IAAA,GAAOZ,IAAA,GAAOC,SAAA,GAAY,IAAIA,SAAA,GAAY,GAAG,KAAKD,IAAA,EAAM;QACpHc,KAAA,eAAOC,IAAA,CAACxB,UAAA;UAAWyB,KAAA,EAAOX,KAAA,IAAS,WAAWA,KAAA,IAASA,KAAA,CAAMW,KAAK;UAAEC,QAAQ;;QAC5EC,QAAA,EAAUP;MACZ;IACF,KACA;EACN,GAAG,CAACf,cAAA,EAAgBK,SAAA,EAAWC,eAAA,EAAiBF,IAAA,CAAK;EAErD,IAAI,CAACQ,KAAA,EAAO;IACV,OAAO;EACT;EAEA,oBACEO,IAAA,CAACrB,YAAA;IACCyB,SAAA,EAAW;MACTC,SAAA,EAAWA,CAAC;QAAEC,aAAa;QAAEC;MAAW,CAAE;QACxC,KAAKxB,UAAA,CAAW;UACdyB,SAAA,EAAWF,aAAA;UACXG,OAAA,EAASF;QACX;MACF;IACF;IACAG,OAAA,EAASA,CAAC;MAAEC;IAAI,CAAE;MAChB,KAAK3B,YAAA,CAAa2B,IAAA,CAAKd,IAAI;IAC7B;IACAJ,KAAA,EAAOA;;AAGb","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LabelFunction, StaticLabel } from 'payload';
|
|
2
|
+
import './index.scss';
|
|
3
|
+
import { type I18nClient } from '@payloadcms/translations';
|
|
4
|
+
export declare const FieldDiffContainer: React.FC<{
|
|
5
|
+
className?: string;
|
|
6
|
+
From: React.ReactNode;
|
|
7
|
+
i18n: I18nClient;
|
|
8
|
+
label: {
|
|
9
|
+
label?: false | LabelFunction | StaticLabel;
|
|
10
|
+
locale?: string;
|
|
11
|
+
};
|
|
12
|
+
nestingLevel?: number;
|
|
13
|
+
To: React.ReactNode;
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/FieldDiffContainer/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAEzD,OAAO,cAAc,CAAA;AAErB,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAM1E,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE;QACL,KAAK,CAAC,EAAE,KAAK,GAAG,aAAa,GAAG,WAAW,CAAA;QAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,EAAE,EAAE,KAAK,CAAC,SAAS,CAAA;CACpB,CA2CA,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import './index.scss';
|
|
3
|
+
import { getTranslation } from '@payloadcms/translations';
|
|
4
|
+
import { FieldDiffLabel } from '../FieldDiffLabel/index.js';
|
|
5
|
+
const baseClass = 'field-diff';
|
|
6
|
+
export const FieldDiffContainer = args => {
|
|
7
|
+
const {
|
|
8
|
+
className,
|
|
9
|
+
From,
|
|
10
|
+
i18n,
|
|
11
|
+
label: {
|
|
12
|
+
label,
|
|
13
|
+
locale
|
|
14
|
+
},
|
|
15
|
+
nestingLevel = 0,
|
|
16
|
+
To
|
|
17
|
+
} = args;
|
|
18
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
19
|
+
className: `${baseClass}${className ? ` ${className}` : ''} nested-level-${nestingLevel}`,
|
|
20
|
+
style: nestingLevel ? {
|
|
21
|
+
// Need to use % instead of fr, as calc() doesn't work with fr when this is used in gridTemplateColumns
|
|
22
|
+
'--left-offset': `calc(50% - (${nestingLevel} * calc( calc(var(--base)* 0.5) - 2px )))`
|
|
23
|
+
} : {
|
|
24
|
+
'--left-offset': '50%'
|
|
25
|
+
},
|
|
26
|
+
children: [/*#__PURE__*/_jsxs(FieldDiffLabel, {
|
|
27
|
+
children: [locale && /*#__PURE__*/_jsx("span", {
|
|
28
|
+
className: `${baseClass}__locale-label`,
|
|
29
|
+
children: locale
|
|
30
|
+
}), typeof label !== 'function' && getTranslation(label || '', i18n)]
|
|
31
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
32
|
+
className: `${baseClass}-container${className ? ` ${className}` : ''}`,
|
|
33
|
+
style: nestingLevel ? {
|
|
34
|
+
gridTemplateColumns: `calc(var(--left-offset) - calc(var(--base)*0.5) ) calc(50% - calc(var(--base)*0.5) + calc(50% - var(--left-offset)))`
|
|
35
|
+
} : undefined,
|
|
36
|
+
children: [From, To]
|
|
37
|
+
})]
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["getTranslation","FieldDiffLabel","baseClass","FieldDiffContainer","args","className","From","i18n","label","locale","nestingLevel","To","_jsxs","style","_jsx","gridTemplateColumns","undefined"],"sources":["../../../src/elements/FieldDiffContainer/index.tsx"],"sourcesContent":["import type { LabelFunction, StaticLabel } from 'payload'\n\nimport './index.scss'\n\nimport { getTranslation, type I18nClient } from '@payloadcms/translations'\n\nimport { FieldDiffLabel } from '../FieldDiffLabel/index.js'\n\nconst baseClass = 'field-diff'\n\nexport const FieldDiffContainer: React.FC<{\n className?: string\n From: React.ReactNode\n i18n: I18nClient\n label: {\n label?: false | LabelFunction | StaticLabel\n locale?: string\n }\n nestingLevel?: number\n To: React.ReactNode\n}> = (args) => {\n const {\n className,\n From,\n i18n,\n label: { label, locale },\n nestingLevel = 0,\n To,\n } = args\n\n return (\n <div\n className={`${baseClass}${className ? ` ${className}` : ''} nested-level-${nestingLevel}`}\n style={\n nestingLevel\n ? ({\n // Need to use % instead of fr, as calc() doesn't work with fr when this is used in gridTemplateColumns\n '--left-offset': `calc(50% - (${nestingLevel} * calc( calc(var(--base)* 0.5) - 2px )))`,\n } as React.CSSProperties)\n : ({\n '--left-offset': '50%',\n } as React.CSSProperties)\n }\n >\n <FieldDiffLabel>\n {locale && <span className={`${baseClass}__locale-label`}>{locale}</span>}\n {typeof label !== 'function' && getTranslation(label || '', i18n)}\n </FieldDiffLabel>\n <div\n className={`${baseClass}-container${className ? ` ${className}` : ''}`}\n style={\n nestingLevel\n ? {\n gridTemplateColumns: `calc(var(--left-offset) - calc(var(--base)*0.5) ) calc(50% - calc(var(--base)*0.5) + calc(50% - var(--left-offset)))`,\n }\n : undefined\n }\n >\n {From}\n {To}\n </div>\n </div>\n )\n}\n"],"mappings":";AAEA,OAAO;AAEP,SAASA,cAAc,QAAyB;AAEhD,SAASC,cAAc,QAAQ;AAE/B,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,kBAAA,GAUPC,IAAA;EACJ,MAAM;IACJC,SAAS;IACTC,IAAI;IACJC,IAAI;IACJC,KAAA,EAAO;MAAEA,KAAK;MAAEC;IAAM,CAAE;IACxBC,YAAA,GAAe,CAAC;IAChBC;EAAE,CACH,GAAGP,IAAA;EAEJ,oBACEQ,KAAA,CAAC;IACCP,SAAA,EAAW,GAAGH,SAAA,GAAYG,SAAA,GAAY,IAAIA,SAAA,EAAW,GAAG,mBAAmBK,YAAA,EAAc;IACzFG,KAAA,EACEH,YAAA,GACK;MACC;MACA,iBAAiB,gBAAgBA,YAAA;IACnC,IACC;MACC,iBAAiB;IACnB;4BAGNE,KAAA,CAACX,cAAA;iBACEQ,MAAA,iBAAUK,IAAA,CAAC;QAAKT,SAAA,EAAW,GAAGH,SAAA,gBAAyB;kBAAGO;UAC1D,OAAOD,KAAA,KAAU,cAAcR,cAAA,CAAeQ,KAAA,IAAS,IAAID,IAAA;qBAE9DK,KAAA,CAAC;MACCP,SAAA,EAAW,GAAGH,SAAA,aAAsBG,SAAA,GAAY,IAAIA,SAAA,EAAW,GAAG,IAAI;MACtEQ,KAAA,EACEH,YAAA,GACI;QACEK,mBAAA,EAAqB;MACvB,IACAC,SAAA;iBAGLV,IAAA,EACAK,EAAA;;;AAIT","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
@import '../../scss/styles.scss';
|
|
2
|
+
|
|
3
|
+
@layer payload-default {
|
|
4
|
+
.field-diff {
|
|
5
|
+
position: relative;
|
|
6
|
+
|
|
7
|
+
&__locale-label {
|
|
8
|
+
[dir='ltr'] & {
|
|
9
|
+
margin-right: calc(var(--base) * 0.25);
|
|
10
|
+
}
|
|
11
|
+
[dir='rtl'] & {
|
|
12
|
+
margin-left: calc(var(--base) * 0.25);
|
|
13
|
+
}
|
|
14
|
+
background: var(--theme-elevation-100);
|
|
15
|
+
padding: calc(var(--base) * 0.25);
|
|
16
|
+
// border-radius: $style-radius-m;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Vertical separator line - not needed anymore, as the parent version view container adds a vertical line that spans the entire height of the container.
|
|
20
|
+
/*
|
|
21
|
+
&::after {
|
|
22
|
+
content: '';
|
|
23
|
+
position: absolute;
|
|
24
|
+
top: 0;
|
|
25
|
+
bottom: 0;
|
|
26
|
+
left: var(--left-offset);
|
|
27
|
+
width: 1px;
|
|
28
|
+
background-color: var(--theme-elevation-100);
|
|
29
|
+
transform: translateX(-50%); // Center the line
|
|
30
|
+
}*/
|
|
31
|
+
|
|
32
|
+
&-container {
|
|
33
|
+
display: grid;
|
|
34
|
+
// Need to use 50% 50% so that we can apply overflow-x without the column shrinking to the content width.
|
|
35
|
+
// Need -base(0.5) to enure the gap is center aligned - this is required when using 50% over 1fr.
|
|
36
|
+
grid-template-columns: calc(50% - base(0.5)) calc(50% - base(0.5));
|
|
37
|
+
gap: base(1);
|
|
38
|
+
background: var(--theme-elevation-50);
|
|
39
|
+
padding: base(0.5);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
@import '../../scss/styles.scss';
|
|
2
|
+
|
|
3
|
+
@layer payload-default {
|
|
4
|
+
:root {
|
|
5
|
+
--diff-delete-pill-bg: var(--theme-error-200);
|
|
6
|
+
--diff-delete-pill-color: var(--theme-error-600);
|
|
7
|
+
--diff-delete-pill-border: var(--theme-error-400);
|
|
8
|
+
--diff-delete-parent-bg: var(--theme-error-100);
|
|
9
|
+
--diff-delete-parent-color: var(--theme-error-800);
|
|
10
|
+
--diff-delete-link-color: var(--theme-error-600);
|
|
11
|
+
|
|
12
|
+
--diff-create-pill-bg: var(--theme-success-200);
|
|
13
|
+
--diff-create-pill-color: var(--theme-success-600);
|
|
14
|
+
--diff-create-pill-border: var(--theme-success-400);
|
|
15
|
+
--diff-create-parent-bg: var(--theme-success-100);
|
|
16
|
+
--diff-create-parent-color: var(--theme-success-800);
|
|
17
|
+
--diff-create-link-color: var(--theme-success-600);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
html[data-theme='dark'] {
|
|
21
|
+
--diff-delete-pill-bg: var(--theme-error-200);
|
|
22
|
+
--diff-delete-pill-color: var(--theme-error-650);
|
|
23
|
+
--diff-delete-pill-border: var(--theme-error-400);
|
|
24
|
+
--diff-delete-parent-bg: var(--theme-error-100);
|
|
25
|
+
--diff-delete-parent-color: var(--theme-error-900);
|
|
26
|
+
--diff-delete-link-color: var(--theme-error-750);
|
|
27
|
+
|
|
28
|
+
--diff-create-pill-bg: var(--theme-success-200);
|
|
29
|
+
--diff-create-pill-color: var(--theme-success-650);
|
|
30
|
+
--diff-create-pill-border: var(--theme-success-400);
|
|
31
|
+
--diff-create-parent-bg: var(--theme-success-100);
|
|
32
|
+
--diff-create-parent-color: var(--theme-success-900);
|
|
33
|
+
--diff-create-link-color: var(--theme-success-750);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
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
|
+
* Whether to tokenize by character or by word.
|
|
30
|
+
* @defaultValue false
|
|
31
|
+
*/
|
|
32
|
+
tokenizeByCharacter?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare class HtmlDiff {
|
|
35
|
+
private readonly config;
|
|
36
|
+
private leastCommonLength;
|
|
37
|
+
private readonly matchedBlockList;
|
|
38
|
+
private readonly newTokens;
|
|
39
|
+
private readonly oldTokens;
|
|
40
|
+
private readonly operationList;
|
|
41
|
+
private sideBySideContents?;
|
|
42
|
+
private unifiedContent?;
|
|
43
|
+
constructor(oldHtml: string, newHtml: string, { classNames, greedyBoundary, greedyMatch, minMatchedSize, tokenizeByCharacter, }?: HtmlDiffOptions);
|
|
44
|
+
private computeBestMatchedBlock;
|
|
45
|
+
private computeMatchedBlockList;
|
|
46
|
+
private dressUpBlockTag;
|
|
47
|
+
private dressUpDiffContent;
|
|
48
|
+
private dressUpInlineTag;
|
|
49
|
+
private dressupMatchEnabledHtmlTag;
|
|
50
|
+
private dressUpText;
|
|
51
|
+
/**
|
|
52
|
+
* Generates a list of token entries that are matched between the old and new HTML. This list will not
|
|
53
|
+
* include token ranges that differ.
|
|
54
|
+
*/
|
|
55
|
+
private getMatchedBlockList;
|
|
56
|
+
private getOperationList;
|
|
57
|
+
private slideBestMatchedBlock;
|
|
58
|
+
/**
|
|
59
|
+
* Convert HTML to tokens at character level, preserving HTML tags as complete tokens
|
|
60
|
+
* @example
|
|
61
|
+
* tokenize("<a> Hello World </a>")
|
|
62
|
+
* ["<a>", " ", "H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d", " ", "</a>"]
|
|
63
|
+
*/
|
|
64
|
+
private tokenizeByCharacter;
|
|
65
|
+
/**
|
|
66
|
+
* convert HTML to tokens
|
|
67
|
+
* @example
|
|
68
|
+
* tokenize("<a> Hello World </a>")
|
|
69
|
+
* ["<a>"," ", "Hello", " ", "World", " ", "</a>"]
|
|
70
|
+
*/
|
|
71
|
+
private tokenizeByWord;
|
|
72
|
+
getSideBySideContents(): string[];
|
|
73
|
+
getUnifiedContent(): string;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/HTMLDiff/diff/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;IACvB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;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,EAClB,mBAA2B,GAC5B,GAAE,eAAoB;IA4CzB,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,mBAAmB;IAiC3B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IASf,qBAAqB,IAAI,MAAM,EAAE;IAiEjC,iBAAiB,IAAI,MAAM;CA4HnC"}
|