@builder.io/sdk-solid 0.0.8-2 → 0.0.8-22

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 (93) hide show
  1. package/README.md +5 -1
  2. package/package.json +11 -7
  3. package/src/blocks/button/button.jsx +6 -1
  4. package/src/blocks/columns/columns.jsx +7 -7
  5. package/src/blocks/columns/component-info.js +25 -1
  6. package/src/blocks/custom-code/custom-code.jsx +2 -2
  7. package/src/blocks/embed/component-info.js +20 -1
  8. package/src/blocks/embed/embed.jsx +31 -34
  9. package/src/blocks/embed/helpers.js +9 -0
  10. package/src/blocks/form/form.jsx +3 -3
  11. package/src/blocks/image/component-info.js +47 -1
  12. package/src/blocks/image/image.helpers.js +48 -0
  13. package/src/blocks/image/image.jsx +43 -7
  14. package/src/blocks/symbol/component-info.js +1 -0
  15. package/src/blocks/symbol/symbol.jsx +32 -3
  16. package/src/blocks/text/text.jsx +1 -1
  17. package/src/blocks/video/video.jsx +25 -2
  18. package/src/components/render-block/block-styles.jsx +31 -23
  19. package/src/components/render-block/render-block.helpers.js +23 -0
  20. package/src/components/render-block/render-block.jsx +123 -36
  21. package/src/components/render-block/render-component.jsx +27 -0
  22. package/src/components/render-block/render-repeated-block.jsx +32 -0
  23. package/src/components/render-block/types.js +0 -0
  24. package/src/components/render-blocks.jsx +12 -2
  25. package/src/components/render-content/components/render-styles.jsx +1 -1
  26. package/src/components/render-content/index.js +4 -0
  27. package/src/components/render-content/render-content.jsx +79 -28
  28. package/src/components/render-inlined-styles.jsx +2 -1
  29. package/src/constants/builder-registered-components.js +48 -0
  30. package/src/constants/device-sizes.js +3 -21
  31. package/src/context/builder.context.js +2 -1
  32. package/src/functions/camel-to-kebab-case.js +4 -0
  33. package/src/functions/convert-style-object.js +14 -0
  34. package/src/functions/get-block-component-options.js +6 -1
  35. package/src/functions/get-block-styles.js +7 -15
  36. package/src/functions/get-builder-search-params/index.js +12 -1
  37. package/src/functions/get-content/ab-testing.js +38 -0
  38. package/src/functions/get-content/index.js +16 -58
  39. package/src/functions/get-content/types.js +0 -0
  40. package/src/functions/get-processed-block.js +15 -8
  41. package/src/functions/get-processed-block.test.js +2 -1
  42. package/src/functions/register-component.js +45 -26
  43. package/src/functions/sanitize-styles.js +5 -0
  44. package/src/helpers/css.js +12 -0
  45. package/src/helpers/flatten.js +34 -0
  46. package/src/index-helpers/blocks-exports.js +11 -9
  47. package/src/solid-index.jsx +5 -0
  48. package/src/types/components.js +0 -0
  49. package/src/types/element.js +0 -0
  50. package/src/blocks/button/button.lite.tsx +0 -20
  51. package/src/blocks/button/index.js +0 -7
  52. package/src/blocks/columns/columns.lite.tsx +0 -102
  53. package/src/blocks/columns/index.js +0 -7
  54. package/src/blocks/custom-code/custom-code.lite.tsx +0 -67
  55. package/src/blocks/custom-code/index.js +0 -7
  56. package/src/blocks/embed/embed.lite.tsx +0 -59
  57. package/src/blocks/embed/index.js +0 -7
  58. package/src/blocks/form/form.lite.tsx +0 -293
  59. package/src/blocks/form/index.js +0 -7
  60. package/src/blocks/fragment/fragment.lite.tsx +0 -5
  61. package/src/blocks/fragment/index.js +0 -7
  62. package/src/blocks/image/image.lite.tsx +0 -83
  63. package/src/blocks/image/index.js +0 -7
  64. package/src/blocks/img/img.lite.tsx +0 -18
  65. package/src/blocks/img/index.js +0 -7
  66. package/src/blocks/input/index.js +0 -7
  67. package/src/blocks/input/input.lite.tsx +0 -20
  68. package/src/blocks/raw-text/index.js +0 -7
  69. package/src/blocks/raw-text/raw-text.lite.tsx +0 -10
  70. package/src/blocks/section/index.js +0 -7
  71. package/src/blocks/section/section.lite.tsx +0 -18
  72. package/src/blocks/select/index.js +0 -7
  73. package/src/blocks/select/select.lite.tsx +0 -28
  74. package/src/blocks/submit-button/index.js +0 -7
  75. package/src/blocks/submit-button/submit-button.lite.tsx +0 -9
  76. package/src/blocks/symbol/index.js +0 -7
  77. package/src/blocks/symbol/symbol.lite.tsx +0 -39
  78. package/src/blocks/text/index.js +0 -7
  79. package/src/blocks/text/text.lite.tsx +0 -5
  80. package/src/blocks/textarea/index.js +0 -7
  81. package/src/blocks/textarea/textarea.lite.tsx +0 -13
  82. package/src/blocks/video/index.js +0 -7
  83. package/src/blocks/video/video.lite.tsx +0 -26
  84. package/src/components/error-boundary.jsx +0 -5
  85. package/src/components/error-boundary.lite.tsx +0 -5
  86. package/src/components/render-block/block-styles.lite.tsx +0 -38
  87. package/src/components/render-block/render-block.lite.tsx +0 -119
  88. package/src/components/render-blocks.lite.tsx +0 -75
  89. package/src/components/render-content/components/render-styles.lite.tsx +0 -76
  90. package/src/components/render-content/render-content.lite.tsx +0 -232
  91. package/src/components/render-inlined-styles.lite.tsx +0 -26
  92. package/src/functions/macro-eval.js +0 -5
  93. package/src/functions/previewing-model-name.js +0 -11
@@ -1,232 +0,0 @@
1
- import { useContext, Show, onMount } from "solid-js";
2
- import { Dynamic } from "solid-js/web";
3
- import { createMutable } from "solid-js/store";
4
-
5
- import { TARGET } from "../../constants/target.js";
6
- import BuilderContext from "../../context/builder.context";
7
- import { evaluate } from "../../functions/evaluate.js";
8
- import {
9
- convertSearchParamsToQueryObject,
10
- getBuilderSearchParams,
11
- } from "../../functions/get-builder-search-params/index.js";
12
- import { getContent } from "../../functions/get-content/index.js";
13
- import { getFetch } from "../../functions/get-fetch.js";
14
- import { isBrowser } from "../../functions/is-browser.js";
15
- import { isEditing } from "../../functions/is-editing.js";
16
- import { isPreviewing } from "../../functions/is-previewing.js";
17
- import { previewingModelName } from "../../functions/previewing-model-name.js";
18
- import { track } from "../../functions/track.js";
19
- import RenderBlocks from "../render-blocks.lite";
20
- import RenderContentStyles from "./components/render-styles.lite";
21
-
22
- function RenderContent(props) {
23
- const state = createMutable({
24
- get useContent() {
25
- const mergedContent: BuilderContent = {
26
- ...props.content,
27
- ...state.overrideContent,
28
- data: {
29
- ...props.content?.data,
30
- ...props.data,
31
- ...state.overrideContent?.data,
32
- },
33
- };
34
- return mergedContent;
35
- },
36
- overrideContent: null,
37
- update: 0,
38
- overrideState: {},
39
- get contentState() {
40
- return {
41
- ...props.content?.data?.state,
42
- ...props.data,
43
- ...state.overrideState,
44
- };
45
- },
46
- get context() {
47
- return {} as {
48
- [index: string]: any;
49
- };
50
- },
51
- processMessage(event: MessageEvent) {
52
- const { data } = event;
53
-
54
- if (data) {
55
- switch (data.type) {
56
- case "builder.contentUpdate": {
57
- const messageContent = data.data;
58
- const key =
59
- messageContent.key ||
60
- messageContent.alias ||
61
- messageContent.entry ||
62
- messageContent.modelName;
63
- const contentData = messageContent.data;
64
-
65
- if (key === props.model) {
66
- state.overrideContent = contentData;
67
- }
68
-
69
- break;
70
- }
71
-
72
- case "builder.patchUpdates": {
73
- // TODO
74
- break;
75
- }
76
- }
77
- }
78
- },
79
- evaluateJsCode() {
80
- // run any dynamic JS code attached to content
81
- const jsCode = state.useContent?.data?.jsCode;
82
-
83
- if (jsCode) {
84
- evaluate({
85
- code: jsCode,
86
- context: state.context,
87
- state: state.contentState,
88
- });
89
- }
90
- },
91
- get httpReqsData() {
92
- return {};
93
- },
94
- evalExpression(expression: string) {
95
- return expression.replace(/{{([^}]+)}}/g, (_match, group) =>
96
- evaluate({
97
- code: group,
98
- context: state.context,
99
- state: state.contentState,
100
- })
101
- );
102
- },
103
- handleRequest({ url, key }: { key: string; url: string }) {
104
- const fetchAndSetState = async () => {
105
- const fetch = await getFetch();
106
- const response = await fetch(url);
107
- const json = await response.json();
108
- const newOverrideState = { ...state.overrideState, [key]: json };
109
- state.overrideState = newOverrideState;
110
- };
111
-
112
- fetchAndSetState();
113
- },
114
- runHttpRequests() {
115
- const requests = state.useContent?.data?.httpRequests ?? {};
116
- Object.entries(requests).forEach(([key, url]) => {
117
- if (url && (!state.httpReqsData[key] || isEditing())) {
118
- const evaluatedUrl = state.evalExpression(url);
119
- state.handleRequest({
120
- url: evaluatedUrl,
121
- key,
122
- });
123
- }
124
- });
125
- },
126
- emitStateUpdate() {
127
- window.dispatchEvent(
128
- new CustomEvent<BuilderComponentStateChange>(
129
- "builder:component:stateChange",
130
- {
131
- detail: {
132
- state: state.contentState,
133
- ref: {
134
- name: props.model,
135
- },
136
- },
137
- }
138
- )
139
- );
140
- },
141
- });
142
-
143
- onMount(() => {
144
- if (isBrowser()) {
145
- if (isEditing()) {
146
- window.addEventListener("message", state.processMessage);
147
- window.addEventListener(
148
- "builder:component:stateChangeListenerActivated",
149
- state.emitStateUpdate
150
- );
151
- }
152
-
153
- if (state.useContent) {
154
- track("impression", {
155
- contentId: state.useContent.id,
156
- });
157
- } // override normal content in preview mode
158
-
159
- if (isPreviewing()) {
160
- if (props.model && previewingModelName() === props.model) {
161
- const currentUrl = new URL(location.href);
162
- const previewApiKey = currentUrl.searchParams.get("apiKey");
163
-
164
- if (previewApiKey) {
165
- getContent({
166
- model: props.model,
167
- apiKey: previewApiKey,
168
- options: getBuilderSearchParams(
169
- convertSearchParamsToQueryObject(currentUrl.searchParams)
170
- ),
171
- }).then((content) => {
172
- if (content) {
173
- state.overrideContent = content;
174
- }
175
- });
176
- }
177
- }
178
- }
179
-
180
- state.evaluateJsCode();
181
- state.runHttpRequests();
182
- state.emitStateUpdate();
183
- }
184
- });
185
-
186
- return (
187
- <Dynamic
188
- value={{
189
- get content() {
190
- return state.useContent;
191
- },
192
- get state() {
193
- return state.contentState;
194
- },
195
- get context() {
196
- return state.context;
197
- },
198
- get apiKey() {
199
- return props.apiKey;
200
- },
201
- }}
202
- component={BuilderContext.Provider}
203
- >
204
- <Show when={state.useContent}>
205
- <div
206
- onClick={(event) =>
207
- track("click", {
208
- contentId: state.useContent.id,
209
- })
210
- }
211
- data-builder-content-id={state.useContent?.id}
212
- >
213
- <Show
214
- when={
215
- (state.useContent?.data?.cssCode ||
216
- state.useContent?.data?.customFonts?.length) &&
217
- TARGET !== "reactNative"
218
- }
219
- >
220
- <RenderContentStyles
221
- cssCode={state.useContent.data.cssCode}
222
- customFonts={state.useContent.data.customFonts}
223
- ></RenderContentStyles>
224
- </Show>
225
- <RenderBlocks blocks={state.useContent?.data?.blocks}></RenderBlocks>
226
- </div>
227
- </Show>
228
- </Dynamic>
229
- );
230
- }
231
-
232
- export default RenderContent;
@@ -1,26 +0,0 @@
1
- import { Show } from "solid-js";
2
- import { Dynamic } from "solid-js/web";
3
- import { createMutable } from "solid-js/store";
4
-
5
- import { TARGET } from "../constants/target.js";
6
-
7
- function RenderInlinedStyles(props) {
8
- const state = createMutable({
9
- get injectedStyleScript() {
10
- return `<${state.tagName}>${props.styles}</${state.tagName}>`;
11
- },
12
- get tagName() {
13
- // NOTE: we have to obfusctate the name of the tag due to a limitation in the svelte-preprocessor plugin.
14
- // https://github.com/sveltejs/vite-plugin-svelte/issues/315#issuecomment-1109000027
15
- return "sty" + "le";
16
- },
17
- });
18
-
19
- return (
20
- <Show when={TARGET === "svelte"}>
21
- <div innerHTML={state.injectedStyleScript}></div>
22
- </Show>
23
- );
24
- }
25
-
26
- export default RenderInlinedStyles;
@@ -1,5 +0,0 @@
1
- function macroEval(items, string) {
2
- }
3
- export {
4
- macroEval
5
- };
@@ -1,11 +0,0 @@
1
- import { isPreviewing } from "./is-previewing.js";
2
- function previewingModelName() {
3
- if (!isPreviewing()) {
4
- return null;
5
- }
6
- const url = new URL(location.href);
7
- return url.searchParams.get("builder.preview");
8
- }
9
- export {
10
- previewingModelName
11
- };