@developer_tribe/react-builder 0.1.0 → 0.1.2

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 (107) hide show
  1. package/package.json +4 -2
  2. package/scripts/build-components.js +550 -0
  3. package/scripts/prebuild.js +11 -0
  4. package/src/AttributesEditor.tsx +107 -0
  5. package/src/RenderMainNode.tsx +37 -0
  6. package/src/RenderPage.tsx +61 -0
  7. package/src/assets/devices.json +730 -0
  8. package/src/assets/samples/carousel-sample.json +108 -0
  9. package/src/assets/samples/getSamples.ts +28 -0
  10. package/src/assets/samples/simple-1.json +46 -0
  11. package/src/assets/samples/simple-2.json +233 -0
  12. package/src/assets/samples/vpn-onboard-1.json +799 -0
  13. package/src/assets/samples/vpn-onboard-2.json +790 -0
  14. package/src/assets/samples/vpn-onboard-3.json +803 -0
  15. package/src/assets/samples/vpn-onboard-4.json +804 -0
  16. package/src/build-components/Button/Button.tsx +13 -0
  17. package/src/build-components/Button/ButtonProps.generated.ts +21 -0
  18. package/src/build-components/Button/ButtonProps.ts +3 -0
  19. package/src/build-components/Button/pattern.json +25 -0
  20. package/src/build-components/Carousel/Carousel.tsx +27 -0
  21. package/src/build-components/Carousel/CarouselProps.generated.ts +6 -0
  22. package/src/build-components/Carousel/CarouselProps.ts +3 -0
  23. package/src/build-components/Carousel/pattern.json +9 -0
  24. package/src/build-components/CarouselButtons/CarouselButtons.tsx +47 -0
  25. package/src/build-components/CarouselButtons/CarouselButtonsProps.generated.ts +9 -0
  26. package/src/build-components/CarouselButtons/CarouselButtonsProps.ts +3 -0
  27. package/src/build-components/CarouselButtons/pattern.json +12 -0
  28. package/src/build-components/CarouselDots/CarouselDots.tsx +40 -0
  29. package/src/build-components/CarouselDots/CarouselDotsProps.generated.ts +14 -0
  30. package/src/build-components/CarouselDots/CarouselDotsProps.ts +3 -0
  31. package/src/build-components/CarouselDots/pattern.json +18 -0
  32. package/src/build-components/CarouselItem/CarouselItem.tsx +18 -0
  33. package/src/build-components/CarouselItem/CarouselItemProps.generated.ts +6 -0
  34. package/src/build-components/CarouselItem/CarouselItemProps.ts +3 -0
  35. package/src/build-components/CarouselItem/pattern.json +9 -0
  36. package/src/build-components/CarouselProvider/CarouselProvider.tsx +26 -0
  37. package/src/build-components/CarouselProvider/CarouselProviderProps.generated.ts +6 -0
  38. package/src/build-components/CarouselProvider/CarouselProviderProps.ts +3 -0
  39. package/src/build-components/CarouselProvider/pattern.json +9 -0
  40. package/src/build-components/Image/Image.tsx +35 -0
  41. package/src/build-components/Image/ImageProps.generated.ts +12 -0
  42. package/src/build-components/Image/ImageProps.ts +3 -0
  43. package/src/build-components/Image/pattern.json +15 -0
  44. package/src/build-components/Onboard/Onboard.tsx +14 -0
  45. package/src/build-components/Onboard/OnboardProps.generated.ts +6 -0
  46. package/src/build-components/Onboard/OnboardProps.ts +3 -0
  47. package/src/build-components/Onboard/pattern.json +9 -0
  48. package/src/build-components/OnboardBoardTitle/OnboardBoardTitle.tsx +28 -0
  49. package/src/build-components/OnboardBoardTitle/OnboardBoardTitleProps.generated.ts +21 -0
  50. package/src/build-components/OnboardBoardTitle/OnboardBoardTitleProps.ts +4 -0
  51. package/src/build-components/OnboardBoardTitle/pattern.json +25 -0
  52. package/src/build-components/OnboardButton/OnboardButton.tsx +59 -0
  53. package/src/build-components/OnboardButton/OnboardButtonProps.generated.ts +13 -0
  54. package/src/build-components/OnboardButton/OnboardButtonProps.ts +3 -0
  55. package/src/build-components/OnboardButton/pattern.json +16 -0
  56. package/src/build-components/OnboardButtons/OnboardButtons.tsx +76 -0
  57. package/src/build-components/OnboardButtons/OnboardButtonsProps.generated.ts +12 -0
  58. package/src/build-components/OnboardButtons/OnboardButtonsProps.ts +3 -0
  59. package/src/build-components/OnboardButtons/pattern.json +15 -0
  60. package/src/build-components/OnboardExpandingDot/OnboardExpandingDot.tsx +14 -0
  61. package/src/build-components/OnboardExpandingDot/OnboardExpandingDotProps.generated.ts +14 -0
  62. package/src/build-components/OnboardExpandingDot/OnboardExpandingDotProps.ts +4 -0
  63. package/src/build-components/OnboardExpandingDot/pattern.json +18 -0
  64. package/src/build-components/OnboardFooter/OnboardFooter.tsx +13 -0
  65. package/src/build-components/OnboardFooter/OnboardFooterProps.generated.ts +24 -0
  66. package/src/build-components/OnboardFooter/OnboardFooterProps.ts +3 -0
  67. package/src/build-components/OnboardFooter/pattern.json +28 -0
  68. package/src/build-components/OnboardImage/OnboardImage.tsx +14 -0
  69. package/src/build-components/OnboardImage/OnboardImageProps.generated.ts +12 -0
  70. package/src/build-components/OnboardImage/OnboardImageProps.ts +3 -0
  71. package/src/build-components/OnboardImage/pattern.json +15 -0
  72. package/src/build-components/OnboardItem/OnboardItem.tsx +29 -0
  73. package/src/build-components/OnboardItem/OnboardItemProps.generated.ts +6 -0
  74. package/src/build-components/OnboardItem/OnboardItemProps.ts +3 -0
  75. package/src/build-components/OnboardItem/pattern.json +9 -0
  76. package/src/build-components/OnboardProvider/OnboardProvider.tsx +65 -0
  77. package/src/build-components/OnboardProvider/OnboardProviderProps.generated.ts +6 -0
  78. package/src/build-components/OnboardProvider/OnboardProviderProps.ts +3 -0
  79. package/src/build-components/OnboardProvider/pattern.json +9 -0
  80. package/src/build-components/OnboardSubtitle/OnboardSubtitle.tsx +28 -0
  81. package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.ts +21 -0
  82. package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.ts +3 -0
  83. package/src/build-components/OnboardSubtitle/pattern.json +25 -0
  84. package/src/build-components/RenderNode.generated.tsx +97 -0
  85. package/src/build-components/Text/Text.tsx +23 -0
  86. package/src/build-components/Text/TextProps.generated.ts +21 -0
  87. package/src/build-components/Text/TextProps.ts +3 -0
  88. package/src/build-components/Text/pattern.json +26 -0
  89. package/src/build-components/View/View.tsx +62 -0
  90. package/src/build-components/View/ViewProps.generated.ts +24 -0
  91. package/src/build-components/View/ViewProps.ts +3 -0
  92. package/src/build-components/View/pattern.json +28 -0
  93. package/src/build-components/other.ts +6 -0
  94. package/src/index.ts +24 -0
  95. package/src/styles/index.scss +114 -0
  96. package/src/types/Device.ts +12 -0
  97. package/src/types/Node.ts +19 -0
  98. package/src/types/PreviewConfig.ts +19 -0
  99. package/src/types/Project.ts +11 -0
  100. package/src/types/TargetedScreenSize.ts +4 -0
  101. package/src/utils/analyseNode.ts +77 -0
  102. package/src/utils/generateRandomKeyForNode.ts +3 -0
  103. package/src/utils/getDevices.ts +6 -0
  104. package/src/utils/isCarousel.ts +36 -0
  105. package/src/utils/isOnboard.ts +54 -0
  106. package/src/utils/novaToJson.ts +254 -0
  107. package/src/utils/patterns.ts +63 -0
@@ -0,0 +1,76 @@
1
+ import React, { useContext, useEffect, useState } from 'react';
2
+ import type { NodeData, Node } from '../../types/Node';
3
+ import type { OnboardButtonsProps } from './OnboardButtonsProps';
4
+ import { carouselContext } from '../CarouselProvider/CarouselProvider';
5
+ import RenderNode from '../RenderNode.generated';
6
+
7
+ const THEME_COLORS = {
8
+ ONBOARD_SEPARATOR_COLOR: '#E5E7EB',
9
+ };
10
+
11
+ type OnboardButtonsComponentProps = {
12
+ node: NodeData<OnboardButtonsProps['attributes']>;
13
+ };
14
+
15
+ function OnboardButtons({ node }: OnboardButtonsComponentProps) {
16
+ const emblaApi = useContext(carouselContext);
17
+ const [selectedIndex, setSelectedIndex] = useState(0);
18
+
19
+ useEffect(() => {
20
+ if (!emblaApi) return;
21
+ setSelectedIndex(emblaApi.selectedScrollSnap());
22
+ emblaApi.on('select', () => {
23
+ setSelectedIndex(emblaApi.selectedScrollSnap());
24
+ });
25
+ }, [emblaApi]);
26
+
27
+ if (
28
+ typeof node.attributes?.forIndex === 'number' &&
29
+ node.attributes?.forIndex !== selectedIndex
30
+ ) {
31
+ return null;
32
+ }
33
+
34
+ const direction =
35
+ node.attributes?.buttons_direction === 'column' ? 'column' : 'row';
36
+ const seperatorColor = node.attributes?.seperatorColor;
37
+
38
+ const renderChildren = () => {
39
+ if (Array.isArray(node.children)) {
40
+ return (node.children as Node[]).map((child, idx) => (
41
+ <RenderNode key={idx} node={child} />
42
+ ));
43
+ }
44
+ return <RenderNode node={node.children as Node} />;
45
+ };
46
+
47
+ return (
48
+ <>
49
+ <div
50
+ className="onboard__separator"
51
+ style={{
52
+ height: 1,
53
+ backgroundColor:
54
+ seperatorColor ?? THEME_COLORS.ONBOARD_SEPARATOR_COLOR,
55
+ width: '100%',
56
+ }}
57
+ />
58
+ <div
59
+ className="onboard__buttons"
60
+ style={{
61
+ display: 'flex',
62
+ flexDirection: direction as any,
63
+ height: 40,
64
+ gap: 12,
65
+ alignItems: 'center',
66
+ justifyContent: 'center',
67
+ margin: '12px 24px',
68
+ }}
69
+ >
70
+ {renderChildren()}
71
+ </div>
72
+ </>
73
+ );
74
+ }
75
+
76
+ export default React.memo(OnboardButtons);
@@ -0,0 +1,12 @@
1
+ /* AUTO-GENERATED FILE - DO NOT EDIT */
2
+
3
+ export interface OnboardButtonsPropsGenerated {
4
+ child: string;
5
+ attributes: {
6
+ buttonType?: 'previous_button' | 'next_button' | 'skip_button';
7
+ skipNumber?: number;
8
+ buttons_direction?: 'row' | 'column';
9
+ forIndex?: number;
10
+ seperatorColor?: string;
11
+ };
12
+ }
@@ -0,0 +1,3 @@
1
+ import type { OnboardButtonsPropsGenerated } from './OnboardButtonsProps.generated';
2
+
3
+ export interface OnboardButtonsProps extends OnboardButtonsPropsGenerated {}
@@ -0,0 +1,15 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "allowUnknownAttributes": false,
4
+ "pattern": {
5
+ "type": "OnboardButtons",
6
+ "children": "node",
7
+ "attributes": {
8
+ "buttonType": ["previous_button", "next_button", "skip_button"],
9
+ "skipNumber": "number",
10
+ "buttons_direction": ["row", "column"],
11
+ "forIndex": "number",
12
+ "seperatorColor": "string"
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { NodeData } from '../../types/Node';
3
+ import type { OnboardExpandingDotProps } from './OnboardExpandingDotProps';
4
+ import CarouselDots from '../CarouselDots/CarouselDots';
5
+
6
+ type OnboardExpandingDotComponentProps = {
7
+ node: NodeData<OnboardExpandingDotProps['attributes']>;
8
+ };
9
+
10
+ function OnboardExpandingDot({ node }: OnboardExpandingDotComponentProps) {
11
+ return <CarouselDots node={{ ...node, type: 'carouselDots' } as any} />;
12
+ }
13
+
14
+ export default React.memo(OnboardExpandingDot);
@@ -0,0 +1,14 @@
1
+ /* AUTO-GENERATED FILE - DO NOT EDIT */
2
+
3
+ export interface OnboardExpandingDotPropsGenerated {
4
+ child: string;
5
+ attributes: {
6
+ dotType?:
7
+ | 'expanding_dot'
8
+ | 'normal_dot'
9
+ | 'scaling_dot'
10
+ | 'sliding_border'
11
+ | 'sliding_dot'
12
+ | 'liquid_like';
13
+ };
14
+ }
@@ -0,0 +1,4 @@
1
+ import type { OnboardExpandingDotPropsGenerated } from './OnboardExpandingDotProps.generated';
2
+
3
+ export interface OnboardExpandingDotProps
4
+ extends OnboardExpandingDotPropsGenerated {}
@@ -0,0 +1,18 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "allowUnknownAttributes": false,
4
+ "pattern": {
5
+ "type": "OnboardExpandingDot",
6
+ "children": "node",
7
+ "attributes": {
8
+ "dotType": [
9
+ "expanding_dot",
10
+ "normal_dot",
11
+ "scaling_dot",
12
+ "sliding_border",
13
+ "sliding_dot",
14
+ "liquid_like"
15
+ ]
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { NodeData } from '../../types/Node';
3
+ import type { OnboardFooterProps } from './OnboardFooterProps';
4
+
5
+ type OnboardFooterComponentProps = {
6
+ node: NodeData<OnboardFooterProps['attributes']>;
7
+ };
8
+
9
+ function OnboardFooter({ node }: OnboardFooterComponentProps) {
10
+ return String(node?.type ?? 'OnboardFooter');
11
+ }
12
+
13
+ export default React.memo(OnboardFooter);
@@ -0,0 +1,24 @@
1
+ /* AUTO-GENERATED FILE - DO NOT EDIT */
2
+
3
+ export interface OnboardFooterPropsGenerated {
4
+ child: string;
5
+ attributes: {
6
+ scrollable?: boolean;
7
+ flexDirection?: 'row' | 'column';
8
+ alignItems?: 'flex-start' | 'center' | 'flex-end' | 'stretch' | 'baseline';
9
+ justifyContent?:
10
+ | 'flex-start'
11
+ | 'center'
12
+ | 'flex-end'
13
+ | 'space-between'
14
+ | 'space-around'
15
+ | 'space-evenly';
16
+ gap?: number;
17
+ padding?: number;
18
+ margin?: number;
19
+ backgroundColor?: string;
20
+ borderRadius?: number;
21
+ width?: number;
22
+ height?: number;
23
+ };
24
+ }
@@ -0,0 +1,3 @@
1
+ import type { OnboardFooterPropsGenerated } from './OnboardFooterProps.generated';
2
+
3
+ export interface OnboardFooterProps extends OnboardFooterPropsGenerated {}
@@ -0,0 +1,28 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "allowUnknownAttributes": false,
4
+ "pattern": {
5
+ "type": "OnboardFooter",
6
+ "children": "node",
7
+ "attributes": {
8
+ "scrollable": "boolean",
9
+ "flexDirection": ["row", "column"],
10
+ "alignItems": ["flex-start", "center", "flex-end", "stretch", "baseline"],
11
+ "justifyContent": [
12
+ "flex-start",
13
+ "center",
14
+ "flex-end",
15
+ "space-between",
16
+ "space-around",
17
+ "space-evenly"
18
+ ],
19
+ "gap": "number",
20
+ "padding": "number",
21
+ "margin": "number",
22
+ "backgroundColor": "string",
23
+ "borderRadius": "number",
24
+ "width": "number",
25
+ "height": "number"
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { NodeData } from '../../types/Node';
3
+ import type { OnboardImageProps } from './OnboardImageProps';
4
+ import Image from '../Image/Image';
5
+
6
+ type OnboardImageComponentProps = {
7
+ node: NodeData<OnboardImageProps['attributes']>;
8
+ };
9
+
10
+ function OnboardImage({ node }: OnboardImageComponentProps) {
11
+ return <Image node={{ ...node, type: 'image' } as any} />;
12
+ }
13
+
14
+ export default React.memo(OnboardImage);
@@ -0,0 +1,12 @@
1
+ /* AUTO-GENERATED FILE - DO NOT EDIT */
2
+
3
+ export interface OnboardImagePropsGenerated {
4
+ child: string;
5
+ attributes: {
6
+ src?: string;
7
+ width?: number;
8
+ height?: number;
9
+ resizeMode?: 'cover' | 'contain' | 'stretch' | 'center';
10
+ borderRadius?: number;
11
+ };
12
+ }
@@ -0,0 +1,3 @@
1
+ import type { OnboardImagePropsGenerated } from './OnboardImageProps.generated';
2
+
3
+ export interface OnboardImageProps extends OnboardImagePropsGenerated {}
@@ -0,0 +1,15 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "allowUnknownAttributes": false,
4
+ "pattern": {
5
+ "type": "OnboardImage",
6
+ "children": "node",
7
+ "attributes": {
8
+ "src": "string",
9
+ "width": "number",
10
+ "height": "number",
11
+ "resizeMode": ["cover", "contain", "stretch", "center"],
12
+ "borderRadius": "number"
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,29 @@
1
+ import React, { useMemo } from 'react';
2
+ import type { NodeData } from '../../types/Node';
3
+ import type { OnboardItemProps } from './OnboardItemProps';
4
+ import CarouselItem from '../CarouselItem/CarouselItem';
5
+ import { isNodeArray } from '../../utils/analyseNode';
6
+
7
+ type OnboardItemComponentProps = {
8
+ node: NodeData<OnboardItemProps['attributes']>;
9
+ };
10
+
11
+ function OnboardItem({ node }: OnboardItemComponentProps) {
12
+ const children = useMemo(() => {
13
+ return (
14
+ (
15
+ (isNodeArray(node.children)
16
+ ? node.children
17
+ : [node.children]) as NodeData[]
18
+ )
19
+ //NOTE: İstisna!! Onboard button carousel dışında olacak
20
+ .filter((s) => (s as NodeData)?.type != 'OnboardButtons')
21
+ );
22
+ }, [node.children]) as NodeData[];
23
+
24
+ return (
25
+ <CarouselItem node={{ ...node, type: 'carouselItem', children } as any} />
26
+ );
27
+ }
28
+
29
+ export default React.memo(OnboardItem);
@@ -0,0 +1,6 @@
1
+ /* AUTO-GENERATED FILE - DO NOT EDIT */
2
+
3
+ export interface OnboardItemPropsGenerated {
4
+ child: string;
5
+ attributes: {};
6
+ }
@@ -0,0 +1,3 @@
1
+ import type { OnboardItemPropsGenerated } from './OnboardItemProps.generated';
2
+
3
+ export interface OnboardItemProps extends OnboardItemPropsGenerated {}
@@ -0,0 +1,9 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "allowUnknownAttributes": false,
4
+ "pattern": {
5
+ "type": "OnboardItem",
6
+ "children": "node",
7
+ "attributes": {}
8
+ }
9
+ }
@@ -0,0 +1,65 @@
1
+ import React, { useContext, useEffect, useMemo, useState } from 'react';
2
+ import type { NodeData } from '../../types/Node';
3
+ import type { OnboardProviderProps } from './OnboardProviderProps';
4
+ import { carouselContext } from '../CarouselProvider/CarouselProvider';
5
+ import { mainNodeContext } from '../../RenderMainNode';
6
+ import { isNodeArray } from '../../utils/analyseNode';
7
+ import useEmblaCarousel from 'embla-carousel-react';
8
+ import RenderNode from '../RenderNode.generated';
9
+
10
+ type OnboardProviderComponentProps = {
11
+ node: NodeData<OnboardProviderProps['attributes']>;
12
+ };
13
+
14
+ function OnboardProvider({ node }: OnboardProviderComponentProps) {
15
+ const [emblaRef, emblaApi] = useEmblaCarousel(node.attributes as any);
16
+ const { theme, setWarning } = useContext(mainNodeContext) ?? {};
17
+ const [selectedIndex, setSelectedIndex] = useState(0);
18
+
19
+ const children = useMemo(() => {
20
+ console.log('node', node);
21
+ console.log('node.children', node.children);
22
+
23
+ const onboardChild: NodeData = (node.children as NodeData[]).filter(
24
+ (c) => c.type === 'Onboard',
25
+ )[0];
26
+ if (onboardChild?.type !== 'Onboard') {
27
+ throw new Error('OnboardProvider at least has an Onboard child');
28
+ }
29
+ const onboardItems = onboardChild.children as NodeData[];
30
+
31
+ const onboardButtons = (
32
+ onboardItems[selectedIndex].children as NodeData[]
33
+ ).filter((s) => (s as NodeData)?.type == 'OnboardButtons');
34
+ const children: NodeData[] = node.children as NodeData[];
35
+ return [...children, ...onboardButtons];
36
+ }, [selectedIndex, node.children]);
37
+
38
+ useEffect(() => {
39
+ if (!emblaApi) return;
40
+ setSelectedIndex(emblaApi.selectedScrollSnap());
41
+ emblaApi.on('select', () => {
42
+ setSelectedIndex(emblaApi.selectedScrollSnap());
43
+ });
44
+ }, [emblaApi]);
45
+
46
+ useEffect(() => {
47
+ if (theme !== (node.attributes as any)?.theme) {
48
+ setWarning?.('Wrong theme');
49
+ }
50
+ }, [theme]);
51
+
52
+ return (
53
+ <carouselContext.Provider value={emblaApi}>
54
+ <div className="carousel-provider">
55
+ <div className="embla">
56
+ <div className="embla__viewport" ref={emblaRef}>
57
+ {node.children && <RenderNode node={children} />}
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </carouselContext.Provider>
62
+ );
63
+ }
64
+
65
+ export default React.memo(OnboardProvider);
@@ -0,0 +1,6 @@
1
+ /* AUTO-GENERATED FILE - DO NOT EDIT */
2
+
3
+ export interface OnboardProviderPropsGenerated {
4
+ child: string;
5
+ attributes: {};
6
+ }
@@ -0,0 +1,3 @@
1
+ import type { OnboardProviderPropsGenerated } from './OnboardProviderProps.generated';
2
+
3
+ export interface OnboardProviderProps extends OnboardProviderPropsGenerated {}
@@ -0,0 +1,9 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "allowUnknownAttributes": false,
4
+ "pattern": {
5
+ "type": "OnboardProvider",
6
+ "children": "node",
7
+ "attributes": {}
8
+ }
9
+ }
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import type { NodeData } from '../../types/Node';
3
+ import type { OnboardSubtitleProps } from './OnboardSubtitleProps';
4
+ import Text from '../Text/Text';
5
+
6
+ type OnboardSubtitleComponentProps = {
7
+ node: NodeData<OnboardSubtitleProps['attributes']>;
8
+ };
9
+
10
+ function OnboardSubtitle({ node }: OnboardSubtitleComponentProps) {
11
+ return (
12
+ <Text
13
+ node={
14
+ {
15
+ ...node,
16
+ type: 'text',
17
+ attributes: {
18
+ fontSize: 14,
19
+ fontWeight: '600',
20
+ ...(node.attributes as any),
21
+ },
22
+ } as any
23
+ }
24
+ />
25
+ );
26
+ }
27
+
28
+ export default React.memo(OnboardSubtitle);
@@ -0,0 +1,21 @@
1
+ /* AUTO-GENERATED FILE - DO NOT EDIT */
2
+
3
+ export interface OnboardSubtitlePropsGenerated {
4
+ child: string;
5
+ attributes: {
6
+ color?: string;
7
+ fontSize?: number;
8
+ fontWeight?:
9
+ | 'normal'
10
+ | 'bold'
11
+ | '100'
12
+ | '200'
13
+ | '300'
14
+ | '400'
15
+ | '500'
16
+ | '600'
17
+ | '700'
18
+ | '800'
19
+ | '900';
20
+ };
21
+ }
@@ -0,0 +1,3 @@
1
+ import type { OnboardSubtitlePropsGenerated } from './OnboardSubtitleProps.generated';
2
+
3
+ export interface OnboardSubtitleProps extends OnboardSubtitlePropsGenerated {}
@@ -0,0 +1,25 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "allowUnknownAttributes": false,
4
+ "pattern": {
5
+ "type": "OnboardSubtitle",
6
+ "children": "node",
7
+ "attributes": {
8
+ "color": "string",
9
+ "fontSize": "number",
10
+ "fontWeight": [
11
+ "normal",
12
+ "bold",
13
+ "100",
14
+ "200",
15
+ "300",
16
+ "400",
17
+ "500",
18
+ "600",
19
+ "700",
20
+ "800",
21
+ "900"
22
+ ]
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,97 @@
1
+ /* AUTO-GENERATED FILE - DO NOT EDIT */
2
+ import React from 'react';
3
+
4
+ import {
5
+ Node,
6
+ NodeData,
7
+ isNodeArray,
8
+ isNodeNullOrUndefined,
9
+ isNodeString,
10
+ } from '../index';
11
+
12
+ import { other } from './other';
13
+
14
+ // Builder components
15
+ import Button from './Button/Button';
16
+ import Carousel from './Carousel/Carousel';
17
+ import CarouselButtons from './CarouselButtons/CarouselButtons';
18
+ import CarouselDots from './CarouselDots/CarouselDots';
19
+ import CarouselItem from './CarouselItem/CarouselItem';
20
+ import CarouselProvider from './CarouselProvider/CarouselProvider';
21
+ import Image from './Image/Image';
22
+ import Onboard from './Onboard/Onboard';
23
+ import OnboardBoardTitle from './OnboardBoardTitle/OnboardBoardTitle';
24
+ import OnboardButton from './OnboardButton/OnboardButton';
25
+ import OnboardButtons from './OnboardButtons/OnboardButtons';
26
+ import OnboardExpandingDot from './OnboardExpandingDot/OnboardExpandingDot';
27
+ import OnboardFooter from './OnboardFooter/OnboardFooter';
28
+ import OnboardImage from './OnboardImage/OnboardImage';
29
+ import OnboardItem from './OnboardItem/OnboardItem';
30
+ import OnboardProvider from './OnboardProvider/OnboardProvider';
31
+ import OnboardSubtitle from './OnboardSubtitle/OnboardSubtitle';
32
+ import Text from './Text/Text';
33
+ import View from './View/View';
34
+
35
+ function RenderNode({ node }: { node: Node }) {
36
+ if (isNodeNullOrUndefined(node)) {
37
+ return null;
38
+ }
39
+ if (isNodeString(node)) {
40
+ return <Text node={{ children: node as string, type: 'text' }} />;
41
+ }
42
+ if (isNodeArray(node)) {
43
+ return (
44
+ <>
45
+ {(node as Node[]).map((item: Node, index) => (
46
+ <RenderNode key={index} node={item} />
47
+ ))}
48
+ </>
49
+ );
50
+ }
51
+
52
+ const simpleNode = node as NodeData;
53
+ switch (simpleNode?.type) {
54
+ case 'button':
55
+ return <Button node={simpleNode} />;
56
+ case 'carousel':
57
+ return <Carousel node={simpleNode} />;
58
+ case 'carouselButtons':
59
+ return <CarouselButtons node={simpleNode} />;
60
+ case 'carouselDots':
61
+ return <CarouselDots node={simpleNode} />;
62
+ case 'carouselItem':
63
+ return <CarouselItem node={simpleNode} />;
64
+ case 'carouselProvider':
65
+ return <CarouselProvider node={simpleNode} />;
66
+ case 'image':
67
+ return <Image node={simpleNode} />;
68
+ case 'Onboard':
69
+ return <Onboard node={simpleNode} />;
70
+ case 'OnboardBoardTitle':
71
+ return <OnboardBoardTitle node={simpleNode} />;
72
+ case 'OnboardButton':
73
+ return <OnboardButton node={simpleNode} />;
74
+ case 'OnboardButtons':
75
+ return <OnboardButtons node={simpleNode} />;
76
+ case 'OnboardExpandingDot':
77
+ return <OnboardExpandingDot node={simpleNode} />;
78
+ case 'OnboardFooter':
79
+ return <OnboardFooter node={simpleNode} />;
80
+ case 'OnboardImage':
81
+ return <OnboardImage node={simpleNode} />;
82
+ case 'OnboardItem':
83
+ return <OnboardItem node={simpleNode} />;
84
+ case 'OnboardProvider':
85
+ return <OnboardProvider node={simpleNode} />;
86
+ case 'OnboardSubtitle':
87
+ return <OnboardSubtitle node={simpleNode} />;
88
+ case 'text':
89
+ return <Text node={simpleNode} />;
90
+ case 'view':
91
+ return <View node={simpleNode} />;
92
+ default:
93
+ return other(simpleNode?.type, node);
94
+ }
95
+ }
96
+
97
+ export default React.memo(RenderNode);
@@ -0,0 +1,23 @@
1
+ import React, { useContext } from 'react';
2
+ import type { NodeData } from '../../types/Node';
3
+ import type { TextProps } from './TextProps';
4
+ import { mainNodeContext } from '../../RenderMainNode';
5
+
6
+ type TextComponentProps = {
7
+ node: NodeData<TextProps['attributes']>;
8
+ };
9
+
10
+ function Text({ node }: TextComponentProps) {
11
+ const { localication, defaultLanguage } = useContext(mainNodeContext) ?? {};
12
+ const keyOrText: string = node.children as string;
13
+ return (
14
+ <p
15
+ style={node.attributes as React.CSSProperties}
16
+ className="primitive primitive-text"
17
+ >
18
+ {localication?.[defaultLanguage ?? 'en']?.[keyOrText] ?? keyOrText}
19
+ </p>
20
+ );
21
+ }
22
+
23
+ export default React.memo(Text);
@@ -0,0 +1,21 @@
1
+ /* AUTO-GENERATED FILE - DO NOT EDIT */
2
+
3
+ export interface TextPropsGenerated {
4
+ child: string;
5
+ attributes: {
6
+ color?: string;
7
+ fontSize?: number;
8
+ fontWeight?:
9
+ | 'normal'
10
+ | 'bold'
11
+ | '100'
12
+ | '200'
13
+ | '300'
14
+ | '400'
15
+ | '500'
16
+ | '600'
17
+ | '700'
18
+ | '800'
19
+ | '900';
20
+ };
21
+ }
@@ -0,0 +1,3 @@
1
+ import type { TextPropsGenerated } from './TextProps.generated';
2
+
3
+ export interface TextProps extends TextPropsGenerated {}