@makeswift/runtime 0.0.0-f94dde1 → 0.0.3

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 (227) hide show
  1. package/controls.js +1 -0
  2. package/dist/Page.cjs.js +222 -0
  3. package/dist/Page.cjs.js.map +1 -0
  4. package/dist/Page.es.js +216 -0
  5. package/dist/Page.es.js.map +1 -0
  6. package/dist/actions.cjs.js +30 -1
  7. package/dist/actions.cjs.js.map +1 -1
  8. package/dist/actions.es.js +26 -2
  9. package/dist/actions.es.js.map +1 -1
  10. package/dist/box-models.cjs.js +2 -0
  11. package/dist/box-models.cjs.js.map +1 -1
  12. package/dist/box-models.es.js +2 -0
  13. package/dist/box-models.es.js.map +1 -1
  14. package/dist/builder.cjs.js +2 -0
  15. package/dist/builder.cjs.js.map +1 -1
  16. package/dist/builder.es.js +2 -1
  17. package/dist/builder.es.js.map +1 -1
  18. package/dist/components.cjs.js +54 -36
  19. package/dist/components.cjs.js.map +1 -1
  20. package/dist/components.es.js +15 -7
  21. package/dist/components.es.js.map +1 -1
  22. package/dist/constants.cjs.js +96 -1
  23. package/dist/constants.cjs.js.map +1 -1
  24. package/dist/constants.es.js +96 -1
  25. package/dist/constants.es.js.map +1 -1
  26. package/dist/control-serialization.cjs.js +335 -5
  27. package/dist/control-serialization.cjs.js.map +1 -1
  28. package/dist/control-serialization.es.js +335 -6
  29. package/dist/control-serialization.es.js.map +1 -1
  30. package/dist/controls.cjs.js +7 -0
  31. package/dist/controls.cjs.js.map +1 -0
  32. package/dist/controls.es.js +2 -0
  33. package/dist/controls.es.js.map +1 -0
  34. package/dist/descriptors.cjs.js +18 -1
  35. package/dist/descriptors.cjs.js.map +1 -1
  36. package/dist/descriptors.es.js +15 -2
  37. package/dist/descriptors.es.js.map +1 -1
  38. package/dist/{react.cjs2.js → index.cjs.js} +2893 -748
  39. package/dist/index.cjs.js.map +1 -0
  40. package/dist/{react.es2.js → index.es.js} +2836 -693
  41. package/dist/index.es.js.map +1 -0
  42. package/dist/instances.cjs.js +17 -0
  43. package/dist/instances.cjs.js.map +1 -1
  44. package/dist/instances.es.js +17 -1
  45. package/dist/instances.es.js.map +1 -1
  46. package/dist/main.cjs.js +10 -0
  47. package/dist/main.cjs.js.map +1 -1
  48. package/dist/main.es.js +6 -1
  49. package/dist/main.es.js.map +1 -1
  50. package/dist/next.cjs.js +63 -21
  51. package/dist/next.cjs.js.map +1 -1
  52. package/dist/next.es.js +61 -20
  53. package/dist/next.es.js.map +1 -1
  54. package/dist/prop-controllers.cjs.js +2 -0
  55. package/dist/prop-controllers.cjs.js.map +1 -1
  56. package/dist/prop-controllers.es.js +2 -1
  57. package/dist/prop-controllers.es.js.map +1 -1
  58. package/dist/react-builder-preview.cjs.js +24 -35
  59. package/dist/react-builder-preview.cjs.js.map +1 -1
  60. package/dist/react-builder-preview.es.js +23 -34
  61. package/dist/react-builder-preview.es.js.map +1 -1
  62. package/dist/react-page.cjs.js +263 -0
  63. package/dist/react-page.cjs.js.map +1 -0
  64. package/dist/react-page.es.js +241 -0
  65. package/dist/react-page.es.js.map +1 -0
  66. package/dist/react.cjs.js +21 -12
  67. package/dist/react.cjs.js.map +1 -1
  68. package/dist/react.es.js +14 -7
  69. package/dist/react.es.js.map +1 -1
  70. package/dist/style.cjs.js +38 -0
  71. package/dist/style.cjs.js.map +1 -0
  72. package/dist/style.es.js +35 -0
  73. package/dist/style.es.js.map +1 -0
  74. package/dist/types/api/constants.d.ts.map +1 -1
  75. package/dist/types/api/generated/graphql.d.ts +59 -0
  76. package/dist/types/api/generated/graphql.d.ts.map +1 -1
  77. package/dist/types/api/react.d.ts +26 -4
  78. package/dist/types/api/react.d.ts.map +1 -1
  79. package/dist/types/api/types.d.ts +2 -2
  80. package/dist/types/api/types.d.ts.map +1 -1
  81. package/dist/types/builder/serialization/control-serialization.d.ts +274 -7
  82. package/dist/types/builder/serialization/control-serialization.d.ts.map +1 -1
  83. package/dist/types/builder/serialization/function-serialization.d.ts +1 -0
  84. package/dist/types/builder/serialization/function-serialization.d.ts.map +1 -1
  85. package/dist/types/components/builtin/Box/Box.d.ts +2 -2
  86. package/dist/types/components/builtin/Box/Box.d.ts.map +1 -1
  87. package/dist/types/components/builtin/Button/Button.d.ts +7 -6
  88. package/dist/types/components/builtin/Button/Button.d.ts.map +1 -1
  89. package/dist/types/components/builtin/Carousel/Carousel.d.ts +6 -5
  90. package/dist/types/components/builtin/Carousel/Carousel.d.ts.map +1 -1
  91. package/dist/types/components/builtin/Countdown/Countdown.d.ts +6 -5
  92. package/dist/types/components/builtin/Countdown/Countdown.d.ts.map +1 -1
  93. package/dist/types/components/builtin/Divider/Divider.d.ts +4 -3
  94. package/dist/types/components/builtin/Divider/Divider.d.ts.map +1 -1
  95. package/dist/types/components/builtin/Embed/Embed.d.ts +2 -2
  96. package/dist/types/components/builtin/Embed/Embed.d.ts.map +1 -1
  97. package/dist/types/components/builtin/Form/Form.d.ts +42 -0
  98. package/dist/types/components/builtin/Form/Form.d.ts.map +1 -0
  99. package/dist/types/components/builtin/Form/components/Field/components/Checkbox/index.d.ts +15 -0
  100. package/dist/types/components/builtin/Form/components/Field/components/Checkbox/index.d.ts.map +1 -0
  101. package/dist/types/components/builtin/Form/components/Field/components/CheckboxTableField/index.d.ts +15 -0
  102. package/dist/types/components/builtin/Form/components/Field/components/CheckboxTableField/index.d.ts.map +1 -0
  103. package/dist/types/components/builtin/Form/components/Field/components/EmailTableField/index.d.ts +11 -0
  104. package/dist/types/components/builtin/Form/components/Field/components/EmailTableField/index.d.ts.map +1 -0
  105. package/dist/types/components/builtin/Form/components/Field/components/Input/index.d.ts +14 -0
  106. package/dist/types/components/builtin/Form/components/Field/components/Input/index.d.ts.map +1 -0
  107. package/dist/types/components/builtin/Form/components/Field/components/Label/index.d.ts +16 -0
  108. package/dist/types/components/builtin/Form/components/Field/components/Label/index.d.ts.map +1 -0
  109. package/dist/types/components/builtin/Form/components/Field/components/LongTextTableField/index.d.ts +10 -0
  110. package/dist/types/components/builtin/Form/components/Field/components/LongTextTableField/index.d.ts.map +1 -0
  111. package/dist/types/components/builtin/Form/components/Field/components/MultipleSelectTableField/index.d.ts +23 -0
  112. package/dist/types/components/builtin/Form/components/Field/components/MultipleSelectTableField/index.d.ts.map +1 -0
  113. package/dist/types/components/builtin/Form/components/Field/components/NumberTableField/index.d.ts +11 -0
  114. package/dist/types/components/builtin/Form/components/Field/components/NumberTableField/index.d.ts.map +1 -0
  115. package/dist/types/components/builtin/Form/components/Field/components/PhoneNumberTableField/index.d.ts +11 -0
  116. package/dist/types/components/builtin/Form/components/Field/components/PhoneNumberTableField/index.d.ts.map +1 -0
  117. package/dist/types/components/builtin/Form/components/Field/components/PlaceholderTableField/index.d.ts +3 -0
  118. package/dist/types/components/builtin/Form/components/Field/components/PlaceholderTableField/index.d.ts.map +1 -0
  119. package/dist/types/components/builtin/Form/components/Field/components/RadioButton/index.d.ts +17 -0
  120. package/dist/types/components/builtin/Form/components/Field/components/RadioButton/index.d.ts.map +1 -0
  121. package/dist/types/components/builtin/Form/components/Field/components/SingleLineTextTableField/index.d.ts +11 -0
  122. package/dist/types/components/builtin/Form/components/Field/components/SingleLineTextTableField/index.d.ts.map +1 -0
  123. package/dist/types/components/builtin/Form/components/Field/components/SingleSelectTableField/components/TableColumnRadioButtonGroup/index.d.ts +23 -0
  124. package/dist/types/components/builtin/Form/components/Field/components/SingleSelectTableField/components/TableColumnRadioButtonGroup/index.d.ts.map +1 -0
  125. package/dist/types/components/builtin/Form/components/Field/components/SingleSelectTableField/components/TableColumnSingleSelect/index.d.ts +19 -0
  126. package/dist/types/components/builtin/Form/components/Field/components/SingleSelectTableField/components/TableColumnSingleSelect/index.d.ts.map +1 -0
  127. package/dist/types/components/builtin/Form/components/Field/components/SingleSelectTableField/index.d.ts +24 -0
  128. package/dist/types/components/builtin/Form/components/Field/components/SingleSelectTableField/index.d.ts.map +1 -0
  129. package/dist/types/components/builtin/Form/components/Field/components/TextArea/index.d.ts +13 -0
  130. package/dist/types/components/builtin/Form/components/Field/components/TextArea/index.d.ts.map +1 -0
  131. package/dist/types/components/builtin/Form/components/Field/components/URLTableField/index.d.ts +11 -0
  132. package/dist/types/components/builtin/Form/components/Field/components/URLTableField/index.d.ts.map +1 -0
  133. package/dist/types/components/builtin/Form/components/Field/index.d.ts +19 -0
  134. package/dist/types/components/builtin/Form/components/Field/index.d.ts.map +1 -0
  135. package/dist/types/components/builtin/Form/components/Field/services/cssField.d.ts +11 -0
  136. package/dist/types/components/builtin/Form/components/Field/services/cssField.d.ts.map +1 -0
  137. package/dist/types/components/builtin/Form/components/Placeholder/index.d.ts +9 -0
  138. package/dist/types/components/builtin/Form/components/Placeholder/index.d.ts.map +1 -0
  139. package/dist/types/components/builtin/Form/components/Spinner/index.d.ts +3 -0
  140. package/dist/types/components/builtin/Form/components/Spinner/index.d.ts.map +1 -0
  141. package/dist/types/components/builtin/Form/context/FormContext.d.ts +33 -0
  142. package/dist/types/components/builtin/Form/context/FormContext.d.ts.map +1 -0
  143. package/dist/types/components/builtin/Form/index.d.ts +2 -0
  144. package/dist/types/components/builtin/Form/index.d.ts.map +1 -0
  145. package/dist/types/components/builtin/Image/Image.d.ts.map +1 -1
  146. package/dist/types/components/builtin/Navigation/Navigation.d.ts +6 -5
  147. package/dist/types/components/builtin/Navigation/Navigation.d.ts.map +1 -1
  148. package/dist/types/components/builtin/Navigation/components/MobileMenu/index.d.ts +4 -3
  149. package/dist/types/components/builtin/Navigation/components/MobileMenu/index.d.ts.map +1 -1
  150. package/dist/types/components/builtin/SocialLinks/SocialLinks.d.ts +5 -4
  151. package/dist/types/components/builtin/SocialLinks/SocialLinks.d.ts.map +1 -1
  152. package/dist/types/components/builtin/Text/Text.d.ts +2 -2
  153. package/dist/types/components/builtin/Text/Text.d.ts.map +1 -1
  154. package/dist/types/components/builtin/Text/components/RichTextEditor/components/Block/index.d.ts +2 -13
  155. package/dist/types/components/builtin/Text/components/RichTextEditor/components/Block/index.d.ts.map +1 -1
  156. package/dist/types/components/builtin/Video/Video.d.ts +15 -0
  157. package/dist/types/components/builtin/Video/Video.d.ts.map +1 -0
  158. package/dist/types/components/builtin/Video/index.d.ts +2 -0
  159. package/dist/types/components/builtin/Video/index.d.ts.map +1 -0
  160. package/dist/types/components/builtin/index.d.ts +1 -0
  161. package/dist/types/components/builtin/index.d.ts.map +1 -1
  162. package/dist/types/components/hooks/index.d.ts +1 -0
  163. package/dist/types/components/hooks/index.d.ts.map +1 -1
  164. package/dist/types/components/hooks/useTable.d.ts +66 -0
  165. package/dist/types/components/hooks/useTable.d.ts.map +1 -0
  166. package/dist/types/components/hooks/useTableFormFieldRefs.d.ts +8 -0
  167. package/dist/types/components/hooks/useTableFormFieldRefs.d.ts.map +1 -0
  168. package/dist/types/components/index.d.ts +2 -0
  169. package/dist/types/components/index.d.ts.map +1 -1
  170. package/dist/types/components/page/BodySnippet.d.ts +7 -0
  171. package/dist/types/components/page/BodySnippet.d.ts.map +1 -0
  172. package/dist/types/components/page/Page.d.ts +47 -0
  173. package/dist/types/components/page/Page.d.ts.map +1 -0
  174. package/dist/types/components/page/index.d.ts +2 -0
  175. package/dist/types/components/page/index.d.ts.map +1 -0
  176. package/dist/types/components/shared/BackgroundsContainer/components/Backgrounds/index.d.ts.map +1 -1
  177. package/dist/types/components/shared/FallbackComponent/FallbackComponent.d.ts +7 -0
  178. package/dist/types/components/shared/FallbackComponent/FallbackComponent.d.ts.map +1 -0
  179. package/dist/types/components/shared/FallbackComponent/index.d.ts +2 -0
  180. package/dist/types/components/shared/FallbackComponent/index.d.ts.map +1 -0
  181. package/dist/types/components/utils/placeholders.d.ts +7 -0
  182. package/dist/types/components/utils/placeholders.d.ts.map +1 -1
  183. package/dist/types/components/utils/queries.d.ts +1 -0
  184. package/dist/types/components/utils/queries.d.ts.map +1 -1
  185. package/dist/types/components/utils/responsive-style.d.ts +9 -0
  186. package/dist/types/components/utils/responsive-style.d.ts.map +1 -0
  187. package/dist/types/components/utils/types.d.ts +1 -2
  188. package/dist/types/components/utils/types.d.ts.map +1 -1
  189. package/dist/types/controls/index.d.ts +2 -0
  190. package/dist/types/controls/index.d.ts.map +1 -0
  191. package/dist/types/controls/style.d.ts +141 -0
  192. package/dist/types/controls/style.d.ts.map +1 -0
  193. package/dist/types/controls/types.d.ts +11 -0
  194. package/dist/types/controls/types.d.ts.map +1 -0
  195. package/dist/types/index.d.ts +2 -1
  196. package/dist/types/index.d.ts.map +1 -1
  197. package/dist/types/next.d.ts +7 -4
  198. package/dist/types/next.d.ts.map +1 -1
  199. package/dist/types/prop-controllers/descriptors.d.ts +82 -46
  200. package/dist/types/prop-controllers/descriptors.d.ts.map +1 -1
  201. package/dist/types/prop-controllers/index.d.ts +3 -3
  202. package/dist/types/prop-controllers/index.d.ts.map +1 -1
  203. package/dist/types/prop-controllers/instances.d.ts +36 -4
  204. package/dist/types/prop-controllers/instances.d.ts.map +1 -1
  205. package/dist/types/react.d.ts +1 -1
  206. package/dist/types/react.d.ts.map +1 -1
  207. package/dist/types/runtimes/react/controls/style.d.ts +4 -0
  208. package/dist/types/runtimes/react/controls/style.d.ts.map +1 -0
  209. package/dist/types/runtimes/react/controls.d.ts +7 -0
  210. package/dist/types/runtimes/react/controls.d.ts.map +1 -0
  211. package/dist/types/runtimes/react/index.d.ts +44 -0
  212. package/dist/types/runtimes/react/index.d.ts.map +1 -0
  213. package/dist/types/state/actions.d.ts +36 -1
  214. package/dist/types/state/actions.d.ts.map +1 -1
  215. package/dist/types/state/modules/box-models.d.ts.map +1 -1
  216. package/dist/types/state/modules/read-only-documents.d.ts +8 -4
  217. package/dist/types/state/modules/read-only-documents.d.ts.map +1 -1
  218. package/dist/types/state/modules/read-write-documents.d.ts +1 -1
  219. package/dist/types/state/modules/read-write-documents.d.ts.map +1 -1
  220. package/dist/types/state/react-builder-preview.d.ts.map +1 -1
  221. package/dist/types/state/react-page.d.ts +4 -3
  222. package/dist/types/state/react-page.d.ts.map +1 -1
  223. package/package.json +22 -12
  224. package/dist/react.cjs2.js.map +0 -1
  225. package/dist/react.es2.js.map +0 -1
  226. package/dist/types/runtimes/react.d.ts +0 -36
  227. package/dist/types/runtimes/react.d.ts.map +0 -1
package/controls.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('./dist/controls.cjs')
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var React = require("react");
22
+ var parse = require("html-react-parser");
23
+ var Head = require("next/head");
24
+ var index = require("./index.cjs.js");
25
+ var reactPage = require("./react-page.cjs.js");
26
+ var jsxRuntime = require("react/jsx-runtime");
27
+ function _interopDefaultLegacy(e) {
28
+ return e && typeof e === "object" && "default" in e ? e : { "default": e };
29
+ }
30
+ var parse__default = /* @__PURE__ */ _interopDefaultLegacy(parse);
31
+ var Head__default = /* @__PURE__ */ _interopDefaultLegacy(Head);
32
+ const SCRIPT_TAG = "script";
33
+ function BodySnippet({
34
+ code,
35
+ cleanup
36
+ }) {
37
+ React.useEffect(() => {
38
+ const container = document.createElement("div");
39
+ container.innerHTML = code;
40
+ const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT);
41
+ const scripts = [];
42
+ while (walker.nextNode()) {
43
+ if (walker.currentNode instanceof HTMLScriptElement)
44
+ scripts.push(walker.currentNode);
45
+ }
46
+ scripts.forEach((inlineScript) => {
47
+ var _a;
48
+ const executableScript = document.createElement(SCRIPT_TAG);
49
+ executableScript.textContent = inlineScript.textContent;
50
+ Array.from(inlineScript.attributes).forEach(({
51
+ name,
52
+ value
53
+ }) => {
54
+ executableScript.setAttribute(name, value);
55
+ });
56
+ (_a = inlineScript.parentNode) == null ? void 0 : _a.replaceChild(executableScript, inlineScript);
57
+ });
58
+ const nodes = Array.from(container.childNodes);
59
+ document.body.append(...nodes);
60
+ return () => {
61
+ nodes.forEach((node) => {
62
+ var _a;
63
+ (_a = node.parentNode) == null ? void 0 : _a.removeChild(node);
64
+ });
65
+ if (cleanup == null)
66
+ return;
67
+ const cleanUp = new Function(cleanup);
68
+ try {
69
+ cleanUp();
70
+ } catch {
71
+ }
72
+ };
73
+ }, [code, cleanup]);
74
+ return null;
75
+ }
76
+ const defaultFavicon = {
77
+ mimetype: "image/png",
78
+ publicUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABcRAAAXEQHKJvM/AAABjElEQVRYhc2XzU3EMBCFB8TddAAXn6EE6GCpgNABZ1/IXnymBOgAOmA7YM8+ABVsXEHQQFaKQryeN3Yk3ilKJtEnv/nLUd/3pFG0riGi88yrnQn+UfJ5FUi0riWiB2H4nQn+KRd0DFP8agXEfkqCYJBoHdtxIQxfm+DfFgEhoith3NYE30o/qgGR2BJB+xY7kdYEL8oNFUi0jiFMJuxVWrJqEMFxsyUNCsE6AeNztvBp7aJ143vXksoRnwhYtmNdSoIQa6RlO9YXEWW7KgoCleOgxgTf1QZBT+RZ2lXFING6UxCCq+ceeUE8fYdknY599v9sJvzGBP+yCEgC7GPmETc0OJ+0awAlkhe2pAbIXAeFZ8xe2g2Nk3c3ub0xwWt6zY9qbmiqGVMbZK21ZC/YmhlbeBMTzZNDQqcvDb1kM1x32iqZSt1HaqukfKvq34BAOTLsrH+ETNmUkKHHA+428RgeclPVWozeSyAI2EdWB34jtqXNTAySOY3i/KgFIlqOa4GkFmBegorzg4joG07he/M7zl6jAAAAAElFTkSuQmCC"
79
+ };
80
+ const VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_.\-\d]*$/;
81
+ const VALID_HEAD_ELEMENT_TYPES = ["title", "base", "link", "style", "meta", "script", "noscript", "template"];
82
+ function snippetToElement(snippet) {
83
+ return React.Children.map(parse__default["default"](snippet.code), (element) => {
84
+ if (typeof element === "string")
85
+ return element;
86
+ if (!VALID_TAG_REGEX.test(element.type))
87
+ return null;
88
+ const key = element.key ? `${snippet.id}:${element.key}` : snippet.id;
89
+ return React.createElement(element.type, __spreadProps(__spreadValues({}, element.props), {
90
+ key
91
+ }));
92
+ });
93
+ }
94
+ function Page({
95
+ page,
96
+ preview = false
97
+ }) {
98
+ var _a;
99
+ const favicon = (_a = page.meta.favicon) != null ? _a : defaultFavicon;
100
+ const {
101
+ title,
102
+ description,
103
+ keywords,
104
+ socialImage
105
+ } = page.meta;
106
+ const {
107
+ canonicalUrl,
108
+ isIndexingBlocked
109
+ } = page.seo;
110
+ const fontFamilyParamValue = page.fonts.map(({
111
+ family,
112
+ variants
113
+ }) => {
114
+ return `${family.replace(/ /g, "+")}:${variants.join()}`;
115
+ }).join("|");
116
+ const snippets = React.useMemo(() => page.snippets.filter((snippet) => preview ? snippet.builderEnabled : snippet.liveEnabled), [page, preview]);
117
+ const headSnippets = React.useMemo(() => snippets.filter((snippet) => snippet.location === "HEAD"), [snippets]);
118
+ const previousHeadSnippets = React.useRef(null);
119
+ React.useEffect(() => {
120
+ var _a2;
121
+ const headSnippetsToCleanUp = ((_a2 = previousHeadSnippets.current) != null ? _a2 : []).filter((previousSnippet) => previousSnippet.cleanup != null).filter((previousSnippet) => !headSnippets.some((snippet) => previousSnippet.id === snippet.id));
122
+ headSnippetsToCleanUp.forEach((snippetToCleanUp) => {
123
+ if (snippetToCleanUp.cleanup == null)
124
+ return;
125
+ const cleanUp = new Function(snippetToCleanUp.cleanup);
126
+ try {
127
+ cleanUp();
128
+ } catch {
129
+ }
130
+ });
131
+ previousHeadSnippets.current = headSnippets;
132
+ }, [headSnippets]);
133
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
134
+ children: [/* @__PURE__ */ jsxRuntime.jsxs(Head__default["default"], {
135
+ children: [/* @__PURE__ */ jsxRuntime.jsx("style", {
136
+ children: `
137
+ html {
138
+ font-family: sans-serif;
139
+ }
140
+ div#__next {
141
+ overflow: hidden;
142
+ }
143
+ `
144
+ }), /* @__PURE__ */ jsxRuntime.jsx("link", {
145
+ rel: "icon",
146
+ type: favicon.mimetype,
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"
154
+ }), title && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
155
+ children: [/* @__PURE__ */ jsxRuntime.jsx("title", {
156
+ children: title
157
+ }), /* @__PURE__ */ jsxRuntime.jsx("meta", {
158
+ property: "og:title",
159
+ content: title
160
+ }), /* @__PURE__ */ jsxRuntime.jsx("meta", {
161
+ name: "twitter:title",
162
+ content: title
163
+ }), /* @__PURE__ */ jsxRuntime.jsx("meta", {
164
+ itemProp: "name",
165
+ content: title
166
+ })]
167
+ }), description && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
168
+ children: [/* @__PURE__ */ jsxRuntime.jsx("meta", {
169
+ name: "description",
170
+ content: description
171
+ }), /* @__PURE__ */ jsxRuntime.jsx("meta", {
172
+ property: "og:description",
173
+ content: description
174
+ }), /* @__PURE__ */ jsxRuntime.jsx("meta", {
175
+ name: "twitter:description",
176
+ content: description
177
+ }), /* @__PURE__ */ jsxRuntime.jsx("meta", {
178
+ itemProp: "description",
179
+ content: description
180
+ })]
181
+ }), keywords && /* @__PURE__ */ jsxRuntime.jsx("meta", {
182
+ name: "keywords",
183
+ content: keywords
184
+ }), socialImage && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
185
+ children: [/* @__PURE__ */ jsxRuntime.jsx("meta", {
186
+ property: "og:image",
187
+ content: socialImage.publicUrl
188
+ }), /* @__PURE__ */ jsxRuntime.jsx("meta", {
189
+ property: "og:image:type",
190
+ content: socialImage.publicUrl
191
+ }), /* @__PURE__ */ jsxRuntime.jsx("meta", {
192
+ name: "twitter:image",
193
+ content: socialImage.publicUrl
194
+ }), /* @__PURE__ */ jsxRuntime.jsx("meta", {
195
+ name: "twitter:card",
196
+ content: socialImage.publicUrl
197
+ }), /* @__PURE__ */ jsxRuntime.jsx("meta", {
198
+ itemProp: "image",
199
+ content: socialImage.publicUrl
200
+ })]
201
+ }), fontFamilyParamValue !== "" && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {
202
+ children: /* @__PURE__ */ jsxRuntime.jsx("link", {
203
+ rel: "stylesheet",
204
+ href: `https://fonts.googleapis.com/css?family=${fontFamilyParamValue}&display=swap`
205
+ })
206
+ }), headSnippets.map(snippetToElement).map((children) => React.Children.map(children, (child) => {
207
+ if (typeof child === "string")
208
+ return child;
209
+ if (VALID_HEAD_ELEMENT_TYPES.includes(child.type))
210
+ return child;
211
+ return null;
212
+ }))]
213
+ }), /* @__PURE__ */ jsxRuntime.jsx(index.DocumentReference, {
214
+ documentReference: reactPage.createDocumentReference(page.id)
215
+ }), snippets.filter((snippet) => snippet.location === "BODY").map((snippet) => /* @__PURE__ */ jsxRuntime.jsx(BodySnippet, {
216
+ code: snippet.code,
217
+ cleanup: snippet.cleanup
218
+ }, snippet.id))]
219
+ });
220
+ }
221
+ exports.Page = Page;
222
+ //# sourceMappingURL=Page.cjs.js.map
@@ -0,0 +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 seo: {\n canonicalUrl?: string | null | undefined\n isIndexingBlocked?: boolean | null | undefined\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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"}
@@ -0,0 +1,216 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { useEffect, useMemo, useRef, Children, createElement } from "react";
21
+ import parse from "html-react-parser";
22
+ import Head from "next/head";
23
+ import { D as DocumentReference } from "./index.es.js";
24
+ import { a as createDocumentReference } from "./react-page.es.js";
25
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
26
+ const SCRIPT_TAG = "script";
27
+ function BodySnippet({
28
+ code,
29
+ cleanup
30
+ }) {
31
+ useEffect(() => {
32
+ const container = document.createElement("div");
33
+ container.innerHTML = code;
34
+ const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT);
35
+ const scripts = [];
36
+ while (walker.nextNode()) {
37
+ if (walker.currentNode instanceof HTMLScriptElement)
38
+ scripts.push(walker.currentNode);
39
+ }
40
+ scripts.forEach((inlineScript) => {
41
+ var _a;
42
+ const executableScript = document.createElement(SCRIPT_TAG);
43
+ executableScript.textContent = inlineScript.textContent;
44
+ Array.from(inlineScript.attributes).forEach(({
45
+ name,
46
+ value
47
+ }) => {
48
+ executableScript.setAttribute(name, value);
49
+ });
50
+ (_a = inlineScript.parentNode) == null ? void 0 : _a.replaceChild(executableScript, inlineScript);
51
+ });
52
+ const nodes = Array.from(container.childNodes);
53
+ document.body.append(...nodes);
54
+ return () => {
55
+ nodes.forEach((node) => {
56
+ var _a;
57
+ (_a = node.parentNode) == null ? void 0 : _a.removeChild(node);
58
+ });
59
+ if (cleanup == null)
60
+ return;
61
+ const cleanUp = new Function(cleanup);
62
+ try {
63
+ cleanUp();
64
+ } catch {
65
+ }
66
+ };
67
+ }, [code, cleanup]);
68
+ return null;
69
+ }
70
+ const defaultFavicon = {
71
+ mimetype: "image/png",
72
+ publicUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABcRAAAXEQHKJvM/AAABjElEQVRYhc2XzU3EMBCFB8TddAAXn6EE6GCpgNABZ1/IXnymBOgAOmA7YM8+ABVsXEHQQFaKQryeN3Yk3ilKJtEnv/nLUd/3pFG0riGi88yrnQn+UfJ5FUi0riWiB2H4nQn+KRd0DFP8agXEfkqCYJBoHdtxIQxfm+DfFgEhoith3NYE30o/qgGR2BJB+xY7kdYEL8oNFUi0jiFMJuxVWrJqEMFxsyUNCsE6AeNztvBp7aJ143vXksoRnwhYtmNdSoIQa6RlO9YXEWW7KgoCleOgxgTf1QZBT+RZ2lXFING6UxCCq+ceeUE8fYdknY599v9sJvzGBP+yCEgC7GPmETc0OJ+0awAlkhe2pAbIXAeFZ8xe2g2Nk3c3ub0xwWt6zY9qbmiqGVMbZK21ZC/YmhlbeBMTzZNDQqcvDb1kM1x32iqZSt1HaqukfKvq34BAOTLsrH+ETNmUkKHHA+428RgeclPVWozeSyAI2EdWB34jtqXNTAySOY3i/KgFIlqOa4GkFmBegorzg4joG07he/M7zl6jAAAAAElFTkSuQmCC"
73
+ };
74
+ const VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_.\-\d]*$/;
75
+ const VALID_HEAD_ELEMENT_TYPES = ["title", "base", "link", "style", "meta", "script", "noscript", "template"];
76
+ function snippetToElement(snippet) {
77
+ return Children.map(parse(snippet.code), (element) => {
78
+ if (typeof element === "string")
79
+ return element;
80
+ if (!VALID_TAG_REGEX.test(element.type))
81
+ return null;
82
+ const key = element.key ? `${snippet.id}:${element.key}` : snippet.id;
83
+ return createElement(element.type, __spreadProps(__spreadValues({}, element.props), {
84
+ key
85
+ }));
86
+ });
87
+ }
88
+ function Page({
89
+ page,
90
+ preview = false
91
+ }) {
92
+ var _a;
93
+ const favicon = (_a = page.meta.favicon) != null ? _a : defaultFavicon;
94
+ const {
95
+ title,
96
+ description,
97
+ keywords,
98
+ socialImage
99
+ } = page.meta;
100
+ const {
101
+ canonicalUrl,
102
+ isIndexingBlocked
103
+ } = page.seo;
104
+ const fontFamilyParamValue = page.fonts.map(({
105
+ family,
106
+ variants
107
+ }) => {
108
+ return `${family.replace(/ /g, "+")}:${variants.join()}`;
109
+ }).join("|");
110
+ const snippets = useMemo(() => page.snippets.filter((snippet) => preview ? snippet.builderEnabled : snippet.liveEnabled), [page, preview]);
111
+ const headSnippets = useMemo(() => snippets.filter((snippet) => snippet.location === "HEAD"), [snippets]);
112
+ const previousHeadSnippets = useRef(null);
113
+ useEffect(() => {
114
+ var _a2;
115
+ const headSnippetsToCleanUp = ((_a2 = previousHeadSnippets.current) != null ? _a2 : []).filter((previousSnippet) => previousSnippet.cleanup != null).filter((previousSnippet) => !headSnippets.some((snippet) => previousSnippet.id === snippet.id));
116
+ headSnippetsToCleanUp.forEach((snippetToCleanUp) => {
117
+ if (snippetToCleanUp.cleanup == null)
118
+ return;
119
+ const cleanUp = new Function(snippetToCleanUp.cleanup);
120
+ try {
121
+ cleanUp();
122
+ } catch {
123
+ }
124
+ });
125
+ previousHeadSnippets.current = headSnippets;
126
+ }, [headSnippets]);
127
+ return /* @__PURE__ */ jsxs(Fragment, {
128
+ children: [/* @__PURE__ */ jsxs(Head, {
129
+ children: [/* @__PURE__ */ jsx("style", {
130
+ children: `
131
+ html {
132
+ font-family: sans-serif;
133
+ }
134
+ div#__next {
135
+ overflow: hidden;
136
+ }
137
+ `
138
+ }), /* @__PURE__ */ jsx("link", {
139
+ rel: "icon",
140
+ type: favicon.mimetype,
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"
148
+ }), title && /* @__PURE__ */ jsxs(Fragment, {
149
+ children: [/* @__PURE__ */ jsx("title", {
150
+ children: title
151
+ }), /* @__PURE__ */ jsx("meta", {
152
+ property: "og:title",
153
+ content: title
154
+ }), /* @__PURE__ */ jsx("meta", {
155
+ name: "twitter:title",
156
+ content: title
157
+ }), /* @__PURE__ */ jsx("meta", {
158
+ itemProp: "name",
159
+ content: title
160
+ })]
161
+ }), description && /* @__PURE__ */ jsxs(Fragment, {
162
+ children: [/* @__PURE__ */ jsx("meta", {
163
+ name: "description",
164
+ content: description
165
+ }), /* @__PURE__ */ jsx("meta", {
166
+ property: "og:description",
167
+ content: description
168
+ }), /* @__PURE__ */ jsx("meta", {
169
+ name: "twitter:description",
170
+ content: description
171
+ }), /* @__PURE__ */ jsx("meta", {
172
+ itemProp: "description",
173
+ content: description
174
+ })]
175
+ }), keywords && /* @__PURE__ */ jsx("meta", {
176
+ name: "keywords",
177
+ content: keywords
178
+ }), socialImage && /* @__PURE__ */ jsxs(Fragment, {
179
+ children: [/* @__PURE__ */ jsx("meta", {
180
+ property: "og:image",
181
+ content: socialImage.publicUrl
182
+ }), /* @__PURE__ */ jsx("meta", {
183
+ property: "og:image:type",
184
+ content: socialImage.publicUrl
185
+ }), /* @__PURE__ */ jsx("meta", {
186
+ name: "twitter:image",
187
+ content: socialImage.publicUrl
188
+ }), /* @__PURE__ */ jsx("meta", {
189
+ name: "twitter:card",
190
+ content: socialImage.publicUrl
191
+ }), /* @__PURE__ */ jsx("meta", {
192
+ itemProp: "image",
193
+ content: socialImage.publicUrl
194
+ })]
195
+ }), fontFamilyParamValue !== "" && /* @__PURE__ */ jsx(Fragment, {
196
+ children: /* @__PURE__ */ jsx("link", {
197
+ rel: "stylesheet",
198
+ href: `https://fonts.googleapis.com/css?family=${fontFamilyParamValue}&display=swap`
199
+ })
200
+ }), headSnippets.map(snippetToElement).map((children) => Children.map(children, (child) => {
201
+ if (typeof child === "string")
202
+ return child;
203
+ if (VALID_HEAD_ELEMENT_TYPES.includes(child.type))
204
+ return child;
205
+ return null;
206
+ }))]
207
+ }), /* @__PURE__ */ jsx(DocumentReference, {
208
+ documentReference: createDocumentReference(page.id)
209
+ }), snippets.filter((snippet) => snippet.location === "BODY").map((snippet) => /* @__PURE__ */ jsx(BodySnippet, {
210
+ code: snippet.code,
211
+ cleanup: snippet.cleanup
212
+ }, snippet.id))]
213
+ });
214
+ }
215
+ export { Page as P };
216
+ //# sourceMappingURL=Page.es.js.map
@@ -0,0 +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 seo: {\n canonicalUrl?: string | null | undefined\n isIndexingBlocked?: boolean | null | undefined\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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"}
@@ -2,6 +2,8 @@
2
2
  const ActionTypes = {
3
3
  INIT: "INIT",
4
4
  CLEAN_UP: "CLEAN_UP",
5
+ REGISTER_DOCUMENT: "REGISTER_DOCUMENT",
6
+ UNREGISTER_DOCUMENT: "UNREGISTER_DOCUMENT",
5
7
  CHANGE_DOCUMENT: "CHANGE_DOCUMENT",
6
8
  REGISTER_COMPONENT: "REGISTER_COMPONENT",
7
9
  UNREGISTER_COMPONENT: "UNREGISTER_COMPONENT",
@@ -18,13 +20,15 @@ const ActionTypes = {
18
20
  CHANGE_ELEMENT_BOX_MODELS: "CHANGE_ELEMENT_BOX_MODELS",
19
21
  CHANGE_DOCUMENT_ELEMENT_SIZE: "CHANGE_DOCUMENT_ELEMENT_SIZE",
20
22
  CHANGE_DOCUMENT_ELEMENT_SCROLL_TOP: "CHANGE_DOCUMENT_ELEMENT_SCROLL_TOP",
23
+ SCROLL_DOCUMENT_ELEMENT: "SCROLL_DOCUMENT_ELEMENT",
21
24
  REGISTER_PROP_CONTROLLERS_HANDLE: "REGISTER_PROP_CONTROLLERS_HANDLE",
22
25
  UNREGISTER_PROP_CONTROLLERS_HANDLE: "UNREGISTER_PROP_CONTROLLERS_HANDLE",
23
26
  REGISTER_PROP_CONTROLLERS: "REGISTER_PROP_CONTROLLERS",
24
27
  UNREGISTER_PROP_CONTROLLERS: "UNREGISTER_PROP_CONTROLLERS",
25
28
  MESSAGE_HOST_PROP_CONTROLLER: "MESSAGE_HOST_PROP_CONTROLLER",
26
29
  MESSAGE_BUILDER_PROP_CONTROLLER: "MESSAGE_BUILDER_PROP_CONTROLLER",
27
- CHANGE_API_RESOURCE: "CHANGE_API_RESOURCE"
30
+ CHANGE_API_RESOURCE: "CHANGE_API_RESOURCE",
31
+ EVICT_API_RESOURCE: "EVICT_API_RESOURCE"
28
32
  };
29
33
  function init() {
30
34
  return { type: ActionTypes.INIT };
@@ -32,6 +36,20 @@ function init() {
32
36
  function cleanUp() {
33
37
  return { type: ActionTypes.CLEAN_UP };
34
38
  }
39
+ function registerDocument(document) {
40
+ return { type: ActionTypes.REGISTER_DOCUMENT, payload: { documentKey: document.key, document } };
41
+ }
42
+ function unregisterDocument(documentKey) {
43
+ return { type: ActionTypes.UNREGISTER_DOCUMENT, payload: { documentKey } };
44
+ }
45
+ function registerDocumentEffect(document) {
46
+ return (dispatch) => {
47
+ dispatch(registerDocument(document));
48
+ return () => {
49
+ dispatch(unregisterDocument(document.key));
50
+ };
51
+ };
52
+ }
35
53
  function changeDocument(documentKey, operation) {
36
54
  return { type: ActionTypes.CHANGE_DOCUMENT, payload: { documentKey, operation } };
37
55
  }
@@ -121,6 +139,9 @@ function changeDocumentElementSize(size) {
121
139
  function changeDocumentElementScrollTop(scrollTop) {
122
140
  return { type: ActionTypes.CHANGE_DOCUMENT_ELEMENT_SCROLL_TOP, payload: { scrollTop } };
123
141
  }
142
+ function scrollDocumentElement(scrollTopDelta) {
143
+ return { type: ActionTypes.SCROLL_DOCUMENT_ELEMENT, payload: { scrollTopDelta } };
144
+ }
124
145
  function registerPropControllersHandle(documentKey, elementKey, handle) {
125
146
  return {
126
147
  type: ActionTypes.REGISTER_PROP_CONTROLLERS_HANDLE,
@@ -151,6 +172,9 @@ function messageBuilderPropController(documentKey, elementKey, propName, message
151
172
  function changeApiResource(resource) {
152
173
  return { type: ActionTypes.CHANGE_API_RESOURCE, payload: { resource } };
153
174
  }
175
+ function evictApiResource(id) {
176
+ return { type: ActionTypes.EVICT_API_RESOURCE, payload: { id } };
177
+ }
154
178
  exports.ActionTypes = ActionTypes;
155
179
  exports.changeApiResource = changeApiResource;
156
180
  exports.changeDocument = changeDocument;
@@ -158,6 +182,7 @@ exports.changeDocumentElementScrollTop = changeDocumentElementScrollTop;
158
182
  exports.changeDocumentElementSize = changeDocumentElementSize;
159
183
  exports.changeElementBoxModels = changeElementBoxModels;
160
184
  exports.cleanUp = cleanUp;
185
+ exports.evictApiResource = evictApiResource;
161
186
  exports.init = init;
162
187
  exports.messageBuilderPropController = messageBuilderPropController;
163
188
  exports.messageHostPropController = messageHostPropController;
@@ -165,11 +190,15 @@ exports.mountComponentEffect = mountComponentEffect;
165
190
  exports.registerBuilderComponent = registerBuilderComponent;
166
191
  exports.registerComponentEffect = registerComponentEffect;
167
192
  exports.registerComponentHandleEffect = registerComponentHandleEffect;
193
+ exports.registerDocument = registerDocument;
194
+ exports.registerDocumentEffect = registerDocumentEffect;
168
195
  exports.registerMeasurable = registerMeasurable;
169
196
  exports.registerPropControllers = registerPropControllers;
170
197
  exports.registerPropControllersHandle = registerPropControllersHandle;
171
198
  exports.registerReactComponentEffect = registerReactComponentEffect;
199
+ exports.scrollDocumentElement = scrollDocumentElement;
172
200
  exports.unregisterBuilderComponent = unregisterBuilderComponent;
201
+ exports.unregisterDocument = unregisterDocument;
173
202
  exports.unregisterMeasurable = unregisterMeasurable;
174
203
  exports.unregisterPropControllers = unregisterPropControllers;
175
204
  //# sourceMappingURL=actions.cjs.js.map