@xapps-platform/marketplace-ui 0.1.15 → 0.1.16
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 +4 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/index.css +202 -3
- package/dist/index.css.map +2 -2
- package/dist/index.js +824 -226
- package/dist/index.js.map +3 -3
- package/dist/marketplace.css +241 -3
- package/dist/pages/MonetizationPage.d.ts.map +1 -1
- package/dist/pages/MonetizationPage.test.d.ts +2 -0
- package/dist/pages/MonetizationPage.test.d.ts.map +1 -0
- package/dist/pages/XappDetailPage.d.ts.map +1 -1
- package/dist/types.d.ts +134 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -118,7 +118,7 @@ function buildMarketplaceXmsCatalog(locale) {
|
|
|
118
118
|
"xapp.current_plan_active": "Plan activ",
|
|
119
119
|
"xapp.checkout_starting": "Se porne\u0219te checkout-ul...",
|
|
120
120
|
"xapp.additive_unlock_action": "Cump\u0103r\u0103 suplimentul",
|
|
121
|
-
"xapp.checkout_action": "
|
|
121
|
+
"xapp.checkout_action": "\xCEncepe checkout-ul",
|
|
122
122
|
"xapp.subscription_status_label": "Stare abonament",
|
|
123
123
|
"xapp.subscription_coverage_label": "Acoperire",
|
|
124
124
|
"xapp.subscription_reason_label": "Motiv stare",
|
|
@@ -126,7 +126,9 @@ function buildMarketplaceXmsCatalog(locale) {
|
|
|
126
126
|
"xapp.subscription_expiry_boundary_label": "Limit\u0103 expirare",
|
|
127
127
|
"xapp.current_period_ends_label": "Perioada curent\u0103 se \xEEncheie la",
|
|
128
128
|
"xapp.cancelled_at_label": "Anulat la",
|
|
129
|
-
"xapp.
|
|
129
|
+
"xapp.virtual_currency_label": "Moned\u0103 virtual\u0103",
|
|
130
|
+
"xapp.current_balances_label": "Solduri acum",
|
|
131
|
+
"xapp.credits_remaining_label": "Sold",
|
|
130
132
|
"xapp.add_on_unlocks_label": "Unlock-uri suplimentare",
|
|
131
133
|
"xapp.subscription_refresh_action": "Actualizeaz\u0103 starea",
|
|
132
134
|
"xapp.subscription_refreshing": "Se actualizeaz\u0103...",
|
|
@@ -148,7 +150,18 @@ function buildMarketplaceXmsCatalog(locale) {
|
|
|
148
150
|
"xapp.subscription_management_hint_owner": "Administrarea avansat\u0103 a abonamentului este gestionat\u0103 de proprietarul aplica\u021Biei.",
|
|
149
151
|
"xapp.subscription_management_open_action": "Deschide administrarea",
|
|
150
152
|
"xapp.lifecycle_preview_at_label": "Previzualizare la",
|
|
151
|
-
"xapp.lifecycle_preview_hint": "
|
|
153
|
+
"xapp.lifecycle_preview_hint": "Starea abonamentului este previzualizat\u0103 pentru momentul selectat.",
|
|
154
|
+
"xapp.history_route_subtitle": "Solduri, activitate recent\u0103 \u0219i cump\u0103r\u0103ri pentru {title}.",
|
|
155
|
+
"xapp.history_route_subtitle_default": "Solduri, activitate recent\u0103 \u0219i cump\u0103r\u0103ri pentru aceast\u0103 aplica\u021Bie.",
|
|
156
|
+
"xapp.plans_route_subtitle": "Acces, planuri \u0219i solduri pentru {title}.",
|
|
157
|
+
"xapp.plans_route_subtitle_default": "Acces, planuri \u0219i solduri pentru aceast\u0103 aplica\u021Bie.",
|
|
158
|
+
"xapp.plans_loading_title": "Se \xEEncarc\u0103 planurile",
|
|
159
|
+
"xapp.plans_loading_desc": "Se preg\u0103tesc planurile publicate, soldurile \u0219i accesul curent pentru aceast\u0103 aplica\u021Bie.",
|
|
160
|
+
"xapp.no_plans_available": "Momentan nu exist\u0103 planuri disponibile.",
|
|
161
|
+
"xapp.no_plans_available_desc": "Planurile publicate vor ap\u0103rea aici atunci c\xE2nd aceast\u0103 aplica\u021Bie expune un paywall.",
|
|
162
|
+
"xapp.checkout_hint": "Checkout-ul se deschide \xEEntr-o pagin\u0103 securizat\u0103 de plat\u0103 administrat\u0103 de platform\u0103.",
|
|
163
|
+
"xapp.current_plan_note": "Acest plan este deja activ pentru aceast\u0103 aplica\u021Bie.",
|
|
164
|
+
"xapp.owned_unlock_note": "Acest supliment este deja inclus \xEEn accesul curent."
|
|
152
165
|
};
|
|
153
166
|
}
|
|
154
167
|
return {
|
|
@@ -161,15 +174,17 @@ function buildMarketplaceXmsCatalog(locale) {
|
|
|
161
174
|
"xapp.current_plan_active": "Current plan active",
|
|
162
175
|
"xapp.checkout_starting": "Starting checkout...",
|
|
163
176
|
"xapp.additive_unlock_action": "Purchase add-on unlock",
|
|
164
|
-
"xapp.checkout_action": "
|
|
165
|
-
"xapp.subscription_status_label": "Subscription
|
|
177
|
+
"xapp.checkout_action": "Start checkout",
|
|
178
|
+
"xapp.subscription_status_label": "Subscription state",
|
|
166
179
|
"xapp.subscription_coverage_label": "Coverage",
|
|
167
180
|
"xapp.subscription_reason_label": "Status reason",
|
|
168
181
|
"xapp.subscription_overdue_since_label": "Overdue since",
|
|
169
182
|
"xapp.subscription_expiry_boundary_label": "Expiry boundary",
|
|
170
183
|
"xapp.current_period_ends_label": "Current period ends",
|
|
171
184
|
"xapp.cancelled_at_label": "Cancelled at",
|
|
172
|
-
"xapp.
|
|
185
|
+
"xapp.virtual_currency_label": "Currency",
|
|
186
|
+
"xapp.current_balances_label": "Balances now",
|
|
187
|
+
"xapp.credits_remaining_label": "Balance",
|
|
173
188
|
"xapp.add_on_unlocks_label": "Add-on unlocks",
|
|
174
189
|
"xapp.subscription_refresh_action": "Refresh status",
|
|
175
190
|
"xapp.subscription_refreshing": "Refreshing...",
|
|
@@ -191,7 +206,18 @@ function buildMarketplaceXmsCatalog(locale) {
|
|
|
191
206
|
"xapp.subscription_management_hint_owner": "Advanced subscription management is handled by the app owner.",
|
|
192
207
|
"xapp.subscription_management_open_action": "Open management",
|
|
193
208
|
"xapp.lifecycle_preview_at_label": "Preview as of",
|
|
194
|
-
"xapp.lifecycle_preview_hint": "Subscription
|
|
209
|
+
"xapp.lifecycle_preview_hint": "Subscription state is being previewed for the selected time.",
|
|
210
|
+
"xapp.history_route_subtitle": "Balances, recent activity, and purchases for {title}.",
|
|
211
|
+
"xapp.history_route_subtitle_default": "Balances, recent activity, and purchases for this app.",
|
|
212
|
+
"xapp.plans_route_subtitle": "Access, plans, and balances for {title}.",
|
|
213
|
+
"xapp.plans_route_subtitle_default": "Access, plans, and balances for this app.",
|
|
214
|
+
"xapp.plans_loading_title": "Loading plans",
|
|
215
|
+
"xapp.plans_loading_desc": "Preparing published plans, balances, and current access for this app.",
|
|
216
|
+
"xapp.no_plans_available": "No plans are currently available.",
|
|
217
|
+
"xapp.no_plans_available_desc": "Published plans will appear here when this app exposes a paywall.",
|
|
218
|
+
"xapp.checkout_hint": "Checkout opens in a secure hosted payment page managed by the platform.",
|
|
219
|
+
"xapp.current_plan_note": "This plan is already active for this app.",
|
|
220
|
+
"xapp.owned_unlock_note": "This add-on is already included in the current access."
|
|
195
221
|
};
|
|
196
222
|
}
|
|
197
223
|
var MARKETPLACE_CATALOGS = {
|
|
@@ -280,7 +306,7 @@ var MARKETPLACE_CATALOGS = {
|
|
|
280
306
|
"activity.invoices_title": "Invoices",
|
|
281
307
|
"activity.notifications_title": "Notifications",
|
|
282
308
|
"activity.unavailable_requests_title": "Requests are unavailable",
|
|
283
|
-
"activity.unavailable_monetization_title": "
|
|
309
|
+
"activity.unavailable_monetization_title": "Plans and balances are unavailable in this host.",
|
|
284
310
|
"activity.unavailable_requests_desc": "This public catalog does not support viewing personal requests.",
|
|
285
311
|
"activity.unavailable_payments_title": "Payments are unavailable in this host.",
|
|
286
312
|
"activity.unavailable_invoices_title": "Invoices are unavailable in this host.",
|
|
@@ -289,8 +315,8 @@ var MARKETPLACE_CATALOGS = {
|
|
|
289
315
|
"activity.subject_required_desc": "This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.",
|
|
290
316
|
"activity.showing_requests_for": "Showing requests for {title}",
|
|
291
317
|
"activity.showing_requests_for_prefix": "Showing requests for",
|
|
292
|
-
"activity.showing_monetization_for": "Showing
|
|
293
|
-
"activity.showing_monetization_for_prefix": "Showing
|
|
318
|
+
"activity.showing_monetization_for": "Showing plans and balances for {title}",
|
|
319
|
+
"activity.showing_monetization_for_prefix": "Showing plans and balances for",
|
|
294
320
|
"activity.showing_payments_for": "Showing payment activity for {title}",
|
|
295
321
|
"activity.showing_payments_for_prefix": "Showing payment activity for",
|
|
296
322
|
"activity.showing_invoices_for": "Showing invoice records for {title}",
|
|
@@ -306,11 +332,11 @@ var MARKETPLACE_CATALOGS = {
|
|
|
306
332
|
"activity.mark_read": "Mark read",
|
|
307
333
|
"activity.unread_count": "{count} unread item{suffix}",
|
|
308
334
|
"activity.loading_requests": "Loading requests...",
|
|
309
|
-
"activity.loading_monetization": "Loading
|
|
335
|
+
"activity.loading_monetization": "Loading plans, balances, and recent activity...",
|
|
310
336
|
"activity.no_requests": "No requests yet.",
|
|
311
|
-
"activity.no_monetization": "No
|
|
312
|
-
"activity.no_monetization_current": "No current
|
|
313
|
-
"activity.no_monetization_history": "No
|
|
337
|
+
"activity.no_monetization": "No monetized apps are currently installed for this subject.",
|
|
338
|
+
"activity.no_monetization_current": "No current plans or balances were found for this subject.",
|
|
339
|
+
"activity.no_monetization_history": "No plan or balance history was found for this subject.",
|
|
314
340
|
"activity.loading_payments": "Loading payments...",
|
|
315
341
|
"activity.no_payments": "No payment activity found.",
|
|
316
342
|
"activity.loading_payment_detail": "Loading payment details...",
|
|
@@ -325,21 +351,30 @@ var MARKETPLACE_CATALOGS = {
|
|
|
325
351
|
"activity.loading_notifications": "Loading notifications...",
|
|
326
352
|
"activity.no_notifications": "No notification activity found.",
|
|
327
353
|
"activity.loading_notification_detail": "Loading notification details...",
|
|
328
|
-
"activity.monetization_overview_hint": "Review current
|
|
329
|
-
"activity.monetization_overview_hint_with_past": "Review current and past
|
|
330
|
-
"activity.
|
|
331
|
-
"activity.
|
|
332
|
-
"activity.
|
|
333
|
-
"activity.
|
|
334
|
-
"activity.
|
|
335
|
-
"activity.
|
|
336
|
-
"activity.
|
|
337
|
-
"activity.
|
|
354
|
+
"activity.monetization_overview_hint": "Review current plans, subscriptions, and balances across this subject's apps.",
|
|
355
|
+
"activity.monetization_overview_hint_with_past": "Review current and past plans, subscriptions, and balances across this subject's apps.",
|
|
356
|
+
"activity.monetization_summary_title": "Plans and balances",
|
|
357
|
+
"activity.monetization_summary_subtitle": "Review active plans, subscriptions, and balances before opening app details or history.",
|
|
358
|
+
"activity.monetization_summary_apps": "Apps",
|
|
359
|
+
"activity.monetization_summary_subscriptions": "Subscriptions",
|
|
360
|
+
"activity.monetization_summary_balances": "Balances",
|
|
361
|
+
"activity.monetization_summary_currencies": "Named currencies",
|
|
362
|
+
"activity.monetization_card_subtitle": "Current plans, balances, and subscription state for this app.",
|
|
363
|
+
"activity.monetization_focus_xapp": "Only this app",
|
|
364
|
+
"activity.monetization_show_past": "Include past apps",
|
|
365
|
+
"activity.monetization_show_current_only": "Only current apps",
|
|
366
|
+
"activity.monetization_open_plans": "View plans",
|
|
367
|
+
"activity.monetization_open_history": "View history",
|
|
368
|
+
"activity.monetization_access_label": "Access",
|
|
369
|
+
"activity.monetization_plan_label": "Plan",
|
|
370
|
+
"activity.monetization_credits_label": "Balance",
|
|
338
371
|
"activity.monetization_subscription_label": "Subscription",
|
|
339
|
-
"activity.monetization_coverage_label": "
|
|
372
|
+
"activity.monetization_coverage_label": "Renewal state",
|
|
340
373
|
"activity.monetization_renews_at": "Renews at",
|
|
341
|
-
"activity.monetization_balance_state": "Balance
|
|
342
|
-
"activity.
|
|
374
|
+
"activity.monetization_balance_state": "Balance status",
|
|
375
|
+
"activity.monetization_balances_label": "Balances",
|
|
376
|
+
"activity.monetization_source_label": "Origin",
|
|
377
|
+
"activity.monetization_no_currency": "No named currency",
|
|
343
378
|
"activity.monetization_unknown": "Unknown",
|
|
344
379
|
"activity.monetization_none": "None",
|
|
345
380
|
"activity.monetization_no_source": "No source",
|
|
@@ -415,7 +450,9 @@ var MARKETPLACE_CATALOGS = {
|
|
|
415
450
|
"xapp.update_available": "Update available",
|
|
416
451
|
"xapp.about_title": "About",
|
|
417
452
|
"xapp.available_views_title": "Available Views",
|
|
453
|
+
"xapp.open_to_access_views": "Open this app to start and install it automatically for your workspace.",
|
|
418
454
|
"xapp.add_to_access_views": "Add this app to your workspace to access its available views.",
|
|
455
|
+
"xapp.update_to_access_views_auto": "Open a view to update the app automatically for your workspace.",
|
|
419
456
|
"xapp.update_to_access_views": "An update is available. Please update the app to access its available views.",
|
|
420
457
|
"xapp.load_as_user_to_access": "Load the catalog as a user to access this app.",
|
|
421
458
|
"xapp.no_views_available": "No app views are currently available.",
|
|
@@ -439,10 +476,10 @@ var MARKETPLACE_CATALOGS = {
|
|
|
439
476
|
"xapp.screenshots_title": "Screenshots",
|
|
440
477
|
"xapp.screenshot_alt": "Screenshot {index}",
|
|
441
478
|
"xapp.usage_credits_title": "Usage Credits",
|
|
442
|
-
"xapp.current_access_title": "Current
|
|
479
|
+
"xapp.current_access_title": "Current access",
|
|
443
480
|
"xapp.access_state_label": "Access state",
|
|
444
481
|
"xapp.access_state_available": "available",
|
|
445
|
-
"xapp.subscription_status_label": "Subscription
|
|
482
|
+
"xapp.subscription_status_label": "Subscription state",
|
|
446
483
|
"xapp.subscription_coverage_label": "Coverage",
|
|
447
484
|
"xapp.subscription_reason_label": "Status reason",
|
|
448
485
|
"xapp.subscription_overdue_since_label": "Overdue since",
|
|
@@ -465,8 +502,10 @@ var MARKETPLACE_CATALOGS = {
|
|
|
465
502
|
"xapp.subscription_cancel_description": "The subscription will stop renewing. Current access remains available until the current period ends.",
|
|
466
503
|
"xapp.subscription_cancel_failed": "Unable to cancel this subscription.",
|
|
467
504
|
"xapp.lifecycle_preview_at_label": "Preview as of",
|
|
468
|
-
"xapp.lifecycle_preview_hint": "Subscription
|
|
469
|
-
"xapp.
|
|
505
|
+
"xapp.lifecycle_preview_hint": "Subscription state is being previewed for the selected time.",
|
|
506
|
+
"xapp.virtual_currency_label": "Currency",
|
|
507
|
+
"xapp.current_balances_label": "Balances now",
|
|
508
|
+
"xapp.credits_remaining_label": "Balance",
|
|
470
509
|
"xapp.available_label": "Available",
|
|
471
510
|
"xapp.ready_to_use": "{count} ready to use",
|
|
472
511
|
"xapp.source_label": "Source",
|
|
@@ -608,8 +647,8 @@ var MARKETPLACE_CATALOGS = {
|
|
|
608
647
|
"activity.subject_required_desc": "Aceast\u0103 sesiune de host nu este asociat\u0103 cu un utilizator. Cere hostului s\u0103 creeze o sesiune de catalog cu un subjectId.",
|
|
609
648
|
"activity.showing_requests_for": "Se afi\u0219eaz\u0103 cererile pentru {title}",
|
|
610
649
|
"activity.showing_requests_for_prefix": "Se afi\u0219eaz\u0103 cererile pentru",
|
|
611
|
-
"activity.showing_monetization_for": "Se afi\u0219eaz\u0103
|
|
612
|
-
"activity.showing_monetization_for_prefix": "Se afi\u0219eaz\u0103
|
|
650
|
+
"activity.showing_monetization_for": "Se afi\u0219eaz\u0103 planurile \u0219i soldurile pentru {title}",
|
|
651
|
+
"activity.showing_monetization_for_prefix": "Se afi\u0219eaz\u0103 planurile \u0219i soldurile pentru",
|
|
613
652
|
"activity.showing_payments_for": "Se afi\u0219eaz\u0103 activitatea pl\u0103\u021Bilor pentru {title}",
|
|
614
653
|
"activity.showing_payments_for_prefix": "Se afi\u0219eaz\u0103 activitatea pl\u0103\u021Bilor pentru",
|
|
615
654
|
"activity.showing_invoices_for": "Se afi\u0219eaz\u0103 facturile pentru {title}",
|
|
@@ -625,11 +664,11 @@ var MARKETPLACE_CATALOGS = {
|
|
|
625
664
|
"activity.mark_read": "Marcheaz\u0103 ca citit",
|
|
626
665
|
"activity.unread_count": "{count} notific{suffix} necitit{suffix2}",
|
|
627
666
|
"activity.loading_requests": "Se \xEEncarc\u0103 cererile...",
|
|
628
|
-
"activity.loading_monetization": "Se \xEEncarc\u0103
|
|
667
|
+
"activity.loading_monetization": "Se \xEEncarc\u0103 planurile, soldurile \u0219i activitatea recent\u0103...",
|
|
629
668
|
"activity.no_requests": "Nu exist\u0103 \xEEnc\u0103 cereri.",
|
|
630
|
-
"activity.no_monetization": "Nu exist\u0103 \xEEnc\u0103 aplica\u021Bii
|
|
631
|
-
"activity.no_monetization_current": "Nu
|
|
632
|
-
"activity.no_monetization_history": "Nu a fost g\u0103sit niciun istoric de
|
|
669
|
+
"activity.no_monetization": "Nu exist\u0103 \xEEnc\u0103 aplica\u021Bii monetizate instalate pentru acest subiect.",
|
|
670
|
+
"activity.no_monetization_current": "Nu au fost g\u0103site planuri sau solduri curente pentru acest subiect.",
|
|
671
|
+
"activity.no_monetization_history": "Nu a fost g\u0103sit niciun istoric de planuri sau solduri pentru acest subiect.",
|
|
633
672
|
"activity.loading_payments": "Se \xEEncarc\u0103 pl\u0103\u021Bile...",
|
|
634
673
|
"activity.no_payments": "Nu a fost g\u0103sit\u0103 activitate de plat\u0103.",
|
|
635
674
|
"activity.loading_payment_detail": "Se \xEEncarc\u0103 detaliile pl\u0103\u021Bii...",
|
|
@@ -644,21 +683,30 @@ var MARKETPLACE_CATALOGS = {
|
|
|
644
683
|
"activity.loading_notifications": "Se \xEEncarc\u0103 notific\u0103rile...",
|
|
645
684
|
"activity.no_notifications": "Nu a fost g\u0103sit\u0103 activitate de notificare.",
|
|
646
685
|
"activity.loading_notification_detail": "Se \xEEncarc\u0103 detaliile notific\u0103rii...",
|
|
647
|
-
"activity.monetization_overview_hint": "Revizuie\u0219te
|
|
648
|
-
"activity.monetization_overview_hint_with_past": "Revizuie\u0219te
|
|
649
|
-
"activity.
|
|
650
|
-
"activity.
|
|
651
|
-
"activity.
|
|
652
|
-
"activity.
|
|
653
|
-
"activity.
|
|
654
|
-
"activity.
|
|
655
|
-
"activity.
|
|
656
|
-
"activity.
|
|
686
|
+
"activity.monetization_overview_hint": "Revizuie\u0219te planurile, abonamentele \u0219i soldurile curente pentru aplica\u021Biile legate de acest subiect.",
|
|
687
|
+
"activity.monetization_overview_hint_with_past": "Revizuie\u0219te planurile, abonamentele \u0219i soldurile curente \u0219i trecute pentru aplica\u021Biile acestui subiect.",
|
|
688
|
+
"activity.monetization_summary_title": "Planuri \u0219i solduri",
|
|
689
|
+
"activity.monetization_summary_subtitle": "Revizuie\u0219te planurile active, abonamentele \u0219i soldurile \xEEnainte s\u0103 deschizi detaliile aplica\u021Biei sau istoricul.",
|
|
690
|
+
"activity.monetization_summary_apps": "Aplica\u021Bii",
|
|
691
|
+
"activity.monetization_summary_subscriptions": "Abonamente",
|
|
692
|
+
"activity.monetization_summary_balances": "Solduri",
|
|
693
|
+
"activity.monetization_summary_currencies": "Monede nominale",
|
|
694
|
+
"activity.monetization_card_subtitle": "Planurile curente, soldurile \u0219i starea abonamentului pentru aceast\u0103 aplica\u021Bie.",
|
|
695
|
+
"activity.monetization_focus_xapp": "Doar aceast\u0103 aplica\u021Bie",
|
|
696
|
+
"activity.monetization_show_past": "Include aplica\u021Biile anterioare",
|
|
697
|
+
"activity.monetization_show_current_only": "Doar aplica\u021Biile curente",
|
|
698
|
+
"activity.monetization_open_plans": "Vezi planurile",
|
|
699
|
+
"activity.monetization_open_history": "Vezi istoricul",
|
|
700
|
+
"activity.monetization_access_label": "Acces",
|
|
701
|
+
"activity.monetization_plan_label": "Plan",
|
|
702
|
+
"activity.monetization_credits_label": "Sold",
|
|
657
703
|
"activity.monetization_subscription_label": "Abonament",
|
|
658
|
-
"activity.monetization_coverage_label": "
|
|
704
|
+
"activity.monetization_coverage_label": "Stare re\xEEnnoire",
|
|
659
705
|
"activity.monetization_renews_at": "Se re\xEEnnoie\u0219te la",
|
|
660
|
-
"activity.monetization_balance_state": "
|
|
661
|
-
"activity.
|
|
706
|
+
"activity.monetization_balance_state": "Status sold",
|
|
707
|
+
"activity.monetization_balances_label": "Solduri",
|
|
708
|
+
"activity.monetization_source_label": "Origine",
|
|
709
|
+
"activity.monetization_no_currency": "F\u0103r\u0103 moned\u0103 nominal\u0103",
|
|
662
710
|
"activity.monetization_unknown": "Necunoscut",
|
|
663
711
|
"activity.monetization_none": "Niciunul",
|
|
664
712
|
"activity.monetization_no_source": "F\u0103r\u0103 surs\u0103",
|
|
@@ -734,7 +782,9 @@ var MARKETPLACE_CATALOGS = {
|
|
|
734
782
|
"xapp.update_available": "Actualizare disponibil\u0103",
|
|
735
783
|
"xapp.about_title": "Despre",
|
|
736
784
|
"xapp.available_views_title": "Vizualiz\u0103ri disponibile",
|
|
785
|
+
"xapp.open_to_access_views": "Deschide aceast\u0103 aplica\u021Bie pentru a o porni \u0219i instala automat \xEEn spa\u021Biul t\u0103u de lucru.",
|
|
737
786
|
"xapp.add_to_access_views": "Adaug\u0103 aceast\u0103 aplica\u021Bie \xEEn spa\u021Biul t\u0103u de lucru pentru a-i accesa vizualiz\u0103rile disponibile.",
|
|
787
|
+
"xapp.update_to_access_views_auto": "Deschide o vizualizare pentru a actualiza automat aplica\u021Bia \xEEn spa\u021Biul t\u0103u de lucru.",
|
|
738
788
|
"xapp.update_to_access_views": "Este disponibil\u0103 o actualizare. Actualizeaz\u0103 aplica\u021Bia pentru a-i accesa vizualiz\u0103rile disponibile.",
|
|
739
789
|
"xapp.load_as_user_to_access": "\xCEncarc\u0103 catalogul ca utilizator pentru a accesa aceast\u0103 aplica\u021Bie.",
|
|
740
790
|
"xapp.no_views_available": "Nu exist\u0103 \xEEn prezent vizualiz\u0103ri disponibile pentru aplica\u021Bie.",
|
|
@@ -785,7 +835,9 @@ var MARKETPLACE_CATALOGS = {
|
|
|
785
835
|
"xapp.subscription_cancel_failed": "Abonamentul nu a putut fi anulat.",
|
|
786
836
|
"xapp.lifecycle_preview_at_label": "Previzualizare la",
|
|
787
837
|
"xapp.lifecycle_preview_hint": "Ciclul de via\u021B\u0103 al abonamentului este previzualizat pentru momentul selectat.",
|
|
788
|
-
"xapp.
|
|
838
|
+
"xapp.virtual_currency_label": "Moned\u0103 virtual\u0103",
|
|
839
|
+
"xapp.current_balances_label": "Solduri curente",
|
|
840
|
+
"xapp.credits_remaining_label": "Sold",
|
|
789
841
|
"xapp.available_label": "Disponibile",
|
|
790
842
|
"xapp.ready_to_use": "{count} gata de utilizare",
|
|
791
843
|
"xapp.source_label": "Surs\u0103",
|
|
@@ -2130,17 +2182,54 @@ var XMS_COPY_CATALOG = {
|
|
|
2130
2182
|
currentPlanActiveLabel: "Current plan active",
|
|
2131
2183
|
startingCheckoutLabel: "Starting checkout...",
|
|
2132
2184
|
purchaseAddOnUnlockLabel: "Purchase add-on unlock",
|
|
2133
|
-
continueToCheckoutLabel: "Continue to checkout"
|
|
2185
|
+
continueToCheckoutLabel: "Continue to checkout",
|
|
2186
|
+
generalUpgradeFitLabel: "Flexible option",
|
|
2187
|
+
generalUpgradeSummary: "A general plan option for this app.",
|
|
2188
|
+
durableUnlockFitLabel: "One-time unlock",
|
|
2189
|
+
durableUnlockSummary: "Best when you want access without an ongoing subscription.",
|
|
2190
|
+
recurringMembershipFitLabel: "Subscription",
|
|
2191
|
+
recurringMembershipSummary: "Best when this app is meant to stay active through recurring coverage.",
|
|
2192
|
+
creditTopUpFitLabel: "Balance top-up",
|
|
2193
|
+
hybridUpgradeFitLabel: "Access + balance",
|
|
2194
|
+
creditPackFitSummary: (unitLabel) => `Best when the feature spends ${unitLabel} for each advanced action.`,
|
|
2195
|
+
hybridPackFitSummary: (unitLabel) => `Blends access coverage with bundled ${unitLabel} for mixed workflows.`,
|
|
2196
|
+
packageCurrencySignalLabel: (unitLabel) => `currency ${unitLabel}`,
|
|
2197
|
+
billedSignalLabel: (periodLabel) => `billed ${periodLabel}`,
|
|
2198
|
+
generalOfferingSummary: "Available plans for this app.",
|
|
2199
|
+
featurePaywallOfferingSummary: "Shown when this app needs extra access or balance.",
|
|
2200
|
+
defaultPaywallOfferingSummary: "Main plan selection for this app.",
|
|
2201
|
+
checkoutOfferingSummary: "Direct purchase flow for this app.",
|
|
2202
|
+
upgradeOfferingSummary: "Best for switching or upgrading your current plan.",
|
|
2203
|
+
featureDurableUnlockReason: "Aligned with one-time unlock access.",
|
|
2204
|
+
featureRecurringAccessReason: "Recurring membership also grants current access.",
|
|
2205
|
+
featureHybridAccessReason: "Hybrid package contributes to current access coverage.",
|
|
2206
|
+
featureSubscriptionDirectReason: "Matches the subscription requirement directly.",
|
|
2207
|
+
featureHybridSubscriptionReason: "Hybrid package can also cover part of the subscription shape.",
|
|
2208
|
+
creditRequirementCoveredLabel: (amountLabel) => `Covers the ${amountLabel} requirement.`,
|
|
2209
|
+
creditRequirementAddedLabel: (amountLabel) => `Adds ${amountLabel} toward the requirement.`,
|
|
2210
|
+
hybridCreditsSupportLabel: (unitLabel) => `Hybrid package can add bundled ${unitLabel} for this flow.`
|
|
2134
2211
|
},
|
|
2135
2212
|
surface: {
|
|
2136
2213
|
plansTitle: "Plans",
|
|
2137
2214
|
historyTitle: "History",
|
|
2138
|
-
plansSubtitle: "
|
|
2215
|
+
plansSubtitle: "Access, plans, and balances for this app",
|
|
2139
2216
|
historySubtitle: "Recent monetization events, invoices, subscriptions, and wallet activity",
|
|
2217
|
+
offeringFallbackLabel: "Offering",
|
|
2218
|
+
packageFallbackLabel: "Package",
|
|
2219
|
+
paywallFallbackLabel: "Plans",
|
|
2220
|
+
availableLabel: "Available",
|
|
2221
|
+
unavailableLabel: "Unavailable",
|
|
2222
|
+
unknownLabel: "Unknown",
|
|
2223
|
+
yesLabel: "Yes",
|
|
2224
|
+
noLabel: "No",
|
|
2225
|
+
defaultBadgeLabel: "default",
|
|
2226
|
+
choosePackageActionLabel: "Choose package",
|
|
2227
|
+
noPaywallPackagesLabel: "No plans are currently available.",
|
|
2228
|
+
priceUnavailableLabel: "Price unavailable",
|
|
2140
2229
|
plansLabel: "Plans",
|
|
2141
2230
|
historyLabel: "History",
|
|
2142
2231
|
closeLabel: "Close",
|
|
2143
|
-
tabsAriaLabel: "
|
|
2232
|
+
tabsAriaLabel: "Plans and history view",
|
|
2144
2233
|
loadingLabel: "Loading plans...",
|
|
2145
2234
|
subjectRequiredNotice: "Checkout requires a subject-bound catalog session. Start from a signed host session to purchase plans.",
|
|
2146
2235
|
paymentCompletedNotice: "Payment completed and access was refreshed.",
|
|
@@ -2154,7 +2243,7 @@ var XMS_COPY_CATALOG = {
|
|
|
2154
2243
|
subscriptionCancelConfirmMessage: "Cancel renewal for this subscription?",
|
|
2155
2244
|
subscriptionCancelConfirmLabel: "Cancel subscription",
|
|
2156
2245
|
subscriptionCancelDismissLabel: "Keep subscription",
|
|
2157
|
-
missingPackageMetadataMessage: "This package is missing purchase metadata in the published
|
|
2246
|
+
missingPackageMetadataMessage: "This package is missing purchase metadata in the published plans configuration.",
|
|
2158
2247
|
missingIntentMessage: "Purchase intent was created without an identifier.",
|
|
2159
2248
|
missingPaymentPageMessage: "Payment page is not available for this package.",
|
|
2160
2249
|
startCheckoutFailedMessage: "Unable to start checkout for this package.",
|
|
@@ -2162,7 +2251,7 @@ var XMS_COPY_CATALOG = {
|
|
|
2162
2251
|
currentCoverageTitle: "Current coverage",
|
|
2163
2252
|
currentPlanLabel: "Current plan",
|
|
2164
2253
|
membershipAccessLabel: "Membership access",
|
|
2165
|
-
subscriptionStatusLabel: "Subscription
|
|
2254
|
+
subscriptionStatusLabel: "Subscription state",
|
|
2166
2255
|
subscriptionCoverageLabel: "Coverage",
|
|
2167
2256
|
subscriptionReasonLabel: "Status reason",
|
|
2168
2257
|
currentPeriodEndsLabel: "Current period ends",
|
|
@@ -2186,7 +2275,8 @@ var XMS_COPY_CATALOG = {
|
|
|
2186
2275
|
managementDestinationHintPublisherLabel: "Advanced subscription management is handled in the publisher app.",
|
|
2187
2276
|
managementDestinationHintOwnerLabel: "Advanced subscription management is handled by the app owner.",
|
|
2188
2277
|
openManagementDestinationActionLabel: "Open management",
|
|
2189
|
-
|
|
2278
|
+
virtualCurrencyLabel: "Currency",
|
|
2279
|
+
creditsRemainingLabel: "Balance",
|
|
2190
2280
|
addOnUnlocksLabel: "Add-on unlocks",
|
|
2191
2281
|
coverageActiveLabel: "Still covered",
|
|
2192
2282
|
coverageInactiveLabel: "Not covered",
|
|
@@ -2198,11 +2288,13 @@ var XMS_COPY_CATALOG = {
|
|
|
2198
2288
|
refreshingStatusActionLabel: "Refreshing...",
|
|
2199
2289
|
cancelSubscriptionActionLabel: "Cancel subscription",
|
|
2200
2290
|
cancellingSubscriptionActionLabel: "Cancelling...",
|
|
2201
|
-
noPublishedPlansLabel: "No
|
|
2202
|
-
recentTimelineTitle: "Recent
|
|
2203
|
-
recentTimelineSubtitle: "Latest
|
|
2204
|
-
historyAuditTitle: "
|
|
2205
|
-
historyAuditSubtitle: "Recent
|
|
2291
|
+
noPublishedPlansLabel: "No plans are currently available.",
|
|
2292
|
+
recentTimelineTitle: "Recent activity",
|
|
2293
|
+
recentTimelineSubtitle: "Latest subscription, balance, purchase, and invoice activity for this app.",
|
|
2294
|
+
historyAuditTitle: "Detailed history",
|
|
2295
|
+
historyAuditSubtitle: "Recent records grouped by subscriptions, balances, purchases, and invoices.",
|
|
2296
|
+
historyBalanceSummaryTitle: "Balances now",
|
|
2297
|
+
historyBalanceSummarySubtitle: "Latest visible wallet balances grouped by virtual currency for this app.",
|
|
2206
2298
|
noHistoryAvailableLabel: "No monetization history is available for this app yet.",
|
|
2207
2299
|
historyGenericLabel: "History",
|
|
2208
2300
|
historyPurchaseIntentsTitle: "Purchase intents",
|
|
@@ -2227,7 +2319,33 @@ var XMS_COPY_CATALOG = {
|
|
|
2227
2319
|
historyAccessSnapshotsTitle: "Access snapshots",
|
|
2228
2320
|
historyAccessSnapshotLabel: "Access snapshot",
|
|
2229
2321
|
historyInvoicesTitle: "Invoices",
|
|
2230
|
-
historyInvoiceLabel: "Invoice"
|
|
2322
|
+
historyInvoiceLabel: "Invoice",
|
|
2323
|
+
featureCurrentAccessMissingLabel: "Current access coverage is not active on this scope.",
|
|
2324
|
+
featureSubscriptionMissingLabel: "No active subscription is visible for this scope.",
|
|
2325
|
+
featureCreditsMissingLabel: (requiredLabel, availableLabel) => `This action needs ${requiredLabel}, but only ${availableLabel} are visible right now.`,
|
|
2326
|
+
featureBlockedSummary: (title) => `${title || "Feature"} is blocked on the current scope.`,
|
|
2327
|
+
featureReadySummary: (title) => `${title || "Feature"} can be unlocked from the current plan options.`,
|
|
2328
|
+
featureNeedMixedAccessLabel: "needs mixed access",
|
|
2329
|
+
featureNeedMembershipAndCreditsLabel: (unitLabel) => `needs membership + ${unitLabel}`,
|
|
2330
|
+
featureNeedMembershipLabel: "needs membership",
|
|
2331
|
+
featureNeedCreditsLabel: (unitLabel) => `needs ${unitLabel}`,
|
|
2332
|
+
featureNeedAccessLabel: "needs access",
|
|
2333
|
+
featureLockedLabel: "locked",
|
|
2334
|
+
featureGapShortLabel: (amountLabel) => `${amountLabel} short`,
|
|
2335
|
+
featureCurrentAccessMissingBadge: "current access missing",
|
|
2336
|
+
featureMembershipNotActiveBadge: "membership not active",
|
|
2337
|
+
featureCandidateLead: (selectedPackageTitle) => `${selectedPackageTitle || "Selected package"} is one package candidate for this access gap.`,
|
|
2338
|
+
featureCandidateFallbackLead: "Choose a plan option that covers the current access gap.",
|
|
2339
|
+
featureViewHybridOptionsLabel: "View hybrid options",
|
|
2340
|
+
featureViewMembershipOptionsLabel: "View membership options",
|
|
2341
|
+
featureViewCreditOptionsLabel: (unitLabel) => `View ${unitLabel} options`,
|
|
2342
|
+
featureViewUnlockOptionsLabel: "View unlock options",
|
|
2343
|
+
featureOpenPaywallLabel: "Open plans",
|
|
2344
|
+
featureUnlockCheckoutLabel: "Unlock with hosted checkout",
|
|
2345
|
+
featureStartMembershipCheckoutLabel: "Start membership checkout",
|
|
2346
|
+
featureBuyCreditsCheckoutLabel: (unitLabel) => `Buy ${unitLabel} with hosted checkout`,
|
|
2347
|
+
featureStartHybridCheckoutLabel: "Start hybrid checkout",
|
|
2348
|
+
featureCreatePaymentSessionLabel: "Create payment session"
|
|
2231
2349
|
}
|
|
2232
2350
|
},
|
|
2233
2351
|
ro: {
|
|
@@ -2242,17 +2360,54 @@ var XMS_COPY_CATALOG = {
|
|
|
2242
2360
|
currentPlanActiveLabel: "Plan activ",
|
|
2243
2361
|
startingCheckoutLabel: "Se porne\u0219te checkout-ul...",
|
|
2244
2362
|
purchaseAddOnUnlockLabel: "Cump\u0103r\u0103 suplimentul",
|
|
2245
|
-
continueToCheckoutLabel: "Continu\u0103 spre checkout"
|
|
2363
|
+
continueToCheckoutLabel: "Continu\u0103 spre checkout",
|
|
2364
|
+
generalUpgradeFitLabel: "Op\u021Biune flexibil\u0103",
|
|
2365
|
+
generalUpgradeSummary: "O op\u021Biune general\u0103 de plan pentru aceast\u0103 aplica\u021Bie.",
|
|
2366
|
+
durableUnlockFitLabel: "Unlock unic",
|
|
2367
|
+
durableUnlockSummary: "Potrivit c\xE2nd vrei acces f\u0103r\u0103 un abonament recurent.",
|
|
2368
|
+
recurringMembershipFitLabel: "Abonament",
|
|
2369
|
+
recurringMembershipSummary: "Potrivit c\xE2nd aceast\u0103 aplica\u021Bie trebuie s\u0103 r\u0103m\xE2n\u0103 activ\u0103 prin acoperire recurent\u0103.",
|
|
2370
|
+
creditTopUpFitLabel: "Top-up sold",
|
|
2371
|
+
hybridUpgradeFitLabel: "Acces + sold",
|
|
2372
|
+
creditPackFitSummary: (unitLabel) => `Potrivit c\xE2nd func\u021Bia consum\u0103 ${unitLabel} pentru fiecare ac\u021Biune avansat\u0103.`,
|
|
2373
|
+
hybridPackFitSummary: (unitLabel) => `Combin\u0103 acoperirea accesului cu ${unitLabel} incluse pentru fluxuri mixte.`,
|
|
2374
|
+
packageCurrencySignalLabel: (unitLabel) => `moned\u0103 ${unitLabel}`,
|
|
2375
|
+
billedSignalLabel: (periodLabel) => `facturat ${periodLabel}`,
|
|
2376
|
+
generalOfferingSummary: "Planuri disponibile pentru aceast\u0103 aplica\u021Bie.",
|
|
2377
|
+
featurePaywallOfferingSummary: "Afi\u0219at c\xE2nd aceast\u0103 aplica\u021Bie are nevoie de acces sau sold suplimentar.",
|
|
2378
|
+
defaultPaywallOfferingSummary: "Selec\u021Bia principal\u0103 de planuri pentru aceast\u0103 aplica\u021Bie.",
|
|
2379
|
+
checkoutOfferingSummary: "Flux de cump\u0103rare direct pentru aceast\u0103 aplica\u021Bie.",
|
|
2380
|
+
upgradeOfferingSummary: "Potrivit pentru schimbarea sau \xEEmbun\u0103t\u0103\u021Birea planului curent.",
|
|
2381
|
+
featureDurableUnlockReason: "Se potrive\u0219te cu accesul de tip unlock unic.",
|
|
2382
|
+
featureRecurringAccessReason: "Abonamentul recurent ofer\u0103 \u0219i acces curent pentru acest flux.",
|
|
2383
|
+
featureHybridAccessReason: "Pachetul hibrid contribuie la acoperirea accesului curent.",
|
|
2384
|
+
featureSubscriptionDirectReason: "Se potrive\u0219te direct cu cerin\u021Ba de abonament.",
|
|
2385
|
+
featureHybridSubscriptionReason: "Pachetul hibrid poate acoperi \u0219i o parte din forma de abonament.",
|
|
2386
|
+
creditRequirementCoveredLabel: (amountLabel) => `Acoper\u0103 cerin\u021Ba de ${amountLabel}.`,
|
|
2387
|
+
creditRequirementAddedLabel: (amountLabel) => `Adaug\u0103 ${amountLabel} c\u0103tre cerin\u021B\u0103.`,
|
|
2388
|
+
hybridCreditsSupportLabel: (unitLabel) => `Pachetul hibrid poate ad\u0103uga ${unitLabel} incluse pentru acest flux.`
|
|
2246
2389
|
},
|
|
2247
2390
|
surface: {
|
|
2248
2391
|
plansTitle: "Planuri",
|
|
2249
2392
|
historyTitle: "Istoric",
|
|
2250
|
-
plansSubtitle: "
|
|
2393
|
+
plansSubtitle: "Acces, planuri \u0219i solduri pentru aceast\u0103 aplica\u021Bie",
|
|
2251
2394
|
historySubtitle: "Evenimente recente de monetizare, facturi, abonamente \u0219i activitate din portofel",
|
|
2395
|
+
offeringFallbackLabel: "Ofert\u0103",
|
|
2396
|
+
packageFallbackLabel: "Pachet",
|
|
2397
|
+
paywallFallbackLabel: "Planuri",
|
|
2398
|
+
availableLabel: "Disponibil",
|
|
2399
|
+
unavailableLabel: "Indisponibil",
|
|
2400
|
+
unknownLabel: "Necunoscut",
|
|
2401
|
+
yesLabel: "Da",
|
|
2402
|
+
noLabel: "Nu",
|
|
2403
|
+
defaultBadgeLabel: "implicit",
|
|
2404
|
+
choosePackageActionLabel: "Alege pachetul",
|
|
2405
|
+
noPaywallPackagesLabel: "Nu exist\u0103 momentan planuri disponibile.",
|
|
2406
|
+
priceUnavailableLabel: "Pre\u021B indisponibil",
|
|
2252
2407
|
plansLabel: "Planuri",
|
|
2253
2408
|
historyLabel: "Istoric",
|
|
2254
2409
|
closeLabel: "\xCEnchide",
|
|
2255
|
-
tabsAriaLabel: "Vizualizare
|
|
2410
|
+
tabsAriaLabel: "Vizualizare planuri \u0219i istoric",
|
|
2256
2411
|
loadingLabel: "Se \xEEncarc\u0103 planurile...",
|
|
2257
2412
|
subjectRequiredNotice: "Checkout-ul necesit\u0103 o sesiune de catalog asociat\u0103 unui subiect. Porne\u0219te dintr-o sesiune gazd\u0103 autentificat\u0103 pentru a cump\u0103ra planuri.",
|
|
2258
2413
|
paymentCompletedNotice: "Plata a fost finalizat\u0103 \u0219i accesul a fost actualizat.",
|
|
@@ -2266,7 +2421,7 @@ var XMS_COPY_CATALOG = {
|
|
|
2266
2421
|
subscriptionCancelConfirmMessage: "Anulezi re\xEEnnoirea acestui abonament?",
|
|
2267
2422
|
subscriptionCancelConfirmLabel: "Anuleaz\u0103 abonamentul",
|
|
2268
2423
|
subscriptionCancelDismissLabel: "P\u0103streaz\u0103 abonamentul",
|
|
2269
|
-
missingPackageMetadataMessage: "Acest pachet nu are metadatele de cump\u0103rare necesare \xEEn
|
|
2424
|
+
missingPackageMetadataMessage: "Acest pachet nu are metadatele de cump\u0103rare necesare \xEEn configura\u021Bia publicat\u0103 a planurilor.",
|
|
2270
2425
|
missingIntentMessage: "Intentul de cump\u0103rare a fost creat f\u0103r\u0103 identificator.",
|
|
2271
2426
|
missingPaymentPageMessage: "Pagina de plat\u0103 nu este disponibil\u0103 pentru acest pachet.",
|
|
2272
2427
|
startCheckoutFailedMessage: "Nu s-a putut porni checkout-ul pentru acest pachet.",
|
|
@@ -2298,7 +2453,8 @@ var XMS_COPY_CATALOG = {
|
|
|
2298
2453
|
managementDestinationHintPublisherLabel: "Administrarea avansat\u0103 a abonamentului se face \xEEn aplica\u021Bia publisherului.",
|
|
2299
2454
|
managementDestinationHintOwnerLabel: "Administrarea avansat\u0103 a abonamentului este gestionat\u0103 de proprietarul aplica\u021Biei.",
|
|
2300
2455
|
openManagementDestinationActionLabel: "Deschide administrarea",
|
|
2301
|
-
|
|
2456
|
+
virtualCurrencyLabel: "Moned\u0103 virtual\u0103",
|
|
2457
|
+
creditsRemainingLabel: "Sold",
|
|
2302
2458
|
addOnUnlocksLabel: "Unlock-uri suplimentare",
|
|
2303
2459
|
coverageActiveLabel: "\xCEnc\u0103 activ",
|
|
2304
2460
|
coverageInactiveLabel: "Neacoperit",
|
|
@@ -2310,11 +2466,13 @@ var XMS_COPY_CATALOG = {
|
|
|
2310
2466
|
refreshingStatusActionLabel: "Se actualizeaz\u0103...",
|
|
2311
2467
|
cancelSubscriptionActionLabel: "Anuleaz\u0103 abonamentul",
|
|
2312
2468
|
cancellingSubscriptionActionLabel: "Se anuleaz\u0103...",
|
|
2313
|
-
noPublishedPlansLabel: "Nu exist\u0103 planuri
|
|
2314
|
-
recentTimelineTitle: "
|
|
2315
|
-
recentTimelineSubtitle: "Cele mai recente
|
|
2316
|
-
historyAuditTitle: "Istoric
|
|
2317
|
-
historyAuditSubtitle: "\xCEnregistr\u0103ri recente
|
|
2469
|
+
noPublishedPlansLabel: "Nu exist\u0103 planuri disponibile \xEEn acest moment.",
|
|
2470
|
+
recentTimelineTitle: "Activitate recent\u0103",
|
|
2471
|
+
recentTimelineSubtitle: "Cele mai recente actualiz\u0103ri pentru abonamente, solduri, cump\u0103r\u0103ri \u0219i facturi pentru aceast\u0103 aplica\u021Bie.",
|
|
2472
|
+
historyAuditTitle: "Istoric detaliat",
|
|
2473
|
+
historyAuditSubtitle: "\xCEnregistr\u0103ri recente grupate dup\u0103 abonamente, solduri, cump\u0103r\u0103ri \u0219i facturi.",
|
|
2474
|
+
historyBalanceSummaryTitle: "Solduri acum",
|
|
2475
|
+
historyBalanceSummarySubtitle: "Cele mai recente solduri vizibile din portofel, grupate dup\u0103 moneda virtual\u0103 pentru aceast\u0103 aplica\u021Bie.",
|
|
2318
2476
|
noHistoryAvailableLabel: "Nu exist\u0103 \xEEnc\u0103 istoric de monetizare disponibil pentru aceast\u0103 aplica\u021Bie.",
|
|
2319
2477
|
historyGenericLabel: "Istoric",
|
|
2320
2478
|
historyPurchaseIntentsTitle: "Inten\u021Bii de cump\u0103rare",
|
|
@@ -2339,7 +2497,33 @@ var XMS_COPY_CATALOG = {
|
|
|
2339
2497
|
historyAccessSnapshotsTitle: "Instantanee acces",
|
|
2340
2498
|
historyAccessSnapshotLabel: "Instantaneu acces",
|
|
2341
2499
|
historyInvoicesTitle: "Facturi",
|
|
2342
|
-
historyInvoiceLabel: "Factur\u0103"
|
|
2500
|
+
historyInvoiceLabel: "Factur\u0103",
|
|
2501
|
+
featureCurrentAccessMissingLabel: "Acoperirea de acces curent nu este activ\u0103 pe acest scope.",
|
|
2502
|
+
featureSubscriptionMissingLabel: "Nu este vizibil niciun abonament activ pentru acest scope.",
|
|
2503
|
+
featureCreditsMissingLabel: (requiredLabel, availableLabel) => `Aceast\u0103 ac\u021Biune are nevoie de ${requiredLabel}, dar acum sunt vizibile doar ${availableLabel}.`,
|
|
2504
|
+
featureBlockedSummary: (title) => `${title || "Func\u021Bia"} este blocat\u0103 pe scope-ul curent.`,
|
|
2505
|
+
featureReadySummary: (title) => `${title || "Func\u021Bia"} poate fi deblocat\u0103 din op\u021Biunile curente de plan.`,
|
|
2506
|
+
featureNeedMixedAccessLabel: "necesit\u0103 acces mixt",
|
|
2507
|
+
featureNeedMembershipAndCreditsLabel: (unitLabel) => `necesit\u0103 abonament + ${unitLabel}`,
|
|
2508
|
+
featureNeedMembershipLabel: "necesit\u0103 abonament",
|
|
2509
|
+
featureNeedCreditsLabel: (unitLabel) => `necesit\u0103 ${unitLabel}`,
|
|
2510
|
+
featureNeedAccessLabel: "necesit\u0103 acces",
|
|
2511
|
+
featureLockedLabel: "blocat",
|
|
2512
|
+
featureGapShortLabel: (amountLabel) => `lipse\u0219te ${amountLabel}`,
|
|
2513
|
+
featureCurrentAccessMissingBadge: "lipse\u0219te accesul curent",
|
|
2514
|
+
featureMembershipNotActiveBadge: "abonamentul nu este activ",
|
|
2515
|
+
featureCandidateLead: (selectedPackageTitle) => `${selectedPackageTitle || "Pachetul selectat"} este un pachet candidat pentru acest gol de acces.`,
|
|
2516
|
+
featureCandidateFallbackLead: "Alege o op\u021Biune de plan care acoper\u0103 golul curent de acces.",
|
|
2517
|
+
featureViewHybridOptionsLabel: "Vezi op\u021Biunile hibride",
|
|
2518
|
+
featureViewMembershipOptionsLabel: "Vezi op\u021Biunile de abonament",
|
|
2519
|
+
featureViewCreditOptionsLabel: (unitLabel) => `Vezi op\u021Biunile ${unitLabel}`,
|
|
2520
|
+
featureViewUnlockOptionsLabel: "Vezi op\u021Biunile de unlock",
|
|
2521
|
+
featureOpenPaywallLabel: "Deschide planurile",
|
|
2522
|
+
featureUnlockCheckoutLabel: "Deblocheaz\u0103 prin checkout g\u0103zduit",
|
|
2523
|
+
featureStartMembershipCheckoutLabel: "Porne\u0219te checkout-ul de abonament",
|
|
2524
|
+
featureBuyCreditsCheckoutLabel: (unitLabel) => `Cump\u0103r\u0103 ${unitLabel} prin checkout g\u0103zduit`,
|
|
2525
|
+
featureStartHybridCheckoutLabel: "Porne\u0219te checkout-ul hibrid",
|
|
2526
|
+
featureCreatePaymentSessionLabel: "Creeaz\u0103 sesiunea de plat\u0103"
|
|
2343
2527
|
}
|
|
2344
2528
|
}
|
|
2345
2529
|
};
|
|
@@ -2377,6 +2561,38 @@ function readLocalizedText(value, fallback = "") {
|
|
|
2377
2561
|
const record = value;
|
|
2378
2562
|
return readString4(record.en) || readString4(record.ro) || Object.values(record).map((item) => readString4(item)).find(Boolean) || fallback;
|
|
2379
2563
|
}
|
|
2564
|
+
function readVirtualCurrencyDefinition(value) {
|
|
2565
|
+
const record = readRecord(value);
|
|
2566
|
+
if (!record) return null;
|
|
2567
|
+
const code = readString4(record.code);
|
|
2568
|
+
const name = readString4(record.name);
|
|
2569
|
+
if (!code && !name) return null;
|
|
2570
|
+
return record;
|
|
2571
|
+
}
|
|
2572
|
+
function formatVirtualCurrencyLabel(value, options) {
|
|
2573
|
+
const record = readVirtualCurrencyDefinition(value);
|
|
2574
|
+
if (!record) return "";
|
|
2575
|
+
const code = readString4(record.code);
|
|
2576
|
+
const name = readString4(record.name);
|
|
2577
|
+
if (options?.preferCode && code) return code;
|
|
2578
|
+
if (options?.includeCode && name && code && readLower2(name) !== readLower2(code)) {
|
|
2579
|
+
return `${name} (${code})`;
|
|
2580
|
+
}
|
|
2581
|
+
return name || code;
|
|
2582
|
+
}
|
|
2583
|
+
function formatVirtualCurrencyAmountLabel(input) {
|
|
2584
|
+
const amount = readString4(input.amount);
|
|
2585
|
+
if (!amount) return "";
|
|
2586
|
+
const currencyLabel = formatVirtualCurrencyLabel(input.virtualCurrency);
|
|
2587
|
+
if (currencyLabel) return `${amount} ${currencyLabel}`;
|
|
2588
|
+
const fallbackUnit = readString4(input.fallbackUnit);
|
|
2589
|
+
return fallbackUnit ? `${amount} ${fallbackUnit}` : amount;
|
|
2590
|
+
}
|
|
2591
|
+
function normalizeVirtualCurrencyDisplayLabel(label) {
|
|
2592
|
+
const normalized = readString4(label);
|
|
2593
|
+
if (!normalized) return "";
|
|
2594
|
+
return normalized.replace(/\s+\([^)]+\)\s*$/, "").trim() || normalized;
|
|
2595
|
+
}
|
|
2380
2596
|
function escapeHtml(value) {
|
|
2381
2597
|
return String(value ?? "").replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
2382
2598
|
}
|
|
@@ -2402,11 +2618,12 @@ function hasEffectiveCoverage(input) {
|
|
|
2402
2618
|
return Boolean(input.accessProjection?.has_current_access);
|
|
2403
2619
|
}
|
|
2404
2620
|
function formatCoverageLabel(input) {
|
|
2621
|
+
const copy = buildXmsSurfaceCopy({ locale: input.locale });
|
|
2405
2622
|
if (isExhaustedIncludedCreditAccess(input)) {
|
|
2406
2623
|
return buildXmsPackageCopy(input.locale).consumedLabel;
|
|
2407
2624
|
}
|
|
2408
|
-
if (hasEffectiveCoverage(input)) return
|
|
2409
|
-
return
|
|
2625
|
+
if (hasEffectiveCoverage(input)) return copy.coverageActiveLabel;
|
|
2626
|
+
return copy.coverageInactiveLabel;
|
|
2410
2627
|
}
|
|
2411
2628
|
function resolveSubscriptionCoverageLabel(input) {
|
|
2412
2629
|
const copy = buildXmsSurfaceCopy({ locale: input.locale });
|
|
@@ -2518,17 +2735,20 @@ function flattenXappMonetizationPaywallPackages(paywall) {
|
|
|
2518
2735
|
out.push({
|
|
2519
2736
|
offeringId: readString4(packageRecord.offering_id),
|
|
2520
2737
|
offeringSlug: readString4(packageRecord.offering_slug),
|
|
2521
|
-
offeringTitle: readString4(packageRecord.offering_slug) ||
|
|
2738
|
+
offeringTitle: readString4(packageRecord.offering_slug) || buildXmsSurfaceCopy().offeringFallbackLabel,
|
|
2522
2739
|
offeringPlacement: readString4(packageRecord.offering_placement) || null,
|
|
2523
2740
|
packageId: readString4(packageRecord.id),
|
|
2524
2741
|
packageSlug: readString4(packageRecord.slug),
|
|
2525
|
-
packageTitle: readString4(packageRecord.slug) ||
|
|
2742
|
+
packageTitle: readString4(packageRecord.slug) || buildXmsSurfaceCopy().packageFallbackLabel,
|
|
2526
2743
|
packageKind: readString4(packageRecord.package_kind) || "standard",
|
|
2527
2744
|
productId: readString4(packageRecord.product?.id),
|
|
2528
2745
|
productSlug: readString4(packageRecord.product?.slug),
|
|
2529
2746
|
productFamily: readString4(
|
|
2530
2747
|
packageRecord.product?.product_family
|
|
2531
2748
|
),
|
|
2749
|
+
virtualCurrency: readVirtualCurrencyDefinition(
|
|
2750
|
+
packageRecord.product?.virtual_currency
|
|
2751
|
+
) ?? null,
|
|
2532
2752
|
productMetadata: packageRecord.product?.metadata && typeof packageRecord.product.metadata === "object" ? packageRecord.product.metadata : {},
|
|
2533
2753
|
priceId: readString4(price?.id),
|
|
2534
2754
|
amount: readString4(price?.amount),
|
|
@@ -2555,18 +2775,20 @@ function readPackageCredits(item) {
|
|
|
2555
2775
|
}
|
|
2556
2776
|
function buildMonetizationOfferingPresentation(input) {
|
|
2557
2777
|
const record = input && typeof input === "object" && !Array.isArray(input) ? input : {};
|
|
2558
|
-
const
|
|
2778
|
+
const surfaceCopy = buildXmsSurfaceCopy({ locale: record.locale });
|
|
2779
|
+
const offeringLabel = readString4(record.offeringTitle) || formatStateLabel(record.offeringSlug, surfaceCopy.offeringFallbackLabel);
|
|
2559
2780
|
const placementRaw = readLower2(record.offeringPlacement);
|
|
2560
2781
|
const placementLabel = formatPlacementLabel(record.offeringPlacement);
|
|
2561
|
-
|
|
2782
|
+
const copy = buildXmsPackageCopy(record.locale);
|
|
2783
|
+
let summary = copy.generalOfferingSummary;
|
|
2562
2784
|
if (placementRaw.includes("feature") && placementRaw.includes("paywall")) {
|
|
2563
|
-
summary =
|
|
2785
|
+
summary = copy.featurePaywallOfferingSummary;
|
|
2564
2786
|
} else if (placementRaw.includes("paywall")) {
|
|
2565
|
-
summary =
|
|
2787
|
+
summary = copy.defaultPaywallOfferingSummary;
|
|
2566
2788
|
} else if (placementRaw.includes("checkout")) {
|
|
2567
|
-
summary =
|
|
2789
|
+
summary = copy.checkoutOfferingSummary;
|
|
2568
2790
|
} else if (placementRaw.includes("upgrade")) {
|
|
2569
|
-
summary =
|
|
2791
|
+
summary = copy.upgradeOfferingSummary;
|
|
2570
2792
|
}
|
|
2571
2793
|
return {
|
|
2572
2794
|
offeringLabel,
|
|
@@ -2576,7 +2798,13 @@ function buildMonetizationOfferingPresentation(input) {
|
|
|
2576
2798
|
}
|
|
2577
2799
|
function buildMonetizationPaywallPresentation(input) {
|
|
2578
2800
|
const record = input && typeof input === "object" && !Array.isArray(input) ? input : {};
|
|
2579
|
-
const paywallLabel = readLocalizedText(
|
|
2801
|
+
const paywallLabel = readLocalizedText(
|
|
2802
|
+
record.title,
|
|
2803
|
+
formatStateLabel(
|
|
2804
|
+
record.slug,
|
|
2805
|
+
buildXmsSurfaceCopy({ locale: record.locale }).paywallFallbackLabel
|
|
2806
|
+
)
|
|
2807
|
+
) || buildXmsSurfaceCopy({ locale: record.locale }).paywallFallbackLabel;
|
|
2580
2808
|
const placementLabel = formatPlacementLabel(record.placement);
|
|
2581
2809
|
const packages = flattenXappMonetizationPaywallPackages(record);
|
|
2582
2810
|
const defaultPackageRef = readString4(record.default_package_ref);
|
|
@@ -2599,10 +2827,13 @@ function buildMonetizationPaywallRenderModel(input) {
|
|
|
2599
2827
|
return {
|
|
2600
2828
|
packageId: readString4(item.packageId),
|
|
2601
2829
|
packageSlug: readString4(item.packageSlug),
|
|
2602
|
-
packageTitle: readString4(item.packageTitle) ||
|
|
2830
|
+
packageTitle: readString4(item.packageTitle) || buildXmsSurfaceCopy().packageFallbackLabel,
|
|
2603
2831
|
productId: readString4(item.productId),
|
|
2604
2832
|
productSlug: readString4(item.productSlug),
|
|
2605
2833
|
productFamily: readString4(item.productFamily),
|
|
2834
|
+
virtualCurrencyCode: formatVirtualCurrencyLabel(item.virtualCurrency, { preferCode: true }),
|
|
2835
|
+
virtualCurrencyName: formatVirtualCurrencyLabel(item.virtualCurrency),
|
|
2836
|
+
virtualCurrencyLabel: formatVirtualCurrencyLabel(item.virtualCurrency, { includeCode: true }),
|
|
2606
2837
|
productMetadata: item.productMetadata && typeof item.productMetadata === "object" && !Array.isArray(item.productMetadata) ? item.productMetadata : {},
|
|
2607
2838
|
metadata: item.metadata && typeof item.metadata === "object" && !Array.isArray(item.metadata) ? item.metadata : {},
|
|
2608
2839
|
description: readString4(item.description) || packagePresentation.summary,
|
|
@@ -2978,9 +3209,98 @@ function readHistoryBucket(history, key) {
|
|
|
2978
3209
|
items
|
|
2979
3210
|
};
|
|
2980
3211
|
}
|
|
3212
|
+
function formatBalanceQuantity(value) {
|
|
3213
|
+
if (!Number.isFinite(value)) return "";
|
|
3214
|
+
const normalized = Math.round(value * 1e4) / 1e4;
|
|
3215
|
+
if (Number.isInteger(normalized)) return String(normalized);
|
|
3216
|
+
return normalized.toFixed(4).replace(/\.?0+$/, "");
|
|
3217
|
+
}
|
|
3218
|
+
function summarizeVirtualCurrencyBalances(input) {
|
|
3219
|
+
const record = readRecord(input) ?? {};
|
|
3220
|
+
const history = readRecord(record.history) ?? record;
|
|
3221
|
+
const walletAccounts = readHistoryBucket(history, "wallet_accounts").items;
|
|
3222
|
+
const accessSnapshots = readHistoryBucket(history, "access_snapshots").items;
|
|
3223
|
+
const aggregates = /* @__PURE__ */ new Map();
|
|
3224
|
+
const upsertBalance = (inputValue) => {
|
|
3225
|
+
const amount = readNumber(inputValue.amount, Number.NaN);
|
|
3226
|
+
if (!Number.isFinite(amount) || Math.abs(amount) < 1e-7) return;
|
|
3227
|
+
const label = formatVirtualCurrencyLabel(inputValue.virtualCurrency, {
|
|
3228
|
+
includeCode: true
|
|
3229
|
+
}) || readString4(inputValue.fallbackUnit) || readString4(inputValue.fallbackKey) || "Balance";
|
|
3230
|
+
const key = formatVirtualCurrencyLabel(inputValue.virtualCurrency, {
|
|
3231
|
+
preferCode: true
|
|
3232
|
+
}) || readString4(inputValue.fallbackKey) || label.toLowerCase();
|
|
3233
|
+
const existing = aggregates.get(key);
|
|
3234
|
+
if (existing) {
|
|
3235
|
+
existing.amount += amount;
|
|
3236
|
+
existing.accountCount += 1;
|
|
3237
|
+
return;
|
|
3238
|
+
}
|
|
3239
|
+
aggregates.set(key, {
|
|
3240
|
+
label,
|
|
3241
|
+
amount,
|
|
3242
|
+
accountCount: 1,
|
|
3243
|
+
virtualCurrency: inputValue.virtualCurrency ?? null,
|
|
3244
|
+
fallbackUnit: readString4(inputValue.fallbackUnit)
|
|
3245
|
+
});
|
|
3246
|
+
};
|
|
3247
|
+
for (const item of walletAccounts) {
|
|
3248
|
+
upsertBalance({
|
|
3249
|
+
amount: item.balance_remaining,
|
|
3250
|
+
virtualCurrency: item.virtual_currency,
|
|
3251
|
+
fallbackUnit: item.currency,
|
|
3252
|
+
fallbackKey: item.product_slug || item.id
|
|
3253
|
+
});
|
|
3254
|
+
}
|
|
3255
|
+
if (aggregates.size === 0 && accessSnapshots.length > 0) {
|
|
3256
|
+
for (const item of accessSnapshots) {
|
|
3257
|
+
upsertBalance({
|
|
3258
|
+
amount: item.credits_remaining,
|
|
3259
|
+
virtualCurrency: item.virtual_currency,
|
|
3260
|
+
fallbackUnit: "credits",
|
|
3261
|
+
fallbackKey: item.tier || item.id
|
|
3262
|
+
});
|
|
3263
|
+
}
|
|
3264
|
+
}
|
|
3265
|
+
const balances = Array.from(aggregates.entries()).map(([key, item]) => {
|
|
3266
|
+
const amount = formatBalanceQuantity(item.amount);
|
|
3267
|
+
return {
|
|
3268
|
+
key,
|
|
3269
|
+
label: item.label,
|
|
3270
|
+
amount,
|
|
3271
|
+
amountLabel: formatVirtualCurrencyAmountLabel({
|
|
3272
|
+
amount,
|
|
3273
|
+
virtualCurrency: item.virtualCurrency,
|
|
3274
|
+
fallbackUnit: item.fallbackUnit
|
|
3275
|
+
}) || amount,
|
|
3276
|
+
accountCount: item.accountCount
|
|
3277
|
+
};
|
|
3278
|
+
}).sort((left, right) => {
|
|
3279
|
+
const amountDiff = readNumber(right.amount) - readNumber(left.amount);
|
|
3280
|
+
if (Math.abs(amountDiff) > 1e-7) return amountDiff > 0 ? 1 : -1;
|
|
3281
|
+
return left.label.localeCompare(right.label);
|
|
3282
|
+
});
|
|
3283
|
+
return {
|
|
3284
|
+
balances,
|
|
3285
|
+
totalAccounts: walletAccounts.length,
|
|
3286
|
+
totalCurrencies: balances.length
|
|
3287
|
+
};
|
|
3288
|
+
}
|
|
2981
3289
|
function readHistoryTitle(item, keys, fallback) {
|
|
2982
3290
|
for (const key of keys) {
|
|
2983
|
-
const
|
|
3291
|
+
const segments = key.split(".");
|
|
3292
|
+
let current = item;
|
|
3293
|
+
for (const segment of segments) {
|
|
3294
|
+
const record = readRecord(current);
|
|
3295
|
+
current = record ? record[segment] : void 0;
|
|
3296
|
+
}
|
|
3297
|
+
if (key.startsWith("virtual_currency.")) {
|
|
3298
|
+
const value2 = formatVirtualCurrencyLabel(item.virtual_currency ?? current, {
|
|
3299
|
+
includeCode: true
|
|
3300
|
+
});
|
|
3301
|
+
if (value2) return value2;
|
|
3302
|
+
}
|
|
3303
|
+
const value = readString4(current);
|
|
2984
3304
|
if (value) return value;
|
|
2985
3305
|
}
|
|
2986
3306
|
return fallback;
|
|
@@ -2988,7 +3308,25 @@ function readHistoryTitle(item, keys, fallback) {
|
|
|
2988
3308
|
function readHistoryMeta(item, keys, locale) {
|
|
2989
3309
|
const out = [];
|
|
2990
3310
|
for (const key of keys) {
|
|
2991
|
-
const
|
|
3311
|
+
const segments = key.split(".");
|
|
3312
|
+
let current = item;
|
|
3313
|
+
for (const segment of segments) {
|
|
3314
|
+
const record = readRecord(current);
|
|
3315
|
+
current = record ? record[segment] : void 0;
|
|
3316
|
+
}
|
|
3317
|
+
const value = key === "settlement_effect_detail" ? formatSettlementEffectDetailLabel(item.settlement_effect, current, locale) : key === "balance_remaining" ? formatVirtualCurrencyAmountLabel({
|
|
3318
|
+
amount: current,
|
|
3319
|
+
virtualCurrency: item.virtual_currency,
|
|
3320
|
+
fallbackUnit: readString4(item.currency)
|
|
3321
|
+
}) : key === "amount" ? formatVirtualCurrencyAmountLabel({
|
|
3322
|
+
amount: current,
|
|
3323
|
+
virtualCurrency: item.virtual_currency,
|
|
3324
|
+
fallbackUnit: readString4(item.currency)
|
|
3325
|
+
}) : key === "credits_remaining" ? formatVirtualCurrencyAmountLabel({
|
|
3326
|
+
amount: current,
|
|
3327
|
+
virtualCurrency: item.virtual_currency,
|
|
3328
|
+
fallbackUnit: "credits"
|
|
3329
|
+
}) : key.endsWith("_at") ? formatPlansDateTime(current, locale) : readString4(current);
|
|
2992
3330
|
if (value) out.push(formatStateLabel(value, value));
|
|
2993
3331
|
}
|
|
2994
3332
|
return out;
|
|
@@ -3040,9 +3378,17 @@ function formatSettlementEffectDetailLabel(effect, detail, locale) {
|
|
|
3040
3378
|
}
|
|
3041
3379
|
function buildTimelineHtml(input) {
|
|
3042
3380
|
if (!input.total) return "";
|
|
3381
|
+
const items = [...input.items].sort((left, right) => {
|
|
3382
|
+
const leftAt = Date.parse(readString4(left.occurred_at));
|
|
3383
|
+
const rightAt = Date.parse(readString4(right.occurred_at));
|
|
3384
|
+
if (Number.isFinite(leftAt) && Number.isFinite(rightAt) && leftAt !== rightAt) {
|
|
3385
|
+
return rightAt - leftAt;
|
|
3386
|
+
}
|
|
3387
|
+
return readString4(right.id).localeCompare(readString4(left.id));
|
|
3388
|
+
});
|
|
3043
3389
|
return `
|
|
3044
3390
|
<div class="xapps-xms-plans__timeline">
|
|
3045
|
-
${
|
|
3391
|
+
${items.map((item) => {
|
|
3046
3392
|
const title = readString4(item.title) || readString4(item.id) || formatTimelineBucketLabel(item.bucket, input.locale);
|
|
3047
3393
|
const when = formatPlansDateTime(item.occurred_at, input.locale);
|
|
3048
3394
|
const meta = [
|
|
@@ -3056,7 +3402,11 @@ function buildTimelineHtml(input) {
|
|
|
3056
3402
|
),
|
|
3057
3403
|
readString4(item.scope),
|
|
3058
3404
|
readString4(item.correlation),
|
|
3059
|
-
|
|
3405
|
+
formatVirtualCurrencyAmountLabel({
|
|
3406
|
+
amount: item.amount,
|
|
3407
|
+
virtualCurrency: item.virtual_currency,
|
|
3408
|
+
fallbackUnit: readString4(item.currency)
|
|
3409
|
+
}),
|
|
3060
3410
|
readString4(item.note)
|
|
3061
3411
|
].filter(Boolean);
|
|
3062
3412
|
return `
|
|
@@ -3108,32 +3458,6 @@ function buildMonetizationHistorySections(input) {
|
|
|
3108
3458
|
const { history, locale } = input;
|
|
3109
3459
|
const copy = buildXmsSurfaceCopy({ locale });
|
|
3110
3460
|
return [
|
|
3111
|
-
buildHistorySectionHtml({
|
|
3112
|
-
title: copy.historyPurchaseIntentsTitle,
|
|
3113
|
-
total: readHistoryBucket(history, "purchase_intents").total,
|
|
3114
|
-
items: readHistoryBucket(history, "purchase_intents").items,
|
|
3115
|
-
locale,
|
|
3116
|
-
itemTitleKeys: ["package_slug", "product_slug", "id"],
|
|
3117
|
-
itemFallbackTitle: copy.historyPurchaseIntentLabel,
|
|
3118
|
-
itemStatusKeys: ["status"],
|
|
3119
|
-
itemMetaKeys: ["amount", "currency", "payment_lane", "updated_at"]
|
|
3120
|
-
}),
|
|
3121
|
-
buildHistorySectionHtml({
|
|
3122
|
-
title: copy.historyTransactionsTitle,
|
|
3123
|
-
total: readHistoryBucket(history, "transactions").total,
|
|
3124
|
-
items: readHistoryBucket(history, "transactions").items,
|
|
3125
|
-
locale,
|
|
3126
|
-
itemTitleKeys: ["package_slug", "product_slug", "id"],
|
|
3127
|
-
itemFallbackTitle: copy.historyTransactionLabel,
|
|
3128
|
-
itemStatusKeys: ["status"],
|
|
3129
|
-
itemMetaKeys: [
|
|
3130
|
-
"amount",
|
|
3131
|
-
"currency",
|
|
3132
|
-
"settlement_effect",
|
|
3133
|
-
"payment_session_id",
|
|
3134
|
-
"occurred_at"
|
|
3135
|
-
]
|
|
3136
|
-
}),
|
|
3137
3461
|
buildHistorySectionHtml({
|
|
3138
3462
|
title: copy.historySubscriptionsTitle,
|
|
3139
3463
|
total: readHistoryBucket(history, "subscriptions").total,
|
|
@@ -3159,30 +3483,46 @@ function buildMonetizationHistorySections(input) {
|
|
|
3159
3483
|
total: readHistoryBucket(history, "wallet_accounts").total,
|
|
3160
3484
|
items: readHistoryBucket(history, "wallet_accounts").items,
|
|
3161
3485
|
locale,
|
|
3162
|
-
itemTitleKeys: ["product_slug", "id"],
|
|
3486
|
+
itemTitleKeys: ["virtual_currency.code", "product_slug", "id"],
|
|
3163
3487
|
itemFallbackTitle: copy.historyWalletAccountLabel,
|
|
3164
3488
|
itemStatusKeys: ["status"],
|
|
3165
|
-
itemMetaKeys: ["
|
|
3489
|
+
itemMetaKeys: ["balance_remaining", "updated_at"]
|
|
3166
3490
|
}),
|
|
3167
3491
|
buildHistorySectionHtml({
|
|
3168
3492
|
title: copy.historyWalletLedgerTitle,
|
|
3169
3493
|
total: readHistoryBucket(history, "wallet_ledger").total,
|
|
3170
3494
|
items: readHistoryBucket(history, "wallet_ledger").items,
|
|
3171
3495
|
locale,
|
|
3172
|
-
itemTitleKeys: ["event_kind", "wallet_product_slug", "id"],
|
|
3496
|
+
itemTitleKeys: ["event_kind", "virtual_currency.code", "wallet_product_slug", "id"],
|
|
3173
3497
|
itemFallbackTitle: copy.historyWalletLedgerEntryLabel,
|
|
3174
3498
|
itemStatusKeys: [],
|
|
3175
|
-
itemMetaKeys: ["amount", "
|
|
3499
|
+
itemMetaKeys: ["amount", "settlement_effect", "source_kind", "occurred_at"]
|
|
3176
3500
|
}),
|
|
3177
3501
|
buildHistorySectionHtml({
|
|
3178
|
-
title: copy.
|
|
3179
|
-
total: readHistoryBucket(history, "
|
|
3180
|
-
items: readHistoryBucket(history, "
|
|
3502
|
+
title: copy.historyTransactionsTitle,
|
|
3503
|
+
total: readHistoryBucket(history, "transactions").total,
|
|
3504
|
+
items: readHistoryBucket(history, "transactions").items,
|
|
3181
3505
|
locale,
|
|
3182
|
-
itemTitleKeys: ["
|
|
3183
|
-
itemFallbackTitle: copy.
|
|
3184
|
-
itemStatusKeys: ["
|
|
3185
|
-
itemMetaKeys: [
|
|
3506
|
+
itemTitleKeys: ["package_slug", "product_slug", "id"],
|
|
3507
|
+
itemFallbackTitle: copy.historyTransactionLabel,
|
|
3508
|
+
itemStatusKeys: ["status"],
|
|
3509
|
+
itemMetaKeys: [
|
|
3510
|
+
"amount",
|
|
3511
|
+
"currency",
|
|
3512
|
+
"settlement_effect",
|
|
3513
|
+
"payment_session_id",
|
|
3514
|
+
"occurred_at"
|
|
3515
|
+
]
|
|
3516
|
+
}),
|
|
3517
|
+
buildHistorySectionHtml({
|
|
3518
|
+
title: copy.historyPurchaseIntentsTitle,
|
|
3519
|
+
total: readHistoryBucket(history, "purchase_intents").total,
|
|
3520
|
+
items: readHistoryBucket(history, "purchase_intents").items,
|
|
3521
|
+
locale,
|
|
3522
|
+
itemTitleKeys: ["package_slug", "product_slug", "id"],
|
|
3523
|
+
itemFallbackTitle: copy.historyPurchaseIntentLabel,
|
|
3524
|
+
itemStatusKeys: ["status"],
|
|
3525
|
+
itemMetaKeys: ["amount", "currency", "payment_lane", "updated_at"]
|
|
3186
3526
|
}),
|
|
3187
3527
|
buildHistorySectionHtml({
|
|
3188
3528
|
title: copy.historyInvoicesTitle,
|
|
@@ -3199,9 +3539,36 @@ function buildMonetizationHistorySections(input) {
|
|
|
3199
3539
|
"owner_scope",
|
|
3200
3540
|
"created_at"
|
|
3201
3541
|
]
|
|
3542
|
+
}),
|
|
3543
|
+
buildHistorySectionHtml({
|
|
3544
|
+
title: copy.historyAccessSnapshotsTitle,
|
|
3545
|
+
total: readHistoryBucket(history, "access_snapshots").total,
|
|
3546
|
+
items: readHistoryBucket(history, "access_snapshots").items,
|
|
3547
|
+
locale,
|
|
3548
|
+
itemTitleKeys: ["tier", "id"],
|
|
3549
|
+
itemFallbackTitle: copy.historyAccessSnapshotLabel,
|
|
3550
|
+
itemStatusKeys: ["entitlement_state"],
|
|
3551
|
+
itemMetaKeys: ["balance_state", "credits_remaining", "updated_at"]
|
|
3202
3552
|
})
|
|
3203
3553
|
].filter(Boolean);
|
|
3204
3554
|
}
|
|
3555
|
+
function buildMonetizationHistoryBalanceSummaryHtml(input) {
|
|
3556
|
+
const { history, locale } = input;
|
|
3557
|
+
const copy = buildXmsSurfaceCopy({ locale });
|
|
3558
|
+
const summary = summarizeVirtualCurrencyBalances(history);
|
|
3559
|
+
if (!summary.balances.length) return "";
|
|
3560
|
+
return `
|
|
3561
|
+
<section class="xapps-xms-plans__card">
|
|
3562
|
+
<h4 class="xapps-xms-plans__section-title">${escapeHtml(copy.historyBalanceSummaryTitle)}</h4>
|
|
3563
|
+
<div class="xapps-xms-plans__subtitle">${escapeHtml(copy.historyBalanceSummarySubtitle)}</div>
|
|
3564
|
+
<div class="xapps-xms-plans__badges">
|
|
3565
|
+
${summary.balances.map(
|
|
3566
|
+
(item) => `<span class="xapps-xms-plans__badge">${escapeHtml(item.amountLabel)}</span>`
|
|
3567
|
+
).join("")}
|
|
3568
|
+
</div>
|
|
3569
|
+
</section>
|
|
3570
|
+
`;
|
|
3571
|
+
}
|
|
3205
3572
|
function buildMonetizationHistorySurfaceHtml(input, options = {}) {
|
|
3206
3573
|
const record = readRecord(input) ?? {};
|
|
3207
3574
|
const history = readRecord(record.history) ?? record;
|
|
@@ -3210,8 +3577,9 @@ function buildMonetizationHistorySurfaceHtml(input, options = {}) {
|
|
|
3210
3577
|
const showHeader = options.showHeader !== false;
|
|
3211
3578
|
const surfaceCopy = buildXmsSurfaceCopy({ locale });
|
|
3212
3579
|
const historySections = buildMonetizationHistorySections({ history, locale });
|
|
3580
|
+
const balanceSummaryHtml = buildMonetizationHistoryBalanceSummaryHtml({ history, locale });
|
|
3213
3581
|
const timeline = readHistoryBucket(history, "timeline");
|
|
3214
|
-
const hasHistory = timeline.total || historySections.length;
|
|
3582
|
+
const hasHistory = Boolean(timeline.total || historySections.length || balanceSummaryHtml);
|
|
3215
3583
|
return `
|
|
3216
3584
|
${includeStyles ? `<style>${monetizationPlansSurfaceStyles}</style>` : ""}
|
|
3217
3585
|
<section class="xapps-xms-plans">
|
|
@@ -3225,6 +3593,7 @@ function buildMonetizationHistorySurfaceHtml(input, options = {}) {
|
|
|
3225
3593
|
</div>` : ""}
|
|
3226
3594
|
${readString4(options.notice) ? `<div class="xapps-xms-plans__notice">${escapeHtml(readString4(options.notice))}</div>` : ""}
|
|
3227
3595
|
${readString4(options.error) ? `<div class="xapps-xms-plans__error">${escapeHtml(readString4(options.error))}</div>` : ""}
|
|
3596
|
+
${balanceSummaryHtml}
|
|
3228
3597
|
${timeline.total ? `<section class="xapps-xms-plans__card">
|
|
3229
3598
|
<h4 class="xapps-xms-plans__section-title">${escapeHtml(surfaceCopy.recentTimelineTitle)}</h4>
|
|
3230
3599
|
<div class="xapps-xms-plans__subtitle">${escapeHtml(surfaceCopy.recentTimelineSubtitle)}</div>
|
|
@@ -3247,43 +3616,64 @@ function buildMonetizationHistorySurfaceHtml(input, options = {}) {
|
|
|
3247
3616
|
}
|
|
3248
3617
|
function buildMonetizationPackagePresentation(input) {
|
|
3249
3618
|
const item = input && typeof input === "object" && !Array.isArray(input) ? input : {};
|
|
3619
|
+
const copy = buildXmsPackageCopy(item.locale);
|
|
3250
3620
|
const packageKind = readString4(item.packageKind);
|
|
3251
3621
|
const packageSlug = readLower2(item.packageSlug);
|
|
3252
3622
|
const metadata = item.metadata && typeof item.metadata === "object" && !Array.isArray(item.metadata) ? item.metadata : {};
|
|
3253
3623
|
const credits = readPackageCredits(item);
|
|
3624
|
+
const virtualCurrency = readVirtualCurrencyDefinition(item.virtualCurrency) ?? readVirtualCurrencyDefinition(
|
|
3625
|
+
item.productMetadata && typeof item.productMetadata === "object" ? item.productMetadata.virtual_currency : null
|
|
3626
|
+
);
|
|
3254
3627
|
const moneyLabel = normalizeMoneyLabel(item);
|
|
3255
3628
|
const offeringPresentation = buildMonetizationOfferingPresentation(item);
|
|
3256
|
-
let fitLabel =
|
|
3257
|
-
let summary =
|
|
3629
|
+
let fitLabel = copy.generalUpgradeFitLabel;
|
|
3630
|
+
let summary = copy.generalUpgradeSummary;
|
|
3258
3631
|
if (packageKind === "one_time_unlock") {
|
|
3259
|
-
fitLabel =
|
|
3260
|
-
summary =
|
|
3632
|
+
fitLabel = copy.durableUnlockFitLabel;
|
|
3633
|
+
summary = copy.durableUnlockSummary;
|
|
3261
3634
|
} else if (packageKind === "subscription") {
|
|
3262
|
-
fitLabel =
|
|
3263
|
-
summary =
|
|
3635
|
+
fitLabel = copy.recurringMembershipFitLabel;
|
|
3636
|
+
summary = copy.recurringMembershipSummary;
|
|
3264
3637
|
} else if (packageKind === "credit_pack") {
|
|
3265
|
-
|
|
3266
|
-
|
|
3638
|
+
const unitLabel = normalizeVirtualCurrencyDisplayLabel(
|
|
3639
|
+
formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true })
|
|
3640
|
+
);
|
|
3641
|
+
fitLabel = copy.creditTopUpFitLabel;
|
|
3642
|
+
summary = copy.creditPackFitSummary(unitLabel || "credits");
|
|
3267
3643
|
} else if (packageSlug.includes("hybrid")) {
|
|
3268
|
-
|
|
3269
|
-
|
|
3644
|
+
const unitLabel = normalizeVirtualCurrencyDisplayLabel(
|
|
3645
|
+
formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true })
|
|
3646
|
+
);
|
|
3647
|
+
fitLabel = copy.hybridUpgradeFitLabel;
|
|
3648
|
+
summary = copy.hybridPackFitSummary(unitLabel || "credits");
|
|
3270
3649
|
}
|
|
3271
3650
|
const signals = [];
|
|
3272
3651
|
if (readString4(metadata.badge)) {
|
|
3273
3652
|
signals.push(readString4(metadata.badge));
|
|
3274
3653
|
}
|
|
3275
|
-
if (credits > 0) {
|
|
3654
|
+
if (credits > 0 && virtualCurrency) {
|
|
3655
|
+
signals.push(
|
|
3656
|
+
formatVirtualCurrencyAmountLabel({
|
|
3657
|
+
amount: String(credits),
|
|
3658
|
+
virtualCurrency,
|
|
3659
|
+
fallbackUnit: "credits"
|
|
3660
|
+
})
|
|
3661
|
+
);
|
|
3662
|
+
} else if (credits > 0) {
|
|
3276
3663
|
signals.push(`${credits} credits`);
|
|
3664
|
+
} else if (virtualCurrency) {
|
|
3665
|
+
signals.push(
|
|
3666
|
+
copy.packageCurrencySignalLabel(
|
|
3667
|
+
formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true })
|
|
3668
|
+
)
|
|
3669
|
+
);
|
|
3277
3670
|
}
|
|
3278
3671
|
if (readString4(item.billingPeriod)) {
|
|
3279
|
-
signals.push(
|
|
3672
|
+
signals.push(copy.billedSignalLabel(readString4(item.billingPeriod)));
|
|
3280
3673
|
}
|
|
3281
3674
|
if (offeringPresentation.offeringLabel) {
|
|
3282
3675
|
signals.push(offeringPresentation.offeringLabel);
|
|
3283
3676
|
}
|
|
3284
|
-
if (offeringPresentation.placementLabel && offeringPresentation.placementLabel !== "General placement") {
|
|
3285
|
-
signals.push(offeringPresentation.placementLabel);
|
|
3286
|
-
}
|
|
3287
3677
|
return {
|
|
3288
3678
|
fitLabel,
|
|
3289
3679
|
summary,
|
|
@@ -3448,7 +3838,9 @@ function normalizeMoneyLabel(item) {
|
|
|
3448
3838
|
const amount = readString4(item.amount);
|
|
3449
3839
|
const currency = readString4(item.currency);
|
|
3450
3840
|
const billingPeriod = readString4(item.billingPeriod);
|
|
3451
|
-
if (!amount && !currency)
|
|
3841
|
+
if (!amount && !currency) {
|
|
3842
|
+
return buildXmsSurfaceCopy({ locale: item.locale }).priceUnavailableLabel;
|
|
3843
|
+
}
|
|
3452
3844
|
return `${amount} ${currency}${billingPeriod ? ` / ${billingPeriod}` : ""}`.trim();
|
|
3453
3845
|
}
|
|
3454
3846
|
function summarizeXappMonetizationSnapshot(input) {
|
|
@@ -3468,7 +3860,7 @@ function summarizeXappMonetizationSnapshot(input) {
|
|
|
3468
3860
|
present: lifecycle.present,
|
|
3469
3861
|
statusLabel: lifecycle.statusLabel || formatStateLabel(currentSubscription?.status),
|
|
3470
3862
|
tierLabel: formatStateLabel(currentSubscription?.tier),
|
|
3471
|
-
coverageLabel: lifecycle.coverageLabel ||
|
|
3863
|
+
coverageLabel: lifecycle.coverageLabel || buildXmsSurfaceCopy().unknownLabel,
|
|
3472
3864
|
coverageReasonLabel: lifecycle.reasonLabel || buildXmsSurfaceCopy().noOverdueRestrictionLabel,
|
|
3473
3865
|
renewsAt: lifecycle.renewsAt,
|
|
3474
3866
|
expiresAt: lifecycle.expiresAt || lifecycle.currentPeriodEndsAt,
|
|
@@ -3476,8 +3868,11 @@ function summarizeXappMonetizationSnapshot(input) {
|
|
|
3476
3868
|
},
|
|
3477
3869
|
wallet: {
|
|
3478
3870
|
creditsRemaining: readString4(accessProjection?.credits_remaining) || "0",
|
|
3871
|
+
virtualCurrencyLabel: formatVirtualCurrencyLabel(accessProjection?.virtual_currency, {
|
|
3872
|
+
includeCode: true
|
|
3873
|
+
}),
|
|
3479
3874
|
balanceStateLabel: formatStateLabel(accessProjection?.balance_state, "unknown"),
|
|
3480
|
-
currentAccessLabel: hasEffectiveCoverage({ accessProjection, currentSubscription }) ?
|
|
3875
|
+
currentAccessLabel: hasEffectiveCoverage({ accessProjection, currentSubscription }) ? buildXmsSurfaceCopy().yesLabel : buildXmsSurfaceCopy().noLabel
|
|
3481
3876
|
}
|
|
3482
3877
|
};
|
|
3483
3878
|
}
|
|
@@ -3486,6 +3881,19 @@ function summarizeXappMonetizationSnapshot(input) {
|
|
|
3486
3881
|
import { useCallback, useEffect as useEffect5, useMemo as useMemo4, useRef, useState as useState3 } from "react";
|
|
3487
3882
|
import { Link as Link5, useLocation as useLocation3 } from "react-router-dom";
|
|
3488
3883
|
import { Fragment as Fragment4, jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
3884
|
+
function formatVirtualCurrencyLabel2(input, options) {
|
|
3885
|
+
const record = asRecord(input);
|
|
3886
|
+
const code = readString(record.code);
|
|
3887
|
+
const name = readString(record.name);
|
|
3888
|
+
if (name && code && options?.includeCode) return `${name} (${code})`;
|
|
3889
|
+
return name || code || "";
|
|
3890
|
+
}
|
|
3891
|
+
function formatVirtualCurrencyAmount(value, virtualCurrency) {
|
|
3892
|
+
const amount = readString(value);
|
|
3893
|
+
if (!amount) return "";
|
|
3894
|
+
const currencyLabel = formatVirtualCurrencyLabel2(virtualCurrency);
|
|
3895
|
+
return currencyLabel ? `${amount} ${currencyLabel}` : amount;
|
|
3896
|
+
}
|
|
3489
3897
|
function useQueryToken3() {
|
|
3490
3898
|
const loc = useLocation3();
|
|
3491
3899
|
const qs = new URLSearchParams(loc.search);
|
|
@@ -3539,13 +3947,22 @@ function MonetizationPage() {
|
|
|
3539
3947
|
const [xappTitle, setXappTitle] = useState3("");
|
|
3540
3948
|
const visibilityRefreshRef = useRef(0);
|
|
3541
3949
|
const isEmbedded = typeof window !== "undefined" && window.location.pathname.startsWith("/embed");
|
|
3950
|
+
const overview = useMemo4(
|
|
3951
|
+
() => ({
|
|
3952
|
+
apps: items.length,
|
|
3953
|
+
subscriptions: items.filter((item) => item.hasSubscription).length,
|
|
3954
|
+
namedCurrencies: items.filter((item) => item.hasNamedCurrency).length,
|
|
3955
|
+
balances: items.filter((item) => item.hasBalance).length
|
|
3956
|
+
}),
|
|
3957
|
+
[items]
|
|
3958
|
+
);
|
|
3542
3959
|
const refresh = useCallback(async () => {
|
|
3543
3960
|
if (!client.getMyXappMonetization) {
|
|
3544
3961
|
setError(
|
|
3545
3962
|
t(
|
|
3546
3963
|
"activity.unavailable_monetization_title",
|
|
3547
3964
|
void 0,
|
|
3548
|
-
"
|
|
3965
|
+
"Plans and balances are unavailable in this host."
|
|
3549
3966
|
)
|
|
3550
3967
|
);
|
|
3551
3968
|
setItems([]);
|
|
@@ -3593,21 +4010,41 @@ function MonetizationPage() {
|
|
|
3593
4010
|
try {
|
|
3594
4011
|
const next = await Promise.all(
|
|
3595
4012
|
deduped.map(async (item) => {
|
|
3596
|
-
const detail = await
|
|
3597
|
-
|
|
3598
|
-
|
|
4013
|
+
const [detail, state, history] = await Promise.all([
|
|
4014
|
+
client.getCatalogXapp(item.xappId, {
|
|
4015
|
+
installationId: item.installationId || null
|
|
4016
|
+
}),
|
|
4017
|
+
client.getMyXappMonetization(item.xappId, {
|
|
4018
|
+
installationId: item.installationId || null,
|
|
4019
|
+
locale
|
|
4020
|
+
}),
|
|
4021
|
+
typeof client.getMyXappMonetizationHistory === "function" ? client.getMyXappMonetizationHistory(item.xappId, {
|
|
4022
|
+
installationId: item.installationId || null,
|
|
4023
|
+
limit: 20
|
|
4024
|
+
}) : Promise.resolve(null)
|
|
4025
|
+
]);
|
|
3599
4026
|
if (!xappIdFilter && !isMonetizationCandidate(detail)) return null;
|
|
3600
|
-
const state = await client.getMyXappMonetization(item.xappId, {
|
|
3601
|
-
installationId: item.installationId || null,
|
|
3602
|
-
locale
|
|
3603
|
-
});
|
|
3604
4027
|
const summary = summarizeXappMonetizationSnapshot(state);
|
|
4028
|
+
const balanceSummary = summarizeVirtualCurrencyBalances(history).balances.map(
|
|
4029
|
+
(entry) => entry.amountLabel
|
|
4030
|
+
);
|
|
3605
4031
|
const detailRecord = asRecord(detail);
|
|
4032
|
+
const accessProjection = asRecord(asRecord(state).access_projection);
|
|
4033
|
+
const virtualCurrencyLabel = formatVirtualCurrencyLabel2(
|
|
4034
|
+
accessProjection.virtual_currency,
|
|
4035
|
+
{
|
|
4036
|
+
includeCode: true
|
|
4037
|
+
}
|
|
4038
|
+
);
|
|
4039
|
+
const creditsRemainingLabel = formatVirtualCurrencyAmount(
|
|
4040
|
+
accessProjection.credits_remaining,
|
|
4041
|
+
accessProjection.virtual_currency
|
|
4042
|
+
) || summary.wallet.creditsRemaining || "0";
|
|
3606
4043
|
const title = resolveMarketplaceText(asRecord(detailRecord.manifest).title, locale) || readFirstString(asRecord(detailRecord.xapp).name) || item.xappId;
|
|
3607
4044
|
const subtitle = resolveMarketplaceText(asRecord(detailRecord.manifest).summary, locale) || resolveMarketplaceText(asRecord(detailRecord.manifest).description, locale) || t(
|
|
3608
4045
|
"activity.monetization_card_subtitle",
|
|
3609
4046
|
void 0,
|
|
3610
|
-
"
|
|
4047
|
+
"Access, plans, and balances for this app."
|
|
3611
4048
|
);
|
|
3612
4049
|
return {
|
|
3613
4050
|
xappId: item.xappId,
|
|
@@ -3643,8 +4080,13 @@ function MonetizationPage() {
|
|
|
3643
4080
|
"No recurring coverage"
|
|
3644
4081
|
),
|
|
3645
4082
|
renewsAt: summary.currentSubscription.renewsAt || t("activity.monetization_not_scheduled", void 0, "Not scheduled"),
|
|
3646
|
-
|
|
3647
|
-
|
|
4083
|
+
virtualCurrencyLabel,
|
|
4084
|
+
creditsRemaining: creditsRemainingLabel,
|
|
4085
|
+
balanceState: summary.wallet.balanceStateLabel || t("activity.monetization_balance_unknown", void 0, "unknown"),
|
|
4086
|
+
balanceSummary,
|
|
4087
|
+
hasSubscription: summary.currentSubscription.present,
|
|
4088
|
+
hasNamedCurrency: Boolean(virtualCurrencyLabel),
|
|
4089
|
+
hasBalance: Boolean(balanceSummary.length || creditsRemainingLabel)
|
|
3648
4090
|
};
|
|
3649
4091
|
})
|
|
3650
4092
|
);
|
|
@@ -3742,7 +4184,7 @@ function MonetizationPage() {
|
|
|
3742
4184
|
return suffix ? `?${suffix}` : "";
|
|
3743
4185
|
})()
|
|
3744
4186
|
} : null;
|
|
3745
|
-
return /* @__PURE__ */ jsxs5("div", { className: `mx-catalog-container ${isEmbedded ? "is-embedded" : ""}`, children: [
|
|
4187
|
+
return /* @__PURE__ */ jsxs5("div", { className: `mx-catalog-container mx-monetization-page ${isEmbedded ? "is-embedded" : ""}`, children: [
|
|
3746
4188
|
/* @__PURE__ */ jsxs5("div", { className: "mx-breadcrumb", children: [
|
|
3747
4189
|
/* @__PURE__ */ jsx9(Link5, { to: isEmbedded ? "/" : "/marketplace", children: t("common.marketplace", void 0, "Marketplace") }),
|
|
3748
4190
|
xappLink && /* @__PURE__ */ jsxs5(Fragment4, { children: [
|
|
@@ -3811,40 +4253,100 @@ function MonetizationPage() {
|
|
|
3811
4253
|
"."
|
|
3812
4254
|
] })
|
|
3813
4255
|
] }) : error ? /* @__PURE__ */ jsx9("div", { className: "mx-table-container mx-alert mx-alert-error", children: error }) : null,
|
|
3814
|
-
xappIdFilter ? /* @__PURE__ */ jsxs5("div", { className: "mx-subtle-note", children: [
|
|
3815
|
-
t(
|
|
4256
|
+
xappIdFilter ? /* @__PURE__ */ jsx9("div", { className: "mx-table-container mx-subtle-note-card", children: /* @__PURE__ */ jsxs5("div", { className: "mx-subtle-note mx-subtle-note-compact", children: [
|
|
4257
|
+
t(
|
|
4258
|
+
"activity.showing_monetization_for_prefix",
|
|
4259
|
+
void 0,
|
|
4260
|
+
"Showing plans and balances for"
|
|
4261
|
+
),
|
|
3816
4262
|
" ",
|
|
3817
4263
|
/* @__PURE__ */ jsx9("span", { className: "mx-subtle-note-strong", children: xappIdFilter })
|
|
3818
|
-
] }) : /* @__PURE__ */ jsx9("div", { className: "mx-subtle-note", children: showPast ? t(
|
|
4264
|
+
] }) }) : /* @__PURE__ */ jsx9("div", { className: "mx-table-container mx-subtle-note-card", children: /* @__PURE__ */ jsx9("div", { className: "mx-subtle-note mx-subtle-note-compact", children: showPast ? t(
|
|
3819
4265
|
"activity.monetization_overview_hint_with_past",
|
|
3820
4266
|
void 0,
|
|
3821
|
-
"Review current and past
|
|
4267
|
+
"Review current and past plans, subscriptions, and balances across this subject's apps."
|
|
3822
4268
|
) : t(
|
|
3823
4269
|
"activity.monetization_overview_hint",
|
|
3824
4270
|
void 0,
|
|
3825
|
-
"Review current
|
|
3826
|
-
) }),
|
|
3827
|
-
|
|
3828
|
-
|
|
3829
|
-
|
|
3830
|
-
|
|
3831
|
-
|
|
3832
|
-
|
|
3833
|
-
|
|
4271
|
+
"Review current plans, subscriptions, and balances across this subject's apps."
|
|
4272
|
+
) }) }),
|
|
4273
|
+
/* @__PURE__ */ jsx9("section", { className: "mx-table-container mx-monetization-summary-card", children: /* @__PURE__ */ jsxs5("div", { className: "mx-monetization-card-body", children: [
|
|
4274
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-panel-head", children: /* @__PURE__ */ jsxs5("div", { children: [
|
|
4275
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-panel-kicker", children: t("activity.monetization_title", void 0, "Monetization") }),
|
|
4276
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-panel-id", children: t("activity.monetization_summary_title", void 0, "Plans and balances") }),
|
|
4277
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-panel-subtitle", children: t(
|
|
4278
|
+
"activity.monetization_summary_subtitle",
|
|
4279
|
+
void 0,
|
|
4280
|
+
"Review active plans, subscriptions, and balances before opening app details or history."
|
|
4281
|
+
) })
|
|
4282
|
+
] }) }),
|
|
4283
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-record-grid", children: [
|
|
4284
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-record-field", children: [
|
|
4285
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_summary_apps", void 0, "Apps") }),
|
|
4286
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-value is-strong", children: overview.apps })
|
|
4287
|
+
] }),
|
|
4288
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-record-field", children: [
|
|
4289
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_summary_subscriptions", void 0, "Subscriptions") }),
|
|
4290
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-value is-strong", children: overview.subscriptions })
|
|
4291
|
+
] }),
|
|
4292
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-record-field", children: [
|
|
4293
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_summary_balances", void 0, "Balances") }),
|
|
4294
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-value is-strong", children: overview.balances })
|
|
4295
|
+
] }),
|
|
4296
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-record-field", children: [
|
|
4297
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_summary_currencies", void 0, "Named currencies") }),
|
|
4298
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-value is-strong", children: overview.namedCurrencies })
|
|
4299
|
+
] })
|
|
4300
|
+
] })
|
|
4301
|
+
] }) }),
|
|
4302
|
+
busy ? /* @__PURE__ */ jsx9("div", { className: "mx-table-container", children: /* @__PURE__ */ jsx9("div", { className: "mx-loading-center mx-loading-table", children: t(
|
|
4303
|
+
"activity.loading_monetization",
|
|
3834
4304
|
void 0,
|
|
3835
|
-
"
|
|
3836
|
-
) }) : null,
|
|
3837
|
-
!busy && items.length
|
|
4305
|
+
"Loading plans, balances, and recent activity..."
|
|
4306
|
+
) }) }) : null,
|
|
4307
|
+
!busy && !error && items.length === 0 ? /* @__PURE__ */ jsx9("div", { className: "mx-table-container", children: /* @__PURE__ */ jsxs5("div", { className: "mx-empty-catalog", children: [
|
|
4308
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-empty-catalog-icon", children: "\u25CE" }),
|
|
4309
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-empty-catalog-title", children: showPast ? t(
|
|
4310
|
+
"activity.no_monetization_history",
|
|
4311
|
+
void 0,
|
|
4312
|
+
"No plan or balance history was found for this subject."
|
|
4313
|
+
) : t(
|
|
4314
|
+
"activity.no_monetization_current",
|
|
4315
|
+
void 0,
|
|
4316
|
+
"No current plans or balances were found for this subject."
|
|
4317
|
+
) }),
|
|
4318
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-empty-catalog-desc", children: showPast ? t(
|
|
4319
|
+
"activity.monetization_overview_hint_with_past",
|
|
4320
|
+
void 0,
|
|
4321
|
+
"Review current and past plans, subscriptions, and balances across this subject's apps."
|
|
4322
|
+
) : t(
|
|
4323
|
+
"activity.monetization_overview_hint",
|
|
4324
|
+
void 0,
|
|
4325
|
+
"Review current plans, subscriptions, and balances across this subject's apps."
|
|
4326
|
+
) })
|
|
4327
|
+
] }) }) : null,
|
|
4328
|
+
!busy && items.length > 0 ? /* @__PURE__ */ jsx9("div", { className: "mx-record-panel-stack", children: items.map((item) => /* @__PURE__ */ jsx9("section", { className: "mx-table-container mx-monetization-activity-card", children: /* @__PURE__ */ jsxs5("div", { className: "mx-monetization-card-body", children: [
|
|
3838
4329
|
/* @__PURE__ */ jsxs5("div", { className: "mx-record-panel-head", children: [
|
|
3839
4330
|
/* @__PURE__ */ jsxs5("div", { children: [
|
|
3840
4331
|
/* @__PURE__ */ jsx9("div", { className: "mx-record-panel-kicker", children: t("activity.monetization", void 0, "Monetization") }),
|
|
3841
4332
|
/* @__PURE__ */ jsx9("div", { className: "mx-record-panel-id", children: item.title }),
|
|
3842
|
-
/* @__PURE__ */ jsx9("div", { className: "mx-record-panel-subtitle", children: item.subtitle })
|
|
4333
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-panel-subtitle", children: item.subtitle }),
|
|
4334
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-monetization-card-badges", children: [
|
|
4335
|
+
/* @__PURE__ */ jsx9("span", { className: "mx-badge mx-badge-warning", children: item.accessLabel }),
|
|
4336
|
+
/* @__PURE__ */ jsx9(
|
|
4337
|
+
"span",
|
|
4338
|
+
{
|
|
4339
|
+
className: `mx-badge ${item.hasSubscription ? "mx-badge-success" : "mx-badge-warning"}`,
|
|
4340
|
+
children: item.subscriptionStatus
|
|
4341
|
+
}
|
|
4342
|
+
),
|
|
4343
|
+
/* @__PURE__ */ jsx9("span", { className: "mx-tag", children: item.virtualCurrencyLabel || t("activity.monetization_no_currency", void 0, "No named currency") })
|
|
4344
|
+
] })
|
|
3843
4345
|
] }),
|
|
3844
4346
|
/* @__PURE__ */ jsxs5("div", { className: "mx-record-actions mx-record-actions-monetization", children: [
|
|
3845
4347
|
/* @__PURE__ */ jsxs5("div", { className: "mx-action-group", children: [
|
|
3846
|
-
/* @__PURE__ */ jsx9(Link5, { to: item.plansHref, className: "mx-btn mx-btn-primary", children: t("activity.monetization_open_plans", void 0, "
|
|
3847
|
-
/* @__PURE__ */ jsx9(Link5, { to: item.historyHref, className: "mx-btn mx-btn-secondary", children: t("activity.monetization_open_history", void 0, "
|
|
4348
|
+
/* @__PURE__ */ jsx9(Link5, { to: item.plansHref, className: "mx-btn mx-btn-primary", children: t("activity.monetization_open_plans", void 0, "View plans") }),
|
|
4349
|
+
/* @__PURE__ */ jsx9(Link5, { to: item.historyHref, className: "mx-btn mx-btn-secondary", children: t("activity.monetization_open_history", void 0, "View history") })
|
|
3848
4350
|
] }),
|
|
3849
4351
|
/* @__PURE__ */ jsxs5("div", { className: "mx-action-group", children: [
|
|
3850
4352
|
/* @__PURE__ */ jsx9(Link5, { to: item.detailHref, className: "mx-btn mx-btn-ghost", children: t("common.view_app_details", void 0, "View app details") }),
|
|
@@ -3864,47 +4366,57 @@ function MonetizationPage() {
|
|
|
3864
4366
|
})()
|
|
3865
4367
|
},
|
|
3866
4368
|
className: "mx-btn mx-btn-ghost",
|
|
3867
|
-
children: t("activity.monetization_focus_xapp", void 0, "
|
|
4369
|
+
children: t("activity.monetization_focus_xapp", void 0, "Only this app")
|
|
3868
4370
|
}
|
|
3869
4371
|
) : null
|
|
3870
4372
|
] })
|
|
3871
4373
|
] })
|
|
3872
4374
|
] }),
|
|
3873
|
-
/* @__PURE__ */ jsxs5("div", { className: "mx-record-grid", children: [
|
|
4375
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-record-grid mx-monetization-card-primary-grid", children: [
|
|
3874
4376
|
/* @__PURE__ */ jsxs5("div", { className: "mx-record-field", children: [
|
|
3875
|
-
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_access_label", void 0, "
|
|
4377
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_access_label", void 0, "Access") }),
|
|
3876
4378
|
/* @__PURE__ */ jsx9("div", { className: "mx-record-value is-strong", children: item.accessLabel })
|
|
3877
4379
|
] }),
|
|
3878
4380
|
/* @__PURE__ */ jsxs5("div", { className: "mx-record-field", children: [
|
|
3879
|
-
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_plan_label", void 0, "
|
|
4381
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_plan_label", void 0, "Plan") }),
|
|
3880
4382
|
/* @__PURE__ */ jsx9("div", { className: "mx-record-value is-strong", children: item.tierLabel })
|
|
3881
4383
|
] }),
|
|
3882
|
-
/* @__PURE__ */ jsxs5("div", { className: "mx-record-field", children: [
|
|
3883
|
-
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_credits_label", void 0, "Credits remaining") }),
|
|
3884
|
-
/* @__PURE__ */ jsx9("div", { className: "mx-record-value is-strong", children: item.creditsRemaining })
|
|
3885
|
-
] }),
|
|
3886
4384
|
/* @__PURE__ */ jsxs5("div", { className: "mx-record-field", children: [
|
|
3887
4385
|
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_subscription_label", void 0, "Subscription") }),
|
|
3888
4386
|
/* @__PURE__ */ jsx9("div", { className: "mx-record-value", children: item.subscriptionStatus })
|
|
3889
4387
|
] }),
|
|
3890
4388
|
/* @__PURE__ */ jsxs5("div", { className: "mx-record-field", children: [
|
|
3891
|
-
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.
|
|
3892
|
-
/* @__PURE__ */ jsx9("div", { className: "mx-record-value", children: item.
|
|
4389
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_credits_label", void 0, "Balance") }),
|
|
4390
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-value is-strong", children: item.creditsRemaining })
|
|
3893
4391
|
] }),
|
|
3894
4392
|
/* @__PURE__ */ jsxs5("div", { className: "mx-record-field", children: [
|
|
3895
4393
|
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_renews_at", void 0, "Renews at") }),
|
|
3896
4394
|
/* @__PURE__ */ jsx9("div", { className: "mx-record-value", children: item.renewsAt })
|
|
4395
|
+
] })
|
|
4396
|
+
] }),
|
|
4397
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-monetization-card-secondary", children: [
|
|
4398
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-monetization-card-secondary-row", children: [
|
|
4399
|
+
/* @__PURE__ */ jsx9("span", { className: "mx-monetization-card-secondary-label", children: t("xapp.virtual_currency_label", void 0, "Currency") }),
|
|
4400
|
+
/* @__PURE__ */ jsx9("span", { className: "mx-monetization-card-secondary-value", children: item.virtualCurrencyLabel || "\u2014" })
|
|
3897
4401
|
] }),
|
|
3898
|
-
/* @__PURE__ */ jsxs5("div", { className: "mx-
|
|
3899
|
-
/* @__PURE__ */ jsx9("
|
|
3900
|
-
/* @__PURE__ */ jsx9("
|
|
4402
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-monetization-card-secondary-row", children: [
|
|
4403
|
+
/* @__PURE__ */ jsx9("span", { className: "mx-monetization-card-secondary-label", children: t("activity.monetization_coverage_label", void 0, "Renewal state") }),
|
|
4404
|
+
/* @__PURE__ */ jsx9("span", { className: "mx-monetization-card-secondary-value", children: item.subscriptionCoverage })
|
|
3901
4405
|
] }),
|
|
3902
|
-
/* @__PURE__ */ jsxs5("div", { className: "mx-
|
|
3903
|
-
/* @__PURE__ */ jsx9("
|
|
3904
|
-
/* @__PURE__ */ jsx9("
|
|
4406
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-monetization-card-secondary-row", children: [
|
|
4407
|
+
/* @__PURE__ */ jsx9("span", { className: "mx-monetization-card-secondary-label", children: t("activity.monetization_balance_state", void 0, "Balance status") }),
|
|
4408
|
+
/* @__PURE__ */ jsx9("span", { className: "mx-monetization-card-secondary-value", children: item.balanceState })
|
|
4409
|
+
] }),
|
|
4410
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-monetization-card-secondary-row", children: [
|
|
4411
|
+
/* @__PURE__ */ jsx9("span", { className: "mx-monetization-card-secondary-label", children: t("activity.monetization_source_label", void 0, "Origin") }),
|
|
4412
|
+
/* @__PURE__ */ jsx9("span", { className: "mx-monetization-card-secondary-value", children: item.sourceLabel })
|
|
3905
4413
|
] })
|
|
3906
|
-
] })
|
|
3907
|
-
|
|
4414
|
+
] }),
|
|
4415
|
+
item.balanceSummary.length > 0 ? /* @__PURE__ */ jsxs5("div", { className: "mx-monetization-card-balance-strip", children: [
|
|
4416
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-record-label", children: t("activity.monetization_balances_label", void 0, "Balances") }),
|
|
4417
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-tag-list", children: item.balanceSummary.map((entry) => /* @__PURE__ */ jsx9("span", { className: "mx-tag", children: entry }, `${item.xappId}:${entry}`)) })
|
|
4418
|
+
] }) : null
|
|
4419
|
+
] }) }, item.xappId)) }) : null
|
|
3908
4420
|
] });
|
|
3909
4421
|
}
|
|
3910
4422
|
|
|
@@ -6456,6 +6968,30 @@ function formatDateTime2(value, locale) {
|
|
|
6456
6968
|
return parsed.toISOString();
|
|
6457
6969
|
}
|
|
6458
6970
|
}
|
|
6971
|
+
function readVirtualCurrencyDefinition2(value) {
|
|
6972
|
+
const record = asRecord6(value);
|
|
6973
|
+
if (!record) return null;
|
|
6974
|
+
const code = readString6(record.code);
|
|
6975
|
+
const name = readString6(record.name);
|
|
6976
|
+
if (!code && !name) return null;
|
|
6977
|
+
return record;
|
|
6978
|
+
}
|
|
6979
|
+
function formatVirtualCurrencyLabel3(value, options) {
|
|
6980
|
+
const record = readVirtualCurrencyDefinition2(value);
|
|
6981
|
+
if (!record) return "";
|
|
6982
|
+
const code = readString6(record.code);
|
|
6983
|
+
const name = readString6(record.name);
|
|
6984
|
+
if (options?.includeCode && name && code && name.toLowerCase() !== code.toLowerCase()) {
|
|
6985
|
+
return `${name} (${code})`;
|
|
6986
|
+
}
|
|
6987
|
+
return name || code;
|
|
6988
|
+
}
|
|
6989
|
+
function formatVirtualCurrencyAmount2(value, virtualCurrency) {
|
|
6990
|
+
const amount = readString6(value);
|
|
6991
|
+
if (!amount) return "";
|
|
6992
|
+
const currencyLabel = formatVirtualCurrencyLabel3(virtualCurrency);
|
|
6993
|
+
return currencyLabel ? `${amount} ${currencyLabel}` : amount;
|
|
6994
|
+
}
|
|
6459
6995
|
function normalizeUsageCreditSummary(value) {
|
|
6460
6996
|
const summary = asRecord6(value);
|
|
6461
6997
|
if (!summary) return null;
|
|
@@ -6527,7 +7063,7 @@ function buildMonetizationHookSummaryItems(manifest) {
|
|
|
6527
7063
|
);
|
|
6528
7064
|
baseItems.push({
|
|
6529
7065
|
slug: "xms_after_payment_completed",
|
|
6530
|
-
label: defaultInvoiceRef ? `
|
|
7066
|
+
label: defaultInvoiceRef ? `Payment completed \xB7 ${defaultInvoiceRef}` : "Payment completed",
|
|
6531
7067
|
trigger: "after:payment_completed",
|
|
6532
7068
|
headless: true,
|
|
6533
7069
|
blocking: false,
|
|
@@ -6543,7 +7079,7 @@ function buildMonetizationHookSummaryItems(manifest) {
|
|
|
6543
7079
|
const invoiceRef = readString6(config.invoice_ref ?? config.invoiceRef);
|
|
6544
7080
|
baseItems.push({
|
|
6545
7081
|
slug: `xms_after_payment_completed_${paymentGuardRef}`,
|
|
6546
|
-
label: invoiceRef ? `
|
|
7082
|
+
label: invoiceRef ? `Payment completed \xB7 ${paymentGuardRef} \xB7 ${invoiceRef}` : `Payment completed \xB7 ${paymentGuardRef}`,
|
|
6547
7083
|
trigger: "after:payment_completed",
|
|
6548
7084
|
headless: true,
|
|
6549
7085
|
blocking: false,
|
|
@@ -7343,13 +7879,34 @@ function XappDetailPageContent(props) {
|
|
|
7343
7879
|
const expiresAt = formatDateTime2(subscriptionLifecycle.expiresAt, locale);
|
|
7344
7880
|
const lifecyclePreviewAt = lifecyclePreviewEnabled ? formatDateTime2(routePreviewAt, locale) : "";
|
|
7345
7881
|
const creditsRemaining = readString6(monetizationAccess?.credits_remaining);
|
|
7882
|
+
const accessVirtualCurrencyLabel = formatVirtualCurrencyLabel3(
|
|
7883
|
+
monetizationAccess?.virtual_currency,
|
|
7884
|
+
{
|
|
7885
|
+
includeCode: true
|
|
7886
|
+
}
|
|
7887
|
+
);
|
|
7888
|
+
const creditsRemainingLabel = formatVirtualCurrencyAmount2(
|
|
7889
|
+
monetizationAccess?.credits_remaining,
|
|
7890
|
+
monetizationAccess?.virtual_currency
|
|
7891
|
+
);
|
|
7892
|
+
const currentBalanceSummary = useMemo9(() => {
|
|
7893
|
+
const historySource = asRecord6(monetizationHistory)?.history ?? monetizationHistory;
|
|
7894
|
+
const summarized = summarizeVirtualCurrencyBalances({
|
|
7895
|
+
history: historySource
|
|
7896
|
+
}).balances;
|
|
7897
|
+
if (summarized.length > 0) {
|
|
7898
|
+
return summarized.map((item) => item.amountLabel).filter(Boolean);
|
|
7899
|
+
}
|
|
7900
|
+
if (creditsRemainingLabel) return [creditsRemainingLabel];
|
|
7901
|
+
return [];
|
|
7902
|
+
}, [creditsRemainingLabel, monetizationHistory]);
|
|
7346
7903
|
const accessState = resolveMarketplaceDefaultAccessState({
|
|
7347
7904
|
projection: monetizationAccessProjection,
|
|
7348
7905
|
hasCatalogMonetization,
|
|
7349
7906
|
availableLabel: t("xapp.access_state_available", void 0, "available")
|
|
7350
7907
|
});
|
|
7351
7908
|
const hasMonetizationState = Boolean(
|
|
7352
|
-
currentTier || accessState || subscriptionStatus || subscriptionCoverage || subscriptionReason || overdueSince || expiryBoundaryAt || renewsAt || currentPeriodEndsAt || cancelledAt || expiresAt || lifecyclePreviewAt || creditsRemaining || additiveUnlockLabels.length > 0
|
|
7909
|
+
currentTier || accessState || subscriptionStatus || subscriptionCoverage || subscriptionReason || overdueSince || expiryBoundaryAt || renewsAt || currentPeriodEndsAt || cancelledAt || expiresAt || lifecyclePreviewAt || accessVirtualCurrencyLabel || currentBalanceSummary.length > 0 || creditsRemaining || additiveUnlockLabels.length > 0
|
|
7353
7910
|
);
|
|
7354
7911
|
const manifestScreenshots = Array.isArray(manifest?.screenshots) ? manifest.screenshots.map((shot) => readString6(shot)).filter(Boolean) : [];
|
|
7355
7912
|
const manifestTags = Array.isArray(manifest?.tags) ? manifest.tags.map((tag) => readString6(tag)).filter(Boolean) : [];
|
|
@@ -7362,7 +7919,7 @@ function XappDetailPageContent(props) {
|
|
|
7362
7919
|
});
|
|
7363
7920
|
}
|
|
7364
7921
|
const currentAccessCard = hasMonetizationState ? /* @__PURE__ */ jsxs11("div", { className: "mx-sidebar-card", children: [
|
|
7365
|
-
/* @__PURE__ */ jsx15("h3", { className: "mx-section-title mx-detail-sidebar-title", children: t("xapp.current_access_title", void 0, "Current
|
|
7922
|
+
/* @__PURE__ */ jsx15("h3", { className: "mx-section-title mx-detail-sidebar-title", children: t("xapp.current_access_title", void 0, "Current access") }),
|
|
7366
7923
|
currentTier ? /* @__PURE__ */ jsxs11("div", { className: "mx-meta-item", children: [
|
|
7367
7924
|
/* @__PURE__ */ jsx15("span", { className: "mx-meta-label", children: t("xapp.current_plan_label", void 0, "Current plan") }),
|
|
7368
7925
|
/* @__PURE__ */ jsx15("span", { className: "mx-meta-value", children: currentTier })
|
|
@@ -7372,7 +7929,7 @@ function XappDetailPageContent(props) {
|
|
|
7372
7929
|
/* @__PURE__ */ jsx15("span", { className: "mx-meta-value", children: accessState })
|
|
7373
7930
|
] }) : null,
|
|
7374
7931
|
subscriptionStatus ? /* @__PURE__ */ jsxs11("div", { className: "mx-meta-item", children: [
|
|
7375
|
-
/* @__PURE__ */ jsx15("span", { className: "mx-meta-label", children: t("xapp.subscription_status_label", void 0, "Subscription
|
|
7932
|
+
/* @__PURE__ */ jsx15("span", { className: "mx-meta-label", children: t("xapp.subscription_status_label", void 0, "Subscription state") }),
|
|
7376
7933
|
/* @__PURE__ */ jsx15("span", { className: "mx-meta-value", children: subscriptionStatus })
|
|
7377
7934
|
] }) : null,
|
|
7378
7935
|
subscriptionCoverage ? /* @__PURE__ */ jsxs11("div", { className: "mx-meta-item", children: [
|
|
@@ -7411,9 +7968,17 @@ function XappDetailPageContent(props) {
|
|
|
7411
7968
|
/* @__PURE__ */ jsx15("span", { className: "mx-meta-label", children: t("xapp.lifecycle_preview_at_label", void 0, "Preview as of") }),
|
|
7412
7969
|
/* @__PURE__ */ jsx15("span", { className: "mx-meta-value", children: lifecyclePreviewAt })
|
|
7413
7970
|
] }) : null,
|
|
7971
|
+
accessVirtualCurrencyLabel ? /* @__PURE__ */ jsxs11("div", { className: "mx-meta-item", children: [
|
|
7972
|
+
/* @__PURE__ */ jsx15("span", { className: "mx-meta-label", children: t("xapp.virtual_currency_label", void 0, "Currency") }),
|
|
7973
|
+
/* @__PURE__ */ jsx15("span", { className: "mx-meta-value", children: accessVirtualCurrencyLabel })
|
|
7974
|
+
] }) : null,
|
|
7975
|
+
currentBalanceSummary.length > 0 ? /* @__PURE__ */ jsxs11("div", { className: "mx-meta-item mx-meta-item-top", children: [
|
|
7976
|
+
/* @__PURE__ */ jsx15("span", { className: "mx-meta-label", children: t("xapp.current_balances_label", void 0, "Balances now") }),
|
|
7977
|
+
/* @__PURE__ */ jsx15("div", { className: "mx-meta-value mx-meta-stack-sm", children: currentBalanceSummary.map((label, index) => /* @__PURE__ */ jsx15("div", { children: label }, `${label}:${index}`)) })
|
|
7978
|
+
] }) : null,
|
|
7414
7979
|
creditsRemaining ? /* @__PURE__ */ jsxs11("div", { className: "mx-meta-item", children: [
|
|
7415
|
-
/* @__PURE__ */ jsx15("span", { className: "mx-meta-label", children: t("xapp.credits_remaining_label", void 0, "
|
|
7416
|
-
/* @__PURE__ */ jsx15("span", { className: "mx-meta-value", children: creditsRemaining })
|
|
7980
|
+
/* @__PURE__ */ jsx15("span", { className: "mx-meta-label", children: t("xapp.credits_remaining_label", void 0, "Balance") }),
|
|
7981
|
+
/* @__PURE__ */ jsx15("span", { className: "mx-meta-value", children: creditsRemainingLabel || creditsRemaining })
|
|
7417
7982
|
] }) : null,
|
|
7418
7983
|
additiveUnlockLabels.length > 0 ? /* @__PURE__ */ jsxs11("div", { className: "mx-meta-item mx-meta-item-top", children: [
|
|
7419
7984
|
/* @__PURE__ */ jsx15("span", { className: "mx-meta-label", children: t("xapp.add_on_unlocks_label", void 0, "Add-on unlocks") }),
|
|
@@ -7422,7 +7987,7 @@ function XappDetailPageContent(props) {
|
|
|
7422
7987
|
lifecyclePreviewAt ? /* @__PURE__ */ jsx15("div", { className: "mx-subtle-note", children: t(
|
|
7423
7988
|
"xapp.lifecycle_preview_hint",
|
|
7424
7989
|
void 0,
|
|
7425
|
-
"Subscription
|
|
7990
|
+
"Subscription state is being previewed for the selected time."
|
|
7426
7991
|
) }) : null,
|
|
7427
7992
|
subscriptionActionError ? /* @__PURE__ */ jsx15("div", { className: "mx-subtle-note", children: subscriptionActionError }) : null,
|
|
7428
7993
|
monetizationSubscription?.id && (canRefreshSubscriptionAction && typeof client.refreshMyXappSubscriptionContractState === "function" || canCancelSubscriptionAction && subscriptionLifecycle.canCancel && typeof client.cancelMyXappSubscriptionContract === "function") ? /* @__PURE__ */ jsxs11("div", { className: "mx-detail-actions", children: [
|
|
@@ -7452,6 +8017,7 @@ function XappDetailPageContent(props) {
|
|
|
7452
8017
|
const plansCard = selectedPaywallRenderModel ? /* @__PURE__ */ jsxs11("div", { className: "mx-sidebar-card", ref: plansSectionRef, children: [
|
|
7453
8018
|
/* @__PURE__ */ jsx15("h3", { className: "mx-section-title mx-detail-sidebar-title", children: t("xapp.plan_options_title", void 0, "Plans") }),
|
|
7454
8019
|
/* @__PURE__ */ jsxs11("div", { className: "mx-paywall-card-head", children: [
|
|
8020
|
+
/* @__PURE__ */ jsx15("div", { className: "mx-paywall-card-kicker", children: t("xapp.plan_options_title", void 0, "Plans") }),
|
|
7455
8021
|
/* @__PURE__ */ jsx15("div", { className: "mx-paywall-card-title", children: selectedPaywallRenderModel.paywallLabel }),
|
|
7456
8022
|
selectedPaywallRenderModel.summary ? /* @__PURE__ */ jsx15("div", { className: "mx-paywall-card-summary", children: selectedPaywallRenderModel.summary }) : null
|
|
7457
8023
|
] }),
|
|
@@ -7466,6 +8032,19 @@ function XappDetailPageContent(props) {
|
|
|
7466
8032
|
const isCurrentPackage = purchasePolicy.status === "current_recurring_plan";
|
|
7467
8033
|
const isOwnedAdditive = purchasePolicy.status === "owned_additive_unlock";
|
|
7468
8034
|
const isAdditiveCompanion = purchasePolicy.transitionKind === "buy_additive_unlock" && subscriptionStatus === "active";
|
|
8035
|
+
const packageActionNote = isOwnedAdditive ? t(
|
|
8036
|
+
"xapp.owned_unlock_note",
|
|
8037
|
+
void 0,
|
|
8038
|
+
"This add-on is already included in the current access."
|
|
8039
|
+
) : isCurrentPackage ? t(
|
|
8040
|
+
"xapp.current_plan_note",
|
|
8041
|
+
void 0,
|
|
8042
|
+
"This plan is already active for this app."
|
|
8043
|
+
) : t(
|
|
8044
|
+
"xapp.checkout_hint",
|
|
8045
|
+
void 0,
|
|
8046
|
+
"Checkout opens in a secure hosted payment page managed by the platform."
|
|
8047
|
+
);
|
|
7469
8048
|
return /* @__PURE__ */ jsxs11(
|
|
7470
8049
|
"div",
|
|
7471
8050
|
{
|
|
@@ -7490,17 +8069,24 @@ function XappDetailPageContent(props) {
|
|
|
7490
8069
|
isAdditiveCompanion ? /* @__PURE__ */ jsx15("div", { className: "mx-paywall-card-summary", children: t(
|
|
7491
8070
|
"xapp.additive_unlock_message",
|
|
7492
8071
|
void 0,
|
|
7493
|
-
"This one-time unlock is additive. It adds access on top of the active
|
|
8072
|
+
"This one-time unlock is additive. It adds access on top of the active subscription instead of replacing it."
|
|
7494
8073
|
) }) : null,
|
|
7495
|
-
|
|
7496
|
-
"
|
|
7497
|
-
|
|
7498
|
-
|
|
7499
|
-
|
|
7500
|
-
|
|
7501
|
-
|
|
7502
|
-
|
|
7503
|
-
|
|
8074
|
+
/* @__PURE__ */ jsxs11("div", { className: "mx-paywall-card-package-actions", children: [
|
|
8075
|
+
typeof client.prepareMyXappPurchaseIntent === "function" && typeof client.createMyXappPurchasePaymentSession === "function" && hasSubject && canMutate ? /* @__PURE__ */ jsx15(
|
|
8076
|
+
"button",
|
|
8077
|
+
{
|
|
8078
|
+
className: `mx-btn ${purchasePolicy.canPurchase && !checkoutBusyPackageSlug && !isOwnedAdditive && !isCurrentPackage ? "mx-btn-primary" : "mx-btn-secondary"}`,
|
|
8079
|
+
disabled: !purchasePolicy.canPurchase || checkoutBusyPackageSlug === normalizedPackageSlug,
|
|
8080
|
+
onClick: () => void startPackageCheckout(item.packageSlug),
|
|
8081
|
+
children: isOwnedAdditive ? t("xapp.owned_unlock_active", void 0, "Owned unlock active") : isCurrentPackage ? t("xapp.current_plan_active", void 0, "Current plan active") : checkoutBusyPackageSlug === normalizedPackageSlug ? t("xapp.checkout_starting", void 0, "Starting checkout...") : isAdditiveCompanion ? t(
|
|
8082
|
+
"xapp.additive_unlock_action",
|
|
8083
|
+
void 0,
|
|
8084
|
+
"Purchase add-on unlock"
|
|
8085
|
+
) : t("xapp.checkout_action", void 0, "Start checkout")
|
|
8086
|
+
}
|
|
8087
|
+
) : null,
|
|
8088
|
+
/* @__PURE__ */ jsx15("div", { className: "mx-paywall-card-package-note", children: packageActionNote })
|
|
8089
|
+
] })
|
|
7504
8090
|
]
|
|
7505
8091
|
},
|
|
7506
8092
|
`${item.packageId || item.packageSlug || normalizedPackageSlug}:${index}`
|
|
@@ -7520,11 +8106,11 @@ function XappDetailPageContent(props) {
|
|
|
7520
8106
|
subtitle: title ? t(
|
|
7521
8107
|
"xapp.history_route_subtitle",
|
|
7522
8108
|
{ title },
|
|
7523
|
-
`
|
|
8109
|
+
`Balances, recent activity, and purchases for ${title}.`
|
|
7524
8110
|
) : t(
|
|
7525
8111
|
"xapp.history_route_subtitle_default",
|
|
7526
8112
|
void 0,
|
|
7527
|
-
"
|
|
8113
|
+
"Balances, recent activity, and purchases for this app."
|
|
7528
8114
|
),
|
|
7529
8115
|
locale,
|
|
7530
8116
|
showHeader: false
|
|
@@ -7535,7 +8121,15 @@ function XappDetailPageContent(props) {
|
|
|
7535
8121
|
if (plansOnlyMode) {
|
|
7536
8122
|
return /* @__PURE__ */ jsxs11("div", { className: `mx-detail-container ${isEmbedded ? "is-embedded" : ""}`, children: [
|
|
7537
8123
|
error && /* @__PURE__ */ jsx15("div", { className: "mx-detail-error", children: error }),
|
|
7538
|
-
busy && !data ? /* @__PURE__ */ jsx15("div", { className: "mx-sidebar-card mx-detail-empty", "aria-busy": "true", children:
|
|
8124
|
+
busy && !data ? /* @__PURE__ */ jsx15("div", { className: "mx-sidebar-card mx-detail-empty mx-plans-route-empty", "aria-busy": "true", children: /* @__PURE__ */ jsxs11("div", { className: "mx-empty-catalog", children: [
|
|
8125
|
+
/* @__PURE__ */ jsx15("div", { className: "mx-empty-catalog-icon", children: "\u25CE" }),
|
|
8126
|
+
/* @__PURE__ */ jsx15("div", { className: "mx-empty-catalog-title", children: t("xapp.plans_loading_title", void 0, "Loading plans") }),
|
|
8127
|
+
/* @__PURE__ */ jsx15("div", { className: "mx-empty-catalog-desc", children: t(
|
|
8128
|
+
"xapp.plans_loading_desc",
|
|
8129
|
+
void 0,
|
|
8130
|
+
"Preparing published plans, balances, and current access for this app."
|
|
8131
|
+
) })
|
|
8132
|
+
] }) }) : /* @__PURE__ */ jsxs11("div", { className: `mx-plans-route ${widgetHostedPlansMode ? "is-widget-hosted" : ""}`, children: [
|
|
7539
8133
|
!widgetHostedPlansMode ? /* @__PURE__ */ jsxs11("div", { className: "mx-breadcrumb", children: [
|
|
7540
8134
|
/* @__PURE__ */ jsx15(Link10, { to: marketplaceRootHref, children: t("common.marketplace", void 0, "Marketplace") }),
|
|
7541
8135
|
/* @__PURE__ */ jsx15("span", { className: "mx-breadcrumb-sep", children: "/" }),
|
|
@@ -7548,19 +8142,19 @@ function XappDetailPageContent(props) {
|
|
|
7548
8142
|
/* @__PURE__ */ jsx15("div", { className: "mx-plans-route-subtitle", children: routeSurfaceView === "history" ? title ? t(
|
|
7549
8143
|
"xapp.history_route_subtitle",
|
|
7550
8144
|
{ title },
|
|
7551
|
-
`
|
|
8145
|
+
`Balances, recent activity, and purchases for ${title}.`
|
|
7552
8146
|
) : t(
|
|
7553
8147
|
"xapp.history_route_subtitle_default",
|
|
7554
8148
|
void 0,
|
|
7555
|
-
"
|
|
8149
|
+
"Balances, recent activity, and purchases for this app."
|
|
7556
8150
|
) : title ? t(
|
|
7557
8151
|
"xapp.plans_route_subtitle",
|
|
7558
8152
|
{ title },
|
|
7559
|
-
`
|
|
8153
|
+
`Access, plans, and balances for ${title}.`
|
|
7560
8154
|
) : t(
|
|
7561
8155
|
"xapp.plans_route_subtitle_default",
|
|
7562
8156
|
void 0,
|
|
7563
|
-
"
|
|
8157
|
+
"Access, plans, and balances for this app."
|
|
7564
8158
|
) })
|
|
7565
8159
|
] }) : null,
|
|
7566
8160
|
/* @__PURE__ */ jsx15("div", { className: "mx-plans-route-grid", children: /* @__PURE__ */ jsxs11("div", { className: "mx-plans-route-main", children: [
|
|
@@ -7571,11 +8165,15 @@ function XappDetailPageContent(props) {
|
|
|
7571
8165
|
className: "mx-history-route-surface",
|
|
7572
8166
|
dangerouslySetInnerHTML: { __html: historySurfaceHtml }
|
|
7573
8167
|
}
|
|
7574
|
-
) : plansCard || /* @__PURE__ */ jsx15("div", { className: "mx-sidebar-card mx-detail-empty", children:
|
|
7575
|
-
"
|
|
7576
|
-
void 0,
|
|
7577
|
-
"
|
|
7578
|
-
|
|
8168
|
+
) : plansCard || /* @__PURE__ */ jsx15("div", { className: "mx-sidebar-card mx-detail-empty mx-plans-route-empty", children: /* @__PURE__ */ jsxs11("div", { className: "mx-empty-catalog", children: [
|
|
8169
|
+
/* @__PURE__ */ jsx15("div", { className: "mx-empty-catalog-icon", children: "\u25CE" }),
|
|
8170
|
+
/* @__PURE__ */ jsx15("div", { className: "mx-empty-catalog-title", children: t("xapp.no_plans_available", void 0, "No plans are currently available.") }),
|
|
8171
|
+
/* @__PURE__ */ jsx15("div", { className: "mx-empty-catalog-desc", children: t(
|
|
8172
|
+
"xapp.no_plans_available_desc",
|
|
8173
|
+
void 0,
|
|
8174
|
+
"Published plans will appear here when this app exposes a paywall."
|
|
8175
|
+
) })
|
|
8176
|
+
] }) })
|
|
7579
8177
|
] }) })
|
|
7580
8178
|
] })
|
|
7581
8179
|
] });
|
|
@@ -9620,7 +10218,7 @@ function PublisherDetailPage() {
|
|
|
9620
10218
|
{
|
|
9621
10219
|
to: detailTo,
|
|
9622
10220
|
className: "mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link",
|
|
9623
|
-
children: "View details"
|
|
10221
|
+
children: t("catalog.view_details", void 0, "View details")
|
|
9624
10222
|
}
|
|
9625
10223
|
) })
|
|
9626
10224
|
] }, x.id);
|