@payload-onpage/react 0.0.0-stage → 0.2.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 (198) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -2
  3. package/dist/OnPageClient.d.ts +18 -0
  4. package/dist/OnPageClient.d.ts.map +1 -0
  5. package/dist/OnPageClient.js +51 -0
  6. package/dist/OnPageClient.js.map +1 -0
  7. package/dist/annotations.d.ts +55 -0
  8. package/dist/annotations.d.ts.map +1 -0
  9. package/dist/annotations.js +60 -0
  10. package/dist/annotations.js.map +1 -0
  11. package/dist/context.d.ts +7 -0
  12. package/dist/context.d.ts.map +1 -0
  13. package/dist/context.js +19 -0
  14. package/dist/context.js.map +1 -0
  15. package/dist/dom.d.ts +42 -0
  16. package/dist/dom.d.ts.map +1 -0
  17. package/dist/dom.js +95 -0
  18. package/dist/dom.js.map +1 -0
  19. package/dist/editor/FieldHost.d.ts +5 -0
  20. package/dist/editor/FieldHost.d.ts.map +1 -0
  21. package/dist/editor/FieldHost.js +36 -0
  22. package/dist/editor/FieldHost.js.map +1 -0
  23. package/dist/editor/Ghosts.d.ts +6 -0
  24. package/dist/editor/Ghosts.d.ts.map +1 -0
  25. package/dist/editor/Ghosts.js +37 -0
  26. package/dist/editor/Ghosts.js.map +1 -0
  27. package/dist/editor/OnPageEditor.d.ts +25 -0
  28. package/dist/editor/OnPageEditor.d.ts.map +1 -0
  29. package/dist/editor/OnPageEditor.js +211 -0
  30. package/dist/editor/OnPageEditor.js.map +1 -0
  31. package/dist/editor/useGhosts.d.ts +24 -0
  32. package/dist/editor/useGhosts.d.ts.map +1 -0
  33. package/dist/editor/useGhosts.js +34 -0
  34. package/dist/editor/useGhosts.js.map +1 -0
  35. package/dist/editor/usePageEvents.d.ts +3 -0
  36. package/dist/editor/usePageEvents.d.ts.map +1 -0
  37. package/dist/editor/usePageEvents.js +164 -0
  38. package/dist/editor/usePageEvents.js.map +1 -0
  39. package/dist/editor-kit.d.ts +19 -0
  40. package/dist/editor-kit.d.ts.map +1 -0
  41. package/dist/editor-kit.js +17 -0
  42. package/dist/editor-kit.js.map +1 -0
  43. package/dist/editors/CheckboxEditor.d.ts +3 -0
  44. package/dist/editors/CheckboxEditor.d.ts.map +1 -0
  45. package/dist/editors/CheckboxEditor.js +10 -0
  46. package/dist/editors/CheckboxEditor.js.map +1 -0
  47. package/dist/editors/ColorEditor.d.ts +4 -0
  48. package/dist/editors/ColorEditor.d.ts.map +1 -0
  49. package/dist/editors/ColorEditor.js +21 -0
  50. package/dist/editors/ColorEditor.js.map +1 -0
  51. package/dist/editors/DateEditor.d.ts +3 -0
  52. package/dist/editors/DateEditor.d.ts.map +1 -0
  53. package/dist/editors/DateEditor.js +28 -0
  54. package/dist/editors/DateEditor.js.map +1 -0
  55. package/dist/editors/InlineText.d.ts +4 -0
  56. package/dist/editors/InlineText.d.ts.map +1 -0
  57. package/dist/editors/InlineText.js +77 -0
  58. package/dist/editors/InlineText.js.map +1 -0
  59. package/dist/editors/NumberEditor.d.ts +4 -0
  60. package/dist/editors/NumberEditor.d.ts.map +1 -0
  61. package/dist/editors/NumberEditor.js +23 -0
  62. package/dist/editors/NumberEditor.js.map +1 -0
  63. package/dist/editors/RelationshipEditor.d.ts +3 -0
  64. package/dist/editors/RelationshipEditor.d.ts.map +1 -0
  65. package/dist/editors/RelationshipEditor.js +60 -0
  66. package/dist/editors/RelationshipEditor.js.map +1 -0
  67. package/dist/editors/SelectEditor.d.ts +4 -0
  68. package/dist/editors/SelectEditor.d.ts.map +1 -0
  69. package/dist/editors/SelectEditor.js +36 -0
  70. package/dist/editors/SelectEditor.js.map +1 -0
  71. package/dist/editors/UploadEditor.d.ts +3 -0
  72. package/dist/editors/UploadEditor.d.ts.map +1 -0
  73. package/dist/editors/UploadEditor.js +48 -0
  74. package/dist/editors/UploadEditor.js.map +1 -0
  75. package/dist/editors/index.d.ts +13 -0
  76. package/dist/editors/index.d.ts.map +1 -0
  77. package/dist/editors/index.js +23 -0
  78. package/dist/editors/index.js.map +1 -0
  79. package/dist/editors/useDebouncedSearch.d.ts +17 -0
  80. package/dist/editors/useDebouncedSearch.d.ts.map +1 -0
  81. package/dist/editors/useDebouncedSearch.js +50 -0
  82. package/dist/editors/useDebouncedSearch.js.map +1 -0
  83. package/dist/hub.d.ts +14 -0
  84. package/dist/hub.d.ts.map +1 -0
  85. package/dist/hub.js +20 -0
  86. package/dist/hub.js.map +1 -0
  87. package/dist/index.d.ts +20 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +19 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/layout.d.ts +12 -0
  92. package/dist/layout.d.ts.map +1 -0
  93. package/dist/layout.js +83 -0
  94. package/dist/layout.js.map +1 -0
  95. package/dist/locators.d.ts +19 -0
  96. package/dist/locators.d.ts.map +1 -0
  97. package/dist/locators.js +215 -0
  98. package/dist/locators.js.map +1 -0
  99. package/dist/messages.d.ts +100 -0
  100. package/dist/messages.d.ts.map +1 -0
  101. package/dist/messages.js +112 -0
  102. package/dist/messages.js.map +1 -0
  103. package/dist/registry.d.ts +15 -0
  104. package/dist/registry.d.ts.map +1 -0
  105. package/dist/registry.js +29 -0
  106. package/dist/registry.js.map +1 -0
  107. package/dist/renderers.d.ts +7 -0
  108. package/dist/renderers.d.ts.map +1 -0
  109. package/dist/renderers.js +12 -0
  110. package/dist/renderers.js.map +1 -0
  111. package/dist/sanitize.d.ts +2 -0
  112. package/dist/sanitize.d.ts.map +1 -0
  113. package/dist/sanitize.js +49 -0
  114. package/dist/sanitize.js.map +1 -0
  115. package/dist/styles.d.ts +8 -0
  116. package/dist/styles.d.ts.map +1 -0
  117. package/dist/styles.js +122 -0
  118. package/dist/styles.js.map +1 -0
  119. package/dist/targets.d.ts +18 -0
  120. package/dist/targets.d.ts.map +1 -0
  121. package/dist/targets.js +86 -0
  122. package/dist/targets.js.map +1 -0
  123. package/dist/types.d.ts +131 -0
  124. package/dist/types.d.ts.map +1 -0
  125. package/dist/types.js +2 -0
  126. package/dist/types.js.map +1 -0
  127. package/dist/ui/BlockPicker.d.ts +3 -0
  128. package/dist/ui/BlockPicker.d.ts.map +1 -0
  129. package/dist/ui/BlockPicker.js +27 -0
  130. package/dist/ui/BlockPicker.js.map +1 -0
  131. package/dist/ui/Dialog.d.ts +22 -0
  132. package/dist/ui/Dialog.d.ts.map +1 -0
  133. package/dist/ui/Dialog.js +83 -0
  134. package/dist/ui/Dialog.js.map +1 -0
  135. package/dist/ui/Dock.d.ts +7 -0
  136. package/dist/ui/Dock.d.ts.map +1 -0
  137. package/dist/ui/Dock.js +104 -0
  138. package/dist/ui/Dock.js.map +1 -0
  139. package/dist/ui/Overlay.d.ts +2 -0
  140. package/dist/ui/Overlay.d.ts.map +1 -0
  141. package/dist/ui/Overlay.js +150 -0
  142. package/dist/ui/Overlay.js.map +1 -0
  143. package/dist/ui/PostButton.d.ts +10 -0
  144. package/dist/ui/PostButton.d.ts.map +1 -0
  145. package/dist/ui/PostButton.js +7 -0
  146. package/dist/ui/PostButton.js.map +1 -0
  147. package/dist/ui/PreviewToolbar.d.ts +15 -0
  148. package/dist/ui/PreviewToolbar.d.ts.map +1 -0
  149. package/dist/ui/PreviewToolbar.js +45 -0
  150. package/dist/ui/PreviewToolbar.js.map +1 -0
  151. package/dist/ui/SettingsPanel.d.ts +11 -0
  152. package/dist/ui/SettingsPanel.d.ts.map +1 -0
  153. package/dist/ui/SettingsPanel.js +130 -0
  154. package/dist/ui/SettingsPanel.js.map +1 -0
  155. package/dist/useEvent.d.ts +7 -0
  156. package/dist/useEvent.d.ts.map +1 -0
  157. package/dist/useEvent.js +15 -0
  158. package/dist/useEvent.js.map +1 -0
  159. package/package.json +71 -4
  160. package/src/OnPageClient.tsx +67 -0
  161. package/src/annotations.ts +83 -0
  162. package/src/context.tsx +23 -0
  163. package/src/dom.ts +118 -0
  164. package/src/editor/FieldHost.tsx +66 -0
  165. package/src/editor/Ghosts.tsx +55 -0
  166. package/src/editor/OnPageEditor.tsx +315 -0
  167. package/src/editor/useGhosts.ts +64 -0
  168. package/src/editor/usePageEvents.ts +161 -0
  169. package/src/editor-kit.ts +27 -0
  170. package/src/editors/CheckboxEditor.tsx +31 -0
  171. package/src/editors/ColorEditor.tsx +64 -0
  172. package/src/editors/DateEditor.tsx +64 -0
  173. package/src/editors/InlineText.tsx +106 -0
  174. package/src/editors/NumberEditor.tsx +69 -0
  175. package/src/editors/RelationshipEditor.tsx +153 -0
  176. package/src/editors/SelectEditor.tsx +74 -0
  177. package/src/editors/UploadEditor.tsx +130 -0
  178. package/src/editors/index.ts +35 -0
  179. package/src/editors/useDebouncedSearch.ts +54 -0
  180. package/src/hub.ts +32 -0
  181. package/src/index.ts +55 -0
  182. package/src/layout.ts +83 -0
  183. package/src/locators.ts +210 -0
  184. package/src/messages.ts +120 -0
  185. package/src/registry.ts +43 -0
  186. package/src/renderers.ts +15 -0
  187. package/src/sanitize.ts +52 -0
  188. package/src/styles.ts +122 -0
  189. package/src/targets.ts +101 -0
  190. package/src/types.ts +132 -0
  191. package/src/ui/BlockPicker.tsx +49 -0
  192. package/src/ui/Dialog.tsx +159 -0
  193. package/src/ui/Dock.tsx +240 -0
  194. package/src/ui/Overlay.tsx +324 -0
  195. package/src/ui/PostButton.tsx +26 -0
  196. package/src/ui/PreviewToolbar.tsx +123 -0
  197. package/src/ui/SettingsPanel.tsx +279 -0
  198. package/src/useEvent.ts +16 -0
@@ -0,0 +1,28 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { Dialog } from "../ui/Dialog.js";
5
+ /** Payload stores dates as ISO strings; the input works in local time. */
6
+ const toLocalInput = (iso, withTime) => {
7
+ if (typeof iso !== 'string' || !iso)
8
+ return '';
9
+ const d = new Date(iso);
10
+ if (Number.isNaN(d.getTime()))
11
+ return '';
12
+ const pad = (n) => String(n).padStart(2, '0');
13
+ const date = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
14
+ return withTime ? `${date}T${pad(d.getHours())}:${pad(d.getMinutes())}` : date;
15
+ };
16
+ export function DateEditor({ field, value, element, commit, close, t }) {
17
+ const withTime = field.pickerAppearance === 'dayAndTime' || field.pickerAppearance === 'timeOnly';
18
+ const [draft, setDraft] = useState(toLocalInput(value, withTime));
19
+ const save = () => {
20
+ // Date-only values are stored at local noon, which survives any timezone shift (as Payload's picker does).
21
+ const next = draft ? new Date(withTime ? draft : `${draft}T12:00:00`).toISOString() : null;
22
+ if (next !== value)
23
+ commit(next);
24
+ close();
25
+ };
26
+ return (_jsxs(Dialog, { variant: "popover", anchor: element, title: field.label, onClose: close, t: t, testId: "onpage-date", children: [_jsx("div", { className: "po-row", children: _jsx("input", { className: "po-input", type: withTime ? 'datetime-local' : 'date', "aria-label": field.label, "data-autofocus": true, value: draft, onChange: (e) => setDraft(e.target.value), onKeyDown: (e) => e.key === 'Enter' && save(), "data-testid": "onpage-date-input" }) }), _jsxs("div", { className: "po-actions", children: [_jsx("button", { type: "button", className: "po-btn po-primary", onClick: save, "data-testid": "onpage-apply", children: t('common.apply') }), !field.required && (_jsx("button", { type: "button", className: "po-btn", onClick: () => setDraft(''), children: t('common.clear') }))] })] }));
27
+ }
28
+ //# sourceMappingURL=DateEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateEditor.js","sourceRoot":"","sources":["../../src/editors/DateEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FieldEditorProps } from '../types.ts';
2
+ export declare const escapeHtml: (s: string) => string;
3
+ export declare function InlineText({ field, value, element, commit, preview, close, ghost, live, point, t, }: FieldEditorProps): import("react").JSX.Element;
4
+ //# sourceMappingURL=InlineText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineText.d.ts","sourceRoot":"","sources":["../../src/editors/InlineText.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,KAAG,MACuD,CAAA;AAE9F,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,OAAO,EACP,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,CAAC,GACF,EAAE,gBAAgB,+BAyElB"}
@@ -0,0 +1,77 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * In-place editing for text, textarea and email fields.
5
+ *
6
+ * The site's element is never made editable (React owns its DOM). An editable
7
+ * twin with the same computed typography is laid over it and the original is
8
+ * hidden. In client mode each keystroke re-renders the page live underneath;
9
+ * in refresh mode the twin shows the text and, after commit, stays as a ghost
10
+ * until the server render arrives. Blur/Enter commits (one undo step), Escape
11
+ * cancels.
12
+ */
13
+ import { useLayoutEffect, useRef } from 'react';
14
+ import { toText } from '@payload-onpage/core';
15
+ import { copyTypography, HIDDEN, placeCaret, placeOver, typographyOf } from "../dom.js";
16
+ import { useTrackElement } from "../layout.js";
17
+ export const escapeHtml = (s) => s.replace(/[&<>"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' })[c]);
18
+ export function InlineText({ field, value, element, commit, preview, close, ghost, live, point, t, }) {
19
+ const multiline = field.type === 'textarea';
20
+ const ref = useRef(null);
21
+ const initial = useRef(toText(value));
22
+ const done = useRef(false);
23
+ useLayoutEffect(() => {
24
+ const el = element();
25
+ const twin = ref.current;
26
+ if (!twin)
27
+ return;
28
+ if (el) {
29
+ copyTypography(el, twin);
30
+ placeOver(twin, el, { minWidth: 40, minHeight: true });
31
+ el.setAttribute(HIDDEN, 'true');
32
+ }
33
+ twin.textContent = initial.current;
34
+ twin.focus({ preventScroll: true });
35
+ placeCaret(twin, point);
36
+ return () => element()?.removeAttribute(HIDDEN);
37
+ // Runs once: the twin takes over the element for its lifetime.
38
+ // eslint-disable-next-line react-hooks/exhaustive-deps
39
+ }, []);
40
+ // Follow the element as the page reflows (client mode re-renders it live).
41
+ useTrackElement(element, (el) => {
42
+ if (!ref.current)
43
+ return;
44
+ if (!el.hasAttribute(HIDDEN))
45
+ el.setAttribute(HIDDEN, 'true');
46
+ placeOver(ref.current, el, { minWidth: 40, minHeight: true });
47
+ });
48
+ const read = () => {
49
+ // textContent, not innerText: innerText applies CSS (text-transform:
50
+ // uppercase on an eyebrow would save "SANDBOX" for "Sandbox").
51
+ const text = (ref.current?.textContent ?? '').replace(/\u00a0/g, ' ').replace(/\n$/, '');
52
+ return multiline ? text : text.replace(/\s*\n\s*/g, ' ');
53
+ };
54
+ const finish = (save) => {
55
+ if (done.current)
56
+ return;
57
+ done.current = true;
58
+ const text = read();
59
+ if (save && text !== initial.current) {
60
+ commit(text === '' && !field.required ? null : text);
61
+ if (!live && ref.current)
62
+ ghost({ html: escapeHtml(text), style: typographyOf(ref.current) });
63
+ }
64
+ close();
65
+ };
66
+ return (_jsx("div", { ref: ref, className: "po-inline", contentEditable: "plaintext-only", suppressContentEditableWarning: true, role: "textbox", tabIndex: 0, "aria-multiline": multiline, "aria-label": t('inline.label', { field: field.label }), "data-testid": "onpage-inline-text", spellCheck: true, onInput: () => live && preview(read()), onBlur: () => finish(true), onKeyDown: (e) => {
67
+ if (e.key === 'Escape') {
68
+ e.preventDefault();
69
+ finish(false);
70
+ }
71
+ else if (e.key === 'Enter' && (!multiline || e.metaKey || e.ctrlKey)) {
72
+ e.preventDefault();
73
+ finish(true);
74
+ }
75
+ } }));
76
+ }
77
+ //# sourceMappingURL=InlineText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineText.js","sourceRoot":"","sources":["../../src/editors/InlineText.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FieldEditorProps } from '../types.ts';
2
+ /** Number input, with a slider when the field has min and max. */
3
+ export declare function NumberEditor({ field, value, element, commit, preview, close, live, t, }: FieldEditorProps): import("react").JSX.Element;
4
+ //# sourceMappingURL=NumberEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberEditor.d.ts","sourceRoot":"","sources":["../../src/editors/NumberEditor.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,CAAC,GACF,EAAE,gBAAgB,+BAmDlB"}
@@ -0,0 +1,23 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { toText } from '@payload-onpage/core';
4
+ import { useState } from 'react';
5
+ import { Dialog } from "../ui/Dialog.js";
6
+ /** Number input, with a slider when the field has min and max. */
7
+ export function NumberEditor({ field, value, element, commit, preview, close, live, t, }) {
8
+ const [draft, setDraft] = useState(toText(value));
9
+ const slider = field.min !== undefined && field.max !== undefined;
10
+ const save = () => {
11
+ const next = draft === '' ? null : Number(draft);
12
+ if (next !== value && (next === null || !Number.isNaN(next)))
13
+ commit(next);
14
+ close();
15
+ };
16
+ const change = (v) => {
17
+ setDraft(v);
18
+ if (live && v !== '' && !Number.isNaN(Number(v)))
19
+ preview(Number(v));
20
+ };
21
+ return (_jsxs(Dialog, { variant: "popover", anchor: element, title: field.label, onClose: close, t: t, testId: "onpage-number", children: [_jsxs("div", { className: "po-row", children: [slider && (_jsx("input", { type: "range", "aria-label": field.label, min: field.min, max: field.max, value: draft || field.min, onChange: (e) => change(e.target.value), "data-testid": "onpage-number-slider" })), _jsx("input", { className: "po-input", type: "number", "aria-label": field.label, "data-autofocus": true, min: field.min, max: field.max, value: draft, onChange: (e) => change(e.target.value), onKeyDown: (e) => e.key === 'Enter' && save(), "data-testid": "onpage-number-input" })] }), _jsx("button", { type: "button", className: "po-btn po-primary", onClick: save, "data-testid": "onpage-apply", children: t('common.apply') })] }));
22
+ }
23
+ //# sourceMappingURL=NumberEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberEditor.js","sourceRoot":"","sources":["../../src/editors/NumberEditor.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAkB,CAAA;AAEzC,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,CAAC,GACgB;IACjB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAA;IACjE,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAChD,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC1E,KAAK,EAAE,CAAA;IACT,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE;QAC3B,QAAQ,CAAC,CAAC,CAAC,CAAA;QACX,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,CAAC,CAAA;IACD,OAAO,CACL,MAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,EACd,CAAC,EAAE,CAAC,EACJ,MAAM,EAAC,eAAe,aAEtB,eAAK,SAAS,EAAC,QAAQ,aACpB,MAAM,IAAI,CACT,gBACE,IAAI,EAAC,OAAO,gBACA,KAAK,CAAC,KAAK,EACvB,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,GAAG,EACzB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,iBAC3B,sBAAsB,GAClC,CACH,EACD,gBACE,SAAS,EAAC,UAAU,EACpB,IAAI,EAAC,QAAQ,gBACD,KAAK,CAAC,KAAK,0BAEvB,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACvC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,EAAE,iBACjC,qBAAqB,GACjC,IACE,EACN,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAE,IAAI,iBAAc,cAAc,YAC1F,CAAC,CAAC,cAAc,CAAC,GACX,IACF,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FieldEditorProps } from '../types.ts';
2
+ export declare function RelationshipEditor({ docKey, field, value, element, commit, close, t, }: FieldEditorProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=RelationshipEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationshipEditor.d.ts","sourceRoot":"","sources":["../../src/editors/RelationshipEditor.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAInD,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,CAAC,GACF,EAAE,gBAAgB,+BAkIlB"}
@@ -0,0 +1,60 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ /**
4
+ * Relationship editor: search the related collection(s) by their title field
5
+ * (Payload REST, so access control applies) and pick one, or several for
6
+ * hasMany. Polymorphic fields get a collection switch and store `{ relationTo, value }`.
7
+ */
8
+ import { relationId, relationTitle } from '@payload-onpage/core';
9
+ import { useCallback, useState } from 'react';
10
+ import { useOnPage } from "../context.js";
11
+ import { Dialog } from "../ui/Dialog.js";
12
+ import { useDebouncedSearch } from "./useDebouncedSearch.js";
13
+ export function RelationshipEditor({ docKey, field, value, element, commit, close, t, }) {
14
+ const { session, snap } = useOnPage();
15
+ const targets = Array.isArray(field.relationTo)
16
+ ? field.relationTo
17
+ : field.relationTo
18
+ ? [field.relationTo]
19
+ : [];
20
+ const poly = Array.isArray(field.relationTo);
21
+ const [collection, setCollection] = useState(targets[0] ?? '');
22
+ const relations = snap.docs[docKey]?.schema?.relations ?? {};
23
+ const titleField = relations[collection]?.titleField;
24
+ const many = !!field.hasMany;
25
+ const current = many
26
+ ? Array.isArray(value)
27
+ ? value
28
+ : []
29
+ : value == null
30
+ ? []
31
+ : [value];
32
+ const ds = session.dataSource;
33
+ const search = useCallback(async (query) => ds.search
34
+ ? {
35
+ items: await ds.search(collection, {
36
+ query,
37
+ titleField,
38
+ locale: session.locale,
39
+ limit: 12,
40
+ }),
41
+ hasMore: false,
42
+ }
43
+ : { items: [], hasMore: false }, [ds, collection, titleField, session.locale]);
44
+ const results = useDebouncedSearch(ds.search ? search : null, []);
45
+ const wrap = (hit) => poly ? { relationTo: collection, value: hit.doc } : hit.doc;
46
+ const same = (v, id) => String(relationId(v)) === String(id);
47
+ const pick = (hit) => {
48
+ if (!many) {
49
+ commit(wrap(hit));
50
+ close();
51
+ return;
52
+ }
53
+ commit(current.some((v) => same(v, hit.id))
54
+ ? current.filter((v) => !same(v, hit.id))
55
+ : [...current, wrap(hit)]);
56
+ };
57
+ const remove = (i) => commit(many ? current.filter((_, j) => j !== i) : null);
58
+ return (_jsxs(Dialog, { variant: "popover", anchor: element, title: field.label, onClose: close, t: t, width: 320, testId: "onpage-relationship", children: [current.map((v, i) => (_jsxs("div", { className: "po-rel-item", children: [relationTitle(v, titleField), (!field.required || many) && (_jsx("button", { type: "button", onClick: () => remove(i), "aria-label": `${t('common.remove')} ${relationTitle(v, titleField)}`, children: "\u2715" }))] }, `${String(relationId(v))}-${i}`))), poly && (_jsx("div", { className: "po-seg", role: "radiogroup", "aria-label": field.label, children: targets.map((c) => (_jsx("button", { type: "button", role: "radio", "aria-checked": c === collection, onClick: () => setCollection(c), children: relations[c]?.label ?? c }, c))) })), !ds.search ? (_jsx("p", { className: "po-muted", children: t('search.unsupported') })) : (_jsxs(_Fragment, { children: [_jsx("input", { className: "po-input", "aria-label": t('search.placeholder'), placeholder: t('search.placeholder'), value: results.query, "data-autofocus": true, onChange: (e) => results.setQuery(e.target.value), "data-testid": "onpage-relationship-search" }), results.error && _jsx("p", { className: "po-error", children: results.error }), _jsx("div", { className: "po-pop-list", role: "listbox", "aria-multiselectable": many, "aria-label": field.label, children: results.items.map((h) => (_jsx("button", { type: "button", role: "option", "aria-selected": current.some((v) => same(v, h.id)), onClick: () => pick(h), "data-testid": `onpage-relationship-${h.id}`, children: h.title }, String(h.id)))) })] }))] }));
59
+ }
60
+ //# sourceMappingURL=RelationshipEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationshipEditor.js","sourceRoot":"","sources":["../../src/editors/RelationshipEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FieldEditorProps } from '../types.ts';
2
+ /** Select / radio: pick one (closes) or toggle several (hasMany). */
3
+ export declare function SelectEditor({ field, value, element, commit, close, t }: FieldEditorProps): import("react").JSX.Element;
4
+ //# sourceMappingURL=SelectEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectEditor.d.ts","sourceRoot":"","sources":["../../src/editors/SelectEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,gBAAgB,+BAkEzF"}
@@ -0,0 +1,36 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { toText } from '@payload-onpage/core';
4
+ import { Dialog } from "../ui/Dialog.js";
5
+ /** Select / radio: pick one (closes) or toggle several (hasMany). */
6
+ export function SelectEditor({ field, value, element, commit, close, t }) {
7
+ const options = field.options ?? [];
8
+ const many = !!field.hasMany;
9
+ const current = many
10
+ ? Array.isArray(value)
11
+ ? value
12
+ : []
13
+ : value == null
14
+ ? []
15
+ : [toText(value)];
16
+ const pick = (v) => {
17
+ if (!many) {
18
+ commit(v);
19
+ close();
20
+ return;
21
+ }
22
+ const set = new Set(current);
23
+ if (v === null)
24
+ set.clear();
25
+ else if (set.has(v))
26
+ set.delete(v);
27
+ else
28
+ set.add(v);
29
+ commit(options.map((o) => o.value).filter((o) => set.has(o)));
30
+ };
31
+ return (_jsx(Dialog, { variant: "popover", anchor: element, title: field.label, onClose: close, t: t, testId: "onpage-select", children: _jsxs("div", { className: "po-pop-list", role: "listbox", "aria-multiselectable": many, "aria-label": field.label, children: [!field.required && !many && (_jsx("button", { type: "button", role: "option", "aria-selected": !current.length, onClick: () => pick(null), children: t('common.none') })), options.map((o) => {
32
+ const selected = current.includes(o.value);
33
+ return (_jsxs("button", { type: "button", role: "option", "aria-selected": selected, onClick: () => pick(o.value), "data-testid": `onpage-option-${o.value}`, children: [many ? (selected ? '☑ ' : '☐ ') : '', o.label] }, o.value));
34
+ })] }) }));
35
+ }
36
+ //# sourceMappingURL=SelectEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectEditor.js","sourceRoot":"","sources":["../../src/editors/SelectEditor.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAkB,CAAA;AAEzC,qEAAqE;AACrE,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAoB;IACxF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAA;IACnC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;IAC5B,MAAM,OAAO,GAAa,IAAI;QAC5B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACpB,CAAC,CAAE,KAAkB;YACrB,CAAC,CAAC,EAAE;QACN,CAAC,CAAC,KAAK,IAAI,IAAI;YACb,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACrB,MAAM,IAAI,GAAG,CAAC,CAAgB,EAAE,EAAE;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,CAAC,CAAC,CAAA;YACT,KAAK,EAAE,CAAA;YACP,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;QAC5B,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,KAAK,EAAE,CAAA;aACtB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;;YAC7B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACf,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC,CAAA;IACD,OAAO,CACL,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,EACd,CAAC,EAAE,CAAC,EACJ,MAAM,EAAC,eAAe,YAEtB,eACE,SAAS,EAAC,aAAa,EACvB,IAAI,EAAC,SAAS,0BACQ,IAAI,gBACd,KAAK,CAAC,KAAK,aAEtB,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAC3B,iBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,mBACE,CAAC,OAAO,CAAC,MAAM,EAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAExB,CAAC,CAAC,aAAa,CAAC,GACV,CACV,EACA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;oBAC1C,OAAO,CACL,kBAEE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,mBACE,QAAQ,EACvB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,iBACf,iBAAiB,CAAC,CAAC,KAAK,EAAE,aAEtC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EACpC,CAAC,CAAC,KAAK,KARH,CAAC,CAAC,KAAK,CASL,CACV,CAAA;gBACH,CAAC,CAAC,IACE,GACC,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FieldEditorProps } from '../types.ts';
2
+ export declare function UploadEditor({ field, value, commit, close, t }: FieldEditorProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=UploadEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadEditor.d.ts","sourceRoot":"","sources":["../../src/editors/UploadEditor.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAInD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,gBAAgB,+BAmHhF"}
@@ -0,0 +1,48 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Image editor: pick from the upload collection (search, pages) or upload a
5
+ * new file, through the MediaLibrary port. The chosen document goes into state
6
+ * populated, so a client-rendered page shows it at once; saving sends its id.
7
+ */
8
+ import { relationId } from '@payload-onpage/core';
9
+ import { useCallback, useRef, useState } from 'react';
10
+ import { useOnPage } from "../context.js";
11
+ import { Dialog } from "../ui/Dialog.js";
12
+ import { useDebouncedSearch } from "./useDebouncedSearch.js";
13
+ export function UploadEditor({ field, value, commit, close, t }) {
14
+ const { media } = useOnPage();
15
+ const relationTo = (Array.isArray(field.relationTo) ? field.relationTo[0] : field.relationTo) ?? 'media';
16
+ const [uploading, setUploading] = useState(false);
17
+ const [uploadError, setUploadError] = useState(null);
18
+ const fileRef = useRef(null);
19
+ const search = useCallback((query, page) => media
20
+ ? media.search({ query, page, relationTo })
21
+ : Promise.resolve({ items: [], hasMore: false }), [media, relationTo]);
22
+ const results = useDebouncedSearch(media ? search : null, []);
23
+ const currentId = relationId(value);
24
+ const choose = (m) => {
25
+ commit(m.doc);
26
+ close();
27
+ };
28
+ const upload = async (file) => {
29
+ if (!media?.upload)
30
+ return;
31
+ setUploading(true);
32
+ try {
33
+ choose(await media.upload(file, { relationTo }));
34
+ }
35
+ catch (e) {
36
+ setUploadError(e.message);
37
+ }
38
+ finally {
39
+ setUploading(false);
40
+ }
41
+ };
42
+ const actions = (_jsxs(_Fragment, { children: [_jsx("input", { className: "po-input po-search", "aria-label": t('media.search'), placeholder: t('media.search'), value: results.query, "data-autofocus": true, onChange: (e) => results.setQuery(e.target.value), "data-testid": "onpage-media-search" }), media?.upload && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "po-btn", onClick: () => fileRef.current?.click(), disabled: uploading, "data-testid": "onpage-media-upload", children: t('media.upload') }), _jsx("input", { ref: fileRef, type: "file", accept: "image/*", hidden: true, onChange: (e) => e.target.files?.[0] && void upload(e.target.files[0]) })] })), !field.required && currentId != null && (_jsx("button", { type: "button", className: "po-btn", onClick: () => {
43
+ commit(null);
44
+ close();
45
+ }, "data-testid": "onpage-media-remove", children: t('common.remove') }))] }));
46
+ return (_jsxs(Dialog, { title: field.label, onClose: close, t: t, actions: actions, testId: "onpage-media-picker", children: [(results.error ?? uploadError) && _jsx("p", { className: "po-error", children: results.error ?? uploadError }), _jsx("div", { className: "po-grid", children: results.items.map((m) => (_jsxs("button", { type: "button", className: "po-tile", onClick: () => choose(m), "aria-current": String(m.id) === String(currentId), "data-testid": `onpage-media-${m.id}`, children: [_jsx("img", { src: m.thumbnailUrl ?? m.url ?? '', alt: m.alt ?? '', loading: "lazy" }), _jsx("span", { children: m.alt || m.filename })] }, String(m.id)))) }), !results.busy && !results.items.length && _jsx("p", { className: "po-muted", children: t('media.empty') }), results.hasMore && (_jsx("div", { className: "po-center", children: _jsx("button", { type: "button", className: "po-btn", onClick: results.more, disabled: results.busy, children: t('media.more') }) })), (results.busy || uploading) && _jsx("p", { className: "po-muted", children: t('media.loading') })] }));
47
+ }
48
+ //# sourceMappingURL=UploadEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadEditor.js","sourceRoot":"","sources":["../../src/editors/UploadEditor.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAkB,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAgB,CAAA;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAkB,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAoB;IAC/E,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAAA;IAC7B,MAAM,UAAU,GACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,OAAO,CAAA;IACvF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACnE,MAAM,OAAO,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,KAAa,EAAE,IAAY,EAAE,EAAE,CAC9B,KAAK;QACH,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EACnE,CAAC,KAAK,EAAE,UAAU,CAAC,CACpB,CAAA;IACD,MAAM,OAAO,GAAG,kBAAkB,CAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACxE,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IAEnC,MAAM,MAAM,GAAG,CAAC,CAAY,EAAE,EAAE;QAC9B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACb,KAAK,EAAE,CAAA;IACT,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,KAAK,EAAE,IAAU,EAAE,EAAE;QAClC,IAAI,CAAC,KAAK,EAAE,MAAM;YAAE,OAAM;QAC1B,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,cAAc,CAAE,CAAW,CAAC,OAAO,CAAC,CAAA;QACtC,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,CACd,8BACE,gBACE,SAAS,EAAC,oBAAoB,gBAClB,CAAC,CAAC,cAAc,CAAC,EAC7B,WAAW,EAAE,CAAC,CAAC,cAAc,CAAC,EAC9B,KAAK,EAAE,OAAO,CAAC,KAAK,0BAEpB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,iBACrC,qBAAqB,GACjC,EACD,KAAK,EAAE,MAAM,IAAI,CAChB,8BACE,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EACvC,QAAQ,EAAE,SAAS,iBACP,qBAAqB,YAEhC,CAAC,CAAC,cAAc,CAAC,GACX,EACT,gBACE,GAAG,EAAE,OAAO,EACZ,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,SAAS,EAChB,MAAM,QACN,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GACtE,IACD,CACJ,EACA,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS,IAAI,IAAI,IAAI,CACvC,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE;oBACZ,MAAM,CAAC,IAAI,CAAC,CAAA;oBACZ,KAAK,EAAE,CAAA;gBACT,CAAC,iBACW,qBAAqB,YAEhC,CAAC,CAAC,eAAe,CAAC,GACZ,CACV,IACA,CACJ,CAAA;IAED,OAAO,CACL,MAAC,MAAM,IACL,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,EACd,CAAC,EAAE,CAAC,EACJ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAC,qBAAqB,aAE3B,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,YAAG,SAAS,EAAC,UAAU,YAAE,OAAO,CAAC,KAAK,IAAI,WAAW,GAAK,EAC7F,cAAK,SAAS,EAAC,SAAS,YACrB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACxB,kBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,SAAS,EACnB,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,kBACV,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,iBACnC,gBAAgB,CAAC,CAAC,EAAE,EAAE,aAEnC,cAAK,GAAG,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,EAAC,MAAM,GAAG,EAC5E,yBAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,GAAQ,KAR7B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CASV,CACV,CAAC,GACE,EACL,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,YAAG,SAAS,EAAC,UAAU,YAAE,CAAC,CAAC,aAAa,CAAC,GAAK,EACxF,OAAO,CAAC,OAAO,IAAI,CAClB,cAAK,SAAS,EAAC,WAAW,YACxB,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,YACnF,CAAC,CAAC,YAAY,CAAC,GACT,GACL,CACP,EACA,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,YAAG,SAAS,EAAC,UAAU,YAAE,CAAC,CAAC,eAAe,CAAC,GAAK,IACzE,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** The default field editors. Spread, override or remove (`null`) entries via the `editors` option. */
2
+ import type { EditorRegistry } from '../types.ts';
3
+ import { CheckboxEditor } from './CheckboxEditor.tsx';
4
+ import { ColorEditor } from './ColorEditor.tsx';
5
+ import { DateEditor } from './DateEditor.tsx';
6
+ import { InlineText } from './InlineText.tsx';
7
+ import { NumberEditor } from './NumberEditor.tsx';
8
+ import { RelationshipEditor } from './RelationshipEditor.tsx';
9
+ import { SelectEditor } from './SelectEditor.tsx';
10
+ import { UploadEditor } from './UploadEditor.tsx';
11
+ export declare const defaultEditors: EditorRegistry;
12
+ export { CheckboxEditor, ColorEditor, DateEditor, InlineText, NumberEditor, RelationshipEditor, SelectEditor, UploadEditor, };
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editors/index.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,eAAO,MAAM,cAAc,EAAE,cAY5B,CAAA;AAED,OAAO,EACL,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,YAAY,GACb,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { CheckboxEditor } from "./CheckboxEditor.js";
2
+ import { ColorEditor } from "./ColorEditor.js";
3
+ import { DateEditor } from "./DateEditor.js";
4
+ import { InlineText } from "./InlineText.js";
5
+ import { NumberEditor } from "./NumberEditor.js";
6
+ import { RelationshipEditor } from "./RelationshipEditor.js";
7
+ import { SelectEditor } from "./SelectEditor.js";
8
+ import { UploadEditor } from "./UploadEditor.js";
9
+ export const defaultEditors = {
10
+ text: { mode: 'inline', component: InlineText },
11
+ textarea: { mode: 'inline', component: InlineText },
12
+ email: { mode: 'inline', component: InlineText },
13
+ select: { mode: 'popover', component: SelectEditor },
14
+ radio: { mode: 'popover', component: SelectEditor },
15
+ checkbox: { mode: 'popover', component: CheckboxEditor },
16
+ number: { mode: 'popover', component: NumberEditor },
17
+ date: { mode: 'popover', component: DateEditor },
18
+ relationship: { mode: 'popover', component: RelationshipEditor },
19
+ upload: { mode: 'popover', component: UploadEditor },
20
+ color: { mode: 'popover', component: ColorEditor },
21
+ };
22
+ export { CheckboxEditor, ColorEditor, DateEditor, InlineText, NumberEditor, RelationshipEditor, SelectEditor, UploadEditor, };
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editors/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAA0B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAA;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE;IAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE;IACnD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE;IAChD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE;IACpD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE;IACnD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE;IACxD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE;IACpD,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE;IAChE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE;IACpD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE;CACnD,CAAA;AAED,OAAO,EACL,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,YAAY,GACb,CAAA"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Run `search(query, page)` 250ms after the inputs settle; results accumulate
3
+ * across pages and reset when the query changes. Stale responses are ignored.
4
+ */
5
+ export declare function useDebouncedSearch<T>(search: ((query: string, page: number) => Promise<{
6
+ items: T[];
7
+ hasMore: boolean;
8
+ }>) | null, deps: unknown[]): {
9
+ query: string;
10
+ setQuery: (q: string) => void;
11
+ items: T[];
12
+ hasMore: boolean;
13
+ more: () => void;
14
+ busy: boolean;
15
+ error: string | null;
16
+ };
17
+ //# sourceMappingURL=useDebouncedSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebouncedSearch.d.ts","sourceRoot":"","sources":["../../src/editors/useDebouncedSearch.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,GAAG,IAAI,EAC3F,IAAI,EAAE,OAAO,EAAE;;kBAiCC,MAAM;;;;;;EAUvB"}
@@ -0,0 +1,50 @@
1
+ 'use client';
2
+ import { useEffect, useState } from 'react';
3
+ /**
4
+ * Run `search(query, page)` 250ms after the inputs settle; results accumulate
5
+ * across pages and reset when the query changes. Stale responses are ignored.
6
+ */
7
+ export function useDebouncedSearch(search, deps) {
8
+ const [query, setQuery] = useState('');
9
+ const [page, setPage] = useState(1);
10
+ const [items, setItems] = useState([]);
11
+ const [hasMore, setHasMore] = useState(false);
12
+ const [busy, setBusy] = useState(false);
13
+ const [error, setError] = useState(null);
14
+ useEffect(() => {
15
+ if (!search)
16
+ return;
17
+ let live = true;
18
+ const timer = setTimeout(() => {
19
+ setBusy(true);
20
+ search(query, page)
21
+ .then((res) => {
22
+ if (!live)
23
+ return;
24
+ setItems((prev) => (page === 1 ? res.items : [...prev, ...res.items]));
25
+ setHasMore(res.hasMore);
26
+ setError(null);
27
+ })
28
+ .catch((e) => live && setError(e instanceof Error ? e.message : String(e)))
29
+ .finally(() => live && setBusy(false));
30
+ }, 250);
31
+ return () => {
32
+ live = false;
33
+ clearTimeout(timer);
34
+ };
35
+ // eslint-disable-next-line react-hooks/exhaustive-deps
36
+ }, [search, query, page, ...deps]);
37
+ return {
38
+ query,
39
+ setQuery: (q) => {
40
+ setQuery(q);
41
+ setPage(1);
42
+ },
43
+ items,
44
+ hasMore,
45
+ more: () => setPage((p) => p + 1),
46
+ busy,
47
+ error,
48
+ };
49
+ }
50
+ //# sourceMappingURL=useDebouncedSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebouncedSearch.js","sourceRoot":"","sources":["../../src/editors/useDebouncedSearch.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAA2F,EAC3F,IAAe;IAEf,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAM,EAAE,CAAC,CAAA;IAC3C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,IAAI,IAAI,GAAG,IAAI,CAAA;QACf,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAA;YACb,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;iBAChB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,IAAI,CAAC,IAAI;oBAAE,OAAM;gBACjB,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACtE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACvB,QAAQ,CAAC,IAAI,CAAC,CAAA;YAChB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;iBACnF,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QAC1C,CAAC,EAAE,GAAG,CAAC,CAAA;QACP,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,KAAK,CAAA;YACZ,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC,CAAA;QACD,uDAAuD;IACzD,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAElC,OAAO;QACL,KAAK;QACL,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE;YACtB,QAAQ,CAAC,CAAC,CAAC,CAAA;YACX,OAAO,CAAC,CAAC,CAAC,CAAA;QACZ,CAAC;QACD,KAAK;QACL,OAAO;QACP,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI;QACJ,KAAK;KACN,CAAA;AACH,CAAC"}
package/dist/hub.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The editor hub: a module-level store holding the mounted editor, so
3
+ * components anywhere on the page (client-mode documents, custom UI) can reach
4
+ * it without being rendered inside it. That keeps `<OnPage />` a sibling in the
5
+ * layout, not a wrapper. Kept on `globalThis` so two copies of the package
6
+ * (a bundling mistake) still share one editor.
7
+ */
8
+ import type { OnPageContextValue } from './types.ts';
9
+ export declare const hub: {
10
+ get: () => OnPageContextValue | null;
11
+ set: (value: OnPageContextValue | null) => void;
12
+ subscribe: (fn: () => void) => (() => void);
13
+ };
14
+ //# sourceMappingURL=hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.d.ts","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAapD,eAAO,MAAM,GAAG;eACL,kBAAkB,GAAG,IAAI;iBACrB,kBAAkB,GAAG,IAAI,KAAG,IAAI;oBAK7B,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC;CAI1C,CAAA"}
package/dist/hub.js ADDED
@@ -0,0 +1,20 @@
1
+ const KEY = Symbol.for('payload-onpage.hub');
2
+ const store = (globalThis[KEY] ??= {
3
+ current: null,
4
+ listeners: new Set(),
5
+ });
6
+ export const hub = {
7
+ get: () => store.current,
8
+ set: (value) => {
9
+ if (value === store.current)
10
+ return;
11
+ store.current = value;
12
+ for (const fn of store.listeners)
13
+ fn();
14
+ },
15
+ subscribe: (fn) => {
16
+ store.listeners.add(fn);
17
+ return () => store.listeners.delete(fn);
18
+ },
19
+ };
20
+ //# sourceMappingURL=hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"AAcA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AAC5C,MAAM,KAAK,GAAQ,CAAE,UAA8C,CAAC,GAAG,CAAC,KAAK;IAC3E,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI,GAAG,EAAE;CACrB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,GAAG,EAAE,GAA8B,EAAE,CAAC,KAAK,CAAC,OAAO;IACnD,GAAG,EAAE,CAAC,KAAgC,EAAQ,EAAE;QAC9C,IAAI,KAAK,KAAK,KAAK,CAAC,OAAO;YAAE,OAAM;QACnC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAA;QACrB,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS;YAAE,EAAE,EAAE,CAAA;IACxC,CAAC;IACD,SAAS,EAAE,CAAC,EAAc,EAAgB,EAAE;QAC1C,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACvB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC;CACF,CAAA"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @payload-onpage/react — the on-page editor UI.
3
+ *
4
+ * <OnPageEditor dataSource={payloadRest()} media={payloadUploads()} links={{ exit: '/api/onpage/exit' }} />
5
+ *
6
+ * Framework adapters (e.g. @payload-onpage/next) mount it for you. Building a
7
+ * field editor? See `@payload-onpage/react/editor-kit`.
8
+ */
9
+ export { OnPageEditor, type OnPageEditorProps } from './editor/OnPageEditor.tsx';
10
+ export { OnPageClient, type OnPageClientProps } from './OnPageClient.tsx';
11
+ export { PreviewToolbar, inPreviewFrame, FRAME_PARAM, type PreviewToolbarProps, } from './ui/PreviewToolbar.tsx';
12
+ export { useOnPage, useOnPageOptional } from './context.tsx';
13
+ export type { EditorRegistry, FieldEditorDef, FieldEditorProps, Links, OnPageContextValue, TargetIndex, } from './types.ts';
14
+ export { defaultEditors, CheckboxEditor, ColorEditor, DateEditor, InlineText, NumberEditor, RelationshipEditor, SelectEditor, UploadEditor, } from './editors/index.ts';
15
+ export { resolveEditor, mergeEditors } from './registry.ts';
16
+ export { annotations, stega, composite, rowPrefixes } from './locators.ts';
17
+ export { editable, editableOff, p, ATTR, type Editable, type EditableTarget, type FieldKind, } from './annotations.ts';
18
+ export { clientState, fullReload } from './renderers.ts';
19
+ export { defaultMessages, createTranslate, type Messages, type MessageKey, type Translate, } from './messages.ts';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EACL,cAAc,EACd,cAAc,EACd,WAAW,EACX,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC5D,YAAY,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,KAAK,EACL,kBAAkB,EAClB,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,cAAc,EACd,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,EACL,QAAQ,EACR,WAAW,EACX,CAAC,EACD,IAAI,EACJ,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EACL,eAAe,EACf,eAAe,EACf,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,eAAe,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @payload-onpage/react — the on-page editor UI.
3
+ *
4
+ * <OnPageEditor dataSource={payloadRest()} media={payloadUploads()} links={{ exit: '/api/onpage/exit' }} />
5
+ *
6
+ * Framework adapters (e.g. @payload-onpage/next) mount it for you. Building a
7
+ * field editor? See `@payload-onpage/react/editor-kit`.
8
+ */
9
+ export { OnPageEditor } from "./editor/OnPageEditor.js";
10
+ export { OnPageClient } from "./OnPageClient.js";
11
+ export { PreviewToolbar, inPreviewFrame, FRAME_PARAM, } from "./ui/PreviewToolbar.js";
12
+ export { useOnPage, useOnPageOptional } from "./context.js";
13
+ export { defaultEditors, CheckboxEditor, ColorEditor, DateEditor, InlineText, NumberEditor, RelationshipEditor, SelectEditor, UploadEditor, } from "./editors/index.js";
14
+ export { resolveEditor, mergeEditors } from "./registry.js";
15
+ export { annotations, stega, composite, rowPrefixes } from "./locators.js";
16
+ export { editable, editableOff, p, ATTR, } from "./annotations.js";
17
+ export { clientState, fullReload } from "./renderers.js";
18
+ export { defaultMessages, createTranslate, } from "./messages.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAA0B,MAAM,0BAA2B,CAAA;AAChF,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAoB,CAAA;AACzE,OAAO,EACL,cAAc,EACd,cAAc,EACd,WAAW,GAEZ,MAAM,wBAAyB,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,cAAe,CAAA;AAS5D,OAAO,EACL,cAAc,EACd,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,EACL,QAAQ,EACR,WAAW,EACX,CAAC,EACD,IAAI,GAIL,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EACL,eAAe,EACf,eAAe,GAIhB,MAAM,eAAe,CAAA"}