@builder.io/sdk-react-nextjs 0.4.5

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 (244) hide show
  1. package/README.md +80 -0
  2. package/dist/blocks/button/button.d.ts +11 -0
  3. package/dist/blocks/button/button.js +12 -0
  4. package/dist/blocks/button/component-info.d.ts +2 -0
  5. package/dist/blocks/button/component-info.js +34 -0
  6. package/dist/blocks/columns/columns.d.ts +16 -0
  7. package/dist/blocks/columns/columns.js +119 -0
  8. package/dist/blocks/columns/component-info.d.ts +2 -0
  9. package/dist/blocks/columns/component-info.js +219 -0
  10. package/dist/blocks/custom-code/component-info.d.ts +2 -0
  11. package/dist/blocks/custom-code/component-info.js +23 -0
  12. package/dist/blocks/custom-code/custom-code.d.ts +6 -0
  13. package/dist/blocks/custom-code/custom-code.js +51 -0
  14. package/dist/blocks/embed/component-info.d.ts +2 -0
  15. package/dist/blocks/embed/component-info.js +38 -0
  16. package/dist/blocks/embed/embed.d.ts +5 -0
  17. package/dist/blocks/embed/embed.js +42 -0
  18. package/dist/blocks/embed/helpers.d.ts +1 -0
  19. package/dist/blocks/embed/helpers.js +2 -0
  20. package/dist/blocks/fragment/component-info.d.ts +2 -0
  21. package/dist/blocks/fragment/component-info.js +7 -0
  22. package/dist/blocks/fragment/fragment.d.ts +7 -0
  23. package/dist/blocks/fragment/fragment.js +6 -0
  24. package/dist/blocks/helpers.d.ts +13 -0
  25. package/dist/blocks/helpers.js +40 -0
  26. package/dist/blocks/image/component-info.d.ts +2 -0
  27. package/dist/blocks/image/component-info.js +121 -0
  28. package/dist/blocks/image/image.d.ts +21 -0
  29. package/dist/blocks/image/image.helpers.d.ts +1 -0
  30. package/dist/blocks/image/image.helpers.js +47 -0
  31. package/dist/blocks/image/image.js +81 -0
  32. package/dist/blocks/img/component-info.d.ts +2 -0
  33. package/dist/blocks/img/component-info.js +15 -0
  34. package/dist/blocks/img/img.d.ts +13 -0
  35. package/dist/blocks/img/img.js +10 -0
  36. package/dist/blocks/section/component-info.d.ts +2 -0
  37. package/dist/blocks/section/component-info.js +40 -0
  38. package/dist/blocks/section/section.d.ts +11 -0
  39. package/dist/blocks/section/section.js +17 -0
  40. package/dist/blocks/symbol/component-info.d.ts +2 -0
  41. package/dist/blocks/symbol/component-info.js +34 -0
  42. package/dist/blocks/symbol/symbol.d.ts +25 -0
  43. package/dist/blocks/symbol/symbol.helpers.d.ts +14 -0
  44. package/dist/blocks/symbol/symbol.helpers.js +30 -0
  45. package/dist/blocks/symbol/symbol.js +29 -0
  46. package/dist/blocks/text/component-info.d.ts +2 -0
  47. package/dist/blocks/text/component-info.js +19 -0
  48. package/dist/blocks/text/text.d.ts +5 -0
  49. package/dist/blocks/text/text.js +7 -0
  50. package/dist/blocks/video/component-info.d.ts +2 -0
  51. package/dist/blocks/video/component-info.js +82 -0
  52. package/dist/blocks/video/video.d.ts +19 -0
  53. package/dist/blocks/video/video.js +47 -0
  54. package/dist/components/block/block.d.ts +9 -0
  55. package/dist/components/block/block.helpers.d.ts +13 -0
  56. package/dist/components/block/block.helpers.js +67 -0
  57. package/dist/components/block/block.js +92 -0
  58. package/dist/components/block/components/block-styles.d.ts +8 -0
  59. package/dist/components/block/components/block-styles.js +65 -0
  60. package/dist/components/block/components/block-wrapper.d.ts +17 -0
  61. package/dist/components/block/components/block-wrapper.js +36 -0
  62. package/dist/components/block/components/component-ref/component-ref.d.ts +3 -0
  63. package/dist/components/block/components/component-ref/component-ref.helpers.d.ts +28 -0
  64. package/dist/components/block/components/component-ref/component-ref.helpers.js +21 -0
  65. package/dist/components/block/components/component-ref/component-ref.js +21 -0
  66. package/dist/components/block/components/interactive-element.d.ts +11 -0
  67. package/dist/components/block/components/interactive-element.js +20 -0
  68. package/dist/components/block/components/repeated-block.d.ts +9 -0
  69. package/dist/components/block/components/repeated-block.js +7 -0
  70. package/dist/components/block/types.d.ts +6 -0
  71. package/dist/components/block/types.js +1 -0
  72. package/dist/components/blocks/blocks-wrapper.d.ts +10 -0
  73. package/dist/components/blocks/blocks-wrapper.js +38 -0
  74. package/dist/components/blocks/blocks.d.ts +8 -0
  75. package/dist/components/blocks/blocks.js +10 -0
  76. package/dist/components/content/components/enable-editor.d.ts +9 -0
  77. package/dist/components/content/components/enable-editor.js +249 -0
  78. package/dist/components/content/components/styles.d.ts +8 -0
  79. package/dist/components/content/components/styles.helpers.d.ts +15 -0
  80. package/dist/components/content/components/styles.helpers.js +56 -0
  81. package/dist/components/content/components/styles.js +30 -0
  82. package/dist/components/content/content.d.ts +3 -0
  83. package/dist/components/content/content.helpers.d.ts +7 -0
  84. package/dist/components/content/content.helpers.js +25 -0
  85. package/dist/components/content/content.js +72 -0
  86. package/dist/components/content/content.types.d.ts +24 -0
  87. package/dist/components/content/content.types.js +1 -0
  88. package/dist/components/content/wrap-component-ref.d.ts +6 -0
  89. package/dist/components/content/wrap-component-ref.js +6 -0
  90. package/dist/components/content-variants/content-variants.d.ts +9 -0
  91. package/dist/components/content-variants/content-variants.js +39 -0
  92. package/dist/components/content-variants/content-variants.types.d.ts +20 -0
  93. package/dist/components/content-variants/content-variants.types.js +1 -0
  94. package/dist/components/content-variants/helpers.d.ts +41 -0
  95. package/dist/components/content-variants/helpers.js +188 -0
  96. package/dist/components/inlined-script.d.ts +6 -0
  97. package/dist/components/inlined-script.js +5 -0
  98. package/dist/components/inlined-styles.d.ts +6 -0
  99. package/dist/components/inlined-styles.js +5 -0
  100. package/dist/constants/builder-registered-components.d.ts +6 -0
  101. package/dist/constants/builder-registered-components.js +60 -0
  102. package/dist/constants/device-sizes.d.ts +13 -0
  103. package/dist/constants/device-sizes.js +45 -0
  104. package/dist/constants/sdk-version.d.ts +1 -0
  105. package/dist/constants/sdk-version.js +1 -0
  106. package/dist/constants/target.d.ts +2 -0
  107. package/dist/constants/target.js +2 -0
  108. package/dist/context/builder.context.d.ts +3 -0
  109. package/dist/context/builder.context.js +12 -0
  110. package/dist/context/types.d.ts +35 -0
  111. package/dist/context/types.js +1 -0
  112. package/dist/functions/apply-patch-with-mutation.d.ts +10 -0
  113. package/dist/functions/apply-patch-with-mutation.js +54 -0
  114. package/dist/functions/camel-to-kebab-case.d.ts +1 -0
  115. package/dist/functions/camel-to-kebab-case.js +1 -0
  116. package/dist/functions/evaluate.d.ts +7 -0
  117. package/dist/functions/evaluate.js +46 -0
  118. package/dist/functions/event-handler-name.d.ts +1 -0
  119. package/dist/functions/event-handler-name.js +4 -0
  120. package/dist/functions/extract-text-styles.d.ts +4 -0
  121. package/dist/functions/extract-text-styles.js +21 -0
  122. package/dist/functions/fast-clone.d.ts +4 -0
  123. package/dist/functions/fast-clone.js +4 -0
  124. package/dist/functions/get-block-actions-handler.d.ts +8 -0
  125. package/dist/functions/get-block-actions-handler.js +10 -0
  126. package/dist/functions/get-block-actions.d.ts +10 -0
  127. package/dist/functions/get-block-actions.js +28 -0
  128. package/dist/functions/get-block-component-options.d.ts +2 -0
  129. package/dist/functions/get-block-component-options.js +8 -0
  130. package/dist/functions/get-block-properties.d.ts +6 -0
  131. package/dist/functions/get-block-properties.js +71 -0
  132. package/dist/functions/get-builder-search-params/index.d.ts +12 -0
  133. package/dist/functions/get-builder-search-params/index.js +38 -0
  134. package/dist/functions/get-content/generate-content-url.d.ts +2 -0
  135. package/dist/functions/get-content/generate-content-url.js +32 -0
  136. package/dist/functions/get-content/index.d.ts +16 -0
  137. package/dist/functions/get-content/index.js +82 -0
  138. package/dist/functions/get-content/processCookies.d.ts +2 -0
  139. package/dist/functions/get-content/processCookies.js +35 -0
  140. package/dist/functions/get-content/types.d.ts +51 -0
  141. package/dist/functions/get-content/types.js +1 -0
  142. package/dist/functions/get-fetch.d.ts +1 -0
  143. package/dist/functions/get-fetch.js +11 -0
  144. package/dist/functions/get-global-this.d.ts +4 -0
  145. package/dist/functions/get-global-this.js +15 -0
  146. package/dist/functions/get-processed-block.d.ts +10 -0
  147. package/dist/functions/get-processed-block.js +43 -0
  148. package/dist/functions/get-react-native-block-styles.d.ts +7 -0
  149. package/dist/functions/get-react-native-block-styles.js +16 -0
  150. package/dist/functions/is-browser.d.ts +1 -0
  151. package/dist/functions/is-browser.js +3 -0
  152. package/dist/functions/is-editing.d.ts +1 -0
  153. package/dist/functions/is-editing.js +5 -0
  154. package/dist/functions/is-iframe.d.ts +1 -0
  155. package/dist/functions/is-iframe.js +4 -0
  156. package/dist/functions/is-previewing.d.ts +1 -0
  157. package/dist/functions/is-previewing.js +11 -0
  158. package/dist/functions/register-component.d.ts +15 -0
  159. package/dist/functions/register-component.js +34 -0
  160. package/dist/functions/register.d.ts +16 -0
  161. package/dist/functions/register.js +27 -0
  162. package/dist/functions/sanitize-react-native-block-styles.d.ts +3 -0
  163. package/dist/functions/sanitize-react-native-block-styles.js +58 -0
  164. package/dist/functions/set-editor-settings.d.ts +4 -0
  165. package/dist/functions/set-editor-settings.js +12 -0
  166. package/dist/functions/set.d.ts +7 -0
  167. package/dist/functions/set.js +14 -0
  168. package/dist/functions/track/helpers.d.ts +5 -0
  169. package/dist/functions/track/helpers.js +50 -0
  170. package/dist/functions/track/index.d.ts +51 -0
  171. package/dist/functions/track/index.js +69 -0
  172. package/dist/functions/track/interaction.d.ts +13 -0
  173. package/dist/functions/track/interaction.js +53 -0
  174. package/dist/functions/transform-block-properties.d.ts +1 -0
  175. package/dist/functions/transform-block-properties.js +5 -0
  176. package/dist/functions/transform-block.d.ts +2 -0
  177. package/dist/functions/transform-block.js +3 -0
  178. package/dist/helpers/ab-tests.d.ts +9 -0
  179. package/dist/helpers/ab-tests.js +116 -0
  180. package/dist/helpers/canTrack.d.ts +1 -0
  181. package/dist/helpers/canTrack.js +2 -0
  182. package/dist/helpers/cookie.d.ts +19 -0
  183. package/dist/helpers/cookie.js +54 -0
  184. package/dist/helpers/css.d.ts +7 -0
  185. package/dist/helpers/css.js +27 -0
  186. package/dist/helpers/flatten.d.ts +6 -0
  187. package/dist/helpers/flatten.js +17 -0
  188. package/dist/helpers/localStorage.d.ts +9 -0
  189. package/dist/helpers/localStorage.js +24 -0
  190. package/dist/helpers/logger.d.ts +6 -0
  191. package/dist/helpers/logger.js +7 -0
  192. package/dist/helpers/nullable.d.ts +2 -0
  193. package/dist/helpers/nullable.js +1 -0
  194. package/dist/helpers/preview-lru-cache/get.d.ts +1 -0
  195. package/dist/helpers/preview-lru-cache/get.js +7 -0
  196. package/dist/helpers/preview-lru-cache/helpers.d.ts +1 -0
  197. package/dist/helpers/preview-lru-cache/helpers.js +9 -0
  198. package/dist/helpers/preview-lru-cache/init.d.ts +1 -0
  199. package/dist/helpers/preview-lru-cache/init.js +15 -0
  200. package/dist/helpers/preview-lru-cache/set.d.ts +7 -0
  201. package/dist/helpers/preview-lru-cache/set.js +9 -0
  202. package/dist/helpers/preview-lru-cache/types.d.ts +12 -0
  203. package/dist/helpers/preview-lru-cache/types.js +1 -0
  204. package/dist/helpers/sessionId.d.ts +6 -0
  205. package/dist/helpers/sessionId.js +30 -0
  206. package/dist/helpers/url.d.ts +6 -0
  207. package/dist/helpers/url.js +15 -0
  208. package/dist/helpers/uuid.d.ts +8 -0
  209. package/dist/helpers/uuid.js +15 -0
  210. package/dist/helpers/visitorId.d.ts +6 -0
  211. package/dist/helpers/visitorId.js +30 -0
  212. package/dist/index-helpers/blocks-exports.d.ts +10 -0
  213. package/dist/index-helpers/blocks-exports.js +10 -0
  214. package/dist/index-helpers/top-of-file.d.ts +1 -0
  215. package/dist/index-helpers/top-of-file.js +4 -0
  216. package/dist/index.d.ts +15 -0
  217. package/dist/index.js +10 -0
  218. package/dist/scripts/init-editing.d.ts +6 -0
  219. package/dist/scripts/init-editing.js +109 -0
  220. package/dist/types/api-version.d.ts +2 -0
  221. package/dist/types/api-version.js +1 -0
  222. package/dist/types/builder-block.d.ts +66 -0
  223. package/dist/types/builder-block.js +1 -0
  224. package/dist/types/builder-content.d.ts +44 -0
  225. package/dist/types/builder-content.js +1 -0
  226. package/dist/types/builder-props.d.ts +9 -0
  227. package/dist/types/builder-props.js +1 -0
  228. package/dist/types/can-track.d.ts +3 -0
  229. package/dist/types/can-track.js +1 -0
  230. package/dist/types/components.d.ts +111 -0
  231. package/dist/types/components.js +1 -0
  232. package/dist/types/deep-partial.d.ts +3 -0
  233. package/dist/types/deep-partial.js +1 -0
  234. package/dist/types/element.d.ts +59 -0
  235. package/dist/types/element.js +1 -0
  236. package/dist/types/enforced-partials.d.ts +21 -0
  237. package/dist/types/enforced-partials.js +1 -0
  238. package/dist/types/input.d.ts +121 -0
  239. package/dist/types/input.js +1 -0
  240. package/dist/types/targets.d.ts +1 -0
  241. package/dist/types/targets.js +1 -0
  242. package/dist/types/typescript.d.ts +11 -0
  243. package/dist/types/typescript.js +1 -0
  244. package/package.json +27 -0
package/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # Builder.io React NextJS SDK (BETA)
2
+
3
+ This is the Builder NextJS SDK, `@builder.io/sdk-react-nextjs`. It is intended to be used _only_ with NextJS's app directory, and has hard dependencies on NextJS-specific functionality that only works in the app directory.
4
+
5
+ If you are using NextJS's pages directory, use the [React gen2 SDK](../react/) in Beta, or the stable React gen1 SDK [here](../../../react/) (i.e. `builder.io/react`).
6
+
7
+ ## API Reference
8
+
9
+ To use the SDK, you need to:
10
+
11
+ - fetch the builder data using `getContent`: you can see how to use it here https://www.builder.io/c/docs/content-api, and how it differs from the React V1 SDK's `builder.get()` function.
12
+
13
+ - pass that data to the `RenderContent` component, along with the following properties:
14
+
15
+ ```ts
16
+ type RenderContentProps = {
17
+ content?: Nullable<BuilderContent>;
18
+ model?: string;
19
+ data?: { [key: string]: any };
20
+ context?: BuilderRenderContext;
21
+ apiKey: string;
22
+ apiVersion?: ApiVersion;
23
+ customComponents?: RegisteredComponent[];
24
+ canTrack?: boolean;
25
+ locale?: string;
26
+ includeRefs?: boolean;
27
+ };
28
+ ```
29
+
30
+ Here is a simplified example showing how you would use both. This needs to be created created with the name `app/[[...slug]]/page.tsx`, so it catches all routes:
31
+
32
+ ```tsx
33
+ import {
34
+ RenderContent,
35
+ getBuilderSearchParams,
36
+ getContent,
37
+ } from '@builder.io/sdk-react-nextjs';
38
+
39
+ interface MyPageProps {
40
+ params: {
41
+ slug: string[];
42
+ };
43
+ searchParams: Record<string, string>;
44
+ }
45
+
46
+ const apiKey = 'YOUR_API_KEY_HERE';
47
+
48
+ export default async function Page(props: MyPageProps) {
49
+ const urlPath = '/' + (props.params?.slug?.join('/') || '');
50
+
51
+ const content = await getContent({
52
+ model: 'page',
53
+ apiKey,
54
+ options: getBuilderSearchParams(props.searchParams),
55
+ userAttributes: { urlPath },
56
+ });
57
+
58
+ return <RenderContent content={content} model="page" apiKey={apiKey} />;
59
+ }
60
+ ```
61
+
62
+ Look at the [examples](#examples) for more information.
63
+
64
+ ## Mitosis
65
+
66
+ This SDK is generated by [Mitosis](https://github.com/BuilderIO/mitosis). To see the Mitosis source-code, go [here](../../).
67
+
68
+ ## Feature Support
69
+
70
+ To check the status of the SDK, look at [these tables](../../README.md#feature-implementation).
71
+
72
+ ## Getting Started
73
+
74
+ ```
75
+ npm install @builder.io/sdk-react-nextjs
76
+ ```
77
+
78
+ ## Examples
79
+
80
+ - [Next.js SDK](../../../../examples/next-js-sdk-gen-2-experimental-app-directory)
@@ -0,0 +1,11 @@
1
+ /**
2
+ * This import is used by the Svelte SDK. Do not remove.
3
+ */
4
+ export interface ButtonProps {
5
+ attributes?: any;
6
+ text?: string;
7
+ link?: string;
8
+ openLinkInNewTab?: boolean;
9
+ }
10
+ declare function Button(props: ButtonProps): JSX.Element;
11
+ export default Button;
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ function Button(props) {
4
+ return (React.createElement(React.Fragment, null,
5
+ props.link ? (React.createElement(React.Fragment, null,
6
+ React.createElement("a", { role: "button", ...props.attributes, href: props.link, target: props.openLinkInNewTab ? "_blank" : undefined }, props.text))) : (React.createElement(React.Fragment, null,
7
+ React.createElement("button", { ...props.attributes, style: props.attributes.style, className: props.attributes.className + " button-533f77e6" }, props.text))),
8
+ React.createElement("style", null, `.button-533f77e6 {
9
+ all: unset;
10
+ }`)));
11
+ }
12
+ export default Button;
@@ -0,0 +1,2 @@
1
+ import type { ComponentInfo } from '../../types/components.js';
2
+ export declare const componentInfo: ComponentInfo;
@@ -0,0 +1,34 @@
1
+ export const componentInfo = {
2
+ name: 'Core:Button',
3
+ image: 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F81a15681c3e74df09677dfc57a615b13',
4
+ defaultStyles: {
5
+ // TODO: make min width more intuitive and set one
6
+ appearance: 'none',
7
+ paddingTop: '15px',
8
+ paddingBottom: '15px',
9
+ paddingLeft: '25px',
10
+ paddingRight: '25px',
11
+ backgroundColor: '#000000',
12
+ color: 'white',
13
+ borderRadius: '4px',
14
+ textAlign: 'center',
15
+ cursor: 'pointer'
16
+ },
17
+ inputs: [{
18
+ name: 'text',
19
+ type: 'text',
20
+ defaultValue: 'Click me!',
21
+ bubble: true
22
+ }, {
23
+ name: 'link',
24
+ type: 'url',
25
+ bubble: true
26
+ }, {
27
+ name: 'openLinkInNewTab',
28
+ type: 'boolean',
29
+ defaultValue: false,
30
+ friendlyName: 'Open link in new tab'
31
+ }],
32
+ static: true,
33
+ noWrap: true
34
+ };
@@ -0,0 +1,16 @@
1
+ type Column = {
2
+ blocks: BuilderBlock[];
3
+ width?: number;
4
+ };
5
+ type StackColumnsAt = "tablet" | "mobile" | "never";
6
+ export interface ColumnProps extends BuilderComponentsProp {
7
+ columns?: Column[];
8
+ builderBlock: BuilderBlock;
9
+ space?: number;
10
+ stackColumnsAt?: StackColumnsAt;
11
+ reverseColumnsWhenStacked?: boolean;
12
+ }
13
+ import type { BuilderBlock } from "../../types/builder-block.js";
14
+ import type { BuilderComponentsProp, PropsWithBuilderData } from "../../types/builder-props.js";
15
+ declare function Columns(props: PropsWithBuilderData<ColumnProps>): JSX.Element;
16
+ export default Columns;
@@ -0,0 +1,119 @@
1
+ import * as React from "react";
2
+ import Blocks from "../../components/blocks/blocks.js";
3
+ import { getSizesForBreakpoints } from "../../constants/device-sizes.js";
4
+ import InlinedStyles from "../../components/inlined-styles.js";
5
+ import { TARGET } from "../../constants/target.js";
6
+ function Columns(props) {
7
+ const gutterSize = typeof props.space === "number" ? props.space || 0 : 20;
8
+ const cols = props.columns || [];
9
+ const stackAt = props.stackColumnsAt || "tablet";
10
+ const getWidth = function getWidth(index) {
11
+ return cols[index]?.width || 100 / cols.length;
12
+ };
13
+ const getColumnCssWidth = function getColumnCssWidth(index) {
14
+ const subtractWidth = (gutterSize * (cols.length - 1)) / cols.length;
15
+ return `calc(${getWidth(index)}% - ${subtractWidth}px)`;
16
+ };
17
+ const getTabletStyle = function getTabletStyle({ stackedStyle, desktopStyle, }) {
18
+ return stackAt === "tablet" ? stackedStyle : desktopStyle;
19
+ };
20
+ const getMobileStyle = function getMobileStyle({ stackedStyle, desktopStyle, }) {
21
+ return stackAt === "never" ? desktopStyle : stackedStyle;
22
+ };
23
+ const flexDir = props.stackColumnsAt === "never"
24
+ ? "row"
25
+ : props.reverseColumnsWhenStacked
26
+ ? "column-reverse"
27
+ : "column";
28
+ const columnsCssVars = function columnsCssVars() {
29
+ return {
30
+ "--flex-dir": flexDir,
31
+ "--flex-dir-tablet": getTabletStyle({
32
+ stackedStyle: flexDir,
33
+ desktopStyle: "row",
34
+ }),
35
+ };
36
+ };
37
+ const columnCssVars = function columnCssVars(index) {
38
+ const gutter = index === 0 ? 0 : gutterSize;
39
+ if (TARGET === "reactNative") {
40
+ return {
41
+ marginLeft: props.stackColumnsAt === "never" ? gutter : 0,
42
+ };
43
+ }
44
+ const width = getColumnCssWidth(index);
45
+ const gutterPixels = `${gutter}px`;
46
+ const mobileWidth = "100%";
47
+ const mobileMarginLeft = 0;
48
+ const marginLeftKey = "marginLeft";
49
+ return {
50
+ width,
51
+ [marginLeftKey]: gutterPixels,
52
+ "--column-width-mobile": getMobileStyle({
53
+ stackedStyle: mobileWidth,
54
+ desktopStyle: width,
55
+ }),
56
+ "--column-margin-left-mobile": getMobileStyle({
57
+ stackedStyle: mobileMarginLeft,
58
+ desktopStyle: gutterPixels,
59
+ }),
60
+ "--column-width-tablet": getTabletStyle({
61
+ stackedStyle: mobileWidth,
62
+ desktopStyle: width,
63
+ }),
64
+ "--column-margin-left-tablet": getTabletStyle({
65
+ stackedStyle: mobileMarginLeft,
66
+ desktopStyle: gutterPixels,
67
+ }),
68
+ };
69
+ };
70
+ const getWidthForBreakpointSize = function getWidthForBreakpointSize(size) {
71
+ const breakpointSizes = getSizesForBreakpoints(props.builderContext.content?.meta?.breakpoints || {});
72
+ return breakpointSizes[size].max;
73
+ };
74
+ const columnsStyles = function columnsStyles() {
75
+ return `
76
+ @media (max-width: ${getWidthForBreakpointSize("medium")}px) {
77
+ .${props.builderBlock.id}-breakpoints {
78
+ flex-direction: var(--flex-dir-tablet);
79
+ align-items: stretch;
80
+ }
81
+
82
+ .${props.builderBlock.id}-breakpoints > .builder-column {
83
+ width: var(--column-width-tablet) !important;
84
+ margin-left: var(--column-margin-left-tablet) !important;
85
+ }
86
+ }
87
+
88
+ @media (max-width: ${getWidthForBreakpointSize("small")}px) {
89
+ .${props.builderBlock.id}-breakpoints {
90
+ flex-direction: var(--flex-dir);
91
+ align-items: stretch;
92
+ }
93
+
94
+ .${props.builderBlock.id}-breakpoints > .builder-column {
95
+ width: var(--column-width-mobile) !important;
96
+ margin-left: var(--column-margin-left-mobile) !important;
97
+ }
98
+ },
99
+ `;
100
+ };
101
+ return (React.createElement(React.Fragment, null,
102
+ React.createElement("div", { className: `builder-columns ${props.builderBlock.id}-breakpoints` +
103
+ " div-71b923fc", style: columnsCssVars() },
104
+ TARGET !== "reactNative" ? (React.createElement(React.Fragment, null,
105
+ React.createElement(InlinedStyles, { styles: columnsStyles() }))) : null,
106
+ props.columns?.map((column, index) => (React.createElement("div", { className: "builder-column div-71b923fc-2", style: columnCssVars(index), key: index },
107
+ React.createElement(Blocks, { blocks: column.blocks, path: `component.options.columns.${index}.blocks`, parent: props.builderBlock.id, styleProp: {
108
+ flexGrow: "1",
109
+ }, context: props.builderContext, registeredComponents: props.builderComponents }))))),
110
+ React.createElement("style", null, `.div-71b923fc {
111
+ display: flex;
112
+ line-height: normal;
113
+ }.div-71b923fc-2 {
114
+ display: flex;
115
+ flex-direction: column;
116
+ align-items: stretch;
117
+ }`)));
118
+ }
119
+ export default Columns;
@@ -0,0 +1,2 @@
1
+ import type { ComponentInfo } from '../../types/components.js';
2
+ export declare const componentInfo: ComponentInfo;
@@ -0,0 +1,219 @@
1
+ export const componentInfo = {
2
+ // TODO: ways to statically preprocess JSON for references, functions, etc
3
+ name: 'Columns',
4
+ isRSC: true,
5
+ inputs: [{
6
+ name: 'columns',
7
+ type: 'array',
8
+ broadcast: true,
9
+ subFields: [{
10
+ name: 'blocks',
11
+ type: 'array',
12
+ hideFromUI: true,
13
+ defaultValue: [{
14
+ '@type': '@builder.io/sdk:Element',
15
+ responsiveStyles: {
16
+ large: {
17
+ display: 'flex',
18
+ flexDirection: 'column',
19
+ alignItems: 'stretch',
20
+ flexShrink: '0',
21
+ position: 'relative',
22
+ marginTop: '30px',
23
+ textAlign: 'center',
24
+ lineHeight: 'normal',
25
+ height: 'auto',
26
+ minHeight: '20px',
27
+ minWidth: '20px',
28
+ overflow: 'hidden'
29
+ }
30
+ },
31
+ component: {
32
+ name: 'Image',
33
+ options: {
34
+ image: 'https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d',
35
+ backgroundPosition: 'center',
36
+ backgroundSize: 'cover',
37
+ aspectRatio: 0.7004048582995948
38
+ }
39
+ }
40
+ }, {
41
+ '@type': '@builder.io/sdk:Element',
42
+ responsiveStyles: {
43
+ large: {
44
+ display: 'flex',
45
+ flexDirection: 'column',
46
+ alignItems: 'stretch',
47
+ flexShrink: '0',
48
+ position: 'relative',
49
+ marginTop: '30px',
50
+ textAlign: 'center',
51
+ lineHeight: 'normal',
52
+ height: 'auto'
53
+ }
54
+ },
55
+ component: {
56
+ name: 'Text',
57
+ options: {
58
+ text: '<p>Enter some text...</p>'
59
+ }
60
+ }
61
+ }]
62
+ }, {
63
+ name: 'width',
64
+ type: 'number',
65
+ hideFromUI: true,
66
+ helperText: 'Width %, e.g. set to 50 to fill half of the space'
67
+ }, {
68
+ name: 'link',
69
+ type: 'url',
70
+ helperText: 'Optionally set a url that clicking this column will link to'
71
+ }],
72
+ defaultValue: [{
73
+ blocks: [{
74
+ '@type': '@builder.io/sdk:Element',
75
+ responsiveStyles: {
76
+ large: {
77
+ display: 'flex',
78
+ flexDirection: 'column',
79
+ alignItems: 'stretch',
80
+ flexShrink: '0',
81
+ position: 'relative',
82
+ marginTop: '30px',
83
+ textAlign: 'center',
84
+ lineHeight: 'normal',
85
+ height: 'auto',
86
+ minHeight: '20px',
87
+ minWidth: '20px',
88
+ overflow: 'hidden'
89
+ }
90
+ },
91
+ component: {
92
+ name: 'Image',
93
+ options: {
94
+ image: 'https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d',
95
+ backgroundPosition: 'center',
96
+ backgroundSize: 'cover',
97
+ aspectRatio: 0.7004048582995948
98
+ }
99
+ }
100
+ }, {
101
+ '@type': '@builder.io/sdk:Element',
102
+ responsiveStyles: {
103
+ large: {
104
+ display: 'flex',
105
+ flexDirection: 'column',
106
+ alignItems: 'stretch',
107
+ flexShrink: '0',
108
+ position: 'relative',
109
+ marginTop: '30px',
110
+ textAlign: 'center',
111
+ lineHeight: 'normal',
112
+ height: 'auto'
113
+ }
114
+ },
115
+ component: {
116
+ name: 'Text',
117
+ options: {
118
+ text: '<p>Enter some text...</p>'
119
+ }
120
+ }
121
+ }]
122
+ }, {
123
+ blocks: [{
124
+ '@type': '@builder.io/sdk:Element',
125
+ responsiveStyles: {
126
+ large: {
127
+ display: 'flex',
128
+ flexDirection: 'column',
129
+ alignItems: 'stretch',
130
+ flexShrink: '0',
131
+ position: 'relative',
132
+ marginTop: '30px',
133
+ textAlign: 'center',
134
+ lineHeight: 'normal',
135
+ height: 'auto',
136
+ minHeight: '20px',
137
+ minWidth: '20px',
138
+ overflow: 'hidden'
139
+ }
140
+ },
141
+ component: {
142
+ name: 'Image',
143
+ options: {
144
+ image: 'https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d',
145
+ backgroundPosition: 'center',
146
+ backgroundSize: 'cover',
147
+ aspectRatio: 0.7004048582995948
148
+ }
149
+ }
150
+ }, {
151
+ '@type': '@builder.io/sdk:Element',
152
+ responsiveStyles: {
153
+ large: {
154
+ display: 'flex',
155
+ flexDirection: 'column',
156
+ alignItems: 'stretch',
157
+ flexShrink: '0',
158
+ position: 'relative',
159
+ marginTop: '30px',
160
+ textAlign: 'center',
161
+ lineHeight: 'normal',
162
+ height: 'auto'
163
+ }
164
+ },
165
+ component: {
166
+ name: 'Text',
167
+ options: {
168
+ text: '<p>Enter some text...</p>'
169
+ }
170
+ }
171
+ }]
172
+ }],
173
+ onChange: (options) => {
174
+ function clearWidths() {
175
+ columns.forEach(col => {
176
+ col.delete('width');
177
+ });
178
+ }
179
+ const columns = options.get('columns');
180
+ if (Array.isArray(columns)) {
181
+ const containsColumnWithWidth = !!columns.find(col => col.get('width'));
182
+ if (containsColumnWithWidth) {
183
+ const containsColumnWithoutWidth = !!columns.find(col => !col.get('width'));
184
+ if (containsColumnWithoutWidth) {
185
+ clearWidths();
186
+ }
187
+ else {
188
+ const sumWidths = columns.reduce((memo, col) => {
189
+ return memo + col.get('width');
190
+ }, 0);
191
+ const widthsDontAddUp = sumWidths !== 100;
192
+ if (widthsDontAddUp) {
193
+ clearWidths();
194
+ }
195
+ }
196
+ }
197
+ }
198
+ }
199
+ }, {
200
+ name: 'space',
201
+ type: 'number',
202
+ defaultValue: 20,
203
+ helperText: 'Size of gap between columns',
204
+ advanced: true
205
+ }, {
206
+ name: 'stackColumnsAt',
207
+ type: 'string',
208
+ defaultValue: 'tablet',
209
+ helperText: 'Convert horizontal columns to vertical at what device size',
210
+ enum: ['tablet', 'mobile', 'never'],
211
+ advanced: true
212
+ }, {
213
+ name: 'reverseColumnsWhenStacked',
214
+ type: 'boolean',
215
+ defaultValue: false,
216
+ helperText: 'When stacking columns for mobile devices, reverse the ordering',
217
+ advanced: true
218
+ }]
219
+ };
@@ -0,0 +1,2 @@
1
+ import type { ComponentInfo } from '../../types/components.js';
2
+ export declare const componentInfo: ComponentInfo;
@@ -0,0 +1,23 @@
1
+ export const componentInfo = {
2
+ name: 'Custom Code',
3
+ static: true,
4
+ requiredPermissions: ['editCode'],
5
+ inputs: [{
6
+ name: 'code',
7
+ type: 'html',
8
+ required: true,
9
+ defaultValue: '<p>Hello there, I am custom HTML code!</p>',
10
+ code: true
11
+ }, {
12
+ name: 'replaceNodes',
13
+ type: 'boolean',
14
+ helperText: 'Preserve server rendered dom nodes',
15
+ advanced: true
16
+ }, {
17
+ name: 'scriptsClientOnly',
18
+ type: 'boolean',
19
+ defaultValue: false,
20
+ helperText: 'Only print and run scripts on the client. Important when scripts influence DOM that could be replaced when client loads',
21
+ advanced: true
22
+ }]
23
+ };
@@ -0,0 +1,6 @@
1
+ export interface CustomCodeProps {
2
+ code: string;
3
+ replaceNodes?: boolean;
4
+ }
5
+ declare function CustomCode(props: CustomCodeProps): JSX.Element;
6
+ export default CustomCode;
@@ -0,0 +1,51 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { useState, useRef, useEffect } from "react";
4
+ function CustomCode(props) {
5
+ const elem = useRef(null);
6
+ const [scriptsInserted, setScriptsInserted] = useState(() => []);
7
+ const [scriptsRun, setScriptsRun] = useState(() => []);
8
+ function findAndRunScripts() {
9
+ // TODO: Move this function to standalone one in '@builder.io/utils'
10
+ if (elem.current &&
11
+ elem.current.getElementsByTagName &&
12
+ typeof window !== "undefined") {
13
+ const scripts = elem.current.getElementsByTagName("script");
14
+ for (let i = 0; i < scripts.length; i++) {
15
+ const script = scripts[i];
16
+ if (script.src) {
17
+ if (scriptsInserted.includes(script.src)) {
18
+ continue;
19
+ }
20
+ scriptsInserted.push(script.src);
21
+ const newScript = document.createElement("script");
22
+ newScript.async = true;
23
+ newScript.src = script.src;
24
+ document.head.appendChild(newScript);
25
+ }
26
+ else if (!script.type ||
27
+ [
28
+ "text/javascript",
29
+ "application/javascript",
30
+ "application/ecmascript",
31
+ ].includes(script.type)) {
32
+ if (scriptsRun.includes(script.innerText)) {
33
+ continue;
34
+ }
35
+ try {
36
+ scriptsRun.push(script.innerText);
37
+ new Function(script.innerText)();
38
+ }
39
+ catch (error) {
40
+ console.warn("`CustomCode`: Error running script:", error);
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ useEffect(() => {
47
+ findAndRunScripts();
48
+ }, []);
49
+ return (React.createElement("div", { ref: elem, className: "builder-custom-code" + (props.replaceNodes ? " replace-nodes" : ""), dangerouslySetInnerHTML: { __html: props.code } }));
50
+ }
51
+ export default CustomCode;
@@ -0,0 +1,2 @@
1
+ import type { ComponentInfo } from '../../types/components.js';
2
+ export declare const componentInfo: ComponentInfo;
@@ -0,0 +1,38 @@
1
+ export const componentInfo = {
2
+ name: 'Embed',
3
+ static: true,
4
+ inputs: [{
5
+ name: 'url',
6
+ type: 'url',
7
+ required: true,
8
+ defaultValue: '',
9
+ helperText: 'e.g. enter a youtube url, google map, etc',
10
+ onChange: (options) => {
11
+ const url = options.get('url');
12
+ if (url) {
13
+ options.set('content', 'Loading...'); // TODO: get this out of here!
14
+ const apiKey = 'ae0e60e78201a3f2b0de4b';
15
+ return fetch(`https://iframe.ly/api/iframely?url=${url}&api_key=${apiKey}`).then(res => res.json()).then(data => {
16
+ if (options.get('url') === url) {
17
+ if (data.html) {
18
+ options.set('content', data.html);
19
+ }
20
+ else {
21
+ options.set('content', 'Invalid url, please try another');
22
+ }
23
+ }
24
+ }).catch(_err => {
25
+ options.set('content', 'There was an error embedding this URL, please try again or another URL');
26
+ });
27
+ }
28
+ else {
29
+ options.delete('content');
30
+ }
31
+ }
32
+ }, {
33
+ name: 'content',
34
+ type: 'html',
35
+ defaultValue: '<div style="padding: 20px; text-align: center">(Choose an embed URL)<div>',
36
+ hideFromUI: true
37
+ }]
38
+ };
@@ -0,0 +1,5 @@
1
+ export interface EmbedProps {
2
+ content: string;
3
+ }
4
+ declare function Embed(props: EmbedProps): JSX.Element;
5
+ export default Embed;