@payloadcms/ui 3.47.0-internal.b17506e → 3.47.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/elements/ArrayAction/index.d.ts +2 -0
- package/dist/elements/ArrayAction/index.d.ts.map +1 -1
- package/dist/elements/ArrayAction/index.js +37 -13
- package/dist/elements/ArrayAction/index.js.map +1 -1
- package/dist/elements/ClipboardAction/ClipboardActionLabel.d.ts +5 -0
- package/dist/elements/ClipboardAction/ClipboardActionLabel.d.ts.map +1 -0
- package/dist/elements/ClipboardAction/ClipboardActionLabel.js +44 -0
- package/dist/elements/ClipboardAction/ClipboardActionLabel.js.map +1 -0
- package/dist/elements/ClipboardAction/clipboardUtilities.d.ts +10 -0
- package/dist/elements/ClipboardAction/clipboardUtilities.d.ts.map +1 -0
- package/dist/elements/ClipboardAction/clipboardUtilities.js +53 -0
- package/dist/elements/ClipboardAction/clipboardUtilities.js.map +1 -0
- package/dist/elements/ClipboardAction/index.d.ts +21 -0
- package/dist/elements/ClipboardAction/index.d.ts.map +1 -0
- package/dist/elements/ClipboardAction/index.js +197 -0
- package/dist/elements/ClipboardAction/index.js.map +1 -0
- package/dist/elements/ClipboardAction/isClipboardDataValid.d.ts +10 -0
- package/dist/elements/ClipboardAction/isClipboardDataValid.d.ts.map +1 -0
- package/dist/elements/ClipboardAction/isClipboardDataValid.js +86 -0
- package/dist/elements/ClipboardAction/isClipboardDataValid.js.map +1 -0
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts +14 -0
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -0
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +100 -0
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -0
- package/dist/elements/ClipboardAction/types.d.ts +45 -0
- package/dist/elements/ClipboardAction/types.d.ts.map +1 -0
- package/dist/elements/ClipboardAction/types.js +2 -0
- package/dist/elements/ClipboardAction/types.js.map +1 -0
- package/dist/elements/DatePicker/index.scss +18 -0
- package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/ScheduleDrawer/index.js +10 -1
- package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
- package/dist/elements/ReactSelect/ClearIndicator/index.scss +1 -0
- package/dist/elements/ReactSelect/DropdownIndicator/index.scss +1 -0
- package/dist/exports/client/index.js +22 -22
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/shared/index.js +2 -2
- package/dist/exports/shared/index.js.map +4 -4
- package/dist/fields/Array/ArrayRow.d.ts +2 -0
- package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
- package/dist/fields/Array/ArrayRow.js +49 -43
- package/dist/fields/Array/ArrayRow.js.map +1 -1
- package/dist/fields/Array/index.d.ts.map +1 -1
- package/dist/fields/Array/index.js +176 -43
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Array/index.scss +17 -3
- package/dist/fields/Blocks/BlockRow.d.ts +2 -0
- package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
- package/dist/fields/Blocks/BlockRow.js +41 -35
- package/dist/fields/Blocks/BlockRow.js.map +1 -1
- package/dist/fields/Blocks/RowActions.d.ts +2 -0
- package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
- package/dist/fields/Blocks/RowActions.js +32 -26
- package/dist/fields/Blocks/RowActions.js.map +1 -1
- package/dist/fields/Blocks/index.d.ts.map +1 -1
- package/dist/fields/Blocks/index.js +295 -348
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/Hidden/index.js +19 -17
- package/dist/fields/Hidden/index.js.map +1 -1
- package/dist/forms/useField/index.d.ts.map +1 -1
- package/dist/forms/useField/index.js +1 -2
- package/dist/forms/useField/index.js.map +1 -1
- package/dist/providers/LivePreview/index.d.ts +1 -1
- package/dist/providers/LivePreview/index.d.ts.map +1 -1
- package/dist/providers/LivePreview/index.js +1 -2
- package/dist/providers/LivePreview/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/buildFormState.js +1 -1
- package/dist/utilities/buildFormState.js.map +1 -1
- package/dist/utilities/buildTableState.js +1 -0
- package/dist/utilities/buildTableState.js.map +1 -1
- package/dist/utilities/formatDocTitle/formatRelationshipTitle.d.ts +2 -0
- package/dist/utilities/formatDocTitle/formatRelationshipTitle.d.ts.map +1 -0
- package/dist/utilities/formatDocTitle/formatRelationshipTitle.js +15 -0
- package/dist/utilities/formatDocTitle/formatRelationshipTitle.js.map +1 -0
- package/dist/utilities/formatDocTitle/index.d.ts.map +1 -1
- package/dist/utilities/formatDocTitle/index.js +6 -0
- package/dist/utilities/formatDocTitle/index.js.map +1 -1
- package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
- package/dist/views/Edit/Auth/APIKey.js +27 -10
- package/dist/views/Edit/Auth/APIKey.js.map +1 -1
- package/dist/views/Edit/Auth/index.scss +31 -5
- package/package.json +4 -4
|
@@ -2,11 +2,13 @@ import React from 'react';
|
|
|
2
2
|
import './index.scss';
|
|
3
3
|
export type Props = {
|
|
4
4
|
addRow: (current: number, blockType?: string) => Promise<void> | void;
|
|
5
|
+
copyRow: (index: number) => void;
|
|
5
6
|
duplicateRow: (current: number) => void;
|
|
6
7
|
hasMaxRows: boolean;
|
|
7
8
|
index: number;
|
|
8
9
|
isSortable?: boolean;
|
|
9
10
|
moveRow: (from: number, to: number) => void;
|
|
11
|
+
pasteRow: (index: number) => void;
|
|
10
12
|
removeRow: (index: number) => void;
|
|
11
13
|
rowCount: number;
|
|
12
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ArrayAction/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,OAAO,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ArrayAction/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,OAAO,cAAc,CAAA;AAKrB,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACrE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6GvC,CAAA"}
|
|
@@ -9,18 +9,21 @@ import { MoreIcon } from '../../icons/More/index.js';
|
|
|
9
9
|
import { PlusIcon } from '../../icons/Plus/index.js';
|
|
10
10
|
import { XIcon } from '../../icons/X/index.js';
|
|
11
11
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
12
|
-
import {
|
|
12
|
+
import { ClipboardActionLabel } from '../ClipboardAction/ClipboardActionLabel.js';
|
|
13
13
|
import './index.scss';
|
|
14
|
+
import { Popup, PopupList } from '../Popup/index.js';
|
|
14
15
|
const baseClass = 'array-actions';
|
|
15
16
|
export const ArrayAction = t0 => {
|
|
16
|
-
const $ = _c(
|
|
17
|
+
const $ = _c(12);
|
|
17
18
|
const {
|
|
18
19
|
addRow,
|
|
20
|
+
copyRow,
|
|
19
21
|
duplicateRow,
|
|
20
22
|
hasMaxRows,
|
|
21
23
|
index,
|
|
22
24
|
isSortable,
|
|
23
25
|
moveRow,
|
|
26
|
+
pasteRow,
|
|
24
27
|
removeRow,
|
|
25
28
|
rowCount
|
|
26
29
|
} = t0;
|
|
@@ -28,7 +31,7 @@ export const ArrayAction = t0 => {
|
|
|
28
31
|
t
|
|
29
32
|
} = useTranslation();
|
|
30
33
|
let t1;
|
|
31
|
-
if ($[0] !== addRow || $[1] !==
|
|
34
|
+
if ($[0] !== addRow || $[1] !== copyRow || $[2] !== duplicateRow || $[3] !== hasMaxRows || $[4] !== index || $[5] !== isSortable || $[6] !== moveRow || $[7] !== pasteRow || $[8] !== removeRow || $[9] !== rowCount || $[10] !== t) {
|
|
32
35
|
t1 = _jsx(Popup, {
|
|
33
36
|
button: _jsx(MoreIcon, {}),
|
|
34
37
|
buttonClassName: `${baseClass}__button`,
|
|
@@ -78,6 +81,25 @@ export const ArrayAction = t0 => {
|
|
|
78
81
|
},
|
|
79
82
|
children: [_jsx(CopyIcon, {}), t("general:duplicate")]
|
|
80
83
|
})]
|
|
84
|
+
}), _jsx(PopupList.Button, {
|
|
85
|
+
className: `${baseClass}__action ${baseClass}__copy`,
|
|
86
|
+
onClick: () => {
|
|
87
|
+
copyRow(index);
|
|
88
|
+
close();
|
|
89
|
+
},
|
|
90
|
+
children: _jsx(ClipboardActionLabel, {
|
|
91
|
+
isRow: true
|
|
92
|
+
})
|
|
93
|
+
}), _jsx(PopupList.Button, {
|
|
94
|
+
className: `${baseClass}__action ${baseClass}__paste`,
|
|
95
|
+
onClick: () => {
|
|
96
|
+
pasteRow(index);
|
|
97
|
+
close();
|
|
98
|
+
},
|
|
99
|
+
children: _jsx(ClipboardActionLabel, {
|
|
100
|
+
isPaste: true,
|
|
101
|
+
isRow: true
|
|
102
|
+
})
|
|
81
103
|
}), _jsxs(PopupList.Button, {
|
|
82
104
|
className: `${baseClass}__action ${baseClass}__remove`,
|
|
83
105
|
onClick: () => {
|
|
@@ -91,17 +113,19 @@ export const ArrayAction = t0 => {
|
|
|
91
113
|
size: "medium"
|
|
92
114
|
});
|
|
93
115
|
$[0] = addRow;
|
|
94
|
-
$[1] =
|
|
95
|
-
$[2] =
|
|
96
|
-
$[3] =
|
|
97
|
-
$[4] =
|
|
98
|
-
$[5] =
|
|
99
|
-
$[6] =
|
|
100
|
-
$[7] =
|
|
101
|
-
$[8] =
|
|
102
|
-
$[9] =
|
|
116
|
+
$[1] = copyRow;
|
|
117
|
+
$[2] = duplicateRow;
|
|
118
|
+
$[3] = hasMaxRows;
|
|
119
|
+
$[4] = index;
|
|
120
|
+
$[5] = isSortable;
|
|
121
|
+
$[6] = moveRow;
|
|
122
|
+
$[7] = pasteRow;
|
|
123
|
+
$[8] = removeRow;
|
|
124
|
+
$[9] = rowCount;
|
|
125
|
+
$[10] = t;
|
|
126
|
+
$[11] = t1;
|
|
103
127
|
} else {
|
|
104
|
-
t1 = $[
|
|
128
|
+
t1 = $[11];
|
|
105
129
|
}
|
|
106
130
|
return t1;
|
|
107
131
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","React","ChevronIcon","CopyIcon","MoreIcon","PlusIcon","XIcon","useTranslation","Popup","PopupList","baseClass","ArrayAction","t0","$","addRow","duplicateRow","hasMaxRows","index","isSortable","moveRow","removeRow","rowCount","t","t1","_jsx","button","buttonClassName","className","horizontalAlign","render","t2","close","_jsxs","ButtonGroup","buttonSize","children","Button","onClick","direction","Fragment"],"sources":["../../../src/elements/ArrayAction/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { CopyIcon } from '../../icons/Copy/index.js'\nimport { MoreIcon } from '../../icons/More/index.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","React","ChevronIcon","CopyIcon","MoreIcon","PlusIcon","XIcon","useTranslation","ClipboardActionLabel","Popup","PopupList","baseClass","ArrayAction","t0","$","addRow","copyRow","duplicateRow","hasMaxRows","index","isSortable","moveRow","pasteRow","removeRow","rowCount","t","t1","_jsx","button","buttonClassName","className","horizontalAlign","render","t2","close","_jsxs","ButtonGroup","buttonSize","children","Button","onClick","direction","Fragment","isRow","isPaste"],"sources":["../../../src/elements/ArrayAction/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { CopyIcon } from '../../icons/Copy/index.js'\nimport { MoreIcon } from '../../icons/More/index.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ClipboardActionLabel } from '../ClipboardAction/ClipboardActionLabel.js'\nimport './index.scss'\nimport { Popup, PopupList } from '../Popup/index.js'\n\nconst baseClass = 'array-actions'\n\nexport type Props = {\n addRow: (current: number, blockType?: string) => Promise<void> | void\n copyRow: (index: number) => void\n duplicateRow: (current: number) => void\n hasMaxRows: boolean\n index: number\n isSortable?: boolean\n moveRow: (from: number, to: number) => void\n pasteRow: (index: number) => void\n removeRow: (index: number) => void\n rowCount: number\n}\n\nexport const ArrayAction: React.FC<Props> = ({\n addRow,\n copyRow,\n duplicateRow,\n hasMaxRows,\n index,\n isSortable,\n moveRow,\n pasteRow,\n removeRow,\n rowCount,\n}) => {\n const { t } = useTranslation()\n\n return (\n <Popup\n button={<MoreIcon />}\n buttonClassName={`${baseClass}__button`}\n className={baseClass}\n horizontalAlign=\"center\"\n render={({ close }) => {\n return (\n <PopupList.ButtonGroup buttonSize=\"small\">\n {isSortable && index !== 0 && (\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__move-up`}\n onClick={() => {\n moveRow(index, index - 1)\n close()\n }}\n >\n <div className={`${baseClass}__action-chevron`}>\n <ChevronIcon direction=\"up\" />\n </div>\n {t('general:moveUp')}\n </PopupList.Button>\n )}\n {isSortable && index < rowCount - 1 && (\n <PopupList.Button\n className={`${baseClass}__action`}\n onClick={() => {\n moveRow(index, index + 1)\n close()\n }}\n >\n <div className={`${baseClass}__action-chevron`}>\n <ChevronIcon />\n </div>\n {t('general:moveDown')}\n </PopupList.Button>\n )}\n {!hasMaxRows && (\n <React.Fragment>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__add`}\n onClick={() => {\n void addRow(index + 1)\n close()\n }}\n >\n <PlusIcon />\n {t('general:addBelow')}\n </PopupList.Button>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__duplicate`}\n onClick={() => {\n duplicateRow(index)\n close()\n }}\n >\n <CopyIcon />\n {t('general:duplicate')}\n </PopupList.Button>\n </React.Fragment>\n )}\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__copy`}\n onClick={() => {\n copyRow(index)\n close()\n }}\n >\n <ClipboardActionLabel isRow />\n </PopupList.Button>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__paste`}\n onClick={() => {\n pasteRow(index)\n close()\n }}\n >\n <ClipboardActionLabel isPaste isRow />\n </PopupList.Button>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__remove`}\n onClick={() => {\n removeRow(index)\n close()\n }}\n >\n <XIcon />\n {t('general:remove')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )\n }}\n size=\"medium\"\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClipboardActionLabel.d.ts","sourceRoot":"","sources":["../../../src/elements/ClipboardAction/ClipboardActionLabel.tsx"],"names":[],"mappings":"AAQA,eAAO,MAAM,oBAAoB,wBAG9B;IACD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,gCAiBA,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { c as _c } from "react/compiler-runtime";
|
|
4
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { Fragment } from 'react';
|
|
6
|
+
import { CopyIcon } from '../../icons/Copy/index.js';
|
|
7
|
+
import { EditIcon } from '../../icons/Edit/index.js';
|
|
8
|
+
import { useTranslation } from '../../providers/Translation/index.js';
|
|
9
|
+
export const ClipboardActionLabel = t0 => {
|
|
10
|
+
const $ = _c(4);
|
|
11
|
+
const {
|
|
12
|
+
isPaste,
|
|
13
|
+
isRow
|
|
14
|
+
} = t0;
|
|
15
|
+
const {
|
|
16
|
+
t
|
|
17
|
+
} = useTranslation();
|
|
18
|
+
let t1;
|
|
19
|
+
if ($[0] !== isPaste || $[1] !== isRow || $[2] !== t) {
|
|
20
|
+
let label = t("general:copyField");
|
|
21
|
+
if (!isRow && isPaste) {
|
|
22
|
+
label = t("general:pasteField");
|
|
23
|
+
} else {
|
|
24
|
+
if (isRow && !isPaste) {
|
|
25
|
+
label = t("general:copyRow");
|
|
26
|
+
} else {
|
|
27
|
+
if (isRow && isPaste) {
|
|
28
|
+
label = t("general:pasteRow");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
t1 = _jsxs(Fragment, {
|
|
33
|
+
children: [isPaste ? _jsx(EditIcon, {}) : _jsx(CopyIcon, {}), " ", label]
|
|
34
|
+
});
|
|
35
|
+
$[0] = isPaste;
|
|
36
|
+
$[1] = isRow;
|
|
37
|
+
$[2] = t;
|
|
38
|
+
$[3] = t1;
|
|
39
|
+
} else {
|
|
40
|
+
t1 = $[3];
|
|
41
|
+
}
|
|
42
|
+
return t1;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=ClipboardActionLabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClipboardActionLabel.js","names":["c","_c","Fragment","CopyIcon","EditIcon","useTranslation","ClipboardActionLabel","t0","$","isPaste","isRow","t","t1","label","_jsxs","children","_jsx"],"sources":["../../../src/elements/ClipboardAction/ClipboardActionLabel.tsx"],"sourcesContent":["'use client'\n\nimport { Fragment } from 'react'\n\nimport { CopyIcon } from '../../icons/Copy/index.js'\nimport { EditIcon } from '../../icons/Edit/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\n\nexport const ClipboardActionLabel = ({\n isPaste,\n isRow,\n}: {\n isPaste?: boolean\n isRow?: boolean\n}) => {\n const { t } = useTranslation()\n\n let label = t('general:copyField')\n if (!isRow && isPaste) {\n label = t('general:pasteField')\n } else if (isRow && !isPaste) {\n label = t('general:copyRow')\n } else if (isRow && isPaste) {\n label = t('general:pasteRow')\n }\n\n return (\n <Fragment>\n {isPaste ? <EditIcon /> : <CopyIcon />} {label}\n </Fragment>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,SAASC,QAAQ,QAAQ;AAEzB,SAASC,QAAQ,QAAQ;AACzB,SAASC,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAE/B,OAAO,MAAMC,oBAAA,GAAuBC,EAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAC;IAAAQ,OAAA;IAAAC;EAAA,IAAAH,EAMpC;EACC;IAAAI;EAAA,IAAcN,cAAA;EAAA,IAAAO,EAAA;EAAA,IAAAJ,CAAA,QAAAC,OAAA,IAAAD,CAAA,QAAAE,KAAA,IAAAF,CAAA,QAAAG,CAAA;IAEd,IAAAE,KAAA,GAAYF,CAAA,CAAE;IAAA,IACV,CAACD,KAAA,IAASD,OAAA;MACZI,KAAA,CAAAA,CAAA,CAAQF,CAAA,CAAE;IAAV;MAAA,IACSD,KAAA,KAAUD,OAAA;QACnBI,KAAA,CAAAA,CAAA,CAAQF,CAAA,CAAE;MAAV;QAAA,IACSD,KAAA,IAASD,OAAA;UAClBI,KAAA,CAAAA,CAAA,CAAQF,CAAA,CAAE;QAAV;MAAA;IAAA;IAIAC,EAAA,GAAAE,KAAA,CAAAZ,QAAA;MAAAa,QAAA,GACGN,OAAA,GAAUO,IAAA,CAAAZ,QAAA,IAAC,IAAcY,IAAA,CAAAb,QAAA,IAAC,GAAY,KAAEU,KAAA;IAAA,C;;;;;;;;SAD3CD,E;CAIJ","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ClipboardCopyActionArgs, ClipboardPasteActionArgs } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* @note This function doesn't use the Clipboard API, but localStorage. See rationale in #11513
|
|
4
|
+
*/
|
|
5
|
+
export declare function clipboardCopy(args: ClipboardCopyActionArgs): string | true;
|
|
6
|
+
/**
|
|
7
|
+
* @note This function doesn't use the Clipboard API, but localStorage. See rationale in #11513
|
|
8
|
+
*/
|
|
9
|
+
export declare function clipboardPaste({ onPaste, path: fieldPath, t, ...args }: ClipboardPasteActionArgs): string | true;
|
|
10
|
+
//# sourceMappingURL=clipboardUtilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboardUtilities.d.ts","sourceRoot":"","sources":["../../../src/elements/ClipboardAction/clipboardUtilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EAGzB,MAAM,YAAY,CAAA;AAMnB;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,GAAG,IAAI,CAc1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,IAAI,EAAE,SAAS,EACf,CAAC,EACD,GAAG,IAAI,EACR,EAAE,wBAAwB,GAAG,MAAM,GAAG,IAAI,CA4B1C"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { isClipboardDataValid } from './isClipboardDataValid.js';
|
|
2
|
+
const localStorageClipboardKey = '_payloadClipboard';
|
|
3
|
+
/**
|
|
4
|
+
* @note This function doesn't use the Clipboard API, but localStorage. See rationale in #11513
|
|
5
|
+
*/
|
|
6
|
+
export function clipboardCopy(args) {
|
|
7
|
+
const {
|
|
8
|
+
getDataToCopy,
|
|
9
|
+
t,
|
|
10
|
+
...rest
|
|
11
|
+
} = args;
|
|
12
|
+
const dataToWrite = {
|
|
13
|
+
data: getDataToCopy(),
|
|
14
|
+
...rest
|
|
15
|
+
};
|
|
16
|
+
try {
|
|
17
|
+
localStorage.setItem(localStorageClipboardKey, JSON.stringify(dataToWrite));
|
|
18
|
+
return true;
|
|
19
|
+
} catch (_err) {
|
|
20
|
+
return t('error:unableToCopy');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @note This function doesn't use the Clipboard API, but localStorage. See rationale in #11513
|
|
25
|
+
*/
|
|
26
|
+
export function clipboardPaste({
|
|
27
|
+
onPaste,
|
|
28
|
+
path: fieldPath,
|
|
29
|
+
t,
|
|
30
|
+
...args
|
|
31
|
+
}) {
|
|
32
|
+
let dataToPaste;
|
|
33
|
+
try {
|
|
34
|
+
const jsonFromClipboard = localStorage.getItem(localStorageClipboardKey);
|
|
35
|
+
if (!jsonFromClipboard) {
|
|
36
|
+
return t('error:invalidClipboardData');
|
|
37
|
+
}
|
|
38
|
+
dataToPaste = JSON.parse(jsonFromClipboard);
|
|
39
|
+
} catch (_err) {
|
|
40
|
+
return t('error:invalidClipboardData');
|
|
41
|
+
}
|
|
42
|
+
const dataToValidate = {
|
|
43
|
+
...dataToPaste,
|
|
44
|
+
...args,
|
|
45
|
+
fieldPath
|
|
46
|
+
};
|
|
47
|
+
if (!isClipboardDataValid(dataToValidate)) {
|
|
48
|
+
return t('error:invalidClipboardData');
|
|
49
|
+
}
|
|
50
|
+
onPaste(dataToPaste);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=clipboardUtilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboardUtilities.js","names":["isClipboardDataValid","localStorageClipboardKey","clipboardCopy","args","getDataToCopy","t","rest","dataToWrite","data","localStorage","setItem","JSON","stringify","_err","clipboardPaste","onPaste","path","fieldPath","dataToPaste","jsonFromClipboard","getItem","parse","dataToValidate"],"sources":["../../../src/elements/ClipboardAction/clipboardUtilities.ts"],"sourcesContent":["import type {\n ClipboardCopyActionArgs,\n ClipboardPasteActionArgs,\n ClipboardPasteActionValidateArgs,\n ClipboardPasteData,\n} from './types.js'\n\nimport { isClipboardDataValid } from './isClipboardDataValid.js'\n\nconst localStorageClipboardKey = '_payloadClipboard'\n\n/**\n * @note This function doesn't use the Clipboard API, but localStorage. See rationale in #11513\n */\nexport function clipboardCopy(args: ClipboardCopyActionArgs): string | true {\n const { getDataToCopy, t, ...rest } = args\n\n const dataToWrite = {\n data: getDataToCopy(),\n ...rest,\n }\n\n try {\n localStorage.setItem(localStorageClipboardKey, JSON.stringify(dataToWrite))\n return true\n } catch (_err) {\n return t('error:unableToCopy')\n }\n}\n\n/**\n * @note This function doesn't use the Clipboard API, but localStorage. See rationale in #11513\n */\nexport function clipboardPaste({\n onPaste,\n path: fieldPath,\n t,\n ...args\n}: ClipboardPasteActionArgs): string | true {\n let dataToPaste: ClipboardPasteData\n\n try {\n const jsonFromClipboard = localStorage.getItem(localStorageClipboardKey)\n\n if (!jsonFromClipboard) {\n return t('error:invalidClipboardData')\n }\n\n dataToPaste = JSON.parse(jsonFromClipboard)\n } catch (_err) {\n return t('error:invalidClipboardData')\n }\n\n const dataToValidate = {\n ...dataToPaste,\n ...args,\n fieldPath,\n } as ClipboardPasteActionValidateArgs\n\n if (!isClipboardDataValid(dataToValidate)) {\n return t('error:invalidClipboardData')\n }\n\n onPaste(dataToPaste)\n\n return true\n}\n"],"mappings":"AAOA,SAASA,oBAAoB,QAAQ;AAErC,MAAMC,wBAAA,GAA2B;AAEjC;;;AAGA,OAAO,SAASC,cAAcC,IAA6B;EACzD,MAAM;IAAEC,aAAa;IAAEC,CAAC;IAAE,GAAGC;EAAA,CAAM,GAAGH,IAAA;EAEtC,MAAMI,WAAA,GAAc;IAClBC,IAAA,EAAMJ,aAAA;IACN,GAAGE;EACL;EAEA,IAAI;IACFG,YAAA,CAAaC,OAAO,CAACT,wBAAA,EAA0BU,IAAA,CAAKC,SAAS,CAACL,WAAA;IAC9D,OAAO;EACT,EAAE,OAAOM,IAAA,EAAM;IACb,OAAOR,CAAA,CAAE;EACX;AACF;AAEA;;;AAGA,OAAO,SAASS,eAAe;EAC7BC,OAAO;EACPC,IAAA,EAAMC,SAAS;EACfZ,CAAC;EACD,GAAGF;AAAA,CACsB;EACzB,IAAIe,WAAA;EAEJ,IAAI;IACF,MAAMC,iBAAA,GAAoBV,YAAA,CAAaW,OAAO,CAACnB,wBAAA;IAE/C,IAAI,CAACkB,iBAAA,EAAmB;MACtB,OAAOd,CAAA,CAAE;IACX;IAEAa,WAAA,GAAcP,IAAA,CAAKU,KAAK,CAACF,iBAAA;EAC3B,EAAE,OAAON,IAAA,EAAM;IACb,OAAOR,CAAA,CAAE;EACX;EAEA,MAAMiB,cAAA,GAAiB;IACrB,GAAGJ,WAAW;IACd,GAAGf,IAAI;IACPc;EACF;EAEA,IAAI,CAACjB,oBAAA,CAAqBsB,cAAA,GAAiB;IACzC,OAAOjB,CAAA,CAAE;EACX;EAEAU,OAAA,CAAQG,WAAA;EAER,OAAO;AACT","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { FormStateWithoutComponents } from 'payload';
|
|
2
|
+
import { type FC } from 'react';
|
|
3
|
+
import type { ClipboardCopyData, OnPasteFn } from './types.js';
|
|
4
|
+
type Props = {
|
|
5
|
+
allowCopy?: boolean;
|
|
6
|
+
allowPaste?: boolean;
|
|
7
|
+
className?: string;
|
|
8
|
+
copyClassName?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
getDataToCopy: () => FormStateWithoutComponents;
|
|
11
|
+
isRow?: boolean;
|
|
12
|
+
onPaste: OnPasteFn;
|
|
13
|
+
pasteClassName?: string;
|
|
14
|
+
} & ClipboardCopyData;
|
|
15
|
+
/**
|
|
16
|
+
* Menu actions for copying and pasting fields. Currently, this is only used in Arrays and Blocks.
|
|
17
|
+
* @note This component doesn't use the Clipboard API, but localStorage. See rationale in #11513
|
|
18
|
+
*/
|
|
19
|
+
export declare const ClipboardAction: FC<Props>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ClipboardAction/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAEzD,OAAO,EAAE,KAAK,EAAE,EAAe,MAAM,OAAO,CAAA;AAG5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAU9D,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,MAAM,0BAA0B,CAAA;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,SAAS,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,GAAG,iBAAiB,CAAA;AAErB;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,KAAK,CA0FrC,CAAA"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { c as _c } from "react/compiler-runtime";
|
|
4
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { useCallback } from 'react';
|
|
6
|
+
import { toast } from 'sonner';
|
|
7
|
+
import { MoreIcon } from '../../icons/More/index.js';
|
|
8
|
+
import { useTranslation } from '../../providers/Translation/index.js';
|
|
9
|
+
import { Popup, PopupList } from '../Popup/index.js';
|
|
10
|
+
import { ClipboardActionLabel } from './ClipboardActionLabel.js';
|
|
11
|
+
import { clipboardCopy, clipboardPaste } from './clipboardUtilities.js';
|
|
12
|
+
const baseClass = 'clipboard-action';
|
|
13
|
+
/**
|
|
14
|
+
* Menu actions for copying and pasting fields. Currently, this is only used in Arrays and Blocks.
|
|
15
|
+
* @note This component doesn't use the Clipboard API, but localStorage. See rationale in #11513
|
|
16
|
+
*/
|
|
17
|
+
export const ClipboardAction = t0 => {
|
|
18
|
+
const $ = _c(40);
|
|
19
|
+
let allowCopy;
|
|
20
|
+
let allowPaste;
|
|
21
|
+
let className;
|
|
22
|
+
let copyClassName;
|
|
23
|
+
let disabled;
|
|
24
|
+
let isRow;
|
|
25
|
+
let onPaste;
|
|
26
|
+
let pasteClassName;
|
|
27
|
+
let path;
|
|
28
|
+
let rest;
|
|
29
|
+
if ($[0] !== t0) {
|
|
30
|
+
({
|
|
31
|
+
allowCopy,
|
|
32
|
+
allowPaste,
|
|
33
|
+
className,
|
|
34
|
+
copyClassName,
|
|
35
|
+
disabled,
|
|
36
|
+
isRow,
|
|
37
|
+
onPaste,
|
|
38
|
+
pasteClassName,
|
|
39
|
+
path,
|
|
40
|
+
...rest
|
|
41
|
+
} = t0);
|
|
42
|
+
$[0] = t0;
|
|
43
|
+
$[1] = allowCopy;
|
|
44
|
+
$[2] = allowPaste;
|
|
45
|
+
$[3] = className;
|
|
46
|
+
$[4] = copyClassName;
|
|
47
|
+
$[5] = disabled;
|
|
48
|
+
$[6] = isRow;
|
|
49
|
+
$[7] = onPaste;
|
|
50
|
+
$[8] = pasteClassName;
|
|
51
|
+
$[9] = path;
|
|
52
|
+
$[10] = rest;
|
|
53
|
+
} else {
|
|
54
|
+
allowCopy = $[1];
|
|
55
|
+
allowPaste = $[2];
|
|
56
|
+
className = $[3];
|
|
57
|
+
copyClassName = $[4];
|
|
58
|
+
disabled = $[5];
|
|
59
|
+
isRow = $[6];
|
|
60
|
+
onPaste = $[7];
|
|
61
|
+
pasteClassName = $[8];
|
|
62
|
+
path = $[9];
|
|
63
|
+
rest = $[10];
|
|
64
|
+
}
|
|
65
|
+
const {
|
|
66
|
+
t
|
|
67
|
+
} = useTranslation();
|
|
68
|
+
let t1;
|
|
69
|
+
if ($[11] !== className) {
|
|
70
|
+
t1 = [`${baseClass}__popup`, className].filter(Boolean);
|
|
71
|
+
$[11] = className;
|
|
72
|
+
$[12] = t1;
|
|
73
|
+
} else {
|
|
74
|
+
t1 = $[12];
|
|
75
|
+
}
|
|
76
|
+
const classes = t1.join(" ");
|
|
77
|
+
let t2;
|
|
78
|
+
if ($[13] !== path || $[14] !== rest || $[15] !== t) {
|
|
79
|
+
t2 = () => {
|
|
80
|
+
const clipboardResult = clipboardCopy({
|
|
81
|
+
path,
|
|
82
|
+
t,
|
|
83
|
+
...rest
|
|
84
|
+
});
|
|
85
|
+
if (typeof clipboardResult === "string") {
|
|
86
|
+
toast.error(clipboardResult);
|
|
87
|
+
} else {
|
|
88
|
+
toast.success(t("general:copied"));
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
$[13] = path;
|
|
92
|
+
$[14] = rest;
|
|
93
|
+
$[15] = t;
|
|
94
|
+
$[16] = t2;
|
|
95
|
+
} else {
|
|
96
|
+
t2 = $[16];
|
|
97
|
+
}
|
|
98
|
+
const handleCopy = t2;
|
|
99
|
+
let t3;
|
|
100
|
+
if ($[17] !== onPaste || $[18] !== path || $[19] !== rest || $[20] !== t) {
|
|
101
|
+
t3 = () => {
|
|
102
|
+
const clipboardResult_0 = clipboardPaste(rest.type === "array" ? {
|
|
103
|
+
onPaste,
|
|
104
|
+
path,
|
|
105
|
+
schemaFields: rest.fields,
|
|
106
|
+
t
|
|
107
|
+
} : {
|
|
108
|
+
onPaste,
|
|
109
|
+
path,
|
|
110
|
+
schemaBlocks: rest.blocks,
|
|
111
|
+
t
|
|
112
|
+
});
|
|
113
|
+
if (typeof clipboardResult_0 === "string") {
|
|
114
|
+
toast.error(clipboardResult_0);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
$[17] = onPaste;
|
|
118
|
+
$[18] = path;
|
|
119
|
+
$[19] = rest;
|
|
120
|
+
$[20] = t;
|
|
121
|
+
$[21] = t3;
|
|
122
|
+
} else {
|
|
123
|
+
t3 = $[21];
|
|
124
|
+
}
|
|
125
|
+
const handlePaste = t3;
|
|
126
|
+
if (!allowPaste && !allowCopy) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
let t4;
|
|
130
|
+
if ($[22] !== allowCopy || $[23] !== allowPaste || $[24] !== classes || $[25] !== copyClassName || $[26] !== disabled || $[27] !== handleCopy || $[28] !== handlePaste || $[29] !== isRow || $[30] !== pasteClassName) {
|
|
131
|
+
let t5;
|
|
132
|
+
if ($[32] !== allowCopy || $[33] !== allowPaste || $[34] !== copyClassName || $[35] !== handleCopy || $[36] !== handlePaste || $[37] !== isRow || $[38] !== pasteClassName) {
|
|
133
|
+
t5 = t6 => {
|
|
134
|
+
const {
|
|
135
|
+
close
|
|
136
|
+
} = t6;
|
|
137
|
+
return _jsxs(PopupList.ButtonGroup, {
|
|
138
|
+
children: [_jsx(PopupList.Button, {
|
|
139
|
+
className: copyClassName,
|
|
140
|
+
disabled: !allowCopy,
|
|
141
|
+
onClick: () => {
|
|
142
|
+
handleCopy();
|
|
143
|
+
close();
|
|
144
|
+
},
|
|
145
|
+
children: _jsx(ClipboardActionLabel, {
|
|
146
|
+
isRow
|
|
147
|
+
})
|
|
148
|
+
}), _jsx(PopupList.Button, {
|
|
149
|
+
className: pasteClassName,
|
|
150
|
+
disabled: !allowPaste,
|
|
151
|
+
onClick: () => {
|
|
152
|
+
handlePaste();
|
|
153
|
+
close();
|
|
154
|
+
},
|
|
155
|
+
children: _jsx(ClipboardActionLabel, {
|
|
156
|
+
isPaste: true,
|
|
157
|
+
isRow
|
|
158
|
+
})
|
|
159
|
+
})]
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
$[32] = allowCopy;
|
|
163
|
+
$[33] = allowPaste;
|
|
164
|
+
$[34] = copyClassName;
|
|
165
|
+
$[35] = handleCopy;
|
|
166
|
+
$[36] = handlePaste;
|
|
167
|
+
$[37] = isRow;
|
|
168
|
+
$[38] = pasteClassName;
|
|
169
|
+
$[39] = t5;
|
|
170
|
+
} else {
|
|
171
|
+
t5 = $[39];
|
|
172
|
+
}
|
|
173
|
+
t4 = _jsx(Popup, {
|
|
174
|
+
button: _jsx(MoreIcon, {}),
|
|
175
|
+
className: classes,
|
|
176
|
+
disabled,
|
|
177
|
+
horizontalAlign: "center",
|
|
178
|
+
render: t5,
|
|
179
|
+
size: "large",
|
|
180
|
+
verticalAlign: "bottom"
|
|
181
|
+
});
|
|
182
|
+
$[22] = allowCopy;
|
|
183
|
+
$[23] = allowPaste;
|
|
184
|
+
$[24] = classes;
|
|
185
|
+
$[25] = copyClassName;
|
|
186
|
+
$[26] = disabled;
|
|
187
|
+
$[27] = handleCopy;
|
|
188
|
+
$[28] = handlePaste;
|
|
189
|
+
$[29] = isRow;
|
|
190
|
+
$[30] = pasteClassName;
|
|
191
|
+
$[31] = t4;
|
|
192
|
+
} else {
|
|
193
|
+
t4 = $[31];
|
|
194
|
+
}
|
|
195
|
+
return t4;
|
|
196
|
+
};
|
|
197
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useCallback","toast","MoreIcon","useTranslation","Popup","PopupList","ClipboardActionLabel","clipboardCopy","clipboardPaste","baseClass","ClipboardAction","t0","$","allowCopy","allowPaste","className","copyClassName","disabled","isRow","onPaste","pasteClassName","path","rest","t","t1","filter","Boolean","classes","join","t2","clipboardResult","error","success","handleCopy","t3","clipboardResult_0","type","schemaFields","fields","schemaBlocks","blocks","handlePaste","t4","t5","t6","close","_jsxs","ButtonGroup","children","_jsx","Button","onClick","isPaste","button","horizontalAlign","render","verticalAlign"],"sources":["../../../src/elements/ClipboardAction/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FormStateWithoutComponents } from 'payload'\n\nimport { type FC, useCallback } from 'react'\nimport { toast } from 'sonner'\n\nimport type { ClipboardCopyData, OnPasteFn } from './types.js'\n\nimport { MoreIcon } from '../../icons/More/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { ClipboardActionLabel } from './ClipboardActionLabel.js'\nimport { clipboardCopy, clipboardPaste } from './clipboardUtilities.js'\n\nconst baseClass = 'clipboard-action'\n\ntype Props = {\n allowCopy?: boolean\n allowPaste?: boolean\n className?: string\n copyClassName?: string\n disabled?: boolean\n getDataToCopy: () => FormStateWithoutComponents\n isRow?: boolean\n onPaste: OnPasteFn\n pasteClassName?: string\n} & ClipboardCopyData\n\n/**\n * Menu actions for copying and pasting fields. Currently, this is only used in Arrays and Blocks.\n * @note This component doesn't use the Clipboard API, but localStorage. See rationale in #11513\n */\nexport const ClipboardAction: FC<Props> = ({\n allowCopy,\n allowPaste,\n className,\n copyClassName,\n disabled,\n isRow,\n onPaste,\n pasteClassName,\n path,\n ...rest\n}) => {\n const { t } = useTranslation()\n\n const classes = [`${baseClass}__popup`, className].filter(Boolean).join(' ')\n\n const handleCopy = useCallback(() => {\n const clipboardResult = clipboardCopy({\n path,\n t,\n ...rest,\n })\n\n if (typeof clipboardResult === 'string') {\n toast.error(clipboardResult)\n } else {\n toast.success(t('general:copied'))\n }\n }, [t, rest, path])\n\n const handlePaste = useCallback(() => {\n const clipboardResult = clipboardPaste(\n rest.type === 'array'\n ? {\n onPaste,\n path,\n schemaFields: rest.fields,\n t,\n }\n : {\n onPaste,\n path,\n schemaBlocks: rest.blocks,\n t,\n },\n )\n\n if (typeof clipboardResult === 'string') {\n toast.error(clipboardResult)\n }\n }, [onPaste, rest, path, t])\n\n if (!allowPaste && !allowCopy) {\n return null\n }\n\n return (\n <Popup\n button={<MoreIcon />}\n className={classes}\n disabled={disabled}\n horizontalAlign=\"center\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n <PopupList.Button\n className={copyClassName}\n disabled={!allowCopy}\n onClick={() => {\n void handleCopy()\n close()\n }}\n >\n <ClipboardActionLabel isRow={isRow} />\n </PopupList.Button>\n <PopupList.Button\n className={pasteClassName}\n disabled={!allowPaste}\n onClick={() => {\n void handlePaste()\n close()\n }}\n >\n <ClipboardActionLabel isPaste isRow={isRow} />\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n size=\"large\"\n verticalAlign=\"bottom\"\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ClipboardPasteActionValidateArgs } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Validates whether clipboard data is compatible with the target schema.
|
|
4
|
+
* For this to be true, the copied field and the target to be pasted must
|
|
5
|
+
* be structurally equivalent (same schema)
|
|
6
|
+
*
|
|
7
|
+
* @returns True if the clipboard data is valid and can be pasted, false otherwise
|
|
8
|
+
*/
|
|
9
|
+
export declare function isClipboardDataValid({ data, path, ...args }: ClipboardPasteActionValidateArgs): boolean;
|
|
10
|
+
//# sourceMappingURL=isClipboardDataValid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isClipboardDataValid.d.ts","sourceRoot":"","sources":["../../../src/elements/ClipboardAction/isClipboardDataValid.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAA;AAElE;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,gCAAgC,WAgB7F"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { fieldAffectsData, fieldHasSubFields } from 'payload/shared';
|
|
2
|
+
/**
|
|
3
|
+
* Validates whether clipboard data is compatible with the target schema.
|
|
4
|
+
* For this to be true, the copied field and the target to be pasted must
|
|
5
|
+
* be structurally equivalent (same schema)
|
|
6
|
+
*
|
|
7
|
+
* @returns True if the clipboard data is valid and can be pasted, false otherwise
|
|
8
|
+
*/
|
|
9
|
+
export function isClipboardDataValid({
|
|
10
|
+
data,
|
|
11
|
+
path,
|
|
12
|
+
...args
|
|
13
|
+
}) {
|
|
14
|
+
if (typeof data === 'undefined' || !path || !args.type) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (args.type === 'blocks') {
|
|
18
|
+
return isClipboardBlocksValid({
|
|
19
|
+
blocksFromClipboard: args.blocks,
|
|
20
|
+
blocksFromConfig: args.schemaBlocks
|
|
21
|
+
});
|
|
22
|
+
} else {
|
|
23
|
+
return isClipboardFieldsValid({
|
|
24
|
+
fieldsFromClipboard: args.fields,
|
|
25
|
+
fieldsFromConfig: args.schemaFields
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function isClipboardFieldsValid({
|
|
30
|
+
fieldsFromClipboard,
|
|
31
|
+
fieldsFromConfig
|
|
32
|
+
}) {
|
|
33
|
+
if (!fieldsFromConfig || fieldsFromClipboard.length !== fieldsFromConfig?.length) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
return fieldsFromClipboard.every((clipboardField, i) => {
|
|
37
|
+
const configField = fieldsFromConfig[i];
|
|
38
|
+
if (clipboardField.type !== configField.type) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
const affectsData = fieldAffectsData(clipboardField) && fieldAffectsData(configField);
|
|
42
|
+
if (affectsData && clipboardField.name !== configField.name) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const hasNestedFieldsConfig = fieldHasSubFields(configField);
|
|
46
|
+
const hasNestedFieldsClipboard = fieldHasSubFields(clipboardField);
|
|
47
|
+
if (hasNestedFieldsClipboard !== hasNestedFieldsConfig) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
if (hasNestedFieldsClipboard && hasNestedFieldsConfig) {
|
|
51
|
+
return isClipboardFieldsValid({
|
|
52
|
+
fieldsFromClipboard: clipboardField.fields,
|
|
53
|
+
fieldsFromConfig: configField.fields
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function isClipboardBlocksValid({
|
|
60
|
+
blocksFromClipboard,
|
|
61
|
+
blocksFromConfig
|
|
62
|
+
}) {
|
|
63
|
+
const configBlockMap = new Map(blocksFromConfig?.map(block => [block.slug, block]));
|
|
64
|
+
if (!configBlockMap.size) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
const checkedSlugs = new Set();
|
|
68
|
+
for (const currBlock of blocksFromClipboard) {
|
|
69
|
+
const currSlug = currBlock.slug;
|
|
70
|
+
if (!checkedSlugs.has(currSlug)) {
|
|
71
|
+
const configBlock = configBlockMap.get(currSlug);
|
|
72
|
+
if (!configBlock) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
if (!isClipboardFieldsValid({
|
|
76
|
+
fieldsFromClipboard: currBlock.fields,
|
|
77
|
+
fieldsFromConfig: configBlock.fields
|
|
78
|
+
})) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
checkedSlugs.add(currSlug);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=isClipboardDataValid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isClipboardDataValid.js","names":["fieldAffectsData","fieldHasSubFields","isClipboardDataValid","data","path","args","type","isClipboardBlocksValid","blocksFromClipboard","blocks","blocksFromConfig","schemaBlocks","isClipboardFieldsValid","fieldsFromClipboard","fields","fieldsFromConfig","schemaFields","length","every","clipboardField","i","configField","affectsData","name","hasNestedFieldsConfig","hasNestedFieldsClipboard","configBlockMap","Map","map","block","slug","size","checkedSlugs","Set","currBlock","currSlug","has","configBlock","get","add"],"sources":["../../../src/elements/ClipboardAction/isClipboardDataValid.ts"],"sourcesContent":["import type { ClientBlock, ClientField } from 'payload'\n\nimport { fieldAffectsData, fieldHasSubFields } from 'payload/shared'\n\nimport type { ClipboardPasteActionValidateArgs } from './types.js'\n\n/**\n * Validates whether clipboard data is compatible with the target schema.\n * For this to be true, the copied field and the target to be pasted must\n * be structurally equivalent (same schema)\n *\n * @returns True if the clipboard data is valid and can be pasted, false otherwise\n */\nexport function isClipboardDataValid({ data, path, ...args }: ClipboardPasteActionValidateArgs) {\n if (typeof data === 'undefined' || !path || !args.type) {\n return false\n }\n\n if (args.type === 'blocks') {\n return isClipboardBlocksValid({\n blocksFromClipboard: args.blocks,\n blocksFromConfig: args.schemaBlocks,\n })\n } else {\n return isClipboardFieldsValid({\n fieldsFromClipboard: args.fields,\n fieldsFromConfig: args.schemaFields,\n })\n }\n}\n\nfunction isClipboardFieldsValid({\n fieldsFromClipboard,\n fieldsFromConfig,\n}: {\n fieldsFromClipboard: ClientField[]\n fieldsFromConfig?: ClientField[]\n}): boolean {\n if (!fieldsFromConfig || fieldsFromClipboard.length !== fieldsFromConfig?.length) {\n return false\n }\n\n return fieldsFromClipboard.every((clipboardField, i) => {\n const configField = fieldsFromConfig[i]\n\n if (clipboardField.type !== configField.type) {\n return false\n }\n\n const affectsData = fieldAffectsData(clipboardField) && fieldAffectsData(configField)\n if (affectsData && clipboardField.name !== configField.name) {\n return false\n }\n\n const hasNestedFieldsConfig = fieldHasSubFields(configField)\n const hasNestedFieldsClipboard = fieldHasSubFields(clipboardField)\n if (hasNestedFieldsClipboard !== hasNestedFieldsConfig) {\n return false\n }\n\n if (hasNestedFieldsClipboard && hasNestedFieldsConfig) {\n return isClipboardFieldsValid({\n fieldsFromClipboard: clipboardField.fields,\n fieldsFromConfig: configField.fields,\n })\n }\n\n return true\n })\n}\n\nfunction isClipboardBlocksValid({\n blocksFromClipboard,\n blocksFromConfig,\n}: {\n blocksFromClipboard: ClientBlock[]\n blocksFromConfig?: ClientBlock[]\n}) {\n const configBlockMap = new Map(blocksFromConfig?.map((block) => [block.slug, block]))\n\n if (!configBlockMap.size) {\n return false\n }\n\n const checkedSlugs = new Set<string>()\n\n for (const currBlock of blocksFromClipboard) {\n const currSlug = currBlock.slug\n\n if (!checkedSlugs.has(currSlug)) {\n const configBlock = configBlockMap.get(currSlug)\n if (!configBlock) {\n return false\n }\n\n if (\n !isClipboardFieldsValid({\n fieldsFromClipboard: currBlock.fields,\n fieldsFromConfig: configBlock.fields,\n })\n ) {\n return false\n }\n\n checkedSlugs.add(currSlug)\n }\n }\n return true\n}\n"],"mappings":"AAEA,SAASA,gBAAgB,EAAEC,iBAAiB,QAAQ;AAIpD;;;;;;;AAOA,OAAO,SAASC,qBAAqB;EAAEC,IAAI;EAAEC,IAAI;EAAE,GAAGC;AAAA,CAAwC;EAC5F,IAAI,OAAOF,IAAA,KAAS,eAAe,CAACC,IAAA,IAAQ,CAACC,IAAA,CAAKC,IAAI,EAAE;IACtD,OAAO;EACT;EAEA,IAAID,IAAA,CAAKC,IAAI,KAAK,UAAU;IAC1B,OAAOC,sBAAA,CAAuB;MAC5BC,mBAAA,EAAqBH,IAAA,CAAKI,MAAM;MAChCC,gBAAA,EAAkBL,IAAA,CAAKM;IACzB;EACF,OAAO;IACL,OAAOC,sBAAA,CAAuB;MAC5BC,mBAAA,EAAqBR,IAAA,CAAKS,MAAM;MAChCC,gBAAA,EAAkBV,IAAA,CAAKW;IACzB;EACF;AACF;AAEA,SAASJ,uBAAuB;EAC9BC,mBAAmB;EACnBE;AAAgB,CAIjB;EACC,IAAI,CAACA,gBAAA,IAAoBF,mBAAA,CAAoBI,MAAM,KAAKF,gBAAA,EAAkBE,MAAA,EAAQ;IAChF,OAAO;EACT;EAEA,OAAOJ,mBAAA,CAAoBK,KAAK,CAAC,CAACC,cAAA,EAAgBC,CAAA;IAChD,MAAMC,WAAA,GAAcN,gBAAgB,CAACK,CAAA,CAAE;IAEvC,IAAID,cAAA,CAAeb,IAAI,KAAKe,WAAA,CAAYf,IAAI,EAAE;MAC5C,OAAO;IACT;IAEA,MAAMgB,WAAA,GAActB,gBAAA,CAAiBmB,cAAA,KAAmBnB,gBAAA,CAAiBqB,WAAA;IACzE,IAAIC,WAAA,IAAeH,cAAA,CAAeI,IAAI,KAAKF,WAAA,CAAYE,IAAI,EAAE;MAC3D,OAAO;IACT;IAEA,MAAMC,qBAAA,GAAwBvB,iBAAA,CAAkBoB,WAAA;IAChD,MAAMI,wBAAA,GAA2BxB,iBAAA,CAAkBkB,cAAA;IACnD,IAAIM,wBAAA,KAA6BD,qBAAA,EAAuB;MACtD,OAAO;IACT;IAEA,IAAIC,wBAAA,IAA4BD,qBAAA,EAAuB;MACrD,OAAOZ,sBAAA,CAAuB;QAC5BC,mBAAA,EAAqBM,cAAA,CAAeL,MAAM;QAC1CC,gBAAA,EAAkBM,WAAA,CAAYP;MAChC;IACF;IAEA,OAAO;EACT;AACF;AAEA,SAASP,uBAAuB;EAC9BC,mBAAmB;EACnBE;AAAgB,CAIjB;EACC,MAAMgB,cAAA,GAAiB,IAAIC,GAAA,CAAIjB,gBAAA,EAAkBkB,GAAA,CAAKC,KAAA,IAAU,CAACA,KAAA,CAAMC,IAAI,EAAED,KAAA,CAAM;EAEnF,IAAI,CAACH,cAAA,CAAeK,IAAI,EAAE;IACxB,OAAO;EACT;EAEA,MAAMC,YAAA,GAAe,IAAIC,GAAA;EAEzB,KAAK,MAAMC,SAAA,IAAa1B,mBAAA,EAAqB;IAC3C,MAAM2B,QAAA,GAAWD,SAAA,CAAUJ,IAAI;IAE/B,IAAI,CAACE,YAAA,CAAaI,GAAG,CAACD,QAAA,GAAW;MAC/B,MAAME,WAAA,GAAcX,cAAA,CAAeY,GAAG,CAACH,QAAA;MACvC,IAAI,CAACE,WAAA,EAAa;QAChB,OAAO;MACT;MAEA,IACE,CAACzB,sBAAA,CAAuB;QACtBC,mBAAA,EAAqBqB,SAAA,CAAUpB,MAAM;QACrCC,gBAAA,EAAkBsB,WAAA,CAAYvB;MAChC,IACA;QACA,OAAO;MACT;MAEAkB,YAAA,CAAaO,GAAG,CAACJ,QAAA;IACnB;EACF;EACA,OAAO;AACT","ignoreList":[]}
|