@developer_tribe/react-builder 1.2.34 → 1.2.36

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 (96) hide show
  1. package/dist/RenderPage.d.ts +0 -12
  2. package/dist/attributes-editor/Field.d.ts +2 -1
  3. package/dist/attributes-editor/SizeField.d.ts +2 -1
  4. package/dist/attributes-editor/attributesEditorUtils.d.ts +2 -1
  5. package/dist/build-components/BIcon/BIcon.d.ts +0 -3
  6. package/dist/build-components/BIcon/BIconProps.generated.d.ts +1 -0
  7. package/dist/build-components/Button/Button.d.ts +0 -3
  8. package/dist/build-components/CarouselItem/CarouselItem.d.ts +0 -3
  9. package/dist/build-components/CountDown/CountDownProps.generated.d.ts +1 -1
  10. package/dist/build-components/OnboardButton/OnboardButton.d.ts +0 -3
  11. package/dist/build-components/OnboardDot/OnboardDot.d.ts +0 -3
  12. package/dist/build-components/OnboardFooter/OnboardFooterProps.generated.d.ts +1 -0
  13. package/dist/build-components/OnboardItem/OnboardItemProps.generated.d.ts +0 -3
  14. package/dist/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.d.ts +1 -0
  15. package/dist/build-components/OnboardTitle/OnboardTitleProps.generated.d.ts +1 -0
  16. package/dist/build-components/PaywallCloseButton/PaywallCloseButton.d.ts +0 -3
  17. package/dist/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.d.ts +1 -0
  18. package/dist/build-components/PriceTag/PriceTagProps.generated.d.ts +1 -0
  19. package/dist/build-components/Pricing/PricingProps.generated.d.ts +1 -0
  20. package/dist/build-components/Promo/PromoProps.generated.d.ts +1 -0
  21. package/dist/build-components/Text/TextProps.generated.d.ts +1 -0
  22. package/dist/build-components/patterns.generated.d.ts +9798 -10468
  23. package/dist/components/Breadcrumb.d.ts +1 -1
  24. package/dist/index.cjs.js +1 -1
  25. package/dist/index.cjs.js.map +1 -1
  26. package/dist/index.esm.js +1 -1
  27. package/dist/index.esm.js.map +1 -1
  28. package/dist/index.web.cjs.js +3 -3
  29. package/dist/index.web.cjs.js.map +1 -1
  30. package/dist/index.web.esm.js +3 -3
  31. package/dist/index.web.esm.js.map +1 -1
  32. package/dist/migrations/migratePipe.d.ts +2 -1
  33. package/dist/migrations/semver.d.ts +0 -7
  34. package/dist/pages/DebugJsonPage.d.ts +2 -1
  35. package/dist/pages/ProjectDebug.d.ts +2 -1
  36. package/dist/pages/ProjectMigrationPage.d.ts +2 -1
  37. package/dist/pages/ProjectPage.d.ts +2 -1
  38. package/dist/pages/ProjectValidationPage.d.ts +2 -1
  39. package/dist/pages/tabs/SideTool.d.ts +0 -7
  40. package/dist/utils/parseColor.d.ts +1 -1
  41. package/package.json +1 -1
  42. package/scripts/prebuild/assets/prompt_scheme.md +5 -11
  43. package/scripts/prebuild/generate-prompt-schemes.js +11 -8
  44. package/scripts/prebuild/utils/validateAllComponentsOrThrow.js +50 -0
  45. package/scripts/prebuild/utils/validatePatternJson.js +73 -0
  46. package/src/RenderPage.tsx +1 -7
  47. package/src/assets/meta.json +1 -1
  48. package/src/assets/prompt-scheme-onboard.generated.ts +1 -1
  49. package/src/assets/prompt-scheme-paywall.generated.ts +1 -1
  50. package/src/attributes-editor/Field.tsx +1 -1
  51. package/src/attributes-editor/SizeField.tsx +1 -1
  52. package/src/attributes-editor/attributesEditorUtils.ts +1 -1
  53. package/src/attributes-editor/useAttributesEditorModel.ts +16 -15
  54. package/src/build-components/BIcon/BIcon.tsx +0 -2
  55. package/src/build-components/BIcon/BIconProps.generated.ts +1 -0
  56. package/src/build-components/BackgroundImage/pattern.json +8 -9
  57. package/src/build-components/Button/Button.tsx +0 -2
  58. package/src/build-components/CarouselDots/CarouselDots.tsx +1 -1
  59. package/src/build-components/CarouselDots/pattern.json +1 -1
  60. package/src/build-components/CarouselItem/CarouselItem.tsx +0 -2
  61. package/src/build-components/CountDown/CountDownProps.generated.ts +1 -1
  62. package/src/build-components/OnboardButton/OnboardButton.tsx +1 -4
  63. package/src/build-components/OnboardButtons/pattern.json +2 -4
  64. package/src/build-components/OnboardDot/OnboardDot.tsx +10 -10
  65. package/src/build-components/OnboardDot/pattern.json +2 -3
  66. package/src/build-components/OnboardFooter/OnboardFooter.tsx +8 -13
  67. package/src/build-components/OnboardFooter/OnboardFooterProps.generated.ts +1 -0
  68. package/src/build-components/OnboardItem/OnboardItemProps.generated.ts +0 -3
  69. package/src/build-components/OnboardItem/pattern.json +27 -23
  70. package/src/build-components/OnboardProvider/pattern.json +29 -27
  71. package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.ts +1 -0
  72. package/src/build-components/OnboardTitle/OnboardTitleProps.generated.ts +1 -0
  73. package/src/build-components/PaywallCloseButton/PaywallCloseButton.tsx +0 -2
  74. package/src/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.ts +1 -0
  75. package/src/build-components/PriceTag/PriceTagProps.generated.ts +1 -0
  76. package/src/build-components/Pricing/PricingProps.generated.ts +1 -0
  77. package/src/build-components/Promo/PromoProps.generated.ts +1 -0
  78. package/src/build-components/RadioButton/pattern.json +2 -4
  79. package/src/build-components/Separator/pattern.json +24 -24
  80. package/src/build-components/Text/TextProps.generated.ts +1 -0
  81. package/src/build-components/Text/pattern.json +2 -1
  82. package/src/build-components/View/pattern.json +265 -265
  83. package/src/build-components/patterns.generated.ts +10019 -10689
  84. package/src/components/Breadcrumb.tsx +1 -1
  85. package/src/migrations/migratePipe.ts +1 -1
  86. package/src/migrations/semver.ts +3 -3
  87. package/src/modals/MockableFeatureModal.tsx +3 -1
  88. package/src/modals/PromptManagerModal.tsx +1 -7
  89. package/src/pages/DebugJsonPage.tsx +1 -1
  90. package/src/pages/ProjectDebug.tsx +1 -1
  91. package/src/pages/ProjectMigrationPage.tsx +1 -1
  92. package/src/pages/ProjectPage.tsx +1 -1
  93. package/src/pages/ProjectValidationPage.tsx +1 -1
  94. package/src/pages/tabs/SideTool.tsx +1 -1
  95. package/src/utils/nodeXml.ts +2 -4
  96. package/src/utils/parseColor.ts +5 -6
@@ -81,22 +81,14 @@ export function useAttributesEditorModel({
81
81
 
82
82
  const isStyleKeyForWrite = useCallback(
83
83
  (name: string) => {
84
- const metaCategory = attributeMeta?.[name]?.category;
85
- if (metaCategory === 'style') return true;
84
+ // Primary: is this key explicitly declared under schema.styles (nested)?
85
+ const nestedStyles = (schema as Record<string, unknown>).styles;
86
+ if (isPlainObject(nestedStyles) && name in nestedStyles) return true;
87
+ // Fallback: global View+Text style keys (inherited properties not in own schema)
86
88
  return styleAttributeKeys.has(name);
87
89
  },
88
- [attributeMeta, styleAttributeKeys],
90
+ [schema, styleAttributeKeys],
89
91
  );
90
- const isStyleKeyForRead = useCallback(
91
- (name: string) => {
92
- if (isStyleKeyForWrite(name)) return true;
93
- return !!(
94
- styleBag && Object.prototype.hasOwnProperty.call(styleBag, name)
95
- );
96
- },
97
- [isStyleKeyForWrite, styleBag],
98
- );
99
-
100
92
  const legacyFlatStyleKeys = useMemo(
101
93
  () => findLegacyFlatStyleKeys(attributes, isStyleKeyForWrite),
102
94
  [attributes, isStyleKeyForWrite],
@@ -136,12 +128,12 @@ export function useAttributesEditorModel({
136
128
 
137
129
  const getAttributeValue = useCallback(
138
130
  (name: string) => {
139
- if (isStyleKeyForRead(name)) {
131
+ if (isStyleKeyForWrite(name)) {
140
132
  return styleBag?.[name];
141
133
  }
142
134
  return (attributes as Record<string, unknown>)?.[name];
143
135
  },
144
- [attributes, isStyleKeyForRead, styleBag],
136
+ [attributes, isStyleKeyForWrite, styleBag],
145
137
  );
146
138
 
147
139
  const projectColorsForPicker = useMemo<ProjectColors | undefined>(
@@ -379,6 +371,15 @@ export function useAttributesEditorModel({
379
371
  if (name in nextAttrs) delete nextAttrs[name];
380
372
  } else {
381
373
  nextAttrs[name] = val;
374
+ // If this key was previously misplaced inside styles bag (e.g. due to a
375
+ // past editor bug), clean it up so there is no stale duplicate.
376
+ if (isPlainObject(nextAttrs.styles) && name in nextAttrs.styles) {
377
+ const cleanedStyles = { ...nextAttrs.styles };
378
+ delete cleanedStyles[name];
379
+ nextAttrs.styles = Object.keys(cleanedStyles).length
380
+ ? cleanedStyles
381
+ : undefined;
382
+ }
382
383
  }
383
384
  const next: NodeData<NodeDefaultAttribute> = {
384
385
  ...baseData,
@@ -46,5 +46,3 @@ export function BIcon({ node }: BIconComponentProps) {
46
46
  />
47
47
  );
48
48
  }
49
-
50
- export default React.memo(BIcon);
@@ -24,6 +24,7 @@ export interface BIconStyleGenerated {
24
24
  fontSize?: string;
25
25
  fontFamily?: string;
26
26
  fontWeight?: string;
27
+ textAlign?: string;
27
28
  flexDirection?: FlexDirectionOptionType;
28
29
  flexWrap?: FlexWrapOptionType;
29
30
  alignItems?: AlignItemsOptionType;
@@ -27,15 +27,7 @@
27
27
  "desiredParent": ["all", "background"],
28
28
  "label": "Background Image",
29
29
  "description": "Background image.",
30
- "styles": {
31
- "resizeMode": {
32
- "label": "Resize Mode",
33
- "description": "How the image fits its container.",
34
- "category": "style",
35
- "specialCategory": null,
36
- "sort": 4
37
- }
38
- },
30
+ "styles": {},
39
31
  "attributes": {
40
32
  "src": {
41
33
  "label": "Src",
@@ -43,6 +35,13 @@
43
35
  "category": "other",
44
36
  "specialCategory": null,
45
37
  "sort": 1
38
+ },
39
+ "resizeMode": {
40
+ "label": "Resize Mode",
41
+ "description": "How the image fits its container.",
42
+ "category": "other",
43
+ "specialCategory": null,
44
+ "sort": 4
46
45
  }
47
46
  }
48
47
  },
@@ -74,5 +74,3 @@ export function Button({ node }: ButtonComponentProps) {
74
74
  </a>
75
75
  );
76
76
  }
77
-
78
- export default React.memo(Button);
@@ -134,7 +134,7 @@ function CarouselDots({ node }: CarouselDotsComponentProps) {
134
134
  style={{
135
135
  width: dotSize,
136
136
  height: dotSize,
137
- backgroundColor: dotColor,
137
+ backgroundColor: dotColor ?? undefined,
138
138
  opacity: isDotSelected ? 1 : inactiveDotOpacity,
139
139
  borderRadius: '9999px',
140
140
  border: 0,
@@ -32,7 +32,7 @@
32
32
  "desiredParent": [">CarouselProvider"],
33
33
  "label": "Carousel Dots",
34
34
  "description": "Renders page indicator dots.",
35
- "styles": {
35
+ "attributes": {
36
36
  "dotType": {
37
37
  "label": "Dot Type",
38
38
  "description": "Style used for the dots.",
@@ -23,5 +23,3 @@ export function CarouselItem({ node }: CarouselItemComponentProps) {
23
23
  </div>
24
24
  );
25
25
  }
26
-
27
- export default React.memo(CarouselItem);
@@ -24,6 +24,7 @@ export interface CountDownStyleGenerated {
24
24
  fontSize?: string;
25
25
  fontFamily?: string;
26
26
  fontWeight?: string;
27
+ textAlign?: never;
27
28
  flexDirection?: FlexDirectionOptionType;
28
29
  flexWrap?: FlexWrapOptionType;
29
30
  alignItems?: AlignItemsOptionType;
@@ -58,7 +59,6 @@ export interface CountDownStyleGenerated {
58
59
  left?: string;
59
60
  right?: string;
60
61
  zIndex?: number;
61
- textAlign?: never;
62
62
  }
63
63
 
64
64
  export interface CountDownPropsGenerated {
@@ -11,7 +11,6 @@ import { useExtractViewStyle } from '../../attribute-analyser/style/web/useExtra
11
11
  import { useMockOSContext, useMockPermission } from '../../mockOS';
12
12
  import { useLocalize } from '../../hooks/useLocalize';
13
13
  import { parseColor } from '../../utils/parseColor';
14
- import { getStyleBag, toAttributeRecord } from '../../utils/attributeStyle';
15
14
 
16
15
  export function OnboardButton({ node }: OnboardButtonComponentProps) {
17
16
  useLogRender('OnboardButton');
@@ -76,7 +75,7 @@ export function OnboardButton({ node }: OnboardButtonComponentProps) {
76
75
  onClick={handleClick}
77
76
  style={{
78
77
  ...viewStyle,
79
- color: textColor,
78
+ color: textColor ?? undefined,
80
79
  border: 'none',
81
80
  display: 'flex',
82
81
  justifyContent: 'center',
@@ -87,5 +86,3 @@ export function OnboardButton({ node }: OnboardButtonComponentProps) {
87
86
  </button>
88
87
  );
89
88
  }
90
-
91
- export default React.memo(OnboardButton);
@@ -31,16 +31,14 @@
31
31
  "desiredParent": ["=OnboardItem"],
32
32
  "label": "Onboard Buttons",
33
33
  "description": "Wrapper for onboarding button set.",
34
- "styles": {
34
+ "attributes": {
35
35
  "seperatorColor": {
36
36
  "label": "Seperator Color",
37
37
  "description": "Color of the divider line.",
38
38
  "category": "style",
39
39
  "specialCategory": null,
40
40
  "sort": 5
41
- }
42
- },
43
- "attributes": {
41
+ },
44
42
  "buttonType": {
45
43
  "label": "Button Type",
46
44
  "description": "Which onboard button to show.",
@@ -21,10 +21,12 @@ export function OnboardDot({ node }: OnboardDotComponentProps) {
21
21
  const attributeKey = node.key ?? generatedId;
22
22
  const attrs = node.attributes;
23
23
  const attrRecord = toAttributeRecord(attrs);
24
+ // Backward compat: existing JSON may still have these in styles bag (old editor bug).
25
+ // handleAttributeChange will clean them up on next edit.
24
26
  const stylesBag = getStyleBag(attrs);
25
27
  const dotType =
26
- (stylesBag?.dotType as string | undefined) ??
27
28
  (attrRecord.dotType as string | undefined) ??
29
+ (stylesBag?.dotType as string | undefined) ??
28
30
  'normal_dot';
29
31
  const {
30
32
  previewMode,
@@ -35,15 +37,15 @@ export function OnboardDot({ node }: OnboardDotComponentProps) {
35
37
  } = useBuilderParams();
36
38
  // OnboardDot specific attributes
37
39
  const inactiveDotOpacity =
38
- (stylesBag?.inactive_dot_opacity as number | undefined) ??
39
40
  (attrRecord.inactive_dot_opacity as number | undefined) ??
41
+ (stylesBag?.inactive_dot_opacity as number | undefined) ??
40
42
  0.3;
41
43
  const inactiveDotColorOverride =
42
- (stylesBag?.inactive_dot_color as string | undefined) ??
43
- (attrRecord.inactive_dot_color as string | undefined);
44
+ (attrRecord.inactive_dot_color as string | undefined) ??
45
+ (stylesBag?.inactive_dot_color as string | undefined);
44
46
  const activeDotColor =
45
- (stylesBag?.active_dot_color as string | undefined) ??
46
- (attrRecord.active_dot_color as string | undefined);
47
+ (attrRecord.active_dot_color as string | undefined) ??
48
+ (stylesBag?.active_dot_color as string | undefined);
47
49
  const resolvedActiveDotColor = useMemo(
48
50
  () => parseColor(activeDotColor, { theme, projectColors }),
49
51
  [activeDotColor, theme, projectColors],
@@ -69,8 +71,8 @@ export function OnboardDot({ node }: OnboardDotComponentProps) {
69
71
  isSelected ? SELECTED_OUTLINE_STYLE : undefined,
70
72
  );
71
73
  const dotThicknessRaw =
72
- (stylesBag?.dot_thickness as string | number | undefined) ??
73
- (attrRecord.dot_thickness as string | number | undefined);
74
+ (attrRecord.dot_thickness as string | number | undefined) ??
75
+ (stylesBag?.dot_thickness as string | number | undefined);
74
76
  const dotSizeCss = useMemo((): string => {
75
77
  const parsed = parseSize(dotThicknessRaw, baseSize);
76
78
  if (parsed === undefined) return '10px';
@@ -160,5 +162,3 @@ export function OnboardDot({ node }: OnboardDotComponentProps) {
160
162
  </div>
161
163
  );
162
164
  }
163
-
164
- export default React.memo(OnboardDot);
@@ -49,7 +49,7 @@
49
49
  "specialCategory": null,
50
50
  "sort": 1
51
51
  },
52
- "dot_thickness": {
52
+ "dot_thickness": {
53
53
  "label": "Dot Thickness",
54
54
  "description": "Dot size/diameter.",
55
55
  "category": "style",
@@ -77,7 +77,6 @@
77
77
  "specialCategory": null,
78
78
  "sort": 5
79
79
  }
80
- }
80
+ }
81
81
  }
82
82
  }
83
-
@@ -9,7 +9,7 @@ import { isNodeSelected, SELECTED_OUTLINE_STYLE } from '../../utils/selection';
9
9
  import { useMergedStyle } from '../../utils/useMergedStyle';
10
10
  import { defaultLocalization } from '../../types/PreviewConfig';
11
11
  import { parseColor } from '../../utils/parseColor';
12
- import { getStyleBag, toAttributeRecord } from '../../utils/attributeStyle';
12
+ import { toAttributeRecord } from '../../utils/attributeStyle';
13
13
 
14
14
  type Segment =
15
15
  | { type: 'text'; value: string }
@@ -94,6 +94,7 @@ function buildSegments(
94
94
  function OnboardFooter({ node }: OnboardFooterComponentProps) {
95
95
  useLogRender('OnboardFooter');
96
96
  node = useNode(node);
97
+ console.log('node', node);
97
98
  const attributeName = node.sourceType ?? node.type ?? 'OnboardFooter';
98
99
  const {
99
100
  localization: builderLocalization,
@@ -110,18 +111,12 @@ function OnboardFooter({ node }: OnboardFooterComponentProps) {
110
111
 
111
112
  const attrs = node?.attributes;
112
113
  const attrRecord = toAttributeRecord(attrs);
113
- const styleBag = getStyleBag(attrs);
114
114
  const text = t(attrs?.textLocalizationKey);
115
115
  const textStyle = useExtractTextStyle(node, true);
116
116
  const viewStyle = useExtractViewStyle(node);
117
117
 
118
- // Read linked-word colors from both top-level attributes and the styles bag.
119
- // The editor saves them inside `styles` (meta category === 'style'),
120
- // but legacy JSON may have them at the top level.
121
- const rawFirstColor = (attrRecord.linkedWordFirstColor ??
122
- styleBag?.linkedWordFirstColor) as string | undefined;
123
- const rawSecondColor = (attrRecord.linkedWordSecondColor ??
124
- styleBag?.linkedWordSecondColor) as string | undefined;
118
+ const rawFirstColor = attrRecord.linkedWordFirstColor as string | undefined;
119
+ const rawSecondColor = attrRecord.linkedWordSecondColor as string | undefined;
125
120
 
126
121
  // Parse colors for linked words
127
122
  const parsedFirstColor = useMemo(
@@ -169,12 +164,12 @@ function OnboardFooter({ node }: OnboardFooterComponentProps) {
169
164
  const { segments, matchCount } = buildSegments(text, [
170
165
  {
171
166
  value: firstText,
172
- color: parsedFirstColor,
167
+ color: parsedFirstColor ?? undefined,
173
168
  page: attrs?.linkedWordFirstPage,
174
169
  },
175
170
  {
176
171
  value: secondText,
177
- color: parsedSecondColor,
172
+ color: parsedSecondColor ?? undefined,
178
173
  page: attrs?.linkedWordSecondPage,
179
174
  },
180
175
  ]);
@@ -209,7 +204,7 @@ function OnboardFooter({ node }: OnboardFooterComponentProps) {
209
204
  <span
210
205
  style={{
211
206
  ...mergedTextStyle,
212
- color: parsedFirstColor,
207
+ color: parsedFirstColor ?? undefined,
213
208
  }}
214
209
  onClick={() => handleClick(attrs?.linkedWordFirstPage)}
215
210
  >
@@ -220,7 +215,7 @@ function OnboardFooter({ node }: OnboardFooterComponentProps) {
220
215
  <span
221
216
  style={{
222
217
  ...mergedTextStyle,
223
- color: parsedSecondColor,
218
+ color: parsedSecondColor ?? undefined,
224
219
  }}
225
220
  onClick={() => handleClick(attrs?.linkedWordSecondPage)}
226
221
  >
@@ -24,6 +24,7 @@ export interface OnboardFooterStyleGenerated {
24
24
  fontSize?: string;
25
25
  fontFamily?: string;
26
26
  fontWeight?: string;
27
+ textAlign?: string;
27
28
  flexDirection?: FlexDirectionOptionType;
28
29
  flexWrap?: FlexWrapOptionType;
29
30
  alignItems?: AlignItemsOptionType;
@@ -63,9 +63,6 @@ export interface OnboardItemPropsGenerated {
63
63
  styles?: OnboardItemStyleGenerated;
64
64
  scrollable?: boolean;
65
65
  display?: DisplayOptionType;
66
- gap?: string;
67
- flexDirection?: FlexDirectionOptionType;
68
- paddingHorizontal?: string;
69
66
  };
70
67
  }
71
68
 
@@ -8,9 +8,11 @@
8
8
  "extends": "View",
9
9
  "attributes": {
10
10
  "display": ["flex", "block"],
11
- "gap": "size",
12
- "flexDirection": ["row", "column"],
13
- "paddingHorizontal": "size"
11
+ "styles": {
12
+ "gap": "size",
13
+ "flexDirection": ["row", "column"],
14
+ "paddingHorizontal": "size"
15
+ }
14
16
  }
15
17
  },
16
18
  "defaults": {
@@ -34,26 +36,28 @@
34
36
  "specialCategory": null,
35
37
  "sort": 1
36
38
  },
37
- "gap": {
38
- "label": "Gap",
39
- "description": "Space between child blocks.",
40
- "category": "container",
41
- "specialCategory": null,
42
- "sort": 2
43
- },
44
- "flexDirection": {
45
- "label": "Flex Direction",
46
- "description": "Order of child stacking.",
47
- "category": "container",
48
- "specialCategory": null,
49
- "sort": 3
50
- },
51
- "paddingHorizontal": {
52
- "label": "Padding Horizontal",
53
- "description": "Left and right padding.",
54
- "category": "container",
55
- "specialCategory": "padding",
56
- "sort": 4
39
+ "styles": {
40
+ "gap": {
41
+ "label": "Gap",
42
+ "description": "Space between child blocks.",
43
+ "category": "container",
44
+ "specialCategory": null,
45
+ "sort": 2
46
+ },
47
+ "flexDirection": {
48
+ "label": "Flex Direction",
49
+ "description": "Order of child stacking.",
50
+ "category": "container",
51
+ "specialCategory": null,
52
+ "sort": 3
53
+ },
54
+ "paddingHorizontal": {
55
+ "label": "Padding Horizontal",
56
+ "description": "Left and right padding.",
57
+ "category": "container",
58
+ "specialCategory": "padding",
59
+ "sort": 4
60
+ }
57
61
  }
58
62
  }
59
63
  }
@@ -30,33 +30,35 @@
30
30
  "specialCategory": null,
31
31
  "sort": -10
32
32
  },
33
- "paddingTop": {
34
- "label": "Padding Top",
35
- "description": "Top padding for the provider.",
36
- "category": "container",
37
- "specialCategory": "padding",
38
- "sort": 1
39
- },
40
- "paddingRight": {
41
- "label": "Padding Right",
42
- "description": "Right padding for the provider.",
43
- "category": "container",
44
- "specialCategory": "padding",
45
- "sort": 2
46
- },
47
- "paddingBottom": {
48
- "label": "Padding Bottom",
49
- "description": "Bottom padding for the provider.",
50
- "category": "container",
51
- "specialCategory": "padding",
52
- "sort": 3
53
- },
54
- "paddingLeft": {
55
- "label": "Padding Left",
56
- "description": "Left padding for the provider.",
57
- "category": "container",
58
- "specialCategory": "padding",
59
- "sort": 4
33
+ "styles": {
34
+ "paddingTop": {
35
+ "label": "Padding Top",
36
+ "description": "Top padding for the provider.",
37
+ "category": "container",
38
+ "specialCategory": "padding",
39
+ "sort": 1
40
+ },
41
+ "paddingRight": {
42
+ "label": "Padding Right",
43
+ "description": "Right padding for the provider.",
44
+ "category": "container",
45
+ "specialCategory": "padding",
46
+ "sort": 2
47
+ },
48
+ "paddingBottom": {
49
+ "label": "Padding Bottom",
50
+ "description": "Bottom padding for the provider.",
51
+ "category": "container",
52
+ "specialCategory": "padding",
53
+ "sort": 3
54
+ },
55
+ "paddingLeft": {
56
+ "label": "Padding Left",
57
+ "description": "Left padding for the provider.",
58
+ "category": "container",
59
+ "specialCategory": "padding",
60
+ "sort": 4
61
+ }
60
62
  }
61
63
  }
62
64
  }
@@ -24,6 +24,7 @@ export interface OnboardSubtitleStyleGenerated {
24
24
  fontSize?: string;
25
25
  fontFamily?: string;
26
26
  fontWeight?: string;
27
+ textAlign?: string;
27
28
  flexDirection?: FlexDirectionOptionType;
28
29
  flexWrap?: FlexWrapOptionType;
29
30
  alignItems?: AlignItemsOptionType;
@@ -24,6 +24,7 @@ export interface OnboardTitleStyleGenerated {
24
24
  fontSize?: string;
25
25
  fontFamily?: string;
26
26
  fontWeight?: string;
27
+ textAlign?: string;
27
28
  flexDirection?: FlexDirectionOptionType;
28
29
  flexWrap?: FlexWrapOptionType;
29
30
  alignItems?: AlignItemsOptionType;
@@ -63,5 +63,3 @@ export function PaywallCloseButton({ node }: PaywallCloseButtonComponentProps) {
63
63
  </a>
64
64
  );
65
65
  }
66
-
67
- export default React.memo(PaywallCloseButton);
@@ -24,6 +24,7 @@ export interface PaywallCloseButtonStyleGenerated {
24
24
  fontSize?: string;
25
25
  fontFamily?: string;
26
26
  fontWeight?: string;
27
+ textAlign?: string;
27
28
  flexDirection?: FlexDirectionOptionType;
28
29
  flexWrap?: FlexWrapOptionType;
29
30
  alignItems?: AlignItemsOptionType;
@@ -28,6 +28,7 @@ export interface PriceTagStyleGenerated {
28
28
  fontSize?: string;
29
29
  fontFamily?: string;
30
30
  fontWeight?: string;
31
+ textAlign?: string;
31
32
  flexDirection?: FlexDirectionOptionType;
32
33
  flexWrap?: FlexWrapOptionType;
33
34
  alignItems?: AlignItemsOptionType;
@@ -24,6 +24,7 @@ export interface PricingStyleGenerated {
24
24
  fontSize?: string;
25
25
  fontFamily?: string;
26
26
  fontWeight?: string;
27
+ textAlign?: string;
27
28
  flexDirection?: FlexDirectionOptionType;
28
29
  flexWrap?: FlexWrapOptionType;
29
30
  alignItems?: AlignItemsOptionType;
@@ -24,6 +24,7 @@ export interface PromoStyleGenerated {
24
24
  fontSize?: string;
25
25
  fontFamily?: string;
26
26
  fontWeight?: string;
27
+ textAlign?: string;
27
28
  flexDirection?: FlexDirectionOptionType;
28
29
  flexWrap?: FlexWrapOptionType;
29
30
  alignItems?: AlignItemsOptionType;
@@ -16,7 +16,7 @@
16
16
  "desiredParent": ["all"],
17
17
  "label": "Radio Button",
18
18
  "description": "Generic radio button icon.",
19
- "styles": {
19
+ "attributes": {
20
20
  "color": {
21
21
  "label": "Color",
22
22
  "description": "Radio color.",
@@ -30,9 +30,7 @@
30
30
  "category": "style",
31
31
  "specialCategory": null,
32
32
  "sort": 2
33
- }
34
- },
35
- "attributes": {
33
+ },
36
34
  "selected": {
37
35
  "label": "Selected",
38
36
  "description": "Whether the radio is selected.",
@@ -21,31 +21,31 @@
21
21
  "desiredParent": ["all"],
22
22
  "label": "Separator",
23
23
  "description": "Horizontal line separator.",
24
- "styles": {
25
- "backgroundColor": {
26
- "label": "Color",
27
- "description": "Separator line color.",
28
- "category": "style",
29
- "specialCategory": null,
30
- "sort": 1
31
- }
32
- },
33
24
  "attributes": {
34
- "width": {
35
- "label": "Width",
36
- "description": "Separator width.",
37
- "category": "container",
38
- "specialCategory": null,
39
- "sort": 1,
40
- "preferredScale": "s"
41
- },
42
- "height": {
43
- "label": "Height",
44
- "description": "Separator thickness.",
45
- "category": "container",
46
- "specialCategory": null,
47
- "sort": 2,
48
- "preferredScale": "vs"
25
+ "styles": {
26
+ "backgroundColor": {
27
+ "label": "Color",
28
+ "description": "Separator line color.",
29
+ "category": "style",
30
+ "specialCategory": null,
31
+ "sort": 1
32
+ },
33
+ "width": {
34
+ "label": "Width",
35
+ "description": "Separator width.",
36
+ "category": "container",
37
+ "specialCategory": null,
38
+ "sort": 1,
39
+ "preferredScale": "s"
40
+ },
41
+ "height": {
42
+ "label": "Height",
43
+ "description": "Separator thickness.",
44
+ "category": "container",
45
+ "specialCategory": null,
46
+ "sort": 2,
47
+ "preferredScale": "vs"
48
+ }
49
49
  }
50
50
  }
51
51
  },
@@ -58,6 +58,7 @@ export interface TextStyleGenerated {
58
58
  fontSize?: string;
59
59
  fontFamily?: string;
60
60
  fontWeight?: string;
61
+ textAlign?: string;
61
62
  }
62
63
 
63
64
  export interface TextPropsGenerated {
@@ -14,7 +14,8 @@
14
14
  "color": "color",
15
15
  "fontSize": "size",
16
16
  "fontFamily": "fontFamily",
17
- "fontWeight": "fontWeight"
17
+ "fontWeight": "fontWeight",
18
+ "textAlign": "string"
18
19
  }
19
20
  },
20
21
  "defaults": {