@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.
Files changed (98) hide show
  1. package/controls.js +1 -0
  2. package/dist/Page.cjs.js +10 -3
  3. package/dist/Page.cjs.js.map +1 -1
  4. package/dist/Page.es.js +10 -3
  5. package/dist/Page.es.js.map +1 -1
  6. package/dist/builder.cjs.js +1 -0
  7. package/dist/builder.cjs.js.map +1 -1
  8. package/dist/builder.es.js +1 -0
  9. package/dist/builder.es.js.map +1 -1
  10. package/dist/components.cjs.js +1 -0
  11. package/dist/components.cjs.js.map +1 -1
  12. package/dist/components.es.js +1 -0
  13. package/dist/components.es.js.map +1 -1
  14. package/dist/control-serialization.cjs.js +198 -0
  15. package/dist/control-serialization.cjs.js.map +1 -1
  16. package/dist/control-serialization.es.js +198 -0
  17. package/dist/control-serialization.es.js.map +1 -1
  18. package/dist/controls.cjs.js +7 -0
  19. package/dist/controls.cjs.js.map +1 -0
  20. package/dist/controls.es.js +2 -0
  21. package/dist/controls.es.js.map +1 -0
  22. package/dist/descriptors.cjs.js +3 -1
  23. package/dist/descriptors.cjs.js.map +1 -1
  24. package/dist/descriptors.es.js +3 -1
  25. package/dist/descriptors.es.js.map +1 -1
  26. package/dist/index.cjs.js +320 -153
  27. package/dist/index.cjs.js.map +1 -1
  28. package/dist/index.es.js +313 -146
  29. package/dist/index.es.js.map +1 -1
  30. package/dist/main.cjs.js +1 -0
  31. package/dist/main.cjs.js.map +1 -1
  32. package/dist/main.es.js +1 -0
  33. package/dist/main.es.js.map +1 -1
  34. package/dist/next.cjs.js +1 -0
  35. package/dist/next.cjs.js.map +1 -1
  36. package/dist/next.es.js +1 -0
  37. package/dist/next.es.js.map +1 -1
  38. package/dist/prop-controllers.cjs.js +1 -0
  39. package/dist/prop-controllers.cjs.js.map +1 -1
  40. package/dist/prop-controllers.es.js +1 -0
  41. package/dist/prop-controllers.es.js.map +1 -1
  42. package/dist/react-builder-preview.cjs.js +1 -0
  43. package/dist/react-builder-preview.cjs.js.map +1 -1
  44. package/dist/react-builder-preview.es.js +1 -0
  45. package/dist/react-builder-preview.es.js.map +1 -1
  46. package/dist/react.cjs.js +1 -0
  47. package/dist/react.cjs.js.map +1 -1
  48. package/dist/react.es.js +1 -0
  49. package/dist/react.es.js.map +1 -1
  50. package/dist/style.cjs.js +38 -0
  51. package/dist/style.cjs.js.map +1 -0
  52. package/dist/style.es.js +35 -0
  53. package/dist/style.es.js.map +1 -0
  54. package/dist/types/builder/serialization/control-serialization.d.ts +156 -3
  55. package/dist/types/builder/serialization/control-serialization.d.ts.map +1 -1
  56. package/dist/types/components/builtin/Button/Button.d.ts +2 -1
  57. package/dist/types/components/builtin/Button/Button.d.ts.map +1 -1
  58. package/dist/types/components/builtin/Carousel/Carousel.d.ts.map +1 -1
  59. package/dist/types/components/builtin/Countdown/Countdown.d.ts.map +1 -1
  60. package/dist/types/components/builtin/Form/Form.d.ts.map +1 -1
  61. package/dist/types/components/builtin/Navigation/Navigation.d.ts.map +1 -1
  62. package/dist/types/components/builtin/SocialLinks/SocialLinks.d.ts.map +1 -1
  63. package/dist/types/components/builtin/Text/Text.d.ts.map +1 -1
  64. package/dist/types/components/page/Page.d.ts +4 -0
  65. package/dist/types/components/page/Page.d.ts.map +1 -1
  66. package/dist/types/controls/index.d.ts +2 -0
  67. package/dist/types/controls/index.d.ts.map +1 -0
  68. package/dist/types/controls/style.d.ts +141 -0
  69. package/dist/types/controls/style.d.ts.map +1 -0
  70. package/dist/types/controls/types.d.ts +11 -0
  71. package/dist/types/controls/types.d.ts.map +1 -0
  72. package/dist/types/prop-controllers/descriptors.d.ts +32 -27
  73. package/dist/types/prop-controllers/descriptors.d.ts.map +1 -1
  74. package/dist/types/prop-controllers/index.d.ts +1 -1
  75. package/dist/types/prop-controllers/index.d.ts.map +1 -1
  76. package/dist/types/runtimes/react/controls/style.d.ts +4 -0
  77. package/dist/types/runtimes/react/controls/style.d.ts.map +1 -0
  78. package/dist/types/runtimes/react/controls.d.ts +2 -5
  79. package/dist/types/runtimes/react/controls.d.ts.map +1 -1
  80. package/dist/types/runtimes/react/index.d.ts +2 -3
  81. package/dist/types/runtimes/react/index.d.ts.map +1 -1
  82. package/package.json +10 -3
  83. package/dist/react.cjs2.js +0 -7992
  84. package/dist/react.cjs2.js.map +0 -1
  85. package/dist/react.es2.js +0 -7911
  86. package/dist/react.es2.js.map +0 -1
  87. package/dist/types/controls/select.d.ts +0 -19
  88. package/dist/types/controls/select.d.ts.map +0 -1
  89. package/dist/types/controls.d.ts +0 -4
  90. package/dist/types/controls.d.ts.map +0 -1
  91. package/dist/types/prop-controllers/instances/slot.d.ts +0 -2
  92. package/dist/types/prop-controllers/instances/slot.d.ts.map +0 -1
  93. package/dist/types/runtimes/index.d.ts +0 -43
  94. package/dist/types/runtimes/index.d.ts.map +0 -1
  95. package/dist/types/runtimes/react/react.d.ts +0 -43
  96. package/dist/types/runtimes/react/react.d.ts.map +0 -1
  97. package/dist/types/runtimes/react.d.ts +0 -43
  98. 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
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAMA,aAAa;AAOS,qBAAA;AAAA,EAAEC;AAAAA,EAAMC;AAAAA,GAAwB;AAC1DC,QAAAA,UAAU,MAAM;AACRC,UAAAA,YAAYC,SAASC,cAAc,KAAvB;AAElBF,cAAUG,YAAYN;AAEhBO,UAAAA,SAASH,SAASI,iBAAiBL,WAAWM,WAAWC,YAAhD;AACf,UAAMC,UAA+B,CAAA;AAE9BJ,WAAAA,OAAOK,YAAY;AACxB,UAAIL,OAAOM,uBAAuBC;AAA2BC,gBAAAA,KAAKR,OAAOM,WAApB;AAAA,IACtD;AAEDF,YAAQK,QAAQC,CAAgB,iBAAA;;AACxBC,YAAAA,mBAAmBd,SAASC,cAAcN,UAAvB;AAEzBmB,uBAAiBC,cAAcF,aAAaE;AAC5CC,YAAMC,KAAKJ,aAAaK,UAAxB,EAAoCN,QAAQ,CAAC;AAAA,QAAEO;AAAAA,QAAMC;AAAAA,YAAY;AAC9CC,yBAAAA,aAAaF,MAAMC,KAApC;AAAA,MAAA,CADF;AAIaE,yBAAAA,eAAAA,mBAAYC,aAAaT,kBAAkBD;AAAAA,IAAxD,CARF;AAWMW,UAAAA,QAAQR,MAAMC,KAAKlB,UAAU0B,UAArB;AAELC,aAAAA,KAAKC,OAAO,GAAGH,KAAxB;AAEA,WAAO,MAAM;AACXA,YAAMZ,QAAQgB,CAAQ,SAAA;;AACfN,mBAAAA,eAAAA,mBAAYO,YAAYD;AAAAA,MAA7B,CADF;AAII/B,UAAAA,WAAW;AAAM;AAEfiC,YAAAA,UAAU,IAAIC,SAASlC,OAAb;AAEZ,UAAA;AACK;MAAA,QACP;AAAA,MAED;AAAA,IAAA;AAAA,EAbH,GAeC,CAACD,MAAMC,OAAP,CA1CM;AA4CF,SAAA;AACR;ACjBD,MAAMmC,iBAAiB;AAAA,EACrBC,UAAU;AAAA,EACVC,WACE;AAHmB;AAOvB,MAAMC,kBAAkB;AAExB,MAAMC,2BAA2B,CAC/B,SACA,QACA,QACA,SACA,QACA,UACA,YACA,UAR+B;AAWjC,0BAA0BC,SAAkE;AAC1F,SAAOC,MAAAA,SAASC,IAAIC,eAAAA,WAAMH,QAAQzC,IAAT,GAAgB6C,CAAW,YAAA;AAClD,QAAI,OAAOA,YAAY;AAAiBA,aAAAA;AAEpC,QAAA,CAACN,gBAAgBO,KAAKD,QAAQE,IAA7B;AAA2C,aAAA;AAE1CC,UAAAA,MAAMH,QAAQG,MAAO,GAAEP,QAAQQ,MAAMJ,QAAQG,QAAQP,QAAQQ;AAE5D5C,WAAAA,MAAAA,cAAcwC,QAAQE,MAAM,iCAAKF,QAAQK,QAAb;AAAA,MAAoBF;AAAAA,IAAAA,EAAnC;AAAA,EAAA,CAPf;AASR;AAOoB,cAAA;AAAA,EAAEG;AAAAA,EAAMC,UAAU;AAAA,GAA6B;;AAClEC,UAAQC,IAAI;AAAA,IAAEH;AAAAA,EAAAA,CAAd;AACMI,QAAAA,UAAUJ,WAAKK,KAAKD,YAAVJ,YAAqBf;AAC/B,QAAA;AAAA,IAAEqB;AAAAA,IAAOC;AAAAA,IAAaC;AAAAA,IAAUC;AAAAA,MAAgBT,KAAKK;AACrDK,QAAAA,uBAAuBV,KAAKW,MAC/BnB,IAAI,CAAC;AAAA,IAAEoB;AAAAA,IAAQC;AAAAA,QAAe;AAC7B,WAAQ,GAAED,OAAOE,QAAQ,MAAM,GAArB,KAA6BD,SAASE;GAFvB,EAI1BA,KAAK,GAJqB;AAK7B,QAAMC,WAAWC,MAAAA,QACf,MAAMjB,KAAKgB,SAASE,OAAO5B,CAAYW,YAAAA,UAAUX,QAAQ6B,iBAAiB7B,QAAQ8B,WAA5E,GACN,CAACpB,MAAMC,OAAP,CAFsB;AAIlBoB,QAAAA,eAAeJ,MAAAA,QACnB,MAAMD,SAASE,OAAO5B,CAAAA,YAAWA,QAAQgC,aAAaC,MAAhD,GACN,CAACP,QAAD,CAF0B;AAKtBQ,QAAAA,uBAAuBC,aAAoC,IAA9B;AACnC1E,QAAAA,UAAU,MAAM;;AACR2E,UAAAA,qDAA8CC,yBAAW,IAC5DT,OAAOU,CAAAA,oBAAmBA,gBAAgB9E,WAAW,IAD1B,EAE3BoE,OAAOU,CAAAA,oBAAmB,CAACP,aAAaQ,KAAKvC,aAAWsC,gBAAgB9B,OAAOR,QAAQQ,EAA5D,CAFA;AAI9B4B,0BAAsB7D,QAAQiE,CAAoB,qBAAA;AAChD,UAAIA,iBAAiBhF,WAAW;AAAM;AAEhCiC,YAAAA,UAAU,IAAIC,SAAS8C,iBAAiBhF,OAA9B;AAEZ,UAAA;AACK;MAAA,QACP;AAAA,MAED;AAAA,IAAA,CATH;AAYA0E,yBAAqBG,UAAUN;AAAAA,EAAAA,GAC9B,CAACA,YAAD,CAlBM;AAqBP,yCAAAU,WAAAA,UAAA;AAAA,IAAA,UAAA,CACEC,2BAAA,KAACC,0BAAD;AAAA,MACE,UAAA,CAAAC,2BAAA,IAAA,SAAA;AAAA,QACI,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CADJ,GAWAA,2BAAA,IAAA,QAAA;AAAA,QAAM,KAAI;AAAA,QAAO,MAAM9B,QAAQlB;AAAAA,QAAU,MAAMkB,QAAQjB;AAAAA,MAAAA,CAZzD,GAcGmB,SACC0B,2BAAA,KAAAD,qBAAA;AAAA,QACE,UAAA,CAAAG,2BAAA,IAAA,SAAA;AAAA,UAAQ5B,UAAAA;AAAAA,QAAAA,CAAR,GACA4B,2BAAA,IAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAW,SAAS5B;AAAAA,QAAAA,CAAnC,GACA4B,2BAAA,IAAA,QAAA;AAAA,UAAM,MAAK;AAAA,UAAgB,SAAS5B;AAAAA,QAAAA,CAApC,GACA4B,2BAAA,IAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAO,SAAS5B;AAAAA,QAAAA,CAJjC,CAAA;AAAA,MAAA,CAfJ,GAuBGC,eACCyB,2BAAA,KAAAD,qBAAA;AAAA,QACE,UAAA,CAAAG,2BAAA,IAAA,QAAA;AAAA,UAAM,MAAK;AAAA,UAAc,SAAS3B;AAAAA,QAAAA,CAAlC,GACA2B,2BAAA,IAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAiB,SAAS3B;AAAAA,QAAAA,CAAzC,GACA2B,2BAAA,IAAA,QAAA;AAAA,UAAM,MAAK;AAAA,UAAsB,SAAS3B;AAAAA,QAAAA,CAA1C,GACA2B,2BAAA,IAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAc,SAAS3B;AAAAA,QAAAA,CAJxC,CAAA;AAAA,MAAA,CAxBJ,GAgCGC,YAAY0B,2BAAA,IAAA,QAAA;AAAA,QAAM,MAAK;AAAA,QAAW,SAAS1B;AAAAA,MAAAA,CAhC9C,GAkCGC,eACCuB,2BAAA,KAAAD,qBAAA;AAAA,QACE,UAAA,CAAAG,2BAAA,IAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAW,SAASzB,YAAYtB;AAAAA,QAAAA,CAA/C,GACA+C,2BAAA,IAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAgB,SAASzB,YAAYtB;AAAAA,QAAAA,CAApD,GACA+C,2BAAA,IAAA,QAAA;AAAA,UAAM,MAAK;AAAA,UAAgB,SAASzB,YAAYtB;AAAAA,QAAAA,CAAhD,GACA+C,2BAAA,IAAA,QAAA;AAAA,UAAM,MAAK;AAAA,UAAe,SAASzB,YAAYtB;AAAAA,QAAAA,CAA/C,GACA+C,2BAAA,IAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAQ,SAASzB,YAAYtB;AAAAA,QAAAA,CAL9C,CAAA;AAAA,MAAA,CAAA,GASDuB,yBAAyB,qCACxBqB,WAAAA,UAAA;AAAA,QACE,yCAAA,QAAA;AAAA,UACE,KAAI;AAAA,UACJ,MAAO,2CAA0CrB;AAAAA,QAAAA,CAFnD;AAAA,MADF,CAAA,GAQDW,aAAa7B,IAAI2C,gBAAjB,EAAmC3C,IAAI4C,CACtC7C,aAAAA,eAASC,IAAI4C,UAAUC,CAAS,UAAA;AAC9B,YAAI,OAAOA,UAAU;AAAiBA,iBAAAA;AAElChD,YAAAA,yBAAyBiD,SAASD,MAAMzC,IAAxC;AAAgEyC,iBAAAA;AAE7D,eAAA;AAAA,MALT,CAAA,CADD,CArDH;AAAA,IAAA,CADF,GAiEEH,2BAAA,IAACK,yBAAD;AAAA,MAAmB,mBAAmBC,UAAAA,wBAAwBxC,KAAKF,EAAN;AAAA,IAjE/D,CAAA,GAmEGkB,SACEE,OAAO5B,CAAWA,YAAAA,QAAQgC,aAAaC,MAAAA,EACvC/B,IAAIF,CACH,YAAA4C,2BAAAA,IAAC,aAAD;AAAA,MAA8B,MAAM5C,QAAQzC;AAAAA,MAAM,SAASyC,QAAQxC;AAAAA,IAAAA,GAAjDwC,QAAQQ,EAA1B,CAHH,CAnEH;AAAA,EAAA,CADF;AA2ED;;"}
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
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAMA,aAAa;AAOS,qBAAA;AAAA,EAAEC;AAAAA,EAAMC;AAAAA,GAAwB;AAC1DC,YAAU,MAAM;AACRC,UAAAA,YAAYC,SAASC,cAAc,KAAvB;AAElBF,cAAUG,YAAYN;AAEhBO,UAAAA,SAASH,SAASI,iBAAiBL,WAAWM,WAAWC,YAAhD;AACf,UAAMC,UAA+B,CAAA;AAE9BJ,WAAAA,OAAOK,YAAY;AACxB,UAAIL,OAAOM,uBAAuBC;AAA2BC,gBAAAA,KAAKR,OAAOM,WAApB;AAAA,IACtD;AAEDF,YAAQK,QAAQC,CAAgB,iBAAA;;AACxBC,YAAAA,mBAAmBd,SAASC,cAAcN,UAAvB;AAEzBmB,uBAAiBC,cAAcF,aAAaE;AAC5CC,YAAMC,KAAKJ,aAAaK,UAAxB,EAAoCN,QAAQ,CAAC;AAAA,QAAEO;AAAAA,QAAMC;AAAAA,YAAY;AAC9CC,yBAAAA,aAAaF,MAAMC,KAApC;AAAA,MAAA,CADF;AAIaE,yBAAAA,eAAAA,mBAAYC,aAAaT,kBAAkBD;AAAAA,IAAxD,CARF;AAWMW,UAAAA,QAAQR,MAAMC,KAAKlB,UAAU0B,UAArB;AAELC,aAAAA,KAAKC,OAAO,GAAGH,KAAxB;AAEA,WAAO,MAAM;AACXA,YAAMZ,QAAQgB,CAAQ,SAAA;;AACfN,mBAAAA,eAAAA,mBAAYO,YAAYD;AAAAA,MAA7B,CADF;AAII/B,UAAAA,WAAW;AAAM;AAEfiC,YAAAA,UAAU,IAAIC,SAASlC,OAAb;AAEZ,UAAA;AACK;MAAA,QACP;AAAA,MAED;AAAA,IAAA;AAAA,EAbH,GAeC,CAACD,MAAMC,OAAP,CA1CM;AA4CF,SAAA;AACR;ACbD,MAAMmC,iBAAiB;AAAA,EACrBC,UAAU;AAAA,EACVC,WACE;AAHmB;AAOvB,MAAMC,kBAAkB;AAExB,MAAMC,2BAA2B,CAC/B,SACA,QACA,QACA,SACA,QACA,UACA,YACA,UAR+B;AAWjC,0BAA0BC,SAAkE;AAC1F,SAAOC,SAASC,IAAIC,MAAMH,QAAQzC,IAAT,GAAgB6C,CAAW,YAAA;AAClD,QAAI,OAAOA,YAAY;AAAiBA,aAAAA;AAEpC,QAAA,CAACN,gBAAgBO,KAAKD,QAAQE,IAA7B;AAA2C,aAAA;AAE1CC,UAAAA,MAAMH,QAAQG,MAAO,GAAEP,QAAQQ,MAAMJ,QAAQG,QAAQP,QAAQQ;AAE5D5C,WAAAA,cAAcwC,QAAQE,MAAM,iCAAKF,QAAQK,QAAb;AAAA,MAAoBF;AAAAA,IAAAA,EAAnC;AAAA,EAAA,CAPf;AASR;AAOoB,cAAA;AAAA,EAAEG;AAAAA,EAAMC,UAAU;AAAA,GAA6B;;AAC5DC,QAAAA,UAAUF,WAAKG,KAAKD,YAAVF,YAAqBf;AAC/B,QAAA;AAAA,IAAEmB;AAAAA,IAAOC;AAAAA,IAAaC;AAAAA,IAAUC;AAAAA,MAAgBP,KAAKG;AACrD,QAAA;AAAA,IAAEK;AAAAA,IAAcC;AAAAA,MAAsBT,KAAKU;AAC3CC,QAAAA,uBAAuBX,KAAKY,MAC/BpB,IAAI,CAAC;AAAA,IAAEqB;AAAAA,IAAQC;AAAAA,QAAe;AAC7B,WAAQ,GAAED,OAAOE,QAAQ,MAAM,GAArB,KAA6BD,SAASE;GAFvB,EAI1BA,KAAK,GAJqB;AAK7B,QAAMC,WAAWC,QACf,MAAMlB,KAAKiB,SAASE,OAAO7B,CAAYW,YAAAA,UAAUX,QAAQ8B,iBAAiB9B,QAAQ+B,WAA5E,GACN,CAACrB,MAAMC,OAAP,CAFsB;AAIlBqB,QAAAA,eAAeJ,QACnB,MAAMD,SAASE,OAAO7B,CAAAA,YAAWA,QAAQiC,aAAaC,MAAhD,GACN,CAACP,QAAD,CAF0B;AAKtBQ,QAAAA,uBAAuBC,OAAoC,IAA9B;AACnC3E,YAAU,MAAM;;AACR4E,UAAAA,qDAA8CC,yBAAW,IAC5DT,OAAOU,CAAAA,oBAAmBA,gBAAgB/E,WAAW,IAD1B,EAE3BqE,OAAOU,CAAAA,oBAAmB,CAACP,aAAaQ,KAAKxC,aAAWuC,gBAAgB/B,OAAOR,QAAQQ,EAA5D,CAFA;AAI9B6B,0BAAsB9D,QAAQkE,CAAoB,qBAAA;AAChD,UAAIA,iBAAiBjF,WAAW;AAAM;AAEhCiC,YAAAA,UAAU,IAAIC,SAAS+C,iBAAiBjF,OAA9B;AAEZ,UAAA;AACK;MAAA,QACP;AAAA,MAED;AAAA,IAAA,CATH;AAYA2E,yBAAqBG,UAAUN;AAAAA,EAAAA,GAC9B,CAACA,YAAD,CAlBM;AAqBP,8BAAAU,UAAA;AAAA,IAAA,UAAA,CACEC,qBAAC,MAAD;AAAA,MACE,UAAA,CAAAC,oBAAA,SAAA;AAAA,QACI,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CADJ,GAWAA,oBAAA,QAAA;AAAA,QAAM,KAAI;AAAA,QAAO,MAAMhC,QAAQhB;AAAAA,QAAU,MAAMgB,QAAQf;AAAAA,MAAAA,CAZzD,GAcGqB,gBAAgB0B,oBAAA,QAAA;AAAA,QAAM,KAAI;AAAA,QAAY,MAAM1B;AAAAA,MAAAA,CAd/C,GAgBGC,qBAAqByB,oBAAA,QAAA;AAAA,QAAM,MAAK;AAAA,QAAS,SAAQ;AAAA,MAAA,CAhBpD,GAkBG9B,SACC6B,qBAAAD,UAAA;AAAA,QACE,UAAA,CAAAE,oBAAA,SAAA;AAAA,UAAQ9B,UAAAA;AAAAA,QAAAA,CAAR,GACA8B,oBAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAW,SAAS9B;AAAAA,QAAAA,CAAnC,GACA8B,oBAAA,QAAA;AAAA,UAAM,MAAK;AAAA,UAAgB,SAAS9B;AAAAA,QAAAA,CAApC,GACA8B,oBAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAO,SAAS9B;AAAAA,QAAAA,CAJjC,CAAA;AAAA,MAAA,CAnBJ,GA2BGC,eACC4B,qBAAAD,UAAA;AAAA,QACE,UAAA,CAAAE,oBAAA,QAAA;AAAA,UAAM,MAAK;AAAA,UAAc,SAAS7B;AAAAA,QAAAA,CAAlC,GACA6B,oBAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAiB,SAAS7B;AAAAA,QAAAA,CAAzC,GACA6B,oBAAA,QAAA;AAAA,UAAM,MAAK;AAAA,UAAsB,SAAS7B;AAAAA,QAAAA,CAA1C,GACA6B,oBAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAc,SAAS7B;AAAAA,QAAAA,CAJxC,CAAA;AAAA,MAAA,CA5BJ,GAoCGC,YAAY4B,oBAAA,QAAA;AAAA,QAAM,MAAK;AAAA,QAAW,SAAS5B;AAAAA,MAAAA,CApC9C,GAsCGC,eACC0B,qBAAAD,UAAA;AAAA,QACE,UAAA,CAAAE,oBAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAW,SAAS3B,YAAYpB;AAAAA,QAAAA,CAA/C,GACA+C,oBAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAgB,SAAS3B,YAAYpB;AAAAA,QAAAA,CAApD,GACA+C,oBAAA,QAAA;AAAA,UAAM,MAAK;AAAA,UAAgB,SAAS3B,YAAYpB;AAAAA,QAAAA,CAAhD,GACA+C,oBAAA,QAAA;AAAA,UAAM,MAAK;AAAA,UAAe,SAAS3B,YAAYpB;AAAAA,QAAAA,CAA/C,GACA+C,oBAAA,QAAA;AAAA,UAAM,UAAS;AAAA,UAAQ,SAAS3B,YAAYpB;AAAAA,QAAAA,CAL9C,CAAA;AAAA,MAAA,CAAA,GASDwB,yBAAyB,0BACxBqB,UAAA;AAAA,QACE,8BAAA,QAAA;AAAA,UACE,KAAI;AAAA,UACJ,MAAO,2CAA0CrB;AAAAA,QAAAA,CAFnD;AAAA,MADF,CAAA,GAQDW,aAAa9B,IAAI2C,gBAAjB,EAAmC3C,IAAI4C,CACtC7C,aAAAA,SAASC,IAAI4C,UAAUC,CAAS,UAAA;AAC9B,YAAI,OAAOA,UAAU;AAAiBA,iBAAAA;AAElChD,YAAAA,yBAAyBiD,SAASD,MAAMzC,IAAxC;AAAgEyC,iBAAAA;AAE7D,eAAA;AAAA,MALT,CAAA,CADD,CAzDH;AAAA,IAAA,CADF,GAqEEH,oBAAC,mBAAD;AAAA,MAAmB,mBAAmBK,wBAAwBvC,KAAKF,EAAN;AAAA,IArE/D,CAAA,GAuEGmB,SACEE,OAAO7B,CAAWA,YAAAA,QAAQiC,aAAaC,MAAAA,EACvChC,IAAIF,CACH,YAAA4C,oBAAC,aAAD;AAAA,MAA8B,MAAM5C,QAAQzC;AAAAA,MAAM,SAASyC,QAAQxC;AAAAA,IAAAA,GAAjDwC,QAAQQ,EAA1B,CAHH,CAvEH;AAAA,EAAA,CADF;AA+ED;;"}
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"builder.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
1
+ {"version":3,"file":"builder.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1,3 +1,4 @@
1
1
  export { d as deserializeControls, b as deserializeFunction, i as isSerializedFunction, s as serializeControls, a as serializeFunction } from "./control-serialization.es.js";
2
2
  import "./descriptors.es.js";
3
+ import "./style.es.js";
3
4
  //# sourceMappingURL=builder.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"builder.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -10,6 +10,7 @@ require("redux");
10
10
  require("redux-thunk");
11
11
  require("./actions.cjs.js");
12
12
  require("./descriptors.cjs.js");
13
+ require("./style.cjs.js");
13
14
  require("styled-components");
14
15
  require("framer-motion");
15
16
  require("@emotion/css");
@@ -1 +1 @@
1
- {"version":3,"file":"components.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"components.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -8,6 +8,7 @@ import "redux";
8
8
  import "redux-thunk";
9
9
  import "./actions.es.js";
10
10
  import "./descriptors.es.js";
11
+ import "./style.es.js";
11
12
  import "styled-components";
12
13
  import "framer-motion";
13
14
  import "@emotion/css";
@@ -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
  }