@makeswift/runtime 0.23.2 → 0.23.3-canary.1

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 (40) hide show
  1. package/dist/cjs/components/page/Page.js +7 -4
  2. package/dist/cjs/components/page/Page.js.map +1 -1
  3. package/dist/cjs/components/page/PageHead.js +17 -8
  4. package/dist/cjs/components/page/PageHead.js.map +1 -1
  5. package/dist/cjs/components/page/page-seo-settings.js +43 -0
  6. package/dist/cjs/components/page/page-seo-settings.js.map +1 -0
  7. package/dist/cjs/core/index.js +10 -2
  8. package/dist/cjs/core/index.js.map +1 -1
  9. package/dist/cjs/next/api-handler/handlers/manifest.js +1 -1
  10. package/dist/cjs/next/components/page.js +3 -2
  11. package/dist/cjs/next/components/page.js.map +1 -1
  12. package/dist/cjs/runtimes/react/components/ElementData.js +1 -0
  13. package/dist/cjs/runtimes/react/components/ElementData.js.map +1 -1
  14. package/dist/esm/components/page/Page.js +5 -2
  15. package/dist/esm/components/page/Page.js.map +1 -1
  16. package/dist/esm/components/page/PageHead.js +17 -8
  17. package/dist/esm/components/page/PageHead.js.map +1 -1
  18. package/dist/esm/components/page/page-seo-settings.js +19 -0
  19. package/dist/esm/components/page/page-seo-settings.js.map +1 -0
  20. package/dist/esm/core/index.js +10 -2
  21. package/dist/esm/core/index.js.map +1 -1
  22. package/dist/esm/next/api-handler/handlers/manifest.js +1 -1
  23. package/dist/esm/next/components/page.js +3 -2
  24. package/dist/esm/next/components/page.js.map +1 -1
  25. package/dist/esm/runtimes/react/components/ElementData.js +1 -0
  26. package/dist/esm/runtimes/react/components/ElementData.js.map +1 -1
  27. package/dist/types/components/page/Page.d.ts +3 -1
  28. package/dist/types/components/page/Page.d.ts.map +1 -1
  29. package/dist/types/components/page/PageHead.d.ts +3 -1
  30. package/dist/types/components/page/PageHead.d.ts.map +1 -1
  31. package/dist/types/components/page/page-seo-settings.d.ts +11 -0
  32. package/dist/types/components/page/page-seo-settings.d.ts.map +1 -0
  33. package/dist/types/core/index.d.ts +1 -1
  34. package/dist/types/core/index.d.ts.map +1 -1
  35. package/dist/types/next/components/page.d.ts +21 -1
  36. package/dist/types/next/components/page.d.ts.map +1 -1
  37. package/dist/types/next/components/tests/makeswift-page-metadata-rendering.test.d.ts +3 -0
  38. package/dist/types/next/components/tests/makeswift-page-metadata-rendering.test.d.ts.map +1 -0
  39. package/dist/types/runtimes/react/components/ElementData.d.ts.map +1 -1
  40. package/package.json +1 -1
@@ -23,17 +23,20 @@ __export(Page_exports, {
23
23
  });
24
24
  module.exports = __toCommonJS(Page_exports);
25
25
  var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_react = require("react");
26
27
  var import_BodySnippet = require("./BodySnippet");
27
- var import_react = require("../../runtimes/react");
28
+ var import_react2 = require("../../runtimes/react");
28
29
  var import_useRouterLocaleSync = require("../hooks/useRouterLocaleSync");
29
30
  var import_usePageSnippets = require("../hooks/usePageSnippets");
30
31
  var import_PageHead = require("./PageHead");
31
- function Page({ page, rootDocument }) {
32
+ var import_page_seo_settings = require("./page-seo-settings");
33
+ function Page({ page, rootDocument, metadata = true }) {
32
34
  const { bodySnippets } = (0, import_usePageSnippets.usePageSnippets)({ page });
35
+ const pageMetadataSettings = (0, import_react.useMemo)(() => (0, import_page_seo_settings.flattenMetadataSettings)(metadata), [metadata]);
33
36
  (0, import_useRouterLocaleSync.useRouterLocaleSync)();
34
37
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
35
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_PageHead.PageHead, { document: page }),
36
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.DocumentRoot, { rootDocument }),
38
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_PageHead.PageHead, { document: page, metadata: pageMetadataSettings }),
39
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react2.DocumentRoot, { rootDocument }),
37
40
  bodySnippets.map((snippet) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_BodySnippet.BodySnippet, { code: snippet.code, cleanup: snippet.cleanup }, snippet.id))
38
41
  ] });
39
42
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/page/Page.tsx"],"sourcesContent":["'use client'\n\nimport { BodySnippet } from './BodySnippet'\nimport { DocumentRoot } from '../../runtimes/react'\nimport { type Document } from '../../state/react-page'\nimport { MakeswiftPageDocument } from '../../next'\nimport { useRouterLocaleSync } from '../hooks/useRouterLocaleSync'\nimport { usePageSnippets } from '../hooks/usePageSnippets'\nimport { PageHead } from './PageHead'\n\ntype Props = {\n page: MakeswiftPageDocument\n rootDocument: Document\n}\n\nexport function Page({ page, rootDocument }: Props): JSX.Element {\n const { bodySnippets } = usePageSnippets({ page })\n\n useRouterLocaleSync()\n\n return (\n <>\n <PageHead document={page} />\n\n <DocumentRoot rootDocument={rootDocument} />\n\n {bodySnippets.map(snippet => (\n <BodySnippet key={snippet.id} code={snippet.code} cleanup={snippet.cleanup} />\n ))}\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBI;AAnBJ,yBAA4B;AAC5B,mBAA6B;AAG7B,iCAAoC;AACpC,6BAAgC;AAChC,sBAAyB;AAOlB,SAAS,KAAK,EAAE,MAAM,aAAa,GAAuB;AAC/D,QAAM,EAAE,aAAa,QAAI,wCAAgB,EAAE,KAAK,CAAC;AAEjD,sDAAoB;AAEpB,SACE,4EACE;AAAA,gDAAC,4BAAS,UAAU,MAAM;AAAA,IAE1B,4CAAC,6BAAa,cAA4B;AAAA,IAEzC,aAAa,IAAI,aAChB,4CAAC,kCAA6B,MAAM,QAAQ,MAAM,SAAS,QAAQ,WAAjD,QAAQ,EAAkD,CAC7E;AAAA,KACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/page/Page.tsx"],"sourcesContent":["'use client'\n\nimport { useMemo } from 'react'\nimport { BodySnippet } from './BodySnippet'\nimport { DocumentRoot } from '../../runtimes/react'\nimport { type Document } from '../../state/react-page'\nimport { MakeswiftPageDocument } from '../../next'\nimport { useRouterLocaleSync } from '../hooks/useRouterLocaleSync'\nimport { usePageSnippets } from '../hooks/usePageSnippets'\nimport { PageHead } from './PageHead'\nimport { flattenMetadataSettings, type PageMetadataSettings } from './page-seo-settings'\n\ntype Props = {\n page: MakeswiftPageDocument\n rootDocument: Document\n metadata?: boolean | PageMetadataSettings\n}\n\nexport function Page({ page, rootDocument, metadata = true }: Props): JSX.Element {\n const { bodySnippets } = usePageSnippets({ page })\n const pageMetadataSettings = useMemo(() => flattenMetadataSettings(metadata), [metadata])\n\n useRouterLocaleSync()\n\n return (\n <>\n <PageHead document={page} metadata={pageMetadataSettings} />\n\n <DocumentRoot rootDocument={rootDocument} />\n\n {bodySnippets.map(snippet => (\n <BodySnippet key={snippet.id} code={snippet.code} cleanup={snippet.cleanup} />\n ))}\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBI;AAvBJ,mBAAwB;AACxB,yBAA4B;AAC5B,IAAAA,gBAA6B;AAG7B,iCAAoC;AACpC,6BAAgC;AAChC,sBAAyB;AACzB,+BAAmE;AAQ5D,SAAS,KAAK,EAAE,MAAM,cAAc,WAAW,KAAK,GAAuB;AAChF,QAAM,EAAE,aAAa,QAAI,wCAAgB,EAAE,KAAK,CAAC;AACjD,QAAM,2BAAuB,sBAAQ,UAAM,kDAAwB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAExF,sDAAoB;AAEpB,SACE,4EACE;AAAA,gDAAC,4BAAS,UAAU,MAAM,UAAU,sBAAsB;AAAA,IAE1D,4CAAC,8BAAa,cAA4B;AAAA,IAEzC,aAAa,IAAI,aAChB,4CAAC,kCAA6B,MAAM,QAAQ,MAAM,SAAS,QAAQ,WAAjD,QAAQ,EAAkD,CAC7E;AAAA,KACH;AAEJ;","names":["import_react"]}
@@ -35,7 +35,16 @@ const defaultFavicon = {
35
35
  mimetype: "image/png",
36
36
  publicUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABcRAAAXEQHKJvM/AAABjElEQVRYhc2XzU3EMBCFB8TddAAXn6EE6GCpgNABZ1/IXnymBOgAOmA7YM8+ABVsXEHQQFaKQryeN3Yk3ilKJtEnv/nLUd/3pFG0riGi88yrnQn+UfJ5FUi0riWiB2H4nQn+KRd0DFP8agXEfkqCYJBoHdtxIQxfm+DfFgEhoith3NYE30o/qgGR2BJB+xY7kdYEL8oNFUi0jiFMJuxVWrJqEMFxsyUNCsE6AeNztvBp7aJ143vXksoRnwhYtmNdSoIQa6RlO9YXEWW7KgoCleOgxgTf1QZBT+RZ2lXFING6UxCCq+ceeUE8fYdknY599v9sJvzGBP+yCEgC7GPmETc0OJ+0awAlkhe2pAbIXAeFZ8xe2g2Nk3c3ub0xwWt6zY9qbmiqGVMbZK21ZC/YmhlbeBMTzZNDQqcvDb1kM1x32iqZSt1HaqukfKvq34BAOTLsrH+ETNmUkKHHA+428RgeclPVWozeSyAI2EdWB34jtqXNTAySOY3i/KgFIlqOa4GkFmBegorzg4joG07he/M7zl6jAAAAAElFTkSuQmCC"
37
37
  };
38
- function PageHead({ document: page }) {
38
+ function PageHead({ document: page, metadata = {} }) {
39
+ const {
40
+ title: useTitle = false,
41
+ favicon: useFavicon = false,
42
+ canonicalUrl: useCanonicalUrl = false,
43
+ indexingBlocked: useIndexingBlocked = false,
44
+ description: useDescription = false,
45
+ keywords: useKeywords = false,
46
+ socialImage: useSocialImage = false
47
+ } = metadata;
39
48
  const { headSnippets } = (0, import_usePageSnippets.usePageSnippets)({ page });
40
49
  const isInBuilder = (0, import_react2.useIsInBuilder)();
41
50
  const site = useCachedSite(isInBuilder ? page.site.id : null);
@@ -69,17 +78,17 @@ function PageHead({ document: page }) {
69
78
  overflow: hidden;
70
79
  }
71
80
  ` }),
72
- title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageTitle, { children: title }),
73
- favicon && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageLink, { rel: "icon", type: favicon.mimetype, href: favicon.publicUrl }),
74
- canonicalUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageLink, { rel: "canonical", href: canonicalUrl }),
75
- isIndexingBlocked && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "robots", content: "noindex" }),
76
- description && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
81
+ useTitle && title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageTitle, { children: title }),
82
+ useFavicon && favicon && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageLink, { rel: "icon", type: favicon.mimetype, href: favicon.publicUrl }),
83
+ useCanonicalUrl && canonicalUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageLink, { rel: "canonical", href: canonicalUrl }),
84
+ useIndexingBlocked && isIndexingBlocked && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "robots", content: "noindex" }),
85
+ useDescription && description && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
77
86
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "description", content: description }),
78
87
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { property: "og:description", content: description }),
79
88
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "twitter:description", content: description })
80
89
  ] }),
81
- keywords && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "keywords", content: keywords }),
82
- socialImage && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
90
+ useKeywords && keywords && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "keywords", content: keywords }),
91
+ useSocialImage && socialImage && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
83
92
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { property: "og:image", content: socialImage.publicUrl }),
84
93
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { property: "og:image:type", content: socialImage.mimetype }),
85
94
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "twitter:image", content: socialImage.publicUrl }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/page/PageHead.tsx"],"sourcesContent":["'use client'\n\nimport { useMemo } from 'react'\nimport { MakeswiftPageDocument } from '../../next'\nimport { usePageSnippets } from '../hooks/usePageSnippets'\nimport { useIsInBuilder } from '../../react'\nimport { useMakeswiftHostApiClient } from '../../runtimes/react/host-api-client'\nimport { useSyncExternalStore } from 'use-sync-external-store/shim'\nimport { Site } from '../../api'\nimport { PageTitle, PageMeta, PageLink, PageStyle } from '../../next/components/head-tags'\nimport { HeadSnippet } from './HeadSnippet'\n\nconst defaultFavicon = {\n id: 'default-favicon',\n mimetype: 'image/png',\n publicUrl:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABcRAAAXEQHKJvM/AAABjElEQVRYhc2XzU3EMBCFB8TddAAXn6EE6GCpgNABZ1/IXnymBOgAOmA7YM8+ABVsXEHQQFaKQryeN3Yk3ilKJtEnv/nLUd/3pFG0riGi88yrnQn+UfJ5FUi0riWiB2H4nQn+KRd0DFP8agXEfkqCYJBoHdtxIQxfm+DfFgEhoith3NYE30o/qgGR2BJB+xY7kdYEL8oNFUi0jiFMJuxVWrJqEMFxsyUNCsE6AeNztvBp7aJ143vXksoRnwhYtmNdSoIQa6RlO9YXEWW7KgoCleOgxgTf1QZBT+RZ2lXFING6UxCCq+ceeUE8fYdknY599v9sJvzGBP+yCEgC7GPmETc0OJ+0awAlkhe2pAbIXAeFZ8xe2g2Nk3c3ub0xwWt6zY9qbmiqGVMbZK21ZC/YmhlbeBMTzZNDQqcvDb1kM1x32iqZSt1HaqukfKvq34BAOTLsrH+ETNmUkKHHA+428RgeclPVWozeSyAI2EdWB34jtqXNTAySOY3i/KgFIlqOa4GkFmBegorzg4joG07he/M7zl6jAAAAAElFTkSuQmCC',\n}\n\ntype Props = {\n document: MakeswiftPageDocument\n}\n\nexport function PageHead({ document: page }: Props): JSX.Element {\n const { headSnippets } = usePageSnippets({ page })\n\n const isInBuilder = useIsInBuilder()\n\n const site = useCachedSite(isInBuilder ? page.site.id : null)\n const baseLocalizedPage = page.localizedPages.find(({ parentId }) => parentId == null)\n\n const favicon = page.meta.favicon ?? defaultFavicon\n const title = baseLocalizedPage?.meta.title ?? page.meta.title\n const description = baseLocalizedPage?.meta.description ?? page.meta.description\n const keywords = baseLocalizedPage?.meta.keywords ?? page.meta.keywords\n const socialImage = baseLocalizedPage?.meta.socialImage ?? page.meta.socialImage\n const canonicalUrl = baseLocalizedPage?.seo.canonicalUrl ?? page.seo.canonicalUrl\n const isIndexingBlocked = baseLocalizedPage?.seo.isIndexingBlocked ?? page.seo.isIndexingBlocked\n\n const fontFamilyParamValue = useMemo(() => {\n if (site == null) {\n return page.fonts\n .map(({ family, variants }) => {\n return `${family.replace(/ /g, '+')}:${variants.join()}`\n })\n .join('|')\n }\n\n return site.googleFonts.edges\n .filter((edge): edge is NonNullable<typeof edge> => edge != null)\n .map(({ activeVariants, node: { family, variants } }) => {\n const activeVariantSpecifiers = variants\n .filter(variant =>\n activeVariants.some(activeVariant => activeVariant.specifier === variant.specifier),\n )\n .map(variant => variant.specifier)\n .join()\n\n return `${family.replace(/ /g, '+')}:${activeVariantSpecifiers}`\n })\n .join('|')\n }, [site, page])\n\n return (\n <>\n <PageStyle precedence=\"high\" href=\"makeswift-base-styles\">\n {`\n html {\n font-family: sans-serif;\n }\n div#__next {\n overflow: hidden;\n }\n `}\n </PageStyle>\n {title && <PageTitle>{title}</PageTitle>}\n {favicon && <PageLink rel=\"icon\" type={favicon.mimetype} href={favicon.publicUrl} />}\n {canonicalUrl && <PageLink rel=\"canonical\" href={canonicalUrl} />}\n {isIndexingBlocked && <PageMeta name=\"robots\" content=\"noindex\" />}\n {description && (\n <>\n <PageMeta name=\"description\" content={description} />\n <PageMeta property=\"og:description\" content={description} />\n <PageMeta name=\"twitter:description\" content={description} />\n </>\n )}\n {keywords && <PageMeta name=\"keywords\" content={keywords} />}\n {socialImage && (\n <>\n <PageMeta property=\"og:image\" content={socialImage.publicUrl} />\n <PageMeta property=\"og:image:type\" content={socialImage.mimetype} />\n <PageMeta name=\"twitter:image\" content={socialImage.publicUrl} />\n <PageMeta name=\"twitter:card\" content=\"summary_large_image\" />\n </>\n )}\n {fontFamilyParamValue !== '' && (\n <PageLink\n precedence=\"medium\"\n rel=\"stylesheet\"\n href={`https://fonts.googleapis.com/css?family=${fontFamilyParamValue}&display=swap`}\n />\n )}\n {headSnippets.map(snippet => (\n <HeadSnippet key={snippet.id} snippet={snippet} />\n ))}\n </>\n )\n}\n\nfunction useCachedSite(siteId: string | null): Site | null {\n const client = useMakeswiftHostApiClient()\n const getSnapshot = () => (siteId == null ? null : client.readSite(siteId))\n\n const site = useSyncExternalStore(client.subscribe, getSnapshot, getSnapshot)\n\n return site\n}\n"],"mappings":"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","names":["import_react"]}
1
+ {"version":3,"sources":["../../../../src/components/page/PageHead.tsx"],"sourcesContent":["'use client'\n\nimport { useMemo } from 'react'\nimport { MakeswiftPageDocument } from '../../next'\nimport { usePageSnippets } from '../hooks/usePageSnippets'\nimport { useIsInBuilder } from '../../react'\nimport { useMakeswiftHostApiClient } from '../../runtimes/react/host-api-client'\nimport { useSyncExternalStore } from 'use-sync-external-store/shim'\nimport { Site } from '../../api'\nimport { PageTitle, PageMeta, PageLink, PageStyle } from '../../next/components/head-tags'\nimport { HeadSnippet } from './HeadSnippet'\nimport { type PageMetadataSettings } from './page-seo-settings'\n\nconst defaultFavicon = {\n id: 'default-favicon',\n mimetype: 'image/png',\n publicUrl:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABcRAAAXEQHKJvM/AAABjElEQVRYhc2XzU3EMBCFB8TddAAXn6EE6GCpgNABZ1/IXnymBOgAOmA7YM8+ABVsXEHQQFaKQryeN3Yk3ilKJtEnv/nLUd/3pFG0riGi88yrnQn+UfJ5FUi0riWiB2H4nQn+KRd0DFP8agXEfkqCYJBoHdtxIQxfm+DfFgEhoith3NYE30o/qgGR2BJB+xY7kdYEL8oNFUi0jiFMJuxVWrJqEMFxsyUNCsE6AeNztvBp7aJ143vXksoRnwhYtmNdSoIQa6RlO9YXEWW7KgoCleOgxgTf1QZBT+RZ2lXFING6UxCCq+ceeUE8fYdknY599v9sJvzGBP+yCEgC7GPmETc0OJ+0awAlkhe2pAbIXAeFZ8xe2g2Nk3c3ub0xwWt6zY9qbmiqGVMbZK21ZC/YmhlbeBMTzZNDQqcvDb1kM1x32iqZSt1HaqukfKvq34BAOTLsrH+ETNmUkKHHA+428RgeclPVWozeSyAI2EdWB34jtqXNTAySOY3i/KgFIlqOa4GkFmBegorzg4joG07he/M7zl6jAAAAAElFTkSuQmCC',\n}\n\ntype Props = {\n document: MakeswiftPageDocument\n metadata?: PageMetadataSettings\n}\n\nexport function PageHead({ document: page, metadata = {} }: Props): JSX.Element {\n const {\n title: useTitle = false,\n favicon: useFavicon = false,\n canonicalUrl: useCanonicalUrl = false,\n indexingBlocked: useIndexingBlocked = false,\n description: useDescription = false,\n keywords: useKeywords = false,\n socialImage: useSocialImage = false,\n } = metadata\n\n const { headSnippets } = usePageSnippets({ page })\n\n const isInBuilder = useIsInBuilder()\n\n const site = useCachedSite(isInBuilder ? page.site.id : null)\n const baseLocalizedPage = page.localizedPages.find(({ parentId }) => parentId == null)\n\n const favicon = page.meta.favicon ?? defaultFavicon\n const title = baseLocalizedPage?.meta.title ?? page.meta.title\n const description = baseLocalizedPage?.meta.description ?? page.meta.description\n const keywords = baseLocalizedPage?.meta.keywords ?? page.meta.keywords\n const socialImage = baseLocalizedPage?.meta.socialImage ?? page.meta.socialImage\n const canonicalUrl = baseLocalizedPage?.seo.canonicalUrl ?? page.seo.canonicalUrl\n const isIndexingBlocked = baseLocalizedPage?.seo.isIndexingBlocked ?? page.seo.isIndexingBlocked\n\n const fontFamilyParamValue = useMemo(() => {\n if (site == null) {\n return page.fonts\n .map(({ family, variants }) => {\n return `${family.replace(/ /g, '+')}:${variants.join()}`\n })\n .join('|')\n }\n\n return site.googleFonts.edges\n .filter((edge): edge is NonNullable<typeof edge> => edge != null)\n .map(({ activeVariants, node: { family, variants } }) => {\n const activeVariantSpecifiers = variants\n .filter(variant =>\n activeVariants.some(activeVariant => activeVariant.specifier === variant.specifier),\n )\n .map(variant => variant.specifier)\n .join()\n\n return `${family.replace(/ /g, '+')}:${activeVariantSpecifiers}`\n })\n .join('|')\n }, [site, page])\n\n return (\n <>\n <PageStyle precedence=\"high\" href=\"makeswift-base-styles\">\n {`\n html {\n font-family: sans-serif;\n }\n div#__next {\n overflow: hidden;\n }\n `}\n </PageStyle>\n {useTitle && title && <PageTitle>{title}</PageTitle>}\n {useFavicon && favicon && (\n <PageLink rel=\"icon\" type={favicon.mimetype} href={favicon.publicUrl} />\n )}\n {useCanonicalUrl && canonicalUrl && <PageLink rel=\"canonical\" href={canonicalUrl} />}\n {useIndexingBlocked && isIndexingBlocked && <PageMeta name=\"robots\" content=\"noindex\" />}\n {useDescription && description && (\n <>\n <PageMeta name=\"description\" content={description} />\n <PageMeta property=\"og:description\" content={description} />\n <PageMeta name=\"twitter:description\" content={description} />\n </>\n )}\n {useKeywords && keywords && <PageMeta name=\"keywords\" content={keywords} />}\n {useSocialImage && socialImage && (\n <>\n <PageMeta property=\"og:image\" content={socialImage.publicUrl} />\n <PageMeta property=\"og:image:type\" content={socialImage.mimetype} />\n <PageMeta name=\"twitter:image\" content={socialImage.publicUrl} />\n <PageMeta name=\"twitter:card\" content=\"summary_large_image\" />\n </>\n )}\n {fontFamilyParamValue !== '' && (\n <PageLink\n precedence=\"medium\"\n rel=\"stylesheet\"\n href={`https://fonts.googleapis.com/css?family=${fontFamilyParamValue}&display=swap`}\n />\n )}\n {headSnippets.map(snippet => (\n <HeadSnippet key={snippet.id} snippet={snippet} />\n ))}\n </>\n )\n}\n\nfunction useCachedSite(siteId: string | null): Site | null {\n const client = useMakeswiftHostApiClient()\n const getSnapshot = () => (siteId == null ? null : client.readSite(siteId))\n\n const site = useSyncExternalStore(client.subscribe, getSnapshot, getSnapshot)\n\n return site\n}\n"],"mappings":"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","names":["import_react"]}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var page_seo_settings_exports = {};
20
+ __export(page_seo_settings_exports, {
21
+ flattenMetadataSettings: () => flattenMetadataSettings
22
+ });
23
+ module.exports = __toCommonJS(page_seo_settings_exports);
24
+ function flattenMetadataSettings(settings) {
25
+ if (typeof settings === "boolean")
26
+ return {
27
+ title: settings,
28
+ description: settings,
29
+ keywords: settings,
30
+ socialImage: settings,
31
+ canonicalUrl: settings,
32
+ indexingBlocked: settings,
33
+ favicon: settings
34
+ };
35
+ if (settings == null)
36
+ return {};
37
+ return settings;
38
+ }
39
+ // Annotate the CommonJS export names for ESM import in node:
40
+ 0 && (module.exports = {
41
+ flattenMetadataSettings
42
+ });
43
+ //# sourceMappingURL=page-seo-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/page/page-seo-settings.ts"],"sourcesContent":["export type PageMetadataSettings = {\n title?: boolean\n description?: boolean\n keywords?: boolean\n socialImage?: boolean\n canonicalUrl?: boolean\n indexingBlocked?: boolean\n favicon?: boolean\n}\n\nexport function flattenMetadataSettings(\n settings?: boolean | PageMetadataSettings,\n): PageMetadataSettings {\n if (typeof settings === 'boolean')\n return {\n title: settings,\n description: settings,\n keywords: settings,\n socialImage: settings,\n canonicalUrl: settings,\n indexingBlocked: settings,\n favicon: settings,\n }\n if (settings == null) return {}\n return settings\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,SAAS,wBACd,UACsB;AACtB,MAAI,OAAO,aAAa;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,MACV,aAAa;AAAA,MACb,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,SAAS;AAAA,IACX;AACF,MAAI,YAAY;AAAM,WAAO,CAAC;AAC9B,SAAO;AACT;","names":[]}
@@ -21,7 +21,11 @@ __export(core_exports, {
21
21
  ControlDefinition: () => import_controls.ControlDefinition,
22
22
  ControlInstance: () => import_controls.ControlInstance,
23
23
  DefaultControlInstance: () => import_controls.DefaultControlInstance,
24
- ShapeV2Control: () => import_controls.ShapeV2Control
24
+ ShapeV2Control: () => import_controls.ShapeV2Control,
25
+ findBreakpointOverride: () => import_controls.findBreakpointOverride,
26
+ mergeOrCoalesceFallbacks: () => import_controls.mergeOrCoalesceFallbacks,
27
+ mergeResponsiveValues: () => import_controls.mergeResponsiveValues,
28
+ shallowMergeFallbacks: () => import_controls.shallowMergeFallbacks
25
29
  });
26
30
  module.exports = __toCommonJS(core_exports);
27
31
  var import_controls = require("@makeswift/controls");
@@ -30,6 +34,10 @@ var import_controls = require("@makeswift/controls");
30
34
  ControlDefinition,
31
35
  ControlInstance,
32
36
  DefaultControlInstance,
33
- ShapeV2Control
37
+ ShapeV2Control,
38
+ findBreakpointOverride,
39
+ mergeOrCoalesceFallbacks,
40
+ mergeResponsiveValues,
41
+ shallowMergeFallbacks
34
42
  });
35
43
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/index.ts"],"sourcesContent":["export {\n type ConfigType,\n type Data,\n type DataType,\n type ValueType,\n type ResolvedValueType,\n type ControlMessage,\n type ReplacementContext,\n type SendMessageType,\n ControlDefinition,\n ControlInstance,\n DefaultControlInstance,\n ShapeV2Control,\n} from '@makeswift/controls'\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAaO;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/index.ts"],"sourcesContent":["export {\n type Breakpoint,\n type BreakpointId,\n type Breakpoints,\n type ConfigType,\n type Data,\n type DataType,\n type DeviceOverride,\n type ValueType,\n type ResolvedValueType,\n type ResponsiveValue,\n type ControlMessage,\n type ReplacementContext,\n type SendMessageType,\n ControlDefinition,\n ControlInstance,\n DefaultControlInstance,\n ShapeV2Control,\n findBreakpointOverride,\n mergeOrCoalesceFallbacks,\n mergeResponsiveValues,\n shallowMergeFallbacks,\n} from '@makeswift/controls'\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAsBO;","names":[]}
@@ -37,7 +37,7 @@ async function handler(...args) {
37
37
  const supportsDraftMode = (0, import_ts_pattern.match)(args).with(routeHandlerPattern, () => true).with(apiRoutePattern, () => false).exhaustive();
38
38
  const supportsWebhook = (0, import_ts_pattern.match)(args).with(routeHandlerPattern, () => true).with(apiRoutePattern, () => false).exhaustive();
39
39
  const body = {
40
- version: "0.23.2",
40
+ version: "0.23.3-canary.1",
41
41
  previewMode: supportsPreviewMode,
42
42
  draftMode: supportsDraftMode,
43
43
  interactionMode: true,
@@ -39,7 +39,7 @@ function useRegisterPageDocument(pageDocument) {
39
39
  (0, import_use_universal_dispatch.useUniversalDispatch)(dispatch, import_actions.registerDocumentsEffect, [rootDocuments]);
40
40
  return rootDocuments[0];
41
41
  }
42
- const Page = (0, import_react.memo)(({ snapshot, ...props }) => {
42
+ const Page = (0, import_react.memo)(({ snapshot, metadata = true, ...props }) => {
43
43
  if ("runtime" in props) {
44
44
  throw new Error(
45
45
  `The \`runtime\` prop is no longer supported in the \`@makeswift/runtime\` \`Page\` component as of \`0.15.0\`.
@@ -52,7 +52,8 @@ See our docs for more information on what's changed and instructions to migrate:
52
52
  import_page.Page,
53
53
  {
54
54
  page: snapshot.document,
55
- rootDocument
55
+ rootDocument,
56
+ metadata
56
57
  },
57
58
  snapshot.document.data.key
58
59
  ) });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/next/components/page.tsx"],"sourcesContent":["'use client'\n\nimport { Suspense, memo, useMemo } from 'react'\n\nimport { useDispatch } from '../../runtimes/react/hooks/use-dispatch'\nimport { useUniversalDispatch } from '../../runtimes/react/hooks/use-universal-dispatch'\nimport { useCacheData } from '../../runtimes/react/hooks/use-cache-data'\n\nimport { Page as PageComponent } from '../../components/page'\nimport {\n type MakeswiftPageSnapshot,\n type MakeswiftPageDocument,\n pageToRootDocument,\n} from '../client'\nimport * as ReactPage from '../../state/react-page'\nimport { registerDocumentsEffect } from '../../state/actions'\n\nexport type PageProps = {\n snapshot: MakeswiftPageSnapshot\n}\n\nfunction useRegisterPageDocument(pageDocument: MakeswiftPageDocument): ReactPage.Document {\n const dispatch = useDispatch()\n const rootDocuments: [ReactPage.Document] = useMemo(\n () => [pageToRootDocument(pageDocument)],\n [pageDocument],\n )\n\n useUniversalDispatch(dispatch, registerDocumentsEffect, [rootDocuments])\n\n return rootDocuments[0]\n}\n\nexport const Page = memo(({ snapshot, ...props }: PageProps) => {\n if ('runtime' in props) {\n throw new Error(\n `The \\`runtime\\` prop is no longer supported in the \\`@makeswift/runtime\\` \\`Page\\` component as of \\`0.15.0\\`.\nSee our docs for more information on what's changed and instructions to migrate: https://docs.makeswift.com/migrations/0.15.0`,\n )\n }\n\n useCacheData(snapshot.cacheData)\n\n const rootDocument = useRegisterPageDocument(snapshot.document)\n\n return (\n <Suspense>\n {/* We use a key here to reset the Snippets state in the PageMeta component */}\n <PageComponent\n key={snapshot.document.data.key}\n page={snapshot.document}\n rootDocument={rootDocument}\n />\n </Suspense>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgDM;AA9CN,mBAAwC;AAExC,0BAA4B;AAC5B,oCAAqC;AACrC,4BAA6B;AAE7B,kBAAsC;AACtC,oBAIO;AAEP,qBAAwC;AAMxC,SAAS,wBAAwB,cAAyD;AACxF,QAAM,eAAW,iCAAY;AAC7B,QAAM,oBAAsC;AAAA,IAC1C,MAAM,KAAC,kCAAmB,YAAY,CAAC;AAAA,IACvC,CAAC,YAAY;AAAA,EACf;AAEA,0DAAqB,UAAU,wCAAyB,CAAC,aAAa,CAAC;AAEvE,SAAO,cAAc,CAAC;AACxB;AAEO,MAAM,WAAO,mBAAK,CAAC,EAAE,UAAU,GAAG,MAAM,MAAiB;AAC9D,MAAI,aAAa,OAAO;AACtB,UAAM,IAAI;AAAA,MACR;AAAA;AAAA,IAEF;AAAA,EACF;AAEA,0CAAa,SAAS,SAAS;AAE/B,QAAM,eAAe,wBAAwB,SAAS,QAAQ;AAE9D,SACE,4CAAC,yBAEC;AAAA,IAAC,YAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,SAAS;AAAA,MACf;AAAA;AAAA,IAFK,SAAS,SAAS,KAAK;AAAA,EAG9B,GACF;AAEJ,CAAC;","names":["PageComponent"]}
1
+ {"version":3,"sources":["../../../../src/next/components/page.tsx"],"sourcesContent":["'use client'\n\nimport { Suspense, memo, useMemo } from 'react'\n\nimport { useDispatch } from '../../runtimes/react/hooks/use-dispatch'\nimport { useUniversalDispatch } from '../../runtimes/react/hooks/use-universal-dispatch'\nimport { useCacheData } from '../../runtimes/react/hooks/use-cache-data'\n\nimport { Page as PageComponent } from '../../components/page'\nimport {\n type MakeswiftPageSnapshot,\n type MakeswiftPageDocument,\n pageToRootDocument,\n} from '../client'\nimport * as ReactPage from '../../state/react-page'\nimport { registerDocumentsEffect } from '../../state/actions'\nimport { type PageMetadataSettings } from '../../components/page/page-seo-settings'\n\nexport type PageProps = {\n snapshot: MakeswiftPageSnapshot\n metadata?: boolean | PageMetadataSettings\n}\n\nfunction useRegisterPageDocument(pageDocument: MakeswiftPageDocument): ReactPage.Document {\n const dispatch = useDispatch()\n const rootDocuments: [ReactPage.Document] = useMemo(\n () => [pageToRootDocument(pageDocument)],\n [pageDocument],\n )\n\n useUniversalDispatch(dispatch, registerDocumentsEffect, [rootDocuments])\n\n return rootDocuments[0]\n}\n\n/**\n * @param snapshot - The snapshot of the page to render, from\n * `client.getPageSnapshot()`.\n * @param metadata - Allows control over whether to use data from Makeswift for\n * rendering metadata tags in the `<head>` of the page. Pass `true` (default if\n * not provided) to render all metadata tags, or `false` to not render any. For\n * more granular control, pass an object with boolean values for specific\n * metadata fields. Valid fields include:\n * - `title`\n * - `description`\n * - `keywords`\n * - `socialImage`\n * - `canonicalUrl`\n * - `indexingBlocked`\n * - `favicon`\n *\n * If a field is not provided, it will default to `false`.\n */\nexport const Page = memo(({ snapshot, metadata = true, ...props }: PageProps) => {\n if ('runtime' in props) {\n throw new Error(\n `The \\`runtime\\` prop is no longer supported in the \\`@makeswift/runtime\\` \\`Page\\` component as of \\`0.15.0\\`.\nSee our docs for more information on what's changed and instructions to migrate: https://docs.makeswift.com/migrations/0.15.0`,\n )\n }\n\n useCacheData(snapshot.cacheData)\n\n const rootDocument = useRegisterPageDocument(snapshot.document)\n\n return (\n <Suspense>\n {/* We use a key here to reset the Snippets state in the PageMeta component */}\n <PageComponent\n key={snapshot.document.data.key}\n page={snapshot.document}\n rootDocument={rootDocument}\n metadata={metadata}\n />\n </Suspense>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoEM;AAlEN,mBAAwC;AAExC,0BAA4B;AAC5B,oCAAqC;AACrC,4BAA6B;AAE7B,kBAAsC;AACtC,oBAIO;AAEP,qBAAwC;AAQxC,SAAS,wBAAwB,cAAyD;AACxF,QAAM,eAAW,iCAAY;AAC7B,QAAM,oBAAsC;AAAA,IAC1C,MAAM,KAAC,kCAAmB,YAAY,CAAC;AAAA,IACvC,CAAC,YAAY;AAAA,EACf;AAEA,0DAAqB,UAAU,wCAAyB,CAAC,aAAa,CAAC;AAEvE,SAAO,cAAc,CAAC;AACxB;AAoBO,MAAM,WAAO,mBAAK,CAAC,EAAE,UAAU,WAAW,MAAM,GAAG,MAAM,MAAiB;AAC/E,MAAI,aAAa,OAAO;AACtB,UAAM,IAAI;AAAA,MACR;AAAA;AAAA,IAEF;AAAA,EACF;AAEA,0CAAa,SAAS,SAAS;AAE/B,QAAM,eAAe,wBAAwB,SAAS,QAAQ;AAE9D,SACE,4CAAC,yBAEC;AAAA,IAAC,YAAAA;AAAA,IAAA;AAAA,MAEC,MAAM,SAAS;AAAA,MACf;AAAA,MACA;AAAA;AAAA,IAHK,SAAS,SAAS,KAAK;AAAA,EAI9B,GACF;AAEJ,CAAC;","names":["PageComponent"]}
@@ -32,6 +32,7 @@ const ElementData = (0, import_react2.memo)(
32
32
  (0, import_react2.forwardRef)(function ElementData2({ elementData }, ref) {
33
33
  const Component = (0, import_use_component.useComponent)(elementData.type);
34
34
  if (Component == null) {
35
+ console.warn(`Unknown component '${elementData.type}'`, { elementData });
35
36
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_FallbackComponent.FallbackComponent, { ref, text: "Component not found" });
36
37
  }
37
38
  const forwardRef2 = (0, import_can_accept_ref.canAcceptRef)(Component);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/runtimes/react/components/ElementData.tsx"],"sourcesContent":["import { Ref, Suspense, forwardRef, memo } from 'react'\nimport { ElementData as ReactPageElementData } from '../../../state/react-page'\nimport { useComponent } from '../hooks/use-component'\nimport { canAcceptRef } from '../utils/can-accept-ref'\nimport { FallbackComponent } from '../../../components/shared/FallbackComponent'\nimport { ResolveProps } from '../controls'\n\ntype ElementDataProps = {\n elementData: ReactPageElementData\n}\n\nexport const ElementData = memo(\n forwardRef(function ElementData(\n { elementData }: ElementDataProps,\n ref: Ref<unknown>,\n ): JSX.Element {\n const Component = useComponent(elementData.type)\n\n if (Component == null) {\n return <FallbackComponent ref={ref as Ref<HTMLDivElement>} text=\"Component not found\" />\n }\n\n const forwardRef = canAcceptRef(Component)\n\n return (\n <Suspense>\n <ResolveProps element={elementData}>\n {props =>\n forwardRef ? (\n <Component {...props} key={elementData.key} ref={ref} />\n ) : (\n <Component {...props} key={elementData.key} />\n )\n }\n </ResolveProps>\n </Suspense>\n )\n }),\n)\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBa;AAUC;AA7Bd,IAAAA,gBAAgD;AAEhD,2BAA6B;AAC7B,4BAA6B;AAC7B,+BAAkC;AAClC,sBAA6B;AAMtB,MAAM,kBAAc;AAAA,MACzB,0BAAW,SAASC,aAClB,EAAE,YAAY,GACd,KACa;AACb,UAAM,gBAAY,mCAAa,YAAY,IAAI;AAE/C,QAAI,aAAa,MAAM;AACrB,aAAO,4CAAC,8CAAkB,KAAiC,MAAK,uBAAsB;AAAA,IACxF;AAEA,UAAMC,kBAAa,oCAAa,SAAS;AAEzC,WACE,4CAAC,0BACC,sDAAC,gCAAa,SAAS,aACpB,qBACCA,cACE,gDAAC,aAAW,GAAG,OAAO,KAAK,YAAY,KAAK,KAAU,IAEtD,gDAAC,aAAW,GAAG,OAAO,KAAK,YAAY,KAAK,GAGlD,GACF;AAAA,EAEJ,CAAC;AACH;","names":["import_react","ElementData","forwardRef"]}
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/components/ElementData.tsx"],"sourcesContent":["import { Ref, Suspense, forwardRef, memo } from 'react'\nimport { ElementData as ReactPageElementData } from '../../../state/react-page'\nimport { useComponent } from '../hooks/use-component'\nimport { canAcceptRef } from '../utils/can-accept-ref'\nimport { FallbackComponent } from '../../../components/shared/FallbackComponent'\nimport { ResolveProps } from '../controls'\n\ntype ElementDataProps = {\n elementData: ReactPageElementData\n}\n\nexport const ElementData = memo(\n forwardRef(function ElementData(\n { elementData }: ElementDataProps,\n ref: Ref<unknown>,\n ): JSX.Element {\n const Component = useComponent(elementData.type)\n\n if (Component == null) {\n console.warn(`Unknown component '${elementData.type}'`, { elementData })\n return <FallbackComponent ref={ref as Ref<HTMLDivElement>} text=\"Component not found\" />\n }\n\n const forwardRef = canAcceptRef(Component)\n\n return (\n <Suspense>\n <ResolveProps element={elementData}>\n {props =>\n forwardRef ? (\n <Component {...props} key={elementData.key} ref={ref} />\n ) : (\n <Component {...props} key={elementData.key} />\n )\n }\n </ResolveProps>\n </Suspense>\n )\n }),\n)\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBa;AAUC;AA9Bd,IAAAA,gBAAgD;AAEhD,2BAA6B;AAC7B,4BAA6B;AAC7B,+BAAkC;AAClC,sBAA6B;AAMtB,MAAM,kBAAc;AAAA,MACzB,0BAAW,SAASC,aAClB,EAAE,YAAY,GACd,KACa;AACb,UAAM,gBAAY,mCAAa,YAAY,IAAI;AAE/C,QAAI,aAAa,MAAM;AACrB,cAAQ,KAAK,sBAAsB,YAAY,IAAI,KAAK,EAAE,YAAY,CAAC;AACvE,aAAO,4CAAC,8CAAkB,KAAiC,MAAK,uBAAsB;AAAA,IACxF;AAEA,UAAMC,kBAAa,oCAAa,SAAS;AAEzC,WACE,4CAAC,0BACC,sDAAC,gCAAa,SAAS,aACpB,qBACCA,cACE,gDAAC,aAAW,GAAG,OAAO,KAAK,YAAY,KAAK,KAAU,IAEtD,gDAAC,aAAW,GAAG,OAAO,KAAK,YAAY,KAAK,GAGlD,GACF;AAAA,EAEJ,CAAC;AACH;","names":["import_react","ElementData","forwardRef"]}
@@ -1,15 +1,18 @@
1
1
  "use client";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useMemo } from "react";
3
4
  import { BodySnippet } from "./BodySnippet";
4
5
  import { DocumentRoot } from "../../runtimes/react";
5
6
  import { useRouterLocaleSync } from "../hooks/useRouterLocaleSync";
6
7
  import { usePageSnippets } from "../hooks/usePageSnippets";
7
8
  import { PageHead } from "./PageHead";
8
- function Page({ page, rootDocument }) {
9
+ import { flattenMetadataSettings } from "./page-seo-settings";
10
+ function Page({ page, rootDocument, metadata = true }) {
9
11
  const { bodySnippets } = usePageSnippets({ page });
12
+ const pageMetadataSettings = useMemo(() => flattenMetadataSettings(metadata), [metadata]);
10
13
  useRouterLocaleSync();
11
14
  return /* @__PURE__ */ jsxs(Fragment, { children: [
12
- /* @__PURE__ */ jsx(PageHead, { document: page }),
15
+ /* @__PURE__ */ jsx(PageHead, { document: page, metadata: pageMetadataSettings }),
13
16
  /* @__PURE__ */ jsx(DocumentRoot, { rootDocument }),
14
17
  bodySnippets.map((snippet) => /* @__PURE__ */ jsx(BodySnippet, { code: snippet.code, cleanup: snippet.cleanup }, snippet.id))
15
18
  ] });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/page/Page.tsx"],"sourcesContent":["'use client'\n\nimport { BodySnippet } from './BodySnippet'\nimport { DocumentRoot } from '../../runtimes/react'\nimport { type Document } from '../../state/react-page'\nimport { MakeswiftPageDocument } from '../../next'\nimport { useRouterLocaleSync } from '../hooks/useRouterLocaleSync'\nimport { usePageSnippets } from '../hooks/usePageSnippets'\nimport { PageHead } from './PageHead'\n\ntype Props = {\n page: MakeswiftPageDocument\n rootDocument: Document\n}\n\nexport function Page({ page, rootDocument }: Props): JSX.Element {\n const { bodySnippets } = usePageSnippets({ page })\n\n useRouterLocaleSync()\n\n return (\n <>\n <PageHead document={page} />\n\n <DocumentRoot rootDocument={rootDocument} />\n\n {bodySnippets.map(snippet => (\n <BodySnippet key={snippet.id} code={snippet.code} cleanup={snippet.cleanup} />\n ))}\n </>\n )\n}\n"],"mappings":";AAqBI,mBACE,KADF;AAnBJ,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAG7B,SAAS,2BAA2B;AACpC,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AAOlB,SAAS,KAAK,EAAE,MAAM,aAAa,GAAuB;AAC/D,QAAM,EAAE,aAAa,IAAI,gBAAgB,EAAE,KAAK,CAAC;AAEjD,sBAAoB;AAEpB,SACE,iCACE;AAAA,wBAAC,YAAS,UAAU,MAAM;AAAA,IAE1B,oBAAC,gBAAa,cAA4B;AAAA,IAEzC,aAAa,IAAI,aAChB,oBAAC,eAA6B,MAAM,QAAQ,MAAM,SAAS,QAAQ,WAAjD,QAAQ,EAAkD,CAC7E;AAAA,KACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/page/Page.tsx"],"sourcesContent":["'use client'\n\nimport { useMemo } from 'react'\nimport { BodySnippet } from './BodySnippet'\nimport { DocumentRoot } from '../../runtimes/react'\nimport { type Document } from '../../state/react-page'\nimport { MakeswiftPageDocument } from '../../next'\nimport { useRouterLocaleSync } from '../hooks/useRouterLocaleSync'\nimport { usePageSnippets } from '../hooks/usePageSnippets'\nimport { PageHead } from './PageHead'\nimport { flattenMetadataSettings, type PageMetadataSettings } from './page-seo-settings'\n\ntype Props = {\n page: MakeswiftPageDocument\n rootDocument: Document\n metadata?: boolean | PageMetadataSettings\n}\n\nexport function Page({ page, rootDocument, metadata = true }: Props): JSX.Element {\n const { bodySnippets } = usePageSnippets({ page })\n const pageMetadataSettings = useMemo(() => flattenMetadataSettings(metadata), [metadata])\n\n useRouterLocaleSync()\n\n return (\n <>\n <PageHead document={page} metadata={pageMetadataSettings} />\n\n <DocumentRoot rootDocument={rootDocument} />\n\n {bodySnippets.map(snippet => (\n <BodySnippet key={snippet.id} code={snippet.code} cleanup={snippet.cleanup} />\n ))}\n </>\n )\n}\n"],"mappings":";AAyBI,mBACE,KADF;AAvBJ,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAG7B,SAAS,2BAA2B;AACpC,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAAS,+BAA0D;AAQ5D,SAAS,KAAK,EAAE,MAAM,cAAc,WAAW,KAAK,GAAuB;AAChF,QAAM,EAAE,aAAa,IAAI,gBAAgB,EAAE,KAAK,CAAC;AACjD,QAAM,uBAAuB,QAAQ,MAAM,wBAAwB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAExF,sBAAoB;AAEpB,SACE,iCACE;AAAA,wBAAC,YAAS,UAAU,MAAM,UAAU,sBAAsB;AAAA,IAE1D,oBAAC,gBAAa,cAA4B;AAAA,IAEzC,aAAa,IAAI,aAChB,oBAAC,eAA6B,MAAM,QAAQ,MAAM,SAAS,QAAQ,WAAjD,QAAQ,EAAkD,CAC7E;AAAA,KACH;AAEJ;","names":[]}
@@ -12,7 +12,16 @@ const defaultFavicon = {
12
12
  mimetype: "image/png",
13
13
  publicUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABcRAAAXEQHKJvM/AAABjElEQVRYhc2XzU3EMBCFB8TddAAXn6EE6GCpgNABZ1/IXnymBOgAOmA7YM8+ABVsXEHQQFaKQryeN3Yk3ilKJtEnv/nLUd/3pFG0riGi88yrnQn+UfJ5FUi0riWiB2H4nQn+KRd0DFP8agXEfkqCYJBoHdtxIQxfm+DfFgEhoith3NYE30o/qgGR2BJB+xY7kdYEL8oNFUi0jiFMJuxVWrJqEMFxsyUNCsE6AeNztvBp7aJ143vXksoRnwhYtmNdSoIQa6RlO9YXEWW7KgoCleOgxgTf1QZBT+RZ2lXFING6UxCCq+ceeUE8fYdknY599v9sJvzGBP+yCEgC7GPmETc0OJ+0awAlkhe2pAbIXAeFZ8xe2g2Nk3c3ub0xwWt6zY9qbmiqGVMbZK21ZC/YmhlbeBMTzZNDQqcvDb1kM1x32iqZSt1HaqukfKvq34BAOTLsrH+ETNmUkKHHA+428RgeclPVWozeSyAI2EdWB34jtqXNTAySOY3i/KgFIlqOa4GkFmBegorzg4joG07he/M7zl6jAAAAAElFTkSuQmCC"
14
14
  };
15
- function PageHead({ document: page }) {
15
+ function PageHead({ document: page, metadata = {} }) {
16
+ const {
17
+ title: useTitle = false,
18
+ favicon: useFavicon = false,
19
+ canonicalUrl: useCanonicalUrl = false,
20
+ indexingBlocked: useIndexingBlocked = false,
21
+ description: useDescription = false,
22
+ keywords: useKeywords = false,
23
+ socialImage: useSocialImage = false
24
+ } = metadata;
16
25
  const { headSnippets } = usePageSnippets({ page });
17
26
  const isInBuilder = useIsInBuilder();
18
27
  const site = useCachedSite(isInBuilder ? page.site.id : null);
@@ -46,17 +55,17 @@ function PageHead({ document: page }) {
46
55
  overflow: hidden;
47
56
  }
48
57
  ` }),
49
- title && /* @__PURE__ */ jsx(PageTitle, { children: title }),
50
- favicon && /* @__PURE__ */ jsx(PageLink, { rel: "icon", type: favicon.mimetype, href: favicon.publicUrl }),
51
- canonicalUrl && /* @__PURE__ */ jsx(PageLink, { rel: "canonical", href: canonicalUrl }),
52
- isIndexingBlocked && /* @__PURE__ */ jsx(PageMeta, { name: "robots", content: "noindex" }),
53
- description && /* @__PURE__ */ jsxs(Fragment, { children: [
58
+ useTitle && title && /* @__PURE__ */ jsx(PageTitle, { children: title }),
59
+ useFavicon && favicon && /* @__PURE__ */ jsx(PageLink, { rel: "icon", type: favicon.mimetype, href: favicon.publicUrl }),
60
+ useCanonicalUrl && canonicalUrl && /* @__PURE__ */ jsx(PageLink, { rel: "canonical", href: canonicalUrl }),
61
+ useIndexingBlocked && isIndexingBlocked && /* @__PURE__ */ jsx(PageMeta, { name: "robots", content: "noindex" }),
62
+ useDescription && description && /* @__PURE__ */ jsxs(Fragment, { children: [
54
63
  /* @__PURE__ */ jsx(PageMeta, { name: "description", content: description }),
55
64
  /* @__PURE__ */ jsx(PageMeta, { property: "og:description", content: description }),
56
65
  /* @__PURE__ */ jsx(PageMeta, { name: "twitter:description", content: description })
57
66
  ] }),
58
- keywords && /* @__PURE__ */ jsx(PageMeta, { name: "keywords", content: keywords }),
59
- socialImage && /* @__PURE__ */ jsxs(Fragment, { children: [
67
+ useKeywords && keywords && /* @__PURE__ */ jsx(PageMeta, { name: "keywords", content: keywords }),
68
+ useSocialImage && socialImage && /* @__PURE__ */ jsxs(Fragment, { children: [
60
69
  /* @__PURE__ */ jsx(PageMeta, { property: "og:image", content: socialImage.publicUrl }),
61
70
  /* @__PURE__ */ jsx(PageMeta, { property: "og:image:type", content: socialImage.mimetype }),
62
71
  /* @__PURE__ */ jsx(PageMeta, { name: "twitter:image", content: socialImage.publicUrl }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/page/PageHead.tsx"],"sourcesContent":["'use client'\n\nimport { useMemo } from 'react'\nimport { MakeswiftPageDocument } from '../../next'\nimport { usePageSnippets } from '../hooks/usePageSnippets'\nimport { useIsInBuilder } from '../../react'\nimport { useMakeswiftHostApiClient } from '../../runtimes/react/host-api-client'\nimport { useSyncExternalStore } from 'use-sync-external-store/shim'\nimport { Site } from '../../api'\nimport { PageTitle, PageMeta, PageLink, PageStyle } from '../../next/components/head-tags'\nimport { HeadSnippet } from './HeadSnippet'\n\nconst defaultFavicon = {\n id: 'default-favicon',\n mimetype: 'image/png',\n publicUrl:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABcRAAAXEQHKJvM/AAABjElEQVRYhc2XzU3EMBCFB8TddAAXn6EE6GCpgNABZ1/IXnymBOgAOmA7YM8+ABVsXEHQQFaKQryeN3Yk3ilKJtEnv/nLUd/3pFG0riGi88yrnQn+UfJ5FUi0riWiB2H4nQn+KRd0DFP8agXEfkqCYJBoHdtxIQxfm+DfFgEhoith3NYE30o/qgGR2BJB+xY7kdYEL8oNFUi0jiFMJuxVWrJqEMFxsyUNCsE6AeNztvBp7aJ143vXksoRnwhYtmNdSoIQa6RlO9YXEWW7KgoCleOgxgTf1QZBT+RZ2lXFING6UxCCq+ceeUE8fYdknY599v9sJvzGBP+yCEgC7GPmETc0OJ+0awAlkhe2pAbIXAeFZ8xe2g2Nk3c3ub0xwWt6zY9qbmiqGVMbZK21ZC/YmhlbeBMTzZNDQqcvDb1kM1x32iqZSt1HaqukfKvq34BAOTLsrH+ETNmUkKHHA+428RgeclPVWozeSyAI2EdWB34jtqXNTAySOY3i/KgFIlqOa4GkFmBegorzg4joG07he/M7zl6jAAAAAElFTkSuQmCC',\n}\n\ntype Props = {\n document: MakeswiftPageDocument\n}\n\nexport function PageHead({ document: page }: Props): JSX.Element {\n const { headSnippets } = usePageSnippets({ page })\n\n const isInBuilder = useIsInBuilder()\n\n const site = useCachedSite(isInBuilder ? page.site.id : null)\n const baseLocalizedPage = page.localizedPages.find(({ parentId }) => parentId == null)\n\n const favicon = page.meta.favicon ?? defaultFavicon\n const title = baseLocalizedPage?.meta.title ?? page.meta.title\n const description = baseLocalizedPage?.meta.description ?? page.meta.description\n const keywords = baseLocalizedPage?.meta.keywords ?? page.meta.keywords\n const socialImage = baseLocalizedPage?.meta.socialImage ?? page.meta.socialImage\n const canonicalUrl = baseLocalizedPage?.seo.canonicalUrl ?? page.seo.canonicalUrl\n const isIndexingBlocked = baseLocalizedPage?.seo.isIndexingBlocked ?? page.seo.isIndexingBlocked\n\n const fontFamilyParamValue = useMemo(() => {\n if (site == null) {\n return page.fonts\n .map(({ family, variants }) => {\n return `${family.replace(/ /g, '+')}:${variants.join()}`\n })\n .join('|')\n }\n\n return site.googleFonts.edges\n .filter((edge): edge is NonNullable<typeof edge> => edge != null)\n .map(({ activeVariants, node: { family, variants } }) => {\n const activeVariantSpecifiers = variants\n .filter(variant =>\n activeVariants.some(activeVariant => activeVariant.specifier === variant.specifier),\n )\n .map(variant => variant.specifier)\n .join()\n\n return `${family.replace(/ /g, '+')}:${activeVariantSpecifiers}`\n })\n .join('|')\n }, [site, page])\n\n return (\n <>\n <PageStyle precedence=\"high\" href=\"makeswift-base-styles\">\n {`\n html {\n font-family: sans-serif;\n }\n div#__next {\n overflow: hidden;\n }\n `}\n </PageStyle>\n {title && <PageTitle>{title}</PageTitle>}\n {favicon && <PageLink rel=\"icon\" type={favicon.mimetype} href={favicon.publicUrl} />}\n {canonicalUrl && <PageLink rel=\"canonical\" href={canonicalUrl} />}\n {isIndexingBlocked && <PageMeta name=\"robots\" content=\"noindex\" />}\n {description && (\n <>\n <PageMeta name=\"description\" content={description} />\n <PageMeta property=\"og:description\" content={description} />\n <PageMeta name=\"twitter:description\" content={description} />\n </>\n )}\n {keywords && <PageMeta name=\"keywords\" content={keywords} />}\n {socialImage && (\n <>\n <PageMeta property=\"og:image\" content={socialImage.publicUrl} />\n <PageMeta property=\"og:image:type\" content={socialImage.mimetype} />\n <PageMeta name=\"twitter:image\" content={socialImage.publicUrl} />\n <PageMeta name=\"twitter:card\" content=\"summary_large_image\" />\n </>\n )}\n {fontFamilyParamValue !== '' && (\n <PageLink\n precedence=\"medium\"\n rel=\"stylesheet\"\n href={`https://fonts.googleapis.com/css?family=${fontFamilyParamValue}&display=swap`}\n />\n )}\n {headSnippets.map(snippet => (\n <HeadSnippet key={snippet.id} snippet={snippet} />\n ))}\n </>\n )\n}\n\nfunction useCachedSite(siteId: string | null): Site | null {\n const client = useMakeswiftHostApiClient()\n const getSnapshot = () => (siteId == null ? null : client.readSite(siteId))\n\n const site = useSyncExternalStore(client.subscribe, getSnapshot, getSnapshot)\n\n return site\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/page/PageHead.tsx"],"sourcesContent":["'use client'\n\nimport { useMemo } from 'react'\nimport { MakeswiftPageDocument } from '../../next'\nimport { usePageSnippets } from '../hooks/usePageSnippets'\nimport { useIsInBuilder } from '../../react'\nimport { useMakeswiftHostApiClient } from '../../runtimes/react/host-api-client'\nimport { useSyncExternalStore } from 'use-sync-external-store/shim'\nimport { Site } from '../../api'\nimport { PageTitle, PageMeta, PageLink, PageStyle } from '../../next/components/head-tags'\nimport { HeadSnippet } from './HeadSnippet'\nimport { type PageMetadataSettings } from './page-seo-settings'\n\nconst defaultFavicon = {\n id: 'default-favicon',\n mimetype: 'image/png',\n publicUrl:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABcRAAAXEQHKJvM/AAABjElEQVRYhc2XzU3EMBCFB8TddAAXn6EE6GCpgNABZ1/IXnymBOgAOmA7YM8+ABVsXEHQQFaKQryeN3Yk3ilKJtEnv/nLUd/3pFG0riGi88yrnQn+UfJ5FUi0riWiB2H4nQn+KRd0DFP8agXEfkqCYJBoHdtxIQxfm+DfFgEhoith3NYE30o/qgGR2BJB+xY7kdYEL8oNFUi0jiFMJuxVWrJqEMFxsyUNCsE6AeNztvBp7aJ143vXksoRnwhYtmNdSoIQa6RlO9YXEWW7KgoCleOgxgTf1QZBT+RZ2lXFING6UxCCq+ceeUE8fYdknY599v9sJvzGBP+yCEgC7GPmETc0OJ+0awAlkhe2pAbIXAeFZ8xe2g2Nk3c3ub0xwWt6zY9qbmiqGVMbZK21ZC/YmhlbeBMTzZNDQqcvDb1kM1x32iqZSt1HaqukfKvq34BAOTLsrH+ETNmUkKHHA+428RgeclPVWozeSyAI2EdWB34jtqXNTAySOY3i/KgFIlqOa4GkFmBegorzg4joG07he/M7zl6jAAAAAElFTkSuQmCC',\n}\n\ntype Props = {\n document: MakeswiftPageDocument\n metadata?: PageMetadataSettings\n}\n\nexport function PageHead({ document: page, metadata = {} }: Props): JSX.Element {\n const {\n title: useTitle = false,\n favicon: useFavicon = false,\n canonicalUrl: useCanonicalUrl = false,\n indexingBlocked: useIndexingBlocked = false,\n description: useDescription = false,\n keywords: useKeywords = false,\n socialImage: useSocialImage = false,\n } = metadata\n\n const { headSnippets } = usePageSnippets({ page })\n\n const isInBuilder = useIsInBuilder()\n\n const site = useCachedSite(isInBuilder ? page.site.id : null)\n const baseLocalizedPage = page.localizedPages.find(({ parentId }) => parentId == null)\n\n const favicon = page.meta.favicon ?? defaultFavicon\n const title = baseLocalizedPage?.meta.title ?? page.meta.title\n const description = baseLocalizedPage?.meta.description ?? page.meta.description\n const keywords = baseLocalizedPage?.meta.keywords ?? page.meta.keywords\n const socialImage = baseLocalizedPage?.meta.socialImage ?? page.meta.socialImage\n const canonicalUrl = baseLocalizedPage?.seo.canonicalUrl ?? page.seo.canonicalUrl\n const isIndexingBlocked = baseLocalizedPage?.seo.isIndexingBlocked ?? page.seo.isIndexingBlocked\n\n const fontFamilyParamValue = useMemo(() => {\n if (site == null) {\n return page.fonts\n .map(({ family, variants }) => {\n return `${family.replace(/ /g, '+')}:${variants.join()}`\n })\n .join('|')\n }\n\n return site.googleFonts.edges\n .filter((edge): edge is NonNullable<typeof edge> => edge != null)\n .map(({ activeVariants, node: { family, variants } }) => {\n const activeVariantSpecifiers = variants\n .filter(variant =>\n activeVariants.some(activeVariant => activeVariant.specifier === variant.specifier),\n )\n .map(variant => variant.specifier)\n .join()\n\n return `${family.replace(/ /g, '+')}:${activeVariantSpecifiers}`\n })\n .join('|')\n }, [site, page])\n\n return (\n <>\n <PageStyle precedence=\"high\" href=\"makeswift-base-styles\">\n {`\n html {\n font-family: sans-serif;\n }\n div#__next {\n overflow: hidden;\n }\n `}\n </PageStyle>\n {useTitle && title && <PageTitle>{title}</PageTitle>}\n {useFavicon && favicon && (\n <PageLink rel=\"icon\" type={favicon.mimetype} href={favicon.publicUrl} />\n )}\n {useCanonicalUrl && canonicalUrl && <PageLink rel=\"canonical\" href={canonicalUrl} />}\n {useIndexingBlocked && isIndexingBlocked && <PageMeta name=\"robots\" content=\"noindex\" />}\n {useDescription && description && (\n <>\n <PageMeta name=\"description\" content={description} />\n <PageMeta property=\"og:description\" content={description} />\n <PageMeta name=\"twitter:description\" content={description} />\n </>\n )}\n {useKeywords && keywords && <PageMeta name=\"keywords\" content={keywords} />}\n {useSocialImage && socialImage && (\n <>\n <PageMeta property=\"og:image\" content={socialImage.publicUrl} />\n <PageMeta property=\"og:image:type\" content={socialImage.mimetype} />\n <PageMeta name=\"twitter:image\" content={socialImage.publicUrl} />\n <PageMeta name=\"twitter:card\" content=\"summary_large_image\" />\n </>\n )}\n {fontFamilyParamValue !== '' && (\n <PageLink\n precedence=\"medium\"\n rel=\"stylesheet\"\n href={`https://fonts.googleapis.com/css?family=${fontFamilyParamValue}&display=swap`}\n />\n )}\n {headSnippets.map(snippet => (\n <HeadSnippet key={snippet.id} snippet={snippet} />\n ))}\n </>\n )\n}\n\nfunction useCachedSite(siteId: string | null): Site | null {\n const client = useMakeswiftHostApiClient()\n const getSnapshot = () => (siteId == null ? null : client.readSite(siteId))\n\n const site = useSyncExternalStore(client.subscribe, getSnapshot, getSnapshot)\n\n return site\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,19 @@
1
+ function flattenMetadataSettings(settings) {
2
+ if (typeof settings === "boolean")
3
+ return {
4
+ title: settings,
5
+ description: settings,
6
+ keywords: settings,
7
+ socialImage: settings,
8
+ canonicalUrl: settings,
9
+ indexingBlocked: settings,
10
+ favicon: settings
11
+ };
12
+ if (settings == null)
13
+ return {};
14
+ return settings;
15
+ }
16
+ export {
17
+ flattenMetadataSettings
18
+ };
19
+ //# sourceMappingURL=page-seo-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/page/page-seo-settings.ts"],"sourcesContent":["export type PageMetadataSettings = {\n title?: boolean\n description?: boolean\n keywords?: boolean\n socialImage?: boolean\n canonicalUrl?: boolean\n indexingBlocked?: boolean\n favicon?: boolean\n}\n\nexport function flattenMetadataSettings(\n settings?: boolean | PageMetadataSettings,\n): PageMetadataSettings {\n if (typeof settings === 'boolean')\n return {\n title: settings,\n description: settings,\n keywords: settings,\n socialImage: settings,\n canonicalUrl: settings,\n indexingBlocked: settings,\n favicon: settings,\n }\n if (settings == null) return {}\n return settings\n}\n"],"mappings":"AAUO,SAAS,wBACd,UACsB;AACtB,MAAI,OAAO,aAAa;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,MACV,aAAa;AAAA,MACb,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,SAAS;AAAA,IACX;AACF,MAAI,YAAY;AAAM,WAAO,CAAC;AAC9B,SAAO;AACT;","names":[]}
@@ -2,12 +2,20 @@ import {
2
2
  ControlDefinition,
3
3
  ControlInstance,
4
4
  DefaultControlInstance,
5
- ShapeV2Control
5
+ ShapeV2Control,
6
+ findBreakpointOverride,
7
+ mergeOrCoalesceFallbacks,
8
+ mergeResponsiveValues,
9
+ shallowMergeFallbacks
6
10
  } from "@makeswift/controls";
7
11
  export {
8
12
  ControlDefinition,
9
13
  ControlInstance,
10
14
  DefaultControlInstance,
11
- ShapeV2Control
15
+ ShapeV2Control,
16
+ findBreakpointOverride,
17
+ mergeOrCoalesceFallbacks,
18
+ mergeResponsiveValues,
19
+ shallowMergeFallbacks
12
20
  };
13
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/index.ts"],"sourcesContent":["export {\n type ConfigType,\n type Data,\n type DataType,\n type ValueType,\n type ResolvedValueType,\n type ControlMessage,\n type ReplacementContext,\n type SendMessageType,\n ControlDefinition,\n ControlInstance,\n DefaultControlInstance,\n ShapeV2Control,\n} from '@makeswift/controls'\n"],"mappings":"AAAA;AAAA,EASE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/index.ts"],"sourcesContent":["export {\n type Breakpoint,\n type BreakpointId,\n type Breakpoints,\n type ConfigType,\n type Data,\n type DataType,\n type DeviceOverride,\n type ValueType,\n type ResolvedValueType,\n type ResponsiveValue,\n type ControlMessage,\n type ReplacementContext,\n type SendMessageType,\n ControlDefinition,\n ControlInstance,\n DefaultControlInstance,\n ShapeV2Control,\n findBreakpointOverride,\n mergeOrCoalesceFallbacks,\n mergeResponsiveValues,\n shallowMergeFallbacks,\n} from '@makeswift/controls'\n"],"mappings":"AAAA;AAAA,EAcE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
@@ -14,7 +14,7 @@ async function handler(...args) {
14
14
  const supportsDraftMode = match(args).with(routeHandlerPattern, () => true).with(apiRoutePattern, () => false).exhaustive();
15
15
  const supportsWebhook = match(args).with(routeHandlerPattern, () => true).with(apiRoutePattern, () => false).exhaustive();
16
16
  const body = {
17
- version: "0.23.2",
17
+ version: "0.23.3-canary.1",
18
18
  previewMode: supportsPreviewMode,
19
19
  draftMode: supportsDraftMode,
20
20
  interactionMode: true,
@@ -18,7 +18,7 @@ function useRegisterPageDocument(pageDocument) {
18
18
  useUniversalDispatch(dispatch, registerDocumentsEffect, [rootDocuments]);
19
19
  return rootDocuments[0];
20
20
  }
21
- const Page = memo(({ snapshot, ...props }) => {
21
+ const Page = memo(({ snapshot, metadata = true, ...props }) => {
22
22
  if ("runtime" in props) {
23
23
  throw new Error(
24
24
  `The \`runtime\` prop is no longer supported in the \`@makeswift/runtime\` \`Page\` component as of \`0.15.0\`.
@@ -31,7 +31,8 @@ See our docs for more information on what's changed and instructions to migrate:
31
31
  PageComponent,
32
32
  {
33
33
  page: snapshot.document,
34
- rootDocument
34
+ rootDocument,
35
+ metadata
35
36
  },
36
37
  snapshot.document.data.key
37
38
  ) });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/next/components/page.tsx"],"sourcesContent":["'use client'\n\nimport { Suspense, memo, useMemo } from 'react'\n\nimport { useDispatch } from '../../runtimes/react/hooks/use-dispatch'\nimport { useUniversalDispatch } from '../../runtimes/react/hooks/use-universal-dispatch'\nimport { useCacheData } from '../../runtimes/react/hooks/use-cache-data'\n\nimport { Page as PageComponent } from '../../components/page'\nimport {\n type MakeswiftPageSnapshot,\n type MakeswiftPageDocument,\n pageToRootDocument,\n} from '../client'\nimport * as ReactPage from '../../state/react-page'\nimport { registerDocumentsEffect } from '../../state/actions'\n\nexport type PageProps = {\n snapshot: MakeswiftPageSnapshot\n}\n\nfunction useRegisterPageDocument(pageDocument: MakeswiftPageDocument): ReactPage.Document {\n const dispatch = useDispatch()\n const rootDocuments: [ReactPage.Document] = useMemo(\n () => [pageToRootDocument(pageDocument)],\n [pageDocument],\n )\n\n useUniversalDispatch(dispatch, registerDocumentsEffect, [rootDocuments])\n\n return rootDocuments[0]\n}\n\nexport const Page = memo(({ snapshot, ...props }: PageProps) => {\n if ('runtime' in props) {\n throw new Error(\n `The \\`runtime\\` prop is no longer supported in the \\`@makeswift/runtime\\` \\`Page\\` component as of \\`0.15.0\\`.\nSee our docs for more information on what's changed and instructions to migrate: https://docs.makeswift.com/migrations/0.15.0`,\n )\n }\n\n useCacheData(snapshot.cacheData)\n\n const rootDocument = useRegisterPageDocument(snapshot.document)\n\n return (\n <Suspense>\n {/* We use a key here to reset the Snippets state in the PageMeta component */}\n <PageComponent\n key={snapshot.document.data.key}\n page={snapshot.document}\n rootDocument={rootDocument}\n />\n </Suspense>\n )\n})\n"],"mappings":";AAgDM;AA9CN,SAAS,UAAU,MAAM,eAAe;AAExC,SAAS,mBAAmB;AAC5B,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAE7B,SAAS,QAAQ,qBAAqB;AACtC;AAAA,EAGE;AAAA,OACK;AAEP,SAAS,+BAA+B;AAMxC,SAAS,wBAAwB,cAAyD;AACxF,QAAM,WAAW,YAAY;AAC7B,QAAM,gBAAsC;AAAA,IAC1C,MAAM,CAAC,mBAAmB,YAAY,CAAC;AAAA,IACvC,CAAC,YAAY;AAAA,EACf;AAEA,uBAAqB,UAAU,yBAAyB,CAAC,aAAa,CAAC;AAEvE,SAAO,cAAc,CAAC;AACxB;AAEO,MAAM,OAAO,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,MAAiB;AAC9D,MAAI,aAAa,OAAO;AACtB,UAAM,IAAI;AAAA,MACR;AAAA;AAAA,IAEF;AAAA,EACF;AAEA,eAAa,SAAS,SAAS;AAE/B,QAAM,eAAe,wBAAwB,SAAS,QAAQ;AAE9D,SACE,oBAAC,YAEC;AAAA,IAAC;AAAA;AAAA,MAEC,MAAM,SAAS;AAAA,MACf;AAAA;AAAA,IAFK,SAAS,SAAS,KAAK;AAAA,EAG9B,GACF;AAEJ,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/next/components/page.tsx"],"sourcesContent":["'use client'\n\nimport { Suspense, memo, useMemo } from 'react'\n\nimport { useDispatch } from '../../runtimes/react/hooks/use-dispatch'\nimport { useUniversalDispatch } from '../../runtimes/react/hooks/use-universal-dispatch'\nimport { useCacheData } from '../../runtimes/react/hooks/use-cache-data'\n\nimport { Page as PageComponent } from '../../components/page'\nimport {\n type MakeswiftPageSnapshot,\n type MakeswiftPageDocument,\n pageToRootDocument,\n} from '../client'\nimport * as ReactPage from '../../state/react-page'\nimport { registerDocumentsEffect } from '../../state/actions'\nimport { type PageMetadataSettings } from '../../components/page/page-seo-settings'\n\nexport type PageProps = {\n snapshot: MakeswiftPageSnapshot\n metadata?: boolean | PageMetadataSettings\n}\n\nfunction useRegisterPageDocument(pageDocument: MakeswiftPageDocument): ReactPage.Document {\n const dispatch = useDispatch()\n const rootDocuments: [ReactPage.Document] = useMemo(\n () => [pageToRootDocument(pageDocument)],\n [pageDocument],\n )\n\n useUniversalDispatch(dispatch, registerDocumentsEffect, [rootDocuments])\n\n return rootDocuments[0]\n}\n\n/**\n * @param snapshot - The snapshot of the page to render, from\n * `client.getPageSnapshot()`.\n * @param metadata - Allows control over whether to use data from Makeswift for\n * rendering metadata tags in the `<head>` of the page. Pass `true` (default if\n * not provided) to render all metadata tags, or `false` to not render any. For\n * more granular control, pass an object with boolean values for specific\n * metadata fields. Valid fields include:\n * - `title`\n * - `description`\n * - `keywords`\n * - `socialImage`\n * - `canonicalUrl`\n * - `indexingBlocked`\n * - `favicon`\n *\n * If a field is not provided, it will default to `false`.\n */\nexport const Page = memo(({ snapshot, metadata = true, ...props }: PageProps) => {\n if ('runtime' in props) {\n throw new Error(\n `The \\`runtime\\` prop is no longer supported in the \\`@makeswift/runtime\\` \\`Page\\` component as of \\`0.15.0\\`.\nSee our docs for more information on what's changed and instructions to migrate: https://docs.makeswift.com/migrations/0.15.0`,\n )\n }\n\n useCacheData(snapshot.cacheData)\n\n const rootDocument = useRegisterPageDocument(snapshot.document)\n\n return (\n <Suspense>\n {/* We use a key here to reset the Snippets state in the PageMeta component */}\n <PageComponent\n key={snapshot.document.data.key}\n page={snapshot.document}\n rootDocument={rootDocument}\n metadata={metadata}\n />\n </Suspense>\n )\n})\n"],"mappings":";AAoEM;AAlEN,SAAS,UAAU,MAAM,eAAe;AAExC,SAAS,mBAAmB;AAC5B,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAE7B,SAAS,QAAQ,qBAAqB;AACtC;AAAA,EAGE;AAAA,OACK;AAEP,SAAS,+BAA+B;AAQxC,SAAS,wBAAwB,cAAyD;AACxF,QAAM,WAAW,YAAY;AAC7B,QAAM,gBAAsC;AAAA,IAC1C,MAAM,CAAC,mBAAmB,YAAY,CAAC;AAAA,IACvC,CAAC,YAAY;AAAA,EACf;AAEA,uBAAqB,UAAU,yBAAyB,CAAC,aAAa,CAAC;AAEvE,SAAO,cAAc,CAAC;AACxB;AAoBO,MAAM,OAAO,KAAK,CAAC,EAAE,UAAU,WAAW,MAAM,GAAG,MAAM,MAAiB;AAC/E,MAAI,aAAa,OAAO;AACtB,UAAM,IAAI;AAAA,MACR;AAAA;AAAA,IAEF;AAAA,EACF;AAEA,eAAa,SAAS,SAAS;AAE/B,QAAM,eAAe,wBAAwB,SAAS,QAAQ;AAE9D,SACE,oBAAC,YAEC;AAAA,IAAC;AAAA;AAAA,MAEC,MAAM,SAAS;AAAA,MACf;AAAA,MACA;AAAA;AAAA,IAHK,SAAS,SAAS,KAAK;AAAA,EAI9B,GACF;AAEJ,CAAC;","names":[]}
@@ -9,6 +9,7 @@ const ElementData = memo(
9
9
  forwardRef(function ElementData2({ elementData }, ref) {
10
10
  const Component = useComponent(elementData.type);
11
11
  if (Component == null) {
12
+ console.warn(`Unknown component '${elementData.type}'`, { elementData });
12
13
  return /* @__PURE__ */ jsx(FallbackComponent, { ref, text: "Component not found" });
13
14
  }
14
15
  const forwardRef2 = canAcceptRef(Component);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/runtimes/react/components/ElementData.tsx"],"sourcesContent":["import { Ref, Suspense, forwardRef, memo } from 'react'\nimport { ElementData as ReactPageElementData } from '../../../state/react-page'\nimport { useComponent } from '../hooks/use-component'\nimport { canAcceptRef } from '../utils/can-accept-ref'\nimport { FallbackComponent } from '../../../components/shared/FallbackComponent'\nimport { ResolveProps } from '../controls'\n\ntype ElementDataProps = {\n elementData: ReactPageElementData\n}\n\nexport const ElementData = memo(\n forwardRef(function ElementData(\n { elementData }: ElementDataProps,\n ref: Ref<unknown>,\n ): JSX.Element {\n const Component = useComponent(elementData.type)\n\n if (Component == null) {\n return <FallbackComponent ref={ref as Ref<HTMLDivElement>} text=\"Component not found\" />\n }\n\n const forwardRef = canAcceptRef(Component)\n\n return (\n <Suspense>\n <ResolveProps element={elementData}>\n {props =>\n forwardRef ? (\n <Component {...props} key={elementData.key} ref={ref} />\n ) : (\n <Component {...props} key={elementData.key} />\n )\n }\n </ResolveProps>\n </Suspense>\n )\n }),\n)\n"],"mappings":"AAmBa;AAUC;AA7Bd,SAAc,UAAU,YAAY,YAAY;AAEhD,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,yBAAyB;AAClC,SAAS,oBAAoB;AAMtB,MAAM,cAAc;AAAA,EACzB,WAAW,SAASA,aAClB,EAAE,YAAY,GACd,KACa;AACb,UAAM,YAAY,aAAa,YAAY,IAAI;AAE/C,QAAI,aAAa,MAAM;AACrB,aAAO,oBAAC,qBAAkB,KAAiC,MAAK,uBAAsB;AAAA,IACxF;AAEA,UAAMC,cAAa,aAAa,SAAS;AAEzC,WACE,oBAAC,YACC,8BAAC,gBAAa,SAAS,aACpB,qBACCA,cACE,8BAAC,aAAW,GAAG,OAAO,KAAK,YAAY,KAAK,KAAU,IAEtD,8BAAC,aAAW,GAAG,OAAO,KAAK,YAAY,KAAK,GAGlD,GACF;AAAA,EAEJ,CAAC;AACH;","names":["ElementData","forwardRef"]}
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/components/ElementData.tsx"],"sourcesContent":["import { Ref, Suspense, forwardRef, memo } from 'react'\nimport { ElementData as ReactPageElementData } from '../../../state/react-page'\nimport { useComponent } from '../hooks/use-component'\nimport { canAcceptRef } from '../utils/can-accept-ref'\nimport { FallbackComponent } from '../../../components/shared/FallbackComponent'\nimport { ResolveProps } from '../controls'\n\ntype ElementDataProps = {\n elementData: ReactPageElementData\n}\n\nexport const ElementData = memo(\n forwardRef(function ElementData(\n { elementData }: ElementDataProps,\n ref: Ref<unknown>,\n ): JSX.Element {\n const Component = useComponent(elementData.type)\n\n if (Component == null) {\n console.warn(`Unknown component '${elementData.type}'`, { elementData })\n return <FallbackComponent ref={ref as Ref<HTMLDivElement>} text=\"Component not found\" />\n }\n\n const forwardRef = canAcceptRef(Component)\n\n return (\n <Suspense>\n <ResolveProps element={elementData}>\n {props =>\n forwardRef ? (\n <Component {...props} key={elementData.key} ref={ref} />\n ) : (\n <Component {...props} key={elementData.key} />\n )\n }\n </ResolveProps>\n </Suspense>\n )\n }),\n)\n"],"mappings":"AAoBa;AAUC;AA9Bd,SAAc,UAAU,YAAY,YAAY;AAEhD,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,yBAAyB;AAClC,SAAS,oBAAoB;AAMtB,MAAM,cAAc;AAAA,EACzB,WAAW,SAASA,aAClB,EAAE,YAAY,GACd,KACa;AACb,UAAM,YAAY,aAAa,YAAY,IAAI;AAE/C,QAAI,aAAa,MAAM;AACrB,cAAQ,KAAK,sBAAsB,YAAY,IAAI,KAAK,EAAE,YAAY,CAAC;AACvE,aAAO,oBAAC,qBAAkB,KAAiC,MAAK,uBAAsB;AAAA,IACxF;AAEA,UAAMC,cAAa,aAAa,SAAS;AAEzC,WACE,oBAAC,YACC,8BAAC,gBAAa,SAAS,aACpB,qBACCA,cACE,8BAAC,aAAW,GAAG,OAAO,KAAK,YAAY,KAAK,KAAU,IAEtD,8BAAC,aAAW,GAAG,OAAO,KAAK,YAAY,KAAK,GAGlD,GACF;AAAA,EAEJ,CAAC;AACH;","names":["ElementData","forwardRef"]}
@@ -1,10 +1,12 @@
1
1
  /// <reference types="react" />
2
2
  import { type Document } from '../../state/react-page';
3
3
  import { MakeswiftPageDocument } from '../../next';
4
+ import { type PageMetadataSettings } from './page-seo-settings';
4
5
  type Props = {
5
6
  page: MakeswiftPageDocument;
6
7
  rootDocument: Document;
8
+ metadata?: boolean | PageMetadataSettings;
7
9
  };
8
- export declare function Page({ page, rootDocument }: Props): JSX.Element;
10
+ export declare function Page({ page, rootDocument, metadata }: Props): JSX.Element;
9
11
  export {};
10
12
  //# sourceMappingURL=Page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../../../../src/components/page/Page.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAKlD,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,qBAAqB,CAAA;IAC3B,YAAY,EAAE,QAAQ,CAAA;CACvB,CAAA;AAED,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAgB/D"}
1
+ {"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../../../../src/components/page/Page.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAIlD,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAExF,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,qBAAqB,CAAA;IAC3B,YAAY,EAAE,QAAQ,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAA;CAC1C,CAAA;AAED,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAe,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAiBhF"}
@@ -1,8 +1,10 @@
1
1
  /// <reference types="react" />
2
2
  import { MakeswiftPageDocument } from '../../next';
3
+ import { type PageMetadataSettings } from './page-seo-settings';
3
4
  type Props = {
4
5
  document: MakeswiftPageDocument;
6
+ metadata?: PageMetadataSettings;
5
7
  };
6
- export declare function PageHead({ document: page }: Props): JSX.Element;
8
+ export declare function PageHead({ document: page, metadata }: Props): JSX.Element;
7
9
  export {};
8
10
  //# sourceMappingURL=PageHead.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageHead.d.ts","sourceRoot":"","sources":["../../../../src/components/page/PageHead.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAgBlD,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,qBAAqB,CAAA;CAChC,CAAA;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAoF/D"}
1
+ {"version":3,"file":"PageHead.d.ts","sourceRoot":"","sources":["../../../../src/components/page/PageHead.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAQlD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAS/D,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,QAAQ,CAAC,EAAE,oBAAoB,CAAA;CAChC,CAAA;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAa,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAgG9E"}
@@ -0,0 +1,11 @@
1
+ export type PageMetadataSettings = {
2
+ title?: boolean;
3
+ description?: boolean;
4
+ keywords?: boolean;
5
+ socialImage?: boolean;
6
+ canonicalUrl?: boolean;
7
+ indexingBlocked?: boolean;
8
+ favicon?: boolean;
9
+ };
10
+ export declare function flattenMetadataSettings(settings?: boolean | PageMetadataSettings): PageMetadataSettings;
11
+ //# sourceMappingURL=page-seo-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-seo-settings.d.ts","sourceRoot":"","sources":["../../../../src/components/page/page-seo-settings.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,CAAC,EAAE,OAAO,GAAG,oBAAoB,GACxC,oBAAoB,CAatB"}
@@ -1,2 +1,2 @@
1
- export { type ConfigType, type Data, type DataType, type ValueType, type ResolvedValueType, type ControlMessage, type ReplacementContext, type SendMessageType, ControlDefinition, ControlInstance, DefaultControlInstance, ShapeV2Control, } from '@makeswift/controls';
1
+ export { type Breakpoint, type BreakpointId, type Breakpoints, type ConfigType, type Data, type DataType, type DeviceOverride, type ValueType, type ResolvedValueType, type ResponsiveValue, type ControlMessage, type ReplacementContext, type SendMessageType, ControlDefinition, ControlInstance, DefaultControlInstance, ShapeV2Control, findBreakpointOverride, mergeOrCoalesceFallbacks, mergeResponsiveValues, shallowMergeFallbacks, } from '@makeswift/controls';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,cAAc,GACf,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,qBAAqB,CAAA"}
@@ -1,7 +1,27 @@
1
1
  /// <reference types="react" />
2
2
  import { type MakeswiftPageSnapshot } from '../client';
3
+ import { type PageMetadataSettings } from '../../components/page/page-seo-settings';
3
4
  export type PageProps = {
4
5
  snapshot: MakeswiftPageSnapshot;
6
+ metadata?: boolean | PageMetadataSettings;
5
7
  };
6
- export declare const Page: import("react").MemoExoticComponent<({ snapshot, ...props }: PageProps) => import("react/jsx-runtime").JSX.Element>;
8
+ /**
9
+ * @param snapshot - The snapshot of the page to render, from
10
+ * `client.getPageSnapshot()`.
11
+ * @param metadata - Allows control over whether to use data from Makeswift for
12
+ * rendering metadata tags in the `<head>` of the page. Pass `true` (default if
13
+ * not provided) to render all metadata tags, or `false` to not render any. For
14
+ * more granular control, pass an object with boolean values for specific
15
+ * metadata fields. Valid fields include:
16
+ * - `title`
17
+ * - `description`
18
+ * - `keywords`
19
+ * - `socialImage`
20
+ * - `canonicalUrl`
21
+ * - `indexingBlocked`
22
+ * - `favicon`
23
+ *
24
+ * If a field is not provided, it will default to `false`.
25
+ */
26
+ export declare const Page: import("react").MemoExoticComponent<({ snapshot, metadata, ...props }: PageProps) => import("react/jsx-runtime").JSX.Element>;
7
27
  //# sourceMappingURL=page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../src/next/components/page.tsx"],"names":[],"mappings":";AASA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,WAAW,CAAA;AAIlB,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,qBAAqB,CAAA;CAChC,CAAA;AAcD,eAAO,MAAM,IAAI,+DAAiC,SAAS,6CAsBzD,CAAA"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../src/next/components/page.tsx"],"names":[],"mappings":";AASA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,yCAAyC,CAAA;AAEnF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,QAAQ,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAA;CAC1C,CAAA;AAcD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,IAAI,yEAAkD,SAAS,6CAuB1E,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** @jest-environment jsdom */
2
+ import '@testing-library/jest-dom';
3
+ //# sourceMappingURL=makeswift-page-metadata-rendering.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeswift-page-metadata-rendering.test.d.ts","sourceRoot":"","sources":["../../../../../src/next/components/tests/makeswift-page-metadata-rendering.test.tsx"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,OAAO,2BAA2B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ElementData.d.ts","sourceRoot":"","sources":["../../../../../src/runtimes/react/components/ElementData.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAM/E,KAAK,gBAAgB,GAAG;IACtB,WAAW,EAAE,oBAAoB,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,WAAW,2IA2BvB,CAAA"}
1
+ {"version":3,"file":"ElementData.d.ts","sourceRoot":"","sources":["../../../../../src/runtimes/react/components/ElementData.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAM/E,KAAK,gBAAgB,GAAG;IACtB,WAAW,EAAE,oBAAoB,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,WAAW,2IA4BvB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makeswift/runtime",
3
- "version": "0.23.2",
3
+ "version": "0.23.3-canary.1",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "dist",