@developer_tribe/react-builder 1.2.8 → 1.2.10

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 (192) hide show
  1. package/dist/AttributesEditor.d.ts +2 -11
  2. package/dist/attribute-analyser/style/native/useExtractImageStyle.d.ts +10 -0
  3. package/dist/attribute-analyser/style/native/useExtractTextStyle.d.ts +9 -0
  4. package/dist/attribute-analyser/style/native/useExtractViewStyle.d.ts +8 -0
  5. package/dist/attribute-analyser/style/web/useExtractImageStyle.d.ts +4 -0
  6. package/dist/attribute-analyser/style/web/useExtractTextStyle.d.ts +4 -0
  7. package/dist/attribute-analyser/style/web/useExtractViewStyle.d.ts +4 -0
  8. package/dist/attributes-editor/AttributesEditorFields.d.ts +18 -0
  9. package/dist/attributes-editor/AttributesEditorView.d.ts +4 -0
  10. package/dist/attributes-editor/attributesEditorModelTypes.d.ts +67 -0
  11. package/dist/attributes-editor/attributesEditorUtils.d.ts +19 -0
  12. package/dist/attributes-editor/useAttributesEditorModel.d.ts +2 -0
  13. package/dist/build-components/BIcon/BIconProps.generated.d.ts +6 -6
  14. package/dist/build-components/BackgroundImage/BackgroundImageProps.generated.d.ts +3 -3
  15. package/dist/build-components/Button/ButtonProps.generated.d.ts +1 -1
  16. package/dist/build-components/Carousel/CarouselProps.generated.d.ts +2 -2
  17. package/dist/build-components/CarouselButtons/CarouselButtonsProps.generated.d.ts +4 -4
  18. package/dist/build-components/CarouselDots/CarouselDotsProps.generated.d.ts +3 -3
  19. package/dist/build-components/CarouselItem/CarouselItemProps.generated.d.ts +1 -1
  20. package/dist/build-components/CarouselProvider/CarouselProviderProps.generated.d.ts +1 -1
  21. package/dist/build-components/Image/ImageProps.generated.d.ts +5 -3
  22. package/dist/build-components/Main/MainProps.generated.d.ts +2 -2
  23. package/dist/build-components/Onboard/OnboardProps.generated.d.ts +1 -1
  24. package/dist/build-components/OnboardButton/OnboardButtonProps.generated.d.ts +9 -8
  25. package/dist/build-components/OnboardButtons/OnboardButtonsProps.generated.d.ts +11 -11
  26. package/dist/build-components/OnboardDot/OnboardDotProps.generated.d.ts +15 -9
  27. package/dist/build-components/OnboardFooter/OnboardFooterProps.generated.d.ts +10 -10
  28. package/dist/build-components/OnboardImage/OnboardImageProps.generated.d.ts +8 -6
  29. package/dist/build-components/OnboardItem/OnboardItemProps.generated.d.ts +6 -3
  30. package/dist/build-components/OnboardProvider/OnboardProviderProps.generated.d.ts +5 -4
  31. package/dist/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.d.ts +3 -3
  32. package/dist/build-components/OnboardTitle/OnboardTitleProps.generated.d.ts +3 -3
  33. package/dist/build-components/PaywallBackground/PaywallBackgroundProps.generated.d.ts +1 -1
  34. package/dist/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.d.ts +6 -6
  35. package/dist/build-components/PaywallOptions/PaywallOptionsProps.generated.d.ts +1 -1
  36. package/dist/build-components/PaywallProvider/PaywallProviderProps.generated.d.ts +1 -1
  37. package/dist/build-components/PaywallSubscribeButton/PaywallSubscribeButtonProps.generated.d.ts +1 -1
  38. package/dist/build-components/RadioButton/RadioButtonProps.generated.d.ts +4 -4
  39. package/dist/build-components/Text/TextProps.generated.d.ts +3 -3
  40. package/dist/build-components/View/ViewProps.generated.d.ts +1 -1
  41. package/dist/build-components/patterns.generated.d.ts +2690 -5804
  42. package/dist/index.cjs.js +5 -5
  43. package/dist/index.cjs.js.map +1 -1
  44. package/dist/index.d.ts +1 -0
  45. package/dist/index.esm.js +5 -5
  46. package/dist/index.esm.js.map +1 -1
  47. package/dist/index.native.cjs.js +6 -4
  48. package/dist/index.native.cjs.js.map +1 -1
  49. package/dist/index.native.d.ts +5 -6
  50. package/dist/index.native.esm.js +6 -4
  51. package/dist/index.native.esm.js.map +1 -1
  52. package/dist/migrations/migratePipe.d.ts +1 -1
  53. package/dist/migrations/migrations/1.1.2_extract_component_attributes_from_style.d.ts +2 -0
  54. package/dist/mockOS/components/PermissionModal.d.ts +1 -2
  55. package/dist/styles.css +1 -1
  56. package/dist/types/PreviewConfig.d.ts +1 -5
  57. package/dist/utils/getMeta.d.ts +5 -0
  58. package/dist/utils/patterns.d.ts +12 -0
  59. package/package.json +4 -2
  60. package/scripts/prebuild/prebuild.js +14 -0
  61. package/scripts/prebuild/utils/createGeneratedProps.js +19 -13
  62. package/scripts/prebuild/utils/index.js +1 -0
  63. package/scripts/prebuild/utils/updateMetaJson.js +66 -0
  64. package/scripts/prebuild/utils/validateAllComponentsOrThrow.js +37 -3
  65. package/scripts/prebuild/utils/validatePatternJson.js +27 -2
  66. package/scripts/public/scripts/build/index.js +20 -3
  67. package/scripts/public/scripts/build/info.json +6 -0
  68. package/scripts/public/scripts/build/utils/createComponentsIndex.js +9 -3
  69. package/scripts/public/scripts/build/utils/createRenderNodeGenerated.js +66 -8
  70. package/src/AttributesEditor.tsx +8 -944
  71. package/src/assets/meta.json +4 -0
  72. package/src/assets/samples/carousel-sample.json +1 -1
  73. package/src/assets/samples/getSamples.ts +2 -0
  74. package/src/assets/samples/paywall-1.json +11 -7
  75. package/src/assets/samples/simple-1.json +3 -3
  76. package/src/assets/samples/simple-2.json +3 -3
  77. package/src/assets/samples/unmigrated-builder-1.1.1.json +87 -0
  78. package/src/assets/samples/unmigrated-builder1.json +1 -1
  79. package/src/assets/samples/unvalidated-builder1.json +3 -3
  80. package/src/assets/samples/unvalidated-crash1.json +1 -1
  81. package/src/assets/samples/unvalidated-crashcomponent1.json +1 -1
  82. package/src/assets/samples/vpn-onboard-1.json +1 -1
  83. package/src/assets/samples/vpn-onboard-2.json +1 -1
  84. package/src/assets/samples/vpn-onboard-3.json +1 -1
  85. package/src/assets/samples/vpn-onboard-4.json +1 -1
  86. package/src/assets/samples/vpn-onboard-5.json +1 -1
  87. package/src/assets/samples/vpn-onboard-6.json +1 -1
  88. package/src/attribute-analyser/style/native/useExtractImageStyle.ts +46 -0
  89. package/src/attribute-analyser/style/native/useExtractTextStyle.ts +50 -0
  90. package/src/attribute-analyser/style/native/useExtractViewStyle.ts +32 -0
  91. package/src/attribute-analyser/style/web/useExtractImageStyle.ts +20 -0
  92. package/src/attribute-analyser/style/web/useExtractTextStyle.ts +27 -0
  93. package/src/attribute-analyser/style/web/useExtractViewStyle.ts +20 -0
  94. package/src/attributes-editor/AttributesEditorFields.tsx +248 -0
  95. package/src/attributes-editor/AttributesEditorView.tsx +360 -0
  96. package/src/attributes-editor/attributesEditorModelTypes.ts +86 -0
  97. package/src/attributes-editor/attributesEditorUtils.ts +102 -0
  98. package/src/attributes-editor/useAttributesEditorModel.ts +477 -0
  99. package/src/build-components/BIcon/BIcon.tsx +4 -4
  100. package/src/build-components/BIcon/BIconProps.generated.ts +6 -6
  101. package/src/build-components/BIcon/pattern.json +5 -6
  102. package/src/build-components/BackgroundImage/BackgroundImage.tsx +3 -2
  103. package/src/build-components/BackgroundImage/BackgroundImageProps.generated.ts +3 -3
  104. package/src/build-components/Button/Button.tsx +2 -2
  105. package/src/build-components/Button/ButtonProps.generated.ts +1 -1
  106. package/src/build-components/Button/pattern.json +17 -15
  107. package/src/build-components/Carousel/Carousel.tsx +1 -1
  108. package/src/build-components/Carousel/CarouselProps.generated.ts +2 -2
  109. package/src/build-components/CarouselButtons/CarouselButtons.tsx +4 -7
  110. package/src/build-components/CarouselButtons/CarouselButtonsProps.generated.ts +7 -7
  111. package/src/build-components/CarouselButtons/pattern.json +2 -1
  112. package/src/build-components/CarouselDots/CarouselDots.tsx +2 -2
  113. package/src/build-components/CarouselDots/CarouselDotsProps.generated.ts +9 -9
  114. package/src/build-components/CarouselItem/CarouselItem.tsx +1 -1
  115. package/src/build-components/CarouselItem/CarouselItemProps.generated.ts +1 -1
  116. package/src/build-components/CarouselProvider/CarouselProvider.tsx +1 -1
  117. package/src/build-components/CarouselProvider/CarouselProviderProps.generated.ts +1 -1
  118. package/src/build-components/Image/Image.tsx +1 -1
  119. package/src/build-components/Image/ImageProps.generated.ts +5 -3
  120. package/src/build-components/Image/pattern.json +10 -9
  121. package/src/build-components/Main/Main.tsx +2 -2
  122. package/src/build-components/Main/MainProps.generated.ts +2 -2
  123. package/src/build-components/Main/pattern.json +2 -1
  124. package/src/build-components/Onboard/OnboardProps.generated.ts +1 -1
  125. package/src/build-components/OnboardButton/OnboardButton.tsx +7 -6
  126. package/src/build-components/OnboardButton/OnboardButtonProps.generated.ts +14 -13
  127. package/src/build-components/OnboardButton/pattern.json +9 -7
  128. package/src/build-components/OnboardButtons/OnboardButtons.tsx +31 -31
  129. package/src/build-components/OnboardButtons/OnboardButtonsProps.generated.ts +14 -14
  130. package/src/build-components/OnboardButtons/pattern.json +9 -7
  131. package/src/build-components/OnboardDot/OnboardDot.tsx +7 -6
  132. package/src/build-components/OnboardDot/OnboardDotProps.generated.ts +26 -9
  133. package/src/build-components/OnboardFooter/OnboardFooter.tsx +17 -16
  134. package/src/build-components/OnboardFooter/OnboardFooterProps.generated.ts +10 -10
  135. package/src/build-components/OnboardFooter/pattern.json +16 -14
  136. package/src/build-components/OnboardImage/OnboardImage.tsx +8 -8
  137. package/src/build-components/OnboardImage/OnboardImageProps.generated.ts +8 -6
  138. package/src/build-components/OnboardImage/pattern.json +2 -1
  139. package/src/build-components/OnboardItem/OnboardItem.tsx +1 -1
  140. package/src/build-components/OnboardItem/OnboardItemProps.generated.ts +6 -3
  141. package/src/build-components/OnboardItem/pattern.json +2 -1
  142. package/src/build-components/OnboardProvider/OnboardProvider.tsx +1 -1
  143. package/src/build-components/OnboardProvider/OnboardProviderProps.generated.ts +5 -4
  144. package/src/build-components/OnboardProvider/pattern.json +2 -1
  145. package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.ts +3 -3
  146. package/src/build-components/OnboardTitle/OnboardTitleProps.generated.ts +3 -3
  147. package/src/build-components/PaywallBackground/PaywallBackground.tsx +1 -1
  148. package/src/build-components/PaywallBackground/PaywallBackgroundProps.generated.ts +1 -1
  149. package/src/build-components/PaywallCloseButton/PaywallCloseButton.tsx +5 -4
  150. package/src/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.ts +6 -6
  151. package/src/build-components/PaywallOptions/PaywallOptionButton.tsx +1 -1
  152. package/src/build-components/PaywallOptions/PaywallOptionsProps.generated.ts +1 -1
  153. package/src/build-components/PaywallProvider/PaywallProvider.tsx +1 -1
  154. package/src/build-components/PaywallProvider/PaywallProviderProps.generated.ts +1 -1
  155. package/src/build-components/PaywallSubscribeButton/PaywallSubscribeButton.tsx +1 -1
  156. package/src/build-components/PaywallSubscribeButton/PaywallSubscribeButtonProps.generated.ts +1 -1
  157. package/src/build-components/RadioButton/RadioButton.tsx +5 -5
  158. package/src/build-components/RadioButton/RadioButtonProps.generated.ts +4 -4
  159. package/src/build-components/RadioButton/pattern.json +9 -7
  160. package/src/build-components/Text/Text.tsx +6 -6
  161. package/src/build-components/Text/TextProps.generated.ts +3 -3
  162. package/src/build-components/Text/pattern.json +15 -11
  163. package/src/build-components/View/View.tsx +1 -1
  164. package/src/build-components/View/ViewProps.generated.ts +1 -1
  165. package/src/build-components/View/pattern.json +71 -66
  166. package/src/build-components/patterns.generated.ts +3059 -6008
  167. package/src/components/AttributesEditorPanel.tsx +2 -2
  168. package/src/index.native.ts +6 -9
  169. package/src/index.ts +1 -0
  170. package/src/migrations/migratePipe.ts +7 -3
  171. package/src/migrations/migrations/1.1.2_extract_component_attributes_from_style.ts +211 -0
  172. package/src/mockOS/components/MockOSRouter.tsx +3 -1
  173. package/src/mockOS/components/PermissionModal.tsx +20 -160
  174. package/src/mockOS/components/SubscriptionModal.tsx +41 -278
  175. package/src/pages/ProjectPage.tsx +12 -6
  176. package/src/styles/components/_attributes-editor.scss +122 -0
  177. package/src/styles/components/_mockos-router.scss +388 -0
  178. package/src/styles/components/_onboard.scss +23 -0
  179. package/src/styles/index.scss +1 -0
  180. package/src/types/PreviewConfig.ts +1 -5
  181. package/src/utils/analyseNodeByPatterns.ts +39 -4
  182. package/src/utils/extractTextStyle/extractTextStyle.ts +4 -1
  183. package/src/utils/getMeta.ts +15 -0
  184. package/src/utils/patterns.ts +47 -4
  185. package/dist/hooks/useExtractImageStyle.d.ts +0 -5
  186. package/dist/hooks/useExtractTextStyle.d.ts +0 -3
  187. package/dist/hooks/useExtractViewStyle.d.ts +0 -3
  188. package/dist/migrations/migrations/1.1.0_normalize_style_attributes.d.ts +0 -2
  189. package/src/hooks/useExtractImageStyle.ts +0 -30
  190. package/src/hooks/useExtractTextStyle.ts +0 -34
  191. package/src/hooks/useExtractViewStyle.ts +0 -30
  192. package/src/migrations/migrations/1.1.0_normalize_style_attributes.ts +0 -80
@@ -13,8 +13,22 @@ import { createComponentsIndex } from './utils/createComponentsIndex.js';
13
13
  const argv = yargs(hideBin(process.argv)).argv;
14
14
  export const args = argv;
15
15
  const builderPath = args.path || 'node_modules/@developer_tribe/react-builder';
16
- const selectedComponents = args.components || [];
16
+ const selectedComponents = Array.isArray(args.components)
17
+ ? args.components
18
+ : typeof args.components === 'string'
19
+ ? [args.components]
20
+ : [];
17
21
  const name = args.name || 'build-components';
22
+ function parseBooleanFlag(value, defaultValue) {
23
+ if (typeof value === 'boolean') return value;
24
+ if (typeof value === 'string') {
25
+ const normalized = value.trim().toLowerCase();
26
+ if (['false', '0', 'no', 'off'].includes(normalized)) return false;
27
+ if (['true', '1', 'yes', 'on'].includes(normalized)) return true;
28
+ }
29
+ return defaultValue;
30
+ }
31
+ const component = parseBooleanFlag(args.component, true);
18
32
  const targetPath = process.cwd();
19
33
 
20
34
  function run() {
@@ -37,9 +51,12 @@ function run() {
37
51
  createRenderNodeGenerated(
38
52
  builderComponentsPath,
39
53
  targetComponentsPath,
40
- selectedComponents
54
+ selectedComponents,
55
+ { component }
41
56
  );
42
- createComponentsIndex(targetComponentsPath, selectedComponents);
57
+ createComponentsIndex(targetComponentsPath, selectedComponents, {
58
+ component,
59
+ });
43
60
  }
44
61
 
45
62
  run();
@@ -18,6 +18,12 @@
18
18
  "type": "string",
19
19
  "describe": "name of the structure",
20
20
  "demandOption": false
21
+ },
22
+ "component": {
23
+ "type": "boolean",
24
+ "default": true,
25
+ "describe": "generate RenderNode as a React component (.tsx) when true; generate a plain function (.ts) when false",
26
+ "demandOption": false
21
27
  }
22
28
  }
23
29
  }
@@ -1,7 +1,12 @@
1
1
  import fs from 'fs';
2
2
  import Path from 'path';
3
3
 
4
- export function createComponentsIndex(buildComponentsTarget, components) {
4
+ export function createComponentsIndex(
5
+ buildComponentsTarget,
6
+ components,
7
+ options = {}
8
+ ) {
9
+ const { component = true } = options;
5
10
  if (!fs.existsSync(buildComponentsTarget)) {
6
11
  fs.mkdirSync(buildComponentsTarget, { recursive: true });
7
12
  }
@@ -9,8 +14,9 @@ export function createComponentsIndex(buildComponentsTarget, components) {
9
14
  const targetPath = Path.join(buildComponentsTarget, 'index.ts');
10
15
 
11
16
  const header = '/* AUTO-GENERATED FILE - DO NOT EDIT */\n\n';
12
- const renderNodeExport =
13
- "export { default as RenderNode } from './RenderNode.generated';";
17
+ const renderNodeExport = component
18
+ ? "export { default as RenderNode } from './RenderNode.generated';"
19
+ : "export { renderNode } from './RenderNode.generated';";
14
20
 
15
21
  const componentExports = components
16
22
  .map(name => `export { default as ${name} } from './${name}/${name}';`)
@@ -15,29 +15,42 @@ function readPatternType(builderComponentsPath, componentName) {
15
15
  export function createRenderNodeGenerated(
16
16
  builderComponentsPath,
17
17
  buildComponentsTarget,
18
- components
18
+ components,
19
+ options = {}
19
20
  ) {
21
+ const { component = true } = options;
20
22
  if (!fs.existsSync(buildComponentsTarget)) {
21
23
  fs.mkdirSync(buildComponentsTarget, { recursive: true });
22
24
  }
23
25
 
24
- const targetPath = Path.join(
25
- buildComponentsTarget,
26
- 'RenderNode.generated.tsx'
27
- );
26
+ const tsxPath = Path.join(buildComponentsTarget, 'RenderNode.generated.tsx');
27
+ const tsPath = Path.join(buildComponentsTarget, 'RenderNode.generated.ts');
28
+ const targetPath = component ? tsxPath : tsPath;
28
29
 
29
30
  const imports = components
30
- .map(name => `import ${name} from './${name}/${name}';`)
31
+ .map(name => 'import ' + name + " from './" + name + '/' + name + "';")
31
32
  .join('\n');
32
33
 
33
34
  const cases = components
34
35
  .map(name => {
35
36
  const type = readPatternType(builderComponentsPath, name);
36
- return ` case ${JSON.stringify(type)}:\n return <${name} node={simpleNode} />;`;
37
+ const caseLabel = JSON.stringify(type);
38
+ return component
39
+ ? ' case ' +
40
+ caseLabel +
41
+ ':\n return <' +
42
+ name +
43
+ ' node={simpleNode} />;'
44
+ : ' case ' +
45
+ caseLabel +
46
+ ':\n return React.createElement(' +
47
+ name +
48
+ ', { node: simpleNode });';
37
49
  })
38
50
  .join('\n');
39
51
 
40
- const content = `/* AUTO-GENERATED FILE - DO NOT EDIT */
52
+ const content = component
53
+ ? `/* AUTO-GENERATED FILE - DO NOT EDIT */
41
54
  import React from 'react';
42
55
  import { Node, NodeData, isNodeArray, isNodeNullOrUndefined, isNodeString } from '@developer_tribe/react-builder';
43
56
  import { other } from './other';
@@ -69,9 +82,54 @@ ${cases}
69
82
  }
70
83
 
71
84
  export default React.memo(RenderNode);
85
+ `
86
+ : `/* AUTO-GENERATED FILE - DO NOT EDIT */
87
+ import React from 'react';
88
+ import {
89
+ Node,
90
+ NodeData,
91
+ isNodeArray,
92
+ isNodeNullOrUndefined,
93
+ isNodeString,
94
+ } from '@developer_tribe/react-builder';
95
+ import { other } from './other';
96
+ ${imports}
97
+
98
+ export function renderNode(node: Node): React.ReactNode {
99
+ if (isNodeNullOrUndefined(node)) {
100
+ return null;
101
+ }
102
+ if (isNodeString(node)) {
103
+ // NOTE: In React Native, raw strings must be rendered inside a <Text>.
104
+ // This function mode intentionally returns a string so the caller can decide how to wrap it.
105
+ return node as string;
106
+ }
107
+ if (isNodeArray(node)) {
108
+ return React.createElement(
109
+ React.Fragment,
110
+ null,
111
+ (node as Node[]).map((item: Node, index) =>
112
+ React.createElement(React.Fragment, { key: index }, renderNode(item))
113
+ )
114
+ );
115
+ }
116
+
117
+ const simpleNode = node as NodeData;
118
+ switch (simpleNode?.type) {
119
+ ${cases}
120
+ default:
121
+ return other(simpleNode?.type, node);
122
+ }
123
+ }
72
124
  `;
73
125
 
74
126
  fs.writeFileSync(targetPath, content, 'utf8');
127
+
128
+ // Keep the output stable by removing the opposite file if it exists.
129
+ const stalePath = component ? tsPath : tsxPath;
130
+ if (fs.existsSync(stalePath)) {
131
+ fs.rmSync(stalePath, { force: true });
132
+ }
75
133
  }
76
134
 
77
135
  // no default export