@builder.io/sdk-solid 4.0.9 → 4.0.10

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.
package/lib/edge/dev.js CHANGED
@@ -5498,8 +5498,8 @@ var DEFAULT_INDEX = "default";
5498
5498
  var FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME = "filterWithCustomTargeting";
5499
5499
  var BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME = "builderIoPersonalization";
5500
5500
  var UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME = "updateVisibilityStylesScript";
5501
- var SDKS_SUPPORTING_PERSONALIZATION = ["react", "vue", "svelte"];
5502
- var SDKS_REQUIRING_RESET_APPROACH = ["vue", "svelte"];
5501
+ var SDKS_SUPPORTING_PERSONALIZATION = ["react", "vue", "svelte", "qwik"];
5502
+ var SDKS_REQUIRING_RESET_APPROACH = ["vue", "svelte", "qwik"];
5503
5503
  function checkShouldRenderVariants(variants, canTrack) {
5504
5504
  const hasVariants = variants && variants.length > 0;
5505
5505
  if (TARGET === "reactNative")
@@ -5757,6 +5757,11 @@ var handleABTesting = async ({
5757
5757
  };
5758
5758
  };
5759
5759
 
5760
+ // src/helpers/no-serialize-wrapper.ts
5761
+ function noSerializeWrapper(fn) {
5762
+ return fn;
5763
+ }
5764
+
5760
5765
  // src/helpers/user-attributes.ts
5761
5766
  var USER_ATTRIBUTES_COOKIE_NAME = "builder.userAttributes";
5762
5767
  function createUserAttributesService() {
@@ -5787,18 +5792,32 @@ function createUserAttributesService() {
5787
5792
  canTrack
5788
5793
  }) || "{}");
5789
5794
  },
5790
- subscribeOnUserAttributesChange(callback) {
5795
+ subscribeOnUserAttributesChange(callback, {
5796
+ fireImmediately
5797
+ } = {}) {
5791
5798
  subscribers.add(callback);
5792
- return () => {
5799
+ if (fireImmediately) {
5800
+ callback(this.getUserAttributes());
5801
+ }
5802
+ return noSerializeWrapper(function() {
5793
5803
  subscribers.delete(callback);
5794
- };
5804
+ });
5795
5805
  },
5796
5806
  setCanTrack(value) {
5797
5807
  canTrack = value;
5798
5808
  }
5799
5809
  };
5800
5810
  }
5801
- var userAttributesService = createUserAttributesService();
5811
+ var _userAttributesService;
5812
+ if (isBrowser() && TARGET === "qwik") {
5813
+ if (!window.__BUILDER_USER_ATTRIBUTES_SERVICE__) {
5814
+ window.__BUILDER_USER_ATTRIBUTES_SERVICE__ = createUserAttributesService();
5815
+ }
5816
+ _userAttributesService = window.__BUILDER_USER_ATTRIBUTES_SERVICE__;
5817
+ } else {
5818
+ _userAttributesService = createUserAttributesService();
5819
+ }
5820
+ var userAttributesService = _userAttributesService;
5802
5821
  var setClientUserAttributes = (attributes) => {
5803
5822
  userAttributesService.setUserAttributes(attributes);
5804
5823
  };
@@ -6654,6 +6673,8 @@ function PersonalizationContainer(props) {
6654
6673
  setShouldResetVariants(true);
6655
6674
  const unsub = userAttributesService.subscribeOnUserAttributesChange((attrs2) => {
6656
6675
  setUserAttributes(attrs2);
6676
+ }, {
6677
+ fireImmediately: TARGET === "qwik"
6657
6678
  });
6658
6679
  if (!(isEditing() || isPreviewing())) {
6659
6680
  const variant = filteredVariants()[0];
@@ -7671,9 +7692,9 @@ function logFetch(url) {
7671
7692
  }
7672
7693
 
7673
7694
  // src/blocks/form/form/form.tsx
7674
- var _tmpl$15 = /* @__PURE__ */ template(`<pre class="builder-form-error-text pre-04a43b72">`);
7695
+ var _tmpl$15 = /* @__PURE__ */ template(`<pre class="builder-form-error-text pre-7430044e">`);
7675
7696
  var _tmpl$26 = /* @__PURE__ */ template(`<form>`);
7676
- var _tmpl$34 = /* @__PURE__ */ template(`<style>.pre-04a43b72 {
7697
+ var _tmpl$34 = /* @__PURE__ */ template(`<style>.pre-7430044e {
7677
7698
  padding: 10px;
7678
7699
  color: red;
7679
7700
  text-align: center;
@@ -7785,6 +7806,15 @@ function FormComponent(props) {
7785
7806
  }
7786
7807
  }
7787
7808
  setFormState("sending");
7809
+ if (props.sendSubmissionsTo === "email" && (props.sendSubmissionsToEmail === "your@email.com" || !props.sendSubmissionsToEmail)) {
7810
+ const message = "SubmissionsToEmail is required when sendSubmissionsTo is set to email";
7811
+ console.error(message);
7812
+ setFormState("error");
7813
+ mergeNewRootState({
7814
+ formErrorMessage: message
7815
+ });
7816
+ return;
7817
+ }
7788
7818
  const formUrl = `${getEnv() === "dev" ? "http://localhost:5000" : "https://builder.io"}/api/v1/form-submit?apiKey=${props.builderContext.apiKey}&to=${btoa(props.sendSubmissionsToEmail || "")}&name=${encodeURIComponent(props.name || "")}`;
7789
7819
  const url = props.sendSubmissionsTo === "email" ? formUrl : props.action;
7790
7820
  logFetch(url);
@@ -7800,17 +7830,30 @@ function FormComponent(props) {
7800
7830
  } else {
7801
7831
  body2 = await res.text();
7802
7832
  }
7803
- if (!res.ok && props.errorMessagePath) {
7804
- let message = get(body2, props.errorMessagePath);
7805
- if (message) {
7806
- if (typeof message !== "string") {
7807
- message = JSON.stringify(message);
7833
+ if (!res.ok) {
7834
+ const submitErrorEvent = new CustomEvent("submit:error", {
7835
+ detail: {
7836
+ error: body2,
7837
+ status: res.status
7808
7838
  }
7809
- setFormErrorMessage(message);
7810
- mergeNewRootState({
7811
- formErrorMessage: message
7812
- });
7839
+ });
7840
+ if (formRef?.nativeElement) {
7841
+ formRef?.nativeElement.dispatchEvent(submitErrorEvent);
7842
+ if (submitErrorEvent.defaultPrevented) {
7843
+ return;
7844
+ }
7845
+ }
7846
+ setResponseData(body2);
7847
+ setFormState("error");
7848
+ let message = props.errorMessagePath ? get(body2, props.errorMessagePath) : body2.message || body2.error || body2;
7849
+ if (typeof message !== "string") {
7850
+ message = JSON.stringify(message);
7813
7851
  }
7852
+ setFormErrorMessage(message);
7853
+ mergeNewRootState({
7854
+ formErrorMessage: message
7855
+ });
7856
+ return;
7814
7857
  }
7815
7858
  setResponseData(body2);
7816
7859
  setFormState(res.ok ? "success" : "error");
@@ -8626,7 +8669,7 @@ function getPreviewContent(_searchParams) {
8626
8669
  }
8627
8670
 
8628
8671
  // src/constants/sdk-version.ts
8629
- var SDK_VERSION = "4.0.9";
8672
+ var SDK_VERSION = "4.0.10";
8630
8673
 
8631
8674
  // src/helpers/sdk-headers.ts
8632
8675
  var getSdkHeaders = () => ({
package/lib/edge/dev.jsx CHANGED
@@ -5259,8 +5259,8 @@ var DEFAULT_INDEX = "default";
5259
5259
  var FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME = "filterWithCustomTargeting";
5260
5260
  var BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME = "builderIoPersonalization";
5261
5261
  var UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME = "updateVisibilityStylesScript";
5262
- var SDKS_SUPPORTING_PERSONALIZATION = ["react", "vue", "svelte"];
5263
- var SDKS_REQUIRING_RESET_APPROACH = ["vue", "svelte"];
5262
+ var SDKS_SUPPORTING_PERSONALIZATION = ["react", "vue", "svelte", "qwik"];
5263
+ var SDKS_REQUIRING_RESET_APPROACH = ["vue", "svelte", "qwik"];
5264
5264
  function checkShouldRenderVariants(variants, canTrack) {
5265
5265
  const hasVariants = variants && variants.length > 0;
5266
5266
  if (TARGET === "reactNative")
@@ -5518,6 +5518,11 @@ var handleABTesting = async ({
5518
5518
  };
5519
5519
  };
5520
5520
 
5521
+ // src/helpers/no-serialize-wrapper.ts
5522
+ function noSerializeWrapper(fn) {
5523
+ return fn;
5524
+ }
5525
+
5521
5526
  // src/helpers/user-attributes.ts
5522
5527
  var USER_ATTRIBUTES_COOKIE_NAME = "builder.userAttributes";
5523
5528
  function createUserAttributesService() {
@@ -5548,18 +5553,32 @@ function createUserAttributesService() {
5548
5553
  canTrack
5549
5554
  }) || "{}");
5550
5555
  },
5551
- subscribeOnUserAttributesChange(callback) {
5556
+ subscribeOnUserAttributesChange(callback, {
5557
+ fireImmediately
5558
+ } = {}) {
5552
5559
  subscribers.add(callback);
5553
- return () => {
5560
+ if (fireImmediately) {
5561
+ callback(this.getUserAttributes());
5562
+ }
5563
+ return noSerializeWrapper(function() {
5554
5564
  subscribers.delete(callback);
5555
- };
5565
+ });
5556
5566
  },
5557
5567
  setCanTrack(value) {
5558
5568
  canTrack = value;
5559
5569
  }
5560
5570
  };
5561
5571
  }
5562
- var userAttributesService = createUserAttributesService();
5572
+ var _userAttributesService;
5573
+ if (isBrowser() && TARGET === "qwik") {
5574
+ if (!window.__BUILDER_USER_ATTRIBUTES_SERVICE__) {
5575
+ window.__BUILDER_USER_ATTRIBUTES_SERVICE__ = createUserAttributesService();
5576
+ }
5577
+ _userAttributesService = window.__BUILDER_USER_ATTRIBUTES_SERVICE__;
5578
+ } else {
5579
+ _userAttributesService = createUserAttributesService();
5580
+ }
5581
+ var userAttributesService = _userAttributesService;
5563
5582
  var setClientUserAttributes = (attributes) => {
5564
5583
  userAttributesService.setUserAttributes(attributes);
5565
5584
  };
@@ -6402,6 +6421,9 @@ function PersonalizationContainer(props) {
6402
6421
  const unsub = userAttributesService.subscribeOnUserAttributesChange(
6403
6422
  (attrs2) => {
6404
6423
  setUserAttributes(attrs2);
6424
+ },
6425
+ {
6426
+ fireImmediately: TARGET === "qwik"
6405
6427
  }
6406
6428
  );
6407
6429
  if (!(isEditing() || isPreviewing())) {
@@ -7382,6 +7404,15 @@ function FormComponent(props) {
7382
7404
  }
7383
7405
  }
7384
7406
  setFormState("sending");
7407
+ if (props.sendSubmissionsTo === "email" && (props.sendSubmissionsToEmail === "your@email.com" || !props.sendSubmissionsToEmail)) {
7408
+ const message = "SubmissionsToEmail is required when sendSubmissionsTo is set to email";
7409
+ console.error(message);
7410
+ setFormState("error");
7411
+ mergeNewRootState({
7412
+ formErrorMessage: message
7413
+ });
7414
+ return;
7415
+ }
7385
7416
  const formUrl = `${getEnv() === "dev" ? "http://localhost:5000" : "https://builder.io"}/api/v1/form-submit?apiKey=${props.builderContext.apiKey}&to=${btoa(
7386
7417
  props.sendSubmissionsToEmail || ""
7387
7418
  )}&name=${encodeURIComponent(props.name || "")}`;
@@ -7400,17 +7431,30 @@ function FormComponent(props) {
7400
7431
  } else {
7401
7432
  body2 = await res.text();
7402
7433
  }
7403
- if (!res.ok && props.errorMessagePath) {
7404
- let message = get(body2, props.errorMessagePath);
7405
- if (message) {
7406
- if (typeof message !== "string") {
7407
- message = JSON.stringify(message);
7434
+ if (!res.ok) {
7435
+ const submitErrorEvent = new CustomEvent("submit:error", {
7436
+ detail: {
7437
+ error: body2,
7438
+ status: res.status
7408
7439
  }
7409
- setFormErrorMessage(message);
7410
- mergeNewRootState({
7411
- formErrorMessage: message
7412
- });
7440
+ });
7441
+ if (formRef?.nativeElement) {
7442
+ formRef?.nativeElement.dispatchEvent(submitErrorEvent);
7443
+ if (submitErrorEvent.defaultPrevented) {
7444
+ return;
7445
+ }
7446
+ }
7447
+ setResponseData(body2);
7448
+ setFormState("error");
7449
+ let message = props.errorMessagePath ? get(body2, props.errorMessagePath) : body2.message || body2.error || body2;
7450
+ if (typeof message !== "string") {
7451
+ message = JSON.stringify(message);
7413
7452
  }
7453
+ setFormErrorMessage(message);
7454
+ mergeNewRootState({
7455
+ formErrorMessage: message
7456
+ });
7457
+ return;
7414
7458
  }
7415
7459
  setResponseData(body2);
7416
7460
  setFormState(res.ok ? "success" : "error");
@@ -7489,14 +7533,14 @@ function FormComponent(props) {
7489
7533
  blocks={props.sendingMessage}
7490
7534
  context={props.builderContext}
7491
7535
  /></Show12>
7492
- <Show12 when={submissionState() === "error" && responseData()}><pre class="builder-form-error-text pre-04a43b72">{JSON.stringify(responseData(), null, 2)}</pre></Show12>
7536
+ <Show12 when={submissionState() === "error" && responseData()}><pre class="builder-form-error-text pre-7430044e">{JSON.stringify(responseData(), null, 2)}</pre></Show12>
7493
7537
  <Show12 when={submissionState() === "success"}><Blocks_default
7494
7538
  path="successMessage"
7495
7539
  blocks={props.successMessage}
7496
7540
  context={props.builderContext}
7497
7541
  /></Show12>
7498
7542
  </form>
7499
- <style>{`.pre-04a43b72 {
7543
+ <style>{`.pre-7430044e {
7500
7544
  padding: 10px;
7501
7545
  color: red;
7502
7546
  text-align: center;
@@ -8119,7 +8163,7 @@ function getPreviewContent(_searchParams) {
8119
8163
  }
8120
8164
 
8121
8165
  // src/constants/sdk-version.ts
8122
- var SDK_VERSION = "4.0.9";
8166
+ var SDK_VERSION = "4.0.10";
8123
8167
 
8124
8168
  // src/helpers/sdk-headers.ts
8125
8169
  var getSdkHeaders = () => ({
package/lib/edge/index.js CHANGED
@@ -5488,8 +5488,8 @@ var DEFAULT_INDEX = "default";
5488
5488
  var FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME = "filterWithCustomTargeting";
5489
5489
  var BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME = "builderIoPersonalization";
5490
5490
  var UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME = "updateVisibilityStylesScript";
5491
- var SDKS_SUPPORTING_PERSONALIZATION = ["react", "vue", "svelte"];
5492
- var SDKS_REQUIRING_RESET_APPROACH = ["vue", "svelte"];
5491
+ var SDKS_SUPPORTING_PERSONALIZATION = ["react", "vue", "svelte", "qwik"];
5492
+ var SDKS_REQUIRING_RESET_APPROACH = ["vue", "svelte", "qwik"];
5493
5493
  function checkShouldRenderVariants(variants, canTrack) {
5494
5494
  const hasVariants = variants && variants.length > 0;
5495
5495
  if (TARGET === "reactNative")
@@ -5747,6 +5747,11 @@ var handleABTesting = async ({
5747
5747
  };
5748
5748
  };
5749
5749
 
5750
+ // src/helpers/no-serialize-wrapper.ts
5751
+ function noSerializeWrapper(fn) {
5752
+ return fn;
5753
+ }
5754
+
5750
5755
  // src/helpers/user-attributes.ts
5751
5756
  var USER_ATTRIBUTES_COOKIE_NAME = "builder.userAttributes";
5752
5757
  function createUserAttributesService() {
@@ -5777,18 +5782,32 @@ function createUserAttributesService() {
5777
5782
  canTrack
5778
5783
  }) || "{}");
5779
5784
  },
5780
- subscribeOnUserAttributesChange(callback) {
5785
+ subscribeOnUserAttributesChange(callback, {
5786
+ fireImmediately
5787
+ } = {}) {
5781
5788
  subscribers.add(callback);
5782
- return () => {
5789
+ if (fireImmediately) {
5790
+ callback(this.getUserAttributes());
5791
+ }
5792
+ return noSerializeWrapper(function() {
5783
5793
  subscribers.delete(callback);
5784
- };
5794
+ });
5785
5795
  },
5786
5796
  setCanTrack(value) {
5787
5797
  canTrack = value;
5788
5798
  }
5789
5799
  };
5790
5800
  }
5791
- var userAttributesService = createUserAttributesService();
5801
+ var _userAttributesService;
5802
+ if (isBrowser() && TARGET === "qwik") {
5803
+ if (!window.__BUILDER_USER_ATTRIBUTES_SERVICE__) {
5804
+ window.__BUILDER_USER_ATTRIBUTES_SERVICE__ = createUserAttributesService();
5805
+ }
5806
+ _userAttributesService = window.__BUILDER_USER_ATTRIBUTES_SERVICE__;
5807
+ } else {
5808
+ _userAttributesService = createUserAttributesService();
5809
+ }
5810
+ var userAttributesService = _userAttributesService;
5792
5811
  var setClientUserAttributes = (attributes) => {
5793
5812
  userAttributesService.setUserAttributes(attributes);
5794
5813
  };
@@ -6643,6 +6662,8 @@ function PersonalizationContainer(props) {
6643
6662
  setShouldResetVariants(true);
6644
6663
  const unsub = userAttributesService.subscribeOnUserAttributesChange((attrs2) => {
6645
6664
  setUserAttributes(attrs2);
6665
+ }, {
6666
+ fireImmediately: TARGET === "qwik"
6646
6667
  });
6647
6668
  if (!(isEditing() || isPreviewing())) {
6648
6669
  const variant = filteredVariants()[0];
@@ -7660,9 +7681,9 @@ function logFetch(url) {
7660
7681
  }
7661
7682
 
7662
7683
  // src/blocks/form/form/form.tsx
7663
- var _tmpl$15 = /* @__PURE__ */ template(`<pre class="builder-form-error-text pre-04a43b72">`);
7684
+ var _tmpl$15 = /* @__PURE__ */ template(`<pre class="builder-form-error-text pre-7430044e">`);
7664
7685
  var _tmpl$26 = /* @__PURE__ */ template(`<form>`);
7665
- var _tmpl$34 = /* @__PURE__ */ template(`<style>.pre-04a43b72 {
7686
+ var _tmpl$34 = /* @__PURE__ */ template(`<style>.pre-7430044e {
7666
7687
  padding: 10px;
7667
7688
  color: red;
7668
7689
  text-align: center;
@@ -7774,6 +7795,14 @@ function FormComponent(props) {
7774
7795
  }
7775
7796
  }
7776
7797
  setFormState("sending");
7798
+ if (props.sendSubmissionsTo === "email" && (props.sendSubmissionsToEmail === "your@email.com" || !props.sendSubmissionsToEmail)) {
7799
+ const message = "SubmissionsToEmail is required when sendSubmissionsTo is set to email";
7800
+ setFormState("error");
7801
+ mergeNewRootState({
7802
+ formErrorMessage: message
7803
+ });
7804
+ return;
7805
+ }
7777
7806
  const formUrl = `${getEnv() === "dev" ? "http://localhost:5000" : "https://builder.io"}/api/v1/form-submit?apiKey=${props.builderContext.apiKey}&to=${btoa(props.sendSubmissionsToEmail || "")}&name=${encodeURIComponent(props.name || "")}`;
7778
7807
  const url = props.sendSubmissionsTo === "email" ? formUrl : props.action;
7779
7808
  logFetch(url);
@@ -7789,17 +7818,30 @@ function FormComponent(props) {
7789
7818
  } else {
7790
7819
  body2 = await res.text();
7791
7820
  }
7792
- if (!res.ok && props.errorMessagePath) {
7793
- let message = get(body2, props.errorMessagePath);
7794
- if (message) {
7795
- if (typeof message !== "string") {
7796
- message = JSON.stringify(message);
7821
+ if (!res.ok) {
7822
+ const submitErrorEvent = new CustomEvent("submit:error", {
7823
+ detail: {
7824
+ error: body2,
7825
+ status: res.status
7797
7826
  }
7798
- setFormErrorMessage(message);
7799
- mergeNewRootState({
7800
- formErrorMessage: message
7801
- });
7827
+ });
7828
+ if (formRef?.nativeElement) {
7829
+ formRef?.nativeElement.dispatchEvent(submitErrorEvent);
7830
+ if (submitErrorEvent.defaultPrevented) {
7831
+ return;
7832
+ }
7833
+ }
7834
+ setResponseData(body2);
7835
+ setFormState("error");
7836
+ let message = props.errorMessagePath ? get(body2, props.errorMessagePath) : body2.message || body2.error || body2;
7837
+ if (typeof message !== "string") {
7838
+ message = JSON.stringify(message);
7802
7839
  }
7840
+ setFormErrorMessage(message);
7841
+ mergeNewRootState({
7842
+ formErrorMessage: message
7843
+ });
7844
+ return;
7803
7845
  }
7804
7846
  setResponseData(body2);
7805
7847
  setFormState(res.ok ? "success" : "error");
@@ -8614,7 +8656,7 @@ function getPreviewContent(_searchParams) {
8614
8656
  }
8615
8657
 
8616
8658
  // src/constants/sdk-version.ts
8617
- var SDK_VERSION = "4.0.9";
8659
+ var SDK_VERSION = "4.0.10";
8618
8660
 
8619
8661
  // src/helpers/sdk-headers.ts
8620
8662
  var getSdkHeaders = () => ({
@@ -5251,8 +5251,8 @@ var DEFAULT_INDEX = "default";
5251
5251
  var FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME = "filterWithCustomTargeting";
5252
5252
  var BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME = "builderIoPersonalization";
5253
5253
  var UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME = "updateVisibilityStylesScript";
5254
- var SDKS_SUPPORTING_PERSONALIZATION = ["react", "vue", "svelte"];
5255
- var SDKS_REQUIRING_RESET_APPROACH = ["vue", "svelte"];
5254
+ var SDKS_SUPPORTING_PERSONALIZATION = ["react", "vue", "svelte", "qwik"];
5255
+ var SDKS_REQUIRING_RESET_APPROACH = ["vue", "svelte", "qwik"];
5256
5256
  function checkShouldRenderVariants(variants, canTrack) {
5257
5257
  const hasVariants = variants && variants.length > 0;
5258
5258
  if (TARGET === "reactNative")
@@ -5510,6 +5510,11 @@ var handleABTesting = async ({
5510
5510
  };
5511
5511
  };
5512
5512
 
5513
+ // src/helpers/no-serialize-wrapper.ts
5514
+ function noSerializeWrapper(fn) {
5515
+ return fn;
5516
+ }
5517
+
5513
5518
  // src/helpers/user-attributes.ts
5514
5519
  var USER_ATTRIBUTES_COOKIE_NAME = "builder.userAttributes";
5515
5520
  function createUserAttributesService() {
@@ -5540,18 +5545,32 @@ function createUserAttributesService() {
5540
5545
  canTrack
5541
5546
  }) || "{}");
5542
5547
  },
5543
- subscribeOnUserAttributesChange(callback) {
5548
+ subscribeOnUserAttributesChange(callback, {
5549
+ fireImmediately
5550
+ } = {}) {
5544
5551
  subscribers.add(callback);
5545
- return () => {
5552
+ if (fireImmediately) {
5553
+ callback(this.getUserAttributes());
5554
+ }
5555
+ return noSerializeWrapper(function() {
5546
5556
  subscribers.delete(callback);
5547
- };
5557
+ });
5548
5558
  },
5549
5559
  setCanTrack(value) {
5550
5560
  canTrack = value;
5551
5561
  }
5552
5562
  };
5553
5563
  }
5554
- var userAttributesService = createUserAttributesService();
5564
+ var _userAttributesService;
5565
+ if (isBrowser() && TARGET === "qwik") {
5566
+ if (!window.__BUILDER_USER_ATTRIBUTES_SERVICE__) {
5567
+ window.__BUILDER_USER_ATTRIBUTES_SERVICE__ = createUserAttributesService();
5568
+ }
5569
+ _userAttributesService = window.__BUILDER_USER_ATTRIBUTES_SERVICE__;
5570
+ } else {
5571
+ _userAttributesService = createUserAttributesService();
5572
+ }
5573
+ var userAttributesService = _userAttributesService;
5555
5574
  var setClientUserAttributes = (attributes) => {
5556
5575
  userAttributesService.setUserAttributes(attributes);
5557
5576
  };
@@ -6393,6 +6412,9 @@ function PersonalizationContainer(props) {
6393
6412
  const unsub = userAttributesService.subscribeOnUserAttributesChange(
6394
6413
  (attrs2) => {
6395
6414
  setUserAttributes(attrs2);
6415
+ },
6416
+ {
6417
+ fireImmediately: TARGET === "qwik"
6396
6418
  }
6397
6419
  );
6398
6420
  if (!(isEditing() || isPreviewing())) {
@@ -7373,6 +7395,14 @@ function FormComponent(props) {
7373
7395
  }
7374
7396
  }
7375
7397
  setFormState("sending");
7398
+ if (props.sendSubmissionsTo === "email" && (props.sendSubmissionsToEmail === "your@email.com" || !props.sendSubmissionsToEmail)) {
7399
+ const message = "SubmissionsToEmail is required when sendSubmissionsTo is set to email";
7400
+ setFormState("error");
7401
+ mergeNewRootState({
7402
+ formErrorMessage: message
7403
+ });
7404
+ return;
7405
+ }
7376
7406
  const formUrl = `${getEnv() === "dev" ? "http://localhost:5000" : "https://builder.io"}/api/v1/form-submit?apiKey=${props.builderContext.apiKey}&to=${btoa(
7377
7407
  props.sendSubmissionsToEmail || ""
7378
7408
  )}&name=${encodeURIComponent(props.name || "")}`;
@@ -7391,17 +7421,30 @@ function FormComponent(props) {
7391
7421
  } else {
7392
7422
  body2 = await res.text();
7393
7423
  }
7394
- if (!res.ok && props.errorMessagePath) {
7395
- let message = get(body2, props.errorMessagePath);
7396
- if (message) {
7397
- if (typeof message !== "string") {
7398
- message = JSON.stringify(message);
7424
+ if (!res.ok) {
7425
+ const submitErrorEvent = new CustomEvent("submit:error", {
7426
+ detail: {
7427
+ error: body2,
7428
+ status: res.status
7399
7429
  }
7400
- setFormErrorMessage(message);
7401
- mergeNewRootState({
7402
- formErrorMessage: message
7403
- });
7430
+ });
7431
+ if (formRef?.nativeElement) {
7432
+ formRef?.nativeElement.dispatchEvent(submitErrorEvent);
7433
+ if (submitErrorEvent.defaultPrevented) {
7434
+ return;
7435
+ }
7436
+ }
7437
+ setResponseData(body2);
7438
+ setFormState("error");
7439
+ let message = props.errorMessagePath ? get(body2, props.errorMessagePath) : body2.message || body2.error || body2;
7440
+ if (typeof message !== "string") {
7441
+ message = JSON.stringify(message);
7404
7442
  }
7443
+ setFormErrorMessage(message);
7444
+ mergeNewRootState({
7445
+ formErrorMessage: message
7446
+ });
7447
+ return;
7405
7448
  }
7406
7449
  setResponseData(body2);
7407
7450
  setFormState(res.ok ? "success" : "error");
@@ -7480,14 +7523,14 @@ function FormComponent(props) {
7480
7523
  blocks={props.sendingMessage}
7481
7524
  context={props.builderContext}
7482
7525
  /></Show12>
7483
- <Show12 when={submissionState() === "error" && responseData()}><pre class="builder-form-error-text pre-04a43b72">{JSON.stringify(responseData(), null, 2)}</pre></Show12>
7526
+ <Show12 when={submissionState() === "error" && responseData()}><pre class="builder-form-error-text pre-7430044e">{JSON.stringify(responseData(), null, 2)}</pre></Show12>
7484
7527
  <Show12 when={submissionState() === "success"}><Blocks_default
7485
7528
  path="successMessage"
7486
7529
  blocks={props.successMessage}
7487
7530
  context={props.builderContext}
7488
7531
  /></Show12>
7489
7532
  </form>
7490
- <style>{`.pre-04a43b72 {
7533
+ <style>{`.pre-7430044e {
7491
7534
  padding: 10px;
7492
7535
  color: red;
7493
7536
  text-align: center;
@@ -8109,7 +8152,7 @@ function getPreviewContent(_searchParams) {
8109
8152
  }
8110
8153
 
8111
8154
  // src/constants/sdk-version.ts
8112
- var SDK_VERSION = "4.0.9";
8155
+ var SDK_VERSION = "4.0.10";
8113
8156
 
8114
8157
  // src/helpers/sdk-headers.ts
8115
8158
  var getSdkHeaders = () => ({