@builder.io/sdk-react 0.2.3-4 → 0.3.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 (288) hide show
  1. package/README.md +72 -3
  2. package/dist/sdk/blocks/columns/columns.js +5 -5
  3. package/dist/sdk/blocks/image/image.js +8 -7
  4. package/dist/sdk/blocks/symbol/symbol.js +3 -2
  5. package/dist/sdk/blocks/video/video.js +4 -1
  6. package/dist/sdk/components/render-block/block-styles.js +3 -1
  7. package/dist/sdk/components/render-block/render-block.helpers.d.ts +0 -1
  8. package/dist/sdk/components/render-block/render-block.helpers.js +8 -20
  9. package/dist/sdk/components/render-block/render-block.js +24 -15
  10. package/dist/sdk/components/render-block/render-repeated-block.js +3 -2
  11. package/dist/sdk/components/render-content/render-content.js +31 -12
  12. package/dist/sdk/components/render-content-variants/helpers.d.ts +12 -0
  13. package/dist/sdk/components/render-content-variants/helpers.js +154 -0
  14. package/dist/sdk/components/render-content-variants/render-content-variants.d.ts +5 -0
  15. package/dist/sdk/components/render-content-variants/render-content-variants.js +29 -0
  16. package/dist/sdk/components/render-inlined-styles.js +2 -2
  17. package/dist/sdk/constants/sdk-version.d.ts +1 -0
  18. package/dist/sdk/constants/sdk-version.js +1 -0
  19. package/dist/sdk/context/builder.context.js +3 -2
  20. package/dist/sdk/context/types.d.ts +17 -2
  21. package/dist/sdk/functions/evaluate.d.ts +4 -3
  22. package/dist/sdk/functions/evaluate.js +23 -2
  23. package/dist/sdk/functions/evaluate.test.d.ts +1 -0
  24. package/dist/sdk/functions/evaluate.test.js +17 -0
  25. package/dist/sdk/functions/get-block-actions-handler.d.ts +1 -1
  26. package/dist/sdk/functions/get-block-actions-handler.js +3 -1
  27. package/dist/sdk/functions/get-block-actions.d.ts +1 -1
  28. package/dist/sdk/functions/get-processed-block.d.ts +2 -2
  29. package/dist/sdk/functions/get-processed-block.js +16 -4
  30. package/dist/sdk/functions/get-processed-block.test.js +3 -1
  31. package/dist/sdk/helpers/canTrack.d.ts +1 -0
  32. package/dist/sdk/helpers/canTrack.js +2 -0
  33. package/dist/sdk/index.d.ts +1 -0
  34. package/dist/sdk/scripts/init-editing.js +2 -0
  35. package/package.json +5 -5
  36. package/CHANGELOG.md +0 -25
  37. package/packages/react/src/blocks/BaseText.tsx +0 -19
  38. package/packages/react/src/blocks/button/button.tsx +0 -45
  39. package/packages/react/src/blocks/button/component-info.ts +0 -42
  40. package/packages/react/src/blocks/columns/columns.tsx +0 -211
  41. package/packages/react/src/blocks/columns/component-info.ts +0 -254
  42. package/packages/react/src/blocks/custom-code/component-info.ts +0 -31
  43. package/packages/react/src/blocks/custom-code/custom-code.tsx +0 -76
  44. package/packages/react/src/blocks/embed/component-info.ts +0 -55
  45. package/packages/react/src/blocks/embed/embed.tsx +0 -59
  46. package/packages/react/src/blocks/embed/helpers.ts +0 -8
  47. package/packages/react/src/blocks/form/component-info.ts +0 -282
  48. package/packages/react/src/blocks/form/form.tsx +0 -320
  49. package/packages/react/src/blocks/fragment/component-info.ts +0 -10
  50. package/packages/react/src/blocks/fragment/fragment.tsx +0 -14
  51. package/packages/react/src/blocks/image/component-info.ts +0 -172
  52. package/packages/react/src/blocks/image/image.helpers.ts +0 -75
  53. package/packages/react/src/blocks/image/image.tsx +0 -144
  54. package/packages/react/src/blocks/img/component-info.ts +0 -21
  55. package/packages/react/src/blocks/img/img.tsx +0 -40
  56. package/packages/react/src/blocks/input/component-info.ts +0 -78
  57. package/packages/react/src/blocks/input/input.tsx +0 -33
  58. package/packages/react/src/blocks/raw-text/component-info.ts +0 -15
  59. package/packages/react/src/blocks/raw-text/raw-text.tsx +0 -18
  60. package/packages/react/src/blocks/section/component-info.ts +0 -50
  61. package/packages/react/src/blocks/section/section.tsx +0 -33
  62. package/packages/react/src/blocks/select/component-info.ts +0 -61
  63. package/packages/react/src/blocks/select/select.tsx +0 -35
  64. package/packages/react/src/blocks/submit-button/component-info.ts +0 -32
  65. package/packages/react/src/blocks/submit-button/submit-button.tsx +0 -17
  66. package/packages/react/src/blocks/symbol/component-info.ts +0 -43
  67. package/packages/react/src/blocks/symbol/symbol.tsx +0 -111
  68. package/packages/react/src/blocks/text/component-info.ts +0 -24
  69. package/packages/react/src/blocks/text/text.tsx +0 -20
  70. package/packages/react/src/blocks/textarea/component-info.ts +0 -48
  71. package/packages/react/src/blocks/textarea/textarea.tsx +0 -24
  72. package/packages/react/src/blocks/util.ts +0 -18
  73. package/packages/react/src/blocks/video/component-info.ts +0 -109
  74. package/packages/react/src/blocks/video/video.tsx +0 -84
  75. package/packages/react/src/components/render-block/block-styles.tsx +0 -98
  76. package/packages/react/src/components/render-block/render-block.helpers.ts +0 -138
  77. package/packages/react/src/components/render-block/render-block.tsx +0 -216
  78. package/packages/react/src/components/render-block/render-component.tsx +0 -52
  79. package/packages/react/src/components/render-block/render-repeated-block.tsx +0 -43
  80. package/packages/react/src/components/render-block/types.ts +0 -7
  81. package/packages/react/src/components/render-blocks.tsx +0 -97
  82. package/packages/react/src/components/render-content/builder-editing.tsx +0 -8
  83. package/packages/react/src/components/render-content/components/render-styles.helpers.ts +0 -79
  84. package/packages/react/src/components/render-content/components/render-styles.tsx +0 -45
  85. package/packages/react/src/components/render-content/index.ts +0 -1
  86. package/packages/react/src/components/render-content/render-content.helpers.ts +0 -48
  87. package/packages/react/src/components/render-content/render-content.tsx +0 -410
  88. package/packages/react/src/components/render-content/render-content.types.ts +0 -33
  89. package/packages/react/src/components/render-inlined-styles.tsx +0 -36
  90. package/packages/react/src/constants/builder-registered-components.ts +0 -42
  91. package/packages/react/src/constants/device-sizes.ts +0 -65
  92. package/packages/react/src/constants/target.ts +0 -2
  93. package/packages/react/src/context/builder.context.ts +0 -12
  94. package/packages/react/src/context/types.ts +0 -26
  95. package/packages/react/src/functions/camel-to-kebab-case.ts +0 -2
  96. package/packages/react/src/functions/evaluate.ts +0 -57
  97. package/packages/react/src/functions/event-handler-name.ts +0 -6
  98. package/packages/react/src/functions/extract-text-styles.ts +0 -39
  99. package/packages/react/src/functions/fast-clone.ts +0 -5
  100. package/packages/react/src/functions/get-block-actions-handler.ts +0 -20
  101. package/packages/react/src/functions/get-block-actions.ts +0 -25
  102. package/packages/react/src/functions/get-block-component-options.ts +0 -12
  103. package/packages/react/src/functions/get-block-properties.ts +0 -75
  104. package/packages/react/src/functions/get-builder-search-params/fn.test.ts +0 -19
  105. package/packages/react/src/functions/get-builder-search-params/index.ts +0 -50
  106. package/packages/react/src/functions/get-content/ab-testing.ts +0 -132
  107. package/packages/react/src/functions/get-content/generate-content-url.test.ts +0 -95
  108. package/packages/react/src/functions/get-content/generate-content-url.ts +0 -59
  109. package/packages/react/src/functions/get-content/index.ts +0 -62
  110. package/packages/react/src/functions/get-content/types.ts +0 -53
  111. package/packages/react/src/functions/get-fetch.ts +0 -18
  112. package/packages/react/src/functions/get-global-this.ts +0 -17
  113. package/packages/react/src/functions/get-processed-block.test.ts +0 -33
  114. package/packages/react/src/functions/get-processed-block.ts +0 -54
  115. package/packages/react/src/functions/get-react-native-block-styles.ts +0 -33
  116. package/packages/react/src/functions/if-target.ts +0 -20
  117. package/packages/react/src/functions/is-browser.ts +0 -3
  118. package/packages/react/src/functions/is-editing.ts +0 -10
  119. package/packages/react/src/functions/is-iframe.ts +0 -5
  120. package/packages/react/src/functions/is-previewing.ts +0 -14
  121. package/packages/react/src/functions/on-change.test.ts +0 -23
  122. package/packages/react/src/functions/on-change.ts +0 -29
  123. package/packages/react/src/functions/register-component.ts +0 -50
  124. package/packages/react/src/functions/register.ts +0 -46
  125. package/packages/react/src/functions/sanitize-react-native-block-styles.ts +0 -65
  126. package/packages/react/src/functions/set-editor-settings.ts +0 -16
  127. package/packages/react/src/functions/set.test.ts +0 -19
  128. package/packages/react/src/functions/set.ts +0 -26
  129. package/packages/react/src/functions/track/helpers.ts +0 -67
  130. package/packages/react/src/functions/track/index.ts +0 -136
  131. package/packages/react/src/functions/track/interaction.ts +0 -80
  132. package/packages/react/src/functions/transform-block-properties.ts +0 -3
  133. package/packages/react/src/functions/transform-block.ts +0 -6
  134. package/packages/react/src/helpers/ab-tests.ts +0 -22
  135. package/packages/react/src/helpers/cookie.ts +0 -107
  136. package/packages/react/src/helpers/css.ts +0 -42
  137. package/packages/react/src/helpers/flatten.ts +0 -24
  138. package/packages/react/src/helpers/localStorage.ts +0 -40
  139. package/packages/react/src/helpers/logger.ts +0 -6
  140. package/packages/react/src/helpers/nullable.ts +0 -4
  141. package/packages/react/src/helpers/sessionId.ts +0 -38
  142. package/packages/react/src/helpers/time.ts +0 -4
  143. package/packages/react/src/helpers/url.test.ts +0 -23
  144. package/packages/react/src/helpers/url.ts +0 -16
  145. package/packages/react/src/helpers/uuid.ts +0 -17
  146. package/packages/react/src/helpers/visitorId.ts +0 -40
  147. package/packages/react/src/index-helpers/blocks-exports.ts +0 -10
  148. package/packages/react/src/index-helpers/top-of-file.ts +0 -4
  149. package/packages/react/src/index.ts +0 -14
  150. package/packages/react/src/scripts/init-editing.ts +0 -123
  151. package/packages/react/src/types/api-version.ts +0 -2
  152. package/packages/react/src/types/builder-block.ts +0 -69
  153. package/packages/react/src/types/builder-content.ts +0 -46
  154. package/packages/react/src/types/can-track.ts +0 -3
  155. package/packages/react/src/types/components.ts +0 -117
  156. package/packages/react/src/types/deep-partial.ts +0 -7
  157. package/packages/react/src/types/element.ts +0 -60
  158. package/packages/react/src/types/input.ts +0 -125
  159. package/packages/react/src/types/targets.ts +0 -6
  160. package/packages/react/src/types/typescript.ts +0 -7
  161. package/packages/rsc/src/blocks/BaseText.jsx +0 -12
  162. package/packages/rsc/src/blocks/button/button.jsx +0 -37
  163. package/packages/rsc/src/blocks/button/component-info.js +0 -40
  164. package/packages/rsc/src/blocks/columns/columns.jsx +0 -172
  165. package/packages/rsc/src/blocks/columns/component-info.js +0 -241
  166. package/packages/rsc/src/blocks/custom-code/component-info.js +0 -30
  167. package/packages/rsc/src/blocks/custom-code/custom-code.jsx +0 -57
  168. package/packages/rsc/src/blocks/embed/component-info.js +0 -43
  169. package/packages/rsc/src/blocks/embed/embed.jsx +0 -45
  170. package/packages/rsc/src/blocks/embed/helpers.js +0 -9
  171. package/packages/rsc/src/blocks/form/component-info.js +0 -261
  172. package/packages/rsc/src/blocks/form/form.jsx +0 -260
  173. package/packages/rsc/src/blocks/fragment/component-info.js +0 -10
  174. package/packages/rsc/src/blocks/fragment/fragment.jsx +0 -9
  175. package/packages/rsc/src/blocks/image/component-info.js +0 -150
  176. package/packages/rsc/src/blocks/image/image.helpers.js +0 -48
  177. package/packages/rsc/src/blocks/image/image.jsx +0 -122
  178. package/packages/rsc/src/blocks/img/component-info.js +0 -19
  179. package/packages/rsc/src/blocks/img/img.jsx +0 -21
  180. package/packages/rsc/src/blocks/input/component-info.js +0 -73
  181. package/packages/rsc/src/blocks/input/input.jsx +0 -23
  182. package/packages/rsc/src/blocks/raw-text/component-info.js +0 -15
  183. package/packages/rsc/src/blocks/raw-text/raw-text.jsx +0 -14
  184. package/packages/rsc/src/blocks/section/component-info.js +0 -48
  185. package/packages/rsc/src/blocks/section/section.jsx +0 -27
  186. package/packages/rsc/src/blocks/select/component-info.js +0 -58
  187. package/packages/rsc/src/blocks/select/select.jsx +0 -24
  188. package/packages/rsc/src/blocks/submit-button/component-info.js +0 -27
  189. package/packages/rsc/src/blocks/submit-button/submit-button.jsx +0 -13
  190. package/packages/rsc/src/blocks/symbol/component-info.js +0 -42
  191. package/packages/rsc/src/blocks/symbol/symbol.jsx +0 -89
  192. package/packages/rsc/src/blocks/text/component-info.js +0 -23
  193. package/packages/rsc/src/blocks/text/text.jsx +0 -17
  194. package/packages/rsc/src/blocks/textarea/component-info.js +0 -46
  195. package/packages/rsc/src/blocks/textarea/textarea.jsx +0 -17
  196. package/packages/rsc/src/blocks/util.js +0 -8
  197. package/packages/rsc/src/blocks/video/component-info.js +0 -105
  198. package/packages/rsc/src/blocks/video/video.jsx +0 -63
  199. package/packages/rsc/src/components/render-block/block-styles.jsx +0 -88
  200. package/packages/rsc/src/components/render-block/render-block.helpers.js +0 -129
  201. package/packages/rsc/src/components/render-block/render-block.jsx +0 -201
  202. package/packages/rsc/src/components/render-block/render-component.jsx +0 -39
  203. package/packages/rsc/src/components/render-block/render-repeated-block.jsx +0 -27
  204. package/packages/rsc/src/components/render-block/types.js +0 -0
  205. package/packages/rsc/src/components/render-blocks.jsx +0 -92
  206. package/packages/rsc/src/components/render-content/builder-editing.jsx +0 -64
  207. package/packages/rsc/src/components/render-content/components/render-styles.helpers.js +0 -57
  208. package/packages/rsc/src/components/render-content/components/render-styles.jsx +0 -39
  209. package/packages/rsc/src/components/render-content/index.js +0 -4
  210. package/packages/rsc/src/components/render-content/render-content.helpers.js +0 -48
  211. package/packages/rsc/src/components/render-content/render-content.jsx +0 -253
  212. package/packages/rsc/src/components/render-content/render-content.types.js +0 -0
  213. package/packages/rsc/src/components/render-inlined-styles.jsx +0 -33
  214. package/packages/rsc/src/constants/builder-registered-components.js +0 -54
  215. package/packages/rsc/src/constants/device-sizes.js +0 -48
  216. package/packages/rsc/src/constants/target.js +0 -4
  217. package/packages/rsc/src/context/builder.context.js +0 -14
  218. package/packages/rsc/src/context/types.js +0 -0
  219. package/packages/rsc/src/functions/camel-to-kebab-case.js +0 -4
  220. package/packages/rsc/src/functions/evaluate.js +0 -6
  221. package/packages/rsc/src/functions/event-handler-name.js +0 -7
  222. package/packages/rsc/src/functions/extract-text-styles.js +0 -22
  223. package/packages/rsc/src/functions/fast-clone.js +0 -4
  224. package/packages/rsc/src/functions/get-block-actions-handler.js +0 -11
  225. package/packages/rsc/src/functions/get-block-actions.js +0 -18
  226. package/packages/rsc/src/functions/get-block-component-options.js +0 -28
  227. package/packages/rsc/src/functions/get-block-properties.js +0 -53
  228. package/packages/rsc/src/functions/get-builder-search-params/fn.test.js +0 -13
  229. package/packages/rsc/src/functions/get-builder-search-params/index.js +0 -38
  230. package/packages/rsc/src/functions/get-content/ab-testing.js +0 -99
  231. package/packages/rsc/src/functions/get-content/generate-content-url.js +0 -60
  232. package/packages/rsc/src/functions/get-content/generate-content-url.test.js +0 -82
  233. package/packages/rsc/src/functions/get-content/index.js +0 -83
  234. package/packages/rsc/src/functions/get-content/types.js +0 -0
  235. package/packages/rsc/src/functions/get-fetch.js +0 -14
  236. package/packages/rsc/src/functions/get-global-this.js +0 -18
  237. package/packages/rsc/src/functions/get-processed-block.js +0 -59
  238. package/packages/rsc/src/functions/get-processed-block.test.js +0 -32
  239. package/packages/rsc/src/functions/get-react-native-block-styles.js +0 -33
  240. package/packages/rsc/src/functions/if-target.js +0 -15
  241. package/packages/rsc/src/functions/is-browser.js +0 -6
  242. package/packages/rsc/src/functions/is-editing.js +0 -8
  243. package/packages/rsc/src/functions/is-iframe.js +0 -7
  244. package/packages/rsc/src/functions/is-previewing.js +0 -14
  245. package/packages/rsc/src/functions/on-change.js +0 -27
  246. package/packages/rsc/src/functions/on-change.test.js +0 -19
  247. package/packages/rsc/src/functions/register-component.js +0 -68
  248. package/packages/rsc/src/functions/register.js +0 -29
  249. package/packages/rsc/src/functions/sanitize-react-native-block-styles.js +0 -66
  250. package/packages/rsc/src/functions/set-editor-settings.js +0 -15
  251. package/packages/rsc/src/functions/set.js +0 -11
  252. package/packages/rsc/src/functions/set.test.js +0 -16
  253. package/packages/rsc/src/functions/track/helpers.js +0 -50
  254. package/packages/rsc/src/functions/track/index.js +0 -129
  255. package/packages/rsc/src/functions/track/interaction.js +0 -53
  256. package/packages/rsc/src/functions/transform-block-properties.js +0 -6
  257. package/packages/rsc/src/functions/transform-block.js +0 -6
  258. package/packages/rsc/src/helpers/ab-tests.js +0 -16
  259. package/packages/rsc/src/helpers/cookie.js +0 -81
  260. package/packages/rsc/src/helpers/css.js +0 -34
  261. package/packages/rsc/src/helpers/flatten.js +0 -34
  262. package/packages/rsc/src/helpers/localStorage.js +0 -35
  263. package/packages/rsc/src/helpers/logger.js +0 -9
  264. package/packages/rsc/src/helpers/nullable.js +0 -4
  265. package/packages/rsc/src/helpers/sessionId.js +0 -52
  266. package/packages/rsc/src/helpers/time.js +0 -5
  267. package/packages/rsc/src/helpers/url.js +0 -13
  268. package/packages/rsc/src/helpers/url.test.js +0 -21
  269. package/packages/rsc/src/helpers/uuid.js +0 -13
  270. package/packages/rsc/src/helpers/visitorId.js +0 -34
  271. package/packages/rsc/src/index-helpers/blocks-exports.js +0 -22
  272. package/packages/rsc/src/index-helpers/top-of-file.js +0 -2
  273. package/packages/rsc/src/index.js +0 -13
  274. package/packages/rsc/src/scripts/init-editing.js +0 -93
  275. package/packages/rsc/src/types/api-version.js +0 -4
  276. package/packages/rsc/src/types/builder-block.js +0 -0
  277. package/packages/rsc/src/types/builder-content.js +0 -0
  278. package/packages/rsc/src/types/can-track.js +0 -0
  279. package/packages/rsc/src/types/components.js +0 -0
  280. package/packages/rsc/src/types/deep-partial.js +0 -0
  281. package/packages/rsc/src/types/element.js +0 -0
  282. package/packages/rsc/src/types/input.js +0 -0
  283. package/packages/rsc/src/types/targets.js +0 -0
  284. package/packages/rsc/src/types/typescript.js +0 -0
  285. package/tsconfig.json +0 -28
  286. package/tsconfig.sdk.json +0 -10
  287. package/tsconfig.server.json +0 -10
  288. package/vite.config.ts +0 -91
@@ -1,261 +0,0 @@
1
- const componentInfo = {
2
- name: "Form:Form",
3
- defaults: {
4
- responsiveStyles: {
5
- large: {
6
- marginTop: "15px",
7
- paddingBottom: "15px"
8
- }
9
- }
10
- },
11
- image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fef36d2a846134910b64b88e6d18c5ca5",
12
- inputs: [
13
- {
14
- name: "sendSubmissionsTo",
15
- type: "string",
16
- enum: [
17
- {
18
- label: "Send to email",
19
- value: "email",
20
- helperText: "Send form submissions to the email address of your choosing"
21
- },
22
- {
23
- label: "Custom",
24
- value: "custom",
25
- helperText: "Handle where the form requests go manually with a little code, e.g. to your own custom backend"
26
- }
27
- ],
28
- defaultValue: "email"
29
- },
30
- {
31
- name: "sendSubmissionsToEmail",
32
- type: "string",
33
- required: true,
34
- defaultValue: "your@email.com",
35
- showIf: 'options.get("sendSubmissionsTo") === "email"'
36
- },
37
- {
38
- name: "sendWithJs",
39
- type: "boolean",
40
- helperText: "Set to false to use basic html form action",
41
- defaultValue: true,
42
- showIf: 'options.get("sendSubmissionsTo") === "custom"'
43
- },
44
- {
45
- name: "name",
46
- type: "string",
47
- defaultValue: "My form"
48
- },
49
- {
50
- name: "action",
51
- type: "string",
52
- helperText: "URL to send the form data to",
53
- showIf: 'options.get("sendSubmissionsTo") === "custom"'
54
- },
55
- {
56
- name: "contentType",
57
- type: "string",
58
- defaultValue: "application/json",
59
- advanced: true,
60
- enum: [
61
- "application/json",
62
- "multipart/form-data",
63
- "application/x-www-form-urlencoded"
64
- ],
65
- showIf: 'options.get("sendSubmissionsTo") === "custom" && options.get("sendWithJs") === true'
66
- },
67
- {
68
- name: "method",
69
- type: "string",
70
- showIf: 'options.get("sendSubmissionsTo") === "custom"',
71
- defaultValue: "POST",
72
- advanced: true
73
- },
74
- {
75
- name: "previewState",
76
- type: "string",
77
- enum: ["unsubmitted", "sending", "success", "error"],
78
- defaultValue: "unsubmitted",
79
- helperText: 'Choose a state to edit, e.g. choose "success" to show what users see on success and edit the message',
80
- showIf: 'options.get("sendSubmissionsTo") !== "zapier" && options.get("sendWithJs") === true'
81
- },
82
- {
83
- name: "successUrl",
84
- type: "url",
85
- helperText: "Optional URL to redirect the user to on form submission success",
86
- showIf: 'options.get("sendSubmissionsTo") !== "zapier" && options.get("sendWithJs") === true'
87
- },
88
- {
89
- name: "resetFormOnSubmit",
90
- type: "boolean",
91
- showIf: "options.get('sendSubmissionsTo') === 'custom' && options.get('sendWithJs') === true",
92
- advanced: true
93
- },
94
- {
95
- name: "successMessage",
96
- type: "uiBlocks",
97
- hideFromUI: true,
98
- defaultValue: [
99
- {
100
- "@type": "@builder.io/sdk:Element",
101
- responsiveStyles: {
102
- large: {
103
- marginTop: "10px"
104
- }
105
- },
106
- component: {
107
- name: "Text",
108
- options: {
109
- text: "<span>Thanks!</span>"
110
- }
111
- }
112
- }
113
- ]
114
- },
115
- {
116
- name: "validate",
117
- type: "boolean",
118
- defaultValue: true,
119
- advanced: true
120
- },
121
- {
122
- name: "errorMessagePath",
123
- type: "text",
124
- advanced: true,
125
- helperText: 'Path to where to get the error message from in a JSON response to display to the user, e.g. "error.message" for a response like { "error": { "message": "this username is taken" }}'
126
- },
127
- {
128
- name: "errorMessage",
129
- type: "uiBlocks",
130
- hideFromUI: true,
131
- defaultValue: [
132
- {
133
- "@type": "@builder.io/sdk:Element",
134
- responsiveStyles: {
135
- large: {
136
- marginTop: "10px"
137
- }
138
- },
139
- bindings: {
140
- "component.options.text": "state.formErrorMessage || block.component.options.text"
141
- },
142
- component: {
143
- name: "Text",
144
- options: {
145
- text: "<span>Form submission error :( Please check your answers and try again</span>"
146
- }
147
- }
148
- }
149
- ]
150
- },
151
- {
152
- name: "sendingMessage",
153
- type: "uiBlocks",
154
- hideFromUI: true,
155
- defaultValue: [
156
- {
157
- "@type": "@builder.io/sdk:Element",
158
- responsiveStyles: {
159
- large: {
160
- marginTop: "10px"
161
- }
162
- },
163
- component: {
164
- name: "Text",
165
- options: {
166
- text: "<span>Sending...</span>"
167
- }
168
- }
169
- }
170
- ]
171
- },
172
- {
173
- name: "customHeaders",
174
- type: "map",
175
- valueType: {
176
- type: "string"
177
- },
178
- advanced: true,
179
- showIf: 'options.get("sendSubmissionsTo") === "custom" && options.get("sendWithJs") === true'
180
- }
181
- ],
182
- noWrap: true,
183
- canHaveChildren: true,
184
- defaultChildren: [
185
- {
186
- "@type": "@builder.io/sdk:Element",
187
- responsiveStyles: {
188
- large: {
189
- marginTop: "10px"
190
- }
191
- },
192
- component: {
193
- name: "Text",
194
- options: {
195
- text: "<span>Enter your name</span>"
196
- }
197
- }
198
- },
199
- {
200
- "@type": "@builder.io/sdk:Element",
201
- responsiveStyles: {
202
- large: {
203
- marginTop: "10px"
204
- }
205
- },
206
- component: {
207
- name: "Form:Input",
208
- options: {
209
- name: "name",
210
- placeholder: "Jane Doe"
211
- }
212
- }
213
- },
214
- {
215
- "@type": "@builder.io/sdk:Element",
216
- responsiveStyles: {
217
- large: {
218
- marginTop: "10px"
219
- }
220
- },
221
- component: {
222
- name: "Text",
223
- options: {
224
- text: "<span>Enter your email</span>"
225
- }
226
- }
227
- },
228
- {
229
- "@type": "@builder.io/sdk:Element",
230
- responsiveStyles: {
231
- large: {
232
- marginTop: "10px"
233
- }
234
- },
235
- component: {
236
- name: "Form:Input",
237
- options: {
238
- name: "email",
239
- placeholder: "jane@doe.com"
240
- }
241
- }
242
- },
243
- {
244
- "@type": "@builder.io/sdk:Element",
245
- responsiveStyles: {
246
- large: {
247
- marginTop: "10px"
248
- }
249
- },
250
- component: {
251
- name: "Form:SubmitButton",
252
- options: {
253
- text: "Submit"
254
- }
255
- }
256
- }
257
- ]
258
- };
259
- export {
260
- componentInfo
261
- };
@@ -1,260 +0,0 @@
1
- import * as React from "react";
2
- import RenderBlock from "../../components/render-block/render-block";
3
- import BuilderBlocks from "../../components/render-blocks";
4
- import { isEditing } from "../../functions/is-editing.js";
5
-
6
- 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-1adaf299">
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-1adaf299 { padding: 10px; color: red; text-align: center; }`}</style>{" "}
257
- </>
258
- );
259
- }
260
- export default FormComponent;
@@ -1,10 +0,0 @@
1
- const componentInfo = {
2
- name: "Fragment",
3
- static: true,
4
- hidden: true,
5
- canHaveChildren: true,
6
- noWrap: true
7
- };
8
- export {
9
- componentInfo
10
- };
@@ -1,9 +0,0 @@
1
- import * as React from "react";
2
-
3
- function FragmentComponent(props) {
4
- const _context = { ...props["_context"] };
5
-
6
- return <span>{props.children}</span>;
7
- }
8
-
9
- export default FragmentComponent;
@@ -1,150 +0,0 @@
1
- import { serializeFn } from "../util.js";
2
- const componentInfo = {
3
- name: "Image",
4
- static: 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
- defaultStyles: {
7
- position: "relative",
8
- minHeight: "20px",
9
- minWidth: "20px",
10
- overflow: "hidden"
11
- },
12
- canHaveChildren: true,
13
- inputs: [
14
- {
15
- name: "image",
16
- type: "file",
17
- bubble: true,
18
- allowedFileTypes: ["jpeg", "jpg", "png", "svg"],
19
- required: true,
20
- defaultValue: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a",
21
- onChange: serializeFn((options) => {
22
- const DEFAULT_ASPECT_RATIO = 0.7041;
23
- options.delete("srcset");
24
- options.delete("noWebp");
25
- function loadImage(url, timeout = 6e4) {
26
- return new Promise((resolve, reject) => {
27
- const img = document.createElement("img");
28
- let loaded = false;
29
- img.onload = () => {
30
- loaded = true;
31
- resolve(img);
32
- };
33
- img.addEventListener("error", (event) => {
34
- console.warn("Image load failed", event.error);
35
- reject(event.error);
36
- });
37
- img.src = url;
38
- setTimeout(() => {
39
- if (!loaded) {
40
- reject(new Error("Image load timed out"));
41
- }
42
- }, timeout);
43
- });
44
- }
45
- function round(num) {
46
- return Math.round(num * 1e3) / 1e3;
47
- }
48
- const value = options.get("image");
49
- const aspectRatio = options.get("aspectRatio");
50
- fetch(value).then((res) => res.blob()).then((blob) => {
51
- if (blob.type.includes("svg")) {
52
- options.set("noWebp", true);
53
- }
54
- });
55
- if (value && (!aspectRatio || aspectRatio === DEFAULT_ASPECT_RATIO)) {
56
- return loadImage(value).then((img) => {
57
- const possiblyUpdatedAspectRatio = options.get("aspectRatio");
58
- if (options.get("image") === value && (!possiblyUpdatedAspectRatio || possiblyUpdatedAspectRatio === DEFAULT_ASPECT_RATIO)) {
59
- if (img.width && img.height) {
60
- options.set("aspectRatio", round(img.height / img.width));
61
- options.set("height", img.height);
62
- options.set("width", img.width);
63
- }
64
- }
65
- });
66
- }
67
- })
68
- },
69
- {
70
- name: "backgroundSize",
71
- type: "text",
72
- defaultValue: "cover",
73
- enum: [
74
- {
75
- label: "contain",
76
- value: "contain",
77
- helperText: "The image should never get cropped"
78
- },
79
- {
80
- label: "cover",
81
- value: "cover",
82
- helperText: "The image should fill it's box, cropping when needed"
83
- }
84
- ]
85
- },
86
- {
87
- name: "backgroundPosition",
88
- type: "text",
89
- defaultValue: "center",
90
- enum: [
91
- "center",
92
- "top",
93
- "left",
94
- "right",
95
- "bottom",
96
- "top left",
97
- "top right",
98
- "bottom left",
99
- "bottom right"
100
- ]
101
- },
102
- {
103
- name: "altText",
104
- type: "string",
105
- helperText: "Text to display when the user has images off"
106
- },
107
- {
108
- name: "height",
109
- type: "number",
110
- hideFromUI: true
111
- },
112
- {
113
- name: "width",
114
- type: "number",
115
- hideFromUI: true
116
- },
117
- {
118
- name: "sizes",
119
- type: "string",
120
- hideFromUI: true
121
- },
122
- {
123
- name: "srcset",
124
- type: "string",
125
- hideFromUI: true
126
- },
127
- {
128
- name: "lazy",
129
- type: "boolean",
130
- defaultValue: true,
131
- hideFromUI: true
132
- },
133
- {
134
- name: "fitContent",
135
- type: "boolean",
136
- helperText: "When child blocks are provided, fit to them instead of using the image's aspect ratio",
137
- defaultValue: true
138
- },
139
- {
140
- name: "aspectRatio",
141
- type: "number",
142
- 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",
143
- advanced: true,
144
- defaultValue: 0.7041
145
- }
146
- ]
147
- };
148
- export {
149
- componentInfo
150
- };