@payloadcms/richtext-lexical 4.0.0-internal.934870d → 4.0.0-internal.94ef095

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 (197) hide show
  1. package/dist/exports/client/Field-334JNLRF.js +2 -0
  2. package/dist/exports/client/Field-334JNLRF.js.map +7 -0
  3. package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js → RelationshipComponent-TVK6I4W4.js} +2 -2
  4. package/dist/exports/client/chunk-3V7KW5XF.js +2 -0
  5. package/dist/exports/client/chunk-3V7KW5XF.js.map +7 -0
  6. package/dist/exports/client/chunk-A7DZCL6D.js +2 -0
  7. package/dist/exports/client/chunk-A7DZCL6D.js.map +7 -0
  8. package/dist/exports/client/{chunk-WSAPGI3Z.js → chunk-EA5BHQ2T.js} +1 -1
  9. package/dist/exports/client/{chunk-WSAPGI3Z.js.map → chunk-EA5BHQ2T.js.map} +1 -1
  10. package/dist/exports/client/chunk-FAJJXXCW.js +2 -0
  11. package/dist/exports/client/{chunk-3LRZDIIG.js.map → chunk-FAJJXXCW.js.map} +2 -2
  12. package/dist/exports/client/{chunk-5VIL27GI.js → chunk-IYBYNEKX.js} +1 -1
  13. package/dist/exports/client/{chunk-5VIL27GI.js.map → chunk-IYBYNEKX.js.map} +1 -1
  14. package/dist/exports/client/{component-6DQLENIE.js → component-FCCSBBZG.js} +2 -2
  15. package/dist/exports/client/componentInline-7FQV2X7Z.js +2 -0
  16. package/dist/exports/client/index.js +27 -27
  17. package/dist/exports/client/index.js.map +3 -3
  18. package/dist/features/align/client/index.js.map +1 -1
  19. package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
  20. package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -1
  21. package/dist/features/blocks/client/component/components/BlockEditButton.js.map +1 -1
  22. package/dist/features/blocks/client/component/components/BlockRemoveButton.js.map +1 -1
  23. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  24. package/dist/features/blocks/client/component/index.js +62 -85
  25. package/dist/features/blocks/client/component/index.js.map +1 -1
  26. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
  27. package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js.map +1 -1
  28. package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js.map +1 -1
  29. package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js.map +1 -1
  30. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  31. package/dist/features/blocks/client/componentInline/index.js +22 -69
  32. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  33. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.d.ts +0 -1
  34. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.d.ts.map +1 -1
  35. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js +7 -30
  36. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js.map +1 -1
  37. package/dist/features/blocks/client/plugin/index.js.map +1 -1
  38. package/dist/features/blocks/premade/CodeBlock/Component/Block.js +121 -78
  39. package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +1 -1
  40. package/dist/features/blocks/premade/CodeBlock/Component/Code.js +142 -87
  41. package/dist/features/blocks/premade/CodeBlock/Component/Code.js.map +1 -1
  42. package/dist/features/converters/lexicalToHtml/async/converters/table.d.ts.map +1 -1
  43. package/dist/features/converters/lexicalToHtml/async/converters/table.js +6 -4
  44. package/dist/features/converters/lexicalToHtml/async/converters/table.js.map +1 -1
  45. package/dist/features/converters/lexicalToHtml/async/converters/upload.d.ts.map +1 -1
  46. package/dist/features/converters/lexicalToHtml/async/converters/upload.js +2 -1
  47. package/dist/features/converters/lexicalToHtml/async/converters/upload.js.map +1 -1
  48. package/dist/features/converters/lexicalToHtml/sync/converters/table.d.ts.map +1 -1
  49. package/dist/features/converters/lexicalToHtml/sync/converters/table.js +6 -4
  50. package/dist/features/converters/lexicalToHtml/sync/converters/table.js.map +1 -1
  51. package/dist/features/converters/lexicalToHtml/sync/converters/upload.d.ts.map +1 -1
  52. package/dist/features/converters/lexicalToHtml/sync/converters/upload.js +2 -1
  53. package/dist/features/converters/lexicalToHtml/sync/converters/upload.js.map +1 -1
  54. package/dist/features/converters/lexicalToHtml/sync/types.d.ts.map +1 -1
  55. package/dist/features/converters/lexicalToHtml/sync/types.js.map +1 -1
  56. package/dist/features/converters/lexicalToJSX/converter/converters/table.d.ts.map +1 -1
  57. package/dist/features/converters/lexicalToJSX/converter/converters/table.js +3 -2
  58. package/dist/features/converters/lexicalToJSX/converter/converters/table.js.map +1 -1
  59. package/dist/features/debug/jsxConverter/client/plugin/index.js.map +1 -1
  60. package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
  61. package/dist/features/debug/treeView/client/plugin/index.js.map +1 -1
  62. package/dist/features/heading/client/index.js.map +1 -1
  63. package/dist/features/horizontalRule/client/plugin/index.js.map +1 -1
  64. package/dist/features/indent/client/index.d.ts.map +1 -1
  65. package/dist/features/indent/client/index.js +0 -2
  66. package/dist/features/indent/client/index.js.map +1 -1
  67. package/dist/features/indent/server/i18n.d.ts.map +1 -1
  68. package/dist/features/indent/server/i18n.js.map +1 -1
  69. package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
  70. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  71. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +12 -4
  72. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  73. package/dist/features/link/client/plugins/link/index.js.map +1 -1
  74. package/dist/features/link/markdownTransformer.js +2 -2
  75. package/dist/features/link/markdownTransformer.js.map +1 -1
  76. package/dist/features/link/server/baseFields.js.map +1 -1
  77. package/dist/features/lists/shared/schema.d.ts.map +1 -1
  78. package/dist/features/lists/shared/schema.js.map +1 -1
  79. package/dist/features/relationship/client/drawer/index.js.map +1 -1
  80. package/dist/features/relationship/client/plugins/index.js.map +1 -1
  81. package/dist/features/relationship/client/utils/useEnabledRelationships.js.map +1 -1
  82. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.css +1 -1
  83. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  84. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js +7 -7
  85. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  86. package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  87. package/dist/features/table/client/plugins/TablePlugin/index.js +54 -18
  88. package/dist/features/table/client/plugins/TablePlugin/index.js.map +1 -1
  89. package/dist/features/table/client/utils/useDebounce.js.map +1 -1
  90. package/dist/features/table/server/index.d.ts.map +1 -1
  91. package/dist/features/table/server/index.js +3 -1
  92. package/dist/features/table/server/index.js.map +1 -1
  93. package/dist/features/table/server/validate.d.ts +4 -0
  94. package/dist/features/table/server/validate.d.ts.map +1 -0
  95. package/dist/features/table/server/validate.js +15 -0
  96. package/dist/features/table/server/validate.js.map +1 -0
  97. package/dist/features/textState/defaultColors.js +1 -1
  98. package/dist/features/textState/defaultColors.js.map +1 -1
  99. package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js.map +1 -1
  100. package/dist/features/toolbars/fixed/client/Toolbar/index.js +126 -70
  101. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  102. package/dist/features/toolbars/inline/client/Toolbar/index.js +67 -35
  103. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  104. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  105. package/dist/features/toolbars/shared/ToolbarButton/index.js +26 -2
  106. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  107. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +137 -72
  108. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  109. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  110. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +22 -6
  111. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  112. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js +100 -70
  113. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js.map +1 -1
  114. package/dist/features/upload/client/drawer/index.js.map +1 -1
  115. package/dist/features/upload/client/plugin/index.js.map +1 -1
  116. package/dist/field/Diff/converters/upload/index.d.ts.map +1 -1
  117. package/dist/field/Diff/converters/upload/index.js +8 -7
  118. package/dist/field/Diff/converters/upload/index.js.map +1 -1
  119. package/dist/field/Diff/index.d.ts.map +1 -1
  120. package/dist/field/Diff/index.js +1 -0
  121. package/dist/field/Diff/index.js.map +1 -1
  122. package/dist/field/RenderLexical/index.js.map +1 -1
  123. package/dist/field/ViewSelector.js +12 -4
  124. package/dist/field/ViewSelector.js.map +1 -1
  125. package/dist/field/bundled.css +1 -1
  126. package/dist/field/index.js.map +1 -1
  127. package/dist/i18n.d.ts.map +1 -1
  128. package/dist/i18n.js +44 -0
  129. package/dist/i18n.js.map +1 -1
  130. package/dist/index.d.ts +1 -1
  131. package/dist/index.js +1 -1
  132. package/dist/index.js.map +1 -1
  133. package/dist/lexical/LexicalEditor.js.map +1 -1
  134. package/dist/lexical/plugins/ClipboardPlugin/index.js.map +1 -1
  135. package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
  136. package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
  137. package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
  138. package/dist/lexical/plugins/NodeViewOverridePlugin/index.js.map +1 -1
  139. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +234 -87
  140. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  141. package/dist/lexical/plugins/SlashMenu/useMenuTriggerMatch.js.map +1 -1
  142. package/dist/lexical/plugins/TextPlugin/index.js.map +1 -1
  143. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  144. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +16 -0
  145. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  146. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +126 -38
  147. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  148. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.d.ts +7 -0
  149. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.d.ts.map +1 -0
  150. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.js +15 -0
  151. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.js.map +1 -0
  152. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts.map +1 -1
  153. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js +9 -12
  154. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -1
  155. package/dist/lexical/ui/ContentEditable.d.ts.map +1 -1
  156. package/dist/lexical/ui/ContentEditable.js +16 -9
  157. package/dist/lexical/ui/ContentEditable.js.map +1 -1
  158. package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
  159. package/dist/lexical/utils/nodeFormat.js +0 -2
  160. package/dist/lexical/utils/nodeFormat.js.map +1 -1
  161. package/dist/lexical/utils/url.d.ts.map +1 -1
  162. package/dist/lexical/utils/url.js +1 -1
  163. package/dist/lexical/utils/url.js.map +1 -1
  164. package/dist/populateGraphQL/populate.d.ts.map +1 -1
  165. package/dist/populateGraphQL/populate.js +4 -1
  166. package/dist/populateGraphQL/populate.js.map +1 -1
  167. package/dist/types/index.d.ts.map +1 -1
  168. package/dist/types/index.js.map +1 -1
  169. package/dist/utilities/buildEditorState.d.ts.map +1 -1
  170. package/dist/utilities/buildEditorState.js.map +1 -1
  171. package/dist/utilities/fieldsDrawer/Drawer.js +36 -36
  172. package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
  173. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  174. package/dist/utilities/fieldsDrawer/DrawerContent.js +127 -107
  175. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  176. package/dist/utilities/fieldsDrawer/useDrawerSubmit.js.map +1 -1
  177. package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js.map +1 -1
  178. package/dist/utilities/fieldsDrawer/useLexicalDrawer.js.map +1 -1
  179. package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js.map +1 -1
  180. package/dist/utilities/initLexicalFeatures.d.ts.map +1 -1
  181. package/dist/utilities/initLexicalFeatures.js +38 -4
  182. package/dist/utilities/initLexicalFeatures.js.map +1 -1
  183. package/dist/utilities/useLexicalFeature.js +15 -6
  184. package/dist/utilities/useLexicalFeature.js.map +1 -1
  185. package/dist/utilities/useRunDeprioritized.js.map +1 -1
  186. package/package.json +47 -50
  187. package/dist/exports/client/Field-MT4FK3IP.js +0 -2
  188. package/dist/exports/client/Field-MT4FK3IP.js.map +0 -7
  189. package/dist/exports/client/chunk-3LRZDIIG.js +0 -2
  190. package/dist/exports/client/chunk-E6LSRRP2.js +0 -2
  191. package/dist/exports/client/chunk-E6LSRRP2.js.map +0 -7
  192. package/dist/exports/client/chunk-ZQX5HXUL.js +0 -2
  193. package/dist/exports/client/chunk-ZQX5HXUL.js.map +0 -7
  194. package/dist/exports/client/componentInline-HNE5G4TE.js +0 -2
  195. /package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js.map → RelationshipComponent-TVK6I4W4.js.map} +0 -0
  196. /package/dist/exports/client/{component-6DQLENIE.js.map → component-FCCSBBZG.js.map} +0 -0
  197. /package/dist/exports/client/{componentInline-HNE5G4TE.js.map → componentInline-7FQV2X7Z.js.map} +0 -0
@@ -1,25 +1,27 @@
1
1
  'use client';
2
2
 
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
5
  import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
5
- import { Form, RenderFields, useDocumentForm, useDocumentInfo, useServerFunctions } from '@payloadcms/ui';
6
+ import { Form, RenderFields, useDocumentForm, useDocumentInfo, useEffectEvent, useOperation, useServerFunctions } from '@payloadcms/ui';
6
7
  import { abortAndIgnore } from '@payloadcms/ui/shared';
7
- import { deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared';
8
- import React, { useCallback, useEffect, useRef, useState } from 'react';
8
+ import React, { useEffect, useState } from 'react';
9
9
  import { v4 as uuid } from 'uuid';
10
10
  import { useEditorConfigContext } from '../../lexical/config/client/EditorConfigProvider.js';
11
11
  import { RegisterFormSubmit } from './useDrawerSubmit.js';
12
12
  import './index.css';
13
- export const DrawerContent = ({
14
- data,
15
- featureKey,
16
- fieldMapOverride,
17
- handleDrawerSubmit,
18
- schemaFieldsPathOverride,
19
- schemaPath,
20
- schemaPathSuffix,
21
- submitRef
22
- }) => {
13
+ export const DrawerContent = t0 => {
14
+ const $ = _c(30);
15
+ const {
16
+ data,
17
+ featureKey,
18
+ fieldMapOverride,
19
+ handleDrawerSubmit,
20
+ schemaFieldsPathOverride,
21
+ schemaPath,
22
+ schemaPathSuffix,
23
+ submitRef
24
+ } = t0;
23
25
  const {
24
26
  id,
25
27
  collectionSlug,
@@ -30,110 +32,128 @@ export const DrawerContent = ({
30
32
  fields: parentDocumentFields
31
33
  } = useDocumentForm();
32
34
  const isEditable = useLexicalEditable();
33
- const onChangeAbortControllerRef = useRef(new AbortController());
35
+ const operation = useOperation();
34
36
  const [initialState, setInitialState] = useState(false);
35
37
  const {
36
- fieldProps: {
37
- featureClientSchemaMap
38
- }
38
+ fieldProps: t1
39
39
  } = useEditorConfigContext();
40
+ const {
41
+ featureClientSchemaMap
42
+ } = t1;
40
43
  const {
41
44
  getFormState
42
45
  } = useServerFunctions();
43
- const schemaFieldsPath = schemaFieldsPathOverride ?? `${schemaPath}.lexical_internal_feature.${featureKey}${schemaPathSuffix ? `.${schemaPathSuffix}` : ''}`;
44
- const fields = fieldMapOverride ?? featureClientSchemaMap[featureKey]?.[schemaFieldsPath] // Field Schema
45
- ;
46
- useEffect(() => {
47
- const controller = new AbortController();
48
- const awaitInitialState = async () => {
49
- const {
50
- state
51
- } = await getFormState({
52
- id,
53
- collectionSlug,
54
- data: data ?? {},
55
- docPermissions: {
56
- fields: true
57
- },
58
- docPreferences: await getDocPreferences(),
59
- documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields, {
60
- excludeFiles: true
61
- }),
62
- globalSlug,
63
- initialBlockData: data,
64
- operation: 'update',
65
- readOnly: !isEditable,
66
- renderAllFields: true,
67
- schemaPath: schemaFieldsPath,
68
- signal: controller.signal
69
- });
70
- setInitialState(state);
71
- };
72
- void awaitInitialState();
73
- return () => {
74
- abortAndIgnore(controller);
75
- };
76
- }, [schemaFieldsPath, id, data, getFormState, collectionSlug, isEditable, globalSlug, getDocPreferences, parentDocumentFields]);
77
- const onChange = useCallback(async ({
78
- formState: prevFormState
79
- }) => {
80
- abortAndIgnore(onChangeAbortControllerRef.current);
81
- const controller_0 = new AbortController();
82
- onChangeAbortControllerRef.current = controller_0;
83
- const {
84
- state: state_0
85
- } = await getFormState({
86
- id,
87
- collectionSlug,
88
- docPermissions: {
89
- fields: true
90
- },
91
- docPreferences: await getDocPreferences(),
92
- documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields, {
93
- excludeFiles: true
94
- }),
95
- formState: prevFormState,
96
- globalSlug,
97
- initialBlockFormState: prevFormState,
98
- operation: 'update',
99
- readOnly: !isEditable,
100
- schemaPath: schemaFieldsPath,
101
- signal: controller_0.signal
102
- });
103
- if (!state_0) {
104
- return prevFormState;
105
- }
106
- return state_0;
107
- }, [getFormState, id, isEditable, collectionSlug, getDocPreferences, parentDocumentFields, globalSlug, schemaFieldsPath]);
108
- // cleanup effect
109
- useEffect(() => {
110
- return () => {
111
- abortAndIgnore(onChangeAbortControllerRef.current);
46
+ const schemaFieldsPath = schemaFieldsPathOverride ?? `${schemaPath}.lexical_internal_feature.${featureKey}${schemaPathSuffix ? `.${schemaPathSuffix}` : ""}`;
47
+ const fields = fieldMapOverride ?? featureClientSchemaMap[featureKey]?.[schemaFieldsPath];
48
+ let t2;
49
+ if ($[0] !== parentDocumentFields) {
50
+ t2 = () => parentDocumentFields;
51
+ $[0] = parentDocumentFields;
52
+ $[1] = t2;
53
+ } else {
54
+ t2 = $[1];
55
+ }
56
+ const getParentDocumentFields = useEffectEvent(t2);
57
+ let t3;
58
+ if ($[2] !== collectionSlug || $[3] !== data || $[4] !== getDocPreferences || $[5] !== getFormState || $[6] !== getParentDocumentFields || $[7] !== globalSlug || $[8] !== id || $[9] !== isEditable || $[10] !== operation || $[11] !== schemaFieldsPath) {
59
+ t3 = () => {
60
+ const controller = new AbortController();
61
+ const awaitInitialState = async () => {
62
+ const {
63
+ state
64
+ } = await getFormState({
65
+ id,
66
+ collectionSlug,
67
+ data: data ?? {},
68
+ docPermissions: {
69
+ fields: true
70
+ },
71
+ docPreferences: await getDocPreferences(),
72
+ documentFormState: getParentDocumentFields(),
73
+ globalSlug,
74
+ initialBlockData: data,
75
+ operation,
76
+ readOnly: !isEditable,
77
+ renderAllFields: true,
78
+ schemaPath: schemaFieldsPath,
79
+ signal: controller.signal
80
+ });
81
+ if (!controller.signal.aborted && state) {
82
+ setInitialState(state);
83
+ }
84
+ };
85
+ awaitInitialState();
86
+ return () => {
87
+ abortAndIgnore(controller);
88
+ };
112
89
  };
113
- }, []);
90
+ $[2] = collectionSlug;
91
+ $[3] = data;
92
+ $[4] = getDocPreferences;
93
+ $[5] = getFormState;
94
+ $[6] = getParentDocumentFields;
95
+ $[7] = globalSlug;
96
+ $[8] = id;
97
+ $[9] = isEditable;
98
+ $[10] = operation;
99
+ $[11] = schemaFieldsPath;
100
+ $[12] = t3;
101
+ } else {
102
+ t3 = $[12];
103
+ }
104
+ let t4;
105
+ if ($[13] !== collectionSlug || $[14] !== data || $[15] !== getDocPreferences || $[16] !== getFormState || $[17] !== globalSlug || $[18] !== id || $[19] !== isEditable || $[20] !== operation || $[21] !== schemaFieldsPath) {
106
+ t4 = [schemaFieldsPath, id, data, getFormState, collectionSlug, isEditable, globalSlug, getDocPreferences, operation];
107
+ $[13] = collectionSlug;
108
+ $[14] = data;
109
+ $[15] = getDocPreferences;
110
+ $[16] = getFormState;
111
+ $[17] = globalSlug;
112
+ $[18] = id;
113
+ $[19] = isEditable;
114
+ $[20] = operation;
115
+ $[21] = schemaFieldsPath;
116
+ $[22] = t4;
117
+ } else {
118
+ t4 = $[22];
119
+ }
120
+ useEffect(t3, t4);
114
121
  if (initialState === false) {
115
122
  return null;
116
123
  }
117
- return /*#__PURE__*/_jsxs(Form, {
118
- beforeSubmit: [onChange],
119
- className: "fields-drawer",
120
- disableValidationOnSubmit: true,
121
- fields: Array.isArray(fields) ? fields : [],
122
- initialState: initialState,
123
- onChange: [onChange],
124
- onSubmit: handleDrawerSubmit,
125
- uuid: uuid(),
126
- children: [/*#__PURE__*/_jsx(RenderFields, {
124
+ let t5;
125
+ if ($[23] !== fields || $[24] !== handleDrawerSubmit || $[25] !== initialState || $[26] !== isEditable || $[27] !== schemaFieldsPath || $[28] !== submitRef) {
126
+ t5 = _jsxs(Form, {
127
+ className: "fields-drawer",
128
+ disableValidationOnSubmit: true,
127
129
  fields: Array.isArray(fields) ? fields : [],
128
- forceRender: true,
129
- parentIndexPath: "",
130
- parentPath: "",
131
- parentSchemaPath: schemaFieldsPath,
132
- permissions: true,
133
- readOnly: !isEditable
134
- }), /*#__PURE__*/_jsx(RegisterFormSubmit, {
135
- submitRef: submitRef
136
- })]
137
- });
130
+ initialState,
131
+ onSubmit: handleDrawerSubmit,
132
+ readOnly: !isEditable,
133
+ schemaPath: schemaFieldsPath,
134
+ uuid: uuid(),
135
+ children: [_jsx(RenderFields, {
136
+ fields: Array.isArray(fields) ? fields : [],
137
+ forceRender: true,
138
+ parentIndexPath: "",
139
+ parentPath: "",
140
+ parentSchemaPath: schemaFieldsPath,
141
+ permissions: true,
142
+ readOnly: !isEditable
143
+ }), _jsx(RegisterFormSubmit, {
144
+ submitRef
145
+ })]
146
+ });
147
+ $[23] = fields;
148
+ $[24] = handleDrawerSubmit;
149
+ $[25] = initialState;
150
+ $[26] = isEditable;
151
+ $[27] = schemaFieldsPath;
152
+ $[28] = submitRef;
153
+ $[29] = t5;
154
+ } else {
155
+ t5 = $[29];
156
+ }
157
+ return t5;
138
158
  };
139
159
  //# sourceMappingURL=DrawerContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerContent.js","names":["useLexicalEditable","Form","RenderFields","useDocumentForm","useDocumentInfo","useServerFunctions","abortAndIgnore","deepCopyObjectSimpleWithoutReactComponents","React","useCallback","useEffect","useRef","useState","v4","uuid","useEditorConfigContext","RegisterFormSubmit","DrawerContent","data","featureKey","fieldMapOverride","handleDrawerSubmit","schemaFieldsPathOverride","schemaPath","schemaPathSuffix","submitRef","id","collectionSlug","getDocPreferences","globalSlug","fields","parentDocumentFields","isEditable","onChangeAbortControllerRef","AbortController","initialState","setInitialState","fieldProps","featureClientSchemaMap","getFormState","schemaFieldsPath","controller","awaitInitialState","state","docPermissions","docPreferences","documentFormState","excludeFiles","initialBlockData","operation","readOnly","renderAllFields","signal","onChange","formState","prevFormState","current","initialBlockFormState","_jsxs","beforeSubmit","className","disableValidationOnSubmit","Array","isArray","onSubmit","_jsx","forceRender","parentIndexPath","parentPath","parentSchemaPath","permissions"],"sources":["../../../src/utilities/fieldsDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n Form,\n RenderFields,\n useDocumentForm,\n useDocumentInfo,\n useServerFunctions,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport { deepCopyObjectSimpleWithoutReactComponents } from 'payload/shared'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { v4 as uuid } from 'uuid'\n\nimport type { FieldsDrawerProps } from './Drawer.js'\n\nimport { useEditorConfigContext } from '../../lexical/config/client/EditorConfigProvider.js'\nimport { RegisterFormSubmit } from './useDrawerSubmit.js'\nimport './index.css'\n\nexport const DrawerContent: React.FC<\n {\n submitRef: React.RefObject<(() => void) | null>\n } & Omit<FieldsDrawerProps, 'drawerSlug' | 'drawerTitle'>\n> = ({\n data,\n featureKey,\n fieldMapOverride,\n handleDrawerSubmit,\n schemaFieldsPathOverride,\n schemaPath,\n schemaPathSuffix,\n submitRef,\n}) => {\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { fields: parentDocumentFields } = useDocumentForm()\n const isEditable = useLexicalEditable()\n\n const onChangeAbortControllerRef = useRef(new AbortController())\n\n const [initialState, setInitialState] = useState<false | FormState | undefined>(false)\n\n const {\n fieldProps: { featureClientSchemaMap },\n } = useEditorConfigContext()\n\n const { getFormState } = useServerFunctions()\n\n const schemaFieldsPath =\n schemaFieldsPathOverride ??\n `${schemaPath}.lexical_internal_feature.${featureKey}${schemaPathSuffix ? `.${schemaPathSuffix}` : ''}`\n\n const fields: any = fieldMapOverride ?? featureClientSchemaMap[featureKey]?.[schemaFieldsPath] // Field Schema\n\n useEffect(() => {\n const controller = new AbortController()\n\n const awaitInitialState = async () => {\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: data ?? {},\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields, {\n excludeFiles: true,\n }),\n globalSlug,\n initialBlockData: data,\n operation: 'update',\n readOnly: !isEditable,\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n setInitialState(state)\n }\n\n void awaitInitialState()\n\n return () => {\n abortAndIgnore(controller)\n }\n }, [\n schemaFieldsPath,\n id,\n data,\n getFormState,\n collectionSlug,\n isEditable,\n globalSlug,\n getDocPreferences,\n parentDocumentFields,\n ])\n\n const onChange = useCallback(\n async ({ formState: prevFormState }: { formState: FormState }) => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n\n const controller = new AbortController()\n onChangeAbortControllerRef.current = controller\n\n const { state } = await getFormState({\n id,\n collectionSlug,\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: deepCopyObjectSimpleWithoutReactComponents(parentDocumentFields, {\n excludeFiles: true,\n }),\n formState: prevFormState,\n globalSlug,\n initialBlockFormState: prevFormState,\n operation: 'update',\n readOnly: !isEditable,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!state) {\n return prevFormState\n }\n\n return state\n },\n [\n getFormState,\n id,\n isEditable,\n collectionSlug,\n getDocPreferences,\n parentDocumentFields,\n globalSlug,\n schemaFieldsPath,\n ],\n )\n\n // cleanup effect\n useEffect(() => {\n return () => {\n abortAndIgnore(onChangeAbortControllerRef.current)\n }\n }, [])\n\n if (initialState === false) {\n return null\n }\n\n return (\n <Form\n beforeSubmit={[onChange]}\n className=\"fields-drawer\"\n disableValidationOnSubmit\n fields={Array.isArray(fields) ? fields : []}\n initialState={initialState}\n onChange={[onChange]}\n onSubmit={handleDrawerSubmit}\n uuid={uuid()}\n >\n <RenderFields\n fields={Array.isArray(fields) ? fields : []}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={!isEditable}\n />\n <RegisterFormSubmit submitRef={submitRef} />\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DrawerContent.js","names":["c","_c","useLexicalEditable","Form","RenderFields","useDocumentForm","useDocumentInfo","useEffectEvent","useOperation","useServerFunctions","abortAndIgnore","React","useEffect","useState","v4","uuid","useEditorConfigContext","RegisterFormSubmit","DrawerContent","t0","$","data","featureKey","fieldMapOverride","handleDrawerSubmit","schemaFieldsPathOverride","schemaPath","schemaPathSuffix","submitRef","id","collectionSlug","getDocPreferences","globalSlug","fields","parentDocumentFields","isEditable","operation","initialState","setInitialState","fieldProps","t1","featureClientSchemaMap","getFormState","schemaFieldsPath","t2","getParentDocumentFields","t3","controller","AbortController","awaitInitialState","state","docPermissions","docPreferences","documentFormState","initialBlockData","readOnly","renderAllFields","signal","aborted","t4","t5","_jsxs","className","disableValidationOnSubmit","Array","isArray","onSubmit","children","_jsx","forceRender","parentIndexPath","parentPath","parentSchemaPath","permissions"],"sources":["../../../src/utilities/fieldsDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n Form,\n RenderFields,\n useDocumentForm,\n useDocumentInfo,\n useEffectEvent,\n useOperation,\n useServerFunctions,\n} from '@payloadcms/ui'\nimport { abortAndIgnore } from '@payloadcms/ui/shared'\nimport React, { useEffect, useState } from 'react'\nimport { v4 as uuid } from 'uuid'\n\nimport type { FieldsDrawerProps } from './Drawer.js'\n\nimport { useEditorConfigContext } from '../../lexical/config/client/EditorConfigProvider.js'\nimport { RegisterFormSubmit } from './useDrawerSubmit.js'\nimport './index.css'\n\nexport const DrawerContent: React.FC<\n {\n submitRef: React.RefObject<(() => void) | null>\n } & Omit<FieldsDrawerProps, 'drawerSlug' | 'drawerTitle'>\n> = ({\n data,\n featureKey,\n fieldMapOverride,\n handleDrawerSubmit,\n schemaFieldsPathOverride,\n schemaPath,\n schemaPathSuffix,\n submitRef,\n}) => {\n const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo()\n const { fields: parentDocumentFields } = useDocumentForm()\n const isEditable = useLexicalEditable()\n const operation = useOperation()\n\n const [initialState, setInitialState] = useState<false | FormState | undefined>(false)\n\n const {\n fieldProps: { featureClientSchemaMap },\n } = useEditorConfigContext()\n\n const { getFormState } = useServerFunctions()\n\n const schemaFieldsPath =\n schemaFieldsPathOverride ??\n `${schemaPath}.lexical_internal_feature.${featureKey}${schemaPathSuffix ? `.${schemaPathSuffix}` : ''}`\n\n const fields: any = fieldMapOverride ?? featureClientSchemaMap[featureKey]?.[schemaFieldsPath] // Field Schema\n\n // Parent autosave updates this context without starting a new drawer editing session.\n const getParentDocumentFields = useEffectEvent(() => parentDocumentFields)\n\n useEffect(() => {\n const controller = new AbortController()\n\n const awaitInitialState = async () => {\n const { state } = await getFormState({\n id,\n collectionSlug,\n data: data ?? {},\n docPermissions: {\n fields: true,\n },\n docPreferences: await getDocPreferences(),\n documentFormState: getParentDocumentFields(),\n globalSlug,\n initialBlockData: data,\n operation,\n readOnly: !isEditable,\n renderAllFields: true,\n schemaPath: schemaFieldsPath,\n signal: controller.signal,\n })\n\n if (!controller.signal.aborted && state) {\n setInitialState(state)\n }\n }\n\n void awaitInitialState()\n\n return () => {\n abortAndIgnore(controller)\n }\n }, [\n schemaFieldsPath,\n id,\n data,\n getFormState,\n collectionSlug,\n isEditable,\n globalSlug,\n getDocPreferences,\n operation,\n ])\n\n if (initialState === false) {\n return null\n }\n\n return (\n <Form\n className=\"fields-drawer\"\n disableValidationOnSubmit\n fields={Array.isArray(fields) ? fields : []}\n initialState={initialState}\n onSubmit={handleDrawerSubmit}\n readOnly={!isEditable}\n schemaPath={schemaFieldsPath}\n uuid={uuid()}\n >\n <RenderFields\n fields={Array.isArray(fields) ? fields : []}\n forceRender\n parentIndexPath=\"\"\n parentPath=\"\" // See Blocks feature path for details as for why this is empty\n parentSchemaPath={schemaFieldsPath}\n permissions={true}\n readOnly={!isEditable}\n />\n <RegisterFormSubmit submitRef={submitRef} />\n </Form>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useDrawerSubmit.js","names":["c","_c","useForm","useTranslation","useEffect","useMemo","useRef","useDrawerSubmit","$","t","submitRef","t0","t1","Symbol","for","current","t2","label","onClick","style","headerActions","t3","RegisterFormSubmit","submit"],"sources":["../../../src/utilities/fieldsDrawer/useDrawerSubmit.ts"],"sourcesContent":["'use client'\nimport type { FC } from 'react'\nimport type React from 'react'\n\nimport { useForm, useTranslation } from '@payloadcms/ui'\nimport { useEffect, useMemo, useRef } from 'react'\n\n/**\n * Shared logic for drawers that render their submit button in the drawer header.\n *\n * The header's `onClick` is defined outside the `Form` provider, so it cannot call\n * `useForm().submit()` directly. This hook owns a ref to the form's `submit` function,\n * which is populated from inside the form via `<RegisterFormSubmit submitRef={submitRef} />`.\n *\n * Returns the `headerActions` array to spread onto a `Drawer` and the `submitRef`\n * to pass to `RegisterFormSubmit`.\n */\nexport const useDrawerSubmit = () => {\n const { t } = useTranslation()\n const submitRef = useRef<(() => void) | null>(null)\n\n const headerActions = useMemo(\n () => [\n {\n label: t('fields:saveChanges'),\n onClick: () => submitRef.current?.(),\n style: 'primary' as const,\n },\n ],\n [t],\n )\n\n return { headerActions, submitRef }\n}\n\n/**\n * Mounts inside a `<Form>` to populate `submitRef` (from `useDrawerSubmit`) with the form's\n * `submit` function, allowing drawer header actions rendered outside the form's React tree\n * to trigger submission.\n */\nexport const RegisterFormSubmit: FC<{\n submitRef: React.RefObject<(() => void) | null>\n}> = ({ submitRef }) => {\n const { submit } = useForm()\n\n useEffect(() => {\n submitRef.current = () => void submit()\n return () => {\n submitRef.current = null\n }\n }, [submit, submitRef])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAIA,SAASC,OAAO,EAAEC,cAAc,QAAQ;AACxC,SAASC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ;AAE3C;;;;;;;;;;AAUA,OAAO,MAAMC,eAAA,GAAkBA,CAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAC7B;IAAAQ;EAAA,IAAcN,cAAA;EACd,MAAAO,SAAA,GAAkBJ,MAAA,KAA4B;EAAA,IAAAK,EAAA;EAAA,IAAAH,CAAA,QAAAC,CAAA;IAKjCE,EAAA,GAAAF,CAAA,CAAE;IAAAD,CAAA,MAAAC,CAAA;IAAAD,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAA,IAAAI,EAAA;EAAA,IAAAJ,CAAA,QAAAK,MAAA,CAAAC,GAAA;IACAF,EAAA,GAAAA,CAAA,KAAMF,SAAA,CAAAK,OAAA;IAAiBP,CAAA,MAAAI,EAAA;EAAA;IAAAA,EAAA,GAAAJ,CAAA;EAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAR,CAAA,QAAAG,EAAA;IAH9BK,EAAA;MAAAC,KAAA,EAEKN,EAAE;MAAAO,OAAA,EACAN,EAAuB;MAAAO,KAAA,EACzB;IAAA;IAEVX,CAAA,MAAAG,EAAA;IAAAH,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAPH,MAAAY,aAAA,GACQJ,EAML;EACE,IAAAK,EAAA;EAAA,IAAAb,CAAA,QAAAY,aAAA;IAGEC,EAAA;MAAAD,aAAA;MAAAV;IAAA;IAA2BF,CAAA,MAAAY,aAAA;IAAAZ,CAAA,MAAAa,EAAA;EAAA;IAAAA,EAAA,GAAAb,CAAA;EAAA;EAAA,OAA3Ba,EAA2B;AAAA,CACpC;AAEA;;;;;AAKA,OAAO,MAAMC,kBAAA,GAERX,EAAA;EAAA,MAAAH,CAAA,GAAAP,EAAA;EAAC;IAAAS;EAAA,IAAAC,EAAa;EACjB;IAAAY;EAAA,IAAmBrB,OAAA;EAAA,IAAAU,EAAA;EAAA,IAAAI,EAAA;EAAA,IAAAR,CAAA,QAAAe,MAAA,IAAAf,CAAA,QAAAE,SAAA;IAETE,EAAA,GAAAA,CAAA;MACRF,SAAA,CAAAK,OAAA,cAA+BQ,MAAA;MAAA;QAE7Bb,SAAA,CAAAK,OAAA;MAAA;IAAA;IAEDC,EAAA,IAACO,MAAA,EAAQb,SAAA;IAAUF,CAAA,MAAAe,MAAA;IAAAf,CAAA,MAAAE,SAAA;IAAAF,CAAA,MAAAI,EAAA;IAAAJ,CAAA,MAAAQ,EAAA;EAAA;IAAAJ,EAAA,GAAAJ,CAAA;IAAAQ,EAAA,GAAAR,CAAA;EAAA;EALtBJ,SAAA,CAAUQ,EAKV,EAAGI,EAAmB;EAAA;AAAA,CAGxB","ignoreList":[]}
1
+ {"version":3,"file":"useDrawerSubmit.js","names":["c","_c","useForm","useTranslation","useEffect","useMemo","useRef","useDrawerSubmit","$","t","submitRef","t0","t1","Symbol","for","current","t2","label","onClick","style","headerActions","t3","RegisterFormSubmit","submit"],"sources":["../../../src/utilities/fieldsDrawer/useDrawerSubmit.ts"],"sourcesContent":["'use client'\nimport type { FC } from 'react'\nimport type React from 'react'\n\nimport { useForm, useTranslation } from '@payloadcms/ui'\nimport { useEffect, useMemo, useRef } from 'react'\n\n/**\n * Shared logic for drawers that render their submit button in the drawer header.\n *\n * The header's `onClick` is defined outside the `Form` provider, so it cannot call\n * `useForm().submit()` directly. This hook owns a ref to the form's `submit` function,\n * which is populated from inside the form via `<RegisterFormSubmit submitRef={submitRef} />`.\n *\n * Returns the `headerActions` array to spread onto a `Drawer` and the `submitRef`\n * to pass to `RegisterFormSubmit`.\n */\nexport const useDrawerSubmit = () => {\n const { t } = useTranslation()\n const submitRef = useRef<(() => void) | null>(null)\n\n const headerActions = useMemo(\n () => [\n {\n label: t('fields:saveChanges'),\n onClick: () => submitRef.current?.(),\n style: 'primary' as const,\n },\n ],\n [t],\n )\n\n return { headerActions, submitRef }\n}\n\n/**\n * Mounts inside a `<Form>` to populate `submitRef` (from `useDrawerSubmit`) with the form's\n * `submit` function, allowing drawer header actions rendered outside the form's React tree\n * to trigger submission.\n */\nexport const RegisterFormSubmit: FC<{\n submitRef: React.RefObject<(() => void) | null>\n}> = ({ submitRef }) => {\n const { submit } = useForm()\n\n useEffect(() => {\n submitRef.current = () => void submit()\n return () => {\n submitRef.current = null\n }\n }, [submit, submitRef])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAIA,SAASC,OAAO,EAAEC,cAAc,QAAQ;AACxC,SAASC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ;AAE3C;;;;;;;;;;AAUA,OAAO,MAAMC,eAAA,GAAkBA,CAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAC7B;IAAAQ;EAAA,IAAcN,cAAA;EACd,MAAAO,SAAA,GAAkBJ,MAAA,CAA4B;EAAA,IAAAK,EAAA;EAAA,IAAAH,CAAA,QAAAC,CAAA;IAKjCE,EAAA,GAAAF,CAAA,CAAE;IAAAD,CAAA,MAAAC,CAAA;IAAAD,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAA,IAAAI,EAAA;EAAA,IAAAJ,CAAA,QAAAK,MAAA,CAAAC,GAAA;IACAF,EAAA,GAAAA,CAAA,KAAMF,SAAA,CAAAK,OAAiB;IAAAP,CAAA,MAAAI,EAAA;EAAA;IAAAA,EAAA,GAAAJ,CAAA;EAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAR,CAAA,QAAAG,EAAA;IAH9BK,EAAA,IACJ;MAAAC,KAAA,EACSN,EAAE;MAAAO,OAAA,EACAN,EAAuB;MAAAO,KAAA,EACzB;IACT,EACD;IAAAX,CAAA,MAAAG,EAAA;IAAAH,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAPH,MAAAY,aAAA,GACQJ,EAML;EACE,IAAAK,EAAA;EAAA,IAAAb,CAAA,QAAAY,aAAA;IAGEC,EAAA;MAAAD,aAAA;MAAAV;IAA2B;IAAAF,CAAA,MAAAY,aAAA;IAAAZ,CAAA,MAAAa,EAAA;EAAA;IAAAA,EAAA,GAAAb,CAAA;EAAA;EAAA,OAA3Ba,EAA2B;AAAA,CACpC;AAEA;;;;;AAKA,OAAO,MAAMC,kBAAA,GAERX,EAAA;EAAA,MAAAH,CAAA,GAAAP,EAAA;EAAC;IAAAS;EAAA,IAAAC,EAAa;EACjB;IAAAY;EAAA,IAAmBrB,OAAA;EAAA,IAAAU,EAAA;EAAA,IAAAI,EAAA;EAAA,IAAAR,CAAA,QAAAe,MAAA,IAAAf,CAAA,QAAAE,SAAA;IAETE,EAAA,GAAAA,CAAA;MACRF,SAAA,CAAAK,OAAA,GAAoB,MAAM,KAAKQ,MAAA,EAAd;MAAA,OACV;QACLb,SAAA,CAAAK,OAAA,GAAoB,IAAH;MAAA,CACnB;IAAA,CACF;IAAGC,EAAA,IAACO,MAAA,EAAQb,SAAA,CAAU;IAAAF,CAAA,MAAAe,MAAA;IAAAf,CAAA,MAAAE,SAAA;IAAAF,CAAA,MAAAI,EAAA;IAAAJ,CAAA,MAAAQ,EAAA;EAAA;IAAAJ,EAAA,GAAAJ,CAAA;IAAAQ,EAAA,GAAAR,CAAA;EAAA;EALtBJ,SAAA,CAAUQ,EAKV,EAAGI,EAAmB;EAAA,OAEf;AAAA,CACT","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useLexicalDocumentDrawer.js","names":["c","_c","useLexicalComposerContext","useDocumentDrawer","useModal","$getPreviousSelection","$getSelection","$setSelection","useCallback","useEffect","useState","useLexicalDocumentDrawer","args","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","DocumentDrawer","DocumentDrawerToggler","t0","closeDrawer","drawerSlug","documentDrawerSlug","openDrawer","modalState","t1","read","selection","storeSelection","t2","update","clone","discrete","skipTransforms","restoreSelection","t3","closeDocumentDrawer","t4","t5","thisModalState","isOpen","setTimeout","t6","openDocumentDrawer","t7","props","_jsx","onClick","t8"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalDocumentDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseDocumentDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useDocumentDrawer, useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useDocumentDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDocumentDrawer = (\n args: Parameters<UseDocumentDrawer>[0],\n): {\n closeDocumentDrawer: () => void\n DocumentDrawer: ReturnType<UseDocumentDrawer>[0]\n documentDrawerSlug: string\n DocumentDrawerToggler: ReturnType<UseDocumentDrawer>[1]\n openDocumentDrawer: () => void\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n DocumentDrawer,\n DocumentDrawerToggler,\n { closeDrawer: closeDrawer, drawerSlug: documentDrawerSlug, openDrawer },\n ] = useDocumentDrawer(args)\n const { modalState } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n setWasOpen(true)\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDocumentDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[documentDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, documentDrawerSlug, restoreSelection, wasOpen])\n\n const openDocumentDrawer = useCallback(() => {\n storeSelection()\n openDrawer()\n }, [storeSelection, openDrawer])\n\n return {\n closeDocumentDrawer,\n DocumentDrawer,\n documentDrawerSlug,\n DocumentDrawerToggler: (props) => <DocumentDrawerToggler {...props} onClick={storeSelection} />,\n openDocumentDrawer,\n }\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAIA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,iBAAiB,EAAEC,QAAQ,QAAQ;AAC5C,SAASC,qBAAqB,EAAEC,aAAa,EAAEC,aAAa,QAAQ;AACpE,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAEjD;;;;;AAKA,OAAO,MAAMC,wBAAA,GAA2BC,IAAA;EAAA,MAAAC,CAAA,GAAAZ,EAAA;EAStC,OAAAa,MAAA,IAAiBZ,yBAAA;EACjB,OAAAa,cAAA,EAAAC,iBAAA,IAA4CN,QAAA,KAA+B;EAC3E,OAAAO,OAAA,EAAAC,UAAA,IAA8BR,QAAA,MAAkB;EAEhD,OAAAS,cAAA,EAAAC,qBAAA,EAAAC,EAAA,IAIIlB,iBAAA,CAAkBS,IAAA;EADpB;IAAAU,WAAA;IAAAC,UAAA,EAAAC,kBAAA;IAAAC;EAAA,IAAAJ,EAAwE;EAE1E;IAAAK;EAAA,IAAuBtB,QAAA;EAAA,IAAAuB,EAAA;EAAA,IAAAd,CAAA,QAAAC,MAAA;IAEYa,EAAA,GAAAA,CAAA;MACjCb,MAAA,CAAAc,IAAA;QACE,MAAAC,SAAA,GAAkBvB,aAAA,MAAmBD,qBAAA;QACrCW,iBAAA,CAAkBa,SAAA;MAAA,CACpB;MACAX,UAAA,KAAW;IAAA;IACbL,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EANA,MAAAiB,cAAA,GAAuBH,EAMZ;EAAA,IAAAI,EAAA;EAAA,IAAAlB,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAE,cAAA;IAE0BgB,EAAA,GAAAA,CAAA;MAAA,IAC/BhB,cAAA;QACFD,MAAA,CAAAkB,MAAA;UAEIzB,aAAA,CAAcQ,cAAA,CAAAkB,KAAA,CAAoB;QAAA;UAAAC,QAAA;UAAAC,cAAA;QAAA,CAEG;MAAA;IAAA;IAG7CtB,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EATA,MAAAuB,gBAAA,GAAyBL,EASE;EAAA,IAAAM,EAAA;EAAA,IAAAxB,CAAA,QAAAS,WAAA;IAECe,EAAA,GAAAA,CAAA;MAE1Bf,WAAA;IAAA;IACFT,CAAA,MAAAS,WAAA;IAAAT,CAAA,MAAAwB,EAAA;EAAA;IAAAA,EAAA,GAAAxB,CAAA;EAAA;EAHA,MAAAyB,mBAAA,GAA4BD,EAG5B;EAAA,IAAAE,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAA3B,CAAA,QAAAW,kBAAA,IAAAX,CAAA,QAAAa,UAAA,IAAAb,CAAA,QAAAuB,gBAAA,IAAAvB,CAAA,SAAAI,OAAA;IAIUsB,EAAA,GAAAA,CAAA;MAAA,KACHtB,OAAA;QAAA;MAAA;MAIL,MAAAwB,cAAA,GAAuBf,UAAU,CAACF,kBAAA;MAAmB,IAEjDiB,cAAA,KAAmBA,cAAA,EAAAC,MAAgB;QACrCxB,UAAA,MAAW;QACXyB,UAAA;UACEP,gBAAA;QAAA,IACC;MAAA;IAAA;IAEJI,EAAA,IAACd,UAAA,EAAYF,kBAAA,EAAoBY,gBAAA,EAAkBnB,OAAA;IAAQJ,CAAA,MAAAW,kBAAA;IAAAX,CAAA,MAAAa,UAAA;IAAAb,CAAA,MAAAuB,gBAAA;IAAAvB,CAAA,OAAAI,OAAA;IAAAJ,CAAA,OAAA0B,EAAA;IAAA1B,CAAA,OAAA2B,EAAA;EAAA;IAAAD,EAAA,GAAA1B,CAAA;IAAA2B,EAAA,GAAA3B,CAAA;EAAA;EAb9DJ,SAAA,CAAU8B,EAaV,EAAGC,EAA2D;EAAA,IAAAI,EAAA;EAAA,IAAA/B,CAAA,SAAAY,UAAA,IAAAZ,CAAA,SAAAiB,cAAA;IAEvBc,EAAA,GAAAA,CAAA;MACrCd,cAAA;MACAL,UAAA;IAAA;IACFZ,CAAA,OAAAY,UAAA;IAAAZ,CAAA,OAAAiB,cAAA;IAAAjB,CAAA,OAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EAHA,MAAAgC,kBAAA,GAA2BD,EAGI;EAAA,IAAAE,EAAA;EAAA,IAAAjC,CAAA,SAAAO,qBAAA,IAAAP,CAAA,SAAAiB,cAAA;IAMNgB,EAAA,GAAAC,KAAA,IAAWC,IAAA,CAAC5B,qBAAA;MAAA,GAA0B2B,KAAK;MAAAE,OAAA,EAAWnB;IAAA,C;;;;;;;;;IAJxEoB,EAAA;MAAAZ,mBAAA;MAAAnB,cAAA;MAAAK,kBAAA;MAAAJ,qBAAA,EAIkB0B,E;;;IAEzBjC,CAAA,OAAAM,cAAA;IAAAN,CAAA,OAAAyB,mBAAA;IAAAzB,CAAA,OAAAW,kBAAA;IAAAX,CAAA,OAAAgC,kBAAA;IAAAhC,CAAA,OAAAiC,EAAA;IAAAjC,CAAA,OAAAqC,EAAA;EAAA;IAAAA,EAAA,GAAArC,CAAA;EAAA;EAAA,OANOqC,EAMP;AAAA,CACF","ignoreList":[]}
1
+ {"version":3,"file":"useLexicalDocumentDrawer.js","names":["c","_c","useLexicalComposerContext","useDocumentDrawer","useModal","$getPreviousSelection","$getSelection","$setSelection","useCallback","useEffect","useState","useLexicalDocumentDrawer","args","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","DocumentDrawer","DocumentDrawerToggler","t0","closeDrawer","drawerSlug","documentDrawerSlug","openDrawer","modalState","t1","read","selection","storeSelection","t2","update","clone","discrete","skipTransforms","restoreSelection","t3","closeDocumentDrawer","t4","t5","thisModalState","isOpen","setTimeout","t6","openDocumentDrawer","t7","props","_jsx","onClick","t8"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalDocumentDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseDocumentDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useDocumentDrawer, useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useDocumentDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDocumentDrawer = (\n args: Parameters<UseDocumentDrawer>[0],\n): {\n closeDocumentDrawer: () => void\n DocumentDrawer: ReturnType<UseDocumentDrawer>[0]\n documentDrawerSlug: string\n DocumentDrawerToggler: ReturnType<UseDocumentDrawer>[1]\n openDocumentDrawer: () => void\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n DocumentDrawer,\n DocumentDrawerToggler,\n { closeDrawer: closeDrawer, drawerSlug: documentDrawerSlug, openDrawer },\n ] = useDocumentDrawer(args)\n const { modalState } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n setWasOpen(true)\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDocumentDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[documentDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, documentDrawerSlug, restoreSelection, wasOpen])\n\n const openDocumentDrawer = useCallback(() => {\n storeSelection()\n openDrawer()\n }, [storeSelection, openDrawer])\n\n return {\n closeDocumentDrawer,\n DocumentDrawer,\n documentDrawerSlug,\n DocumentDrawerToggler: (props) => <DocumentDrawerToggler {...props} onClick={storeSelection} />,\n openDocumentDrawer,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useLexicalDrawer.js","names":["c","_c","useLexicalComposerContext","useModal","$getPreviousSelection","$getSelection","$setSelection","useCallback","useEffect","useState","useLexicalDrawer","slug","restoreLate","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","closeModal","closeBaseModal","modalState","toggleModal","toggleBaseModal","t0","read","selection","storeSelection","t1","update","clone","discrete","skipTransforms","restoreSelection","t2","closeDrawer","isModalOpen","isOpen","t3","toggleDrawer","t4","t5","thisModalState","setTimeout","t6"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalDrawer.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useModal that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDrawer = (slug: string, restoreLate?: boolean) => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const { closeModal: closeBaseModal, modalState, toggleModal: toggleBaseModal } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDrawer = useCallback(() => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeBaseModal(slug)\n }, [closeBaseModal, slug])\n const isModalOpen = modalState?.[slug]?.isOpen\n\n const toggleDrawer = useCallback(() => {\n if (!isModalOpen) {\n storeSelection()\n } else {\n restoreSelection()\n }\n setWasOpen(true)\n toggleBaseModal(slug)\n }, [slug, storeSelection, toggleBaseModal, restoreSelection, isModalOpen])\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[slug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n\n if (restoreLate) {\n // restoreLate is used for upload extra field drawers. For some reason, the selection is not restored if we call restoreSelection immediately.\n setTimeout(() => {\n restoreSelection()\n }, 0)\n } else {\n restoreSelection()\n }\n }\n }, [modalState, slug, restoreSelection, wasOpen, restoreLate])\n\n return {\n closeDrawer,\n toggleDrawer,\n }\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,QAAQ,QAAQ;AACzB,SAASC,qBAAqB,EAAEC,aAAa,EAAEC,aAAa,QAAQ;AACpE,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAEjD;;;;;AAKA,OAAO,MAAMC,gBAAA,GAAmBA,CAAAC,IAAA,EAAAC,WAAA;EAAA,MAAAC,CAAA,GAAAZ,EAAA;EAC9B,OAAAa,MAAA,IAAiBZ,yBAAA;EACjB,OAAAa,cAAA,EAAAC,iBAAA,IAA4CP,QAAA,KAA+B;EAC3E,OAAAQ,OAAA,EAAAC,UAAA,IAA8BT,QAAA,MAAkB;EAEhD;IAAAU,UAAA,EAAAC,cAAA;IAAAC,UAAA;IAAAC,WAAA,EAAAC;EAAA,IAAiFpB,QAAA;EAAA,IAAAqB,EAAA;EAAA,IAAAX,CAAA,QAAAC,MAAA;IAE9CU,EAAA,GAAAA,CAAA;MACjCV,MAAA,CAAAW,IAAA;QACE,MAAAC,SAAA,GAAkBrB,aAAA,MAAmBD,qBAAA;QACrCY,iBAAA,CAAkBU,SAAA;MAAA,CACpB;IAAA;IACFb,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAW,EAAA;EAAA;IAAAA,EAAA,GAAAX,CAAA;EAAA;EALA,MAAAc,cAAA,GAAuBH,EAKZ;EAAA,IAAAI,EAAA;EAAA,IAAAf,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAE,cAAA;IAE0Ba,EAAA,GAAAA,CAAA;MAAA,IAC/Bb,cAAA;QACFD,MAAA,CAAAe,MAAA;UAEIvB,aAAA,CAAcS,cAAA,CAAAe,KAAA,CAAoB;QAAA;UAAAC,QAAA;UAAAC,cAAA;QAAA,CAEG;MAAA;IAAA;IAG7CnB,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAe,EAAA;EAAA;IAAAA,EAAA,GAAAf,CAAA;EAAA;EATA,MAAAoB,gBAAA,GAAyBL,EASE;EAAA,IAAAM,EAAA;EAAA,IAAArB,CAAA,QAAAO,cAAA,IAAAP,CAAA,QAAAF,IAAA;IAEKuB,EAAA,GAAAA,CAAA;MAE9Bd,cAAA,CAAeT,IAAA;IAAA;IACjBE,CAAA,MAAAO,cAAA;IAAAP,CAAA,MAAAF,IAAA;IAAAE,CAAA,MAAAqB,EAAA;EAAA;IAAAA,EAAA,GAAArB,CAAA;EAAA;EAHA,MAAAsB,WAAA,GAAoBD,EAGK;EACzB,MAAAE,WAAA,GAAoBf,UAAA,GAAaV,IAAA,GAAA0B,MAAA;EAAO,IAAAC,EAAA;EAAA,IAAAzB,CAAA,QAAAuB,WAAA,IAAAvB,CAAA,QAAAoB,gBAAA,IAAApB,CAAA,SAAAF,IAAA,IAAAE,CAAA,SAAAc,cAAA,IAAAd,CAAA,SAAAU,eAAA;IAEPe,EAAA,GAAAA,CAAA;MAAA,KAC1BF,WAAA;QACHT,cAAA;MAAA;QAEAM,gBAAA;MAAA;MAEFf,UAAA,KAAW;MACXK,eAAA,CAAgBZ,IAAA;IAAA;IAClBE,CAAA,MAAAuB,WAAA;IAAAvB,CAAA,MAAAoB,gBAAA;IAAApB,CAAA,OAAAF,IAAA;IAAAE,CAAA,OAAAc,cAAA;IAAAd,CAAA,OAAAU,eAAA;IAAAV,CAAA,OAAAyB,EAAA;EAAA;IAAAA,EAAA,GAAAzB,CAAA;EAAA;EARA,MAAA0B,YAAA,GAAqBD,EAQoD;EAAA,IAAAE,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAA5B,CAAA,SAAAQ,UAAA,IAAAR,CAAA,SAAAD,WAAA,IAAAC,CAAA,SAAAoB,gBAAA,IAAApB,CAAA,SAAAF,IAAA,IAAAE,CAAA,SAAAI,OAAA;IAI/DuB,EAAA,GAAAA,CAAA;MAAA,KACHvB,OAAA;QAAA;MAAA;MAIL,MAAAyB,cAAA,GAAuBrB,UAAU,CAACV,IAAA;MAAK,IAEnC+B,cAAA,KAAmBA,cAAA,EAAAL,MAAgB;QACrCnB,UAAA,MAAW;QAAA,IAEPN,WAAA;UAEF+B,UAAA;YACEV,gBAAA;UAAA,IACC;QAAA;UAEHA,gBAAA;QAAA;MAAA;IAAA;IAGHQ,EAAA,IAACpB,UAAA,EAAYV,IAAA,EAAMsB,gBAAA,EAAkBhB,OAAA,EAASL,WAAA;IAAYC,CAAA,OAAAQ,UAAA;IAAAR,CAAA,OAAAD,WAAA;IAAAC,CAAA,OAAAoB,gBAAA;IAAApB,CAAA,OAAAF,IAAA;IAAAE,CAAA,OAAAI,OAAA;IAAAJ,CAAA,OAAA2B,EAAA;IAAA3B,CAAA,OAAA4B,EAAA;EAAA;IAAAD,EAAA,GAAA3B,CAAA;IAAA4B,EAAA,GAAA5B,CAAA;EAAA;EAnB7DL,SAAA,CAAUgC,EAmBV,EAAGC,EAA0D;EAAA,IAAAG,EAAA;EAAA,IAAA/B,CAAA,SAAAsB,WAAA,IAAAtB,CAAA,SAAA0B,YAAA;IAEtDK,EAAA;MAAAT,WAAA;MAAAI;IAAA;IAGP1B,CAAA,OAAAsB,WAAA;IAAAtB,CAAA,OAAA0B,YAAA;IAAA1B,CAAA,OAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EAAA,OAHO+B,EAGP;AAAA,CACF","ignoreList":[]}
1
+ {"version":3,"file":"useLexicalDrawer.js","names":["c","_c","useLexicalComposerContext","useModal","$getPreviousSelection","$getSelection","$setSelection","useCallback","useEffect","useState","useLexicalDrawer","slug","restoreLate","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","closeModal","closeBaseModal","modalState","toggleModal","toggleBaseModal","t0","read","selection","storeSelection","t1","update","clone","discrete","skipTransforms","restoreSelection","t2","closeDrawer","isModalOpen","isOpen","t3","toggleDrawer","t4","t5","thisModalState","setTimeout","t6"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalDrawer.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useModal } from '@payloadcms/ui'\nimport { $getPreviousSelection, $getSelection, $setSelection } from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useModal that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalDrawer = (slug: string, restoreLate?: boolean) => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const { closeModal: closeBaseModal, modalState, toggleModal: toggleBaseModal } = useModal()\n\n const storeSelection = useCallback(() => {\n editor.read(() => {\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n })\n }, [editor])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n $setSelection(selectionState.clone())\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeDrawer = useCallback(() => {\n //restoreSelection() // Should already be stored by the useEffect below\n closeBaseModal(slug)\n }, [closeBaseModal, slug])\n const isModalOpen = modalState?.[slug]?.isOpen\n\n const toggleDrawer = useCallback(() => {\n if (!isModalOpen) {\n storeSelection()\n } else {\n restoreSelection()\n }\n setWasOpen(true)\n toggleBaseModal(slug)\n }, [slug, storeSelection, toggleBaseModal, restoreSelection, isModalOpen])\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[slug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n\n if (restoreLate) {\n // restoreLate is used for upload extra field drawers. For some reason, the selection is not restored if we call restoreSelection immediately.\n setTimeout(() => {\n restoreSelection()\n }, 0)\n } else {\n restoreSelection()\n }\n }\n }, [modalState, slug, restoreSelection, wasOpen, restoreLate])\n\n return {\n closeDrawer,\n toggleDrawer,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useLexicalListDrawer.js","names":["c","_c","useLexicalComposerContext","useListDrawer","useModal","$getNodeByKey","$getPreviousSelection","$getRoot","$getSelection","$isRangeSelection","$setSelection","useCallback","useEffect","useState","useLexicalListDrawer","args","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","BaseListDrawer","BaseListDrawerToggler","t0","closeDrawer","baseCloseDrawer","drawerSlug","listDrawerSlug","isDrawerOpen","openDrawer","baseOpenDrawer","modalState","t1","Symbol","for","selection","$storeSelection","t2","update","anchor","focus","key","clone","selectEnd","discrete","skipTransforms","restoreSelection","t3","closeListDrawer","t4","t5","thisModalState","isOpen","setTimeout","t6","props","_jsx","onClick","t7","t8","isListDrawerOpen","ListDrawer","ListDrawerToggler"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalListDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseListDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useListDrawer, useModal } from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getPreviousSelection,\n $getRoot,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n} from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useListDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalListDrawer = (\n args: Parameters<UseListDrawer>[0],\n): {\n closeListDrawer: () => void\n isListDrawerOpen: boolean\n ListDrawer: ReturnType<UseListDrawer>[0]\n listDrawerSlug: string\n ListDrawerToggler: ReturnType<UseListDrawer>[1]\n openListDrawer: (selection?: BaseSelection) => void\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n BaseListDrawer,\n BaseListDrawerToggler,\n {\n closeDrawer: baseCloseDrawer,\n drawerSlug: listDrawerSlug,\n isDrawerOpen,\n openDrawer: baseOpenDrawer,\n },\n ] = useListDrawer(args)\n const { modalState } = useModal()\n\n const $storeSelection = useCallback(() => {\n // editor.read() causes an error here when creating a new upload node from the slash menu. It seems like we can omit it here though, as all\n // invocations of that functions are wrapped in editor.read() or editor.update() somewhere in the call stack.\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n }, [])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n if ($isRangeSelection(selectionState)) {\n const { anchor, focus } = selectionState\n if ($getNodeByKey(anchor.key) && $getNodeByKey(focus.key)) {\n $setSelection(selectionState.clone())\n }\n } else {\n // not ideal, but better than losing the selection. Try to set the selection\n // in a valid place if you remove selected nodes!\n $getRoot().selectEnd()\n }\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeListDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n baseCloseDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[listDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, listDrawerSlug, restoreSelection, wasOpen])\n\n return {\n closeListDrawer,\n isListDrawerOpen: isDrawerOpen,\n ListDrawer: BaseListDrawer,\n listDrawerSlug,\n ListDrawerToggler: (props) => (\n <BaseListDrawerToggler\n {...props}\n onClick={() => {\n $storeSelection()\n }}\n />\n ),\n openListDrawer: () => {\n $storeSelection()\n baseOpenDrawer()\n setWasOpen(true)\n },\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useLexicalListDrawer.js","names":["c","_c","useLexicalComposerContext","useListDrawer","useModal","$getNodeByKey","$getPreviousSelection","$getRoot","$getSelection","$isRangeSelection","$setSelection","useCallback","useEffect","useState","useLexicalListDrawer","args","$","editor","selectionState","setSelectionState","wasOpen","setWasOpen","BaseListDrawer","BaseListDrawerToggler","t0","closeDrawer","baseCloseDrawer","drawerSlug","listDrawerSlug","isDrawerOpen","openDrawer","baseOpenDrawer","modalState","t1","Symbol","for","selection","$storeSelection","t2","update","anchor","focus","key","clone","selectEnd","discrete","skipTransforms","restoreSelection","t3","closeListDrawer","t4","t5","thisModalState","isOpen","setTimeout","t6","props","_jsx","onClick","t7","t8","isListDrawerOpen","ListDrawer","ListDrawerToggler"],"sources":["../../../src/utilities/fieldsDrawer/useLexicalListDrawer.tsx"],"sourcesContent":["'use client'\nimport type { UseListDrawer } from '@payloadcms/ui'\nimport type { BaseSelection } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useListDrawer, useModal } from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getPreviousSelection,\n $getRoot,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n} from 'lexical'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n *\n * Wrapper around useListDrawer that restores and saves selection state (cursor position) when opening and closing the drawer.\n * By default, the lexical cursor position may be lost when opening a drawer and clicking somewhere on that drawer.\n */\nexport const useLexicalListDrawer = (\n args: Parameters<UseListDrawer>[0],\n): {\n closeListDrawer: () => void\n isListDrawerOpen: boolean\n ListDrawer: ReturnType<UseListDrawer>[0]\n listDrawerSlug: string\n ListDrawerToggler: ReturnType<UseListDrawer>[1]\n openListDrawer: (selection?: BaseSelection) => void\n} => {\n const [editor] = useLexicalComposerContext()\n const [selectionState, setSelectionState] = useState<BaseSelection | null>(null)\n const [wasOpen, setWasOpen] = useState<boolean>(false)\n\n const [\n BaseListDrawer,\n BaseListDrawerToggler,\n {\n closeDrawer: baseCloseDrawer,\n drawerSlug: listDrawerSlug,\n isDrawerOpen,\n openDrawer: baseOpenDrawer,\n },\n ] = useListDrawer(args)\n const { modalState } = useModal()\n\n const $storeSelection = useCallback(() => {\n // editor.read() causes an error here when creating a new upload node from the slash menu. It seems like we can omit it here though, as all\n // invocations of that functions are wrapped in editor.read() or editor.update() somewhere in the call stack.\n const selection = $getSelection() ?? $getPreviousSelection()\n setSelectionState(selection)\n }, [])\n\n const restoreSelection = useCallback(() => {\n if (selectionState) {\n editor.update(\n () => {\n if ($isRangeSelection(selectionState)) {\n const { anchor, focus } = selectionState\n if ($getNodeByKey(anchor.key) && $getNodeByKey(focus.key)) {\n $setSelection(selectionState.clone())\n }\n } else {\n // not ideal, but better than losing the selection. Try to set the selection\n // in a valid place if you remove selected nodes!\n $getRoot().selectEnd()\n }\n },\n { discrete: true, skipTransforms: true },\n )\n }\n }, [editor, selectionState])\n\n const closeListDrawer = () => {\n //restoreSelection() // Should already be stored by the useEffect below\n baseCloseDrawer()\n }\n\n // We need to handle drawer closing via a useEffect, as toggleDrawer / closeDrawer will not be triggered if the drawer\n // is closed by clicking outside of the drawer. This useEffect will handle everything.\n useEffect(() => {\n if (!wasOpen) {\n return\n }\n\n const thisModalState = modalState[listDrawerSlug]\n // Exists in modalState (thus has opened at least once before) and is closed\n if (thisModalState && !thisModalState?.isOpen) {\n setWasOpen(false)\n setTimeout(() => {\n restoreSelection()\n }, 1)\n }\n }, [modalState, listDrawerSlug, restoreSelection, wasOpen])\n\n return {\n closeListDrawer,\n isListDrawerOpen: isDrawerOpen,\n ListDrawer: BaseListDrawer,\n listDrawerSlug,\n ListDrawerToggler: (props) => (\n <BaseListDrawerToggler\n {...props}\n onClick={() => {\n $storeSelection()\n }}\n />\n ),\n openListDrawer: () => {\n $storeSelection()\n baseOpenDrawer()\n setWasOpen(true)\n },\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"initLexicalFeatures.d.ts","sourceRoot":"","sources":["../../src/utilities/initLexicalFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAOtF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC1F,KAAK,IAAI,GAAG;IACV,oBAAoB,EAAE,oBAAoB,CAAA;IAC1C,cAAc,EAAE,cAAc,CAAA;IAC9B,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,EAAE,2BAA2B,CAAA;IAClD,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG;IAC/C,cAAc,EAAE,yBAAyB,CAAC,gBAAgB,CAAC,CAAA;IAC3D,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3C,sBAAsB,EAAE,sBAAsB,CAAA;CAC/C,CA0FA"}
1
+ {"version":3,"file":"initLexicalFeatures.d.ts","sourceRoot":"","sources":["../../src/utilities/initLexicalFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAOtF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC1F,KAAK,IAAI,GAAG;IACV,oBAAoB,EAAE,oBAAoB,CAAA;IAC1C,cAAc,EAAE,cAAc,CAAA;IAC9B,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,qBAAqB,EAAE,2BAA2B,CAAA;IAClD,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG;IAC/C,cAAc,EAAE,yBAAyB,CAAC,gBAAgB,CAAC,CAAA;IAC3D,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3C,sBAAsB,EAAE,sBAAsB,CAAA;CAC/C,CA6FA"}
@@ -45,10 +45,11 @@ export function initLexicalFeatures(args) {
45
45
  const featureSchemaPath = `${args.schemaPath}.lexical_internal_feature.${featureKey}`;
46
46
  featureClientSchemaMap[featureKey] = {};
47
47
  // Like args.fieldSchemaMap, we only want to include the sub-fields of the current feature
48
- for (const [key, entry] of args.clientFieldSchemaMap.entries()) {
49
- if (key.startsWith(featureSchemaPath)) {
50
- featureClientSchemaMap[featureKey][key] = 'fields' in entry ? entry.fields : [entry];
51
- }
48
+ const featureEntries = getFeatureEntriesByPath({
49
+ clientFieldSchemaMap: args.clientFieldSchemaMap
50
+ }).get(featureSchemaPath) ?? new Map();
51
+ for (const [key, entry] of featureEntries) {
52
+ featureClientSchemaMap[featureKey][key] = 'fields' in entry ? entry.fields : [entry];
52
53
  }
53
54
  }
54
55
  if (resolvedFeature.componentImports && typeof resolvedFeature.componentImports === 'object' && !Array.isArray(resolvedFeature.componentImports)) {
@@ -69,4 +70,37 @@ export function initLexicalFeatures(args) {
69
70
  featureClientSchemaMap
70
71
  };
71
72
  }
73
+ const FEATURE_PATH_SEGMENT = '.lexical_internal_feature.';
74
+ const featureEntriesCache = new WeakMap();
75
+ /**
76
+ * Groups the client field schema map entries by the lexical feature they belong to,
77
+ * so each rich text field does not have to scan the whole client field schema map.
78
+ */
79
+ function getFeatureEntriesByPath({
80
+ clientFieldSchemaMap
81
+ }) {
82
+ const cachedEntriesByPath = featureEntriesCache.get(clientFieldSchemaMap);
83
+ if (cachedEntriesByPath) {
84
+ return cachedEntriesByPath;
85
+ }
86
+ const entriesByPath = new Map();
87
+ for (const [key, entry] of clientFieldSchemaMap) {
88
+ let segmentIndex = key.indexOf(FEATURE_PATH_SEGMENT);
89
+ // An entry of a rich text field nested in a feature also belongs to each outer feature
90
+ while (segmentIndex !== -1) {
91
+ const featureKeyStart = segmentIndex + FEATURE_PATH_SEGMENT.length;
92
+ const featureKeyEnd = key.indexOf('.', featureKeyStart);
93
+ const featurePath = featureKeyEnd === -1 ? key : key.slice(0, featureKeyEnd);
94
+ let featureEntries = entriesByPath.get(featurePath);
95
+ if (!featureEntries) {
96
+ featureEntries = new Map();
97
+ entriesByPath.set(featurePath, featureEntries);
98
+ }
99
+ featureEntries.set(key, entry);
100
+ segmentIndex = key.indexOf(FEATURE_PATH_SEGMENT, featureKeyStart);
101
+ }
102
+ }
103
+ featureEntriesCache.set(clientFieldSchemaMap, entriesByPath);
104
+ return entriesByPath;
105
+ }
72
106
  //# sourceMappingURL=initLexicalFeatures.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"initLexicalFeatures.js","names":["getFromImportMap","initLexicalFeatures","args","clientFeatures","resolvedFeatureMapArray","sanitizedEditorConfig","resolvedFeatureMap","sort","a","b","order","featureClientSchemaMap","featureClientImportMap","featureKey","resolvedFeature","ClientFeaturePayloadComponent","ClientFeature","clientFeatureProvider","importMap","payload","PayloadComponent","schemaPath","silent","clientFeatureProps","key","clientProps","generateSchemaMap","featureSchemaPath","entry","clientFieldSchemaMap","entries","startsWith","fields","componentImports","Array","isArray","payloadComponent","Object","resolvedComponent"],"sources":["../../src/utilities/initLexicalFeatures.ts"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\n\nimport { type ClientFieldSchemaMap, type FieldSchemaMap, type Payload } from 'payload'\nimport { getFromImportMap } from 'payload/shared'\n\nimport type {\n BaseClientFeatureProps,\n FeatureProviderProviderClient,\n} from '../features/typesClient.js'\nimport type { SanitizedServerEditorConfig } from '../lexical/config/types.js'\nimport type { FeatureClientSchemaMap, LexicalRichTextFieldProps } from '../types/index.js'\ntype Args = {\n clientFieldSchemaMap: ClientFieldSchemaMap\n fieldSchemaMap: FieldSchemaMap\n i18n: I18nClient\n path: string\n payload: Payload\n sanitizedEditorConfig: SanitizedServerEditorConfig\n schemaPath: string\n}\n\nexport function initLexicalFeatures(args: Args): {\n clientFeatures: LexicalRichTextFieldProps['clientFeatures']\n featureClientImportMap: Record<string, any>\n featureClientSchemaMap: FeatureClientSchemaMap\n} {\n const clientFeatures: LexicalRichTextFieldProps['clientFeatures'] = {}\n\n // turn args.resolvedFeatureMap into an array of [key, value] pairs, ordered by value.order, lowest order first:\n const resolvedFeatureMapArray = [...args.sanitizedEditorConfig.resolvedFeatureMap].sort(\n (a, b) => a[1].order - b[1].order,\n )\n\n const featureClientSchemaMap: FeatureClientSchemaMap = {}\n\n /**\n * All modules added to the import map, keyed by the provided key, if feature.componentImports with type object is used\n */\n const featureClientImportMap: Record<string, any> | undefined = {}\n\n for (const [featureKey, resolvedFeature] of resolvedFeatureMapArray) {\n clientFeatures[featureKey] = {}\n\n /**\n * Handle client features\n */\n const ClientFeaturePayloadComponent = resolvedFeature.ClientFeature\n\n if (ClientFeaturePayloadComponent) {\n const clientFeatureProvider = getFromImportMap<FeatureProviderProviderClient>({\n importMap: args.payload.importMap,\n PayloadComponent: ClientFeaturePayloadComponent,\n schemaPath: 'lexical-clientComponent',\n silent: true,\n })\n\n if (!clientFeatureProvider) {\n continue\n }\n\n const clientFeatureProps: BaseClientFeatureProps<Record<string, any>> =\n resolvedFeature.clientFeatureProps ?? {}\n clientFeatureProps.featureKey = resolvedFeature.key\n clientFeatureProps.order = resolvedFeature.order\n if (\n typeof ClientFeaturePayloadComponent === 'object' &&\n ClientFeaturePayloadComponent.clientProps\n ) {\n clientFeatureProps.clientProps = ClientFeaturePayloadComponent.clientProps\n }\n // As clientFeatureProvider is a client function, we cannot execute it on the server here. Thus, the client will have to execute clientFeatureProvider with its props\n clientFeatures[featureKey] = { clientFeatureProps, clientFeatureProvider }\n }\n\n /**\n * Handle sub-fields (formstate of those)\n */\n // The args.fieldSchemaMap generated before in buildFormState should contain all of lexical features' sub-field schemas\n // as well, as it already called feature.generateSchemaMap for each feature.\n // We will check for the existance resolvedFeature.generateSchemaMap to skip unnecessary loops for constructing featureSchemaMap, but we don't run it here\n if (resolvedFeature.generateSchemaMap) {\n const featureSchemaPath = `${args.schemaPath}.lexical_internal_feature.${featureKey}`\n\n featureClientSchemaMap[featureKey] = {}\n\n // Like args.fieldSchemaMap, we only want to include the sub-fields of the current feature\n for (const [key, entry] of args.clientFieldSchemaMap.entries()) {\n if (key.startsWith(featureSchemaPath)) {\n featureClientSchemaMap[featureKey][key] = 'fields' in entry ? entry.fields : [entry]\n }\n }\n }\n\n if (\n resolvedFeature.componentImports &&\n typeof resolvedFeature.componentImports === 'object' &&\n !Array.isArray(resolvedFeature.componentImports)\n ) {\n for (const [key, payloadComponent] of Object.entries(resolvedFeature.componentImports)) {\n const resolvedComponent = getFromImportMap({\n importMap: args.payload.importMap,\n PayloadComponent: payloadComponent,\n schemaPath: 'lexical-clientComponent',\n silent: true,\n })\n\n featureClientImportMap[`${resolvedFeature.key}.${key}`] = resolvedComponent\n }\n }\n }\n return {\n clientFeatures,\n featureClientImportMap,\n featureClientSchemaMap,\n }\n}\n"],"mappings":"AAGA,SAASA,gBAAgB,QAAQ;AAkBjC,OAAO,SAASC,oBAAoBC,IAAU;EAK5C,MAAMC,cAAA,GAA8D,CAAC;EAErE;EACA,MAAMC,uBAAA,GAA0B,C,GAAIF,IAAA,CAAKG,qBAAqB,CAACC,kBAAkB,CAAC,CAACC,IAAI,CACrF,CAACC,CAAA,EAAGC,CAAA,KAAMD,CAAC,CAAC,EAAE,CAACE,KAAK,GAAGD,CAAC,CAAC,EAAE,CAACC,KAAK;EAGnC,MAAMC,sBAAA,GAAiD,CAAC;EAExD;;;EAGA,MAAMC,sBAAA,GAA0D,CAAC;EAEjE,KAAK,MAAM,CAACC,UAAA,EAAYC,eAAA,CAAgB,IAAIV,uBAAA,EAAyB;IACnED,cAAc,CAACU,UAAA,CAAW,GAAG,CAAC;IAE9B;;;IAGA,MAAME,6BAAA,GAAgCD,eAAA,CAAgBE,aAAa;IAEnE,IAAID,6BAAA,EAA+B;MACjC,MAAME,qBAAA,GAAwBjB,gBAAA,CAAgD;QAC5EkB,SAAA,EAAWhB,IAAA,CAAKiB,OAAO,CAACD,SAAS;QACjCE,gBAAA,EAAkBL,6BAAA;QAClBM,UAAA,EAAY;QACZC,MAAA,EAAQ;MACV;MAEA,IAAI,CAACL,qBAAA,EAAuB;QAC1B;MACF;MAEA,MAAMM,kBAAA,GACJT,eAAA,CAAgBS,kBAAkB,IAAI,CAAC;MACzCA,kBAAA,CAAmBV,UAAU,GAAGC,eAAA,CAAgBU,GAAG;MACnDD,kBAAA,CAAmBb,KAAK,GAAGI,eAAA,CAAgBJ,KAAK;MAChD,IACE,OAAOK,6BAAA,KAAkC,YACzCA,6BAAA,CAA8BU,WAAW,EACzC;QACAF,kBAAA,CAAmBE,WAAW,GAAGV,6BAAA,CAA8BU,WAAW;MAC5E;MACA;MACAtB,cAAc,CAACU,UAAA,CAAW,GAAG;QAAEU,kBAAA;QAAoBN;MAAsB;IAC3E;IAEA;;MAAA,CAGA;IACA;IACA;IACA,IAAIH,eAAA,CAAgBY,iBAAiB,EAAE;MACrC,MAAMC,iBAAA,GAAoB,GAAGzB,IAAA,CAAKmB,UAAU,6BAA6BR,UAAA,EAAY;MAErFF,sBAAsB,CAACE,UAAA,CAAW,GAAG,CAAC;MAEtC;MACA,KAAK,MAAM,CAACW,GAAA,EAAKI,KAAA,CAAM,IAAI1B,IAAA,CAAK2B,oBAAoB,CAACC,OAAO,IAAI;QAC9D,IAAIN,GAAA,CAAIO,UAAU,CAACJ,iBAAA,GAAoB;UACrChB,sBAAsB,CAACE,UAAA,CAAW,CAACW,GAAA,CAAI,GAAG,YAAYI,KAAA,GAAQA,KAAA,CAAMI,MAAM,GAAG,CAACJ,KAAA,CAAM;QACtF;MACF;IACF;IAEA,IACEd,eAAA,CAAgBmB,gBAAgB,IAChC,OAAOnB,eAAA,CAAgBmB,gBAAgB,KAAK,YAC5C,CAACC,KAAA,CAAMC,OAAO,CAACrB,eAAA,CAAgBmB,gBAAgB,GAC/C;MACA,KAAK,MAAM,CAACT,GAAA,EAAKY,gBAAA,CAAiB,IAAIC,MAAA,CAAOP,OAAO,CAAChB,eAAA,CAAgBmB,gBAAgB,GAAG;QACtF,MAAMK,iBAAA,GAAoBtC,gBAAA,CAAiB;UACzCkB,SAAA,EAAWhB,IAAA,CAAKiB,OAAO,CAACD,SAAS;UACjCE,gBAAA,EAAkBgB,gBAAA;UAClBf,UAAA,EAAY;UACZC,MAAA,EAAQ;QACV;QAEAV,sBAAsB,CAAC,GAAGE,eAAA,CAAgBU,GAAG,IAAIA,GAAA,EAAK,CAAC,GAAGc,iBAAA;MAC5D;IACF;EACF;EACA,OAAO;IACLnC,cAAA;IACAS,sBAAA;IACAD;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"initLexicalFeatures.js","names":["getFromImportMap","initLexicalFeatures","args","clientFeatures","resolvedFeatureMapArray","sanitizedEditorConfig","resolvedFeatureMap","sort","a","b","order","featureClientSchemaMap","featureClientImportMap","featureKey","resolvedFeature","ClientFeaturePayloadComponent","ClientFeature","clientFeatureProvider","importMap","payload","PayloadComponent","schemaPath","silent","clientFeatureProps","key","clientProps","generateSchemaMap","featureSchemaPath","featureEntries","getFeatureEntriesByPath","clientFieldSchemaMap","get","Map","entry","fields","componentImports","Array","isArray","payloadComponent","Object","entries","resolvedComponent","FEATURE_PATH_SEGMENT","featureEntriesCache","WeakMap","cachedEntriesByPath","entriesByPath","segmentIndex","indexOf","featureKeyStart","length","featureKeyEnd","featurePath","slice","set"],"sources":["../../src/utilities/initLexicalFeatures.ts"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\n\nimport { type ClientFieldSchemaMap, type FieldSchemaMap, type Payload } from 'payload'\nimport { getFromImportMap } from 'payload/shared'\n\nimport type {\n BaseClientFeatureProps,\n FeatureProviderProviderClient,\n} from '../features/typesClient.js'\nimport type { SanitizedServerEditorConfig } from '../lexical/config/types.js'\nimport type { FeatureClientSchemaMap, LexicalRichTextFieldProps } from '../types/index.js'\ntype Args = {\n clientFieldSchemaMap: ClientFieldSchemaMap\n fieldSchemaMap: FieldSchemaMap\n i18n: I18nClient\n path: string\n payload: Payload\n sanitizedEditorConfig: SanitizedServerEditorConfig\n schemaPath: string\n}\n\nexport function initLexicalFeatures(args: Args): {\n clientFeatures: LexicalRichTextFieldProps['clientFeatures']\n featureClientImportMap: Record<string, any>\n featureClientSchemaMap: FeatureClientSchemaMap\n} {\n const clientFeatures: LexicalRichTextFieldProps['clientFeatures'] = {}\n\n // turn args.resolvedFeatureMap into an array of [key, value] pairs, ordered by value.order, lowest order first:\n const resolvedFeatureMapArray = [...args.sanitizedEditorConfig.resolvedFeatureMap].sort(\n (a, b) => a[1].order - b[1].order,\n )\n\n const featureClientSchemaMap: FeatureClientSchemaMap = {}\n\n /**\n * All modules added to the import map, keyed by the provided key, if feature.componentImports with type object is used\n */\n const featureClientImportMap: Record<string, any> | undefined = {}\n\n for (const [featureKey, resolvedFeature] of resolvedFeatureMapArray) {\n clientFeatures[featureKey] = {}\n\n /**\n * Handle client features\n */\n const ClientFeaturePayloadComponent = resolvedFeature.ClientFeature\n\n if (ClientFeaturePayloadComponent) {\n const clientFeatureProvider = getFromImportMap<FeatureProviderProviderClient>({\n importMap: args.payload.importMap,\n PayloadComponent: ClientFeaturePayloadComponent,\n schemaPath: 'lexical-clientComponent',\n silent: true,\n })\n\n if (!clientFeatureProvider) {\n continue\n }\n\n const clientFeatureProps: BaseClientFeatureProps<Record<string, any>> =\n resolvedFeature.clientFeatureProps ?? {}\n clientFeatureProps.featureKey = resolvedFeature.key\n clientFeatureProps.order = resolvedFeature.order\n if (\n typeof ClientFeaturePayloadComponent === 'object' &&\n ClientFeaturePayloadComponent.clientProps\n ) {\n clientFeatureProps.clientProps = ClientFeaturePayloadComponent.clientProps\n }\n // As clientFeatureProvider is a client function, we cannot execute it on the server here. Thus, the client will have to execute clientFeatureProvider with its props\n clientFeatures[featureKey] = { clientFeatureProps, clientFeatureProvider }\n }\n\n /**\n * Handle sub-fields (formstate of those)\n */\n // The args.fieldSchemaMap generated before in buildFormState should contain all of lexical features' sub-field schemas\n // as well, as it already called feature.generateSchemaMap for each feature.\n // We will check for the existance resolvedFeature.generateSchemaMap to skip unnecessary loops for constructing featureSchemaMap, but we don't run it here\n if (resolvedFeature.generateSchemaMap) {\n const featureSchemaPath = `${args.schemaPath}.lexical_internal_feature.${featureKey}`\n\n featureClientSchemaMap[featureKey] = {}\n\n // Like args.fieldSchemaMap, we only want to include the sub-fields of the current feature\n const featureEntries: ClientFieldSchemaMap =\n getFeatureEntriesByPath({ clientFieldSchemaMap: args.clientFieldSchemaMap }).get(\n featureSchemaPath,\n ) ?? new Map()\n\n for (const [key, entry] of featureEntries) {\n featureClientSchemaMap[featureKey][key] = 'fields' in entry ? entry.fields : [entry]\n }\n }\n\n if (\n resolvedFeature.componentImports &&\n typeof resolvedFeature.componentImports === 'object' &&\n !Array.isArray(resolvedFeature.componentImports)\n ) {\n for (const [key, payloadComponent] of Object.entries(resolvedFeature.componentImports)) {\n const resolvedComponent = getFromImportMap({\n importMap: args.payload.importMap,\n PayloadComponent: payloadComponent,\n schemaPath: 'lexical-clientComponent',\n silent: true,\n })\n\n featureClientImportMap[`${resolvedFeature.key}.${key}`] = resolvedComponent\n }\n }\n }\n return {\n clientFeatures,\n featureClientImportMap,\n featureClientSchemaMap,\n }\n}\n\nconst FEATURE_PATH_SEGMENT = '.lexical_internal_feature.'\n\nconst featureEntriesCache = new WeakMap<ClientFieldSchemaMap, Map<string, ClientFieldSchemaMap>>()\n\n/**\n * Groups the client field schema map entries by the lexical feature they belong to,\n * so each rich text field does not have to scan the whole client field schema map.\n */\nfunction getFeatureEntriesByPath({\n clientFieldSchemaMap,\n}: {\n clientFieldSchemaMap: ClientFieldSchemaMap\n}): Map<string, ClientFieldSchemaMap> {\n const cachedEntriesByPath = featureEntriesCache.get(clientFieldSchemaMap)\n\n if (cachedEntriesByPath) {\n return cachedEntriesByPath\n }\n\n const entriesByPath = new Map<string, ClientFieldSchemaMap>()\n\n for (const [key, entry] of clientFieldSchemaMap) {\n let segmentIndex = key.indexOf(FEATURE_PATH_SEGMENT)\n\n // An entry of a rich text field nested in a feature also belongs to each outer feature\n while (segmentIndex !== -1) {\n const featureKeyStart = segmentIndex + FEATURE_PATH_SEGMENT.length\n const featureKeyEnd = key.indexOf('.', featureKeyStart)\n const featurePath = featureKeyEnd === -1 ? key : key.slice(0, featureKeyEnd)\n\n let featureEntries = entriesByPath.get(featurePath)\n\n if (!featureEntries) {\n featureEntries = new Map()\n entriesByPath.set(featurePath, featureEntries)\n }\n\n featureEntries.set(key, entry)\n\n segmentIndex = key.indexOf(FEATURE_PATH_SEGMENT, featureKeyStart)\n }\n }\n\n featureEntriesCache.set(clientFieldSchemaMap, entriesByPath)\n\n return entriesByPath\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,20 +1,29 @@
1
1
  'use client';
2
2
 
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import { useAddClientFunction } from '@payloadcms/ui';
4
5
  import { useEditorConfigContext } from '../lexical/config/client/EditorConfigProvider.js';
5
6
  export const useLexicalFeature = (featureKey, feature) => {
7
+ const $ = _c(1);
6
8
  const {
7
9
  fieldProps: t0
8
10
  } = useEditorConfigContext();
9
11
  const {
10
12
  schemaPath: schemaPathFromFieldProps
11
13
  } = t0;
12
- const tableCell = {
13
- cellProps: {
14
- schemaPath: []
15
- }
16
- };
17
- const schemaPathFromCellProps = tableCell?.cellProps?.schemaPath ? tableCell?.cellProps?.schemaPath.join(".") : null;
14
+ let t1;
15
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
16
+ const tableCell = {
17
+ cellProps: {
18
+ schemaPath: []
19
+ }
20
+ };
21
+ t1 = tableCell?.cellProps?.schemaPath ? tableCell?.cellProps?.schemaPath.join(".") : null;
22
+ $[0] = t1;
23
+ } else {
24
+ t1 = $[0];
25
+ }
26
+ const schemaPathFromCellProps = t1;
18
27
  const schemaPath = schemaPathFromCellProps || schemaPathFromFieldProps;
19
28
  useAddClientFunction(`lexicalFeature.${schemaPath}.${featureKey}`, feature);
20
29
  };