@saasicat/ui-vue 1.0.0-rc.26 → 1.0.0-rc.28

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.
Files changed (142) hide show
  1. package/dist/.build-stamp +1 -1
  2. package/dist/assets/ui-vue.css +102 -79
  3. package/dist/auth/SuperAdminLoginPage.js +3 -3
  4. package/dist/auth/SuperAdminSetupWizard.js +1 -1
  5. package/dist/{catalog-DjTxLQ9e.d.cts → catalog-DheYUn-o.d.cts} +310 -2
  6. package/dist/{catalog-DjTxLQ9e.d.ts → catalog-DheYUn-o.d.ts} +310 -2
  7. package/dist/{chunk-45OUR67K.js → chunk-C6IYEQYN.js} +2 -2
  8. package/dist/{chunk-YZHDWHUG.js → chunk-RDLOR3OP.js} +551 -17
  9. package/dist/{chunk-CTPV6QAX.js → chunk-UKVR6TKU.js} +20 -5
  10. package/dist/{chunk-MPJ3OBXT.js → chunk-UPJS7YM6.js} +503 -213
  11. package/dist/{chunk-SZGZ7ID4.js → chunk-XA77XIXF.js} +98 -4
  12. package/dist/chunks/{AdminBanner.vue_vue_type_script_setup_true_lang-7G_-pS3m.js → AdminBanner.vue_vue_type_script_setup_true_lang-Cg5koVbd.js} +1 -1
  13. package/dist/chunks/{AdminErrorBanner.vue_vue_type_script_setup_true_lang-lPCZKAkX.js → AdminErrorBanner.vue_vue_type_script_setup_true_lang-COcrl54s.js} +2 -2
  14. package/dist/chunks/{AdminFormDialog.vue_vue_type_script_setup_true_lang-tNNM8TY6.js → AdminFormDialog.vue_vue_type_script_setup_true_lang-D2RmGI_h.js} +2 -2
  15. package/dist/chunks/{AdminPaginator.vue_vue_type_script_setup_true_lang-pARWNY-d.js → AdminPaginator.vue_vue_type_script_setup_true_lang-DMYuHxfc.js} +2 -2
  16. package/dist/chunks/{AdminRefreshBtn.vue_vue_type_script_setup_true_lang-DWH7Us0X.js → AdminRefreshBtn.vue_vue_type_script_setup_true_lang-CLDGpS5m.js} +1 -1
  17. package/dist/chunks/{AdminRowActions.vue_vue_type_script_setup_true_lang-Dfaz5g9T.js → AdminRowActions.vue_vue_type_script_setup_true_lang-CeCi-QHz.js} +1 -1
  18. package/dist/chunks/{AdminTable.vue_vue_type_script_setup_true_lang-CHkqg7GK.js → AdminTable.vue_vue_type_script_setup_true_lang-DFrk-6sf.js} +3 -3
  19. package/dist/chunks/{PromoCodeEditDialog.vue_vue_type_script_setup_true_lang-C1iWkPiL.js → PromoCodeEditDialog.vue_vue_type_script_setup_true_lang-Bf0qsDAg.js} +3 -3
  20. package/dist/chunks/{QBtn-dPYkeXdK.js → QBtn-BmvaNeph.js} +5 -0
  21. package/dist/chunks/QBtnToggle-PLGimm18.js +168 -0
  22. package/dist/chunks/{QMenu-CfaLYm7U.js → QMenu-BRv0uZAB.js} +1 -1
  23. package/dist/chunks/{QSelect-Ps7BfNTg.js → QSelect-DFW72oRN.js} +2 -2
  24. package/dist/chunks/{QTooltip-fAls14xe.js → QTooltip-DspACL8-.js} +1 -1
  25. package/dist/chunks/{RetirementProgressPills-CQw_JKuc.js → RetirementProgressPills-BuyZJxlr.js} +2 -2
  26. package/dist/chunks/{SuperAdminSetupWizard-wqMniPGT.js → SuperAdminSetupWizard-DDxJm6bJ.js} +2 -2
  27. package/dist/chunks/{TenantActionConfirmDialog-DWCgYDrE.js → TenantActionConfirmDialog-D4on9Ar3.js} +1 -1
  28. package/dist/client/index.cjs +693 -39
  29. package/dist/client/index.d.cts +31 -38
  30. package/dist/client/index.d.ts +31 -38
  31. package/dist/client/index.js +27 -5
  32. package/dist/index.cjs +1230 -294
  33. package/dist/index.d.cts +5 -5
  34. package/dist/index.d.ts +5 -5
  35. package/dist/index.js +45 -7
  36. package/dist/{batch-column-fetcher-C-Mk6GyL.d.ts → invoice-cancellation-BGGaER3E.d.ts} +65 -5
  37. package/dist/{batch-column-fetcher-QqdEquaq.d.cts → invoice-cancellation-CBPt205G.d.cts} +65 -5
  38. package/dist/layouts/AdminLayout.js +4 -4
  39. package/dist/pages/AdminManifestErrorPage.js +1 -1
  40. package/dist/pages/AuditPage.js +4 -4
  41. package/dist/pages/BundlesPage.js +11 -11
  42. package/dist/pages/DashboardPage.js +2 -2
  43. package/dist/pages/DiscoveryPage.js +8 -8
  44. package/dist/pages/EmailHistoryPage.js +5 -5
  45. package/dist/pages/FeatureWithdrawalsPage.js +8 -8
  46. package/dist/pages/MaintenancePage.js +6 -6
  47. package/dist/pages/MarketingCatalogPage.js +5 -5
  48. package/dist/pages/PilotsPage.js +3 -3
  49. package/dist/pages/PlanReviewPage.js +2 -2
  50. package/dist/pages/PlanVersionEditorPage.js +2 -2
  51. package/dist/pages/PlansPage.js +9 -9
  52. package/dist/pages/PlatformEmailPage.js +5 -5
  53. package/dist/pages/PromoCodeDetailPage.js +3 -3
  54. package/dist/pages/PromoCodesPage.js +5 -5
  55. package/dist/pages/ReconciliationPage.js +243 -0
  56. package/dist/pages/SettingsPage.js +5 -5
  57. package/dist/pages/SubscriptionsPage.js +1 -1
  58. package/dist/pages/TenantDetailPage.js +1030 -46
  59. package/dist/pages/TenantsPage.js +4 -4
  60. package/dist/pages/UsersPage.js +2 -2
  61. package/dist/pages/index.js +3 -1
  62. package/dist/quasar/index.cjs +552 -21
  63. package/dist/quasar/index.d.cts +2 -2
  64. package/dist/quasar/index.d.ts +2 -2
  65. package/dist/quasar/index.js +2 -2
  66. package/dist/{resource-registry-BcvMmoRZ.d.cts → resource-registry-BusXVc1H.d.cts} +2 -2
  67. package/dist/{resource-registry-BME8Nfda.d.ts → resource-registry-DBJDimni.d.ts} +2 -2
  68. package/dist/testing/mount-with-quasar.cjs +3 -2
  69. package/dist/testing/mount-with-quasar.js +4 -2
  70. package/dist/ui/data/AdminPaginator.js +1 -1
  71. package/dist/ui/data/AdminRowActions.js +1 -1
  72. package/dist/ui/data/AdminTable.js +1 -1
  73. package/dist/ui/feedback/AdminBanner.js +1 -1
  74. package/dist/ui/feedback/AdminErrorBanner.js +1 -1
  75. package/dist/ui/feedback/AdminRefreshBtn.js +1 -1
  76. package/dist/ui/overlay/AdminConfirmDialog.js +2 -2
  77. package/dist/ui/overlay/AdminFormDialog.js +1 -1
  78. package/dist/ui/overlay/MfaPromptDialog.js +1 -1
  79. package/dist/ui/page/LocaleSwitcher.js +2 -2
  80. package/dist/ui/page/ThemeSwitcher.js +2 -2
  81. package/dist/vue/index.cjs +1174 -280
  82. package/dist/vue/index.d.cts +132 -6
  83. package/dist/vue/index.d.ts +132 -6
  84. package/dist/vue/index.js +20 -4
  85. package/package.json +5 -5
  86. package/src/client/admin-error.ts +14 -4
  87. package/src/client/http/axios-http-client.ts +27 -1
  88. package/src/client/http/fetch-http-client.ts +7 -4
  89. package/src/client/i18n/messages/errors.ts +13 -5
  90. package/src/client/i18n/messages/nav.ts +2 -0
  91. package/src/client/i18n/messages/reconciliation.ts +82 -0
  92. package/src/client/i18n/messages/tenants.ts +306 -0
  93. package/src/client/i18n/messages.ts +3 -0
  94. package/src/client/index.ts +2 -0
  95. package/src/client/invoice-cancellation.ts +123 -0
  96. package/src/client/nav-builder.ts +3 -0
  97. package/src/client/resources/index.ts +3 -0
  98. package/src/client/resources/reconciliation.resource.ts +56 -0
  99. package/src/client/resources/resource-request.ts +81 -9
  100. package/src/client/resources/tenants.resource.ts +152 -4
  101. package/src/client/save-file.ts +62 -0
  102. package/src/client/types.ts +11 -0
  103. package/src/features/bundle/BundleVersionInlineEditor.vue +1 -1
  104. package/src/features/bundle/VersionDiffPreview.vue +1 -1
  105. package/src/features/marketing/MarketingPromotionsTab.vue +2 -2
  106. package/src/features/reconciliation/ReconciliationCloseDialog.vue +79 -0
  107. package/src/index.ts +7 -0
  108. package/src/internal/plans-page/types.ts +1 -1
  109. package/src/internal/tenant-detail/InvoiceCancellationDialog.vue +326 -0
  110. package/src/internal/tenant-detail/InvoiceCancellationLines.vue +148 -0
  111. package/src/internal/tenant-detail/SubscriberPayoutDialog.vue +113 -0
  112. package/src/internal/tenant-detail/TenantContracts.vue +121 -0
  113. package/src/internal/tenant-detail/TenantCredits.vue +136 -0
  114. package/src/internal/tenant-detail/TenantPayments.vue +166 -0
  115. package/src/internal/tenant-detail/subscriber-payout.ts +41 -0
  116. package/src/pages/BundlesPage.vue +1 -1
  117. package/src/pages/DiscoveryPage.vue +6 -2
  118. package/src/pages/PlanReviewPage.vue +1 -1
  119. package/src/pages/PlanVersionEditorPage.vue +1 -1
  120. package/src/pages/PlansPage.vue +2 -2
  121. package/src/pages/ReconciliationPage.vue +156 -0
  122. package/src/pages/TenantDetailPage.vue +62 -0
  123. package/src/pages/index.ts +2 -0
  124. package/src/testing/mount-with-quasar.ts +4 -2
  125. package/src/vue/index.ts +7 -0
  126. package/src/vue/resource-registry.ts +1 -1
  127. package/src/vue/super-admin-context.ts +1 -1
  128. package/src/vue/use-api-list.ts +1 -1
  129. package/src/vue/use-entitlement.ts +1 -1
  130. package/src/vue/use-file-download.ts +50 -0
  131. package/src/vue/use-invoice-cancellation.ts +238 -0
  132. package/src/vue/use-reconciliation.ts +112 -0
  133. package/src/vue/use-tenant-billing-catalog.ts +1 -1
  134. package/src/vue/use-tenant-billing-details.ts +1 -1
  135. package/src/vue/use-tenant-billing.ts +1 -1
  136. package/src/vue/use-tenant-contracts.ts +54 -0
  137. package/src/vue/use-tenant-credits.ts +89 -0
  138. package/src/vue/use-tenant-downloads.ts +43 -0
  139. package/src/vue/use-tenant-feature-withdrawals.ts +1 -1
  140. package/src/vue/use-tenant-manifest.ts +1 -1
  141. package/src/vue/use-tenant-payment-method.ts +1 -1
  142. package/src/vue/use-tenant-payments.ts +39 -0
package/dist/.build-stamp CHANGED
@@ -1 +1 @@
1
- abbb0ddb267172b2754e1884961635642205b3828c3542f223979a571d11ee40
1
+ 25d9bdf300afc11738864821176eeb1949f0583fdb0bc06d0c8dbdd7019c8c7c
@@ -1362,12 +1362,12 @@ code[data-v-aab75c67] {
1362
1362
  flex: 0 0 auto;
1363
1363
  }
1364
1364
 
1365
- .bve[data-v-de5f3b46] {
1365
+ .bve[data-v-4a97f4cc] {
1366
1366
  display: flex;
1367
1367
  flex-direction: column;
1368
1368
  gap: var(--sa-space-4);
1369
1369
  }
1370
- .bve-overlap-banner[data-v-de5f3b46] {
1370
+ .bve-overlap-banner[data-v-4a97f4cc] {
1371
1371
  display: flex;
1372
1372
  align-items: flex-start;
1373
1373
  gap: var(--sa-space-3);
@@ -1379,25 +1379,25 @@ code[data-v-aab75c67] {
1379
1379
  font-size: var(--sa-text-md);
1380
1380
  line-height: 1.5;
1381
1381
  }
1382
- .bve-overlap-ico[data-v-de5f3b46] {
1382
+ .bve-overlap-ico[data-v-4a97f4cc] {
1383
1383
  font-weight: 700;
1384
1384
  }
1385
- .bve-grid[data-v-de5f3b46] {
1385
+ .bve-grid[data-v-4a97f4cc] {
1386
1386
  display: grid;
1387
1387
  grid-template-columns: 1fr 1fr;
1388
1388
  gap: var(--sa-space-5);
1389
1389
  }
1390
1390
  @media (max-width: 1023.98px) {
1391
- .bve-grid[data-v-de5f3b46] {
1391
+ .bve-grid[data-v-4a97f4cc] {
1392
1392
  grid-template-columns: 1fr;
1393
1393
  }
1394
1394
  }
1395
- .bve-col[data-v-de5f3b46] {
1395
+ .bve-col[data-v-4a97f4cc] {
1396
1396
  display: flex;
1397
1397
  flex-direction: column;
1398
1398
  gap: var(--sa-space-3);
1399
1399
  }
1400
- .bve-section-label[data-v-de5f3b46] {
1400
+ .bve-section-label[data-v-4a97f4cc] {
1401
1401
  display: flex;
1402
1402
  align-items: baseline;
1403
1403
  justify-content: space-between;
@@ -1409,57 +1409,57 @@ code[data-v-aab75c67] {
1409
1409
  color: var(--sa-color-fg-secondary);
1410
1410
  padding-top: var(--sa-space-1);
1411
1411
  }
1412
- .bve-section-label--top[data-v-de5f3b46] {
1412
+ .bve-section-label--top[data-v-4a97f4cc] {
1413
1413
  margin-top: var(--sa-space-3);
1414
1414
  }
1415
- .bve-section-count[data-v-de5f3b46] {
1415
+ .bve-section-count[data-v-4a97f4cc] {
1416
1416
  font-size: var(--sa-text-xs);
1417
1417
  font-weight: 600;
1418
1418
  color: var(--sa-color-fg-subtle);
1419
1419
  text-transform: none;
1420
1420
  letter-spacing: 0;
1421
1421
  }
1422
- .bve-row[data-v-de5f3b46] {
1422
+ .bve-row[data-v-4a97f4cc] {
1423
1423
  display: grid;
1424
1424
  gap: var(--sa-space-3);
1425
1425
  }
1426
- .bve-row--pricing[data-v-de5f3b46] {
1426
+ .bve-row--pricing[data-v-4a97f4cc] {
1427
1427
  grid-template-columns: 1fr 1fr auto;
1428
1428
  align-items: end;
1429
1429
  }
1430
- .bve-row--validity[data-v-de5f3b46] {
1430
+ .bve-row--validity[data-v-4a97f4cc] {
1431
1431
  grid-template-columns: 1fr 1fr;
1432
1432
  }
1433
1433
  /* The row a money field and its unit share. */
1434
- .bve-input-grp[data-v-de5f3b46] {
1434
+ .bve-input-grp[data-v-4a97f4cc] {
1435
1435
  display: flex;
1436
1436
  align-items: center;
1437
1437
  gap: var(--sa-space-2);
1438
1438
  }
1439
- .bve-input-unit[data-v-de5f3b46] {
1439
+ .bve-input-unit[data-v-4a97f4cc] {
1440
1440
  color: var(--sa-color-fg-muted);
1441
1441
  font-size: var(--sa-text-sm);
1442
1442
  }
1443
1443
 
1444
1444
  /* A width, not a look. */
1445
- .bve-money[data-v-de5f3b46] {
1445
+ .bve-money[data-v-4a97f4cc] {
1446
1446
  max-width: 120px;
1447
1447
  }
1448
- .bve-field[data-v-de5f3b46] {
1448
+ .bve-field[data-v-4a97f4cc] {
1449
1449
  display: flex;
1450
1450
  flex-direction: column;
1451
1451
  gap: var(--sa-space-2);
1452
1452
  }
1453
- .bve-field-label[data-v-de5f3b46] {
1453
+ .bve-field-label[data-v-4a97f4cc] {
1454
1454
  font-size: var(--sa-text-xs);
1455
1455
  color: var(--sa-color-fg-secondary);
1456
1456
  font-weight: 600;
1457
1457
  }
1458
- .bve-field-hint[data-v-de5f3b46] {
1458
+ .bve-field-hint[data-v-4a97f4cc] {
1459
1459
  font-size: var(--sa-text-xs);
1460
1460
  color: var(--sa-color-fg-subtle);
1461
1461
  }
1462
- .bve-input-grp .bve-savings[data-v-de5f3b46] {
1462
+ .bve-input-grp .bve-savings[data-v-4a97f4cc] {
1463
1463
  font-size: var(--sa-text-sm);
1464
1464
  color: var(--sa-color-fg-secondary);
1465
1465
  display: inline-flex;
@@ -1467,7 +1467,7 @@ code[data-v-aab75c67] {
1467
1467
  gap: var(--sa-space-3);
1468
1468
  padding-bottom: var(--sa-space-2);
1469
1469
  }
1470
- .bve-savings-pill[data-v-de5f3b46] {
1470
+ .bve-savings-pill[data-v-4a97f4cc] {
1471
1471
  padding: var(--sa-space-0) var(--sa-space-2);
1472
1472
  background: var(--sa-color-positive-surface-strong);
1473
1473
  color: var(--sa-color-positive-fg);
@@ -1476,19 +1476,19 @@ code[data-v-aab75c67] {
1476
1476
  font-size: var(--sa-text-xs);
1477
1477
  letter-spacing: var(--sa-tracking-wide);
1478
1478
  }
1479
- .bve-toggle-row[data-v-de5f3b46] {
1479
+ .bve-toggle-row[data-v-4a97f4cc] {
1480
1480
  display: inline-flex;
1481
1481
  align-items: center;
1482
1482
  gap: var(--sa-space-3);
1483
1483
  cursor: pointer;
1484
1484
  font-size: var(--sa-text-md);
1485
1485
  }
1486
- .bve-actions[data-v-de5f3b46] {
1486
+ .bve-actions[data-v-4a97f4cc] {
1487
1487
  display: flex;
1488
1488
  justify-content: flex-end;
1489
1489
  gap: var(--sa-space-3);
1490
1490
  }
1491
- .bve-error[data-v-de5f3b46] {
1491
+ .bve-error[data-v-4a97f4cc] {
1492
1492
  padding: var(--sa-space-3) var(--sa-space-4);
1493
1493
  background: var(--sa-color-negative-surface);
1494
1494
  border: 1px solid var(--sa-color-negative-border);
@@ -2520,32 +2520,32 @@ code[data-v-aab75c67] {
2520
2520
  font-size: var(--sa-text-sm);
2521
2521
  }
2522
2522
 
2523
- .mc-promo[data-v-4df738db] {
2523
+ .mc-promo[data-v-74b70818] {
2524
2524
  display: flex;
2525
2525
  flex-direction: column;
2526
2526
  gap: var(--sa-space-4);
2527
2527
  }
2528
- .mc-promo-head[data-v-4df738db] {
2528
+ .mc-promo-head[data-v-74b70818] {
2529
2529
  display: flex;
2530
2530
  align-items: center;
2531
2531
  gap: var(--sa-space-5);
2532
2532
  }
2533
- .mc-promo-head-text[data-v-4df738db] {
2533
+ .mc-promo-head-text[data-v-74b70818] {
2534
2534
  flex: 1;
2535
2535
  }
2536
- .mc-promo-title[data-v-4df738db] {
2536
+ .mc-promo-title[data-v-74b70818] {
2537
2537
  font-size: var(--sa-text-lg);
2538
2538
  font-weight: 700;
2539
2539
  }
2540
- .mc-promo-subtitle[data-v-4df738db] {
2540
+ .mc-promo-subtitle[data-v-74b70818] {
2541
2541
  font-size: var(--sa-text-sm);
2542
2542
  color: var(--sa-color-fg-muted);
2543
2543
  }
2544
- .mc-promo-stats[data-v-4df738db] {
2544
+ .mc-promo-stats[data-v-74b70818] {
2545
2545
  display: flex;
2546
2546
  gap: var(--sa-space-3);
2547
2547
  }
2548
- .mc-promo-stat[data-v-4df738db] {
2548
+ .mc-promo-stat[data-v-74b70818] {
2549
2549
  font-size: var(--sa-text-xs);
2550
2550
  font-weight: 600;
2551
2551
  padding: var(--sa-space-1) var(--sa-space-3);
@@ -2553,41 +2553,41 @@ code[data-v-aab75c67] {
2553
2553
  background: var(--sa-color-border-soft);
2554
2554
  color: var(--sa-color-fg-secondary);
2555
2555
  }
2556
- .mc-promo-stat.active[data-v-4df738db] {
2556
+ .mc-promo-stat.active[data-v-74b70818] {
2557
2557
  background: var(--sa-color-positive-surface-strong);
2558
2558
  color: var(--sa-color-positive-fg);
2559
2559
  }
2560
- .mc-promo-stat.scheduled[data-v-4df738db] {
2560
+ .mc-promo-stat.scheduled[data-v-74b70818] {
2561
2561
  background: var(--sa-color-scheduled-surface);
2562
2562
  color: var(--sa-color-scheduled-fg);
2563
2563
  }
2564
- .mc-promo-stat.expired[data-v-4df738db] {
2564
+ .mc-promo-stat.expired[data-v-74b70818] {
2565
2565
  background: var(--sa-color-border-soft);
2566
2566
  color: var(--sa-color-fg-subtle);
2567
2567
  }
2568
- .mc-promo-timeline[data-v-4df738db] {
2568
+ .mc-promo-timeline[data-v-74b70818] {
2569
2569
  background: var(--sa-color-bg-surface);
2570
2570
  border: 1px solid var(--sa-color-border);
2571
2571
  border-radius: var(--sa-radius-tile);
2572
2572
  padding: var(--sa-space-4) var(--sa-space-4);
2573
2573
  }
2574
- .mc-promo-timeline-head[data-v-4df738db] {
2574
+ .mc-promo-timeline-head[data-v-74b70818] {
2575
2575
  font-size: var(--sa-text-xs);
2576
2576
  color: var(--sa-color-fg-muted);
2577
2577
  margin-bottom: var(--sa-space-2);
2578
2578
  }
2579
- .mc-promo-timeline-chart[data-v-4df738db] {
2579
+ .mc-promo-timeline-chart[data-v-74b70818] {
2580
2580
  position: relative;
2581
2581
  border-left: 1px solid var(--sa-color-border);
2582
2582
  }
2583
- .mc-promo-tick[data-v-4df738db] {
2583
+ .mc-promo-tick[data-v-74b70818] {
2584
2584
  position: absolute;
2585
2585
  top: 0;
2586
2586
  bottom: 0;
2587
2587
  width: 1px;
2588
2588
  background: var(--sa-color-border-soft);
2589
2589
  }
2590
- .mc-promo-tick-label[data-v-4df738db] {
2590
+ .mc-promo-tick-label[data-v-74b70818] {
2591
2591
  position: absolute;
2592
2592
  bottom: 0;
2593
2593
  left: var(--sa-space-1);
@@ -2595,14 +2595,14 @@ code[data-v-aab75c67] {
2595
2595
  color: var(--sa-color-fg-subtle);
2596
2596
  white-space: nowrap;
2597
2597
  }
2598
- .mc-promo-today[data-v-4df738db] {
2598
+ .mc-promo-today[data-v-74b70818] {
2599
2599
  position: absolute;
2600
2600
  top: 0;
2601
2601
  bottom: var(--sa-space-5);
2602
2602
  width: 0;
2603
2603
  border-left: 2px dashed var(--sa-color-negative-strong);
2604
2604
  }
2605
- .mc-promo-today span[data-v-4df738db] {
2605
+ .mc-promo-today span[data-v-74b70818] {
2606
2606
  position: absolute;
2607
2607
  top: calc(-1 * var(--sa-space-1));
2608
2608
  left: var(--sa-space-1);
@@ -2612,7 +2612,7 @@ code[data-v-aab75c67] {
2612
2612
  }
2613
2613
  /* A `<button>` wearing a bar: the browser's own button chrome would draw a
2614
2614
  * border and a background over the promotion colour the row is identified by. */
2615
- .mc-promo-bar[data-v-4df738db] {
2615
+ .mc-promo-bar[data-v-74b70818] {
2616
2616
  position: absolute;
2617
2617
  height: 20px;
2618
2618
  border: 0;
@@ -2626,17 +2626,17 @@ code[data-v-aab75c67] {
2626
2626
  font: inherit;
2627
2627
  text-align: left;
2628
2628
  }
2629
- .mc-promo-bar.expired[data-v-4df738db] {
2629
+ .mc-promo-bar.expired[data-v-74b70818] {
2630
2630
  opacity: 0.45;
2631
2631
  }
2632
- .mc-promo-bar-label[data-v-4df738db] {
2632
+ .mc-promo-bar-label[data-v-74b70818] {
2633
2633
  font-size: var(--sa-text-2xs);
2634
2634
  color: var(--sa-color-fg-on-accent);
2635
2635
  font-weight: 600;
2636
2636
  padding: 0 var(--sa-space-2);
2637
2637
  white-space: nowrap;
2638
2638
  }
2639
- .mc-promo-empty[data-v-4df738db] {
2639
+ .mc-promo-empty[data-v-74b70818] {
2640
2640
  padding: var(--sa-space-7);
2641
2641
  text-align: center;
2642
2642
  color: var(--sa-color-fg-subtle);
@@ -2644,7 +2644,7 @@ code[data-v-aab75c67] {
2644
2644
  border: 1px dashed var(--sa-color-border-strong);
2645
2645
  border-radius: var(--sa-radius-tile);
2646
2646
  }
2647
- .mc-promo-list[data-v-4df738db] {
2647
+ .mc-promo-list[data-v-74b70818] {
2648
2648
  display: flex;
2649
2649
  flex-direction: column;
2650
2650
  gap: var(--sa-space-2);
@@ -2654,33 +2654,33 @@ code[data-v-aab75c67] {
2654
2654
  * row used to state its own, and the editor below it stated a second, matching
2655
2655
  * set so the two would read as one block. They were separated by the list's 6px
2656
2656
  * gap all along. */
2657
- .mc-promo-row[data-v-4df738db] {
2657
+ .mc-promo-row[data-v-74b70818] {
2658
2658
  display: flex;
2659
2659
  align-items: center;
2660
2660
  gap: var(--sa-space-4);
2661
2661
  }
2662
- .mc-promo-color[data-v-4df738db] {
2662
+ .mc-promo-color[data-v-74b70818] {
2663
2663
  width: 10px;
2664
2664
  height: 28px;
2665
2665
  border-radius: var(--sa-radius-badge);
2666
2666
  flex-shrink: 0;
2667
2667
  }
2668
- .mc-promo-row-main[data-v-4df738db] {
2668
+ .mc-promo-row-main[data-v-74b70818] {
2669
2669
  flex: 1;
2670
2670
  min-width: 0;
2671
2671
  }
2672
- .mc-promo-row-title[data-v-4df738db] {
2672
+ .mc-promo-row-title[data-v-74b70818] {
2673
2673
  font-size: var(--sa-text-md);
2674
2674
  font-weight: 600;
2675
2675
  }
2676
- .mc-promo-row-sub[data-v-4df738db] {
2676
+ .mc-promo-row-sub[data-v-74b70818] {
2677
2677
  display: flex;
2678
2678
  gap: var(--sa-space-2);
2679
2679
  align-items: center;
2680
2680
  flex-wrap: wrap;
2681
2681
  margin-top: var(--sa-space-1);
2682
2682
  }
2683
- .mc-promo-typechip[data-v-4df738db] {
2683
+ .mc-promo-typechip[data-v-74b70818] {
2684
2684
  font-size: var(--sa-text-2xs);
2685
2685
  font-weight: 700;
2686
2686
  background: var(--sa-color-accent-surface-strong);
@@ -2688,56 +2688,56 @@ code[data-v-aab75c67] {
2688
2688
  padding: var(--sa-space-0) var(--sa-space-2);
2689
2689
  border-radius: var(--sa-radius-badge);
2690
2690
  }
2691
- .mc-promo-planchip[data-v-4df738db] {
2691
+ .mc-promo-planchip[data-v-74b70818] {
2692
2692
  font-size: var(--sa-text-2xs);
2693
2693
  background: var(--sa-color-border-soft);
2694
2694
  color: var(--sa-color-fg-secondary);
2695
2695
  padding: var(--sa-space-0) var(--sa-space-2);
2696
2696
  border-radius: var(--sa-radius-badge);
2697
2697
  }
2698
- .mc-promo-muted[data-v-4df738db] {
2698
+ .mc-promo-muted[data-v-74b70818] {
2699
2699
  font-size: var(--sa-text-xs);
2700
2700
  color: var(--sa-color-fg-subtle);
2701
2701
  }
2702
- .mc-promo-row-when[data-v-4df738db] {
2702
+ .mc-promo-row-when[data-v-74b70818] {
2703
2703
  font-size: var(--sa-text-xs);
2704
2704
  color: var(--sa-color-fg-muted);
2705
2705
  text-align: right;
2706
2706
  }
2707
- .mc-promo-cycle[data-v-4df738db] {
2707
+ .mc-promo-cycle[data-v-74b70818] {
2708
2708
  display: block;
2709
2709
  color: var(--sa-color-fg-subtle);
2710
2710
  }
2711
- .mc-promo-status[data-v-4df738db] {
2711
+ .mc-promo-status[data-v-74b70818] {
2712
2712
  font-size: var(--sa-text-2xs);
2713
2713
  font-weight: 700;
2714
2714
  text-transform: uppercase;
2715
2715
  padding: var(--sa-space-1) var(--sa-space-3);
2716
2716
  border-radius: var(--sa-radius-badge);
2717
2717
  }
2718
- .mc-promo-status.active[data-v-4df738db] {
2718
+ .mc-promo-status.active[data-v-74b70818] {
2719
2719
  background: var(--sa-color-positive-surface-strong);
2720
2720
  color: var(--sa-color-positive-fg);
2721
2721
  }
2722
- .mc-promo-status.scheduled[data-v-4df738db] {
2722
+ .mc-promo-status.scheduled[data-v-74b70818] {
2723
2723
  background: var(--sa-color-scheduled-surface);
2724
2724
  color: var(--sa-color-scheduled-fg);
2725
2725
  }
2726
- .mc-promo-status.expired[data-v-4df738db] {
2726
+ .mc-promo-status.expired[data-v-74b70818] {
2727
2727
  background: var(--sa-color-border-soft);
2728
2728
  color: var(--sa-color-fg-subtle);
2729
2729
  }
2730
- .mc-promo-editor-grid[data-v-4df738db] {
2730
+ .mc-promo-editor-grid[data-v-74b70818] {
2731
2731
  display: grid;
2732
2732
  grid-template-columns: 1fr 1fr;
2733
2733
  gap: var(--sa-space-5);
2734
2734
  }
2735
- .mc-promo-editor-col[data-v-4df738db] {
2735
+ .mc-promo-editor-col[data-v-74b70818] {
2736
2736
  display: flex;
2737
2737
  flex-direction: column;
2738
2738
  gap: var(--sa-space-2);
2739
2739
  }
2740
- .mc-promo-label[data-v-4df738db] {
2740
+ .mc-promo-label[data-v-74b70818] {
2741
2741
  font-size: var(--sa-text-2xs);
2742
2742
  font-weight: 700;
2743
2743
  text-transform: uppercase;
@@ -2746,20 +2746,20 @@ code[data-v-aab75c67] {
2746
2746
  margin-top: var(--sa-space-2);
2747
2747
  }
2748
2748
  /* A width, not a look: the look comes from the theme's `field.css`. */
2749
- .mc-promo-input--sm[data-v-4df738db] {
2749
+ .mc-promo-input--sm[data-v-74b70818] {
2750
2750
  max-width: 90px;
2751
2751
  }
2752
- .mc-promo-valrow[data-v-4df738db] {
2752
+ .mc-promo-valrow[data-v-74b70818] {
2753
2753
  display: flex;
2754
2754
  gap: var(--sa-space-3);
2755
2755
  align-items: center;
2756
2756
  }
2757
- .mc-promo-typegrid[data-v-4df738db] {
2757
+ .mc-promo-typegrid[data-v-74b70818] {
2758
2758
  display: flex;
2759
2759
  flex-wrap: wrap;
2760
2760
  gap: var(--sa-space-2);
2761
2761
  }
2762
- .mc-promo-typeopt[data-v-4df738db] {
2762
+ .mc-promo-typeopt[data-v-74b70818] {
2763
2763
  border: 1px solid var(--sa-color-border-strong);
2764
2764
  background: var(--sa-color-bg-surface);
2765
2765
  border-radius: var(--sa-radius-badge);
@@ -2767,18 +2767,18 @@ code[data-v-aab75c67] {
2767
2767
  font-size: var(--sa-text-sm);
2768
2768
  cursor: pointer;
2769
2769
  }
2770
- .mc-promo-typeopt.active[data-v-4df738db] {
2770
+ .mc-promo-typeopt.active[data-v-74b70818] {
2771
2771
  border-color: var(--sa-color-accent);
2772
2772
  background: var(--sa-color-accent-surface-strong);
2773
2773
  color: var(--sa-color-accent-strong);
2774
2774
  font-weight: 600;
2775
2775
  }
2776
- .mc-promo-planlist[data-v-4df738db] {
2776
+ .mc-promo-planlist[data-v-74b70818] {
2777
2777
  display: flex;
2778
2778
  flex-direction: column;
2779
2779
  gap: var(--sa-space-2);
2780
2780
  }
2781
- .mc-promo-planopt[data-v-4df738db] {
2781
+ .mc-promo-planopt[data-v-74b70818] {
2782
2782
  display: flex;
2783
2783
  justify-content: space-between;
2784
2784
  border: 1px solid var(--sa-color-border-strong);
@@ -2788,15 +2788,15 @@ code[data-v-aab75c67] {
2788
2788
  font-size: var(--sa-text-sm);
2789
2789
  cursor: pointer;
2790
2790
  }
2791
- .mc-promo-planopt.active[data-v-4df738db] {
2791
+ .mc-promo-planopt.active[data-v-74b70818] {
2792
2792
  border-color: var(--sa-color-accent);
2793
2793
  background: var(--sa-color-accent-surface-strong);
2794
2794
  }
2795
- .mc-promo-planopt code[data-v-4df738db] {
2795
+ .mc-promo-planopt code[data-v-74b70818] {
2796
2796
  color: var(--sa-color-fg-subtle);
2797
2797
  font-size: var(--sa-text-2xs);
2798
2798
  }
2799
- .mc-promo-i18n-block[data-v-4df738db] {
2799
+ .mc-promo-i18n-block[data-v-74b70818] {
2800
2800
  display: flex;
2801
2801
  flex-direction: column;
2802
2802
  gap: var(--sa-space-2);
@@ -2805,7 +2805,7 @@ code[data-v-aab75c67] {
2805
2805
  border-radius: var(--sa-radius-field);
2806
2806
  background: var(--sa-color-bg-surface);
2807
2807
  }
2808
- .mc-promo-i18n-code[data-v-4df738db] {
2808
+ .mc-promo-i18n-code[data-v-74b70818] {
2809
2809
  font-size: var(--sa-text-2xs);
2810
2810
  font-weight: 700;
2811
2811
  background: var(--sa-color-border-soft);
@@ -2813,21 +2813,21 @@ code[data-v-aab75c67] {
2813
2813
  border-radius: var(--sa-radius-badge);
2814
2814
  align-self: flex-start;
2815
2815
  }
2816
- .mc-promo-colors[data-v-4df738db] {
2816
+ .mc-promo-colors[data-v-74b70818] {
2817
2817
  display: flex;
2818
2818
  gap: var(--sa-space-2);
2819
2819
  }
2820
- .mc-promo-colorbtn[data-v-4df738db] {
2820
+ .mc-promo-colorbtn[data-v-74b70818] {
2821
2821
  width: 24px;
2822
2822
  height: 24px;
2823
2823
  border-radius: var(--sa-radius-badge);
2824
2824
  border: 2px solid transparent;
2825
2825
  cursor: pointer;
2826
2826
  }
2827
- .mc-promo-colorbtn.active[data-v-4df738db] {
2827
+ .mc-promo-colorbtn.active[data-v-74b70818] {
2828
2828
  border-color: var(--sa-color-fg-heading);
2829
2829
  }
2830
- .mc-promo-delete[data-v-4df738db] {
2830
+ .mc-promo-delete[data-v-74b70818] {
2831
2831
  margin-top: var(--sa-space-4);
2832
2832
  align-self: flex-start;
2833
2833
  border: 1px solid var(--sa-color-negative-border);
@@ -6653,7 +6653,7 @@ code[data-v-aab75c67] {
6653
6653
  color: var(--sa-color-fg-body);
6654
6654
  }
6655
6655
 
6656
- .sa-plans[data-v-fb32912c] {
6656
+ .sa-plans[data-v-8fd69fcd] {
6657
6657
  position: relative;
6658
6658
  }
6659
6659
 
@@ -6916,6 +6916,29 @@ code[data-v-aab75c67] {
6916
6916
  font-size: var(--sa-text-md);
6917
6917
  }
6918
6918
 
6919
+ .sa-invoice-cancel__lines[data-v-c2083b50] {
6920
+ list-style: none;
6921
+ margin: var(--sa-space-2) 0 0;
6922
+ padding: 0;
6923
+ display: grid;
6924
+ gap: var(--sa-space-2);
6925
+ }
6926
+ .sa-invoice-cancel__line[data-v-c2083b50] {
6927
+ display: flex;
6928
+ justify-content: space-between;
6929
+ gap: var(--sa-space-3);
6930
+ }
6931
+
6932
+ .sa-invoice-cancel__figures[data-v-47173c72] {
6933
+ display: grid;
6934
+ grid-template-columns: max-content 1fr;
6935
+ gap: var(--sa-space-1) var(--sa-space-3);
6936
+ margin: var(--sa-space-2) 0 0;
6937
+ }
6938
+ .sa-invoice-cancel__figures dd[data-v-47173c72] {
6939
+ margin: 0;
6940
+ }
6941
+
6919
6942
  .sa-tenant-subscriber__note[data-v-2e8dc554] {
6920
6943
  color: var(--sa-color-fg-muted);
6921
6944
  margin: 0;
@@ -6925,7 +6948,7 @@ code[data-v-aab75c67] {
6925
6948
  padding-left: var(--sa-space-4);
6926
6949
  }
6927
6950
 
6928
- code[data-v-2e4e6573] {
6951
+ code[data-v-73185124] {
6929
6952
  background: var(--sa-color-bg-sunken);
6930
6953
  padding: var(--sa-space-0) var(--sa-space-2);
6931
6954
  border-radius: var(--sa-radius-badge);
@@ -1,9 +1,9 @@
1
1
  import { Q as QInput } from "../chunks/QInput-DSJ17rXI.js";
2
2
  import { Q as QIcon } from "../chunks/QIcon-DYJLcd13.js";
3
- import { Q as QBtn } from "../chunks/QBtn-dPYkeXdK.js";
4
- import { S as SuperAdminSetupWizard, Q as QForm } from "../chunks/SuperAdminSetupWizard-wqMniPGT.js";
3
+ import { Q as QBtn } from "../chunks/QBtn-BmvaNeph.js";
4
+ import { S as SuperAdminSetupWizard, Q as QForm } from "../chunks/SuperAdminSetupWizard-DDxJm6bJ.js";
5
5
  import { defineComponent, reactive, ref, computed, onMounted, openBlock, createBlock, createElementBlock, createElementVNode, toDisplayString, createVNode, unref, createCommentVNode, withModifiers, withCtx, createTextVNode } from "vue";
6
- import { _ as _sfc_main$1 } from "../chunks/AdminBanner.vue_vue_type_script_setup_true_lang-7G_-pS3m.js";
6
+ import { _ as _sfc_main$1 } from "../chunks/AdminBanner.vue_vue_type_script_setup_true_lang-Cg5koVbd.js";
7
7
  import { useRouter } from "vue-router";
8
8
  import { useSaMessages, useSuperAdminBrand, useSuperAdminEndpoints, useSuperAdminLoginAdapter, useSuperAdminHttp, usePublicBoot, resolveLoginBranding, isProductionBoot, looksLikeEmail, getJson } from "@saasicat/ui-vue";
9
9
  import LocaleSwitcher from "../ui/page/LocaleSwitcher.js";
@@ -1,4 +1,4 @@
1
- import { S } from "../chunks/SuperAdminSetupWizard-wqMniPGT.js";
1
+ import { S } from "../chunks/SuperAdminSetupWizard-DDxJm6bJ.js";
2
2
  import "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
3
3
  export {
4
4
  S as default