@builder.io/sdk-react 0.1.4 → 0.1.6

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 (249) hide show
  1. package/dist/react/blocks/button/button.js +2 -2
  2. package/dist/react/blocks/button/component-info.js +0 -1
  3. package/dist/react/blocks/columns/columns.js +4 -4
  4. package/dist/react/blocks/columns/component-info.js +0 -1
  5. package/dist/react/blocks/custom-code/component-info.js +0 -1
  6. package/dist/react/blocks/embed/component-info.js +0 -1
  7. package/dist/react/blocks/form/component-info.js +0 -1
  8. package/dist/react/blocks/form/form.js +2 -2
  9. package/dist/react/blocks/fragment/component-info.js +0 -1
  10. package/dist/react/blocks/image/component-info.js +0 -1
  11. package/dist/react/blocks/image/image.js +6 -6
  12. package/dist/react/blocks/img/component-info.js +0 -1
  13. package/dist/react/blocks/input/component-info.js +0 -1
  14. package/dist/react/blocks/raw-text/component-info.js +0 -1
  15. package/dist/react/blocks/section/component-info.js +0 -1
  16. package/dist/react/blocks/select/component-info.js +0 -1
  17. package/dist/react/blocks/submit-button/component-info.js +0 -1
  18. package/dist/react/blocks/symbol/component-info.js +0 -1
  19. package/dist/react/blocks/text/component-info.js +0 -1
  20. package/dist/react/blocks/textarea/component-info.js +0 -1
  21. package/dist/react/blocks/video/component-info.js +0 -1
  22. package/dist/react/components/render-block/render-block.js +18 -1
  23. package/dist/react/components/render-block/render-repeated-block.js +1 -0
  24. package/dist/react/components/render-blocks.js +2 -2
  25. package/dist/react/components/render-content/components/render-styles.helpers.js +51 -0
  26. package/dist/react/components/render-content/components/render-styles.js +12 -54
  27. package/dist/react/components/render-content/render-content.helpers.js +38 -0
  28. package/dist/react/components/render-content/render-content.js +65 -62
  29. package/dist/react/components/render-content/render-content.types.js +1 -0
  30. package/dist/react/constants/builder-registered-components.js +7 -7
  31. package/dist/react/context/builder.context.js +2 -0
  32. package/dist/react/index-helpers/blocks-exports.js +10 -10
  33. package/dist/react/types/input.js +1 -0
  34. package/dist/rsc/blocks/button/button.js +2 -2
  35. package/dist/rsc/blocks/button/component-info.js +0 -1
  36. package/dist/rsc/blocks/columns/columns.js +4 -4
  37. package/dist/rsc/blocks/columns/component-info.js +0 -1
  38. package/dist/rsc/blocks/custom-code/component-info.js +0 -1
  39. package/dist/rsc/blocks/embed/component-info.js +0 -1
  40. package/dist/rsc/blocks/form/component-info.js +0 -1
  41. package/dist/rsc/blocks/form/form.js +2 -2
  42. package/dist/rsc/blocks/fragment/component-info.js +0 -1
  43. package/dist/rsc/blocks/image/component-info.js +0 -1
  44. package/dist/rsc/blocks/image/image.js +6 -6
  45. package/dist/rsc/blocks/img/component-info.js +0 -1
  46. package/dist/rsc/blocks/input/component-info.js +0 -1
  47. package/dist/rsc/blocks/raw-text/component-info.js +0 -1
  48. package/dist/rsc/blocks/section/component-info.js +0 -1
  49. package/dist/rsc/blocks/select/component-info.js +0 -1
  50. package/dist/rsc/blocks/submit-button/component-info.js +0 -1
  51. package/dist/rsc/blocks/symbol/component-info.js +0 -1
  52. package/dist/rsc/blocks/text/component-info.js +0 -1
  53. package/dist/rsc/blocks/textarea/component-info.js +0 -1
  54. package/dist/rsc/blocks/video/component-info.js +0 -1
  55. package/dist/rsc/components/render-block/render-block.js +18 -1
  56. package/dist/rsc/components/render-block/render-repeated-block.js +1 -0
  57. package/dist/rsc/components/render-blocks.js +2 -2
  58. package/dist/rsc/components/render-content/builder-editing.js +47 -4
  59. package/dist/rsc/components/render-content/components/render-styles.helpers.js +51 -0
  60. package/dist/rsc/components/render-content/components/render-styles.js +11 -54
  61. package/dist/rsc/components/render-content/render-content.helpers.js +38 -0
  62. package/dist/rsc/components/render-content/render-content.js +43 -38
  63. package/dist/rsc/components/render-content/render-content.types.js +1 -0
  64. package/dist/rsc/constants/builder-registered-components.js +7 -7
  65. package/dist/rsc/context/builder.context.js +2 -0
  66. package/dist/rsc/index-helpers/blocks-exports.js +10 -10
  67. package/dist/rsc/types/input.js +1 -0
  68. package/package.json +1 -1
  69. package/packages/react/src/blocks/button/button.jsx +2 -2
  70. package/packages/react/src/blocks/button/component-info.js +0 -1
  71. package/packages/react/src/blocks/columns/columns.jsx +4 -4
  72. package/packages/react/src/blocks/columns/component-info.js +0 -1
  73. package/packages/react/src/blocks/custom-code/component-info.js +0 -1
  74. package/packages/react/src/blocks/embed/component-info.js +0 -1
  75. package/packages/react/src/blocks/form/component-info.js +0 -1
  76. package/packages/react/src/blocks/form/form.jsx +2 -2
  77. package/packages/react/src/blocks/fragment/component-info.js +0 -1
  78. package/packages/react/src/blocks/image/component-info.js +0 -1
  79. package/packages/react/src/blocks/image/image.jsx +6 -6
  80. package/packages/react/src/blocks/img/component-info.js +0 -1
  81. package/packages/react/src/blocks/input/component-info.js +0 -1
  82. package/packages/react/src/blocks/raw-text/component-info.js +0 -1
  83. package/packages/react/src/blocks/section/component-info.js +0 -1
  84. package/packages/react/src/blocks/select/component-info.js +0 -1
  85. package/packages/react/src/blocks/submit-button/component-info.js +0 -1
  86. package/packages/react/src/blocks/symbol/component-info.js +0 -1
  87. package/packages/react/src/blocks/text/component-info.js +0 -1
  88. package/packages/react/src/blocks/textarea/component-info.js +0 -1
  89. package/packages/react/src/blocks/video/component-info.js +0 -1
  90. package/packages/react/src/components/render-block/render-block.jsx +22 -1
  91. package/packages/react/src/components/render-block/render-repeated-block.jsx +1 -0
  92. package/packages/react/src/components/render-blocks.jsx +2 -2
  93. package/packages/react/src/components/render-content/components/render-styles.helpers.js +57 -0
  94. package/packages/react/src/components/render-content/components/render-styles.jsx +13 -56
  95. package/packages/react/src/components/render-content/render-content.helpers.js +48 -0
  96. package/packages/react/src/components/render-content/render-content.jsx +76 -67
  97. package/packages/{_rsc/src/components/render-block/types.js → react/src/components/render-content/render-content.types.js} +0 -0
  98. package/packages/react/src/constants/builder-registered-components.js +7 -7
  99. package/packages/react/src/context/builder.context.js +2 -0
  100. package/packages/react/src/index-helpers/blocks-exports.js +18 -18
  101. package/packages/{_rsc/src/context/types.js → react/src/types/input.js} +0 -0
  102. package/packages/rsc/src/blocks/button/button.jsx +2 -2
  103. package/packages/rsc/src/blocks/button/component-info.js +0 -1
  104. package/packages/rsc/src/blocks/columns/columns.jsx +4 -4
  105. package/packages/rsc/src/blocks/columns/component-info.js +0 -1
  106. package/packages/rsc/src/blocks/custom-code/component-info.js +0 -1
  107. package/packages/rsc/src/blocks/embed/component-info.js +0 -1
  108. package/packages/rsc/src/blocks/form/component-info.js +0 -1
  109. package/packages/rsc/src/blocks/form/form.jsx +2 -2
  110. package/packages/rsc/src/blocks/fragment/component-info.js +0 -1
  111. package/packages/rsc/src/blocks/image/component-info.js +0 -1
  112. package/packages/rsc/src/blocks/image/image.jsx +6 -6
  113. package/packages/rsc/src/blocks/img/component-info.js +0 -1
  114. package/packages/rsc/src/blocks/input/component-info.js +0 -1
  115. package/packages/rsc/src/blocks/raw-text/component-info.js +0 -1
  116. package/packages/rsc/src/blocks/section/component-info.js +0 -1
  117. package/packages/rsc/src/blocks/select/component-info.js +0 -1
  118. package/packages/rsc/src/blocks/submit-button/component-info.js +0 -1
  119. package/packages/rsc/src/blocks/symbol/component-info.js +0 -1
  120. package/packages/rsc/src/blocks/text/component-info.js +0 -1
  121. package/packages/rsc/src/blocks/textarea/component-info.js +0 -1
  122. package/packages/rsc/src/blocks/video/component-info.js +0 -1
  123. package/packages/rsc/src/components/render-block/render-block.jsx +21 -1
  124. package/packages/rsc/src/components/render-block/render-repeated-block.jsx +1 -0
  125. package/packages/rsc/src/components/render-blocks.jsx +2 -2
  126. package/packages/rsc/src/components/render-content/builder-editing.jsx +61 -4
  127. package/packages/rsc/src/components/render-content/components/render-styles.helpers.js +57 -0
  128. package/packages/rsc/src/components/render-content/components/render-styles.jsx +10 -56
  129. package/packages/rsc/src/components/render-content/render-content.helpers.js +48 -0
  130. package/packages/rsc/src/components/render-content/render-content.jsx +46 -37
  131. package/packages/{_rsc/src/functions/get-content/types.js → rsc/src/components/render-content/render-content.types.js} +0 -0
  132. package/packages/rsc/src/constants/builder-registered-components.js +7 -7
  133. package/packages/rsc/src/context/builder.context.js +2 -0
  134. package/packages/rsc/src/index-helpers/blocks-exports.js +18 -18
  135. package/packages/{_rsc/src/types/builder-block.js → rsc/src/types/input.js} +0 -0
  136. package/packages/_rsc/src/blocks/BaseText.jsx +0 -10
  137. package/packages/_rsc/src/blocks/button/button.jsx +0 -29
  138. package/packages/_rsc/src/blocks/button/component-info.js +0 -41
  139. package/packages/_rsc/src/blocks/columns/columns.jsx +0 -172
  140. package/packages/_rsc/src/blocks/columns/component-info.js +0 -242
  141. package/packages/_rsc/src/blocks/custom-code/component-info.js +0 -31
  142. package/packages/_rsc/src/blocks/custom-code/custom-code.jsx +0 -55
  143. package/packages/_rsc/src/blocks/embed/component-info.js +0 -44
  144. package/packages/_rsc/src/blocks/embed/embed.jsx +0 -43
  145. package/packages/_rsc/src/blocks/embed/helpers.js +0 -9
  146. package/packages/_rsc/src/blocks/form/component-info.js +0 -262
  147. package/packages/_rsc/src/blocks/form/form.jsx +0 -259
  148. package/packages/_rsc/src/blocks/fragment/component-info.js +0 -11
  149. package/packages/_rsc/src/blocks/fragment/fragment.jsx +0 -7
  150. package/packages/_rsc/src/blocks/image/component-info.js +0 -151
  151. package/packages/_rsc/src/blocks/image/image.helpers.js +0 -48
  152. package/packages/_rsc/src/blocks/image/image.jsx +0 -124
  153. package/packages/_rsc/src/blocks/img/component-info.js +0 -20
  154. package/packages/_rsc/src/blocks/img/img.jsx +0 -19
  155. package/packages/_rsc/src/blocks/input/component-info.js +0 -74
  156. package/packages/_rsc/src/blocks/input/input.jsx +0 -21
  157. package/packages/_rsc/src/blocks/raw-text/component-info.js +0 -16
  158. package/packages/_rsc/src/blocks/raw-text/raw-text.jsx +0 -12
  159. package/packages/_rsc/src/blocks/section/component-info.js +0 -49
  160. package/packages/_rsc/src/blocks/section/section.jsx +0 -29
  161. package/packages/_rsc/src/blocks/select/component-info.js +0 -59
  162. package/packages/_rsc/src/blocks/select/select.jsx +0 -22
  163. package/packages/_rsc/src/blocks/submit-button/component-info.js +0 -28
  164. package/packages/_rsc/src/blocks/submit-button/submit-button.jsx +0 -11
  165. package/packages/_rsc/src/blocks/symbol/component-info.js +0 -43
  166. package/packages/_rsc/src/blocks/symbol/symbol.jsx +0 -56
  167. package/packages/_rsc/src/blocks/text/component-info.js +0 -24
  168. package/packages/_rsc/src/blocks/text/text.jsx +0 -12
  169. package/packages/_rsc/src/blocks/textarea/component-info.js +0 -47
  170. package/packages/_rsc/src/blocks/textarea/textarea.jsx +0 -15
  171. package/packages/_rsc/src/blocks/util.js +0 -8
  172. package/packages/_rsc/src/blocks/video/component-info.js +0 -106
  173. package/packages/_rsc/src/blocks/video/video.jsx +0 -61
  174. package/packages/_rsc/src/components/render-block/block-styles.jsx +0 -72
  175. package/packages/_rsc/src/components/render-block/render-block.helpers.js +0 -23
  176. package/packages/_rsc/src/components/render-block/render-block.jsx +0 -251
  177. package/packages/_rsc/src/components/render-block/render-component-with-context.jsx +0 -38
  178. package/packages/_rsc/src/components/render-block/render-component.jsx +0 -37
  179. package/packages/_rsc/src/components/render-block/render-repeated-block.jsx +0 -36
  180. package/packages/_rsc/src/components/render-blocks.jsx +0 -90
  181. package/packages/_rsc/src/components/render-content/builder-editing.jsx +0 -7
  182. package/packages/_rsc/src/components/render-content/components/render-styles.jsx +0 -70
  183. package/packages/_rsc/src/components/render-content/index.js +0 -4
  184. package/packages/_rsc/src/components/render-content/render-content.jsx +0 -259
  185. package/packages/_rsc/src/components/render-inlined-styles.jsx +0 -33
  186. package/packages/_rsc/src/constants/builder-registered-components.js +0 -54
  187. package/packages/_rsc/src/constants/device-sizes.js +0 -48
  188. package/packages/_rsc/src/constants/target.js +0 -4
  189. package/packages/_rsc/src/context/builder.context.js +0 -11
  190. package/packages/_rsc/src/functions/camel-to-kebab-case.js +0 -4
  191. package/packages/_rsc/src/functions/evaluate.js +0 -6
  192. package/packages/_rsc/src/functions/event-handler-name.js +0 -7
  193. package/packages/_rsc/src/functions/extract-text-styles.js +0 -22
  194. package/packages/_rsc/src/functions/fast-clone.js +0 -4
  195. package/packages/_rsc/src/functions/get-block-actions-handler.js +0 -11
  196. package/packages/_rsc/src/functions/get-block-actions.js +0 -18
  197. package/packages/_rsc/src/functions/get-block-component-options.js +0 -28
  198. package/packages/_rsc/src/functions/get-block-properties.js +0 -50
  199. package/packages/_rsc/src/functions/get-block-tag.js +0 -6
  200. package/packages/_rsc/src/functions/get-builder-search-params/fn.test.js +0 -13
  201. package/packages/_rsc/src/functions/get-builder-search-params/index.js +0 -38
  202. package/packages/_rsc/src/functions/get-content/ab-testing.js +0 -99
  203. package/packages/_rsc/src/functions/get-content/generate-content-url.js +0 -55
  204. package/packages/_rsc/src/functions/get-content/generate-content-url.test.js +0 -31
  205. package/packages/_rsc/src/functions/get-content/index.js +0 -65
  206. package/packages/_rsc/src/functions/get-fetch.js +0 -14
  207. package/packages/_rsc/src/functions/get-global-this.js +0 -18
  208. package/packages/_rsc/src/functions/get-processed-block.js +0 -59
  209. package/packages/_rsc/src/functions/get-processed-block.test.js +0 -32
  210. package/packages/_rsc/src/functions/get-react-native-block-styles.js +0 -33
  211. package/packages/_rsc/src/functions/if-target.js +0 -15
  212. package/packages/_rsc/src/functions/is-browser.js +0 -6
  213. package/packages/_rsc/src/functions/is-editing.js +0 -7
  214. package/packages/_rsc/src/functions/is-iframe.js +0 -7
  215. package/packages/_rsc/src/functions/is-previewing.js +0 -14
  216. package/packages/_rsc/src/functions/on-change.js +0 -27
  217. package/packages/_rsc/src/functions/on-change.test.js +0 -19
  218. package/packages/_rsc/src/functions/register-component.js +0 -68
  219. package/packages/_rsc/src/functions/register.js +0 -29
  220. package/packages/_rsc/src/functions/sanitize-react-native-block-styles.js +0 -66
  221. package/packages/_rsc/src/functions/set-editor-settings.js +0 -15
  222. package/packages/_rsc/src/functions/set.js +0 -11
  223. package/packages/_rsc/src/functions/set.test.js +0 -16
  224. package/packages/_rsc/src/functions/track.js +0 -124
  225. package/packages/_rsc/src/functions/transform-block-properties.js +0 -6
  226. package/packages/_rsc/src/functions/transform-block.js +0 -6
  227. package/packages/_rsc/src/helpers/ab-tests.js +0 -16
  228. package/packages/_rsc/src/helpers/cookie.js +0 -81
  229. package/packages/_rsc/src/helpers/css.js +0 -34
  230. package/packages/_rsc/src/helpers/flatten.js +0 -34
  231. package/packages/_rsc/src/helpers/localStorage.js +0 -35
  232. package/packages/_rsc/src/helpers/nullable.js +0 -4
  233. package/packages/_rsc/src/helpers/sessionId.js +0 -52
  234. package/packages/_rsc/src/helpers/time.js +0 -5
  235. package/packages/_rsc/src/helpers/url.js +0 -13
  236. package/packages/_rsc/src/helpers/url.test.js +0 -21
  237. package/packages/_rsc/src/helpers/uuid.js +0 -13
  238. package/packages/_rsc/src/helpers/visitorId.js +0 -34
  239. package/packages/_rsc/src/index-helpers/blocks-exports.js +0 -22
  240. package/packages/_rsc/src/index-helpers/top-of-file.js +0 -2
  241. package/packages/_rsc/src/index.js +0 -14
  242. package/packages/_rsc/src/scripts/init-editing.js +0 -93
  243. package/packages/_rsc/src/types/builder-content.js +0 -0
  244. package/packages/_rsc/src/types/can-track.js +0 -0
  245. package/packages/_rsc/src/types/components.js +0 -0
  246. package/packages/_rsc/src/types/deep-partial.js +0 -0
  247. package/packages/_rsc/src/types/element.js +0 -0
  248. package/packages/_rsc/src/types/targets.js +0 -0
  249. package/packages/_rsc/src/types/typescript.js +0 -0
@@ -1,259 +0,0 @@
1
- import * as React from "react";
2
- import RenderBlock from "../../components/render-block/render-block.js";
3
- import BuilderBlocks from "../../components/render-blocks.js";
4
- import { isEditing } from "../../functions/is-editing.js";
5
-
6
- export default function FormComponent(props) {
7
- const _context = { ...props["_context"] };
8
-
9
- const state = {
10
- formState: "unsubmitted",
11
- responseData: null,
12
- formErrorMessage: "",
13
- get submissionState() {
14
- return (isEditing() && props.previewState) || state.formState;
15
- },
16
- onSubmit(event) {
17
- const sendWithJs =
18
- props.sendWithJs || props.sendSubmissionsTo === "email";
19
- if (props.sendSubmissionsTo === "zapier") {
20
- event.preventDefault();
21
- } else if (sendWithJs) {
22
- if (!(props.action || props.sendSubmissionsTo === "email")) {
23
- event.preventDefault();
24
- return;
25
- }
26
- event.preventDefault();
27
- const el = event.currentTarget;
28
- const headers = props.customHeaders || {};
29
- let body;
30
- const formData = new FormData(el);
31
-
32
- // TODO: maybe support null
33
- const formPairs = Array.from(
34
- event.currentTarget.querySelectorAll("input,select,textarea")
35
- )
36
- .filter((el) => !!el.name)
37
- .map((el) => {
38
- let value;
39
- const key = el.name;
40
- if (el instanceof HTMLInputElement) {
41
- if (el.type === "radio") {
42
- if (el.checked) {
43
- value = el.name;
44
- return {
45
- key,
46
- value,
47
- };
48
- }
49
- } else if (el.type === "checkbox") {
50
- value = el.checked;
51
- } else if (el.type === "number" || el.type === "range") {
52
- const num = el.valueAsNumber;
53
- if (!isNaN(num)) {
54
- value = num;
55
- }
56
- } else if (el.type === "file") {
57
- // TODO: one vs multiple files
58
- value = el.files;
59
- } else {
60
- value = el.value;
61
- }
62
- } else {
63
- value = el.value;
64
- }
65
- return {
66
- key,
67
- value,
68
- };
69
- });
70
- let contentType = props.contentType;
71
- if (props.sendSubmissionsTo === "email") {
72
- contentType = "multipart/form-data";
73
- }
74
- Array.from(formPairs).forEach(({ value }) => {
75
- if (
76
- value instanceof File ||
77
- (Array.isArray(value) && value[0] instanceof File) ||
78
- value instanceof FileList
79
- ) {
80
- contentType = "multipart/form-data";
81
- }
82
- });
83
-
84
- // TODO: send as urlEncoded or multipart by default
85
- // because of ease of use and reliability in browser API
86
- // for encoding the form?
87
- if (contentType !== "application/json") {
88
- body = formData;
89
- } else {
90
- // Json
91
- const json = {};
92
- Array.from(formPairs).forEach(({ value, key }) => {
93
- set(json, key, value);
94
- });
95
- body = JSON.stringify(json);
96
- }
97
- if (contentType && contentType !== "multipart/form-data") {
98
- if (
99
- /* Zapier doesn't allow content-type header to be sent from browsers */ !(
100
- sendWithJs && props.action?.includes("zapier.com")
101
- )
102
- ) {
103
- headers["content-type"] = contentType;
104
- }
105
- }
106
- const presubmitEvent = new CustomEvent("presubmit", {
107
- detail: { body },
108
- });
109
- if (formRef) {
110
- formRef.dispatchEvent(presubmitEvent);
111
- if (presubmitEvent.defaultPrevented) {
112
- return;
113
- }
114
- }
115
- state.formState = "sending";
116
- const formUrl = `${
117
- builder.env === "dev" ? "http://localhost:5000" : "https://builder.io"
118
- }/api/v1/form-submit?apiKey=${builder.apiKey}&to=${btoa(
119
- props.sendSubmissionsToEmail || ""
120
- )}&name=${encodeURIComponent(props.name || "")}`;
121
- fetch(
122
- props.sendSubmissionsTo === "email"
123
- ? formUrl
124
- : props.action /* TODO: throw error if no action URL */,
125
- { body, headers, method: props.method || "post" }
126
- ).then(
127
- async (res) => {
128
- let body;
129
- const contentType = res.headers.get("content-type");
130
- if (contentType && contentType.indexOf("application/json") !== -1) {
131
- body = await res.json();
132
- } else {
133
- body = await res.text();
134
- }
135
- if (!res.ok && props.errorMessagePath) {
136
- /* TODO: allow supplying an error formatter function */ let message =
137
- get(body, props.errorMessagePath);
138
- if (message) {
139
- if (typeof message !== "string") {
140
- /* TODO: ideally convert json to yaml so it woul dbe like error: - email has been taken */ message =
141
- JSON.stringify(message);
142
- }
143
- state.formErrorMessage = message;
144
- }
145
- }
146
- state.responseData = body;
147
- state.formState = res.ok ? "success" : "error";
148
- if (res.ok) {
149
- const submitSuccessEvent = new CustomEvent("submit:success", {
150
- detail: { res, body },
151
- });
152
- if (formRef) {
153
- formRef.dispatchEvent(submitSuccessEvent);
154
- if (submitSuccessEvent.defaultPrevented) {
155
- return;
156
- }
157
- /* TODO: option to turn this on/off? */ if (
158
- props.resetFormOnSubmit !== false
159
- ) {
160
- formRef.reset();
161
- }
162
- }
163
- /* TODO: client side route event first that can be preventDefaulted */ if (
164
- props.successUrl
165
- ) {
166
- if (formRef) {
167
- const event = new CustomEvent("route", {
168
- detail: { url: props.successUrl },
169
- });
170
- formRef.dispatchEvent(event);
171
- if (!event.defaultPrevented) {
172
- location.href = props.successUrl;
173
- }
174
- } else {
175
- location.href = props.successUrl;
176
- }
177
- }
178
- }
179
- },
180
- (err) => {
181
- const submitErrorEvent = new CustomEvent("submit:error", {
182
- detail: { error: err },
183
- });
184
- if (formRef) {
185
- formRef.dispatchEvent(submitErrorEvent);
186
- if (submitErrorEvent.defaultPrevented) {
187
- return;
188
- }
189
- }
190
- state.responseData = err;
191
- state.formState = "error";
192
- }
193
- );
194
- }
195
- },
196
- };
197
- const builderContext = _context["BuilderContext"];
198
- return (
199
- <>
200
- {" "}
201
- <form
202
- validate={props.validate}
203
- action={!props.sendWithJs && props.action}
204
- method={props.method}
205
- name={props.name}
206
- {...props.attributes}
207
- >
208
- {" "}
209
- {props.builderBlock && props.builderBlock.children ? (
210
- <>
211
- {props.builderBlock?.children?.map((block) => (
212
- <RenderBlock
213
- block={block}
214
- context={builderContext}
215
- _context={_context}
216
- />
217
- ))}
218
- </>
219
- ) : null}{" "}
220
- {state.submissionState === "error" ? (
221
- <>
222
- <BuilderBlocks
223
- dataPath="errorMessage"
224
- blocks={props.errorMessage}
225
- _context={_context}
226
- />
227
- </>
228
- ) : null}{" "}
229
- {state.submissionState === "sending" ? (
230
- <>
231
- <BuilderBlocks
232
- dataPath="sendingMessage"
233
- blocks={props.sendingMessage}
234
- _context={_context}
235
- />
236
- </>
237
- ) : null}{" "}
238
- {state.submissionState === "error" && state.responseData ? (
239
- <>
240
- <pre className="builder-form-error-text pre-105231da">
241
- {" "}
242
- {JSON.stringify(state.responseData, null, 2)}{" "}
243
- </pre>
244
- </>
245
- ) : null}{" "}
246
- {state.submissionState === "success" ? (
247
- <>
248
- <BuilderBlocks
249
- dataPath="successMessage"
250
- blocks={props.successMessage}
251
- _context={_context}
252
- />
253
- </>
254
- ) : null}{" "}
255
- </form>{" "}
256
- <style>{`.pre-105231da { padding: 10px; color: red; text-align: center; }`}</style>{" "}
257
- </>
258
- );
259
- }
@@ -1,11 +0,0 @@
1
- const componentInfo = {
2
- name: "Fragment",
3
- static: true,
4
- hidden: true,
5
- builtIn: true,
6
- canHaveChildren: true,
7
- noWrap: true
8
- };
9
- export {
10
- componentInfo
11
- };
@@ -1,7 +0,0 @@
1
- import * as React from "react";
2
-
3
- export default function FragmentComponent(props) {
4
- const _context = { ...props["_context"] };
5
-
6
- return <span>{props.children}</span>;
7
- }
@@ -1,151 +0,0 @@
1
- import { serializeFn } from "../util.js";
2
- const componentInfo = {
3
- name: "Image",
4
- static: true,
5
- builtIn: true,
6
- image: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4",
7
- defaultStyles: {
8
- position: "relative",
9
- minHeight: "20px",
10
- minWidth: "20px",
11
- overflow: "hidden"
12
- },
13
- canHaveChildren: true,
14
- inputs: [
15
- {
16
- name: "image",
17
- type: "file",
18
- bubble: true,
19
- allowedFileTypes: ["jpeg", "jpg", "png", "svg"],
20
- required: true,
21
- defaultValue: "https://cdn.builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d",
22
- onChange: serializeFn((options) => {
23
- const DEFAULT_ASPECT_RATIO = 0.7041;
24
- options.delete("srcset");
25
- options.delete("noWebp");
26
- function loadImage(url, timeout = 6e4) {
27
- return new Promise((resolve, reject) => {
28
- const img = document.createElement("img");
29
- let loaded = false;
30
- img.onload = () => {
31
- loaded = true;
32
- resolve(img);
33
- };
34
- img.addEventListener("error", (event) => {
35
- console.warn("Image load failed", event.error);
36
- reject(event.error);
37
- });
38
- img.src = url;
39
- setTimeout(() => {
40
- if (!loaded) {
41
- reject(new Error("Image load timed out"));
42
- }
43
- }, timeout);
44
- });
45
- }
46
- function round(num) {
47
- return Math.round(num * 1e3) / 1e3;
48
- }
49
- const value = options.get("image");
50
- const aspectRatio = options.get("aspectRatio");
51
- fetch(value).then((res) => res.blob()).then((blob) => {
52
- if (blob.type.includes("svg")) {
53
- options.set("noWebp", true);
54
- }
55
- });
56
- if (value && (!aspectRatio || aspectRatio === DEFAULT_ASPECT_RATIO)) {
57
- return loadImage(value).then((img) => {
58
- const possiblyUpdatedAspectRatio = options.get("aspectRatio");
59
- if (options.get("image") === value && (!possiblyUpdatedAspectRatio || possiblyUpdatedAspectRatio === DEFAULT_ASPECT_RATIO)) {
60
- if (img.width && img.height) {
61
- options.set("aspectRatio", round(img.height / img.width));
62
- options.set("height", img.height);
63
- options.set("width", img.width);
64
- }
65
- }
66
- });
67
- }
68
- })
69
- },
70
- {
71
- name: "backgroundSize",
72
- type: "text",
73
- defaultValue: "cover",
74
- enum: [
75
- {
76
- label: "contain",
77
- value: "contain",
78
- helperText: "The image should never get cropped"
79
- },
80
- {
81
- label: "cover",
82
- value: "cover",
83
- helperText: "The image should fill it's box, cropping when needed"
84
- }
85
- ]
86
- },
87
- {
88
- name: "backgroundPosition",
89
- type: "text",
90
- defaultValue: "center",
91
- enum: [
92
- "center",
93
- "top",
94
- "left",
95
- "right",
96
- "bottom",
97
- "top left",
98
- "top right",
99
- "bottom left",
100
- "bottom right"
101
- ]
102
- },
103
- {
104
- name: "altText",
105
- type: "string",
106
- helperText: "Text to display when the user has images off"
107
- },
108
- {
109
- name: "height",
110
- type: "number",
111
- hideFromUI: true
112
- },
113
- {
114
- name: "width",
115
- type: "number",
116
- hideFromUI: true
117
- },
118
- {
119
- name: "sizes",
120
- type: "string",
121
- hideFromUI: true
122
- },
123
- {
124
- name: "srcset",
125
- type: "string",
126
- hideFromUI: true
127
- },
128
- {
129
- name: "lazy",
130
- type: "boolean",
131
- defaultValue: true,
132
- hideFromUI: true
133
- },
134
- {
135
- name: "fitContent",
136
- type: "boolean",
137
- helperText: "When child blocks are provided, fit to them instead of using the image's aspect ratio",
138
- defaultValue: true
139
- },
140
- {
141
- name: "aspectRatio",
142
- type: "number",
143
- helperText: "This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio",
144
- advanced: true,
145
- defaultValue: 0.7041
146
- }
147
- ]
148
- };
149
- export {
150
- componentInfo
151
- };
@@ -1,48 +0,0 @@
1
- function removeProtocol(path) {
2
- return path.replace(/http(s)?:/, "");
3
- }
4
- function updateQueryParam(uri = "", key, value) {
5
- const re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
6
- const separator = uri.indexOf("?") !== -1 ? "&" : "?";
7
- if (uri.match(re)) {
8
- return uri.replace(re, "$1" + key + "=" + encodeURIComponent(value) + "$2");
9
- }
10
- return uri + separator + key + "=" + encodeURIComponent(value);
11
- }
12
- function getShopifyImageUrl(src, size) {
13
- if (!src || !(src == null ? void 0 : src.match(/cdn\.shopify\.com/)) || !size) {
14
- return src;
15
- }
16
- if (size === "master") {
17
- return removeProtocol(src);
18
- }
19
- const match = src.match(/(_\d+x(\d+)?)?(\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\?v=\d+)?)/i);
20
- if (match) {
21
- const prefix = src.split(match[0]);
22
- const suffix = match[3];
23
- const useSize = size.match("x") ? size : `${size}x`;
24
- return removeProtocol(`${prefix[0]}_${useSize}${suffix}`);
25
- }
26
- return null;
27
- }
28
- function getSrcSet(url) {
29
- if (!url) {
30
- return url;
31
- }
32
- const sizes = [100, 200, 400, 800, 1200, 1600, 2e3];
33
- if (url.match(/builder\.io/)) {
34
- let srcUrl = url;
35
- const widthInSrc = Number(url.split("?width=")[1]);
36
- if (!isNaN(widthInSrc)) {
37
- srcUrl = `${srcUrl} ${widthInSrc}w`;
38
- }
39
- return sizes.filter((size) => size !== widthInSrc).map((size) => `${updateQueryParam(url, "width", size)} ${size}w`).concat([srcUrl]).join(", ");
40
- }
41
- if (url.match(/cdn\.shopify\.com/)) {
42
- return sizes.map((size) => [getShopifyImageUrl(url, `${size}x${size}`), size]).filter(([sizeUrl]) => !!sizeUrl).map(([sizeUrl, size]) => `${sizeUrl} ${size}w`).concat([url]).join(", ");
43
- }
44
- return url;
45
- }
46
- export {
47
- getSrcSet
48
- };
@@ -1,124 +0,0 @@
1
- import * as React from "react";
2
- import { getSrcSet } from "./image.helpers.js";
3
-
4
- export default function Image(props) {
5
- const _context = { ...props["_context"] };
6
-
7
- const state = {
8
- get srcSetToUse() {
9
- const imageToUse = props.image || props.src;
10
- const url = imageToUse;
11
- if (
12
- !url ||
13
- // We can auto add srcset for cdn.builder.io and shopify
14
- // images, otherwise you can supply this prop manually
15
- !(url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/))
16
- ) {
17
- return props.srcset;
18
- }
19
- if (props.srcset && props.image?.includes("builder.io/api/v1/image")) {
20
- if (!props.srcset.includes(props.image.split("?")[0])) {
21
- console.debug("Removed given srcset");
22
- return getSrcSet(url);
23
- }
24
- } else if (props.image && !props.srcset) {
25
- return getSrcSet(url);
26
- }
27
- return getSrcSet(url);
28
- },
29
- get webpSrcSet() {
30
- if (state.srcSetToUse?.match(/builder\.io/) && !props.noWebp) {
31
- return state.srcSetToUse.replace(/\?/g, "?format=webp&");
32
- } else {
33
- return "";
34
- }
35
- },
36
- get aspectRatioCss() {
37
- const aspectRatioStyles = {
38
- position: "absolute",
39
- height: "100%",
40
- width: "100%",
41
- left: "0px",
42
- top: "0px",
43
- };
44
- const out = props.aspectRatio ? aspectRatioStyles : undefined;
45
- return out;
46
- },
47
- };
48
-
49
- return (
50
- <>
51
- <>
52
- <picture>
53
- {state.webpSrcSet ? (
54
- <>
55
- <source type="image/webp" srcSet={state.webpSrcSet} />
56
- </>
57
- ) : null}
58
-
59
- <img
60
- loading="lazy"
61
- alt={props.altText}
62
- role={props.altText ? "presentation" : undefined}
63
- style={{
64
- objectPosition: props.backgroundPosition || "center",
65
- objectFit: props.backgroundSize || "cover",
66
- ...state.aspectRatioCss,
67
- }}
68
- className={
69
- "builder-image" +
70
- (props.className ? " " + props.className : "") +
71
- " img-03c4fd62"
72
- }
73
- src={props.image}
74
- srcSet={state.srcSetToUse}
75
- sizes={props.sizes}
76
- />
77
-
78
- <source srcSet={state.srcSetToUse} />
79
- </picture>
80
-
81
- {props.aspectRatio &&
82
- !(props.builderBlock?.children?.length && props.fitContent) ? (
83
- <>
84
- <div
85
- className="builder-image-sizer div-03c4fd62"
86
- style={{
87
- paddingTop:
88
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
89
- props.aspectRatio * 100 + "%",
90
- }}
91
- />
92
- </>
93
- ) : null}
94
-
95
- {props.builderBlock?.children?.length && props.fitContent ? (
96
- <>{props.children}</>
97
- ) : null}
98
-
99
- {!props.fitContent && props.children ? (
100
- <>
101
- <div className="div-03c4fd62-2">{props.children}</div>
102
- </>
103
- ) : null}
104
- </>
105
- <style>{`.img-03c4fd62 {
106
- opacity: 1;
107
- transition: opacity 0.2s ease-in-out;
108
- }.div-03c4fd62 {
109
- width: 100%;
110
- pointer-events: none;
111
- font-size: 0;
112
- }.div-03c4fd62-2 {
113
- display: flex;
114
- flex-direction: column;
115
- align-items: stretch;
116
- position: absolute;
117
- top: 0;
118
- left: 0;
119
- width: 100%;
120
- height: 100%;
121
- }`}</style>
122
- </>
123
- );
124
- }
@@ -1,20 +0,0 @@
1
- const componentInfo = {
2
- name: "Raw:Img",
3
- hideFromInsertMenu: true,
4
- builtIn: true,
5
- image: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4",
6
- inputs: [
7
- {
8
- name: "image",
9
- bubble: true,
10
- type: "file",
11
- allowedFileTypes: ["jpeg", "jpg", "png", "svg"],
12
- required: true
13
- }
14
- ],
15
- noWrap: true,
16
- static: true
17
- };
18
- export {
19
- componentInfo
20
- };
@@ -1,19 +0,0 @@
1
- import * as React from "react";
2
- import { isEditing } from "../../functions/is-editing.js";
3
-
4
- export default function ImgComponent(props) {
5
- const _context = { ...props["_context"] };
6
-
7
- return (
8
- <img
9
- style={{
10
- objectFit: props.backgroundSize || "cover",
11
- objectPosition: props.backgroundPosition || "center",
12
- }}
13
- key={(isEditing() && props.imgSrc) || "default-key"}
14
- alt={props.altText}
15
- src={props.imgSrc || props.image}
16
- {...props.attributes}
17
- />
18
- );
19
- }