@developer_tribe/react-builder 0.1.31 → 1.0.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 (120) hide show
  1. package/dist/DeviceMockFrame.d.ts +1 -17
  2. package/dist/RenderPage.d.ts +1 -9
  3. package/dist/build-components/Button/ButtonProps.generated.d.ts +2 -1
  4. package/dist/build-components/CarouselButtons/CarouselButtonsProps.generated.d.ts +2 -1
  5. package/dist/build-components/CarouselDots/CarouselDotsProps.generated.d.ts +2 -1
  6. package/dist/build-components/Image/ImageProps.generated.d.ts +2 -1
  7. package/dist/build-components/OnboardButton/OnboardButtonProps.generated.d.ts +8 -4
  8. package/dist/build-components/OnboardButtons/OnboardButtonsProps.generated.d.ts +6 -3
  9. package/dist/build-components/OnboardDot/OnboardDotProps.generated.d.ts +2 -1
  10. package/dist/build-components/OnboardFooter/OnboardFooterProps.generated.d.ts +10 -5
  11. package/dist/build-components/OnboardImage/OnboardImageProps.generated.d.ts +4 -1
  12. package/dist/build-components/OnboardItem/OnboardItemProps.generated.d.ts +4 -2
  13. package/dist/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.d.ts +10 -5
  14. package/dist/build-components/OnboardTitle/OnboardTitleProps.generated.d.ts +10 -5
  15. package/dist/build-components/Text/TextProps.generated.d.ts +10 -5
  16. package/dist/build-components/View/ViewProps.generated.d.ts +6 -3
  17. package/dist/build-components/index.d.ts +1 -0
  18. package/dist/build-components/patterns.generated.d.ts +7 -2
  19. package/dist/components/AttributesEditorPanel.d.ts +9 -0
  20. package/dist/components/Breadcrumb.d.ts +13 -0
  21. package/dist/components/Builder.d.ts +9 -0
  22. package/dist/components/EditorHeader.d.ts +15 -0
  23. package/dist/index.cjs.js +7 -4
  24. package/dist/index.cjs.js.map +1 -0
  25. package/dist/index.d.ts +8 -4
  26. package/dist/index.esm.js +7 -4
  27. package/dist/index.esm.js.map +1 -0
  28. package/dist/pages/ProjectPage.d.ts +11 -0
  29. package/dist/pages/tabs/BuilderTab.d.ts +9 -0
  30. package/dist/pages/tabs/DebugTab.d.ts +7 -0
  31. package/dist/pages/tabs/PreviewTab.d.ts +3 -0
  32. package/dist/store.d.ts +17 -18
  33. package/dist/styles.css +1 -1
  34. package/dist/types/PreviewConfig.d.ts +6 -3
  35. package/dist/types/Project.d.ts +12 -2
  36. package/dist/utils/copyNode.d.ts +2 -0
  37. package/dist/utils/logger.d.ts +11 -0
  38. package/dist/utils/useLogRender.d.ts +1 -0
  39. package/package.json +17 -9
  40. package/scripts/prebuild/utils/createBuildComponentsIndex.js +15 -1
  41. package/scripts/prebuild/utils/createGeneratedProps.js +64 -5
  42. package/src/AttributesEditor.tsx +2 -0
  43. package/src/DeviceMockFrame.tsx +22 -31
  44. package/src/RenderPage.tsx +5 -42
  45. package/src/assets/images/android.svg +43 -0
  46. package/src/assets/images/apple.svg +16 -0
  47. package/src/assets/images/background.jpg +0 -0
  48. package/src/assets/samples/carousel-sample.json +2 -3
  49. package/src/assets/samples/getSamples.ts +51 -8
  50. package/src/assets/samples/simple-1.json +1 -2
  51. package/src/assets/samples/simple-2.json +1 -2
  52. package/src/assets/samples/vpn-onboard-1.json +1 -2
  53. package/src/assets/samples/vpn-onboard-2.json +1 -2
  54. package/src/assets/samples/vpn-onboard-3.json +1 -2
  55. package/src/assets/samples/vpn-onboard-4.json +1 -2
  56. package/src/assets/samples/vpn-onboard-5.json +1024 -0
  57. package/src/assets/samples/vpn-onboard-6.json +708 -0
  58. package/src/build-components/Button/Button.tsx +2 -0
  59. package/src/build-components/Button/ButtonProps.generated.ts +14 -12
  60. package/src/build-components/Carousel/Carousel.tsx +2 -0
  61. package/src/build-components/CarouselButtons/CarouselButtons.tsx +2 -0
  62. package/src/build-components/CarouselButtons/CarouselButtonsProps.generated.ts +6 -1
  63. package/src/build-components/CarouselDots/CarouselDots.tsx +2 -0
  64. package/src/build-components/CarouselDots/CarouselDotsProps.generated.ts +9 -7
  65. package/src/build-components/CarouselItem/CarouselItem.tsx +2 -0
  66. package/src/build-components/Image/Image.tsx +2 -0
  67. package/src/build-components/Image/ImageProps.generated.ts +3 -1
  68. package/src/build-components/Onboard/Onboard.tsx +2 -0
  69. package/src/build-components/OnboardButton/OnboardButton.tsx +7 -4
  70. package/src/build-components/OnboardButton/OnboardButtonProps.generated.ts +14 -9
  71. package/src/build-components/OnboardButton/pattern.json +3 -2
  72. package/src/build-components/OnboardButtons/OnboardButtons.tsx +7 -7
  73. package/src/build-components/OnboardButtons/OnboardButtonsProps.generated.ts +10 -3
  74. package/src/build-components/OnboardDot/OnboardDot.tsx +2 -0
  75. package/src/build-components/OnboardDot/OnboardDotProps.generated.ts +9 -7
  76. package/src/build-components/OnboardFooter/OnboardFooter.tsx +5 -3
  77. package/src/build-components/OnboardFooter/OnboardFooterProps.generated.ts +33 -22
  78. package/src/build-components/OnboardImage/OnboardImage.tsx +26 -1
  79. package/src/build-components/OnboardImage/OnboardImageProps.generated.ts +5 -1
  80. package/src/build-components/OnboardImage/pattern.json +3 -5
  81. package/src/build-components/OnboardItem/OnboardItem.tsx +2 -0
  82. package/src/build-components/OnboardItem/OnboardItemProps.generated.ts +5 -2
  83. package/src/build-components/OnboardProvider/OnboardProvider.tsx +2 -0
  84. package/src/build-components/OnboardSubtitle/OnboardSubtitle.tsx +2 -0
  85. package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.ts +33 -22
  86. package/src/build-components/OnboardTitle/OnboardTitle.tsx +2 -0
  87. package/src/build-components/OnboardTitle/OnboardTitleProps.generated.ts +33 -22
  88. package/src/build-components/Text/Text.tsx +5 -3
  89. package/src/build-components/Text/TextProps.generated.ts +33 -22
  90. package/src/build-components/View/View.tsx +2 -0
  91. package/src/build-components/View/ViewProps.generated.ts +18 -9
  92. package/src/build-components/index.ts +22 -0
  93. package/src/build-components/patterns.generated.ts +7 -2
  94. package/src/components/AttributesEditorPanel.tsx +112 -0
  95. package/src/components/Breadcrumb.tsx +48 -0
  96. package/src/components/Builder.tsx +272 -0
  97. package/src/components/EditorHeader.tsx +186 -0
  98. package/src/index.ts +8 -4
  99. package/src/pages/ProjectPage.tsx +152 -0
  100. package/src/pages/tabs/BuilderTab.tsx +33 -0
  101. package/src/pages/tabs/DebugTab.tsx +23 -0
  102. package/src/pages/tabs/PreviewTab.tsx +194 -0
  103. package/src/size-matters/index.ts +5 -1
  104. package/src/store.ts +60 -38
  105. package/src/styles/_mixins.scss +21 -0
  106. package/src/styles/_variables.scss +27 -0
  107. package/src/styles/builder.scss +60 -0
  108. package/src/styles/components.scss +88 -0
  109. package/src/styles/editor.scss +174 -0
  110. package/src/styles/global.scss +200 -0
  111. package/src/styles/index.scss +7 -0
  112. package/src/styles/pages.scss +2 -0
  113. package/src/types/PreviewConfig.ts +14 -5
  114. package/src/types/Project.ts +15 -2
  115. package/src/utils/copyNode.ts +7 -0
  116. package/src/utils/extractTextStyle.ts +4 -2
  117. package/src/utils/getDevices.ts +1 -0
  118. package/src/utils/logger.ts +76 -0
  119. package/src/utils/novaToJson.ts +5 -0
  120. package/src/utils/useLogRender.ts +13 -0
@@ -1,17 +1,26 @@
1
- import { TargetedScreenSize } from './TargetedScreenSize';
2
-
3
- export interface PreviewConfig {
1
+ export interface AppConfig {
4
2
  theme: 'light' | 'dark';
5
- screenSize: TargetedScreenSize;
6
- isRtl: boolean;
3
+ isRtl: boolean; //This could be device in future
7
4
  screenStyle: {
8
5
  light: { backgroundColor: string; color: string; seperatorColor?: string };
9
6
  dark: { backgroundColor: string; color: string; seperatorColor?: string };
10
7
  };
11
8
  localication: Localication;
12
9
  defaultLanguage?: string;
10
+ baseSize: { width: number; height: number };
13
11
  }
14
12
 
13
+ export const defaultAppConfig: AppConfig = {
14
+ theme: 'light',
15
+ isRtl: false,
16
+ screenStyle: {
17
+ light: { backgroundColor: '#FDFDFD', color: '#161827' },
18
+ dark: { backgroundColor: '#12131A', color: '#E9EBF9' },
19
+ },
20
+ localication: {},
21
+ baseSize: { width: 375, height: 812 },
22
+ };
23
+
15
24
  export type Localication = {
16
25
  [key: string]: {
17
26
  [key: string]: string;
@@ -1,11 +1,24 @@
1
1
  import { Node } from '../types/Node';
2
- import { PreviewConfig } from './PreviewConfig';
2
+ import { AppConfig } from './PreviewConfig';
3
3
 
4
4
  export interface ProjectBase<T> {
5
5
  name: string;
6
6
  version: string;
7
7
  data: T;
8
- previewConfig?: PreviewConfig;
8
+ appConfig?: AppConfig;
9
9
  }
10
10
 
11
11
  export interface Project extends ProjectBase<Node> {}
12
+
13
+ export type LogLevel = 'NONE' | 'ERROR' | 'WARN' | 'INFO' | 'VERBOSE';
14
+
15
+ export type LogSource = string;
16
+
17
+ export interface LogEntry {
18
+ id: string;
19
+ timestamp: number;
20
+ level: LogLevel;
21
+ source: LogSource;
22
+ message: string;
23
+ payload?: unknown;
24
+ }
@@ -0,0 +1,7 @@
1
+ import { useRenderStore } from '../store';
2
+ import { Node } from '../types/Node';
3
+
4
+ export function copyNode(node: Node) {
5
+ const { setCopiedNode } = useRenderStore.getState();
6
+ setCopiedNode(node);
7
+ }
@@ -7,8 +7,10 @@ export function extractTextStyle<T extends TextPropsGenerated['attributes']>(
7
7
  node: NodeData<T>,
8
8
  ) {
9
9
  const attributes = node.attributes;
10
-
11
- const { screenStyle, theme } = useRenderStore.getState();
10
+ //TODO: it should be passed as a prop to the function (need a state)
11
+ const {
12
+ appConfig: { screenStyle, theme },
13
+ } = useRenderStore.getState();
12
14
  const fallbackColor =
13
15
  theme === 'light' ? screenStyle.light.color : screenStyle.dark.color;
14
16
 
@@ -11,6 +11,7 @@ export function getDevices(): Device[] {
11
11
  return deviceList;
12
12
  }
13
13
 
14
+ //TODO: object instead of function
14
15
  export function getDefaultDevice(): Device {
15
16
  return getDevices()[0];
16
17
  }
@@ -0,0 +1,76 @@
1
+ import { useRenderStore } from '../store';
2
+ import type { LogLevel, LogSource } from '../types/Project';
3
+
4
+ const levelPriority: Record<Exclude<LogLevel, 'NONE'>, number> = {
5
+ ERROR: 0,
6
+ WARN: 1,
7
+ INFO: 2,
8
+ VERBOSE: 3,
9
+ };
10
+
11
+ function shouldLog(currentLevel: LogLevel, level: LogLevel): boolean {
12
+ if (currentLevel === 'NONE' || level === 'NONE') return false;
13
+ const curr = levelPriority[currentLevel as Exclude<LogLevel, 'NONE'>];
14
+ const incoming = levelPriority[level as Exclude<LogLevel, 'NONE'>];
15
+ return incoming <= curr;
16
+ }
17
+
18
+ function consoleLog(
19
+ level: LogLevel,
20
+ source: LogSource,
21
+ message: string,
22
+ payload?: unknown,
23
+ ) {
24
+ const prefix = `[${source}] ${message}`;
25
+ switch (level) {
26
+ case 'ERROR':
27
+ // eslint-disable-next-line no-console
28
+ console.error(prefix, payload);
29
+ break;
30
+ case 'WARN':
31
+ // eslint-disable-next-line no-console
32
+ console.warn(prefix, payload);
33
+ break;
34
+ case 'INFO':
35
+ // eslint-disable-next-line no-console
36
+ console.info(prefix, payload);
37
+ break;
38
+ case 'VERBOSE':
39
+ // eslint-disable-next-line no-console
40
+ console.debug(prefix, payload);
41
+ break;
42
+ default:
43
+ break;
44
+ }
45
+ }
46
+
47
+ export const logger = {
48
+ setLevel(level: LogLevel) {
49
+ useRenderStore.getState().setLogLevel(level);
50
+ // eslint-disable-next-line no-console
51
+ console.info(`[Logger] level set to ${level}`);
52
+ },
53
+ log(level: LogLevel, source: LogSource, message: string, payload?: unknown) {
54
+ const { logLevel, addLog } = useRenderStore.getState();
55
+ if (!shouldLog(logLevel, level)) return;
56
+ addLog({ level, source, message, payload });
57
+ consoleLog(level, source, message, payload);
58
+ },
59
+ verbose(source: LogSource, message: string, payload?: unknown) {
60
+ this.log('VERBOSE', source, message, payload);
61
+ },
62
+ info(source: LogSource, message: string, payload?: unknown) {
63
+ this.log('INFO', source, message, payload);
64
+ },
65
+ warn(source: LogSource, message: string, payload?: unknown) {
66
+ this.log('WARN', source, message, payload);
67
+ },
68
+ error(source: LogSource, message: string, payload?: unknown) {
69
+ this.log('ERROR', source, message, payload);
70
+ },
71
+ clear() {
72
+ useRenderStore.getState().clearLogs();
73
+ },
74
+ };
75
+
76
+ export type { LogLevel };
@@ -172,6 +172,9 @@ function buildCarouselItem(
172
172
  // derive resizeMode from is_bg_image and try to extract borderRadius from styles
173
173
  const isBgImage = Boolean(comp?.attributes?.is_bg_image);
174
174
  const imageStyle = extractViewStyleAttributesFromComponent(comp);
175
+ // optional rich media
176
+ const lottie = comp?.attributes?.lottie as string | undefined;
177
+ const videoUrl = comp?.attributes?.video_url as string | undefined;
175
178
 
176
179
  if (src) {
177
180
  children.push({
@@ -183,6 +186,8 @@ function buildCarouselItem(
183
186
  ...(typeof imageStyle.borderRadius === 'number'
184
187
  ? { borderRadius: imageStyle.borderRadius }
185
188
  : {}),
189
+ ...(typeof lottie === 'string' ? { lottie } : {}),
190
+ ...(typeof videoUrl === 'string' ? { video_url: videoUrl } : {}),
186
191
  },
187
192
  children: undefined as unknown as Node,
188
193
  } as unknown as NodeData);
@@ -0,0 +1,13 @@
1
+ import { useEffect } from 'react';
2
+ import { logger } from './logger';
3
+
4
+ export function useLogRender(sourceName: string, payload?: unknown) {
5
+ useEffect(() => {
6
+ logger.verbose(sourceName, 'rendered', payload);
7
+ return () => {
8
+ logger.verbose(sourceName, 'unmount');
9
+ };
10
+ // We intentionally log once per mount/update cycle only for rendered
11
+ // eslint-disable-next-line react-hooks/exhaustive-deps
12
+ }, []);
13
+ }