@saasicat/ui-vue 0.21.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.
Files changed (132) hide show
  1. package/dist/{catalog-BY_t9prv.d.cts → catalog-DJcfm5N2.d.cts} +20 -7
  2. package/dist/{catalog-BY_t9prv.d.ts → catalog-DJcfm5N2.d.ts} +20 -7
  3. package/dist/{chunk-JN6HZGLV.js → chunk-F7NRM6KI.js} +54 -28
  4. package/dist/{chunk-7IFKVGZV.js → chunk-LY52T4N4.js} +21 -2
  5. package/dist/{chunk-OTP3OSSW.js → chunk-XMMFN2WJ.js} +74 -3
  6. package/dist/client/index.cjs +132 -29
  7. package/dist/client/index.d.cts +53 -3
  8. package/dist/client/index.d.ts +53 -3
  9. package/dist/client/index.js +14 -2
  10. package/dist/index.cjs +319 -162
  11. package/dist/index.d.cts +30 -8
  12. package/dist/index.d.ts +30 -8
  13. package/dist/index.js +176 -133
  14. package/dist/quasar/index.cjs +76 -29
  15. package/dist/quasar/index.d.cts +2 -2
  16. package/dist/quasar/index.d.ts +2 -2
  17. package/dist/quasar/index.js +6 -2
  18. package/dist/testing-e2e/admin-pages-suite.d.cts +37 -0
  19. package/dist/testing-e2e/admin-pages-suite.d.ts +37 -0
  20. package/dist/{use-super-admin-i18n-c_Eqsu9u.d.ts → use-super-admin-i18n-CHNdsSlm.d.ts} +34 -7
  21. package/dist/{use-super-admin-i18n-DlJRGIVq.d.cts → use-super-admin-i18n-CgTuNi8h.d.cts} +34 -7
  22. package/package.json +18 -8
  23. package/src/client/i18n/messages/bundles.ts +0 -2
  24. package/src/client/i18n/messages/common.ts +22 -0
  25. package/src/client/i18n/messages/discovery.ts +2 -2
  26. package/src/client/i18n/messages/marketing.ts +2 -4
  27. package/src/client/i18n/messages/plan-detail.ts +0 -4
  28. package/src/client/i18n/messages/plans.ts +20 -8
  29. package/src/client/i18n/messages/tenants.ts +0 -2
  30. package/src/client/index.ts +1 -0
  31. package/src/client/manifest-loader.ts +1 -1
  32. package/src/client/resolve-plans.ts +144 -0
  33. package/src/components/BundleVersionPublishDialog.vue +6 -6
  34. package/src/components/KvBlock.vue +4 -4
  35. package/src/components/MarketingPromotionsTab.vue +34 -48
  36. package/src/components/MfaPromptDialog.vue +8 -2
  37. package/src/components/TenantActionConfirmDialog.vue +4 -4
  38. package/src/components/VersionDiffPreview.vue +7 -7
  39. package/src/components/admin-page/AdminFilters.vue +12 -0
  40. package/src/components/admin-page/AdminHero.vue +22 -5
  41. package/src/components/admin-page/AdminKpi.vue +84 -0
  42. package/src/components/admin-page/AdminPaginator.vue +195 -0
  43. package/src/components/admin-page/AdminRefreshBtn.vue +39 -0
  44. package/src/components/admin-page/AdminSection.vue +31 -16
  45. package/src/components/admin-page/AdminStatistics.vue +40 -0
  46. package/src/components/admin-page/AdminTable.vue +175 -0
  47. package/src/components/bundle-editor/BundleCreatePanel.vue +23 -23
  48. package/src/components/bundle-editor/BundleFeaturesEditor.vue +7 -7
  49. package/src/components/bundle-editor/BundlePlanCompatPicker.vue +9 -9
  50. package/src/components/bundle-editor/BundleQuotasEditor.vue +11 -11
  51. package/src/components/bundle-editor/BundleStatusBanner.vue +6 -6
  52. package/src/components/bundle-editor/BundleVersionInlineEditor.vue +18 -18
  53. package/src/components/bundle-editor/BundleVersionStrip.vue +12 -12
  54. package/src/components/dialogs/PilotCreateDialog.vue +12 -12
  55. package/src/components/dialogs/PilotEditDialog.vue +7 -7
  56. package/src/components/dialogs/PromoCodeCreateDialog.vue +8 -8
  57. package/src/components/dialogs/PromoCodeDialogFields.vue +33 -19
  58. package/src/components/dialogs/PromoCodeEditDialog.vue +10 -10
  59. package/src/components/plan/PlanGrid.vue +1 -1
  60. package/src/components/plan-create-dialog/PlanCreateDialog.vue +34 -46
  61. package/src/components/plan-detail/PlanDetail.vue +92 -302
  62. package/src/components/plan-detail/PlanDetailKpis.vue +22 -27
  63. package/src/components/plan-detail/PlanTitleEdit.vue +133 -0
  64. package/src/components/plan-list/PlanList.vue +72 -290
  65. package/src/components/plan-matrix/PlanMatrix.vue +66 -183
  66. package/src/components/plan-review/PlanReview.vue +191 -275
  67. package/src/components/plan-version-editor/PlanCatalogPreview.vue +7 -5
  68. package/src/components/plan-version-editor/PlanVersionEditor.vue +200 -295
  69. package/src/components/plan-version-editor/PlanVersionEditorHeader.vue +23 -55
  70. package/src/index.ts +1 -0
  71. package/src/pages-standard/AdminLayout.vue +34 -10
  72. package/src/pages-standard/AdminManifestErrorPage.vue +79 -9
  73. package/src/pages-standard/AuditPage.vue +53 -72
  74. package/src/pages-standard/BundlesPage.vue +128 -144
  75. package/src/pages-standard/DashboardPage.vue +43 -107
  76. package/src/pages-standard/DiscoveryPage.vue +158 -200
  77. package/src/pages-standard/EmailHistoryPage.vue +98 -88
  78. package/src/pages-standard/MarketingCatalogPage.vue +237 -267
  79. package/src/pages-standard/PilotsPage.vue +44 -60
  80. package/src/pages-standard/PlansPage.vue +230 -105
  81. package/src/pages-standard/PlatformEmailPage.vue +37 -40
  82. package/src/pages-standard/PromoCodeDetailPage.vue +16 -30
  83. package/src/pages-standard/PromoCodesPage.vue +86 -112
  84. package/src/pages-standard/SubscriptionsPage.vue +10 -17
  85. package/src/pages-standard/SuperAdminLoginPage.vue +12 -12
  86. package/src/pages-standard/SuperAdminSetupWizard.vue +20 -17
  87. package/src/pages-standard/TenantDetailPage.vue +45 -41
  88. package/src/pages-standard/TenantsPage.vue +184 -264
  89. package/src/pages-standard/UsersPage.vue +69 -104
  90. package/src/pages-standard/bundles-page/BundleAccordionList.vue +20 -17
  91. package/src/pages-standard/bundles-page/BundlesKpis.vue +13 -22
  92. package/src/pages-standard/bundles-page/BundlesToolbar.vue +6 -10
  93. package/src/pages-standard/discovery-page/CatalogEntryTransPanel.vue +10 -10
  94. package/src/pages-standard/discovery-page/DiscoveryCapList.vue +5 -5
  95. package/src/pages-standard/discovery-page/DiscoveryFeatureCard.vue +16 -16
  96. package/src/pages-standard/discovery-page/DiscoveryKpis.vue +31 -27
  97. package/src/pages-standard/discovery-page/DiscoveryQuotaCard.vue +7 -7
  98. package/src/pages-standard/marketing-catalog/MarketingCatalogAdmin.vue +1 -1
  99. package/src/pages-standard/marketing-catalog/MarketingCatalogHeader.vue +2 -13
  100. package/src/pages-standard/plan-versions/PlanDiffCard.vue +6 -6
  101. package/src/pages-standard/plan-versions/PlanVersionsDiff.vue +6 -6
  102. package/src/pages-standard/plan-versions/PlanVersionsTimeline.vue +16 -16
  103. package/src/pages-standard/plans-page/PlanBundleOverview.vue +14 -29
  104. package/src/pages-standard/plans-page/PlanPublishDialog.vue +1 -1
  105. package/src/pages-standard/plans-page/PlansPageToast.vue +1 -1
  106. package/src/pages-standard/sa-theme.css +481 -71
  107. package/src/pages-standard/tenant-detail/TenantUsers.vue +2 -8
  108. package/src/pages-standard/tenants/StatusPill.vue +2 -2
  109. package/src/pages-tenant/MySubscriptionBundlesPage.vue +25 -25
  110. package/src/pages-tenant/OnboardingConfigurator.vue +1 -5
  111. package/src/pages-tenant/PackageSnapshotPanel.vue +1 -1
  112. package/src/pages-tenant/TenantPlanSection.vue +12 -20
  113. package/src/quasar/create-super-admin-app.ts +4 -0
  114. package/src/vue/entitlement-provider.ts +0 -1
  115. package/src/vue/feature-router-guard.ts +0 -1
  116. package/src/vue/super-admin-context.ts +106 -1
  117. package/src/vue/use-api-list.ts +2 -1
  118. package/src/vue/use-pagination.ts +63 -0
  119. package/src/vue/use-plans.ts +1 -2
  120. package/src/vue/use-sign-out.ts +90 -0
  121. package/src/vue/use-tenant-billing.ts +1 -1
  122. package/src/vue/use-tenant-manifest.ts +0 -1
  123. package/src/components/KpiCard.vue +0 -53
  124. package/src/components/plan-cockpit/PlanCockpit.vue +0 -1027
  125. package/src/components/plan-cockpit/PlanCockpitAuditLog.vue +0 -72
  126. package/src/components/plan-cockpit/PlanCockpitDiffPanel.vue +0 -99
  127. package/src/components/plan-cockpit/PlanCockpitHeader.vue +0 -101
  128. package/src/components/plan-cockpit/PlanCockpitImpactPanel.vue +0 -112
  129. package/src/components/plan-cockpit/PlanCockpitKpis.vue +0 -68
  130. package/src/components/plan-cockpit/PlanCockpitVersions.vue +0 -249
  131. package/src/components/plan-cockpit/types.ts +0 -72
  132. package/src/components/plan-detail/PlanDetailHeader.vue +0 -194
@@ -1,9 +1,9 @@
1
1
  <template>
2
2
  <q-dialog
3
3
  :model-value="modelValue"
4
- @update:model-value="$emit('update:modelValue', $event)"
5
4
  persistent
6
5
  :no-shake="true"
6
+ @update:model-value="$emit('update:modelValue', $event)"
7
7
  >
8
8
  <div class="pcd-modal" role="dialog" aria-labelledby="pcd-title">
9
9
  <div class="pcd-head">
@@ -51,9 +51,9 @@
51
51
  <div class="pcd-field">
52
52
  <div class="pcd-field-label">{{ msg.createDialog.labelDisplayName }}</div>
53
53
  <input
54
+ v-model="form.label"
54
55
  class="pcd-input"
55
56
  :placeholder="msg.createDialog.placeholderDisplayName"
56
- v-model="form.label"
57
57
  />
58
58
  <div class="pcd-hint">{{ msg.createDialog.hintDisplayName }}</div>
59
59
  </div>
@@ -62,10 +62,10 @@
62
62
  <div class="pcd-field">
63
63
  <div class="pcd-field-label">{{ common.description }}</div>
64
64
  <textarea
65
+ v-model="form.description"
65
66
  class="pcd-input pcd-input--textarea"
66
67
  rows="2"
67
68
  :placeholder="msg.createDialog.placeholderDescription"
68
- v-model="form.description"
69
69
  />
70
70
  </div>
71
71
 
@@ -280,26 +280,14 @@ function onCancel(): void {
280
280
 
281
281
  <style scoped>
282
282
  .pcd-modal {
283
- --pcd-bg: #ffffff;
284
- --pcd-border: #e5e7eb;
285
- --pcd-border-strong: #d1d5db;
286
- --pcd-text: #0f172a;
287
- --pcd-text-2: #475569;
288
- --pcd-text-3: #94a3b8;
289
- --pcd-primary: #2563eb;
290
- --pcd-primary-700: #1d4ed8;
291
- --pcd-danger: #ef4444;
292
- --pcd-font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
293
- --pcd-font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, monospace;
294
-
295
- background: var(--pcd-bg);
283
+ background: var(--sa-bg-app);
296
284
  width: 640px;
297
285
  max-width: 92vw;
298
286
  border-radius: 14px;
299
287
  box-shadow: 0 24px 60px rgba(15, 23, 42, 0.3);
300
288
  overflow: hidden;
301
- font-family: var(--pcd-font-sans);
302
- color: var(--pcd-text);
289
+ font-family: var(--sa-font-body);
290
+ color: var(--sa-heading);
303
291
  }
304
292
  .pcd-modal * {
305
293
  box-sizing: border-box;
@@ -307,7 +295,7 @@ function onCancel(): void {
307
295
 
308
296
  .pcd-head {
309
297
  padding: 18px 22px;
310
- border-bottom: 1px solid var(--pcd-border);
298
+ border-bottom: 1px solid var(--sa-border);
311
299
  display: flex;
312
300
  align-items: flex-start;
313
301
  gap: 12px;
@@ -323,7 +311,7 @@ function onCancel(): void {
323
311
  }
324
312
  .pcd-sub {
325
313
  font-size: 12px;
326
- color: #64748b;
314
+ color: var(--sa-muted);
327
315
  margin-top: 3px;
328
316
  }
329
317
  .pcd-close {
@@ -332,14 +320,14 @@ function onCancel(): void {
332
320
  border-radius: 6px;
333
321
  background: transparent;
334
322
  border: 0;
335
- color: var(--pcd-text-3);
323
+ color: var(--sa-muted-light);
336
324
  cursor: pointer;
337
325
  display: grid;
338
326
  place-items: center;
339
327
  }
340
328
  .pcd-close:hover {
341
329
  background: rgba(15, 23, 42, 0.05);
342
- color: var(--pcd-text);
330
+ color: var(--sa-heading);
343
331
  }
344
332
 
345
333
  .pcd-body {
@@ -376,22 +364,22 @@ function onCancel(): void {
376
364
  margin-bottom: 6px;
377
365
  }
378
366
  .pcd-kbd {
379
- font: 600 10.5px var(--pcd-font-mono);
380
- background: #f1f5f9;
381
- color: #475569;
367
+ font: 600 10.5px var(--sa-font-mono);
368
+ background: var(--sa-border-soft);
369
+ color: var(--sa-muted-dark);
382
370
  padding: 2px 6px;
383
371
  border-radius: 4px;
384
- border: 1px solid #e2e8f0;
372
+ border: 1px solid var(--sa-border);
385
373
  letter-spacing: 0.04em;
386
374
  }
387
375
  .pcd-input {
388
376
  width: 100%;
389
377
  padding: 9px 12px;
390
378
  background: #fff;
391
- border: 1px solid var(--pcd-border);
379
+ border: 1px solid var(--sa-border);
392
380
  border-radius: 7px;
393
- font: 13.5px var(--pcd-font-sans);
394
- color: var(--pcd-text);
381
+ font: 13.5px var(--sa-font-body);
382
+ color: var(--sa-heading);
395
383
  outline: none;
396
384
  transition:
397
385
  border-color 0.12s,
@@ -403,22 +391,22 @@ function onCancel(): void {
403
391
  line-height: 1.5;
404
392
  }
405
393
  .pcd-input:focus {
406
- border-color: var(--pcd-primary);
394
+ border-color: var(--sa-primary);
407
395
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
408
396
  }
409
397
  .pcd-input--error {
410
- border-color: var(--pcd-danger);
398
+ border-color: var(--sa-negative);
411
399
  }
412
400
  .pcd-input--error:focus {
413
401
  box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.12);
414
402
  }
415
403
  .pcd-hint {
416
404
  font-size: 11px;
417
- color: var(--pcd-text-3);
405
+ color: var(--sa-muted-light);
418
406
  margin-top: 4px;
419
407
  }
420
408
  .pcd-hint--error {
421
- color: var(--pcd-danger);
409
+ color: var(--sa-negative);
422
410
  }
423
411
 
424
412
  .pcd-choice-grid {
@@ -427,7 +415,7 @@ function onCancel(): void {
427
415
  gap: 8px;
428
416
  }
429
417
  .pcd-choice {
430
- border: 1.5px solid var(--pcd-border);
418
+ border: 1.5px solid var(--sa-border);
431
419
  border-radius: 9px;
432
420
  padding: 12px 14px;
433
421
  cursor: pointer;
@@ -443,27 +431,27 @@ function onCancel(): void {
443
431
  font-family: inherit;
444
432
  }
445
433
  .pcd-choice:hover {
446
- background: #f8fafc;
434
+ background: var(--sa-bg-surface-2);
447
435
  }
448
436
  .pcd-choice--selected {
449
- border-color: var(--pcd-primary);
437
+ border-color: var(--sa-primary);
450
438
  background: #f0f6ff;
451
439
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.08);
452
440
  }
453
441
  .pcd-choice-title {
454
442
  font-size: 13px;
455
443
  font-weight: 600;
456
- color: var(--pcd-text);
444
+ color: var(--sa-heading);
457
445
  }
458
446
  .pcd-choice-sub {
459
447
  font-size: 11.5px;
460
- color: #64748b;
448
+ color: var(--sa-muted);
461
449
  }
462
450
 
463
451
  .pcd-foot {
464
452
  padding: 14px 22px;
465
453
  background: #fbfbfd;
466
- border-top: 1px solid var(--pcd-border);
454
+ border-top: 1px solid var(--sa-border);
467
455
  display: flex;
468
456
  justify-content: flex-end;
469
457
  gap: 8px;
@@ -474,17 +462,17 @@ function onCancel(): void {
474
462
  gap: 7px;
475
463
  padding: 9px 16px;
476
464
  border-radius: 7px;
477
- font: 500 13px var(--pcd-font-sans);
465
+ font: 500 13px var(--sa-font-body);
478
466
  cursor: pointer;
479
- border: 1px solid var(--pcd-border-strong);
467
+ border: 1px solid var(--sa-border-strong);
480
468
  background: #fff;
481
- color: var(--pcd-text);
469
+ color: var(--sa-heading);
482
470
  transition:
483
471
  background 0.12s,
484
472
  border-color 0.12s;
485
473
  }
486
474
  .pcd-btn:hover:not(:disabled) {
487
- background: #f8fafc;
475
+ background: var(--sa-bg-surface-2);
488
476
  }
489
477
  .pcd-btn:disabled {
490
478
  cursor: not-allowed;
@@ -498,12 +486,12 @@ function onCancel(): void {
498
486
  background: rgba(15, 23, 42, 0.05);
499
487
  }
500
488
  .pcd-btn--primary {
501
- background: var(--pcd-primary);
502
- border-color: var(--pcd-primary);
489
+ background: var(--sa-primary);
490
+ border-color: var(--sa-primary);
503
491
  color: #fff;
504
492
  }
505
493
  .pcd-btn--primary:hover:not(:disabled) {
506
- background: var(--pcd-primary-700);
494
+ background: var(--sa-primary-strong);
507
495
  }
508
496
  .pcd-ico {
509
497
  display: inline-flex;