PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.2
Presto Player v4.3.2
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 1 month ago EngagementChart 2 months ago MediaHub 1 month ago Onboarding 2 months ago Popup 2 months ago Skeletons 1 month ago WhatsNew 2 months ago charts 2 months ago test 2 months ago AdminMenuSync.js 2 months ago ChartEmptyState.js 2 months ago ChooseDate.js 2 months ago ColorPicker.js 2 months ago ExtendPlugins.js 2 months ago Filters.js 2 months ago Link.js 2 months ago Navbar.js 1 month ago NoFound.js 2 months ago PageHeader.js 2 months ago PluginRecommendations.js 2 months ago PostScheduleField.js 2 months ago PrestoPlayerIcon.js 2 months ago ProGateOverlay.js 2 months ago QuickAccess.js 2 months ago RankedTable.js 2 months ago StatCard.js 2 months ago TopMedia.js 2 months ago TopPerformingMedia.js 2 months ago TopUsers.js 2 months ago TruncatedTitle.js 2 months ago UpgradeNotice.js 2 months ago UpgradeToPro.js 2 months ago VideoModal.js 2 months ago WelcomeBanner.js 2 months 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