@crediball/elements 0.7.0 → 0.8.0
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.
|
@@ -187,6 +187,7 @@ var CrediballLowCreditWarningElement = class extends CrediballElement {
|
|
|
187
187
|
// src/paywall.ts
|
|
188
188
|
import { formatMoney, fetchReferral } from "@crediball/core";
|
|
189
189
|
var CURRENCY_SYMBOLS = { EUR: "\u20AC", USD: "$", GBP: "\xA3" };
|
|
190
|
+
var PERIOD_SUFFIX = { weekly: "wk", monthly: "mo", yearly: "yr" };
|
|
190
191
|
function currencySymbolFor(currency) {
|
|
191
192
|
return CURRENCY_SYMBOLS[currency.toUpperCase()] ?? currency;
|
|
192
193
|
}
|
|
@@ -269,6 +270,7 @@ var STYLE = `
|
|
|
269
270
|
padding: 10px 18px;
|
|
270
271
|
border-radius: var(--crediball-radius, 9999px);
|
|
271
272
|
}
|
|
273
|
+
p.custom-preview { margin: 6px 0 0; font-size: 12px; color: var(--crediball-ink-muted, #7a7a7a); }
|
|
272
274
|
p.error { margin: 8px 0 0; font-size: 13px; color: var(--crediball-accent, #0066cc); }
|
|
273
275
|
button.close {
|
|
274
276
|
width: 100%;
|
|
@@ -399,7 +401,7 @@ var CrediballPaywallElement = class extends CrediballElement {
|
|
|
399
401
|
(p) => `
|
|
400
402
|
<button class="option" data-kind="plan" data-id="${escapeHtml(p.id)}">
|
|
401
403
|
<span>${escapeHtml(p.name)}</span>
|
|
402
|
-
<span class="meta">${formatMoney(p.price, currency)}/${p.period
|
|
404
|
+
<span class="meta">${formatMoney(p.price, currency)}/${PERIOD_SUFFIX[p.period] ?? p.period} \xB7 ${formatCredits(p.credits)} cr</span>
|
|
403
405
|
</button>`
|
|
404
406
|
).join("")}
|
|
405
407
|
</div>` : ""}
|
|
@@ -421,7 +423,8 @@ var CrediballPaywallElement = class extends CrediballElement {
|
|
|
421
423
|
<span class="sym">${escapeHtml(currencySymbolFor(currency))}</span>
|
|
422
424
|
<input class="custom-input" inputmode="decimal" placeholder="${custom?.minEur ?? ""}" aria-label="Custom amount" />
|
|
423
425
|
<button class="custom-add" type="button">${escapeHtml(addButtonText)}</button>
|
|
424
|
-
</div
|
|
426
|
+
</div>
|
|
427
|
+
<p class="custom-preview" hidden></p>` : ""}
|
|
425
428
|
${this.renderAutoTopup(packages, pkgs?.autoTopup, currency)}
|
|
426
429
|
<p class="error" hidden></p>
|
|
427
430
|
<button class="close" part="close" type="button">Not now</button>
|
|
@@ -471,6 +474,18 @@ var CrediballPaywallElement = class extends CrediballElement {
|
|
|
471
474
|
const input = this.shadow.querySelector(".custom-input");
|
|
472
475
|
const addBtn = this.shadow.querySelector(".custom-add");
|
|
473
476
|
const errEl = this.shadow.querySelector(".error");
|
|
477
|
+
const previewEl = this.shadow.querySelector(".custom-preview");
|
|
478
|
+
const rate = custom?.rate;
|
|
479
|
+
input?.addEventListener("input", () => {
|
|
480
|
+
if (!previewEl) return;
|
|
481
|
+
const amount = Number(input.value);
|
|
482
|
+
if (!rate || rate <= 0 || !Number.isFinite(amount) || amount <= 0) {
|
|
483
|
+
previewEl.hidden = true;
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
previewEl.hidden = false;
|
|
487
|
+
previewEl.textContent = `\u2248 ${formatCredits(Math.round(amount * rate))} credits`;
|
|
488
|
+
});
|
|
474
489
|
const submit = () => {
|
|
475
490
|
const amount = Number(input?.value);
|
|
476
491
|
const sym = currencySymbolFor(currency);
|
|
@@ -601,6 +601,7 @@ var Crediball = (() => {
|
|
|
601
601
|
|
|
602
602
|
// src/paywall.ts
|
|
603
603
|
var CURRENCY_SYMBOLS = { EUR: "\u20AC", USD: "$", GBP: "\xA3" };
|
|
604
|
+
var PERIOD_SUFFIX = { weekly: "wk", monthly: "mo", yearly: "yr" };
|
|
604
605
|
function currencySymbolFor(currency) {
|
|
605
606
|
return CURRENCY_SYMBOLS[currency.toUpperCase()] ?? currency;
|
|
606
607
|
}
|
|
@@ -683,6 +684,7 @@ var Crediball = (() => {
|
|
|
683
684
|
padding: 10px 18px;
|
|
684
685
|
border-radius: var(--crediball-radius, 9999px);
|
|
685
686
|
}
|
|
687
|
+
p.custom-preview { margin: 6px 0 0; font-size: 12px; color: var(--crediball-ink-muted, #7a7a7a); }
|
|
686
688
|
p.error { margin: 8px 0 0; font-size: 13px; color: var(--crediball-accent, #0066cc); }
|
|
687
689
|
button.close {
|
|
688
690
|
width: 100%;
|
|
@@ -813,7 +815,7 @@ var Crediball = (() => {
|
|
|
813
815
|
(p) => `
|
|
814
816
|
<button class="option" data-kind="plan" data-id="${escapeHtml(p.id)}">
|
|
815
817
|
<span>${escapeHtml(p.name)}</span>
|
|
816
|
-
<span class="meta">${formatMoney(p.price, currency)}/${p.period
|
|
818
|
+
<span class="meta">${formatMoney(p.price, currency)}/${PERIOD_SUFFIX[p.period] ?? p.period} \xB7 ${formatCredits(p.credits)} cr</span>
|
|
817
819
|
</button>`
|
|
818
820
|
).join("")}
|
|
819
821
|
</div>` : ""}
|
|
@@ -835,7 +837,8 @@ var Crediball = (() => {
|
|
|
835
837
|
<span class="sym">${escapeHtml(currencySymbolFor(currency))}</span>
|
|
836
838
|
<input class="custom-input" inputmode="decimal" placeholder="${custom?.minEur ?? ""}" aria-label="Custom amount" />
|
|
837
839
|
<button class="custom-add" type="button">${escapeHtml(addButtonText)}</button>
|
|
838
|
-
</div
|
|
840
|
+
</div>
|
|
841
|
+
<p class="custom-preview" hidden></p>` : ""}
|
|
839
842
|
${this.renderAutoTopup(packages, pkgs?.autoTopup, currency)}
|
|
840
843
|
<p class="error" hidden></p>
|
|
841
844
|
<button class="close" part="close" type="button">Not now</button>
|
|
@@ -885,6 +888,18 @@ var Crediball = (() => {
|
|
|
885
888
|
const input = this.shadow.querySelector(".custom-input");
|
|
886
889
|
const addBtn = this.shadow.querySelector(".custom-add");
|
|
887
890
|
const errEl = this.shadow.querySelector(".error");
|
|
891
|
+
const previewEl = this.shadow.querySelector(".custom-preview");
|
|
892
|
+
const rate = custom?.rate;
|
|
893
|
+
input?.addEventListener("input", () => {
|
|
894
|
+
if (!previewEl) return;
|
|
895
|
+
const amount = Number(input.value);
|
|
896
|
+
if (!rate || rate <= 0 || !Number.isFinite(amount) || amount <= 0) {
|
|
897
|
+
previewEl.hidden = true;
|
|
898
|
+
return;
|
|
899
|
+
}
|
|
900
|
+
previewEl.hidden = false;
|
|
901
|
+
previewEl.textContent = `\u2248 ${formatCredits(Math.round(amount * rate))} credits`;
|
|
902
|
+
});
|
|
888
903
|
const submit = () => {
|
|
889
904
|
const amount = Number(input?.value);
|
|
890
905
|
const sym = currencySymbolFor(currency);
|
package/dist/index.js
CHANGED
package/dist/register.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crediball/elements",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Framework-agnostic web components for showing Crediball credits inside your AI app.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Filippo Rezzadore <filipporezzadore@gmail.com>",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"prepublishOnly": "npm run build"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@crediball/core": "^0.
|
|
59
|
+
"@crediball/core": "^0.7.0"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"tsup": "^8.3.5",
|