@builder.io/sdk-svelte 0.13.1 → 0.13.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 (172) hide show
  1. package/lib/browser/blocks/columns/columns.svelte +0 -1
  2. package/lib/browser/blocks/columns/columns.svelte.d.ts +8 -10
  3. package/lib/browser/blocks/columns/columns.types.d.ts +2 -2
  4. package/lib/browser/blocks/form/form/component-info.d.ts +2 -0
  5. package/lib/browser/blocks/form/form/form.svelte +302 -0
  6. package/lib/browser/blocks/form/input/component-info.d.ts +2 -0
  7. package/lib/browser/blocks/{input → form/input}/input.svelte +3 -3
  8. package/lib/browser/blocks/form/select/component-info.d.ts +2 -0
  9. package/lib/{node/blocks → browser/blocks/form}/select/select.svelte +3 -3
  10. package/lib/browser/blocks/form/submit-button/component-info.d.ts +2 -0
  11. package/lib/{node/blocks → browser/blocks/form}/submit-button/submit-button.svelte +2 -2
  12. package/lib/browser/blocks/slot/slot.svelte +1 -0
  13. package/lib/browser/blocks/slot/slot.svelte.d.ts +4 -7
  14. package/lib/browser/blocks/symbol/symbol.svelte +0 -1
  15. package/lib/browser/blocks/symbol/symbol.svelte.d.ts +7 -9
  16. package/lib/browser/blocks/symbol/symbol.types.d.ts +2 -2
  17. package/lib/browser/components/block/block.svelte +4 -2
  18. package/lib/browser/components/block/components/block-wrapper.svelte.d.ts +4 -4
  19. package/lib/browser/components/block/components/component-ref/component-ref.helpers.d.ts +3 -3
  20. package/lib/browser/components/content/content.types.d.ts +1 -8
  21. package/lib/browser/components/content/contentProps.types.d.ts +12 -0
  22. package/lib/browser/components/content/contentProps.types.js +1 -0
  23. package/lib/browser/components/dynamic-renderer/dynamic-renderer.svelte +2 -0
  24. package/lib/browser/constants/builder-registered-components.js +5 -24
  25. package/lib/browser/constants/extra-components.d.ts +7 -0
  26. package/lib/browser/constants/extra-components.js +47 -0
  27. package/lib/browser/constants/sdk-version.d.ts +1 -1
  28. package/lib/browser/constants/sdk-version.js +1 -1
  29. package/lib/browser/functions/get-env.d.ts +2 -0
  30. package/lib/browser/functions/get-env.js +5 -0
  31. package/lib/browser/functions/get.d.ts +1 -0
  32. package/lib/browser/functions/get.js +4 -0
  33. package/lib/browser/types/builder-props.d.ts +1 -1
  34. package/lib/browser/types/input.d.ts +1 -0
  35. package/lib/browser/types/typescript.d.ts +0 -3
  36. package/lib/edge/blocks/columns/columns.svelte +0 -1
  37. package/lib/edge/blocks/columns/columns.svelte.d.ts +8 -10
  38. package/lib/edge/blocks/columns/columns.types.d.ts +2 -2
  39. package/lib/edge/blocks/form/form/component-info.d.ts +2 -0
  40. package/lib/edge/blocks/form/form/form.svelte +302 -0
  41. package/lib/edge/blocks/form/input/component-info.d.ts +2 -0
  42. package/lib/{node/blocks → edge/blocks/form}/input/input.svelte +3 -3
  43. package/lib/edge/blocks/form/select/component-info.d.ts +2 -0
  44. package/lib/{browser/blocks → edge/blocks/form}/select/select.svelte +3 -3
  45. package/lib/edge/blocks/form/submit-button/component-info.d.ts +2 -0
  46. package/lib/edge/blocks/{submit-button → form/submit-button}/submit-button.svelte +2 -2
  47. package/lib/edge/blocks/slot/slot.svelte +1 -0
  48. package/lib/edge/blocks/slot/slot.svelte.d.ts +4 -7
  49. package/lib/edge/blocks/symbol/symbol.svelte +0 -1
  50. package/lib/edge/blocks/symbol/symbol.svelte.d.ts +7 -9
  51. package/lib/edge/blocks/symbol/symbol.types.d.ts +2 -2
  52. package/lib/edge/components/block/block.svelte +4 -2
  53. package/lib/edge/components/block/components/block-wrapper.svelte.d.ts +4 -4
  54. package/lib/edge/components/block/components/component-ref/component-ref.helpers.d.ts +3 -3
  55. package/lib/edge/components/content/content.types.d.ts +1 -8
  56. package/lib/edge/components/content/contentProps.types.d.ts +12 -0
  57. package/lib/edge/components/content/contentProps.types.js +1 -0
  58. package/lib/edge/components/dynamic-renderer/dynamic-renderer.svelte +2 -0
  59. package/lib/edge/constants/builder-registered-components.js +5 -24
  60. package/lib/edge/constants/extra-components.d.ts +7 -0
  61. package/lib/edge/constants/extra-components.js +47 -0
  62. package/lib/edge/constants/sdk-version.d.ts +1 -1
  63. package/lib/edge/constants/sdk-version.js +1 -1
  64. package/lib/edge/functions/get-env.d.ts +2 -0
  65. package/lib/edge/functions/get-env.js +5 -0
  66. package/lib/edge/functions/get.d.ts +1 -0
  67. package/lib/edge/functions/get.js +4 -0
  68. package/lib/edge/types/builder-props.d.ts +1 -1
  69. package/lib/edge/types/input.d.ts +1 -0
  70. package/lib/edge/types/typescript.d.ts +0 -3
  71. package/lib/node/blocks/columns/columns.svelte +0 -1
  72. package/lib/node/blocks/columns/columns.svelte.d.ts +8 -10
  73. package/lib/node/blocks/columns/columns.types.d.ts +2 -2
  74. package/lib/node/blocks/form/form/component-info.d.ts +2 -0
  75. package/lib/node/blocks/form/form/form.svelte +302 -0
  76. package/lib/node/blocks/form/input/component-info.d.ts +2 -0
  77. package/lib/{edge/blocks → node/blocks/form}/input/input.svelte +3 -3
  78. package/lib/node/blocks/form/select/component-info.d.ts +2 -0
  79. package/lib/{edge/blocks → node/blocks/form}/select/select.svelte +3 -3
  80. package/lib/node/blocks/form/submit-button/component-info.d.ts +2 -0
  81. package/lib/{browser/blocks → node/blocks/form}/submit-button/submit-button.svelte +2 -2
  82. package/lib/node/blocks/slot/slot.svelte +1 -0
  83. package/lib/node/blocks/slot/slot.svelte.d.ts +4 -7
  84. package/lib/node/blocks/symbol/symbol.svelte +0 -1
  85. package/lib/node/blocks/symbol/symbol.svelte.d.ts +7 -9
  86. package/lib/node/blocks/symbol/symbol.types.d.ts +2 -2
  87. package/lib/node/components/block/block.svelte +4 -2
  88. package/lib/node/components/block/components/block-wrapper.svelte.d.ts +4 -4
  89. package/lib/node/components/block/components/component-ref/component-ref.helpers.d.ts +3 -3
  90. package/lib/node/components/content/content.types.d.ts +1 -8
  91. package/lib/node/components/content/contentProps.types.d.ts +12 -0
  92. package/lib/node/components/content/contentProps.types.js +1 -0
  93. package/lib/node/components/dynamic-renderer/dynamic-renderer.svelte +2 -0
  94. package/lib/node/constants/builder-registered-components.js +5 -24
  95. package/lib/node/constants/extra-components.d.ts +7 -0
  96. package/lib/node/constants/extra-components.js +47 -0
  97. package/lib/node/constants/sdk-version.d.ts +1 -1
  98. package/lib/node/constants/sdk-version.js +1 -1
  99. package/lib/node/functions/get-env.d.ts +2 -0
  100. package/lib/node/functions/get-env.js +5 -0
  101. package/lib/node/functions/get.d.ts +1 -0
  102. package/lib/node/functions/get.js +4 -0
  103. package/lib/node/types/builder-props.d.ts +1 -1
  104. package/lib/node/types/input.d.ts +1 -0
  105. package/lib/node/types/typescript.d.ts +0 -3
  106. package/package.json +1 -1
  107. package/src/blocks/columns/columns.svelte +8 -11
  108. package/src/blocks/columns/columns.types.ts +2 -2
  109. package/src/blocks/form/{component-info.ts → form/component-info.ts} +1 -1
  110. package/src/blocks/form/form/form.svelte +358 -0
  111. package/src/blocks/{input → form/input}/component-info.ts +1 -1
  112. package/src/blocks/{input → form/input}/input.svelte +3 -3
  113. package/src/blocks/{select → form/select}/component-info.ts +1 -1
  114. package/src/blocks/{select → form/select}/select.svelte +3 -3
  115. package/src/blocks/{submit-button → form/submit-button}/component-info.ts +1 -1
  116. package/src/blocks/{submit-button → form/submit-button}/submit-button.svelte +2 -2
  117. package/src/blocks/slot/slot.svelte +4 -6
  118. package/src/blocks/symbol/symbol.svelte +7 -10
  119. package/src/blocks/symbol/symbol.types.ts +2 -2
  120. package/src/components/block/block.svelte +4 -2
  121. package/src/components/block/components/block-wrapper.svelte +4 -4
  122. package/src/components/block/components/component-ref/component-ref.helpers.ts +3 -3
  123. package/src/components/block/components/interactive-element.svelte +7 -9
  124. package/src/components/blocks/blocks-wrapper.svelte +7 -7
  125. package/src/components/content/content.types.ts +1 -7
  126. package/src/components/content/contentProps.types.ts +12 -0
  127. package/src/components/dynamic-renderer/dynamic-renderer.svelte +12 -16
  128. package/src/constants/builder-registered-components.ts +5 -24
  129. package/src/constants/extra-components.ts +49 -0
  130. package/src/constants/sdk-version.ts +1 -1
  131. package/src/functions/get-env.ts +5 -0
  132. package/src/functions/get.ts +4 -0
  133. package/src/types/builder-props.ts +1 -1
  134. package/src/types/input.ts +1 -0
  135. package/src/types/typescript.ts +1 -4
  136. package/lib/browser/blocks/form/component-info.d.ts +0 -2
  137. package/lib/browser/blocks/form/form.svelte +0 -2
  138. package/lib/browser/blocks/form/form.svelte.d.ts +0 -14
  139. package/lib/browser/blocks/input/component-info.d.ts +0 -2
  140. package/lib/browser/blocks/select/component-info.d.ts +0 -2
  141. package/lib/browser/blocks/submit-button/component-info.d.ts +0 -2
  142. package/lib/browser/components/dynamic-renderer/dynamic-renderer.svelte.d.ts +0 -21
  143. package/lib/edge/blocks/form/component-info.d.ts +0 -2
  144. package/lib/edge/blocks/form/form.svelte +0 -2
  145. package/lib/edge/blocks/form/form.svelte.d.ts +0 -14
  146. package/lib/edge/blocks/input/component-info.d.ts +0 -2
  147. package/lib/edge/blocks/select/component-info.d.ts +0 -2
  148. package/lib/edge/blocks/submit-button/component-info.d.ts +0 -2
  149. package/lib/edge/components/dynamic-renderer/dynamic-renderer.svelte.d.ts +0 -21
  150. package/lib/node/blocks/form/component-info.d.ts +0 -2
  151. package/lib/node/blocks/form/form.svelte +0 -2
  152. package/lib/node/blocks/form/form.svelte.d.ts +0 -14
  153. package/lib/node/blocks/input/component-info.d.ts +0 -2
  154. package/lib/node/blocks/select/component-info.d.ts +0 -2
  155. package/lib/node/blocks/submit-button/component-info.d.ts +0 -2
  156. package/lib/node/components/dynamic-renderer/dynamic-renderer.svelte.d.ts +0 -21
  157. package/src/blocks/form/form.svelte +0 -2
  158. /package/lib/browser/blocks/form/{component-info.js → form/component-info.js} +0 -0
  159. /package/lib/browser/blocks/{input → form/input}/component-info.js +0 -0
  160. /package/lib/browser/blocks/{select → form/select}/component-info.js +0 -0
  161. /package/lib/browser/blocks/{submit-button → form/submit-button}/component-info.js +0 -0
  162. /package/lib/browser/blocks/{submit-button → form/submit-button}/submit-button.svelte.d.ts +0 -0
  163. /package/lib/edge/blocks/form/{component-info.js → form/component-info.js} +0 -0
  164. /package/lib/edge/blocks/{input → form/input}/component-info.js +0 -0
  165. /package/lib/edge/blocks/{select → form/select}/component-info.js +0 -0
  166. /package/lib/edge/blocks/{submit-button → form/submit-button}/component-info.js +0 -0
  167. /package/lib/edge/blocks/{submit-button → form/submit-button}/submit-button.svelte.d.ts +0 -0
  168. /package/lib/node/blocks/form/{component-info.js → form/component-info.js} +0 -0
  169. /package/lib/node/blocks/{input → form/input}/component-info.js +0 -0
  170. /package/lib/node/blocks/{select → form/select}/component-info.js +0 -0
  171. /package/lib/node/blocks/{submit-button → form/submit-button}/component-info.js +0 -0
  172. /package/lib/node/blocks/{submit-button → form/submit-button}/submit-button.svelte.d.ts +0 -0
@@ -0,0 +1,358 @@
1
+ <script context="module" lang="ts">
2
+ /**
3
+ * This import is used by the Svelte SDK. Do not remove.
4
+ */
5
+
6
+ export type FormProps = BuilderDataProps &
7
+ BuilderComponentsProp &
8
+ BuilderLinkComponentProp & {
9
+ attributes?: any;
10
+ name?: string;
11
+ action?: string;
12
+ validate?: boolean;
13
+ method?: string;
14
+ sendSubmissionsTo?: string;
15
+ sendSubmissionsToEmail?: string;
16
+ sendWithJs?: boolean;
17
+ contentType?: string;
18
+ customHeaders?: {
19
+ [key: string]: string;
20
+ };
21
+ successUrl?: string;
22
+ previewState?: FormState;
23
+ successMessage?: BuilderBlock[];
24
+ errorMessage?: BuilderBlock[];
25
+ sendingMessage?: BuilderBlock[];
26
+ resetFormOnSubmit?: boolean;
27
+ errorMessagePath?: string;
28
+ };
29
+
30
+ /**
31
+ * This import is used by the Svelte SDK. Do not remove.
32
+ */
33
+
34
+ export type FormState = "unsubmitted" | "sending" | "success" | "error";
35
+ </script>
36
+
37
+ <script lang="ts">
38
+ import Block from "../../../components/block/block.svelte";
39
+ import Blocks from "../../../components/blocks/blocks.svelte";
40
+ import { getEnv } from "../../../functions/get-env.js";
41
+ import { get } from "../../../functions/get.js";
42
+ import { isEditing } from "../../../functions/is-editing.js";
43
+ import { set } from "../../../functions/set.js";
44
+ import type { BuilderBlock } from "../../../types/builder-block.js";
45
+ import type {
46
+ BuilderComponentsProp,
47
+ BuilderDataProps,
48
+ BuilderLinkComponentProp,
49
+ } from "../../../types/builder-props.js";
50
+ import type { Dictionary } from "../../../types/typescript.js";
51
+ import { filterAttrs } from "../../helpers.js";
52
+ import { setAttrs } from "../../helpers.js";
53
+
54
+ export let js: FormProps["js"];
55
+ export let builderContext: FormProps["builderContext"];
56
+ export let previewState: FormProps["previewState"] = undefined;
57
+ export let sendWithJs: FormProps["sendWithJs"] = undefined;
58
+ export let sendSubmissionsTo: FormProps["sendSubmissionsTo"] = undefined;
59
+ export let action: FormProps["action"] = undefined;
60
+ export let customHeaders: FormProps["customHeaders"] = undefined;
61
+ export let contentType: FormProps["contentType"] = undefined;
62
+ export let sendSubmissionsToEmail: FormProps["sendSubmissionsToEmail"] =
63
+ undefined;
64
+ export let name: FormProps["name"] = undefined;
65
+ export let method: FormProps["method"] = undefined;
66
+ export let errorMessagePath: FormProps["errorMessagePath"] = undefined;
67
+ export let resetFormOnSubmit: FormProps["resetFormOnSubmit"] = undefined;
68
+ export let successUrl: FormProps["successUrl"] = undefined;
69
+ export let validate: FormProps["validate"] = undefined;
70
+ export let attributes: FormProps["attributes"] = undefined;
71
+ export let builderBlock: FormProps["builderBlock"];
72
+ export let builderComponents: FormProps["builderComponents"];
73
+ export let builderLinkComponent: FormProps["builderLinkComponent"] =
74
+ undefined;
75
+ export let errorMessage: FormProps["errorMessage"] = undefined;
76
+ export let sendingMessage: FormProps["sendingMessage"] = undefined;
77
+ export let successMessage: FormProps["successMessage"] = undefined;
78
+
79
+ function mergeNewRootState(newData: Dictionary<any>) {
80
+ const combinedState = {
81
+ ...$builderContext.rootState,
82
+ ...newData,
83
+ };
84
+ if ($builderContext.rootSetState) {
85
+ $builderContext.rootSetState?.(combinedState);
86
+ } else {
87
+ $builderContext.rootState = combinedState;
88
+ }
89
+ }
90
+ function submissionState() {
91
+ return (isEditing() && previewState) || formState;
92
+ }
93
+ function onSubmit(event: any) {
94
+ const sendWithJsProp = sendWithJs || sendSubmissionsTo === "email";
95
+ if (sendSubmissionsTo === "zapier") {
96
+ event.preventDefault();
97
+ } else if (sendWithJsProp) {
98
+ if (!(action || sendSubmissionsTo === "email")) {
99
+ event.preventDefault();
100
+ return;
101
+ }
102
+ event.preventDefault();
103
+ const el = event.currentTarget;
104
+ const headers = customHeaders || {};
105
+ let body: any;
106
+ const formData = new FormData(el);
107
+
108
+ // TODO: maybe support null
109
+ const formPairs: {
110
+ key: string;
111
+ value: File | boolean | number | string | FileList;
112
+ }[] = Array.from(
113
+ event.currentTarget.querySelectorAll("input,select,textarea")
114
+ )
115
+ .filter((el) => !!(el as HTMLInputElement).name)
116
+ .map((el) => {
117
+ let value: any;
118
+ const key = (el as HTMLImageElement).name;
119
+ if (el instanceof HTMLInputElement) {
120
+ if (el.type === "radio") {
121
+ if (el.checked) {
122
+ value = el.name;
123
+ return {
124
+ key,
125
+ value,
126
+ };
127
+ }
128
+ } else if (el.type === "checkbox") {
129
+ value = el.checked;
130
+ } else if (el.type === "number" || el.type === "range") {
131
+ const num = el.valueAsNumber;
132
+ if (!isNaN(num)) {
133
+ value = num;
134
+ }
135
+ } else if (el.type === "file") {
136
+ // TODO: one vs multiple files
137
+ value = el.files;
138
+ } else {
139
+ value = el.value;
140
+ }
141
+ } else {
142
+ value = (el as HTMLInputElement).value;
143
+ }
144
+ return {
145
+ key,
146
+ value,
147
+ };
148
+ });
149
+ let formContentType = contentType;
150
+ if (sendSubmissionsTo === "email") {
151
+ formContentType = "multipart/form-data";
152
+ }
153
+ Array.from(formPairs).forEach(({ value }) => {
154
+ if (
155
+ value instanceof File ||
156
+ (Array.isArray(value) && value[0] instanceof File) ||
157
+ value instanceof FileList
158
+ ) {
159
+ formContentType = "multipart/form-data";
160
+ }
161
+ });
162
+
163
+ // TODO: send as urlEncoded or multipart by default
164
+ // because of ease of use and reliability in browser API
165
+ // for encoding the form?
166
+ if (formContentType !== "application/json") {
167
+ body = formData;
168
+ } else {
169
+ // Json
170
+ const json = {};
171
+ Array.from(formPairs).forEach(({ value, key }) => {
172
+ set(json, key, value);
173
+ });
174
+ body = JSON.stringify(json);
175
+ }
176
+ if (formContentType && formContentType !== "multipart/form-data") {
177
+ if (
178
+ /* Zapier doesn't allow content-type header to be sent from browsers */
179
+ !(sendWithJsProp && action?.includes("zapier.com"))
180
+ ) {
181
+ headers["content-type"] = formContentType;
182
+ }
183
+ }
184
+ const presubmitEvent = new CustomEvent("presubmit", {
185
+ detail: {
186
+ body,
187
+ },
188
+ });
189
+ if (formRef) {
190
+ formRef.dispatchEvent(presubmitEvent);
191
+ if (presubmitEvent.defaultPrevented) {
192
+ return;
193
+ }
194
+ }
195
+ formState = "sending";
196
+ const formUrl = `${
197
+ getEnv() === "dev" ? "http://localhost:5000" : "https://builder.io"
198
+ }/api/v1/form-submit?apiKey=${$builderContext.apiKey}&to=${btoa(
199
+ sendSubmissionsToEmail || ""
200
+ )}&name=${encodeURIComponent(name || "")}`;
201
+ fetch(
202
+ sendSubmissionsTo === "email"
203
+ ? formUrl
204
+ : action! /* TODO: throw error if no action URL */,
205
+ {
206
+ body,
207
+ headers,
208
+ method: method || "post",
209
+ }
210
+ ).then(
211
+ async (res) => {
212
+ let body;
213
+ const contentType = res.headers.get("content-type");
214
+ if (contentType && contentType.indexOf("application/json") !== -1) {
215
+ body = await res.json();
216
+ } else {
217
+ body = await res.text();
218
+ }
219
+ if (!res.ok && errorMessagePath) {
220
+ /* TODO: allow supplying an error formatter function */
221
+ let message = get(body, errorMessagePath);
222
+ if (message) {
223
+ if (typeof message !== "string") {
224
+ /* TODO: ideally convert json to yaml so it woul dbe like
225
+ error: - email has been taken */
226
+ message = JSON.stringify(message);
227
+ }
228
+ formErrorMessage = message;
229
+ mergeNewRootState({
230
+ formErrorMessage: message,
231
+ });
232
+ }
233
+ }
234
+ responseData = body;
235
+ formState = res.ok ? "success" : "error";
236
+ if (res.ok) {
237
+ const submitSuccessEvent = new CustomEvent("submit:success", {
238
+ detail: {
239
+ res,
240
+ body,
241
+ },
242
+ });
243
+ if (formRef) {
244
+ formRef.dispatchEvent(submitSuccessEvent);
245
+ if (submitSuccessEvent.defaultPrevented) {
246
+ return;
247
+ }
248
+ /* TODO: option to turn this on/off? */
249
+ if (resetFormOnSubmit !== false) {
250
+ formRef.reset();
251
+ }
252
+ }
253
+
254
+ /* TODO: client side route event first that can be preventDefaulted */
255
+ if (successUrl) {
256
+ if (formRef) {
257
+ const event = new CustomEvent("route", {
258
+ detail: {
259
+ url: successUrl,
260
+ },
261
+ });
262
+ formRef.dispatchEvent(event);
263
+ if (!event.defaultPrevented) {
264
+ location.href = successUrl;
265
+ }
266
+ } else {
267
+ location.href = successUrl;
268
+ }
269
+ }
270
+ }
271
+ },
272
+ (err) => {
273
+ const submitErrorEvent = new CustomEvent("submit:error", {
274
+ detail: {
275
+ error: err,
276
+ },
277
+ });
278
+ if (formRef) {
279
+ formRef.dispatchEvent(submitErrorEvent);
280
+ if (submitErrorEvent.defaultPrevented) {
281
+ return;
282
+ }
283
+ }
284
+ responseData = err;
285
+ formState = "error";
286
+ }
287
+ );
288
+ }
289
+ }
290
+
291
+ let formRef;
292
+
293
+ let formState = "unsubmitted";
294
+ let responseData = null;
295
+ let formErrorMessage = "";
296
+ </script>
297
+
298
+ <form
299
+ {validate}
300
+ bind:this={formRef}
301
+ action={!sendWithJs && action}
302
+ {method}
303
+ {name}
304
+ on:submit={(event) => {
305
+ onSubmit(event);
306
+ }}
307
+ {...filterAttrs(attributes, "on:", false)}
308
+ use:setAttrs={filterAttrs(attributes, "on:", true)}
309
+ >
310
+ {#if builderBlock && builderBlock.children}
311
+ {#each builderBlock?.children as block, idx (`form-block-${idx}`)}
312
+ <Block
313
+ {block}
314
+ context={builderContext}
315
+ registeredComponents={builderComponents}
316
+ linkComponent={builderLinkComponent}
317
+ />
318
+ {/each}
319
+ {/if}
320
+
321
+ {#if submissionState() === "error"}
322
+ <Blocks
323
+ path="errorMessage"
324
+ blocks={errorMessage}
325
+ context={builderContext}
326
+ />
327
+ {/if}
328
+
329
+ {#if submissionState() === "sending"}
330
+ <Blocks
331
+ path="sendingMessage"
332
+ blocks={sendingMessage}
333
+ context={builderContext}
334
+ />
335
+ {/if}
336
+
337
+ {#if submissionState() === "error" && responseData}
338
+ <pre class="builder-form-error-text pre">
339
+ {JSON.stringify(responseData, null, 2)}
340
+ </pre>
341
+ {/if}
342
+
343
+ {#if submissionState() === "success"}
344
+ <Blocks
345
+ path="successMessage"
346
+ blocks={successMessage}
347
+ context={builderContext}
348
+ />
349
+ {/if}
350
+ </form>
351
+
352
+ <style>
353
+ .pre {
354
+ padding: 10px;
355
+ color: red;
356
+ text-align: center;
357
+ }
358
+ </style>
@@ -1,4 +1,4 @@
1
- import type { ComponentInfo } from '../../types/components.js';
1
+ import type { ComponentInfo } from '../../../types/components.js';
2
2
  export const componentInfo: ComponentInfo = {
3
3
  name: 'Form:Input',
4
4
  image: 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fad6f37889d9e40bbbbc72cdb5875d6ca',
@@ -15,9 +15,9 @@
15
15
  </script>
16
16
 
17
17
  <script lang="ts">
18
- import { isEditing } from "../../functions/is-editing.js";
19
- import { filterAttrs } from "../helpers.js";
20
- import { setAttrs } from "../helpers.js";
18
+ import { isEditing } from "../../../functions/is-editing.js";
19
+ import { filterAttrs } from "../../helpers.js";
20
+ import { setAttrs } from "../../helpers.js";
21
21
 
22
22
  export let attributes: FormInputProps["attributes"] = undefined;
23
23
  export let defaultValue: FormInputProps["defaultValue"] = undefined;
@@ -1,4 +1,4 @@
1
- import type { ComponentInfo } from '../../types/components.js';
1
+ import type { ComponentInfo } from '../../../types/components.js';
2
2
  export const componentInfo: ComponentInfo = {
3
3
  name: 'Form:Select',
4
4
  image: 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F83acca093fb24aaf94dee136e9a4b045',
@@ -16,9 +16,9 @@
16
16
  </script>
17
17
 
18
18
  <script lang="ts">
19
- import { isEditing } from "../../functions/is-editing.js";
20
- import { filterAttrs } from "../helpers.js";
21
- import { setAttrs } from "../helpers.js";
19
+ import { isEditing } from "../../../functions/is-editing.js";
20
+ import { filterAttrs } from "../../helpers.js";
21
+ import { setAttrs } from "../../helpers.js";
22
22
 
23
23
  export let attributes: FormSelectProps["attributes"] = undefined;
24
24
  export let value: FormSelectProps["value"] = undefined;
@@ -1,4 +1,4 @@
1
- import type { ComponentInfo } from '../../types/components.js';
1
+ import type { ComponentInfo } from '../../../types/components.js';
2
2
  export const componentInfo: ComponentInfo = {
3
3
  name: 'Form:SubmitButton',
4
4
  image: 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fdf2820ffed1f4349a94c40b3221f5b98',
@@ -10,8 +10,8 @@
10
10
  </script>
11
11
 
12
12
  <script lang="ts">
13
- import { filterAttrs } from "../helpers.js";
14
- import { setAttrs } from "../helpers.js";
13
+ import { filterAttrs } from "../../helpers.js";
14
+ import { setAttrs } from "../../helpers.js";
15
15
 
16
16
  export let attributes: ButtonProps["attributes"] = undefined;
17
17
  export let text: ButtonProps["text"] = undefined;
@@ -1,19 +1,17 @@
1
1
  <script context="module" lang="ts">
2
- export interface DropzoneProps {
2
+ export type DropzoneProps = BuilderDataProps & {
3
3
  name: string;
4
- builderBlock: BuilderBlock;
5
- builderContext: Writable<BuilderContextInterface>;
6
4
  attributes: any;
7
- }
5
+ };
8
6
  </script>
9
7
 
10
8
  <script lang="ts">
11
9
  import Blocks from "../../components/blocks/blocks.svelte";
12
- import type { BuilderContextInterface } from "../../context/types.js";
13
10
  import { deoptSignal } from "../../functions/deopt.js";
14
11
  import type { BuilderBlock } from "../../types/builder-block.js";
15
- import type { Writable } from "svelte/store";
12
+ import type { BuilderDataProps } from "../../types/builder-props.js";
16
13
 
14
+ export let js: DropzoneProps["js"];
17
15
  export let builderContext: DropzoneProps["builderContext"];
18
16
  export let name: DropzoneProps["name"];
19
17
 
@@ -3,7 +3,6 @@
3
3
 
4
4
  import ContentVariants from "../../components/content-variants/content-variants.svelte";
5
5
  import type { BuilderContent } from "../../types/builder-content.js";
6
- import type { PropsWithBuilderData } from "../../types/builder-props.js";
7
6
  import { filterAttrs } from "../helpers.js";
8
7
  import { getClassPropName } from "../../functions/get-class-prop-name.js";
9
8
  import type { Nullable } from "../../types/typescript.js";
@@ -11,15 +10,13 @@
11
10
  import { fetchSymbolContent } from "./symbol.helpers.js";
12
11
  import type { SymbolProps } from "./symbol.types.js";
13
12
 
14
- export let js: PropsWithBuilderData<SymbolProps>["js"];
15
- export let attributes: PropsWithBuilderData<SymbolProps>["attributes"] =
16
- undefined;
17
- export let symbol: PropsWithBuilderData<SymbolProps>["symbol"] = undefined;
18
- export let dynamic: PropsWithBuilderData<SymbolProps>["dynamic"] = undefined;
19
- export let builderContext: PropsWithBuilderData<SymbolProps>["builderContext"];
20
- export let builderBlock: PropsWithBuilderData<SymbolProps>["builderBlock"];
21
- export let builderComponents: PropsWithBuilderData<SymbolProps>["builderComponents"];
22
- export let builderLinkComponent: PropsWithBuilderData<SymbolProps>["builderLinkComponent"] =
13
+ export let attributes: SymbolProps["attributes"] = undefined;
14
+ export let symbol: SymbolProps["symbol"] = undefined;
15
+ export let dynamic: SymbolProps["dynamic"] = undefined;
16
+ export let builderContext: SymbolProps["builderContext"];
17
+ export let builderBlock: SymbolProps["builderBlock"];
18
+ export let builderComponents: SymbolProps["builderComponents"];
19
+ export let builderLinkComponent: SymbolProps["builderLinkComponent"] =
23
20
  undefined;
24
21
 
25
22
  function setContent() {
@@ -1,5 +1,5 @@
1
1
  import type { BuilderContent } from '../../types/builder-content.js';
2
- import type { BuilderComponentsProp, BuilderLinkComponentProp } from '../../types/builder-props.js';
2
+ import type { BuilderComponentsProp, BuilderDataProps, BuilderLinkComponentProp } from '../../types/builder-props.js';
3
3
  interface SymbolInfo {
4
4
  model?: string;
5
5
  entry?: string;
@@ -8,7 +8,7 @@ interface SymbolInfo {
8
8
  inline?: boolean;
9
9
  dynamic?: boolean;
10
10
  }
11
- export interface SymbolProps extends BuilderComponentsProp, BuilderLinkComponentProp {
11
+ export interface SymbolProps extends BuilderComponentsProp, BuilderDataProps, BuilderLinkComponentProp {
12
12
  symbol?: SymbolInfo;
13
13
  dataOnly?: boolean;
14
14
  dynamic?: boolean;
@@ -102,13 +102,15 @@
102
102
  builderContext: context,
103
103
  ...(blockComponent?.()?.name === "Core:Button" ||
104
104
  blockComponent?.()?.name === "Symbol" ||
105
- blockComponent?.()?.name === "Columns"
105
+ blockComponent?.()?.name === "Columns" ||
106
+ blockComponent?.()?.name === "Form:Form"
106
107
  ? {
107
108
  builderLinkComponent: linkComponent,
108
109
  }
109
110
  : {}),
110
111
  ...(blockComponent?.()?.name === "Symbol" ||
111
- blockComponent?.()?.name === "Columns"
112
+ blockComponent?.()?.name === "Columns" ||
113
+ blockComponent?.()?.name === "Form:Form"
112
114
  ? {
113
115
  builderComponents: registeredComponents,
114
116
  }
@@ -4,6 +4,7 @@
4
4
  block: BuilderBlock;
5
5
  context: Writable<BuilderContextInterface>;
6
6
  linkComponent: any;
7
+ children?: any;
7
8
  };
8
9
 
9
10
  /**
@@ -16,13 +17,12 @@
16
17
  import { getBlockActions } from "../../../functions/get-block-actions.js";
17
18
  import { getBlockProperties } from "../../../functions/get-block-properties.js";
18
19
  import type { BuilderBlock } from "../../../types/builder-block.js";
19
- import type { PropsWithChildren } from "../../../types/typescript.js";
20
20
  import DynamicRenderer from "../../dynamic-renderer/dynamic-renderer.svelte";
21
21
  import type { Writable } from "svelte/store";
22
22
 
23
- export let Wrapper: PropsWithChildren<BlockWrapperProps>["Wrapper"];
24
- export let block: PropsWithChildren<BlockWrapperProps>["block"];
25
- export let context: PropsWithChildren<BlockWrapperProps>["context"];
23
+ export let Wrapper: BlockWrapperProps["Wrapper"];
24
+ export let block: BlockWrapperProps["block"];
25
+ export let context: BlockWrapperProps["context"];
26
26
  </script>
27
27
 
28
28
  <DynamicRenderer
@@ -2,14 +2,14 @@ import type { Writable } from "svelte/store";
2
2
  import type { BuilderContextInterface, RegisteredComponents } from '../../../../context/types.js';
3
3
  import { getBlockProperties } from '../../../../functions/get-block-properties.js';
4
4
  import type { BuilderBlock } from '../../../../types/builder-block.js';
5
- import type { PropsWithBuilderData } from '../../../../types/builder-props.js';
5
+ import type { BuilderDataProps } from '../../../../types/builder-props.js';
6
6
  import type { InteractiveElementProps } from '../interactive-element.svelte';
7
- type ComponentOptions = PropsWithBuilderData<{
7
+ type ComponentOptions = BuilderDataProps & {
8
8
  [index: string]: any;
9
9
  attributes?: {
10
10
  [index: string]: any;
11
11
  };
12
- }>;
12
+ };
13
13
  export interface ComponentProps {
14
14
  componentRef: any;
15
15
  componentOptions: ComponentOptions;
@@ -5,6 +5,7 @@
5
5
  context: Writable<BuilderContextInterface>;
6
6
  wrapperProps: Dictionary<any>;
7
7
  includeBlockProps: boolean;
8
+ children?: any;
8
9
  };
9
10
  </script>
10
11
 
@@ -13,17 +14,14 @@
13
14
  import { getBlockActions } from "../../../functions/get-block-actions.js";
14
15
  import { getBlockProperties } from "../../../functions/get-block-properties.js";
15
16
  import type { BuilderBlock } from "../../../types/builder-block.js";
16
- import type {
17
- Dictionary,
18
- PropsWithChildren,
19
- } from "../../../types/typescript.js";
17
+ import type { Dictionary } from "../../../types/typescript.js";
20
18
  import type { Writable } from "svelte/store";
21
19
 
22
- export let Wrapper: PropsWithChildren<InteractiveElementProps>["Wrapper"];
23
- export let wrapperProps: PropsWithChildren<InteractiveElementProps>["wrapperProps"];
24
- export let includeBlockProps: PropsWithChildren<InteractiveElementProps>["includeBlockProps"];
25
- export let block: PropsWithChildren<InteractiveElementProps>["block"];
26
- export let context: PropsWithChildren<InteractiveElementProps>["context"];
20
+ export let Wrapper: InteractiveElementProps["Wrapper"];
21
+ export let wrapperProps: InteractiveElementProps["wrapperProps"];
22
+ export let includeBlockProps: InteractiveElementProps["includeBlockProps"];
23
+ export let block: InteractiveElementProps["block"];
24
+ export let context: InteractiveElementProps["context"];
27
25
  </script>
28
26
 
29
27
  <svelte:component
@@ -12,20 +12,20 @@
12
12
  * Additonal props to pass to `blocksWrapper`. Defaults to `{}`.
13
13
  */
14
14
  BlocksWrapperProps: any;
15
+ children?: any;
15
16
  };
16
17
  </script>
17
18
 
18
19
  <script lang="ts">
19
20
  import { isEditing } from "../../functions/is-editing.js";
20
21
  import type { BuilderBlock } from "../../types/builder-block.js";
21
- import type { PropsWithChildren } from "../../types/typescript.js";
22
22
 
23
- export let BlocksWrapper: PropsWithChildren<BlocksWrapperProps>["BlocksWrapper"];
24
- export let blocks: PropsWithChildren<BlocksWrapperProps>["blocks"];
25
- export let parent: PropsWithChildren<BlocksWrapperProps>["parent"];
26
- export let path: PropsWithChildren<BlocksWrapperProps>["path"];
27
- export let styleProp: PropsWithChildren<BlocksWrapperProps>["styleProp"];
28
- export let BlocksWrapperProps: PropsWithChildren<BlocksWrapperProps>["BlocksWrapperProps"];
23
+ export let BlocksWrapper: BlocksWrapperProps["BlocksWrapper"];
24
+ export let blocks: BlocksWrapperProps["blocks"];
25
+ export let parent: BlocksWrapperProps["parent"];
26
+ export let path: BlocksWrapperProps["path"];
27
+ export let styleProp: BlocksWrapperProps["styleProp"];
28
+ export let BlocksWrapperProps: BlocksWrapperProps["BlocksWrapperProps"];
29
29
 
30
30
  function mitosis_styling(node, vars) {
31
31
  Object.entries(vars || {}).forEach(([p, v]) => {
@@ -1,11 +1,5 @@
1
1
  import type { BuilderRenderState } from '../../context/types.js';
2
- import type { EnforcePartials } from '../../types/enforced-partials.js';
3
- import type { ContentVariantsPrps } from '../content-variants/content-variants.types.js';
4
- interface InternalRenderProps {
5
- showContent: boolean;
6
- isSsrAbTest: boolean;
7
- }
8
- export type ContentProps = InternalRenderProps & EnforcePartials<ContentVariantsPrps>;
2
+ export type { ContentProps } from './contentProps.types.js';
9
3
  export interface BuilderComponentStateChange {
10
4
  state: BuilderRenderState;
11
5
  ref: {
@@ -0,0 +1,12 @@
1
+ import type { EnforcePartials } from '../../types/enforced-partials.js';
2
+ import type { ContentVariantsPrps } from '../content-variants/content-variants.types.js';
3
+ interface InternalRenderProps {
4
+ showContent: boolean;
5
+ isSsrAbTest: boolean;
6
+ }
7
+
8
+ /**
9
+ * This is in a separate file so that we can override it (most notably in Vue,
10
+ * where prop types cannot be wrapped by generics like `EnforcePartials`).
11
+ */
12
+ export type ContentProps = InternalRenderProps & EnforcePartials<ContentVariantsPrps>