@payload-onpage/react 0.2.1 → 0.3.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 (217) hide show
  1. package/dist/OnPageClient.d.ts.map +1 -1
  2. package/dist/OnPageClient.js +9 -5
  3. package/dist/OnPageClient.js.map +1 -1
  4. package/dist/annotations.d.ts +1 -1
  5. package/dist/annotations.d.ts.map +1 -1
  6. package/dist/context.d.ts +19 -5
  7. package/dist/context.d.ts.map +1 -1
  8. package/dist/context.js +31 -7
  9. package/dist/context.js.map +1 -1
  10. package/dist/dom.d.ts +16 -12
  11. package/dist/dom.d.ts.map +1 -1
  12. package/dist/dom.js +16 -16
  13. package/dist/dom.js.map +1 -1
  14. package/dist/editor/FieldHost.d.ts.map +1 -1
  15. package/dist/editor/FieldHost.js +18 -11
  16. package/dist/editor/FieldHost.js.map +1 -1
  17. package/dist/editor/OnPageEditor.d.ts +15 -8
  18. package/dist/editor/OnPageEditor.d.ts.map +1 -1
  19. package/dist/editor/OnPageEditor.js +73 -103
  20. package/dist/editor/OnPageEditor.js.map +1 -1
  21. package/dist/editor/editTarget.d.ts +28 -0
  22. package/dist/editor/editTarget.d.ts.map +1 -0
  23. package/dist/editor/editTarget.js +20 -0
  24. package/dist/editor/editTarget.js.map +1 -0
  25. package/dist/editor/useClientDocs.d.ts +4 -0
  26. package/dist/editor/useClientDocs.d.ts.map +1 -0
  27. package/dist/editor/useClientDocs.js +16 -0
  28. package/dist/editor/useClientDocs.js.map +1 -0
  29. package/dist/editor/useEditorSession.d.ts +13 -0
  30. package/dist/editor/useEditorSession.d.ts.map +1 -0
  31. package/dist/editor/useEditorSession.js +30 -0
  32. package/dist/editor/useEditorSession.js.map +1 -0
  33. package/dist/editor/useFlash.d.ts +4 -0
  34. package/dist/editor/useFlash.d.ts.map +1 -0
  35. package/dist/editor/useFlash.js +16 -0
  36. package/dist/editor/useFlash.js.map +1 -0
  37. package/dist/editor/useGhosts.d.ts +5 -7
  38. package/dist/editor/useGhosts.d.ts.map +1 -1
  39. package/dist/editor/useGhosts.js.map +1 -1
  40. package/dist/editor/usePageEvents.d.ts.map +1 -1
  41. package/dist/editor/usePageEvents.js +16 -16
  42. package/dist/editor/usePageEvents.js.map +1 -1
  43. package/dist/editor-kit.d.ts +10 -6
  44. package/dist/editor-kit.d.ts.map +1 -1
  45. package/dist/editor-kit.js +8 -5
  46. package/dist/editor-kit.js.map +1 -1
  47. package/dist/editors/CheckboxEditor.d.ts +6 -1
  48. package/dist/editors/CheckboxEditor.d.ts.map +1 -1
  49. package/dist/editors/CheckboxEditor.js +6 -3
  50. package/dist/editors/CheckboxEditor.js.map +1 -1
  51. package/dist/editors/ColorEditor.d.ts +3 -1
  52. package/dist/editors/ColorEditor.d.ts.map +1 -1
  53. package/dist/editors/ColorEditor.js +9 -15
  54. package/dist/editors/ColorEditor.js.map +1 -1
  55. package/dist/editors/DateEditor.d.ts +3 -1
  56. package/dist/editors/DateEditor.d.ts.map +1 -1
  57. package/dist/editors/DateEditor.js +10 -12
  58. package/dist/editors/DateEditor.js.map +1 -1
  59. package/dist/editors/InlineText.d.ts +2 -2
  60. package/dist/editors/InlineText.d.ts.map +1 -1
  61. package/dist/editors/InlineText.js +2 -3
  62. package/dist/editors/InlineText.js.map +1 -1
  63. package/dist/editors/NumberEditor.d.ts +3 -1
  64. package/dist/editors/NumberEditor.d.ts.map +1 -1
  65. package/dist/editors/NumberEditor.js +9 -17
  66. package/dist/editors/NumberEditor.js.map +1 -1
  67. package/dist/editors/RelationshipEditor.d.ts +7 -1
  68. package/dist/editors/RelationshipEditor.d.ts.map +1 -1
  69. package/dist/editors/RelationshipEditor.js +10 -18
  70. package/dist/editors/RelationshipEditor.js.map +1 -1
  71. package/dist/editors/SelectEditor.d.ts +4 -1
  72. package/dist/editors/SelectEditor.d.ts.map +1 -1
  73. package/dist/editors/SelectEditor.js +8 -13
  74. package/dist/editors/SelectEditor.js.map +1 -1
  75. package/dist/editors/UploadEditor.d.ts +7 -1
  76. package/dist/editors/UploadEditor.d.ts.map +1 -1
  77. package/dist/editors/UploadEditor.js +5 -5
  78. package/dist/editors/UploadEditor.js.map +1 -1
  79. package/dist/editors/index.d.ts +0 -1
  80. package/dist/editors/index.d.ts.map +1 -1
  81. package/dist/editors/index.js +56 -16
  82. package/dist/editors/index.js.map +1 -1
  83. package/dist/editors/kit.d.ts +39 -0
  84. package/dist/editors/kit.d.ts.map +1 -0
  85. package/dist/editors/kit.js +44 -0
  86. package/dist/editors/kit.js.map +1 -0
  87. package/dist/editors/useDebouncedSearch.d.ts +10 -6
  88. package/dist/editors/useDebouncedSearch.d.ts.map +1 -1
  89. package/dist/editors/useDebouncedSearch.js +11 -7
  90. package/dist/editors/useDebouncedSearch.js.map +1 -1
  91. package/dist/geometry.d.ts +49 -0
  92. package/dist/geometry.d.ts.map +1 -0
  93. package/dist/geometry.js +48 -0
  94. package/dist/geometry.js.map +1 -0
  95. package/dist/hub.d.ts +4 -4
  96. package/dist/hub.d.ts.map +1 -1
  97. package/dist/hub.js.map +1 -1
  98. package/dist/index.d.ts +3 -3
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +2 -2
  101. package/dist/index.js.map +1 -1
  102. package/dist/layout.d.ts.map +1 -1
  103. package/dist/layout.js +4 -2
  104. package/dist/layout.js.map +1 -1
  105. package/dist/locators.d.ts +0 -2
  106. package/dist/locators.d.ts.map +1 -1
  107. package/dist/locators.js +10 -16
  108. package/dist/locators.js.map +1 -1
  109. package/dist/messages.d.ts +15 -2
  110. package/dist/messages.d.ts.map +1 -1
  111. package/dist/messages.js +5 -0
  112. package/dist/messages.js.map +1 -1
  113. package/dist/registry.d.ts +21 -2
  114. package/dist/registry.d.ts.map +1 -1
  115. package/dist/registry.js +31 -6
  116. package/dist/registry.js.map +1 -1
  117. package/dist/rowOps.d.ts +20 -0
  118. package/dist/rowOps.d.ts.map +1 -0
  119. package/dist/rowOps.js +48 -0
  120. package/dist/rowOps.js.map +1 -0
  121. package/dist/sanitize.d.ts +2 -0
  122. package/dist/sanitize.d.ts.map +1 -1
  123. package/dist/sanitize.js +3 -0
  124. package/dist/sanitize.js.map +1 -1
  125. package/dist/settings.d.ts +10 -0
  126. package/dist/settings.d.ts.map +1 -0
  127. package/dist/settings.js +30 -0
  128. package/dist/settings.js.map +1 -0
  129. package/dist/styles.d.ts +0 -4
  130. package/dist/styles.d.ts.map +1 -1
  131. package/dist/styles.js +2 -1
  132. package/dist/styles.js.map +1 -1
  133. package/dist/targets.d.ts +1 -1
  134. package/dist/targets.d.ts.map +1 -1
  135. package/dist/types.d.ts +71 -46
  136. package/dist/types.d.ts.map +1 -1
  137. package/dist/ui/BlockPicker.d.ts.map +1 -1
  138. package/dist/ui/BlockPicker.js +6 -5
  139. package/dist/ui/BlockPicker.js.map +1 -1
  140. package/dist/ui/Dialog.d.ts +0 -5
  141. package/dist/ui/Dialog.d.ts.map +1 -1
  142. package/dist/ui/Dialog.js +10 -6
  143. package/dist/ui/Dialog.js.map +1 -1
  144. package/dist/ui/Dock.d.ts +1 -6
  145. package/dist/ui/Dock.d.ts.map +1 -1
  146. package/dist/ui/Dock.js +46 -28
  147. package/dist/ui/Dock.js.map +1 -1
  148. package/dist/ui/Overlay.d.ts.map +1 -1
  149. package/dist/ui/Overlay.js +39 -37
  150. package/dist/ui/Overlay.js.map +1 -1
  151. package/dist/ui/PreviewToolbar.d.ts +3 -3
  152. package/dist/ui/PreviewToolbar.d.ts.map +1 -1
  153. package/dist/ui/PreviewToolbar.js +4 -6
  154. package/dist/ui/PreviewToolbar.js.map +1 -1
  155. package/dist/ui/SettingsPanel.d.ts +0 -9
  156. package/dist/ui/SettingsPanel.d.ts.map +1 -1
  157. package/dist/ui/SettingsPanel.js +36 -41
  158. package/dist/ui/SettingsPanel.js.map +1 -1
  159. package/dist/ui/ToolbarButton.d.ts +12 -0
  160. package/dist/ui/ToolbarButton.d.ts.map +1 -0
  161. package/dist/ui/ToolbarButton.js +7 -0
  162. package/dist/ui/ToolbarButton.js.map +1 -0
  163. package/dist/useEvent.d.ts +1 -1
  164. package/dist/useEvent.d.ts.map +1 -1
  165. package/dist/useEvent.js +3 -1
  166. package/dist/useEvent.js.map +1 -1
  167. package/dist/useIsClient.d.ts +5 -0
  168. package/dist/useIsClient.d.ts.map +1 -0
  169. package/dist/useIsClient.js +8 -0
  170. package/dist/useIsClient.js.map +1 -0
  171. package/package.json +2 -2
  172. package/src/OnPageClient.tsx +9 -5
  173. package/src/annotations.ts +1 -1
  174. package/src/context.tsx +53 -10
  175. package/src/dom.ts +17 -18
  176. package/src/editor/FieldHost.tsx +26 -11
  177. package/src/editor/OnPageEditor.tsx +103 -160
  178. package/src/editor/editTarget.ts +41 -0
  179. package/src/editor/useClientDocs.ts +19 -0
  180. package/src/editor/useEditorSession.ts +36 -0
  181. package/src/editor/useFlash.ts +18 -0
  182. package/src/editor/useGhosts.ts +5 -7
  183. package/src/editor/usePageEvents.ts +13 -14
  184. package/src/editor-kit.ts +10 -6
  185. package/src/editors/CheckboxEditor.tsx +11 -12
  186. package/src/editors/ColorEditor.tsx +15 -35
  187. package/src/editors/DateEditor.tsx +18 -37
  188. package/src/editors/InlineText.tsx +4 -5
  189. package/src/editors/NumberEditor.tsx +15 -36
  190. package/src/editors/RelationshipEditor.tsx +18 -36
  191. package/src/editors/SelectEditor.tsx +14 -22
  192. package/src/editors/UploadEditor.tsx +6 -6
  193. package/src/editors/index.ts +56 -16
  194. package/src/editors/kit.tsx +97 -0
  195. package/src/editors/useDebouncedSearch.ts +18 -10
  196. package/src/geometry.ts +62 -0
  197. package/src/hub.ts +5 -5
  198. package/src/index.ts +5 -2
  199. package/src/layout.ts +5 -2
  200. package/src/locators.ts +11 -14
  201. package/src/messages.ts +26 -5
  202. package/src/registry.ts +42 -8
  203. package/src/rowOps.ts +64 -0
  204. package/src/sanitize.ts +6 -0
  205. package/src/settings.ts +49 -0
  206. package/src/styles.ts +2 -1
  207. package/src/targets.ts +1 -1
  208. package/src/types.ts +78 -45
  209. package/src/ui/BlockPicker.tsx +6 -7
  210. package/src/ui/Dialog.tsx +9 -5
  211. package/src/ui/Dock.tsx +67 -50
  212. package/src/ui/Overlay.tsx +75 -102
  213. package/src/ui/PreviewToolbar.tsx +7 -15
  214. package/src/ui/SettingsPanel.tsx +84 -81
  215. package/src/ui/ToolbarButton.tsx +36 -0
  216. package/src/useEvent.ts +4 -2
  217. package/src/useIsClient.ts +15 -0
@@ -1 +1 @@
1
- {"version":3,"file":"OnPageClient.d.ts","sourceRoot":"","sources":["../src/OnPageClient.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGvE,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,GAAG,EAAE,CAAC,CAAA;IACN,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAK,SAAS,CAAA;IAC1C,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAErF,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAChF,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,+BAuC5B"}
1
+ {"version":3,"file":"OnPageClient.d.ts","sourceRoot":"","sources":["../src/OnPageClient.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGvE,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,GAAG,EAAE,CAAC,CAAA;IACN,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAK,SAAS,CAAA;IAC1C,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAErF,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAChF,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,+BA0C5B"}
@@ -12,18 +12,19 @@ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
12
12
  * invisible markers (turn off with `autoMap={false}`).
13
13
  */
14
14
  import { useEvent } from "./useEvent.js";
15
+ import { toRef } from "./annotations.js";
15
16
  import { encodeDocument, refKey } from '@payload-onpage/core';
16
17
  import { useEffect, useMemo } from 'react';
17
18
  import { editable, editableOff } from "./annotations.js";
18
- import { useOnPageOptional } from "./context.js";
19
+ import { useOnPageOptional, useSessionSnapshot } from "./context.js";
19
20
  export function OnPageClient(props) {
20
21
  const { doc, render, global: globalSlug, collection } = props;
21
22
  const ctx = useOnPageOptional();
22
23
  const id = doc?.id;
23
24
  const ref = useMemo(() => globalSlug
24
- ? { kind: 'global', slug: globalSlug }
25
- : collection && id != null
26
- ? { kind: 'collection', slug: collection, id }
25
+ ? toRef({ global: globalSlug })
26
+ : collection
27
+ ? toRef({ collection, doc: { id } })
27
28
  : null, [globalSlug, collection, id]);
28
29
  const key = ref ? refKey(ref) : null;
29
30
  const enabled = !!ctx && !!ref;
@@ -36,7 +37,8 @@ export function OnPageClient(props) {
36
37
  return off;
37
38
  });
38
39
  useEffect(() => (enabled && ref ? join(ref) : undefined), [enabled, ref, join]);
39
- const state = key ? ctx?.snap.docs[key] : undefined;
40
+ const snap = useSessionSnapshot(ctx?.session);
41
+ const state = key ? snap.docs[key] : undefined;
40
42
  const stateDoc = state?.doc;
41
43
  const fields = state?.schema?.fields;
42
44
  const autoMap = props.autoMap !== false;
@@ -46,6 +48,8 @@ export function OnPageClient(props) {
46
48
  return autoMap && fields && key ? encodeDocument(stateDoc, fields, key) : stateDoc;
47
49
  }, [stateDoc, fields, key, autoMap, doc]);
48
50
  const e = useMemo(() => (enabled && ref ? editable(ref, { enabled: true }) : editableOff), [enabled, ref]);
51
+ // The session's copy started as this `doc` (same document, edited, held as plain JSON),
52
+ // so it is handed back as the page's own type.
49
53
  return _jsx(_Fragment, { children: render(current, e) });
50
54
  }
51
55
  //# sourceMappingURL=OnPageClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OnPageClient.js","sourceRoot":"","sources":["../src/OnPageClient.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OnPageClient.js","sourceRoot":"","sources":["../src/OnPageClient.tsx"],"names":[],"mappings":"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"}
@@ -39,7 +39,7 @@ export declare const editableOff: Editable;
39
39
  export type EditableTarget = DocRef | {
40
40
  collection: string;
41
41
  doc: {
42
- id?: string | number;
42
+ id?: string | number | undefined;
43
43
  } | null | undefined;
44
44
  } | {
45
45
  global: string;
@@ -1 +1 @@
1
- {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAU,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAE3E,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;AAE5D,eAAO,MAAM,IAAI;;;;;;;CAOP,CAAA;AAEV,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEnC,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,2FAA2F;IAC3F,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC5D,kDAAkD;IAClD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC1C,sEAAsE;IACtE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACxC,qFAAqF;IACrF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAC9C;AAGD,eAAO,MAAM,WAAW,EAAE,QAMzB,CAAA;AAED,MAAM,MAAM,cAAc,GACtB,MAAM,GACN;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,GACxE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtB,wBAAgB,KAAK,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAItD;AAED,gDAAgD;AAChD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,QAAQ,CAgBrF;AAED,uEAAuE;AACvE,eAAO,MAAM,CAAC,GAAI,GAAG,OAAO,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,MAAyB,CAAA"}
1
+ {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAU,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAE3E,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;AAE5D,eAAO,MAAM,IAAI;;;;;;;CAOP,CAAA;AAEV,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEnC,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,2FAA2F;IAC3F,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC5D,kDAAkD;IAClD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC1C,sEAAsE;IACtE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACxC,qFAAqF;IACrF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAC9C;AAGD,eAAO,MAAM,WAAW,EAAE,QAMzB,CAAA;AAED,MAAM,MAAM,cAAc,GACtB,MAAM,GACN;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,GACpF;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtB,wBAAgB,KAAK,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAItD;AAED,gDAAgD;AAChD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,QAAQ,CAgBrF;AAED,uEAAuE;AACvE,eAAO,MAAM,CAAC,GAAI,GAAG,OAAO,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,MAAyB,CAAA"}
package/dist/context.d.ts CHANGED
@@ -1,7 +1,21 @@
1
- import type { OnPageContextValue } from './types.ts';
2
- export declare const OnPageContext: import("react").Context<OnPageContextValue | null>;
3
- /** The editor, for code rendered inside it (field editors, panels). */
1
+ import { type ReactNode } from 'react';
2
+ import type { EditorSession, SessionSnapshot } from '@payload-onpage/core';
3
+ import type { OnPageApi, OnPageContextValue, OnPageState } from './types.ts';
4
+ /** Provides the editor to everything it renders (two contexts: the stable API and the changing state). */
5
+ export declare function OnPageProvider({ api, state, children, }: {
6
+ api: OnPageApi;
7
+ state: OnPageState;
8
+ children: ReactNode;
9
+ }): import("react").JSX.Element;
10
+ /** The editor, for code rendered inside it (field editors, panels): its API and state. */
4
11
  export declare function useOnPage(): OnPageContextValue;
5
- /** The editor, from inside it or anywhere on the page; null when no editor is mounted (public pages). */
6
- export declare function useOnPageOptional(): OnPageContextValue | null;
12
+ /** Only the editor's API (session, actions): re-renders when the editor is reconfigured, not on every edit. */
13
+ export declare function useOnPageApi(): OnPageApi;
14
+ /**
15
+ * The editor's API from inside it or anywhere on the page; null when no editor
16
+ * is mounted (public pages). Read documents with `useSessionSnapshot(api?.session)`.
17
+ */
18
+ export declare function useOnPageOptional(): OnPageApi | null;
19
+ /** A session's documents, re-rendering when they change (an empty snapshot without a session). */
20
+ export declare function useSessionSnapshot(session: EditorSession | null | undefined): SessionSnapshot;
7
21
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,eAAO,MAAM,aAAa,oDAAiD,CAAA;AAE3E,uEAAuE;AACvE,wBAAgB,SAAS,IAAI,kBAAkB,CAI9C;AAID,yGAAyG;AACzG,wBAAgB,iBAAiB,IAAI,kBAAkB,GAAG,IAAI,CAI7D"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAE1E,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAK5E,0GAA0G;AAC1G,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,KAAK,EACL,QAAQ,GACT,EAAE;IACD,GAAG,EAAE,SAAS,CAAA;IACd,KAAK,EAAE,WAAW,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;CACpB,+BAMA;AAED,0FAA0F;AAC1F,wBAAgB,SAAS,IAAI,kBAAkB,CAK9C;AAED,+GAA+G;AAC/G,wBAAgB,YAAY,IAAI,SAAS,CAIxC;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,GAAG,IAAI,CAIpD;AAMD,kGAAkG;AAClG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CAM7F"}
package/dist/context.js CHANGED
@@ -1,19 +1,43 @@
1
1
  'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
2
3
  import { createContext, useContext, useSyncExternalStore } from 'react';
3
4
  import { hub } from "./hub.js";
4
- export const OnPageContext = createContext(null);
5
- /** The editor, for code rendered inside it (field editors, panels). */
5
+ const ApiContext = createContext(null);
6
+ const StateContext = createContext(null);
7
+ /** Provides the editor to everything it renders (two contexts: the stable API and the changing state). */
8
+ export function OnPageProvider({ api, state, children, }) {
9
+ return (_jsx(ApiContext.Provider, { value: api, children: _jsx(StateContext.Provider, { value: state, children: children }) }));
10
+ }
11
+ /** The editor, for code rendered inside it (field editors, panels): its API and state. */
6
12
  export function useOnPage() {
7
- const ctx = useContext(OnPageContext);
8
- if (!ctx)
13
+ const api = useContext(ApiContext);
14
+ const state = useContext(StateContext);
15
+ if (!api || !state)
9
16
  throw new Error('useOnPage must be used inside <OnPageEditor>');
10
- return ctx;
17
+ return { ...api, ...state };
18
+ }
19
+ /** Only the editor's API (session, actions): re-renders when the editor is reconfigured, not on every edit. */
20
+ export function useOnPageApi() {
21
+ const api = useContext(ApiContext);
22
+ if (!api)
23
+ throw new Error('useOnPageApi must be used inside <OnPageEditor>');
24
+ return api;
11
25
  }
12
26
  const getNull = () => null;
13
- /** The editor, from inside it or anywhere on the page; null when no editor is mounted (public pages). */
27
+ /**
28
+ * The editor's API from inside it or anywhere on the page; null when no editor
29
+ * is mounted (public pages). Read documents with `useSessionSnapshot(api?.session)`.
30
+ */
14
31
  export function useOnPageOptional() {
15
- const inside = useContext(OnPageContext);
32
+ const inside = useContext(ApiContext);
16
33
  const outside = useSyncExternalStore(hub.subscribe, hub.get, getNull);
17
34
  return inside ?? outside;
18
35
  }
36
+ const EMPTY = { docs: {}, canUndo: false, canRedo: false, busy: false };
37
+ const noopSubscribe = () => () => { };
38
+ const getEmpty = () => EMPTY;
39
+ /** A session's documents, re-rendering when they change (an empty snapshot without a session). */
40
+ export function useSessionSnapshot(session) {
41
+ return useSyncExternalStore(session?.subscribe ?? noopSubscribe, session?.getSnapshot ?? getEmpty, getEmpty);
42
+ }
19
43
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG9B,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAA;AAE3E,uEAAuE;AACvE,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;IACrC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACzE,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;AAE1B,yGAAyG;AACzG,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACrE,OAAO,MAAM,IAAI,OAAO,CAAA;AAC1B,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAkB,MAAM,OAAO,CAAA;AAEvF,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG9B,MAAM,UAAU,GAAG,aAAa,CAAmB,IAAI,CAAC,CAAA;AACxD,MAAM,YAAY,GAAG,aAAa,CAAqB,IAAI,CAAC,CAAA;AAE5D,0GAA0G;AAC1G,MAAM,UAAU,cAAc,CAAC,EAC7B,GAAG,EACH,KAAK,EACL,QAAQ,GAKT;IACC,OAAO,CACL,KAAC,UAAU,CAAC,QAAQ,IAAC,KAAK,EAAE,GAAG,YAC7B,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAyB,GACnD,CACvB,CAAA;AACH,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IACtC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACnF,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAA;AAC7B,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IAClC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IAC5E,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;AAE1B;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACrE,OAAO,MAAM,IAAI,OAAO,CAAA;AAC1B,CAAC;AAED,MAAM,KAAK,GAAoB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AACxF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;AACpC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,KAAK,CAAA;AAE5B,kGAAkG;AAClG,MAAM,UAAU,kBAAkB,CAAC,OAAyC;IAC1E,OAAO,oBAAoB,CACzB,OAAO,EAAE,SAAS,IAAI,aAAa,EACnC,OAAO,EAAE,WAAW,IAAI,QAAQ,EAChC,QAAQ,CACT,CAAA;AACH,CAAC"}
package/dist/dom.d.ts CHANGED
@@ -1,8 +1,19 @@
1
1
  /** DOM helpers shared by the editor UI (browser-only, no React). */
2
- /** Attribute that hides a page element while an editor or ghost stands in for it. */
3
- export declare const HIDDEN = "data-onpage-hidden";
4
- /** Marks the editor's own UI, which locators and click handling ignore. */
5
- export declare const UI = "data-onpage-ui";
2
+ /** Every DOM attribute the editor sets (annotations, which sites write, are `ATTR`). */
3
+ export declare const DOM_ATTR: {
4
+ /** Hides a page element while an editor or ghost stands in for it. */
5
+ readonly hidden: "data-onpage-hidden";
6
+ /** Marks the editor's own UI, which locators and click handling ignore. */
7
+ readonly ui: "data-onpage-ui";
8
+ /** A page target the editor made keyboard-focusable. */
9
+ readonly focusable: "data-onpage-focusable";
10
+ /** On <html> while editing. */
11
+ readonly editing: "data-onpage-editing";
12
+ /** The editor's injected stylesheet. */
13
+ readonly styles: "data-onpage-styles";
14
+ };
15
+ export declare const HIDDEN: "data-onpage-hidden";
16
+ export declare const UI: "data-onpage-ui";
6
17
  /** Computed styles copied onto an inline editor so it looks like the element it replaces. */
7
18
  export declare const TYPOGRAPHY: readonly ["fontFamily", "fontSize", "fontWeight", "fontStyle", "lineHeight", "letterSpacing", "wordSpacing", "textTransform", "textAlign", "textIndent", "color", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft"];
8
19
  export declare function copyTypography(from: Element, to: HTMLElement): void;
@@ -30,13 +41,6 @@ export declare function placeCaret(el: HTMLElement, point?: {
30
41
  x: number;
31
42
  y: number;
32
43
  }): void;
33
- /** Position a fixed popover below (or above) an element, kept inside the viewport. */
34
- export declare function popoverPosition(el: Element | null, size?: {
35
- width: number;
36
- height: number;
37
- }): {
38
- top: number;
39
- left: number;
40
- };
44
+ export { popoverPosition } from './geometry.ts';
41
45
  export declare const focusableIn: (root: Element) => HTMLElement[];
42
46
  //# sourceMappingURL=dom.d.ts.map
package/dist/dom.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,qFAAqF;AACrF,eAAO,MAAM,MAAM,uBAAuB,CAAA;AAC1C,2EAA2E;AAC3E,eAAO,MAAM,EAAE,mBAAmB,CAAA;AAElC,6FAA6F;AAC7F,eAAO,MAAM,UAAU,iOAgBb,CAAA;AAEV,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAGnE;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAI1E;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CACvB,GAAG,EAAE,WAAW,EAChB,EAAE,EAAE,OAAO,EACX,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACpD,IAAI,CAMN;AAED,kCAAkC;AAClC,eAAO,MAAM,MAAM,GAAI,MAAM,WAAW,GAAG,IAAI,KAAG,OACI,CAAA;AAEtD,4FAA4F;AAC5F,eAAO,MAAM,QAAQ,GAAI,GAAG,WAAW,GAAG,IAAI,KAAG,OAKtB,CAAA;AAE3B,kFAAkF;AAClF,wBAAgB,OAAO,CACrB,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,MAAM,EAAE,OAAO,GACd;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAWvC;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAalF;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAC7B,EAAE,EAAE,OAAO,GAAG,IAAI,EAClB,IAAI;;;CAA8B,GACjC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAS/B;AAKD,eAAO,MAAM,WAAW,GAAI,MAAM,OAAO,KAAG,WAAW,EAGpD,CAAA"}
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,wFAAwF;AACxF,eAAO,MAAM,QAAQ;IACnB,sEAAsE;;IAEtE,2EAA2E;;IAE3E,wDAAwD;;IAExD,+BAA+B;;IAE/B,wCAAwC;;CAEhC,CAAA;AAEV,eAAO,MAAM,MAAM,sBAAkB,CAAA;AACrC,eAAO,MAAM,EAAE,kBAAc,CAAA;AAE7B,6FAA6F;AAC7F,eAAO,MAAM,UAAU,iOAgBb,CAAA;AAEV,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAGnE;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAI1E;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CACvB,GAAG,EAAE,WAAW,EAChB,EAAE,EAAE,OAAO,EACX,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACpD,IAAI,CAMN;AAED,kCAAkC;AAClC,eAAO,MAAM,MAAM,GAAI,MAAM,WAAW,GAAG,IAAI,KAAG,OACI,CAAA;AAEtD,4FAA4F;AAC5F,eAAO,MAAM,QAAQ,GAAI,GAAG,WAAW,GAAG,IAAI,KAAG,OAKtB,CAAA;AAE3B,kFAAkF;AAClF,wBAAgB,OAAO,CACrB,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,MAAM,EAAE,OAAO,GACd;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAWvC;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAalF;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAK/C,eAAO,MAAM,WAAW,GAAI,MAAM,OAAO,KAAG,WAAW,EAGpD,CAAA"}
package/dist/dom.js CHANGED
@@ -1,8 +1,19 @@
1
1
  /** DOM helpers shared by the editor UI (browser-only, no React). */
2
- /** Attribute that hides a page element while an editor or ghost stands in for it. */
3
- export const HIDDEN = 'data-onpage-hidden';
4
- /** Marks the editor's own UI, which locators and click handling ignore. */
5
- export const UI = 'data-onpage-ui';
2
+ /** Every DOM attribute the editor sets (annotations, which sites write, are `ATTR`). */
3
+ export const DOM_ATTR = {
4
+ /** Hides a page element while an editor or ghost stands in for it. */
5
+ hidden: 'data-onpage-hidden',
6
+ /** Marks the editor's own UI, which locators and click handling ignore. */
7
+ ui: 'data-onpage-ui',
8
+ /** A page target the editor made keyboard-focusable. */
9
+ focusable: 'data-onpage-focusable',
10
+ /** On <html> while editing. */
11
+ editing: 'data-onpage-editing',
12
+ /** The editor's injected stylesheet. */
13
+ styles: 'data-onpage-styles',
14
+ };
15
+ export const HIDDEN = DOM_ATTR.hidden;
16
+ export const UI = DOM_ATTR.ui;
6
17
  /** Computed styles copied onto an inline editor so it looks like the element it replaces. */
7
18
  export const TYPOGRAPHY = [
8
19
  'fontFamily',
@@ -78,18 +89,7 @@ export function placeCaret(el, point) {
78
89
  sel.removeAllRanges();
79
90
  sel.addRange(range);
80
91
  }
81
- /** Position a fixed popover below (or above) an element, kept inside the viewport. */
82
- export function popoverPosition(el, size = { width: 300, height: 320 }) {
83
- const vw = window.innerWidth;
84
- const vh = window.innerHeight;
85
- if (!el)
86
- return { top: 80, left: Math.max(8, vw / 2 - size.width / 2) };
87
- const r = el.getBoundingClientRect();
88
- const below = r.bottom + 8;
89
- const top = below + size.height < vh ? below : Math.max(8, r.top - 8 - size.height);
90
- const left = Math.min(Math.max(8, r.left), vw - size.width - 8);
91
- return { top, left };
92
- }
92
+ export { popoverPosition } from "./geometry.js";
93
93
  const FOCUSABLE = 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])';
94
94
  export const focusableIn = (root) => Array.from(root.querySelectorAll(FOCUSABLE)).filter((el) => !el.hasAttribute('disabled'));
95
95
  //# sourceMappingURL=dom.js.map
package/dist/dom.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FieldHost.d.ts","sourceRoot":"","sources":["../../src/editor/FieldHost.tsx"],"names":[],"mappings":"AAOA,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,sCAyDjE"}
1
+ {"version":3,"file":"FieldHost.d.ts","sourceRoot":"","sources":["../../src/editor/FieldHost.tsx"],"names":[],"mappings":"AAQA,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,sCAOjE"}
@@ -1,17 +1,25 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { fieldAtPath, getAt } from '@payload-onpage/core';
3
+ import { fieldAtPath, getAt, isReady } from '@payload-onpage/core';
4
4
  import { Suspense, useCallback } from 'react';
5
5
  import { useOnPage } from "../context.js";
6
+ import { canEdit } from "../registry.js";
6
7
  /** Renders the open field editor, if it belongs to this layer. */
7
8
  export function FieldHost({ mode }) {
8
- const { editing, editors, session, snap, targets, setEditing, addGhost, isLive, t } = useOnPage();
9
- const def = editing ? editors[editing.editor] : undefined;
10
- const state = editing ? snap.docs[editing.key] : undefined;
11
- const key = editing?.key ?? '';
12
- const path = editing?.path ?? '';
9
+ const { editing, editors, snap } = useOnPage();
10
+ if (!editing)
11
+ return null;
12
+ const def = editors[editing.editor];
13
+ const state = snap.docs[editing.key];
14
+ if (!def || def.mode !== mode || !isReady(state))
15
+ return null;
16
+ return _jsx(OpenEditor, { editing: editing, def: def, state: state });
17
+ }
18
+ /** The editor for one field of a loaded document. */
19
+ function OpenEditor({ editing, def, state, }) {
20
+ const { session, targets, setEditing, addGhost, isLive, t } = useOnPage();
21
+ const { key, path, el: clicked } = editing;
13
22
  const live = isLive(key);
14
- const clicked = editing?.el;
15
23
  const element = useCallback(() => (clicked?.isConnected ? clicked : (targets.find(key, path)?.el ?? null)), [clicked, targets, key, path]);
16
24
  const close = useCallback(() => {
17
25
  session.cancelTransient(key);
@@ -24,13 +32,12 @@ export function FieldHost({ mode }) {
24
32
  }, [session, key, path, live]);
25
33
  const preview = useCallback((value) => session.setValue(key, path, value, { transient: true }), [session, key, path]);
26
34
  const ghost = useCallback((g) => addGhost({ key, path, ...g }), [addGhost, key, path]);
27
- if (!editing || !def || def.mode !== mode || !state?.schema || !state.doc)
28
- return null;
29
35
  const field = fieldAtPath(state.schema.fields, state.doc, path)?.field;
30
- if (!field)
36
+ if (!field || !canEdit(def, field))
31
37
  return null;
32
38
  const Editor = def.component;
39
+ const raw = getAt(state.doc, path);
33
40
  // Editors may be lazy (the rich-text editor is): render nothing until they've loaded.
34
- return (_jsx(Suspense, { fallback: null, children: _jsx(Editor, { docKey: key, path: path, field: field, element: element, value: getAt(state.doc, path), commit: commit, preview: preview, close: close, ghost: ghost, live: live, point: editing.point, t: t }, `${key}|${path}`) }));
41
+ return (_jsx(Suspense, { fallback: null, children: _jsx(Editor, { docKey: key, path: path, field: field, element: element, value: def.normalize ? def.normalize(raw, field) : raw, commit: commit, preview: preview, close: close, ghost: ghost, live: live, point: editing.point, t: t }, `${key}|${path}`) }));
35
42
  }
36
43
  //# sourceMappingURL=FieldHost.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FieldHost.js","sourceRoot":"","sources":["../../src/editor/FieldHost.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FieldHost.js","sourceRoot":"","sources":["../../src/editor/FieldHost.tsx"],"names":[],"mappings":"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"}
@@ -1,25 +1,32 @@
1
+ /**
2
+ * The on-page editor. Mount it once (the Next adapter's <OnPage /> does) and
3
+ * it finds editable content through the Locator, opens each document it finds
4
+ * in an EditorSession, and edits through the field-editor registry. Saves go
5
+ * through the DataSource; the Renderer shows them (server refresh by default,
6
+ * instant for documents rendered with <OnPageClient>).
7
+ */
1
8
  import { type DataSource, type Locator, type MediaLibrary, type Renderer } from '@payload-onpage/core';
2
9
  import { type Messages } from '../messages.ts';
3
10
  import type { FieldEditorDef, Links } from '../types.ts';
4
11
  export interface OnPageEditorProps {
5
12
  dataSource: DataSource;
6
13
  /** Image search/upload (e.g. `payloadUploads()`). Without it, upload fields can't be changed. */
7
- media?: MediaLibrary;
14
+ media?: MediaLibrary | undefined;
8
15
  /** How elements map to fields. Default: composite(annotations(), stega()). */
9
- locator?: Locator;
16
+ locator?: Locator | undefined;
10
17
  /** How saved changes reach the page. Default: clientState() (no server refresh). */
11
- renderer?: Renderer;
18
+ renderer?: Renderer | undefined;
12
19
  /** Extra or replacement field editors by id; `null` removes a default. */
13
- editors?: Record<string, FieldEditorDef | null>;
20
+ editors?: Record<string, FieldEditorDef | null> | undefined;
14
21
  links: Links;
15
22
  /** Content locale to edit. */
16
- locale?: string;
23
+ locale?: string | undefined;
17
24
  /** Autosave debounce, ms. Default: 250 with a refreshing renderer; else the collection's autosave interval, else 800. */
18
- autosaveDelay?: number;
25
+ autosaveDelay?: number | undefined;
19
26
  /** Where to look for editable content. Default: document.body. */
20
- root?: () => ParentNode | null;
27
+ root?: (() => ParentNode | null) | undefined;
21
28
  /** Override any UI string (see `defaultMessages`). */
22
- messages?: Messages;
29
+ messages?: Messages | undefined;
23
30
  }
24
31
  export declare function OnPageEditor(props: OnPageEditorProps): import("react").JSX.Element | null;
25
32
  //# sourceMappingURL=OnPageEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OnPageEditor.d.ts","sourceRoot":"","sources":["../../src/editor/OnPageEditor.tsx"],"names":[],"mappings":"AAUA,OAAO,EAKL,KAAK,UAAU,EAEf,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,QAAQ,EAEd,MAAM,sBAAsB,CAAA;AAS7B,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAK/D,OAAO,KAAK,EAGV,cAAc,EACd,KAAK,EAIN,MAAM,aAAa,CAAA;AAUpB,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAA;IACtB,iGAAiG;IACjG,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC,CAAA;IAC/C,KAAK,EAAE,KAAK,CAAA;IACZ,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yHAAyH;IACzH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,UAAU,GAAG,IAAI,CAAA;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAKD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,sCA6OpD"}
1
+ {"version":3,"file":"OnPageEditor.d.ts","sourceRoot":"","sources":["../../src/editor/OnPageEditor.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,OAAO,EAEL,KAAK,UAAU,EAEf,KAAK,OAAO,EACZ,KAAK,YAAY,EAEjB,KAAK,QAAQ,EACd,MAAM,sBAAsB,CAAA;AAS7B,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAI/D,OAAO,KAAK,EAEV,cAAc,EACd,KAAK,EAKN,MAAM,aAAa,CAAA;AAgBpB,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAA;IACtB,iGAAiG;IACjG,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;IAChC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,oFAAoF;IACpF,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC/B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IAC3D,KAAK,EAAE,KAAK,CAAA;IACZ,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,yHAAyH;IACzH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,kEAAkE;IAClE,IAAI,CAAC,EAAE,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IAC5C,sDAAsD;IACtD,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CAChC;AAKD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,sCAmLpD"}