@builder.io/sdk-react 0.2.3-4 → 0.3.1

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 (288) hide show
  1. package/README.md +72 -3
  2. package/dist/sdk/blocks/columns/columns.js +5 -5
  3. package/dist/sdk/blocks/image/image.js +8 -7
  4. package/dist/sdk/blocks/symbol/symbol.js +3 -2
  5. package/dist/sdk/blocks/video/video.js +4 -1
  6. package/dist/sdk/components/render-block/block-styles.js +3 -1
  7. package/dist/sdk/components/render-block/render-block.helpers.d.ts +0 -1
  8. package/dist/sdk/components/render-block/render-block.helpers.js +8 -20
  9. package/dist/sdk/components/render-block/render-block.js +24 -15
  10. package/dist/sdk/components/render-block/render-repeated-block.js +3 -2
  11. package/dist/sdk/components/render-content/render-content.js +31 -12
  12. package/dist/sdk/components/render-content-variants/helpers.d.ts +12 -0
  13. package/dist/sdk/components/render-content-variants/helpers.js +154 -0
  14. package/dist/sdk/components/render-content-variants/render-content-variants.d.ts +5 -0
  15. package/dist/sdk/components/render-content-variants/render-content-variants.js +29 -0
  16. package/dist/sdk/components/render-inlined-styles.js +2 -2
  17. package/dist/sdk/constants/sdk-version.d.ts +1 -0
  18. package/dist/sdk/constants/sdk-version.js +1 -0
  19. package/dist/sdk/context/builder.context.js +3 -2
  20. package/dist/sdk/context/types.d.ts +17 -2
  21. package/dist/sdk/functions/evaluate.d.ts +4 -3
  22. package/dist/sdk/functions/evaluate.js +23 -2
  23. package/dist/sdk/functions/evaluate.test.d.ts +1 -0
  24. package/dist/sdk/functions/evaluate.test.js +17 -0
  25. package/dist/sdk/functions/get-block-actions-handler.d.ts +1 -1
  26. package/dist/sdk/functions/get-block-actions-handler.js +3 -1
  27. package/dist/sdk/functions/get-block-actions.d.ts +1 -1
  28. package/dist/sdk/functions/get-processed-block.d.ts +2 -2
  29. package/dist/sdk/functions/get-processed-block.js +16 -4
  30. package/dist/sdk/functions/get-processed-block.test.js +3 -1
  31. package/dist/sdk/helpers/canTrack.d.ts +1 -0
  32. package/dist/sdk/helpers/canTrack.js +2 -0
  33. package/dist/sdk/index.d.ts +1 -0
  34. package/dist/sdk/scripts/init-editing.js +2 -0
  35. package/package.json +5 -5
  36. package/CHANGELOG.md +0 -25
  37. package/packages/react/src/blocks/BaseText.tsx +0 -19
  38. package/packages/react/src/blocks/button/button.tsx +0 -45
  39. package/packages/react/src/blocks/button/component-info.ts +0 -42
  40. package/packages/react/src/blocks/columns/columns.tsx +0 -211
  41. package/packages/react/src/blocks/columns/component-info.ts +0 -254
  42. package/packages/react/src/blocks/custom-code/component-info.ts +0 -31
  43. package/packages/react/src/blocks/custom-code/custom-code.tsx +0 -76
  44. package/packages/react/src/blocks/embed/component-info.ts +0 -55
  45. package/packages/react/src/blocks/embed/embed.tsx +0 -59
  46. package/packages/react/src/blocks/embed/helpers.ts +0 -8
  47. package/packages/react/src/blocks/form/component-info.ts +0 -282
  48. package/packages/react/src/blocks/form/form.tsx +0 -320
  49. package/packages/react/src/blocks/fragment/component-info.ts +0 -10
  50. package/packages/react/src/blocks/fragment/fragment.tsx +0 -14
  51. package/packages/react/src/blocks/image/component-info.ts +0 -172
  52. package/packages/react/src/blocks/image/image.helpers.ts +0 -75
  53. package/packages/react/src/blocks/image/image.tsx +0 -144
  54. package/packages/react/src/blocks/img/component-info.ts +0 -21
  55. package/packages/react/src/blocks/img/img.tsx +0 -40
  56. package/packages/react/src/blocks/input/component-info.ts +0 -78
  57. package/packages/react/src/blocks/input/input.tsx +0 -33
  58. package/packages/react/src/blocks/raw-text/component-info.ts +0 -15
  59. package/packages/react/src/blocks/raw-text/raw-text.tsx +0 -18
  60. package/packages/react/src/blocks/section/component-info.ts +0 -50
  61. package/packages/react/src/blocks/section/section.tsx +0 -33
  62. package/packages/react/src/blocks/select/component-info.ts +0 -61
  63. package/packages/react/src/blocks/select/select.tsx +0 -35
  64. package/packages/react/src/blocks/submit-button/component-info.ts +0 -32
  65. package/packages/react/src/blocks/submit-button/submit-button.tsx +0 -17
  66. package/packages/react/src/blocks/symbol/component-info.ts +0 -43
  67. package/packages/react/src/blocks/symbol/symbol.tsx +0 -111
  68. package/packages/react/src/blocks/text/component-info.ts +0 -24
  69. package/packages/react/src/blocks/text/text.tsx +0 -20
  70. package/packages/react/src/blocks/textarea/component-info.ts +0 -48
  71. package/packages/react/src/blocks/textarea/textarea.tsx +0 -24
  72. package/packages/react/src/blocks/util.ts +0 -18
  73. package/packages/react/src/blocks/video/component-info.ts +0 -109
  74. package/packages/react/src/blocks/video/video.tsx +0 -84
  75. package/packages/react/src/components/render-block/block-styles.tsx +0 -98
  76. package/packages/react/src/components/render-block/render-block.helpers.ts +0 -138
  77. package/packages/react/src/components/render-block/render-block.tsx +0 -216
  78. package/packages/react/src/components/render-block/render-component.tsx +0 -52
  79. package/packages/react/src/components/render-block/render-repeated-block.tsx +0 -43
  80. package/packages/react/src/components/render-block/types.ts +0 -7
  81. package/packages/react/src/components/render-blocks.tsx +0 -97
  82. package/packages/react/src/components/render-content/builder-editing.tsx +0 -8
  83. package/packages/react/src/components/render-content/components/render-styles.helpers.ts +0 -79
  84. package/packages/react/src/components/render-content/components/render-styles.tsx +0 -45
  85. package/packages/react/src/components/render-content/index.ts +0 -1
  86. package/packages/react/src/components/render-content/render-content.helpers.ts +0 -48
  87. package/packages/react/src/components/render-content/render-content.tsx +0 -410
  88. package/packages/react/src/components/render-content/render-content.types.ts +0 -33
  89. package/packages/react/src/components/render-inlined-styles.tsx +0 -36
  90. package/packages/react/src/constants/builder-registered-components.ts +0 -42
  91. package/packages/react/src/constants/device-sizes.ts +0 -65
  92. package/packages/react/src/constants/target.ts +0 -2
  93. package/packages/react/src/context/builder.context.ts +0 -12
  94. package/packages/react/src/context/types.ts +0 -26
  95. package/packages/react/src/functions/camel-to-kebab-case.ts +0 -2
  96. package/packages/react/src/functions/evaluate.ts +0 -57
  97. package/packages/react/src/functions/event-handler-name.ts +0 -6
  98. package/packages/react/src/functions/extract-text-styles.ts +0 -39
  99. package/packages/react/src/functions/fast-clone.ts +0 -5
  100. package/packages/react/src/functions/get-block-actions-handler.ts +0 -20
  101. package/packages/react/src/functions/get-block-actions.ts +0 -25
  102. package/packages/react/src/functions/get-block-component-options.ts +0 -12
  103. package/packages/react/src/functions/get-block-properties.ts +0 -75
  104. package/packages/react/src/functions/get-builder-search-params/fn.test.ts +0 -19
  105. package/packages/react/src/functions/get-builder-search-params/index.ts +0 -50
  106. package/packages/react/src/functions/get-content/ab-testing.ts +0 -132
  107. package/packages/react/src/functions/get-content/generate-content-url.test.ts +0 -95
  108. package/packages/react/src/functions/get-content/generate-content-url.ts +0 -59
  109. package/packages/react/src/functions/get-content/index.ts +0 -62
  110. package/packages/react/src/functions/get-content/types.ts +0 -53
  111. package/packages/react/src/functions/get-fetch.ts +0 -18
  112. package/packages/react/src/functions/get-global-this.ts +0 -17
  113. package/packages/react/src/functions/get-processed-block.test.ts +0 -33
  114. package/packages/react/src/functions/get-processed-block.ts +0 -54
  115. package/packages/react/src/functions/get-react-native-block-styles.ts +0 -33
  116. package/packages/react/src/functions/if-target.ts +0 -20
  117. package/packages/react/src/functions/is-browser.ts +0 -3
  118. package/packages/react/src/functions/is-editing.ts +0 -10
  119. package/packages/react/src/functions/is-iframe.ts +0 -5
  120. package/packages/react/src/functions/is-previewing.ts +0 -14
  121. package/packages/react/src/functions/on-change.test.ts +0 -23
  122. package/packages/react/src/functions/on-change.ts +0 -29
  123. package/packages/react/src/functions/register-component.ts +0 -50
  124. package/packages/react/src/functions/register.ts +0 -46
  125. package/packages/react/src/functions/sanitize-react-native-block-styles.ts +0 -65
  126. package/packages/react/src/functions/set-editor-settings.ts +0 -16
  127. package/packages/react/src/functions/set.test.ts +0 -19
  128. package/packages/react/src/functions/set.ts +0 -26
  129. package/packages/react/src/functions/track/helpers.ts +0 -67
  130. package/packages/react/src/functions/track/index.ts +0 -136
  131. package/packages/react/src/functions/track/interaction.ts +0 -80
  132. package/packages/react/src/functions/transform-block-properties.ts +0 -3
  133. package/packages/react/src/functions/transform-block.ts +0 -6
  134. package/packages/react/src/helpers/ab-tests.ts +0 -22
  135. package/packages/react/src/helpers/cookie.ts +0 -107
  136. package/packages/react/src/helpers/css.ts +0 -42
  137. package/packages/react/src/helpers/flatten.ts +0 -24
  138. package/packages/react/src/helpers/localStorage.ts +0 -40
  139. package/packages/react/src/helpers/logger.ts +0 -6
  140. package/packages/react/src/helpers/nullable.ts +0 -4
  141. package/packages/react/src/helpers/sessionId.ts +0 -38
  142. package/packages/react/src/helpers/time.ts +0 -4
  143. package/packages/react/src/helpers/url.test.ts +0 -23
  144. package/packages/react/src/helpers/url.ts +0 -16
  145. package/packages/react/src/helpers/uuid.ts +0 -17
  146. package/packages/react/src/helpers/visitorId.ts +0 -40
  147. package/packages/react/src/index-helpers/blocks-exports.ts +0 -10
  148. package/packages/react/src/index-helpers/top-of-file.ts +0 -4
  149. package/packages/react/src/index.ts +0 -14
  150. package/packages/react/src/scripts/init-editing.ts +0 -123
  151. package/packages/react/src/types/api-version.ts +0 -2
  152. package/packages/react/src/types/builder-block.ts +0 -69
  153. package/packages/react/src/types/builder-content.ts +0 -46
  154. package/packages/react/src/types/can-track.ts +0 -3
  155. package/packages/react/src/types/components.ts +0 -117
  156. package/packages/react/src/types/deep-partial.ts +0 -7
  157. package/packages/react/src/types/element.ts +0 -60
  158. package/packages/react/src/types/input.ts +0 -125
  159. package/packages/react/src/types/targets.ts +0 -6
  160. package/packages/react/src/types/typescript.ts +0 -7
  161. package/packages/rsc/src/blocks/BaseText.jsx +0 -12
  162. package/packages/rsc/src/blocks/button/button.jsx +0 -37
  163. package/packages/rsc/src/blocks/button/component-info.js +0 -40
  164. package/packages/rsc/src/blocks/columns/columns.jsx +0 -172
  165. package/packages/rsc/src/blocks/columns/component-info.js +0 -241
  166. package/packages/rsc/src/blocks/custom-code/component-info.js +0 -30
  167. package/packages/rsc/src/blocks/custom-code/custom-code.jsx +0 -57
  168. package/packages/rsc/src/blocks/embed/component-info.js +0 -43
  169. package/packages/rsc/src/blocks/embed/embed.jsx +0 -45
  170. package/packages/rsc/src/blocks/embed/helpers.js +0 -9
  171. package/packages/rsc/src/blocks/form/component-info.js +0 -261
  172. package/packages/rsc/src/blocks/form/form.jsx +0 -260
  173. package/packages/rsc/src/blocks/fragment/component-info.js +0 -10
  174. package/packages/rsc/src/blocks/fragment/fragment.jsx +0 -9
  175. package/packages/rsc/src/blocks/image/component-info.js +0 -150
  176. package/packages/rsc/src/blocks/image/image.helpers.js +0 -48
  177. package/packages/rsc/src/blocks/image/image.jsx +0 -122
  178. package/packages/rsc/src/blocks/img/component-info.js +0 -19
  179. package/packages/rsc/src/blocks/img/img.jsx +0 -21
  180. package/packages/rsc/src/blocks/input/component-info.js +0 -73
  181. package/packages/rsc/src/blocks/input/input.jsx +0 -23
  182. package/packages/rsc/src/blocks/raw-text/component-info.js +0 -15
  183. package/packages/rsc/src/blocks/raw-text/raw-text.jsx +0 -14
  184. package/packages/rsc/src/blocks/section/component-info.js +0 -48
  185. package/packages/rsc/src/blocks/section/section.jsx +0 -27
  186. package/packages/rsc/src/blocks/select/component-info.js +0 -58
  187. package/packages/rsc/src/blocks/select/select.jsx +0 -24
  188. package/packages/rsc/src/blocks/submit-button/component-info.js +0 -27
  189. package/packages/rsc/src/blocks/submit-button/submit-button.jsx +0 -13
  190. package/packages/rsc/src/blocks/symbol/component-info.js +0 -42
  191. package/packages/rsc/src/blocks/symbol/symbol.jsx +0 -89
  192. package/packages/rsc/src/blocks/text/component-info.js +0 -23
  193. package/packages/rsc/src/blocks/text/text.jsx +0 -17
  194. package/packages/rsc/src/blocks/textarea/component-info.js +0 -46
  195. package/packages/rsc/src/blocks/textarea/textarea.jsx +0 -17
  196. package/packages/rsc/src/blocks/util.js +0 -8
  197. package/packages/rsc/src/blocks/video/component-info.js +0 -105
  198. package/packages/rsc/src/blocks/video/video.jsx +0 -63
  199. package/packages/rsc/src/components/render-block/block-styles.jsx +0 -88
  200. package/packages/rsc/src/components/render-block/render-block.helpers.js +0 -129
  201. package/packages/rsc/src/components/render-block/render-block.jsx +0 -201
  202. package/packages/rsc/src/components/render-block/render-component.jsx +0 -39
  203. package/packages/rsc/src/components/render-block/render-repeated-block.jsx +0 -27
  204. package/packages/rsc/src/components/render-block/types.js +0 -0
  205. package/packages/rsc/src/components/render-blocks.jsx +0 -92
  206. package/packages/rsc/src/components/render-content/builder-editing.jsx +0 -64
  207. package/packages/rsc/src/components/render-content/components/render-styles.helpers.js +0 -57
  208. package/packages/rsc/src/components/render-content/components/render-styles.jsx +0 -39
  209. package/packages/rsc/src/components/render-content/index.js +0 -4
  210. package/packages/rsc/src/components/render-content/render-content.helpers.js +0 -48
  211. package/packages/rsc/src/components/render-content/render-content.jsx +0 -253
  212. package/packages/rsc/src/components/render-content/render-content.types.js +0 -0
  213. package/packages/rsc/src/components/render-inlined-styles.jsx +0 -33
  214. package/packages/rsc/src/constants/builder-registered-components.js +0 -54
  215. package/packages/rsc/src/constants/device-sizes.js +0 -48
  216. package/packages/rsc/src/constants/target.js +0 -4
  217. package/packages/rsc/src/context/builder.context.js +0 -14
  218. package/packages/rsc/src/context/types.js +0 -0
  219. package/packages/rsc/src/functions/camel-to-kebab-case.js +0 -4
  220. package/packages/rsc/src/functions/evaluate.js +0 -6
  221. package/packages/rsc/src/functions/event-handler-name.js +0 -7
  222. package/packages/rsc/src/functions/extract-text-styles.js +0 -22
  223. package/packages/rsc/src/functions/fast-clone.js +0 -4
  224. package/packages/rsc/src/functions/get-block-actions-handler.js +0 -11
  225. package/packages/rsc/src/functions/get-block-actions.js +0 -18
  226. package/packages/rsc/src/functions/get-block-component-options.js +0 -28
  227. package/packages/rsc/src/functions/get-block-properties.js +0 -53
  228. package/packages/rsc/src/functions/get-builder-search-params/fn.test.js +0 -13
  229. package/packages/rsc/src/functions/get-builder-search-params/index.js +0 -38
  230. package/packages/rsc/src/functions/get-content/ab-testing.js +0 -99
  231. package/packages/rsc/src/functions/get-content/generate-content-url.js +0 -60
  232. package/packages/rsc/src/functions/get-content/generate-content-url.test.js +0 -82
  233. package/packages/rsc/src/functions/get-content/index.js +0 -83
  234. package/packages/rsc/src/functions/get-content/types.js +0 -0
  235. package/packages/rsc/src/functions/get-fetch.js +0 -14
  236. package/packages/rsc/src/functions/get-global-this.js +0 -18
  237. package/packages/rsc/src/functions/get-processed-block.js +0 -59
  238. package/packages/rsc/src/functions/get-processed-block.test.js +0 -32
  239. package/packages/rsc/src/functions/get-react-native-block-styles.js +0 -33
  240. package/packages/rsc/src/functions/if-target.js +0 -15
  241. package/packages/rsc/src/functions/is-browser.js +0 -6
  242. package/packages/rsc/src/functions/is-editing.js +0 -8
  243. package/packages/rsc/src/functions/is-iframe.js +0 -7
  244. package/packages/rsc/src/functions/is-previewing.js +0 -14
  245. package/packages/rsc/src/functions/on-change.js +0 -27
  246. package/packages/rsc/src/functions/on-change.test.js +0 -19
  247. package/packages/rsc/src/functions/register-component.js +0 -68
  248. package/packages/rsc/src/functions/register.js +0 -29
  249. package/packages/rsc/src/functions/sanitize-react-native-block-styles.js +0 -66
  250. package/packages/rsc/src/functions/set-editor-settings.js +0 -15
  251. package/packages/rsc/src/functions/set.js +0 -11
  252. package/packages/rsc/src/functions/set.test.js +0 -16
  253. package/packages/rsc/src/functions/track/helpers.js +0 -50
  254. package/packages/rsc/src/functions/track/index.js +0 -129
  255. package/packages/rsc/src/functions/track/interaction.js +0 -53
  256. package/packages/rsc/src/functions/transform-block-properties.js +0 -6
  257. package/packages/rsc/src/functions/transform-block.js +0 -6
  258. package/packages/rsc/src/helpers/ab-tests.js +0 -16
  259. package/packages/rsc/src/helpers/cookie.js +0 -81
  260. package/packages/rsc/src/helpers/css.js +0 -34
  261. package/packages/rsc/src/helpers/flatten.js +0 -34
  262. package/packages/rsc/src/helpers/localStorage.js +0 -35
  263. package/packages/rsc/src/helpers/logger.js +0 -9
  264. package/packages/rsc/src/helpers/nullable.js +0 -4
  265. package/packages/rsc/src/helpers/sessionId.js +0 -52
  266. package/packages/rsc/src/helpers/time.js +0 -5
  267. package/packages/rsc/src/helpers/url.js +0 -13
  268. package/packages/rsc/src/helpers/url.test.js +0 -21
  269. package/packages/rsc/src/helpers/uuid.js +0 -13
  270. package/packages/rsc/src/helpers/visitorId.js +0 -34
  271. package/packages/rsc/src/index-helpers/blocks-exports.js +0 -22
  272. package/packages/rsc/src/index-helpers/top-of-file.js +0 -2
  273. package/packages/rsc/src/index.js +0 -13
  274. package/packages/rsc/src/scripts/init-editing.js +0 -93
  275. package/packages/rsc/src/types/api-version.js +0 -4
  276. package/packages/rsc/src/types/builder-block.js +0 -0
  277. package/packages/rsc/src/types/builder-content.js +0 -0
  278. package/packages/rsc/src/types/can-track.js +0 -0
  279. package/packages/rsc/src/types/components.js +0 -0
  280. package/packages/rsc/src/types/deep-partial.js +0 -0
  281. package/packages/rsc/src/types/element.js +0 -0
  282. package/packages/rsc/src/types/input.js +0 -0
  283. package/packages/rsc/src/types/targets.js +0 -0
  284. package/packages/rsc/src/types/typescript.js +0 -0
  285. package/tsconfig.json +0 -28
  286. package/tsconfig.sdk.json +0 -10
  287. package/tsconfig.server.json +0 -10
  288. package/vite.config.ts +0 -91
@@ -1,172 +0,0 @@
1
- import type { ComponentInfo } from '../../types/components';
2
- import { serializeFn } from '../util.js';
3
-
4
- export const componentInfo: ComponentInfo = {
5
- name: 'Image',
6
- static: true,
7
-
8
- image:
9
- 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4',
10
- defaultStyles: {
11
- position: 'relative',
12
- minHeight: '20px',
13
- minWidth: '20px',
14
- overflow: 'hidden',
15
- },
16
- canHaveChildren: true,
17
- inputs: [
18
- {
19
- name: 'image',
20
- type: 'file',
21
- bubble: true,
22
- allowedFileTypes: ['jpeg', 'jpg', 'png', 'svg'],
23
- required: true,
24
- defaultValue:
25
- 'https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a',
26
- onChange: serializeFn(
27
- (options: Map<string, any>): void | Promise<void> => {
28
- const DEFAULT_ASPECT_RATIO = 0.7041;
29
- options.delete('srcset');
30
- options.delete('noWebp');
31
- function loadImage(
32
- url: string,
33
- timeout = 60000
34
- ): Promise<HTMLImageElement> {
35
- return new Promise((resolve, reject) => {
36
- const img = document.createElement('img');
37
- let loaded = false;
38
- img.onload = () => {
39
- loaded = true;
40
- resolve(img);
41
- };
42
-
43
- img.addEventListener('error', (event) => {
44
- console.warn('Image load failed', event.error);
45
- reject(event.error);
46
- });
47
-
48
- img.src = url;
49
- setTimeout(() => {
50
- if (!loaded) {
51
- reject(new Error('Image load timed out'));
52
- }
53
- }, timeout);
54
- });
55
- }
56
-
57
- function round(num: number) {
58
- return Math.round(num * 1000) / 1000;
59
- }
60
-
61
- const value = options.get('image');
62
- const aspectRatio = options.get('aspectRatio');
63
-
64
- // For SVG images - don't render as webp, keep them as SVG
65
- fetch(value)
66
- .then((res) => res.blob())
67
- .then((blob) => {
68
- if (blob.type.includes('svg')) {
69
- options.set('noWebp', true);
70
- }
71
- });
72
-
73
- if (value && (!aspectRatio || aspectRatio === DEFAULT_ASPECT_RATIO)) {
74
- return loadImage(value).then((img) => {
75
- const possiblyUpdatedAspectRatio = options.get('aspectRatio');
76
- if (
77
- options.get('image') === value &&
78
- (!possiblyUpdatedAspectRatio ||
79
- possiblyUpdatedAspectRatio === DEFAULT_ASPECT_RATIO)
80
- ) {
81
- if (img.width && img.height) {
82
- options.set('aspectRatio', round(img.height / img.width));
83
- options.set('height', img.height);
84
- options.set('width', img.width);
85
- }
86
- }
87
- });
88
- }
89
- }
90
- ),
91
- },
92
- {
93
- name: 'backgroundSize',
94
- type: 'text',
95
- defaultValue: 'cover',
96
- enum: [
97
- {
98
- label: 'contain',
99
- value: 'contain',
100
- helperText: 'The image should never get cropped',
101
- },
102
- {
103
- label: 'cover',
104
- value: 'cover',
105
- helperText: "The image should fill it's box, cropping when needed",
106
- },
107
- ],
108
- },
109
- {
110
- name: 'backgroundPosition',
111
- type: 'text',
112
- defaultValue: 'center',
113
- enum: [
114
- 'center',
115
- 'top',
116
- 'left',
117
- 'right',
118
- 'bottom',
119
- 'top left',
120
- 'top right',
121
- 'bottom left',
122
- 'bottom right',
123
- ],
124
- },
125
- {
126
- name: 'altText',
127
- type: 'string',
128
- helperText: 'Text to display when the user has images off',
129
- },
130
- {
131
- name: 'height',
132
- type: 'number',
133
- hideFromUI: true,
134
- },
135
- {
136
- name: 'width',
137
- type: 'number',
138
- hideFromUI: true,
139
- },
140
- {
141
- name: 'sizes',
142
- type: 'string',
143
- hideFromUI: true,
144
- },
145
- {
146
- name: 'srcset',
147
- type: 'string',
148
- hideFromUI: true,
149
- },
150
- {
151
- name: 'lazy',
152
- type: 'boolean',
153
- defaultValue: true,
154
- hideFromUI: true,
155
- },
156
- {
157
- name: 'fitContent',
158
- type: 'boolean',
159
- helperText:
160
- "When child blocks are provided, fit to them instead of using the image's aspect ratio",
161
- defaultValue: true,
162
- },
163
- {
164
- name: 'aspectRatio',
165
- type: 'number',
166
- helperText:
167
- "This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio",
168
- advanced: true,
169
- defaultValue: 0.7041,
170
- },
171
- ],
172
- };
@@ -1,75 +0,0 @@
1
- // Taken from (and modified) the shopify theme script repo
2
- // https://github.com/Shopify/theme-scripts/blob/bcfb471f2a57d439e2f964a1bb65b67708cc90c3/packages/theme-images/images.js#L59
3
- function removeProtocol(path: string) {
4
- return path.replace(/http(s)?:/, '');
5
- }
6
-
7
- function updateQueryParam(
8
- uri = '',
9
- key: string,
10
- value: string | number | boolean
11
- ): string {
12
- const re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');
13
- const separator = uri.indexOf('?') !== -1 ? '&' : '?';
14
- if (uri.match(re)) {
15
- return uri.replace(re, '$1' + key + '=' + encodeURIComponent(value) + '$2');
16
- }
17
-
18
- return uri + separator + key + '=' + encodeURIComponent(value);
19
- }
20
- function getShopifyImageUrl(src: string, size: string): string | null {
21
- if (!src || !src?.match(/cdn\.shopify\.com/) || !size) {
22
- return src;
23
- }
24
-
25
- if (size === 'master') {
26
- return removeProtocol(src);
27
- }
28
-
29
- const match = src.match(
30
- /(_\d+x(\d+)?)?(\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\?v=\d+)?)/i
31
- );
32
-
33
- if (match) {
34
- const prefix = src.split(match[0]);
35
- const suffix = match[3];
36
- const useSize = size.match('x') ? size : `${size}x`;
37
-
38
- return removeProtocol(`${prefix[0]}_${useSize}${suffix}`);
39
- }
40
-
41
- return null;
42
- }
43
-
44
- export function getSrcSet(url: string): string {
45
- if (!url) {
46
- return url;
47
- }
48
-
49
- const sizes = [100, 200, 400, 800, 1200, 1600, 2000];
50
-
51
- if (url.match(/builder\.io/)) {
52
- let srcUrl = url;
53
- const widthInSrc = Number(url.split('?width=')[1]);
54
- if (!isNaN(widthInSrc)) {
55
- srcUrl = `${srcUrl} ${widthInSrc}w`;
56
- }
57
-
58
- return sizes
59
- .filter((size) => size !== widthInSrc)
60
- .map((size) => `${updateQueryParam(url, 'width', size)} ${size}w`)
61
- .concat([srcUrl])
62
- .join(', ');
63
- }
64
-
65
- if (url.match(/cdn\.shopify\.com/)) {
66
- return sizes
67
- .map((size) => [getShopifyImageUrl(url, `${size}x${size}`), size])
68
- .filter(([sizeUrl]) => !!sizeUrl)
69
- .map(([sizeUrl, size]) => `${sizeUrl} ${size}w`)
70
- .concat([url])
71
- .join(', ');
72
- }
73
-
74
- return url;
75
- }
@@ -1,144 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
-
4
- export interface ImageProps {
5
- className?: string;
6
- image: string;
7
- sizes?: string;
8
- lazy?: boolean;
9
- height?: number;
10
- width?: number;
11
- altText?: string;
12
- backgroundSize?: "cover" | "contain";
13
- backgroundPosition?: string;
14
- srcset?: string;
15
- aspectRatio?: number;
16
- children?: JSX.Element;
17
- fitContent?: boolean;
18
- builderBlock?: BuilderBlock;
19
- noWebp?: boolean;
20
- src?: string;
21
- }
22
-
23
- import type { BuilderBlock } from "../../types/builder-block.js";
24
- import { getSrcSet } from "./image.helpers.js";
25
-
26
- function Image(props: ImageProps) {
27
- function srcSetToUse() {
28
- const imageToUse = props.image || props.src;
29
- const url = imageToUse;
30
-
31
- if (
32
- !url || // We can auto add srcset for cdn.builder.io and shopify
33
- // images, otherwise you can supply this prop manually
34
- !(url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/))
35
- ) {
36
- return props.srcset;
37
- }
38
-
39
- if (props.srcset && props.image?.includes("builder.io/api/v1/image")) {
40
- if (!props.srcset.includes(props.image.split("?")[0])) {
41
- console.debug("Removed given srcset");
42
- return getSrcSet(url);
43
- }
44
- } else if (props.image && !props.srcset) {
45
- return getSrcSet(url);
46
- }
47
-
48
- return getSrcSet(url);
49
- }
50
-
51
- function webpSrcSet() {
52
- if (srcSetToUse?.()?.match(/builder\.io/) && !props.noWebp) {
53
- return srcSetToUse().replace(/\?/g, "?format=webp&");
54
- } else {
55
- return "";
56
- }
57
- }
58
-
59
- function aspectRatioCss() {
60
- const aspectRatioStyles = {
61
- position: "absolute",
62
- height: "100%",
63
- width: "100%",
64
- left: "0px",
65
- top: "0px",
66
- } as const;
67
- const out = props.aspectRatio ? aspectRatioStyles : undefined;
68
- return out;
69
- }
70
-
71
- return (
72
- <>
73
- <>
74
- <picture>
75
- {webpSrcSet() ? (
76
- <>
77
- <source type="image/webp" srcSet={webpSrcSet()} />
78
- </>
79
- ) : null}
80
-
81
- <img
82
- loading="lazy"
83
- alt={props.altText}
84
- role={props.altText ? "presentation" : undefined}
85
- style={{
86
- objectPosition: props.backgroundPosition || "center",
87
- objectFit: props.backgroundSize || "cover",
88
- ...aspectRatioCss(),
89
- }}
90
- className={
91
- "builder-image" +
92
- (props.className ? " " + props.className : "") +
93
- " img-24559440"
94
- }
95
- src={props.image}
96
- srcSet={srcSetToUse()}
97
- sizes={props.sizes}
98
- />
99
- </picture>
100
-
101
- {props.aspectRatio &&
102
- !(props.builderBlock?.children?.length && props.fitContent) ? (
103
- <>
104
- <div
105
- className="builder-image-sizer div-24559440"
106
- style={{
107
- paddingTop: props.aspectRatio! * 100 + "%",
108
- }}
109
- />
110
- </>
111
- ) : null}
112
-
113
- {props.builderBlock?.children?.length && props.fitContent ? (
114
- <>{props.children}</>
115
- ) : null}
116
-
117
- {!props.fitContent && props.children ? (
118
- <>
119
- <div className="div-24559440-2">{props.children}</div>
120
- </>
121
- ) : null}
122
- </>
123
- <style>{`.img-24559440 {
124
- opacity: 1;
125
- transition: opacity 0.2s ease-in-out;
126
- }.div-24559440 {
127
- width: 100%;
128
- pointer-events: none;
129
- font-size: 0;
130
- }.div-24559440-2 {
131
- display: flex;
132
- flex-direction: column;
133
- align-items: stretch;
134
- position: absolute;
135
- top: 0;
136
- left: 0;
137
- width: 100%;
138
- height: 100%;
139
- }`}</style>
140
- </>
141
- );
142
- }
143
-
144
- export default Image;
@@ -1,21 +0,0 @@
1
- import type { ComponentInfo } from '../../types/components';
2
-
3
- export const componentInfo: ComponentInfo = {
4
- // friendlyName?
5
- name: 'Raw:Img',
6
- hideFromInsertMenu: true,
7
-
8
- image:
9
- 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4',
10
- inputs: [
11
- {
12
- name: 'image',
13
- bubble: true,
14
- type: 'file',
15
- allowedFileTypes: ['jpeg', 'jpg', 'png', 'svg'],
16
- required: true,
17
- },
18
- ],
19
- noWrap: true,
20
- static: true,
21
- };
@@ -1,40 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
-
4
- export interface ImgProps {
5
- attributes?: any;
6
- imgSrc?: string; // TODO(misko): I think this is unused
7
-
8
- image?: string;
9
- altText?: string;
10
- backgroundSize?: "cover" | "contain";
11
- backgroundPosition?:
12
- | "center"
13
- | "top"
14
- | "left"
15
- | "right"
16
- | "bottom"
17
- | "top left"
18
- | "top right"
19
- | "bottom left"
20
- | "bottom right";
21
- }
22
-
23
- import { isEditing } from "../../functions/is-editing.js";
24
-
25
- function ImgComponent(props: ImgProps) {
26
- return (
27
- <img
28
- style={{
29
- objectFit: props.backgroundSize || "cover",
30
- objectPosition: props.backgroundPosition || "center",
31
- }}
32
- key={(isEditing() && props.imgSrc) || "default-key"}
33
- alt={props.altText}
34
- src={props.imgSrc || props.image}
35
- {...props.attributes}
36
- />
37
- );
38
- }
39
-
40
- export default ImgComponent;
@@ -1,78 +0,0 @@
1
- import type { ComponentInfo } from '../../types/components';
2
-
3
- export const componentInfo: ComponentInfo = {
4
- name: 'Form:Input',
5
-
6
- image:
7
- 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fad6f37889d9e40bbbbc72cdb5875d6ca',
8
- inputs: [
9
- {
10
- name: 'type',
11
- type: 'text',
12
- enum: [
13
- 'text',
14
- 'number',
15
- 'email',
16
- 'url',
17
- 'checkbox',
18
- 'radio',
19
- 'range',
20
- 'date',
21
- 'datetime-local',
22
- 'search',
23
- 'tel',
24
- 'time',
25
- 'file',
26
- 'month',
27
- 'week',
28
- 'password',
29
- 'color',
30
- 'hidden',
31
- ],
32
- defaultValue: 'text',
33
- },
34
- {
35
- name: 'name',
36
- type: 'string',
37
- required: true,
38
- helperText:
39
- 'Every input in a form needs a unique name describing what it takes, e.g. "email"',
40
- },
41
- {
42
- name: 'placeholder',
43
- type: 'string',
44
- defaultValue: 'Hello there',
45
- helperText: 'Text to display when there is no value',
46
- },
47
- // TODO: handle value vs default value automatically like ng-model
48
- {
49
- name: 'defaultValue',
50
- type: 'string',
51
- },
52
- {
53
- name: 'value',
54
- type: 'string',
55
- advanced: true,
56
- },
57
-
58
- {
59
- name: 'required',
60
- type: 'boolean',
61
- helperText: 'Is this input required to be filled out to submit a form',
62
- defaultValue: false,
63
- },
64
- ],
65
-
66
- noWrap: true,
67
- static: true,
68
- defaultStyles: {
69
- paddingTop: '10px',
70
- paddingBottom: '10px',
71
- paddingLeft: '10px',
72
- paddingRight: '10px',
73
- borderRadius: '3px',
74
- borderWidth: '1px',
75
- borderStyle: 'solid',
76
- borderColor: '#ccc',
77
- },
78
- };
@@ -1,33 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
-
4
- export interface FormInputProps {
5
- type?: string;
6
- attributes?: any;
7
- name?: string;
8
- value?: string;
9
- placeholder?: string;
10
- defaultValue?: string;
11
- required?: boolean;
12
- }
13
-
14
- import { isEditing } from "../../functions/is-editing.js";
15
-
16
- function FormInputComponent(props: FormInputProps) {
17
- return (
18
- <input
19
- {...props.attributes}
20
- key={
21
- isEditing() && props.defaultValue ? props.defaultValue : "default-key"
22
- }
23
- placeholder={props.placeholder}
24
- type={props.type}
25
- name={props.name}
26
- value={props.value}
27
- defaultValue={props.defaultValue}
28
- required={props.required}
29
- />
30
- );
31
- }
32
-
33
- export default FormInputComponent;
@@ -1,15 +0,0 @@
1
- import type { ComponentInfo } from '../../types/components';
2
-
3
- export const componentInfo: ComponentInfo = {
4
- name: 'Builder:RawText',
5
- hideFromInsertMenu: true,
6
-
7
- inputs: [
8
- {
9
- name: 'text',
10
- bubble: true,
11
- type: 'longText',
12
- required: true,
13
- },
14
- ],
15
- };
@@ -1,18 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
-
4
- export interface RawTextProps {
5
- attributes?: any;
6
- text?: string; // builderBlock?: any;
7
- }
8
-
9
- function RawText(props: RawTextProps) {
10
- return (
11
- <span
12
- className={props.attributes?.class || props.attributes?.className}
13
- dangerouslySetInnerHTML={{ __html: props.text || "" }}
14
- />
15
- );
16
- }
17
-
18
- export default RawText;
@@ -1,50 +0,0 @@
1
- import type { ComponentInfo } from '../../types/components';
2
-
3
- export const componentInfo: ComponentInfo = {
4
- name: 'Core:Section',
5
- static: true,
6
-
7
- image:
8
- 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F682efef23ace49afac61748dd305c70a',
9
- inputs: [
10
- {
11
- name: 'maxWidth',
12
- type: 'number',
13
- defaultValue: 1200,
14
- },
15
- {
16
- name: 'lazyLoad',
17
- type: 'boolean',
18
- defaultValue: false,
19
- advanced: true,
20
- description: 'Only render this section when in view',
21
- },
22
- ],
23
- defaultStyles: {
24
- paddingLeft: '20px',
25
- paddingRight: '20px',
26
- paddingTop: '50px',
27
- paddingBottom: '50px',
28
- marginTop: '0px',
29
- width: '100vw',
30
- marginLeft: 'calc(50% - 50vw)',
31
- },
32
- canHaveChildren: true,
33
-
34
- defaultChildren: [
35
- {
36
- '@type': '@builder.io/sdk:Element',
37
- responsiveStyles: {
38
- large: {
39
- textAlign: 'center',
40
- },
41
- },
42
- component: {
43
- name: 'Text',
44
- options: {
45
- text: "<p><b>I am a section! My content keeps from getting too wide, so that it's easy to read even on big screens.</b></p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur</p>",
46
- },
47
- },
48
- },
49
- ],
50
- };
@@ -1,33 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
-
4
- export interface SectionProps {
5
- maxWidth?: number;
6
- attributes?: any;
7
- children?: any;
8
- builderBlock?: any;
9
- }
10
-
11
- function SectionComponent(props: SectionProps) {
12
- return (
13
- <section
14
- {...props.attributes}
15
- style={{
16
- width: "100%",
17
- alignSelf: "stretch",
18
- flexGrow: 1,
19
- boxSizing: "border-box",
20
- maxWidth: props.maxWidth || 1200,
21
- display: "flex",
22
- flexDirection: "column",
23
- alignItems: "stretch",
24
- marginLeft: "auto",
25
- marginRight: "auto",
26
- }}
27
- >
28
- {props.children}
29
- </section>
30
- );
31
- }
32
-
33
- export default SectionComponent;