webstudio 0.224.0 → 0.226.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/cli.js CHANGED
@@ -1822,19 +1822,14 @@ var ProjectMeta = z.object({
1822
1822
  faviconAssetId: z.string().optional(),
1823
1823
  code: z.string().optional()
1824
1824
  });
1825
- var ProjectNewRedirectPath = PagePath.or(
1826
- z.string().refine((data) => {
1827
- if (data === "/") {
1828
- return true;
1829
- }
1830
- try {
1831
- new URL(data);
1832
- return true;
1833
- } catch {
1834
- return false;
1835
- }
1836
- }, "Must be a valid URL")
1837
- );
1825
+ var ProjectNewRedirectPath = z.string().refine((data) => {
1826
+ try {
1827
+ new URL(data, "http://url.com");
1828
+ return true;
1829
+ } catch {
1830
+ return false;
1831
+ }
1832
+ }, "Must be a valid URL");
1838
1833
  var PageRedirect = z.object({
1839
1834
  old: OldPagePath,
1840
1835
  new: ProjectNewRedirectPath,
@@ -2539,7 +2534,7 @@ z.object({
2539
2534
  });
2540
2535
  var normalize_css_exports = {};
2541
2536
  __export(normalize_css_exports, {
2542
- a: () => a$9,
2537
+ a: () => a$7,
2543
2538
  address: () => address$1,
2544
2539
  article: () => article$1,
2545
2540
  aside: () => aside$1,
@@ -2561,7 +2556,7 @@ __export(normalize_css_exports, {
2561
2556
  header: () => header$1,
2562
2557
  hr: () => hr$1,
2563
2558
  html: () => html,
2564
- i: () => i$a,
2559
+ i: () => i$b,
2565
2560
  img: () => img$1,
2566
2561
  input: () => input$1,
2567
2562
  kbd: () => kbd,
@@ -2572,7 +2567,7 @@ __export(normalize_css_exports, {
2572
2567
  nav: () => nav$1,
2573
2568
  ol: () => ol$1,
2574
2569
  optgroup: () => optgroup,
2575
- p: () => p$8,
2570
+ p: () => p$9,
2576
2571
  pre: () => pre,
2577
2572
  progress: () => progress,
2578
2573
  radio: () => radio$1,
@@ -2628,13 +2623,13 @@ var h3$1 = div$1;
2628
2623
  var h4$1 = div$1;
2629
2624
  var h5$1 = div$1;
2630
2625
  var h6$1 = div$1;
2631
- var i$a = div$1;
2626
+ var i$b = div$1;
2632
2627
  var img$1 = div$1;
2633
- var a$9 = div$1;
2628
+ var a$7 = div$1;
2634
2629
  var li$1 = div$1;
2635
2630
  var ul$1 = div$1;
2636
2631
  var ol$1 = div$1;
2637
- var p$8 = div$1;
2632
+ var p$9 = div$1;
2638
2633
  var span$1 = div$1;
2639
2634
  var html = [
2640
2635
  { property: "display", value: { type: "keyword", value: "grid" } },
@@ -3235,7 +3230,65 @@ var tags = [
3235
3230
  "ul",
3236
3231
  "var",
3237
3232
  "video",
3238
- "wbr"
3233
+ "wbr",
3234
+ "svg",
3235
+ "g",
3236
+ "defs",
3237
+ "desc",
3238
+ "symbol",
3239
+ "use",
3240
+ "image",
3241
+ "switch",
3242
+ "path",
3243
+ "rect",
3244
+ "circle",
3245
+ "ellipse",
3246
+ "line",
3247
+ "polyline",
3248
+ "polygon",
3249
+ "text",
3250
+ "tspan",
3251
+ "textPath",
3252
+ "marker",
3253
+ "linearGradient",
3254
+ "radialGradient",
3255
+ "stop",
3256
+ "pattern",
3257
+ "clipPath",
3258
+ "mask",
3259
+ "filter",
3260
+ "feDistantLight",
3261
+ "fePointLight",
3262
+ "feSpotLight",
3263
+ "feBlend",
3264
+ "feColorMatrix",
3265
+ "feComponentTransfer",
3266
+ "feFuncR",
3267
+ "feFuncG",
3268
+ "feFuncB",
3269
+ "feFuncA",
3270
+ "feComposite",
3271
+ "feConvolveMatrix",
3272
+ "feDiffuseLighting",
3273
+ "feDisplacementMap",
3274
+ "feFlood",
3275
+ "feGaussianBlur",
3276
+ "feImage",
3277
+ "feMerge",
3278
+ "feMergeNode",
3279
+ "feMorphology",
3280
+ "feOffset",
3281
+ "feSpecularLighting",
3282
+ "feTile",
3283
+ "feTurbulence",
3284
+ "view",
3285
+ "animate",
3286
+ "set",
3287
+ "animateMotion",
3288
+ "mpath",
3289
+ "animateTransform",
3290
+ "metadata",
3291
+ "foreignObject"
3239
3292
  ];
3240
3293
  var rootComponent = "ws:root";
3241
3294
  var rootMeta = {
@@ -4319,8 +4372,64 @@ var standardAttributesToReactProps = {
4319
4372
  srcset: "srcSet",
4320
4373
  tabindex: "tabIndex",
4321
4374
  usemap: "useMap",
4375
+ "alignment-baseline": "alignmentBaseline",
4376
+ "baseline-shift": "baselineShift",
4377
+ "clip-path": "clipPath",
4378
+ "clip-rule": "clipRule",
4379
+ "color-interpolation": "colorInterpolation",
4380
+ "color-interpolation-filters": "colorInterpolationFilters",
4381
+ "color-profile": "colorProfile",
4382
+ "color-rendering": "colorRendering",
4383
+ "dominant-baseline": "dominantBaseline",
4384
+ "enable-background": "enableBackground",
4385
+ "fill-opacity": "fillOpacity",
4386
+ "fill-rule": "fillRule",
4387
+ "flood-opacity": "floodOpacity",
4388
+ "flood-color": "floodColor",
4389
+ "font-family": "fontFamily",
4390
+ "font-size": "fontSize",
4391
+ "font-size-adjust": "fontSizeAdjust",
4392
+ "font-stretch": "fontStretch",
4393
+ "font-style": "fontStyle",
4394
+ "font-variant": "fontVariant",
4395
+ "font-weight": "fontWeight",
4396
+ "glyph-orientation-horizontal": "glyphOrientationHorizontal",
4397
+ "glyph-orientation-vertical": "glyphOrientationVertical",
4398
+ "image-rendering": "imageRendering",
4399
+ "letter-spacing": "letterSpacing",
4400
+ "lighting-color": "lightingColor",
4401
+ "marker-end": "markerEnd",
4402
+ "marker-mid": "markerMid",
4403
+ "marker-start": "markerStart",
4404
+ "pointer-events": "pointerEvents",
4322
4405
  popovertarget: "popoverTarget",
4323
4406
  popovertargetaction: "popoverTargetAction",
4407
+ "shape-rendering": "shapeRendering",
4408
+ "stop-color": "stopColor",
4409
+ "stop-opacity": "stopOpacity",
4410
+ "stroke-dasharray": "strokeDasharray",
4411
+ "stroke-dashoffset": "strokeDashoffset",
4412
+ "stroke-linecap": "strokeLinecap",
4413
+ "stroke-linejoin": "strokeLinejoin",
4414
+ "stroke-miterlimit": "strokeMiterlimit",
4415
+ "stroke-width": "strokeWidth",
4416
+ "stroke-opacity": "strokeOpacity",
4417
+ "text-anchor": "textAnchor",
4418
+ "text-decoration": "textDecoration",
4419
+ "text-rendering": "textRendering",
4420
+ "unicode-bidi": "unicodeBidi",
4421
+ "word-spacing": "wordSpacing",
4422
+ "writing-mode": "writingMode",
4423
+ "xlink:actuate": "xlinkActuate",
4424
+ "xlink:arcrole": "xlinkArcrole",
4425
+ "xlink:href": "xlinkHref",
4426
+ "xlink:role": "xlinkRole",
4427
+ "xlink:show": "xlinkShow",
4428
+ "xlink:title": "xlinkTitle",
4429
+ "xlink:type": "xlinkType",
4430
+ "xml:base": "xmlBase",
4431
+ "xml:lang": "xmlLang",
4432
+ "xml:space": "xmlSpace",
4324
4433
  dirname: "dirName"
4325
4434
  };
4326
4435
  var generateAction = ({
@@ -4854,7 +4963,7 @@ const o$H = {
4854
4963
  order: 4
4855
4964
  };
4856
4965
  const t$i = {};
4857
- const e$x = {
4966
+ const e$u = {
4858
4967
  className: {
4859
4968
  required: false,
4860
4969
  control: "text",
@@ -4869,7 +4978,7 @@ const e$x = {
4869
4978
  type: "boolean"
4870
4979
  }
4871
4980
  };
4872
- const a$8 = {
4981
+ const a$6 = {
4873
4982
  category: "general",
4874
4983
  label: "HTML Embed",
4875
4984
  description: "Used to add HTML code to the page, such as an SVG or script.",
@@ -4893,13 +5002,13 @@ const a$8 = {
4893
5002
  },
4894
5003
  initialProps: ["class", "clientOnly", "executeScriptOnCanvas"],
4895
5004
  props: {
4896
- ...e$x,
5005
+ ...e$u,
4897
5006
  clientOnly: {
4898
- ...e$x.clientOnly,
5007
+ ...e$u.clientOnly,
4899
5008
  description: "Activate it for any scripts that can mutate the DOM or introduce interactivity. This only affects the published site."
4900
5009
  },
4901
5010
  executeScriptOnCanvas: {
4902
- ...e$x.executeScriptOnCanvas,
5011
+ ...e$u.executeScriptOnCanvas,
4903
5012
  label: "Run scripts on canvas",
4904
5013
  description: "Dangerously allow script execution on canvas without switching to preview mode. This only affects build mode, but may result in unwanted side effects inside builder!"
4905
5014
  },
@@ -4914,7 +5023,7 @@ const a$8 = {
4914
5023
  const t$h = {
4915
5024
  code: { required: true, control: "text", type: "string" }
4916
5025
  };
4917
- const a$7 = {
5026
+ const a$5 = {
4918
5027
  icon: MarkdownEmbedIcon,
4919
5028
  contentModel: {
4920
5029
  category: "instance",
@@ -4981,13 +5090,13 @@ var h3 = div;
4981
5090
  var h4 = div;
4982
5091
  var h5 = div;
4983
5092
  var h6 = div;
4984
- var i$9 = div;
5093
+ var i$a = div;
4985
5094
  var img = div;
4986
- var a$6 = div;
5095
+ var a$4 = div;
4987
5096
  var li = div;
4988
5097
  var ul = div;
4989
5098
  var ol = div;
4990
- var p$7 = div;
5099
+ var p$8 = div;
4991
5100
  var span = div;
4992
5101
  var body = [
4993
5102
  { property: "margin-top", value: { type: "unit", unit: "number", value: 0 } },
@@ -5291,7 +5400,7 @@ var button = [
5291
5400
  ];
5292
5401
  var select = button;
5293
5402
  const o$G = {};
5294
- const i$8 = {
5403
+ const i$9 = {
5295
5404
  presetStyle: { body },
5296
5405
  initialProps: ["id", "class"],
5297
5406
  props: o$G
@@ -5299,7 +5408,7 @@ const i$8 = {
5299
5408
  const t$g = {
5300
5409
  tag: { required: false, control: "text", type: "string" }
5301
5410
  };
5302
- const g$2 = {
5411
+ const g$3 = {
5303
5412
  presetStyle: {
5304
5413
  div,
5305
5414
  address,
@@ -5338,7 +5447,7 @@ const g$2 = {
5338
5447
  const t$f = {
5339
5448
  tag: { required: false, control: "text", type: "string" }
5340
5449
  };
5341
- const n$7 = {
5450
+ const n$6 = {
5342
5451
  icon: TextIcon,
5343
5452
  presetStyle: {
5344
5453
  div: [
@@ -5384,12 +5493,12 @@ const m$9 = {
5384
5493
  }
5385
5494
  };
5386
5495
  const o$F = {};
5387
- const i$7 = {
5388
- presetStyle: { p: p$7 },
5496
+ const i$8 = {
5497
+ presetStyle: { p: p$8 },
5389
5498
  initialProps: ["id", "class"],
5390
5499
  props: o$F
5391
5500
  };
5392
- const e$w = {
5501
+ const e$t = {
5393
5502
  download: {
5394
5503
  required: false,
5395
5504
  control: "boolean",
@@ -5415,18 +5524,18 @@ const e$w = {
5415
5524
  };
5416
5525
  const t$d = {
5417
5526
  a: [
5418
- ...a$6,
5527
+ ...a$4,
5419
5528
  {
5420
5529
  property: "display",
5421
5530
  value: { type: "keyword", value: "inline-block" }
5422
5531
  }
5423
5532
  ]
5424
- }, p$6 = {
5533
+ }, p$7 = {
5425
5534
  presetStyle: t$d,
5426
5535
  states: [{ label: "Current page", selector: "[aria-current=page]" }],
5427
5536
  initialProps: ["id", "class", "href", "target", "prefetch", "download"],
5428
5537
  props: {
5429
- ...e$w,
5538
+ ...e$t,
5430
5539
  href: {
5431
5540
  type: "string",
5432
5541
  control: "url",
@@ -5434,9 +5543,9 @@ const t$d = {
5434
5543
  }
5435
5544
  }
5436
5545
  };
5437
- const a$5 = p$6;
5546
+ const a$3 = p$7;
5438
5547
  const o$E = {};
5439
- const e$v = {
5548
+ const e$s = {
5440
5549
  label: "Text",
5441
5550
  icon: PaintBrushIcon,
5442
5551
  presetStyle: { span },
@@ -5444,16 +5553,16 @@ const e$v = {
5444
5553
  props: o$E
5445
5554
  };
5446
5555
  const o$D = {};
5447
- const p$5 = {
5556
+ const p$6 = {
5448
5557
  label: "Bold Text",
5449
5558
  presetStyle: { b: b$5 },
5450
5559
  initialProps: ["id", "class"],
5451
5560
  props: o$D
5452
5561
  };
5453
5562
  const o$C = {};
5454
- const e$u = {
5563
+ const e$r = {
5455
5564
  label: "Italic Text",
5456
- presetStyle: { i: i$9 },
5565
+ presetStyle: { i: i$a },
5457
5566
  initialProps: ["id", "class"],
5458
5567
  props: o$C
5459
5568
  };
@@ -5472,13 +5581,13 @@ const s$4 = {
5472
5581
  props: o$z
5473
5582
  };
5474
5583
  const o$y = {};
5475
- const e$t = {
5584
+ const e$q = {
5476
5585
  presetStyle: { button },
5477
5586
  initialProps: ["id", "class", "type", "aria-label"],
5478
5587
  props: o$y
5479
5588
  };
5480
5589
  const o$x = {};
5481
- const p$4 = {
5590
+ const p$5 = {
5482
5591
  input: [
5483
5592
  ...input,
5484
5593
  {
@@ -5486,9 +5595,9 @@ const p$4 = {
5486
5595
  value: { type: "keyword", value: "block" }
5487
5596
  }
5488
5597
  ]
5489
- }, l$4 = {
5598
+ }, l$5 = {
5490
5599
  label: "Text Input",
5491
- presetStyle: p$4,
5600
+ presetStyle: p$5,
5492
5601
  initialProps: [
5493
5602
  "id",
5494
5603
  "class",
@@ -5501,7 +5610,7 @@ const p$4 = {
5501
5610
  ],
5502
5611
  props: o$x
5503
5612
  };
5504
- const e$s = {
5613
+ const e$p = {
5505
5614
  state: {
5506
5615
  description: "Use this property to reveal the Success and Error states on the canvas so they can be styled. The Initial state is displayed when the page first opens. The Success and Error states are displayed depending on whether the Form submits successfully or unsuccessfully.",
5507
5616
  required: false,
@@ -5511,7 +5620,7 @@ const e$s = {
5511
5620
  options: ["initial", "success", "error"]
5512
5621
  }
5513
5622
  };
5514
- const c$3 = {
5623
+ const c$4 = {
5515
5624
  label: "Webhook Form",
5516
5625
  icon: WebhookFormIcon,
5517
5626
  presetStyle: {
@@ -5523,7 +5632,7 @@ const c$3 = {
5523
5632
  ],
5524
5633
  initialProps: ["id", "class", "state", "action"],
5525
5634
  props: {
5526
- ...e$s,
5635
+ ...e$p,
5527
5636
  action: {
5528
5637
  type: "resource",
5529
5638
  control: "resource",
@@ -5533,18 +5642,18 @@ const c$3 = {
5533
5642
  }
5534
5643
  };
5535
5644
  const o$w = {};
5536
- const r$e = {
5645
+ const r$c = {
5537
5646
  form: [
5538
5647
  ...form,
5539
5648
  { property: "min-height", value: { type: "unit", unit: "px", value: 20 } }
5540
5649
  ]
5541
- }, p$3 = {
5650
+ }, p$4 = {
5542
5651
  label: "Form",
5543
- presetStyle: r$e,
5652
+ presetStyle: r$c,
5544
5653
  initialProps: ["id", "class", "action"],
5545
5654
  props: o$w
5546
5655
  };
5547
- const e$r = {
5656
+ const e$o = {
5548
5657
  optimize: {
5549
5658
  description: "Optimize the image for enhanced performance.",
5550
5659
  required: false,
@@ -5576,7 +5685,7 @@ const o$v = {
5576
5685
  value: { type: "keyword", value: "auto" }
5577
5686
  }
5578
5687
  ]
5579
- }, i$6 = {
5688
+ }, i$7 = {
5580
5689
  category: "media",
5581
5690
  description: "Add an image asset to the page. Webstudio automatically converts images to WebP or AVIF format and makes them responsive for best performance.",
5582
5691
  presetStyle: o$v,
@@ -5592,7 +5701,7 @@ const o$v = {
5592
5701
  "optimize"
5593
5702
  ],
5594
5703
  props: {
5595
- ...e$r,
5704
+ ...e$o,
5596
5705
  // Automatically generated props don't have the right control.
5597
5706
  src: {
5598
5707
  type: "string",
@@ -5603,7 +5712,7 @@ const o$v = {
5603
5712
  }
5604
5713
  };
5605
5714
  const o$u = {};
5606
- const e$q = {
5715
+ const e$n = {
5607
5716
  blockquote: [
5608
5717
  {
5609
5718
  property: "margin-top",
@@ -5650,12 +5759,12 @@ const e$q = {
5650
5759
  value: { type: "rgb", r: 226, g: 226, b: 226, alpha: 1 }
5651
5760
  }
5652
5761
  ]
5653
- }, r$d = {
5654
- presetStyle: e$q,
5762
+ }, r$b = {
5763
+ presetStyle: e$n,
5655
5764
  initialProps: ["id", "class", "cite"],
5656
5765
  props: o$u
5657
5766
  };
5658
- const e$p = {
5767
+ const e$m = {
5659
5768
  ordered: {
5660
5769
  description: "Shows numbers instead of bullets when toggled. See the “List Style Type” property under the “List Item” section in the Style panel for more options.",
5661
5770
  required: false,
@@ -5695,13 +5804,13 @@ const t$c = {
5695
5804
  value: { type: "keyword", value: "40px" }
5696
5805
  }
5697
5806
  ]
5698
- }, l$3 = {
5807
+ }, l$4 = {
5699
5808
  presetStyle: t$c,
5700
5809
  initialProps: ["id", "class", "ordered", "start", "reversed"],
5701
- props: e$p
5810
+ props: e$m
5702
5811
  };
5703
5812
  const o$t = {};
5704
- const p$2 = {
5813
+ const p$3 = {
5705
5814
  presetStyle: { li },
5706
5815
  initialProps: ["id", "class"],
5707
5816
  props: o$t
@@ -5740,7 +5849,7 @@ const o$r = {
5740
5849
  initialProps: ["id", "class"],
5741
5850
  props: o$s
5742
5851
  };
5743
- const e$o = {
5852
+ const e$l = {
5744
5853
  code: { required: false, control: "text", type: "string" }
5745
5854
  };
5746
5855
  const o$q = {
@@ -5771,7 +5880,7 @@ const o$q = {
5771
5880
  value: { type: "rgb", r: 238, g: 238, b: 238, alpha: 1 }
5772
5881
  }
5773
5882
  ]
5774
- }, c$2 = {
5883
+ }, c$3 = {
5775
5884
  icon: BracesIcon,
5776
5885
  contentModel: {
5777
5886
  category: "instance",
@@ -5780,7 +5889,7 @@ const o$q = {
5780
5889
  presetStyle: o$q,
5781
5890
  initialProps: ["id", "class", "lang", "code"],
5782
5891
  props: {
5783
- ...e$o,
5892
+ ...e$l,
5784
5893
  code: {
5785
5894
  required: true,
5786
5895
  control: "codetext",
@@ -5811,7 +5920,7 @@ const t$a = {
5811
5920
  value: { type: "keyword", value: "block" }
5812
5921
  }
5813
5922
  ]
5814
- }, l$2 = {
5923
+ }, l$3 = {
5815
5924
  label: "Text Area",
5816
5925
  presetStyle: t$a,
5817
5926
  contentModel: {
@@ -5829,7 +5938,7 @@ const t$a = {
5829
5938
  ],
5830
5939
  props: o$n
5831
5940
  };
5832
- const e$n = {
5941
+ const e$k = {
5833
5942
  value: {
5834
5943
  required: false,
5835
5944
  control: "text",
@@ -5837,7 +5946,7 @@ const e$n = {
5837
5946
  description: "Value of the form control"
5838
5947
  }
5839
5948
  };
5840
- const r$c = {
5949
+ const r$a = {
5841
5950
  input: [
5842
5951
  ...radio,
5843
5952
  {
@@ -5848,11 +5957,11 @@ const r$c = {
5848
5957
  }, m$8 = {
5849
5958
  label: "Radio",
5850
5959
  icon: RadioCheckedIcon,
5851
- presetStyle: r$c,
5960
+ presetStyle: r$a,
5852
5961
  initialProps: ["id", "class", "name", "value", "required", "checked"],
5853
- props: e$n
5962
+ props: e$k
5854
5963
  };
5855
- const e$m = {
5964
+ const e$j = {
5856
5965
  value: {
5857
5966
  required: false,
5858
5967
  control: "text",
@@ -5872,9 +5981,9 @@ const t$9 = {
5872
5981
  icon: CheckboxCheckedIcon,
5873
5982
  presetStyle: t$9,
5874
5983
  initialProps: ["id", "class", "name", "value", "required", "checked"],
5875
- props: e$m
5984
+ props: e$j
5876
5985
  };
5877
- const e$l = {
5986
+ const e$i = {
5878
5987
  autopause: {
5879
5988
  description: "Whether to pause the current video when another Vimeo video on the same page starts to play. Set this value to false to permit simultaneous playback of all the videos on the page. This option has no effect if you've disabled cookies in your browser, either through browser settings or with an extension or plugin.",
5880
5989
  required: false,
@@ -6041,7 +6150,7 @@ To enable automatically generated closed captions instead, provide the value en-
6041
6150
  type: "string"
6042
6151
  }
6043
6152
  };
6044
- const i$5 = [
6153
+ const i$6 = [
6045
6154
  "id",
6046
6155
  "className",
6047
6156
  "url",
@@ -6067,10 +6176,10 @@ const i$5 = [
6067
6176
  descendants: ["VimeoSpinner", "VimeoPlayButton", "VimeoPreviewImage"]
6068
6177
  },
6069
6178
  presetStyle: { div },
6070
- initialProps: i$5,
6071
- props: e$l
6179
+ initialProps: i$6,
6180
+ props: e$i
6072
6181
  };
6073
- const e$k = {
6182
+ const e$h = {
6074
6183
  allowFullscreen: {
6075
6184
  description: "Whether to allow fullscreen mode.\nOriginal parameter: `fs`",
6076
6185
  required: false,
@@ -6235,7 +6344,7 @@ https://support.google.com/youtube/answer/171780?hl=en#zippy=%2Cturn-on-privacy-
6235
6344
  type: "string"
6236
6345
  }
6237
6346
  };
6238
- const n$6 = [
6347
+ const n$5 = [
6239
6348
  "id",
6240
6349
  "className",
6241
6350
  "url",
@@ -6271,10 +6380,10 @@ const n$6 = [
6271
6380
  descendants: ["VimeoSpinner", "VimeoPlayButton", "VimeoPreviewImage"]
6272
6381
  },
6273
6382
  presetStyle: { div },
6274
- initialProps: n$6,
6275
- props: e$k
6383
+ initialProps: n$5,
6384
+ props: e$h
6276
6385
  };
6277
- const e$j = {
6386
+ const e$g = {
6278
6387
  optimize: {
6279
6388
  description: "Optimize the image for enhanced performance.",
6280
6389
  required: false,
@@ -6283,17 +6392,17 @@ const e$j = {
6283
6392
  },
6284
6393
  quality: { required: false, control: "number", type: "number" }
6285
6394
  };
6286
- const i$4 = {
6287
- ...i$6,
6395
+ const i$5 = {
6396
+ ...i$7,
6288
6397
  category: "hidden",
6289
6398
  label: "Preview Image",
6290
6399
  contentModel: {
6291
6400
  category: "none",
6292
6401
  children: []
6293
6402
  },
6294
- initialProps: i$6.initialProps,
6403
+ initialProps: i$7.initialProps,
6295
6404
  props: {
6296
- ...e$j,
6405
+ ...e$g,
6297
6406
  // Automatically generated props don't have the right control.
6298
6407
  src: {
6299
6408
  type: "string",
@@ -6304,7 +6413,7 @@ const i$4 = {
6304
6413
  }
6305
6414
  };
6306
6415
  const o$m = {};
6307
- const c$1 = {
6416
+ const c$2 = {
6308
6417
  category: "hidden",
6309
6418
  label: "Play Button",
6310
6419
  icon: ButtonElementIcon,
@@ -6317,7 +6426,7 @@ const c$1 = {
6317
6426
  props: o$m
6318
6427
  };
6319
6428
  const o$l = {};
6320
- const c = {
6429
+ const c$1 = {
6321
6430
  icon: BoxIcon,
6322
6431
  category: "hidden",
6323
6432
  label: "Spinner",
@@ -6329,7 +6438,7 @@ const c = {
6329
6438
  initialProps: ["id", "class"],
6330
6439
  props: o$l
6331
6440
  };
6332
- const e$i = {
6441
+ const e$f = {
6333
6442
  href: {
6334
6443
  required: false,
6335
6444
  control: "text",
@@ -6358,9 +6467,9 @@ const m$6 = {
6358
6467
  icon: XmlIcon,
6359
6468
  description: "XML Node",
6360
6469
  initialProps: ["tag"],
6361
- props: e$i
6470
+ props: e$f
6362
6471
  };
6363
- const e$h = {
6472
+ const e$e = {
6364
6473
  dateStyle: {
6365
6474
  required: false,
6366
6475
  control: "radio",
@@ -6376,15 +6485,15 @@ const e$h = {
6376
6485
  description: "Machine-readable value"
6377
6486
  }
6378
6487
  };
6379
- const a$4 = {
6488
+ const a$2 = {
6380
6489
  category: "xml",
6381
6490
  description: "Converts machine-readable date and time to ISO format.",
6382
6491
  icon: CalendarIcon,
6383
6492
  order: 7,
6384
6493
  initialProps: ["datetime", "dateStyle"],
6385
- props: e$h
6494
+ props: e$e
6386
6495
  };
6387
- const e$g = {
6496
+ const e$d = {
6388
6497
  country: {
6389
6498
  required: false,
6390
6499
  control: "select",
@@ -6686,7 +6795,7 @@ const e$g = {
6686
6795
  options: ["full", "long", "medium", "short", "none"]
6687
6796
  }
6688
6797
  };
6689
- const r$b = {
6798
+ const r$9 = {
6690
6799
  category: "localization",
6691
6800
  description: "Converts machine-readable date and time to a human-readable format.",
6692
6801
  contentModel: {
@@ -6697,7 +6806,7 @@ const r$b = {
6697
6806
  time
6698
6807
  },
6699
6808
  initialProps: ["datetime", "language", "country", "dateStyle", "timeStyle"],
6700
- props: e$g
6809
+ props: e$d
6701
6810
  };
6702
6811
  const o$k = {};
6703
6812
  const o$j = {
@@ -6708,7 +6817,7 @@ const o$j = {
6708
6817
  value: { type: "keyword", value: "block" }
6709
6818
  }
6710
6819
  ]
6711
- }, p$1 = {
6820
+ }, p$2 = {
6712
6821
  presetStyle: o$j,
6713
6822
  initialProps: [
6714
6823
  "id",
@@ -6722,7 +6831,7 @@ const o$j = {
6722
6831
  props: o$k
6723
6832
  };
6724
6833
  const o$i = {};
6725
- const l$1 = {
6834
+ const l$2 = {
6726
6835
  option: [
6727
6836
  {
6728
6837
  property: "background-color",
@@ -6736,10 +6845,10 @@ const l$1 = {
6736
6845
  }
6737
6846
  }
6738
6847
  ]
6739
- }, a$3 = {
6848
+ }, a$1 = {
6740
6849
  category: "hidden",
6741
6850
  description: "An item within a drop-down menu that users can select as their chosen value.",
6742
- presetStyle: l$1,
6851
+ presetStyle: l$2,
6743
6852
  states: [
6744
6853
  // Applies when option is being activated (clicked)
6745
6854
  { selector: ":active", label: "Active" },
@@ -6754,7 +6863,7 @@ const l$1 = {
6754
6863
  props: o$i
6755
6864
  };
6756
6865
  const o$h = {};
6757
- const r$a = {
6866
+ const r$8 = {
6758
6867
  icon: HeaderIcon,
6759
6868
  description: "Inserts children into the head of the document",
6760
6869
  contentModel: {
@@ -6774,7 +6883,7 @@ const t$8 = {
6774
6883
  props: o$g
6775
6884
  };
6776
6885
  const o$f = {};
6777
- const e$f = {
6886
+ const e$c = {
6778
6887
  icon: WindowInfoIcon,
6779
6888
  contentModel: {
6780
6889
  category: "none",
@@ -6784,7 +6893,7 @@ const e$f = {
6784
6893
  props: o$f
6785
6894
  };
6786
6895
  const o$e = {};
6787
- const r$9 = {
6896
+ const r$7 = {
6788
6897
  icon: WindowTitleIcon,
6789
6898
  contentModel: {
6790
6899
  category: "none",
@@ -6793,7 +6902,7 @@ const r$9 = {
6793
6902
  props: o$e
6794
6903
  };
6795
6904
  const o$d = {};
6796
- const i$3 = {
6905
+ const i$4 = {
6797
6906
  icon: VideoIcon,
6798
6907
  contentModel: {
6799
6908
  category: "instance",
@@ -6834,217 +6943,68 @@ const i$3 = {
6834
6943
  };
6835
6944
  const baseComponentMetas = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6836
6945
  __proto__: null,
6837
- Blockquote: r$d,
6838
- Body: i$8,
6839
- Bold: p$5,
6840
- Box: g$2,
6841
- Button: e$t,
6946
+ Blockquote: r$b,
6947
+ Body: i$9,
6948
+ Bold: p$6,
6949
+ Box: g$3,
6950
+ Button: e$q,
6842
6951
  Checkbox: m$7,
6843
- CodeText: c$2,
6844
- Form: c$3,
6952
+ CodeText: c$3,
6953
+ Form: c$4,
6845
6954
  Fragment: t$i,
6846
6955
  HeadLink: t$8,
6847
- HeadMeta: e$f,
6848
- HeadSlot: r$a,
6849
- HeadTitle: r$9,
6956
+ HeadMeta: e$c,
6957
+ HeadSlot: r$8,
6958
+ HeadTitle: r$7,
6850
6959
  Heading: m$9,
6851
- HtmlEmbed: a$8,
6852
- Image: i$6,
6853
- Input: l$4,
6854
- Italic: e$u,
6960
+ HtmlEmbed: a$6,
6961
+ Image: i$7,
6962
+ Input: l$5,
6963
+ Italic: e$r,
6855
6964
  Label: t$b,
6856
- Link: p$6,
6857
- List: l$3,
6858
- ListItem: p$2,
6859
- MarkdownEmbed: a$7,
6860
- Option: a$3,
6861
- Paragraph: i$7,
6965
+ Link: p$7,
6966
+ List: l$4,
6967
+ ListItem: p$3,
6968
+ MarkdownEmbed: a$5,
6969
+ Option: a$1,
6970
+ Paragraph: i$8,
6862
6971
  RadioButton: m$8,
6863
- RemixForm: p$3,
6864
- RichTextLink: a$5,
6865
- Select: p$1,
6972
+ RemixForm: p$4,
6973
+ RichTextLink: a$3,
6974
+ Select: p$2,
6866
6975
  Separator: y$2,
6867
6976
  Slot: o$H,
6868
- Span: e$v,
6977
+ Span: e$s,
6869
6978
  Subscript: s$4,
6870
6979
  Superscript: o$A,
6871
- Text: n$7,
6872
- Textarea: l$2,
6873
- Time: r$b,
6874
- Video: i$3,
6980
+ Text: n$6,
6981
+ Textarea: l$3,
6982
+ Time: r$9,
6983
+ Video: i$4,
6875
6984
  Vimeo: s$3,
6876
- VimeoPlayButton: c$1,
6877
- VimeoPreviewImage: i$4,
6878
- VimeoSpinner: c,
6985
+ VimeoPlayButton: c$2,
6986
+ VimeoPreviewImage: i$5,
6987
+ VimeoSpinner: c$1,
6879
6988
  XmlNode: m$6,
6880
- XmlTime: a$4,
6989
+ XmlTime: a$2,
6881
6990
  YouTube: s$2
6882
6991
  }, Symbol.toStringTag, { value: "Module" }));
6883
- const n$5 = (t2) => new Proxy(
6884
- {},
6885
- {
6886
- get(o2, e2) {
6887
- return `${t2}${e2}`;
6888
- }
6889
- }
6890
- ), r$8 = n$5(
6891
- "@webstudio-is/sdk-components-animation:"
6892
- );
6893
- const a$2 = {
6894
- category: "animations",
6895
- description: "Animation Group component is designed to animate its children.",
6896
- icon: AnimationGroupIcon,
6897
- order: 0,
6898
- label: "Animation Group",
6899
- contentModel: {
6900
- category: "instance",
6901
- children: [
6902
- "instance",
6903
- r$8.AnimateText,
6904
- r$8.StaggerAnimation,
6905
- r$8.VideoAnimation
6906
- ]
6907
- },
6908
- initialProps: ["action"],
6909
- props: {
6910
- action: {
6911
- required: false,
6912
- control: "animationAction",
6913
- type: "animationAction",
6914
- description: "Animation Action"
6915
- }
6916
- }
6917
- };
6918
- const e$e = {
6919
- className: {
6920
- required: false,
6921
- control: "text",
6922
- type: "string",
6923
- description: "Classes to which the element belongs"
6924
- },
6925
- easing: {
6926
- description: "Easing function applied within the sliding window.",
6927
- required: false,
6928
- control: "select",
6929
- type: "string",
6930
- defaultValue: "linear",
6931
- options: [
6932
- "linear",
6933
- "easeIn",
6934
- "easeInCubic",
6935
- "easeInQuart",
6936
- "easeOut",
6937
- "easeOutCubic",
6938
- "easeOutQuart",
6939
- "ease",
6940
- "easeInOutCubic",
6941
- "easeInOutQuart"
6942
- ]
6943
- },
6944
- slidingWindow: {
6945
- description: `Size of the sliding window for the animation:
6992
+ //! SPDX-License-Identifier: LicenseRef-Webstudio,Inc-Proprietary
6993
+ const l$1 = (n2) => new Proxy({}, { get(w2, t2) {
6994
+ return `${n2}${t2}`;
6995
+ } }), i$3 = l$1("@webstudio-is/sdk-components-animation:"), c = { category: "animations", description: "Animation Group component is designed to animate its children.", icon: AnimationGroupIcon, order: 0, label: "Animation Group", contentModel: { category: "instance", children: ["instance", i$3.AnimateText, i$3.StaggerAnimation, i$3.VideoAnimation] }, initialProps: ["action"], props: { action: { required: false, control: "animationAction", type: "animationAction", description: "Animation Action" } } }, d$2 = { className: { required: false, control: "text", type: "string", description: "Classes to which the element belongs" }, easing: { description: "Easing function applied within the sliding window.", required: false, control: "select", type: "string", defaultValue: "linear", options: ["linear", "easeIn", "easeInCubic", "easeInQuart", "easeOut", "easeOutCubic", "easeOutQuart", "ease", "easeInOutCubic", "easeInOutQuart"] }, slidingWindow: { description: `Size of the sliding window for the animation:
6946
6996
  - 0: Typewriter effect (no animation).
6947
6997
  - (0..1]: Animates one part of the text at a time.
6948
- - (1..n]: Animates multiple parts of the text within the sliding window.`,
6949
- required: false,
6950
- control: "number",
6951
- type: "number",
6952
- defaultValue: 5
6953
- },
6954
- splitBy: {
6955
- description: "Defines how the text is split for animation (e.g., by character, space, or symbol).",
6956
- required: false,
6957
- control: "select",
6958
- type: "string",
6959
- defaultValue: "char",
6960
- options: ["char", "space", 'symbol "#"', 'symbol "~"']
6961
- }
6962
- };
6963
- const a$1 = {
6964
- category: "animations",
6965
- description: "Text animation allows you to split text by char or by word to animate it.",
6966
- icon: TextAnimationIcon,
6967
- order: 1,
6968
- label: "Text Animation",
6969
- contentModel: {
6970
- category: "none",
6971
- children: ["instance"]
6972
- },
6973
- presetStyle: { div },
6974
- initialProps: ["slidingWindow", "easing", "splitBy"],
6975
- props: e$e
6976
- };
6977
- const e$d = {
6978
- className: {
6979
- required: false,
6980
- control: "text",
6981
- type: "string",
6982
- description: "Classes to which the element belongs"
6983
- },
6984
- easing: {
6985
- description: "Easing function applied within the sliding window.",
6986
- required: false,
6987
- control: "select",
6988
- type: "string",
6989
- defaultValue: "linear",
6990
- options: [
6991
- "linear",
6992
- "easeIn",
6993
- "easeInCubic",
6994
- "easeInQuart",
6995
- "easeOut",
6996
- "easeOutCubic",
6997
- "easeOutQuart",
6998
- "ease",
6999
- "easeInOutCubic",
7000
- "easeInOutQuart"
7001
- ]
7002
- },
7003
- slidingWindow: {
7004
- description: `Size of the sliding window for the animation:
6998
+ - (1..n]: Animates multiple parts of the text within the sliding window.`, required: false, control: "number", type: "number", defaultValue: 5 }, splitBy: { description: "Defines how the text is split for animation (e.g., by character, space, or symbol).", required: false, control: "select", type: "string", defaultValue: "char", options: ["char", "space", 'symbol "#"', 'symbol "~"'] } }, p$1 = { category: "animations", description: "Text animation allows you to split text by char or by word to animate it.", icon: TextAnimationIcon, order: 1, label: "Text Animation", contentModel: { category: "none", children: ["instance"] }, presetStyle: { div }, initialProps: ["slidingWindow", "easing", "splitBy"], props: d$2 }, m$5 = { className: { required: false, control: "text", type: "string", description: "Classes to which the element belongs" }, easing: { description: "Easing function applied within the sliding window.", required: false, control: "select", type: "string", defaultValue: "linear", options: ["linear", "easeIn", "easeInCubic", "easeInQuart", "easeOut", "easeOutCubic", "easeOutQuart", "ease", "easeInOutCubic", "easeInOutQuart"] }, slidingWindow: { description: `Size of the sliding window for the animation:
7005
6999
  - 0: Typewriter effect (no animation).
7006
7000
  - (0..1]: Animates one child at a time.
7007
- - (1..n]: Animates multiple children within the sliding window.`,
7008
- required: false,
7009
- control: "number",
7010
- type: "number",
7011
- defaultValue: 1
7012
- }
7013
- };
7014
- const r$7 = {
7015
- category: "animations",
7016
- description: "Stagger animation allows you to animate children elements with a sliding window.",
7017
- icon: StaggerAnimationIcon,
7018
- order: 4,
7019
- label: "Stagger Animation",
7020
- contentModel: {
7021
- category: "none",
7022
- children: ["instance"]
7023
- },
7024
- presetStyle: { div },
7025
- initialProps: ["slidingWindow", "easing"],
7026
- props: e$d
7027
- };
7028
- const e$c = {
7029
- timeline: { required: false, control: "boolean", type: "boolean" }
7030
- };
7031
- const m$5 = {
7032
- icon: PlayIcon,
7033
- label: "Video Animation",
7034
- contentModel: {
7035
- category: "none",
7036
- children: ["instance"]
7037
- },
7038
- presetStyle: { div },
7039
- props: e$c,
7040
- initialProps: ["timeline"]
7041
- };
7001
+ - (1..n]: Animates multiple children within the sliding window.`, required: false, control: "number", type: "number", defaultValue: 1 } }, u$1 = { category: "animations", description: "Stagger animation allows you to animate children elements with a sliding window.", icon: StaggerAnimationIcon, order: 4, label: "Stagger Animation", contentModel: { category: "none", children: ["instance"] }, presetStyle: { div }, initialProps: ["slidingWindow", "easing"], props: m$5 }, g$2 = { timeline: { required: false, control: "boolean", type: "boolean" } }, h$3 = { icon: PlayIcon, label: "Video Animation", contentModel: { category: "none", children: ["instance"] }, presetStyle: { div }, props: g$2, initialProps: ["timeline"] };
7042
7002
  const animationComponentMetas = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7043
7003
  __proto__: null,
7044
- AnimateChildren: a$2,
7045
- AnimateText: a$1,
7046
- StaggerAnimation: r$7,
7047
- VideoAnimation: m$5
7004
+ AnimateChildren: c,
7005
+ AnimateText: p$1,
7006
+ StaggerAnimation: u$1,
7007
+ VideoAnimation: h$3
7048
7008
  }, Symbol.toStringTag, { value: "Module" }));
7049
7009
  const r$6 = (t2) => new Proxy(
7050
7010
  {},
@@ -7193,7 +7153,7 @@ const S$1 = {
7193
7153
  category: "none",
7194
7154
  children: ["instance", "rich-text"]
7195
7155
  },
7196
- presetStyle: { p: p$7 },
7156
+ presetStyle: { p: p$8 },
7197
7157
  props: p
7198
7158
  }, H$1 = {
7199
7159
  icon: ButtonElementIcon,
@@ -9086,7 +9046,7 @@ const getDeploymentInstructions = (deployTarget) => {
9086
9046
  }
9087
9047
  };
9088
9048
  const name = "webstudio";
9089
- const version = "0.224.0";
9049
+ const version = "0.226.0";
9090
9050
  const description = "Webstudio CLI";
9091
9051
  const author = "Webstudio <github@webstudio.is>";
9092
9052
  const homepage = "https://webstudio.is";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webstudio",
3
- "version": "0.224.0",
3
+ "version": "0.226.0",
4
4
  "description": "Webstudio CLI",
5
5
  "author": "Webstudio <github@webstudio.is>",
6
6
  "homepage": "https://webstudio.is",
@@ -70,16 +70,16 @@
70
70
  "vite": "^6.3.4",
71
71
  "vitest": "^3.1.2",
72
72
  "wrangler": "^3.63.2",
73
- "@webstudio-is/http-client": "0.224.0",
74
- "@webstudio-is/css-engine": "0.224.0",
75
- "@webstudio-is/image": "0.224.0",
76
- "@webstudio-is/sdk": "0.224.0",
77
- "@webstudio-is/react-sdk": "0.224.0",
78
- "@webstudio-is/sdk-components-animation": "0.224.0",
79
- "@webstudio-is/sdk-components-react": "0.224.0",
80
- "@webstudio-is/sdk-components-react-radix": "0.224.0",
81
- "@webstudio-is/sdk-components-react-remix": "0.224.0",
82
- "@webstudio-is/sdk-components-react-router": "0.224.0",
73
+ "@webstudio-is/http-client": "0.226.0",
74
+ "@webstudio-is/css-engine": "0.226.0",
75
+ "@webstudio-is/image": "0.226.0",
76
+ "@webstudio-is/react-sdk": "0.226.0",
77
+ "@webstudio-is/sdk-components-animation": "0.226.0",
78
+ "@webstudio-is/sdk": "0.226.0",
79
+ "@webstudio-is/sdk-components-react": "0.226.0",
80
+ "@webstudio-is/sdk-components-react-radix": "0.226.0",
81
+ "@webstudio-is/sdk-components-react-remix": "0.226.0",
82
+ "@webstudio-is/sdk-components-react-router": "0.226.0",
83
83
  "@webstudio-is/tsconfig": "1.0.7"
84
84
  },
85
85
  "scripts": {
@@ -37,7 +37,7 @@ import {
37
37
  getRemixParams,
38
38
  contactEmail,
39
39
  } from "__SERVER__";
40
- import { assetBaseUrl, imageLoader } from "__CONSTANTS__";
40
+ import * as constants from "__CONSTANTS__";
41
41
  import css from "__CSS__?url";
42
42
  import { sitemap } from "__SITEMAP__";
43
43
 
@@ -151,8 +151,8 @@ export const links: LinksFunction = () => {
151
151
  if (favIconAsset) {
152
152
  result.push({
153
153
  rel: "icon",
154
- href: imageLoader({
155
- src: `${assetBaseUrl}${favIconAsset}`,
154
+ href: constants.imageLoader({
155
+ src: `${constants.assetBaseUrl}${favIconAsset}`,
156
156
  // width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
157
157
  width: 144,
158
158
  height: 144,
@@ -167,7 +167,7 @@ export const links: LinksFunction = () => {
167
167
  for (const asset of pageFontAssets) {
168
168
  result.push({
169
169
  rel: "preload",
170
- href: `${assetBaseUrl}${asset}`,
170
+ href: `${constants.assetBaseUrl}${asset}`,
171
171
  as: "font",
172
172
  crossOrigin: "anonymous",
173
173
  });
@@ -176,7 +176,7 @@ export const links: LinksFunction = () => {
176
176
  for (const backgroundImageAsset of pageBackgroundImageAssets) {
177
177
  result.push({
178
178
  rel: "preload",
179
- href: `${assetBaseUrl}${backgroundImageAsset}`,
179
+ href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
180
180
  as: "image",
181
181
  });
182
182
  }
@@ -271,8 +271,7 @@ const Outlet = () => {
271
271
  return (
272
272
  <ReactSdkContext.Provider
273
273
  value={{
274
- imageLoader,
275
- assetBaseUrl,
274
+ ...constants,
276
275
  resources,
277
276
  breakpoints,
278
277
  onError: console.error,
@@ -285,8 +284,8 @@ const Outlet = () => {
285
284
  pageMeta={pageMeta}
286
285
  host={host}
287
286
  siteName={siteName}
288
- imageLoader={imageLoader}
289
- assetBaseUrl={assetBaseUrl}
287
+ imageLoader={constants.imageLoader}
288
+ assetBaseUrl={constants.assetBaseUrl}
290
289
  />
291
290
  <PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
292
291
  <PageSettingsCanonicalLink href={url} />
@@ -11,13 +11,13 @@
11
11
  "@remix-run/node": "2.16.5",
12
12
  "@remix-run/react": "2.16.5",
13
13
  "@remix-run/server-runtime": "2.16.5",
14
- "@webstudio-is/image": "0.224.0",
15
- "@webstudio-is/react-sdk": "0.224.0",
16
- "@webstudio-is/sdk": "0.224.0",
17
- "@webstudio-is/sdk-components-react": "0.224.0",
18
- "@webstudio-is/sdk-components-animation": "0.224.0",
19
- "@webstudio-is/sdk-components-react-radix": "0.224.0",
20
- "@webstudio-is/sdk-components-react-remix": "0.224.0",
14
+ "@webstudio-is/image": "0.226.0",
15
+ "@webstudio-is/react-sdk": "0.226.0",
16
+ "@webstudio-is/sdk": "0.226.0",
17
+ "@webstudio-is/sdk-components-react": "0.226.0",
18
+ "@webstudio-is/sdk-components-animation": "0.226.0",
19
+ "@webstudio-is/sdk-components-react-radix": "0.226.0",
20
+ "@webstudio-is/sdk-components-react-remix": "0.226.0",
21
21
  "isbot": "^5.1.25",
22
22
  "react": "18.3.0-canary-14898b6a9-20240318",
23
23
  "react-dom": "18.3.0-canary-14898b6a9-20240318"
@@ -36,7 +36,7 @@ import {
36
36
  getRemixParams,
37
37
  contactEmail,
38
38
  } from "__SERVER__";
39
- import { assetBaseUrl, imageLoader } from "__CONSTANTS__";
39
+ import * as constants from "__CONSTANTS__";
40
40
  import css from "__CSS__?url";
41
41
  import { sitemap } from "__SITEMAP__";
42
42
 
@@ -150,8 +150,8 @@ export const links: LinksFunction = () => {
150
150
  if (favIconAsset) {
151
151
  result.push({
152
152
  rel: "icon",
153
- href: imageLoader({
154
- src: `${assetBaseUrl}${favIconAsset}`,
153
+ href: constants.imageLoader({
154
+ src: `${constants.assetBaseUrl}${favIconAsset}`,
155
155
  // width,height must be multiple of 48 https://developers.google.com/search/docs/appearance/favicon-in-search
156
156
  width: 144,
157
157
  height: 144,
@@ -166,7 +166,7 @@ export const links: LinksFunction = () => {
166
166
  for (const asset of pageFontAssets) {
167
167
  result.push({
168
168
  rel: "preload",
169
- href: `${assetBaseUrl}${asset}`,
169
+ href: `${constants.assetBaseUrl}${asset}`,
170
170
  as: "font",
171
171
  crossOrigin: "anonymous",
172
172
  });
@@ -175,7 +175,7 @@ export const links: LinksFunction = () => {
175
175
  for (const backgroundImageAsset of pageBackgroundImageAssets) {
176
176
  result.push({
177
177
  rel: "preload",
178
- href: `${assetBaseUrl}${backgroundImageAsset}`,
178
+ href: `${constants.assetBaseUrl}${backgroundImageAsset}`,
179
179
  as: "image",
180
180
  });
181
181
  }
@@ -270,8 +270,7 @@ const Outlet = () => {
270
270
  return (
271
271
  <ReactSdkContext.Provider
272
272
  value={{
273
- imageLoader,
274
- assetBaseUrl,
273
+ ...constants,
275
274
  resources,
276
275
  breakpoints,
277
276
  onError: console.error,
@@ -284,8 +283,8 @@ const Outlet = () => {
284
283
  pageMeta={pageMeta}
285
284
  host={host}
286
285
  siteName={siteName}
287
- imageLoader={imageLoader}
288
- assetBaseUrl={assetBaseUrl}
286
+ imageLoader={constants.imageLoader}
287
+ assetBaseUrl={constants.assetBaseUrl}
289
288
  />
290
289
  <PageSettingsTitle>{pageMeta.title}</PageSettingsTitle>
291
290
  </ReactSdkContext.Provider>
@@ -10,13 +10,13 @@
10
10
  "dependencies": {
11
11
  "@react-router/dev": "^7.5.3",
12
12
  "@react-router/fs-routes": "^7.5.3",
13
- "@webstudio-is/image": "0.224.0",
14
- "@webstudio-is/react-sdk": "0.224.0",
15
- "@webstudio-is/sdk": "0.224.0",
16
- "@webstudio-is/sdk-components-animation": "0.224.0",
17
- "@webstudio-is/sdk-components-react-radix": "0.224.0",
18
- "@webstudio-is/sdk-components-react-router": "0.224.0",
19
- "@webstudio-is/sdk-components-react": "0.224.0",
13
+ "@webstudio-is/image": "0.226.0",
14
+ "@webstudio-is/react-sdk": "0.226.0",
15
+ "@webstudio-is/sdk": "0.226.0",
16
+ "@webstudio-is/sdk-components-animation": "0.226.0",
17
+ "@webstudio-is/sdk-components-react-radix": "0.226.0",
18
+ "@webstudio-is/sdk-components-react-router": "0.226.0",
19
+ "@webstudio-is/sdk-components-react": "0.226.0",
20
20
  "isbot": "^5.1.25",
21
21
  "react": "18.3.0-canary-14898b6a9-20240318",
22
22
  "react-dom": "18.3.0-canary-14898b6a9-20240318",
@@ -4,6 +4,19 @@
4
4
  */
5
5
  export const assetBaseUrl = "/assets/";
6
6
 
7
+ /**
8
+ * URL.canParse(props.src)
9
+ * @type {(url: string) => boolean}
10
+ */
11
+ const UrlCanParse = (url) => {
12
+ try {
13
+ new URL(url);
14
+ return true;
15
+ } catch {
16
+ return false;
17
+ }
18
+ };
19
+
7
20
  /**
8
21
  * @type {import("@webstudio-is/image").ImageLoader}
9
22
  */
@@ -12,7 +25,7 @@ export const imageLoader = (props) => {
12
25
  return props.src;
13
26
  }
14
27
  // handle absolute urls
15
- const path = URL.canParse(props.src) ? `/${props.src}` : props.src;
28
+ const path = UrlCanParse(props.src) ? `/${props.src}` : props.src;
16
29
  // https://github.com/unjs/ipx?tab=readme-ov-file#modifiers
17
30
  return `/_image/w_${props.width},q_${props.quality}${path}`;
18
31
  };
@@ -8,12 +8,12 @@
8
8
  "typecheck": "tsc"
9
9
  },
10
10
  "dependencies": {
11
- "@webstudio-is/image": "0.224.0",
12
- "@webstudio-is/react-sdk": "0.224.0",
13
- "@webstudio-is/sdk": "0.224.0",
14
- "@webstudio-is/sdk-components-react": "0.224.0",
15
- "@webstudio-is/sdk-components-animation": "0.224.0",
16
- "@webstudio-is/sdk-components-react-radix": "0.224.0",
11
+ "@webstudio-is/image": "0.226.0",
12
+ "@webstudio-is/react-sdk": "0.226.0",
13
+ "@webstudio-is/sdk": "0.226.0",
14
+ "@webstudio-is/sdk-components-react": "0.226.0",
15
+ "@webstudio-is/sdk-components-animation": "0.226.0",
16
+ "@webstudio-is/sdk-components-react-radix": "0.226.0",
17
17
  "react": "18.3.0-canary-14898b6a9-20240318",
18
18
  "react-dom": "18.3.0-canary-14898b6a9-20240318",
19
19
  "vike": "^0.4.229"