@makeswift/runtime 0.0.0-f5b044f → 0.0.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.
- package/controls.js +1 -0
- package/dist/Page.cjs.js +10 -3
- package/dist/Page.cjs.js.map +1 -1
- package/dist/Page.es.js +10 -3
- package/dist/Page.es.js.map +1 -1
- package/dist/builder.cjs.js +1 -0
- package/dist/builder.cjs.js.map +1 -1
- package/dist/builder.es.js +1 -0
- package/dist/builder.es.js.map +1 -1
- package/dist/components.cjs.js +1 -0
- package/dist/components.cjs.js.map +1 -1
- package/dist/components.es.js +1 -0
- package/dist/components.es.js.map +1 -1
- package/dist/control-serialization.cjs.js +198 -0
- package/dist/control-serialization.cjs.js.map +1 -1
- package/dist/control-serialization.es.js +198 -0
- package/dist/control-serialization.es.js.map +1 -1
- package/dist/controls.cjs.js +7 -0
- package/dist/controls.cjs.js.map +1 -0
- package/dist/controls.es.js +2 -0
- package/dist/controls.es.js.map +1 -0
- package/dist/descriptors.cjs.js +3 -1
- package/dist/descriptors.cjs.js.map +1 -1
- package/dist/descriptors.es.js +3 -1
- package/dist/descriptors.es.js.map +1 -1
- package/dist/index.cjs.js +320 -153
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +313 -146
- package/dist/index.es.js.map +1 -1
- package/dist/main.cjs.js +1 -0
- package/dist/main.cjs.js.map +1 -1
- package/dist/main.es.js +1 -0
- package/dist/main.es.js.map +1 -1
- package/dist/next.cjs.js +1 -0
- package/dist/next.cjs.js.map +1 -1
- package/dist/next.es.js +1 -0
- package/dist/next.es.js.map +1 -1
- package/dist/prop-controllers.cjs.js +1 -0
- package/dist/prop-controllers.cjs.js.map +1 -1
- package/dist/prop-controllers.es.js +1 -0
- package/dist/prop-controllers.es.js.map +1 -1
- package/dist/react-builder-preview.cjs.js +1 -0
- package/dist/react-builder-preview.cjs.js.map +1 -1
- package/dist/react-builder-preview.es.js +1 -0
- package/dist/react-builder-preview.es.js.map +1 -1
- package/dist/react.cjs.js +1 -0
- package/dist/react.cjs.js.map +1 -1
- package/dist/react.es.js +1 -0
- package/dist/react.es.js.map +1 -1
- package/dist/style.cjs.js +38 -0
- package/dist/style.cjs.js.map +1 -0
- package/dist/style.es.js +35 -0
- package/dist/style.es.js.map +1 -0
- package/dist/types/builder/serialization/control-serialization.d.ts +156 -3
- package/dist/types/builder/serialization/control-serialization.d.ts.map +1 -1
- package/dist/types/components/builtin/Button/Button.d.ts +2 -1
- package/dist/types/components/builtin/Button/Button.d.ts.map +1 -1
- package/dist/types/components/builtin/Carousel/Carousel.d.ts.map +1 -1
- package/dist/types/components/builtin/Countdown/Countdown.d.ts.map +1 -1
- package/dist/types/components/builtin/Form/Form.d.ts.map +1 -1
- package/dist/types/components/builtin/Navigation/Navigation.d.ts.map +1 -1
- package/dist/types/components/builtin/SocialLinks/SocialLinks.d.ts.map +1 -1
- package/dist/types/components/builtin/Text/Text.d.ts.map +1 -1
- package/dist/types/components/page/Page.d.ts +4 -0
- package/dist/types/components/page/Page.d.ts.map +1 -1
- package/dist/types/controls/index.d.ts +2 -0
- package/dist/types/controls/index.d.ts.map +1 -0
- package/dist/types/controls/style.d.ts +141 -0
- package/dist/types/controls/style.d.ts.map +1 -0
- package/dist/types/controls/types.d.ts +11 -0
- package/dist/types/controls/types.d.ts.map +1 -0
- package/dist/types/prop-controllers/descriptors.d.ts +32 -27
- package/dist/types/prop-controllers/descriptors.d.ts.map +1 -1
- package/dist/types/prop-controllers/index.d.ts +1 -1
- package/dist/types/prop-controllers/index.d.ts.map +1 -1
- package/dist/types/runtimes/react/controls/style.d.ts +4 -0
- package/dist/types/runtimes/react/controls/style.d.ts.map +1 -0
- package/dist/types/runtimes/react/controls.d.ts +2 -5
- package/dist/types/runtimes/react/controls.d.ts.map +1 -1
- package/dist/types/runtimes/react/index.d.ts +2 -3
- package/dist/types/runtimes/react/index.d.ts.map +1 -1
- package/package.json +10 -3
- package/dist/react.cjs2.js +0 -7992
- package/dist/react.cjs2.js.map +0 -1
- package/dist/react.es2.js +0 -7911
- package/dist/react.es2.js.map +0 -1
- package/dist/types/controls/select.d.ts +0 -19
- package/dist/types/controls/select.d.ts.map +0 -1
- package/dist/types/controls.d.ts +0 -4
- package/dist/types/controls.d.ts.map +0 -1
- package/dist/types/prop-controllers/instances/slot.d.ts +0 -2
- package/dist/types/prop-controllers/instances/slot.d.ts.map +0 -1
- package/dist/types/runtimes/index.d.ts +0 -43
- package/dist/types/runtimes/index.d.ts.map +0 -1
- package/dist/types/runtimes/react/react.d.ts +0 -43
- package/dist/types/runtimes/react/react.d.ts.map +0 -1
- package/dist/types/runtimes/react.d.ts +0 -43
- package/dist/types/runtimes/react.d.ts.map +0 -1
package/controls.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./dist/controls.cjs')
|
package/dist/Page.cjs.js
CHANGED
|
@@ -96,9 +96,6 @@ function Page({
|
|
|
96
96
|
preview = false
|
|
97
97
|
}) {
|
|
98
98
|
var _a;
|
|
99
|
-
console.log({
|
|
100
|
-
page
|
|
101
|
-
});
|
|
102
99
|
const favicon = (_a = page.meta.favicon) != null ? _a : defaultFavicon;
|
|
103
100
|
const {
|
|
104
101
|
title,
|
|
@@ -106,6 +103,10 @@ function Page({
|
|
|
106
103
|
keywords,
|
|
107
104
|
socialImage
|
|
108
105
|
} = page.meta;
|
|
106
|
+
const {
|
|
107
|
+
canonicalUrl,
|
|
108
|
+
isIndexingBlocked
|
|
109
|
+
} = page.seo;
|
|
109
110
|
const fontFamilyParamValue = page.fonts.map(({
|
|
110
111
|
family,
|
|
111
112
|
variants
|
|
@@ -144,6 +145,12 @@ function Page({
|
|
|
144
145
|
rel: "icon",
|
|
145
146
|
type: favicon.mimetype,
|
|
146
147
|
href: favicon.publicUrl
|
|
148
|
+
}), canonicalUrl && /* @__PURE__ */ jsxRuntime.jsx("link", {
|
|
149
|
+
rel: "canonical",
|
|
150
|
+
href: canonicalUrl
|
|
151
|
+
}), isIndexingBlocked && /* @__PURE__ */ jsxRuntime.jsx("meta", {
|
|
152
|
+
name: "robots",
|
|
153
|
+
content: "noindex"
|
|
147
154
|
}), title && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
148
155
|
children: [/* @__PURE__ */ jsxRuntime.jsx("title", {
|
|
149
156
|
children: title
|
package/dist/Page.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Page.cjs.js","sources":["../src/components/page/BodySnippet.tsx","../src/components/page/Page.tsx"],"sourcesContent":["import { useEffect } from 'react'\n\nconst SCRIPT_TAG = 'script'\n\ntype Props = {\n code: string\n cleanup: string | null | undefined\n}\n\nexport function BodySnippet({ code, cleanup }: Props): null {\n useEffect(() => {\n const container = document.createElement('div')\n\n container.innerHTML = code\n\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT)\n const scripts: HTMLScriptElement[] = []\n\n while (walker.nextNode()) {\n if (walker.currentNode instanceof HTMLScriptElement) scripts.push(walker.currentNode)\n }\n\n scripts.forEach(inlineScript => {\n const executableScript = document.createElement(SCRIPT_TAG)\n\n executableScript.textContent = inlineScript.textContent\n Array.from(inlineScript.attributes).forEach(({ name, value }) => {\n executableScript.setAttribute(name, value)\n })\n\n inlineScript.parentNode?.replaceChild(executableScript, inlineScript)\n })\n\n const nodes = Array.from(container.childNodes)\n\n document.body.append(...nodes)\n\n return () => {\n nodes.forEach(node => {\n node.parentNode?.removeChild(node)\n })\n\n if (cleanup == null) return\n\n const cleanUp = new Function(cleanup)\n\n try {\n cleanUp()\n } catch {\n // Ignore errors from user input.\n }\n }\n }, [code, cleanup])\n\n return null\n}\n","import { ReactElement, Children, createElement, useMemo, useEffect, useRef } from 'react'\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'\n\nenum SnippetLocation {\n Body = 'BODY',\n Head = 'HEAD',\n}\n\ntype Snippet = {\n builderEnabled: boolean\n cleanup?: string | null\n code: string\n id: string\n liveEnabled: boolean\n location: SnippetLocation\n}\n\nexport type PageData = {\n id: string\n meta: {\n title?: string | null | undefined\n description?: string | null | undefined\n keywords?: string | null | undefined\n socialImage?: { id: string; publicUrl: any; mimetype: any } | null | undefined\n favicon?: { id: string; publicUrl: any; mimetype: any } | null | undefined\n }\n snippets: Snippet[]\n fonts: Array<{\n family: string\n variants: string[]\n }>\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\ntype Props = {\n page: PageData\n preview?: boolean\n}\n\nexport function Page({ page, preview = false }: Props): JSX.Element {\n console.log({ page })\n const favicon = page.meta.favicon ?? defaultFavicon\n const { title, description, keywords, socialImage } = page.meta\n const fontFamilyParamValue = page.fonts\n .map(({ family, variants }) => {\n return `${family.replace(/ /g, '+')}:${variants.join()}`\n })\n .join('|')\n const snippets = useMemo(\n () => page.snippets.filter(snippet => (preview ? snippet.builderEnabled : snippet.liveEnabled)),\n [page, preview],\n )\n const headSnippets = useMemo(\n () => snippets.filter(snippet => snippet.location === SnippetLocation.Head),\n [snippets],\n )\n\n const previousHeadSnippets = useRef<PageData['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 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 {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.publicUrl} />\n <meta name=\"twitter:image\" content={socialImage.publicUrl} />\n <meta name=\"twitter:card\" content={socialImage.publicUrl} />\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(page.id)} />\n\n {snippets\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"],"names":["SCRIPT_TAG","code","cleanup","useEffect","container","document","createElement","innerHTML","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","scripts","nextNode","currentNode","HTMLScriptElement","push","forEach","inlineScript","executableScript","textContent","Array","from","attributes","name","value","setAttribute","parentNode","replaceChild","nodes","childNodes","body","append","node","removeChild","cleanUp","Function","defaultFavicon","mimetype","publicUrl","VALID_TAG_REGEX","VALID_HEAD_ELEMENT_TYPES","snippet","Children","map","parse","element","test","type","key","id","props","page","preview","console","log","favicon","meta","title","description","keywords","socialImage","fontFamilyParamValue","fonts","family","variants","replace","join","snippets","useMemo","filter","builderEnabled","liveEnabled","headSnippets","location","SnippetLocation","previousHeadSnippets","useRef","headSnippetsToCleanUp","current","previousSnippet","some","snippetToCleanUp","_Fragment","_jsxs","Head","_jsx","snippetToElement","children","child","includes","DocumentReference","createDocumentReference"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Page.cjs.js","sources":["../src/components/page/BodySnippet.tsx","../src/components/page/Page.tsx"],"sourcesContent":["import { useEffect } from 'react'\n\nconst SCRIPT_TAG = 'script'\n\ntype Props = {\n code: string\n cleanup: string | null | undefined\n}\n\nexport function BodySnippet({ code, cleanup }: Props): null {\n useEffect(() => {\n const container = document.createElement('div')\n\n container.innerHTML = code\n\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT)\n const scripts: HTMLScriptElement[] = []\n\n while (walker.nextNode()) {\n if (walker.currentNode instanceof HTMLScriptElement) scripts.push(walker.currentNode)\n }\n\n scripts.forEach(inlineScript => {\n const executableScript = document.createElement(SCRIPT_TAG)\n\n executableScript.textContent = inlineScript.textContent\n Array.from(inlineScript.attributes).forEach(({ name, value }) => {\n executableScript.setAttribute(name, value)\n })\n\n inlineScript.parentNode?.replaceChild(executableScript, inlineScript)\n })\n\n const nodes = Array.from(container.childNodes)\n\n document.body.append(...nodes)\n\n return () => {\n nodes.forEach(node => {\n node.parentNode?.removeChild(node)\n })\n\n if (cleanup == null) return\n\n const cleanUp = new Function(cleanup)\n\n try {\n cleanUp()\n } catch {\n // Ignore errors from user input.\n }\n }\n }, [code, cleanup])\n\n return null\n}\n","import { ReactElement, Children, createElement, useMemo, useEffect, useRef } from 'react'\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'\n\nenum SnippetLocation {\n Body = 'BODY',\n Head = 'HEAD',\n}\n\ntype Snippet = {\n builderEnabled: boolean\n cleanup?: string | null\n code: string\n id: string\n liveEnabled: boolean\n location: SnippetLocation\n}\n\nexport type PageData = {\n id: string\n meta: {\n title?: string | null | undefined\n description?: string | null | undefined\n keywords?: string | null | undefined\n socialImage?: { id: string; publicUrl: any; mimetype: any } | null | undefined\n favicon?: { id: string; publicUrl: any; mimetype: any } | null | undefined\n }\n snippets: Snippet[]\n fonts: Array<{\n family: string\n variants: string[]\n }>\n seo: {\n canonicalUrl: string\n isIndexingBlocked: boolean\n }\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\ntype Props = {\n page: PageData\n preview?: boolean\n}\n\nexport function Page({ page, preview = false }: Props): JSX.Element {\n const favicon = page.meta.favicon ?? defaultFavicon\n const { title, description, keywords, socialImage } = page.meta\n const { canonicalUrl, isIndexingBlocked } = page.seo\n const fontFamilyParamValue = page.fonts\n .map(({ family, variants }) => {\n return `${family.replace(/ /g, '+')}:${variants.join()}`\n })\n .join('|')\n const snippets = useMemo(\n () => page.snippets.filter(snippet => (preview ? snippet.builderEnabled : snippet.liveEnabled)),\n [page, preview],\n )\n const headSnippets = useMemo(\n () => snippets.filter(snippet => snippet.location === SnippetLocation.Head),\n [snippets],\n )\n\n const previousHeadSnippets = useRef<PageData['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 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.publicUrl} />\n <meta name=\"twitter:image\" content={socialImage.publicUrl} />\n <meta name=\"twitter:card\" content={socialImage.publicUrl} />\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(page.id)} />\n\n {snippets\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"],"names":["SCRIPT_TAG","code","cleanup","useEffect","container","document","createElement","innerHTML","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","scripts","nextNode","currentNode","HTMLScriptElement","push","forEach","inlineScript","executableScript","textContent","Array","from","attributes","name","value","setAttribute","parentNode","replaceChild","nodes","childNodes","body","append","node","removeChild","cleanUp","Function","defaultFavicon","mimetype","publicUrl","VALID_TAG_REGEX","VALID_HEAD_ELEMENT_TYPES","snippet","Children","map","parse","element","test","type","key","id","props","page","preview","favicon","meta","title","description","keywords","socialImage","canonicalUrl","isIndexingBlocked","seo","fontFamilyParamValue","fonts","family","variants","replace","join","snippets","useMemo","filter","builderEnabled","liveEnabled","headSnippets","location","SnippetLocation","previousHeadSnippets","useRef","headSnippetsToCleanUp","current","previousSnippet","some","snippetToCleanUp","_Fragment","_jsxs","Head","_jsx","snippetToElement","children","child","includes","DocumentReference","createDocumentReference"],"mappings":"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"}
|
package/dist/Page.es.js
CHANGED
|
@@ -90,9 +90,6 @@ function Page({
|
|
|
90
90
|
preview = false
|
|
91
91
|
}) {
|
|
92
92
|
var _a;
|
|
93
|
-
console.log({
|
|
94
|
-
page
|
|
95
|
-
});
|
|
96
93
|
const favicon = (_a = page.meta.favicon) != null ? _a : defaultFavicon;
|
|
97
94
|
const {
|
|
98
95
|
title,
|
|
@@ -100,6 +97,10 @@ function Page({
|
|
|
100
97
|
keywords,
|
|
101
98
|
socialImage
|
|
102
99
|
} = page.meta;
|
|
100
|
+
const {
|
|
101
|
+
canonicalUrl,
|
|
102
|
+
isIndexingBlocked
|
|
103
|
+
} = page.seo;
|
|
103
104
|
const fontFamilyParamValue = page.fonts.map(({
|
|
104
105
|
family,
|
|
105
106
|
variants
|
|
@@ -138,6 +139,12 @@ function Page({
|
|
|
138
139
|
rel: "icon",
|
|
139
140
|
type: favicon.mimetype,
|
|
140
141
|
href: favicon.publicUrl
|
|
142
|
+
}), canonicalUrl && /* @__PURE__ */ jsx("link", {
|
|
143
|
+
rel: "canonical",
|
|
144
|
+
href: canonicalUrl
|
|
145
|
+
}), isIndexingBlocked && /* @__PURE__ */ jsx("meta", {
|
|
146
|
+
name: "robots",
|
|
147
|
+
content: "noindex"
|
|
141
148
|
}), title && /* @__PURE__ */ jsxs(Fragment, {
|
|
142
149
|
children: [/* @__PURE__ */ jsx("title", {
|
|
143
150
|
children: title
|
package/dist/Page.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Page.es.js","sources":["../src/components/page/BodySnippet.tsx","../src/components/page/Page.tsx"],"sourcesContent":["import { useEffect } from 'react'\n\nconst SCRIPT_TAG = 'script'\n\ntype Props = {\n code: string\n cleanup: string | null | undefined\n}\n\nexport function BodySnippet({ code, cleanup }: Props): null {\n useEffect(() => {\n const container = document.createElement('div')\n\n container.innerHTML = code\n\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT)\n const scripts: HTMLScriptElement[] = []\n\n while (walker.nextNode()) {\n if (walker.currentNode instanceof HTMLScriptElement) scripts.push(walker.currentNode)\n }\n\n scripts.forEach(inlineScript => {\n const executableScript = document.createElement(SCRIPT_TAG)\n\n executableScript.textContent = inlineScript.textContent\n Array.from(inlineScript.attributes).forEach(({ name, value }) => {\n executableScript.setAttribute(name, value)\n })\n\n inlineScript.parentNode?.replaceChild(executableScript, inlineScript)\n })\n\n const nodes = Array.from(container.childNodes)\n\n document.body.append(...nodes)\n\n return () => {\n nodes.forEach(node => {\n node.parentNode?.removeChild(node)\n })\n\n if (cleanup == null) return\n\n const cleanUp = new Function(cleanup)\n\n try {\n cleanUp()\n } catch {\n // Ignore errors from user input.\n }\n }\n }, [code, cleanup])\n\n return null\n}\n","import { ReactElement, Children, createElement, useMemo, useEffect, useRef } from 'react'\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'\n\nenum SnippetLocation {\n Body = 'BODY',\n Head = 'HEAD',\n}\n\ntype Snippet = {\n builderEnabled: boolean\n cleanup?: string | null\n code: string\n id: string\n liveEnabled: boolean\n location: SnippetLocation\n}\n\nexport type PageData = {\n id: string\n meta: {\n title?: string | null | undefined\n description?: string | null | undefined\n keywords?: string | null | undefined\n socialImage?: { id: string; publicUrl: any; mimetype: any } | null | undefined\n favicon?: { id: string; publicUrl: any; mimetype: any } | null | undefined\n }\n snippets: Snippet[]\n fonts: Array<{\n family: string\n variants: string[]\n }>\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\ntype Props = {\n page: PageData\n preview?: boolean\n}\n\nexport function Page({ page, preview = false }: Props): JSX.Element {\n console.log({ page })\n const favicon = page.meta.favicon ?? defaultFavicon\n const { title, description, keywords, socialImage } = page.meta\n const fontFamilyParamValue = page.fonts\n .map(({ family, variants }) => {\n return `${family.replace(/ /g, '+')}:${variants.join()}`\n })\n .join('|')\n const snippets = useMemo(\n () => page.snippets.filter(snippet => (preview ? snippet.builderEnabled : snippet.liveEnabled)),\n [page, preview],\n )\n const headSnippets = useMemo(\n () => snippets.filter(snippet => snippet.location === SnippetLocation.Head),\n [snippets],\n )\n\n const previousHeadSnippets = useRef<PageData['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 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 {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.publicUrl} />\n <meta name=\"twitter:image\" content={socialImage.publicUrl} />\n <meta name=\"twitter:card\" content={socialImage.publicUrl} />\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(page.id)} />\n\n {snippets\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"],"names":["SCRIPT_TAG","code","cleanup","useEffect","container","document","createElement","innerHTML","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","scripts","nextNode","currentNode","HTMLScriptElement","push","forEach","inlineScript","executableScript","textContent","Array","from","attributes","name","value","setAttribute","parentNode","replaceChild","nodes","childNodes","body","append","node","removeChild","cleanUp","Function","defaultFavicon","mimetype","publicUrl","VALID_TAG_REGEX","VALID_HEAD_ELEMENT_TYPES","snippet","Children","map","parse","element","test","type","key","id","props","page","preview","console","log","favicon","meta","title","description","keywords","socialImage","fontFamilyParamValue","fonts","family","variants","replace","join","snippets","useMemo","filter","builderEnabled","liveEnabled","headSnippets","location","SnippetLocation","previousHeadSnippets","useRef","headSnippetsToCleanUp","current","previousSnippet","some","snippetToCleanUp","_Fragment","_jsxs","_jsx","snippetToElement","children","child","includes","createDocumentReference"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Page.es.js","sources":["../src/components/page/BodySnippet.tsx","../src/components/page/Page.tsx"],"sourcesContent":["import { useEffect } from 'react'\n\nconst SCRIPT_TAG = 'script'\n\ntype Props = {\n code: string\n cleanup: string | null | undefined\n}\n\nexport function BodySnippet({ code, cleanup }: Props): null {\n useEffect(() => {\n const container = document.createElement('div')\n\n container.innerHTML = code\n\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT)\n const scripts: HTMLScriptElement[] = []\n\n while (walker.nextNode()) {\n if (walker.currentNode instanceof HTMLScriptElement) scripts.push(walker.currentNode)\n }\n\n scripts.forEach(inlineScript => {\n const executableScript = document.createElement(SCRIPT_TAG)\n\n executableScript.textContent = inlineScript.textContent\n Array.from(inlineScript.attributes).forEach(({ name, value }) => {\n executableScript.setAttribute(name, value)\n })\n\n inlineScript.parentNode?.replaceChild(executableScript, inlineScript)\n })\n\n const nodes = Array.from(container.childNodes)\n\n document.body.append(...nodes)\n\n return () => {\n nodes.forEach(node => {\n node.parentNode?.removeChild(node)\n })\n\n if (cleanup == null) return\n\n const cleanUp = new Function(cleanup)\n\n try {\n cleanUp()\n } catch {\n // Ignore errors from user input.\n }\n }\n }, [code, cleanup])\n\n return null\n}\n","import { ReactElement, Children, createElement, useMemo, useEffect, useRef } from 'react'\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'\n\nenum SnippetLocation {\n Body = 'BODY',\n Head = 'HEAD',\n}\n\ntype Snippet = {\n builderEnabled: boolean\n cleanup?: string | null\n code: string\n id: string\n liveEnabled: boolean\n location: SnippetLocation\n}\n\nexport type PageData = {\n id: string\n meta: {\n title?: string | null | undefined\n description?: string | null | undefined\n keywords?: string | null | undefined\n socialImage?: { id: string; publicUrl: any; mimetype: any } | null | undefined\n favicon?: { id: string; publicUrl: any; mimetype: any } | null | undefined\n }\n snippets: Snippet[]\n fonts: Array<{\n family: string\n variants: string[]\n }>\n seo: {\n canonicalUrl: string\n isIndexingBlocked: boolean\n }\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\ntype Props = {\n page: PageData\n preview?: boolean\n}\n\nexport function Page({ page, preview = false }: Props): JSX.Element {\n const favicon = page.meta.favicon ?? defaultFavicon\n const { title, description, keywords, socialImage } = page.meta\n const { canonicalUrl, isIndexingBlocked } = page.seo\n const fontFamilyParamValue = page.fonts\n .map(({ family, variants }) => {\n return `${family.replace(/ /g, '+')}:${variants.join()}`\n })\n .join('|')\n const snippets = useMemo(\n () => page.snippets.filter(snippet => (preview ? snippet.builderEnabled : snippet.liveEnabled)),\n [page, preview],\n )\n const headSnippets = useMemo(\n () => snippets.filter(snippet => snippet.location === SnippetLocation.Head),\n [snippets],\n )\n\n const previousHeadSnippets = useRef<PageData['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 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.publicUrl} />\n <meta name=\"twitter:image\" content={socialImage.publicUrl} />\n <meta name=\"twitter:card\" content={socialImage.publicUrl} />\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(page.id)} />\n\n {snippets\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"],"names":["SCRIPT_TAG","code","cleanup","useEffect","container","document","createElement","innerHTML","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","scripts","nextNode","currentNode","HTMLScriptElement","push","forEach","inlineScript","executableScript","textContent","Array","from","attributes","name","value","setAttribute","parentNode","replaceChild","nodes","childNodes","body","append","node","removeChild","cleanUp","Function","defaultFavicon","mimetype","publicUrl","VALID_TAG_REGEX","VALID_HEAD_ELEMENT_TYPES","snippet","Children","map","parse","element","test","type","key","id","props","page","preview","favicon","meta","title","description","keywords","socialImage","canonicalUrl","isIndexingBlocked","seo","fontFamilyParamValue","fonts","family","variants","replace","join","snippets","useMemo","filter","builderEnabled","liveEnabled","headSnippets","location","SnippetLocation","previousHeadSnippets","useRef","headSnippetsToCleanUp","current","previousSnippet","some","snippetToCleanUp","_Fragment","_jsxs","_jsx","snippetToElement","children","child","includes","createDocumentReference"],"mappings":"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"}
|
package/dist/builder.cjs.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
var controlSerialization = require("./control-serialization.cjs.js");
|
|
4
4
|
require("./descriptors.cjs.js");
|
|
5
|
+
require("./style.cjs.js");
|
|
5
6
|
exports.deserializeControls = controlSerialization.deserializeControls;
|
|
6
7
|
exports.deserializeFunction = controlSerialization.deserializeFunction;
|
|
7
8
|
exports.isSerializedFunction = controlSerialization.isSerializedFunction;
|
package/dist/builder.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
package/dist/builder.es.js
CHANGED
package/dist/builder.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
package/dist/components.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/components.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -164,6 +164,160 @@ function deserializeCheckboxControl(serializedControl) {
|
|
|
164
164
|
const deserializedOptions = deserializeFunction(options);
|
|
165
165
|
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
166
166
|
}
|
|
167
|
+
function serializeResponsiveColorControl(control) {
|
|
168
|
+
const { options } = control;
|
|
169
|
+
if (typeof options !== "function")
|
|
170
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
171
|
+
const serializedOptions = serializeFunction(options);
|
|
172
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
173
|
+
}
|
|
174
|
+
function deserializeResponsiveColorControl(serializedControl) {
|
|
175
|
+
const { options } = serializedControl;
|
|
176
|
+
if (!isSerializedFunction(options))
|
|
177
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
178
|
+
const deserializedOptions = deserializeFunction(options);
|
|
179
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
180
|
+
}
|
|
181
|
+
function serializeNumberControl(control) {
|
|
182
|
+
const { options } = control;
|
|
183
|
+
if (typeof options !== "function")
|
|
184
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
185
|
+
const serializedOptions = serializeFunction(options);
|
|
186
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
187
|
+
}
|
|
188
|
+
function deserializeNumberControl(serializedControl) {
|
|
189
|
+
const { options } = serializedControl;
|
|
190
|
+
if (!isSerializedFunction(options))
|
|
191
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
192
|
+
const deserializedOptions = deserializeFunction(options);
|
|
193
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
194
|
+
}
|
|
195
|
+
function serializeResponsiveIconRadioGroupControl(control) {
|
|
196
|
+
const { options } = control;
|
|
197
|
+
if (typeof options !== "function")
|
|
198
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
199
|
+
const serializedOptions = serializeFunction(options);
|
|
200
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
201
|
+
}
|
|
202
|
+
function deserializeResponsiveIconRadioGroupControl(serializedControl) {
|
|
203
|
+
const { options } = serializedControl;
|
|
204
|
+
if (!isSerializedFunction(options))
|
|
205
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
206
|
+
const deserializedOptions = deserializeFunction(options);
|
|
207
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
208
|
+
}
|
|
209
|
+
function serializeDateControl(control) {
|
|
210
|
+
const { options } = control;
|
|
211
|
+
if (typeof options !== "function")
|
|
212
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
213
|
+
const serializedOptions = serializeFunction(options);
|
|
214
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
215
|
+
}
|
|
216
|
+
function deserializeDateControl(serializedControl) {
|
|
217
|
+
const { options } = serializedControl;
|
|
218
|
+
if (!isSerializedFunction(options))
|
|
219
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
220
|
+
const deserializedOptions = deserializeFunction(options);
|
|
221
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
222
|
+
}
|
|
223
|
+
function serializeLinkControl(control) {
|
|
224
|
+
const { options } = control;
|
|
225
|
+
if (typeof options !== "function")
|
|
226
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
227
|
+
const serializedOptions = serializeFunction(options);
|
|
228
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
229
|
+
}
|
|
230
|
+
function deserializeLinkControl(serializedControl) {
|
|
231
|
+
const { options } = serializedControl;
|
|
232
|
+
if (!isSerializedFunction(options))
|
|
233
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
234
|
+
const deserializedOptions = deserializeFunction(options);
|
|
235
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
236
|
+
}
|
|
237
|
+
function serializeTextInputControl(control) {
|
|
238
|
+
const { options } = control;
|
|
239
|
+
if (typeof options !== "function")
|
|
240
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
241
|
+
const serializedOptions = serializeFunction(options);
|
|
242
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
243
|
+
}
|
|
244
|
+
function deserializeTextInputControl(serializedControl) {
|
|
245
|
+
const { options } = serializedControl;
|
|
246
|
+
if (!isSerializedFunction(options))
|
|
247
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
248
|
+
const deserializedOptions = deserializeFunction(options);
|
|
249
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
250
|
+
}
|
|
251
|
+
function serializeResponsiveSelectControl(control) {
|
|
252
|
+
const { options } = control;
|
|
253
|
+
if (typeof options !== "function")
|
|
254
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
255
|
+
const serializedOptions = serializeFunction(options);
|
|
256
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
257
|
+
}
|
|
258
|
+
function deserializeResponsiveSelectControl(serializedControl) {
|
|
259
|
+
const { options } = serializedControl;
|
|
260
|
+
if (!isSerializedFunction(options))
|
|
261
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
262
|
+
const deserializedOptions = deserializeFunction(options);
|
|
263
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
264
|
+
}
|
|
265
|
+
function serializeResponsiveLengthControl(control) {
|
|
266
|
+
const { options } = control;
|
|
267
|
+
if (typeof options !== "function")
|
|
268
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
269
|
+
const serializedOptions = serializeFunction(options);
|
|
270
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
271
|
+
}
|
|
272
|
+
function deserializeResponsiveLengthControl(serializedControl) {
|
|
273
|
+
const { options } = serializedControl;
|
|
274
|
+
if (!isSerializedFunction(options))
|
|
275
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
276
|
+
const deserializedOptions = deserializeFunction(options);
|
|
277
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
278
|
+
}
|
|
279
|
+
function serializeTextStyleControl(control) {
|
|
280
|
+
const { options } = control;
|
|
281
|
+
if (typeof options !== "function")
|
|
282
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
283
|
+
const serializedOptions = serializeFunction(options);
|
|
284
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
285
|
+
}
|
|
286
|
+
function deserializeTextStyleControl(serializedControl) {
|
|
287
|
+
const { options } = serializedControl;
|
|
288
|
+
if (!isSerializedFunction(options))
|
|
289
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
290
|
+
const deserializedOptions = deserializeFunction(options);
|
|
291
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
292
|
+
}
|
|
293
|
+
function serializeImageControl(control) {
|
|
294
|
+
const { options } = control;
|
|
295
|
+
if (typeof options !== "function")
|
|
296
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
297
|
+
const serializedOptions = serializeFunction(options);
|
|
298
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
299
|
+
}
|
|
300
|
+
function deserializeImageControl(serializedControl) {
|
|
301
|
+
const { options } = serializedControl;
|
|
302
|
+
if (!isSerializedFunction(options))
|
|
303
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
304
|
+
const deserializedOptions = deserializeFunction(options);
|
|
305
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
306
|
+
}
|
|
307
|
+
function serializeRichTextControl(control) {
|
|
308
|
+
const { options } = control;
|
|
309
|
+
if (typeof options !== "function")
|
|
310
|
+
return [__spreadProps(__spreadValues({}, control), { options }), []];
|
|
311
|
+
const serializedOptions = serializeFunction(options);
|
|
312
|
+
return [__spreadProps(__spreadValues({}, control), { options: serializedOptions }), [serializedOptions]];
|
|
313
|
+
}
|
|
314
|
+
function deserializeRichTextControl(serializedControl) {
|
|
315
|
+
const { options } = serializedControl;
|
|
316
|
+
if (!isSerializedFunction(options))
|
|
317
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options });
|
|
318
|
+
const deserializedOptions = deserializeFunction(options);
|
|
319
|
+
return __spreadProps(__spreadValues({}, serializedControl), { options: deserializedOptions });
|
|
320
|
+
}
|
|
167
321
|
function serializeControl(control) {
|
|
168
322
|
switch (control.type) {
|
|
169
323
|
case descriptors.Types.Checkbox:
|
|
@@ -178,8 +332,30 @@ function serializeControl(control) {
|
|
|
178
332
|
return serializeGapXControl(control);
|
|
179
333
|
case descriptors.Types.GapY:
|
|
180
334
|
return serializeGapYControl(control);
|
|
335
|
+
case descriptors.Types.ResponsiveColor:
|
|
336
|
+
return serializeResponsiveColorControl(control);
|
|
181
337
|
case descriptors.Types.ResponsiveNumber:
|
|
182
338
|
return serializeResponsiveNumberControl(control);
|
|
339
|
+
case descriptors.Types.Number:
|
|
340
|
+
return serializeNumberControl(control);
|
|
341
|
+
case descriptors.Types.ResponsiveIconRadioGroup:
|
|
342
|
+
return serializeResponsiveIconRadioGroupControl(control);
|
|
343
|
+
case descriptors.Types.ResponsiveSelect:
|
|
344
|
+
return serializeResponsiveSelectControl(control);
|
|
345
|
+
case descriptors.Types.ResponsiveLength:
|
|
346
|
+
return serializeResponsiveLengthControl(control);
|
|
347
|
+
case descriptors.Types.Date:
|
|
348
|
+
return serializeDateControl(control);
|
|
349
|
+
case descriptors.Types.Link:
|
|
350
|
+
return serializeLinkControl(control);
|
|
351
|
+
case descriptors.Types.TextInput:
|
|
352
|
+
return serializeTextInputControl(control);
|
|
353
|
+
case descriptors.Types.TextStyle:
|
|
354
|
+
return serializeTextStyleControl(control);
|
|
355
|
+
case descriptors.Types.Image:
|
|
356
|
+
return serializeImageControl(control);
|
|
357
|
+
case descriptors.Types.RichText:
|
|
358
|
+
return serializeRichTextControl(control);
|
|
183
359
|
default:
|
|
184
360
|
return [control, []];
|
|
185
361
|
}
|
|
@@ -198,8 +374,30 @@ function deserializeControl(serializedControl) {
|
|
|
198
374
|
return deserializeGapXControl(serializedControl);
|
|
199
375
|
case descriptors.Types.GapY:
|
|
200
376
|
return deserializeGapYControl(serializedControl);
|
|
377
|
+
case descriptors.Types.ResponsiveColor:
|
|
378
|
+
return deserializeResponsiveColorControl(serializedControl);
|
|
201
379
|
case descriptors.Types.ResponsiveNumber:
|
|
202
380
|
return deserializeResponsiveNumberControl(serializedControl);
|
|
381
|
+
case descriptors.Types.Number:
|
|
382
|
+
return deserializeNumberControl(serializedControl);
|
|
383
|
+
case descriptors.Types.ResponsiveIconRadioGroup:
|
|
384
|
+
return deserializeResponsiveIconRadioGroupControl(serializedControl);
|
|
385
|
+
case descriptors.Types.ResponsiveSelect:
|
|
386
|
+
return deserializeResponsiveSelectControl(serializedControl);
|
|
387
|
+
case descriptors.Types.ResponsiveLength:
|
|
388
|
+
return deserializeResponsiveLengthControl(serializedControl);
|
|
389
|
+
case descriptors.Types.Date:
|
|
390
|
+
return deserializeDateControl(serializedControl);
|
|
391
|
+
case descriptors.Types.Link:
|
|
392
|
+
return deserializeLinkControl(serializedControl);
|
|
393
|
+
case descriptors.Types.TextInput:
|
|
394
|
+
return deserializeTextInputControl(serializedControl);
|
|
395
|
+
case descriptors.Types.TextStyle:
|
|
396
|
+
return deserializeTextStyleControl(serializedControl);
|
|
397
|
+
case descriptors.Types.Image:
|
|
398
|
+
return deserializeImageControl(serializedControl);
|
|
399
|
+
case descriptors.Types.RichText:
|
|
400
|
+
return deserializeRichTextControl(serializedControl);
|
|
203
401
|
default:
|
|
204
402
|
return serializedControl;
|
|
205
403
|
}
|