+ {[
+ 'My name is Joost De Cock. I am the founder and maintainer of FreeSewing.',
+ 'I am here to ask your help. Or more accurately, your support. Which we really need.',
+ 'If you think FreeSewing is worthwhile, and if you can spare a few coins each month without hardship, please support our work.',
+ 'Thanks in advance for considering it.',
+ 'love',
+ ].map((txt, i) => (
+
+ )
+}
+
+export const Joost = ({ className = 'tw-w-32', stroke = 0 }) => (
+
+)
+
+const paypalConfig = {
+ /*
+ * This is the plan ID for FreeSewing Patron Subscriptions.
+ * Note that to maximize flexibility, and have a sort of pay-what-you-wnat
+ * system, we have only 1 plan: 1 euro/month.
+ *
+ * But we use quantity pricing. So if a person selects a 15/month plan,
+ * we subscribe them to the 1/month plan but set the quantity to 15.
+ */
+ planId: 'P-41W64036N5201172WMTEKMIA',
+ /*
+ * List of amounts we display
+ * (users can also enter their own amount, which we'll floor to an int)
+ */
+ amounts: [5, 10, 15, 25, 50, 75, 100],
+ /*
+ * Currencies supported by PayPal that we use
+ * https://developer.paypal.com/api/nvp-soap/currency-codes#paypal
+ */
+ currencies: ['aud', 'cad', 'eur', 'usd'],
+ /*
+ * Periods for recurring payments
+ * x means donation, not subscription
+ */
+ periods: ['w', 'm', '3m', '6m', 'y', 'x'],
+ periodLabels: {
+ w: 'Weekly',
+ m: 'Monthly',
+ '3m': 'Quarterly',
+ '6m': 'Half-yearly',
+ y: 'Yearly',
+ x: 'One time only',
+ },
+ /*
+ * Variables to set in the form
+ * https://developer.paypal.com/api/nvp-soap/paypal-payments-standard/integration-guide/Appx-websitestandard-htmlvariables/
+ */
+ vars: {
+ // Subscribe form
+ subscribe: {
+ /*
+ * This value indicates it is a subscribe button that was clicked
+ */
+ cmd: '_xclick-subscriptions',
+ /*
+ * Item name as shown to the user
+ *
+ * Will be replaced with the translated value at run time, but this is
+ * here as a safe default.
+ */
+ item_name: 'FreeSewing Patron Subscription',
+ /*
+ * Return URL the user will be redirected to after completion
+ * of the payment.
+ */
+ return: 'https://freesewing.org/patrons/thanks',
+ /*
+ * This needs to be set to 1 to indicate that recurring
+ * payments should be collected.
+ */
+ src: 1,
+ },
+ // Donate form
+ donate: {
+ /*
+ * This value indicates it is a donate button that was clicked
+ */
+ cmd: '_donations',
+ /*
+ * Item name as shown to the user
+ *
+ * Will be replaced with the translated value at run time, but this is
+ * here as a safe default.
+ */
+ item_name: 'FreeSewing Donation',
+ /*
+ * Return URL the user will be redirected to after completion
+ * of the payment.
+ */
+ return: 'https://freesewing.org/donate/thanks',
+ },
+ // Included in both forms
+ shared: {
+ /*
+ * This is required. It is the email address tied to FreeSewing's PayPal account.
+ */
+ business: 'info@freesewing.org',
+ /*
+ * Do not let users include a note. It just clutters up the UI.
+ */
+ no_note: 1,
+ /*
+ * This setting means the user will be redirected using GET
+ * without any payment variables included. It's the cleanest UI.
+ */
+ rm: 1,
+ /*
+ * Image to display on the PayPal checkkout page
+ * Should be 150x50 pixels (which is small)
+ */
+ image_url: 'https://data.freesewing.org/static/img/paypal-logo.png',
+ },
+ },
+}
diff --git a/packages/react/components/SignUp/index.mjs b/packages/react/components/SignUp/index.mjs
index a8570827b3b..3a9d9a2418d 100644
--- a/packages/react/components/SignUp/index.mjs
+++ b/packages/react/components/SignUp/index.mjs
@@ -26,7 +26,7 @@ import { EmailInput } from '@freesewing/react/components/Input'
import { IconButton } from '@freesewing/react/components/Button'
//import { Robot } from 'shared/components/robot/index.mjs'
-export const SignUp = () => {
+export const SignUp = ({ embed = false }) => {
// State
const [email, setEmail] = useState('')
const [emailValid, setEmailValid] = useState(false)
@@ -56,22 +56,22 @@ export const SignUp = () => {
if (status === 201 && body.result === 'created') setResult('success')
else {
setModal(
-
-
+
+
An error occured while trying to process your request
-
+
Unfortunately, we cannot recover from this error, we need a human being to look into
this.
-
+
Feel free to try again, or reach out to support so we can assist you.