@developer_tribe/react-builder 1.2.37 → 1.2.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-components/BIcon/BIconProps.generated.d.ts +1 -0
- package/dist/build-components/BackgroundImage/BackgroundImageProps.generated.d.ts +1 -0
- package/dist/build-components/Button/ButtonProps.generated.d.ts +1 -0
- package/dist/build-components/Carousel/CarouselProps.generated.d.ts +1 -0
- package/dist/build-components/CarouselButtons/CarouselButtonsProps.generated.d.ts +1 -0
- package/dist/build-components/CarouselDots/CarouselDotsProps.generated.d.ts +1 -0
- package/dist/build-components/CarouselItem/CarouselItemProps.generated.d.ts +1 -0
- package/dist/build-components/CarouselProvider/CarouselProviderProps.generated.d.ts +1 -0
- package/dist/build-components/CountDown/CountDownProps.generated.d.ts +1 -0
- package/dist/build-components/Image/ImageProps.generated.d.ts +3 -0
- package/dist/build-components/Main/MainProps.generated.d.ts +1 -0
- package/dist/build-components/NavigationBarColor/NavigationBarColorProps.generated.d.ts +1 -0
- package/dist/build-components/Onboard/OnboardProps.generated.d.ts +1 -0
- package/dist/build-components/OnboardButton/OnboardButtonProps.generated.d.ts +2 -0
- package/dist/build-components/OnboardButtons/OnboardButtonsProps.generated.d.ts +1 -0
- package/dist/build-components/OnboardDot/OnboardDotProps.generated.d.ts +1 -0
- package/dist/build-components/OnboardFooter/OnboardFooterProps.generated.d.ts +1 -0
- package/dist/build-components/OnboardImage/OnboardImageProps.generated.d.ts +3 -0
- package/dist/build-components/OnboardItem/OnboardItemProps.generated.d.ts +1 -0
- package/dist/build-components/OnboardProvider/OnboardProviderProps.generated.d.ts +1 -0
- package/dist/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.d.ts +1 -0
- package/dist/build-components/OnboardTitle/OnboardTitleProps.generated.d.ts +1 -0
- package/dist/build-components/PaywallBackground/PaywallBackgroundProps.generated.d.ts +1 -0
- package/dist/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.d.ts +1 -0
- package/dist/build-components/PaywallOptions/PaywallOptionsProps.generated.d.ts +1 -0
- package/dist/build-components/PaywallProvider/PaywallProviderProps.generated.d.ts +1 -0
- package/dist/build-components/PaywallSubscribeButton/PaywallSubscribeButtonProps.generated.d.ts +1 -0
- package/dist/build-components/PriceTag/PriceTagProps.generated.d.ts +1 -0
- package/dist/build-components/Pricing/PricingProps.generated.d.ts +1 -0
- package/dist/build-components/Promo/PromoProps.generated.d.ts +1 -0
- package/dist/build-components/RadioButton/RadioButtonProps.generated.d.ts +1 -0
- package/dist/build-components/Separator/SeparatorProps.generated.d.ts +1 -0
- package/dist/build-components/StatusBarColor/StatusBarColorProps.generated.d.ts +1 -39
- package/dist/build-components/Text/TextProps.generated.d.ts +1 -0
- package/dist/build-components/View/ViewProps.generated.d.ts +1 -0
- package/dist/build-components/patterns.generated.d.ts +1455 -1007
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.web.cjs.js +4 -4
- package/dist/index.web.cjs.js.map +1 -1
- package/dist/index.web.esm.js +4 -4
- package/dist/index.web.esm.js.map +1 -1
- package/dist/mockOS/context/MockOSContextBase.d.ts +1 -0
- package/dist/mockOS/managers/mockPermissionManager.d.ts +1 -1
- package/dist/types/PreviewConfig.d.ts +1 -1
- package/package.json +1 -1
- package/scripts/prebuild/utils/validateAllComponentsOrThrow.js +18 -0
- package/src/assets/meta.json +1 -1
- package/src/assets/prompt-scheme-onboard.generated.ts +1 -1
- package/src/assets/prompt-scheme-paywall.generated.ts +1 -1
- package/src/assets/samples/carousel-sample.json +49 -23
- package/src/assets/samples/paywall-1.json +61 -29
- package/src/assets/samples/paywall-2.json +53 -25
- package/src/assets/samples/paywall-app-delete-offer.json +55 -26
- package/src/assets/samples/paywall-app-open-offer.json +55 -26
- package/src/assets/samples/paywall-back-offer.json +55 -26
- package/src/assets/samples/paywall-notification-offer.json +55 -26
- package/src/assets/samples/simple-1.json +9 -3
- package/src/assets/samples/simple-2.json +51 -24
- package/src/assets/samples/unmigrated-builder-1.1.1.json +15 -6
- package/src/assets/samples/unmigrated-builder1.json +9 -3
- package/src/assets/samples/unvalidated-builder1.json +9 -3
- package/src/assets/samples/unvalidated-crash1.json +5 -1
- package/src/assets/samples/unvalidated-crashcomponent1.json +5 -1
- package/src/assets/samples/vpn-onboard-1.json +94 -51
- package/src/assets/samples/vpn-onboard-2.json +94 -51
- package/src/assets/samples/vpn-onboard-3.json +85 -48
- package/src/assets/samples/vpn-onboard-4.json +85 -48
- package/src/assets/samples/vpn-onboard-5.json +132 -73
- package/src/assets/samples/vpn-onboard-6.json +94 -51
- package/src/assets/samples/vpn-onboard-7.json +92 -50
- package/src/build-components/BIcon/BIconProps.generated.ts +1 -0
- package/src/build-components/BackgroundImage/BackgroundImageProps.generated.ts +1 -0
- package/src/build-components/Button/ButtonProps.generated.ts +1 -0
- package/src/build-components/Carousel/CarouselProps.generated.ts +1 -0
- package/src/build-components/CarouselButtons/CarouselButtonsProps.generated.ts +1 -0
- package/src/build-components/CarouselDots/CarouselDotsProps.generated.ts +1 -0
- package/src/build-components/CarouselItem/CarouselItemProps.generated.ts +1 -0
- package/src/build-components/CarouselProvider/CarouselProviderProps.generated.ts +1 -0
- package/src/build-components/CountDown/CountDownProps.generated.ts +1 -0
- package/src/build-components/Image/ImageProps.generated.ts +7 -0
- package/src/build-components/Image/pattern.json +9 -0
- package/src/build-components/Main/MainProps.generated.ts +1 -0
- package/src/build-components/NavigationBarColor/NavigationBarColorProps.generated.ts +1 -0
- package/src/build-components/Onboard/OnboardProps.generated.ts +1 -0
- package/src/build-components/OnboardButton/OnboardButton.tsx +6 -6
- package/src/build-components/OnboardButton/OnboardButtonProps.generated.ts +2 -0
- package/src/build-components/OnboardButton/pattern.json +2 -1
- package/src/build-components/OnboardButtons/OnboardButtonsProps.generated.ts +1 -0
- package/src/build-components/OnboardDot/OnboardDotProps.generated.ts +1 -0
- package/src/build-components/OnboardFooter/OnboardFooter.tsx +3 -3
- package/src/build-components/OnboardFooter/OnboardFooterProps.generated.ts +1 -0
- package/src/build-components/OnboardImage/OnboardImageProps.generated.ts +7 -0
- package/src/build-components/OnboardItem/OnboardItemProps.generated.ts +1 -0
- package/src/build-components/OnboardProvider/OnboardProviderProps.generated.ts +1 -0
- package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.ts +1 -0
- package/src/build-components/OnboardTitle/OnboardTitleProps.generated.ts +1 -0
- package/src/build-components/PaywallBackground/PaywallBackgroundProps.generated.ts +1 -0
- package/src/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.ts +1 -0
- package/src/build-components/PaywallOptions/PaywallOptionsProps.generated.ts +1 -0
- package/src/build-components/PaywallProvider/PaywallProviderProps.generated.ts +1 -0
- package/src/build-components/PaywallSubscribeButton/PaywallSubscribeButtonProps.generated.ts +1 -0
- package/src/build-components/PriceTag/PriceTagProps.generated.ts +1 -0
- package/src/build-components/Pricing/PricingProps.generated.ts +1 -0
- package/src/build-components/Promo/PromoProps.generated.ts +1 -0
- package/src/build-components/RadioButton/RadioButtonProps.generated.ts +1 -0
- package/src/build-components/Separator/SeparatorProps.generated.ts +1 -0
- package/src/build-components/Separator/pattern.json +2 -1
- package/src/build-components/StatusBarColor/StatusBarColorProps.generated.ts +1 -51
- package/src/build-components/StatusBarColor/pattern.json +2 -2
- package/src/build-components/Text/TextProps.generated.ts +1 -0
- package/src/build-components/Text/pattern.json +1 -1
- package/src/build-components/View/ViewProps.generated.ts +1 -0
- package/src/build-components/View/pattern.json +2 -1
- package/src/build-components/patterns.generated.ts +1567 -1139
- package/src/mockOS/context/MockOSContext.tsx +32 -0
- package/src/mockOS/context/MockOSContextBase.ts +3 -0
- package/src/mockOS/managers/mockPermissionManager.ts +9 -3
- package/src/modals/InspectModal.tsx +37 -8
- package/src/product-base/buildPaywallLocalizationParams.ts +12 -3
- package/src/types/PreviewConfig.ts +70 -46
|
@@ -60,6 +60,12 @@ export function MockOSProvider({
|
|
|
60
60
|
const [permission, setPermission] = useState<PermissionType | string | null>(
|
|
61
61
|
null,
|
|
62
62
|
);
|
|
63
|
+
const permissionResolverRef = useRef<
|
|
64
|
+
| ((
|
|
65
|
+
result: import('../managers/mockPermissionManager').PermissionStatus,
|
|
66
|
+
) => void)
|
|
67
|
+
| null
|
|
68
|
+
>(null);
|
|
63
69
|
const [subscriptionProductId, setSubscriptionProductId] = useState<
|
|
64
70
|
string | null
|
|
65
71
|
>(null);
|
|
@@ -133,6 +139,24 @@ export function MockOSProvider({
|
|
|
133
139
|
});
|
|
134
140
|
}, []);
|
|
135
141
|
|
|
142
|
+
const requestPermissionAsync = useCallback(
|
|
143
|
+
(requestedPermission: PermissionType | string) => {
|
|
144
|
+
// Cancel any existing pending request
|
|
145
|
+
if (permissionResolverRef.current) {
|
|
146
|
+
permissionResolverRef.current('not-determined');
|
|
147
|
+
permissionResolverRef.current = null;
|
|
148
|
+
}
|
|
149
|
+
setPermission(requestedPermission);
|
|
150
|
+
|
|
151
|
+
return new Promise<
|
|
152
|
+
import('../managers/mockPermissionManager').PermissionStatus
|
|
153
|
+
>((resolve) => {
|
|
154
|
+
permissionResolverRef.current = resolve;
|
|
155
|
+
});
|
|
156
|
+
},
|
|
157
|
+
[],
|
|
158
|
+
);
|
|
159
|
+
|
|
136
160
|
const resolveSubscriptionPurchase = useCallback((result: boolean) => {
|
|
137
161
|
const resolver = subscriptionResolverRef.current;
|
|
138
162
|
subscriptionResolverRef.current = null;
|
|
@@ -146,6 +170,7 @@ export function MockOSProvider({
|
|
|
146
170
|
permission,
|
|
147
171
|
setPermission,
|
|
148
172
|
requestSubscriptionPurchase,
|
|
173
|
+
requestPermissionAsync,
|
|
149
174
|
currentRoute,
|
|
150
175
|
navigation,
|
|
151
176
|
goBack,
|
|
@@ -154,6 +179,7 @@ export function MockOSProvider({
|
|
|
154
179
|
[
|
|
155
180
|
permission,
|
|
156
181
|
requestSubscriptionPurchase,
|
|
182
|
+
requestPermissionAsync,
|
|
157
183
|
currentRoute,
|
|
158
184
|
navigation,
|
|
159
185
|
goBack,
|
|
@@ -162,11 +188,17 @@ export function MockOSProvider({
|
|
|
162
188
|
);
|
|
163
189
|
|
|
164
190
|
const handleAllow = () => {
|
|
191
|
+
const resolver = permissionResolverRef.current;
|
|
192
|
+
permissionResolverRef.current = null;
|
|
165
193
|
setPermission(null);
|
|
194
|
+
resolver?.('granted');
|
|
166
195
|
};
|
|
167
196
|
|
|
168
197
|
const handleDeny = () => {
|
|
198
|
+
const resolver = permissionResolverRef.current;
|
|
199
|
+
permissionResolverRef.current = null;
|
|
169
200
|
setPermission(null);
|
|
201
|
+
resolver?.('denied');
|
|
170
202
|
};
|
|
171
203
|
|
|
172
204
|
return (
|
|
@@ -18,6 +18,9 @@ export interface MockOSContextValue {
|
|
|
18
18
|
permission: PermissionType | string | null;
|
|
19
19
|
setPermission: (permission: PermissionType | string | null) => void;
|
|
20
20
|
requestSubscriptionPurchase: (productId: string) => Promise<boolean>;
|
|
21
|
+
requestPermissionAsync: (
|
|
22
|
+
permission: PermissionType | string,
|
|
23
|
+
) => Promise<import('../managers/mockPermissionManager').PermissionStatus>;
|
|
21
24
|
// Router
|
|
22
25
|
currentRoute: RouteType;
|
|
23
26
|
navigation: (route: RouteType) => void;
|
|
@@ -18,7 +18,9 @@ export class MockPermissionManager {
|
|
|
18
18
|
this.context = context;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
requestPermission(
|
|
21
|
+
async requestPermission(
|
|
22
|
+
permission: PermissionType | string,
|
|
23
|
+
): Promise<PermissionStatus> {
|
|
22
24
|
if (this.context === null) {
|
|
23
25
|
alert(
|
|
24
26
|
`Permission requested: ${permission}\n(Mock OS context not available)`,
|
|
@@ -26,9 +28,13 @@ export class MockPermissionManager {
|
|
|
26
28
|
return 'not-determined';
|
|
27
29
|
}
|
|
28
30
|
|
|
29
|
-
// Set permission to trigger modal display
|
|
31
|
+
// Set permission to trigger modal display and wait for user's choice
|
|
32
|
+
if (this.context.requestPermissionAsync) {
|
|
33
|
+
return await this.context.requestPermissionAsync(permission);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Fallback if requestPermissionAsync is not available yet
|
|
30
37
|
this.context.setPermission(permission);
|
|
31
|
-
// Default behavior: grant all permissions in mock environment
|
|
32
38
|
return 'granted';
|
|
33
39
|
}
|
|
34
40
|
|
|
@@ -101,9 +101,11 @@ function LocalizationsTab({
|
|
|
101
101
|
const defaultLangKeys =
|
|
102
102
|
defaultLocalization[language] ?? defaultLocalization['en'] ?? {};
|
|
103
103
|
|
|
104
|
-
const
|
|
104
|
+
const allKeys = Array.from(
|
|
105
|
+
new Set([...Object.keys(defaultLangKeys), ...Object.keys(langKeys)]),
|
|
106
|
+
).sort();
|
|
105
107
|
|
|
106
|
-
if (
|
|
108
|
+
if (allKeys.length === 0) {
|
|
107
109
|
return (
|
|
108
110
|
<p className="inspect-modal__empty">
|
|
109
111
|
No localization keys found for "{language}".
|
|
@@ -122,17 +124,32 @@ function LocalizationsTab({
|
|
|
122
124
|
</tr>
|
|
123
125
|
</thead>
|
|
124
126
|
<tbody>
|
|
125
|
-
{
|
|
126
|
-
const
|
|
127
|
+
{allKeys.map((key) => {
|
|
128
|
+
const hasCustom = key in langKeys;
|
|
129
|
+
const customValue = langKeys[key];
|
|
130
|
+
const defaultValue = defaultLangKeys[key];
|
|
131
|
+
|
|
132
|
+
const isCustom =
|
|
133
|
+
hasCustom &&
|
|
134
|
+
customValue !== defaultValue &&
|
|
135
|
+
customValue !== undefined;
|
|
136
|
+
const value = isCustom ? customValue : (defaultValue ?? '');
|
|
137
|
+
|
|
127
138
|
return (
|
|
128
139
|
<tr key={key}>
|
|
129
140
|
<td className="inspect-modal__cell-key">{key}</td>
|
|
130
141
|
<td className="inspect-modal__cell-value">{value}</td>
|
|
131
142
|
<td>
|
|
132
143
|
<span
|
|
133
|
-
className={`inspect-modal__badge${
|
|
144
|
+
className={`inspect-modal__badge${!isCustom ? ' inspect-modal__badge--default' : ' inspect-modal__badge--custom'}`}
|
|
134
145
|
>
|
|
135
|
-
{
|
|
146
|
+
{!isCustom ? (
|
|
147
|
+
<>
|
|
148
|
+
<span style={{ color: 'red' }}>!</span> fallback
|
|
149
|
+
</>
|
|
150
|
+
) : (
|
|
151
|
+
'custom'
|
|
152
|
+
)}
|
|
136
153
|
</span>
|
|
137
154
|
</td>
|
|
138
155
|
</tr>
|
|
@@ -262,7 +279,13 @@ function ColorsTab({
|
|
|
262
279
|
<span
|
|
263
280
|
className={`inspect-modal__badge${isDefault ? ' inspect-modal__badge--default' : ' inspect-modal__badge--custom'}`}
|
|
264
281
|
>
|
|
265
|
-
{isDefault ?
|
|
282
|
+
{isDefault ? (
|
|
283
|
+
<>
|
|
284
|
+
<span style={{ color: 'red' }}>!</span> fallback
|
|
285
|
+
</>
|
|
286
|
+
) : (
|
|
287
|
+
'custom'
|
|
288
|
+
)}
|
|
266
289
|
</span>
|
|
267
290
|
</td>
|
|
268
291
|
</tr>
|
|
@@ -303,7 +326,13 @@ function ColorsTab({
|
|
|
303
326
|
<span
|
|
304
327
|
className={`inspect-modal__badge${isDefault ? ' inspect-modal__badge--default' : ' inspect-modal__badge--custom'}`}
|
|
305
328
|
>
|
|
306
|
-
{isDefault ?
|
|
329
|
+
{isDefault ? (
|
|
330
|
+
<>
|
|
331
|
+
<span style={{ color: 'red' }}>!</span> fallback
|
|
332
|
+
</>
|
|
333
|
+
) : (
|
|
334
|
+
'custom'
|
|
335
|
+
)}
|
|
307
336
|
</span>
|
|
308
337
|
</td>
|
|
309
338
|
</tr>
|
|
@@ -46,9 +46,18 @@ export function buildPaywallLocalizationParams(
|
|
|
46
46
|
const periodKey = getPeriodLocalizationKey(period, false);
|
|
47
47
|
const promoPeriodKey = hasPromo ? getPeriodLocalizationKey(period, true) : '';
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
let localizedPromoPrice = '';
|
|
50
|
+
if (hasPromo) {
|
|
51
|
+
try {
|
|
52
|
+
localizedPromoPrice = new Intl.NumberFormat(undefined, {
|
|
53
|
+
style: 'currency',
|
|
54
|
+
currency: extractedParams.currency,
|
|
55
|
+
}).format(Number(extractedParams.promoPrice));
|
|
56
|
+
} catch {
|
|
57
|
+
localizedPromoPrice =
|
|
58
|
+
`${extractedParams.promoPrice} ${extractedParams.currency}`.trim();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
52
61
|
|
|
53
62
|
const localizedPeriod = resolve(periodKey);
|
|
54
63
|
const localizedPromoPeriod = hasPromo ? resolve(promoPeriodKey) : '';
|
|
@@ -16,31 +16,37 @@ export type LocalizationKey =
|
|
|
16
16
|
| 'base.builder.paywall.promo.freeTrial.text'
|
|
17
17
|
| 'base.builder.paywall.promo.regular.text'
|
|
18
18
|
// onboard – titles
|
|
19
|
-
| 'onboard.title.one-page'
|
|
20
|
-
| 'onboard.title.two-page'
|
|
21
|
-
| 'onboard.title.three-page'
|
|
22
|
-
| 'onboard.title.four-page'
|
|
23
|
-
| 'onboard.title.
|
|
24
|
-
| 'onboard.title.
|
|
25
|
-
| 'onboard.title.
|
|
26
|
-
| 'onboard.title.
|
|
19
|
+
| 'base.onboard.title.one-page'
|
|
20
|
+
| 'base.onboard.title.two-page'
|
|
21
|
+
| 'base.onboard.title.three-page'
|
|
22
|
+
| 'base.onboard.title.four-page'
|
|
23
|
+
| 'base.onboard.title.five-page'
|
|
24
|
+
| 'base.onboard.title.six-page'
|
|
25
|
+
| 'base.onboard.title.one-page2'
|
|
26
|
+
| 'base.onboard.title.two-page2'
|
|
27
|
+
| 'base.onboard.title.three-page2'
|
|
28
|
+
| 'base.onboard.title.four-page2'
|
|
27
29
|
// onboard – subtitles
|
|
28
|
-
| 'onboard.subtitle.one-page'
|
|
29
|
-
| 'onboard.subtitle.two-page'
|
|
30
|
-
| 'onboard.subtitle.three-page'
|
|
31
|
-
| 'onboard.subtitle.four-page'
|
|
32
|
-
| 'onboard.subtitle.
|
|
33
|
-
| 'onboard.subtitle.
|
|
34
|
-
| 'onboard.subtitle.
|
|
35
|
-
| 'onboard.subtitle.
|
|
30
|
+
| 'base.onboard.subtitle.one-page'
|
|
31
|
+
| 'base.onboard.subtitle.two-page'
|
|
32
|
+
| 'base.onboard.subtitle.three-page'
|
|
33
|
+
| 'base.onboard.subtitle.four-page'
|
|
34
|
+
| 'base.onboard.subtitle.five-page'
|
|
35
|
+
| 'base.onboard.subtitle.six-page'
|
|
36
|
+
| 'base.onboard.subtitle.one-page2'
|
|
37
|
+
| 'base.onboard.subtitle.two-page2'
|
|
38
|
+
| 'base.onboard.subtitle.three-page2'
|
|
39
|
+
| 'base.onboard.subtitle.four-page2'
|
|
36
40
|
// onboard – actions
|
|
37
|
-
| 'onboard.next.one-page'
|
|
38
|
-
| 'onboard.next.two-page'
|
|
39
|
-
| 'onboard.next.three-page'
|
|
40
|
-
| 'onboard.
|
|
41
|
-
| 'onboard.skip.
|
|
42
|
-
| 'onboard.skip.
|
|
43
|
-
| 'onboard.
|
|
41
|
+
| 'base.onboard.next.one-page'
|
|
42
|
+
| 'base.onboard.next.two-page'
|
|
43
|
+
| 'base.onboard.next.three-page'
|
|
44
|
+
| 'base.onboard.next.five-page'
|
|
45
|
+
| 'base.onboard.skip.one-page'
|
|
46
|
+
| 'base.onboard.skip.two-page'
|
|
47
|
+
| 'base.onboard.skip.three-page'
|
|
48
|
+
| 'base.onboard.skip.five-page'
|
|
49
|
+
| 'base.onboard.allow.four-page'
|
|
44
50
|
// onboard – footer
|
|
45
51
|
| 'view.onboarding.footer.description'
|
|
46
52
|
| 'view.onboarding.btnPrivacy'
|
|
@@ -74,39 +80,46 @@ export const defaultLocalization: Localication = {
|
|
|
74
80
|
'base.builder.paywall.promo.regular.text':
|
|
75
81
|
'@localizedPrice @localizedPeriod',
|
|
76
82
|
// onboard – titles
|
|
77
|
-
'onboard.title.one-page': 'Secure your connection',
|
|
78
|
-
'onboard.title.two-page': 'Access content worldwide',
|
|
79
|
-
'onboard.title.three-page': 'Fast and reliable',
|
|
80
|
-
'onboard.title.four-page': 'Stay notified and safe',
|
|
81
|
-
'onboard.title.
|
|
82
|
-
'onboard.title.
|
|
83
|
-
'onboard.title.
|
|
84
|
-
'onboard.title.
|
|
83
|
+
'base.onboard.title.one-page': 'Secure your connection',
|
|
84
|
+
'base.onboard.title.two-page': 'Access content worldwide',
|
|
85
|
+
'base.onboard.title.three-page': 'Fast and reliable',
|
|
86
|
+
'base.onboard.title.four-page': 'Stay notified and safe',
|
|
87
|
+
'base.onboard.title.five-page': 'Enhance your experience',
|
|
88
|
+
'base.onboard.title.six-page': 'You are all set!',
|
|
89
|
+
'base.onboard.title.one-page2': 'Secure your connection',
|
|
90
|
+
'base.onboard.title.two-page2': 'Access content worldwide',
|
|
91
|
+
'base.onboard.title.three-page2': 'Fast and reliable',
|
|
92
|
+
'base.onboard.title.four-page2': 'Stay notified and safe',
|
|
85
93
|
// onboard – subtitles
|
|
86
|
-
'onboard.subtitle.one-page':
|
|
94
|
+
'base.onboard.subtitle.one-page':
|
|
87
95
|
'Encrypt your traffic and protect your privacy on public Wi\u2011Fi.',
|
|
88
|
-
'onboard.subtitle.two-page':
|
|
96
|
+
'base.onboard.subtitle.two-page':
|
|
89
97
|
'Connect to high\u2011speed servers in many countries with one tap.',
|
|
90
|
-
'onboard.subtitle.three-page':
|
|
98
|
+
'base.onboard.subtitle.three-page':
|
|
91
99
|
'Auto\u2011connect to the best server for speed and stability.',
|
|
92
|
-
'onboard.subtitle.four-page':
|
|
100
|
+
'base.onboard.subtitle.four-page':
|
|
93
101
|
'Enable notifications for connection status and security tips.',
|
|
94
|
-
'onboard.subtitle.
|
|
102
|
+
'base.onboard.subtitle.five-page':
|
|
103
|
+
'Get the most out of our app with premium features.',
|
|
104
|
+
'base.onboard.subtitle.six-page': 'Enjoy secure and fast browsing.',
|
|
105
|
+
'base.onboard.subtitle.one-page2':
|
|
95
106
|
'Encrypt your traffic and protect your privacy on public Wi\u2011Fi.',
|
|
96
|
-
'onboard.subtitle.two-page2':
|
|
107
|
+
'base.onboard.subtitle.two-page2':
|
|
97
108
|
'Connect to high\u2011speed servers in many countries with one tap.',
|
|
98
|
-
'onboard.subtitle.three-page2':
|
|
109
|
+
'base.onboard.subtitle.three-page2':
|
|
99
110
|
'Auto\u2011connect to the best server for speed and stability.',
|
|
100
|
-
'onboard.subtitle.four-page2':
|
|
111
|
+
'base.onboard.subtitle.four-page2':
|
|
101
112
|
'Enable notifications for connection status and security tips.',
|
|
102
113
|
// onboard – actions
|
|
103
|
-
'onboard.next.one-page': 'Next',
|
|
104
|
-
'onboard.next.two-page': 'Next',
|
|
105
|
-
'onboard.next.three-page': 'Next',
|
|
106
|
-
'onboard.
|
|
107
|
-
'onboard.skip.
|
|
108
|
-
'onboard.skip.
|
|
109
|
-
'onboard.
|
|
114
|
+
'base.onboard.next.one-page': 'Next',
|
|
115
|
+
'base.onboard.next.two-page': 'Next',
|
|
116
|
+
'base.onboard.next.three-page': 'Next',
|
|
117
|
+
'base.onboard.next.five-page': 'Next',
|
|
118
|
+
'base.onboard.skip.one-page': 'Skip',
|
|
119
|
+
'base.onboard.skip.two-page': 'Skip',
|
|
120
|
+
'base.onboard.skip.three-page': 'Skip',
|
|
121
|
+
'base.onboard.skip.five-page': 'Skip',
|
|
122
|
+
'base.onboard.allow.four-page': 'Allow',
|
|
110
123
|
// onboard – footer
|
|
111
124
|
'view.onboarding.footer.description':
|
|
112
125
|
'By clicking continue, you will be accepting the Terms of service and privacy policy',
|
|
@@ -133,6 +146,17 @@ export const defaultLocalization: Localication = {
|
|
|
133
146
|
'@trialPeriod @trialPeriodUnit ücretsiz deneme',
|
|
134
147
|
'base.builder.paywall.promo.regular.text':
|
|
135
148
|
'@localizedPrice @localizedPeriod',
|
|
149
|
+
// onboard – titles
|
|
150
|
+
'base.onboard.title.five-page': 'Deneyiminizi geliştirin',
|
|
151
|
+
'base.onboard.title.six-page': 'Her şey hazır!',
|
|
152
|
+
// onboard – subtitles
|
|
153
|
+
'base.onboard.subtitle.five-page':
|
|
154
|
+
'Premium özelliklerle uygulamamızdan en iyi şekilde yararlanın.',
|
|
155
|
+
'base.onboard.subtitle.six-page':
|
|
156
|
+
'Güvenli ve hızlı gezinmenin keyfini çıkarın.',
|
|
157
|
+
// onboard – actions
|
|
158
|
+
'base.onboard.next.five-page': 'İleri',
|
|
159
|
+
'base.onboard.skip.five-page': 'Geç',
|
|
136
160
|
},
|
|
137
161
|
};
|
|
138
162
|
|