@saasicat/ui-vue 1.0.0-rc.0 → 1.0.0-rc.2

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 (131) hide show
  1. package/README.md +1 -1
  2. package/dist/.build-stamp +1 -1
  3. package/dist/{batch-column-fetcher-zs-5eqB9.d.ts → batch-column-fetcher-Dk9X92db.d.cts} +2 -2
  4. package/dist/{batch-column-fetcher-BlRPjUST.d.cts → batch-column-fetcher-VwjOxerL.d.ts} +2 -2
  5. package/dist/{catalog-Q7RPiOHD.d.cts → catalog-C5VKGbxk.d.cts} +42 -42
  6. package/dist/{catalog-Q7RPiOHD.d.ts → catalog-C5VKGbxk.d.ts} +42 -42
  7. package/dist/{chunk-LEWVBULC.js → chunk-4CJBABLZ.js} +4 -4
  8. package/dist/{chunk-5GVZKTJY.js → chunk-6X6AGH66.js} +1 -1
  9. package/dist/{chunk-RSRDRTVZ.js → chunk-A7JICGQ5.js} +1 -1
  10. package/dist/{chunk-7TDWP76O.js → chunk-L7HPDVHV.js} +27 -2
  11. package/dist/{chunk-SOB6CK3R.js → chunk-P4EJF43F.js} +1 -1
  12. package/dist/client/index.cjs +29 -2
  13. package/dist/client/index.d.cts +16 -6
  14. package/dist/client/index.d.ts +16 -6
  15. package/dist/client/index.js +8 -4
  16. package/dist/index.cjs +31 -4
  17. package/dist/index.d.cts +5 -5
  18. package/dist/index.d.ts +5 -5
  19. package/dist/index.js +10 -6
  20. package/dist/quasar/index.cjs +1 -1
  21. package/dist/quasar/index.d.cts +3 -3
  22. package/dist/quasar/index.d.ts +3 -3
  23. package/dist/quasar/index.js +2 -2
  24. package/dist/{resource-registry-DFWs4x5p.d.ts → resource-registry-CrHUvVx6.d.cts} +2 -2
  25. package/dist/{resource-registry-BQlRV_Fi.d.cts → resource-registry-Cw_c0F11.d.ts} +2 -2
  26. package/dist/vue/index.cjs +4 -4
  27. package/dist/vue/index.d.cts +5 -5
  28. package/dist/vue/index.d.ts +5 -5
  29. package/dist/vue/index.js +4 -4
  30. package/package.json +5 -4
  31. package/src/auth/SuperAdminLoginPage.vue +4 -3
  32. package/src/auth/SuperAdminSetupWizard.vue +4 -3
  33. package/src/client/action-registry.ts +1 -1
  34. package/src/client/admin-resource-client.ts +1 -1
  35. package/src/client/batch-column-fetcher.ts +1 -1
  36. package/src/client/boot-loader.ts +1 -1
  37. package/src/client/i18n/format.ts +2 -2
  38. package/src/client/i18n/messages/nav.ts +1 -1
  39. package/src/client/index.ts +2 -1
  40. package/src/client/manifest-loader.ts +1 -1
  41. package/src/client/nav-builder.ts +1 -1
  42. package/src/client/resources/audit.resource.ts +1 -1
  43. package/src/client/resources/bundles.resource.ts +1 -1
  44. package/src/client/resources/catalog.resource.ts +1 -1
  45. package/src/client/resources/dashboard.resource.ts +1 -1
  46. package/src/client/resources/discovery.resource.ts +1 -1
  47. package/src/client/resources/marketing.resource.ts +1 -1
  48. package/src/client/resources/plans.resource.ts +1 -1
  49. package/src/client/resources/promo-codes.resource.ts +1 -1
  50. package/src/client/resources/promotions.resource.ts +1 -1
  51. package/src/client/resources/subscriptions.resource.ts +1 -1
  52. package/src/client/resources/tenants.resource.ts +1 -1
  53. package/src/client/resources/users.resource.ts +1 -1
  54. package/src/client/text-shape.ts +62 -0
  55. package/src/features/bundle/BundleVersionInlineEditor.vue +1 -1
  56. package/src/features/bundle/BundleVersionPublishDialog.vue +1 -1
  57. package/src/features/bundle/BundleVersionStrip.vue +1 -1
  58. package/src/features/bundle/VersionDiffPreview.vue +1 -1
  59. package/src/features/bundle/internal/BundleCreatePanel.vue +5 -5
  60. package/src/features/bundle/internal/BundleFeaturesEditor.vue +1 -1
  61. package/src/features/bundle/internal/BundlePlanCompatPicker.vue +1 -1
  62. package/src/features/bundle/internal/BundleQuotasEditor.vue +1 -1
  63. package/src/features/bundle/internal/BundleStatusBanner.vue +1 -1
  64. package/src/features/bundle/internal/bundle-version-status.ts +1 -1
  65. package/src/features/bundle/internal/catalog-i18n.ts +1 -1
  66. package/src/features/marketing/MarketingPromotionsTab.vue +1 -1
  67. package/src/features/plan/PlanDetail.vue +1 -1
  68. package/src/features/plan/PlanList.vue +1 -1
  69. package/src/features/plan/PlanMatrix.vue +1 -1
  70. package/src/features/plan/PlanReview.vue +1 -1
  71. package/src/features/plan/PlanTerminateDialog.vue +1 -1
  72. package/src/features/plan/internal/PlanDetailKpis.vue +1 -1
  73. package/src/features/plan/internal/PlanTitleEdit.vue +1 -1
  74. package/src/features/plan/internal/PlanVersionDiffPanel.vue +1 -1
  75. package/src/features/plan/internal/PlanVersionsPanel.vue +1 -1
  76. package/src/features/plan/internal/plan-detail.types.ts +1 -1
  77. package/src/features/plan/plan-area-context.ts +1 -1
  78. package/src/features/tenant/TenantActionConfirmDialog.vue +1 -1
  79. package/src/internal/bundles-page/BundleAccordionList.vue +1 -1
  80. package/src/internal/bundles-page/BundleDetailPanel.vue +1 -1
  81. package/src/internal/dialogs/PilotCreateDialog.vue +12 -9
  82. package/src/internal/discovery-page/CatalogEntryTransPanel.vue +1 -1
  83. package/src/internal/discovery-page/DiscoveryCapList.vue +1 -1
  84. package/src/internal/discovery-page/DiscoveryFeatureCard.vue +1 -1
  85. package/src/internal/discovery-page/DiscoveryQuotaCard.vue +1 -1
  86. package/src/internal/discovery-page/DiscoveryStatusControl.vue +1 -1
  87. package/src/internal/discovery-page/discovery-ui.ts +1 -1
  88. package/src/internal/marketing-catalog/MarketingCatalogAdmin.vue +1 -1
  89. package/src/internal/marketing-catalog/MarketingCatalogPreview.vue +1 -1
  90. package/src/internal/marketing-catalog/types.ts +1 -1
  91. package/src/internal/plan-versions/PlanDiffCard.vue +1 -1
  92. package/src/internal/plan-versions/PlanVersionsDiff.vue +1 -1
  93. package/src/internal/plan-versions/catalog-history.types.ts +1 -1
  94. package/src/internal/plans-page/PlanBundleOverview.vue +1 -1
  95. package/src/internal/plans-page/PlanPublishDialog.vue +1 -1
  96. package/src/internal/plans-page/types.ts +1 -1
  97. package/src/layouts/AdminLayout.vue +1 -1
  98. package/src/pages/BundlesPage.vue +3 -3
  99. package/src/pages/DashboardPage.vue +1 -1
  100. package/src/pages/DiscoveryPage.vue +1 -1
  101. package/src/pages/MarketingCatalogPage.vue +1 -1
  102. package/src/pages/PlansPage.vue +1 -1
  103. package/src/pages/PromoCodeDetailPage.vue +1 -1
  104. package/src/pages/TenantDetailPage.vue +1 -1
  105. package/src/pages/TenantsPage.vue +1 -1
  106. package/src/vue/manifest-store-factory.ts +1 -1
  107. package/src/vue/project-page-host.ts +1 -1
  108. package/src/vue/status.ts +1 -1
  109. package/src/vue/super-admin-context.ts +1 -1
  110. package/src/vue/use-actions.ts +1 -1
  111. package/src/vue/use-audit-entries.ts +1 -1
  112. package/src/vue/use-batch-columns.ts +1 -1
  113. package/src/vue/use-bundle-versions-map.ts +1 -1
  114. package/src/vue/use-bundles.ts +1 -1
  115. package/src/vue/use-catalog-entries.ts +1 -1
  116. package/src/vue/use-discovery.ts +1 -1
  117. package/src/vue/use-live-plan-versions.ts +1 -1
  118. package/src/vue/use-manifest.ts +1 -1
  119. package/src/vue/use-marketing-projections.ts +1 -1
  120. package/src/vue/use-nav.ts +1 -1
  121. package/src/vue/use-plan-editor.ts +1 -1
  122. package/src/vue/use-plans.ts +1 -1
  123. package/src/vue/use-platform-tenant-actions.ts +1 -1
  124. package/src/vue/use-promotions.ts +1 -1
  125. package/src/vue/use-public-boot.ts +1 -1
  126. package/src/vue/use-subscription-draft.ts +1 -1
  127. package/src/vue/use-super-admin-context.ts +1 -1
  128. package/src/vue/use-tenant-action-flow.ts +1 -1
  129. package/src/vue/use-tenant-billing-catalog.ts +1 -1
  130. package/src/vue/use-tenant-subscription-bundles.ts +1 -1
  131. package/src/vue/use-tenants.ts +1 -1
package/README.md CHANGED
@@ -17,7 +17,7 @@ root config) enforces the boundaries in CI.
17
17
 
18
18
  | Entry | Source | May import | Contents |
19
19
  | ----------------------------------------------------------------------------------------------- | -------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
20
- | `@saasicat/ui-vue/client` | `src/client/` | `@saasicat/types` only | Framework-free core: `BootLoader`, `ManifestLoader` (ETag cache), nav builder, action registry, batch column fetcher, the `HttpClient`/`KvStore` contract with its `fetch` and axios adapters, `AdminError`. Usable from any framework or plain Node/TypeScript. |
20
+ | `@saasicat/ui-vue/client` | `src/client/` | `@saasicat/core` only | Framework-free core: `BootLoader`, `ManifestLoader` (ETag cache), nav builder, action registry, batch column fetcher, the `HttpClient`/`KvStore` contract with its `fetch` and axios adapters, `AdminError`. Usable from any framework or plain Node/TypeScript. |
21
21
  | `@saasicat/ui-vue` (main) | `src/vue/` (+ client re-exports) | Vue, `vue-router`, Pinia — **no Quasar** | Composables (`useTenants`, `usePlanEditor`, …), router guards, injection keys + shell contract, notify-port type, optional Pinia store factory. |
22
22
  | `@saasicat/ui-vue/quasar` | `src/quasar/` | everything above + Quasar | `createSuperAdminApp()` bootstrap and the Quasar notify-port implementation. |
23
23
  | `@saasicat/ui-vue/pages/*.vue`, `/layouts/*.vue`, `/auth/*.vue`, `/ui/*.vue`, `/pages-tenant/*` | SFC directories | everything | The Quasar reference UI, shipped as raw `.vue` from `src/` (compiled by the consumer's Vite). |
package/dist/.build-stamp CHANGED
@@ -1 +1 @@
1
- c0ad4bfbe61ec2533f28d5a963436a4c73dd8f8c82d3c138e9138b98cc34d5a8
1
+ 14b1904cc8763759de50625a5589d989cdf7e6be7f84abe3f6c54aa3ca8ac9ae
@@ -1,5 +1,5 @@
1
- import { a5 as SaMessages, H as HttpClient, l as KvStore, a2 as SaLocale, aA as SaNavMessages } from './catalog-Q7RPiOHD.js';
2
- import { PublicBootResponse, AdminManifest, StandardPageKey, TenantColumnDef } from '@saasicat/types';
1
+ import { a5 as SaMessages, H as HttpClient, l as KvStore, a2 as SaLocale, aA as SaNavMessages } from './catalog-C5VKGbxk.cjs';
2
+ import { PublicBootResponse, AdminManifest, StandardPageKey, TenantColumnDef } from '@saasicat/core';
3
3
 
4
4
  /**
5
5
  * Marks an error as one this package raised. Called by the package's own error
@@ -1,5 +1,5 @@
1
- import { a5 as SaMessages, H as HttpClient, l as KvStore, a2 as SaLocale, aA as SaNavMessages } from './catalog-Q7RPiOHD.cjs';
2
- import { PublicBootResponse, AdminManifest, StandardPageKey, TenantColumnDef } from '@saasicat/types';
1
+ import { a5 as SaMessages, H as HttpClient, l as KvStore, a2 as SaLocale, aA as SaNavMessages } from './catalog-C5VKGbxk.js';
2
+ import { PublicBootResponse, AdminManifest, StandardPageKey, TenantColumnDef } from '@saasicat/core';
3
3
 
4
4
  /**
5
5
  * Marks an error as one this package raised. Called by the package's own error
@@ -1,5 +1,5 @@
1
- import * as _saasicat_types from '@saasicat/types';
2
- import { AdminAuditListFilter, AuditEntry, TenantListFilter, TenantDto, AdminTenantDetail, PromoCodeRecord, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, MarketingSettingsRow, DiscoverySnapshot, KpiCardDef, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, StandardPageKey, AdminManifest, TenantActionDef } from '@saasicat/types';
1
+ import * as _saasicat_core from '@saasicat/core';
2
+ import { AdminAuditListFilter, AuditEntry, TenantListFilter, TenantDto, AdminTenantDetail, PromoCodeRecord, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, MarketingSettingsRow, DiscoverySnapshot, KpiCardDef, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, StandardPageKey, AdminManifest, TenantActionDef } from '@saasicat/core';
3
3
 
4
4
  /**
5
5
  * Minimal abstraction over `fetch`. Consumers may pass their own
@@ -612,95 +612,95 @@ declare const planVersionsResource: ResourceDef<{
612
612
  */
613
613
  declare const platformResources: {
614
614
  plans: ResourceDef<{
615
- readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.PlanRow[]>;
615
+ readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.PlanRow[]>;
616
616
  readonly tenantCounts: (http: HttpClient, ctx: ResourceContext) => Promise<Record<string, number>>;
617
- readonly create: (http: HttpClient, ctx: ResourceContext, data: Omit<_saasicat_types.CreatePlanData, "projectKey">) => Promise<_saasicat_types.PlanRow>;
618
- readonly update: (http: HttpClient, ctx: ResourceContext, planId: string, data: _saasicat_types.UpdatePlanData) => Promise<_saasicat_types.PlanRow>;
617
+ readonly create: (http: HttpClient, ctx: ResourceContext, data: Omit<_saasicat_core.CreatePlanData, "projectKey">) => Promise<_saasicat_core.PlanRow>;
618
+ readonly update: (http: HttpClient, ctx: ResourceContext, planId: string, data: _saasicat_core.UpdatePlanData) => Promise<_saasicat_core.PlanRow>;
619
619
  readonly softDelete: (http: HttpClient, ctx: ResourceContext, planId: string) => Promise<void>;
620
620
  readonly hardDelete: (http: HttpClient, ctx: ResourceContext, planId: string) => Promise<void>;
621
621
  }>;
622
622
  planVersions: ResourceDef<{
623
- readonly listForPlan: (http: HttpClient, ctx: ResourceContext, planId: string) => Promise<_saasicat_types.PlanVersionRow[]>;
624
- readonly createDraft: (http: HttpClient, ctx: ResourceContext, planId: string, data: Omit<_saasicat_types.CreatePlanVersionDraftData, "planId">) => Promise<_saasicat_types.PlanVersionMutationResult>;
625
- readonly updateDraft: (http: HttpClient, ctx: ResourceContext, versionId: string, data: _saasicat_types.UpdatePlanVersionDraftData) => Promise<_saasicat_types.PlanVersionMutationResult>;
626
- readonly publish: (http: HttpClient, ctx: ResourceContext, versionId: string, options?: PublishPlanVersionOptions) => Promise<_saasicat_types.PlanVersionMutationResult>;
623
+ readonly listForPlan: (http: HttpClient, ctx: ResourceContext, planId: string) => Promise<_saasicat_core.PlanVersionRow[]>;
624
+ readonly createDraft: (http: HttpClient, ctx: ResourceContext, planId: string, data: Omit<_saasicat_core.CreatePlanVersionDraftData, "planId">) => Promise<_saasicat_core.PlanVersionMutationResult>;
625
+ readonly updateDraft: (http: HttpClient, ctx: ResourceContext, versionId: string, data: _saasicat_core.UpdatePlanVersionDraftData) => Promise<_saasicat_core.PlanVersionMutationResult>;
626
+ readonly publish: (http: HttpClient, ctx: ResourceContext, versionId: string, options?: PublishPlanVersionOptions) => Promise<_saasicat_core.PlanVersionMutationResult>;
627
627
  readonly discardDraft: (http: HttpClient, ctx: ResourceContext, versionId: string) => Promise<void>;
628
- readonly terminate: (http: HttpClient, ctx: ResourceContext, versionId: string, endsAt: string) => Promise<_saasicat_types.PlanVersionRow>;
628
+ readonly terminate: (http: HttpClient, ctx: ResourceContext, versionId: string, endsAt: string) => Promise<_saasicat_core.PlanVersionRow>;
629
629
  }>;
630
630
  bundles: ResourceDef<{
631
- readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.BundleRow[]>;
632
- readonly create: (http: HttpClient, ctx: ResourceContext, data: Omit<_saasicat_types.CreateBundleData, "projectKey">) => Promise<_saasicat_types.BundleRow>;
633
- readonly update: (http: HttpClient, ctx: ResourceContext, bundleId: string, data: _saasicat_types.UpdateBundleData) => Promise<_saasicat_types.BundleRow>;
631
+ readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.BundleRow[]>;
632
+ readonly create: (http: HttpClient, ctx: ResourceContext, data: Omit<_saasicat_core.CreateBundleData, "projectKey">) => Promise<_saasicat_core.BundleRow>;
633
+ readonly update: (http: HttpClient, ctx: ResourceContext, bundleId: string, data: _saasicat_core.UpdateBundleData) => Promise<_saasicat_core.BundleRow>;
634
634
  readonly softDelete: (http: HttpClient, ctx: ResourceContext, bundleId: string) => Promise<void>;
635
635
  }>;
636
636
  bundleVersions: ResourceDef<{
637
- readonly listForBundle: (http: HttpClient, ctx: ResourceContext, bundleId: string) => Promise<_saasicat_types.BundleVersionRow[]>;
638
- readonly createDraft: (http: HttpClient, ctx: ResourceContext, bundleId: string, data: Omit<_saasicat_types.CreateBundleVersionDraftData, "bundleId">) => Promise<_saasicat_types.BundleVersionMutationResult>;
639
- readonly updateDraft: (http: HttpClient, ctx: ResourceContext, versionId: string, data: _saasicat_types.UpdateBundleVersionDraftData) => Promise<_saasicat_types.BundleVersionMutationResult>;
640
- readonly publish: (http: HttpClient, ctx: ResourceContext, versionId: string, options?: PublishBundleVersionOptions) => Promise<_saasicat_types.BundleVersionMutationResult>;
637
+ readonly listForBundle: (http: HttpClient, ctx: ResourceContext, bundleId: string) => Promise<_saasicat_core.BundleVersionRow[]>;
638
+ readonly createDraft: (http: HttpClient, ctx: ResourceContext, bundleId: string, data: Omit<_saasicat_core.CreateBundleVersionDraftData, "bundleId">) => Promise<_saasicat_core.BundleVersionMutationResult>;
639
+ readonly updateDraft: (http: HttpClient, ctx: ResourceContext, versionId: string, data: _saasicat_core.UpdateBundleVersionDraftData) => Promise<_saasicat_core.BundleVersionMutationResult>;
640
+ readonly publish: (http: HttpClient, ctx: ResourceContext, versionId: string, options?: PublishBundleVersionOptions) => Promise<_saasicat_core.BundleVersionMutationResult>;
641
641
  readonly discardDraft: (http: HttpClient, ctx: ResourceContext, versionId: string) => Promise<void>;
642
642
  }>;
643
643
  catalog: ResourceDef<{
644
- readonly capabilities: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.CapabilityCatalogEntryRow[]>;
645
- readonly features: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.FeatureCatalogEntryRow[]>;
646
- readonly quotas: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.QuotaCatalogEntryRow[]>;
647
- readonly reviewFeature: (http: HttpClient, ctx: ResourceContext, featureKey: string, data: _saasicat_types.ReviewCatalogEntryData) => Promise<_saasicat_types.FeatureCatalogEntryRow>;
648
- readonly reviewQuota: (http: HttpClient, ctx: ResourceContext, quotaKey: string, data: _saasicat_types.ReviewCatalogEntryData) => Promise<_saasicat_types.QuotaCatalogEntryRow>;
649
- readonly setFeatureI18n: (http: HttpClient, ctx: ResourceContext, featureKey: string, i18n: _saasicat_types.CatalogEntryI18n) => Promise<_saasicat_types.FeatureCatalogEntryRow>;
650
- readonly setQuotaI18n: (http: HttpClient, ctx: ResourceContext, quotaKey: string, i18n: _saasicat_types.CatalogEntryI18n) => Promise<_saasicat_types.QuotaCatalogEntryRow>;
651
- readonly setFeatureBase: (http: HttpClient, ctx: ResourceContext, featureKey: string, data: _saasicat_types.UpdateCatalogEntryBaseData) => Promise<_saasicat_types.FeatureCatalogEntryRow>;
652
- readonly setQuotaBase: (http: HttpClient, ctx: ResourceContext, quotaKey: string, data: _saasicat_types.UpdateCatalogEntryBaseData) => Promise<_saasicat_types.QuotaCatalogEntryRow>;
653
- readonly syncDiscovery: (http: HttpClient, ctx: ResourceContext, snapshot: _saasicat_types.DiscoverySnapshot) => Promise<_saasicat_types.SyncDiscoveryResult>;
644
+ readonly capabilities: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.CapabilityCatalogEntryRow[]>;
645
+ readonly features: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.FeatureCatalogEntryRow[]>;
646
+ readonly quotas: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.QuotaCatalogEntryRow[]>;
647
+ readonly reviewFeature: (http: HttpClient, ctx: ResourceContext, featureKey: string, data: _saasicat_core.ReviewCatalogEntryData) => Promise<_saasicat_core.FeatureCatalogEntryRow>;
648
+ readonly reviewQuota: (http: HttpClient, ctx: ResourceContext, quotaKey: string, data: _saasicat_core.ReviewCatalogEntryData) => Promise<_saasicat_core.QuotaCatalogEntryRow>;
649
+ readonly setFeatureI18n: (http: HttpClient, ctx: ResourceContext, featureKey: string, i18n: _saasicat_core.CatalogEntryI18n) => Promise<_saasicat_core.FeatureCatalogEntryRow>;
650
+ readonly setQuotaI18n: (http: HttpClient, ctx: ResourceContext, quotaKey: string, i18n: _saasicat_core.CatalogEntryI18n) => Promise<_saasicat_core.QuotaCatalogEntryRow>;
651
+ readonly setFeatureBase: (http: HttpClient, ctx: ResourceContext, featureKey: string, data: _saasicat_core.UpdateCatalogEntryBaseData) => Promise<_saasicat_core.FeatureCatalogEntryRow>;
652
+ readonly setQuotaBase: (http: HttpClient, ctx: ResourceContext, quotaKey: string, data: _saasicat_core.UpdateCatalogEntryBaseData) => Promise<_saasicat_core.QuotaCatalogEntryRow>;
653
+ readonly syncDiscovery: (http: HttpClient, ctx: ResourceContext, snapshot: _saasicat_core.DiscoverySnapshot) => Promise<_saasicat_core.SyncDiscoveryResult>;
654
654
  }>;
655
655
  dashboard: ResourceDef<{
656
- readonly kpi: (http: HttpClient, _ctx: ResourceContext, card: _saasicat_types.KpiCardDef) => Promise<KpiReading>;
656
+ readonly kpi: (http: HttpClient, _ctx: ResourceContext, card: _saasicat_core.KpiCardDef) => Promise<KpiReading>;
657
657
  }>;
658
658
  discovery: ResourceDef<{
659
659
  readonly read: (http: HttpClient, ctx: ResourceContext, etag?: string | null) => Promise<DiscoveryRead>;
660
660
  readonly rescan: (http: HttpClient, ctx: ResourceContext) => Promise<{
661
- snapshot: _saasicat_types.DiscoverySnapshot;
661
+ snapshot: _saasicat_core.DiscoverySnapshot;
662
662
  etag: string | null;
663
663
  }>;
664
664
  }>;
665
665
  marketing: ResourceDef<{
666
- readonly listProjections: (http: HttpClient, ctx: ResourceContext, filter?: MarketingProjectionsFilter) => Promise<_saasicat_types.MarketingProjectionRow[]>;
667
- readonly createProjection: (http: HttpClient, ctx: ResourceContext, data: _saasicat_types.CreateMarketingProjectionData) => Promise<_saasicat_types.MarketingProjectionRow>;
668
- readonly updateProjection: (http: HttpClient, ctx: ResourceContext, id: string, data: _saasicat_types.UpdateMarketingProjectionData) => Promise<_saasicat_types.MarketingProjectionRow>;
666
+ readonly listProjections: (http: HttpClient, ctx: ResourceContext, filter?: MarketingProjectionsFilter) => Promise<_saasicat_core.MarketingProjectionRow[]>;
667
+ readonly createProjection: (http: HttpClient, ctx: ResourceContext, data: _saasicat_core.CreateMarketingProjectionData) => Promise<_saasicat_core.MarketingProjectionRow>;
668
+ readonly updateProjection: (http: HttpClient, ctx: ResourceContext, id: string, data: _saasicat_core.UpdateMarketingProjectionData) => Promise<_saasicat_core.MarketingProjectionRow>;
669
669
  readonly deleteProjection: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<void>;
670
- readonly settings: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.MarketingSettingsRow | null>;
670
+ readonly settings: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.MarketingSettingsRow | null>;
671
671
  readonly saveSettings: (http: HttpClient, ctx: ResourceContext, activeLocales: readonly string[]) => Promise<void>;
672
672
  }>;
673
673
  promoCodes: ResourceDef<{
674
- readonly list: (http: HttpClient, ctx: ResourceContext, filter?: PromoCodesFilter) => Promise<_saasicat_types.PromoCodeRecord[]>;
674
+ readonly list: (http: HttpClient, ctx: ResourceContext, filter?: PromoCodesFilter) => Promise<_saasicat_core.PromoCodeRecord[]>;
675
675
  readonly detail: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<PromoDetail | null>;
676
676
  readonly create: (http: HttpClient, ctx: ResourceContext, payload: unknown) => Promise<void>;
677
677
  readonly update: (http: HttpClient, ctx: ResourceContext, id: string, payload: unknown) => Promise<void>;
678
678
  readonly remove: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<void>;
679
679
  }>;
680
680
  promotions: ResourceDef<{
681
- readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.PromotionRow[]>;
682
- readonly create: (http: HttpClient, ctx: ResourceContext, data: _saasicat_types.CreatePromotionData) => Promise<_saasicat_types.PromotionRow>;
683
- readonly update: (http: HttpClient, ctx: ResourceContext, id: string, data: _saasicat_types.UpdatePromotionData) => Promise<_saasicat_types.PromotionRow>;
681
+ readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.PromotionRow[]>;
682
+ readonly create: (http: HttpClient, ctx: ResourceContext, data: _saasicat_core.CreatePromotionData) => Promise<_saasicat_core.PromotionRow>;
683
+ readonly update: (http: HttpClient, ctx: ResourceContext, id: string, data: _saasicat_core.UpdatePromotionData) => Promise<_saasicat_core.PromotionRow>;
684
684
  readonly remove: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<void>;
685
685
  }>;
686
686
  tenants: ResourceDef<{
687
- readonly list: ListOp<_saasicat_types.TenantDto, TenantsListFilter>;
688
- readonly detail: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<_saasicat_types.AdminTenantDetail | null>;
687
+ readonly list: ListOp<_saasicat_core.TenantDto, TenantsListFilter>;
688
+ readonly detail: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<_saasicat_core.AdminTenantDetail | null>;
689
689
  readonly suspend: (http: HttpClient, ctx: ResourceContext, slug: string, reason: string) => Promise<void>;
690
690
  readonly reactivate: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<void>;
691
691
  }>;
692
692
  users: ResourceDef<{
693
- readonly list: (http: HttpClient, ctx: ResourceContext, filter?: _saasicat_types.AdminUserListFilter) => Promise<_saasicat_types.AdminUserListRow[]>;
693
+ readonly list: (http: HttpClient, ctx: ResourceContext, filter?: _saasicat_core.AdminUserListFilter) => Promise<_saasicat_core.AdminUserListRow[]>;
694
694
  readonly resetPassword: (http: HttpClient, ctx: ResourceContext, id: string, reason: string, mfaCode?: string) => Promise<{
695
695
  oneTimePassword?: string;
696
696
  } | null>;
697
697
  readonly deactivate: (http: HttpClient, ctx: ResourceContext, id: string, reason: string, mfaCode?: string) => Promise<void>;
698
698
  }>;
699
699
  subscriptions: ResourceDef<{
700
- readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.AdminSubscriptionListRow[]>;
700
+ readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.AdminSubscriptionListRow[]>;
701
701
  }>;
702
702
  audit: ResourceDef<{
703
- readonly list: (http: HttpClient, ctx: ResourceContext, filter?: AuditListFilter) => Promise<_saasicat_types.AuditEntry[]>;
703
+ readonly list: (http: HttpClient, ctx: ResourceContext, filter?: AuditListFilter) => Promise<_saasicat_core.AuditEntry[]>;
704
704
  }>;
705
705
  pilots: ResourceDef<{
706
706
  readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<PilotRow[]>;
@@ -1,5 +1,5 @@
1
- import * as _saasicat_types from '@saasicat/types';
2
- import { AdminAuditListFilter, AuditEntry, TenantListFilter, TenantDto, AdminTenantDetail, PromoCodeRecord, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, MarketingSettingsRow, DiscoverySnapshot, KpiCardDef, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, StandardPageKey, AdminManifest, TenantActionDef } from '@saasicat/types';
1
+ import * as _saasicat_core from '@saasicat/core';
2
+ import { AdminAuditListFilter, AuditEntry, TenantListFilter, TenantDto, AdminTenantDetail, PromoCodeRecord, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, MarketingSettingsRow, DiscoverySnapshot, KpiCardDef, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, StandardPageKey, AdminManifest, TenantActionDef } from '@saasicat/core';
3
3
 
4
4
  /**
5
5
  * Minimal abstraction over `fetch`. Consumers may pass their own
@@ -612,95 +612,95 @@ declare const planVersionsResource: ResourceDef<{
612
612
  */
613
613
  declare const platformResources: {
614
614
  plans: ResourceDef<{
615
- readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.PlanRow[]>;
615
+ readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.PlanRow[]>;
616
616
  readonly tenantCounts: (http: HttpClient, ctx: ResourceContext) => Promise<Record<string, number>>;
617
- readonly create: (http: HttpClient, ctx: ResourceContext, data: Omit<_saasicat_types.CreatePlanData, "projectKey">) => Promise<_saasicat_types.PlanRow>;
618
- readonly update: (http: HttpClient, ctx: ResourceContext, planId: string, data: _saasicat_types.UpdatePlanData) => Promise<_saasicat_types.PlanRow>;
617
+ readonly create: (http: HttpClient, ctx: ResourceContext, data: Omit<_saasicat_core.CreatePlanData, "projectKey">) => Promise<_saasicat_core.PlanRow>;
618
+ readonly update: (http: HttpClient, ctx: ResourceContext, planId: string, data: _saasicat_core.UpdatePlanData) => Promise<_saasicat_core.PlanRow>;
619
619
  readonly softDelete: (http: HttpClient, ctx: ResourceContext, planId: string) => Promise<void>;
620
620
  readonly hardDelete: (http: HttpClient, ctx: ResourceContext, planId: string) => Promise<void>;
621
621
  }>;
622
622
  planVersions: ResourceDef<{
623
- readonly listForPlan: (http: HttpClient, ctx: ResourceContext, planId: string) => Promise<_saasicat_types.PlanVersionRow[]>;
624
- readonly createDraft: (http: HttpClient, ctx: ResourceContext, planId: string, data: Omit<_saasicat_types.CreatePlanVersionDraftData, "planId">) => Promise<_saasicat_types.PlanVersionMutationResult>;
625
- readonly updateDraft: (http: HttpClient, ctx: ResourceContext, versionId: string, data: _saasicat_types.UpdatePlanVersionDraftData) => Promise<_saasicat_types.PlanVersionMutationResult>;
626
- readonly publish: (http: HttpClient, ctx: ResourceContext, versionId: string, options?: PublishPlanVersionOptions) => Promise<_saasicat_types.PlanVersionMutationResult>;
623
+ readonly listForPlan: (http: HttpClient, ctx: ResourceContext, planId: string) => Promise<_saasicat_core.PlanVersionRow[]>;
624
+ readonly createDraft: (http: HttpClient, ctx: ResourceContext, planId: string, data: Omit<_saasicat_core.CreatePlanVersionDraftData, "planId">) => Promise<_saasicat_core.PlanVersionMutationResult>;
625
+ readonly updateDraft: (http: HttpClient, ctx: ResourceContext, versionId: string, data: _saasicat_core.UpdatePlanVersionDraftData) => Promise<_saasicat_core.PlanVersionMutationResult>;
626
+ readonly publish: (http: HttpClient, ctx: ResourceContext, versionId: string, options?: PublishPlanVersionOptions) => Promise<_saasicat_core.PlanVersionMutationResult>;
627
627
  readonly discardDraft: (http: HttpClient, ctx: ResourceContext, versionId: string) => Promise<void>;
628
- readonly terminate: (http: HttpClient, ctx: ResourceContext, versionId: string, endsAt: string) => Promise<_saasicat_types.PlanVersionRow>;
628
+ readonly terminate: (http: HttpClient, ctx: ResourceContext, versionId: string, endsAt: string) => Promise<_saasicat_core.PlanVersionRow>;
629
629
  }>;
630
630
  bundles: ResourceDef<{
631
- readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.BundleRow[]>;
632
- readonly create: (http: HttpClient, ctx: ResourceContext, data: Omit<_saasicat_types.CreateBundleData, "projectKey">) => Promise<_saasicat_types.BundleRow>;
633
- readonly update: (http: HttpClient, ctx: ResourceContext, bundleId: string, data: _saasicat_types.UpdateBundleData) => Promise<_saasicat_types.BundleRow>;
631
+ readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.BundleRow[]>;
632
+ readonly create: (http: HttpClient, ctx: ResourceContext, data: Omit<_saasicat_core.CreateBundleData, "projectKey">) => Promise<_saasicat_core.BundleRow>;
633
+ readonly update: (http: HttpClient, ctx: ResourceContext, bundleId: string, data: _saasicat_core.UpdateBundleData) => Promise<_saasicat_core.BundleRow>;
634
634
  readonly softDelete: (http: HttpClient, ctx: ResourceContext, bundleId: string) => Promise<void>;
635
635
  }>;
636
636
  bundleVersions: ResourceDef<{
637
- readonly listForBundle: (http: HttpClient, ctx: ResourceContext, bundleId: string) => Promise<_saasicat_types.BundleVersionRow[]>;
638
- readonly createDraft: (http: HttpClient, ctx: ResourceContext, bundleId: string, data: Omit<_saasicat_types.CreateBundleVersionDraftData, "bundleId">) => Promise<_saasicat_types.BundleVersionMutationResult>;
639
- readonly updateDraft: (http: HttpClient, ctx: ResourceContext, versionId: string, data: _saasicat_types.UpdateBundleVersionDraftData) => Promise<_saasicat_types.BundleVersionMutationResult>;
640
- readonly publish: (http: HttpClient, ctx: ResourceContext, versionId: string, options?: PublishBundleVersionOptions) => Promise<_saasicat_types.BundleVersionMutationResult>;
637
+ readonly listForBundle: (http: HttpClient, ctx: ResourceContext, bundleId: string) => Promise<_saasicat_core.BundleVersionRow[]>;
638
+ readonly createDraft: (http: HttpClient, ctx: ResourceContext, bundleId: string, data: Omit<_saasicat_core.CreateBundleVersionDraftData, "bundleId">) => Promise<_saasicat_core.BundleVersionMutationResult>;
639
+ readonly updateDraft: (http: HttpClient, ctx: ResourceContext, versionId: string, data: _saasicat_core.UpdateBundleVersionDraftData) => Promise<_saasicat_core.BundleVersionMutationResult>;
640
+ readonly publish: (http: HttpClient, ctx: ResourceContext, versionId: string, options?: PublishBundleVersionOptions) => Promise<_saasicat_core.BundleVersionMutationResult>;
641
641
  readonly discardDraft: (http: HttpClient, ctx: ResourceContext, versionId: string) => Promise<void>;
642
642
  }>;
643
643
  catalog: ResourceDef<{
644
- readonly capabilities: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.CapabilityCatalogEntryRow[]>;
645
- readonly features: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.FeatureCatalogEntryRow[]>;
646
- readonly quotas: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.QuotaCatalogEntryRow[]>;
647
- readonly reviewFeature: (http: HttpClient, ctx: ResourceContext, featureKey: string, data: _saasicat_types.ReviewCatalogEntryData) => Promise<_saasicat_types.FeatureCatalogEntryRow>;
648
- readonly reviewQuota: (http: HttpClient, ctx: ResourceContext, quotaKey: string, data: _saasicat_types.ReviewCatalogEntryData) => Promise<_saasicat_types.QuotaCatalogEntryRow>;
649
- readonly setFeatureI18n: (http: HttpClient, ctx: ResourceContext, featureKey: string, i18n: _saasicat_types.CatalogEntryI18n) => Promise<_saasicat_types.FeatureCatalogEntryRow>;
650
- readonly setQuotaI18n: (http: HttpClient, ctx: ResourceContext, quotaKey: string, i18n: _saasicat_types.CatalogEntryI18n) => Promise<_saasicat_types.QuotaCatalogEntryRow>;
651
- readonly setFeatureBase: (http: HttpClient, ctx: ResourceContext, featureKey: string, data: _saasicat_types.UpdateCatalogEntryBaseData) => Promise<_saasicat_types.FeatureCatalogEntryRow>;
652
- readonly setQuotaBase: (http: HttpClient, ctx: ResourceContext, quotaKey: string, data: _saasicat_types.UpdateCatalogEntryBaseData) => Promise<_saasicat_types.QuotaCatalogEntryRow>;
653
- readonly syncDiscovery: (http: HttpClient, ctx: ResourceContext, snapshot: _saasicat_types.DiscoverySnapshot) => Promise<_saasicat_types.SyncDiscoveryResult>;
644
+ readonly capabilities: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.CapabilityCatalogEntryRow[]>;
645
+ readonly features: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.FeatureCatalogEntryRow[]>;
646
+ readonly quotas: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.QuotaCatalogEntryRow[]>;
647
+ readonly reviewFeature: (http: HttpClient, ctx: ResourceContext, featureKey: string, data: _saasicat_core.ReviewCatalogEntryData) => Promise<_saasicat_core.FeatureCatalogEntryRow>;
648
+ readonly reviewQuota: (http: HttpClient, ctx: ResourceContext, quotaKey: string, data: _saasicat_core.ReviewCatalogEntryData) => Promise<_saasicat_core.QuotaCatalogEntryRow>;
649
+ readonly setFeatureI18n: (http: HttpClient, ctx: ResourceContext, featureKey: string, i18n: _saasicat_core.CatalogEntryI18n) => Promise<_saasicat_core.FeatureCatalogEntryRow>;
650
+ readonly setQuotaI18n: (http: HttpClient, ctx: ResourceContext, quotaKey: string, i18n: _saasicat_core.CatalogEntryI18n) => Promise<_saasicat_core.QuotaCatalogEntryRow>;
651
+ readonly setFeatureBase: (http: HttpClient, ctx: ResourceContext, featureKey: string, data: _saasicat_core.UpdateCatalogEntryBaseData) => Promise<_saasicat_core.FeatureCatalogEntryRow>;
652
+ readonly setQuotaBase: (http: HttpClient, ctx: ResourceContext, quotaKey: string, data: _saasicat_core.UpdateCatalogEntryBaseData) => Promise<_saasicat_core.QuotaCatalogEntryRow>;
653
+ readonly syncDiscovery: (http: HttpClient, ctx: ResourceContext, snapshot: _saasicat_core.DiscoverySnapshot) => Promise<_saasicat_core.SyncDiscoveryResult>;
654
654
  }>;
655
655
  dashboard: ResourceDef<{
656
- readonly kpi: (http: HttpClient, _ctx: ResourceContext, card: _saasicat_types.KpiCardDef) => Promise<KpiReading>;
656
+ readonly kpi: (http: HttpClient, _ctx: ResourceContext, card: _saasicat_core.KpiCardDef) => Promise<KpiReading>;
657
657
  }>;
658
658
  discovery: ResourceDef<{
659
659
  readonly read: (http: HttpClient, ctx: ResourceContext, etag?: string | null) => Promise<DiscoveryRead>;
660
660
  readonly rescan: (http: HttpClient, ctx: ResourceContext) => Promise<{
661
- snapshot: _saasicat_types.DiscoverySnapshot;
661
+ snapshot: _saasicat_core.DiscoverySnapshot;
662
662
  etag: string | null;
663
663
  }>;
664
664
  }>;
665
665
  marketing: ResourceDef<{
666
- readonly listProjections: (http: HttpClient, ctx: ResourceContext, filter?: MarketingProjectionsFilter) => Promise<_saasicat_types.MarketingProjectionRow[]>;
667
- readonly createProjection: (http: HttpClient, ctx: ResourceContext, data: _saasicat_types.CreateMarketingProjectionData) => Promise<_saasicat_types.MarketingProjectionRow>;
668
- readonly updateProjection: (http: HttpClient, ctx: ResourceContext, id: string, data: _saasicat_types.UpdateMarketingProjectionData) => Promise<_saasicat_types.MarketingProjectionRow>;
666
+ readonly listProjections: (http: HttpClient, ctx: ResourceContext, filter?: MarketingProjectionsFilter) => Promise<_saasicat_core.MarketingProjectionRow[]>;
667
+ readonly createProjection: (http: HttpClient, ctx: ResourceContext, data: _saasicat_core.CreateMarketingProjectionData) => Promise<_saasicat_core.MarketingProjectionRow>;
668
+ readonly updateProjection: (http: HttpClient, ctx: ResourceContext, id: string, data: _saasicat_core.UpdateMarketingProjectionData) => Promise<_saasicat_core.MarketingProjectionRow>;
669
669
  readonly deleteProjection: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<void>;
670
- readonly settings: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.MarketingSettingsRow | null>;
670
+ readonly settings: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.MarketingSettingsRow | null>;
671
671
  readonly saveSettings: (http: HttpClient, ctx: ResourceContext, activeLocales: readonly string[]) => Promise<void>;
672
672
  }>;
673
673
  promoCodes: ResourceDef<{
674
- readonly list: (http: HttpClient, ctx: ResourceContext, filter?: PromoCodesFilter) => Promise<_saasicat_types.PromoCodeRecord[]>;
674
+ readonly list: (http: HttpClient, ctx: ResourceContext, filter?: PromoCodesFilter) => Promise<_saasicat_core.PromoCodeRecord[]>;
675
675
  readonly detail: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<PromoDetail | null>;
676
676
  readonly create: (http: HttpClient, ctx: ResourceContext, payload: unknown) => Promise<void>;
677
677
  readonly update: (http: HttpClient, ctx: ResourceContext, id: string, payload: unknown) => Promise<void>;
678
678
  readonly remove: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<void>;
679
679
  }>;
680
680
  promotions: ResourceDef<{
681
- readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.PromotionRow[]>;
682
- readonly create: (http: HttpClient, ctx: ResourceContext, data: _saasicat_types.CreatePromotionData) => Promise<_saasicat_types.PromotionRow>;
683
- readonly update: (http: HttpClient, ctx: ResourceContext, id: string, data: _saasicat_types.UpdatePromotionData) => Promise<_saasicat_types.PromotionRow>;
681
+ readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.PromotionRow[]>;
682
+ readonly create: (http: HttpClient, ctx: ResourceContext, data: _saasicat_core.CreatePromotionData) => Promise<_saasicat_core.PromotionRow>;
683
+ readonly update: (http: HttpClient, ctx: ResourceContext, id: string, data: _saasicat_core.UpdatePromotionData) => Promise<_saasicat_core.PromotionRow>;
684
684
  readonly remove: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<void>;
685
685
  }>;
686
686
  tenants: ResourceDef<{
687
- readonly list: ListOp<_saasicat_types.TenantDto, TenantsListFilter>;
688
- readonly detail: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<_saasicat_types.AdminTenantDetail | null>;
687
+ readonly list: ListOp<_saasicat_core.TenantDto, TenantsListFilter>;
688
+ readonly detail: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<_saasicat_core.AdminTenantDetail | null>;
689
689
  readonly suspend: (http: HttpClient, ctx: ResourceContext, slug: string, reason: string) => Promise<void>;
690
690
  readonly reactivate: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<void>;
691
691
  }>;
692
692
  users: ResourceDef<{
693
- readonly list: (http: HttpClient, ctx: ResourceContext, filter?: _saasicat_types.AdminUserListFilter) => Promise<_saasicat_types.AdminUserListRow[]>;
693
+ readonly list: (http: HttpClient, ctx: ResourceContext, filter?: _saasicat_core.AdminUserListFilter) => Promise<_saasicat_core.AdminUserListRow[]>;
694
694
  readonly resetPassword: (http: HttpClient, ctx: ResourceContext, id: string, reason: string, mfaCode?: string) => Promise<{
695
695
  oneTimePassword?: string;
696
696
  } | null>;
697
697
  readonly deactivate: (http: HttpClient, ctx: ResourceContext, id: string, reason: string, mfaCode?: string) => Promise<void>;
698
698
  }>;
699
699
  subscriptions: ResourceDef<{
700
- readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_types.AdminSubscriptionListRow[]>;
700
+ readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.AdminSubscriptionListRow[]>;
701
701
  }>;
702
702
  audit: ResourceDef<{
703
- readonly list: (http: HttpClient, ctx: ResourceContext, filter?: AuditListFilter) => Promise<_saasicat_types.AuditEntry[]>;
703
+ readonly list: (http: HttpClient, ctx: ResourceContext, filter?: AuditListFilter) => Promise<_saasicat_core.AuditEntry[]>;
704
704
  }>;
705
705
  pilots: ResourceDef<{
706
706
  readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<PilotRow[]>;
@@ -4,7 +4,7 @@ import {
4
4
  buildRoutes,
5
5
  buildSidebar,
6
6
  defaultSectionOrder
7
- } from "./chunk-5GVZKTJY.js";
7
+ } from "./chunk-6X6AGH66.js";
8
8
  import {
9
9
  SUPER_ADMIN_ACTIONS_KEY,
10
10
  SUPER_ADMIN_BRAND_KEY,
@@ -17,7 +17,7 @@ import {
17
17
  useResource,
18
18
  useSaMessages,
19
19
  useSuperAdminI18n
20
- } from "./chunk-RSRDRTVZ.js";
20
+ } from "./chunk-A7JICGQ5.js";
21
21
  import {
22
22
  AdminError,
23
23
  BootLoader,
@@ -38,7 +38,7 @@ import {
38
38
  requireServerAnswer,
39
39
  toAdminError,
40
40
  trimTrailingSlashes
41
- } from "./chunk-SOB6CK3R.js";
41
+ } from "./chunk-P4EJF43F.js";
42
42
 
43
43
  // src/vue/status.ts
44
44
  var PROMO_STATUS_TONE = {
@@ -810,7 +810,7 @@ function useTenantBilling(options = {}) {
810
810
  import { computed as computed4, ref as ref12 } from "vue";
811
811
  import {
812
812
  selectChargeableBundles
813
- } from "@saasicat/types";
813
+ } from "@saasicat/core";
814
814
  var DEFAULT_YEARLY_FACTOR = 10;
815
815
  function unwrap(source) {
816
816
  if (source && typeof source === "object" && "value" in source) {
@@ -3,7 +3,7 @@ import {
3
3
  defaultHttpClient,
4
4
  isSaBuiltinLocale,
5
5
  navMessages
6
- } from "./chunk-SOB6CK3R.js";
6
+ } from "./chunk-P4EJF43F.js";
7
7
 
8
8
  // src/client/nav-builder.ts
9
9
  var DEFAULT_STANDARD_PAGE_ROUTES = {
@@ -4,7 +4,7 @@ import {
4
4
  bindResource,
5
5
  createSaCatalog,
6
6
  defaultKvStore
7
- } from "./chunk-SOB6CK3R.js";
7
+ } from "./chunk-P4EJF43F.js";
8
8
 
9
9
  // src/vue/super-admin-context.ts
10
10
  var SUPER_ADMIN_BRAND_KEY = /* @__PURE__ */ Symbol.for(
@@ -3,7 +3,7 @@ import {
3
3
  isAxiosNoResponseError,
4
4
  markTransportFailure,
5
5
  trimTrailingSlashes
6
- } from "./chunk-SOB6CK3R.js";
6
+ } from "./chunk-P4EJF43F.js";
7
7
 
8
8
  // src/client/version.ts
9
9
  var ADMIN_UI_VERSION = "1.2.0";
@@ -282,6 +282,29 @@ function identityChipStyle(accent) {
282
282
  };
283
283
  }
284
284
 
285
+ // src/client/text-shape.ts
286
+ function looksLikeEmail(value) {
287
+ const at = value.indexOf("@");
288
+ if (at <= 0 || at !== value.lastIndexOf("@")) return false;
289
+ const domain = value.slice(at + 1);
290
+ const dot = domain.indexOf(".");
291
+ if (dot <= 0 || dot === domain.length - 1) return false;
292
+ for (let i = 0; i < value.length; i += 1) {
293
+ if (isWhitespace(value[i])) return false;
294
+ }
295
+ return true;
296
+ }
297
+ function isWhitespace(ch) {
298
+ return ch === " " || ch === " " || ch === "\n" || ch === "\r" || ch === "\v" || ch === "\f" || ch === "\xA0" || ch === "\u1680" || ch >= "\u2000" && ch <= "\u200A" || ch === "\u2028" || ch === "\u2029" || ch === "\u202F" || ch === "\u205F" || ch === "\u3000" || ch === "\uFEFF";
299
+ }
300
+ function trimChar(value, ch) {
301
+ let start = 0;
302
+ let end = value.length;
303
+ while (start < end && value[start] === ch) start += 1;
304
+ while (end > start && value[end - 1] === ch) end -= 1;
305
+ return value.slice(start, end);
306
+ }
307
+
285
308
  export {
286
309
  ADMIN_UI_VERSION,
287
310
  createAxiosHttpClient,
@@ -300,5 +323,7 @@ export {
300
323
  IDENTITY_NEUTRAL,
301
324
  identityAccentAt,
302
325
  identityAccentFor,
303
- identityChipStyle
326
+ identityChipStyle,
327
+ looksLikeEmail,
328
+ trimChar
304
329
  };
@@ -1,5 +1,5 @@
1
1
  // src/client/i18n/format.ts
2
- import { formatErrorMessage } from "@saasicat/types";
2
+ import { formatErrorMessage } from "@saasicat/core";
3
3
  function formatMessage(template, params) {
4
4
  return formatErrorMessage(template, params);
5
5
  }
@@ -90,6 +90,7 @@ __export(client_exports, {
90
90
  isSentInQuery: () => isSentInQuery,
91
91
  isTransportFailure: () => isTransportFailure,
92
92
  listUrl: () => listUrl,
93
+ looksLikeEmail: () => looksLikeEmail,
93
94
  markEmptyResponse: () => markEmptyResponse,
94
95
  markPlatformError: () => markPlatformError,
95
96
  markTransportFailure: () => markTransportFailure,
@@ -117,6 +118,7 @@ __export(client_exports, {
117
118
  tenantsResource: () => tenantsResource,
118
119
  toAdminError: () => toAdminError,
119
120
  todayIsoDate: () => todayIsoDate,
121
+ trimChar: () => trimChar,
120
122
  trimTrailingSlashes: () => trimTrailingSlashes,
121
123
  usersResource: () => usersResource
122
124
  });
@@ -136,9 +138,9 @@ function attachCause(error, cause) {
136
138
  }
137
139
 
138
140
  // src/client/i18n/format.ts
139
- var import_types = require("@saasicat/types");
141
+ var import_core = require("@saasicat/core");
140
142
  function formatMessage(template, params) {
141
- return (0, import_types.formatErrorMessage)(template, params);
143
+ return (0, import_core.formatErrorMessage)(template, params);
142
144
  }
143
145
 
144
146
  // src/client/admin-error.ts
@@ -5161,6 +5163,29 @@ function identityChipStyle(accent) {
5161
5163
  borderColor: `color-mix(in srgb, ${accent} 20%, transparent)`
5162
5164
  };
5163
5165
  }
5166
+
5167
+ // src/client/text-shape.ts
5168
+ function looksLikeEmail(value) {
5169
+ const at = value.indexOf("@");
5170
+ if (at <= 0 || at !== value.lastIndexOf("@")) return false;
5171
+ const domain = value.slice(at + 1);
5172
+ const dot = domain.indexOf(".");
5173
+ if (dot <= 0 || dot === domain.length - 1) return false;
5174
+ for (let i = 0; i < value.length; i += 1) {
5175
+ if (isWhitespace(value[i])) return false;
5176
+ }
5177
+ return true;
5178
+ }
5179
+ function isWhitespace(ch) {
5180
+ return ch === " " || ch === " " || ch === "\n" || ch === "\r" || ch === "\v" || ch === "\f" || ch === "\xA0" || ch === "\u1680" || ch >= "\u2000" && ch <= "\u200A" || ch === "\u2028" || ch === "\u2029" || ch === "\u202F" || ch === "\u205F" || ch === "\u3000" || ch === "\uFEFF";
5181
+ }
5182
+ function trimChar(value, ch) {
5183
+ let start = 0;
5184
+ let end = value.length;
5185
+ while (start < end && value[start] === ch) start += 1;
5186
+ while (end > start && value[end - 1] === ch) end -= 1;
5187
+ return value.slice(start, end);
5188
+ }
5164
5189
  // Annotate the CommonJS export names for ESM import in node:
5165
5190
  0 && (module.exports = {
5166
5191
  ADMIN_UI_VERSION,
@@ -5233,6 +5258,7 @@ function identityChipStyle(accent) {
5233
5258
  isSentInQuery,
5234
5259
  isTransportFailure,
5235
5260
  listUrl,
5261
+ looksLikeEmail,
5236
5262
  markEmptyResponse,
5237
5263
  markPlatformError,
5238
5264
  markTransportFailure,
@@ -5260,6 +5286,7 @@ function identityChipStyle(accent) {
5260
5286
  tenantsResource,
5261
5287
  toAdminError,
5262
5288
  todayIsoDate,
5289
+ trimChar,
5263
5290
  trimTrailingSlashes,
5264
5291
  usersResource
5265
5292
  });
@@ -1,8 +1,8 @@
1
- import { H as HttpClient, T as ResourceDef, S as ResourceContext, y as PilotRow, u as PilotCreatePayload, v as PilotCreateResult, w as PilotEditPayload, x as PilotEditResult, f as EmailHistoryFilter, g as EmailHistoryListResult, E as EmailHistoryDetail, h as EmailHistoryResendResult, z as PlatformEmailProvider, G as PlatformEmailWriteInput, C as PlatformEmailTestInput, F as PlatformEmailTestResult, a2 as SaLocale } from '../catalog-Q7RPiOHD.cjs';
2
- export { A as ActionDefNotInManifestError, a as ActionHandler, b as ActionRegistry, c as AuditListFilter, B as Bound, D as DEFAULT_SA_LOCALE, d as DefineResourceOptions, e as DiscoveryRead, i as EmailHistoryRow, k as HttpResponse, K as KpiReading, l as KvStore, L as LIST_FIRST_PAGE, m as LIST_PAGE_SIZE_DEFAULT, n as LIST_PAGE_SIZE_MAX, o as LIST_PAGINATION_PARAMS, p as ListFilterOf, q as ListOp, r as ListQuery, M as MarketingProjectionsFilter, s as MessageTree, t as MissingHandlerError, P as PartialMessages, I as PlatformResources, J as PromoCodesFilter, N as PromoDetail, O as PublishBundleVersionOptions, Q as PublishPlanVersionOptions, R as ResolvedAction, U as ResourceListPage, V as ResourceOp, W as ResourceOps, X as SA_INTL_LOCALES, Y as SA_LOCALES, Z as SA_LOCALE_LABELS, _ as SA_MESSAGES, $ as SaBuiltinLocale, a0 as SaCatalog, a1 as SaCatalogOptions, a3 as SaLocaleDefinition, a4 as SaLocaleOption, a5 as SaMessages, a6 as SaMessagesOverrides, a7 as TenantsListFilter, a8 as TranslationOf, a9 as auditResource, aa as bindResource, ab as bundleVersionsResource, ac as bundlesResource, ad as clampListPage, ae as clampListPageSize, af as createSaCatalog, ag as dashboardResource, ah as defaultHttpClient, ai as defaultKvStore, aj as defineListOp, ak as defineMessages, al as defineResource, am as discoveryResource, an as filterQueryString, ao as isSaBuiltinLocale, ap as isSentInQuery, aq as listUrl, ar as marketingResource, as as mergeMessages, at as planVersionsResource, au as plansResource, av as platformResources, aw as promoCodesResource, ax as readListPage, ay as resolveMessages, az as tenantsResource } from '../catalog-Q7RPiOHD.cjs';
3
- import { A as AdminError } from '../batch-column-fetcher-BlRPjUST.cjs';
4
- export { a as AdminErrorInit, B as BatchColumnData, b as BatchColumnDriftError, c as BatchColumnFetcher, d as BatchColumnFetcherOptions, e as BatchColumnRow, f as BatchColumnValue, g as BootLoadError, h as BootLoader, i as BootLoaderOptions, j as BuildRouteEntry, C as CachedManifestEntry, D as DEFAULT_STANDARD_PAGE_ROUTES, M as ManifestLoadError, k as ManifestLoader, l as ManifestLoaderOptions, N as NavBuilderOptions, P as ParamStyle, S as SidebarItem, m as SidebarSection, n as adminErrorMessage, o as buildRoutes, p as buildSidebar, q as defaultSectionOrder, r as httpStatusOf, s as isAdminError, t as isAxiosNoResponseError, u as isEmptyResponse, v as isPlatformError, w as isTransportFailure, x as markEmptyResponse, y as markPlatformError, z as markTransportFailure, E as readErrorCode, F as readErrorDetail, G as resolveExtension, H as toAdminError } from '../batch-column-fetcher-BlRPjUST.cjs';
5
- import { CapabilityCatalogEntryRow, FeatureCatalogEntryRow, QuotaCatalogEntryRow, ReviewCatalogEntryData, CatalogEntryI18n, UpdateCatalogEntryBaseData, DiscoverySnapshot, SyncDiscoveryResult, PromotionRow, CreatePromotionData, UpdatePromotionData, AdminUserListFilter, AdminUserListRow, AdminSubscriptionListRow, PromoCodeRecord, AdminTenantDetail, AdminAuditListFilter, AuditEntry } from '@saasicat/types';
1
+ import { H as HttpClient, T as ResourceDef, S as ResourceContext, y as PilotRow, u as PilotCreatePayload, v as PilotCreateResult, w as PilotEditPayload, x as PilotEditResult, f as EmailHistoryFilter, g as EmailHistoryListResult, E as EmailHistoryDetail, h as EmailHistoryResendResult, z as PlatformEmailProvider, G as PlatformEmailWriteInput, C as PlatformEmailTestInput, F as PlatformEmailTestResult, a2 as SaLocale } from '../catalog-C5VKGbxk.cjs';
2
+ export { A as ActionDefNotInManifestError, a as ActionHandler, b as ActionRegistry, c as AuditListFilter, B as Bound, D as DEFAULT_SA_LOCALE, d as DefineResourceOptions, e as DiscoveryRead, i as EmailHistoryRow, k as HttpResponse, K as KpiReading, l as KvStore, L as LIST_FIRST_PAGE, m as LIST_PAGE_SIZE_DEFAULT, n as LIST_PAGE_SIZE_MAX, o as LIST_PAGINATION_PARAMS, p as ListFilterOf, q as ListOp, r as ListQuery, M as MarketingProjectionsFilter, s as MessageTree, t as MissingHandlerError, P as PartialMessages, I as PlatformResources, J as PromoCodesFilter, N as PromoDetail, O as PublishBundleVersionOptions, Q as PublishPlanVersionOptions, R as ResolvedAction, U as ResourceListPage, V as ResourceOp, W as ResourceOps, X as SA_INTL_LOCALES, Y as SA_LOCALES, Z as SA_LOCALE_LABELS, _ as SA_MESSAGES, $ as SaBuiltinLocale, a0 as SaCatalog, a1 as SaCatalogOptions, a3 as SaLocaleDefinition, a4 as SaLocaleOption, a5 as SaMessages, a6 as SaMessagesOverrides, a7 as TenantsListFilter, a8 as TranslationOf, a9 as auditResource, aa as bindResource, ab as bundleVersionsResource, ac as bundlesResource, ad as clampListPage, ae as clampListPageSize, af as createSaCatalog, ag as dashboardResource, ah as defaultHttpClient, ai as defaultKvStore, aj as defineListOp, ak as defineMessages, al as defineResource, am as discoveryResource, an as filterQueryString, ao as isSaBuiltinLocale, ap as isSentInQuery, aq as listUrl, ar as marketingResource, as as mergeMessages, at as planVersionsResource, au as plansResource, av as platformResources, aw as promoCodesResource, ax as readListPage, ay as resolveMessages, az as tenantsResource } from '../catalog-C5VKGbxk.cjs';
3
+ import { A as AdminError } from '../batch-column-fetcher-Dk9X92db.cjs';
4
+ export { a as AdminErrorInit, B as BatchColumnData, b as BatchColumnDriftError, c as BatchColumnFetcher, d as BatchColumnFetcherOptions, e as BatchColumnRow, f as BatchColumnValue, g as BootLoadError, h as BootLoader, i as BootLoaderOptions, j as BuildRouteEntry, C as CachedManifestEntry, D as DEFAULT_STANDARD_PAGE_ROUTES, M as ManifestLoadError, k as ManifestLoader, l as ManifestLoaderOptions, N as NavBuilderOptions, P as ParamStyle, S as SidebarItem, m as SidebarSection, n as adminErrorMessage, o as buildRoutes, p as buildSidebar, q as defaultSectionOrder, r as httpStatusOf, s as isAdminError, t as isAxiosNoResponseError, u as isEmptyResponse, v as isPlatformError, w as isTransportFailure, x as markEmptyResponse, y as markPlatformError, z as markTransportFailure, E as readErrorCode, F as readErrorDetail, G as resolveExtension, H as toAdminError } from '../batch-column-fetcher-Dk9X92db.cjs';
5
+ import { CapabilityCatalogEntryRow, FeatureCatalogEntryRow, QuotaCatalogEntryRow, ReviewCatalogEntryData, CatalogEntryI18n, UpdateCatalogEntryBaseData, DiscoverySnapshot, SyncDiscoveryResult, PromotionRow, CreatePromotionData, UpdatePromotionData, AdminUserListFilter, AdminUserListRow, AdminSubscriptionListRow, PromoCodeRecord, AdminTenantDetail, AdminAuditListFilter, AuditEntry } from '@saasicat/core';
6
6
 
7
7
  declare const ADMIN_UI_VERSION = "1.2.0";
8
8
 
@@ -502,4 +502,14 @@ declare function identityAccentFor(key: string, overrides?: Readonly<Record<stri
502
502
  */
503
503
  declare function identityChipStyle(accent: string): Record<string, string>;
504
504
 
505
- export { ADMIN_UI_VERSION, AdminError, type AdminPromoListFilter, type AdminPromoListRow, type AdminResourceClientOptions, type AxiosHttpClientOptions, type AxiosLike, type AxiosLikeConfig, type AxiosLikeResponse, type AxiosLikeResponseConfig, type AxiosResponseBody, EmailHistoryDetail, EmailHistoryFilter, EmailHistoryListResult, EmailHistoryResendResult, type FetchHttpClientOptions, HttpClient, HttpJsonError, IDENTITY_ACCENTS, IDENTITY_ACCENT_VALUES, IDENTITY_NEUTRAL, IDENTITY_NEUTRAL_VALUE, type LoginBootProject, type LoginBrandFallback, type LoginBranding, type MessageParams, PilotCreatePayload, PilotCreateResult, PilotEditPayload, PilotEditResult, PilotRow, type PlanCounts, type PlanRowLike, type PlanVersionLike, PlatformEmailProvider, PlatformEmailTestInput, PlatformEmailTestResult, PlatformEmailWriteInput, type ResolvePlansInput, type ResolvedPlan, ResourceContext, ResourceDef, type ResourceRequestInit, SaLocale, catalogResource, countPlans, createAdminResourceClient, createAxiosHttpClient, createFetchHttpClient, emailHistoryResource, formatCurrency, formatMessage, getJson, identityAccentAt, identityAccentFor, identityChipStyle, isCurrentlyValid, isExpired, isFutureScheduled, isProductionBoot, pilotsResource, platformEmailResource, postJson, promotionsResource, requestJson, requestJsonBody, requireServerAnswer, resolveLoginBranding, resolvePlans, subscriptionsResource, todayIsoDate, trimTrailingSlashes, usersResource };
505
+ /**
506
+ * Whether `value` looks like an address: one `@`, something on either side,
507
+ * a dot somewhere after the `@`, and no whitespace anywhere — whitespace as
508
+ * `\s` defines it, Unicode spaces included. The same acceptance the old
509
+ * pattern had, stated in words a reader can check.
510
+ */
511
+ declare function looksLikeEmail(value: string): boolean;
512
+ /** `value` without any run of `ch` at either end — `trim()` for one character. */
513
+ declare function trimChar(value: string, ch: string): string;
514
+
515
+ export { ADMIN_UI_VERSION, AdminError, type AdminPromoListFilter, type AdminPromoListRow, type AdminResourceClientOptions, type AxiosHttpClientOptions, type AxiosLike, type AxiosLikeConfig, type AxiosLikeResponse, type AxiosLikeResponseConfig, type AxiosResponseBody, EmailHistoryDetail, EmailHistoryFilter, EmailHistoryListResult, EmailHistoryResendResult, type FetchHttpClientOptions, HttpClient, HttpJsonError, IDENTITY_ACCENTS, IDENTITY_ACCENT_VALUES, IDENTITY_NEUTRAL, IDENTITY_NEUTRAL_VALUE, type LoginBootProject, type LoginBrandFallback, type LoginBranding, type MessageParams, PilotCreatePayload, PilotCreateResult, PilotEditPayload, PilotEditResult, PilotRow, type PlanCounts, type PlanRowLike, type PlanVersionLike, PlatformEmailProvider, PlatformEmailTestInput, PlatformEmailTestResult, PlatformEmailWriteInput, type ResolvePlansInput, type ResolvedPlan, ResourceContext, ResourceDef, type ResourceRequestInit, SaLocale, catalogResource, countPlans, createAdminResourceClient, createAxiosHttpClient, createFetchHttpClient, emailHistoryResource, formatCurrency, formatMessage, getJson, identityAccentAt, identityAccentFor, identityChipStyle, isCurrentlyValid, isExpired, isFutureScheduled, isProductionBoot, looksLikeEmail, pilotsResource, platformEmailResource, postJson, promotionsResource, requestJson, requestJsonBody, requireServerAnswer, resolveLoginBranding, resolvePlans, subscriptionsResource, todayIsoDate, trimChar, trimTrailingSlashes, usersResource };