@owlmeans/web-payment 0.1.18-rc.2 → 0.1.18-rc.21
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/README.md +30 -1
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/web-payment/SKILL.md +287 -20
- package/build/@/components/ui/card.d.ts +10 -0
- package/build/@/components/ui/card.d.ts.map +1 -0
- package/build/@/components/ui/card.js +25 -0
- package/build/@/components/ui/card.js.map +1 -0
- package/build/@/components/ui/checkbox.d.ts +5 -0
- package/build/@/components/ui/checkbox.d.ts.map +1 -0
- package/build/@/components/ui/checkbox.js +6 -0
- package/build/@/components/ui/checkbox.js.map +1 -0
- package/build/@/components/ui/progress.d.ts +5 -0
- package/build/@/components/ui/progress.d.ts.map +1 -0
- package/build/@/components/ui/progress.js +11 -0
- package/build/@/components/ui/progress.js.map +1 -0
- package/build/@/components/ui/select.d.ts +8 -0
- package/build/@/components/ui/select.d.ts.map +1 -0
- package/build/@/components/ui/select.js +9 -0
- package/build/@/components/ui/select.js.map +1 -0
- package/build/capability-list.d.ts +7 -0
- package/build/capability-list.d.ts.map +1 -0
- package/build/capability-list.js +24 -0
- package/build/capability-list.js.map +1 -0
- package/build/checkout-limit.d.ts +11 -0
- package/build/checkout-limit.d.ts.map +1 -0
- package/build/checkout-limit.js +34 -0
- package/build/checkout-limit.js.map +1 -0
- package/build/consumer/cancellation.d.ts +20 -0
- package/build/consumer/cancellation.d.ts.map +1 -0
- package/build/consumer/cancellation.js +115 -0
- package/build/consumer/cancellation.js.map +1 -0
- package/build/consumer/copy.d.ts +23 -0
- package/build/consumer/copy.d.ts.map +1 -0
- package/build/consumer/copy.js +75 -0
- package/build/consumer/copy.js.map +1 -0
- package/build/consumer/ensure.d.ts +56 -0
- package/build/consumer/ensure.d.ts.map +1 -0
- package/build/consumer/ensure.js +71 -0
- package/build/consumer/ensure.js.map +1 -0
- package/build/consumer/fields.d.ts +43 -0
- package/build/consumer/fields.d.ts.map +1 -0
- package/build/consumer/fields.js +19 -0
- package/build/consumer/fields.js.map +1 -0
- package/build/consumer/hooks.d.ts +113 -0
- package/build/consumer/hooks.d.ts.map +1 -0
- package/build/consumer/hooks.js +225 -0
- package/build/consumer/hooks.js.map +1 -0
- package/build/consumer/index.d.ts +14 -0
- package/build/consumer/index.d.ts.map +1 -0
- package/build/consumer/index.js +12 -0
- package/build/consumer/index.js.map +1 -0
- package/build/consumer/legal.d.ts +53 -0
- package/build/consumer/legal.d.ts.map +1 -0
- package/build/consumer/legal.js +77 -0
- package/build/consumer/legal.js.map +1 -0
- package/build/consumer/performance-consent-dialog.d.ts +18 -0
- package/build/consumer/performance-consent-dialog.d.ts.map +1 -0
- package/build/consumer/performance-consent-dialog.js +71 -0
- package/build/consumer/performance-consent-dialog.js.map +1 -0
- package/build/consumer/provider.d.ts +33 -0
- package/build/consumer/provider.d.ts.map +1 -0
- package/build/consumer/provider.js +26 -0
- package/build/consumer/provider.js.map +1 -0
- package/build/consumer/refusal.d.ts +35 -0
- package/build/consumer/refusal.d.ts.map +1 -0
- package/build/consumer/refusal.js +98 -0
- package/build/consumer/refusal.js.map +1 -0
- package/build/consumer/subscription-start-dialog.d.ts +16 -0
- package/build/consumer/subscription-start-dialog.d.ts.map +1 -0
- package/build/consumer/subscription-start-dialog.js +43 -0
- package/build/consumer/subscription-start-dialog.js.map +1 -0
- package/build/consumer/types.d.ts +114 -0
- package/build/consumer/types.d.ts.map +1 -0
- package/build/consumer/types.js +2 -0
- package/build/consumer/types.js.map +1 -0
- package/build/consumer/withdrawal.d.ts +29 -0
- package/build/consumer/withdrawal.d.ts.map +1 -0
- package/build/consumer/withdrawal.js +140 -0
- package/build/consumer/withdrawal.js.map +1 -0
- package/build/copy.d.ts +14 -0
- package/build/copy.d.ts.map +1 -0
- package/build/copy.js +51 -0
- package/build/copy.js.map +1 -0
- package/build/dialog.d.ts +1 -1
- package/build/dialog.d.ts.map +1 -1
- package/build/dialog.js +46 -17
- package/build/dialog.js.map +1 -1
- package/build/entitlement.d.ts +26 -0
- package/build/entitlement.d.ts.map +1 -0
- package/build/entitlement.js +42 -0
- package/build/entitlement.js.map +1 -0
- package/build/estimate-cache.d.ts +14 -0
- package/build/estimate-cache.d.ts.map +1 -0
- package/build/estimate-cache.js +39 -0
- package/build/estimate-cache.js.map +1 -0
- package/build/estimate-summary.d.ts +64 -0
- package/build/estimate-summary.d.ts.map +1 -0
- package/build/estimate-summary.js +94 -0
- package/build/estimate-summary.js.map +1 -0
- package/build/estimate.d.ts +34 -0
- package/build/estimate.d.ts.map +1 -0
- package/build/estimate.js +92 -0
- package/build/estimate.js.map +1 -0
- package/build/format.d.ts +15 -0
- package/build/format.d.ts.map +1 -0
- package/build/format.js +68 -0
- package/build/format.js.map +1 -0
- package/build/hooks.d.ts +0 -4
- package/build/hooks.d.ts.map +1 -1
- package/build/hooks.js +3 -30
- package/build/hooks.js.map +1 -1
- package/build/i18n/be.json +1 -1
- package/build/i18n/de.json +1 -1
- package/build/i18n/en.json +1 -1
- package/build/i18n/es.json +1 -1
- package/build/i18n/fr.json +145 -0
- package/build/i18n/pl.json +1 -1
- package/build/i18n/ru.json +1 -1
- package/build/i18n/uk.json +1 -1
- package/build/i18n.d.ts +2 -1
- package/build/i18n.d.ts.map +1 -1
- package/build/i18n.js +11 -7
- package/build/i18n.js.map +1 -1
- package/build/index.d.ts +9 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +9 -0
- package/build/index.js.map +1 -1
- package/build/limit-meter.d.ts +7 -0
- package/build/limit-meter.d.ts.map +1 -0
- package/build/limit-meter.js +26 -0
- package/build/limit-meter.js.map +1 -0
- package/build/plan-card.d.ts +7 -0
- package/build/plan-card.d.ts.map +1 -0
- package/build/plan-card.js +29 -0
- package/build/plan-card.js.map +1 -0
- package/build/poll.d.ts +7 -0
- package/build/poll.d.ts.map +1 -0
- package/build/poll.js +28 -0
- package/build/poll.js.map +1 -0
- package/build/selectors.d.ts +18 -0
- package/build/selectors.d.ts.map +1 -0
- package/build/selectors.js +78 -0
- package/build/selectors.js.map +1 -0
- package/build/types.d.ts +120 -2
- package/build/types.d.ts.map +1 -1
- package/package.json +22 -7
- package/src/@/components/ui/card.tsx +93 -0
- package/src/@/components/ui/checkbox.tsx +23 -0
- package/src/@/components/ui/progress.tsx +44 -0
- package/src/@/components/ui/select.tsx +62 -0
- package/src/@/globals.css +10 -0
- package/src/capability-list.tsx +50 -0
- package/src/checkout-limit.tsx +48 -0
- package/src/consumer/cancellation.tsx +214 -0
- package/src/consumer/copy.ts +93 -0
- package/src/consumer/ensure.ts +124 -0
- package/src/consumer/fields.tsx +89 -0
- package/src/consumer/hooks.ts +358 -0
- package/src/consumer/index.ts +13 -0
- package/src/consumer/legal.tsx +129 -0
- package/src/consumer/performance-consent-dialog.tsx +132 -0
- package/src/consumer/provider.tsx +49 -0
- package/src/consumer/refusal.ts +110 -0
- package/src/consumer/subscription-start-dialog.tsx +87 -0
- package/src/consumer/types.ts +121 -0
- package/src/consumer/withdrawal.tsx +279 -0
- package/src/copy.tsx +62 -0
- package/src/dialog.tsx +58 -25
- package/src/entitlement.ts +56 -0
- package/src/estimate-cache.ts +40 -0
- package/src/estimate-summary.tsx +172 -0
- package/src/estimate.ts +119 -0
- package/src/format.ts +71 -0
- package/src/hooks.ts +3 -35
- package/src/i18n/be.json +1 -1
- package/src/i18n/de.json +1 -1
- package/src/i18n/en.json +1 -1
- package/src/i18n/es.json +1 -1
- package/src/i18n/fr.json +145 -0
- package/src/i18n/pl.json +1 -1
- package/src/i18n/ru.json +1 -1
- package/src/i18n/uk.json +1 -1
- package/src/i18n.ts +12 -7
- package/src/index.ts +9 -0
- package/src/limit-meter.tsx +55 -0
- package/src/plan-card.tsx +67 -0
- package/src/poll.ts +27 -0
- package/src/selectors.ts +93 -0
- package/src/types.ts +142 -2
- package/tests/consent-refusal.spec.ts +83 -0
- package/tests/consumer-hooks.spec.ts +205 -0
- package/tests/consumer.spec.ts +343 -0
- package/tests/context.ts +9 -0
- package/tests/dialog.spec.ts +49 -0
- package/tests/entitlement.spec.ts +117 -0
- package/tests/estimate-cache.spec.ts +46 -0
- package/tests/harness/consumer-fixtures.ts +105 -0
- package/tests/harness/consumer.tsx +197 -0
- package/tests/harness/entitlement.tsx +159 -0
- package/tests/harness/estimate-fixtures.ts +48 -0
- package/tests/harness/mount.tsx +19 -3
- package/tests/i18n.spec.ts +78 -8
- package/tests/pieces.spec.ts +134 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
{
|
|
2
|
+
"amount-checkout": {
|
|
3
|
+
"title": "Ajouter des crédits",
|
|
4
|
+
"description": "Choisissez la valeur nette de crédits à ajouter à votre organisation.",
|
|
5
|
+
"presets": "Montants prédéfinis",
|
|
6
|
+
"custom": "Montant personnalisé",
|
|
7
|
+
"invalid": "Saisissez un montant valide avec au plus deux décimales.",
|
|
8
|
+
"below": "Le montant minimal est de {{amount}}.",
|
|
9
|
+
"above": "Le montant maximal est de {{amount}}.",
|
|
10
|
+
"bounds": "Choisissez entre {{minimum}} et {{maximum}}.",
|
|
11
|
+
"credits": "Valeur des crédits",
|
|
12
|
+
"adjustment": "Ajustement de traitement",
|
|
13
|
+
"subtotal": "Sous-total hors taxes",
|
|
14
|
+
"tax-note": "Stripe calcule les taxes applicables lors du paiement.",
|
|
15
|
+
"cancel": "Annuler",
|
|
16
|
+
"continue": "Continuer vers Stripe",
|
|
17
|
+
"pending": "Ouverture du paiement…",
|
|
18
|
+
"close": "Fermer",
|
|
19
|
+
"above-limit": "Le maximum que vous pouvez ajouter actuellement est de {{amount}}."
|
|
20
|
+
},
|
|
21
|
+
"entitlement": {
|
|
22
|
+
"plan": {
|
|
23
|
+
"current": "Plan actuel"
|
|
24
|
+
},
|
|
25
|
+
"status": {
|
|
26
|
+
"trial": "Essai",
|
|
27
|
+
"trial-on": "L’essai se termine le {{date}}",
|
|
28
|
+
"past-due": "Paiement en retard",
|
|
29
|
+
"cancel-scheduled": "Annulation programmée",
|
|
30
|
+
"cancel-scheduled-on": "Annulé le {{date}}",
|
|
31
|
+
"paused": "En pause",
|
|
32
|
+
"paused-on": "En pause depuis le {{date}}",
|
|
33
|
+
"suspended": "Suspendu",
|
|
34
|
+
"free": "Plan gratuit",
|
|
35
|
+
"renews-on": "Se renouvelle le {{date}}",
|
|
36
|
+
"active": "Actif",
|
|
37
|
+
"created": "En attente d’activation",
|
|
38
|
+
"canceled": "Annulé",
|
|
39
|
+
"expired": "Expiré",
|
|
40
|
+
"ended": "Terminé",
|
|
41
|
+
"blocked": "Bloqué"
|
|
42
|
+
},
|
|
43
|
+
"limit": {
|
|
44
|
+
"usage": "{{used}} sur {{limit}}",
|
|
45
|
+
"usage-unit": "{{used}} sur {{limit}} {{unit}}",
|
|
46
|
+
"not-included": "Non inclus",
|
|
47
|
+
"exhausted": "Limite atteinte",
|
|
48
|
+
"resets-on": "Se renouvelle le {{date}}"
|
|
49
|
+
},
|
|
50
|
+
"promo": {
|
|
51
|
+
"free-until": "Gratuit jusqu’au {{date}}",
|
|
52
|
+
"grandfathered": "Inclus dans votre plan",
|
|
53
|
+
"ended": "Promotion terminée"
|
|
54
|
+
},
|
|
55
|
+
"capability": {
|
|
56
|
+
"included": "Inclus",
|
|
57
|
+
"not-included": "Non inclus"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"estimate": {
|
|
61
|
+
"country": "Pays de facturation",
|
|
62
|
+
"country-placeholder": "Choisissez un pays",
|
|
63
|
+
"tax-type": {
|
|
64
|
+
"vat": "TVA",
|
|
65
|
+
"gst": "GST",
|
|
66
|
+
"sales-tax": "Taxe de vente",
|
|
67
|
+
"tax": "Taxe"
|
|
68
|
+
},
|
|
69
|
+
"rate": "{{type}} ({{percentage}} %)",
|
|
70
|
+
"total": "Total estimé",
|
|
71
|
+
"converted-note": "Conversion au taux de change actuel de Stripe ; le montant exact et les éventuels frais de conversion sont confirmés lors du paiement.",
|
|
72
|
+
"status": {
|
|
73
|
+
"taxed": "La taxe est incluse dans le total estimé ci-dessous.",
|
|
74
|
+
"reverse-charge": "Autoliquidation : votre numéro de TVA vous fait déclarer vous-même cette taxe, aucun montant n’est ajouté.",
|
|
75
|
+
"none": "Aucune taxe ne s’applique dans ce pays.",
|
|
76
|
+
"at-checkout": "La taxe exacte est calculée lors du paiement.",
|
|
77
|
+
"location-required": "Choisissez votre pays de facturation pour voir une estimation."
|
|
78
|
+
},
|
|
79
|
+
"loading": "Vérification de la taxe…",
|
|
80
|
+
"failed": "La taxe ne peut pas être vérifiée pour le moment.",
|
|
81
|
+
"country-locked": "Votre pays de facturation a été fixé lors de votre premier achat et ne peut pas être modifié ici."
|
|
82
|
+
},
|
|
83
|
+
"checkout-limit": {
|
|
84
|
+
"note": "Vous pouvez actuellement ajouter jusqu’à {{amount}}.",
|
|
85
|
+
"blocked": "Vous ne pouvez pas ajouter de crédits pour le moment.",
|
|
86
|
+
"resets": "Davantage sera disponible le {{date}}.",
|
|
87
|
+
"reason": {
|
|
88
|
+
"per-purchase": "Les recharges individuelles de votre organisation sont limitées pour l’instant ; la limite augmente à mesure que vous utilisez vos crédits.",
|
|
89
|
+
"window": "Vos recharges récentes comptent dans une limite sur les derniers jours.",
|
|
90
|
+
"hold": "Les recharges de votre organisation sont suspendues. Veuillez contacter le support.",
|
|
91
|
+
"other": "Une limite de recharge s’applique à votre organisation."
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"consumer": {
|
|
95
|
+
"show-in": "Afficher en {{language}}",
|
|
96
|
+
"purchases": "Achats dans leur délai de rétractation",
|
|
97
|
+
"continue": "Continuer",
|
|
98
|
+
"back": "Retour",
|
|
99
|
+
"close": "Fermer",
|
|
100
|
+
"print": "Imprimer ou enregistrer",
|
|
101
|
+
"pending": "Envoi…",
|
|
102
|
+
"required": "Veuillez remplir ce champ.",
|
|
103
|
+
"email-invalid": "Saisissez une adresse e-mail valide.",
|
|
104
|
+
"date-invalid": "Choisissez une date à partir d’aujourd’hui.",
|
|
105
|
+
"failed": "Cela n’a pas abouti. Veuillez réessayer.",
|
|
106
|
+
"review": "Vérifiez vos informations",
|
|
107
|
+
"receipt": "Accusé de réception",
|
|
108
|
+
"received-at": "Reçu le",
|
|
109
|
+
"reference": "Référence",
|
|
110
|
+
"status": "Statut",
|
|
111
|
+
"not-mailed": "Conservez cette page : l’e-mail de confirmation n’a pas encore été envoyé.",
|
|
112
|
+
"website": "Site web"
|
|
113
|
+
},
|
|
114
|
+
"withdrawal": {
|
|
115
|
+
"none": "Aucun contrat ne peut faire l’objet d’une rétractation pour le moment.",
|
|
116
|
+
"purchased": "Acheté le {{date}}",
|
|
117
|
+
"paid": "Payé : {{amount}}",
|
|
118
|
+
"until": "Rétractation possible jusqu’au {{date}} inclus",
|
|
119
|
+
"estimate": "Remboursement estimé : {{amount}}",
|
|
120
|
+
"estimate-unknown": "Le remboursement est calculé lors du traitement de votre rétractation.",
|
|
121
|
+
"refund": "Remboursement",
|
|
122
|
+
"subscription-canceled": "L’abonnement a pris fin.",
|
|
123
|
+
"kind": {
|
|
124
|
+
"top-up": "Crédits",
|
|
125
|
+
"subscription": "Abonnement"
|
|
126
|
+
},
|
|
127
|
+
"status": {
|
|
128
|
+
"received": "Reçue",
|
|
129
|
+
"processing": "En cours de traitement",
|
|
130
|
+
"refunded": "Remboursée",
|
|
131
|
+
"review": "En cours d’examen",
|
|
132
|
+
"failed": "Remboursement retardé — nouvelle tentative en cours",
|
|
133
|
+
"expired": "Reçue après le délai de rétractation"
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"cancellation": {
|
|
137
|
+
"effective-at": "Votre contrat prend fin le {{date}}.",
|
|
138
|
+
"status": {
|
|
139
|
+
"received": "Reçue",
|
|
140
|
+
"scheduled": "Résiliation programmée",
|
|
141
|
+
"already-scheduled": "Résiliation déjà programmée",
|
|
142
|
+
"review": "Reçue — nous l’examinerons et la confirmerons par e-mail"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
package/build/i18n/pl.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "amount-checkout": { "title": "Dodaj kredyty", "description": "Wybierz wartość netto kredytów dla organizacji.", "presets": "Kwoty sugerowane", "custom": "Własna kwota", "invalid": "Wpisz prawidłową kwotę z maksymalnie dwoma miejscami dziesiętnymi.", "below": "Minimalna kwota to {{amount}}.", "above": "Maksymalna kwota to {{amount}}.", "bounds": "Wybierz od {{minimum}} do {{maximum}}.", "credits": "Wartość kredytów", "adjustment": "Korekta przetwarzania", "subtotal": "Suma przed podatkiem", "tax-note": "Stripe obliczy należny podatek podczas płatności.", "cancel": "Anuluj", "continue": "Przejdź do Stripe", "pending": "Otwieranie płatności…", "close": "Zamknij" } }
|
|
1
|
+
{ "amount-checkout": { "title": "Dodaj kredyty", "description": "Wybierz wartość netto kredytów dla organizacji.", "presets": "Kwoty sugerowane", "custom": "Własna kwota", "invalid": "Wpisz prawidłową kwotę z maksymalnie dwoma miejscami dziesiętnymi.", "below": "Minimalna kwota to {{amount}}.", "above": "Maksymalna kwota to {{amount}}.", "bounds": "Wybierz od {{minimum}} do {{maximum}}.", "credits": "Wartość kredytów", "adjustment": "Korekta przetwarzania", "subtotal": "Suma przed podatkiem", "tax-note": "Stripe obliczy należny podatek podczas płatności.", "cancel": "Anuluj", "continue": "Przejdź do Stripe", "pending": "Otwieranie płatności…", "close": "Zamknij", "above-limit": "Obecnie możesz dodać maksymalnie {{amount}}." }, "entitlement": { "plan": { "current": "Obecny plan" }, "status": { "trial": "Okres próbny", "trial-on": "Okres próbny kończy się {{date}}", "past-due": "Zaległa płatność", "cancel-scheduled": "Anulowanie zaplanowane", "cancel-scheduled-on": "Zostanie anulowany {{date}}", "paused": "Wstrzymany", "paused-on": "Wstrzymany od {{date}}", "suspended": "Zawieszony", "free": "Plan darmowy", "renews-on": "Odnawia się {{date}}", "active": "Aktywny", "created": "Oczekuje na aktywację", "canceled": "Anulowany", "expired": "Wygasł", "ended": "Zakończony", "blocked": "Zablokowany" }, "limit": { "usage": "{{used}} z {{limit}}", "usage-unit": "{{used}} z {{limit}} {{unit}}", "not-included": "Brak w planie", "exhausted": "Limit wyczerpany", "resets-on": "Odnowienie {{date}}" }, "promo": { "free-until": "Bezpłatnie do {{date}}", "grandfathered": "Zachowane w Twoim planie", "ended": "Promocja zakończona" }, "capability": { "included": "W planie", "not-included": "Brak w planie" } }, "estimate": { "country": "Kraj rozliczeniowy", "country-placeholder": "Wybierz kraj", "tax-type": { "vat": "VAT", "gst": "GST", "sales-tax": "Podatek od sprzedaży", "tax": "Podatek" }, "rate": "{{type}} ({{percentage}}%)", "total": "Szacowana suma", "converted-note": "Przeliczone po bieżącym kursie Stripe; dokładna kwota i ewentualna opłata za przewalutowanie zostaną potwierdzone podczas płatności.", "status": { "taxed": "Podatek jest wliczony w szacowaną sumę poniżej.", "reverse-charge": "Odwrotne obciążenie — Twój numer VAT oznacza, że sam rozliczasz ten podatek, więc nic nie doliczamy.", "none": "Dla tego kraju podatek nie ma zastosowania.", "at-checkout": "Dokładny podatek zostanie obliczony podczas płatności.", "location-required": "Wybierz kraj rozliczeniowy, aby zobaczyć szacunek." }, "loading": "Sprawdzanie podatku…", "failed": "Nie udało się teraz sprawdzić podatku.", "country-locked": "Twój kraj rozliczeniowy został ustalony przy pierwszym zakupie i nie można go tu zmienić." }, "checkout-limit": { "note": "Obecnie możesz dodać do {{amount}}.", "blocked": "Obecnie nie możesz dodać kredytów.", "resets": "Więcej będzie dostępne {{date}}.", "reason": { "per-purchase": "Pojedyncze doładowania twojej organizacji są na razie ograniczone; limit rośnie wraz z wykorzystaniem kredytów.", "window": "Twoje ostatnie doładowania wliczają się do limitu z ostatnich kilku dni.", "hold": "Doładowania twojej organizacji są wstrzymane. Skontaktuj się z pomocą techniczną.", "other": "Twoją organizację obowiązuje limit doładowań." } }, "consumer": { "show-in": "Pokaż w języku: {{language}}", "purchases": "Zakupy w okresie odstąpienia od umowy", "continue": "Dalej", "back": "Wstecz", "close": "Zamknij", "print": "Drukuj lub zapisz", "pending": "Wysyłanie…", "required": "Wypełnij to pole.", "email-invalid": "Wpisz prawidłowy adres e-mail.", "date-invalid": "Wybierz datę od dziś.", "failed": "Nie udało się. Spróbuj ponownie.", "review": "Sprawdź swoje dane", "receipt": "Potwierdzenie otrzymania", "received-at": "Data otrzymania", "reference": "Numer referencyjny", "status": "Status", "not-mailed": "Zachowaj tę stronę: e-mail z potwierdzeniem nie został jeszcze wysłany.", "website": "Strona internetowa" }, "withdrawal": { "none": "Obecnie nie można odstąpić od żadnej umowy.", "purchased": "Kupiono {{date}}", "paid": "Zapłacono {{amount}}", "until": "Odstąpienie możliwe do końca dnia {{date}}", "estimate": "Szacowany zwrot: {{amount}}", "estimate-unknown": "Kwota zwrotu zostanie obliczona przy rozpatrywaniu odstąpienia.", "refund": "Zwrot", "subscription-canceled": "Subskrypcja została zakończona.", "kind": { "top-up": "Kredyty", "subscription": "Subskrypcja" }, "status": { "received": "Otrzymano", "processing": "W trakcie realizacji", "refunded": "Zwrócono", "review": "W trakcie weryfikacji", "failed": "Zwrot opóźniony — ponawiamy go", "expired": "Otrzymano po upływie terminu odstąpienia" } }, "cancellation": { "effective-at": "Twoja umowa kończy się {{date}}.", "status": { "received": "Otrzymano", "scheduled": "Wypowiedzenie zaplanowane", "already-scheduled": "Wypowiedzenie już zaplanowane", "review": "Otrzymano — rozpatrzymy je i potwierdzimy e-mailem" } } }
|
package/build/i18n/ru.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "amount-checkout": { "title": "Пополнить кредиты", "description": "Выберите чистую стоимость кредитов для организации.", "presets": "Готовые суммы", "custom": "Своя сумма", "invalid": "Введите корректную сумму, не более двух знаков после запятой.", "below": "Минимальная сумма — {{amount}}.", "above": "Максимальная сумма — {{amount}}.", "bounds": "Выберите сумму от {{minimum}} до {{maximum}}.", "credits": "Стоимость кредитов", "adjustment": "Корректировка обработки", "subtotal": "Сумма до налога", "tax-note": "Stripe рассчитает применимый налог при оплате.", "cancel": "Отмена", "continue": "Перейти в Stripe", "pending": "Открываем оплату…", "close": "Закрыть" } }
|
|
1
|
+
{ "amount-checkout": { "title": "Пополнить кредиты", "description": "Выберите чистую стоимость кредитов для организации.", "presets": "Готовые суммы", "custom": "Своя сумма", "invalid": "Введите корректную сумму, не более двух знаков после запятой.", "below": "Минимальная сумма — {{amount}}.", "above": "Максимальная сумма — {{amount}}.", "bounds": "Выберите сумму от {{minimum}} до {{maximum}}.", "credits": "Стоимость кредитов", "adjustment": "Корректировка обработки", "subtotal": "Сумма до налога", "tax-note": "Stripe рассчитает применимый налог при оплате.", "cancel": "Отмена", "continue": "Перейти в Stripe", "pending": "Открываем оплату…", "close": "Закрыть", "above-limit": "Сейчас можно добавить не более {{amount}}." }, "entitlement": { "plan": { "current": "Текущий план" }, "status": { "trial": "Пробный период", "trial-on": "Пробный период до {{date}}", "past-due": "Платёж просрочен", "cancel-scheduled": "Отмена запланирована", "cancel-scheduled-on": "Отменяется {{date}}", "paused": "На паузе", "paused-on": "На паузе с {{date}}", "suspended": "Приостановлен", "free": "Бесплатный план", "renews-on": "Продлевается {{date}}", "active": "Активен", "created": "Ожидает активации", "canceled": "Отменён", "expired": "Истёк", "ended": "Завершён", "blocked": "Заблокирован" }, "limit": { "usage": "{{used}} из {{limit}}", "usage-unit": "{{used}} из {{limit}} {{unit}}", "not-included": "Не входит в план", "exhausted": "Лимит исчерпан", "resets-on": "Обновится {{date}}" }, "promo": { "free-until": "Бесплатно до {{date}}", "grandfathered": "Сохранено для вашего плана", "ended": "Акция завершена" }, "capability": { "included": "Входит в план", "not-included": "Не входит в план" } }, "estimate": { "country": "Страна плательщика", "country-placeholder": "Выберите страну", "tax-type": { "vat": "НДС", "gst": "GST", "sales-tax": "Налог с продаж", "tax": "Налог" }, "rate": "{{type}} ({{percentage}}%)", "total": "Примерная сумма", "converted-note": "Пересчитано по текущему курсу Stripe; точная сумма и возможная комиссия за конвертацию будут подтверждены при оплате.", "status": { "taxed": "Налог уже включён в примерную сумму ниже.", "reverse-charge": "Обратное начисление — при указанном номере НДС вы учитываете налог самостоятельно, поэтому мы ничего не добавляем.", "none": "Для этой страны налог не применяется.", "at-checkout": "Точный налог будет рассчитан при оплате.", "location-required": "Выберите страну плательщика, чтобы увидеть расчёт." }, "loading": "Проверяем налог…", "failed": "Сейчас не удалось проверить налог.", "country-locked": "Страна плательщика установлена при первой покупке, изменить её здесь нельзя." }, "checkout-limit": { "note": "Сейчас можно добавить до {{amount}}.", "blocked": "Сейчас добавить кредиты нельзя.", "resets": "Больше станет доступно {{date}}.", "reason": { "per-purchase": "Разовые пополнения для вашей организации пока ограничены; лимит растёт по мере использования кредитов.", "window": "Недавние пополнения учитываются в лимите за последние несколько дней.", "hold": "Пополнения для вашей организации приостановлены. Обратитесь в поддержку.", "other": "Для вашей организации действует лимит пополнений." } }, "consumer": { "show-in": "Показать на языке: {{language}}", "purchases": "Покупки в периоде отказа", "continue": "Далее", "back": "Назад", "close": "Закрыть", "print": "Распечатать или сохранить", "pending": "Отправка…", "required": "Заполните это поле.", "email-invalid": "Введите корректный адрес электронной почты.", "date-invalid": "Выберите дату не раньше сегодняшней.", "failed": "Не получилось. Попробуйте ещё раз.", "review": "Проверьте данные", "receipt": "Подтверждение получения", "received-at": "Дата получения", "reference": "Номер обращения", "status": "Статус", "not-mailed": "Сохраните эту страницу: письмо с подтверждением ещё не отправлено.", "website": "Веб-сайт" }, "withdrawal": { "none": "Сейчас нет договоров, от которых можно отказаться.", "purchased": "Куплено {{date}}", "paid": "Оплачено {{amount}}", "until": "Отказаться можно до конца дня {{date}} включительно", "estimate": "Ориентировочный возврат: {{amount}}", "estimate-unknown": "Сумма возврата будет рассчитана при обработке отказа.", "refund": "Возврат", "subscription-canceled": "Подписка прекращена.", "kind": { "top-up": "Кредиты", "subscription": "Подписка" }, "status": { "received": "Получено", "processing": "Обрабатывается", "refunded": "Возвращено", "review": "На проверке", "failed": "Возврат задерживается — повторяем попытку", "expired": "Получено после окончания срока отказа" } }, "cancellation": { "effective-at": "Ваш договор заканчивается {{date}}.", "status": { "received": "Получено", "scheduled": "Расторжение запланировано", "already-scheduled": "Расторжение уже запланировано", "review": "Получено — мы рассмотрим его и подтвердим по электронной почте" } } }
|
package/build/i18n/uk.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "amount-checkout": { "title": "Поповнити кредити", "description": "Виберіть чисту вартість кредитів для організації.", "presets": "Готові суми", "custom": "Власна сума", "invalid": "Введіть коректну суму, не більше двох знаків після коми.", "below": "Мінімальна сума — {{amount}}.", "above": "Максимальна сума — {{amount}}.", "bounds": "Виберіть суму від {{minimum}} до {{maximum}}.", "credits": "Вартість кредитів", "adjustment": "Коригування обробки", "subtotal": "Сума до податку", "tax-note": "Stripe розрахує застосовний податок під час оплати.", "cancel": "Скасувати", "continue": "Перейти до Stripe", "pending": "Відкриваємо оплату…", "close": "Закрити" } }
|
|
1
|
+
{ "amount-checkout": { "title": "Поповнити кредити", "description": "Виберіть чисту вартість кредитів для організації.", "presets": "Готові суми", "custom": "Власна сума", "invalid": "Введіть коректну суму, не більше двох знаків після коми.", "below": "Мінімальна сума — {{amount}}.", "above": "Максимальна сума — {{amount}}.", "bounds": "Виберіть суму від {{minimum}} до {{maximum}}.", "credits": "Вартість кредитів", "adjustment": "Коригування обробки", "subtotal": "Сума до податку", "tax-note": "Stripe розрахує застосовний податок під час оплати.", "cancel": "Скасувати", "continue": "Перейти до Stripe", "pending": "Відкриваємо оплату…", "close": "Закрити", "above-limit": "Зараз можна додати не більше ніж {{amount}}." }, "entitlement": { "plan": { "current": "Поточний план" }, "status": { "trial": "Пробний період", "trial-on": "Пробний період до {{date}}", "past-due": "Платіж прострочено", "cancel-scheduled": "Скасування заплановано", "cancel-scheduled-on": "Скасовується {{date}}", "paused": "На паузі", "paused-on": "На паузі з {{date}}", "suspended": "Призупинено", "free": "Безкоштовний план", "renews-on": "Подовжується {{date}}", "active": "Активний", "created": "Очікує активації", "canceled": "Скасовано", "expired": "Термін минув", "ended": "Завершено", "blocked": "Заблоковано" }, "limit": { "usage": "{{used}} з {{limit}}", "usage-unit": "{{used}} з {{limit}} {{unit}}", "not-included": "Не входить до плану", "exhausted": "Ліміт вичерпано", "resets-on": "Оновиться {{date}}" }, "promo": { "free-until": "Безкоштовно до {{date}}", "grandfathered": "Збережено для вашого плану", "ended": "Акцію завершено" }, "capability": { "included": "Входить до плану", "not-included": "Не входить до плану" } }, "estimate": { "country": "Країна платника", "country-placeholder": "Виберіть країну", "tax-type": { "vat": "ПДВ", "gst": "GST", "sales-tax": "Податок з продажів", "tax": "Податок" }, "rate": "{{type}} ({{percentage}}%)", "total": "Орієнтовна сума", "converted-note": "Перераховано за поточним курсом Stripe; точна сума та можлива комісія за конвертацію будуть підтверджені під час оплати.", "status": { "taxed": "Податок уже включено до орієнтовної суми нижче.", "reverse-charge": "Зворотне нарахування — за вказаним номером ПДВ ви обліковуєте цей податок самостійно, тож ми нічого не додаємо.", "none": "Для цієї країни податок не застосовується.", "at-checkout": "Точний податок буде розраховано під час оплати.", "location-required": "Виберіть країну платника, щоб побачити розрахунок." }, "loading": "Перевіряємо податок…", "failed": "Зараз не вдалося перевірити податок.", "country-locked": "Країну платника встановлено під час першої покупки, змінити її тут не можна." }, "checkout-limit": { "note": "Зараз можна додати до {{amount}}.", "blocked": "Зараз додати кредити не можна.", "resets": "Більше стане доступно {{date}}.", "reason": { "per-purchase": "Разові поповнення для вашої організації поки обмежені; ліміт зростає в міру використання кредитів.", "window": "Нещодавні поповнення враховуються в ліміті за останні кілька днів.", "hold": "Поповнення для вашої організації призупинено. Зверніться до підтримки.", "other": "Для вашої організації діє ліміт поповнень." } }, "consumer": { "show-in": "Показати мовою: {{language}}", "purchases": "Покупки в періоді відмови", "continue": "Далі", "back": "Назад", "close": "Закрити", "print": "Надрукувати або зберегти", "pending": "Надсилання…", "required": "Заповніть це поле.", "email-invalid": "Введіть коректну адресу електронної пошти.", "date-invalid": "Виберіть дату, не ранішу за сьогоднішню.", "failed": "Не вдалося. Спробуйте ще раз.", "review": "Перевірте дані", "receipt": "Підтвердження отримання", "received-at": "Дата отримання", "reference": "Номер звернення", "status": "Статус", "not-mailed": "Збережіть цю сторінку: лист із підтвердженням ще не надіслано.", "website": "Вебсайт" }, "withdrawal": { "none": "Зараз немає договорів, від яких можна відмовитися.", "purchased": "Придбано {{date}}", "paid": "Сплачено {{amount}}", "until": "Відмовитися можна до кінця дня {{date}} включно", "estimate": "Орієнтовне повернення: {{amount}}", "estimate-unknown": "Суму повернення буде розраховано під час обробки відмови.", "refund": "Повернення", "subscription-canceled": "Підписку припинено.", "kind": { "top-up": "Кредити", "subscription": "Підписка" }, "status": { "received": "Отримано", "processing": "Обробляється", "refunded": "Повернено", "review": "На перевірці", "failed": "Повернення затримується — повторюємо спробу", "expired": "Отримано після закінчення строку відмови" } }, "cancellation": { "effective-at": "Ваш договір закінчується {{date}}.", "status": { "received": "Отримано", "scheduled": "Розірвання заплановано", "already-scheduled": "Розірвання вже заплановано", "review": "Отримано — ми розглянемо його та підтвердимо електронною поштою" } } }
|
package/build/i18n.d.ts
CHANGED
package/build/i18n.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAUA,8FAA8F;AAC9F,eAAO,MAAM,oBAAoB,gBAAgB,CAAA"}
|
package/build/i18n.js
CHANGED
|
@@ -6,11 +6,15 @@ import be from './i18n/be.json' with { type: 'json' };
|
|
|
6
6
|
import uk from './i18n/uk.json' with { type: 'json' };
|
|
7
7
|
import es from './i18n/es.json' with { type: 'json' };
|
|
8
8
|
import de from './i18n/de.json' with { type: 'json' };
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
addI18nLib('
|
|
13
|
-
addI18nLib('
|
|
14
|
-
addI18nLib('
|
|
15
|
-
addI18nLib('
|
|
9
|
+
import fr from './i18n/fr.json' with { type: 'json' };
|
|
10
|
+
/** The library resource (`lib` namespace) every interface string of this package lives in. */
|
|
11
|
+
export const WEB_PAYMENT_RESOURCE = 'web-payment';
|
|
12
|
+
addI18nLib('en', WEB_PAYMENT_RESOURCE, en);
|
|
13
|
+
addI18nLib('pl', WEB_PAYMENT_RESOURCE, pl);
|
|
14
|
+
addI18nLib('ru', WEB_PAYMENT_RESOURCE, ru);
|
|
15
|
+
addI18nLib('be', WEB_PAYMENT_RESOURCE, be);
|
|
16
|
+
addI18nLib('uk', WEB_PAYMENT_RESOURCE, uk);
|
|
17
|
+
addI18nLib('es', WEB_PAYMENT_RESOURCE, es);
|
|
18
|
+
addI18nLib('de', WEB_PAYMENT_RESOURCE, de);
|
|
19
|
+
addI18nLib('fr', WEB_PAYMENT_RESOURCE, fr);
|
|
16
20
|
//# sourceMappingURL=i18n.js.map
|
package/build/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAErD,UAAU,CAAC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAErD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAA;AAEjD,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAC1C,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAC1C,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAC1C,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAC1C,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAC1C,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAC1C,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAC1C,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAA"}
|
package/build/index.d.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import './i18n.js';
|
|
2
|
+
export { WEB_PAYMENT_RESOURCE } from './i18n.js';
|
|
2
3
|
export type * from './types.js';
|
|
3
4
|
export * from './service.js';
|
|
4
5
|
export * from './hooks.js';
|
|
5
6
|
export * from './amount.js';
|
|
6
7
|
export * from './dialog.js';
|
|
8
|
+
export * from './checkout-limit.js';
|
|
9
|
+
export * from './estimate.js';
|
|
10
|
+
export * from './estimate-summary.js';
|
|
11
|
+
export * from './selectors.js';
|
|
12
|
+
export * from './entitlement.js';
|
|
13
|
+
export * from './plan-card.js';
|
|
14
|
+
export * from './limit-meter.js';
|
|
15
|
+
export * from './capability-list.js';
|
|
7
16
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAA;AAClB,mBAAmB,YAAY,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAA;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,mBAAmB,YAAY,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA"}
|
package/build/index.js
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import './i18n.js';
|
|
2
|
+
export { WEB_PAYMENT_RESOURCE } from './i18n.js';
|
|
2
3
|
export * from './service.js';
|
|
3
4
|
export * from './hooks.js';
|
|
4
5
|
export * from './amount.js';
|
|
5
6
|
export * from './dialog.js';
|
|
7
|
+
export * from './checkout-limit.js';
|
|
8
|
+
export * from './estimate.js';
|
|
9
|
+
export * from './estimate-summary.js';
|
|
10
|
+
export * from './selectors.js';
|
|
11
|
+
export * from './entitlement.js';
|
|
12
|
+
export * from './plan-card.js';
|
|
13
|
+
export * from './limit-meter.js';
|
|
14
|
+
export * from './capability-list.js';
|
|
6
15
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAA;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LimitMeterProps } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* One limit: `used of limit`, a bar, when a window limit resets and any promo behind it. A limit
|
|
4
|
+
* of `0` is "not included" and draws no bar.
|
|
5
|
+
*/
|
|
6
|
+
export declare const LimitMeter: ({ limit, label, showReset, compact, className }: LimitMeterProps) => import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=limit-meter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limit-meter.d.ts","sourceRoot":"","sources":["../src/limit-meter.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAKjD;;;GAGG;AACH,eAAO,MAAM,UAAU,oDAAoE,eAAe,gCAyCzG,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { LimitKind } from '@owlmeans/payment';
|
|
3
|
+
import { Progress } from '@/components/ui/progress';
|
|
4
|
+
import { PromoNote, useEntitlementCopy } from './copy.js';
|
|
5
|
+
import { limitStatusOf } from './selectors.js';
|
|
6
|
+
const classes = (...names) => names.filter(Boolean).join(' ');
|
|
7
|
+
/**
|
|
8
|
+
* One limit: `used of limit`, a bar, when a window limit resets and any promo behind it. A limit
|
|
9
|
+
* of `0` is "not included" and draws no bar.
|
|
10
|
+
*/
|
|
11
|
+
export const LimitMeter = ({ limit, label, showReset = true, compact = false, className }) => {
|
|
12
|
+
const copy = useEntitlementCopy();
|
|
13
|
+
const status = limitStatusOf(limit);
|
|
14
|
+
const included = limit.limit > 0;
|
|
15
|
+
const usage = !included
|
|
16
|
+
? copy.text('limit.not-included')
|
|
17
|
+
: copy.text(limit.unit != null ? 'limit.usage-unit' : 'limit.usage', {
|
|
18
|
+
used: copy.count(limit.used), limit: copy.count(limit.limit), unit: limit.unit ?? '',
|
|
19
|
+
});
|
|
20
|
+
const resets = showReset && limit.kind === LimitKind.Window && limit.resetsAt != null
|
|
21
|
+
? copy.text('limit.resets-on', { date: copy.day(limit.resetsAt) })
|
|
22
|
+
: null;
|
|
23
|
+
const exhausted = included && status.exhausted;
|
|
24
|
+
return _jsxs("div", { "data-limit-meter": "", "data-limit-key": limit.key, "data-limit-kind": limit.kind, "data-included": included ? 'true' : 'false', "data-exhausted": status.exhausted ? 'true' : 'false', className: classes('grid', compact ? 'gap-1 text-xs' : 'gap-2 text-sm', className), children: [_jsxs("div", { className: "flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1", children: [_jsx("span", { className: "font-medium", children: label }), _jsx("span", { "data-limit-usage": "", className: classes('tabular-nums', exhausted ? 'text-destructive' : 'text-muted-foreground'), children: usage })] }), included && _jsx(Progress, { value: Math.round(status.ratio * 100), "aria-label": label, className: classes(compact && 'h-1.5', exhausted && '[&>[data-slot=progress-indicator]]:bg-destructive') }), (exhausted || resets != null || limit.promo != null) && _jsxs("p", { className: classes('text-muted-foreground flex flex-wrap gap-x-3 gap-y-1', compact ? 'text-[0.6875rem]' : 'text-xs'), children: [exhausted && _jsx("span", { "data-limit-exhausted": "", className: "text-destructive", children: copy.text('limit.exhausted') }), resets != null && _jsx("span", { "data-limit-resets": "", children: resets }), _jsx(PromoNote, { promo: limit.promo, copy: copy })] })] });
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=limit-meter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limit-meter.js","sourceRoot":"","sources":["../src/limit-meter.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PlanCardProps } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* One plan: the entity's own (a status line) or an offered one (its price). The package renders no
|
|
4
|
+
* product copy — titles, prices and the action label come from the application.
|
|
5
|
+
*/
|
|
6
|
+
export declare const PlanCard: ({ plan, offer, current, pending, actionLabel, onAction, className, children, }: PlanCardProps) => import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=plan-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-card.d.ts","sourceRoot":"","sources":["../src/plan-card.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,YAAY,CAAA;AAY/D;;;GAGG;AACH,eAAO,MAAM,QAAQ,mFAElB,aAAa,gCA0Cf,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '@/components/ui/button';
|
|
3
|
+
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '@/components/ui/card';
|
|
4
|
+
import { useEntitlementCopy } from './copy.js';
|
|
5
|
+
import { planStatusLineOf } from './selectors.js';
|
|
6
|
+
const TONE_DOT = {
|
|
7
|
+
ok: 'bg-primary',
|
|
8
|
+
warning: 'bg-destructive/60',
|
|
9
|
+
critical: 'bg-destructive',
|
|
10
|
+
inactive: 'bg-muted-foreground',
|
|
11
|
+
};
|
|
12
|
+
const classes = (...names) => names.filter(Boolean).join(' ');
|
|
13
|
+
/**
|
|
14
|
+
* One plan: the entity's own (a status line) or an offered one (its price). The package renders no
|
|
15
|
+
* product copy — titles, prices and the action label come from the application.
|
|
16
|
+
*/
|
|
17
|
+
export const PlanCard = ({ plan, offer, current, pending = false, actionLabel, onAction, className, children, }) => {
|
|
18
|
+
const copy = useEntitlementCopy();
|
|
19
|
+
const sku = offer?.sku ?? plan.sku;
|
|
20
|
+
const isCurrent = current ?? (offer != null && offer.sku === plan.sku);
|
|
21
|
+
const status = offer == null || isCurrent ? planStatusLineOf(plan) : null;
|
|
22
|
+
const statusText = status == null
|
|
23
|
+
? null
|
|
24
|
+
: copy.text(status.date != null ? `status.${status.kind}-on` : `status.${status.kind}`, {
|
|
25
|
+
date: copy.day(status.date),
|
|
26
|
+
});
|
|
27
|
+
return _jsxs(Card, { "data-plan-card": "", "data-plan-sku": sku, "data-plan-status": status?.kind, "data-plan-tone": status?.tone, "data-current": isCurrent ? 'true' : undefined, className: classes(offer?.highlight === true && 'border-primary ring-1 ring-primary', className), children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsx(CardTitle, { children: offer?.title ?? plan.title }), isCurrent && _jsx("span", { "data-plan-current": "", className: "bg-muted text-muted-foreground rounded-full px-2 py-0.5 text-xs font-medium", children: copy.text('plan.current') })] }), status != null && _jsxs(CardDescription, { "data-plan-status-line": "", className: "flex items-center gap-2", children: [_jsx("span", { "aria-hidden": "true", className: classes('size-2 shrink-0 rounded-full', TONE_DOT[status.tone]) }), _jsx("span", { children: statusText })] })] }), (offer != null || children != null) && _jsxs(CardContent, { className: "grid gap-4", children: [offer != null && _jsx("p", { "data-plan-price": "", className: "text-2xl font-semibold tracking-tight", children: offer.priceLabel }), children] }), onAction != null && actionLabel != null && _jsx(CardFooter, { children: _jsx(Button, { type: "button", className: "w-full", variant: isCurrent ? 'outline' : 'default', disabled: pending, onClick: () => void onAction(sku), children: actionLabel }) })] });
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=plan-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-card.js","sourceRoot":"","sources":["../src/plan-card.tsx"],"names":[],"mappings":"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"}
|
package/build/poll.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load a value now and every `intervalMs`, keeping the last good answer — `null` until the first
|
|
3
|
+
* load succeeds. A failed load is swallowed: explicit actions own their errors, a poller does not.
|
|
4
|
+
* The latest `load` is always the one called, so a caller may pass a fresh closure every render.
|
|
5
|
+
*/
|
|
6
|
+
export declare const usePolled: <T>(load: () => Promise<T>, intervalMs: number, deps: unknown[]) => T | null;
|
|
7
|
+
//# sourceMappingURL=poll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,QAAQ,MAAM,OAAO,CAAC,CAAC,CAAC,cAAc,MAAM,QAAQ,OAAO,EAAE,KAAG,CAAC,GAAG,IAmB9F,CAAA"}
|
package/build/poll.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Load a value now and every `intervalMs`, keeping the last good answer — `null` until the first
|
|
4
|
+
* load succeeds. A failed load is swallowed: explicit actions own their errors, a poller does not.
|
|
5
|
+
* The latest `load` is always the one called, so a caller may pass a fresh closure every render.
|
|
6
|
+
*/
|
|
7
|
+
export const usePolled = (load, intervalMs, deps) => {
|
|
8
|
+
const [value, setValue] = useState(null);
|
|
9
|
+
const loadRef = useRef(load);
|
|
10
|
+
loadRef.current = load;
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
let active = true;
|
|
13
|
+
const tick = async () => {
|
|
14
|
+
try {
|
|
15
|
+
const next = await loadRef.current();
|
|
16
|
+
if (active)
|
|
17
|
+
setValue(next);
|
|
18
|
+
}
|
|
19
|
+
catch { /* explicit actions own their errors */ }
|
|
20
|
+
};
|
|
21
|
+
void tick();
|
|
22
|
+
const ticker = setInterval(tick, intervalMs);
|
|
23
|
+
return () => { active = false; clearInterval(ticker); };
|
|
24
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
25
|
+
}, [intervalMs, ...deps]);
|
|
26
|
+
return value;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=poll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEnD;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,IAAsB,EAAE,UAAkB,EAAE,IAAe,EAAY,EAAE;IACpG,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAW,IAAI,CAAC,CAAA;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;IACtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,GAAG,IAAI,CAAA;QACjB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;gBACpC,IAAI,MAAM;oBAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC5B,CAAC;YAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;QACrD,CAAC,CAAA;QACD,KAAK,IAAI,EAAE,CAAA;QACX,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAC5C,OAAO,GAAG,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA,CAAC,CAAC,CAAA;QACtD,uDAAuD;IACzD,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAEzB,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { EntitlementPlanView, EntitlementView, LimitView, PromoView } from '@owlmeans/payment';
|
|
2
|
+
import type { LimitStatus, PlanStatusLine, PromoInscription } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Whether a view grants a capability parameter — `null` while the view is not known, so a caller
|
|
5
|
+
* renders the paid control disabled instead of enabled-then-refused.
|
|
6
|
+
*/
|
|
7
|
+
export declare const capabilityStateOf: (view: EntitlementView | null | undefined, param: string) => boolean | null;
|
|
8
|
+
/** A limit row with `exhausted` and a clamped `ratio`; `null` for no row. */
|
|
9
|
+
export declare const limitStatusOf: (limit: LimitView | null | undefined) => LimitStatus | null;
|
|
10
|
+
/**
|
|
11
|
+
* The one status line a plan view earns — first match wins: inactive and blocked statuses, paused
|
|
12
|
+
* (a pause date), suspended, trial, past due, cancellation scheduled, free, renews (a period end),
|
|
13
|
+
* active.
|
|
14
|
+
*/
|
|
15
|
+
export declare const planStatusLineOf: (plan: EntitlementPlanView) => PlanStatusLine;
|
|
16
|
+
/** How to inscribe a promo; `null` when the grant has none. */
|
|
17
|
+
export declare const promoInscriptionOf: (promo: PromoView | null | undefined) => PromoInscription | null;
|
|
18
|
+
//# sourceMappingURL=selectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACnG,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAsB,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEnG;;;GAGG;AACH,eAAO,MAAM,iBAAiB,SACtB,eAAe,GAAG,IAAI,GAAG,SAAS,SAAS,MAAM,KACtD,OAAO,GAAG,IAAuD,CAAA;AAEpE,6EAA6E;AAC7E,eAAO,MAAM,aAAa,UAAW,SAAS,GAAG,IAAI,GAAG,SAAS,KAAG,WAAW,GAAG,IAQjF,CAAA;AAqBD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,SAAU,mBAAmB,KAAG,cAiC5D,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,UAAW,SAAS,GAAG,IAAI,GAAG,SAAS,KAAG,gBAAgB,GAAG,IAS3F,CAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { SubscriptionStatus, capabilityOf, hasLimitRoom } from '@owlmeans/payment';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a view grants a capability parameter — `null` while the view is not known, so a caller
|
|
4
|
+
* renders the paid control disabled instead of enabled-then-refused.
|
|
5
|
+
*/
|
|
6
|
+
export const capabilityStateOf = (view, param) => view == null ? null : capabilityOf(view, param);
|
|
7
|
+
/** A limit row with `exhausted` and a clamped `ratio`; `null` for no row. */
|
|
8
|
+
export const limitStatusOf = (limit) => {
|
|
9
|
+
if (limit == null) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
const used = Number.isFinite(limit.used) ? Math.max(0, limit.used) : 0;
|
|
13
|
+
const ratio = limit.limit > 0 ? Math.min(1, used / limit.limit) : used > 0 ? 1 : 0;
|
|
14
|
+
return { ...limit, exhausted: !hasLimitRoom(limit), ratio };
|
|
15
|
+
};
|
|
16
|
+
const INACTIVE = {
|
|
17
|
+
[SubscriptionStatus.Created]: 'created',
|
|
18
|
+
[SubscriptionStatus.Canceled]: 'canceled',
|
|
19
|
+
[SubscriptionStatus.Expired]: 'expired',
|
|
20
|
+
[SubscriptionStatus.Ended]: 'ended',
|
|
21
|
+
};
|
|
22
|
+
const dateOf = (value) => {
|
|
23
|
+
if (value == null) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
27
|
+
return Number.isNaN(date.getTime()) ? undefined : date;
|
|
28
|
+
};
|
|
29
|
+
const line = (kind, tone, date) => date == null ? { kind, tone } : { kind, tone, date };
|
|
30
|
+
/**
|
|
31
|
+
* The one status line a plan view earns — first match wins: inactive and blocked statuses, paused
|
|
32
|
+
* (a pause date), suspended, trial, past due, cancellation scheduled, free, renews (a period end),
|
|
33
|
+
* active.
|
|
34
|
+
*/
|
|
35
|
+
export const planStatusLineOf = (plan) => {
|
|
36
|
+
const inactive = INACTIVE[plan.status];
|
|
37
|
+
if (inactive != null) {
|
|
38
|
+
return line(inactive, 'inactive');
|
|
39
|
+
}
|
|
40
|
+
if (plan.status === SubscriptionStatus.Blocked) {
|
|
41
|
+
return line('blocked', 'critical');
|
|
42
|
+
}
|
|
43
|
+
const pausedAt = dateOf(plan.pausedAt);
|
|
44
|
+
if (pausedAt != null) {
|
|
45
|
+
return line('paused', 'warning', pausedAt);
|
|
46
|
+
}
|
|
47
|
+
if (plan.status === SubscriptionStatus.Suspended) {
|
|
48
|
+
return line('suspended', 'critical');
|
|
49
|
+
}
|
|
50
|
+
if (plan.status === SubscriptionStatus.Trial) {
|
|
51
|
+
return line('trial', 'ok', dateOf(plan.trialEnd));
|
|
52
|
+
}
|
|
53
|
+
if (plan.pastDue === true || plan.status === SubscriptionStatus.PastDue) {
|
|
54
|
+
return line('past-due', 'warning');
|
|
55
|
+
}
|
|
56
|
+
const periodEnd = dateOf(plan.periodEnd);
|
|
57
|
+
if (plan.cancelAtPeriodEnd === true) {
|
|
58
|
+
return line('cancel-scheduled', 'warning', periodEnd);
|
|
59
|
+
}
|
|
60
|
+
if (plan.free) {
|
|
61
|
+
return line('free', 'ok');
|
|
62
|
+
}
|
|
63
|
+
if (periodEnd != null) {
|
|
64
|
+
return line('renews', 'ok', periodEnd);
|
|
65
|
+
}
|
|
66
|
+
return line('active', 'ok');
|
|
67
|
+
};
|
|
68
|
+
/** How to inscribe a promo; `null` when the grant has none. */
|
|
69
|
+
export const promoInscriptionOf = (promo) => {
|
|
70
|
+
if (promo == null) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
if (!promo.active) {
|
|
74
|
+
return 'ended';
|
|
75
|
+
}
|
|
76
|
+
return promo.grandfathered ? 'grandfathered' : 'free-until';
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.js","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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"}
|