@webstudio-is/react-sdk 0.28.0 → 0.30.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.
Files changed (123) hide show
  1. package/lib/app/custom-components/index.js +12 -6
  2. package/lib/app/custom-components/shared/remix-link.js +14 -8
  3. package/lib/app/root.js +0 -2
  4. package/lib/cjs/app/custom-components/index.cjs +12 -6
  5. package/lib/cjs/app/custom-components/shared/remix-link.cjs +14 -8
  6. package/lib/cjs/app/root.cjs +0 -2
  7. package/lib/cjs/components/__generated__/body.props.json +557 -305
  8. package/lib/cjs/components/__generated__/bold.props.json +557 -305
  9. package/lib/cjs/components/__generated__/box.props.json +577 -320
  10. package/lib/cjs/components/__generated__/button.props.json +616 -339
  11. package/lib/cjs/components/__generated__/form.props.json +597 -329
  12. package/lib/cjs/components/__generated__/heading.props.json +566 -309
  13. package/lib/cjs/components/__generated__/image.props.json +638 -352
  14. package/lib/cjs/components/__generated__/input.props.json +725 -405
  15. package/lib/cjs/components/__generated__/italic.props.json +557 -305
  16. package/lib/cjs/components/__generated__/link.props.json +616 -343
  17. package/lib/cjs/components/__generated__/paragraph.props.json +557 -305
  18. package/lib/cjs/components/__generated__/rich-text-link.props.json +616 -343
  19. package/lib/cjs/components/__generated__/span.props.json +557 -305
  20. package/lib/cjs/components/__generated__/subscript.props.json +557 -305
  21. package/lib/cjs/components/__generated__/superscript.props.json +557 -305
  22. package/lib/cjs/components/__generated__/text-block.props.json +557 -305
  23. package/lib/cjs/components/body.ws.cjs +6 -3
  24. package/lib/cjs/components/bold.ws.cjs +7 -4
  25. package/lib/cjs/components/box.ws.cjs +8 -4
  26. package/lib/cjs/components/button.ws.cjs +8 -4
  27. package/lib/cjs/components/component-type.cjs +21 -56
  28. package/lib/cjs/components/form.ws.cjs +7 -4
  29. package/lib/cjs/components/heading.ws.cjs +8 -4
  30. package/lib/cjs/components/image.ws.cjs +11 -5
  31. package/lib/cjs/components/index.cjs +165 -111
  32. package/lib/cjs/components/input.ws.cjs +7 -4
  33. package/lib/cjs/components/italic.ws.cjs +7 -4
  34. package/lib/cjs/components/link.ws.cjs +8 -4
  35. package/lib/cjs/components/paragraph.ws.cjs +7 -4
  36. package/lib/cjs/components/rich-text-link.ws.cjs +7 -4
  37. package/lib/cjs/components/span.ws.cjs +7 -4
  38. package/lib/cjs/components/subscript.ws.cjs +7 -4
  39. package/lib/cjs/components/superscript.ws.cjs +7 -4
  40. package/lib/cjs/components/text-block.ws.cjs +7 -4
  41. package/lib/cjs/index.cjs +3 -2
  42. package/lib/cjs/tree/session-storage-polyfill.cjs +1 -1
  43. package/lib/components/__generated__/body.props.json +557 -305
  44. package/lib/components/__generated__/bold.props.json +557 -305
  45. package/lib/components/__generated__/box.props.json +577 -320
  46. package/lib/components/__generated__/button.props.json +616 -339
  47. package/lib/components/__generated__/form.props.json +597 -329
  48. package/lib/components/__generated__/heading.props.json +566 -309
  49. package/lib/components/__generated__/image.props.json +638 -352
  50. package/lib/components/__generated__/input.props.json +725 -405
  51. package/lib/components/__generated__/italic.props.json +557 -305
  52. package/lib/components/__generated__/link.props.json +616 -343
  53. package/lib/components/__generated__/paragraph.props.json +557 -305
  54. package/lib/components/__generated__/rich-text-link.props.json +616 -343
  55. package/lib/components/__generated__/span.props.json +557 -305
  56. package/lib/components/__generated__/subscript.props.json +557 -305
  57. package/lib/components/__generated__/superscript.props.json +557 -305
  58. package/lib/components/__generated__/text-block.props.json +557 -305
  59. package/lib/components/body.ws.js +6 -3
  60. package/lib/components/bold.ws.js +7 -4
  61. package/lib/components/box.ws.js +8 -4
  62. package/lib/components/button.ws.js +8 -4
  63. package/lib/components/component-type.js +21 -56
  64. package/lib/components/form.ws.js +7 -4
  65. package/lib/components/heading.ws.js +8 -4
  66. package/lib/components/image.ws.js +11 -5
  67. package/lib/components/index.js +117 -57
  68. package/lib/components/input.ws.js +7 -4
  69. package/lib/components/italic.ws.js +7 -4
  70. package/lib/components/link.ws.js +8 -4
  71. package/lib/components/paragraph.ws.js +7 -4
  72. package/lib/components/rich-text-link.ws.js +7 -4
  73. package/lib/components/span.ws.js +7 -4
  74. package/lib/components/subscript.ws.js +7 -4
  75. package/lib/components/superscript.ws.js +7 -4
  76. package/lib/components/text-block.ws.js +7 -4
  77. package/lib/index.js +5 -3
  78. package/lib/tree/session-storage-polyfill.js +1 -1
  79. package/package.json +8 -8
  80. package/src/app/custom-components/image.tsx +2 -2
  81. package/src/app/custom-components/index.ts +11 -5
  82. package/src/app/custom-components/shared/remix-link.tsx +26 -7
  83. package/src/app/root.tsx +0 -2
  84. package/src/components/__generated__/body.props.json +557 -305
  85. package/src/components/__generated__/bold.props.json +557 -305
  86. package/src/components/__generated__/box.props.json +577 -320
  87. package/src/components/__generated__/button.props.json +616 -339
  88. package/src/components/__generated__/form.props.json +597 -329
  89. package/src/components/__generated__/heading.props.json +566 -309
  90. package/src/components/__generated__/image.props.json +638 -352
  91. package/src/components/__generated__/input.props.json +725 -405
  92. package/src/components/__generated__/italic.props.json +557 -305
  93. package/src/components/__generated__/link.props.json +616 -343
  94. package/src/components/__generated__/paragraph.props.json +557 -305
  95. package/src/components/__generated__/rich-text-link.props.json +616 -343
  96. package/src/components/__generated__/span.props.json +557 -305
  97. package/src/components/__generated__/subscript.props.json +557 -305
  98. package/src/components/__generated__/superscript.props.json +557 -305
  99. package/src/components/__generated__/text-block.props.json +557 -305
  100. package/src/components/body.ws.tsx +5 -4
  101. package/src/components/bold.ws.tsx +5 -4
  102. package/src/components/box.ws.ts +6 -4
  103. package/src/components/button.ws.tsx +6 -4
  104. package/src/components/component-type.ts +23 -63
  105. package/src/components/form.ws.tsx +5 -4
  106. package/src/components/heading.ws.tsx +6 -4
  107. package/src/components/image.ws.tsx +9 -5
  108. package/src/components/index.test.ts +2 -24
  109. package/src/components/index.ts +155 -81
  110. package/src/components/input.ws.tsx +5 -4
  111. package/src/components/italic.ws.tsx +5 -4
  112. package/src/components/link.ws.tsx +6 -4
  113. package/src/components/paragraph.ws.tsx +5 -4
  114. package/src/components/rich-text-link.ws.tsx +5 -4
  115. package/src/components/span.ws.tsx +5 -4
  116. package/src/components/subscript.ws.tsx +5 -4
  117. package/src/components/superscript.ws.tsx +5 -4
  118. package/src/components/text-block.ws.tsx +5 -4
  119. package/src/css/breakpoints.ts +1 -1
  120. package/src/index.ts +6 -2
  121. package/src/props.ts +1 -1
  122. package/src/tree/create-elements-tree.tsx +3 -3
  123. package/src/tree/session-storage-polyfill.tsx +1 -1
@@ -6,7 +6,7 @@ const polyfill = function() {
6
6
  sessionStorage.removeItem(key);
7
7
  } catch (error) {
8
8
  alert(
9
- 'It looks like you have disabled cookies in your browser. Webstudio designer may not work properly.\n\nTo enable cookies, go to "Setting" > "Privacy and security" > "Cookies and other site data", and make sure neither "Block all cookies" nor "Block third-party cookies" are selected.\n\nRead more at https://support.google.com/chrome/answer/95647'
9
+ 'It looks like you have disabled cookies in your browser. Webstudio builder may not work properly.\n\nTo enable cookies, go to "Setting" > "Privacy and security" > "Cookies and other site data", and make sure neither "Block all cookies" nor "Block third-party cookies" are selected.\n\nRead more at https://support.google.com/chrome/answer/95647'
10
10
  );
11
11
  const data = /* @__PURE__ */ new Map();
12
12
  Object.defineProperty(window, "sessionStorage", {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webstudio-is/react-sdk",
3
- "version": "0.28.0",
3
+ "version": "0.30.0",
4
4
  "description": "Webstudio JavaScript / TypeScript API",
5
5
  "author": "Webstudio <github@webstudio.is>",
6
6
  "homepage": "https://webstudio.is",
@@ -25,7 +25,7 @@
25
25
  "react-dom": "^17.0.2",
26
26
  "remix-utils": "^4.1.0",
27
27
  "tsx": "^3.9.0",
28
- "typescript": "4.7.4",
28
+ "typescript": "4.9.5",
29
29
  "zod": "^3.19.1",
30
30
  "@webstudio-is/generate-arg-types": "^0.0.1",
31
31
  "@webstudio-is/jest-config": "^1.0.2",
@@ -47,12 +47,12 @@
47
47
  "mitt": "^3.0.0",
48
48
  "nanostores": "^0.7.1",
49
49
  "warn-once": "^0.1.1",
50
- "@webstudio-is/asset-uploader": "^0.28.0",
51
- "@webstudio-is/css-data": "^0.28.0",
52
- "@webstudio-is/icons": "^0.28.0",
53
- "@webstudio-is/image": "^0.28.0",
54
- "@webstudio-is/prisma-client": "^0.28.0",
55
- "@webstudio-is/project-build": "^0.28.0"
50
+ "@webstudio-is/asset-uploader": "^0.30.0",
51
+ "@webstudio-is/css-data": "^0.30.0",
52
+ "@webstudio-is/icons": "^0.30.0",
53
+ "@webstudio-is/image": "^0.30.0",
54
+ "@webstudio-is/prisma-client": "^0.30.0",
55
+ "@webstudio-is/project-build": "^0.30.0"
56
56
  },
57
57
  "exports": {
58
58
  "import": "./lib/index.js",
@@ -44,12 +44,12 @@ export const Image = forwardRef<ElementRef<typeof defaultTag>, Props>(
44
44
  return (
45
45
  <WebstudioImage
46
46
  /**
47
- * `key` is needed to recreate the image in case of asset change in designer,
47
+ * `key` is needed to recreate the image in case of asset change in builder,
48
48
  * this gives immediate feedback when an asset is changed.
49
49
  * Also, it visually fixes image distortion when another asset has a seriously different aspectRatio
50
50
  * (we change aspectRatio CSS prop on asset change)
51
51
  *
52
- * In non-designer mode, key on images are usually also a good idea,
52
+ * In non-builder mode, key on images are usually also a good idea,
53
53
  * prevents showing outdated images on route change.
54
54
  **/
55
55
  key={src}
@@ -2,7 +2,7 @@ import { Image } from "./image";
2
2
  import { Link } from "./link";
3
3
  import { RichTextLink } from "./rich-text-link";
4
4
  import { imageProps } from "@webstudio-is/image";
5
- import type { MetaProps } from "../../components/component-type";
5
+ import { WsComponentPropsMeta } from "../../components/component-type";
6
6
 
7
7
  export const customComponents = {
8
8
  Image,
@@ -10,8 +10,14 @@ export const customComponents = {
10
10
  RichTextLink,
11
11
  };
12
12
 
13
- export const customComponentsMeta = {
14
- Image: {
15
- props: imageProps as MetaProps,
16
- },
13
+ export const customComponentPropsMetas = {
14
+ Image: WsComponentPropsMeta.parse({
15
+ props: {
16
+ ...imageProps,
17
+ src: { ...imageProps.src, control: "file-image", name: "Source" },
18
+ },
19
+ }),
17
20
  };
21
+
22
+ // just for completeness, maybe we add soemthing here later
23
+ export const customComponentMetas = {};
@@ -16,6 +16,11 @@ const isAbsoluteUrl = (href: string) => {
16
16
  }
17
17
  };
18
18
 
19
+ // Remix's check for absolute URL copied from here:
20
+ // https://github.com/remix-run/react-router/blob/react-router-dom%406.8.0/packages/react-router-dom/index.tsx#L423-L424
21
+ const isAbsoluteUrlRemix = (href: string) =>
22
+ /^[a-z+]+:\/\//i.test(href) || href.startsWith("//");
23
+
19
24
  type Props = Omit<ComponentProps<"a">, "href"> & { href?: string };
20
25
 
21
26
  type Ref = ElementRef<"a">;
@@ -25,13 +30,27 @@ export const wrapLinkComponent = (
25
30
  ) => {
26
31
  // We're not actually wrapping BaseLink (no way to wrap with Remix's Link),
27
32
  // but this is still useful because we're making sure that props/ref types are compatible
28
- const Component = forwardRef<Ref, Props>(({ href = "", ...props }, ref) =>
29
- isAbsoluteUrl(href) ? (
30
- <a {...props} href={href} ref={ref} />
31
- ) : (
32
- <Link {...props} to={href} ref={ref} />
33
- )
34
- );
33
+ const Component = forwardRef<Ref, Props>(({ href = "", ...props }, ref) => {
34
+ const isAbsolute = isAbsoluteUrl(href);
35
+
36
+ // This is a workaround for a bug in Remix: https://github.com/remix-run/remix/issues/5440
37
+ // It has a buggy absolute URL detection, which gives false positives on value like "//" or "http://"
38
+ // and causes entire app to crash
39
+ const willRemixTryToTreatAsAbsoluteAndCrash =
40
+ isAbsolute === false && isAbsoluteUrlRemix(href);
41
+
42
+ if (isAbsolute || willRemixTryToTreatAsAbsoluteAndCrash) {
43
+ return (
44
+ <a
45
+ {...props}
46
+ href={willRemixTryToTreatAsAbsoluteAndCrash ? "" : href}
47
+ ref={ref}
48
+ />
49
+ );
50
+ }
51
+
52
+ return <Link {...props} to={href} ref={ref} />;
53
+ });
35
54
 
36
55
  // This is the only part that we use from BaseLink at runtime
37
56
  Component.displayName = BaseLink.displayName;
package/src/app/root.tsx CHANGED
@@ -1,5 +1,4 @@
1
1
  import { Links, Meta, Outlet as DefaultOutlet } from "@remix-run/react";
2
- import { DynamicLinks } from "remix-utils";
3
2
 
4
3
  /**
5
4
  * We are using Outlet prop from index layout when user renders site from a subdomain.
@@ -17,7 +16,6 @@ export const Root = ({
17
16
  <link rel="icon" href="/favicon.ico" type="image/x-icon" />
18
17
  <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
19
18
  <Meta />
20
- <DynamicLinks />
21
19
  <Links />
22
20
  </head>
23
21