@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/dev.js CHANGED
@@ -305,6 +305,19 @@ function flattenState({
305
305
  });
306
306
  }
307
307
 
308
+ // src/constants/sdk-name.ts
309
+ var SDK_NAME_FOR_TARGET = (() => {
310
+ switch (TARGET) {
311
+ case "rsc":
312
+ return "react-nextjs";
313
+ case "reactNative":
314
+ return "react-native";
315
+ default:
316
+ return TARGET;
317
+ }
318
+ })();
319
+ var SDK_NAME = `@builder.io/sdk-${SDK_NAME_FOR_TARGET}`;
320
+
308
321
  // src/functions/fast-clone.ts
309
322
  var fastClone = (obj) => JSON.parse(JSON.stringify(obj));
310
323
 
@@ -383,6 +396,7 @@ if (typeof output === 'object' && output !== null) {
383
396
  };
384
397
  var IVM_INSTANCE = null;
385
398
  var IVM_CONTEXT = null;
399
+ var SHOULD_MENTION_INITIALIZE_SCRIPT = SDK_NAME === "@builder.io/sdk-react-nextjs" || SDK_NAME === "@builder.io/sdk-react";
386
400
  var getIvm = () => {
387
401
  try {
388
402
  if (IVM_INSTANCE)
@@ -393,14 +407,15 @@ var getIvm = () => {
393
407
  } catch (error2) {
394
408
  logger.error("isolated-vm import error.", error2);
395
409
  }
396
- throw new Error(`${MSG_PREFIX}could not import \`isolated-vm\` module for safe script execution on Node server.
410
+ const ERROR_MESSAGE = `${MSG_PREFIX}could not import \`isolated-vm\` module for safe script execution on a Node server.
397
411
 
398
- In certain Node environments, the SDK requires additional initialization steps. This can be achieved by
399
- importing and calling \`initializeNodeRuntime()\` from "@builder.io/sdk-react/node/init". This must be done in
400
- a server-only execution path within your application.
412
+ SOLUTION: In a server-only execution path within your application, do one of the following:
413
+
414
+ ${SHOULD_MENTION_INITIALIZE_SCRIPT ? '- import and call `initializeNodeRuntime()` from "${SDK_NAME}/node/init".' : ""}
415
+ - add the following import: \`await import('isolated-vm')\`.
401
416
 
402
- Please see the documentation for more information: https://builder.io/c/docs/integration-tips#enabling-data-bindings-in-node-environments
403
- `);
417
+ For more information, visit https://builder.io/c/docs/integration-tips#enabling-data-bindings-in-node-environments`;
418
+ throw new Error(ERROR_MESSAGE);
404
419
  };
405
420
  function setIsolateContext(options = {
406
421
  memoryLimit: 128
@@ -939,25 +954,56 @@ var getRepeatItemData = ({
939
954
  }));
940
955
  return repeatArray;
941
956
  };
957
+ var applyDefaults = (shouldReceiveBuilderProps) => {
958
+ return {
959
+ // once we bump to a major version, toggle this to `false`.
960
+ builderBlock: true,
961
+ // once we bump to a major version, toggle this to `false`.
962
+ builderContext: true,
963
+ builderComponents: false,
964
+ builderLinkComponent: false,
965
+ ...shouldReceiveBuilderProps
966
+ };
967
+ };
942
968
  var provideLinkComponent = (block, linkComponent) => {
943
- return block && (block.isRSC && TARGET === "rsc" || ["Core:Button", "Symbol", "Columns", "Form:Form", "Builder: Tabs", "Builder:Accordion"].includes(block.name)) ? {
969
+ if (!block)
970
+ return {};
971
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderLinkComponent;
972
+ if (!shouldReceiveProp)
973
+ return {};
974
+ return {
944
975
  builderLinkComponent: linkComponent
945
- } : {};
976
+ };
946
977
  };
947
978
  var provideRegisteredComponents = (block, registeredComponents) => {
948
- return block && (block.isRSC && TARGET === "rsc" || ["Symbol", "Columns", "Form:Form", "Builder: Tabs", "Builder:Accordion"].includes(block.name)) ? {
979
+ if (!block)
980
+ return {};
981
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderComponents;
982
+ if (!shouldReceiveProp)
983
+ return {};
984
+ return {
949
985
  builderComponents: registeredComponents
950
- } : {};
986
+ };
951
987
  };
952
988
  var provideBuilderBlock = (block, builderBlock) => {
953
- return block && (block.isRSC && TARGET === "rsc" || TARGET === "reactNative" && block.name === "Text" || ["Builder:Accordion", "Columns", "Form:Form", "Builder: Tabs", "Symbol", "Image", "Video"].includes(block.name)) ? {
989
+ if (!block)
990
+ return {};
991
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderBlock;
992
+ if (!shouldReceiveProp)
993
+ return {};
994
+ return {
954
995
  builderBlock
955
- } : {};
996
+ };
956
997
  };
957
998
  var provideBuilderContext = (block, context) => {
958
- return block && (block.isRSC && TARGET === "rsc" || ["Builder:Accordion", "Columns", "Form:Form", "Builder: Tabs", "Symbol", "Slot"].includes(block.name)) ? {
999
+ if (!block)
1000
+ return {};
1001
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderContext;
1002
+ if (!shouldReceiveProp)
1003
+ return {};
1004
+ return {
959
1005
  builderContext: context
960
- } : {};
1006
+ };
961
1007
  };
962
1008
 
963
1009
  // src/constants/device-sizes.ts
@@ -2408,7 +2454,13 @@ var componentInfo = {
2408
2454
  options.set("items", []);
2409
2455
  }
2410
2456
  }
2411
- }]
2457
+ }],
2458
+ shouldReceiveBuilderProps: {
2459
+ builderBlock: true,
2460
+ builderContext: true,
2461
+ builderComponents: true,
2462
+ builderLinkComponent: true
2463
+ }
2412
2464
  };
2413
2465
 
2414
2466
  // src/blocks/accordion/helpers.ts
@@ -2631,7 +2683,13 @@ var componentInfo2 = {
2631
2683
  friendlyName: "Open link in new tab"
2632
2684
  }],
2633
2685
  static: true,
2634
- noWrap: true
2686
+ noWrap: true,
2687
+ shouldReceiveBuilderProps: {
2688
+ builderBlock: false,
2689
+ builderContext: false,
2690
+ builderComponents: false,
2691
+ builderLinkComponent: true
2692
+ }
2635
2693
  };
2636
2694
 
2637
2695
  // src/blocks/columns/component-info.ts
@@ -2851,11 +2909,23 @@ var componentInfo3 = {
2851
2909
  defaultValue: false,
2852
2910
  helperText: "When stacking columns for mobile devices, reverse the ordering",
2853
2911
  advanced: true
2854
- }]
2912
+ }],
2913
+ shouldReceiveBuilderProps: {
2914
+ builderBlock: true,
2915
+ builderContext: true,
2916
+ builderComponents: true,
2917
+ builderLinkComponent: true
2918
+ }
2855
2919
  };
2856
2920
 
2857
2921
  // src/blocks/fragment/component-info.ts
2858
2922
  var componentInfo4 = {
2923
+ shouldReceiveBuilderProps: {
2924
+ builderBlock: false,
2925
+ builderContext: false,
2926
+ builderComponents: false,
2927
+ builderLinkComponent: false
2928
+ },
2859
2929
  name: "Fragment",
2860
2930
  static: true,
2861
2931
  hidden: true,
@@ -2988,11 +3058,23 @@ var componentInfo5 = {
2988
3058
  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",
2989
3059
  advanced: true,
2990
3060
  defaultValue: 0.7041
2991
- }]
3061
+ }],
3062
+ shouldReceiveBuilderProps: {
3063
+ builderBlock: true,
3064
+ builderContext: false,
3065
+ builderComponents: false,
3066
+ builderLinkComponent: false
3067
+ }
2992
3068
  };
2993
3069
 
2994
3070
  // src/blocks/section/component-info.ts
2995
3071
  var componentInfo6 = {
3072
+ shouldReceiveBuilderProps: {
3073
+ builderBlock: false,
3074
+ builderContext: false,
3075
+ builderComponents: false,
3076
+ builderLinkComponent: false
3077
+ },
2996
3078
  name: "Core:Section",
2997
3079
  static: true,
2998
3080
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F682efef23ace49afac61748dd305c70a",
@@ -3046,7 +3128,13 @@ var componentInfo7 = {
3046
3128
  type: "string",
3047
3129
  required: true,
3048
3130
  defaultValue: "children"
3049
- }]
3131
+ }],
3132
+ shouldReceiveBuilderProps: {
3133
+ builderBlock: false,
3134
+ builderContext: true,
3135
+ builderComponents: false,
3136
+ builderLinkComponent: false
3137
+ }
3050
3138
  };
3051
3139
  var _tmpl$8 = /* @__PURE__ */ template(`<div>`);
3052
3140
  function Slot(props) {
@@ -3108,7 +3196,13 @@ var componentInfo8 = {
3108
3196
  name: "useChildren",
3109
3197
  hideFromUI: true,
3110
3198
  type: "boolean"
3111
- }]
3199
+ }],
3200
+ shouldReceiveBuilderProps: {
3201
+ builderBlock: true,
3202
+ builderContext: true,
3203
+ builderComponents: true,
3204
+ builderLinkComponent: true
3205
+ }
3112
3206
  };
3113
3207
 
3114
3208
  // src/blocks/tabs/component-info.ts
@@ -3248,7 +3342,13 @@ var componentInfo9 = {
3248
3342
  label: "Right",
3249
3343
  value: "flex-end"
3250
3344
  }]
3251
- }]
3345
+ }],
3346
+ shouldReceiveBuilderProps: {
3347
+ builderBlock: true,
3348
+ builderContext: true,
3349
+ builderComponents: true,
3350
+ builderLinkComponent: true
3351
+ }
3252
3352
  };
3253
3353
  var _tmpl$9 = /* @__PURE__ */ template(`<div>`);
3254
3354
  var _tmpl$25 = /* @__PURE__ */ template(`<div><div class=builder-tabs-wrap>`);
@@ -3351,6 +3451,12 @@ delegateEvents(["click"]);
3351
3451
 
3352
3452
  // src/blocks/text/component-info.ts
3353
3453
  var componentInfo10 = {
3454
+ shouldReceiveBuilderProps: {
3455
+ builderBlock: TARGET === "reactNative" ? true : false,
3456
+ builderContext: false,
3457
+ builderComponents: false,
3458
+ builderLinkComponent: false
3459
+ },
3354
3460
  name: "Text",
3355
3461
  static: true,
3356
3462
  isRSC: true,
@@ -3382,6 +3488,12 @@ var text_default = Text;
3382
3488
 
3383
3489
  // src/blocks/custom-code/component-info.ts
3384
3490
  var componentInfo11 = {
3491
+ shouldReceiveBuilderProps: {
3492
+ builderBlock: false,
3493
+ builderContext: false,
3494
+ builderComponents: false,
3495
+ builderLinkComponent: false
3496
+ },
3385
3497
  name: "Custom Code",
3386
3498
  static: true,
3387
3499
  requiredPermissions: ["editCode"],
@@ -3458,6 +3570,12 @@ var custom_code_default = CustomCode;
3458
3570
 
3459
3571
  // src/blocks/embed/component-info.ts
3460
3572
  var componentInfo12 = {
3573
+ shouldReceiveBuilderProps: {
3574
+ builderBlock: false,
3575
+ builderContext: false,
3576
+ builderComponents: false,
3577
+ builderLinkComponent: false
3578
+ },
3461
3579
  name: "Embed",
3462
3580
  static: true,
3463
3581
  inputs: [{
@@ -3777,7 +3895,13 @@ var componentInfo13 = {
3777
3895
  text: "Submit"
3778
3896
  }
3779
3897
  }
3780
- }]
3898
+ }],
3899
+ shouldReceiveBuilderProps: {
3900
+ builderBlock: true,
3901
+ builderContext: true,
3902
+ builderComponents: true,
3903
+ builderLinkComponent: true
3904
+ }
3781
3905
  };
3782
3906
 
3783
3907
  // src/functions/get-env.ts
@@ -4097,6 +4221,12 @@ var form_default = FormComponent;
4097
4221
 
4098
4222
  // src/blocks/form/input/component-info.ts
4099
4223
  var componentInfo14 = {
4224
+ shouldReceiveBuilderProps: {
4225
+ builderBlock: false,
4226
+ builderContext: false,
4227
+ builderComponents: false,
4228
+ builderLinkComponent: false
4229
+ },
4100
4230
  name: "Form:Input",
4101
4231
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fad6f37889d9e40bbbbc72cdb5875d6ca",
4102
4232
  inputs: [
@@ -4182,6 +4312,12 @@ var input_default = FormInputComponent;
4182
4312
 
4183
4313
  // src/blocks/form/select/component-info.ts
4184
4314
  var componentInfo15 = {
4315
+ shouldReceiveBuilderProps: {
4316
+ builderBlock: false,
4317
+ builderContext: false,
4318
+ builderComponents: false,
4319
+ builderLinkComponent: false
4320
+ },
4185
4321
  name: "Form:Select",
4186
4322
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F83acca093fb24aaf94dee136e9a4b045",
4187
4323
  defaultStyles: {
@@ -4241,6 +4377,9 @@ function SelectComponent(props) {
4241
4377
  },
4242
4378
  get name() {
4243
4379
  return props.name;
4380
+ },
4381
+ get required() {
4382
+ return props.required;
4244
4383
  }
4245
4384
  }), false, true);
4246
4385
  insert(_el$, createComponent(For, {
@@ -4265,6 +4404,12 @@ var select_default = SelectComponent;
4265
4404
 
4266
4405
  // src/blocks/form/submit-button/component-info.ts
4267
4406
  var componentInfo16 = {
4407
+ shouldReceiveBuilderProps: {
4408
+ builderBlock: false,
4409
+ builderContext: false,
4410
+ builderComponents: false,
4411
+ builderLinkComponent: false
4412
+ },
4268
4413
  name: "Form:SubmitButton",
4269
4414
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fdf2820ffed1f4349a94c40b3221f5b98",
4270
4415
  defaultStyles: {
@@ -4301,8 +4446,84 @@ function SubmitButton(props) {
4301
4446
  }
4302
4447
  var submit_button_default = SubmitButton;
4303
4448
 
4304
- // src/blocks/img/component-info.ts
4449
+ // src/blocks/form/textarea/component-info.ts
4305
4450
  var componentInfo17 = {
4451
+ shouldReceiveBuilderProps: {
4452
+ builderBlock: false,
4453
+ builderContext: false,
4454
+ builderComponents: false,
4455
+ builderLinkComponent: false
4456
+ },
4457
+ name: "Form:TextArea",
4458
+ image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Ff74a2f3de58c4c3e939204e5b6b8f6c3",
4459
+ inputs: [{
4460
+ advanced: true,
4461
+ name: "value",
4462
+ type: "string"
4463
+ }, {
4464
+ name: "name",
4465
+ type: "string",
4466
+ required: true,
4467
+ helperText: 'Every input in a form needs a unique name describing what it gets, e.g. "email"'
4468
+ }, {
4469
+ name: "defaultValue",
4470
+ type: "string"
4471
+ }, {
4472
+ name: "placeholder",
4473
+ type: "string",
4474
+ defaultValue: "Hello there"
4475
+ }, {
4476
+ name: "required",
4477
+ type: "boolean",
4478
+ defaultValue: false
4479
+ }],
4480
+ defaultStyles: {
4481
+ paddingTop: "10px",
4482
+ paddingBottom: "10px",
4483
+ paddingLeft: "10px",
4484
+ paddingRight: "10px",
4485
+ borderRadius: "3px",
4486
+ borderWidth: "1px",
4487
+ borderStyle: "solid",
4488
+ borderColor: "#ccc"
4489
+ },
4490
+ static: true,
4491
+ noWrap: true
4492
+ };
4493
+ var _tmpl$17 = /* @__PURE__ */ template(`<textarea>`);
4494
+ function Textarea(props) {
4495
+ return (() => {
4496
+ const _el$ = _tmpl$17();
4497
+ spread(_el$, mergeProps({}, () => props.attributes, {
4498
+ get placeholder() {
4499
+ return props.placeholder;
4500
+ },
4501
+ get name() {
4502
+ return props.name;
4503
+ },
4504
+ get value() {
4505
+ return props.value;
4506
+ },
4507
+ get defaultValue() {
4508
+ return props.defaultValue;
4509
+ },
4510
+ get required() {
4511
+ return props.required;
4512
+ }
4513
+ }), false, false);
4514
+ return _el$;
4515
+ })();
4516
+ }
4517
+ var textarea_default = Textarea;
4518
+
4519
+ // src/blocks/img/component-info.ts
4520
+ var componentInfo18 = {
4521
+ shouldReceiveBuilderProps: {
4522
+ builderBlock: false,
4523
+ builderContext: false,
4524
+ builderComponents: false,
4525
+ builderLinkComponent: false
4526
+ },
4306
4527
  // friendlyName?
4307
4528
  name: "Raw:Img",
4308
4529
  hideFromInsertMenu: true,
@@ -4317,10 +4538,10 @@ var componentInfo17 = {
4317
4538
  noWrap: true,
4318
4539
  static: true
4319
4540
  };
4320
- var _tmpl$17 = /* @__PURE__ */ template(`<img>`);
4541
+ var _tmpl$18 = /* @__PURE__ */ template(`<img>`);
4321
4542
  function ImgComponent(props) {
4322
4543
  return (() => {
4323
- const _el$ = _tmpl$17();
4544
+ const _el$ = _tmpl$18();
4324
4545
  spread(_el$, mergeProps({
4325
4546
  get style() {
4326
4547
  return {
@@ -4344,7 +4565,7 @@ function ImgComponent(props) {
4344
4565
  var img_default = ImgComponent;
4345
4566
 
4346
4567
  // src/blocks/video/component-info.ts
4347
- var componentInfo18 = {
4568
+ var componentInfo19 = {
4348
4569
  name: "Video",
4349
4570
  canHaveChildren: true,
4350
4571
  defaultStyles: {
@@ -4424,9 +4645,15 @@ var componentInfo18 = {
4424
4645
  helperText: 'Load this video "lazily" - as in only when a user scrolls near the video. Recommended for optmized performance and bandwidth consumption',
4425
4646
  defaultValue: true,
4426
4647
  advanced: true
4427
- }]
4648
+ }],
4649
+ shouldReceiveBuilderProps: {
4650
+ builderBlock: true,
4651
+ builderContext: false,
4652
+ builderComponents: false,
4653
+ builderLinkComponent: false
4654
+ }
4428
4655
  };
4429
- var _tmpl$18 = /* @__PURE__ */ template(`<source type=video/mp4>`);
4656
+ var _tmpl$19 = /* @__PURE__ */ template(`<source type=video/mp4>`);
4430
4657
  var _tmpl$28 = /* @__PURE__ */ template(`<div>`);
4431
4658
  var _tmpl$35 = /* @__PURE__ */ template(`<div><video class=builder-video>`);
4432
4659
  function Video(props) {
@@ -4489,7 +4716,7 @@ function Video(props) {
4489
4716
  return !props.lazyLoad;
4490
4717
  },
4491
4718
  get children() {
4492
- const _el$3 = _tmpl$18();
4719
+ const _el$3 = _tmpl$19();
4493
4720
  effect(() => setAttribute(_el$3, "src", props.video));
4494
4721
  return _el$3;
4495
4722
  }
@@ -4563,12 +4790,15 @@ var getExtraComponents = () => [{
4563
4790
  }, {
4564
4791
  component: select_default,
4565
4792
  ...componentInfo15
4793
+ }, {
4794
+ component: textarea_default,
4795
+ ...componentInfo17
4566
4796
  }], {
4567
4797
  component: img_default,
4568
- ...componentInfo17
4798
+ ...componentInfo18
4569
4799
  }, {
4570
4800
  component: video_default,
4571
- ...componentInfo18
4801
+ ...componentInfo19
4572
4802
  }];
4573
4803
 
4574
4804
  // src/constants/builder-registered-components.ts
@@ -4671,10 +4901,10 @@ var getUpdateVariantVisibilityScript = ({
4671
4901
  }) => `window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME}(
4672
4902
  "${variationId}", "${contentId}", ${isHydrationTarget}
4673
4903
  )`;
4674
- var _tmpl$19 = /* @__PURE__ */ template(`<script>`);
4904
+ var _tmpl$20 = /* @__PURE__ */ template(`<script>`);
4675
4905
  function InlinedScript(props) {
4676
4906
  return (() => {
4677
- const _el$ = _tmpl$19();
4907
+ const _el$ = _tmpl$20();
4678
4908
  effect((_p$) => {
4679
4909
  const _v$ = props.scriptStr, _v$2 = props.id;
4680
4910
  _v$ !== _p$._v$ && (_el$.innerHTML = _p$._v$ = _v$);
@@ -5188,7 +5418,7 @@ function isFromTrustedHost(trustedHosts, e) {
5188
5418
  }
5189
5419
 
5190
5420
  // src/constants/sdk-version.ts
5191
- var SDK_VERSION = "1.0.35";
5421
+ var SDK_VERSION = "1.1.0";
5192
5422
 
5193
5423
  // src/functions/register.ts
5194
5424
  var registry = {};
@@ -6172,7 +6402,7 @@ var fetchSymbolContent = async ({
6172
6402
  };
6173
6403
 
6174
6404
  // src/blocks/symbol/symbol.tsx
6175
- var _tmpl$20 = /* @__PURE__ */ template(`<div>`);
6405
+ var _tmpl$21 = /* @__PURE__ */ template(`<div>`);
6176
6406
  function Symbol(props) {
6177
6407
  const [contentToUse, setContentToUse] = createSignal(props.symbol?.content);
6178
6408
  const blocksWrapper = createMemo(() => {
@@ -6204,7 +6434,7 @@ function Symbol(props) {
6204
6434
  }
6205
6435
  createEffect(on(() => [onUpdateFn_0_props_symbol()], onUpdateFn_0));
6206
6436
  return (() => {
6207
- const _el$ = _tmpl$20();
6437
+ const _el$ = _tmpl$21();
6208
6438
  spread(_el$, mergeProps({
6209
6439
  get ["class"]() {
6210
6440
  return className();