PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.5.0
Presto Player v4.5.0
4.5.0 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / dashboard / components / UpgradeToPro.js
presto-player / src / admin / dashboard / components Last commit date
Emails 3 months ago EngagementChart 3 months ago MediaHub 3 months ago Onboarding 3 months ago Popup 3 months ago Skeletons 2 months ago WhatsNew 3 months ago charts 3 months ago test 3 months ago AdminMenuSync.js 3 months ago ChartEmptyState.js 3 months ago ChooseDate.js 3 months ago ColorPicker.js 3 months ago DashboardPromos.js 2 days ago ExtendPlugins.js 3 months ago Filters.js 3 months ago Link.js 3 months ago McpPromoBanner.js 2 days ago Navbar.js 2 months ago NoFound.js 3 months ago PageHeader.js 3 months ago PluginRecommendations.js 3 months ago PostScheduleField.js 3 months ago PrestoPlayerIcon.js 3 months ago ProGateOverlay.js 3 months ago PromoBanner.js 2 days ago QuickAccess.js 2 weeks ago RankedTable.js 3 months ago SkinPromoBanner.js 2 days ago StatCard.js 3 months ago TopMedia.js 3 months ago TopPerformingMedia.js 3 months ago TopUsers.js 3 months ago TruncatedTitle.js 3 months ago UpgradeNotice.js 3 months ago UpgradeToPro.js 2 weeks ago VideoModal.js 3 months ago WelcomeBanner.js 3 months ago
UpgradeToPro.js
160 lines
1 import { __ } from '@wordpress/i18n';
2 import { Button, Container, Text, Title } from '@bsf/force-ui';
3 import { Rocket } from 'lucide-react';
4 import { CHART_COLOR } from './charts';
5 import useUpgradeCTA from '../hooks/useUpgradeCTA';
6 import { useHistory } from '../router/router';
7
8 const CheckIcon = () => (
9 <svg
10 width="14"
11 height="14"
12 viewBox="0 0 10.5833 7.6667"
13 fill="none"
14 xmlns="http://www.w3.org/2000/svg"
15 className="shrink-0"
16 >
17 <path
18 d="M9.95833 0.625L3.54167 7.04167L0.625 4.125"
19 stroke={ CHART_COLOR }
20 strokeWidth="1.25"
21 strokeLinecap="round"
22 strokeLinejoin="round"
23 />
24 </svg>
25 );
26
27 /**
28 * Upgrade-to-Pro card.
29 *
30 * @param {Object} props
31 * @param {"vertical"|"horizontal"} [props.layout="vertical"] Layout mode.
32 * "vertical" — illustration on top, copy/features/CTA below. Suits narrow columns (≤ ~400px).
33 * "horizontal" — illustration on the left, copy/features/CTA on the right. Suits wide surfaces (≥ ~640px).
34 */
35 const UpgradeToPro = ( { layout = 'vertical' } ) => {
36 const features = [
37 __( 'Chapters & timestamps', 'presto-player' ),
38 __( 'Overlays and CTAs', 'presto-player' ),
39 __( 'Playlists', 'presto-player' ),
40 __( 'Video popups', 'presto-player' ),
41 __( 'Advanced playback', 'presto-player' ),
42 __( 'Engagement insights', 'presto-player' ),
43 __( 'AI Analytics Abilities', 'presto-player' ),
44 __( 'Email capture', 'presto-player' ),
45 ];
46
47 const history = useHistory();
48 const { label, onClick, isPremium } = useUpgradeCTA( history );
49
50 if ( isPremium ) {
51 return null;
52 }
53
54 const isHorizontal = layout === 'horizontal';
55
56 const illustration = (
57 <img
58 src={ window.prestoPlayer?.upgrade_image }
59 alt={ __( 'Upgrade to Pro', 'presto-player' ) }
60 className={
61 isHorizontal
62 ? 'w-full h-full max-h-[180px] object-contain'
63 : 'w-full h-[180px] object-contain'
64 }
65 />
66 );
67
68 const content = (
69 <Container className="gap-4" direction="column">
70 <Container className="gap-3" direction="column">
71 <Container.Item
72 className="gap-2 capitalize font-semibold text-xs flex items-center leading-4"
73 style={ { color: CHART_COLOR } }
74 >
75 <Rocket size={ 16 } />
76 { __( 'Unlock Premium Features', 'presto-player' ) }
77 </Container.Item>
78
79 <Container className="gap-1" direction="column">
80 <Title
81 tag="h2"
82 title={ __(
83 'Power up your videos with Presto Player Pro',
84 'presto-player'
85 ) }
86 size="sm"
87 className="text-text-primary font-semibold text-lg leading-7"
88 />
89 <Text
90 size="sm"
91 className="text-text-secondary text-sm font-normal leading-5"
92 >
93 { __(
94 'Engage viewers, grow your audience, and convert with powerful video tools — all in one place.',
95 'presto-player'
96 ) }
97 </Text>
98 </Container>
99 </Container>
100
101 <Container
102 containerType="grid"
103 cols={ 2 }
104 gapX="sm"
105 gapY="xs"
106 className="pb-1"
107 >
108 { features.map( ( item, index ) => (
109 <Container
110 key={ index }
111 direction="row"
112 align="center"
113 className="gap-2"
114 >
115 <CheckIcon />
116 <Text
117 size="sm"
118 className="text-text-primary text-sm font-normal leading-5"
119 >
120 { item }
121 </Text>
122 </Container>
123 ) ) }
124 </Container>
125
126 <Button
127 className="w-full shadow-lg"
128 size="md"
129 variant="primary"
130 onClick={ onClick }
131 >
132 { label }
133 </Button>
134 </Container>
135 );
136
137 return (
138 <div
139 className="p-6 rounded-xl border border-solid border-transparent shadow-2xl overflow-clip"
140 style={ {
141 background:
142 'linear-gradient(white, white) padding-box, linear-gradient(to bottom, #9A20F8, #3058E5) border-box',
143 } }
144 >
145 { isHorizontal ? (
146 <Container direction="column" className="gap-4">
147 { content }
148 </Container>
149 ) : (
150 <Container className="gap-4" direction="column">
151 { illustration }
152 { content }
153 </Container>
154 ) }
155 </div>
156 );
157 };
158
159 export default UpgradeToPro;
160