@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/dist/index.d.ts CHANGED
@@ -436,6 +436,37 @@ interface ComponentInfo {
436
436
  */
437
437
  requiredPermissions?: Array<Permission>;
438
438
  hidden?: boolean;
439
+ /**
440
+ * Whether or not the component should receive SDK-related props.
441
+ */
442
+ shouldReceiveBuilderProps?: {
443
+ /**
444
+ * Whether or not the component should receive the `builderBlock` prop, containing the current Builder block being rendered.
445
+ *
446
+ * Defaults to `true`.
447
+ */
448
+ builderBlock?: boolean;
449
+ /**
450
+ * Whether or not the component should receive the `builderContext` prop, containing the current context.
451
+ * The Builder Context contains a lot of data relevant to the current `Content` render.
452
+ * You can see more information [here](https://github.com/BuilderIO/builder/blob/main/packages/sdks/src/context/types.ts).
453
+ *
454
+ * Defaults to `true`.
455
+ */
456
+ builderContext?: boolean;
457
+ /**
458
+ * Whether or not the component should receive the `builderComponents` array, containing the all registered components (custom and built-in).
459
+ *
460
+ * Defaults to `false`.
461
+ */
462
+ builderComponents?: boolean;
463
+ /**
464
+ * Whether or not the component should receive the `builderLinkComponent` prop, containing the custom link component provided to `Content`.
465
+ *
466
+ * Defaults to `false`.
467
+ */
468
+ builderLinkComponent?: boolean;
469
+ };
439
470
  }
440
471
  type Permission = 'read' | 'publish' | 'editCode' | 'editDesigns' | 'admin' | 'create';
441
472
 
@@ -784,25 +784,56 @@ var getRepeatItemData = ({
784
784
  }));
785
785
  return repeatArray;
786
786
  };
787
+ var applyDefaults = (shouldReceiveBuilderProps) => {
788
+ return {
789
+ // once we bump to a major version, toggle this to `false`.
790
+ builderBlock: true,
791
+ // once we bump to a major version, toggle this to `false`.
792
+ builderContext: true,
793
+ builderComponents: false,
794
+ builderLinkComponent: false,
795
+ ...shouldReceiveBuilderProps
796
+ };
797
+ };
787
798
  var provideLinkComponent = (block, linkComponent) => {
788
- return block && (block.isRSC && TARGET === "rsc" || ["Core:Button", "Symbol", "Columns", "Form:Form", "Builder: Tabs", "Builder:Accordion"].includes(block.name)) ? {
799
+ if (!block)
800
+ return {};
801
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderLinkComponent;
802
+ if (!shouldReceiveProp)
803
+ return {};
804
+ return {
789
805
  builderLinkComponent: linkComponent
790
- } : {};
806
+ };
791
807
  };
792
808
  var provideRegisteredComponents = (block, registeredComponents) => {
793
- return block && (block.isRSC && TARGET === "rsc" || ["Symbol", "Columns", "Form:Form", "Builder: Tabs", "Builder:Accordion"].includes(block.name)) ? {
809
+ if (!block)
810
+ return {};
811
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderComponents;
812
+ if (!shouldReceiveProp)
813
+ return {};
814
+ return {
794
815
  builderComponents: registeredComponents
795
- } : {};
816
+ };
796
817
  };
797
818
  var provideBuilderBlock = (block, builderBlock) => {
798
- return block && (block.isRSC && TARGET === "rsc" || TARGET === "reactNative" && block.name === "Text" || ["Builder:Accordion", "Columns", "Form:Form", "Builder: Tabs", "Symbol", "Image", "Video"].includes(block.name)) ? {
819
+ if (!block)
820
+ return {};
821
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderBlock;
822
+ if (!shouldReceiveProp)
823
+ return {};
824
+ return {
799
825
  builderBlock
800
- } : {};
826
+ };
801
827
  };
802
828
  var provideBuilderContext = (block, context) => {
803
- return block && (block.isRSC && TARGET === "rsc" || ["Builder:Accordion", "Columns", "Form:Form", "Builder: Tabs", "Symbol", "Slot"].includes(block.name)) ? {
829
+ if (!block)
830
+ return {};
831
+ const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderContext;
832
+ if (!shouldReceiveProp)
833
+ return {};
834
+ return {
804
835
  builderContext: context
805
- } : {};
836
+ };
806
837
  };
807
838
 
808
839
  // src/constants/device-sizes.ts
@@ -2253,7 +2284,13 @@ var componentInfo = {
2253
2284
  options.set("items", []);
2254
2285
  }
2255
2286
  }
2256
- }]
2287
+ }],
2288
+ shouldReceiveBuilderProps: {
2289
+ builderBlock: true,
2290
+ builderContext: true,
2291
+ builderComponents: true,
2292
+ builderLinkComponent: true
2293
+ }
2257
2294
  };
2258
2295
 
2259
2296
  // src/blocks/accordion/helpers.ts
@@ -2476,7 +2513,13 @@ var componentInfo2 = {
2476
2513
  friendlyName: "Open link in new tab"
2477
2514
  }],
2478
2515
  static: true,
2479
- noWrap: true
2516
+ noWrap: true,
2517
+ shouldReceiveBuilderProps: {
2518
+ builderBlock: false,
2519
+ builderContext: false,
2520
+ builderComponents: false,
2521
+ builderLinkComponent: true
2522
+ }
2480
2523
  };
2481
2524
 
2482
2525
  // src/blocks/columns/component-info.ts
@@ -2696,11 +2739,23 @@ var componentInfo3 = {
2696
2739
  defaultValue: false,
2697
2740
  helperText: "When stacking columns for mobile devices, reverse the ordering",
2698
2741
  advanced: true
2699
- }]
2742
+ }],
2743
+ shouldReceiveBuilderProps: {
2744
+ builderBlock: true,
2745
+ builderContext: true,
2746
+ builderComponents: true,
2747
+ builderLinkComponent: true
2748
+ }
2700
2749
  };
2701
2750
 
2702
2751
  // src/blocks/fragment/component-info.ts
2703
2752
  var componentInfo4 = {
2753
+ shouldReceiveBuilderProps: {
2754
+ builderBlock: false,
2755
+ builderContext: false,
2756
+ builderComponents: false,
2757
+ builderLinkComponent: false
2758
+ },
2704
2759
  name: "Fragment",
2705
2760
  static: true,
2706
2761
  hidden: true,
@@ -2833,11 +2888,23 @@ var componentInfo5 = {
2833
2888
  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",
2834
2889
  advanced: true,
2835
2890
  defaultValue: 0.7041
2836
- }]
2891
+ }],
2892
+ shouldReceiveBuilderProps: {
2893
+ builderBlock: true,
2894
+ builderContext: false,
2895
+ builderComponents: false,
2896
+ builderLinkComponent: false
2897
+ }
2837
2898
  };
2838
2899
 
2839
2900
  // src/blocks/section/component-info.ts
2840
2901
  var componentInfo6 = {
2902
+ shouldReceiveBuilderProps: {
2903
+ builderBlock: false,
2904
+ builderContext: false,
2905
+ builderComponents: false,
2906
+ builderLinkComponent: false
2907
+ },
2841
2908
  name: "Core:Section",
2842
2909
  static: true,
2843
2910
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F682efef23ace49afac61748dd305c70a",
@@ -2891,7 +2958,13 @@ var componentInfo7 = {
2891
2958
  type: "string",
2892
2959
  required: true,
2893
2960
  defaultValue: "children"
2894
- }]
2961
+ }],
2962
+ shouldReceiveBuilderProps: {
2963
+ builderBlock: false,
2964
+ builderContext: true,
2965
+ builderComponents: false,
2966
+ builderLinkComponent: false
2967
+ }
2895
2968
  };
2896
2969
  var _tmpl$8 = /* @__PURE__ */ template(`<div>`);
2897
2970
  function Slot(props) {
@@ -2953,7 +3026,13 @@ var componentInfo8 = {
2953
3026
  name: "useChildren",
2954
3027
  hideFromUI: true,
2955
3028
  type: "boolean"
2956
- }]
3029
+ }],
3030
+ shouldReceiveBuilderProps: {
3031
+ builderBlock: true,
3032
+ builderContext: true,
3033
+ builderComponents: true,
3034
+ builderLinkComponent: true
3035
+ }
2957
3036
  };
2958
3037
 
2959
3038
  // src/blocks/tabs/component-info.ts
@@ -3093,7 +3172,13 @@ var componentInfo9 = {
3093
3172
  label: "Right",
3094
3173
  value: "flex-end"
3095
3174
  }]
3096
- }]
3175
+ }],
3176
+ shouldReceiveBuilderProps: {
3177
+ builderBlock: true,
3178
+ builderContext: true,
3179
+ builderComponents: true,
3180
+ builderLinkComponent: true
3181
+ }
3097
3182
  };
3098
3183
  var _tmpl$9 = /* @__PURE__ */ template(`<div>`);
3099
3184
  var _tmpl$25 = /* @__PURE__ */ template(`<div><div class=builder-tabs-wrap>`);
@@ -3196,6 +3281,12 @@ delegateEvents(["click"]);
3196
3281
 
3197
3282
  // src/blocks/text/component-info.ts
3198
3283
  var componentInfo10 = {
3284
+ shouldReceiveBuilderProps: {
3285
+ builderBlock: TARGET === "reactNative" ? true : false,
3286
+ builderContext: false,
3287
+ builderComponents: false,
3288
+ builderLinkComponent: false
3289
+ },
3199
3290
  name: "Text",
3200
3291
  static: true,
3201
3292
  isRSC: true,
@@ -3227,6 +3318,12 @@ var text_default = Text;
3227
3318
 
3228
3319
  // src/blocks/custom-code/component-info.ts
3229
3320
  var componentInfo11 = {
3321
+ shouldReceiveBuilderProps: {
3322
+ builderBlock: false,
3323
+ builderContext: false,
3324
+ builderComponents: false,
3325
+ builderLinkComponent: false
3326
+ },
3230
3327
  name: "Custom Code",
3231
3328
  static: true,
3232
3329
  requiredPermissions: ["editCode"],
@@ -3303,6 +3400,12 @@ var custom_code_default = CustomCode;
3303
3400
 
3304
3401
  // src/blocks/embed/component-info.ts
3305
3402
  var componentInfo12 = {
3403
+ shouldReceiveBuilderProps: {
3404
+ builderBlock: false,
3405
+ builderContext: false,
3406
+ builderComponents: false,
3407
+ builderLinkComponent: false
3408
+ },
3306
3409
  name: "Embed",
3307
3410
  static: true,
3308
3411
  inputs: [{
@@ -3622,7 +3725,13 @@ var componentInfo13 = {
3622
3725
  text: "Submit"
3623
3726
  }
3624
3727
  }
3625
- }]
3728
+ }],
3729
+ shouldReceiveBuilderProps: {
3730
+ builderBlock: true,
3731
+ builderContext: true,
3732
+ builderComponents: true,
3733
+ builderLinkComponent: true
3734
+ }
3626
3735
  };
3627
3736
 
3628
3737
  // src/functions/get-env.ts
@@ -3942,6 +4051,12 @@ var form_default = FormComponent;
3942
4051
 
3943
4052
  // src/blocks/form/input/component-info.ts
3944
4053
  var componentInfo14 = {
4054
+ shouldReceiveBuilderProps: {
4055
+ builderBlock: false,
4056
+ builderContext: false,
4057
+ builderComponents: false,
4058
+ builderLinkComponent: false
4059
+ },
3945
4060
  name: "Form:Input",
3946
4061
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fad6f37889d9e40bbbbc72cdb5875d6ca",
3947
4062
  inputs: [
@@ -4027,6 +4142,12 @@ var input_default = FormInputComponent;
4027
4142
 
4028
4143
  // src/blocks/form/select/component-info.ts
4029
4144
  var componentInfo15 = {
4145
+ shouldReceiveBuilderProps: {
4146
+ builderBlock: false,
4147
+ builderContext: false,
4148
+ builderComponents: false,
4149
+ builderLinkComponent: false
4150
+ },
4030
4151
  name: "Form:Select",
4031
4152
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F83acca093fb24aaf94dee136e9a4b045",
4032
4153
  defaultStyles: {
@@ -4086,6 +4207,9 @@ function SelectComponent(props) {
4086
4207
  },
4087
4208
  get name() {
4088
4209
  return props.name;
4210
+ },
4211
+ get required() {
4212
+ return props.required;
4089
4213
  }
4090
4214
  }), false, true);
4091
4215
  insert(_el$, createComponent(For, {
@@ -4110,6 +4234,12 @@ var select_default = SelectComponent;
4110
4234
 
4111
4235
  // src/blocks/form/submit-button/component-info.ts
4112
4236
  var componentInfo16 = {
4237
+ shouldReceiveBuilderProps: {
4238
+ builderBlock: false,
4239
+ builderContext: false,
4240
+ builderComponents: false,
4241
+ builderLinkComponent: false
4242
+ },
4113
4243
  name: "Form:SubmitButton",
4114
4244
  image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fdf2820ffed1f4349a94c40b3221f5b98",
4115
4245
  defaultStyles: {
@@ -4146,8 +4276,84 @@ function SubmitButton(props) {
4146
4276
  }
4147
4277
  var submit_button_default = SubmitButton;
4148
4278
 
4149
- // src/blocks/img/component-info.ts
4279
+ // src/blocks/form/textarea/component-info.ts
4150
4280
  var componentInfo17 = {
4281
+ shouldReceiveBuilderProps: {
4282
+ builderBlock: false,
4283
+ builderContext: false,
4284
+ builderComponents: false,
4285
+ builderLinkComponent: false
4286
+ },
4287
+ name: "Form:TextArea",
4288
+ image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Ff74a2f3de58c4c3e939204e5b6b8f6c3",
4289
+ inputs: [{
4290
+ advanced: true,
4291
+ name: "value",
4292
+ type: "string"
4293
+ }, {
4294
+ name: "name",
4295
+ type: "string",
4296
+ required: true,
4297
+ helperText: 'Every input in a form needs a unique name describing what it gets, e.g. "email"'
4298
+ }, {
4299
+ name: "defaultValue",
4300
+ type: "string"
4301
+ }, {
4302
+ name: "placeholder",
4303
+ type: "string",
4304
+ defaultValue: "Hello there"
4305
+ }, {
4306
+ name: "required",
4307
+ type: "boolean",
4308
+ defaultValue: false
4309
+ }],
4310
+ defaultStyles: {
4311
+ paddingTop: "10px",
4312
+ paddingBottom: "10px",
4313
+ paddingLeft: "10px",
4314
+ paddingRight: "10px",
4315
+ borderRadius: "3px",
4316
+ borderWidth: "1px",
4317
+ borderStyle: "solid",
4318
+ borderColor: "#ccc"
4319
+ },
4320
+ static: true,
4321
+ noWrap: true
4322
+ };
4323
+ var _tmpl$17 = /* @__PURE__ */ template(`<textarea>`);
4324
+ function Textarea(props) {
4325
+ return (() => {
4326
+ const _el$ = _tmpl$17();
4327
+ spread(_el$, mergeProps({}, () => props.attributes, {
4328
+ get placeholder() {
4329
+ return props.placeholder;
4330
+ },
4331
+ get name() {
4332
+ return props.name;
4333
+ },
4334
+ get value() {
4335
+ return props.value;
4336
+ },
4337
+ get defaultValue() {
4338
+ return props.defaultValue;
4339
+ },
4340
+ get required() {
4341
+ return props.required;
4342
+ }
4343
+ }), false, false);
4344
+ return _el$;
4345
+ })();
4346
+ }
4347
+ var textarea_default = Textarea;
4348
+
4349
+ // src/blocks/img/component-info.ts
4350
+ var componentInfo18 = {
4351
+ shouldReceiveBuilderProps: {
4352
+ builderBlock: false,
4353
+ builderContext: false,
4354
+ builderComponents: false,
4355
+ builderLinkComponent: false
4356
+ },
4151
4357
  // friendlyName?
4152
4358
  name: "Raw:Img",
4153
4359
  hideFromInsertMenu: true,
@@ -4162,10 +4368,10 @@ var componentInfo17 = {
4162
4368
  noWrap: true,
4163
4369
  static: true
4164
4370
  };
4165
- var _tmpl$17 = /* @__PURE__ */ template(`<img>`);
4371
+ var _tmpl$18 = /* @__PURE__ */ template(`<img>`);
4166
4372
  function ImgComponent(props) {
4167
4373
  return (() => {
4168
- const _el$ = _tmpl$17();
4374
+ const _el$ = _tmpl$18();
4169
4375
  spread(_el$, mergeProps({
4170
4376
  get style() {
4171
4377
  return {
@@ -4189,7 +4395,7 @@ function ImgComponent(props) {
4189
4395
  var img_default = ImgComponent;
4190
4396
 
4191
4397
  // src/blocks/video/component-info.ts
4192
- var componentInfo18 = {
4398
+ var componentInfo19 = {
4193
4399
  name: "Video",
4194
4400
  canHaveChildren: true,
4195
4401
  defaultStyles: {
@@ -4269,9 +4475,15 @@ var componentInfo18 = {
4269
4475
  helperText: 'Load this video "lazily" - as in only when a user scrolls near the video. Recommended for optmized performance and bandwidth consumption',
4270
4476
  defaultValue: true,
4271
4477
  advanced: true
4272
- }]
4478
+ }],
4479
+ shouldReceiveBuilderProps: {
4480
+ builderBlock: true,
4481
+ builderContext: false,
4482
+ builderComponents: false,
4483
+ builderLinkComponent: false
4484
+ }
4273
4485
  };
4274
- var _tmpl$18 = /* @__PURE__ */ template(`<source type=video/mp4>`);
4486
+ var _tmpl$19 = /* @__PURE__ */ template(`<source type=video/mp4>`);
4275
4487
  var _tmpl$28 = /* @__PURE__ */ template(`<div>`);
4276
4488
  var _tmpl$35 = /* @__PURE__ */ template(`<div><video class=builder-video>`);
4277
4489
  function Video(props) {
@@ -4334,7 +4546,7 @@ function Video(props) {
4334
4546
  return !props.lazyLoad;
4335
4547
  },
4336
4548
  get children() {
4337
- const _el$3 = _tmpl$18();
4549
+ const _el$3 = _tmpl$19();
4338
4550
  effect(() => setAttribute(_el$3, "src", props.video));
4339
4551
  return _el$3;
4340
4552
  }
@@ -4408,12 +4620,15 @@ var getExtraComponents = () => [{
4408
4620
  }, {
4409
4621
  component: select_default,
4410
4622
  ...componentInfo15
4623
+ }, {
4624
+ component: textarea_default,
4625
+ ...componentInfo17
4411
4626
  }], {
4412
4627
  component: img_default,
4413
- ...componentInfo17
4628
+ ...componentInfo18
4414
4629
  }, {
4415
4630
  component: video_default,
4416
- ...componentInfo18
4631
+ ...componentInfo19
4417
4632
  }];
4418
4633
 
4419
4634
  // src/constants/builder-registered-components.ts
@@ -4516,10 +4731,10 @@ var getUpdateVariantVisibilityScript = ({
4516
4731
  }) => `window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME}(
4517
4732
  "${variationId}", "${contentId}", ${isHydrationTarget}
4518
4733
  )`;
4519
- var _tmpl$19 = /* @__PURE__ */ template(`<script>`);
4734
+ var _tmpl$20 = /* @__PURE__ */ template(`<script>`);
4520
4735
  function InlinedScript(props) {
4521
4736
  return (() => {
4522
- const _el$ = _tmpl$19();
4737
+ const _el$ = _tmpl$20();
4523
4738
  effect((_p$) => {
4524
4739
  const _v$ = props.scriptStr, _v$2 = props.id;
4525
4740
  _v$ !== _p$._v$ && (_el$.innerHTML = _p$._v$ = _v$);
@@ -5033,7 +5248,7 @@ function isFromTrustedHost(trustedHosts, e) {
5033
5248
  }
5034
5249
 
5035
5250
  // src/constants/sdk-version.ts
5036
- var SDK_VERSION = "1.0.35";
5251
+ var SDK_VERSION = "1.1.0";
5037
5252
 
5038
5253
  // src/functions/register.ts
5039
5254
  var registry = {};
@@ -6017,7 +6232,7 @@ var fetchSymbolContent = async ({
6017
6232
  };
6018
6233
 
6019
6234
  // src/blocks/symbol/symbol.tsx
6020
- var _tmpl$20 = /* @__PURE__ */ template(`<div>`);
6235
+ var _tmpl$21 = /* @__PURE__ */ template(`<div>`);
6021
6236
  function Symbol(props) {
6022
6237
  const [contentToUse, setContentToUse] = createSignal(props.symbol?.content);
6023
6238
  const blocksWrapper = createMemo(() => {
@@ -6049,7 +6264,7 @@ function Symbol(props) {
6049
6264
  }
6050
6265
  createEffect(on(() => [onUpdateFn_0_props_symbol()], onUpdateFn_0));
6051
6266
  return (() => {
6052
- const _el$ = _tmpl$20();
6267
+ const _el$ = _tmpl$21();
6053
6268
  spread(_el$, mergeProps({
6054
6269
  get ["class"]() {
6055
6270
  return className();