PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
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 1 month ago EngagementChart 1 month ago MediaHub 1 month ago Onboarding 1 month ago Popup 1 month ago Skeletons 1 week ago WhatsNew 1 month ago charts 1 month ago test 1 month ago AdminMenuSync.js 1 month ago ChartEmptyState.js 1 month ago ChooseDate.js 1 month ago ColorPicker.js 1 month ago ExtendPlugins.js 1 month ago Filters.js 1 month ago Link.js 1 month ago Navbar.js 1 week ago NoFound.js 1 month ago PageHeader.js 1 month ago PluginRecommendations.js 1 month ago PostScheduleField.js 1 month ago PrestoPlayerIcon.js 1 month ago ProGateOverlay.js 1 month ago QuickAccess.js 1 month ago RankedTable.js 1 month ago StatCard.js 1 month ago TopMedia.js 1 month ago TopPerformingMedia.js 1 month ago TopUsers.js 1 month ago TruncatedTitle.js 1 month ago UpgradeNotice.js 1 month ago UpgradeToPro.js 1 month ago VideoModal.js 1 month ago WelcomeBanner.js 1 month ago
UpgradeToPro.js
155 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 ];
44
45 const history = useHistory();
46 const { label, onClick, isProUnlicensed, isPremium } = useUpgradeCTA(history);
47
48 if (isPremium) {
49 return null;
50 }
51
52 const isHorizontal = layout === "horizontal";
53
54 const illustration = (
55 <img
56 src={window.prestoPlayer?.upgrade_image}
57 alt={__("Upgrade to Pro", "presto-player")}
58 className={
59 isHorizontal
60 ? "w-full h-full max-h-[180px] object-contain"
61 : "w-full h-[180px] object-contain"
62 }
63 />
64 );
65
66 const content = (
67 <Container className="gap-4" direction="column">
68 <Container className="gap-3" direction="column">
69 <Container.Item
70 className="gap-2 capitalize font-semibold text-xs flex items-center leading-4"
71 style={{ color: CHART_COLOR }}
72 >
73 <Rocket size={16} />
74 {__("Unlock Premium Features", "presto-player")}
75 </Container.Item>
76
77 <Container className="gap-1" direction="column">
78 <Title
79 tag="h2"
80 title={__("Power up your videos with Presto Player Pro", "presto-player")}
81 size="sm"
82 className="text-text-primary font-semibold text-lg leading-7"
83 />
84 <Text
85 size="sm"
86 className="text-text-secondary text-sm font-normal leading-5"
87 >
88 {__(
89 "Engage viewers, grow your audience, and convert with powerful video tools — all in one place.",
90 "presto-player"
91 )}
92 </Text>
93 </Container>
94 </Container>
95
96 <Container
97 containerType="grid"
98 cols={2}
99 gapX="sm"
100 gapY="xs"
101 className="pb-1"
102 >
103 {features.map((item, index) => (
104 <Container
105 key={index}
106 direction="row"
107 align="center"
108 className="gap-2"
109 >
110 <CheckIcon />
111 <Text
112 size="sm"
113 className="text-text-primary text-sm font-normal leading-5"
114 >
115 {item}
116 </Text>
117 </Container>
118 ))}
119 </Container>
120
121 <Button
122 className="w-full shadow-lg"
123 size="md"
124 variant="primary"
125 onClick={onClick}
126 >
127 {label}
128 </Button>
129 </Container>
130 );
131
132 return (
133 <div
134 className="p-6 rounded-xl border border-solid border-transparent shadow-2xl overflow-clip"
135 style={{
136 background:
137 "linear-gradient(white, white) padding-box, linear-gradient(to bottom, #9A20F8, #3058E5) border-box",
138 }}
139 >
140 {isHorizontal ? (
141 <Container direction="column" className="gap-4">
142 {content}
143 </Container>
144 ) : (
145 <Container className="gap-4" direction="column">
146 {illustration}
147 {content}
148 </Container>
149 )}
150 </div>
151 );
152 };
153
154 export default UpgradeToPro;
155