@developer_tribe/react-builder 1.0.2 → 1.0.4

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 (147) hide show
  1. package/dist/AttributesEditor.d.ts +3 -1
  2. package/dist/RenderPage.d.ts +2 -1
  3. package/dist/android.svg +43 -0
  4. package/dist/apple.svg +16 -0
  5. package/dist/attributes-editor/Field.d.ts +4 -2
  6. package/dist/attributes-editor/SizeField.d.ts +9 -0
  7. package/dist/attributes-editor/SpecialCategorySection.d.ts +2 -1
  8. package/dist/build-components/BackgroundImage/BackgroundImage.d.ts +5 -0
  9. package/dist/build-components/BackgroundImage/BackgroundImageProps.generated.d.ts +45 -0
  10. package/dist/build-components/Button/ButtonProps.generated.d.ts +8 -0
  11. package/dist/build-components/Carousel/CarouselProps.generated.d.ts +8 -0
  12. package/dist/build-components/CarouselButtons/CarouselButtonsProps.generated.d.ts +8 -0
  13. package/dist/build-components/CarouselDots/CarouselDotsProps.generated.d.ts +8 -0
  14. package/dist/build-components/CarouselItem/CarouselItemProps.generated.d.ts +8 -0
  15. package/dist/build-components/CarouselProvider/CarouselProviderProps.generated.d.ts +8 -0
  16. package/dist/build-components/Image/ImageProps.generated.d.ts +8 -0
  17. package/dist/build-components/Onboard/OnboardProps.generated.d.ts +8 -0
  18. package/dist/build-components/OnboardButton/OnboardButtonProps.generated.d.ts +8 -1
  19. package/dist/build-components/OnboardButtons/OnboardButtonsProps.generated.d.ts +8 -0
  20. package/dist/build-components/OnboardDot/OnboardDotProps.generated.d.ts +9 -3
  21. package/dist/build-components/OnboardFooter/OnboardFooterProps.generated.d.ts +8 -0
  22. package/dist/build-components/OnboardImage/OnboardImageProps.generated.d.ts +9 -1
  23. package/dist/build-components/OnboardItem/OnboardItemProps.generated.d.ts +8 -0
  24. package/dist/build-components/OnboardProvider/OnboardProviderProps.generated.d.ts +8 -1
  25. package/dist/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.d.ts +8 -0
  26. package/dist/build-components/OnboardTitle/OnboardTitleProps.generated.d.ts +8 -0
  27. package/dist/build-components/Text/TextProps.generated.d.ts +8 -0
  28. package/dist/build-components/View/ViewProps.generated.d.ts +8 -0
  29. package/dist/build-components/index.d.ts +2 -1
  30. package/dist/build-components/patterns.generated.d.ts +1612 -46
  31. package/dist/components/AttributesEditorPanel.d.ts +3 -4
  32. package/dist/components/Builder.d.ts +2 -1
  33. package/dist/components/BuilderButton.d.ts +9 -0
  34. package/dist/components/JsonTextEditor.d.ts +9 -0
  35. package/dist/index.cjs.js +5 -5
  36. package/dist/index.cjs.js.map +1 -1
  37. package/dist/index.d.ts +2 -2
  38. package/dist/index.esm.js +5 -5
  39. package/dist/index.esm.js.map +1 -1
  40. package/dist/modals/ColorModal.d.ts +3 -1
  41. package/dist/pages/ProjectPage.d.ts +3 -3
  42. package/dist/pages/tabs/BuilderPanel.d.ts +8 -0
  43. package/dist/pages/tabs/SideTool.d.ts +8 -0
  44. package/dist/store.d.ts +9 -1
  45. package/dist/styles.css +1 -1
  46. package/dist/types/Project.d.ts +11 -0
  47. package/dist/utils/analyseNode.d.ts +1 -0
  48. package/dist/utils/extractImageStyle.d.ts +2 -1
  49. package/dist/utils/extractTextStyle.d.ts +8 -1
  50. package/dist/utils/extractViewStyle.d.ts +7 -1
  51. package/dist/utils/parseColor.d.ts +7 -0
  52. package/dist/utils/selection.d.ts +7 -0
  53. package/dist/utils/useMergedStyle.d.ts +2 -0
  54. package/package.json +2 -5
  55. package/src/.DS_Store +0 -0
  56. package/src/AttributesEditor.tsx +83 -16
  57. package/src/RenderPage.tsx +86 -4
  58. package/src/attributes-editor/Field.tsx +60 -165
  59. package/src/attributes-editor/SizeField.tsx +184 -0
  60. package/src/attributes-editor/SpecialCategorySection.tsx +12 -4
  61. package/src/build-components/BackgroundImage/BackgroundImage.tsx +77 -0
  62. package/src/build-components/BackgroundImage/BackgroundImageProps.generated.ts +61 -0
  63. package/src/build-components/BackgroundImage/pattern.json +45 -0
  64. package/src/build-components/Button/Button.tsx +29 -4
  65. package/src/build-components/Button/ButtonProps.generated.ts +8 -0
  66. package/src/build-components/Carousel/Carousel.tsx +25 -3
  67. package/src/build-components/Carousel/CarouselProps.generated.ts +8 -0
  68. package/src/build-components/CarouselButtons/CarouselButtons.tsx +19 -4
  69. package/src/build-components/CarouselButtons/CarouselButtonsProps.generated.ts +8 -0
  70. package/src/build-components/CarouselDots/CarouselDots.tsx +13 -4
  71. package/src/build-components/CarouselDots/CarouselDotsProps.generated.ts +8 -0
  72. package/src/build-components/CarouselItem/CarouselItem.tsx +20 -4
  73. package/src/build-components/CarouselItem/CarouselItemProps.generated.ts +8 -0
  74. package/src/build-components/CarouselProvider/CarouselProvider.tsx +14 -3
  75. package/src/build-components/CarouselProvider/CarouselProviderProps.generated.ts +8 -0
  76. package/src/build-components/Image/Image.tsx +27 -9
  77. package/src/build-components/Image/ImageProps.generated.ts +8 -0
  78. package/src/build-components/Image/pattern.json +1 -9
  79. package/src/build-components/Onboard/Onboard.tsx +2 -2
  80. package/src/build-components/Onboard/OnboardProps.generated.ts +8 -0
  81. package/src/build-components/OnboardButton/OnboardButton.tsx +11 -7
  82. package/src/build-components/OnboardButton/OnboardButtonProps.generated.ts +8 -1
  83. package/src/build-components/OnboardButtons/OnboardButtons.tsx +17 -5
  84. package/src/build-components/OnboardButtons/OnboardButtonsProps.generated.ts +8 -0
  85. package/src/build-components/OnboardDot/OnboardDot.tsx +68 -39
  86. package/src/build-components/OnboardDot/OnboardDotProps.generated.ts +9 -3
  87. package/src/build-components/OnboardDot/pattern.json +3 -19
  88. package/src/build-components/OnboardFooter/OnboardFooter.tsx +37 -14
  89. package/src/build-components/OnboardFooter/OnboardFooterProps.generated.ts +8 -0
  90. package/src/build-components/OnboardImage/OnboardImage.tsx +28 -6
  91. package/src/build-components/OnboardImage/OnboardImageProps.generated.ts +9 -1
  92. package/src/build-components/OnboardItem/OnboardItem.tsx +15 -14
  93. package/src/build-components/OnboardItem/OnboardItemProps.generated.ts +8 -0
  94. package/src/build-components/OnboardProvider/OnboardProvider.tsx +35 -20
  95. package/src/build-components/OnboardProvider/OnboardProviderProps.generated.ts +8 -1
  96. package/src/build-components/OnboardProvider/pattern.json +0 -8
  97. package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.ts +8 -0
  98. package/src/build-components/OnboardSubtitle/pattern.json +1 -1
  99. package/src/build-components/OnboardTitle/OnboardTitleProps.generated.ts +8 -0
  100. package/src/build-components/OnboardTitle/pattern.json +1 -1
  101. package/src/build-components/RenderNode.generated.tsx +3 -0
  102. package/src/build-components/Text/Text.tsx +28 -10
  103. package/src/build-components/Text/TextProps.generated.ts +8 -0
  104. package/src/build-components/View/View.tsx +25 -3
  105. package/src/build-components/View/ViewProps.generated.ts +8 -0
  106. package/src/build-components/View/pattern.json +67 -1
  107. package/src/build-components/index.ts +5 -0
  108. package/src/build-components/patterns.generated.ts +1620 -46
  109. package/src/components/AttributesEditorPanel.tsx +13 -6
  110. package/src/components/Builder.tsx +200 -56
  111. package/src/components/BuilderButton.tsx +127 -0
  112. package/src/components/DeviceNavigationBar.tsx +0 -1
  113. package/src/components/EditorHeader.tsx +11 -1
  114. package/src/components/JsonTextEditor.tsx +185 -0
  115. package/src/index.ts +2 -2
  116. package/src/mockOS/components/MockOSRouter.tsx +17 -3
  117. package/src/mockOS/context/MockOSContext.tsx +0 -5
  118. package/src/mockOS/managers/mockPermissionManager.ts +0 -4
  119. package/src/mockOS/managers/navigationManager.ts +1 -6
  120. package/src/modals/ColorModal.tsx +306 -71
  121. package/src/modals/LocalicationModal.tsx +4 -5
  122. package/src/modals/Modal.tsx +8 -1
  123. package/src/pages/ProjectPage.tsx +299 -55
  124. package/src/pages/tabs/{BuilderTab.tsx → BuilderPanel.tsx} +13 -9
  125. package/src/pages/tabs/SideTool.tsx +260 -0
  126. package/src/size-matters/index.ts +6 -0
  127. package/src/store.ts +18 -1
  128. package/src/styles/base/_global.scss +163 -7
  129. package/src/styles/components/_attributes-editor.scss +12 -0
  130. package/src/styles/components/_editor-shell.scss +25 -0
  131. package/src/styles/foundation/_sizes.scss +1 -1
  132. package/src/styles/layout/_builder.scss +66 -10
  133. package/src/styles/modals/_color-modal.scss +59 -1
  134. package/src/styles/utilities/_carousel.scss +9 -8
  135. package/src/types/Project.ts +14 -0
  136. package/src/utils/analyseNode.ts +98 -0
  137. package/src/utils/extractImageStyle.ts +3 -6
  138. package/src/utils/extractTextStyle.ts +19 -82
  139. package/src/utils/extractViewStyle.ts +41 -12
  140. package/src/utils/parseColor.ts +43 -0
  141. package/src/utils/selection.ts +24 -0
  142. package/src/utils/useMergedStyle.ts +16 -0
  143. package/dist/pages/tabs/BuilderTab.d.ts +0 -9
  144. package/dist/pages/tabs/DebugTab.d.ts +0 -7
  145. package/dist/pages/tabs/PreviewTab.d.ts +0 -3
  146. package/src/pages/tabs/DebugTab.tsx +0 -64
  147. package/src/pages/tabs/PreviewTab.tsx +0 -206
@@ -2,6 +2,7 @@ import React, {
2
2
  createContext,
3
3
  useContext,
4
4
  useEffect,
5
+ useId,
5
6
  useMemo,
6
7
  useState,
7
8
  } from 'react';
@@ -19,26 +20,44 @@ export const onboardContext = createContext<any>(undefined);
19
20
  function OnboardProvider({ node }: OnboardProviderComponentProps) {
20
21
  useLogRender('OnboardProvider');
21
22
  node = useNode(node);
22
- const attributeKey =
23
+ const generatedId = useId();
24
+ const attributeName =
23
25
  (node as any)?.sourceType ?? node.type ?? 'OnboardProvider';
24
- const device = useRenderStore((s) => s.device);
26
+ const { appConfig, projectColors } = useRenderStore((s) => ({
27
+ appConfig: s.appConfig,
28
+ projectColors: s.projectColors,
29
+ }));
25
30
  const [emblaRef, emblaApi] = useEmblaCarousel(node.attributes as any);
26
31
  const [selectedIndex, setSelectedIndex] = useState(0);
32
+ const attributeKey = node.key ?? generatedId;
27
33
 
28
34
  const children = useMemo(() => {
29
- const onboardChild: NodeData = (node.children as NodeData[]).filter(
30
- (c) => c.type === 'Onboard',
31
- )[0];
32
- if (onboardChild?.type !== 'Onboard') {
33
- throw new Error('OnboardProvider at least has an Onboard child');
35
+ const allChildren = (node.children as NodeData[]) ?? [];
36
+
37
+ // Find the main Onboard child, if any
38
+ const onboardChild = allChildren.find((c) => c.type === 'Onboard');
39
+ if (!onboardChild || onboardChild.type !== 'Onboard') {
40
+ // Fallback: no onboard structure, just render original children
41
+ return allChildren;
42
+ }
43
+
44
+ const onboardItems = (onboardChild.children as NodeData[]) ?? [];
45
+ if (!onboardItems.length) {
46
+ return allChildren;
34
47
  }
35
- const onboardItems = onboardChild.children as NodeData[];
36
48
 
49
+ // Clamp selected index to available items
50
+ const clampedIndex = Math.min(
51
+ Math.max(selectedIndex, 0),
52
+ onboardItems.length - 1,
53
+ );
54
+
55
+ const selectedItem = onboardItems[clampedIndex];
37
56
  const onboardButtons = (
38
- onboardItems[selectedIndex].children as NodeData[]
39
- ).filter((s) => (s as NodeData)?.type == 'OnboardButtons');
40
- const children: NodeData[] = node.children as NodeData[];
41
- return [...children, ...onboardButtons];
57
+ (selectedItem?.children as NodeData[]) ?? []
58
+ ).filter((s) => (s as NodeData)?.type === 'OnboardButtons');
59
+
60
+ return [...allChildren, ...onboardButtons];
42
61
  }, [selectedIndex, node.children]);
43
62
 
44
63
  useEffect(() => {
@@ -59,24 +78,20 @@ function OnboardProvider({ node }: OnboardProviderComponentProps) {
59
78
  const viewStyle = useMemo(() => {
60
79
  const style = extractViewStyle(
61
80
  node as NodeData<ViewPropsGenerated['attributes']>,
81
+ { appConfig, projectColors },
62
82
  );
63
83
  //NOTE: Embla için istisna
64
84
  style.display = 'block';
65
85
  return style;
66
- }, [node]);
86
+ }, [node, appConfig, projectColors]);
67
87
 
68
88
  return (
69
89
  <onboardContext.Provider value={{ emblaApi, selectedIndex }}>
70
90
  <div
91
+ attribute-name={attributeName}
71
92
  attribute-key={attributeKey}
72
93
  className="carousel-provider"
73
- style={{
74
- ...viewStyle,
75
- paddingTop: node.attributes?.paddingTop,
76
- paddingRight: node.attributes?.paddingRight,
77
- paddingBottom: node.attributes?.paddingBottom,
78
- paddingLeft: node.attributes?.paddingLeft,
79
- }}
94
+ style={viewStyle}
80
95
  >
81
96
  <div className="embla">
82
97
  <div className="embla__viewport" ref={emblaRef}>
@@ -16,6 +16,7 @@ export type JustifyContentOptionType =
16
16
  | 'space-between'
17
17
  | 'space-around'
18
18
  | 'space-evenly';
19
+ export type PositionOptionType = 'relative' | 'absolute';
19
20
 
20
21
  export interface OnboardProviderPropsGenerated {
21
22
  child: string;
@@ -42,7 +43,13 @@ export interface OnboardProviderPropsGenerated {
42
43
  borderRadius?: never;
43
44
  width?: string;
44
45
  height?: string;
45
- theme?: string;
46
+ flex?: number;
47
+ position?: PositionOptionType;
48
+ top?: string;
49
+ bottom?: string;
50
+ left?: string;
51
+ right?: string;
52
+ zIndex?: number;
46
53
  use_safe_area_inset?: boolean;
47
54
  };
48
55
  }
@@ -6,7 +6,6 @@
6
6
  "children": "node",
7
7
  "extends": "View",
8
8
  "attributes": {
9
- "theme": "string",
10
9
  "use_safe_area_inset": "boolean",
11
10
  "borderRadius": "never"
12
11
  }
@@ -22,13 +21,6 @@
22
21
  "label": "Onboard Provider",
23
22
  "description": "Provides shared settings for onboarding.",
24
23
  "attributes": {
25
- "theme": {
26
- "label": "Theme",
27
- "description": "Theme key for onboarding screens.",
28
- "category": "other",
29
- "specialCategory": null,
30
- "sort": 1
31
- },
32
24
  "use_safe_area_inset": {
33
25
  "label": "Use Safe Area Inset",
34
26
  "description": "Adds safe area padding.",
@@ -29,6 +29,7 @@ export type JustifyContentOptionType =
29
29
  | 'space-between'
30
30
  | 'space-around'
31
31
  | 'space-evenly';
32
+ export type PositionOptionType = 'relative' | 'absolute';
32
33
 
33
34
  export interface OnboardSubtitlePropsGenerated {
34
35
  child: string;
@@ -59,6 +60,13 @@ export interface OnboardSubtitlePropsGenerated {
59
60
  borderRadius?: string;
60
61
  width?: string;
61
62
  height?: string;
63
+ flex?: number;
64
+ position?: PositionOptionType;
65
+ top?: string;
66
+ bottom?: string;
67
+ left?: string;
68
+ right?: string;
69
+ zIndex?: number;
62
70
  };
63
71
  }
64
72
 
@@ -3,7 +3,7 @@
3
3
  "allowUnknownAttributes": false,
4
4
  "pattern": {
5
5
  "type": "OnboardSubtitle",
6
- "children": "node",
6
+ "children": "string",
7
7
  "extends": "Text",
8
8
  "attributes": {}
9
9
  },
@@ -29,6 +29,7 @@ export type JustifyContentOptionType =
29
29
  | 'space-between'
30
30
  | 'space-around'
31
31
  | 'space-evenly';
32
+ export type PositionOptionType = 'relative' | 'absolute';
32
33
 
33
34
  export interface OnboardTitlePropsGenerated {
34
35
  child: string;
@@ -59,6 +60,13 @@ export interface OnboardTitlePropsGenerated {
59
60
  borderRadius?: string;
60
61
  width?: string;
61
62
  height?: string;
63
+ flex?: number;
64
+ position?: PositionOptionType;
65
+ top?: string;
66
+ bottom?: string;
67
+ left?: string;
68
+ right?: string;
69
+ zIndex?: number;
62
70
  };
63
71
  }
64
72
 
@@ -3,7 +3,7 @@
3
3
  "allowUnknownAttributes": false,
4
4
  "pattern": {
5
5
  "type": "OnboardTitle",
6
- "children": "node",
6
+ "children": "string",
7
7
  "extends": "Text",
8
8
  "attributes": {}
9
9
  },
@@ -12,6 +12,7 @@ import {
12
12
  import { other } from './other';
13
13
 
14
14
  // Builder components
15
+ import BackgroundImage from './BackgroundImage/BackgroundImage';
15
16
  import Button from './Button/Button';
16
17
  import Carousel from './Carousel/Carousel';
17
18
  import CarouselButtons from './CarouselButtons/CarouselButtons';
@@ -51,6 +52,8 @@ function RenderNode({ node }: { node: Node }) {
51
52
 
52
53
  const simpleNode = node as NodeData;
53
54
  switch (simpleNode?.type) {
55
+ case 'background-image':
56
+ return <BackgroundImage node={simpleNode} />;
54
57
  case 'button':
55
58
  return <Button node={simpleNode} />;
56
59
  case 'carousel':
@@ -1,26 +1,44 @@
1
- import React, { useMemo } from 'react';
1
+ import React, { useId, useMemo } from 'react';
2
2
  import type { TextComponentProps } from './TextProps.generated';
3
3
  import useNode from '../useNode';
4
4
  import { useRenderStore } from '../../store';
5
5
  import { extractTextStyle } from '../../utils/extractTextStyle';
6
- import { extractViewStyle } from '../../utils/extractViewStyle';
7
6
  import { useLogRender } from '../../utils/useLogRender';
7
+ import { isNodeSelected, SELECTED_OUTLINE_STYLE } from '../../utils/selection';
8
+ import { useMergedStyle } from '../../utils/useMergedStyle';
8
9
 
9
10
  function Text({ node }: TextComponentProps) {
10
11
  useLogRender('Text');
11
12
  node = useNode(node);
12
- const attributeKey = (node as any)?.sourceType ?? node.type ?? 'text';
13
- const { appConfig } = useRenderStore((s) => ({
14
- appConfig: s.appConfig,
15
- }));
13
+ const generatedId = useId();
14
+ const attributeName = (node as any)?.sourceType ?? node.type ?? 'text';
15
+ const attributeKey = node.key ?? generatedId;
16
+ const { appConfig, projectColors, previewMode, current } = useRenderStore(
17
+ (s) => ({
18
+ appConfig: s.appConfig,
19
+ projectColors: s.projectColors,
20
+ previewMode: s.previewMode,
21
+ current: s.current,
22
+ }),
23
+ );
16
24
  const { defaultLanguage, localication } = appConfig;
17
25
  const keyOrText: string = node.children as string;
18
- const textStyle = extractTextStyle(node);
19
- const viewStyle = useMemo(() => extractViewStyle(node), [node]);
20
- const style = { ...viewStyle, ...textStyle };
26
+ const textStyle = useMemo(
27
+ () => extractTextStyle(node, { appConfig, projectColors }),
28
+ [node, appConfig, projectColors],
29
+ );
30
+ const isSelected = isNodeSelected({ previewMode, current, node });
31
+ const style = useMergedStyle(
32
+ textStyle,
33
+ isSelected ? SELECTED_OUTLINE_STYLE : undefined,
34
+ );
21
35
 
22
36
  return (
23
- <p attribute-key={attributeKey} style={style}>
37
+ <p
38
+ attribute-name={attributeName}
39
+ attribute-key={attributeKey}
40
+ style={style}
41
+ >
24
42
  {localication?.[defaultLanguage ?? 'en']?.[keyOrText] ?? keyOrText}
25
43
  </p>
26
44
  );
@@ -16,6 +16,7 @@ export type JustifyContentOptionType =
16
16
  | 'space-between'
17
17
  | 'space-around'
18
18
  | 'space-evenly';
19
+ export type PositionOptionType = 'relative' | 'absolute';
19
20
  export type FontWeightOptionType =
20
21
  | 'normal'
21
22
  | 'bold'
@@ -55,6 +56,13 @@ export interface TextPropsGenerated {
55
56
  borderRadius?: string;
56
57
  width?: string;
57
58
  height?: string;
59
+ flex?: number;
60
+ position?: PositionOptionType;
61
+ top?: string;
62
+ bottom?: string;
63
+ left?: string;
64
+ right?: string;
65
+ zIndex?: number;
58
66
  color?: string;
59
67
  fontSize?: string;
60
68
  fontWeight?: FontWeightOptionType;
@@ -1,18 +1,40 @@
1
- import React, { useMemo } from 'react';
1
+ import React, { useId, useMemo } from 'react';
2
2
  import type { ViewComponentProps } from './ViewProps.generated';
3
3
  import RenderNode from '../RenderNode.generated';
4
4
  import { Node } from '../../types/Node';
5
5
  import useNode from '../useNode';
6
+ import { useRenderStore } from '../../store';
6
7
  import { extractViewStyle } from '../../utils/extractViewStyle';
7
8
  import { useLogRender } from '../../utils/useLogRender';
9
+ import { isNodeSelected, SELECTED_OUTLINE_STYLE } from '../../utils/selection';
10
+ import { useMergedStyle } from '../../utils/useMergedStyle';
8
11
 
9
12
  export function View({ node }: ViewComponentProps) {
10
13
  useLogRender('View');
11
14
  node = useNode(node);
12
- const attributeKey = (node as any)?.sourceType ?? node.type ?? 'view';
13
- const viewStyle = useMemo(() => extractViewStyle(node), [node]);
15
+ const generatedId = useId();
16
+ const attributeName = (node as any)?.sourceType ?? node.type ?? 'view';
17
+ const attributeKey = node.key ?? generatedId;
18
+ const { previewMode, current, appConfig, projectColors } = useRenderStore(
19
+ (s) => ({
20
+ previewMode: s.previewMode,
21
+ current: s.current,
22
+ appConfig: s.appConfig,
23
+ projectColors: s.projectColors,
24
+ }),
25
+ );
26
+ const baseStyle = useMemo(
27
+ () => extractViewStyle(node, { appConfig, projectColors }),
28
+ [node, appConfig, projectColors],
29
+ );
30
+ const isSelected = isNodeSelected({ previewMode, current, node });
31
+ const viewStyle = useMergedStyle(
32
+ baseStyle,
33
+ isSelected ? SELECTED_OUTLINE_STYLE : undefined,
34
+ );
14
35
  return (
15
36
  <div
37
+ attribute-name={attributeName}
16
38
  attribute-key={attributeKey}
17
39
  style={viewStyle}
18
40
  className="scroll-container"
@@ -16,6 +16,7 @@ export type JustifyContentOptionType =
16
16
  | 'space-between'
17
17
  | 'space-around'
18
18
  | 'space-evenly';
19
+ export type PositionOptionType = 'relative' | 'absolute';
19
20
 
20
21
  export interface ViewPropsGenerated {
21
22
  child: string;
@@ -42,6 +43,13 @@ export interface ViewPropsGenerated {
42
43
  borderRadius?: string;
43
44
  width?: string;
44
45
  height?: string;
46
+ flex?: number;
47
+ position?: PositionOptionType;
48
+ top?: string;
49
+ bottom?: string;
50
+ left?: string;
51
+ right?: string;
52
+ zIndex?: number;
45
53
  };
46
54
  }
47
55
 
@@ -33,7 +33,14 @@
33
33
  "backgroundColor": "color",
34
34
  "borderRadius": "size",
35
35
  "width": "size",
36
- "height": "size"
36
+ "height": "size",
37
+ "flex": "number",
38
+ "position": ["relative", "absolute"],
39
+ "top": "size",
40
+ "bottom": "size",
41
+ "left": "size",
42
+ "right": "size",
43
+ "zIndex": "number"
37
44
  },
38
45
  "defaults": {
39
46
  "flexDirection": "column"
@@ -61,6 +68,12 @@
61
68
  "description": "Fixed dimensions.",
62
69
  "category": "container",
63
70
  "sort": 3
71
+ },
72
+ "offset": {
73
+ "label": "Offset",
74
+ "description": "Absolute positioning offsets.",
75
+ "category": "container",
76
+ "sort": 4
64
77
  }
65
78
  },
66
79
  "attributes": {
@@ -242,6 +255,59 @@
242
255
  "specialCategory": "size",
243
256
  "sort": 1,
244
257
  "preferedScale": "vs"
258
+ },
259
+ "flex": {
260
+ "label": "Flex",
261
+ "description": "Flex grow factor (e.g. 1 fills available space).",
262
+ "category": "container",
263
+ "specialCategory": "size",
264
+ "sort": 2
265
+ },
266
+ "position": {
267
+ "label": "Position",
268
+ "description": "Sets layout positioning mode.",
269
+ "category": "container",
270
+ "specialCategory": null,
271
+ "sort": 3
272
+ },
273
+ "top": {
274
+ "label": "Top",
275
+ "description": "Offset from the top edge.",
276
+ "category": "container",
277
+ "specialCategory": "offset",
278
+ "sort": 22,
279
+ "preferedScale": "vs"
280
+ },
281
+ "bottom": {
282
+ "label": "Bottom",
283
+ "description": "Offset from the bottom edge.",
284
+ "category": "container",
285
+ "specialCategory": "offset",
286
+ "sort": 23,
287
+ "preferedScale": "vs"
288
+ },
289
+ "left": {
290
+ "label": "Left",
291
+ "description": "Offset from the left edge.",
292
+ "category": "container",
293
+ "specialCategory": "offset",
294
+ "sort": 24,
295
+ "preferedScale": "s"
296
+ },
297
+ "right": {
298
+ "label": "Right",
299
+ "description": "Offset from the right edge.",
300
+ "category": "container",
301
+ "specialCategory": "offset",
302
+ "sort": 25,
303
+ "preferedScale": "s"
304
+ },
305
+ "zIndex": {
306
+ "label": "Z-Index",
307
+ "description": "Controls stacking order.",
308
+ "category": "container",
309
+ "specialCategory": null,
310
+ "sort": 26
245
311
  }
246
312
  }
247
313
  }
@@ -5,6 +5,7 @@ export { default as RenderNode } from './RenderNode.generated';
5
5
  export { patterns } from './patterns.generated';
6
6
 
7
7
  export const allcomponentNames = [
8
+ 'background-image',
8
9
  'button',
9
10
  'carousel',
10
11
  'carouselButtons',
@@ -26,6 +27,10 @@ export const allcomponentNames = [
26
27
  'view',
27
28
  ] as const;
28
29
 
30
+ export type {
31
+ BackgroundImagePropsGenerated,
32
+ BackgroundImageComponentProps,
33
+ } from './BackgroundImage/BackgroundImageProps.generated';
29
34
  export type {
30
35
  ButtonPropsGenerated,
31
36
  ButtonComponentProps,