@saasicat/ui-vue 0.19.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{catalog-JXdKdIqG.d.cts → catalog-DJcfm5N2.d.cts} +21 -7
- package/dist/{catalog-JXdKdIqG.d.ts → catalog-DJcfm5N2.d.ts} +21 -7
- package/dist/{chunk-DPTIOQXX.js → chunk-F7NRM6KI.js} +56 -28
- package/dist/{chunk-RVG6LQHL.js → chunk-LY52T4N4.js} +21 -2
- package/dist/{chunk-ORX3ZG47.js → chunk-XMMFN2WJ.js} +74 -3
- package/dist/client/index.cjs +134 -29
- package/dist/client/index.d.cts +53 -3
- package/dist/client/index.d.ts +53 -3
- package/dist/client/index.js +14 -2
- package/dist/index.cjs +321 -162
- package/dist/index.d.cts +30 -8
- package/dist/index.d.ts +30 -8
- package/dist/index.js +176 -133
- package/dist/quasar/index.cjs +78 -29
- package/dist/quasar/index.d.cts +2 -2
- package/dist/quasar/index.d.ts +2 -2
- package/dist/quasar/index.js +6 -2
- package/dist/testing-e2e/admin-pages-suite.d.cts +37 -0
- package/dist/testing-e2e/admin-pages-suite.d.ts +37 -0
- package/dist/{use-super-admin-i18n-BlqcD0N7.d.ts → use-super-admin-i18n-CHNdsSlm.d.ts} +34 -7
- package/dist/{use-super-admin-i18n-1nCOkvgi.d.cts → use-super-admin-i18n-CgTuNi8h.d.cts} +34 -7
- package/package.json +18 -8
- package/src/client/i18n/messages/bundles.ts +0 -2
- package/src/client/i18n/messages/common.ts +24 -0
- package/src/client/i18n/messages/discovery.ts +2 -2
- package/src/client/i18n/messages/marketing.ts +2 -4
- package/src/client/i18n/messages/plan-detail.ts +0 -4
- package/src/client/i18n/messages/plans.ts +20 -8
- package/src/client/i18n/messages/tenants.ts +0 -2
- package/src/client/index.ts +1 -0
- package/src/client/manifest-loader.ts +1 -1
- package/src/client/resolve-plans.ts +144 -0
- package/src/components/BundleVersionPublishDialog.vue +6 -6
- package/src/components/KvBlock.vue +4 -4
- package/src/components/MarketingPromotionsTab.vue +34 -48
- package/src/components/MfaPromptDialog.vue +8 -2
- package/src/components/TenantActionConfirmDialog.vue +4 -4
- package/src/components/VersionDiffPreview.vue +7 -7
- package/src/components/admin-page/AdminBody.vue +40 -0
- package/src/components/admin-page/AdminFilters.vue +12 -0
- package/src/components/admin-page/AdminHero.vue +49 -0
- package/src/components/admin-page/AdminKpi.vue +84 -0
- package/src/components/admin-page/AdminPage.vue +16 -0
- package/src/components/admin-page/AdminPaginator.vue +195 -0
- package/src/components/admin-page/AdminRefreshBtn.vue +39 -0
- package/src/components/admin-page/AdminSection.vue +53 -0
- package/src/components/admin-page/AdminStatistics.vue +40 -0
- package/src/components/admin-page/AdminTable.vue +175 -0
- package/src/components/bundle-editor/BundleCreatePanel.vue +23 -23
- package/src/components/bundle-editor/BundleFeaturesEditor.vue +7 -7
- package/src/components/bundle-editor/BundlePlanCompatPicker.vue +9 -9
- package/src/components/bundle-editor/BundleQuotasEditor.vue +11 -11
- package/src/components/bundle-editor/BundleStatusBanner.vue +6 -6
- package/src/components/bundle-editor/BundleVersionInlineEditor.vue +18 -18
- package/src/components/bundle-editor/BundleVersionStrip.vue +12 -12
- package/src/components/dialogs/PilotCreateDialog.vue +12 -12
- package/src/components/dialogs/PilotEditDialog.vue +7 -7
- package/src/components/dialogs/PromoCodeCreateDialog.vue +8 -8
- package/src/components/dialogs/PromoCodeDialogFields.vue +33 -19
- package/src/components/dialogs/PromoCodeEditDialog.vue +10 -10
- package/src/components/plan/PlanGrid.vue +1 -1
- package/src/components/plan-create-dialog/PlanCreateDialog.vue +34 -46
- package/src/components/plan-detail/PlanAuditLog.vue +7 -8
- package/src/components/plan-detail/PlanDetail.vue +95 -292
- package/src/components/plan-detail/PlanDetailKpis.vue +22 -27
- package/src/components/plan-detail/PlanTitleEdit.vue +133 -0
- package/src/components/plan-detail/PlanVersionDiffPanel.vue +5 -8
- package/src/components/plan-detail/PlanVersionsPanel.vue +9 -11
- package/src/components/plan-list/PlanList.vue +206 -457
- package/src/components/plan-matrix/PlanMatrix.vue +66 -183
- package/src/components/plan-review/PlanReview.vue +191 -275
- package/src/components/plan-version-editor/PlanCatalogPreview.vue +7 -5
- package/src/components/plan-version-editor/PlanVersionEditor.vue +200 -295
- package/src/components/plan-version-editor/PlanVersionEditorHeader.vue +23 -55
- package/src/index.ts +1 -0
- package/src/pages-standard/AdminLayout.vue +38 -12
- package/src/pages-standard/AdminManifestErrorPage.vue +79 -9
- package/src/pages-standard/AuditPage.vue +65 -109
- package/src/pages-standard/BundlesPage.vue +146 -179
- package/src/pages-standard/DashboardPage.vue +59 -154
- package/src/pages-standard/DiscoveryPage.vue +172 -227
- package/src/pages-standard/EmailHistoryPage.vue +118 -159
- package/src/pages-standard/MarketingCatalogPage.vue +399 -440
- package/src/pages-standard/PilotsPage.vue +69 -117
- package/src/pages-standard/PlansPage.vue +240 -112
- package/src/pages-standard/PlatformEmailPage.vue +56 -91
- package/src/pages-standard/PromoCodeDetailPage.vue +49 -74
- package/src/pages-standard/PromoCodesPage.vue +95 -128
- package/src/pages-standard/SubscriptionsPage.vue +19 -52
- package/src/pages-standard/SuperAdminLoginPage.vue +12 -12
- package/src/pages-standard/SuperAdminSetupWizard.vue +22 -18
- package/src/pages-standard/TenantDetailPage.vue +100 -191
- package/src/pages-standard/TenantsPage.vue +190 -295
- package/src/pages-standard/UsersPage.vue +89 -157
- package/src/pages-standard/bundles-page/BundleAccordionList.vue +20 -17
- package/src/pages-standard/bundles-page/BundlesKpis.vue +13 -22
- package/src/pages-standard/bundles-page/BundlesToolbar.vue +63 -0
- package/src/pages-standard/discovery-page/CatalogEntryTransPanel.vue +10 -10
- package/src/pages-standard/discovery-page/DiscoveryCapList.vue +5 -5
- package/src/pages-standard/discovery-page/DiscoveryFeatureCard.vue +16 -16
- package/src/pages-standard/discovery-page/DiscoveryKpis.vue +31 -27
- package/src/pages-standard/discovery-page/DiscoveryQuotaCard.vue +7 -7
- package/src/pages-standard/marketing-catalog/MarketingCatalogAdmin.vue +111 -73
- package/src/pages-standard/marketing-catalog/MarketingCatalogHeader.vue +43 -62
- package/src/pages-standard/marketing-catalog/MarketingCatalogPreview.vue +53 -35
- package/src/pages-standard/marketing-catalog/MarketingCatalogToolbar.vue +7 -7
- package/src/pages-standard/plan-versions/PlanDiffCard.vue +6 -6
- package/src/pages-standard/plan-versions/PlanVersionsDiff.vue +6 -6
- package/src/pages-standard/plan-versions/PlanVersionsTimeline.vue +16 -16
- package/src/pages-standard/plans-page/PlanBundleOverview.vue +14 -29
- package/src/pages-standard/plans-page/PlanPublishDialog.vue +1 -1
- package/src/pages-standard/plans-page/PlansPageToast.vue +6 -6
- package/src/pages-standard/sa-theme.css +552 -86
- package/src/pages-standard/tenant-detail/TenantMasterData.vue +28 -0
- package/src/pages-standard/tenant-detail/TenantUsage.vue +31 -0
- package/src/pages-standard/tenant-detail/TenantUsers.vue +15 -0
- package/src/pages-standard/tenant-detail/types.ts +38 -0
- package/src/pages-standard/tenants/StatusPill.vue +2 -2
- package/src/pages-tenant/MySubscriptionBundlesPage.vue +25 -25
- package/src/pages-tenant/OnboardingConfigurator.vue +1 -5
- package/src/pages-tenant/PackageSnapshotPanel.vue +1 -1
- package/src/pages-tenant/TenantPlanSection.vue +12 -20
- package/src/quasar/create-super-admin-app.ts +4 -0
- package/src/vue/entitlement-provider.ts +0 -1
- package/src/vue/feature-router-guard.ts +0 -1
- package/src/vue/super-admin-context.ts +106 -1
- package/src/vue/use-api-list.ts +2 -1
- package/src/vue/use-mfa-prompt.ts +72 -0
- package/src/vue/use-pagination.ts +63 -0
- package/src/vue/use-plans.ts +1 -2
- package/src/vue/use-sign-out.ts +90 -0
- package/src/vue/use-tenant-billing.ts +1 -1
- package/src/vue/use-tenant-manifest.ts +0 -1
- package/src/components/KpiCard.vue +0 -53
- package/src/components/plan-cockpit/PlanCockpit.vue +0 -1012
- package/src/components/plan-cockpit/PlanCockpitAuditLog.vue +0 -72
- package/src/components/plan-cockpit/PlanCockpitDiffPanel.vue +0 -100
- package/src/components/plan-cockpit/PlanCockpitHeader.vue +0 -101
- package/src/components/plan-cockpit/PlanCockpitImpactPanel.vue +0 -112
- package/src/components/plan-cockpit/PlanCockpitKpis.vue +0 -68
- package/src/components/plan-cockpit/PlanCockpitVersions.vue +0 -251
- package/src/components/plan-cockpit/types.ts +0 -72
- package/src/components/plan-detail/PlanDetailHeader.vue +0 -194
- package/src/pages-standard/bundles-page/BundlesHeader.vue +0 -68
- package/src/pages-standard/discovery-page/DiscoveryHeader.vue +0 -34
|
@@ -1,41 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="pm">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
<div class="pm-head-actions">
|
|
10
|
-
<button class="pm-btn" type="button" @click="$emit('viewCatalog')">
|
|
11
|
-
<svg
|
|
12
|
-
width="14"
|
|
13
|
-
height="14"
|
|
14
|
-
viewBox="0 0 24 24"
|
|
15
|
-
fill="none"
|
|
16
|
-
stroke="currentColor"
|
|
17
|
-
stroke-width="2"
|
|
18
|
-
>
|
|
19
|
-
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" />
|
|
20
|
-
<circle cx="12" cy="12" r="3" />
|
|
21
|
-
</svg>
|
|
22
|
-
<span>{{ msg.matrix.catalogPreview }}</span>
|
|
23
|
-
</button>
|
|
24
|
-
<button class="pm-btn pm-btn--primary" type="button" @click="$emit('createPlan')">
|
|
25
|
-
<svg
|
|
26
|
-
width="14"
|
|
27
|
-
height="14"
|
|
28
|
-
viewBox="0 0 24 24"
|
|
29
|
-
fill="none"
|
|
30
|
-
stroke="currentColor"
|
|
31
|
-
stroke-width="2.5"
|
|
32
|
-
>
|
|
33
|
-
<path d="M12 5v14M5 12h14" />
|
|
34
|
-
</svg>
|
|
35
|
-
<span>{{ msg.matrix.createPlan }}</span>
|
|
36
|
-
</button>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
3
|
+
<AdminStatistics :columns="4">
|
|
4
|
+
<AdminKpi :label="msg.matrix.statPlans" :value="plans.length" />
|
|
5
|
+
<AdminKpi :label="msg.matrix.statFeatures" :value="orderedFeatureKeys.length" />
|
|
6
|
+
<AdminKpi :label="msg.matrix.statQuotas" :value="orderedQuotaKeys.length" />
|
|
7
|
+
<AdminKpi :label="msg.matrix.statBundles" :value="orderedBundleKeys.length" />
|
|
8
|
+
</AdminStatistics>
|
|
39
9
|
|
|
40
10
|
<!-- Matrix -->
|
|
41
11
|
<div class="pm-card pm-wrap">
|
|
@@ -65,7 +35,7 @@
|
|
|
65
35
|
⋯
|
|
66
36
|
</button>
|
|
67
37
|
</div>
|
|
68
|
-
<div class="pm-plan-desc">{{ p.description ||
|
|
38
|
+
<div class="pm-plan-desc">{{ p.description || NBSP }}</div>
|
|
69
39
|
<div class="pm-plan-divider" />
|
|
70
40
|
|
|
71
41
|
<div class="pm-status-row">
|
|
@@ -150,7 +120,7 @@
|
|
|
150
120
|
|
|
151
121
|
<div class="pm-plan-actions">
|
|
152
122
|
<button
|
|
153
|
-
class="
|
|
123
|
+
class="sa-btn sa-btn--sm sa-btn--flex"
|
|
154
124
|
type="button"
|
|
155
125
|
@click="$emit('openPlan', p.plan)"
|
|
156
126
|
>
|
|
@@ -169,10 +139,10 @@
|
|
|
169
139
|
<span>{{ common.open }}</span>
|
|
170
140
|
</button>
|
|
171
141
|
<button
|
|
172
|
-
class="
|
|
142
|
+
class="sa-btn sa-btn--sm sa-btn--ghost"
|
|
173
143
|
type="button"
|
|
174
|
-
@click="$emit('clonePlan', p.plan)"
|
|
175
144
|
:aria-label="msg.matrix.clonePlan"
|
|
145
|
+
@click="$emit('clonePlan', p.plan)"
|
|
176
146
|
>
|
|
177
147
|
<svg
|
|
178
148
|
width="12"
|
|
@@ -403,7 +373,16 @@
|
|
|
403
373
|
</template>
|
|
404
374
|
|
|
405
375
|
<script setup lang="ts">
|
|
376
|
+
import AdminKpi from '../admin-page/AdminKpi.vue';
|
|
377
|
+
import AdminStatistics from '../admin-page/AdminStatistics.vue';
|
|
406
378
|
import { computed } from 'vue';
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Placeholder for an empty plan description. A non-breaking space keeps the
|
|
382
|
+
* row height stable across the matrix columns; written as an escape because a
|
|
383
|
+
* literal U+00A0 is invisible in a diff.
|
|
384
|
+
*/
|
|
385
|
+
const NBSP = '\u00A0';
|
|
407
386
|
import type { PlanRow, PlanVersionRow } from '@saasicat/types';
|
|
408
387
|
import { formatMessage } from '../../client/i18n/format.js';
|
|
409
388
|
import { formatCurrency } from '../../client/i18n/currency.js';
|
|
@@ -464,9 +443,8 @@ const props = withDefaults(
|
|
|
464
443
|
|
|
465
444
|
defineEmits<{
|
|
466
445
|
(e: 'openPlan', plan: PlanRow): void;
|
|
467
|
-
(e: 'createPlan'): void;
|
|
468
446
|
(e: 'clonePlan', plan: PlanRow): void;
|
|
469
|
-
(e: '
|
|
447
|
+
(e: 'createPlan'): void;
|
|
470
448
|
}>();
|
|
471
449
|
|
|
472
450
|
interface ResolvedPlan {
|
|
@@ -632,15 +610,6 @@ const orderedFeatureKeys = computed<string[]>(() => {
|
|
|
632
610
|
|
|
633
611
|
const orderedBundleKeys = computed<string[]>(() => props.availableBundles.map((b) => b.bundleKey));
|
|
634
612
|
|
|
635
|
-
const summary = computed(() =>
|
|
636
|
-
formatMessage(msg.value.matrix.summary, {
|
|
637
|
-
plans: props.plans.length,
|
|
638
|
-
features: orderedFeatureKeys.value.length,
|
|
639
|
-
quotas: orderedQuotaKeys.value.length,
|
|
640
|
-
bundles: orderedBundleKeys.value.length,
|
|
641
|
-
}),
|
|
642
|
-
);
|
|
643
|
-
|
|
644
613
|
function quotaLabel(key: string): string {
|
|
645
614
|
return props.availableQuotas.find((q) => q.quotaKey === key)?.label || key;
|
|
646
615
|
}
|
|
@@ -687,103 +656,17 @@ function formatQuota(v: number | undefined): string {
|
|
|
687
656
|
|
|
688
657
|
<style scoped>
|
|
689
658
|
.pm {
|
|
690
|
-
--pm-bg: #f6f7f9;
|
|
691
|
-
--pm-surface: #ffffff;
|
|
692
|
-
--pm-surface-2: #f8fafc;
|
|
693
|
-
--pm-border: #e5e7eb;
|
|
694
|
-
--pm-border-strong: #d1d5db;
|
|
695
|
-
--pm-text: #0f172a;
|
|
696
|
-
--pm-text-2: #475569;
|
|
697
|
-
--pm-text-3: #94a3b8;
|
|
698
|
-
--pm-primary: #2563eb;
|
|
699
|
-
--pm-live: #10b981;
|
|
700
|
-
--pm-live-bg: #ecfdf5;
|
|
701
|
-
--pm-draft: #f59e0b;
|
|
702
|
-
--pm-draft-bg: #fffbeb;
|
|
703
|
-
--pm-supersed: #94a3b8;
|
|
704
|
-
--pm-supersed-bg: #f1f5f9;
|
|
705
|
-
--pm-font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
|
|
706
|
-
--pm-font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, monospace;
|
|
707
|
-
|
|
708
659
|
padding: 22px 26px;
|
|
709
|
-
background: var(--
|
|
710
|
-
color: var(--
|
|
711
|
-
font-family: var(--
|
|
660
|
+
background: var(--sa-bg-app);
|
|
661
|
+
color: var(--sa-heading);
|
|
662
|
+
font-family: var(--sa-font-body);
|
|
712
663
|
min-height: 100%;
|
|
713
664
|
box-sizing: border-box;
|
|
714
665
|
}
|
|
715
|
-
.pm * {
|
|
716
|
-
box-sizing: border-box;
|
|
717
|
-
}
|
|
718
|
-
|
|
719
|
-
.pm-page-head {
|
|
720
|
-
display: flex;
|
|
721
|
-
align-items: flex-end;
|
|
722
|
-
gap: 20px;
|
|
723
|
-
margin-bottom: 18px;
|
|
724
|
-
}
|
|
725
|
-
.pm-h-title {
|
|
726
|
-
font-size: 22px;
|
|
727
|
-
font-weight: 700;
|
|
728
|
-
letter-spacing: -0.02em;
|
|
729
|
-
margin: 0;
|
|
730
|
-
}
|
|
731
|
-
.pm-h-sub {
|
|
732
|
-
font-size: 12.5px;
|
|
733
|
-
color: var(--pm-text-2);
|
|
734
|
-
margin: 3px 0 0;
|
|
735
|
-
}
|
|
736
|
-
.pm-head-actions {
|
|
737
|
-
margin-left: auto;
|
|
738
|
-
display: flex;
|
|
739
|
-
gap: 8px;
|
|
740
|
-
}
|
|
741
|
-
|
|
742
|
-
.pm-btn {
|
|
743
|
-
display: inline-flex;
|
|
744
|
-
align-items: center;
|
|
745
|
-
gap: 7px;
|
|
746
|
-
padding: 8px 14px;
|
|
747
|
-
border-radius: 7px;
|
|
748
|
-
font: 500 13px var(--pm-font-sans);
|
|
749
|
-
cursor: pointer;
|
|
750
|
-
border: 1px solid var(--pm-border-strong);
|
|
751
|
-
background: #fff;
|
|
752
|
-
color: var(--pm-text);
|
|
753
|
-
transition:
|
|
754
|
-
background 0.12s,
|
|
755
|
-
border-color 0.12s;
|
|
756
|
-
}
|
|
757
|
-
.pm-btn:hover {
|
|
758
|
-
background: var(--pm-surface-2);
|
|
759
|
-
}
|
|
760
|
-
.pm-btn--primary {
|
|
761
|
-
background: var(--pm-primary);
|
|
762
|
-
border-color: var(--pm-primary);
|
|
763
|
-
color: #fff;
|
|
764
|
-
}
|
|
765
|
-
.pm-btn--primary:hover {
|
|
766
|
-
background: #1d4ed8;
|
|
767
|
-
}
|
|
768
|
-
.pm-btn--ghost {
|
|
769
|
-
border-color: transparent;
|
|
770
|
-
background: transparent;
|
|
771
|
-
}
|
|
772
|
-
.pm-btn--ghost:hover {
|
|
773
|
-
background: rgba(15, 23, 42, 0.05);
|
|
774
|
-
}
|
|
775
|
-
.pm-btn--sm {
|
|
776
|
-
padding: 5px 9px;
|
|
777
|
-
font-size: 12px;
|
|
778
|
-
gap: 5px;
|
|
779
|
-
}
|
|
780
|
-
.pm-btn--flex {
|
|
781
|
-
flex: 1;
|
|
782
|
-
}
|
|
783
666
|
|
|
784
667
|
.pm-card {
|
|
785
|
-
background: var(--
|
|
786
|
-
border: 1px solid var(--
|
|
668
|
+
background: var(--sa-bg-surface);
|
|
669
|
+
border: 1px solid var(--sa-border);
|
|
787
670
|
border-radius: 10px;
|
|
788
671
|
}
|
|
789
672
|
.pm-wrap {
|
|
@@ -798,7 +681,7 @@ function formatQuota(v: number | undefined): string {
|
|
|
798
681
|
}
|
|
799
682
|
.pm-head th {
|
|
800
683
|
background: #fbfbfd;
|
|
801
|
-
border-bottom: 1px solid var(--
|
|
684
|
+
border-bottom: 1px solid var(--sa-border);
|
|
802
685
|
}
|
|
803
686
|
.pm-rowhead-cell {
|
|
804
687
|
text-align: left;
|
|
@@ -811,7 +694,7 @@ function formatQuota(v: number | undefined): string {
|
|
|
811
694
|
font-size: 11px;
|
|
812
695
|
text-transform: uppercase;
|
|
813
696
|
letter-spacing: 0.1em;
|
|
814
|
-
color: var(--
|
|
697
|
+
color: var(--sa-muted-light);
|
|
815
698
|
font-weight: 700;
|
|
816
699
|
}
|
|
817
700
|
|
|
@@ -822,7 +705,7 @@ function formatQuota(v: number | undefined): string {
|
|
|
822
705
|
}
|
|
823
706
|
.pm-plan-card {
|
|
824
707
|
background: #fff;
|
|
825
|
-
border: 1px solid var(--
|
|
708
|
+
border: 1px solid var(--sa-border);
|
|
826
709
|
border-top: 3px solid;
|
|
827
710
|
border-radius: 10px;
|
|
828
711
|
padding: 14px 14px 12px;
|
|
@@ -835,32 +718,32 @@ function formatQuota(v: number | undefined): string {
|
|
|
835
718
|
align-items: flex-start;
|
|
836
719
|
}
|
|
837
720
|
.pm-plan-key {
|
|
838
|
-
font: 700 11px var(--
|
|
721
|
+
font: 700 11px var(--sa-font-mono);
|
|
839
722
|
letter-spacing: 0.08em;
|
|
840
|
-
color: var(--
|
|
723
|
+
color: var(--sa-muted-dark);
|
|
841
724
|
}
|
|
842
725
|
.pm-plan-label {
|
|
843
726
|
font-size: 17px;
|
|
844
727
|
font-weight: 700;
|
|
845
728
|
letter-spacing: -0.02em;
|
|
846
|
-
color: var(--
|
|
729
|
+
color: var(--sa-heading);
|
|
847
730
|
}
|
|
848
731
|
.pm-plan-desc {
|
|
849
732
|
font-size: 11.5px;
|
|
850
|
-
color:
|
|
733
|
+
color: var(--sa-muted);
|
|
851
734
|
margin-top: 4px;
|
|
852
735
|
line-height: 1.4;
|
|
853
736
|
min-height: 32px;
|
|
854
737
|
}
|
|
855
738
|
.pm-plan-divider {
|
|
856
739
|
height: 1px;
|
|
857
|
-
background: var(--
|
|
740
|
+
background: var(--sa-border);
|
|
858
741
|
margin: 10px 0;
|
|
859
742
|
}
|
|
860
743
|
.pm-kebab {
|
|
861
744
|
background: none;
|
|
862
745
|
border: 0;
|
|
863
|
-
color: var(--
|
|
746
|
+
color: var(--sa-muted-light);
|
|
864
747
|
cursor: pointer;
|
|
865
748
|
font-size: 16px;
|
|
866
749
|
padding: 0;
|
|
@@ -886,17 +769,17 @@ function formatQuota(v: number | undefined): string {
|
|
|
886
769
|
}
|
|
887
770
|
.pm-price-unit {
|
|
888
771
|
font-size: 11px;
|
|
889
|
-
color:
|
|
772
|
+
color: var(--sa-muted);
|
|
890
773
|
}
|
|
891
774
|
.pm-price-yearly {
|
|
892
775
|
font-size: 10px;
|
|
893
|
-
color: var(--
|
|
776
|
+
color: var(--sa-muted-light);
|
|
894
777
|
margin-left: 4px;
|
|
895
778
|
}
|
|
896
779
|
.pm-price-free {
|
|
897
780
|
font-size: 14px;
|
|
898
781
|
font-weight: 600;
|
|
899
|
-
color: var(--
|
|
782
|
+
color: var(--sa-heading);
|
|
900
783
|
}
|
|
901
784
|
.pm-plan-meta {
|
|
902
785
|
display: flex;
|
|
@@ -904,7 +787,7 @@ function formatQuota(v: number | undefined): string {
|
|
|
904
787
|
flex-wrap: wrap;
|
|
905
788
|
align-items: center;
|
|
906
789
|
font-size: 11px;
|
|
907
|
-
color:
|
|
790
|
+
color: var(--sa-muted);
|
|
908
791
|
margin-top: 8px;
|
|
909
792
|
}
|
|
910
793
|
.pm-plan-actions {
|
|
@@ -912,7 +795,7 @@ function formatQuota(v: number | undefined): string {
|
|
|
912
795
|
gap: 6px;
|
|
913
796
|
margin-top: 10px;
|
|
914
797
|
padding-top: 10px;
|
|
915
|
-
border-top: 1px solid
|
|
798
|
+
border-top: 1px solid var(--sa-border-soft);
|
|
916
799
|
}
|
|
917
800
|
|
|
918
801
|
.pm-add-col {
|
|
@@ -944,18 +827,18 @@ function formatQuota(v: number | undefined): string {
|
|
|
944
827
|
width: 30px;
|
|
945
828
|
height: 30px;
|
|
946
829
|
border-radius: 50%;
|
|
947
|
-
background:
|
|
948
|
-
color: var(--
|
|
830
|
+
background: var(--sa-primary-50);
|
|
831
|
+
color: var(--sa-primary);
|
|
949
832
|
margin: 0 auto 6px;
|
|
950
833
|
}
|
|
951
834
|
.pm-add-title {
|
|
952
835
|
font-size: 12px;
|
|
953
836
|
font-weight: 600;
|
|
954
|
-
color: var(--
|
|
837
|
+
color: var(--sa-primary);
|
|
955
838
|
}
|
|
956
839
|
.pm-add-sub {
|
|
957
840
|
font-size: 10.5px;
|
|
958
|
-
color: var(--
|
|
841
|
+
color: var(--sa-muted-light);
|
|
959
842
|
margin-top: 3px;
|
|
960
843
|
}
|
|
961
844
|
|
|
@@ -968,27 +851,27 @@ function formatQuota(v: number | undefined): string {
|
|
|
968
851
|
border-radius: 999px;
|
|
969
852
|
font-size: 11px;
|
|
970
853
|
font-weight: 600;
|
|
971
|
-
background: var(--
|
|
972
|
-
color: var(--
|
|
973
|
-
border: 1px solid var(--
|
|
854
|
+
background: var(--sa-bg-surface-2);
|
|
855
|
+
color: var(--sa-muted-dark);
|
|
856
|
+
border: 1px solid var(--sa-border);
|
|
974
857
|
}
|
|
975
858
|
.pm-chip--tiny {
|
|
976
859
|
padding: 1px 6px;
|
|
977
860
|
font-size: 10px;
|
|
978
861
|
}
|
|
979
862
|
.pm-chip--live {
|
|
980
|
-
background: var(--
|
|
863
|
+
background: var(--sa-positive-bg);
|
|
981
864
|
color: #047857;
|
|
982
865
|
border-color: #a7f3d0;
|
|
983
866
|
}
|
|
984
867
|
.pm-chip--draft {
|
|
985
|
-
background: var(--
|
|
868
|
+
background: var(--sa-warning-bg);
|
|
986
869
|
color: #b45309;
|
|
987
870
|
border-color: #fde68a;
|
|
988
871
|
}
|
|
989
872
|
.pm-chip--supersed {
|
|
990
|
-
background: var(--
|
|
991
|
-
color: var(--
|
|
873
|
+
background: var(--sa-border-soft);
|
|
874
|
+
color: var(--sa-muted-dark);
|
|
992
875
|
border-color: #cbd5e1;
|
|
993
876
|
}
|
|
994
877
|
.pm-chip--dot::before {
|
|
@@ -1001,9 +884,9 @@ function formatQuota(v: number | undefined): string {
|
|
|
1001
884
|
|
|
1002
885
|
/* Group rows */
|
|
1003
886
|
.pm-group td {
|
|
1004
|
-
background: var(--
|
|
1005
|
-
border-top: 1px solid var(--
|
|
1006
|
-
border-bottom: 1px solid var(--
|
|
887
|
+
background: var(--sa-bg-surface-2);
|
|
888
|
+
border-top: 1px solid var(--sa-border);
|
|
889
|
+
border-bottom: 1px solid var(--sa-border);
|
|
1007
890
|
}
|
|
1008
891
|
.pm-group-inner {
|
|
1009
892
|
display: flex;
|
|
@@ -1014,7 +897,7 @@ function formatQuota(v: number | undefined): string {
|
|
|
1014
897
|
font-weight: 700;
|
|
1015
898
|
letter-spacing: 0.08em;
|
|
1016
899
|
text-transform: uppercase;
|
|
1017
|
-
color: var(--
|
|
900
|
+
color: var(--sa-muted-dark);
|
|
1018
901
|
}
|
|
1019
902
|
.pm-group-dot {
|
|
1020
903
|
width: 7px;
|
|
@@ -1031,8 +914,8 @@ function formatQuota(v: number | undefined): string {
|
|
|
1031
914
|
background: #f59e0b;
|
|
1032
915
|
}
|
|
1033
916
|
.pm-group-count {
|
|
1034
|
-
background:
|
|
1035
|
-
color: var(--
|
|
917
|
+
background: var(--sa-border);
|
|
918
|
+
color: var(--sa-muted-dark);
|
|
1036
919
|
padding: 1px 7px;
|
|
1037
920
|
border-radius: 999px;
|
|
1038
921
|
font-size: 10px;
|
|
@@ -1040,7 +923,7 @@ function formatQuota(v: number | undefined): string {
|
|
|
1040
923
|
|
|
1041
924
|
/* Data rows */
|
|
1042
925
|
.pm-row td {
|
|
1043
|
-
border-bottom: 1px solid
|
|
926
|
+
border-bottom: 1px solid var(--sa-border-soft);
|
|
1044
927
|
height: 44px;
|
|
1045
928
|
}
|
|
1046
929
|
.pm-row:hover td {
|
|
@@ -1057,11 +940,11 @@ function formatQuota(v: number | undefined): string {
|
|
|
1057
940
|
.pm-rh-label {
|
|
1058
941
|
font-size: 13px;
|
|
1059
942
|
font-weight: 500;
|
|
1060
|
-
color: var(--
|
|
943
|
+
color: var(--sa-heading);
|
|
1061
944
|
}
|
|
1062
945
|
.pm-rh-key {
|
|
1063
|
-
font: 500 10px var(--
|
|
1064
|
-
color: var(--
|
|
946
|
+
font: 500 10px var(--sa-font-mono);
|
|
947
|
+
color: var(--sa-muted-light);
|
|
1065
948
|
}
|
|
1066
949
|
.pm-cell {
|
|
1067
950
|
text-align: center;
|
|
@@ -1079,7 +962,7 @@ function formatQuota(v: number | undefined): string {
|
|
|
1079
962
|
}
|
|
1080
963
|
.pm-cell--base {
|
|
1081
964
|
text-align: center;
|
|
1082
|
-
background: var(--
|
|
965
|
+
background: var(--sa-bg-surface-2);
|
|
1083
966
|
}
|
|
1084
967
|
.pm-base-badge {
|
|
1085
968
|
display: inline-flex;
|
|
@@ -1106,12 +989,12 @@ function formatQuota(v: number | undefined): string {
|
|
|
1106
989
|
font-weight: 500;
|
|
1107
990
|
}
|
|
1108
991
|
.pm-num {
|
|
1109
|
-
font: 600 14px var(--
|
|
1110
|
-
color: var(--
|
|
992
|
+
font: 600 14px var(--sa-font-body);
|
|
993
|
+
color: var(--sa-heading);
|
|
1111
994
|
}
|
|
1112
995
|
.pm-unit {
|
|
1113
996
|
font-size: 10.5px;
|
|
1114
|
-
color: var(--
|
|
997
|
+
color: var(--sa-muted-light);
|
|
1115
998
|
margin-left: 3px;
|
|
1116
999
|
}
|
|
1117
1000
|
.pm-quota {
|
|
@@ -1126,7 +1009,7 @@ function formatQuota(v: number | undefined): string {
|
|
|
1126
1009
|
gap: 18px;
|
|
1127
1010
|
margin-top: 14px;
|
|
1128
1011
|
font-size: 12px;
|
|
1129
|
-
color: var(--
|
|
1012
|
+
color: var(--sa-muted-dark);
|
|
1130
1013
|
align-items: center;
|
|
1131
1014
|
}
|
|
1132
1015
|
.pm-legend-item {
|
|
@@ -1155,6 +1038,6 @@ function formatQuota(v: number | undefined): string {
|
|
|
1155
1038
|
.pm-legend-loading {
|
|
1156
1039
|
margin-left: auto;
|
|
1157
1040
|
font-style: italic;
|
|
1158
|
-
color: var(--
|
|
1041
|
+
color: var(--sa-muted-light);
|
|
1159
1042
|
}
|
|
1160
1043
|
</style>
|