@makeswift/runtime 0.14.5 → 0.16.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/react.js +3 -17
- package/dist/cjs/api/react.js.map +1 -1
- package/dist/cjs/api/resource-types.js +24 -0
- package/dist/cjs/api/resource-types.js.map +1 -0
- package/dist/cjs/builder/serialization/control-serialization.js +3 -2
- package/dist/cjs/builder/serialization/control-serialization.js.map +1 -1
- package/dist/cjs/components/builtin/Box/Box.js +1 -0
- package/dist/cjs/components/builtin/Box/Box.js.map +1 -1
- package/dist/cjs/components/builtin/Box/animations.js +1 -0
- package/dist/cjs/components/builtin/Box/animations.js.map +1 -1
- package/dist/cjs/components/builtin/Box/register.js +2 -3
- package/dist/cjs/components/builtin/Box/register.js.map +1 -1
- package/dist/cjs/components/builtin/Button/Button.js.map +1 -1
- package/dist/cjs/components/builtin/Button/register.js +15 -15
- package/dist/cjs/components/builtin/Button/register.js.map +1 -1
- package/dist/cjs/components/builtin/Carousel/Carousel.js +1 -0
- package/dist/cjs/components/builtin/Carousel/Carousel.js.map +1 -1
- package/dist/cjs/components/builtin/Carousel/register.js +2 -3
- package/dist/cjs/components/builtin/Carousel/register.js.map +1 -1
- package/dist/cjs/components/builtin/Countdown/Countdown.js +1 -0
- package/dist/cjs/components/builtin/Countdown/Countdown.js.map +1 -1
- package/dist/cjs/components/builtin/Countdown/register.js +2 -3
- package/dist/cjs/components/builtin/Countdown/register.js.map +1 -1
- package/dist/cjs/components/builtin/Divider/register.js +2 -3
- package/dist/cjs/components/builtin/Divider/register.js.map +1 -1
- package/dist/cjs/components/builtin/Embed/Embed.js +1 -0
- package/dist/cjs/components/builtin/Embed/Embed.js.map +1 -1
- package/dist/cjs/components/builtin/Embed/register.js +2 -3
- package/dist/cjs/components/builtin/Embed/register.js.map +1 -1
- package/dist/cjs/components/builtin/Form/Form.js +3 -2
- package/dist/cjs/components/builtin/Form/Form.js.map +1 -1
- package/dist/cjs/components/builtin/Form/context/FormContext.js +1 -0
- package/dist/cjs/components/builtin/Form/context/FormContext.js.map +1 -1
- package/dist/cjs/components/builtin/Form/register.js +4 -4
- package/dist/cjs/components/builtin/Form/register.js.map +1 -1
- package/dist/cjs/components/builtin/Image/Image.js +1 -0
- package/dist/cjs/components/builtin/Image/Image.js.map +1 -1
- package/dist/cjs/components/builtin/Image/register.js +4 -4
- package/dist/cjs/components/builtin/Image/register.js.map +1 -1
- package/dist/cjs/components/builtin/Navigation/Navigation.js +1 -0
- package/dist/cjs/components/builtin/Navigation/Navigation.js.map +1 -1
- package/dist/cjs/components/builtin/Navigation/components/DropDownButton/index.js.map +1 -1
- package/dist/cjs/components/builtin/Navigation/components/MobileMenu/components/MobileDropDownButton/index.js.map +1 -1
- package/dist/cjs/components/builtin/Navigation/register.js +4 -4
- package/dist/cjs/components/builtin/Navigation/register.js.map +1 -1
- package/dist/cjs/components/builtin/Root/register.js +2 -3
- package/dist/cjs/components/builtin/Root/register.js.map +1 -1
- package/dist/cjs/components/builtin/SocialLinks/register.js +2 -3
- package/dist/cjs/components/builtin/SocialLinks/register.js.map +1 -1
- package/dist/cjs/components/builtin/Text/register.js +2 -3
- package/dist/cjs/components/builtin/Text/register.js.map +1 -1
- package/dist/cjs/components/builtin/Video/Video.js +1 -0
- package/dist/cjs/components/builtin/Video/Video.js.map +1 -1
- package/dist/cjs/components/builtin/Video/register.js +2 -3
- package/dist/cjs/components/builtin/Video/register.js.map +1 -1
- package/dist/cjs/components/hooks/index.js +3 -1
- package/dist/cjs/components/hooks/index.js.map +1 -1
- package/dist/cjs/components/hooks/usePageSnippets.js +93 -0
- package/dist/cjs/components/hooks/usePageSnippets.js.map +1 -0
- package/dist/cjs/components/hooks/usePropControllerLinkData.js +34 -0
- package/dist/cjs/components/hooks/usePropControllerLinkData.js.map +1 -0
- package/dist/cjs/components/hooks/useRouterLocaleSync.js +49 -0
- package/dist/cjs/components/hooks/useRouterLocaleSync.js.map +1 -0
- package/dist/cjs/components/page/BodySnippet.js +1 -1
- package/dist/cjs/components/page/BodySnippet.js.map +1 -1
- package/dist/cjs/components/page/HeadSnippet.js +134 -0
- package/dist/cjs/components/page/HeadSnippet.js.map +1 -0
- package/dist/cjs/components/page/Page.js +9 -178
- package/dist/cjs/components/page/Page.js.map +1 -1
- package/dist/cjs/components/page/PageHead.js +109 -0
- package/dist/cjs/components/page/PageHead.js.map +1 -0
- package/dist/cjs/components/shared/BackgroundsContainer/index.js +1 -0
- package/dist/cjs/components/shared/BackgroundsContainer/index.js.map +1 -1
- package/dist/cjs/components/shared/Link/index.js +5 -1
- package/dist/cjs/components/shared/Link/index.js.map +1 -1
- package/dist/cjs/controls/control.js +2 -1
- package/dist/cjs/controls/control.js.map +1 -1
- package/dist/cjs/controls/rich-text/introspection.js +2 -9
- package/dist/cjs/controls/rich-text/introspection.js.map +1 -1
- package/dist/cjs/index.js +0 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/next/api-handler/handlers/element-tree.js +17 -8
- package/dist/cjs/next/api-handler/handlers/element-tree.js.map +1 -1
- package/dist/cjs/next/api-handler/handlers/fonts.js +7 -2
- package/dist/cjs/next/api-handler/handlers/fonts.js.map +1 -1
- package/dist/cjs/next/api-handler/handlers/manifest.js +20 -8
- package/dist/cjs/next/api-handler/handlers/manifest.js.map +1 -1
- package/dist/cjs/next/api-handler/handlers/merge-translated-data.js +17 -6
- package/dist/cjs/next/api-handler/handlers/merge-translated-data.js.map +1 -1
- package/dist/cjs/next/api-handler/handlers/proxy-draft-mode.js +69 -0
- package/dist/cjs/next/api-handler/handlers/proxy-draft-mode.js.map +1 -0
- package/dist/cjs/next/api-handler/handlers/proxy-preview-mode.js +55 -44
- package/dist/cjs/next/api-handler/handlers/proxy-preview-mode.js.map +1 -1
- package/dist/cjs/next/api-handler/handlers/revalidate.js +27 -16
- package/dist/cjs/next/api-handler/handlers/revalidate.js.map +1 -1
- package/dist/cjs/next/api-handler/handlers/translatable-data.js +16 -5
- package/dist/cjs/next/api-handler/handlers/translatable-data.js.map +1 -1
- package/dist/cjs/next/api-handler/index.js +68 -34
- package/dist/cjs/next/api-handler/index.js.map +1 -1
- package/dist/cjs/next/client.js +3 -2
- package/dist/cjs/next/client.js.map +1 -1
- package/dist/cjs/next/components/head-tags.js +77 -0
- package/dist/cjs/next/components/head-tags.js.map +1 -0
- package/dist/cjs/next/components/page.js +56 -0
- package/dist/cjs/next/components/page.js.map +1 -0
- package/dist/cjs/next/context/makeswift-host-api-client.js +46 -0
- package/dist/cjs/next/context/makeswift-host-api-client.js.map +1 -0
- package/dist/cjs/next/context/react-runtime.js +44 -0
- package/dist/cjs/next/context/react-runtime.js.map +1 -0
- package/dist/cjs/next/draft-mode/draft-mode-script.js +123 -0
- package/dist/cjs/next/draft-mode/draft-mode-script.js.map +1 -0
- package/dist/cjs/next/draft-mode/index.js +56 -0
- package/dist/cjs/next/draft-mode/index.js.map +1 -0
- package/dist/cjs/next/hooks/use-is-pages-router.js +37 -0
- package/dist/cjs/next/hooks/use-is-pages-router.js.map +1 -0
- package/dist/cjs/next/index.js +10 -36
- package/dist/cjs/next/index.js.map +1 -1
- package/dist/cjs/next/preview-mode.js +4 -2
- package/dist/cjs/next/preview-mode.js.map +1 -1
- package/dist/cjs/next/root-style-registry.js +90 -0
- package/dist/cjs/next/root-style-registry.js.map +1 -0
- package/dist/cjs/next/server.js +8 -2
- package/dist/cjs/next/server.js.map +1 -1
- package/dist/cjs/prop-controllers/copy/navigation-links.js +2 -2
- package/dist/cjs/prop-controllers/copy/navigation-links.js.map +1 -1
- package/dist/cjs/prop-controllers/copy.js +4 -3
- package/dist/cjs/prop-controllers/copy.js.map +1 -1
- package/dist/cjs/prop-controllers/descriptors.js +0 -6
- package/dist/cjs/prop-controllers/descriptors.js.map +1 -1
- package/dist/cjs/prop-controllers/index.js.map +1 -1
- package/dist/cjs/prop-controllers/introspection.js +3 -10
- package/dist/cjs/prop-controllers/introspection.js.map +1 -1
- package/dist/cjs/runtimes/react/components/Element.js +1 -0
- package/dist/cjs/runtimes/react/components/Element.js.map +1 -1
- package/dist/cjs/runtimes/react/components/LiveProvider.js +6 -13
- package/dist/cjs/runtimes/react/components/LiveProvider.js.map +1 -1
- package/dist/cjs/runtimes/react/components/PreviewProvider.js +6 -8
- package/dist/cjs/runtimes/react/components/PreviewProvider.js.map +1 -1
- package/dist/cjs/runtimes/react/components/RuntimeProvider.js +3 -3
- package/dist/cjs/runtimes/react/components/RuntimeProvider.js.map +1 -1
- package/dist/cjs/runtimes/react/controls/link.js +1 -1
- package/dist/cjs/runtimes/react/controls/link.js.map +1 -1
- package/dist/cjs/runtimes/react/controls/rich-text/rich-text.js +2 -4
- package/dist/cjs/runtimes/react/controls/rich-text/rich-text.js.map +1 -1
- package/dist/cjs/runtimes/react/controls/rich-text-v2/rich-text-v2.js +4 -11
- package/dist/cjs/runtimes/react/controls/rich-text-v2/rich-text-v2.js.map +1 -1
- package/dist/cjs/runtimes/react/controls.js +11 -0
- package/dist/cjs/runtimes/react/controls.js.map +1 -1
- package/dist/cjs/runtimes/react/hooks/makeswift-api.js +11 -10
- package/dist/cjs/runtimes/react/hooks/makeswift-api.js.map +1 -1
- package/dist/cjs/runtimes/react/hooks/use-document-key.js +1 -0
- package/dist/cjs/runtimes/react/hooks/use-document-key.js.map +1 -1
- package/dist/cjs/runtimes/react/hooks/use-page-id.js +1 -0
- package/dist/cjs/runtimes/react/hooks/use-page-id.js.map +1 -1
- package/dist/cjs/runtimes/react/hooks/use-store.js +1 -0
- package/dist/cjs/runtimes/react/hooks/use-store.js.map +1 -1
- package/dist/cjs/runtimes/react/use-global-style.js +15 -10
- package/dist/cjs/runtimes/react/use-global-style.js.map +1 -1
- package/dist/cjs/runtimes/react/use-style.js +7 -6
- package/dist/cjs/runtimes/react/use-style.js.map +1 -1
- package/dist/cjs/state/actions.js +0 -25
- package/dist/cjs/state/actions.js.map +1 -1
- package/dist/cjs/state/react-builder-preview.js +1 -24
- package/dist/cjs/state/react-builder-preview.js.map +1 -1
- package/dist/esm/api/react.js +2 -14
- package/dist/esm/api/react.js.map +1 -1
- package/dist/esm/api/resource-types.js +8 -0
- package/dist/esm/api/resource-types.js.map +1 -0
- package/dist/esm/builder/serialization/control-serialization.js +5 -2
- package/dist/esm/builder/serialization/control-serialization.js.map +1 -1
- package/dist/esm/components/builtin/Box/Box.js +1 -0
- package/dist/esm/components/builtin/Box/Box.js.map +1 -1
- package/dist/esm/components/builtin/Box/animations.js +1 -0
- package/dist/esm/components/builtin/Box/animations.js.map +1 -1
- package/dist/esm/components/builtin/Box/register.js +2 -3
- package/dist/esm/components/builtin/Box/register.js.map +1 -1
- package/dist/esm/components/builtin/Button/Button.js.map +1 -1
- package/dist/esm/components/builtin/Button/register.js +4 -4
- package/dist/esm/components/builtin/Button/register.js.map +1 -1
- package/dist/esm/components/builtin/Carousel/Carousel.js +1 -0
- package/dist/esm/components/builtin/Carousel/Carousel.js.map +1 -1
- package/dist/esm/components/builtin/Carousel/register.js +2 -3
- package/dist/esm/components/builtin/Carousel/register.js.map +1 -1
- package/dist/esm/components/builtin/Countdown/Countdown.js +1 -0
- package/dist/esm/components/builtin/Countdown/Countdown.js.map +1 -1
- package/dist/esm/components/builtin/Countdown/register.js +2 -3
- package/dist/esm/components/builtin/Countdown/register.js.map +1 -1
- package/dist/esm/components/builtin/Divider/register.js +2 -3
- package/dist/esm/components/builtin/Divider/register.js.map +1 -1
- package/dist/esm/components/builtin/Embed/Embed.js +1 -0
- package/dist/esm/components/builtin/Embed/Embed.js.map +1 -1
- package/dist/esm/components/builtin/Embed/register.js +2 -3
- package/dist/esm/components/builtin/Embed/register.js.map +1 -1
- package/dist/esm/components/builtin/Form/Form.js +3 -2
- package/dist/esm/components/builtin/Form/Form.js.map +1 -1
- package/dist/esm/components/builtin/Form/context/FormContext.js +1 -0
- package/dist/esm/components/builtin/Form/context/FormContext.js.map +1 -1
- package/dist/esm/components/builtin/Form/register.js +4 -4
- package/dist/esm/components/builtin/Form/register.js.map +1 -1
- package/dist/esm/components/builtin/Image/Image.js +1 -0
- package/dist/esm/components/builtin/Image/Image.js.map +1 -1
- package/dist/esm/components/builtin/Image/register.js +4 -4
- package/dist/esm/components/builtin/Image/register.js.map +1 -1
- package/dist/esm/components/builtin/Navigation/Navigation.js +1 -0
- package/dist/esm/components/builtin/Navigation/Navigation.js.map +1 -1
- package/dist/esm/components/builtin/Navigation/components/DropDownButton/index.js.map +1 -1
- package/dist/esm/components/builtin/Navigation/components/MobileMenu/components/MobileDropDownButton/index.js.map +1 -1
- package/dist/esm/components/builtin/Navigation/register.js +4 -4
- package/dist/esm/components/builtin/Navigation/register.js.map +1 -1
- package/dist/esm/components/builtin/Root/register.js +2 -3
- package/dist/esm/components/builtin/Root/register.js.map +1 -1
- package/dist/esm/components/builtin/SocialLinks/register.js +2 -3
- package/dist/esm/components/builtin/SocialLinks/register.js.map +1 -1
- package/dist/esm/components/builtin/Text/register.js +2 -3
- package/dist/esm/components/builtin/Text/register.js.map +1 -1
- package/dist/esm/components/builtin/Video/Video.js +1 -0
- package/dist/esm/components/builtin/Video/Video.js.map +1 -1
- package/dist/esm/components/builtin/Video/register.js +2 -3
- package/dist/esm/components/builtin/Video/register.js.map +1 -1
- package/dist/esm/components/hooks/index.js +1 -0
- package/dist/esm/components/hooks/index.js.map +1 -1
- package/dist/esm/components/hooks/usePageSnippets.js +59 -0
- package/dist/esm/components/hooks/usePageSnippets.js.map +1 -0
- package/dist/esm/components/hooks/usePropControllerLinkData.js +12 -0
- package/dist/esm/components/hooks/usePropControllerLinkData.js.map +1 -0
- package/dist/esm/components/hooks/useRouterLocaleSync.js +25 -0
- package/dist/esm/components/hooks/useRouterLocaleSync.js.map +1 -0
- package/dist/esm/components/page/BodySnippet.js +1 -1
- package/dist/esm/components/page/BodySnippet.js.map +1 -1
- package/dist/esm/components/page/HeadSnippet.js +100 -0
- package/dist/esm/components/page/HeadSnippet.js.map +1 -0
- package/dist/esm/components/page/Page.js +7 -166
- package/dist/esm/components/page/Page.js.map +1 -1
- package/dist/esm/components/page/PageHead.js +85 -0
- package/dist/esm/components/page/PageHead.js.map +1 -0
- package/dist/esm/components/shared/BackgroundsContainer/index.js +1 -0
- package/dist/esm/components/shared/BackgroundsContainer/index.js.map +1 -1
- package/dist/esm/components/shared/Link/index.js +5 -1
- package/dist/esm/components/shared/Link/index.js.map +1 -1
- package/dist/esm/controls/control.js +2 -1
- package/dist/esm/controls/control.js.map +1 -1
- package/dist/esm/controls/rich-text/introspection.js +2 -9
- package/dist/esm/controls/rich-text/introspection.js.map +1 -1
- package/dist/esm/index.js +0 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/next/api-handler/handlers/element-tree.js +17 -8
- package/dist/esm/next/api-handler/handlers/element-tree.js.map +1 -1
- package/dist/esm/next/api-handler/handlers/fonts.js +7 -2
- package/dist/esm/next/api-handler/handlers/fonts.js.map +1 -1
- package/dist/esm/next/api-handler/handlers/manifest.js +20 -8
- package/dist/esm/next/api-handler/handlers/manifest.js.map +1 -1
- package/dist/esm/next/api-handler/handlers/merge-translated-data.js +17 -6
- package/dist/esm/next/api-handler/handlers/merge-translated-data.js.map +1 -1
- package/dist/esm/next/api-handler/handlers/proxy-draft-mode.js +49 -0
- package/dist/esm/next/api-handler/handlers/proxy-draft-mode.js.map +1 -0
- package/dist/esm/next/api-handler/handlers/proxy-preview-mode.js +55 -44
- package/dist/esm/next/api-handler/handlers/proxy-preview-mode.js.map +1 -1
- package/dist/esm/next/api-handler/handlers/revalidate.js +27 -16
- package/dist/esm/next/api-handler/handlers/revalidate.js.map +1 -1
- package/dist/esm/next/api-handler/handlers/translatable-data.js +16 -5
- package/dist/esm/next/api-handler/handlers/translatable-data.js.map +1 -1
- package/dist/esm/next/api-handler/index.js +68 -34
- package/dist/esm/next/api-handler/index.js.map +1 -1
- package/dist/esm/next/client.js +3 -2
- package/dist/esm/next/client.js.map +1 -1
- package/dist/esm/next/components/head-tags.js +40 -0
- package/dist/esm/next/components/head-tags.js.map +1 -0
- package/dist/esm/next/components/page.js +32 -0
- package/dist/esm/next/components/page.js.map +1 -0
- package/dist/esm/next/context/makeswift-host-api-client.js +21 -0
- package/dist/esm/next/context/makeswift-host-api-client.js.map +1 -0
- package/dist/esm/next/context/react-runtime.js +19 -0
- package/dist/esm/next/context/react-runtime.js.map +1 -0
- package/dist/esm/next/draft-mode/draft-mode-script.js +99 -0
- package/dist/esm/next/draft-mode/draft-mode-script.js.map +1 -0
- package/dist/esm/next/draft-mode/index.js +30 -0
- package/dist/esm/next/draft-mode/index.js.map +1 -0
- package/dist/esm/next/hooks/use-is-pages-router.js +13 -0
- package/dist/esm/next/hooks/use-is-pages-router.js.map +1 -0
- package/dist/esm/next/index.js +5 -32
- package/dist/esm/next/index.js.map +1 -1
- package/dist/esm/next/preview-mode.js +2 -1
- package/dist/esm/next/preview-mode.js.map +1 -1
- package/dist/esm/next/root-style-registry.js +55 -0
- package/dist/esm/next/root-style-registry.js.map +1 -0
- package/dist/esm/next/server.js +5 -1
- package/dist/esm/next/server.js.map +1 -1
- package/dist/esm/prop-controllers/copy/navigation-links.js +2 -2
- package/dist/esm/prop-controllers/copy/navigation-links.js.map +1 -1
- package/dist/esm/prop-controllers/copy.js +4 -3
- package/dist/esm/prop-controllers/copy.js.map +1 -1
- package/dist/esm/prop-controllers/descriptors.js +0 -5
- package/dist/esm/prop-controllers/descriptors.js.map +1 -1
- package/dist/esm/prop-controllers/index.js.map +1 -1
- package/dist/esm/prop-controllers/introspection.js +6 -10
- package/dist/esm/prop-controllers/introspection.js.map +1 -1
- package/dist/esm/runtimes/react/components/Element.js +1 -0
- package/dist/esm/runtimes/react/components/Element.js.map +1 -1
- package/dist/esm/runtimes/react/components/LiveProvider.js +6 -13
- package/dist/esm/runtimes/react/components/LiveProvider.js.map +1 -1
- package/dist/esm/runtimes/react/components/PreviewProvider.js +6 -8
- package/dist/esm/runtimes/react/components/PreviewProvider.js.map +1 -1
- package/dist/esm/runtimes/react/components/RuntimeProvider.js +3 -3
- package/dist/esm/runtimes/react/components/RuntimeProvider.js.map +1 -1
- package/dist/esm/runtimes/react/controls/link.js +1 -1
- package/dist/esm/runtimes/react/controls/link.js.map +1 -1
- package/dist/esm/runtimes/react/controls/rich-text/rich-text.js +3 -5
- package/dist/esm/runtimes/react/controls/rich-text/rich-text.js.map +1 -1
- package/dist/esm/runtimes/react/controls/rich-text-v2/rich-text-v2.js +4 -11
- package/dist/esm/runtimes/react/controls/rich-text-v2/rich-text-v2.js.map +1 -1
- package/dist/esm/runtimes/react/controls.js +13 -1
- package/dist/esm/runtimes/react/controls.js.map +1 -1
- package/dist/esm/runtimes/react/hooks/makeswift-api.js +11 -10
- package/dist/esm/runtimes/react/hooks/makeswift-api.js.map +1 -1
- package/dist/esm/runtimes/react/hooks/use-document-key.js +1 -0
- package/dist/esm/runtimes/react/hooks/use-document-key.js.map +1 -1
- package/dist/esm/runtimes/react/hooks/use-page-id.js +1 -0
- package/dist/esm/runtimes/react/hooks/use-page-id.js.map +1 -1
- package/dist/esm/runtimes/react/hooks/use-store.js +1 -0
- package/dist/esm/runtimes/react/hooks/use-store.js.map +1 -1
- package/dist/esm/runtimes/react/use-global-style.js +8 -3
- package/dist/esm/runtimes/react/use-global-style.js.map +1 -1
- package/dist/esm/runtimes/react/use-style.js +2 -1
- package/dist/esm/runtimes/react/use-style.js.map +1 -1
- package/dist/esm/state/actions.js +0 -22
- package/dist/esm/state/actions.js.map +1 -1
- package/dist/esm/state/react-builder-preview.js +2 -28
- package/dist/esm/state/react-builder-preview.js.map +1 -1
- package/dist/types/api/react.d.ts +1 -9
- package/dist/types/api/react.d.ts.map +1 -1
- package/dist/types/api/resource-types.d.ts +20 -0
- package/dist/types/api/resource-types.d.ts.map +1 -0
- package/dist/types/builder/serialization/control-serialization.d.ts +9 -8
- package/dist/types/builder/serialization/control-serialization.d.ts.map +1 -1
- package/dist/types/components/builtin/Box/Box.d.ts.map +1 -1
- package/dist/types/components/builtin/Box/animations.d.ts.map +1 -1
- package/dist/types/components/builtin/Box/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Button/Button.d.ts +3 -2
- package/dist/types/components/builtin/Button/Button.d.ts.map +1 -1
- package/dist/types/components/builtin/Button/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Carousel/Carousel.d.ts.map +1 -1
- package/dist/types/components/builtin/Carousel/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Countdown/Countdown.d.ts.map +1 -1
- package/dist/types/components/builtin/Countdown/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Divider/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Embed/Embed.d.ts.map +1 -1
- package/dist/types/components/builtin/Embed/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Form/Form.d.ts +3 -2
- package/dist/types/components/builtin/Form/Form.d.ts.map +1 -1
- package/dist/types/components/builtin/Form/components/Field/components/Checkbox/index.d.ts +1 -1
- package/dist/types/components/builtin/Form/context/FormContext.d.ts.map +1 -1
- package/dist/types/components/builtin/Form/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Image/Image.d.ts +3 -2
- package/dist/types/components/builtin/Image/Image.d.ts.map +1 -1
- package/dist/types/components/builtin/Image/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Navigation/Navigation.d.ts +3 -2
- package/dist/types/components/builtin/Navigation/Navigation.d.ts.map +1 -1
- package/dist/types/components/builtin/Navigation/components/DropDownButton/index.d.ts +3 -2
- package/dist/types/components/builtin/Navigation/components/DropDownButton/index.d.ts.map +1 -1
- package/dist/types/components/builtin/Navigation/components/MobileMenu/components/MobileDropDownButton/index.d.ts +3 -2
- package/dist/types/components/builtin/Navigation/components/MobileMenu/components/MobileDropDownButton/index.d.ts.map +1 -1
- package/dist/types/components/builtin/Navigation/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Root/register.d.ts.map +1 -1
- package/dist/types/components/builtin/SocialLinks/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Text/register.d.ts.map +1 -1
- package/dist/types/components/builtin/Video/Video.d.ts.map +1 -1
- package/dist/types/components/builtin/Video/register.d.ts.map +1 -1
- package/dist/types/components/hooks/index.d.ts +1 -0
- package/dist/types/components/hooks/index.d.ts.map +1 -1
- package/dist/types/components/hooks/usePageSnippets.d.ts +36 -0
- package/dist/types/components/hooks/usePageSnippets.d.ts.map +1 -0
- package/dist/types/components/hooks/usePropControllerLinkData.d.ts +3 -0
- package/dist/types/components/hooks/usePropControllerLinkData.d.ts.map +1 -0
- package/dist/types/components/hooks/useRouterLocaleSync.d.ts +2 -0
- package/dist/types/components/hooks/useRouterLocaleSync.d.ts.map +1 -0
- package/dist/types/components/page/BodySnippet.d.ts.map +1 -1
- package/dist/types/components/page/HeadSnippet.d.ts +7 -0
- package/dist/types/components/page/HeadSnippet.d.ts.map +1 -0
- package/dist/types/components/page/Page.d.ts.map +1 -1
- package/dist/types/components/page/PageHead.d.ts +8 -0
- package/dist/types/components/page/PageHead.d.ts.map +1 -0
- package/dist/types/components/shared/BackgroundsContainer/index.d.ts.map +1 -1
- package/dist/types/components/shared/Link/index.d.ts +1 -1
- package/dist/types/components/shared/Link/index.d.ts.map +1 -1
- package/dist/types/controls/control.d.ts.map +1 -1
- package/dist/types/controls/rich-text/introspection.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/next/api-handler/handlers/element-tree.d.ts +9 -1
- package/dist/types/next/api-handler/handlers/element-tree.d.ts.map +1 -1
- package/dist/types/next/api-handler/handlers/fonts.d.ts +10 -1
- package/dist/types/next/api-handler/handlers/fonts.d.ts.map +1 -1
- package/dist/types/next/api-handler/handlers/manifest.d.ts +9 -0
- package/dist/types/next/api-handler/handlers/manifest.d.ts.map +1 -1
- package/dist/types/next/api-handler/handlers/merge-translated-data.d.ts +7 -0
- package/dist/types/next/api-handler/handlers/merge-translated-data.d.ts.map +1 -1
- package/dist/types/next/api-handler/handlers/proxy-draft-mode.d.ts +20 -0
- package/dist/types/next/api-handler/handlers/proxy-draft-mode.d.ts.map +1 -0
- package/dist/types/next/api-handler/handlers/proxy-preview-mode.d.ts +14 -2
- package/dist/types/next/api-handler/handlers/proxy-preview-mode.d.ts.map +1 -1
- package/dist/types/next/api-handler/handlers/revalidate.d.ts +9 -0
- package/dist/types/next/api-handler/handlers/revalidate.d.ts.map +1 -1
- package/dist/types/next/api-handler/handlers/translatable-data.d.ts +7 -0
- package/dist/types/next/api-handler/handlers/translatable-data.d.ts.map +1 -1
- package/dist/types/next/api-handler/index.d.ts +11 -3
- package/dist/types/next/api-handler/index.d.ts.map +1 -1
- package/dist/types/next/client.d.ts.map +1 -1
- package/dist/types/next/components/head-tags.d.ts +19 -0
- package/dist/types/next/components/head-tags.d.ts.map +1 -0
- package/dist/types/next/components/page.d.ts +7 -0
- package/dist/types/next/components/page.d.ts.map +1 -0
- package/dist/types/next/context/makeswift-host-api-client.d.ts +8 -0
- package/dist/types/next/context/makeswift-host-api-client.d.ts.map +1 -0
- package/dist/types/next/context/react-runtime.d.ts +8 -0
- package/dist/types/next/context/react-runtime.d.ts.map +1 -0
- package/dist/types/next/draft-mode/draft-mode-script.d.ts +6 -0
- package/dist/types/next/draft-mode/draft-mode-script.d.ts.map +1 -0
- package/dist/types/next/draft-mode/index.d.ts +15 -0
- package/dist/types/next/draft-mode/index.d.ts.map +1 -0
- package/dist/types/next/hooks/use-is-pages-router.d.ts +2 -0
- package/dist/types/next/hooks/use-is-pages-router.d.ts.map +1 -0
- package/dist/types/next/index.d.ts +4 -9
- package/dist/types/next/index.d.ts.map +1 -1
- package/dist/types/next/preview-mode.d.ts +1 -1
- package/dist/types/next/preview-mode.d.ts.map +1 -1
- package/dist/types/next/root-style-registry.d.ts +7 -0
- package/dist/types/next/root-style-registry.d.ts.map +1 -0
- package/dist/types/next/server.d.ts +2 -0
- package/dist/types/next/server.d.ts.map +1 -1
- package/dist/types/prop-controllers/copy/navigation-links.d.ts.map +1 -1
- package/dist/types/prop-controllers/copy.d.ts.map +1 -1
- package/dist/types/prop-controllers/descriptors.d.ts +7 -66
- package/dist/types/prop-controllers/descriptors.d.ts.map +1 -1
- package/dist/types/prop-controllers/index.d.ts +2 -1
- package/dist/types/prop-controllers/index.d.ts.map +1 -1
- package/dist/types/prop-controllers/introspection.d.ts.map +1 -1
- package/dist/types/runtimes/react/components/Element.d.ts.map +1 -1
- package/dist/types/runtimes/react/components/LiveProvider.d.ts +3 -5
- package/dist/types/runtimes/react/components/LiveProvider.d.ts.map +1 -1
- package/dist/types/runtimes/react/components/PreviewProvider.d.ts +3 -5
- package/dist/types/runtimes/react/components/PreviewProvider.d.ts.map +1 -1
- package/dist/types/runtimes/react/components/RuntimeProvider.d.ts +2 -2
- package/dist/types/runtimes/react/components/RuntimeProvider.d.ts.map +1 -1
- package/dist/types/runtimes/react/controls/link.d.ts.map +1 -1
- package/dist/types/runtimes/react/controls/rich-text/rich-text.d.ts.map +1 -1
- package/dist/types/runtimes/react/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
- package/dist/types/runtimes/react/controls.d.ts.map +1 -1
- package/dist/types/runtimes/react/hooks/makeswift-api.d.ts +2 -1
- package/dist/types/runtimes/react/hooks/makeswift-api.d.ts.map +1 -1
- package/dist/types/runtimes/react/hooks/use-document-key.d.ts.map +1 -1
- package/dist/types/runtimes/react/hooks/use-page-id.d.ts.map +1 -1
- package/dist/types/runtimes/react/hooks/use-store.d.ts.map +1 -1
- package/dist/types/runtimes/react/use-global-style.d.ts.map +1 -1
- package/dist/types/runtimes/react/use-style.d.ts.map +1 -1
- package/dist/types/state/actions.d.ts +1 -19
- package/dist/types/state/actions.d.ts.map +1 -1
- package/dist/types/state/react-builder-preview.d.ts +3 -3
- package/dist/types/state/react-builder-preview.d.ts.map +1 -1
- package/next/plugin/package.json +1 -0
- package/package.json +7 -10
- package/dist/cjs/next/dynamic.js +0 -52
- package/dist/cjs/next/dynamic.js.map +0 -1
- package/dist/cjs/prop-controllers/copy/link.js +0 -63
- package/dist/cjs/prop-controllers/copy/link.js.map +0 -1
- package/dist/esm/next/dynamic.js +0 -31
- package/dist/esm/next/dynamic.js.map +0 -1
- package/dist/esm/prop-controllers/copy/link.js +0 -39
- package/dist/esm/prop-controllers/copy/link.js.map +0 -1
- package/dist/types/next/dynamic.d.ts +0 -13
- package/dist/types/next/dynamic.d.ts.map +0 -1
- package/dist/types/prop-controllers/copy/link.d.ts +0 -4
- package/dist/types/prop-controllers/copy/link.d.ts.map +0 -1
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var HeadSnippet_exports = {};
|
|
30
|
+
__export(HeadSnippet_exports, {
|
|
31
|
+
HeadSnippet: () => HeadSnippet
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(HeadSnippet_exports);
|
|
34
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
35
|
+
var import_react = require("react");
|
|
36
|
+
var import_navigation = require("next/navigation");
|
|
37
|
+
var import_html_react_parser = __toESM(require("html-react-parser"));
|
|
38
|
+
var import_head = __toESM(require("next/head"));
|
|
39
|
+
var import_use_is_pages_router = require("../../next/hooks/use-is-pages-router");
|
|
40
|
+
function HeadSnippet({ snippet }) {
|
|
41
|
+
const isPagesRouter = (0, import_use_is_pages_router.useIsPagesRouter)();
|
|
42
|
+
(0, import_react.useEffect)(() => {
|
|
43
|
+
if (isPagesRouter) {
|
|
44
|
+
return () => {
|
|
45
|
+
const snippetElements2 = getSnippetElementsFromDOM(snippet);
|
|
46
|
+
if (snippetElements2.length > 0)
|
|
47
|
+
return;
|
|
48
|
+
cleanUpSnippet(snippet);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const snippetElements = getSnippetElementsFromDOM(snippet);
|
|
52
|
+
const isAlreadyInTheDOM = snippetElements.length > 0;
|
|
53
|
+
if (isAlreadyInTheDOM)
|
|
54
|
+
return;
|
|
55
|
+
return renderSnippetAndExecuteScripts(snippet, document.head);
|
|
56
|
+
}, [isPagesRouter, snippet]);
|
|
57
|
+
const headSnippetElement = snippetToElement(snippet);
|
|
58
|
+
const insertedServerHTML = (0, import_react.useRef)(false);
|
|
59
|
+
(0, import_navigation.useServerInsertedHTML)(() => {
|
|
60
|
+
if (isPagesRouter || insertedServerHTML.current)
|
|
61
|
+
return;
|
|
62
|
+
insertedServerHTML.current = true;
|
|
63
|
+
return headSnippetElement;
|
|
64
|
+
});
|
|
65
|
+
if (isPagesRouter) {
|
|
66
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head.default, { children: headSnippetElement });
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const SNIPPET_ID_ATRIBUTE_NAME = "data-makeswift-snippet-id";
|
|
71
|
+
const VALID_HEAD_ELEMENT_TYPES = [
|
|
72
|
+
"title",
|
|
73
|
+
"base",
|
|
74
|
+
"link",
|
|
75
|
+
"style",
|
|
76
|
+
"meta",
|
|
77
|
+
"script",
|
|
78
|
+
"noscript",
|
|
79
|
+
"template"
|
|
80
|
+
];
|
|
81
|
+
function snippetToElement(snippet) {
|
|
82
|
+
return import_react.Children.map((0, import_html_react_parser.default)(snippet.code), (element) => {
|
|
83
|
+
if (typeof element === "string")
|
|
84
|
+
return element;
|
|
85
|
+
if (!VALID_HEAD_ELEMENT_TYPES.includes(element.type))
|
|
86
|
+
return null;
|
|
87
|
+
const key = element.key ? `${snippet.id}:${element.key}` : snippet.id;
|
|
88
|
+
return (0, import_react.createElement)(element.type, {
|
|
89
|
+
...element.props,
|
|
90
|
+
key,
|
|
91
|
+
[SNIPPET_ID_ATRIBUTE_NAME]: snippet.id
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function renderSnippetAndExecuteScripts(snippet, container) {
|
|
96
|
+
const virtualContainer = container.ownerDocument.createElement(container.tagName);
|
|
97
|
+
virtualContainer.innerHTML = snippet.code;
|
|
98
|
+
const elements = Array.from(virtualContainer.querySelectorAll("*"));
|
|
99
|
+
const scripts = elements.filter((el) => el instanceof HTMLScriptElement);
|
|
100
|
+
scripts.forEach((script) => {
|
|
101
|
+
const clone = script.ownerDocument.createElement(script.tagName);
|
|
102
|
+
clone.textContent = script.textContent;
|
|
103
|
+
Array.from(script.attributes).forEach(({ name, value }) => {
|
|
104
|
+
clone.setAttribute(name, value);
|
|
105
|
+
});
|
|
106
|
+
clone.setAttribute(SNIPPET_ID_ATRIBUTE_NAME, snippet.id);
|
|
107
|
+
script.parentNode?.replaceChild(clone, script);
|
|
108
|
+
});
|
|
109
|
+
const nodes = Array.from(virtualContainer.childNodes);
|
|
110
|
+
container.append(...nodes);
|
|
111
|
+
return () => {
|
|
112
|
+
nodes.forEach((node) => {
|
|
113
|
+
node.parentNode?.removeChild(node);
|
|
114
|
+
});
|
|
115
|
+
cleanUpSnippet(snippet);
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function cleanUpSnippet(snippet) {
|
|
119
|
+
if (snippet.cleanup == null)
|
|
120
|
+
return;
|
|
121
|
+
try {
|
|
122
|
+
const cleanUp = new Function(snippet.cleanup);
|
|
123
|
+
cleanUp();
|
|
124
|
+
} catch {
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function getSnippetElementsFromDOM(snippet) {
|
|
128
|
+
return document.head.querySelectorAll(`[${SNIPPET_ID_ATRIBUTE_NAME}="${snippet.id}"]`);
|
|
129
|
+
}
|
|
130
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
131
|
+
0 && (module.exports = {
|
|
132
|
+
HeadSnippet
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=HeadSnippet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/page/HeadSnippet.tsx"],"sourcesContent":["import { Children, createElement, useEffect, useRef } from 'react'\nimport { Snippet } from '../hooks/usePageSnippets'\nimport { useServerInsertedHTML } from 'next/navigation'\nimport parse from 'html-react-parser'\nimport Head from 'next/head'\nimport { useIsPagesRouter } from '../../next/hooks/use-is-pages-router'\n\ntype Props = {\n snippet: Snippet\n}\n\nexport function HeadSnippet({ snippet }: Props) {\n const isPagesRouter = useIsPagesRouter()\n\n useEffect(() => {\n if (isPagesRouter) {\n return () => {\n const snippetElements = getSnippetElementsFromDOM(snippet)\n if (snippetElements.length > 0) return\n cleanUpSnippet(snippet)\n }\n }\n\n const snippetElements = getSnippetElementsFromDOM(snippet)\n const isAlreadyInTheDOM = snippetElements.length > 0\n\n if (isAlreadyInTheDOM) return\n\n return renderSnippetAndExecuteScripts(snippet, document.head)\n }, [isPagesRouter, snippet])\n\n const headSnippetElement = snippetToElement(snippet)\n const insertedServerHTML = useRef(false)\n\n useServerInsertedHTML(() => {\n if (isPagesRouter || insertedServerHTML.current) return\n\n insertedServerHTML.current = true\n\n return headSnippetElement\n })\n\n if (isPagesRouter) {\n return <Head>{headSnippetElement}</Head>\n }\n\n return null\n}\n\nconst SNIPPET_ID_ATRIBUTE_NAME = 'data-makeswift-snippet-id'\n\nconst VALID_HEAD_ELEMENT_TYPES = [\n 'title',\n 'base',\n 'link',\n 'style',\n 'meta',\n 'script',\n 'noscript',\n 'template',\n]\n\nfunction snippetToElement(snippet: Pick<Snippet, 'id' | 'code'>): (string | JSX.Element)[] {\n return Children.map(parse(snippet.code), element => {\n if (typeof element === 'string') return element\n\n if (!VALID_HEAD_ELEMENT_TYPES.includes(element.type as string)) return null\n\n const key = element.key ? `${snippet.id}:${element.key}` : snippet.id\n\n return createElement(element.type, {\n ...element.props,\n key,\n [SNIPPET_ID_ATRIBUTE_NAME]: snippet.id,\n })\n })\n}\n\nfunction renderSnippetAndExecuteScripts(snippet: Snippet, container: HTMLElement): () => void {\n const virtualContainer = container.ownerDocument.createElement(container.tagName)\n\n virtualContainer.innerHTML = snippet.code\n\n const elements = Array.from(virtualContainer.querySelectorAll('*'))\n const scripts = elements.filter(el => el instanceof HTMLScriptElement)\n\n scripts.forEach(script => {\n const clone = script.ownerDocument.createElement(script.tagName)\n\n clone.textContent = script.textContent\n Array.from(script.attributes).forEach(({ name, value }) => {\n clone.setAttribute(name, value)\n })\n clone.setAttribute(SNIPPET_ID_ATRIBUTE_NAME, snippet.id)\n script.parentNode?.replaceChild(clone, script)\n })\n\n const nodes = Array.from(virtualContainer.childNodes)\n container.append(...nodes)\n\n return () => {\n nodes.forEach(node => {\n node.parentNode?.removeChild(node)\n })\n\n cleanUpSnippet(snippet)\n }\n}\n\nfunction cleanUpSnippet(snippet: Snippet): void {\n if (snippet.cleanup == null) return\n try {\n const cleanUp = new Function(snippet.cleanup)\n cleanUp()\n } catch {\n // Ignore errors from user input.\n }\n}\n\nfunction getSnippetElementsFromDOM(snippet: Snippet) {\n return document.head.querySelectorAll(`[${SNIPPET_ID_ATRIBUTE_NAME}=\"${snippet.id}\"]`)\n}\n"],"mappings":"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","names":["snippetElements","Head","parse"]}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
"use client";
|
|
3
|
-
var __create = Object.create;
|
|
4
3
|
var __defProp = Object.defineProperty;
|
|
5
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
8
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
7
|
var __export = (target, all) => {
|
|
10
8
|
for (var name in all)
|
|
@@ -18,14 +16,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
16
|
}
|
|
19
17
|
return to;
|
|
20
18
|
};
|
|
21
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
-
mod
|
|
28
|
-
));
|
|
29
19
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
20
|
var Page_exports = {};
|
|
31
21
|
__export(Page_exports, {
|
|
@@ -33,182 +23,23 @@ __export(Page_exports, {
|
|
|
33
23
|
});
|
|
34
24
|
module.exports = __toCommonJS(Page_exports);
|
|
35
25
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
|
-
var import_react = require("react");
|
|
37
|
-
var import_shim = require("use-sync-external-store/shim");
|
|
38
|
-
var import_html_react_parser = __toESM(require("html-react-parser"));
|
|
39
|
-
var import_head = __toESM(require("next/head"));
|
|
40
26
|
var import_BodySnippet = require("./BodySnippet");
|
|
41
|
-
var
|
|
27
|
+
var import_react = require("../../runtimes/react");
|
|
42
28
|
var import_react_page = require("../../state/react-page");
|
|
43
|
-
var
|
|
44
|
-
var
|
|
45
|
-
var
|
|
46
|
-
const SnippetLocation = {
|
|
47
|
-
Body: "BODY",
|
|
48
|
-
Head: "HEAD"
|
|
49
|
-
};
|
|
50
|
-
const defaultFavicon = {
|
|
51
|
-
mimetype: "image/png",
|
|
52
|
-
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"
|
|
53
|
-
};
|
|
54
|
-
const VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_.\-\d]*$/;
|
|
55
|
-
const VALID_HEAD_ELEMENT_TYPES = [
|
|
56
|
-
"title",
|
|
57
|
-
"base",
|
|
58
|
-
"link",
|
|
59
|
-
"style",
|
|
60
|
-
"meta",
|
|
61
|
-
"script",
|
|
62
|
-
"noscript",
|
|
63
|
-
"template"
|
|
64
|
-
];
|
|
65
|
-
function snippetToElement(snippet) {
|
|
66
|
-
return import_react.Children.map((0, import_html_react_parser.default)(snippet.code), (element) => {
|
|
67
|
-
if (typeof element === "string")
|
|
68
|
-
return element;
|
|
69
|
-
if (!VALID_TAG_REGEX.test(element.type))
|
|
70
|
-
return null;
|
|
71
|
-
const key = element.key ? `${snippet.id}:${element.key}` : snippet.id;
|
|
72
|
-
return (0, import_react.createElement)(element.type, { ...element.props, key });
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
const filterUsedSnippetProperties = ({
|
|
76
|
-
code,
|
|
77
|
-
builderEnabled,
|
|
78
|
-
liveEnabled,
|
|
79
|
-
location,
|
|
80
|
-
cleanup
|
|
81
|
-
}) => ({
|
|
82
|
-
code,
|
|
83
|
-
builderEnabled,
|
|
84
|
-
liveEnabled,
|
|
85
|
-
location,
|
|
86
|
-
cleanup
|
|
87
|
-
});
|
|
29
|
+
var import_useRouterLocaleSync = require("../hooks/useRouterLocaleSync");
|
|
30
|
+
var import_usePageSnippets = require("../hooks/usePageSnippets");
|
|
31
|
+
var import_PageHead = require("./PageHead");
|
|
88
32
|
function Page({ document: page }) {
|
|
89
|
-
const
|
|
90
|
-
const [snippets, setSnippets] = (0, import_react.useState)(page.snippets);
|
|
91
|
-
const cachedPage = useCachedPage(isInBuilder ? page.id : null);
|
|
92
|
-
(0, import_react.useEffect)(() => {
|
|
93
|
-
if (cachedPage == null)
|
|
94
|
-
return;
|
|
95
|
-
const oldSnippets = snippets.map(filterUsedSnippetProperties);
|
|
96
|
-
const newSnippets = cachedPage.snippets.map(filterUsedSnippetProperties);
|
|
97
|
-
if ((0, import_deepEqual.default)(newSnippets, oldSnippets))
|
|
98
|
-
return;
|
|
99
|
-
setSnippets(cachedPage.snippets);
|
|
100
|
-
}, [cachedPage]);
|
|
101
|
-
const site = useCachedSite(isInBuilder ? page.site.id : null);
|
|
33
|
+
const { bodySnippets } = (0, import_usePageSnippets.usePageSnippets)({ page });
|
|
102
34
|
const baseLocalizedPage = page.localizedPages.find(({ parentId }) => parentId == null);
|
|
103
|
-
const favicon = page.meta.favicon ?? defaultFavicon;
|
|
104
|
-
const title = baseLocalizedPage?.meta.title ?? page.meta.title;
|
|
105
|
-
const description = baseLocalizedPage?.meta.description ?? page.meta.description;
|
|
106
|
-
const keywords = baseLocalizedPage?.meta.keywords ?? page.meta.keywords;
|
|
107
|
-
const socialImage = baseLocalizedPage?.meta.socialImage ?? page.meta.socialImage;
|
|
108
|
-
const canonicalUrl = baseLocalizedPage?.seo.canonicalUrl ?? page.seo.canonicalUrl;
|
|
109
|
-
const isIndexingBlocked = baseLocalizedPage?.seo.isIndexingBlocked ?? page.seo.isIndexingBlocked;
|
|
110
|
-
const fontFamilyParamValue = (0, import_react.useMemo)(() => {
|
|
111
|
-
if (site == null) {
|
|
112
|
-
return page.fonts.map(({ family, variants }) => {
|
|
113
|
-
return `${family.replace(/ /g, "+")}:${variants.join()}`;
|
|
114
|
-
}).join("|");
|
|
115
|
-
}
|
|
116
|
-
return site.googleFonts.edges.filter((edge) => edge != null).map(({ activeVariants, node: { family, variants } }) => {
|
|
117
|
-
const activeVariantSpecifiers = variants.filter(
|
|
118
|
-
(variant) => activeVariants.some((activeVariant) => activeVariant.specifier === variant.specifier)
|
|
119
|
-
).map((variant) => variant.specifier).join();
|
|
120
|
-
return `${family.replace(/ /g, "+")}:${activeVariantSpecifiers}`;
|
|
121
|
-
}).join("|");
|
|
122
|
-
}, [site, page]);
|
|
123
|
-
const filteredSnippets = (0, import_react.useMemo)(
|
|
124
|
-
() => snippets.filter((snippet) => isInBuilder ? snippet.builderEnabled : snippet.liveEnabled),
|
|
125
|
-
[snippets, isInBuilder]
|
|
126
|
-
);
|
|
127
|
-
const headSnippets = (0, import_react.useMemo)(
|
|
128
|
-
() => filteredSnippets.filter((snippet) => snippet.location === SnippetLocation.Head),
|
|
129
|
-
[filteredSnippets]
|
|
130
|
-
);
|
|
131
|
-
const previousHeadSnippets = (0, import_react.useRef)(null);
|
|
132
|
-
(0, import_react.useEffect)(() => {
|
|
133
|
-
const headSnippetsToCleanUp = (previousHeadSnippets.current ?? []).filter((previousSnippet) => previousSnippet.cleanup != null).filter((previousSnippet) => !headSnippets.some((snippet) => previousSnippet.id === snippet.id));
|
|
134
|
-
headSnippetsToCleanUp.forEach((snippetToCleanUp) => {
|
|
135
|
-
if (snippetToCleanUp.cleanup == null)
|
|
136
|
-
return;
|
|
137
|
-
const cleanUp = new Function(snippetToCleanUp.cleanup);
|
|
138
|
-
try {
|
|
139
|
-
cleanUp();
|
|
140
|
-
} catch {
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
previousHeadSnippets.current = headSnippets;
|
|
144
|
-
}, [headSnippets]);
|
|
145
35
|
const documentId = baseLocalizedPage?.elementTreeId ?? page.id;
|
|
36
|
+
(0, import_useRouterLocaleSync.useRouterLocaleSync)();
|
|
146
37
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
147
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
font-family: sans-serif;
|
|
151
|
-
}
|
|
152
|
-
div#__next {
|
|
153
|
-
overflow: hidden;
|
|
154
|
-
}
|
|
155
|
-
` }),
|
|
156
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("link", { rel: "icon", type: favicon.mimetype, href: favicon.publicUrl }),
|
|
157
|
-
canonicalUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("link", { rel: "canonical", href: canonicalUrl }),
|
|
158
|
-
isIndexingBlocked && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { name: "robots", content: "noindex" }),
|
|
159
|
-
title && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
160
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("title", { children: title }),
|
|
161
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { property: "og:title", content: title }),
|
|
162
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { name: "twitter:title", content: title }),
|
|
163
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { itemProp: "name", content: title })
|
|
164
|
-
] }),
|
|
165
|
-
description && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
166
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { name: "description", content: description }),
|
|
167
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { property: "og:description", content: description }),
|
|
168
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { name: "twitter:description", content: description }),
|
|
169
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { itemProp: "description", content: description })
|
|
170
|
-
] }),
|
|
171
|
-
keywords && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { name: "keywords", content: keywords }),
|
|
172
|
-
socialImage && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
173
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { property: "og:image", content: socialImage.publicUrl }),
|
|
174
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { property: "og:image:type", content: socialImage.mimetype }),
|
|
175
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { name: "twitter:image", content: socialImage.publicUrl }),
|
|
176
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { name: "twitter:card", content: "summary_large_image" }),
|
|
177
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("meta", { itemProp: "image", content: socialImage.publicUrl })
|
|
178
|
-
] }),
|
|
179
|
-
fontFamilyParamValue !== "" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
180
|
-
"link",
|
|
181
|
-
{
|
|
182
|
-
rel: "stylesheet",
|
|
183
|
-
href: `https://fonts.googleapis.com/css?family=${fontFamilyParamValue}&display=swap`
|
|
184
|
-
}
|
|
185
|
-
) }),
|
|
186
|
-
headSnippets.map(snippetToElement).map(
|
|
187
|
-
(children) => import_react.Children.map(children, (child) => {
|
|
188
|
-
if (typeof child === "string")
|
|
189
|
-
return child;
|
|
190
|
-
if (VALID_HEAD_ELEMENT_TYPES.includes(child.type))
|
|
191
|
-
return child;
|
|
192
|
-
return null;
|
|
193
|
-
})
|
|
194
|
-
)
|
|
195
|
-
] }),
|
|
196
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react2.DocumentReference, { documentReference: (0, import_react_page.createDocumentReference)(documentId) }),
|
|
197
|
-
filteredSnippets.filter((snippet) => snippet.location === SnippetLocation.Body).map((snippet) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_BodySnippet.BodySnippet, { code: snippet.code, cleanup: snippet.cleanup }, snippet.id))
|
|
38
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_PageHead.PageHead, { document: page }),
|
|
39
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.DocumentReference, { documentReference: (0, import_react_page.createDocumentReference)(documentId) }),
|
|
40
|
+
bodySnippets.map((snippet) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_BodySnippet.BodySnippet, { code: snippet.code, cleanup: snippet.cleanup }, snippet.id))
|
|
198
41
|
] });
|
|
199
42
|
}
|
|
200
|
-
function useCachedPage(pageId) {
|
|
201
|
-
const client = (0, import_react3.useMakeswiftClient)();
|
|
202
|
-
const getSnapshot = () => pageId == null ? null : client.readPage(pageId);
|
|
203
|
-
const page = (0, import_shim.useSyncExternalStore)(client.subscribe, getSnapshot, getSnapshot);
|
|
204
|
-
return page;
|
|
205
|
-
}
|
|
206
|
-
function useCachedSite(siteId) {
|
|
207
|
-
const client = (0, import_react3.useMakeswiftClient)();
|
|
208
|
-
const getSnapshot = () => siteId == null ? null : client.readSite(siteId);
|
|
209
|
-
const site = (0, import_shim.useSyncExternalStore)(client.subscribe, getSnapshot, getSnapshot);
|
|
210
|
-
return site;
|
|
211
|
-
}
|
|
212
43
|
// Annotate the CommonJS export names for ESM import in node:
|
|
213
44
|
0 && (module.exports = {
|
|
214
45
|
Page
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/page/Page.tsx"],"sourcesContent":["'use client'\n\nimport { ReactElement, Children, createElement, useMemo, useEffect, useRef, useState } from 'react'\nimport { useSyncExternalStore } from 'use-sync-external-store/shim'\nimport parse from 'html-react-parser'\nimport Head from 'next/head'\n\nimport { BodySnippet } from './BodySnippet'\nimport { DocumentReference } from '../../runtimes/react'\nimport { createDocumentReference } from '../../state/react-page'\nimport { useMakeswiftClient } from '../../api/react'\nimport { useIsInBuilder } from '../../react'\nimport deepEqual from '../../utils/deepEqual'\nimport { MakeswiftPageDocument } from '../../next'\nimport { Page as PageType, Site } from '../../api'\n\nconst SnippetLocation = {\n Body: 'BODY',\n Head: 'HEAD',\n} as const\n\ntype SnippetLocation = typeof SnippetLocation[keyof typeof SnippetLocation]\n\ntype Snippet = {\n builderEnabled: boolean\n cleanup: string | null\n code: string\n id: string\n liveEnabled: boolean\n location: SnippetLocation\n}\n\nconst defaultFavicon = {\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\n// Taken from https://github.com/facebook/react/blob/14bac6193a334eda42e727336e8967419f08f5df/packages/react-dom/src/server/ReactPartialRenderer.js#L208\nconst VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_.\\-\\d]*$/\n\nconst VALID_HEAD_ELEMENT_TYPES = [\n 'title',\n 'base',\n 'link',\n 'style',\n 'meta',\n 'script',\n 'noscript',\n 'template',\n]\n\nfunction snippetToElement(snippet: Pick<Snippet, 'id' | 'code'>): (string | ReactElement)[] {\n return Children.map(parse(snippet.code), element => {\n if (typeof element === 'string') return element\n\n if (!VALID_TAG_REGEX.test(element.type)) return null\n\n const key = element.key ? `${snippet.id}:${element.key}` : snippet.id\n\n return createElement(element.type, { ...element.props, key })\n })\n}\n\nconst filterUsedSnippetProperties = ({\n code,\n builderEnabled,\n liveEnabled,\n location,\n cleanup,\n}: Snippet) => ({\n code,\n builderEnabled,\n liveEnabled,\n location,\n cleanup,\n})\n\ntype Props = {\n document: MakeswiftPageDocument\n}\n\nexport function Page({ document: page }: Props): JSX.Element {\n const isInBuilder = useIsInBuilder()\n const [snippets, setSnippets] = useState(page.snippets)\n // We're using cached results here for page snippets and site fonts so that anytime the user\n // changes the snippets or fonts on the builder, the change would be reflected here.\n // See this PR for discussions and things we can do to improve it in the future:\n // https://github.com/makeswift/makeswift/pull/77\n const cachedPage = useCachedPage(isInBuilder ? page.id : null)\n useEffect(() => {\n if (cachedPage == null) return\n\n const oldSnippets = snippets.map(filterUsedSnippetProperties)\n const newSnippets = cachedPage.snippets.map(filterUsedSnippetProperties)\n\n if (deepEqual(newSnippets, oldSnippets)) return\n\n setSnippets(cachedPage.snippets)\n }, [cachedPage])\n const site = useCachedSite(isInBuilder ? page.site.id : null)\n\n const baseLocalizedPage = page.localizedPages.find(({ parentId }) => parentId == null)\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 const filteredSnippets = useMemo(\n () => snippets.filter(snippet => (isInBuilder ? snippet.builderEnabled : snippet.liveEnabled)),\n [snippets, isInBuilder],\n )\n const headSnippets = useMemo(\n () => filteredSnippets.filter(snippet => snippet.location === SnippetLocation.Head),\n [filteredSnippets],\n )\n\n const previousHeadSnippets = useRef<MakeswiftPageDocument['snippets'] | null>(null)\n useEffect(() => {\n const headSnippetsToCleanUp = (previousHeadSnippets.current ?? [])\n .filter(previousSnippet => previousSnippet.cleanup != null)\n .filter(previousSnippet => !headSnippets.some(snippet => previousSnippet.id === snippet.id))\n\n headSnippetsToCleanUp.forEach(snippetToCleanUp => {\n if (snippetToCleanUp.cleanup == null) return\n\n const cleanUp = new Function(snippetToCleanUp.cleanup)\n\n try {\n cleanUp()\n } catch {\n // Ignore errors from user input.\n }\n })\n\n previousHeadSnippets.current = headSnippets\n }, [headSnippets])\n\n const documentId = baseLocalizedPage?.elementTreeId ?? page.id\n\n return (\n <>\n <Head>\n <style>\n {`\n html {\n font-family: sans-serif;\n }\n div#__next {\n overflow: hidden;\n }\n `}\n </style>\n\n <link rel=\"icon\" type={favicon.mimetype} href={favicon.publicUrl} />\n\n {canonicalUrl && <link rel=\"canonical\" href={canonicalUrl} />}\n\n {isIndexingBlocked && <meta name=\"robots\" content=\"noindex\" />}\n\n {title && (\n <>\n <title>{title}</title>\n <meta property=\"og:title\" content={title} />\n <meta name=\"twitter:title\" content={title} />\n <meta itemProp=\"name\" content={title} />\n </>\n )}\n\n {description && (\n <>\n <meta name=\"description\" content={description} />\n <meta property=\"og:description\" content={description} />\n <meta name=\"twitter:description\" content={description} />\n <meta itemProp=\"description\" content={description} />\n </>\n )}\n\n {keywords && <meta name=\"keywords\" content={keywords} />}\n\n {socialImage && (\n <>\n <meta property=\"og:image\" content={socialImage.publicUrl} />\n <meta property=\"og:image:type\" content={socialImage.mimetype} />\n <meta name=\"twitter:image\" content={socialImage.publicUrl} />\n <meta name=\"twitter:card\" content=\"summary_large_image\" />\n <meta itemProp=\"image\" content={socialImage.publicUrl} />\n </>\n )}\n\n {fontFamilyParamValue !== '' && (\n <>\n <link\n rel=\"stylesheet\"\n href={`https://fonts.googleapis.com/css?family=${fontFamilyParamValue}&display=swap`}\n />\n </>\n )}\n\n {headSnippets.map(snippetToElement).map(children =>\n Children.map(children, child => {\n if (typeof child === 'string') return child\n\n if (VALID_HEAD_ELEMENT_TYPES.includes(child.type as string)) return child\n\n return null\n }),\n )}\n </Head>\n\n <DocumentReference documentReference={createDocumentReference(documentId)} />\n\n {filteredSnippets\n .filter(snippet => snippet.location === SnippetLocation.Body)\n .map(snippet => (\n <BodySnippet key={snippet.id} code={snippet.code} cleanup={snippet.cleanup} />\n ))}\n </>\n )\n}\n\nfunction useCachedPage(pageId: string | null): PageType | null {\n const client = useMakeswiftClient()\n const getSnapshot = () => (pageId == null ? null : client.readPage(pageId))\n\n const page = useSyncExternalStore(client.subscribe, getSnapshot, getSnapshot)\n\n return page\n}\n\nfunction useCachedSite(siteId: string | null): Site | null {\n const client = useMakeswiftClient()\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","parse","deepEqual","Head"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/page/Page.tsx"],"sourcesContent":["'use client'\n\nimport { BodySnippet } from './BodySnippet'\nimport { DocumentReference } from '../../runtimes/react'\nimport { createDocumentReference } 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 document: MakeswiftPageDocument\n}\n\nexport function Page({ document: page }: Props): JSX.Element {\n const { bodySnippets } = usePageSnippets({ page })\n\n const baseLocalizedPage = page.localizedPages.find(({ parentId }) => parentId == null)\n const documentId = baseLocalizedPage?.elementTreeId ?? page.id\n\n useRouterLocaleSync()\n\n return (\n <>\n <PageHead document={page} />\n\n <DocumentReference documentReference={createDocumentReference(documentId)} />\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;AAuBI;AArBJ,yBAA4B;AAC5B,mBAAkC;AAClC,wBAAwC;AAExC,iCAAoC;AACpC,6BAAgC;AAChC,sBAAyB;AAMlB,SAAS,KAAK,EAAE,UAAU,KAAK,GAAuB;AAC3D,QAAM,EAAE,aAAa,QAAI,wCAAgB,EAAE,KAAK,CAAC;AAEjD,QAAM,oBAAoB,KAAK,eAAe,KAAK,CAAC,EAAE,SAAS,MAAM,YAAY,IAAI;AACrF,QAAM,aAAa,mBAAmB,iBAAiB,KAAK;AAE5D,sDAAoB;AAEpB,SACE,4EACE;AAAA,gDAAC,4BAAS,UAAU,MAAM;AAAA,IAE1B,4CAAC,kCAAkB,uBAAmB,2CAAwB,UAAU,GAAG;AAAA,IAE1E,aAAa,IAAI,aAChB,4CAAC,kCAA6B,MAAM,QAAQ,MAAM,SAAS,QAAQ,WAAjD,QAAQ,EAAkD,CAC7E;AAAA,KACH;AAEJ;","names":[]}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var PageHead_exports = {};
|
|
21
|
+
__export(PageHead_exports, {
|
|
22
|
+
PageHead: () => PageHead
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(PageHead_exports);
|
|
25
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var import_usePageSnippets = require("../hooks/usePageSnippets");
|
|
28
|
+
var import_react2 = require("../../react");
|
|
29
|
+
var import_makeswift_host_api_client = require("../../next/context/makeswift-host-api-client");
|
|
30
|
+
var import_shim = require("use-sync-external-store/shim");
|
|
31
|
+
var import_head_tags = require("../../next/components/head-tags");
|
|
32
|
+
var import_HeadSnippet = require("./HeadSnippet");
|
|
33
|
+
const defaultFavicon = {
|
|
34
|
+
id: "default-favicon",
|
|
35
|
+
mimetype: "image/png",
|
|
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
|
+
};
|
|
38
|
+
function PageHead({ document: page }) {
|
|
39
|
+
const { headSnippets } = (0, import_usePageSnippets.usePageSnippets)({ page });
|
|
40
|
+
const isInBuilder = (0, import_react2.useIsInBuilder)();
|
|
41
|
+
const site = useCachedSite(isInBuilder ? page.site.id : null);
|
|
42
|
+
const baseLocalizedPage = page.localizedPages.find(({ parentId }) => parentId == null);
|
|
43
|
+
const favicon = page.meta.favicon ?? defaultFavicon;
|
|
44
|
+
const title = baseLocalizedPage?.meta.title ?? page.meta.title;
|
|
45
|
+
const description = baseLocalizedPage?.meta.description ?? page.meta.description;
|
|
46
|
+
const keywords = baseLocalizedPage?.meta.keywords ?? page.meta.keywords;
|
|
47
|
+
const socialImage = baseLocalizedPage?.meta.socialImage ?? page.meta.socialImage;
|
|
48
|
+
const canonicalUrl = baseLocalizedPage?.seo.canonicalUrl ?? page.seo.canonicalUrl;
|
|
49
|
+
const isIndexingBlocked = baseLocalizedPage?.seo.isIndexingBlocked ?? page.seo.isIndexingBlocked;
|
|
50
|
+
const fontFamilyParamValue = (0, import_react.useMemo)(() => {
|
|
51
|
+
if (site == null) {
|
|
52
|
+
return page.fonts.map(({ family, variants }) => {
|
|
53
|
+
return `${family.replace(/ /g, "+")}:${variants.join()}`;
|
|
54
|
+
}).join("|");
|
|
55
|
+
}
|
|
56
|
+
return site.googleFonts.edges.filter((edge) => edge != null).map(({ activeVariants, node: { family, variants } }) => {
|
|
57
|
+
const activeVariantSpecifiers = variants.filter(
|
|
58
|
+
(variant) => activeVariants.some((activeVariant) => activeVariant.specifier === variant.specifier)
|
|
59
|
+
).map((variant) => variant.specifier).join();
|
|
60
|
+
return `${family.replace(/ /g, "+")}:${activeVariantSpecifiers}`;
|
|
61
|
+
}).join("|");
|
|
62
|
+
}, [site, page]);
|
|
63
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
64
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageStyle, { precedence: "high", href: "makeswift-base-styles", children: `
|
|
65
|
+
html {
|
|
66
|
+
font-family: sans-serif;
|
|
67
|
+
}
|
|
68
|
+
div#__next {
|
|
69
|
+
overflow: hidden;
|
|
70
|
+
}
|
|
71
|
+
` }),
|
|
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: [
|
|
77
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "description", content: description }),
|
|
78
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { property: "og:description", content: description }),
|
|
79
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "twitter:description", content: description })
|
|
80
|
+
] }),
|
|
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: [
|
|
83
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { property: "og:image", content: socialImage.publicUrl }),
|
|
84
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { property: "og:image:type", content: socialImage.mimetype }),
|
|
85
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "twitter:image", content: socialImage.publicUrl }),
|
|
86
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head_tags.PageMeta, { name: "twitter:card", content: "summary_large_image" })
|
|
87
|
+
] }),
|
|
88
|
+
fontFamilyParamValue !== "" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
89
|
+
import_head_tags.PageLink,
|
|
90
|
+
{
|
|
91
|
+
precedence: "medium",
|
|
92
|
+
rel: "stylesheet",
|
|
93
|
+
href: `https://fonts.googleapis.com/css?family=${fontFamilyParamValue}&display=swap`
|
|
94
|
+
}
|
|
95
|
+
),
|
|
96
|
+
headSnippets.map((snippet) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_HeadSnippet.HeadSnippet, { snippet }, snippet.id))
|
|
97
|
+
] });
|
|
98
|
+
}
|
|
99
|
+
function useCachedSite(siteId) {
|
|
100
|
+
const client = (0, import_makeswift_host_api_client.useMakeswiftHostApiClient)();
|
|
101
|
+
const getSnapshot = () => siteId == null ? null : client.readSite(siteId);
|
|
102
|
+
const site = (0, import_shim.useSyncExternalStore)(client.subscribe, getSnapshot, getSnapshot);
|
|
103
|
+
return site;
|
|
104
|
+
}
|
|
105
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
106
|
+
0 && (module.exports = {
|
|
107
|
+
PageHead
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=PageHead.js.map
|
|
@@ -0,0 +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 '../../next/context/makeswift-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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/shared/BackgroundsContainer/index.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/shared/BackgroundsContainer/index.tsx"],"sourcesContent":["'use client'\n\nimport { cx } from '@emotion/css'\nimport {\n Children,\n ComponentPropsWithoutRef,\n ElementType,\n forwardRef,\n ReactElement,\n Ref,\n} from 'react'\nimport { BackgroundsValue as BackgroundsPropControllerValue } from '../../../prop-controllers/descriptors'\nimport { useStyle } from '../../../runtimes/react/use-style'\nimport { useBackgrounds } from '../../hooks'\nimport Backgrounds from './components/Backgrounds'\n\ntype BaseProps = {\n backgrounds: BackgroundsPropControllerValue | null | undefined\n children: ReactElement<ElementType>\n}\n\ntype Props = BaseProps & Omit<ComponentPropsWithoutRef<'div'>, keyof BaseProps>\n\nexport default forwardRef<HTMLDivElement | null, Props>(function BackgroundsContainer(\n { backgrounds, children, className, ...restOfProps }: Props,\n ref: Ref<HTMLDivElement>,\n) {\n return (\n <div\n {...restOfProps}\n ref={ref}\n className={cx(\n useStyle({\n position: 'relative',\n width: '100%',\n margin: '0 auto',\n '> *': {\n borderRadius: 'inherit',\n height: 'inherit',\n },\n '> :last-child': {\n position: 'relative',\n },\n }),\n className,\n )}\n >\n <Backgrounds backgrounds={useBackgrounds(backgrounds)} />\n {Children.only(children)}\n </div>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BI;AA1BJ,iBAAmB;AACnB,mBAOO;AAEP,uBAAyB;AACzB,mBAA+B;AAC/B,yBAAwB;AASxB,IAAO,mCAAQ,yBAAyC,SAAS,qBAC/D,EAAE,aAAa,UAAU,WAAW,GAAG,YAAY,GACnD,KACA;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,eAAW;AAAA,YACT,2BAAS;AAAA,UACP,UAAU;AAAA,UACV,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,OAAO;AAAA,YACL,cAAc;AAAA,YACd,QAAQ;AAAA,UACV;AAAA,UACA,iBAAiB;AAAA,YACf,UAAU;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MAEA;AAAA,oDAAC,mBAAAA,SAAA,EAAY,iBAAa,6BAAe,WAAW,GAAG;AAAA,QACtD,sBAAS,KAAK,QAAQ;AAAA;AAAA;AAAA,EACzB;AAEJ,CAAC;","names":["Backgrounds"]}
|
|
@@ -41,6 +41,7 @@ const Link = (0, import_react.forwardRef)(function Link2({ link, onClick = () =>
|
|
|
41
41
|
}, ...restOfProps }, ref) {
|
|
42
42
|
const pageId = link && link.type === "OPEN_PAGE" ? link.payload.pageId : null;
|
|
43
43
|
const page = (0, import_makeswift_api.usePagePathnameSlice)(pageId ?? null);
|
|
44
|
+
const hasLocalizedPathname = page?.localizedPathname != null;
|
|
44
45
|
const elementKey = link?.type === "SCROLL_TO_ELEMENT" ? link.payload.elementIdConfig?.elementKey : null;
|
|
45
46
|
const elementId = (0, import_react2.useElementId)(elementKey);
|
|
46
47
|
let useNextLink;
|
|
@@ -52,7 +53,7 @@ const Link = (0, import_react.forwardRef)(function Link2({ link, onClick = () =>
|
|
|
52
53
|
case "OPEN_PAGE": {
|
|
53
54
|
if (page) {
|
|
54
55
|
useNextLink = true;
|
|
55
|
-
href = `/${page.pathname}`;
|
|
56
|
+
href = `/${page.localizedPathname ?? page.pathname}`;
|
|
56
57
|
}
|
|
57
58
|
target = link.payload.openInNewTab ? "_blank" : "_self";
|
|
58
59
|
break;
|
|
@@ -120,6 +121,9 @@ const Link = (0, import_react.forwardRef)(function Link2({ link, onClick = () =>
|
|
|
120
121
|
target,
|
|
121
122
|
onClick: handleClick,
|
|
122
123
|
href,
|
|
124
|
+
...hasLocalizedPathname && {
|
|
125
|
+
locale: false
|
|
126
|
+
},
|
|
123
127
|
legacyBehavior: false
|
|
124
128
|
}
|
|
125
129
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/shared/Link/index.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef, MouseEvent } from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\nimport NextLink from 'next/link'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/shared/Link/index.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef, MouseEvent } from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\nimport NextLink from 'next/link'\n\nimport { LinkPropControllerValue } from '@makeswift/prop-controllers'\nimport { useElementId } from '../../../runtimes/react'\nimport { usePagePathnameSlice } from '../../../runtimes/react/hooks/makeswift-api'\n\ntype BaseProps = {\n link?: LinkPropControllerValue\n onClick?: (event: MouseEvent<HTMLAnchorElement>) => unknown\n}\n\ntype Props = BaseProps & Omit<ComponentPropsWithoutRef<'a'>, keyof BaseProps>\n\nexport const Link = forwardRef<HTMLAnchorElement, Props>(function Link(\n { link, onClick = () => {}, ...restOfProps }: Props,\n ref,\n) {\n const pageId = link && link.type === 'OPEN_PAGE' ? link.payload.pageId : null\n const page = usePagePathnameSlice(pageId ?? null)\n const hasLocalizedPathname = page?.localizedPathname != null\n\n const elementKey =\n link?.type === 'SCROLL_TO_ELEMENT' ? link.payload.elementIdConfig?.elementKey : null\n const elementId = useElementId(elementKey)\n\n // We don't want to use `next/link` with relative paths because Next.js will attempt to normalize\n // it and mess up the path.\n let useNextLink: boolean | undefined\n let href: string | undefined\n let target: '_blank' | '_self' | undefined\n let block: 'start' | 'center' | 'end' | undefined\n\n if (link) {\n switch (link.type) {\n case 'OPEN_PAGE': {\n if (page) {\n useNextLink = true\n\n href = `/${page.localizedPathname ?? page.pathname}`\n }\n\n target = link.payload.openInNewTab ? '_blank' : '_self'\n\n break\n }\n\n case 'OPEN_URL': {\n useNextLink = true\n\n href = link.payload.url\n\n target = link.payload.openInNewTab ? '_blank' : '_self'\n\n break\n }\n\n case 'SEND_EMAIL': {\n useNextLink = false\n\n const { to, subject = '', body = '' } = link.payload\n\n if (to != null) href = `mailto:${to}?subject=${subject}&body=${body}`\n\n break\n }\n\n case 'CALL_PHONE': {\n useNextLink = false\n\n href = `tel:${link.payload.phoneNumber}`\n\n break\n }\n\n case 'SCROLL_TO_ELEMENT': {\n useNextLink = false\n\n href = `#${elementId ?? ''}`\n\n block = link.payload.block\n\n break\n }\n\n default:\n throw new RangeError(`Invalid link type \"${(link as any).type}.\"`)\n }\n }\n\n function handleClick(event: MouseEvent<HTMLAnchorElement>) {\n onClick(event)\n\n if (event.defaultPrevented) return\n\n /**\n * When we introduced `next/link` instead of just `a` element slate no longer prevented link from navigating within\n * content mode. This is a hack to compensate for what would be expected as slate's default behavior.\n * On upgrade of slate this can be reevaluated.\n */\n if (event.currentTarget.isContentEditable) return event.preventDefault()\n\n if (link && link.type === 'SCROLL_TO_ELEMENT') {\n let hash: string | undefined\n\n try {\n if (href != null) hash = new URL(`http://www.example.com/${href}`).hash\n } catch (error) {\n console.error(`Link received invalid href: ${href}`, error)\n }\n\n if (href != null && hash != null && href === hash) {\n event.preventDefault()\n const view = event.view as unknown as Window\n\n scrollIntoView(view.document.querySelector(hash)!, {\n behavior: 'smooth',\n block,\n })\n\n if (view.location.hash !== hash) view.history.pushState({}, '', hash)\n }\n }\n }\n\n if (useNextLink && href != null) {\n return (\n <NextLink\n {...restOfProps}\n ref={ref}\n target={target}\n onClick={handleClick}\n href={href}\n {...(hasLocalizedPathname && {\n locale: false,\n })}\n // Next.js v12 has legacyBehavior set to true by default\n legacyBehavior={false}\n />\n )\n }\n\n // eslint-disable-next-line\n return <a {...restOfProps} ref={ref} href={href} target={target} onClick={handleClick} />\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgIM;AAhIN,mBAAiE;AACjE,wCAA2B;AAC3B,kBAAqB;AAGrB,IAAAA,gBAA6B;AAC7B,2BAAqC;AAS9B,MAAM,WAAO,yBAAqC,SAASC,MAChE,EAAE,MAAM,UAAU,MAAM;AAAC,GAAG,GAAG,YAAY,GAC3C,KACA;AACA,QAAM,SAAS,QAAQ,KAAK,SAAS,cAAc,KAAK,QAAQ,SAAS;AACzE,QAAM,WAAO,2CAAqB,UAAU,IAAI;AAChD,QAAM,uBAAuB,MAAM,qBAAqB;AAExD,QAAM,aACJ,MAAM,SAAS,sBAAsB,KAAK,QAAQ,iBAAiB,aAAa;AAClF,QAAM,gBAAY,4BAAa,UAAU;AAIzC,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAI,MAAM;AACR,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK,aAAa;AAChB,YAAI,MAAM;AACR,wBAAc;AAEd,iBAAO,IAAI,KAAK,qBAAqB,KAAK,QAAQ;AAAA,QACpD;AAEA,iBAAS,KAAK,QAAQ,eAAe,WAAW;AAEhD;AAAA,MACF;AAAA,MAEA,KAAK,YAAY;AACf,sBAAc;AAEd,eAAO,KAAK,QAAQ;AAEpB,iBAAS,KAAK,QAAQ,eAAe,WAAW;AAEhD;AAAA,MACF;AAAA,MAEA,KAAK,cAAc;AACjB,sBAAc;AAEd,cAAM,EAAE,IAAI,UAAU,IAAI,OAAO,GAAG,IAAI,KAAK;AAE7C,YAAI,MAAM;AAAM,iBAAO,UAAU,EAAE,YAAY,OAAO,SAAS,IAAI;AAEnE;AAAA,MACF;AAAA,MAEA,KAAK,cAAc;AACjB,sBAAc;AAEd,eAAO,OAAO,KAAK,QAAQ,WAAW;AAEtC;AAAA,MACF;AAAA,MAEA,KAAK,qBAAqB;AACxB,sBAAc;AAEd,eAAO,IAAI,aAAa,EAAE;AAE1B,gBAAQ,KAAK,QAAQ;AAErB;AAAA,MACF;AAAA,MAEA;AACE,cAAM,IAAI,WAAW,sBAAuB,KAAa,IAAI,IAAI;AAAA,IACrE;AAAA,EACF;AAEA,WAAS,YAAY,OAAsC;AACzD,YAAQ,KAAK;AAEb,QAAI,MAAM;AAAkB;AAO5B,QAAI,MAAM,cAAc;AAAmB,aAAO,MAAM,eAAe;AAEvE,QAAI,QAAQ,KAAK,SAAS,qBAAqB;AAC7C,UAAI;AAEJ,UAAI;AACF,YAAI,QAAQ;AAAM,iBAAO,IAAI,IAAI,0BAA0B,IAAI,EAAE,EAAE;AAAA,MACrE,SAAS,OAAO;AACd,gBAAQ,MAAM,+BAA+B,IAAI,IAAI,KAAK;AAAA,MAC5D;AAEA,UAAI,QAAQ,QAAQ,QAAQ,QAAQ,SAAS,MAAM;AACjD,cAAM,eAAe;AACrB,cAAM,OAAO,MAAM;AAEnB,8CAAAC,SAAe,KAAK,SAAS,cAAc,IAAI,GAAI;AAAA,UACjD,UAAU;AAAA,UACV;AAAA,QACF,CAAC;AAED,YAAI,KAAK,SAAS,SAAS;AAAM,eAAK,QAAQ,UAAU,CAAC,GAAG,IAAI,IAAI;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,eAAe,QAAQ,MAAM;AAC/B,WACE;AAAA,MAAC,YAAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACC,GAAI,wBAAwB;AAAA,UAC3B,QAAQ;AAAA,QACV;AAAA,QAEA,gBAAgB;AAAA;AAAA,IAClB;AAAA,EAEJ;AAGA,SAAO,4CAAC,OAAG,GAAG,aAAa,KAAU,MAAY,QAAgB,SAAS,aAAa;AACzF,CAAC;","names":["import_react","Link","scrollIntoView","NextLink"]}
|
|
@@ -34,6 +34,7 @@ var import_text_input = require("./text-input");
|
|
|
34
34
|
var import_style = require("./style");
|
|
35
35
|
var import_slot = require("./slot");
|
|
36
36
|
var import_descriptors = require("../prop-controllers/descriptors");
|
|
37
|
+
var import_prop_controllers = require("@makeswift/prop-controllers");
|
|
37
38
|
var import_copy = require("../prop-controllers/copy");
|
|
38
39
|
var import_rich_text = require("./rich-text");
|
|
39
40
|
var import_dto = require("./rich-text-v2/dto");
|
|
@@ -45,7 +46,7 @@ function copy(definition, value, context) {
|
|
|
45
46
|
case import_descriptors.Types.Backgrounds:
|
|
46
47
|
case import_descriptors.Types.Grid:
|
|
47
48
|
case import_descriptors.Types.NavigationLinks:
|
|
48
|
-
case
|
|
49
|
+
case import_prop_controllers.Types.Link:
|
|
49
50
|
case import_descriptors.Types.Shadows:
|
|
50
51
|
case import_descriptors.Types.Image:
|
|
51
52
|
case import_descriptors.Types.Images:
|