@developer_tribe/react-builder 1.2.20 → 1.2.21

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 (151) hide show
  1. package/dist/attribute-analyser/style/web/useExtractTextStyle.d.ts +1 -1
  2. package/dist/build-components/BIcon/BIconProps.generated.d.ts +2 -0
  3. package/dist/build-components/BackgroundImage/BackgroundImageProps.generated.d.ts +2 -0
  4. package/dist/build-components/Button/ButtonProps.generated.d.ts +2 -0
  5. package/dist/build-components/Carousel/CarouselProps.generated.d.ts +2 -0
  6. package/dist/build-components/CarouselButtons/CarouselButtonsProps.generated.d.ts +2 -0
  7. package/dist/build-components/CarouselDots/CarouselDotsProps.generated.d.ts +2 -0
  8. package/dist/build-components/CarouselItem/CarouselItemProps.generated.d.ts +2 -0
  9. package/dist/build-components/CarouselProvider/CarouselProviderProps.generated.d.ts +2 -0
  10. package/dist/build-components/CountDown/CountDownProps.generated.d.ts +2 -0
  11. package/dist/build-components/Counter/CounterProps.generated.d.ts +2 -0
  12. package/dist/build-components/Image/ImageProps.generated.d.ts +2 -0
  13. package/dist/build-components/Main/MainProps.generated.d.ts +2 -0
  14. package/dist/build-components/Onboard/OnboardProps.generated.d.ts +2 -0
  15. package/dist/build-components/OnboardButton/OnboardButtonProps.generated.d.ts +2 -0
  16. package/dist/build-components/OnboardButtons/OnboardButtonsProps.generated.d.ts +2 -0
  17. package/dist/build-components/OnboardDot/OnboardDotProps.generated.d.ts +2 -0
  18. package/dist/build-components/OnboardFooter/OnboardFooterProps.generated.d.ts +2 -0
  19. package/dist/build-components/OnboardImage/OnboardImageProps.generated.d.ts +2 -0
  20. package/dist/build-components/OnboardItem/OnboardItemProps.generated.d.ts +2 -0
  21. package/dist/build-components/OnboardProvider/OnboardProviderProps.generated.d.ts +2 -0
  22. package/dist/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.d.ts +2 -0
  23. package/dist/build-components/OnboardTitle/OnboardTitleProps.generated.d.ts +2 -0
  24. package/dist/build-components/PaywallBackground/PaywallBackgroundProps.generated.d.ts +2 -0
  25. package/dist/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.d.ts +2 -0
  26. package/dist/build-components/PaywallCounter/PaywallCounterProps.generated.d.ts +2 -0
  27. package/dist/build-components/PaywallOptions/PaywallOptionsProps.generated.d.ts +2 -0
  28. package/dist/build-components/PaywallProvider/PaywallProviderProps.generated.d.ts +2 -0
  29. package/dist/build-components/PaywallSubscribeButton/PaywallSubscribeButtonProps.generated.d.ts +2 -0
  30. package/dist/build-components/RadioButton/RadioButtonProps.generated.d.ts +2 -0
  31. package/dist/build-components/Text/TextProps.generated.d.ts +2 -0
  32. package/dist/build-components/View/View.d.ts +1 -1
  33. package/dist/build-components/View/ViewProps.generated.d.ts +2 -0
  34. package/dist/build-components/patterns.generated.d.ts +287 -2
  35. package/dist/components/BuilderButton.d.ts +3 -1
  36. package/dist/index.cjs.js +3 -3
  37. package/dist/index.cjs.js.map +1 -1
  38. package/dist/index.esm.js +4 -4
  39. package/dist/index.esm.js.map +1 -1
  40. package/dist/index.web.cjs.js +4 -4
  41. package/dist/index.web.cjs.js.map +1 -1
  42. package/dist/index.web.esm.js +4 -4
  43. package/dist/index.web.esm.js.map +1 -1
  44. package/dist/store.d.ts +2 -0
  45. package/dist/styles.css +1 -1
  46. package/dist/utils/extractTextStyle/extractTextStyle.d.ts +1 -0
  47. package/package.json +1 -1
  48. package/scripts/migrate-patterns-to-v2.mjs +13 -8
  49. package/scripts/prebuild/icon-generator.js +34 -37
  50. package/src/assets/loading_animation.json +2587 -1
  51. package/src/assets/meta.json +1 -1
  52. package/src/assets/samples/carousel-sample.json +279 -197
  53. package/src/assets/samples/getSamples.ts +16 -1
  54. package/src/assets/samples/paywall-1.json +16 -0
  55. package/src/assets/samples/paywall-2.json +2 -2
  56. package/src/assets/samples/paywall-app-delete-offer.json +353 -0
  57. package/src/assets/samples/paywall-app-open-offer.json +353 -0
  58. package/src/assets/samples/paywall-back-offer.json +353 -0
  59. package/src/assets/samples/paywall-notification-offer.json +353 -0
  60. package/src/assets/samples/vpn-onboard-1.json +23 -12
  61. package/src/assets/samples/vpn-onboard-2.json +23 -12
  62. package/src/assets/samples/vpn-onboard-3.json +23 -12
  63. package/src/assets/samples/vpn-onboard-4.json +23 -12
  64. package/src/assets/samples/vpn-onboard-5.json +23 -12
  65. package/src/assets/samples/vpn-onboard-6.json +23 -12
  66. package/src/attribute-analyser/style/web/useExtractTextStyle.ts +9 -2
  67. package/src/build-components/BIcon/BIconProps.generated.ts +2 -0
  68. package/src/build-components/BackgroundImage/BackgroundImageProps.generated.ts +2 -0
  69. package/src/build-components/Button/ButtonProps.generated.ts +2 -0
  70. package/src/build-components/Carousel/CarouselProps.generated.ts +2 -0
  71. package/src/build-components/Carousel/pattern.json +2 -8
  72. package/src/build-components/CarouselButtons/CarouselButtonsProps.generated.ts +2 -0
  73. package/src/build-components/CarouselButtons/pattern.json +2 -9
  74. package/src/build-components/CarouselDots/CarouselDotsProps.generated.ts +2 -0
  75. package/src/build-components/CarouselDots/pattern.json +1 -3
  76. package/src/build-components/CarouselItem/CarouselItemProps.generated.ts +2 -0
  77. package/src/build-components/CarouselItem/pattern.json +1 -3
  78. package/src/build-components/CarouselProvider/CarouselProvider.tsx +5 -44
  79. package/src/build-components/CarouselProvider/CarouselProviderProps.generated.ts +2 -0
  80. package/src/build-components/CarouselProvider/pattern.json +6 -0
  81. package/src/build-components/CountDown/CountDownProps.generated.ts +2 -0
  82. package/src/build-components/CountDown/pattern.json +0 -1
  83. package/src/build-components/Counter/CounterProps.generated.ts +2 -0
  84. package/src/build-components/Counter/pattern.json +0 -1
  85. package/src/build-components/Image/Image.tsx +1 -1
  86. package/src/build-components/Image/ImageProps.generated.ts +2 -0
  87. package/src/build-components/Main/MainProps.generated.ts +2 -0
  88. package/src/build-components/Main/pattern.json +1 -3
  89. package/src/build-components/Onboard/OnboardProps.generated.ts +2 -0
  90. package/src/build-components/Onboard/pattern.json +2 -6
  91. package/src/build-components/OnboardButton/OnboardButton.tsx +0 -4
  92. package/src/build-components/OnboardButton/OnboardButtonProps.generated.ts +2 -0
  93. package/src/build-components/OnboardButton/pattern.json +9 -14
  94. package/src/build-components/OnboardButtons/OnboardButtons.tsx +17 -20
  95. package/src/build-components/OnboardButtons/OnboardButtonsProps.generated.ts +2 -0
  96. package/src/build-components/OnboardButtons/pattern.json +15 -15
  97. package/src/build-components/OnboardDot/OnboardDot.tsx +0 -3
  98. package/src/build-components/OnboardDot/OnboardDotProps.generated.ts +2 -0
  99. package/src/build-components/OnboardFooter/OnboardFooter.tsx +63 -51
  100. package/src/build-components/OnboardFooter/OnboardFooterProps.generated.ts +2 -0
  101. package/src/build-components/OnboardFooter/pattern.json +6 -3
  102. package/src/build-components/OnboardImage/OnboardImageProps.generated.ts +2 -0
  103. package/src/build-components/OnboardImage/pattern.json +1 -5
  104. package/src/build-components/OnboardItem/OnboardItemProps.generated.ts +2 -0
  105. package/src/build-components/OnboardItem/pattern.json +3 -11
  106. package/src/build-components/OnboardProvider/OnboardProviderProps.generated.ts +2 -0
  107. package/src/build-components/OnboardProvider/pattern.json +2 -8
  108. package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.ts +2 -0
  109. package/src/build-components/OnboardSubtitle/pattern.json +1 -4
  110. package/src/build-components/OnboardTitle/OnboardTitleProps.generated.ts +2 -0
  111. package/src/build-components/OnboardTitle/pattern.json +1 -4
  112. package/src/build-components/PaywallBackground/PaywallBackgroundProps.generated.ts +2 -0
  113. package/src/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.ts +2 -0
  114. package/src/build-components/PaywallCloseButton/pattern.json +1 -3
  115. package/src/build-components/PaywallCounter/PaywallCounterProps.generated.ts +2 -0
  116. package/src/build-components/PaywallCounter/pattern.json +0 -1
  117. package/src/build-components/PaywallOptions/PaywallOptions.tsx +1 -1
  118. package/src/build-components/PaywallOptions/PaywallOptionsProps.generated.ts +2 -0
  119. package/src/build-components/PaywallOptions/pattern.json +1 -3
  120. package/src/build-components/PaywallProvider/PaywallProviderProps.generated.ts +2 -0
  121. package/src/build-components/PaywallProvider/pattern.json +1 -3
  122. package/src/build-components/PaywallSubscribeButton/PaywallSubscribeButtonProps.generated.ts +2 -0
  123. package/src/build-components/PaywallSubscribeButton/pattern.json +1 -3
  124. package/src/build-components/RadioButton/RadioButtonProps.generated.ts +2 -0
  125. package/src/build-components/RadioButton/pattern.json +1 -3
  126. package/src/build-components/RenderNode.generated.tsx +1 -1
  127. package/src/build-components/Text/TextProps.generated.ts +2 -0
  128. package/src/build-components/View/View.tsx +11 -7
  129. package/src/build-components/View/ViewProps.generated.ts +2 -0
  130. package/src/build-components/View/pattern.json +8 -0
  131. package/src/build-components/patterns.generated.ts +277 -2
  132. package/src/build-components/useNode.ts +2 -2
  133. package/src/components/Builder.tsx +98 -8
  134. package/src/components/BuilderButton.tsx +39 -7
  135. package/src/components/DeviceButton.tsx +5 -1
  136. package/src/pages/DebugJsonPage.tsx +30 -1
  137. package/src/pages/ProjectDebug.tsx +0 -1
  138. package/src/pages/ProjectPage.tsx +2 -2
  139. package/src/store.ts +8 -0
  140. package/src/styles/base/_global.scss +0 -5
  141. package/src/styles/components/_editor-shell.scss +18 -3
  142. package/src/styles/components/_onboard.scss +0 -17
  143. package/src/styles/foundation/_colors.scss +1 -4
  144. package/src/styles/foundation/_typography.scss +0 -1
  145. package/src/styles/layout/_builder.scss +20 -0
  146. package/src/styles/modals/_product-presets-modal.scss +0 -2
  147. package/src/utils/extractTextStyle/extractTextStyle.ts +47 -13
  148. package/src/utils/extractViewStyle/extractViewStyle.ts +118 -39
  149. package/src/utils/logRenderStore.ts +7 -9
  150. package/src/utils/logger.ts +1 -5
  151. package/src/utils/repairNodeKeys.ts +1 -4
@@ -2,13 +2,13 @@ import React, { useId, useMemo } from 'react';
2
2
  import type { OnboardFooterComponentProps } from './OnboardFooterProps.generated';
3
3
  import useNode from '../useNode';
4
4
  import { useBuilderParams } from '../../components/BuilderProvider';
5
- import { parseSize } from '../../size-matters';
6
5
  import { useExtractTextStyle } from '../../attribute-analyser/style/web/useExtractTextStyle';
7
6
  import { useExtractViewStyle } from '../../attribute-analyser/style/web/useExtractViewStyle';
8
7
  import { useLogRender } from '../../utils/useLogRender';
9
- import { isNodeSelected } from '../../utils/selection';
8
+ import { isNodeSelected, SELECTED_OUTLINE_STYLE } from '../../utils/selection';
10
9
  import { useMergedStyle } from '../../utils/useMergedStyle';
11
10
  import { defaultAppConfig } from '../../types/PreviewConfig';
11
+ import { parseColor } from '../../utils/parseColor';
12
12
 
13
13
  type Segment =
14
14
  | { type: 'text'; value: string }
@@ -98,48 +98,57 @@ function OnboardFooter({ node }: OnboardFooterComponentProps) {
98
98
  appConfig: builderAppConfig,
99
99
  previewMode,
100
100
  selectedKey,
101
+ projectColors: builderProjectColors,
101
102
  } = useBuilderParams();
102
103
  const appConfig = builderAppConfig ?? defaultAppConfig;
103
- const { localication, defaultLanguage } = appConfig;
104
+ const projectColors = builderProjectColors;
105
+ const { localication, defaultLanguage, theme } = appConfig;
104
106
  const t = (key?: string) =>
105
107
  key ? (localication?.[defaultLanguage ?? 'en']?.[key] ?? key) : '';
106
108
 
107
109
  const attrs = node?.attributes;
108
- const styleBag = attrs?.style;
109
110
  const text = t(attrs?.textLocalizationKey);
110
- const textStyle = useExtractTextStyle(node);
111
+ const textStyle = useExtractTextStyle(node, true);
111
112
  const viewStyle = useExtractViewStyle(node);
112
113
 
113
- const linkStyle = (color?: string): React.CSSProperties => ({
114
- color,
115
- cursor: color ? 'pointer' : undefined,
116
- });
117
-
118
- const paddingHorizontal = parseSize(styleBag?.paddingHorizontal);
119
- const layoutStyle = useMemo<React.CSSProperties>(
120
- () => ({
121
- paddingLeft: paddingHorizontal,
122
- paddingRight: paddingHorizontal,
123
- textAlign: 'center',
124
- }),
125
- [paddingHorizontal],
114
+ // Parse colors for linked words
115
+ const parsedFirstColor = useMemo(
116
+ () =>
117
+ parseColor(attrs?.linkedWordFirstColor, {
118
+ projectColors,
119
+ theme,
120
+ }),
121
+ [attrs?.linkedWordFirstColor, projectColors, theme],
122
+ );
123
+ const parsedSecondColor = useMemo(
124
+ () =>
125
+ parseColor(attrs?.linkedWordSecondColor, {
126
+ projectColors,
127
+ theme,
128
+ }),
129
+ [attrs?.linkedWordSecondColor, projectColors, theme],
126
130
  );
127
131
 
132
+ const mergedTextStyle = useMergedStyle(textStyle, {
133
+ cursor: 'pointer',
134
+ });
128
135
  const isSelected = isNodeSelected({
129
136
  previewMode: !!previewMode,
130
137
  current: selectedKey ? { key: selectedKey } : undefined,
131
138
  node,
132
139
  });
133
- const baseStyle = useMergedStyle(viewStyle, textStyle);
134
- const paddedStyle = useMergedStyle(baseStyle, layoutStyle);
140
+ const mergedViewStyle = useMergedStyle(
141
+ viewStyle,
142
+ isSelected ? SELECTED_OUTLINE_STYLE : undefined,
143
+ );
135
144
  const generatedId = useId();
136
145
  const attributeKey = node.key ?? generatedId;
146
+
137
147
  return (
138
148
  <div
139
149
  attribute-name={attributeName}
140
150
  attribute-key={attributeKey}
141
- className={isSelected ? 'rb-node-selected' : undefined}
142
- style={paddedStyle}
151
+ style={mergedViewStyle}
143
152
  >
144
153
  {!!text &&
145
154
  (() => {
@@ -148,57 +157,60 @@ function OnboardFooter({ node }: OnboardFooterComponentProps) {
148
157
  const { segments, matchCount } = buildSegments(text, [
149
158
  {
150
159
  value: firstText,
151
- color: attrs?.linkedWordFirstColor,
152
- page: (attrs as any)?.linkedWordFirstPage,
160
+ color: parsedFirstColor,
161
+ page: attrs?.linkedWordFirstPage,
153
162
  },
154
163
  {
155
164
  value: secondText,
156
- color: attrs?.linkedWordSecondColor,
157
- page: (attrs as any)?.linkedWordSecondPage,
165
+ color: parsedSecondColor,
166
+ page: attrs?.linkedWordSecondPage,
158
167
  },
159
168
  ]);
160
169
 
161
- const textColor = styleBag?.color;
162
-
163
170
  const handleClick = (page?: string) => {
164
171
  if (!page) return;
165
172
  };
166
173
 
167
174
  return (
168
175
  <>
169
- <p style={{ color: textColor, alignItems: 'center' }}>
170
- {segments.map((seg, i) =>
171
- seg.type === 'text' ? (
172
- <span key={i}>{seg.value}</span>
173
- ) : (
174
- <span
175
- key={i}
176
- style={linkStyle(seg.color)}
177
- onClick={() => handleClick(seg.page)}
178
- >
179
- {seg.value}
180
- </span>
181
- ),
182
- )}
183
- </p>
176
+ {segments.map((seg, i) =>
177
+ seg.type === 'text' ? (
178
+ <span key={i} style={mergedTextStyle}>
179
+ {seg.value}
180
+ </span>
181
+ ) : (
182
+ <span
183
+ key={i}
184
+ style={{
185
+ ...mergedTextStyle,
186
+ color: seg.color,
187
+ }}
188
+ onClick={() => handleClick(seg.page)}
189
+ >
190
+ {seg.value}
191
+ </span>
192
+ ),
193
+ )}
184
194
  {matchCount === 0 && (
185
195
  <div>
186
196
  {attrs?.linkedWordFirstLocalizationKey && (
187
197
  <span
188
- style={linkStyle(attrs?.linkedWordFirstColor)}
189
- onClick={() =>
190
- handleClick((attrs as any)?.linkedWordFirstPage)
191
- }
198
+ style={{
199
+ ...mergedTextStyle,
200
+ color: parsedFirstColor,
201
+ }}
202
+ onClick={() => handleClick(attrs?.linkedWordFirstPage)}
192
203
  >
193
204
  {firstText}
194
205
  </span>
195
206
  )}
196
207
  {attrs?.linkedWordSecondLocalizationKey && (
197
208
  <span
198
- style={linkStyle(attrs?.linkedWordSecondColor)}
199
- onClick={() =>
200
- handleClick((attrs as any)?.linkedWordSecondPage)
201
- }
209
+ style={{
210
+ ...mergedTextStyle,
211
+ color: parsedSecondColor,
212
+ }}
213
+ onClick={() => handleClick(attrs?.linkedWordSecondPage)}
202
214
  >
203
215
  {secondText}
204
216
  </span>
@@ -4,6 +4,7 @@ import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type TextAlignOptionType = 'left' | 'center' | 'right' | 'justify';
6
6
  export type FlexDirectionOptionType = 'row' | 'column';
7
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
7
8
  export type AlignItemsOptionType =
8
9
  | 'flex-start'
9
10
  | 'center'
@@ -26,6 +27,7 @@ export interface OnboardFooterStyleGenerated {
26
27
  fontWeight?: string;
27
28
  textAlign?: TextAlignOptionType;
28
29
  flexDirection?: FlexDirectionOptionType;
30
+ flexWrap?: FlexWrapOptionType;
29
31
  alignItems?: AlignItemsOptionType;
30
32
  justifyContent?: JustifyContentOptionType;
31
33
  gap?: string;
@@ -18,13 +18,16 @@
18
18
  },
19
19
  "defaults": {
20
20
  "style": {
21
+ "flexDirection": "row",
22
+ "flexWrap": "wrap",
23
+ "alignItems": "center",
24
+ "justifyContent": "center",
25
+ "textAlign": "center",
21
26
  "paddingHorizontal": "24@s"
22
27
  }
23
28
  },
24
29
  "meta": {
25
- "desiredParent": [
26
- ">OnboardItem"
27
- ],
30
+ "desiredParent": [">OnboardItem"],
28
31
  "label": "Onboard Footer",
29
32
  "description": "Footer text with optional links.",
30
33
  "styles": {
@@ -4,6 +4,7 @@ import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type ResizeModeOptionType = 'cover' | 'contain' | 'stretch' | 'center';
6
6
  export type FlexDirectionOptionType = 'row' | 'column';
7
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
7
8
  export type AlignItemsOptionType =
8
9
  | 'flex-start'
9
10
  | 'center'
@@ -21,6 +22,7 @@ export type PositionOptionType = 'relative' | 'absolute';
21
22
 
22
23
  export interface OnboardImageStyleGenerated {
23
24
  flexDirection?: FlexDirectionOptionType;
25
+ flexWrap?: FlexWrapOptionType;
24
26
  alignItems?: AlignItemsOptionType;
25
27
  justifyContent?: JustifyContentOptionType;
26
28
  gap?: string;
@@ -12,11 +12,7 @@
12
12
  }
13
13
  },
14
14
  "meta": {
15
- "desiredParent": [
16
- ">OnboardProvider",
17
- ">OnboardItem",
18
- "!=Onboard"
19
- ],
15
+ "desiredParent": [">OnboardProvider", ">OnboardItem", "!=Onboard"],
20
16
  "label": "Onboard Image",
21
17
  "description": "Onboarding hero image with media.",
22
18
  "styles": {},
@@ -4,6 +4,7 @@ import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type DisplayOptionType = 'flex' | 'block';
6
6
  export type FlexDirectionOptionType = 'row' | 'column';
7
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
7
8
  export type AlignItemsOptionType =
8
9
  | 'flex-start'
9
10
  | 'center'
@@ -21,6 +22,7 @@ export type PositionOptionType = 'relative' | 'absolute';
21
22
 
22
23
  export interface OnboardItemStyleGenerated {
23
24
  flexDirection?: FlexDirectionOptionType;
25
+ flexWrap?: FlexWrapOptionType;
24
26
  alignItems?: AlignItemsOptionType;
25
27
  justifyContent?: JustifyContentOptionType;
26
28
  gap?: string;
@@ -7,15 +7,9 @@
7
7
  "attributes": {
8
8
  "title": "title",
9
9
  "description": "description",
10
- "display": [
11
- "flex",
12
- "block"
13
- ],
10
+ "display": ["flex", "block"],
14
11
  "gap": "size",
15
- "flexDirection": [
16
- "row",
17
- "column"
18
- ],
12
+ "flexDirection": ["row", "column"],
19
13
  "paddingHorizontal": "size"
20
14
  }
21
15
  },
@@ -28,9 +22,7 @@
28
22
  }
29
23
  },
30
24
  "meta": {
31
- "desiredParent": [
32
- "=Onboard"
33
- ],
25
+ "desiredParent": ["=Onboard"],
34
26
  "label": "Onboard Item",
35
27
  "description": "Single onboarding screen section.",
36
28
  "styles": {},
@@ -4,6 +4,7 @@ import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type ThemeOptionType = 'light' | 'dark' | 'all';
6
6
  export type FlexDirectionOptionType = 'row' | 'column';
7
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
7
8
  export type AlignItemsOptionType =
8
9
  | 'flex-start'
9
10
  | 'center'
@@ -21,6 +22,7 @@ export type PositionOptionType = 'relative' | 'absolute';
21
22
 
22
23
  export interface OnboardProviderStyleGenerated {
23
24
  flexDirection?: FlexDirectionOptionType;
25
+ flexWrap?: FlexWrapOptionType;
24
26
  alignItems?: AlignItemsOptionType;
25
27
  justifyContent?: JustifyContentOptionType;
26
28
  gap?: string;
@@ -7,11 +7,7 @@
7
7
  "attributes": {
8
8
  "title": "title",
9
9
  "description": "description",
10
- "theme": [
11
- "light",
12
- "dark",
13
- "all"
14
- ],
10
+ "theme": ["light", "dark", "all"],
15
11
  "borderRadius": "never"
16
12
  }
17
13
  },
@@ -22,9 +18,7 @@
22
18
  }
23
19
  },
24
20
  "meta": {
25
- "desiredParent": [
26
- "root"
27
- ],
21
+ "desiredParent": ["root"],
28
22
  "label": "Onboard Provider",
29
23
  "description": "Provides shared settings for onboarding.",
30
24
  "styles": {},
@@ -4,6 +4,7 @@ import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type TextAlignOptionType = 'left' | 'center' | 'right' | 'justify';
6
6
  export type FlexDirectionOptionType = 'row' | 'column';
7
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
7
8
  export type AlignItemsOptionType =
8
9
  | 'flex-start'
9
10
  | 'center'
@@ -26,6 +27,7 @@ export interface OnboardSubtitleStyleGenerated {
26
27
  fontWeight?: string;
27
28
  textAlign?: TextAlignOptionType;
28
29
  flexDirection?: FlexDirectionOptionType;
30
+ flexWrap?: FlexWrapOptionType;
29
31
  alignItems?: AlignItemsOptionType;
30
32
  justifyContent?: JustifyContentOptionType;
31
33
  gap?: string;
@@ -16,10 +16,7 @@
16
16
  }
17
17
  },
18
18
  "meta": {
19
- "desiredParent": [
20
- ">OnboardProvider",
21
- ">OnboardItem"
22
- ],
19
+ "desiredParent": [">OnboardProvider", ">OnboardItem"],
23
20
  "label": "Onboard Subtitle",
24
21
  "description": "Subtitle text for an onboarding step.",
25
22
  "styles": {}
@@ -4,6 +4,7 @@ import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type TextAlignOptionType = 'left' | 'center' | 'right' | 'justify';
6
6
  export type FlexDirectionOptionType = 'row' | 'column';
7
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
7
8
  export type AlignItemsOptionType =
8
9
  | 'flex-start'
9
10
  | 'center'
@@ -26,6 +27,7 @@ export interface OnboardTitleStyleGenerated {
26
27
  fontWeight?: string;
27
28
  textAlign?: TextAlignOptionType;
28
29
  flexDirection?: FlexDirectionOptionType;
30
+ flexWrap?: FlexWrapOptionType;
29
31
  alignItems?: AlignItemsOptionType;
30
32
  justifyContent?: JustifyContentOptionType;
31
33
  gap?: string;
@@ -17,10 +17,7 @@
17
17
  }
18
18
  },
19
19
  "meta": {
20
- "desiredParent": [
21
- ">OnboardItem",
22
- ">OnboardProvider"
23
- ],
20
+ "desiredParent": [">OnboardItem", ">OnboardProvider"],
24
21
  "label": "Onboard Title",
25
22
  "description": "Title text for an onboarding step.",
26
23
  "styles": {}
@@ -4,6 +4,7 @@ import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type ResizeModeOptionType = 'cover' | 'contain' | 'stretch' | 'center';
6
6
  export type FlexDirectionOptionType = 'row' | 'column';
7
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
7
8
  export type AlignItemsOptionType =
8
9
  | 'flex-start'
9
10
  | 'center'
@@ -21,6 +22,7 @@ export type PositionOptionType = 'relative' | 'absolute';
21
22
 
22
23
  export interface PaywallBackgroundStyleGenerated {
23
24
  flexDirection?: FlexDirectionOptionType;
25
+ flexWrap?: FlexWrapOptionType;
24
26
  alignItems?: AlignItemsOptionType;
25
27
  justifyContent?: JustifyContentOptionType;
26
28
  gap?: string;
@@ -4,6 +4,7 @@ import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type TextAlignOptionType = 'left' | 'center' | 'right' | 'justify';
6
6
  export type FlexDirectionOptionType = 'row' | 'column';
7
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
7
8
  export type AlignItemsOptionType =
8
9
  | 'flex-start'
9
10
  | 'center'
@@ -26,6 +27,7 @@ export interface PaywallCloseButtonStyleGenerated {
26
27
  fontWeight?: string;
27
28
  textAlign?: TextAlignOptionType;
28
29
  flexDirection?: FlexDirectionOptionType;
30
+ flexWrap?: FlexWrapOptionType;
29
31
  alignItems?: AlignItemsOptionType;
30
32
  justifyContent?: JustifyContentOptionType;
31
33
  gap?: string;
@@ -10,9 +10,7 @@
10
10
  }
11
11
  },
12
12
  "meta": {
13
- "desiredParent": [
14
- ">PaywallProvider"
15
- ],
13
+ "desiredParent": [">PaywallProvider"],
16
14
  "label": "Paywall Close Button",
17
15
  "description": "Paywall Close Button component.",
18
16
  "styles": {}
@@ -4,6 +4,7 @@ import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type TextAlignOptionType = 'left' | 'center' | 'right' | 'justify';
6
6
  export type FlexDirectionOptionType = 'row' | 'column';
7
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
7
8
  export type AlignItemsOptionType =
8
9
  | 'flex-start'
9
10
  | 'center'
@@ -26,6 +27,7 @@ export interface PaywallCounterStyleGenerated {
26
27
  fontWeight?: string;
27
28
  textAlign?: TextAlignOptionType;
28
29
  flexDirection?: FlexDirectionOptionType;
30
+ flexWrap?: FlexWrapOptionType;
29
31
  alignItems?: AlignItemsOptionType;
30
32
  justifyContent?: JustifyContentOptionType;
31
33
  gap?: string;
@@ -1,4 +1,4 @@
1
- import React, { useId, useMemo } from 'react';
1
+ import React, { useMemo } from 'react';
2
2
  import type { PaywallOptionsComponentProps } from './PaywallOptionsProps.generated';
3
3
  import useNode from '../useNode';
4
4
  import { useLogRender } from '../../utils/useLogRender';
@@ -3,6 +3,7 @@
3
3
  import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type FlexDirectionOptionType = 'row' | 'column';
6
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
6
7
  export type AlignItemsOptionType =
7
8
  | 'flex-start'
8
9
  | 'center'
@@ -20,6 +21,7 @@ export type PositionOptionType = 'relative' | 'absolute';
20
21
 
21
22
  export interface PaywallOptionsStyleGenerated {
22
23
  flexDirection?: FlexDirectionOptionType;
24
+ flexWrap?: FlexWrapOptionType;
23
25
  alignItems?: AlignItemsOptionType;
24
26
  justifyContent?: JustifyContentOptionType;
25
27
  gap?: string;
@@ -10,9 +10,7 @@
10
10
  }
11
11
  },
12
12
  "meta": {
13
- "desiredParent": [
14
- ">PaywallProvider"
15
- ],
13
+ "desiredParent": [">PaywallProvider"],
16
14
  "label": "Paywall Options",
17
15
  "description": "Paywall options selector component.",
18
16
  "styles": {}
@@ -3,6 +3,7 @@
3
3
  import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type FlexDirectionOptionType = 'row' | 'column';
6
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
6
7
  export type AlignItemsOptionType =
7
8
  | 'flex-start'
8
9
  | 'center'
@@ -20,6 +21,7 @@ export type PositionOptionType = 'relative' | 'absolute';
20
21
 
21
22
  export interface PaywallProviderStyleGenerated {
22
23
  flexDirection?: FlexDirectionOptionType;
24
+ flexWrap?: FlexWrapOptionType;
23
25
  alignItems?: AlignItemsOptionType;
24
26
  justifyContent?: JustifyContentOptionType;
25
27
  gap?: string;
@@ -17,9 +17,7 @@
17
17
  }
18
18
  },
19
19
  "meta": {
20
- "desiredParent": [
21
- "all"
22
- ],
20
+ "desiredParent": ["all"],
23
21
  "label": "Paywall Provider",
24
22
  "description": "Provider/wrapper for paywall screen components.",
25
23
  "attributes": {
@@ -15,6 +15,7 @@ export type FontWeightOptionType =
15
15
  | '800'
16
16
  | '900';
17
17
  export type FlexDirectionOptionType = 'row' | 'column';
18
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
18
19
  export type AlignItemsOptionType =
19
20
  | 'flex-start'
20
21
  | 'center'
@@ -35,6 +36,7 @@ export interface PaywallSubscribeButtonStyleGenerated {
35
36
  fontSize?: string;
36
37
  fontWeight?: FontWeightOptionType;
37
38
  flexDirection?: FlexDirectionOptionType;
39
+ flexWrap?: FlexWrapOptionType;
38
40
  alignItems?: AlignItemsOptionType;
39
41
  justifyContent?: JustifyContentOptionType;
40
42
  gap?: string;
@@ -23,9 +23,7 @@
23
23
  }
24
24
  },
25
25
  "meta": {
26
- "desiredParent": [
27
- ">PaywallProvider"
28
- ],
26
+ "desiredParent": [">PaywallProvider"],
29
27
  "label": "Paywall Subscribe Button",
30
28
  "description": "Paywall subscribe call-to-action button. Extends Button.",
31
29
  "styles": {}
@@ -3,6 +3,7 @@
3
3
  import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type FlexDirectionOptionType = 'row' | 'column';
6
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
6
7
  export type AlignItemsOptionType =
7
8
  | 'flex-start'
8
9
  | 'center'
@@ -20,6 +21,7 @@ export type PositionOptionType = 'relative' | 'absolute';
20
21
 
21
22
  export interface RadioButtonStyleGenerated {
22
23
  flexDirection?: FlexDirectionOptionType;
24
+ flexWrap?: FlexWrapOptionType;
23
25
  alignItems?: AlignItemsOptionType;
24
26
  justifyContent?: JustifyContentOptionType;
25
27
  gap?: string;
@@ -13,9 +13,7 @@
13
13
  }
14
14
  },
15
15
  "meta": {
16
- "desiredParent": [
17
- "all"
18
- ],
16
+ "desiredParent": ["all"],
19
17
  "label": "Radio Button",
20
18
  "description": "Generic radio button icon.",
21
19
  "styles": {
@@ -74,7 +74,7 @@ import PaywallProvider from './PaywallProvider/PaywallProvider';
74
74
  import PaywallSubscribeButton from './PaywallSubscribeButton/PaywallSubscribeButton';
75
75
  import RadioButton from './RadioButton/RadioButton';
76
76
  import Text from './Text/Text';
77
- import { View } from './View/View';
77
+ import View from './View/View';
78
78
 
79
79
  type BuilderNode =
80
80
  | (BIconComponentProps['node'] & { type: 'BIcon' })
@@ -3,6 +3,7 @@
3
3
  import type { NodeData } from '../../types/Node';
4
4
 
5
5
  export type FlexDirectionOptionType = 'row' | 'column';
6
+ export type FlexWrapOptionType = 'nowrap' | 'wrap' | 'wrap-reverse';
6
7
  export type AlignItemsOptionType =
7
8
  | 'flex-start'
8
9
  | 'center'
@@ -21,6 +22,7 @@ export type TextAlignOptionType = 'left' | 'center' | 'right' | 'justify';
21
22
 
22
23
  export interface TextStyleGenerated {
23
24
  flexDirection?: FlexDirectionOptionType;
25
+ flexWrap?: FlexWrapOptionType;
24
26
  alignItems?: AlignItemsOptionType;
25
27
  justifyContent?: JustifyContentOptionType;
26
28
  gap?: string;