@comet/site-react 7.21.0-canary-20250522145352

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 (116) hide show
  1. package/LICENSE +24 -0
  2. package/lib/blockLoader/blockLoader.d.ts +32 -0
  3. package/lib/blockLoader/blockLoader.d.ts.map +1 -0
  4. package/lib/blockLoader/blockLoader.js +57 -0
  5. package/lib/blocks/PropsWithData.d.ts +4 -0
  6. package/lib/blocks/PropsWithData.d.ts.map +1 -0
  7. package/lib/blocks/SvgImageBlock.d.ts +9 -0
  8. package/lib/blocks/SvgImageBlock.d.ts.map +1 -0
  9. package/lib/blocks/SvgImageBlock.js +23 -0
  10. package/lib/blocks/factories/BlocksBlock.d.ts +15 -0
  11. package/lib/blocks/factories/BlocksBlock.d.ts.map +1 -0
  12. package/lib/blocks/factories/BlocksBlock.js +30 -0
  13. package/lib/blocks/factories/ListBlock.d.ts +14 -0
  14. package/lib/blocks/factories/ListBlock.d.ts.map +1 -0
  15. package/lib/blocks/factories/ListBlock.js +13 -0
  16. package/lib/blocks/factories/OneOfBlock.d.ts +15 -0
  17. package/lib/blocks/factories/OneOfBlock.d.ts.map +1 -0
  18. package/lib/blocks/factories/OneOfBlock.js +26 -0
  19. package/lib/blocks/factories/OptionalBlock.d.ts +11 -0
  20. package/lib/blocks/factories/OptionalBlock.d.ts.map +1 -0
  21. package/lib/blocks/factories/OptionalBlock.js +10 -0
  22. package/lib/blocks/factories/types.d.ts +5 -0
  23. package/lib/blocks/factories/types.d.ts.map +1 -0
  24. package/lib/blocks/helpers/RichTextBlockHelper.d.ts +3 -0
  25. package/lib/blocks/helpers/RichTextBlockHelper.d.ts.map +1 -0
  26. package/lib/blocks/helpers/RichTextBlockHelper.js +7 -0
  27. package/lib/blocks/helpers/useIsElementInViewport.d.ts +2 -0
  28. package/lib/blocks/helpers/useIsElementInViewport.d.ts.map +1 -0
  29. package/lib/blocks/helpers/useIsElementInViewport.js +21 -0
  30. package/lib/blocks.generated.d.ts +176 -0
  31. package/lib/blocks.generated.d.ts.map +1 -0
  32. package/lib/cookies/CookieApiContext.d.ts +14 -0
  33. package/lib/cookies/CookieApiContext.d.ts.map +1 -0
  34. package/lib/cookies/CookieApiContext.js +19 -0
  35. package/lib/cookies/CookieSafe.d.ts +9 -0
  36. package/lib/cookies/CookieSafe.d.ts.map +1 -0
  37. package/lib/cookies/CookieSafe.js +19 -0
  38. package/lib/cookies/useCookieBotCookieApi.d.ts +3 -0
  39. package/lib/cookies/useCookieBotCookieApi.d.ts.map +1 -0
  40. package/lib/cookies/useCookieBotCookieApi.js +34 -0
  41. package/lib/cookies/useLocalStorageCookieApi.d.ts +11 -0
  42. package/lib/cookies/useLocalStorageCookieApi.d.ts.map +1 -0
  43. package/lib/cookies/useLocalStorageCookieApi.js +41 -0
  44. package/lib/cookies/useOneTrustCookieApi.d.ts +3 -0
  45. package/lib/cookies/useOneTrustCookieApi.d.ts.map +1 -0
  46. package/lib/cookies/useOneTrustCookieApi.js +49 -0
  47. package/lib/errorHandler/ErrorHandlerBoundary.d.ts +3 -0
  48. package/lib/errorHandler/ErrorHandlerBoundary.d.ts.map +1 -0
  49. package/lib/errorHandler/ErrorHandlerBoundary.js +10 -0
  50. package/lib/errorHandler/ErrorHandlerBoundaryInternal.d.ts +17 -0
  51. package/lib/errorHandler/ErrorHandlerBoundaryInternal.d.ts.map +1 -0
  52. package/lib/errorHandler/ErrorHandlerBoundaryInternal.js +27 -0
  53. package/lib/errorHandler/ErrorHandlerProvider.d.ts +9 -0
  54. package/lib/errorHandler/ErrorHandlerProvider.d.ts.map +1 -0
  55. package/lib/errorHandler/ErrorHandlerProvider.js +22 -0
  56. package/lib/graphQLFetch/fetchInMemoryCache.d.ts +4 -0
  57. package/lib/graphQLFetch/fetchInMemoryCache.d.ts.map +1 -0
  58. package/lib/graphQLFetch/fetchInMemoryCache.js +38 -0
  59. package/lib/graphQLFetch/graphQLFetch.d.ts +12 -0
  60. package/lib/graphQLFetch/graphQLFetch.d.ts.map +1 -0
  61. package/lib/graphQLFetch/graphQLFetch.js +111 -0
  62. package/lib/iframebridge/IFrameBridge.d.ts +40 -0
  63. package/lib/iframebridge/IFrameBridge.d.ts.map +1 -0
  64. package/lib/iframebridge/IFrameBridge.js +239 -0
  65. package/lib/iframebridge/IFrameBridge.module.scss.js +8 -0
  66. package/lib/iframebridge/IFrameMessage.d.ts +118 -0
  67. package/lib/iframebridge/IFrameMessage.d.ts.map +1 -0
  68. package/lib/iframebridge/IFrameMessage.js +21 -0
  69. package/lib/iframebridge/Preview.d.ts +9 -0
  70. package/lib/iframebridge/Preview.d.ts.map +1 -0
  71. package/lib/iframebridge/Preview.js +57 -0
  72. package/lib/iframebridge/Preview.module.scss.js +8 -0
  73. package/lib/iframebridge/PreviewOverlay.d.ts +2 -0
  74. package/lib/iframebridge/PreviewOverlay.d.ts.map +1 -0
  75. package/lib/iframebridge/PreviewOverlay.js +27 -0
  76. package/lib/iframebridge/PreviewOverlay.module.scss.js +8 -0
  77. package/lib/iframebridge/PreviewOverlayElement.d.ts +7 -0
  78. package/lib/iframebridge/PreviewOverlayElement.d.ts.map +1 -0
  79. package/lib/iframebridge/PreviewOverlayElement.js +36 -0
  80. package/lib/iframebridge/PreviewOverlayElement.module.scss.js +20 -0
  81. package/lib/iframebridge/useBlockPreviewFetch.d.ts +16 -0
  82. package/lib/iframebridge/useBlockPreviewFetch.d.ts.map +1 -0
  83. package/lib/iframebridge/useBlockPreviewFetch.js +29 -0
  84. package/lib/iframebridge/useIFrameBridge.d.ts +3 -0
  85. package/lib/iframebridge/useIFrameBridge.d.ts.map +1 -0
  86. package/lib/iframebridge/useIFrameBridge.js +8 -0
  87. package/lib/iframebridge/utils.d.ts +10 -0
  88. package/lib/iframebridge/utils.d.ts.map +1 -0
  89. package/lib/iframebridge/utils.js +45 -0
  90. package/lib/iframebridge/withPreview.d.ts +18 -0
  91. package/lib/iframebridge/withPreview.d.ts.map +1 -0
  92. package/lib/iframebridge/withPreview.js +34 -0
  93. package/lib/image/Image.d.ts +8 -0
  94. package/lib/image/Image.d.ts.map +1 -0
  95. package/lib/image/Image.js +10 -0
  96. package/lib/image/image.utils.d.ts +18 -0
  97. package/lib/image/image.utils.d.ts.map +1 -0
  98. package/lib/image/image.utils.js +53 -0
  99. package/lib/index.d.ts +32 -0
  100. package/lib/index.d.ts.map +1 -0
  101. package/lib/index.js +69 -0
  102. package/lib/preview/BlockPreviewProvider.d.ts +3 -0
  103. package/lib/preview/BlockPreviewProvider.d.ts.map +1 -0
  104. package/lib/preview/BlockPreviewProvider.js +18 -0
  105. package/lib/preview/PreviewContext.d.ts +9 -0
  106. package/lib/preview/PreviewContext.d.ts.map +1 -0
  107. package/lib/preview/PreviewContext.js +11 -0
  108. package/lib/preview/usePreview.d.ts +11 -0
  109. package/lib/preview/usePreview.d.ts.map +1 -0
  110. package/lib/preview/usePreview.js +41 -0
  111. package/lib/previewskeleton/PreviewSkeleton.d.ts +14 -0
  112. package/lib/previewskeleton/PreviewSkeleton.d.ts.map +1 -0
  113. package/lib/previewskeleton/PreviewSkeleton.js +64 -0
  114. package/lib/previewskeleton/PreviewSkeleton.module.scss.js +17 -0
  115. package/lib/style.css +1 -0
  116. package/package.json +84 -0
@@ -0,0 +1,3 @@
1
+ import { CookieApiHook } from './CookieApiContext';
2
+ export declare const useCookieBotCookieApi: CookieApiHook;
3
+ //# sourceMappingURL=useCookieBotCookieApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCookieBotCookieApi.d.ts","sourceRoot":"","sources":["../../src/cookies/useCookieBotCookieApi.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAcxD,eAAO,MAAM,qBAAqB,EAAE,aA6BnC,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { useState, useEffect } from "react";
3
+ const isWindowWithCookiebot = (window2) => {
4
+ return "Cookiebot" in window2;
5
+ };
6
+ const useCookieBotCookieApi = () => {
7
+ const [consentedCookies, setConsentedCookies] = useState([]);
8
+ const [initialized, setInitialized] = useState(false);
9
+ useEffect(() => {
10
+ const handleCookieUpdated = () => {
11
+ if (isWindowWithCookiebot(window)) {
12
+ setInitialized(true);
13
+ const consentedList = window.Cookiebot.consent;
14
+ setConsentedCookies(Object.keys(consentedList).filter((key) => consentedList[key]));
15
+ }
16
+ };
17
+ window.addEventListener("CookiebotOnConsentReady", handleCookieUpdated);
18
+ return () => {
19
+ window.removeEventListener("CookiebotOnConsentReady", handleCookieUpdated);
20
+ };
21
+ }, []);
22
+ return {
23
+ initialized,
24
+ consentedCookies,
25
+ openCookieSettings: () => {
26
+ if (isWindowWithCookiebot(window)) {
27
+ window.Cookiebot.renew();
28
+ }
29
+ }
30
+ };
31
+ };
32
+ export {
33
+ useCookieBotCookieApi
34
+ };
@@ -0,0 +1,11 @@
1
+ import { CookieApi, CookieApiHook } from './CookieApiContext';
2
+ declare global {
3
+ interface Window {
4
+ cometLocalStorageCookieApi: CookieApi;
5
+ }
6
+ }
7
+ /**
8
+ * Only for use in development environment.
9
+ */
10
+ export declare const useLocalStorageCookieApi: CookieApiHook;
11
+ //# sourceMappingURL=useLocalStorageCookieApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLocalStorageCookieApi.d.ts","sourceRoot":"","sources":["../../src/cookies/useLocalStorageCookieApi.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxE,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,0BAA0B,EAAE,SAAS,CAAC;KACzC;CACJ;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,aAmCtC,CAAC"}
@@ -0,0 +1,41 @@
1
+ "use client";
2
+ import { useState, useCallback, useEffect } from "react";
3
+ import { useLocalStorage } from "usehooks-ts";
4
+ const localStorageCookieApiKey = "comet-dev-cookie-api-consented-cookies";
5
+ const useLocalStorageCookieApi = () => {
6
+ const [consentedCookies, setConsentedCookies] = useLocalStorage(localStorageCookieApiKey, []);
7
+ const [initialized, setInitialized] = useState(false);
8
+ const openCookieSettings = useCallback(() => {
9
+ const cookies = prompt('Define consented cookies (separated by ","):', consentedCookies.join(",")) ?? "";
10
+ const cookiesList = cookies.split(",").map((cookie) => cookie.trim());
11
+ setConsentedCookies(cookiesList);
12
+ logCookieUpdate(cookiesList);
13
+ }, [consentedCookies, setConsentedCookies]);
14
+ useEffect(() => {
15
+ const storedCookies = window.localStorage.getItem(localStorageCookieApiKey);
16
+ const cookiesList = JSON.parse(storedCookies ?? "[]");
17
+ logCookieUpdate(cookiesList);
18
+ const simulateLoadingTimeout = setTimeout(() => {
19
+ setInitialized(true);
20
+ window.cometLocalStorageCookieApi = {
21
+ initialized: true,
22
+ consentedCookies,
23
+ openCookieSettings
24
+ };
25
+ }, 1e3);
26
+ return () => {
27
+ clearTimeout(simulateLoadingTimeout);
28
+ };
29
+ }, [consentedCookies, openCookieSettings]);
30
+ return {
31
+ initialized,
32
+ consentedCookies,
33
+ openCookieSettings
34
+ };
35
+ };
36
+ const logCookieUpdate = (cookies) => {
37
+ console.info("Consented cookies updated:", cookies);
38
+ };
39
+ export {
40
+ useLocalStorageCookieApi
41
+ };
@@ -0,0 +1,3 @@
1
+ import { CookieApiHook } from './CookieApiContext';
2
+ export declare const useOneTrustCookieApi: CookieApiHook;
3
+ //# sourceMappingURL=useOneTrustCookieApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOneTrustCookieApi.d.ts","sourceRoot":"","sources":["../../src/cookies/useOneTrustCookieApi.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA8CxD,eAAO,MAAM,oBAAoB,EAAE,aAgDlC,CAAC"}
@@ -0,0 +1,49 @@
1
+ "use client";
2
+ import { useState, useEffect } from "react";
3
+ const isWindowWithOneTrust = (window2) => {
4
+ return "OneTrust" in window2;
5
+ };
6
+ const useOneTrustCookieApi = () => {
7
+ const [consentedCookies, setConsentedCookies] = useState([]);
8
+ const [initialized, setInitialized] = useState(false);
9
+ useEffect(() => {
10
+ const startListeningForConsentChanges = (oneTrust) => {
11
+ const initialCookieConsent = [];
12
+ const domainData = oneTrust.GetDomainData();
13
+ domainData.ConsentIntegrationData.consentPayload.purposes.forEach((purpose) => {
14
+ if (purpose.TransactionType === "CONFIRMED") {
15
+ const targetGroup = domainData.Groups.find(({ PurposeId }) => PurposeId === purpose.Id);
16
+ if (targetGroup) {
17
+ initialCookieConsent.push(targetGroup.OptanonGroupId);
18
+ }
19
+ }
20
+ });
21
+ setConsentedCookies(initialCookieConsent);
22
+ oneTrust.OnConsentChanged((event) => {
23
+ setConsentedCookies(event.detail);
24
+ });
25
+ };
26
+ const tryToAccessOneTrustInterval = setInterval(() => {
27
+ if (isWindowWithOneTrust(window)) {
28
+ setInitialized(true);
29
+ clearInterval(tryToAccessOneTrustInterval);
30
+ startListeningForConsentChanges(window.OneTrust);
31
+ }
32
+ }, 200);
33
+ return () => {
34
+ clearInterval(tryToAccessOneTrustInterval);
35
+ };
36
+ }, []);
37
+ return {
38
+ initialized,
39
+ consentedCookies,
40
+ openCookieSettings: () => {
41
+ if (isWindowWithOneTrust(window)) {
42
+ window.OneTrust.ToggleInfoDisplay();
43
+ }
44
+ }
45
+ };
46
+ };
47
+ export {
48
+ useOneTrustCookieApi
49
+ };
@@ -0,0 +1,3 @@
1
+ import { PropsWithChildren } from 'react';
2
+ export declare function ErrorHandlerBoundary({ children }: PropsWithChildren): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=ErrorHandlerBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorHandlerBoundary.d.ts","sourceRoot":"","sources":["../../src/errorHandler/ErrorHandlerBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAK/C,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAInE"}
@@ -0,0 +1,10 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { ErrorHandlerBoundaryInternal } from "./ErrorHandlerBoundaryInternal.js";
3
+ import { useErrorHandler } from "./ErrorHandlerProvider.js";
4
+ function ErrorHandlerBoundary({ children }) {
5
+ const { onError } = useErrorHandler();
6
+ return /* @__PURE__ */ jsx(ErrorHandlerBoundaryInternal, { onError, children });
7
+ }
8
+ export {
9
+ ErrorHandlerBoundary
10
+ };
@@ -0,0 +1,17 @@
1
+ import { ErrorInfo, PropsWithChildren, Component } from 'react';
2
+ interface Props extends PropsWithChildren {
3
+ onError: (error: Error, errorInfo: ErrorInfo) => void;
4
+ }
5
+ type State = {
6
+ hasError: boolean;
7
+ };
8
+ export declare class ErrorHandlerBoundaryInternal extends Component<Props, State> {
9
+ constructor(props: Props);
10
+ static getDerivedStateFromError(): {
11
+ hasError: boolean;
12
+ };
13
+ componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
14
+ render(): import('react').ReactNode;
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=ErrorHandlerBoundaryInternal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorHandlerBoundaryInternal.d.ts","sourceRoot":"","sources":["../../src/errorHandler/ErrorHandlerBoundaryInternal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1E,UAAU,KAAM,SAAQ,iBAAiB;IACrC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CACzD;AAED,KAAK,KAAK,GAAG;IACT,QAAQ,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,qBAAa,4BAA6B,SAAQ,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;gBACzD,KAAK,EAAE,KAAK;IAKxB,MAAM,CAAC,wBAAwB;;;IAK/B,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IAQpD,MAAM;CAOT"}
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import { Component } from "react";
3
+ class ErrorHandlerBoundaryInternal extends Component {
4
+ constructor(props) {
5
+ super(props);
6
+ this.state = { hasError: false };
7
+ }
8
+ static getDerivedStateFromError() {
9
+ return { hasError: true };
10
+ }
11
+ componentDidCatch(error, errorInfo) {
12
+ console.error(error);
13
+ if (this.props.onError) {
14
+ this.props.onError(error, errorInfo);
15
+ }
16
+ }
17
+ render() {
18
+ var _a;
19
+ if ((_a = this.state) == null ? void 0 : _a.hasError) {
20
+ return null;
21
+ }
22
+ return this.props.children;
23
+ }
24
+ }
25
+ export {
26
+ ErrorHandlerBoundaryInternal
27
+ };
@@ -0,0 +1,9 @@
1
+ import { ErrorInfo, PropsWithChildren } from 'react';
2
+ interface Props {
3
+ onError: (error: Error, errorInfo: ErrorInfo) => void;
4
+ }
5
+ export declare const ErrorHandlerContext: import('react').Context<Props>;
6
+ export declare function ErrorHandlerProvider({ children, onError }: PropsWithChildren<Props>): import("react/jsx-runtime").JSX.Element;
7
+ export declare const useErrorHandler: () => Props;
8
+ export {};
9
+ //# sourceMappingURL=ErrorHandlerProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorHandlerProvider.d.ts","sourceRoot":"","sources":["../../src/errorHandler/ErrorHandlerProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAA6B,MAAM,OAAO,CAAC;AAE1F,UAAU,KAAK;IACX,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CACzD;AAED,eAAO,MAAM,mBAAmB,gCAS9B,CAAC;AAEH,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,2CAEnF;AAED,eAAO,MAAM,eAAe,aAE3B,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext } from "react";
4
+ const ErrorHandlerContext = createContext({
5
+ onError: (error, errorInfo) => {
6
+ if (process.env.NODE_ENV === "development") {
7
+ console.error("Error caught by error handler", error, errorInfo.componentStack);
8
+ throw error;
9
+ }
10
+ }
11
+ });
12
+ function ErrorHandlerProvider({ children, onError }) {
13
+ return /* @__PURE__ */ jsx(ErrorHandlerContext.Provider, { value: { onError }, children });
14
+ }
15
+ const useErrorHandler = () => {
16
+ return useContext(ErrorHandlerContext);
17
+ };
18
+ export {
19
+ ErrorHandlerContext,
20
+ ErrorHandlerProvider,
21
+ useErrorHandler
22
+ };
@@ -0,0 +1,4 @@
1
+ type Fetch = typeof fetch;
2
+ export declare function createFetchInMemoryCache(fetch: Fetch): Fetch;
3
+ export {};
4
+ //# sourceMappingURL=fetchInMemoryCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchInMemoryCache.d.ts","sourceRoot":"","sources":["../../src/graphQLFetch/fetchInMemoryCache.ts"],"names":[],"mappings":"AAEA,KAAK,KAAK,GAAG,OAAO,KAAK,CAAC;AAE1B,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAoC5D"}
@@ -0,0 +1,38 @@
1
+ const cache = {};
2
+ function createFetchInMemoryCache(fetch) {
3
+ return async function(input, init) {
4
+ var _a;
5
+ let cacheKey;
6
+ if ((init == null ? void 0 : init.cache) === "no-store")
7
+ ;
8
+ else if (((_a = init == null ? void 0 : init.method) == null ? void 0 : _a.toUpperCase()) === "GET") {
9
+ cacheKey = input.toString();
10
+ } else if (init == null ? void 0 : init.body) {
11
+ const bodyString = init.body.toString();
12
+ if (bodyString.startsWith("{")) {
13
+ try {
14
+ const body = JSON.parse(init.body.toString());
15
+ if (body.query && body.variables) {
16
+ cacheKey = `${input.toString()}#${init.body.toString()}`;
17
+ }
18
+ } catch (e) {
19
+ }
20
+ }
21
+ }
22
+ if (!cacheKey) {
23
+ return fetch(input, init);
24
+ }
25
+ const cachedResponse = cache[cacheKey];
26
+ if (cachedResponse) {
27
+ return cachedResponse.clone();
28
+ } else {
29
+ const fetchPromise = fetch(input, init);
30
+ const response = await fetchPromise;
31
+ cache[cacheKey] = response.clone();
32
+ return fetchPromise;
33
+ }
34
+ };
35
+ }
36
+ export {
37
+ createFetchInMemoryCache
38
+ };
@@ -0,0 +1,12 @@
1
+ type Fetch = typeof fetch;
2
+ export type PreviewData = {
3
+ includeInvisible: boolean;
4
+ };
5
+ export declare function convertPreviewDataToHeaders(previewData?: PreviewData): Record<string, string>;
6
+ export declare const gql: (chunks: TemplateStringsArray, ...variables: unknown[]) => string;
7
+ export declare function createFetchWithPreviewHeaders(fetch: Fetch, previewData?: PreviewData): Fetch;
8
+ export declare function createFetchWithDefaults(fetch: Fetch, defaults: RequestInit): Fetch;
9
+ export type GraphQLFetch = <T, V>(query: string, variables?: V, init?: RequestInit) => Promise<T>;
10
+ export declare function createGraphQLFetch(fetch: Fetch, url: string): GraphQLFetch;
11
+ export {};
12
+ //# sourceMappingURL=graphQLFetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphQLFetch.d.ts","sourceRoot":"","sources":["../../src/graphQLFetch/graphQLFetch.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG,OAAO,KAAK,CAAC;AAE1B,MAAM,MAAM,WAAW,GAAG;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,WAAW,CAAC,EAAE,WAAW,0BAoBpE;AAGD,eAAO,MAAM,GAAG,WAAY,oBAAoB,gBAAgB,OAAO,EAAE,KAAG,MAyB3E,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,KAAK,CAG5F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,KAAK,CAWlF;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAElG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CA8C1E"}
@@ -0,0 +1,111 @@
1
+ function convertPreviewDataToHeaders(previewData) {
2
+ const { includeInvisibleBlocks, includeInvisiblePages } = {
3
+ includeInvisiblePages: !!previewData,
4
+ includeInvisibleBlocks: previewData && previewData.includeInvisible
5
+ };
6
+ const headers = {};
7
+ const includeInvisibleContentHeaderEntries = [];
8
+ if (includeInvisiblePages) {
9
+ includeInvisibleContentHeaderEntries.push("Pages:Unpublished");
10
+ }
11
+ if (includeInvisibleBlocks) {
12
+ includeInvisibleContentHeaderEntries.push("Blocks:Invisible");
13
+ }
14
+ if (includeInvisibleContentHeaderEntries.length > 0) {
15
+ headers["x-include-invisible-content"] = includeInvisibleContentHeaderEntries.join(",");
16
+ }
17
+ return headers;
18
+ }
19
+ const gql = (chunks, ...variables) => {
20
+ return chunks.reduce((acc, chunk, index) => {
21
+ let variable;
22
+ if (index in variables) {
23
+ if (typeof variables[index] !== "string") {
24
+ let errorMessage = `Non-string variable in the GraphQL document
25
+
26
+ This is most likely due to importing a GraphQL document from a React Client Component.
27
+ All GraphQL documents need to be imported from React Server Components (i.e. no "use client" notation).`;
28
+ if (chunk.trim().length > 0) {
29
+ errorMessage += `
30
+
31
+ The error occurred in the following GraphQL document:
32
+ ${chunk}`;
33
+ }
34
+ throw new Error(errorMessage);
35
+ } else {
36
+ variable = variables[index];
37
+ }
38
+ } else {
39
+ variable = "";
40
+ }
41
+ return `${acc}${chunk}${variable}`;
42
+ }, ``);
43
+ };
44
+ function createFetchWithPreviewHeaders(fetch, previewData) {
45
+ const defaultHeaders = convertPreviewDataToHeaders(previewData);
46
+ return createFetchWithDefaults(fetch, { headers: defaultHeaders });
47
+ }
48
+ function createFetchWithDefaults(fetch, defaults) {
49
+ return async function(input, init) {
50
+ return fetch(input, {
51
+ ...defaults,
52
+ ...init,
53
+ headers: {
54
+ ...defaults.headers,
55
+ ...init == null ? void 0 : init.headers
56
+ }
57
+ });
58
+ };
59
+ }
60
+ function createGraphQLFetch(fetch, url) {
61
+ return async function(query, variables, init) {
62
+ let response;
63
+ if ((init == null ? void 0 : init.method) === "GET") {
64
+ const fetchUrl = new URL(url);
65
+ fetchUrl.searchParams.append("query", query);
66
+ fetchUrl.searchParams.append("variables", JSON.stringify(variables));
67
+ response = await fetch(fetchUrl, init);
68
+ } else {
69
+ response = await fetch(url, {
70
+ method: "POST",
71
+ ...init,
72
+ headers: { "Content-Type": "application/json", ...init == null ? void 0 : init.headers },
73
+ body: JSON.stringify({
74
+ query,
75
+ variables
76
+ })
77
+ });
78
+ }
79
+ if (!response.ok) {
80
+ let errorMessage = `Network response was not ok. Status: ${response.status}`;
81
+ const body = await response.text();
82
+ try {
83
+ const json = JSON.parse(body);
84
+ const { errors: errors2 } = json;
85
+ if (errors2) {
86
+ errorMessage += `
87
+
88
+ GraphQL error(s):
89
+ - ${errors2.map((error) => error.message).join("\n- ")}`;
90
+ }
91
+ } catch (error) {
92
+ errorMessage += `
93
+ ${body}`;
94
+ }
95
+ throw new Error(errorMessage);
96
+ }
97
+ const { data, errors } = await response.json();
98
+ if (errors) {
99
+ throw new Error(`GraphQL error(s):
100
+ - ${errors.map((error) => error.message).join("\n- ")}`);
101
+ }
102
+ return data;
103
+ };
104
+ }
105
+ export {
106
+ convertPreviewDataToHeaders,
107
+ createFetchWithDefaults,
108
+ createFetchWithPreviewHeaders,
109
+ createGraphQLFetch,
110
+ gql
111
+ };
@@ -0,0 +1,40 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { IFrameMessage } from './IFrameMessage';
3
+ export type PreviewElement = {
4
+ element: HTMLElement;
5
+ adminRoute: string;
6
+ label: string;
7
+ };
8
+ export type OverlayElementData = {
9
+ adminRoute: string;
10
+ label: string;
11
+ position: {
12
+ zIndex: number;
13
+ top: number;
14
+ left: number;
15
+ width: number;
16
+ height: number;
17
+ };
18
+ };
19
+ export interface IFrameBridgeContext {
20
+ hasBridge: boolean;
21
+ block?: any;
22
+ showOnlyVisible: boolean;
23
+ selectedAdminRoute?: string;
24
+ hoveredAdminRoute?: string | null;
25
+ sendSelectComponent: (id: string) => void;
26
+ sendHoverComponent: (route: string | null) => void;
27
+ /**
28
+ * @deprecated Use sendSitePreviewIFrameMessage instead
29
+ */
30
+ sendMessage: (message: IFrameMessage) => void;
31
+ showOutlines: boolean;
32
+ contentScope: unknown;
33
+ graphQLApiUrl: string | undefined;
34
+ previewElementsData: OverlayElementData[];
35
+ addPreviewElement: (element: PreviewElement) => void;
36
+ removePreviewElement: (element: PreviewElement) => void;
37
+ }
38
+ export declare const IFrameBridgeContext: import('react').Context<IFrameBridgeContext>;
39
+ export declare const IFrameBridgeProvider: ({ children }: PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
40
+ //# sourceMappingURL=IFrameBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IFrameBridge.d.ts","sourceRoot":"","sources":["../../src/iframebridge/IFrameBridge.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,iBAAiB,EAAoE,MAAM,OAAO,CAAC;AAIjH,OAAO,EAAqB,KAAK,aAAa,EAAuC,MAAM,iBAAiB,CAAC;AAI7G,MAAM,MAAM,cAAc,GAAG;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;CACL,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,OAAO,CAAC;IAEnB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,WAAW,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,iBAAiB,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IACrD,oBAAoB,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3D;AAED,eAAO,MAAM,mBAAmB,8CAsB9B,CAAC;AAEH,eAAO,MAAM,oBAAoB,iBAAkB,iBAAiB,4CAwPnE,CAAC"}