@prismicio/next 2.1.0 → 2.1.1-pr.120.3fae0cb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.cjs +4 -2
- package/dist/index.d.cts +4 -2
- package/dist/package.cjs +1 -1
- package/dist/pages.cjs +0 -2
- package/dist/pages.d.cts +1 -2
- package/dist/react-server.cjs +5 -0
- package/dist/react-server.d.cts +3 -0
- package/dist/simulator/SliceSimulator.cjs +45 -0
- package/dist/simulator/SliceSimulator.cjs.map +1 -0
- package/dist/simulator/SliceSimulator.d.cts +40 -0
- package/dist/simulator/SliceSimulatorWrapper.cjs +36 -0
- package/dist/simulator/SliceSimulatorWrapper.cjs.map +1 -0
- package/dist/simulator/getSlices.cjs +16 -0
- package/dist/simulator/getSlices.cjs.map +1 -0
- package/dist/simulator/getSlices.d.cts +15 -0
- package/dist/simulator/react-server/SliceSimulator.cjs +45 -0
- package/dist/simulator/react-server/SliceSimulator.cjs.map +1 -0
- package/dist/simulator/react-server/SliceSimulator.d.cts +12 -0
- package/dist/simulator/react-server/getSlices.cjs +12 -0
- package/dist/simulator/react-server/getSlices.cjs.map +1 -0
- package/dist/simulator/react-server/getSlices.d.cts +7 -0
- package/dist/simulator/types.d.cts +15 -0
- package/package.json +8 -9
- package/src/index.ts +6 -2
- package/src/pages/index.ts +0 -3
- package/src/simulator/SliceSimulator.tsx +112 -0
- package/src/simulator/SliceSimulatorWrapper.tsx +68 -0
- package/src/simulator/getSlices.ts +19 -0
- package/src/simulator/index.ts +8 -0
- package/src/simulator/react-server/SliceSimulator.tsx +86 -0
- package/src/simulator/react-server/getSlices.ts +13 -0
- package/src/simulator/react-server/index.ts +4 -0
- package/src/simulator/types.ts +11 -0
- package/dist/PrismicNextRichText.cjs +0 -34
- package/dist/PrismicNextRichText.cjs.map +0 -1
- package/dist/PrismicNextRichText.d.cts +0 -11
- package/src/PrismicNextRichText.tsx +0 -41
package/README.md
CHANGED
|
@@ -81,8 +81,8 @@ For more clarity on this project and its structure you can also check out the de
|
|
|
81
81
|
[npm-version-href]: https://npmjs.com/package/@prismicio/next
|
|
82
82
|
[npm-downloads-src]: https://img.shields.io/npm/dm/@prismicio/next.svg
|
|
83
83
|
[npm-downloads-href]: https://npmjs.com/package/@prismicio/next
|
|
84
|
-
[github-actions-ci-src]: https://github.com/prismicio/prismic-next/workflows/
|
|
85
|
-
[github-actions-ci-href]: https://github.com/prismicio/prismic-next/actions?query=workflow%
|
|
84
|
+
[github-actions-ci-src]: https://github.com/prismicio/prismic-next/workflows/validate/badge.svg
|
|
85
|
+
[github-actions-ci-href]: https://github.com/prismicio/prismic-next/actions?query=workflow%3Avalidate
|
|
86
86
|
[codecov-src]: https://img.shields.io/codecov/c/github/prismicio/prismic-next.svg
|
|
87
87
|
[codecov-href]: https://codecov.io/gh/prismicio/prismic-next
|
|
88
88
|
[conventional-commits-src]: https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg
|
package/dist/index.cjs
CHANGED
|
@@ -5,15 +5,17 @@ const require_enableAutoPreviews = require('./enableAutoPreviews.cjs');
|
|
|
5
5
|
const require_redirectToPreviewURL = require('./redirectToPreviewURL.cjs');
|
|
6
6
|
const require_imgixLoader = require('./imgixLoader.cjs');
|
|
7
7
|
const require_PrismicNextImage = require('./PrismicNextImage.cjs');
|
|
8
|
-
const
|
|
8
|
+
const require_SliceSimulator = require('./simulator/SliceSimulator.cjs');
|
|
9
|
+
const require_getSlices = require('./simulator/getSlices.cjs');
|
|
9
10
|
const require_createLocaleRedirect = require('./createLocaleRedirect.cjs');
|
|
10
11
|
|
|
11
12
|
exports.PrismicNextImage = require_PrismicNextImage.PrismicNextImage;
|
|
12
13
|
exports.PrismicNextLink = require_PrismicNextLink.PrismicNextLink;
|
|
13
|
-
exports.PrismicNextRichText = require_PrismicNextRichText.PrismicNextRichText;
|
|
14
14
|
exports.PrismicPreview = require_PrismicPreview.PrismicPreview;
|
|
15
|
+
exports.SliceSimulator = require_SliceSimulator.SliceSimulator;
|
|
15
16
|
exports.createLocaleRedirect = require_createLocaleRedirect.createLocaleRedirect;
|
|
16
17
|
exports.enableAutoPreviews = require_enableAutoPreviews.enableAutoPreviews;
|
|
17
18
|
exports.exitPreview = require_exitPreview.exitPreview;
|
|
19
|
+
exports.getSlices = require_getSlices.getSlices;
|
|
18
20
|
exports.imgixLoader = require_imgixLoader.imgixLoader;
|
|
19
21
|
exports.redirectToPreviewURL = require_redirectToPreviewURL.redirectToPreviewURL;
|
package/dist/index.d.cts
CHANGED
|
@@ -5,7 +5,9 @@ import { EnableAutoPreviewsConfig, enableAutoPreviews } from "./enableAutoPrevie
|
|
|
5
5
|
import { CreateClientConfig } from "./types.cjs";
|
|
6
6
|
import { RedirectToPreviewURLConfig, redirectToPreviewURL } from "./redirectToPreviewURL.cjs";
|
|
7
7
|
import { PrismicNextImage, PrismicNextImageProps } from "./PrismicNextImage.cjs";
|
|
8
|
-
import {
|
|
8
|
+
import { SliceSimulator, SliceSimulatorProps, SliceSimulatorSliceZoneProps } from "./simulator/SliceSimulator.cjs";
|
|
9
|
+
import { getSlices } from "./simulator/getSlices.cjs";
|
|
10
|
+
import { SliceSimulatorParams } from "./simulator/types.cjs";
|
|
9
11
|
import { imgixLoader } from "./imgixLoader.cjs";
|
|
10
12
|
import { CreateLocaleRedirectConfig, createLocaleRedirect } from "./createLocaleRedirect.cjs";
|
|
11
|
-
export { type CreateClientConfig, type CreateLocaleRedirectConfig, type EnableAutoPreviewsConfig, PrismicNextImage, type PrismicNextImageProps, PrismicNextLink, type PrismicNextLinkProps,
|
|
13
|
+
export { type CreateClientConfig, type CreateLocaleRedirectConfig, type EnableAutoPreviewsConfig, PrismicNextImage, type PrismicNextImageProps, PrismicNextLink, type PrismicNextLinkProps, PrismicPreview, type PrismicPreviewProps, type RedirectToPreviewURLConfig, SliceSimulator, type SliceSimulatorParams, type SliceSimulatorProps, type SliceSimulatorSliceZoneProps, createLocaleRedirect, enableAutoPreviews, exitPreview, getSlices, imgixLoader, redirectToPreviewURL };
|
package/dist/package.cjs
CHANGED
package/dist/pages.cjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const require_PrismicNextLink = require('./PrismicNextLink.cjs');
|
|
2
2
|
const require_imgixLoader = require('./imgixLoader.cjs');
|
|
3
3
|
const require_PrismicNextImage = require('./PrismicNextImage.cjs');
|
|
4
|
-
const require_PrismicNextRichText = require('./PrismicNextRichText.cjs');
|
|
5
4
|
const require_createLocaleRedirect = require('./createLocaleRedirect.cjs');
|
|
6
5
|
const require_PrismicPreview = require('./pages/PrismicPreview.cjs');
|
|
7
6
|
const require_enableAutoPreviews = require('./pages/enableAutoPreviews.cjs');
|
|
@@ -11,7 +10,6 @@ const require_setPreviewData = require('./pages/setPreviewData.cjs');
|
|
|
11
10
|
|
|
12
11
|
exports.PrismicNextImage = require_PrismicNextImage.PrismicNextImage;
|
|
13
12
|
exports.PrismicNextLink = require_PrismicNextLink.PrismicNextLink;
|
|
14
|
-
exports.PrismicNextRichText = require_PrismicNextRichText.PrismicNextRichText;
|
|
15
13
|
exports.PrismicPreview = require_PrismicPreview.PrismicPreview;
|
|
16
14
|
exports.createLocaleRedirect = require_createLocaleRedirect.createLocaleRedirect;
|
|
17
15
|
exports.enableAutoPreviews = require_enableAutoPreviews.enableAutoPreviews;
|
package/dist/pages.d.cts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { PrismicNextLink, PrismicNextLinkProps } from "./PrismicNextLink.cjs";
|
|
2
2
|
import { PrismicNextImage, PrismicNextImageProps } from "./PrismicNextImage.cjs";
|
|
3
|
-
import { PrismicNextRichText, PrismicNextRichTextProps } from "./PrismicNextRichText.cjs";
|
|
4
3
|
import { imgixLoader } from "./imgixLoader.cjs";
|
|
5
4
|
import { CreateLocaleRedirectConfig, createLocaleRedirect } from "./createLocaleRedirect.cjs";
|
|
6
5
|
import { PrismicPreview, PrismicPreviewProps } from "./pages/PrismicPreview.cjs";
|
|
@@ -9,4 +8,4 @@ import { EnableAutoPreviewsConfig, enableAutoPreviews } from "./pages/enableAuto
|
|
|
9
8
|
import { RedirectToPreviewURLConfig, redirectToPreviewURL } from "./pages/redirectToPreviewURL.cjs";
|
|
10
9
|
import { ExitPreviewAPIRouteConfig, exitPreview } from "./pages/exitPreview.cjs";
|
|
11
10
|
import { SetPreviewDataConfig, setPreviewData } from "./pages/setPreviewData.cjs";
|
|
12
|
-
export { type CreateClientConfig, type CreateLocaleRedirectConfig, type EnableAutoPreviewsConfig, type ExitPreviewAPIRouteConfig, PrismicNextImage, type PrismicNextImageProps, PrismicNextLink, type PrismicNextLinkProps,
|
|
11
|
+
export { type CreateClientConfig, type CreateLocaleRedirectConfig, type EnableAutoPreviewsConfig, type ExitPreviewAPIRouteConfig, PrismicNextImage, type PrismicNextImageProps, PrismicNextLink, type PrismicNextLinkProps, PrismicPreview, type PrismicPreviewProps, type RedirectToPreviewURLConfig, type SetPreviewDataConfig, createLocaleRedirect, enableAutoPreviews, exitPreview, imgixLoader, redirectToPreviewURL, setPreviewData };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const require_getSlices = require('./simulator/react-server/getSlices.cjs');
|
|
2
|
+
const require_SliceSimulator = require('./simulator/react-server/SliceSimulator.cjs');
|
|
3
|
+
|
|
4
|
+
exports.SliceSimulator = require_SliceSimulator.SliceSimulator;
|
|
5
|
+
exports.getSlices = require_getSlices.getSlices;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
4
|
+
const require_SliceSimulatorWrapper = require('./SliceSimulatorWrapper.cjs');
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
let _prismicio_simulator_kit = require("@prismicio/simulator/kit");
|
|
8
|
+
|
|
9
|
+
//#region src/simulator/SliceSimulator.tsx
|
|
10
|
+
const simulatorManager = new _prismicio_simulator_kit.SimulatorManager();
|
|
11
|
+
/**
|
|
12
|
+
* Simulate slices in isolation. The slice simulator enables live slice
|
|
13
|
+
* development in Slice Machine and live previews in the Page Builder.
|
|
14
|
+
*/
|
|
15
|
+
const SliceSimulator = ({ background, zIndex, className, ...restProps }) => {
|
|
16
|
+
if (!("sliceZone" in restProps)) throw new Error("A sliceZone prop must be provided when <SliceZone> is rendered in a Client Component. Add a sliceZone prop or convert your simulator to a Server Component with the getSlices helper.");
|
|
17
|
+
const [slices, setSlices] = (0, react.useState)(() => (0, _prismicio_simulator_kit.getDefaultSlices)());
|
|
18
|
+
const [message, setMessage] = (0, react.useState)(() => (0, _prismicio_simulator_kit.getDefaultMessage)());
|
|
19
|
+
(0, react.useEffect)(() => {
|
|
20
|
+
simulatorManager.state.on(_prismicio_simulator_kit.StateEventType.Slices, (_slices) => {
|
|
21
|
+
setSlices(_slices);
|
|
22
|
+
}, "simulator-slices");
|
|
23
|
+
simulatorManager.state.on(_prismicio_simulator_kit.StateEventType.Message, (_message) => {
|
|
24
|
+
setMessage(_message);
|
|
25
|
+
}, "simulator-message");
|
|
26
|
+
simulatorManager.init();
|
|
27
|
+
return () => {
|
|
28
|
+
simulatorManager.state.off(_prismicio_simulator_kit.StateEventType.Slices, "simulator-slices");
|
|
29
|
+
simulatorManager.state.off(_prismicio_simulator_kit.StateEventType.Message, "simulator-message");
|
|
30
|
+
};
|
|
31
|
+
}, []);
|
|
32
|
+
const SliceZoneComp = restProps.sliceZone;
|
|
33
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SliceSimulatorWrapper.SliceSimulatorWrapper, {
|
|
34
|
+
message,
|
|
35
|
+
hasSlices: slices.length > 0,
|
|
36
|
+
background,
|
|
37
|
+
zIndex,
|
|
38
|
+
className,
|
|
39
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SliceZoneComp, { slices })
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
exports.SliceSimulator = SliceSimulator;
|
|
45
|
+
//# sourceMappingURL=SliceSimulator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SliceSimulator.cjs","names":["SimulatorManager","StateEventType","SliceSimulatorWrapper"],"sources":["../../src/simulator/SliceSimulator.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { ComponentType, FC } from \"react\";\n\nimport {\n\tSimulatorManager,\n\tStateEventType,\n\tgetDefaultMessage,\n\tgetDefaultSlices,\n} from \"@prismicio/simulator/kit\";\nimport type {\n\tSliceSimulatorProps as BaseSliceSimulatorProps,\n\tSliceSimulatorState,\n} from \"@prismicio/simulator/kit\";\n\nimport { SliceSimulatorWrapper } from \"./SliceSimulatorWrapper\";\n\nconst simulatorManager = new SimulatorManager();\n\nexport type SliceSimulatorSliceZoneProps = {\n\tslices: SliceSimulatorState[\"slices\"];\n};\n\nexport type SliceSimulatorProps = {\n\tclassName?: string;\n} & Omit<BaseSliceSimulatorProps, \"state\"> &\n\t(\n\t\t| {\n\t\t\t\t/**\n\t\t\t\t * React component to render simulated Slices.\n\t\t\t\t *\n\t\t\t\t * @example\n\t\t\t\t *\n\t\t\t\t * ```tsx\n\t\t\t\t * import { SliceSimulator } from \"@slicemachine/adapter-next/simulator\";\n\t\t\t\t * import { SliceZone } from \"@prismicio/react\";\n\t\t\t\t *\n\t\t\t\t * import { components } from \"../slices\";\n\t\t\t\t *\n\t\t\t\t * <SliceSimulator\n\t\t\t\t * \tsliceZone={({ slices }) => (\n\t\t\t\t * \t\t<SliceZone slices={slices} components={components} />\n\t\t\t\t * \t)}\n\t\t\t\t * />;\n\t\t\t\t * ```\n\t\t\t\t */\n\t\t\t\tsliceZone: ComponentType<SliceSimulatorSliceZoneProps>;\n\t\t }\n\t\t| {\n\t\t\t\tchildren: React.ReactNode;\n\t\t }\n\t);\n\n/**\n * Simulate slices in isolation. The slice simulator enables live slice\n * development in Slice Machine and live previews in the Page Builder.\n */\nexport const SliceSimulator: FC<SliceSimulatorProps> = ({\n\tbackground,\n\tzIndex,\n\tclassName,\n\t...restProps\n}) => {\n\tif (!(\"sliceZone\" in restProps)) {\n\t\tthrow new Error(\n\t\t\t\"A sliceZone prop must be provided when <SliceZone> is rendered in a Client Component. Add a sliceZone prop or convert your simulator to a Server Component with the getSlices helper.\",\n\t\t);\n\t}\n\n\tconst [slices, setSlices] = useState(() => getDefaultSlices());\n\tconst [message, setMessage] = useState(() => getDefaultMessage());\n\n\tuseEffect(() => {\n\t\tsimulatorManager.state.on(\n\t\t\tStateEventType.Slices,\n\t\t\t(_slices) => {\n\t\t\t\tsetSlices(_slices);\n\t\t\t},\n\t\t\t\"simulator-slices\",\n\t\t);\n\t\tsimulatorManager.state.on(\n\t\t\tStateEventType.Message,\n\t\t\t(_message) => {\n\t\t\t\tsetMessage(_message);\n\t\t\t},\n\t\t\t\"simulator-message\",\n\t\t);\n\n\t\tsimulatorManager.init();\n\n\t\treturn () => {\n\t\t\tsimulatorManager.state.off(StateEventType.Slices, \"simulator-slices\");\n\n\t\t\tsimulatorManager.state.off(StateEventType.Message, \"simulator-message\");\n\t\t};\n\t}, []);\n\n\tconst SliceZoneComp = restProps.sliceZone;\n\n\treturn (\n\t\t<SliceSimulatorWrapper\n\t\t\tmessage={message}\n\t\t\thasSlices={slices.length > 0}\n\t\t\tbackground={background}\n\t\t\tzIndex={zIndex}\n\t\t\tclassName={className}\n\t\t>\n\t\t\t<SliceZoneComp slices={slices} />\n\t\t</SliceSimulatorWrapper>\n\t);\n};\n"],"mappings":";;;;;;;;;AAkBA,MAAM,mBAAmB,IAAIA,2CAAkB;;;;;AAwC/C,MAAa,kBAA2C,EACvD,YACA,QACA,WACA,GAAG,gBACE;AACL,KAAI,EAAE,eAAe,WACpB,OAAM,IAAI,MACT,wLACA;CAGF,MAAM,CAAC,QAAQ,uFAA8C,CAAC;CAC9D,MAAM,CAAC,SAAS,yFAAgD,CAAC;AAEjE,4BAAgB;AACf,mBAAiB,MAAM,GACtBC,wCAAe,SACd,YAAY;AACZ,aAAU,QAAQ;KAEnB,mBACA;AACD,mBAAiB,MAAM,GACtBA,wCAAe,UACd,aAAa;AACb,cAAW,SAAS;KAErB,oBACA;AAED,mBAAiB,MAAM;AAEvB,eAAa;AACZ,oBAAiB,MAAM,IAAIA,wCAAe,QAAQ,mBAAmB;AAErE,oBAAiB,MAAM,IAAIA,wCAAe,SAAS,oBAAoB;;IAEtE,EAAE,CAAC;CAEN,MAAM,gBAAgB,UAAU;AAEhC,QACC,2CAACC;EACS;EACT,WAAW,OAAO,SAAS;EACf;EACJ;EACG;YAEX,2CAAC,iBAAsB,SAAU;GACV"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ComponentType, FC } from "react";
|
|
2
|
+
import { SliceSimulatorProps, SliceSimulatorState } from "@prismicio/simulator/kit";
|
|
3
|
+
|
|
4
|
+
//#region src/simulator/SliceSimulator.d.ts
|
|
5
|
+
type SliceSimulatorSliceZoneProps = {
|
|
6
|
+
slices: SliceSimulatorState["slices"];
|
|
7
|
+
};
|
|
8
|
+
type SliceSimulatorProps$1 = {
|
|
9
|
+
className?: string;
|
|
10
|
+
} & Omit<SliceSimulatorProps, "state"> & ({
|
|
11
|
+
/**
|
|
12
|
+
* React component to render simulated Slices.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
*
|
|
16
|
+
* ```tsx
|
|
17
|
+
* import { SliceSimulator } from "@slicemachine/adapter-next/simulator";
|
|
18
|
+
* import { SliceZone } from "@prismicio/react";
|
|
19
|
+
*
|
|
20
|
+
* import { components } from "../slices";
|
|
21
|
+
*
|
|
22
|
+
* <SliceSimulator
|
|
23
|
+
* sliceZone={({ slices }) => (
|
|
24
|
+
* <SliceZone slices={slices} components={components} />
|
|
25
|
+
* )}
|
|
26
|
+
* />;
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
sliceZone: ComponentType<SliceSimulatorSliceZoneProps>;
|
|
30
|
+
} | {
|
|
31
|
+
children: React.ReactNode;
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* Simulate slices in isolation. The slice simulator enables live slice
|
|
35
|
+
* development in Slice Machine and live previews in the Page Builder.
|
|
36
|
+
*/
|
|
37
|
+
declare const SliceSimulator: FC<SliceSimulatorProps$1>;
|
|
38
|
+
//#endregion
|
|
39
|
+
export { SliceSimulator, SliceSimulatorProps$1 as SliceSimulatorProps, SliceSimulatorSliceZoneProps };
|
|
40
|
+
//# sourceMappingURL=SliceSimulator.d.cts.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
3
|
+
let _prismicio_simulator_kit = require("@prismicio/simulator/kit");
|
|
4
|
+
|
|
5
|
+
//#region src/simulator/SliceSimulatorWrapper.tsx
|
|
6
|
+
/**
|
|
7
|
+
* A wrapper for the slice simulator that isolates the given children from the
|
|
8
|
+
* page's layout.
|
|
9
|
+
*/
|
|
10
|
+
const SliceSimulatorWrapper = ({ className, children, zIndex, background, message, hasSlices }) => {
|
|
11
|
+
const defaultProps = (0, _prismicio_simulator_kit.getDefaultProps)();
|
|
12
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
13
|
+
className: [_prismicio_simulator_kit.simulatorClass, className].filter(Boolean).join(" "),
|
|
14
|
+
style: {
|
|
15
|
+
zIndex: typeof zIndex === "undefined" ? defaultProps.zIndex : zIndex ?? void 0,
|
|
16
|
+
position: "fixed",
|
|
17
|
+
top: 0,
|
|
18
|
+
left: 0,
|
|
19
|
+
width: "100%",
|
|
20
|
+
height: "100vh",
|
|
21
|
+
overflow: "auto",
|
|
22
|
+
background: typeof background === "undefined" ? defaultProps.background : background ?? void 0
|
|
23
|
+
},
|
|
24
|
+
children: message ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("article", { dangerouslySetInnerHTML: { __html: message } }) : hasSlices ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
25
|
+
id: "root",
|
|
26
|
+
className: _prismicio_simulator_kit.simulatorRootClass,
|
|
27
|
+
onClickCapture: _prismicio_simulator_kit.onClickHandler,
|
|
28
|
+
onSubmitCapture: _prismicio_simulator_kit.disableEventHandler,
|
|
29
|
+
children
|
|
30
|
+
}) : null
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
//#endregion
|
|
35
|
+
exports.SliceSimulatorWrapper = SliceSimulatorWrapper;
|
|
36
|
+
//# sourceMappingURL=SliceSimulatorWrapper.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SliceSimulatorWrapper.cjs","names":["simulatorClass","simulatorRootClass","onClickHandler","disableEventHandler"],"sources":["../../src/simulator/SliceSimulatorWrapper.tsx"],"sourcesContent":["import type { FC, ReactNode } from \"react\";\nimport {\n\tdisableEventHandler,\n\tgetDefaultProps,\n\tonClickHandler,\n\tsimulatorClass,\n\tsimulatorRootClass,\n} from \"@prismicio/simulator/kit\";\nimport type { SliceSimulatorProps } from \"./SliceSimulator\";\n\ntype SliceSimulatorWrapperProps = {\n\tchildren: ReactNode;\n\tclassName?: string;\n\tmessage?: string;\n\thasSlices: boolean;\n} & Omit<SliceSimulatorProps, \"state\">;\n\n/**\n * A wrapper for the slice simulator that isolates the given children from the\n * page's layout.\n */\nexport const SliceSimulatorWrapper: FC<SliceSimulatorWrapperProps> = ({\n\tclassName,\n\tchildren,\n\tzIndex,\n\tbackground,\n\tmessage,\n\thasSlices,\n}) => {\n\tconst defaultProps = getDefaultProps();\n\n\treturn (\n\t\t<div\n\t\t\tclassName={[simulatorClass, className].filter(Boolean).join(\" \")}\n\t\t\tstyle={{\n\t\t\t\tzIndex:\n\t\t\t\t\ttypeof zIndex === \"undefined\"\n\t\t\t\t\t\t? defaultProps.zIndex\n\t\t\t\t\t\t: zIndex ?? undefined,\n\t\t\t\tposition: \"fixed\",\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: \"100vh\",\n\t\t\t\toverflow: \"auto\",\n\t\t\t\tbackground:\n\t\t\t\t\ttypeof background === \"undefined\"\n\t\t\t\t\t\t? defaultProps.background\n\t\t\t\t\t\t: background ?? undefined,\n\t\t\t}}\n\t\t>\n\t\t\t{message ? (\n\t\t\t\t<article dangerouslySetInnerHTML={{ __html: message }} />\n\t\t\t) : hasSlices ? (\n\t\t\t\t<div\n\t\t\t\t\tid=\"root\"\n\t\t\t\t\tclassName={simulatorRootClass}\n\t\t\t\t\tonClickCapture={onClickHandler as unknown as React.MouseEventHandler}\n\t\t\t\t\tonSubmitCapture={\n\t\t\t\t\t\tdisableEventHandler as unknown as React.FormEventHandler\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n};\n"],"mappings":";;;;;;;;;AAqBA,MAAa,yBAAyD,EACrE,WACA,UACA,QACA,YACA,SACA,gBACK;CACL,MAAM,8DAAgC;AAEtC,QACC,2CAAC;EACA,WAAW,CAACA,yCAAgB,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;EAChE,OAAO;GACN,QACC,OAAO,WAAW,cACf,aAAa,SACb,UAAU;GACd,UAAU;GACV,KAAK;GACL,MAAM;GACN,OAAO;GACP,QAAQ;GACR,UAAU;GACV,YACC,OAAO,eAAe,cACnB,aAAa,aACb,cAAc;GAClB;YAEA,UACA,2CAAC,aAAQ,yBAAyB,EAAE,QAAQ,SAAS,GAAI,GACtD,YACH,2CAAC;GACA,IAAG;GACH,WAAWC;GACX,gBAAgBC;GAChB,iBACCC;GAGA;IACI,GACH;GACC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/simulator/getSlices.ts
|
|
3
|
+
/**
|
|
4
|
+
* Returns the simulator's slices from the page's `searchParams.state` value.
|
|
5
|
+
* The `state` value is set by `<SliceSimulator>`.
|
|
6
|
+
*
|
|
7
|
+
* **Note**: `getSlices` should only be used in the App Router with a Server
|
|
8
|
+
* Component.
|
|
9
|
+
*/
|
|
10
|
+
const getSlices = (state) => {
|
|
11
|
+
throw new Error("getSlices is designed only for Server Components. Convert your simulator page to a Server Component or remove the function from your Client Component.");
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
exports.getSlices = getSlices;
|
|
16
|
+
//# sourceMappingURL=getSlices.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSlices.cjs","names":[],"sources":["../../src/simulator/getSlices.ts"],"sourcesContent":["import type { StateEvents, StateEventType } from \"@prismicio/simulator/kit\";\n\n/**\n * Returns the simulator's slices from the page's `searchParams.state` value.\n * The `state` value is set by `<SliceSimulator>`.\n *\n * **Note**: `getSlices` should only be used in the App Router with a Server\n * Component.\n */\nexport const getSlices = (\n\tstate: string | null | undefined,\n): StateEvents[StateEventType.Slices] => {\n\t// Prevent tsserver + eslint warnings about unused vars.\n\tstate;\n\n\tthrow new Error(\n\t\t\"getSlices is designed only for Server Components. Convert your simulator page to a Server Component or remove the function from your Client Component.\",\n\t);\n};\n"],"mappings":";;;;;;;;;AASA,MAAa,aACZ,UACwC;AAIxC,OAAM,IAAI,MACT,yJACA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { StateEventType, StateEvents } from "@prismicio/simulator/kit";
|
|
2
|
+
|
|
3
|
+
//#region src/simulator/getSlices.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the simulator's slices from the page's `searchParams.state` value.
|
|
7
|
+
* The `state` value is set by `<SliceSimulator>`.
|
|
8
|
+
*
|
|
9
|
+
* **Note**: `getSlices` should only be used in the App Router with a Server
|
|
10
|
+
* Component.
|
|
11
|
+
*/
|
|
12
|
+
declare const getSlices: (state: string | null | undefined) => StateEvents[StateEventType.Slices];
|
|
13
|
+
//#endregion
|
|
14
|
+
export { getSlices };
|
|
15
|
+
//# sourceMappingURL=getSlices.d.cts.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
4
|
+
const require_SliceSimulatorWrapper = require('../SliceSimulatorWrapper.cjs');
|
|
5
|
+
const require_getSlices = require('./getSlices.cjs');
|
|
6
|
+
let next_navigation = require("next/navigation");
|
|
7
|
+
let react = require("react");
|
|
8
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
|
+
let _prismicio_simulator_kit = require("@prismicio/simulator/kit");
|
|
10
|
+
let lz_string = require("lz-string");
|
|
11
|
+
|
|
12
|
+
//#region src/simulator/react-server/SliceSimulator.tsx
|
|
13
|
+
const STATE_PARAMS_KEY = "state";
|
|
14
|
+
const simulatorManager = new _prismicio_simulator_kit.SimulatorManager();
|
|
15
|
+
const SliceSimulator = ({ children, background, zIndex, className }) => {
|
|
16
|
+
const [message, setMessage] = (0, react.useState)(() => (0, _prismicio_simulator_kit.getDefaultMessage)());
|
|
17
|
+
const router = (0, next_navigation.useRouter)();
|
|
18
|
+
const hasSlices = require_getSlices.getSlices(typeof window !== "undefined" ? new URL(window.location.href).searchParams.get(STATE_PARAMS_KEY) : void 0).length > 0;
|
|
19
|
+
(0, react.useEffect)(() => {
|
|
20
|
+
simulatorManager.state.on(_prismicio_simulator_kit.StateEventType.Slices, (newSlices) => {
|
|
21
|
+
const url = new URL(window.location.href);
|
|
22
|
+
url.searchParams.set(STATE_PARAMS_KEY, (0, lz_string.compressToEncodedURIComponent)(JSON.stringify(newSlices)));
|
|
23
|
+
window.history.replaceState(null, "", url);
|
|
24
|
+
setTimeout(() => router.refresh(), 0);
|
|
25
|
+
}, "simulator-slices");
|
|
26
|
+
simulatorManager.state.on(_prismicio_simulator_kit.StateEventType.Message, (newMessage) => setMessage(newMessage), "simulator-message");
|
|
27
|
+
simulatorManager.init();
|
|
28
|
+
return () => {
|
|
29
|
+
simulatorManager.state.off(_prismicio_simulator_kit.StateEventType.Slices, "simulator-slices");
|
|
30
|
+
simulatorManager.state.off(_prismicio_simulator_kit.StateEventType.Message, "simulator-message");
|
|
31
|
+
};
|
|
32
|
+
}, []);
|
|
33
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_SliceSimulatorWrapper.SliceSimulatorWrapper, {
|
|
34
|
+
message,
|
|
35
|
+
hasSlices,
|
|
36
|
+
background,
|
|
37
|
+
zIndex,
|
|
38
|
+
className,
|
|
39
|
+
children
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
exports.SliceSimulator = SliceSimulator;
|
|
45
|
+
//# sourceMappingURL=SliceSimulator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SliceSimulator.cjs","names":["SimulatorManager","getSlices","StateEventType","SliceSimulatorWrapper"],"sources":["../../../src/simulator/react-server/SliceSimulator.tsx"],"sourcesContent":["// This `<SliceSimulator>` is only accessible from Server Components.\n\n\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { FC } from \"react\";\n\nimport { useRouter } from \"next/navigation\";\nimport {\n\tSimulatorManager,\n\tStateEventType,\n\tgetDefaultMessage,\n} from \"@prismicio/simulator/kit\";\nimport type { SliceSimulatorProps as BaseSliceSimulatorProps } from \"@prismicio/simulator/kit\";\nimport { compressToEncodedURIComponent } from \"lz-string\";\n\nimport { SliceSimulatorWrapper } from \"../SliceSimulatorWrapper\";\nimport { getSlices } from \"./getSlices\";\n\nconst STATE_PARAMS_KEY = \"state\";\n\nconst simulatorManager = new SimulatorManager();\n\nexport type SliceSimulatorProps = Omit<BaseSliceSimulatorProps, \"state\"> & {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n};\n\nexport const SliceSimulator: FC<SliceSimulatorProps> = ({\n\tchildren,\n\tbackground,\n\tzIndex,\n\tclassName,\n}) => {\n\tconst [message, setMessage] = useState(() => getDefaultMessage());\n\tconst router = useRouter();\n\n\tconst state =\n\t\ttypeof window !== \"undefined\"\n\t\t\t? new URL(window.location.href).searchParams.get(STATE_PARAMS_KEY)\n\t\t\t: undefined;\n\tconst hasSlices = getSlices(state).length > 0;\n\n\tuseEffect(() => {\n\t\tsimulatorManager.state.on(\n\t\t\tStateEventType.Slices,\n\t\t\t(newSlices) => {\n\t\t\t\tconst url = new URL(window.location.href);\n\t\t\t\turl.searchParams.set(\n\t\t\t\t\tSTATE_PARAMS_KEY,\n\t\t\t\t\tcompressToEncodedURIComponent(JSON.stringify(newSlices)),\n\t\t\t\t);\n\n\t\t\t\twindow.history.replaceState(null, \"\", url);\n\t\t\t\t// Wait until the next tick to prevent URL state race conditions.\n\t\t\t\tsetTimeout(() => router.refresh(), 0);\n\t\t\t},\n\t\t\t\"simulator-slices\",\n\t\t);\n\t\tsimulatorManager.state.on(\n\t\t\tStateEventType.Message,\n\t\t\t(newMessage) => setMessage(newMessage),\n\t\t\t\"simulator-message\",\n\t\t);\n\n\t\tsimulatorManager.init();\n\n\t\treturn () => {\n\t\t\tsimulatorManager.state.off(StateEventType.Slices, \"simulator-slices\");\n\n\t\t\tsimulatorManager.state.off(StateEventType.Message, \"simulator-message\");\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<SliceSimulatorWrapper\n\t\t\tmessage={message}\n\t\t\thasSlices={hasSlices}\n\t\t\tbackground={background}\n\t\t\tzIndex={zIndex}\n\t\t\tclassName={className}\n\t\t>\n\t\t\t{children}\n\t\t</SliceSimulatorWrapper>\n\t);\n};\n"],"mappings":";;;;;;;;;;;;AAmBA,MAAM,mBAAmB;AAEzB,MAAM,mBAAmB,IAAIA,2CAAkB;AAO/C,MAAa,kBAA2C,EACvD,UACA,YACA,QACA,gBACK;CACL,MAAM,CAAC,SAAS,yFAAgD,CAAC;CACjE,MAAM,yCAAoB;CAM1B,MAAM,YAAYC,4BAHjB,OAAO,WAAW,cACf,IAAI,IAAI,OAAO,SAAS,KAAK,CAAC,aAAa,IAAI,iBAAiB,GAChE,OAC8B,CAAC,SAAS;AAE5C,4BAAgB;AACf,mBAAiB,MAAM,GACtBC,wCAAe,SACd,cAAc;GACd,MAAM,MAAM,IAAI,IAAI,OAAO,SAAS,KAAK;AACzC,OAAI,aAAa,IAChB,+DAC8B,KAAK,UAAU,UAAU,CAAC,CACxD;AAED,UAAO,QAAQ,aAAa,MAAM,IAAI,IAAI;AAE1C,oBAAiB,OAAO,SAAS,EAAE,EAAE;KAEtC,mBACA;AACD,mBAAiB,MAAM,GACtBA,wCAAe,UACd,eAAe,WAAW,WAAW,EACtC,oBACA;AAED,mBAAiB,MAAM;AAEvB,eAAa;AACZ,oBAAiB,MAAM,IAAIA,wCAAe,QAAQ,mBAAmB;AAErE,oBAAiB,MAAM,IAAIA,wCAAe,SAAS,oBAAoB;;IAEtE,EAAE,CAAC;AAEN,QACC,2CAACC;EACS;EACE;EACC;EACJ;EACG;EAEV;GACsB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FC } from "react";
|
|
2
|
+
import { SliceSimulatorProps } from "@prismicio/simulator/kit";
|
|
3
|
+
|
|
4
|
+
//#region src/simulator/react-server/SliceSimulator.d.ts
|
|
5
|
+
type SliceSimulatorProps$1 = Omit<SliceSimulatorProps, "state"> & {
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
className?: string;
|
|
8
|
+
};
|
|
9
|
+
declare const SliceSimulator: FC<SliceSimulatorProps$1>;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { SliceSimulator };
|
|
12
|
+
//# sourceMappingURL=SliceSimulator.d.cts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
let _prismicio_simulator_kit = require("@prismicio/simulator/kit");
|
|
3
|
+
let lz_string = require("lz-string");
|
|
4
|
+
|
|
5
|
+
//#region src/simulator/react-server/getSlices.ts
|
|
6
|
+
const getSlices = (state) => {
|
|
7
|
+
return state ? JSON.parse((0, lz_string.decompressFromEncodedURIComponent)(state)) : (0, _prismicio_simulator_kit.getDefaultSlices)();
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
exports.getSlices = getSlices;
|
|
12
|
+
//# sourceMappingURL=getSlices.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSlices.cjs","names":[],"sources":["../../../src/simulator/react-server/getSlices.ts"],"sourcesContent":["// This `getSlices` is only accessible from Server Components.\n\nimport { getDefaultSlices } from \"@prismicio/simulator/kit\";\nimport type { StateEvents, StateEventType } from \"@prismicio/simulator/kit\";\nimport { decompressFromEncodedURIComponent } from \"lz-string\";\n\nexport const getSlices = (\n\tstate: string | null | undefined,\n): StateEvents[StateEventType.Slices] => {\n\treturn state\n\t\t? JSON.parse(decompressFromEncodedURIComponent(state))\n\t\t: getDefaultSlices();\n};\n"],"mappings":";;;;;AAMA,MAAa,aACZ,UACwC;AACxC,QAAO,QACJ,KAAK,uDAAwC,MAAM,CAAC,mDAClC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StateEventType, StateEvents } from "@prismicio/simulator/kit";
|
|
2
|
+
|
|
3
|
+
//#region src/simulator/react-server/getSlices.d.ts
|
|
4
|
+
declare const getSlices: (state: string | null | undefined) => StateEvents[StateEventType.Slices];
|
|
5
|
+
//#endregion
|
|
6
|
+
export { getSlices };
|
|
7
|
+
//# sourceMappingURL=getSlices.d.cts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/simulator/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Parameters provided to the Slice Simulator page.
|
|
4
|
+
*
|
|
5
|
+
* **Note**: `SliceSimulatorParams` should only be used in the App Router with a
|
|
6
|
+
* Server Component.
|
|
7
|
+
*/
|
|
8
|
+
type SliceSimulatorParams = {
|
|
9
|
+
searchParams: Promise<{
|
|
10
|
+
state?: string;
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { SliceSimulatorParams };
|
|
15
|
+
//# sourceMappingURL=types.d.cts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prismicio/next",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1-pr.120.3fae0cb",
|
|
4
4
|
"description": "Helpers to integrate Prismic into Next.js apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"exports": {
|
|
21
21
|
".": "./dist/index.cjs",
|
|
22
22
|
"./pages": "./dist/pages.cjs",
|
|
23
|
+
"./react-server": "./dist/react-server.cjs",
|
|
23
24
|
"./package.json": "./package.json"
|
|
24
25
|
},
|
|
25
26
|
"main": "./dist/index.cjs",
|
|
@@ -32,6 +33,9 @@
|
|
|
32
33
|
],
|
|
33
34
|
"pages": [
|
|
34
35
|
"./dist/pages/index.d.ts"
|
|
36
|
+
],
|
|
37
|
+
"react-server": [
|
|
38
|
+
"./dist/react-server/index.d.ts"
|
|
35
39
|
]
|
|
36
40
|
}
|
|
37
41
|
},
|
|
@@ -55,12 +59,13 @@
|
|
|
55
59
|
"types": "tsc --noEmit"
|
|
56
60
|
},
|
|
57
61
|
"dependencies": {
|
|
58
|
-
"
|
|
62
|
+
"@prismicio/simulator": "^0.1.4",
|
|
63
|
+
"imgix-url-builder": "^0.0.5",
|
|
64
|
+
"lz-string": "^1.5.0"
|
|
59
65
|
},
|
|
60
66
|
"devDependencies": {
|
|
61
67
|
"@playwright/test": "^1.49.1",
|
|
62
68
|
"@prismicio/client": "^7.12.0",
|
|
63
|
-
"@prismicio/react": "^3.2.2",
|
|
64
69
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
65
70
|
"@types/node": "^22.10.2",
|
|
66
71
|
"@types/react": "^19.2.3",
|
|
@@ -76,15 +81,9 @@
|
|
|
76
81
|
},
|
|
77
82
|
"peerDependencies": {
|
|
78
83
|
"@prismicio/client": "^7",
|
|
79
|
-
"@prismicio/react": "^3",
|
|
80
84
|
"next": "^13.4.5 || ^14 || ^15 || ^16",
|
|
81
85
|
"react": "^18 || ^19"
|
|
82
86
|
},
|
|
83
|
-
"peerDependenciesMeta": {
|
|
84
|
-
"@prismicio/react": {
|
|
85
|
-
"optional": true
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
87
|
"engines": {
|
|
89
88
|
"node": ">=20"
|
|
90
89
|
},
|
package/src/index.ts
CHANGED
|
@@ -15,8 +15,12 @@ export type { RedirectToPreviewURLConfig } from "./redirectToPreviewURL";
|
|
|
15
15
|
export { PrismicNextImage } from "./PrismicNextImage";
|
|
16
16
|
export type { PrismicNextImageProps } from "./PrismicNextImage";
|
|
17
17
|
|
|
18
|
-
export {
|
|
19
|
-
export type {
|
|
18
|
+
export { SliceSimulator, getSlices } from "./simulator";
|
|
19
|
+
export type {
|
|
20
|
+
SliceSimulatorProps,
|
|
21
|
+
SliceSimulatorSliceZoneProps,
|
|
22
|
+
SliceSimulatorParams,
|
|
23
|
+
} from "./simulator";
|
|
20
24
|
|
|
21
25
|
export { imgixLoader } from "./imgixLoader";
|
|
22
26
|
|
package/src/pages/index.ts
CHANGED
|
@@ -4,9 +4,6 @@ export { type PrismicNextLinkProps } from "../PrismicNextLink";
|
|
|
4
4
|
export { PrismicNextImage } from "../PrismicNextImage";
|
|
5
5
|
export { type PrismicNextImageProps } from "../PrismicNextImage";
|
|
6
6
|
|
|
7
|
-
export { PrismicNextRichText } from "../PrismicNextRichText";
|
|
8
|
-
export { type PrismicNextRichTextProps } from "../PrismicNextRichText";
|
|
9
|
-
|
|
10
7
|
export { imgixLoader } from "../imgixLoader";
|
|
11
8
|
|
|
12
9
|
export { PrismicPreview } from "./PrismicPreview";
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import type { ComponentType, FC } from "react";
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
SimulatorManager,
|
|
8
|
+
StateEventType,
|
|
9
|
+
getDefaultMessage,
|
|
10
|
+
getDefaultSlices,
|
|
11
|
+
} from "@prismicio/simulator/kit";
|
|
12
|
+
import type {
|
|
13
|
+
SliceSimulatorProps as BaseSliceSimulatorProps,
|
|
14
|
+
SliceSimulatorState,
|
|
15
|
+
} from "@prismicio/simulator/kit";
|
|
16
|
+
|
|
17
|
+
import { SliceSimulatorWrapper } from "./SliceSimulatorWrapper";
|
|
18
|
+
|
|
19
|
+
const simulatorManager = new SimulatorManager();
|
|
20
|
+
|
|
21
|
+
export type SliceSimulatorSliceZoneProps = {
|
|
22
|
+
slices: SliceSimulatorState["slices"];
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type SliceSimulatorProps = {
|
|
26
|
+
className?: string;
|
|
27
|
+
} & Omit<BaseSliceSimulatorProps, "state"> &
|
|
28
|
+
(
|
|
29
|
+
| {
|
|
30
|
+
/**
|
|
31
|
+
* React component to render simulated Slices.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
*
|
|
35
|
+
* ```tsx
|
|
36
|
+
* import { SliceSimulator } from "@slicemachine/adapter-next/simulator";
|
|
37
|
+
* import { SliceZone } from "@prismicio/react";
|
|
38
|
+
*
|
|
39
|
+
* import { components } from "../slices";
|
|
40
|
+
*
|
|
41
|
+
* <SliceSimulator
|
|
42
|
+
* sliceZone={({ slices }) => (
|
|
43
|
+
* <SliceZone slices={slices} components={components} />
|
|
44
|
+
* )}
|
|
45
|
+
* />;
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
sliceZone: ComponentType<SliceSimulatorSliceZoneProps>;
|
|
49
|
+
}
|
|
50
|
+
| {
|
|
51
|
+
children: React.ReactNode;
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Simulate slices in isolation. The slice simulator enables live slice
|
|
57
|
+
* development in Slice Machine and live previews in the Page Builder.
|
|
58
|
+
*/
|
|
59
|
+
export const SliceSimulator: FC<SliceSimulatorProps> = ({
|
|
60
|
+
background,
|
|
61
|
+
zIndex,
|
|
62
|
+
className,
|
|
63
|
+
...restProps
|
|
64
|
+
}) => {
|
|
65
|
+
if (!("sliceZone" in restProps)) {
|
|
66
|
+
throw new Error(
|
|
67
|
+
"A sliceZone prop must be provided when <SliceZone> is rendered in a Client Component. Add a sliceZone prop or convert your simulator to a Server Component with the getSlices helper.",
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const [slices, setSlices] = useState(() => getDefaultSlices());
|
|
72
|
+
const [message, setMessage] = useState(() => getDefaultMessage());
|
|
73
|
+
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
simulatorManager.state.on(
|
|
76
|
+
StateEventType.Slices,
|
|
77
|
+
(_slices) => {
|
|
78
|
+
setSlices(_slices);
|
|
79
|
+
},
|
|
80
|
+
"simulator-slices",
|
|
81
|
+
);
|
|
82
|
+
simulatorManager.state.on(
|
|
83
|
+
StateEventType.Message,
|
|
84
|
+
(_message) => {
|
|
85
|
+
setMessage(_message);
|
|
86
|
+
},
|
|
87
|
+
"simulator-message",
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
simulatorManager.init();
|
|
91
|
+
|
|
92
|
+
return () => {
|
|
93
|
+
simulatorManager.state.off(StateEventType.Slices, "simulator-slices");
|
|
94
|
+
|
|
95
|
+
simulatorManager.state.off(StateEventType.Message, "simulator-message");
|
|
96
|
+
};
|
|
97
|
+
}, []);
|
|
98
|
+
|
|
99
|
+
const SliceZoneComp = restProps.sliceZone;
|
|
100
|
+
|
|
101
|
+
return (
|
|
102
|
+
<SliceSimulatorWrapper
|
|
103
|
+
message={message}
|
|
104
|
+
hasSlices={slices.length > 0}
|
|
105
|
+
background={background}
|
|
106
|
+
zIndex={zIndex}
|
|
107
|
+
className={className}
|
|
108
|
+
>
|
|
109
|
+
<SliceZoneComp slices={slices} />
|
|
110
|
+
</SliceSimulatorWrapper>
|
|
111
|
+
);
|
|
112
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { FC, ReactNode } from "react";
|
|
2
|
+
import {
|
|
3
|
+
disableEventHandler,
|
|
4
|
+
getDefaultProps,
|
|
5
|
+
onClickHandler,
|
|
6
|
+
simulatorClass,
|
|
7
|
+
simulatorRootClass,
|
|
8
|
+
} from "@prismicio/simulator/kit";
|
|
9
|
+
import type { SliceSimulatorProps } from "./SliceSimulator";
|
|
10
|
+
|
|
11
|
+
type SliceSimulatorWrapperProps = {
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
className?: string;
|
|
14
|
+
message?: string;
|
|
15
|
+
hasSlices: boolean;
|
|
16
|
+
} & Omit<SliceSimulatorProps, "state">;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A wrapper for the slice simulator that isolates the given children from the
|
|
20
|
+
* page's layout.
|
|
21
|
+
*/
|
|
22
|
+
export const SliceSimulatorWrapper: FC<SliceSimulatorWrapperProps> = ({
|
|
23
|
+
className,
|
|
24
|
+
children,
|
|
25
|
+
zIndex,
|
|
26
|
+
background,
|
|
27
|
+
message,
|
|
28
|
+
hasSlices,
|
|
29
|
+
}) => {
|
|
30
|
+
const defaultProps = getDefaultProps();
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<div
|
|
34
|
+
className={[simulatorClass, className].filter(Boolean).join(" ")}
|
|
35
|
+
style={{
|
|
36
|
+
zIndex:
|
|
37
|
+
typeof zIndex === "undefined"
|
|
38
|
+
? defaultProps.zIndex
|
|
39
|
+
: zIndex ?? undefined,
|
|
40
|
+
position: "fixed",
|
|
41
|
+
top: 0,
|
|
42
|
+
left: 0,
|
|
43
|
+
width: "100%",
|
|
44
|
+
height: "100vh",
|
|
45
|
+
overflow: "auto",
|
|
46
|
+
background:
|
|
47
|
+
typeof background === "undefined"
|
|
48
|
+
? defaultProps.background
|
|
49
|
+
: background ?? undefined,
|
|
50
|
+
}}
|
|
51
|
+
>
|
|
52
|
+
{message ? (
|
|
53
|
+
<article dangerouslySetInnerHTML={{ __html: message }} />
|
|
54
|
+
) : hasSlices ? (
|
|
55
|
+
<div
|
|
56
|
+
id="root"
|
|
57
|
+
className={simulatorRootClass}
|
|
58
|
+
onClickCapture={onClickHandler as unknown as React.MouseEventHandler}
|
|
59
|
+
onSubmitCapture={
|
|
60
|
+
disableEventHandler as unknown as React.FormEventHandler
|
|
61
|
+
}
|
|
62
|
+
>
|
|
63
|
+
{children}
|
|
64
|
+
</div>
|
|
65
|
+
) : null}
|
|
66
|
+
</div>
|
|
67
|
+
);
|
|
68
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { StateEvents, StateEventType } from "@prismicio/simulator/kit";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns the simulator's slices from the page's `searchParams.state` value.
|
|
5
|
+
* The `state` value is set by `<SliceSimulator>`.
|
|
6
|
+
*
|
|
7
|
+
* **Note**: `getSlices` should only be used in the App Router with a Server
|
|
8
|
+
* Component.
|
|
9
|
+
*/
|
|
10
|
+
export const getSlices = (
|
|
11
|
+
state: string | null | undefined,
|
|
12
|
+
): StateEvents[StateEventType.Slices] => {
|
|
13
|
+
// Prevent tsserver + eslint warnings about unused vars.
|
|
14
|
+
state;
|
|
15
|
+
|
|
16
|
+
throw new Error(
|
|
17
|
+
"getSlices is designed only for Server Components. Convert your simulator page to a Server Component or remove the function from your Client Component.",
|
|
18
|
+
);
|
|
19
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// This `<SliceSimulator>` is only accessible from Server Components.
|
|
2
|
+
|
|
3
|
+
"use client";
|
|
4
|
+
|
|
5
|
+
import { useEffect, useState } from "react";
|
|
6
|
+
import type { FC } from "react";
|
|
7
|
+
|
|
8
|
+
import { useRouter } from "next/navigation";
|
|
9
|
+
import {
|
|
10
|
+
SimulatorManager,
|
|
11
|
+
StateEventType,
|
|
12
|
+
getDefaultMessage,
|
|
13
|
+
} from "@prismicio/simulator/kit";
|
|
14
|
+
import type { SliceSimulatorProps as BaseSliceSimulatorProps } from "@prismicio/simulator/kit";
|
|
15
|
+
import { compressToEncodedURIComponent } from "lz-string";
|
|
16
|
+
|
|
17
|
+
import { SliceSimulatorWrapper } from "../SliceSimulatorWrapper";
|
|
18
|
+
import { getSlices } from "./getSlices";
|
|
19
|
+
|
|
20
|
+
const STATE_PARAMS_KEY = "state";
|
|
21
|
+
|
|
22
|
+
const simulatorManager = new SimulatorManager();
|
|
23
|
+
|
|
24
|
+
export type SliceSimulatorProps = Omit<BaseSliceSimulatorProps, "state"> & {
|
|
25
|
+
children: React.ReactNode;
|
|
26
|
+
className?: string;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const SliceSimulator: FC<SliceSimulatorProps> = ({
|
|
30
|
+
children,
|
|
31
|
+
background,
|
|
32
|
+
zIndex,
|
|
33
|
+
className,
|
|
34
|
+
}) => {
|
|
35
|
+
const [message, setMessage] = useState(() => getDefaultMessage());
|
|
36
|
+
const router = useRouter();
|
|
37
|
+
|
|
38
|
+
const state =
|
|
39
|
+
typeof window !== "undefined"
|
|
40
|
+
? new URL(window.location.href).searchParams.get(STATE_PARAMS_KEY)
|
|
41
|
+
: undefined;
|
|
42
|
+
const hasSlices = getSlices(state).length > 0;
|
|
43
|
+
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
simulatorManager.state.on(
|
|
46
|
+
StateEventType.Slices,
|
|
47
|
+
(newSlices) => {
|
|
48
|
+
const url = new URL(window.location.href);
|
|
49
|
+
url.searchParams.set(
|
|
50
|
+
STATE_PARAMS_KEY,
|
|
51
|
+
compressToEncodedURIComponent(JSON.stringify(newSlices)),
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
window.history.replaceState(null, "", url);
|
|
55
|
+
// Wait until the next tick to prevent URL state race conditions.
|
|
56
|
+
setTimeout(() => router.refresh(), 0);
|
|
57
|
+
},
|
|
58
|
+
"simulator-slices",
|
|
59
|
+
);
|
|
60
|
+
simulatorManager.state.on(
|
|
61
|
+
StateEventType.Message,
|
|
62
|
+
(newMessage) => setMessage(newMessage),
|
|
63
|
+
"simulator-message",
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
simulatorManager.init();
|
|
67
|
+
|
|
68
|
+
return () => {
|
|
69
|
+
simulatorManager.state.off(StateEventType.Slices, "simulator-slices");
|
|
70
|
+
|
|
71
|
+
simulatorManager.state.off(StateEventType.Message, "simulator-message");
|
|
72
|
+
};
|
|
73
|
+
}, []);
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<SliceSimulatorWrapper
|
|
77
|
+
message={message}
|
|
78
|
+
hasSlices={hasSlices}
|
|
79
|
+
background={background}
|
|
80
|
+
zIndex={zIndex}
|
|
81
|
+
className={className}
|
|
82
|
+
>
|
|
83
|
+
{children}
|
|
84
|
+
</SliceSimulatorWrapper>
|
|
85
|
+
);
|
|
86
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// This `getSlices` is only accessible from Server Components.
|
|
2
|
+
|
|
3
|
+
import { getDefaultSlices } from "@prismicio/simulator/kit";
|
|
4
|
+
import type { StateEvents, StateEventType } from "@prismicio/simulator/kit";
|
|
5
|
+
import { decompressFromEncodedURIComponent } from "lz-string";
|
|
6
|
+
|
|
7
|
+
export const getSlices = (
|
|
8
|
+
state: string | null | undefined,
|
|
9
|
+
): StateEvents[StateEventType.Slices] => {
|
|
10
|
+
return state
|
|
11
|
+
? JSON.parse(decompressFromEncodedURIComponent(state))
|
|
12
|
+
: getDefaultSlices();
|
|
13
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameters provided to the Slice Simulator page.
|
|
3
|
+
*
|
|
4
|
+
* **Note**: `SliceSimulatorParams` should only be used in the App Router with a
|
|
5
|
+
* Server Component.
|
|
6
|
+
*/
|
|
7
|
+
export type SliceSimulatorParams = {
|
|
8
|
+
searchParams: Promise<{
|
|
9
|
+
state?: string;
|
|
10
|
+
}>;
|
|
11
|
+
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
|
|
2
|
-
const require_PrismicNextLink = require('./PrismicNextLink.cjs');
|
|
3
|
-
const require_PrismicNextImage = require('./PrismicNextImage.cjs');
|
|
4
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
-
let _prismicio_react = require("@prismicio/react");
|
|
6
|
-
|
|
7
|
-
//#region src/PrismicNextRichText.tsx
|
|
8
|
-
const defaultComponents = {
|
|
9
|
-
image: ({ node }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
10
|
-
className: "block-img",
|
|
11
|
-
children: node.linkTo ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PrismicNextLink.PrismicNextLink, {
|
|
12
|
-
field: node.linkTo,
|
|
13
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PrismicNextImage.PrismicNextImage, { field: node })
|
|
14
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PrismicNextImage.PrismicNextImage, { field: node })
|
|
15
|
-
}),
|
|
16
|
-
hyperlink: ({ node, children }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PrismicNextLink.PrismicNextLink, {
|
|
17
|
-
field: node.data,
|
|
18
|
-
children
|
|
19
|
-
})
|
|
20
|
-
};
|
|
21
|
-
const PrismicNextRichText = (props) => {
|
|
22
|
-
const { components, ...restProps } = props;
|
|
23
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_prismicio_react.PrismicRichText, {
|
|
24
|
-
components: {
|
|
25
|
-
...defaultComponents,
|
|
26
|
-
...components
|
|
27
|
-
},
|
|
28
|
-
...restProps
|
|
29
|
-
});
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
//#endregion
|
|
33
|
-
exports.PrismicNextRichText = PrismicNextRichText;
|
|
34
|
-
//# sourceMappingURL=PrismicNextRichText.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PrismicNextRichText.cjs","names":["PrismicNextLink","PrismicNextImage","PrismicRichText"],"sources":["../src/PrismicNextRichText.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { PrismicRichText } from \"@prismicio/react\";\nimport type { PrismicRichTextProps, JSXMapSerializer } from \"@prismicio/react\";\n\nimport { PrismicNextImage } from \"./PrismicNextImage\";\nimport { PrismicNextLink } from \"./PrismicNextLink\";\n\nexport type PrismicNextRichTextProps = Omit<\n\tPrismicRichTextProps,\n\t\"components\"\n> & {\n\tcomponents?: JSXMapSerializer;\n};\n\nconst defaultComponents: JSXMapSerializer = {\n\timage: ({ node }) => (\n\t\t<p className=\"block-img\">\n\t\t\t{node.linkTo ? (\n\t\t\t\t<PrismicNextLink field={node.linkTo}>\n\t\t\t\t\t<PrismicNextImage field={node} />\n\t\t\t\t</PrismicNextLink>\n\t\t\t) : (\n\t\t\t\t<PrismicNextImage field={node} />\n\t\t\t)}\n\t\t</p>\n\t),\n\thyperlink: ({ node, children }) => (\n\t\t<PrismicNextLink field={node.data}>{children}</PrismicNextLink>\n\t),\n};\n\nexport const PrismicNextRichText: FC<PrismicNextRichTextProps> = (props) => {\n\tconst { components, ...restProps } = props;\n\n\treturn (\n\t\t<PrismicRichText\n\t\t\tcomponents={{ ...defaultComponents, ...components }}\n\t\t\t{...restProps}\n\t\t/>\n\t);\n};\n"],"mappings":";;;;;;;AAcA,MAAM,oBAAsC;CAC3C,QAAQ,EAAE,WACT,2CAAC;EAAE,WAAU;YACX,KAAK,SACL,2CAACA;GAAgB,OAAO,KAAK;aAC5B,2CAACC,6CAAiB,OAAO,OAAQ;IAChB,GAElB,2CAACA,6CAAiB,OAAO,OAAQ;GAE/B;CAEL,YAAY,EAAE,MAAM,eACnB,2CAACD;EAAgB,OAAO,KAAK;EAAO;GAA2B;CAEhE;AAED,MAAa,uBAAqD,UAAU;CAC3E,MAAM,EAAE,YAAY,GAAG,cAAc;AAErC,QACC,2CAACE;EACA,YAAY;GAAE,GAAG;GAAmB,GAAG;GAAY;EACnD,GAAI;GACH"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { FC } from "react";
|
|
2
|
-
import { JSXMapSerializer, PrismicRichTextProps } from "@prismicio/react";
|
|
3
|
-
|
|
4
|
-
//#region src/PrismicNextRichText.d.ts
|
|
5
|
-
type PrismicNextRichTextProps = Omit<PrismicRichTextProps, "components"> & {
|
|
6
|
-
components?: JSXMapSerializer;
|
|
7
|
-
};
|
|
8
|
-
declare const PrismicNextRichText: FC<PrismicNextRichTextProps>;
|
|
9
|
-
//#endregion
|
|
10
|
-
export { PrismicNextRichText, PrismicNextRichTextProps };
|
|
11
|
-
//# sourceMappingURL=PrismicNextRichText.d.cts.map
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { FC } from "react";
|
|
2
|
-
import { PrismicRichText } from "@prismicio/react";
|
|
3
|
-
import type { PrismicRichTextProps, JSXMapSerializer } from "@prismicio/react";
|
|
4
|
-
|
|
5
|
-
import { PrismicNextImage } from "./PrismicNextImage";
|
|
6
|
-
import { PrismicNextLink } from "./PrismicNextLink";
|
|
7
|
-
|
|
8
|
-
export type PrismicNextRichTextProps = Omit<
|
|
9
|
-
PrismicRichTextProps,
|
|
10
|
-
"components"
|
|
11
|
-
> & {
|
|
12
|
-
components?: JSXMapSerializer;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const defaultComponents: JSXMapSerializer = {
|
|
16
|
-
image: ({ node }) => (
|
|
17
|
-
<p className="block-img">
|
|
18
|
-
{node.linkTo ? (
|
|
19
|
-
<PrismicNextLink field={node.linkTo}>
|
|
20
|
-
<PrismicNextImage field={node} />
|
|
21
|
-
</PrismicNextLink>
|
|
22
|
-
) : (
|
|
23
|
-
<PrismicNextImage field={node} />
|
|
24
|
-
)}
|
|
25
|
-
</p>
|
|
26
|
-
),
|
|
27
|
-
hyperlink: ({ node, children }) => (
|
|
28
|
-
<PrismicNextLink field={node.data}>{children}</PrismicNextLink>
|
|
29
|
-
),
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export const PrismicNextRichText: FC<PrismicNextRichTextProps> = (props) => {
|
|
33
|
-
const { components, ...restProps } = props;
|
|
34
|
-
|
|
35
|
-
return (
|
|
36
|
-
<PrismicRichText
|
|
37
|
-
components={{ ...defaultComponents, ...components }}
|
|
38
|
-
{...restProps}
|
|
39
|
-
/>
|
|
40
|
-
);
|
|
41
|
-
};
|