@builder.io/sdk-solid 1.0.35 → 1.1.0

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/node/index.js CHANGED
@@ -304,6 +304,19 @@ function flattenState({
304
304
  });
305
305
  }
306
306
 
307
+ // src/constants/sdk-name.ts
308
+ var SDK_NAME_FOR_TARGET = (() => {
309
+ switch (TARGET) {
310
+ case "rsc":
311
+ return "react-nextjs";
312
+ case "reactNative":
313
+ return "react-native";
314
+ default:
315
+ return TARGET;
316
+ }
317
+ })();
318
+ var SDK_NAME = `@builder.io/sdk-${SDK_NAME_FOR_TARGET}`;
319
+
307
320
  // src/functions/fast-clone.ts
308
321
  var fastClone = (obj) => JSON.parse(JSON.stringify(obj));
309
322
 
@@ -382,6 +395,7 @@ if (typeof output === 'object' && output !== null) {
382
395
  };
383
396
  var IVM_INSTANCE = null;
384
397
  var IVM_CONTEXT = null;
398
+ var SHOULD_MENTION_INITIALIZE_SCRIPT = SDK_NAME === "@builder.io/sdk-react-nextjs" || SDK_NAME === "@builder.io/sdk-react";
385
399
  var getIvm = () => {
386
400
  try {
387
401
  if (IVM_INSTANCE)
@@ -392,14 +406,15 @@ var getIvm = () => {
392
406
  } catch (error2) {
393
407
  logger.error("isolated-vm import error.", error2);
394
408
  }
395
- throw new Error(`${MSG_PREFIX}could not import \`isolated-vm\` module for safe script execution on Node server.
409
+ const ERROR_MESSAGE = `${MSG_PREFIX}could not import \`isolated-vm\` module for safe script execution on a Node server.
396
410
 
397
- In certain Node environments, the SDK requires additional initialization steps. This can be achieved by
398
- importing and calling \`initializeNodeRuntime()\` from "@builder.io/sdk-react/node/init". This must be done in
399
- a server-only execution path within your application.
411
+ SOLUTION: In a server-only execution path within your application, do one of the following:
412
+
413
+ ${SHOULD_MENTION_INITIALIZE_SCRIPT ? '- import and call `initializeNodeRuntime()` from "${SDK_NAME}/node/init".' : ""}
414
+ - add the following import: \`await import('isolated-vm')\`.
400
415
 
401
- Please see the documentation for more information: https://builder.io/c/docs/integration-tips#enabling-data-bindings-in-node-environments
402
- `);
416
+ For more information, visit https://builder.io/c/docs/integration-tips#enabling-data-bindings-in-node-environments`;
417
+ throw new Error(ERROR_MESSAGE);
403
418
  };
404
419
  function setIsolateContext(options = {
405
420
  memoryLimit: 128
@@ -933,25 +948,56 @@ var getRepeatItemData = ({
933
948
  }));
934
949
  return repeatArray;
935
950
  };
951
+ var applyDefaults = (shouldReceiveBuilderProps) => {
952
+ return {
953
+ // once we bump to a major version, toggle this to `false`.
954
+ builderBlock: true,
955
+ // once we bump to a major version, toggle this to `false`.
956
+ builderContext: true,
957
+ builderComponents: false,
958
+ builderLinkComponent: false,
959
+ ...shouldReceiveBuilderProps
960
+ };
961
+ };
936
962
  var provideLinkComponent = (block, linkComponent) => {
937
- return block && (block.isRSC && TARGET === "rsc" || ["Core:Button", "Symbol", "Columns", "Form:Form", "Builder: Tabs", "Builder:Accordion"].includes(block.name)) ? {
963
+ if (!block)
964
+ return {};
965
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderLinkComponent;
966
+ if (!shouldReceiveProp)
967
+ return {};
968
+ return {
938
969
  builderLinkComponent: linkComponent
939
- } : {};
970
+ };
940
971
  };
941
972
  var provideRegisteredComponents = (block, registeredComponents) => {
942
- return block && (block.isRSC && TARGET === "rsc" || ["Symbol", "Columns", "Form:Form", "Builder: Tabs", "Builder:Accordion"].includes(block.name)) ? {
973
+ if (!block)
974
+ return {};
975
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderComponents;
976
+ if (!shouldReceiveProp)
977
+ return {};
978
+ return {
943
979
  builderComponents: registeredComponents
944
- } : {};
980
+ };
945
981
  };
946
982
  var provideBuilderBlock = (block, builderBlock) => {
947
- return block && (block.isRSC && TARGET === "rsc" || TARGET === "reactNative" && block.name === "Text" || ["Builder:Accordion", "Columns", "Form:Form", "Builder: Tabs", "Symbol", "Image", "Video"].includes(block.name)) ? {
983
+ if (!block)
984
+ return {};
985
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderBlock;
986
+ if (!shouldReceiveProp)
987
+ return {};
988
+ return {
948
989
  builderBlock
949
- } : {};
990
+ };
950
991
  };
951
992
  var provideBuilderContext = (block, context) => {
952
- return block && (block.isRSC && TARGET === "rsc" || ["Builder:Accordion", "Columns", "Form:Form", "Builder: Tabs", "Symbol", "Slot"].includes(block.name)) ? {
993
+ if (!block)
994
+ return {};
995
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderContext;
996
+ if (!shouldReceiveProp)
997
+ return {};
998
+ return {
953
999
  builderContext: context
954
- } : {};
1000
+ };
955
1001
  };
956
1002
 
957
1003
  // src/constants/device-sizes.ts
@@ -2401,7 +2447,13 @@ var componentInfo = {
2401
2447
  options.set("items", []);
2402
2448
  }
2403
2449
  }
2404
- }]
2450
+ }],
2451
+ shouldReceiveBuilderProps: {
2452
+ builderBlock: true,
2453
+ builderContext: true,
2454
+ builderComponents: true,
2455
+ builderLinkComponent: true
2456
+ }
2405
2457
  };
2406
2458
 
2407
2459
  // src/blocks/accordion/helpers.ts
@@ -2624,7 +2676,13 @@ var componentInfo2 = {
2624
2676
  friendlyName: "Open link in new tab"
2625
2677
  }],
2626
2678
  static: true,
2627
- noWrap: true
2679
+ noWrap: true,
2680
+ shouldReceiveBuilderProps: {
2681
+ builderBlock: false,
2682
+ builderContext: false,
2683
+ builderComponents: false,
2684
+ builderLinkComponent: true
2685
+ }
2628
2686
  };
2629
2687
 
2630
2688
  // src/blocks/columns/component-info.ts
@@ -2844,11 +2902,23 @@ var componentInfo3 = {
2844
2902
  defaultValue: false,
2845
2903
  helperText: "When stacking columns for mobile devices, reverse the ordering",
2846
2904
  advanced: true
2847
- }]
2905
+ }],
2906
+ shouldReceiveBuilderProps: {
2907
+ builderBlock: true,
2908
+ builderContext: true,
2909
+ builderComponents: true,
2910
+ builderLinkComponent: true
2911
+ }
2848
2912
  };
2849
2913
 
2850
2914
  // src/blocks/fragment/component-info.ts
2851
2915
  var componentInfo4 = {
2916
+ shouldReceiveBuilderProps: {
2917
+ builderBlock: false,
2918
+ builderContext: false,
2919
+ builderComponents: false,
2920
+ builderLinkComponent: false
2921
+ },
2852
2922
  name: "Fragment",
2853
2923
  static: true,
2854
2924
  hidden: true,
@@ -2980,11 +3050,23 @@ var componentInfo5 = {
2980
3050
  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",
2981
3051
  advanced: true,
2982
3052
  defaultValue: 0.7041
2983
- }]
3053
+ }],
3054
+ shouldReceiveBuilderProps: {
3055
+ builderBlock: true,
3056
+ builderContext: false,
3057
+ builderComponents: false,
3058
+ builderLinkComponent: false
3059
+ }
2984
3060
  };
2985
3061
 
2986
3062
  // src/blocks/section/component-info.ts
2987
3063
  var componentInfo6 = {
3064
+ shouldReceiveBuilderProps: {
3065
+ builderBlock: false,
3066
+ builderContext: false,
3067
+ builderComponents: false,
3068
+ builderLinkComponent: false
3069
+ },
2988
3070
  name: "Core:Section",
2989
3071
  static: true,
2990
3072
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F682efef23ace49afac61748dd305c70a",
@@ -3038,7 +3120,13 @@ var componentInfo7 = {
3038
3120
  type: "string",
3039
3121
  required: true,
3040
3122
  defaultValue: "children"
3041
- }]
3123
+ }],
3124
+ shouldReceiveBuilderProps: {
3125
+ builderBlock: false,
3126
+ builderContext: true,
3127
+ builderComponents: false,
3128
+ builderLinkComponent: false
3129
+ }
3042
3130
  };
3043
3131
  var _tmpl$8 = /* @__PURE__ */ template(`<div>`);
3044
3132
  function Slot(props) {
@@ -3100,7 +3188,13 @@ var componentInfo8 = {
3100
3188
  name: "useChildren",
3101
3189
  hideFromUI: true,
3102
3190
  type: "boolean"
3103
- }]
3191
+ }],
3192
+ shouldReceiveBuilderProps: {
3193
+ builderBlock: true,
3194
+ builderContext: true,
3195
+ builderComponents: true,
3196
+ builderLinkComponent: true
3197
+ }
3104
3198
  };
3105
3199
 
3106
3200
  // src/blocks/tabs/component-info.ts
@@ -3240,7 +3334,13 @@ var componentInfo9 = {
3240
3334
  label: "Right",
3241
3335
  value: "flex-end"
3242
3336
  }]
3243
- }]
3337
+ }],
3338
+ shouldReceiveBuilderProps: {
3339
+ builderBlock: true,
3340
+ builderContext: true,
3341
+ builderComponents: true,
3342
+ builderLinkComponent: true
3343
+ }
3244
3344
  };
3245
3345
  var _tmpl$9 = /* @__PURE__ */ template(`<div>`);
3246
3346
  var _tmpl$25 = /* @__PURE__ */ template(`<div><div class=builder-tabs-wrap>`);
@@ -3343,6 +3443,12 @@ delegateEvents(["click"]);
3343
3443
 
3344
3444
  // src/blocks/text/component-info.ts
3345
3445
  var componentInfo10 = {
3446
+ shouldReceiveBuilderProps: {
3447
+ builderBlock: TARGET === "reactNative" ? true : false,
3448
+ builderContext: false,
3449
+ builderComponents: false,
3450
+ builderLinkComponent: false
3451
+ },
3346
3452
  name: "Text",
3347
3453
  static: true,
3348
3454
  isRSC: true,
@@ -3374,6 +3480,12 @@ var text_default = Text;
3374
3480
 
3375
3481
  // src/blocks/custom-code/component-info.ts
3376
3482
  var componentInfo11 = {
3483
+ shouldReceiveBuilderProps: {
3484
+ builderBlock: false,
3485
+ builderContext: false,
3486
+ builderComponents: false,
3487
+ builderLinkComponent: false
3488
+ },
3377
3489
  name: "Custom Code",
3378
3490
  static: true,
3379
3491
  requiredPermissions: ["editCode"],
@@ -3449,6 +3561,12 @@ var custom_code_default = CustomCode;
3449
3561
 
3450
3562
  // src/blocks/embed/component-info.ts
3451
3563
  var componentInfo12 = {
3564
+ shouldReceiveBuilderProps: {
3565
+ builderBlock: false,
3566
+ builderContext: false,
3567
+ builderComponents: false,
3568
+ builderLinkComponent: false
3569
+ },
3452
3570
  name: "Embed",
3453
3571
  static: true,
3454
3572
  inputs: [{
@@ -3767,7 +3885,13 @@ var componentInfo13 = {
3767
3885
  text: "Submit"
3768
3886
  }
3769
3887
  }
3770
- }]
3888
+ }],
3889
+ shouldReceiveBuilderProps: {
3890
+ builderBlock: true,
3891
+ builderContext: true,
3892
+ builderComponents: true,
3893
+ builderLinkComponent: true
3894
+ }
3771
3895
  };
3772
3896
 
3773
3897
  // src/functions/get-env.ts
@@ -4087,6 +4211,12 @@ var form_default = FormComponent;
4087
4211
 
4088
4212
  // src/blocks/form/input/component-info.ts
4089
4213
  var componentInfo14 = {
4214
+ shouldReceiveBuilderProps: {
4215
+ builderBlock: false,
4216
+ builderContext: false,
4217
+ builderComponents: false,
4218
+ builderLinkComponent: false
4219
+ },
4090
4220
  name: "Form:Input",
4091
4221
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fad6f37889d9e40bbbbc72cdb5875d6ca",
4092
4222
  inputs: [
@@ -4172,6 +4302,12 @@ var input_default = FormInputComponent;
4172
4302
 
4173
4303
  // src/blocks/form/select/component-info.ts
4174
4304
  var componentInfo15 = {
4305
+ shouldReceiveBuilderProps: {
4306
+ builderBlock: false,
4307
+ builderContext: false,
4308
+ builderComponents: false,
4309
+ builderLinkComponent: false
4310
+ },
4175
4311
  name: "Form:Select",
4176
4312
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F83acca093fb24aaf94dee136e9a4b045",
4177
4313
  defaultStyles: {
@@ -4231,6 +4367,9 @@ function SelectComponent(props) {
4231
4367
  },
4232
4368
  get name() {
4233
4369
  return props.name;
4370
+ },
4371
+ get required() {
4372
+ return props.required;
4234
4373
  }
4235
4374
  }), false, true);
4236
4375
  insert(_el$, createComponent(For, {
@@ -4255,6 +4394,12 @@ var select_default = SelectComponent;
4255
4394
 
4256
4395
  // src/blocks/form/submit-button/component-info.ts
4257
4396
  var componentInfo16 = {
4397
+ shouldReceiveBuilderProps: {
4398
+ builderBlock: false,
4399
+ builderContext: false,
4400
+ builderComponents: false,
4401
+ builderLinkComponent: false
4402
+ },
4258
4403
  name: "Form:SubmitButton",
4259
4404
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fdf2820ffed1f4349a94c40b3221f5b98",
4260
4405
  defaultStyles: {
@@ -4291,8 +4436,84 @@ function SubmitButton(props) {
4291
4436
  }
4292
4437
  var submit_button_default = SubmitButton;
4293
4438
 
4294
- // src/blocks/img/component-info.ts
4439
+ // src/blocks/form/textarea/component-info.ts
4295
4440
  var componentInfo17 = {
4441
+ shouldReceiveBuilderProps: {
4442
+ builderBlock: false,
4443
+ builderContext: false,
4444
+ builderComponents: false,
4445
+ builderLinkComponent: false
4446
+ },
4447
+ name: "Form:TextArea",
4448
+ image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Ff74a2f3de58c4c3e939204e5b6b8f6c3",
4449
+ inputs: [{
4450
+ advanced: true,
4451
+ name: "value",
4452
+ type: "string"
4453
+ }, {
4454
+ name: "name",
4455
+ type: "string",
4456
+ required: true,
4457
+ helperText: 'Every input in a form needs a unique name describing what it gets, e.g. "email"'
4458
+ }, {
4459
+ name: "defaultValue",
4460
+ type: "string"
4461
+ }, {
4462
+ name: "placeholder",
4463
+ type: "string",
4464
+ defaultValue: "Hello there"
4465
+ }, {
4466
+ name: "required",
4467
+ type: "boolean",
4468
+ defaultValue: false
4469
+ }],
4470
+ defaultStyles: {
4471
+ paddingTop: "10px",
4472
+ paddingBottom: "10px",
4473
+ paddingLeft: "10px",
4474
+ paddingRight: "10px",
4475
+ borderRadius: "3px",
4476
+ borderWidth: "1px",
4477
+ borderStyle: "solid",
4478
+ borderColor: "#ccc"
4479
+ },
4480
+ static: true,
4481
+ noWrap: true
4482
+ };
4483
+ var _tmpl$17 = /* @__PURE__ */ template(`<textarea>`);
4484
+ function Textarea(props) {
4485
+ return (() => {
4486
+ const _el$ = _tmpl$17();
4487
+ spread(_el$, mergeProps({}, () => props.attributes, {
4488
+ get placeholder() {
4489
+ return props.placeholder;
4490
+ },
4491
+ get name() {
4492
+ return props.name;
4493
+ },
4494
+ get value() {
4495
+ return props.value;
4496
+ },
4497
+ get defaultValue() {
4498
+ return props.defaultValue;
4499
+ },
4500
+ get required() {
4501
+ return props.required;
4502
+ }
4503
+ }), false, false);
4504
+ return _el$;
4505
+ })();
4506
+ }
4507
+ var textarea_default = Textarea;
4508
+
4509
+ // src/blocks/img/component-info.ts
4510
+ var componentInfo18 = {
4511
+ shouldReceiveBuilderProps: {
4512
+ builderBlock: false,
4513
+ builderContext: false,
4514
+ builderComponents: false,
4515
+ builderLinkComponent: false
4516
+ },
4296
4517
  // friendlyName?
4297
4518
  name: "Raw:Img",
4298
4519
  hideFromInsertMenu: true,
@@ -4307,10 +4528,10 @@ var componentInfo17 = {
4307
4528
  noWrap: true,
4308
4529
  static: true
4309
4530
  };
4310
- var _tmpl$17 = /* @__PURE__ */ template(`<img>`);
4531
+ var _tmpl$18 = /* @__PURE__ */ template(`<img>`);
4311
4532
  function ImgComponent(props) {
4312
4533
  return (() => {
4313
- const _el$ = _tmpl$17();
4534
+ const _el$ = _tmpl$18();
4314
4535
  spread(_el$, mergeProps({
4315
4536
  get style() {
4316
4537
  return {
@@ -4334,7 +4555,7 @@ function ImgComponent(props) {
4334
4555
  var img_default = ImgComponent;
4335
4556
 
4336
4557
  // src/blocks/video/component-info.ts
4337
- var componentInfo18 = {
4558
+ var componentInfo19 = {
4338
4559
  name: "Video",
4339
4560
  canHaveChildren: true,
4340
4561
  defaultStyles: {
@@ -4414,9 +4635,15 @@ var componentInfo18 = {
4414
4635
  helperText: 'Load this video "lazily" - as in only when a user scrolls near the video. Recommended for optmized performance and bandwidth consumption',
4415
4636
  defaultValue: true,
4416
4637
  advanced: true
4417
- }]
4638
+ }],
4639
+ shouldReceiveBuilderProps: {
4640
+ builderBlock: true,
4641
+ builderContext: false,
4642
+ builderComponents: false,
4643
+ builderLinkComponent: false
4644
+ }
4418
4645
  };
4419
- var _tmpl$18 = /* @__PURE__ */ template(`<source type=video/mp4>`);
4646
+ var _tmpl$19 = /* @__PURE__ */ template(`<source type=video/mp4>`);
4420
4647
  var _tmpl$28 = /* @__PURE__ */ template(`<div>`);
4421
4648
  var _tmpl$35 = /* @__PURE__ */ template(`<div><video class=builder-video>`);
4422
4649
  function Video(props) {
@@ -4479,7 +4706,7 @@ function Video(props) {
4479
4706
  return !props.lazyLoad;
4480
4707
  },
4481
4708
  get children() {
4482
- const _el$3 = _tmpl$18();
4709
+ const _el$3 = _tmpl$19();
4483
4710
  effect(() => setAttribute(_el$3, "src", props.video));
4484
4711
  return _el$3;
4485
4712
  }
@@ -4553,12 +4780,15 @@ var getExtraComponents = () => [{
4553
4780
  }, {
4554
4781
  component: select_default,
4555
4782
  ...componentInfo15
4783
+ }, {
4784
+ component: textarea_default,
4785
+ ...componentInfo17
4556
4786
  }], {
4557
4787
  component: img_default,
4558
- ...componentInfo17
4788
+ ...componentInfo18
4559
4789
  }, {
4560
4790
  component: video_default,
4561
- ...componentInfo18
4791
+ ...componentInfo19
4562
4792
  }];
4563
4793
 
4564
4794
  // src/constants/builder-registered-components.ts
@@ -4661,10 +4891,10 @@ var getUpdateVariantVisibilityScript = ({
4661
4891
  }) => `window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME}(
4662
4892
  "${variationId}", "${contentId}", ${isHydrationTarget}
4663
4893
  )`;
4664
- var _tmpl$19 = /* @__PURE__ */ template(`<script>`);
4894
+ var _tmpl$20 = /* @__PURE__ */ template(`<script>`);
4665
4895
  function InlinedScript(props) {
4666
4896
  return (() => {
4667
- const _el$ = _tmpl$19();
4897
+ const _el$ = _tmpl$20();
4668
4898
  effect((_p$) => {
4669
4899
  const _v$ = props.scriptStr, _v$2 = props.id;
4670
4900
  _v$ !== _p$._v$ && (_el$.innerHTML = _p$._v$ = _v$);
@@ -5173,7 +5403,7 @@ function isFromTrustedHost(trustedHosts, e) {
5173
5403
  }
5174
5404
 
5175
5405
  // src/constants/sdk-version.ts
5176
- var SDK_VERSION = "1.0.35";
5406
+ var SDK_VERSION = "1.1.0";
5177
5407
 
5178
5408
  // src/functions/register.ts
5179
5409
  var registry = {};
@@ -6155,7 +6385,7 @@ var fetchSymbolContent = async ({
6155
6385
  };
6156
6386
 
6157
6387
  // src/blocks/symbol/symbol.tsx
6158
- var _tmpl$20 = /* @__PURE__ */ template(`<div>`);
6388
+ var _tmpl$21 = /* @__PURE__ */ template(`<div>`);
6159
6389
  function Symbol(props) {
6160
6390
  const [contentToUse, setContentToUse] = createSignal(props.symbol?.content);
6161
6391
  const blocksWrapper = createMemo(() => {
@@ -6187,7 +6417,7 @@ function Symbol(props) {
6187
6417
  }
6188
6418
  createEffect(on(() => [onUpdateFn_0_props_symbol()], onUpdateFn_0));
6189
6419
  return (() => {
6190
- const _el$ = _tmpl$20();
6420
+ const _el$ = _tmpl$21();
6191
6421
  spread(_el$, mergeProps({
6192
6422
  get ["class"]() {
6193
6423
  return className();