@samsheena/payment-ui 1.0.4 → 1.0.5

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/index.cjs.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
+ var reactDom = require('react-dom');
4
5
 
5
6
  const PRICE_PER_MONTH = 5;
6
7
  const PLAN_LIST = [{
@@ -19,7 +20,7 @@ const PLAN_LIST = [{
19
20
  months: 6,
20
21
  enabled: true
21
22
  },
22
- // ONLY enabled + default
23
+ // Only enabled
23
24
  {
24
25
  key: "1y",
25
26
  label: "Yearly",
@@ -36,27 +37,21 @@ function PaymentModal({
36
37
  onClose
37
38
  }) {
38
39
  const defaultPlanKey = "6m";
39
- const [fullName, setFullName] = React.useState("");
40
- const [email, setEmail] = React.useState("");
41
40
  const [planKey, setPlanKey] = React.useState(defaultPlanKey);
42
41
  const [accountCreated, setAccountCreated] = React.useState(false);
43
42
  const selectedPlan = React.useMemo(() => {
44
43
  return PLAN_LIST.find(p => p.key === planKey) || PLAN_LIST[2];
45
44
  }, [planKey]);
46
- const total = React.useMemo(() => selectedPlan.months * PRICE_PER_MONTH, [selectedPlan]);
45
+ const total = selectedPlan.months * PRICE_PER_MONTH;
47
46
  const discountPercent = 100;
48
- const discountAmount = total; // 100% discount
49
- const netPayable = 0; // always zero
50
-
47
+ const discountAmount = total;
48
+ const netPayable = 0;
51
49
  function handleBackdropClick(e) {
52
50
  if (e.target?.classList?.contains("glh-pay-backdrop")) onClose?.();
53
51
  }
54
52
  function createAccountAndSubscribe() {
55
- // Frontend-only: store in localStorage so app can show "created" state later
56
53
  const payload = {
57
54
  createdAt: new Date().toISOString(),
58
- fullName,
59
- email,
60
55
  plan: selectedPlan,
61
56
  pricePerMonth: PRICE_PER_MONTH,
62
57
  total,
@@ -68,12 +63,11 @@ function PaymentModal({
68
63
  localStorage.setItem("glh_payment_account", JSON.stringify(payload));
69
64
  setAccountCreated(true);
70
65
  } catch (err) {
71
- // ignore; still show UI success
72
66
  setAccountCreated(true);
73
67
  }
74
68
  }
75
69
  if (!open) return null;
76
- return /*#__PURE__*/React.createElement("div", {
70
+ return /*#__PURE__*/reactDom.createPortal(/*#__PURE__*/React.createElement("div", {
77
71
  className: "glh-pay-backdrop",
78
72
  onMouseDown: handleBackdropClick,
79
73
  role: "dialog",
@@ -92,22 +86,6 @@ function PaymentModal({
92
86
  }, "\u2715")), /*#__PURE__*/React.createElement("div", {
93
87
  className: "glh-pay-body"
94
88
  }, !accountCreated ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
95
- className: "glh-pay-row"
96
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
97
- className: "glh-pay-label"
98
- }, "Full Name"), /*#__PURE__*/React.createElement("input", {
99
- className: "glh-pay-input",
100
- value: fullName,
101
- onChange: e => setFullName(e.target.value),
102
- placeholder: "Enter your name"
103
- })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
104
- className: "glh-pay-label"
105
- }, "Email"), /*#__PURE__*/React.createElement("input", {
106
- className: "glh-pay-input",
107
- value: email,
108
- onChange: e => setEmail(e.target.value),
109
- placeholder: "Enter your email"
110
- }))), /*#__PURE__*/React.createElement("div", {
111
89
  className: "glh-pay-label",
112
90
  style: {
113
91
  marginBottom: 8
@@ -127,9 +105,6 @@ function PaymentModal({
127
105
  onClick: pickPlan,
128
106
  role: "button",
129
107
  tabIndex: disabled ? -1 : 0,
130
- onKeyDown: e => {
131
- if ((e.key === "Enter" || e.key === " ") && !disabled) pickPlan();
132
- },
133
108
  "aria-disabled": disabled,
134
109
  "aria-pressed": selected
135
110
  }, /*#__PURE__*/React.createElement("div", {
@@ -149,16 +124,15 @@ function PaymentModal({
149
124
  }, "Duration: ", p.months, " month(s)")), /*#__PURE__*/React.createElement("div", {
150
125
  style: {
151
126
  display: "flex",
152
- gap: 8,
153
- alignItems: "center"
127
+ gap: 8
154
128
  }
155
129
  }, p.enabled ? /*#__PURE__*/React.createElement("span", {
156
130
  className: "glh-pay-pill"
157
131
  }, "ENABLED") : /*#__PURE__*/React.createElement("span", {
158
132
  className: "glh-pay-pill"
159
- }, "DISABLED"), selected ? /*#__PURE__*/React.createElement("span", {
133
+ }, "DISABLED"), selected && /*#__PURE__*/React.createElement("span", {
160
134
  className: "glh-pay-pill"
161
- }, "SELECTED") : null));
135
+ }, "SELECTED")));
162
136
  })), /*#__PURE__*/React.createElement("div", {
163
137
  className: "glh-pay-summary"
164
138
  }, /*#__PURE__*/React.createElement("div", {
@@ -188,15 +162,7 @@ function PaymentModal({
188
162
  marginBottom: 8
189
163
  }
190
164
  }, "\u2705 Account Created"), /*#__PURE__*/React.createElement("div", {
191
- style: {
192
- fontSize: 13,
193
- color: "rgba(0,0,0,0.7)"
194
- }
195
- }, "Your subscription is ready with ", /*#__PURE__*/React.createElement("b", null, "100% discount"), ". Net payable is ", /*#__PURE__*/React.createElement("b", null, "\u20B90"), "."), /*#__PURE__*/React.createElement("div", {
196
- className: "glh-pay-summary",
197
- style: {
198
- marginTop: 14
199
- }
165
+ className: "glh-pay-summary"
200
166
  }, /*#__PURE__*/React.createElement("div", {
201
167
  className: "glh-pay-line"
202
168
  }, /*#__PURE__*/React.createElement("span", null, "Selected Plan"), /*#__PURE__*/React.createElement("span", {
@@ -222,17 +188,11 @@ function PaymentModal({
222
188
  onClick: onClose
223
189
  }, "Cancel"), /*#__PURE__*/React.createElement("button", {
224
190
  className: "glh-pay-primary",
225
- onClick: createAccountAndSubscribe,
226
- disabled: !fullName || !email,
227
- title: !fullName || !email ? "Enter name & email" : "Create account",
228
- style: !fullName || !email ? {
229
- opacity: 0.6,
230
- cursor: "not-allowed"
231
- } : null
191
+ onClick: createAccountAndSubscribe
232
192
  }, "Create Account")) : /*#__PURE__*/React.createElement("button", {
233
193
  className: "glh-pay-primary",
234
194
  onClick: onClose
235
- }, "Done"))));
195
+ }, "Done")))), document.body);
236
196
  }
237
197
 
238
198
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/components/PaymentModal.jsx","../src/components/AccountButton.jsx"],"sourcesContent":["import React, { useMemo, useState } from \"react\";\r\nimport \"./styles.css\";\r\n\r\nconst PRICE_PER_MONTH = 5;\r\n\r\nconst PLAN_LIST = [\r\n { key: \"monthly\", label: \"Monthly\", months: 1, enabled: false },\r\n { key: \"3m\", label: \"3 Months\", months: 3, enabled: false },\r\n { key: \"6m\", label: \"6 Months\", months: 6, enabled: true }, // ONLY enabled + default\r\n { key: \"1y\", label: \"Yearly\", months: 12, enabled: false },\r\n { key: \"3y\", label: \"3 Years\", months: 36, enabled: false }\r\n];\r\n\r\nexport function PaymentModal({ open, onClose }) {\r\n const defaultPlanKey = \"6m\";\r\n\r\n const [fullName, setFullName] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n const [planKey, setPlanKey] = useState(defaultPlanKey);\r\n const [accountCreated, setAccountCreated] = useState(false);\r\n\r\n const selectedPlan = useMemo(() => {\r\n return PLAN_LIST.find((p) => p.key === planKey) || PLAN_LIST[2];\r\n }, [planKey]);\r\n\r\n const total = useMemo(() => selectedPlan.months * PRICE_PER_MONTH, [selectedPlan]);\r\n const discountPercent = 100;\r\n const discountAmount = total; // 100% discount\r\n const netPayable = 0; // always zero\r\n\r\n function handleBackdropClick(e) {\r\n if (e.target?.classList?.contains(\"glh-pay-backdrop\")) onClose?.();\r\n }\r\n\r\n function createAccountAndSubscribe() {\r\n // Frontend-only: store in localStorage so app can show \"created\" state later\r\n const payload = {\r\n createdAt: new Date().toISOString(),\r\n fullName,\r\n email,\r\n plan: selectedPlan,\r\n pricePerMonth: PRICE_PER_MONTH,\r\n total,\r\n discountPercent,\r\n discountAmount,\r\n netPayable\r\n };\r\n try {\r\n localStorage.setItem(\"glh_payment_account\", JSON.stringify(payload));\r\n setAccountCreated(true);\r\n } catch (err) {\r\n // ignore; still show UI success\r\n setAccountCreated(true);\r\n }\r\n }\r\n\r\n if (!open) return null;\r\n\r\n return (\r\n <div className=\"glh-pay-backdrop\" onMouseDown={handleBackdropClick} role=\"dialog\" aria-modal=\"true\">\r\n <div className=\"glh-pay-modal\" onMouseDown={(e) => e.stopPropagation()}>\r\n <div className=\"glh-pay-header\">\r\n <h3 className=\"glh-pay-title\">Create Payment Account</h3>\r\n <button className=\"glh-pay-close\" onClick={onClose} aria-label=\"Close\">✕</button>\r\n </div>\r\n\r\n <div className=\"glh-pay-body\">\r\n {!accountCreated ? (\r\n <>\r\n <div className=\"glh-pay-row\">\r\n <div>\r\n <div className=\"glh-pay-label\">Full Name</div>\r\n <input\r\n className=\"glh-pay-input\"\r\n value={fullName}\r\n onChange={(e) => setFullName(e.target.value)}\r\n placeholder=\"Enter your name\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <div className=\"glh-pay-label\">Email</div>\r\n <input\r\n className=\"glh-pay-input\"\r\n value={email}\r\n onChange={(e) => setEmail(e.target.value)}\r\n placeholder=\"Enter your email\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"glh-pay-label\" style={{ marginBottom: 8 }}>\r\n Subscription Plans (₹{PRICE_PER_MONTH} / month)\r\n </div>\r\n\r\n <div className=\"glh-pay-plans\">\r\n {PLAN_LIST.map((p) => {\r\n const disabled = !p.enabled;\r\n const selected = p.key === planKey;\r\n\r\n function pickPlan() {\r\n if (disabled) return;\r\n setPlanKey(p.key);\r\n }\r\n\r\n return (\r\n <div\r\n key={p.key}\r\n className={[\r\n \"glh-pay-plan\",\r\n disabled ? \"glh-pay-planDisabled\" : \"\",\r\n selected ? \"glh-pay-selected\" : \"\"\r\n ].join(\" \")}\r\n onClick={pickPlan}\r\n role=\"button\"\r\n tabIndex={disabled ? -1 : 0}\r\n onKeyDown={(e) => {\r\n if ((e.key === \"Enter\" || e.key === \" \") && !disabled) pickPlan();\r\n }}\r\n aria-disabled={disabled}\r\n aria-pressed={selected}\r\n >\r\n <div style={{ display: \"grid\", gap: 4 }}>\r\n <div style={{ fontWeight: 900 }}>{p.label}</div>\r\n <div style={{ fontSize: 12, color: \"rgba(0,0,0,0.65)\" }}>\r\n Duration: {p.months} month(s)\r\n </div>\r\n </div>\r\n\r\n <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>\r\n {p.enabled ? <span className=\"glh-pay-pill\">ENABLED</span> : <span className=\"glh-pay-pill\">DISABLED</span>}\r\n {selected ? <span className=\"glh-pay-pill\">SELECTED</span> : null}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n <div className=\"glh-pay-summary\">\r\n <div className=\"glh-pay-line\">\r\n <span>Total ({selectedPlan.months} × ₹{PRICE_PER_MONTH})</span>\r\n <span className=\"glh-pay-strong\">₹{total}</span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Discount</span>\r\n <span className=\"glh-pay-strong\">{discountPercent}% (-₹{discountAmount})</span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span className=\"glh-pay-strong\">Net Payable</span>\r\n <span className=\"glh-pay-strong\">₹{netPayable}</span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"glh-pay-note\">\r\n Note: This package is frontend-only. Payment is always ₹0 because 100% discount is applied.\r\n </div>\r\n </>\r\n ) : (\r\n <div style={{ padding: 6 }}>\r\n <div style={{ fontWeight: 900, fontSize: 16, marginBottom: 8 }}>✅ Account Created</div>\r\n <div style={{ fontSize: 13, color: \"rgba(0,0,0,0.7)\" }}>\r\n Your subscription is ready with <b>100% discount</b>. Net payable is <b>₹0</b>.\r\n </div>\r\n\r\n <div className=\"glh-pay-summary\" style={{ marginTop: 14 }}>\r\n <div className=\"glh-pay-line\">\r\n <span>Selected Plan</span>\r\n <span className=\"glh-pay-strong\">{selectedPlan.label}</span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Total</span>\r\n <span className=\"glh-pay-strong\">₹{total}</span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Discount</span>\r\n <span className=\"glh-pay-strong\">100% (-₹{total})</span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span className=\"glh-pay-strong\">Net Payable</span>\r\n <span className=\"glh-pay-strong\">₹0</span>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"glh-pay-footer\">\r\n {!accountCreated ? (\r\n <>\r\n <button className=\"glh-pay-secondary\" onClick={onClose}>Cancel</button>\r\n <button\r\n className=\"glh-pay-primary\"\r\n onClick={createAccountAndSubscribe}\r\n disabled={!fullName || !email}\r\n title={!fullName || !email ? \"Enter name & email\" : \"Create account\"}\r\n style={!fullName || !email ? { opacity: 0.6, cursor: \"not-allowed\" } : null}\r\n >\r\n Create Account\r\n </button>\r\n </>\r\n ) : (\r\n <button className=\"glh-pay-primary\" onClick={onClose}>Done</button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { PaymentModal } from \"./PaymentModal.jsx\";\r\nimport \"./styles.css\";\r\n\r\n/**\r\n * AccountButton\r\n * - Place this component in the CENTER area of your navbar.\r\n * - It renders a button and a modal for account creation + subscription summary.\r\n */\r\nexport function AccountButton({\r\n buttonText = \"Account\",\r\n wrapperClassName = \"\",\r\n buttonClassName = \"\",\r\n onAccountCreated\r\n}) {\r\n const [open, setOpen] = useState(false);\r\n const [hasAccount, setHasAccount] = useState(false);\r\n\r\n useEffect(() => {\r\n try {\r\n const saved = localStorage.getItem(\"glh_payment_account\");\r\n setHasAccount(!!saved);\r\n } catch (e) {\r\n setHasAccount(false);\r\n }\r\n }, [open]);\r\n\r\n function handleClose() {\r\n setOpen(false);\r\n // refresh state after close\r\n try {\r\n const saved = localStorage.getItem(\"glh_payment_account\");\r\n const ok = !!saved;\r\n setHasAccount(ok);\r\n if (ok && typeof onAccountCreated === \"function\") {\r\n onAccountCreated(JSON.parse(saved));\r\n }\r\n } catch (e) {\r\n // ignore\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <div className={`glh-pay-centerWrap ${wrapperClassName}`}>\r\n <button\r\n className={`glh-pay-btn ${buttonClassName}`}\r\n onClick={() => setOpen(true)}\r\n type=\"button\"\r\n >\r\n {hasAccount ? `${buttonText} ✓` : buttonText}\r\n </button>\r\n </div>\r\n\r\n <PaymentModal open={open} onClose={handleClose} />\r\n </>\r\n );\r\n}\r\n"],"names":["PRICE_PER_MONTH","PLAN_LIST","key","label","months","enabled","PaymentModal","open","onClose","defaultPlanKey","fullName","setFullName","useState","email","setEmail","planKey","setPlanKey","accountCreated","setAccountCreated","selectedPlan","useMemo","find","p","total","discountPercent","discountAmount","netPayable","handleBackdropClick","e","target","classList","contains","createAccountAndSubscribe","payload","createdAt","Date","toISOString","plan","pricePerMonth","localStorage","setItem","JSON","stringify","err","React","createElement","className","onMouseDown","role","stopPropagation","onClick","Fragment","value","onChange","placeholder","style","marginBottom","map","disabled","selected","pickPlan","join","tabIndex","onKeyDown","display","gap","fontWeight","fontSize","color","alignItems","padding","marginTop","title","opacity","cursor","AccountButton","buttonText","wrapperClassName","buttonClassName","onAccountCreated","setOpen","hasAccount","setHasAccount","useEffect","saved","getItem","handleClose","ok","parse","type"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/components/PaymentModal.jsx","../src/components/AccountButton.jsx"],"sourcesContent":["import React, { useMemo, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport \"./styles.css\";\r\n\r\nconst PRICE_PER_MONTH = 5;\r\n\r\nconst PLAN_LIST = [\r\n { key: \"monthly\", label: \"Monthly\", months: 1, enabled: false },\r\n { key: \"3m\", label: \"3 Months\", months: 3, enabled: false },\r\n { key: \"6m\", label: \"6 Months\", months: 6, enabled: true }, // Only enabled\r\n { key: \"1y\", label: \"Yearly\", months: 12, enabled: false },\r\n { key: \"3y\", label: \"3 Years\", months: 36, enabled: false }\r\n];\r\n\r\nexport function PaymentModal({ open, onClose }) {\r\n const defaultPlanKey = \"6m\";\r\n\r\n const [planKey, setPlanKey] = useState(defaultPlanKey);\r\n const [accountCreated, setAccountCreated] = useState(false);\r\n\r\n const selectedPlan = useMemo(() => {\r\n return PLAN_LIST.find((p) => p.key === planKey) || PLAN_LIST[2];\r\n }, [planKey]);\r\n\r\n const total = selectedPlan.months * PRICE_PER_MONTH;\r\n const discountPercent = 100;\r\n const discountAmount = total;\r\n const netPayable = 0;\r\n\r\n function handleBackdropClick(e) {\r\n if (e.target?.classList?.contains(\"glh-pay-backdrop\")) onClose?.();\r\n }\r\n\r\n function createAccountAndSubscribe() {\r\n const payload = {\r\n createdAt: new Date().toISOString(),\r\n plan: selectedPlan,\r\n pricePerMonth: PRICE_PER_MONTH,\r\n total,\r\n discountPercent,\r\n discountAmount,\r\n netPayable\r\n };\r\n\r\n try {\r\n localStorage.setItem(\"glh_payment_account\", JSON.stringify(payload));\r\n setAccountCreated(true);\r\n } catch (err) {\r\n setAccountCreated(true);\r\n }\r\n }\r\n\r\n if (!open) return null;\r\n\r\n return createPortal(\r\n <div\r\n className=\"glh-pay-backdrop\"\r\n onMouseDown={handleBackdropClick}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n >\r\n <div\r\n className=\"glh-pay-modal\"\r\n onMouseDown={(e) => e.stopPropagation()}\r\n >\r\n <div className=\"glh-pay-header\">\r\n <h3 className=\"glh-pay-title\">Create Payment Account</h3>\r\n <button\r\n className=\"glh-pay-close\"\r\n onClick={onClose}\r\n aria-label=\"Close\"\r\n >\r\n ✕\r\n </button>\r\n </div>\r\n\r\n <div className=\"glh-pay-body\">\r\n {!accountCreated ? (\r\n <>\r\n <div\r\n className=\"glh-pay-label\"\r\n style={{ marginBottom: 8 }}\r\n >\r\n Subscription Plans (₹{PRICE_PER_MONTH} / month)\r\n </div>\r\n\r\n <div className=\"glh-pay-plans\">\r\n {PLAN_LIST.map((p) => {\r\n const disabled = !p.enabled;\r\n const selected = p.key === planKey;\r\n\r\n function pickPlan() {\r\n if (disabled) return;\r\n setPlanKey(p.key);\r\n }\r\n\r\n return (\r\n <div\r\n key={p.key}\r\n className={[\r\n \"glh-pay-plan\",\r\n disabled ? \"glh-pay-planDisabled\" : \"\",\r\n selected ? \"glh-pay-selected\" : \"\"\r\n ].join(\" \")}\r\n onClick={pickPlan}\r\n role=\"button\"\r\n tabIndex={disabled ? -1 : 0}\r\n aria-disabled={disabled}\r\n aria-pressed={selected}\r\n >\r\n <div style={{ display: \"grid\", gap: 4 }}>\r\n <div style={{ fontWeight: 900 }}>\r\n {p.label}\r\n </div>\r\n <div\r\n style={{\r\n fontSize: 12,\r\n color: \"rgba(0,0,0,0.65)\"\r\n }}\r\n >\r\n Duration: {p.months} month(s)\r\n </div>\r\n </div>\r\n\r\n <div style={{ display: \"flex\", gap: 8 }}>\r\n {p.enabled ? (\r\n <span className=\"glh-pay-pill\">\r\n ENABLED\r\n </span>\r\n ) : (\r\n <span className=\"glh-pay-pill\">\r\n DISABLED\r\n </span>\r\n )}\r\n {selected && (\r\n <span className=\"glh-pay-pill\">\r\n SELECTED\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n <div className=\"glh-pay-summary\">\r\n <div className=\"glh-pay-line\">\r\n <span>\r\n Total ({selectedPlan.months} × ₹{PRICE_PER_MONTH})\r\n </span>\r\n <span className=\"glh-pay-strong\">\r\n ₹{total}\r\n </span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Discount</span>\r\n <span className=\"glh-pay-strong\">\r\n {discountPercent}% (-₹{discountAmount})\r\n </span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span className=\"glh-pay-strong\">\r\n Net Payable\r\n </span>\r\n <span className=\"glh-pay-strong\">\r\n ₹{netPayable}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"glh-pay-note\">\r\n Note: This package is frontend-only.\r\n Payment is always ₹0 because 100% discount is applied.\r\n </div>\r\n </>\r\n ) : (\r\n <div style={{ padding: 6 }}>\r\n <div\r\n style={{\r\n fontWeight: 900,\r\n fontSize: 16,\r\n marginBottom: 8\r\n }}\r\n >\r\n ✅ Account Created\r\n </div>\r\n\r\n <div className=\"glh-pay-summary\">\r\n <div className=\"glh-pay-line\">\r\n <span>Selected Plan</span>\r\n <span className=\"glh-pay-strong\">\r\n {selectedPlan.label}\r\n </span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Total</span>\r\n <span className=\"glh-pay-strong\">\r\n ₹{total}\r\n </span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Discount</span>\r\n <span className=\"glh-pay-strong\">\r\n 100% (-₹{total})\r\n </span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span className=\"glh-pay-strong\">\r\n Net Payable\r\n </span>\r\n <span className=\"glh-pay-strong\">\r\n ₹0\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"glh-pay-footer\">\r\n {!accountCreated ? (\r\n <>\r\n <button\r\n className=\"glh-pay-secondary\"\r\n onClick={onClose}\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n className=\"glh-pay-primary\"\r\n onClick={createAccountAndSubscribe}\r\n >\r\n Create Account\r\n </button>\r\n </>\r\n ) : (\r\n <button\r\n className=\"glh-pay-primary\"\r\n onClick={onClose}\r\n >\r\n Done\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>,\r\n document.body\r\n );\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { PaymentModal } from \"./PaymentModal.jsx\";\r\nimport \"./styles.css\";\r\n\r\n/**\r\n * AccountButton\r\n * - Place this component in the CENTER area of your navbar.\r\n * - It renders a button and a modal for account creation + subscription summary.\r\n */\r\nexport function AccountButton({\r\n buttonText = \"Account\",\r\n wrapperClassName = \"\",\r\n buttonClassName = \"\",\r\n onAccountCreated\r\n}) {\r\n const [open, setOpen] = useState(false);\r\n const [hasAccount, setHasAccount] = useState(false);\r\n\r\n useEffect(() => {\r\n try {\r\n const saved = localStorage.getItem(\"glh_payment_account\");\r\n setHasAccount(!!saved);\r\n } catch (e) {\r\n setHasAccount(false);\r\n }\r\n }, [open]);\r\n\r\n function handleClose() {\r\n setOpen(false);\r\n // refresh state after close\r\n try {\r\n const saved = localStorage.getItem(\"glh_payment_account\");\r\n const ok = !!saved;\r\n setHasAccount(ok);\r\n if (ok && typeof onAccountCreated === \"function\") {\r\n onAccountCreated(JSON.parse(saved));\r\n }\r\n } catch (e) {\r\n // ignore\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <div className={`glh-pay-centerWrap ${wrapperClassName}`}>\r\n <button\r\n className={`glh-pay-btn ${buttonClassName}`}\r\n onClick={() => setOpen(true)}\r\n type=\"button\"\r\n >\r\n {hasAccount ? `${buttonText} ✓` : buttonText}\r\n </button>\r\n </div>\r\n\r\n <PaymentModal open={open} onClose={handleClose} />\r\n </>\r\n );\r\n}\r\n"],"names":["PRICE_PER_MONTH","PLAN_LIST","key","label","months","enabled","PaymentModal","open","onClose","defaultPlanKey","planKey","setPlanKey","useState","accountCreated","setAccountCreated","selectedPlan","useMemo","find","p","total","discountPercent","discountAmount","netPayable","handleBackdropClick","e","target","classList","contains","createAccountAndSubscribe","payload","createdAt","Date","toISOString","plan","pricePerMonth","localStorage","setItem","JSON","stringify","err","createPortal","React","createElement","className","onMouseDown","role","stopPropagation","onClick","Fragment","style","marginBottom","map","disabled","selected","pickPlan","join","tabIndex","display","gap","fontWeight","fontSize","color","padding","document","body","AccountButton","buttonText","wrapperClassName","buttonClassName","onAccountCreated","setOpen","hasAccount","setHasAccount","useEffect","saved","getItem","handleClose","ok","parse","type"],"mappings":"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"}
package/dist/index.esm.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import React, { useState, useMemo, useEffect } from 'react';
2
+ import { createPortal } from 'react-dom';
2
3
 
3
4
  const PRICE_PER_MONTH = 5;
4
5
  const PLAN_LIST = [{
@@ -17,7 +18,7 @@ const PLAN_LIST = [{
17
18
  months: 6,
18
19
  enabled: true
19
20
  },
20
- // ONLY enabled + default
21
+ // Only enabled
21
22
  {
22
23
  key: "1y",
23
24
  label: "Yearly",
@@ -34,27 +35,21 @@ function PaymentModal({
34
35
  onClose
35
36
  }) {
36
37
  const defaultPlanKey = "6m";
37
- const [fullName, setFullName] = useState("");
38
- const [email, setEmail] = useState("");
39
38
  const [planKey, setPlanKey] = useState(defaultPlanKey);
40
39
  const [accountCreated, setAccountCreated] = useState(false);
41
40
  const selectedPlan = useMemo(() => {
42
41
  return PLAN_LIST.find(p => p.key === planKey) || PLAN_LIST[2];
43
42
  }, [planKey]);
44
- const total = useMemo(() => selectedPlan.months * PRICE_PER_MONTH, [selectedPlan]);
43
+ const total = selectedPlan.months * PRICE_PER_MONTH;
45
44
  const discountPercent = 100;
46
- const discountAmount = total; // 100% discount
47
- const netPayable = 0; // always zero
48
-
45
+ const discountAmount = total;
46
+ const netPayable = 0;
49
47
  function handleBackdropClick(e) {
50
48
  if (e.target?.classList?.contains("glh-pay-backdrop")) onClose?.();
51
49
  }
52
50
  function createAccountAndSubscribe() {
53
- // Frontend-only: store in localStorage so app can show "created" state later
54
51
  const payload = {
55
52
  createdAt: new Date().toISOString(),
56
- fullName,
57
- email,
58
53
  plan: selectedPlan,
59
54
  pricePerMonth: PRICE_PER_MONTH,
60
55
  total,
@@ -66,12 +61,11 @@ function PaymentModal({
66
61
  localStorage.setItem("glh_payment_account", JSON.stringify(payload));
67
62
  setAccountCreated(true);
68
63
  } catch (err) {
69
- // ignore; still show UI success
70
64
  setAccountCreated(true);
71
65
  }
72
66
  }
73
67
  if (!open) return null;
74
- return /*#__PURE__*/React.createElement("div", {
68
+ return /*#__PURE__*/createPortal(/*#__PURE__*/React.createElement("div", {
75
69
  className: "glh-pay-backdrop",
76
70
  onMouseDown: handleBackdropClick,
77
71
  role: "dialog",
@@ -90,22 +84,6 @@ function PaymentModal({
90
84
  }, "\u2715")), /*#__PURE__*/React.createElement("div", {
91
85
  className: "glh-pay-body"
92
86
  }, !accountCreated ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
93
- className: "glh-pay-row"
94
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
95
- className: "glh-pay-label"
96
- }, "Full Name"), /*#__PURE__*/React.createElement("input", {
97
- className: "glh-pay-input",
98
- value: fullName,
99
- onChange: e => setFullName(e.target.value),
100
- placeholder: "Enter your name"
101
- })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
102
- className: "glh-pay-label"
103
- }, "Email"), /*#__PURE__*/React.createElement("input", {
104
- className: "glh-pay-input",
105
- value: email,
106
- onChange: e => setEmail(e.target.value),
107
- placeholder: "Enter your email"
108
- }))), /*#__PURE__*/React.createElement("div", {
109
87
  className: "glh-pay-label",
110
88
  style: {
111
89
  marginBottom: 8
@@ -125,9 +103,6 @@ function PaymentModal({
125
103
  onClick: pickPlan,
126
104
  role: "button",
127
105
  tabIndex: disabled ? -1 : 0,
128
- onKeyDown: e => {
129
- if ((e.key === "Enter" || e.key === " ") && !disabled) pickPlan();
130
- },
131
106
  "aria-disabled": disabled,
132
107
  "aria-pressed": selected
133
108
  }, /*#__PURE__*/React.createElement("div", {
@@ -147,16 +122,15 @@ function PaymentModal({
147
122
  }, "Duration: ", p.months, " month(s)")), /*#__PURE__*/React.createElement("div", {
148
123
  style: {
149
124
  display: "flex",
150
- gap: 8,
151
- alignItems: "center"
125
+ gap: 8
152
126
  }
153
127
  }, p.enabled ? /*#__PURE__*/React.createElement("span", {
154
128
  className: "glh-pay-pill"
155
129
  }, "ENABLED") : /*#__PURE__*/React.createElement("span", {
156
130
  className: "glh-pay-pill"
157
- }, "DISABLED"), selected ? /*#__PURE__*/React.createElement("span", {
131
+ }, "DISABLED"), selected && /*#__PURE__*/React.createElement("span", {
158
132
  className: "glh-pay-pill"
159
- }, "SELECTED") : null));
133
+ }, "SELECTED")));
160
134
  })), /*#__PURE__*/React.createElement("div", {
161
135
  className: "glh-pay-summary"
162
136
  }, /*#__PURE__*/React.createElement("div", {
@@ -186,15 +160,7 @@ function PaymentModal({
186
160
  marginBottom: 8
187
161
  }
188
162
  }, "\u2705 Account Created"), /*#__PURE__*/React.createElement("div", {
189
- style: {
190
- fontSize: 13,
191
- color: "rgba(0,0,0,0.7)"
192
- }
193
- }, "Your subscription is ready with ", /*#__PURE__*/React.createElement("b", null, "100% discount"), ". Net payable is ", /*#__PURE__*/React.createElement("b", null, "\u20B90"), "."), /*#__PURE__*/React.createElement("div", {
194
- className: "glh-pay-summary",
195
- style: {
196
- marginTop: 14
197
- }
163
+ className: "glh-pay-summary"
198
164
  }, /*#__PURE__*/React.createElement("div", {
199
165
  className: "glh-pay-line"
200
166
  }, /*#__PURE__*/React.createElement("span", null, "Selected Plan"), /*#__PURE__*/React.createElement("span", {
@@ -220,17 +186,11 @@ function PaymentModal({
220
186
  onClick: onClose
221
187
  }, "Cancel"), /*#__PURE__*/React.createElement("button", {
222
188
  className: "glh-pay-primary",
223
- onClick: createAccountAndSubscribe,
224
- disabled: !fullName || !email,
225
- title: !fullName || !email ? "Enter name & email" : "Create account",
226
- style: !fullName || !email ? {
227
- opacity: 0.6,
228
- cursor: "not-allowed"
229
- } : null
189
+ onClick: createAccountAndSubscribe
230
190
  }, "Create Account")) : /*#__PURE__*/React.createElement("button", {
231
191
  className: "glh-pay-primary",
232
192
  onClick: onClose
233
- }, "Done"))));
193
+ }, "Done")))), document.body);
234
194
  }
235
195
 
236
196
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/components/PaymentModal.jsx","../src/components/AccountButton.jsx"],"sourcesContent":["import React, { useMemo, useState } from \"react\";\r\nimport \"./styles.css\";\r\n\r\nconst PRICE_PER_MONTH = 5;\r\n\r\nconst PLAN_LIST = [\r\n { key: \"monthly\", label: \"Monthly\", months: 1, enabled: false },\r\n { key: \"3m\", label: \"3 Months\", months: 3, enabled: false },\r\n { key: \"6m\", label: \"6 Months\", months: 6, enabled: true }, // ONLY enabled + default\r\n { key: \"1y\", label: \"Yearly\", months: 12, enabled: false },\r\n { key: \"3y\", label: \"3 Years\", months: 36, enabled: false }\r\n];\r\n\r\nexport function PaymentModal({ open, onClose }) {\r\n const defaultPlanKey = \"6m\";\r\n\r\n const [fullName, setFullName] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n const [planKey, setPlanKey] = useState(defaultPlanKey);\r\n const [accountCreated, setAccountCreated] = useState(false);\r\n\r\n const selectedPlan = useMemo(() => {\r\n return PLAN_LIST.find((p) => p.key === planKey) || PLAN_LIST[2];\r\n }, [planKey]);\r\n\r\n const total = useMemo(() => selectedPlan.months * PRICE_PER_MONTH, [selectedPlan]);\r\n const discountPercent = 100;\r\n const discountAmount = total; // 100% discount\r\n const netPayable = 0; // always zero\r\n\r\n function handleBackdropClick(e) {\r\n if (e.target?.classList?.contains(\"glh-pay-backdrop\")) onClose?.();\r\n }\r\n\r\n function createAccountAndSubscribe() {\r\n // Frontend-only: store in localStorage so app can show \"created\" state later\r\n const payload = {\r\n createdAt: new Date().toISOString(),\r\n fullName,\r\n email,\r\n plan: selectedPlan,\r\n pricePerMonth: PRICE_PER_MONTH,\r\n total,\r\n discountPercent,\r\n discountAmount,\r\n netPayable\r\n };\r\n try {\r\n localStorage.setItem(\"glh_payment_account\", JSON.stringify(payload));\r\n setAccountCreated(true);\r\n } catch (err) {\r\n // ignore; still show UI success\r\n setAccountCreated(true);\r\n }\r\n }\r\n\r\n if (!open) return null;\r\n\r\n return (\r\n <div className=\"glh-pay-backdrop\" onMouseDown={handleBackdropClick} role=\"dialog\" aria-modal=\"true\">\r\n <div className=\"glh-pay-modal\" onMouseDown={(e) => e.stopPropagation()}>\r\n <div className=\"glh-pay-header\">\r\n <h3 className=\"glh-pay-title\">Create Payment Account</h3>\r\n <button className=\"glh-pay-close\" onClick={onClose} aria-label=\"Close\">✕</button>\r\n </div>\r\n\r\n <div className=\"glh-pay-body\">\r\n {!accountCreated ? (\r\n <>\r\n <div className=\"glh-pay-row\">\r\n <div>\r\n <div className=\"glh-pay-label\">Full Name</div>\r\n <input\r\n className=\"glh-pay-input\"\r\n value={fullName}\r\n onChange={(e) => setFullName(e.target.value)}\r\n placeholder=\"Enter your name\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <div className=\"glh-pay-label\">Email</div>\r\n <input\r\n className=\"glh-pay-input\"\r\n value={email}\r\n onChange={(e) => setEmail(e.target.value)}\r\n placeholder=\"Enter your email\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"glh-pay-label\" style={{ marginBottom: 8 }}>\r\n Subscription Plans (₹{PRICE_PER_MONTH} / month)\r\n </div>\r\n\r\n <div className=\"glh-pay-plans\">\r\n {PLAN_LIST.map((p) => {\r\n const disabled = !p.enabled;\r\n const selected = p.key === planKey;\r\n\r\n function pickPlan() {\r\n if (disabled) return;\r\n setPlanKey(p.key);\r\n }\r\n\r\n return (\r\n <div\r\n key={p.key}\r\n className={[\r\n \"glh-pay-plan\",\r\n disabled ? \"glh-pay-planDisabled\" : \"\",\r\n selected ? \"glh-pay-selected\" : \"\"\r\n ].join(\" \")}\r\n onClick={pickPlan}\r\n role=\"button\"\r\n tabIndex={disabled ? -1 : 0}\r\n onKeyDown={(e) => {\r\n if ((e.key === \"Enter\" || e.key === \" \") && !disabled) pickPlan();\r\n }}\r\n aria-disabled={disabled}\r\n aria-pressed={selected}\r\n >\r\n <div style={{ display: \"grid\", gap: 4 }}>\r\n <div style={{ fontWeight: 900 }}>{p.label}</div>\r\n <div style={{ fontSize: 12, color: \"rgba(0,0,0,0.65)\" }}>\r\n Duration: {p.months} month(s)\r\n </div>\r\n </div>\r\n\r\n <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>\r\n {p.enabled ? <span className=\"glh-pay-pill\">ENABLED</span> : <span className=\"glh-pay-pill\">DISABLED</span>}\r\n {selected ? <span className=\"glh-pay-pill\">SELECTED</span> : null}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n <div className=\"glh-pay-summary\">\r\n <div className=\"glh-pay-line\">\r\n <span>Total ({selectedPlan.months} × ₹{PRICE_PER_MONTH})</span>\r\n <span className=\"glh-pay-strong\">₹{total}</span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Discount</span>\r\n <span className=\"glh-pay-strong\">{discountPercent}% (-₹{discountAmount})</span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span className=\"glh-pay-strong\">Net Payable</span>\r\n <span className=\"glh-pay-strong\">₹{netPayable}</span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"glh-pay-note\">\r\n Note: This package is frontend-only. Payment is always ₹0 because 100% discount is applied.\r\n </div>\r\n </>\r\n ) : (\r\n <div style={{ padding: 6 }}>\r\n <div style={{ fontWeight: 900, fontSize: 16, marginBottom: 8 }}>✅ Account Created</div>\r\n <div style={{ fontSize: 13, color: \"rgba(0,0,0,0.7)\" }}>\r\n Your subscription is ready with <b>100% discount</b>. Net payable is <b>₹0</b>.\r\n </div>\r\n\r\n <div className=\"glh-pay-summary\" style={{ marginTop: 14 }}>\r\n <div className=\"glh-pay-line\">\r\n <span>Selected Plan</span>\r\n <span className=\"glh-pay-strong\">{selectedPlan.label}</span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Total</span>\r\n <span className=\"glh-pay-strong\">₹{total}</span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Discount</span>\r\n <span className=\"glh-pay-strong\">100% (-₹{total})</span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span className=\"glh-pay-strong\">Net Payable</span>\r\n <span className=\"glh-pay-strong\">₹0</span>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"glh-pay-footer\">\r\n {!accountCreated ? (\r\n <>\r\n <button className=\"glh-pay-secondary\" onClick={onClose}>Cancel</button>\r\n <button\r\n className=\"glh-pay-primary\"\r\n onClick={createAccountAndSubscribe}\r\n disabled={!fullName || !email}\r\n title={!fullName || !email ? \"Enter name & email\" : \"Create account\"}\r\n style={!fullName || !email ? { opacity: 0.6, cursor: \"not-allowed\" } : null}\r\n >\r\n Create Account\r\n </button>\r\n </>\r\n ) : (\r\n <button className=\"glh-pay-primary\" onClick={onClose}>Done</button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { PaymentModal } from \"./PaymentModal.jsx\";\r\nimport \"./styles.css\";\r\n\r\n/**\r\n * AccountButton\r\n * - Place this component in the CENTER area of your navbar.\r\n * - It renders a button and a modal for account creation + subscription summary.\r\n */\r\nexport function AccountButton({\r\n buttonText = \"Account\",\r\n wrapperClassName = \"\",\r\n buttonClassName = \"\",\r\n onAccountCreated\r\n}) {\r\n const [open, setOpen] = useState(false);\r\n const [hasAccount, setHasAccount] = useState(false);\r\n\r\n useEffect(() => {\r\n try {\r\n const saved = localStorage.getItem(\"glh_payment_account\");\r\n setHasAccount(!!saved);\r\n } catch (e) {\r\n setHasAccount(false);\r\n }\r\n }, [open]);\r\n\r\n function handleClose() {\r\n setOpen(false);\r\n // refresh state after close\r\n try {\r\n const saved = localStorage.getItem(\"glh_payment_account\");\r\n const ok = !!saved;\r\n setHasAccount(ok);\r\n if (ok && typeof onAccountCreated === \"function\") {\r\n onAccountCreated(JSON.parse(saved));\r\n }\r\n } catch (e) {\r\n // ignore\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <div className={`glh-pay-centerWrap ${wrapperClassName}`}>\r\n <button\r\n className={`glh-pay-btn ${buttonClassName}`}\r\n onClick={() => setOpen(true)}\r\n type=\"button\"\r\n >\r\n {hasAccount ? `${buttonText} ✓` : buttonText}\r\n </button>\r\n </div>\r\n\r\n <PaymentModal open={open} onClose={handleClose} />\r\n </>\r\n );\r\n}\r\n"],"names":["PRICE_PER_MONTH","PLAN_LIST","key","label","months","enabled","PaymentModal","open","onClose","defaultPlanKey","fullName","setFullName","useState","email","setEmail","planKey","setPlanKey","accountCreated","setAccountCreated","selectedPlan","useMemo","find","p","total","discountPercent","discountAmount","netPayable","handleBackdropClick","e","target","classList","contains","createAccountAndSubscribe","payload","createdAt","Date","toISOString","plan","pricePerMonth","localStorage","setItem","JSON","stringify","err","React","createElement","className","onMouseDown","role","stopPropagation","onClick","Fragment","value","onChange","placeholder","style","marginBottom","map","disabled","selected","pickPlan","join","tabIndex","onKeyDown","display","gap","fontWeight","fontSize","color","alignItems","padding","marginTop","title","opacity","cursor","AccountButton","buttonText","wrapperClassName","buttonClassName","onAccountCreated","setOpen","hasAccount","setHasAccount","useEffect","saved","getItem","handleClose","ok","parse","type"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/components/PaymentModal.jsx","../src/components/AccountButton.jsx"],"sourcesContent":["import React, { useMemo, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport \"./styles.css\";\r\n\r\nconst PRICE_PER_MONTH = 5;\r\n\r\nconst PLAN_LIST = [\r\n { key: \"monthly\", label: \"Monthly\", months: 1, enabled: false },\r\n { key: \"3m\", label: \"3 Months\", months: 3, enabled: false },\r\n { key: \"6m\", label: \"6 Months\", months: 6, enabled: true }, // Only enabled\r\n { key: \"1y\", label: \"Yearly\", months: 12, enabled: false },\r\n { key: \"3y\", label: \"3 Years\", months: 36, enabled: false }\r\n];\r\n\r\nexport function PaymentModal({ open, onClose }) {\r\n const defaultPlanKey = \"6m\";\r\n\r\n const [planKey, setPlanKey] = useState(defaultPlanKey);\r\n const [accountCreated, setAccountCreated] = useState(false);\r\n\r\n const selectedPlan = useMemo(() => {\r\n return PLAN_LIST.find((p) => p.key === planKey) || PLAN_LIST[2];\r\n }, [planKey]);\r\n\r\n const total = selectedPlan.months * PRICE_PER_MONTH;\r\n const discountPercent = 100;\r\n const discountAmount = total;\r\n const netPayable = 0;\r\n\r\n function handleBackdropClick(e) {\r\n if (e.target?.classList?.contains(\"glh-pay-backdrop\")) onClose?.();\r\n }\r\n\r\n function createAccountAndSubscribe() {\r\n const payload = {\r\n createdAt: new Date().toISOString(),\r\n plan: selectedPlan,\r\n pricePerMonth: PRICE_PER_MONTH,\r\n total,\r\n discountPercent,\r\n discountAmount,\r\n netPayable\r\n };\r\n\r\n try {\r\n localStorage.setItem(\"glh_payment_account\", JSON.stringify(payload));\r\n setAccountCreated(true);\r\n } catch (err) {\r\n setAccountCreated(true);\r\n }\r\n }\r\n\r\n if (!open) return null;\r\n\r\n return createPortal(\r\n <div\r\n className=\"glh-pay-backdrop\"\r\n onMouseDown={handleBackdropClick}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n >\r\n <div\r\n className=\"glh-pay-modal\"\r\n onMouseDown={(e) => e.stopPropagation()}\r\n >\r\n <div className=\"glh-pay-header\">\r\n <h3 className=\"glh-pay-title\">Create Payment Account</h3>\r\n <button\r\n className=\"glh-pay-close\"\r\n onClick={onClose}\r\n aria-label=\"Close\"\r\n >\r\n ✕\r\n </button>\r\n </div>\r\n\r\n <div className=\"glh-pay-body\">\r\n {!accountCreated ? (\r\n <>\r\n <div\r\n className=\"glh-pay-label\"\r\n style={{ marginBottom: 8 }}\r\n >\r\n Subscription Plans (₹{PRICE_PER_MONTH} / month)\r\n </div>\r\n\r\n <div className=\"glh-pay-plans\">\r\n {PLAN_LIST.map((p) => {\r\n const disabled = !p.enabled;\r\n const selected = p.key === planKey;\r\n\r\n function pickPlan() {\r\n if (disabled) return;\r\n setPlanKey(p.key);\r\n }\r\n\r\n return (\r\n <div\r\n key={p.key}\r\n className={[\r\n \"glh-pay-plan\",\r\n disabled ? \"glh-pay-planDisabled\" : \"\",\r\n selected ? \"glh-pay-selected\" : \"\"\r\n ].join(\" \")}\r\n onClick={pickPlan}\r\n role=\"button\"\r\n tabIndex={disabled ? -1 : 0}\r\n aria-disabled={disabled}\r\n aria-pressed={selected}\r\n >\r\n <div style={{ display: \"grid\", gap: 4 }}>\r\n <div style={{ fontWeight: 900 }}>\r\n {p.label}\r\n </div>\r\n <div\r\n style={{\r\n fontSize: 12,\r\n color: \"rgba(0,0,0,0.65)\"\r\n }}\r\n >\r\n Duration: {p.months} month(s)\r\n </div>\r\n </div>\r\n\r\n <div style={{ display: \"flex\", gap: 8 }}>\r\n {p.enabled ? (\r\n <span className=\"glh-pay-pill\">\r\n ENABLED\r\n </span>\r\n ) : (\r\n <span className=\"glh-pay-pill\">\r\n DISABLED\r\n </span>\r\n )}\r\n {selected && (\r\n <span className=\"glh-pay-pill\">\r\n SELECTED\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n <div className=\"glh-pay-summary\">\r\n <div className=\"glh-pay-line\">\r\n <span>\r\n Total ({selectedPlan.months} × ₹{PRICE_PER_MONTH})\r\n </span>\r\n <span className=\"glh-pay-strong\">\r\n ₹{total}\r\n </span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Discount</span>\r\n <span className=\"glh-pay-strong\">\r\n {discountPercent}% (-₹{discountAmount})\r\n </span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span className=\"glh-pay-strong\">\r\n Net Payable\r\n </span>\r\n <span className=\"glh-pay-strong\">\r\n ₹{netPayable}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"glh-pay-note\">\r\n Note: This package is frontend-only.\r\n Payment is always ₹0 because 100% discount is applied.\r\n </div>\r\n </>\r\n ) : (\r\n <div style={{ padding: 6 }}>\r\n <div\r\n style={{\r\n fontWeight: 900,\r\n fontSize: 16,\r\n marginBottom: 8\r\n }}\r\n >\r\n ✅ Account Created\r\n </div>\r\n\r\n <div className=\"glh-pay-summary\">\r\n <div className=\"glh-pay-line\">\r\n <span>Selected Plan</span>\r\n <span className=\"glh-pay-strong\">\r\n {selectedPlan.label}\r\n </span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Total</span>\r\n <span className=\"glh-pay-strong\">\r\n ₹{total}\r\n </span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span>Discount</span>\r\n <span className=\"glh-pay-strong\">\r\n 100% (-₹{total})\r\n </span>\r\n </div>\r\n <div className=\"glh-pay-line\">\r\n <span className=\"glh-pay-strong\">\r\n Net Payable\r\n </span>\r\n <span className=\"glh-pay-strong\">\r\n ₹0\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"glh-pay-footer\">\r\n {!accountCreated ? (\r\n <>\r\n <button\r\n className=\"glh-pay-secondary\"\r\n onClick={onClose}\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n className=\"glh-pay-primary\"\r\n onClick={createAccountAndSubscribe}\r\n >\r\n Create Account\r\n </button>\r\n </>\r\n ) : (\r\n <button\r\n className=\"glh-pay-primary\"\r\n onClick={onClose}\r\n >\r\n Done\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>,\r\n document.body\r\n );\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { PaymentModal } from \"./PaymentModal.jsx\";\r\nimport \"./styles.css\";\r\n\r\n/**\r\n * AccountButton\r\n * - Place this component in the CENTER area of your navbar.\r\n * - It renders a button and a modal for account creation + subscription summary.\r\n */\r\nexport function AccountButton({\r\n buttonText = \"Account\",\r\n wrapperClassName = \"\",\r\n buttonClassName = \"\",\r\n onAccountCreated\r\n}) {\r\n const [open, setOpen] = useState(false);\r\n const [hasAccount, setHasAccount] = useState(false);\r\n\r\n useEffect(() => {\r\n try {\r\n const saved = localStorage.getItem(\"glh_payment_account\");\r\n setHasAccount(!!saved);\r\n } catch (e) {\r\n setHasAccount(false);\r\n }\r\n }, [open]);\r\n\r\n function handleClose() {\r\n setOpen(false);\r\n // refresh state after close\r\n try {\r\n const saved = localStorage.getItem(\"glh_payment_account\");\r\n const ok = !!saved;\r\n setHasAccount(ok);\r\n if (ok && typeof onAccountCreated === \"function\") {\r\n onAccountCreated(JSON.parse(saved));\r\n }\r\n } catch (e) {\r\n // ignore\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <div className={`glh-pay-centerWrap ${wrapperClassName}`}>\r\n <button\r\n className={`glh-pay-btn ${buttonClassName}`}\r\n onClick={() => setOpen(true)}\r\n type=\"button\"\r\n >\r\n {hasAccount ? `${buttonText} ✓` : buttonText}\r\n </button>\r\n </div>\r\n\r\n <PaymentModal open={open} onClose={handleClose} />\r\n </>\r\n );\r\n}\r\n"],"names":["PRICE_PER_MONTH","PLAN_LIST","key","label","months","enabled","PaymentModal","open","onClose","defaultPlanKey","planKey","setPlanKey","useState","accountCreated","setAccountCreated","selectedPlan","useMemo","find","p","total","discountPercent","discountAmount","netPayable","handleBackdropClick","e","target","classList","contains","createAccountAndSubscribe","payload","createdAt","Date","toISOString","plan","pricePerMonth","localStorage","setItem","JSON","stringify","err","createPortal","React","createElement","className","onMouseDown","role","stopPropagation","onClick","Fragment","style","marginBottom","map","disabled","selected","pickPlan","join","tabIndex","display","gap","fontWeight","fontSize","color","padding","document","body","AccountButton","buttonText","wrapperClassName","buttonClassName","onAccountCreated","setOpen","hasAccount","setHasAccount","useEffect","saved","getItem","handleClose","ok","parse","type"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@samsheena/payment-ui",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Frontend-only payment account + subscription UI (₹5/month) with 100% discount",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",