@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.
Files changed (83) hide show
  1. package/dist/elements/ArrayAction/index.d.ts +2 -0
  2. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  3. package/dist/elements/ArrayAction/index.js +37 -13
  4. package/dist/elements/ArrayAction/index.js.map +1 -1
  5. package/dist/elements/ClipboardAction/ClipboardActionLabel.d.ts +5 -0
  6. package/dist/elements/ClipboardAction/ClipboardActionLabel.d.ts.map +1 -0
  7. package/dist/elements/ClipboardAction/ClipboardActionLabel.js +44 -0
  8. package/dist/elements/ClipboardAction/ClipboardActionLabel.js.map +1 -0
  9. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts +10 -0
  10. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts.map +1 -0
  11. package/dist/elements/ClipboardAction/clipboardUtilities.js +53 -0
  12. package/dist/elements/ClipboardAction/clipboardUtilities.js.map +1 -0
  13. package/dist/elements/ClipboardAction/index.d.ts +21 -0
  14. package/dist/elements/ClipboardAction/index.d.ts.map +1 -0
  15. package/dist/elements/ClipboardAction/index.js +197 -0
  16. package/dist/elements/ClipboardAction/index.js.map +1 -0
  17. package/dist/elements/ClipboardAction/isClipboardDataValid.d.ts +10 -0
  18. package/dist/elements/ClipboardAction/isClipboardDataValid.d.ts.map +1 -0
  19. package/dist/elements/ClipboardAction/isClipboardDataValid.js +86 -0
  20. package/dist/elements/ClipboardAction/isClipboardDataValid.js.map +1 -0
  21. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts +14 -0
  22. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -0
  23. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +100 -0
  24. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -0
  25. package/dist/elements/ClipboardAction/types.d.ts +45 -0
  26. package/dist/elements/ClipboardAction/types.d.ts.map +1 -0
  27. package/dist/elements/ClipboardAction/types.js +2 -0
  28. package/dist/elements/ClipboardAction/types.js.map +1 -0
  29. package/dist/elements/DatePicker/index.scss +18 -0
  30. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  31. package/dist/elements/PublishButton/ScheduleDrawer/index.js +10 -1
  32. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  33. package/dist/elements/ReactSelect/ClearIndicator/index.scss +1 -0
  34. package/dist/elements/ReactSelect/DropdownIndicator/index.scss +1 -0
  35. package/dist/exports/client/index.js +22 -22
  36. package/dist/exports/client/index.js.map +4 -4
  37. package/dist/exports/shared/index.js +2 -2
  38. package/dist/exports/shared/index.js.map +4 -4
  39. package/dist/fields/Array/ArrayRow.d.ts +2 -0
  40. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  41. package/dist/fields/Array/ArrayRow.js +49 -43
  42. package/dist/fields/Array/ArrayRow.js.map +1 -1
  43. package/dist/fields/Array/index.d.ts.map +1 -1
  44. package/dist/fields/Array/index.js +176 -43
  45. package/dist/fields/Array/index.js.map +1 -1
  46. package/dist/fields/Array/index.scss +17 -3
  47. package/dist/fields/Blocks/BlockRow.d.ts +2 -0
  48. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  49. package/dist/fields/Blocks/BlockRow.js +41 -35
  50. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  51. package/dist/fields/Blocks/RowActions.d.ts +2 -0
  52. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  53. package/dist/fields/Blocks/RowActions.js +32 -26
  54. package/dist/fields/Blocks/RowActions.js.map +1 -1
  55. package/dist/fields/Blocks/index.d.ts.map +1 -1
  56. package/dist/fields/Blocks/index.js +295 -348
  57. package/dist/fields/Blocks/index.js.map +1 -1
  58. package/dist/fields/Hidden/index.js +19 -17
  59. package/dist/fields/Hidden/index.js.map +1 -1
  60. package/dist/forms/useField/index.d.ts.map +1 -1
  61. package/dist/forms/useField/index.js +1 -2
  62. package/dist/forms/useField/index.js.map +1 -1
  63. package/dist/providers/LivePreview/index.d.ts +1 -1
  64. package/dist/providers/LivePreview/index.d.ts.map +1 -1
  65. package/dist/providers/LivePreview/index.js +1 -2
  66. package/dist/providers/LivePreview/index.js.map +1 -1
  67. package/dist/styles.css +1 -1
  68. package/dist/utilities/buildFormState.js +1 -1
  69. package/dist/utilities/buildFormState.js.map +1 -1
  70. package/dist/utilities/buildTableState.js +1 -0
  71. package/dist/utilities/buildTableState.js.map +1 -1
  72. package/dist/utilities/formatDocTitle/formatRelationshipTitle.d.ts +2 -0
  73. package/dist/utilities/formatDocTitle/formatRelationshipTitle.d.ts.map +1 -0
  74. package/dist/utilities/formatDocTitle/formatRelationshipTitle.js +15 -0
  75. package/dist/utilities/formatDocTitle/formatRelationshipTitle.js.map +1 -0
  76. package/dist/utilities/formatDocTitle/index.d.ts.map +1 -1
  77. package/dist/utilities/formatDocTitle/index.js +6 -0
  78. package/dist/utilities/formatDocTitle/index.js.map +1 -1
  79. package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
  80. package/dist/views/Edit/Auth/APIKey.js +27 -10
  81. package/dist/views/Edit/Auth/APIKey.js.map +1 -1
  82. package/dist/views/Edit/Auth/index.scss +31 -5
  83. 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;AAIrB,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,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,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,CAyFvC,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 { Popup, PopupList } from '../Popup/index.js';
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(10);
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] !== duplicateRow || $[2] !== hasMaxRows || $[3] !== index || $[4] !== isSortable || $[5] !== moveRow || $[6] !== removeRow || $[7] !== rowCount || $[8] !== t) {
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] = duplicateRow;
95
- $[2] = hasMaxRows;
96
- $[3] = index;
97
- $[4] = isSortable;
98
- $[5] = moveRow;
99
- $[6] = removeRow;
100
- $[7] = rowCount;
101
- $[8] = t;
102
- $[9] = t1;
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 = $[9];
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 { Popup, PopupList } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'array-actions'\n\nexport type Props = {\n addRow: (current: number, blockType?: string) => Promise<void> | void\n duplicateRow: (current: number) => void\n hasMaxRows: boolean\n index: number\n isSortable?: boolean\n moveRow: (from: number, to: number) => void\n removeRow: (index: number) => void\n rowCount: number\n}\n\nexport const ArrayAction: React.FC<Props> = ({\n addRow,\n duplicateRow,\n hasMaxRows,\n index,\n isSortable,\n moveRow,\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}__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":[]}
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,5 @@
1
+ export declare const ClipboardActionLabel: ({ isPaste, isRow, }: {
2
+ isPaste?: boolean;
3
+ isRow?: boolean;
4
+ }) => import("react").JSX.Element;
5
+ //# sourceMappingURL=ClipboardActionLabel.d.ts.map
@@ -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":[]}