@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.
- package/dist/DeviceMockFrame.d.ts +1 -17
- package/dist/RenderPage.d.ts +1 -9
- package/dist/build-components/Button/ButtonProps.generated.d.ts +2 -1
- package/dist/build-components/CarouselButtons/CarouselButtonsProps.generated.d.ts +2 -1
- package/dist/build-components/CarouselDots/CarouselDotsProps.generated.d.ts +2 -1
- package/dist/build-components/Image/ImageProps.generated.d.ts +2 -1
- package/dist/build-components/OnboardButton/OnboardButtonProps.generated.d.ts +8 -4
- package/dist/build-components/OnboardButtons/OnboardButtonsProps.generated.d.ts +6 -3
- package/dist/build-components/OnboardDot/OnboardDotProps.generated.d.ts +2 -1
- package/dist/build-components/OnboardFooter/OnboardFooterProps.generated.d.ts +10 -5
- package/dist/build-components/OnboardImage/OnboardImageProps.generated.d.ts +4 -1
- package/dist/build-components/OnboardItem/OnboardItemProps.generated.d.ts +4 -2
- package/dist/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.d.ts +10 -5
- package/dist/build-components/OnboardTitle/OnboardTitleProps.generated.d.ts +10 -5
- package/dist/build-components/Text/TextProps.generated.d.ts +10 -5
- package/dist/build-components/View/ViewProps.generated.d.ts +6 -3
- package/dist/build-components/index.d.ts +1 -0
- package/dist/build-components/patterns.generated.d.ts +7 -2
- package/dist/components/AttributesEditorPanel.d.ts +9 -0
- package/dist/components/Breadcrumb.d.ts +13 -0
- package/dist/components/Builder.d.ts +9 -0
- package/dist/components/EditorHeader.d.ts +15 -0
- package/dist/index.cjs.js +7 -4
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +8 -4
- package/dist/index.esm.js +7 -4
- package/dist/index.esm.js.map +1 -0
- package/dist/pages/ProjectPage.d.ts +11 -0
- package/dist/pages/tabs/BuilderTab.d.ts +9 -0
- package/dist/pages/tabs/DebugTab.d.ts +7 -0
- package/dist/pages/tabs/PreviewTab.d.ts +3 -0
- package/dist/store.d.ts +17 -18
- package/dist/styles.css +1 -1
- package/dist/types/PreviewConfig.d.ts +6 -3
- package/dist/types/Project.d.ts +12 -2
- package/dist/utils/copyNode.d.ts +2 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/useLogRender.d.ts +1 -0
- package/package.json +17 -9
- package/scripts/prebuild/utils/createBuildComponentsIndex.js +15 -1
- package/scripts/prebuild/utils/createGeneratedProps.js +64 -5
- package/src/AttributesEditor.tsx +2 -0
- package/src/DeviceMockFrame.tsx +22 -31
- package/src/RenderPage.tsx +5 -42
- package/src/assets/images/android.svg +43 -0
- package/src/assets/images/apple.svg +16 -0
- package/src/assets/images/background.jpg +0 -0
- package/src/assets/samples/carousel-sample.json +2 -3
- package/src/assets/samples/getSamples.ts +51 -8
- package/src/assets/samples/simple-1.json +1 -2
- package/src/assets/samples/simple-2.json +1 -2
- package/src/assets/samples/vpn-onboard-1.json +1 -2
- package/src/assets/samples/vpn-onboard-2.json +1 -2
- package/src/assets/samples/vpn-onboard-3.json +1 -2
- package/src/assets/samples/vpn-onboard-4.json +1 -2
- package/src/assets/samples/vpn-onboard-5.json +1024 -0
- package/src/assets/samples/vpn-onboard-6.json +708 -0
- package/src/build-components/Button/Button.tsx +2 -0
- package/src/build-components/Button/ButtonProps.generated.ts +14 -12
- package/src/build-components/Carousel/Carousel.tsx +2 -0
- package/src/build-components/CarouselButtons/CarouselButtons.tsx +2 -0
- package/src/build-components/CarouselButtons/CarouselButtonsProps.generated.ts +6 -1
- package/src/build-components/CarouselDots/CarouselDots.tsx +2 -0
- package/src/build-components/CarouselDots/CarouselDotsProps.generated.ts +9 -7
- package/src/build-components/CarouselItem/CarouselItem.tsx +2 -0
- package/src/build-components/Image/Image.tsx +2 -0
- package/src/build-components/Image/ImageProps.generated.ts +3 -1
- package/src/build-components/Onboard/Onboard.tsx +2 -0
- package/src/build-components/OnboardButton/OnboardButton.tsx +7 -4
- package/src/build-components/OnboardButton/OnboardButtonProps.generated.ts +14 -9
- package/src/build-components/OnboardButton/pattern.json +3 -2
- package/src/build-components/OnboardButtons/OnboardButtons.tsx +7 -7
- package/src/build-components/OnboardButtons/OnboardButtonsProps.generated.ts +10 -3
- package/src/build-components/OnboardDot/OnboardDot.tsx +2 -0
- package/src/build-components/OnboardDot/OnboardDotProps.generated.ts +9 -7
- package/src/build-components/OnboardFooter/OnboardFooter.tsx +5 -3
- package/src/build-components/OnboardFooter/OnboardFooterProps.generated.ts +33 -22
- package/src/build-components/OnboardImage/OnboardImage.tsx +26 -1
- package/src/build-components/OnboardImage/OnboardImageProps.generated.ts +5 -1
- package/src/build-components/OnboardImage/pattern.json +3 -5
- package/src/build-components/OnboardItem/OnboardItem.tsx +2 -0
- package/src/build-components/OnboardItem/OnboardItemProps.generated.ts +5 -2
- package/src/build-components/OnboardProvider/OnboardProvider.tsx +2 -0
- package/src/build-components/OnboardSubtitle/OnboardSubtitle.tsx +2 -0
- package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.ts +33 -22
- package/src/build-components/OnboardTitle/OnboardTitle.tsx +2 -0
- package/src/build-components/OnboardTitle/OnboardTitleProps.generated.ts +33 -22
- package/src/build-components/Text/Text.tsx +5 -3
- package/src/build-components/Text/TextProps.generated.ts +33 -22
- package/src/build-components/View/View.tsx +2 -0
- package/src/build-components/View/ViewProps.generated.ts +18 -9
- package/src/build-components/index.ts +22 -0
- package/src/build-components/patterns.generated.ts +7 -2
- package/src/components/AttributesEditorPanel.tsx +112 -0
- package/src/components/Breadcrumb.tsx +48 -0
- package/src/components/Builder.tsx +272 -0
- package/src/components/EditorHeader.tsx +186 -0
- package/src/index.ts +8 -4
- package/src/pages/ProjectPage.tsx +152 -0
- package/src/pages/tabs/BuilderTab.tsx +33 -0
- package/src/pages/tabs/DebugTab.tsx +23 -0
- package/src/pages/tabs/PreviewTab.tsx +194 -0
- package/src/size-matters/index.ts +5 -1
- package/src/store.ts +60 -38
- package/src/styles/_mixins.scss +21 -0
- package/src/styles/_variables.scss +27 -0
- package/src/styles/builder.scss +60 -0
- package/src/styles/components.scss +88 -0
- package/src/styles/editor.scss +174 -0
- package/src/styles/global.scss +200 -0
- package/src/styles/index.scss +7 -0
- package/src/styles/pages.scss +2 -0
- package/src/types/PreviewConfig.ts +14 -5
- package/src/types/Project.ts +15 -2
- package/src/utils/copyNode.ts +7 -0
- package/src/utils/extractTextStyle.ts +4 -2
- package/src/utils/getDevices.ts +1 -0
- package/src/utils/logger.ts +76 -0
- package/src/utils/novaToJson.ts +5 -0
- package/src/utils/useLogRender.ts +13 -0
|
@@ -1,17 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export interface PreviewConfig {
|
|
1
|
+
export interface AppConfig {
|
|
4
2
|
theme: 'light' | 'dark';
|
|
5
|
-
|
|
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;
|
package/src/types/Project.ts
CHANGED
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import { Node } from '../types/Node';
|
|
2
|
-
import {
|
|
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
|
-
|
|
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
|
+
}
|
|
@@ -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 {
|
|
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
|
|
package/src/utils/getDevices.ts
CHANGED
|
@@ -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 };
|
package/src/utils/novaToJson.ts
CHANGED
|
@@ -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
|
+
}
|