@saasicat/ui-vue 0.3.0 → 0.5.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 (109) hide show
  1. package/README.md +47 -4
  2. package/dist/action-registry-CQ2wL3R-.d.cts +85 -0
  3. package/dist/action-registry-CQ2wL3R-.d.ts +85 -0
  4. package/dist/chunk-3YP2ZAOD.js +63 -0
  5. package/dist/chunk-EH7TOD4H.js +718 -0
  6. package/dist/chunk-LVGUSD3T.js +26 -0
  7. package/dist/client/index.cjs +785 -0
  8. package/dist/client/index.d.cts +295 -0
  9. package/dist/client/index.d.ts +295 -0
  10. package/dist/client/index.js +52 -0
  11. package/dist/index.cjs +787 -834
  12. package/dist/index.d.cts +267 -841
  13. package/dist/index.d.ts +267 -841
  14. package/dist/index.js +284 -1059
  15. package/dist/quasar/index.cjs +159 -0
  16. package/dist/quasar/index.d.cts +86 -0
  17. package/dist/quasar/index.d.ts +86 -0
  18. package/dist/quasar/index.js +91 -0
  19. package/dist/ui-notify-COUzXEQ4.d.ts +178 -0
  20. package/dist/ui-notify-D_eAAwRh.d.cts +178 -0
  21. package/package.json +23 -3
  22. package/src/client/index.ts +25 -0
  23. package/src/components/FeatureGate.vue +1 -1
  24. package/src/components/plan/PlanCycleToggle.vue +1 -1
  25. package/src/components/plan/PlanGrid.vue +2 -2
  26. package/src/components/plan/PriceSummary.vue +1 -1
  27. package/src/components/plan/PromoCodeInput.vue +1 -1
  28. package/src/components/plan/PublicBundleGrid.vue +1 -1
  29. package/src/index.ts +82 -79
  30. package/src/pages-standard/AdminLayout.vue +2 -2
  31. package/src/pages-standard/DashboardPage.vue +2 -2
  32. package/src/pages-standard/EmailHistoryPage.vue +9 -13
  33. package/src/pages-standard/MarketingCatalogPage.vue +5 -5
  34. package/src/pages-standard/PilotsPage.vue +9 -13
  35. package/src/pages-standard/PlanVersionsPage.vue +2 -2
  36. package/src/pages-standard/PlansPage.vue +2 -2
  37. package/src/pages-standard/PlatformEmailPage.vue +7 -5
  38. package/src/pages-standard/PromoCodesPage.vue +8 -22
  39. package/src/pages-standard/SuperAdminLoginPage.vue +3 -3
  40. package/src/pages-standard/SuperAdminSetupWizard.vue +2 -2
  41. package/src/pages-standard/TenantDetailPage.vue +4 -4
  42. package/src/pages-standard/TenantsPage.vue +3 -3
  43. package/src/pages-standard/UsersPage.vue +6 -12
  44. package/src/pages-standard/plan-versions/PlanVersionHeader.vue +1 -1
  45. package/src/pages-standard/plan-versions/PlanVersionsAudit.vue +1 -1
  46. package/src/pages-standard/plan-versions/PlanVersionsDiff.vue +1 -1
  47. package/src/pages-standard/plan-versions/PlanVersionsList.vue +1 -1
  48. package/src/pages-standard/plan-versions/PlanVersionsMatrix.vue +1 -1
  49. package/src/pages-standard/plan-versions/PlanVersionsTimeline.vue +1 -1
  50. package/src/pages-tenant/MySubscriptionBundlesPage.vue +1 -1
  51. package/src/pages-tenant/OnboardingConfigurator.vue +3 -3
  52. package/src/pages-tenant/PackageSnapshotPanel.vue +1 -1
  53. package/src/pages-tenant/PlanChangeWizard.vue +2 -2
  54. package/src/pages-tenant/TenantPlanSection.vue +3 -3
  55. package/src/pages-tenant/tenant-plan-section/BundlePreviewDialog.vue +1 -1
  56. package/src/pages-tenant/tenant-plan-section/TenantBundleStore.vue +2 -2
  57. package/src/pages-tenant/tenant-plan-section/TenantPlanCardHeader.vue +1 -1
  58. package/src/pages-tenant/tenant-plan-section/TenantUsageGrid.vue +1 -1
  59. package/src/quasar/create-super-admin-app.ts +173 -0
  60. package/src/quasar/index.ts +11 -0
  61. package/src/quasar/notify.ts +30 -0
  62. package/src/{manifest-store-factory.ts → vue/manifest-store-factory.ts} +1 -1
  63. package/src/{platform-loaders.ts → vue/platform-loaders.ts} +4 -4
  64. package/src/{project-page-host.ts → vue/project-page-host.ts} +1 -1
  65. package/src/{create-super-admin-app.ts → vue/super-admin-context.ts} +20 -139
  66. package/src/vue/ui-notify.ts +30 -0
  67. package/src/{use-actions.ts → vue/use-actions.ts} +1 -1
  68. package/src/{use-api-list.ts → vue/use-api-list.ts} +1 -1
  69. package/src/{use-batch-columns.ts → vue/use-batch-columns.ts} +1 -1
  70. package/src/{use-bulk-publish.ts → vue/use-bulk-publish.ts} +1 -1
  71. package/src/{use-bundle-versions-map.ts → vue/use-bundle-versions-map.ts} +1 -1
  72. package/src/{use-bundles.ts → vue/use-bundles.ts} +1 -1
  73. package/src/{use-business-types.ts → vue/use-business-types.ts} +1 -1
  74. package/src/{use-catalog-entries.ts → vue/use-catalog-entries.ts} +1 -1
  75. package/src/{use-discovery.ts → vue/use-discovery.ts} +1 -1
  76. package/src/{use-entitlement.ts → vue/use-entitlement.ts} +1 -1
  77. package/src/{use-live-plan-versions.ts → vue/use-live-plan-versions.ts} +1 -1
  78. package/src/{use-manifest.ts → vue/use-manifest.ts} +1 -1
  79. package/src/{use-marketing-projections.ts → vue/use-marketing-projections.ts} +1 -1
  80. package/src/{use-nav.ts → vue/use-nav.ts} +1 -1
  81. package/src/{use-plans.ts → vue/use-plans.ts} +1 -1
  82. package/src/{use-promotions.ts → vue/use-promotions.ts} +1 -1
  83. package/src/{use-public-boot.ts → vue/use-public-boot.ts} +1 -1
  84. package/src/{use-super-admin-context.ts → vue/use-super-admin-context.ts} +2 -2
  85. package/src/{use-tenant-action-flow.ts → vue/use-tenant-action-flow.ts} +1 -1
  86. package/src/{use-tenant-billing-catalog.ts → vue/use-tenant-billing-catalog.ts} +2 -2
  87. package/src/{use-tenant-billing.ts → vue/use-tenant-billing.ts} +2 -2
  88. package/src/{use-tenant-manifest.ts → vue/use-tenant-manifest.ts} +1 -1
  89. package/src/{use-tenant-subscription-bundles.ts → vue/use-tenant-subscription-bundles.ts} +1 -1
  90. package/dist/testing-e2e/admin-pages-suite.d.cts +0 -37
  91. package/dist/testing-e2e/admin-pages-suite.d.ts +0 -37
  92. /package/src/{action-registry.ts → client/action-registry.ts} +0 -0
  93. /package/src/{batch-column-fetcher.ts → client/batch-column-fetcher.ts} +0 -0
  94. /package/src/{boot-loader.ts → client/boot-loader.ts} +0 -0
  95. /package/src/{http-json.ts → client/http-json.ts} +0 -0
  96. /package/src/{manifest-loader.ts → client/manifest-loader.ts} +0 -0
  97. /package/src/{nav-builder.ts → client/nav-builder.ts} +0 -0
  98. /package/src/{plan-versions-catalog.ts → client/plan-versions-catalog.ts} +0 -0
  99. /package/src/{types.ts → client/types.ts} +0 -0
  100. /package/src/{version.ts → client/version.ts} +0 -0
  101. /package/src/{create-admin-routes.ts → vue/create-admin-routes.ts} +0 -0
  102. /package/src/{entitlement-provider.ts → vue/entitlement-provider.ts} +0 -0
  103. /package/src/{feature-router-guard.ts → vue/feature-router-guard.ts} +0 -0
  104. /package/src/{use-audit-entries.ts → vue/use-audit-entries.ts} +0 -0
  105. /package/src/{use-plan-editor.ts → vue/use-plan-editor.ts} +0 -0
  106. /package/src/{use-plan-versions.ts → vue/use-plan-versions.ts} +0 -0
  107. /package/src/{use-platform-tenant-actions.ts → vue/use-platform-tenant-actions.ts} +0 -0
  108. /package/src/{use-subscription-draft.ts → vue/use-subscription-draft.ts} +0 -0
  109. /package/src/{use-tenants.ts → vue/use-tenants.ts} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,66 +1,47 @@
1
- import { RouteRecordRaw, NavigationGuardWithThis, RouterHistory, Router } from 'vue-router';
2
- import { PublicBootResponse, AdminManifest, StandardPageKey, TenantActionDef, TenantColumnDef, TenantListFilter, TenantDto, AuditQuery, AuditEntry, FeatureUiRegistry, PromoPreviewResponse, OnboardingSelectionRequest, PublicMarketingBundle, FeatureDef, FeatureKey, DiscoverySnapshot, CapabilityCatalogEntryRow, FeatureCatalogEntryRow, QuotaCatalogEntryRow, ReviewCatalogEntryData, CatalogEntryI18n, UpdateCatalogEntryBaseData, SyncDiscoveryResult, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, SubscriptionBundleRecord, BusinessTypeVersionRow, CreateBusinessTypeVersionDraftData, BusinessTypeVersionMutationResult, UpdateBusinessTypeVersionDraftData, BusinessTypeRow, CreateBusinessTypeData, UpdateBusinessTypeData, MarketingProjectionFilter, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, PromotionRow, CreatePromotionData, UpdatePromotionData, PlanVersionRow as PlanVersionRow$1, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, ActionKey, ComponentKey } from '@saasicat/types';
1
+ import { BootLoaderOptions, ManifestLoaderOptions, BuildRouteEntry, SidebarSection, NavBuilderOptions, BatchColumnData, BatchColumnFetcherOptions, BootLoader, ManifestLoader } from './client/index.js';
2
+ export { ADMIN_UI_VERSION, BatchColumnDriftError, BatchColumnFetcher, BatchColumnRow, BatchColumnValue, BootLoadError, BuildSnapshotsOptions, CachedManifestEntry, CatalogSnapshot, DEFAULT_SECTION_ORDER, DEFAULT_STANDARD_PAGE_ROUTES, HttpJsonError, ManifestLoadError, ParamStyle, RawCatalogData, ResolvedPlan, SidebarItem, SnapshotKind, buildRoutes, buildSidebar, buildSnapshots, getJson, listOpenDrafts, postJson, resolveExtension, trimTrailingSlashes } from './client/index.js';
3
+ import { H as HttpClient, a as ActionRegistry, A as ActionHandler, K as KvStore } from './action-registry-CQ2wL3R-.js';
4
+ export { b as ActionDefNotInManifestError, c as HttpResponse, M as MissingHandlerError, R as ResolvedAction, d as defaultHttpClient, e as defaultKvStore } from './action-registry-CQ2wL3R-.js';
5
+ import { A as ActionsMap, a as SuperAdminBrand, b as SuperAdminEndpoints, E as ExtensionsMap, c as SuperAdminLoginAdapter } from './ui-notify-COUzXEQ4.js';
6
+ export { d as ExtensionLoader, I as InstallPlugin, e as SUPER_ADMIN_ACTIONS_KEY, f as SUPER_ADMIN_BRAND_KEY, g as SUPER_ADMIN_ENDPOINTS_KEY, h as SUPER_ADMIN_EXTENSIONS_KEY, i as SUPER_ADMIN_HTTP_KEY, j as SUPER_ADMIN_LOGIN_ADAPTER_KEY, k as SUPER_ADMIN_MANIFEST_KEY, l as SUPER_ADMIN_NOTIFY_KEY, m as SuperAdminAuthGuardOptions, S as SuperAdminGuardOptions, n as SuperAdminLoginResult, o as SuperAdminManifestGuardOptions, U as UiNotify, p as UiNotifyKind, q as UiNotifyOptions, r as buildNavigationGuard } from './ui-notify-COUzXEQ4.js';
7
+ import { AdminManifest, TenantListFilter, TenantDto, AuditQuery, AuditEntry, FeatureUiRegistry, PromoPreviewResponse, OnboardingSelectionRequest, PublicMarketingBundle, FeatureDef, FeatureKey, PublicBootResponse, DiscoverySnapshot, CapabilityCatalogEntryRow, FeatureCatalogEntryRow, QuotaCatalogEntryRow, ReviewCatalogEntryData, CatalogEntryI18n, UpdateCatalogEntryBaseData, SyncDiscoveryResult, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, SubscriptionBundleRecord, BusinessTypeVersionRow, CreateBusinessTypeVersionDraftData, BusinessTypeVersionMutationResult, UpdateBusinessTypeVersionDraftData, BusinessTypeRow, CreateBusinessTypeData, UpdateBusinessTypeData, MarketingProjectionFilter, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, PromotionRow, CreatePromotionData, UpdatePromotionData, PlanVersionRow as PlanVersionRow$1, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, TenantActionDef } from '@saasicat/types';
8
+ import { RouteRecordRaw, NavigationGuardWithThis } from 'vue-router';
3
9
  import * as vue from 'vue';
4
- import { Ref, InjectionKey, App, ComputedRef, Component } from 'vue';
5
- import { QuasarPluginOptions } from 'quasar';
6
- import { Pinia, StoreDefinition } from 'pinia';
10
+ import { Ref, InjectionKey, App, ComputedRef } from 'vue';
11
+ import { StoreDefinition } from 'pinia';
7
12
 
8
- declare const ADMIN_UI_VERSION = "1.2.0";
9
-
10
- /**
11
- * Minimal abstraction over `fetch`. Consumers may pass their own
12
- * implementation (e.g. an axios wrapper that already injects auth headers
13
- * and tenant headers).
14
- */
15
- type HttpClient = (url: string, init?: {
16
- method?: string;
17
- headers?: Record<string, string>;
18
- body?: string;
19
- }) => Promise<HttpResponse>;
20
- interface HttpResponse {
21
- status: number;
22
- headers: {
23
- get(name: string): string | null;
24
- };
25
- json(): Promise<unknown>;
26
- text(): Promise<string>;
27
- }
28
- /** Simple persistence adapter; default is `localStorage`. */
29
- interface KvStore {
30
- get(key: string): string | null;
31
- set(key: string, value: string): void;
32
- remove(key: string): void;
33
- }
13
+ /** Returns the `extensions:` map registered in `createSuperAdminApp()`. */
14
+ declare function useSuperAdminExtensions(): ExtensionsMap;
15
+ /** Returns the `actions:` map registered in `createSuperAdminApp()`. */
16
+ declare function useSuperAdminActions(): ActionsMap;
34
17
  /**
35
- * Returns a `KvStore` wrapper around `localStorage` (or `null` under SSR).
36
- * Tests may pass an in-memory stub.
18
+ * Returns the app branding. Throws when the component is rendered outside a
19
+ * `createSuperAdminApp()` shell that is a setup bug, not a runtime
20
+ * problem.
37
21
  */
38
- declare function defaultKvStore(): KvStore;
22
+ declare function useSuperAdminBrand(): SuperAdminBrand;
23
+ /** Returns the app endpoints (apiBase, publicBootEndpoint, manifestEndpoint). */
24
+ declare function useSuperAdminEndpoints(): Required<SuperAdminEndpoints>;
39
25
  /**
40
- * Default `HttpClient` over `fetch`. Consumers pass their own variant
41
- * through when they need auth headers / tenant headers / retry logic.
26
+ * Returns the manifest accessor that was provided via
27
+ * `createSuperAdminApp({ manifestGuard: { getManifest } })`.
28
+ * Returns `null` if the app did not pass an accessor — components
29
+ * (e.g. `<ProjectPageHost>`) must handle the null case cleanly, because
30
+ * the accessor is optional.
42
31
  */
43
- declare function defaultHttpClient(): HttpClient;
44
-
32
+ declare function useSuperAdminManifest(): AdminManifest | null;
45
33
  /**
46
- * Error for non-2xx responses. `code` is the machine-readable error code
47
- * from the JSON body (`{ code }`), if present callers map it to
48
- * a message (e.g. via `SETUP_ERROR_CODES`).
34
+ * Returns the login adapter the app registered via
35
+ * `createSuperAdminApp({ loginAdapter })`. Throws when none was
36
+ * set the shared `<SuperAdminLoginPage>` needs it.
49
37
  */
50
- declare class HttpJsonError extends Error {
51
- readonly status: number;
52
- readonly code?: string | undefined;
53
- constructor(status: number, code?: string | undefined);
54
- }
38
+ declare function useSuperAdminLoginAdapter(): SuperAdminLoginAdapter;
55
39
  /**
56
- * Removes trailing slashes so an API prefix can be concatenated with paths
57
- * that start with `/`. Deliberately index-based instead of
58
- * `replace(/\/+$/, '')`: the regex backtracks quadratically on inputs that
59
- * end in many slashes.
40
+ * Returns the pre-login `HttpClient` (boot, first-run setup) the app registered
41
+ * via `createSuperAdminApp({ http })`. Falls back to `defaultHttpClient()`
42
+ * if none was provided (e.g. in isolated tests).
60
43
  */
61
- declare function trimTrailingSlashes(url: string): string;
62
- declare function getJson<T>(http: HttpClient, url: string): Promise<T>;
63
- declare function postJson<T>(http: HttpClient, url: string, body: unknown): Promise<T>;
44
+ declare function useSuperAdminHttp(): HttpClient;
64
45
 
65
46
  /** Eager or lazy component loader (`() => import(...)`). */
66
47
  type RouteComponent = NonNullable<RouteRecordRaw['component']>;
@@ -86,265 +67,6 @@ interface CreateAdminRoutesOptions {
86
67
  }
87
68
  declare function createAdminRoutes(options: CreateAdminRoutesOptions): RouteRecordRaw[];
88
69
 
89
- interface BootLoaderOptions {
90
- /**
91
- * Fully-qualified boot endpoint incl. app globalPrefix
92
- * (`/api/admin/boot`, `/api/v1/admin/boot`, …). Mandatory.
93
- */
94
- endpoint: string;
95
- /** Defaults to `defaultHttpClient()` (= `fetch`). */
96
- http?: HttpClient;
97
- }
98
- declare class BootLoadError extends Error {
99
- readonly status: number;
100
- constructor(status: number, message: string);
101
- }
102
- declare class BootLoader {
103
- private readonly endpoint;
104
- private readonly http;
105
- constructor(options: BootLoaderOptions);
106
- load(): Promise<PublicBootResponse>;
107
- }
108
-
109
- interface ManifestLoaderOptions {
110
- /**
111
- * Fully-qualified manifest endpoint incl. app globalPrefix
112
- * (`/api/admin/manifest`, `/api/v1/admin/manifest`, …). Mandatory.
113
- */
114
- endpoint: string;
115
- http?: HttpClient;
116
- storage?: KvStore;
117
- /**
118
- * Storage key prefix — consumers with multiple apps under one domain
119
- * set this to e.g. `'ma:'` or `'da:'`, so that the caches
120
- * are separated.
121
- */
122
- storageKeyPrefix?: string;
123
- /**
124
- * Auth header for `Authorization: Bearer <token>`. Sent with every
125
- * request. The consumer supplies a function that pulls the
126
- * current token from the auth store.
127
- */
128
- getAuthToken?: () => string | null;
129
- }
130
- declare class ManifestLoadError extends Error {
131
- readonly status: number;
132
- constructor(status: number, message: string);
133
- }
134
- interface CachedManifestEntry {
135
- etag: string;
136
- body: AdminManifest;
137
- }
138
- declare class ManifestLoader {
139
- private readonly endpoint;
140
- private readonly http;
141
- private readonly storage;
142
- private readonly bodyKey;
143
- private readonly etagKey;
144
- private readonly getAuthToken?;
145
- constructor(options: ManifestLoaderOptions);
146
- /**
147
- * Loads the current manifest. On a cache hit (304) the cached
148
- * body is returned — otherwise the fresh server body.
149
- */
150
- load(): Promise<AdminManifest>;
151
- /** Reads the cached manifest body from storage; null if absent. */
152
- readCachedBody(): CachedManifestEntry | null;
153
- /** Clears the cache — e.g. on logout or after `manifest reload`. */
154
- clearCache(): void;
155
- }
156
-
157
- /**
158
- * Default routes for the platform standard pages. Consumers may override this
159
- * via the `standardPageRoutes` option (e.g. `/admin/users` →
160
- * `/admin/team`).
161
- */
162
- declare const DEFAULT_STANDARD_PAGE_ROUTES: Record<StandardPageKey, string>;
163
- interface BuildRouteEntry {
164
- /** Stable identifier — the key for standard pages, the `id` for project pages. */
165
- id: string;
166
- /** Route path (`/admin/...`). */
167
- path: string;
168
- /** Visible for the UI. */
169
- label: string;
170
- icon?: string;
171
- /** Sort key for drawer groups. */
172
- navSection?: string;
173
- /** Lookup key in the `extensions:` map (project) or the platform standard map. */
174
- componentKey: string;
175
- /** Required capability or null. */
176
- requiredCapability: string | null;
177
- /** Platform standard page (`true`) or project page (`false`). */
178
- isStandard: boolean;
179
- /** Hint for anticipatory lazy loading. */
180
- prefetchOnIdle?: boolean;
181
- }
182
- interface NavBuilderOptions {
183
- /**
184
- * Optional: overrides the default routes for certain standard pages.
185
- * Consumers set this if they want an alternative URL structure.
186
- */
187
- standardPageRoutes?: Partial<Record<StandardPageKey, string>>;
188
- /**
189
- * Default labels for standard pages — consumers may localize.
190
- */
191
- standardPageLabels?: Partial<Record<StandardPageKey, string>>;
192
- /** Default icons for standard pages. */
193
- standardPageIcons?: Partial<Record<StandardPageKey, string>>;
194
- /** Default `navSection` for standard pages. */
195
- standardPageNavSection?: Partial<Record<StandardPageKey, string>>;
196
- /**
197
- * Optional: set of known `componentKey`s from the shell's `extensions:`
198
- * map. ProjectPages whose `componentKey` is not contained here
199
- * are filtered out — they would otherwise appear in the sidebar but on
200
- * click be redirected by the catch-all (silent dead link).
201
- * Consumers without an `extensions:` map omit the field → as before.
202
- */
203
- availableExtensions?: Set<string>;
204
- }
205
- declare const DEFAULT_SECTION_ORDER: readonly string[];
206
- /**
207
- * Returns the list of all routes defined by the current manifest —
208
- * filtered to the capabilities that the logged-in user has.
209
- *
210
- * The consumer shell then builds its Vue router configuration and its
211
- * sidebar drawer from it.
212
- */
213
- declare function buildRoutes(manifest: AdminManifest, options?: NavBuilderOptions): BuildRouteEntry[];
214
- interface SidebarItem {
215
- id: string;
216
- path: string;
217
- label: string;
218
- icon?: string;
219
- }
220
- interface SidebarSection {
221
- /** `null` for the default section (items without `navSection`). */
222
- section: string | null;
223
- items: SidebarItem[];
224
- }
225
- /**
226
- * Groups the routes by `navSection` for the drawer.
227
- *
228
- * Section order:
229
- * 1. Default section (`null`) — items without `navSection`.
230
- * 2. Sections from `sectionOrder` in exactly this order.
231
- * 3. Remaining sections alphabetically.
232
- *
233
- * The default order matches the plan simulation layout (Übersicht →
234
- * Produktkatalog → Kunden → System); consumers can override it.
235
- */
236
- declare function buildSidebar(routes: BuildRouteEntry[], sectionOrder?: readonly string[]): SidebarSection[];
237
- /**
238
- * Returns the Vue component registered for the given `componentKey`.
239
- * The consumer shell calls this function with its own `extensions:` map.
240
- * For unknown keys → `null` (the UI then renders a fallback
241
- * component, e.g. "Component not found in shell build").
242
- *
243
- * `extensions` is `Record<string, T>` — `T` is typically a
244
- * Vue component (either imported directly or as a
245
- * `defineAsyncComponent` wrapper).
246
- */
247
- declare function resolveExtension<T>(componentKey: string, extensions: Record<string, T>): T | null;
248
-
249
- /** Consumer implementation; receives the action inputs as a generic object. */
250
- type ActionHandler<TInput = unknown, TResult = unknown> = (input: TInput) => Promise<TResult>;
251
- interface ResolvedAction<TInput = unknown, TResult = unknown> {
252
- def: TenantActionDef;
253
- handler: ActionHandler<TInput, TResult>;
254
- }
255
- declare class MissingHandlerError extends Error {
256
- constructor(actionKey: string);
257
- }
258
- declare class ActionDefNotInManifestError extends Error {
259
- constructor(actionKey: string);
260
- }
261
- declare class ActionRegistry {
262
- private readonly defs;
263
- private readonly handlers;
264
- constructor(manifest: AdminManifest, handlers?: Record<string, ActionHandler>);
265
- /**
266
- * Registers a handler after the fact (e.g. when consumer code loads
267
- * lazily). Throws `ActionDefNotInManifestError` if the `actionKey` is not
268
- * declared in the manifest — prevents dead registrations.
269
- */
270
- register<TInput, TResult>(actionKey: string, handler: ActionHandler<TInput, TResult>): void;
271
- /**
272
- * Returns the `{def, handler}` pair. Throws if the key is missing from
273
- * the manifest or no handler is registered. The shell's UI layer calls
274
- * the method, checks `def.requiresMfa` / `def.confirmType` for the
275
- * pre-flow, and then calls `handler(input)`.
276
- */
277
- get<TInput = unknown, TResult = unknown>(actionKey: string): ResolvedAction<TInput, TResult>;
278
- /**
279
- * Convenience: `get(key).handler(input)`. UI convenience for actions
280
- * that need neither MFA nor confirm.
281
- */
282
- dispatch<TInput, TResult>(actionKey: string, input: TInput): Promise<TResult>;
283
- /**
284
- * List of actionKeys that are declared in the manifest but have no
285
- * handler. Consumers use this in a doctor check to detect drift between
286
- * the manifest and the shell build.
287
- */
288
- listOrphanedDefs(): string[];
289
- /**
290
- * List of registered handlers that are missing from the manifest. Drift
291
- * in the other direction.
292
- */
293
- listOrphanedHandlers(): string[];
294
- }
295
-
296
- type BatchColumnValue = unknown;
297
- /** One value per `tenantId` (freely structured). */
298
- type BatchColumnRow = Record<string, BatchColumnValue>;
299
- /** One `tenantId → value` map per column key. */
300
- type BatchColumnData = Record<string, BatchColumnRow>;
301
- type ParamStyle = 'comma' | 'repeat';
302
- interface BatchColumnFetcherOptions {
303
- http?: HttpClient;
304
- /**
305
- * How the `tenantIds` are passed to the endpoint. Default `'comma'` →
306
- * `?tenantIds=t1,t2,t3`. `'repeat'` → `?tenantIds=t1&tenantIds=t2`.
307
- * Consumer backends decide based on their framework (NestJS accepts
308
- * comma-separated strings by default, or via `@Query() ids: string[]`).
309
- */
310
- paramStyle?: ParamStyle;
311
- /**
312
- * Auth-token provider for `Authorization: Bearer <token>`. The consumer
313
- * supplies a function that pulls the current token from the auth store.
314
- */
315
- getAuthToken?: () => string | null;
316
- }
317
- declare class BatchColumnDriftError extends Error {
318
- readonly column: TenantColumnDef;
319
- constructor(column: TenantColumnDef, reason: string);
320
- }
321
- declare class BatchColumnFetcher {
322
- private readonly http;
323
- private readonly paramStyle;
324
- private readonly getAuthToken?;
325
- constructor(options?: BatchColumnFetcherOptions);
326
- /**
327
- * Loads the data for all columns declared in the manifest in parallel
328
- * (one request per column, all `tenantIds` in the batch). Columns without
329
- * a satisfied capability are ignored.
330
- */
331
- fetchAll(manifest: AdminManifest, tenantIds: string[]): Promise<BatchColumnData>;
332
- /** Fetch a single column (consumers may also use this directly). */
333
- fetchOne(column: TenantColumnDef, tenantIds: string[]): Promise<BatchColumnRow>;
334
- /**
335
- * Column drift against the manifest. Consumers use this for CI smoke
336
- * tests of the manifest-vs-shell build.
337
- */
338
- listDriftIssues(manifest: AdminManifest): BatchColumnDriftError[];
339
- /**
340
- * Which columns have a satisfied `requiredCapability`? Manifest =
341
- * discovery, so a local check is enough.
342
- */
343
- eligibleColumns(manifest: AdminManifest): TenantColumnDef[];
344
- private validateBatchEndpoint;
345
- private buildUrl;
346
- }
347
-
348
70
  interface ApiListResponse<T> {
349
71
  items: T[];
350
72
  page?: number;
@@ -901,147 +623,6 @@ interface SubscriptionDraft {
901
623
  }
902
624
  declare function useSubscriptionDraft(options: UseSubscriptionDraftOptions): SubscriptionDraft;
903
625
 
904
- interface TenantPlanSectionI18n {
905
- sectionTitle: string;
906
- sectionSubtitle: string;
907
- loading: string;
908
- noSubscription: string;
909
- activePlan: string;
910
- cycleMonthly: string;
911
- cycleYearly: string;
912
- statusActive: string;
913
- statusTrial: string;
914
- statusPastDue: string;
915
- statusCanceled: string;
916
- statusPendingSales: string;
917
- trialEndsAt: string;
918
- pilotEndsAt: string;
919
- nextBillingDate: string;
920
- pendingChange: string;
921
- changeFromTo: string;
922
- changeEffectiveAt: string;
923
- changePlanButton: string;
924
- cancelSubscriptionButton: string;
925
- usageTitle: string;
926
- /** #18 — feature / scope-of-services matrix (included + locked). */
927
- featuresOverviewTitle: string;
928
- featuresActive: string;
929
- featuresLocked: string;
930
- /** #15 — bundle store (booked + available bundles). */
931
- bundlesStoreTitle: string;
932
- bundlesBookedTitle: string;
933
- bundlesAvailableTitle: string;
934
- bundlesAvailableEmpty: string;
935
- bundlesPerMonth: string;
936
- bundleBookAction: string;
937
- bundleBookInProgress: string;
938
- bundleCancelAction: string;
939
- bundleReactivateAction: string;
940
- bundleReactivateConfirmTitle: string;
941
- bundleReactivateConfirmBody: string;
942
- bundleCanceledAt: string;
943
- bundleMinimumTermUntil: string;
944
- bundleIncludesLabel: string;
945
- bundleAlreadyBooked: string;
946
- bundleIncompatible: string;
947
- /** #37/#61 — requires graying-out + booking/cancellation preview. */
948
- bundleMissingRequires: string;
949
- bundlePreviewAddTitle: string;
950
- bundlePreviewCancelTitle: string;
951
- bundlePreviewLoading: string;
952
- bundlePreviewProrationTitle: string;
953
- bundlePreviewProratedNow: string;
954
- bundlePreviewProrationDays: string;
955
- bundlePreviewNextPeriod: string;
956
- bundlePreviewTrialNote: string;
957
- bundlePreviewNoPrice: string;
958
- bundlePreviewMinimumTermLabel: string;
959
- bundlePreviewMinimumTermMonths: string;
960
- bundlePreviewMinimumTermNone: string;
961
- bundlePreviewRedundantTitle: string;
962
- bundlePreviewRedundantCoveredByPlan: string;
963
- bundlePreviewRedundantCoveredByBundle: string;
964
- bundlePreviewMissingRequiresTitle: string;
965
- bundlePreviewBlockersTitle: string;
966
- bundlePreviewWarningsTitle: string;
967
- bundlePreviewEffectiveAt: string;
968
- bundlePreviewSavings: string;
969
- bundlePreviewConfirmAdd: string;
970
- bundlePreviewConfirmCancel: string;
971
- bundlePreviewInProgress: string;
972
- bundlePreviewClose: string;
973
- pendingVersionTitle: string;
974
- pendingVersionChipNonRegressive: string;
975
- pendingVersionChipRegressive: string;
976
- pendingVersionEffectiveAt: string;
977
- pendingVersionAcceptAction: string;
978
- pendingVersionAcceptInProgress: string;
979
- pendingVersionAcceptedAt: string;
980
- wizardTitle: string;
981
- wizardClose: string;
982
- wizardCurrent: string;
983
- wizardBadgeCurrent: string;
984
- wizardBadgePopular: string;
985
- wizardPriceUnitMonthly: string;
986
- wizardPriceUnitYearly: string;
987
- wizardPriceOnRequest: string;
988
- wizardStepChoose: string;
989
- wizardStepChooseIntro: string;
990
- wizardStepPreview: string;
991
- wizardStepConfirm: string;
992
- wizardNext: string;
993
- wizardBack: string;
994
- wizardPreviewLoading: string;
995
- wizardEffectiveAtLabel: string;
996
- wizardEffectiveImmediate: string;
997
- wizardProrationTitle: string;
998
- wizardProrationLine: string;
999
- wizardProrationDays: string;
1000
- wizardLimitsTitle: string;
1001
- wizardLimitsUsed: string;
1002
- wizardLimitsCurrent: string;
1003
- wizardLimitsTarget: string;
1004
- wizardFeaturesGained: string;
1005
- wizardFeaturesLost: string;
1006
- wizardBlockersTitle: string;
1007
- wizardConfirmImmediate: string;
1008
- wizardConfirmScheduled: string;
1009
- wizardConfirmAction: string;
1010
- wizardConfirmInProgress: string;
1011
- /** #17 — price overview in the confirm step. */
1012
- wizardConfirmPriceTitle: string;
1013
- wizardConfirmProratedNow: string;
1014
- wizardConfirmRecurringNext: string;
1015
- wizardConfirmRecurringFrom: string;
1016
- wizardConfirmPerCycleMonthly: string;
1017
- wizardConfirmPerCycleYearly: string;
1018
- /** #17 — trial case in the confirm step (nothing due during the trial). */
1019
- wizardConfirmTrialNote: string;
1020
- wizardConfirmRecurringTrialEnd: string;
1021
- wizardChangeTypeUpgrade: string;
1022
- wizardChangeTypeDowngrade: string;
1023
- wizardChangeTypeCycle: string;
1024
- wizardChangeTypeNoop: string;
1025
- /** P11.4: read-only display of the package snapshot. */
1026
- packageSnapshotTitle: string;
1027
- packageSnapshotSubtitle: string;
1028
- packageSnapshotCapturedAt: string;
1029
- packageSnapshotOfferRef: string;
1030
- packageSnapshotPlanLabel: string;
1031
- packageSnapshotPlanVersionLabel: string;
1032
- packageSnapshotCycleLabel: string;
1033
- packageSnapshotBundlesLabel: string;
1034
- packageSnapshotBundlesEmpty: string;
1035
- packageSnapshotPriceMonthly: string;
1036
- packageSnapshotPriceYearly: string;
1037
- packageSnapshotPriceTotal: string;
1038
- packageSnapshotNone: string;
1039
- packageSnapshotShowRaw: string;
1040
- packageSnapshotHideRaw: string;
1041
- }
1042
- /** German default strings — apps can override them selectively. */
1043
- declare const DEFAULT_I18N_DE: TenantPlanSectionI18n;
1044
-
1045
626
  /**
1046
627
  * Generic filter shape for versions lists.
1047
628
  * `state`: 'draft' (publishedAt null), 'live' (publishedAt set, supersededAt null),
@@ -1783,61 +1364,104 @@ interface UseBatchColumnsResult {
1783
1364
  }
1784
1365
  declare function useBatchColumns(manifest: Ref<AdminManifest | null>, tenantIds: Ref<string[]>, options?: BatchColumnFetcherOptions): UseBatchColumnsResult;
1785
1366
 
1786
- type SnapshotKind = 'drafts' | 'active' | 'historical';
1787
- interface CatalogSnapshot<P extends PlanVersionRow$1 = PlanVersionRow$1> {
1788
- id: string;
1789
- kind: SnapshotKind;
1790
- status: 'DRAFT' | 'ACTIVE' | 'ARCHIVED';
1791
- label: string;
1792
- title: string;
1793
- description: string;
1794
- asOf: string | null;
1795
- createdAt: string | null;
1796
- publishedAt: string | null;
1797
- authorEmail: string | null;
1798
- plans: ResolvedPlan<P>[];
1799
- /** Number of open drafts for the `drafts` snapshot, otherwise 0. */
1800
- draftCount: number;
1801
- /** Number of entities in this snapshot whose publication flagged at least
1802
- * one regression (`nonRegressive === false`). */
1803
- regressionCount: number;
1804
- }
1805
- interface ResolvedPlan<P extends PlanVersionRow$1 = PlanVersionRow$1> {
1806
- /** Which PlanVersionRow was selected to represent this slot. */
1807
- source: P;
1808
- /** Live predecessor (only set when `source` is a DRAFT; otherwise null). */
1809
- liveBase: P | null;
1810
- isDraft: boolean;
1811
- planId: string;
1812
- features: string[];
1813
- /** Quota map (from `source.quotas` or legacy fields; empty if none). */
1814
- quotas: Record<string, number>;
1815
- monthlyNet: number;
1816
- yearlyNet: number;
1817
- marketed: boolean;
1818
- version: number;
1819
- /** @deprecated Read from `quotas['users']`. */
1820
- maxUsers?: number;
1821
- /** @deprecated Legacy field; read from `quotas['vehicles']`. */
1822
- maxVehicles?: number;
1823
- /** @deprecated Read from `quotas['storageGb']`. */
1824
- maxStorageGb?: number;
1367
+ interface CreatePlatformLoadersOptions {
1368
+ /**
1369
+ * Same endpoint configuration as for `createSuperAdminApp()`.
1370
+ * `publicBootEndpoint` / `manifestEndpoint` are derived from `apiBase`
1371
+ * when not set explicitly.
1372
+ */
1373
+ endpoints: SuperAdminEndpoints;
1374
+ /** HTTP adapter. App-specific, because auth-header / base-URL conventions vary. */
1375
+ http: HttpClient;
1376
+ /** Storage for the `ManifestLoader` ETag cache. Defaults to `defaultKvStore()`. */
1377
+ storage?: KvStore;
1378
+ /**
1379
+ * Storage key prefix — consumers with multiple apps under one domain
1380
+ * set this to e.g. `'ma:'` or `'da:'` so the caches stay separate.
1381
+ * Only forwarded to the `ManifestLoader`.
1382
+ */
1383
+ storageKeyPrefix?: string;
1384
+ /** Auth-token provider for `Authorization: Bearer …` (ManifestLoader only). */
1385
+ getAuthToken?: () => string | null;
1825
1386
  }
1826
- interface RawCatalogData<P extends PlanVersionRow$1 = PlanVersionRow$1> {
1827
- planVersions: P[];
1387
+ interface PlatformLoaders {
1388
+ bootLoader: BootLoader;
1389
+ manifestLoader: ManifestLoader;
1390
+ }
1391
+ /**
1392
+ * Builds `BootLoader` + `ManifestLoader` from a single endpoint constant.
1393
+ * Apps use the same constant for `createSuperAdminApp({ endpoints })`.
1394
+ */
1395
+ declare function createPlatformLoaders(options: CreatePlatformLoadersOptions): PlatformLoaders;
1396
+
1397
+ declare const ProjectPageHost: vue.DefineComponent<{}, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1398
+ [key: string]: any;
1399
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1400
+ /**
1401
+ * Returns a Vue Router child route that is registered as a catch-all under
1402
+ * the app's `/admin` layout. Children defined statically in the app router
1403
+ * (e.g. `/admin/dashboard`) win, because
1404
+ * Vue Router 4 matches specific routes before wildcard children.
1405
+ *
1406
+ * Example (simplified):
1407
+ *
1408
+ * {
1409
+ * path: '/admin',
1410
+ * component: AdminLayout,
1411
+ * children: [
1412
+ * { path: '', redirect: '/admin/dashboard' },
1413
+ * { path: 'dashboard', component: DashboardPage },
1414
+ * // ...more static children
1415
+ * createProjectPageHostRoute(),
1416
+ * ],
1417
+ * }
1418
+ */
1419
+ declare function createProjectPageHostRoute(options?: {
1420
+ /**
1421
+ * Path pattern of the catch-all route. Default `:projectPagePath(.+)`, so
1422
+ * that `/admin` and `/admin/` are not swallowed by the ProjectPageHost,
1423
+ * but the dashboard redirect child can take effect.
1424
+ */
1425
+ path?: string;
1426
+ }): RouteRecordRaw;
1427
+
1428
+ interface ManifestStoreState {
1429
+ manifest: Ref<AdminManifest | null>;
1430
+ loading: Ref<boolean>;
1431
+ error: Ref<Error | null>;
1432
+ loaded: Ref<boolean>;
1828
1433
  }
1829
- interface BuildSnapshotsOptions {
1434
+ interface ManifestStoreActions {
1830
1435
  /**
1831
- * App-specific plan order, e.g. `['BASIC', 'STANDARD',
1832
- * 'PROFESSIONAL', 'BUSINESS', 'ENTERPRISE']`. Plan IDs outside the list
1833
- * end up sorted alphabetically at the back.
1436
+ * Loads once per session. Concurrent calls share the promise.
1437
+ *
1438
+ * **Behavior on loader error:** the store caches the error in
1439
+ * `error.value` and resets `loaded = false`/`manifest = null`, and the
1440
+ * promise REJECTS with the original error. Callers must either
1441
+ * call `.catch(...)` (defensive behavior) or let the rejection
1442
+ * propagate. The platform router guard
1443
+ * (`createSuperAdminApp({ manifestGuard.errorRoute })`) provides a
1444
+ * fail-closed path with a redirect to a dedicated error route.
1834
1445
  */
1835
- planSortOrder?: readonly string[];
1446
+ ensureLoaded: () => Promise<void>;
1447
+ /** Discards cache + state (logout path). */
1448
+ clearCache: () => void;
1449
+ /** Forces a server refresh (e.g. after `manifest reload`). */
1450
+ reload: () => Promise<void>;
1451
+ }
1452
+ interface CreateManifestStoreOptions {
1453
+ /** Platform `ManifestLoader` instance (typically via `createPlatformLoaders()`). */
1454
+ loader: ManifestLoader;
1455
+ /** Pinia store ID. Default `admin-manifest`. */
1456
+ id?: string;
1836
1457
  }
1837
- declare function buildSnapshots<P extends PlanVersionRow$1>(data: RawCatalogData<P>, options?: BuildSnapshotsOptions): CatalogSnapshot<P>[];
1838
- declare function listOpenDrafts<P extends PlanVersionRow$1>(data: RawCatalogData<P>): {
1839
- plans: P[];
1840
- };
1458
+ type ManifestStoreDefinition = StoreDefinition<string, ManifestStoreState, Record<string, never>, ManifestStoreActions>;
1459
+ /**
1460
+ * Returns a `useStore` function for the manifest store. Apps call the
1461
+ * factory once at module top level and export the result as
1462
+ * `useManifestStore`.
1463
+ */
1464
+ declare function createManifestStore(options: CreateManifestStoreOptions): ManifestStoreDefinition;
1841
1465
 
1842
1466
  interface PilotCreatePayload {
1843
1467
  tenant: {
@@ -2053,343 +1677,145 @@ interface EmailHistoryResendResult {
2053
1677
  message?: string;
2054
1678
  }
2055
1679
 
2056
- /**
2057
- * App-specific branding data that the platform `AdminLayout` and other
2058
- * consumers read via `useSuperAdminBrand()`.
2059
- */
2060
- interface SuperAdminBrand {
2061
- /** 2-letter abbreviation in the logo badge (`'ma'`, `'da'`, …). */
2062
- logoText: string;
2063
- /** Full display name (`'DemoApp'`, `'ClubApp'`, …). */
2064
- name: string;
2065
- /** Optional: tag to the right of the name, default `'SuperAdmin'`. */
2066
- tag?: string;
2067
- }
2068
- /**
2069
- * Endpoint configuration. `apiBase` is the shared prefix under which
2070
- * `/manifest`, `/boot` and extra routes live.
2071
- */
2072
- interface SuperAdminEndpoints {
2073
- /** Shared prefix, e.g. `'/api/admin'` or `'/api/v1/admin'`. */
2074
- apiBase: string;
2075
- /** Pre-login branding endpoint, default `${apiBase}/boot`. */
2076
- publicBootEndpoint?: string;
2077
- /** Post-login full-manifest endpoint, default `${apiBase}/manifest`. */
2078
- manifestEndpoint?: string;
2079
- }
2080
- type ExtensionLoader = () => Promise<Component | {
2081
- default: Component;
2082
- }>;
2083
- type ExtensionsMap = Record<ComponentKey, ExtensionLoader>;
2084
- type ActionsMap = Record<ActionKey, ActionHandler>;
2085
- interface SuperAdminAuthGuardOptions {
2086
- /** App provides: is the user currently logged in? */
2087
- isAuthenticated: () => boolean;
2088
- /** App provides: does the user have the SuperAdmin role? Default: only check `isAuthenticated`. */
2089
- isSuperAdmin?: () => boolean;
2090
- /** App provides: redirect path for unauthenticated calls (e.g. `'/login'`). */
2091
- onUnauthenticated: () => string;
2092
- }
2093
- /**
2094
- * Result of a login attempt. Apps pass this back from their auth store to the
2095
- * platform LoginPage; the page renders an appropriate error message.
2096
- *
2097
- * `ok: true` → login succeeded, page redirects to `redirectAfterLogin`.
2098
- * `ok: false` → page shows `message` or a translation derived from `code`.
2099
- *
2100
- * Known codes:
2101
- * - `BAD_CREDENTIALS` — wrong email/password combination.
2102
- * - `NOT_SUPER_ADMIN` — account does not have the SuperAdmin role.
2103
- * - otherwise — app-specific; `message` is displayed directly.
2104
- */
2105
- type SuperAdminLoginResult = {
2106
- ok: true;
2107
- } | {
2108
- ok: false;
2109
- code?: 'BAD_CREDENTIALS' | 'NOT_SUPER_ADMIN' | string;
2110
- message?: string;
2111
- };
2112
- /**
2113
- * Login adapter. The app passes its auth-store call through here. The platform
2114
- * LoginPage consumes it via `useSuperAdminLoginAdapter()`, without knowledge
2115
- * of app-specific stores (Pinia, auth API routes, MFA hooks).
2116
- */
2117
- interface SuperAdminLoginAdapter {
2118
- /**
2119
- * Performs the login. The app store encapsulates the API call, token
2120
- * storage, MFA hops etc.
2121
- */
2122
- login(email: string, password: string): Promise<SuperAdminLoginResult>;
2123
- /**
2124
- * Target route after a successful login. Default: `/admin/dashboard`
2125
- * (platform convention for the standard pages — apps with a different
2126
- * default mount override this here).
2127
- */
2128
- redirectAfterLogin?: string;
2129
- /**
2130
- * Optional: dev hint (test account), shown below the form. Deliberately
2131
- * rendered only when `environment !== 'production'`.
2132
- */
2133
- devHint?: {
2134
- email: string;
2135
- password: string;
2136
- };
2137
- }
2138
- interface SuperAdminManifestGuardOptions {
2139
- /**
2140
- * App provides: loads the manifest into the app store. The router guard
2141
- * `await`s the promise before the route is resolved.
2142
- *
2143
- * **On loader error:** the promise REJECTS. The router guard catches the
2144
- * rejection and decides depending on `errorRoute`:
2145
- * - `errorRoute` set → redirect to this route (fail-closed).
2146
- * - `errorRoute` not set → `console.error` + render allowed
2147
- * (defensive default behavior; the app must render the manifest gap
2148
- * itself).
2149
- */
2150
- ensureLoaded: () => Promise<void>;
2151
- /**
2152
- * Optional: read accessor on the loaded manifest. When set, it is exposed
2153
- * via `provide(SUPER_ADMIN_MANIFEST_KEY)` — the `<ProjectPageHost>`
2154
- * resolves manifest `projectPages` through it against the
2155
- * `extensions:` map.
2156
- */
2157
- getManifest?: () => AdminManifest | null;
2158
- /**
2159
- * Optional: path that the router guard redirects to on a manifest load
2160
- * error (fail-closed mode). The app must register the route in `appRoutes`
2161
- * and mark it as `meta.public = true`, otherwise it runs through the
2162
- * manifest guard again and produces a redirect loop.
2163
- */
2164
- errorRoute?: string;
2165
- }
2166
- interface CreateSuperAdminAppOptions {
2167
- /** App root component (`App.vue`). */
2168
- rootComponent: Component;
2169
- /** App branding (logo, name). */
2170
- brand: SuperAdminBrand;
2171
- /** Endpoint configuration. */
2172
- endpoints: SuperAdminEndpoints;
2173
- /** App's own routes (login, standard pages, bundle pages, …). */
2174
- appRoutes: RouteRecordRaw[];
2175
- /**
2176
- * Static `extensions:` map. Manifest `projectPages[].componentKey` is
2177
- * looked up in it (see Spec §4.4).
2178
- */
2179
- extensions?: ExtensionsMap;
2180
- /**
2181
- * Static `actions:` map. Manifest `tenants.actions[].actionKey` is looked
2182
- * up in it.
2183
- */
2184
- actions?: ActionsMap;
2185
- /**
2186
- * Optional: auth guard. When set, `router.beforeEach` is wired up
2187
- * automatically — `to.meta.public === true` bypasses the guard.
2188
- */
2189
- authGuard?: SuperAdminAuthGuardOptions;
2190
- /**
2191
- * Optional: manifest guard. Runs after a successful auth guard, blocks the
2192
- * render until the manifest is loaded (prevents sidebar flicker).
2193
- */
2194
- manifestGuard?: SuperAdminManifestGuardOptions;
2195
- /**
2196
- * Optional: login adapter. When set, it is exposed via `provide()` for the
2197
- * shared `<SuperAdminLoginPage>` (from `pages-standard/`) — the app no
2198
- * longer needs to hold its own LoginPage Vue component.
2199
- */
2200
- loginAdapter?: SuperAdminLoginAdapter;
2201
- /**
2202
- * Optional: router history variant, default `createWebHistory()`.
2203
- * Apps with a subpath mount override this.
2204
- */
2205
- routerHistory?: RouterHistory;
2206
- /**
2207
- * Optional: Quasar configuration. Default loads `Notify`/`Dialog`/`Loading`
2208
- * with the established consumer convention (`top-right`, 3 s).
2209
- */
2210
- quasarOptions?: Partial<QuasarPluginOptions>;
2211
- /**
2212
- * Optional: additional Vue plugins (e.g. an app's own NotificationCenter)
2213
- * that are installed after the platform setup, before the mount.
2214
- */
2215
- installPlugins?: Array<(app: App) => void>;
2216
- /**
2217
- * Optional: `HttpClient` for all pre-login calls (boot, first-run setup).
2218
- * Default `defaultHttpClient()` (= `fetch`). Consumers pass their own
2219
- * variant through (auth header, baseURL, retry) — it then applies uniformly,
2220
- * including for the setup wizard. Consumed via `useSuperAdminHttp()`.
2221
- */
2222
- http?: HttpClient;
2223
- }
2224
- interface SuperAdminAppHandle {
2225
- app: App;
2226
- router: Router;
2227
- pinia: Pinia;
2228
- /** Mounts the app on a selector. Returns the root component instance. */
2229
- mount: (selector: string | Element) => ReturnType<App['mount']>;
2230
- }
2231
- /** Vue inject key for `useSuperAdminBrand()`. */
2232
- declare const SUPER_ADMIN_BRAND_KEY: InjectionKey<SuperAdminBrand>;
2233
- /** Vue inject key for `useSuperAdminEndpoints()`. */
2234
- declare const SUPER_ADMIN_ENDPOINTS_KEY: InjectionKey<Required<SuperAdminEndpoints>>;
2235
- /** Vue inject key for `useSuperAdminExtensions()`. */
2236
- declare const SUPER_ADMIN_EXTENSIONS_KEY: InjectionKey<ExtensionsMap>;
2237
- /** Vue inject key for `useSuperAdminActions()`. */
2238
- declare const SUPER_ADMIN_ACTIONS_KEY: InjectionKey<ActionsMap>;
2239
- /**
2240
- * Vue inject key for the manifest accessor. Only provided when
2241
- * `manifestGuard.getManifest` was passed to `createSuperAdminApp()` — the
2242
- * `<ProjectPageHost>` needs it to resolve project pages.
2243
- */
2244
- declare const SUPER_ADMIN_MANIFEST_KEY: InjectionKey<() => AdminManifest | null>;
2245
- /** Vue inject key for `useSuperAdminLoginAdapter()`. */
2246
- declare const SUPER_ADMIN_LOGIN_ADAPTER_KEY: InjectionKey<SuperAdminLoginAdapter>;
2247
- /** Vue inject key for `useSuperAdminHttp()` (pre-login HttpClient). */
2248
- declare const SUPER_ADMIN_HTTP_KEY: InjectionKey<HttpClient>;
2249
- /**
2250
- * Universal bootstrap function for SuperAdmin apps. Replaces the `main.ts`
2251
- * boilerplate duplicated per app today (Quasar + Pinia + Router + manifest
2252
- * guard) and exposes the platform maps via `provide()` for downstream
2253
- * components.
2254
- */
2255
- declare function createSuperAdminApp(options: CreateSuperAdminAppOptions): SuperAdminAppHandle;
2256
- /**
2257
- * Internal helper, exported for isolated unit tests of the navigation
2258
- * behavior (auth redirect, manifest fail-closed path). Consumers should call
2259
- * `createSuperAdminApp()`, not this helper directly.
2260
- */
2261
- declare function buildNavigationGuard(options: Pick<CreateSuperAdminAppOptions, 'authGuard' | 'manifestGuard'>): NavigationGuardWithThis<undefined> | null;
2262
-
2263
- /** Returns the `extensions:` map registered in `createSuperAdminApp()`. */
2264
- declare function useSuperAdminExtensions(): ExtensionsMap;
2265
- /** Returns the `actions:` map registered in `createSuperAdminApp()`. */
2266
- declare function useSuperAdminActions(): ActionsMap;
2267
- /**
2268
- * Returns the app branding. Throws when the component is rendered outside a
2269
- * `createSuperAdminApp()` shell — that is a setup bug, not a runtime
2270
- * problem.
2271
- */
2272
- declare function useSuperAdminBrand(): SuperAdminBrand;
2273
- /** Returns the app endpoints (apiBase, publicBootEndpoint, manifestEndpoint). */
2274
- declare function useSuperAdminEndpoints(): Required<SuperAdminEndpoints>;
2275
- /**
2276
- * Returns the manifest accessor that was provided via
2277
- * `createSuperAdminApp({ manifestGuard: { getManifest } })`.
2278
- * Returns `null` if the app did not pass an accessor — components
2279
- * (e.g. `<ProjectPageHost>`) must handle the null case cleanly, because
2280
- * the accessor is optional.
2281
- */
2282
- declare function useSuperAdminManifest(): AdminManifest | null;
2283
- /**
2284
- * Returns the login adapter the app registered via
2285
- * `createSuperAdminApp({ loginAdapter })`. Throws when none was
2286
- * set — the shared `<SuperAdminLoginPage>` needs it.
2287
- */
2288
- declare function useSuperAdminLoginAdapter(): SuperAdminLoginAdapter;
2289
- /**
2290
- * Returns the pre-login `HttpClient` (boot, first-run setup) the app registered
2291
- * via `createSuperAdminApp({ http })`. Falls back to `defaultHttpClient()`
2292
- * if none was provided (e.g. in isolated tests).
2293
- */
2294
- declare function useSuperAdminHttp(): HttpClient;
2295
-
2296
- interface CreatePlatformLoadersOptions {
2297
- /**
2298
- * Same endpoint configuration as for `createSuperAdminApp()`.
2299
- * `publicBootEndpoint` / `manifestEndpoint` are derived from `apiBase`
2300
- * when not set explicitly.
2301
- */
2302
- endpoints: SuperAdminEndpoints;
2303
- /** HTTP adapter. App-specific, because auth-header / base-URL conventions vary. */
2304
- http: HttpClient;
2305
- /** Storage for the `ManifestLoader` ETag cache. Defaults to `defaultKvStore()`. */
2306
- storage?: KvStore;
2307
- /**
2308
- * Storage key prefix — consumers with multiple apps under one domain
2309
- * set this to e.g. `'ma:'` or `'da:'` so the caches stay separate.
2310
- * Only forwarded to the `ManifestLoader`.
2311
- */
2312
- storageKeyPrefix?: string;
2313
- /** Auth-token provider for `Authorization: Bearer …` (ManifestLoader only). */
2314
- getAuthToken?: () => string | null;
2315
- }
2316
- interface PlatformLoaders {
2317
- bootLoader: BootLoader;
2318
- manifestLoader: ManifestLoader;
2319
- }
2320
- /**
2321
- * Builds `BootLoader` + `ManifestLoader` from a single endpoint constant.
2322
- * Apps use the same constant for `createSuperAdminApp({ endpoints })`.
2323
- */
2324
- declare function createPlatformLoaders(options: CreatePlatformLoadersOptions): PlatformLoaders;
2325
-
2326
- declare const ProjectPageHost: vue.DefineComponent<{}, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
2327
- [key: string]: any;
2328
- }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
2329
- /**
2330
- * Returns a Vue Router child route that is registered as a catch-all under
2331
- * the app's `/admin` layout. Children defined statically in the app router
2332
- * (e.g. `/admin/dashboard`) win, because
2333
- * Vue Router 4 matches specific routes before wildcard children.
2334
- *
2335
- * Example (simplified):
2336
- *
2337
- * {
2338
- * path: '/admin',
2339
- * component: AdminLayout,
2340
- * children: [
2341
- * { path: '', redirect: '/admin/dashboard' },
2342
- * { path: 'dashboard', component: DashboardPage },
2343
- * // ...more static children
2344
- * createProjectPageHostRoute(),
2345
- * ],
2346
- * }
2347
- */
2348
- declare function createProjectPageHostRoute(options?: {
2349
- /**
2350
- * Path pattern of the catch-all route. Default `:projectPagePath(.+)`, so
2351
- * that `/admin` and `/admin/` are not swallowed by the ProjectPageHost,
2352
- * but the dashboard redirect child can take effect.
2353
- */
2354
- path?: string;
2355
- }): RouteRecordRaw;
2356
-
2357
- interface ManifestStoreState {
2358
- manifest: Ref<AdminManifest | null>;
2359
- loading: Ref<boolean>;
2360
- error: Ref<Error | null>;
2361
- loaded: Ref<boolean>;
2362
- }
2363
- interface ManifestStoreActions {
2364
- /**
2365
- * Loads once per session. Concurrent calls share the promise.
2366
- *
2367
- * **Behavior on loader error:** the store caches the error in
2368
- * `error.value` and resets `loaded = false`/`manifest = null`, and the
2369
- * promise REJECTS with the original error. Callers must either
2370
- * call `.catch(...)` (defensive behavior) or let the rejection
2371
- * propagate. The platform router guard
2372
- * (`createSuperAdminApp({ manifestGuard.errorRoute })`) provides a
2373
- * fail-closed path with a redirect to a dedicated error route.
2374
- */
2375
- ensureLoaded: () => Promise<void>;
2376
- /** Discards cache + state (logout path). */
2377
- clearCache: () => void;
2378
- /** Forces a server refresh (e.g. after `manifest reload`). */
2379
- reload: () => Promise<void>;
2380
- }
2381
- interface CreateManifestStoreOptions {
2382
- /** Platform `ManifestLoader` instance (typically via `createPlatformLoaders()`). */
2383
- loader: ManifestLoader;
2384
- /** Pinia store ID. Default `admin-manifest`. */
2385
- id?: string;
1680
+ interface TenantPlanSectionI18n {
1681
+ sectionTitle: string;
1682
+ sectionSubtitle: string;
1683
+ loading: string;
1684
+ noSubscription: string;
1685
+ activePlan: string;
1686
+ cycleMonthly: string;
1687
+ cycleYearly: string;
1688
+ statusActive: string;
1689
+ statusTrial: string;
1690
+ statusPastDue: string;
1691
+ statusCanceled: string;
1692
+ statusPendingSales: string;
1693
+ trialEndsAt: string;
1694
+ pilotEndsAt: string;
1695
+ nextBillingDate: string;
1696
+ pendingChange: string;
1697
+ changeFromTo: string;
1698
+ changeEffectiveAt: string;
1699
+ changePlanButton: string;
1700
+ cancelSubscriptionButton: string;
1701
+ usageTitle: string;
1702
+ /** #18 — feature / scope-of-services matrix (included + locked). */
1703
+ featuresOverviewTitle: string;
1704
+ featuresActive: string;
1705
+ featuresLocked: string;
1706
+ /** #15 — bundle store (booked + available bundles). */
1707
+ bundlesStoreTitle: string;
1708
+ bundlesBookedTitle: string;
1709
+ bundlesAvailableTitle: string;
1710
+ bundlesAvailableEmpty: string;
1711
+ bundlesPerMonth: string;
1712
+ bundleBookAction: string;
1713
+ bundleBookInProgress: string;
1714
+ bundleCancelAction: string;
1715
+ bundleReactivateAction: string;
1716
+ bundleReactivateConfirmTitle: string;
1717
+ bundleReactivateConfirmBody: string;
1718
+ bundleCanceledAt: string;
1719
+ bundleMinimumTermUntil: string;
1720
+ bundleIncludesLabel: string;
1721
+ bundleAlreadyBooked: string;
1722
+ bundleIncompatible: string;
1723
+ /** #37/#61 — requires graying-out + booking/cancellation preview. */
1724
+ bundleMissingRequires: string;
1725
+ bundlePreviewAddTitle: string;
1726
+ bundlePreviewCancelTitle: string;
1727
+ bundlePreviewLoading: string;
1728
+ bundlePreviewProrationTitle: string;
1729
+ bundlePreviewProratedNow: string;
1730
+ bundlePreviewProrationDays: string;
1731
+ bundlePreviewNextPeriod: string;
1732
+ bundlePreviewTrialNote: string;
1733
+ bundlePreviewNoPrice: string;
1734
+ bundlePreviewMinimumTermLabel: string;
1735
+ bundlePreviewMinimumTermMonths: string;
1736
+ bundlePreviewMinimumTermNone: string;
1737
+ bundlePreviewRedundantTitle: string;
1738
+ bundlePreviewRedundantCoveredByPlan: string;
1739
+ bundlePreviewRedundantCoveredByBundle: string;
1740
+ bundlePreviewMissingRequiresTitle: string;
1741
+ bundlePreviewBlockersTitle: string;
1742
+ bundlePreviewWarningsTitle: string;
1743
+ bundlePreviewEffectiveAt: string;
1744
+ bundlePreviewSavings: string;
1745
+ bundlePreviewConfirmAdd: string;
1746
+ bundlePreviewConfirmCancel: string;
1747
+ bundlePreviewInProgress: string;
1748
+ bundlePreviewClose: string;
1749
+ pendingVersionTitle: string;
1750
+ pendingVersionChipNonRegressive: string;
1751
+ pendingVersionChipRegressive: string;
1752
+ pendingVersionEffectiveAt: string;
1753
+ pendingVersionAcceptAction: string;
1754
+ pendingVersionAcceptInProgress: string;
1755
+ pendingVersionAcceptedAt: string;
1756
+ wizardTitle: string;
1757
+ wizardClose: string;
1758
+ wizardCurrent: string;
1759
+ wizardBadgeCurrent: string;
1760
+ wizardBadgePopular: string;
1761
+ wizardPriceUnitMonthly: string;
1762
+ wizardPriceUnitYearly: string;
1763
+ wizardPriceOnRequest: string;
1764
+ wizardStepChoose: string;
1765
+ wizardStepChooseIntro: string;
1766
+ wizardStepPreview: string;
1767
+ wizardStepConfirm: string;
1768
+ wizardNext: string;
1769
+ wizardBack: string;
1770
+ wizardPreviewLoading: string;
1771
+ wizardEffectiveAtLabel: string;
1772
+ wizardEffectiveImmediate: string;
1773
+ wizardProrationTitle: string;
1774
+ wizardProrationLine: string;
1775
+ wizardProrationDays: string;
1776
+ wizardLimitsTitle: string;
1777
+ wizardLimitsUsed: string;
1778
+ wizardLimitsCurrent: string;
1779
+ wizardLimitsTarget: string;
1780
+ wizardFeaturesGained: string;
1781
+ wizardFeaturesLost: string;
1782
+ wizardBlockersTitle: string;
1783
+ wizardConfirmImmediate: string;
1784
+ wizardConfirmScheduled: string;
1785
+ wizardConfirmAction: string;
1786
+ wizardConfirmInProgress: string;
1787
+ /** #17 — price overview in the confirm step. */
1788
+ wizardConfirmPriceTitle: string;
1789
+ wizardConfirmProratedNow: string;
1790
+ wizardConfirmRecurringNext: string;
1791
+ wizardConfirmRecurringFrom: string;
1792
+ wizardConfirmPerCycleMonthly: string;
1793
+ wizardConfirmPerCycleYearly: string;
1794
+ /** #17 — trial case in the confirm step (nothing due during the trial). */
1795
+ wizardConfirmTrialNote: string;
1796
+ wizardConfirmRecurringTrialEnd: string;
1797
+ wizardChangeTypeUpgrade: string;
1798
+ wizardChangeTypeDowngrade: string;
1799
+ wizardChangeTypeCycle: string;
1800
+ wizardChangeTypeNoop: string;
1801
+ /** P11.4: read-only display of the package snapshot. */
1802
+ packageSnapshotTitle: string;
1803
+ packageSnapshotSubtitle: string;
1804
+ packageSnapshotCapturedAt: string;
1805
+ packageSnapshotOfferRef: string;
1806
+ packageSnapshotPlanLabel: string;
1807
+ packageSnapshotPlanVersionLabel: string;
1808
+ packageSnapshotCycleLabel: string;
1809
+ packageSnapshotBundlesLabel: string;
1810
+ packageSnapshotBundlesEmpty: string;
1811
+ packageSnapshotPriceMonthly: string;
1812
+ packageSnapshotPriceYearly: string;
1813
+ packageSnapshotPriceTotal: string;
1814
+ packageSnapshotNone: string;
1815
+ packageSnapshotShowRaw: string;
1816
+ packageSnapshotHideRaw: string;
2386
1817
  }
2387
- type ManifestStoreDefinition = StoreDefinition<string, ManifestStoreState, Record<string, never>, ManifestStoreActions>;
2388
- /**
2389
- * Returns a `useStore` function for the manifest store. Apps call the
2390
- * factory once at module top level and export the result as
2391
- * `useManifestStore`.
2392
- */
2393
- declare function createManifestStore(options: CreateManifestStoreOptions): ManifestStoreDefinition;
1818
+ /** German default strings apps can override them selectively. */
1819
+ declare const DEFAULT_I18N_DE: TenantPlanSectionI18n;
2394
1820
 
2395
- export { ADMIN_UI_VERSION, ActionDefNotInManifestError, type ActionHandler, ActionRegistry, type ActionsMap, type ApiListResponse, type BatchColumnData, BatchColumnDriftError, BatchColumnFetcher, type BatchColumnFetcherOptions, type BatchColumnRow, type BatchColumnValue, type BillingCycleStr, BootLoadError, BootLoader, type BootLoaderOptions, type BuildRouteEntry, type BuildSnapshotsOptions, type BulkItemKind, type BulkItemStatus, type BulkPublishItem, type BundleAddPreviewShape, type BundleCancelPreviewShape, type BundlePreviewIssueShape, type BundlePreviewShape, type BundlePreviewSnapshotShape, BundlesApiError, BusinessTypesApiError, CATALOG_DEFAULT_LOCALE, type CachedManifestEntry, type CatalogBundle, CatalogEntriesApiError, type CatalogPlan, type CatalogSnapshot, type ConfirmDialogState, type CreateAdminRoutesOptions, type CreateManifestStoreOptions, type CreatePlatformLoadersOptions, type CreateSuperAdminAppOptions, DEFAULT_I18N_DE, DEFAULT_PILOT_COPY, DEFAULT_SECTION_ORDER, DEFAULT_STANDARD_PAGE_ROUTES, DEFAULT_YEARLY_FACTOR, DiscoveryLoadError, type DraftPricing, ENTITLEMENT_INJECTION_KEY, type EmailHistoryDetail, type EmailHistoryFilter, type EmailHistoryListResult, type EmailHistoryResendResult, type EmailHistoryRow, type EmailHistoryStatus, type EntitlementSnapshotShape, type ExtensionLoader, type ExtensionsMap, type FeatureRegistryEntry, type FeatureRouterGuardOptions, type FeatureRowMarkers, type HttpClient, HttpJsonError, type HttpResponse, type KvStore, ManifestLoadError, ManifestLoader, type ManifestLoaderOptions, type ManifestStoreActions, type ManifestStoreDefinition, type ManifestStoreState, MarketingProjectionsApiError, type MfaDialogState, MissingHandlerError, type NavBuilderOptions, type PackageSnapshotShape, type ParamStyle, type PilotCopy, type PilotCreatePayload, type PilotCreateResult, type PilotEditPayload, type PilotEditResult, type PlanChangePreviewShape, type PlanSnapshotShape, type PlanVersionListFilter, type PlanVersionRow, PlannedOnlyFeatureError, PlansApiError, type PlatformEmailProvider, type PlatformEmailTestInput, type PlatformEmailTestResult, type PlatformEmailWriteInput, type PlatformLoaders, type PlatformTenantActionRow, type PlatformTenantActionTone, type PlatformTenantActionsOptions, type PlatformTenantActionsResult, type PriceLineItem, ProjectPageHost, type PromoCodeCreatePayload, type PromoCodeDurationType, type PromoCodePlanOption, type PromoCodeUpdatePayload, type PromoCodeValueType, type PromoState, type PromoStatus, PromotionsApiError, type QuotaMeta, type RawCatalogData, type RedundantFeatureHintShape, type ResolvedAction, type ResolvedPlan, type ResolvedTenantAction, SUPER_ADMIN_ACTIONS_KEY, SUPER_ADMIN_BRAND_KEY, SUPER_ADMIN_ENDPOINTS_KEY, SUPER_ADMIN_EXTENSIONS_KEY, SUPER_ADMIN_HTTP_KEY, SUPER_ADMIN_LOGIN_ADAPTER_KEY, SUPER_ADMIN_MANIFEST_KEY, type SidebarItem, type SidebarSection, type SnapshotKind, type SubscriptionBundleShape, type SubscriptionDraft, type SuperAdminAppHandle, type SuperAdminAuthGuardOptions, type SuperAdminBrand, type SuperAdminEndpoints, type SuperAdminLoginAdapter, type SuperAdminLoginResult, type SuperAdminManifestGuardOptions, type TenantActionFlowProviders, type TenantActionInput, type TenantManifestNavItem, type TenantManifestShape, type TenantPlanSectionI18n, type TenantRowLike, TenantSubscriptionBundlesApiError, type UsageSnapshotShape, type UseActionsResult, type UseApiListOptions, type UseApiListResult, type UseAuditEntriesOptions, type UseAuditEntriesResult, type UseBatchColumnsResult, type UseBulkPublishOptions, type UseBulkPublishResult, type UseBundleVersionsMapOptions, type UseBundleVersionsMapResult, type UseBundleVersionsOptions, type UseBundleVersionsResult, type UseBundlesOptions, type UseBundlesResult, type UseBusinessTypeVersionsOptions, type UseBusinessTypeVersionsResult, type UseBusinessTypesOptions, type UseBusinessTypesResult, type UseCatalogEntriesOptions, type UseCatalogEntriesResult, type UseDiscoveryOptions, type UseDiscoveryResult, type UseEntitlementOptions, type UseEntitlementResult, type UseLivePlanVersionsOptions, type UseLivePlanVersionsResult, type UseManifestResult, type UseMarketingProjectionsOptions, type UseMarketingProjectionsResult, type UseNavResult, type UsePlanEditorOptions, type UsePlanEditorResult, type UsePlanVersionsOptions, type UsePlanVersionsResult, type UsePlansOptions, type UsePlansResult, type UsePromotionsOptions, type UsePromotionsResult, type UsePublicBootResult, type UseSubscriptionDraftOptions, type UseTenantActionFlowResult, type UseTenantBillingCatalogOptions, type UseTenantBillingCatalogResult, type UseTenantBillingOptions, type UseTenantBillingResult, type UseTenantManifestOptions, type UseTenantManifestResult, type UseTenantSubscriptionBundlesOptions, type UseTenantSubscriptionBundlesResult, type UseTenantsOptions, type UseTenantsResult, type VersionsOptions, type VersionsResult, buildFeatureRegistry, buildFeatureRouterGuard, buildNavigationGuard, buildQuotaRegistry, buildRoutes, buildSidebar, buildSnapshots, createAdminRoutes, createManifestStore, createPlatformLoaders, createProjectPageHostRoute, createSuperAdminApp, defaultHttpClient, defaultIconForActionKey, defaultKvStore, defaultToneForActionKey, getJson, listOpenDrafts, postJson, provideEntitlement, resolveExtension, trimTrailingSlashes, useActions, useApiList, useAuditEntries, useBatchColumns, useBulkPublish, useBundleVersions, useBundleVersionsMap, useBundles, useBusinessTypeVersions, useBusinessTypes, useCatalogEntries, useDiscovery, useEntitlement, useInjectedEntitlement, useLivePlanVersions, useManifest, useMarketingProjections, useNav, usePlanEditor, usePlanVersions, usePlanVersionsCatalog, usePlans, usePlatformTenantActions, usePromotions, usePublicBoot, useSubscriptionDraft, useSuperAdminActions, useSuperAdminBrand, useSuperAdminEndpoints, useSuperAdminExtensions, useSuperAdminHttp, useSuperAdminLoginAdapter, useSuperAdminManifest, useTenantActionFlow, useTenantBilling, useTenantBillingCatalog, useTenantManifest, useTenantSubscriptionBundles, useTenants };
1821
+ export { ActionHandler, ActionRegistry, ActionsMap, type ApiListResponse, BatchColumnData, BatchColumnFetcherOptions, type BillingCycleStr, BootLoader, BootLoaderOptions, BuildRouteEntry, type BulkItemKind, type BulkItemStatus, type BulkPublishItem, type BundleAddPreviewShape, type BundleCancelPreviewShape, type BundlePreviewIssueShape, type BundlePreviewShape, type BundlePreviewSnapshotShape, BundlesApiError, BusinessTypesApiError, CATALOG_DEFAULT_LOCALE, type CatalogBundle, CatalogEntriesApiError, type CatalogPlan, type ConfirmDialogState, type CreateAdminRoutesOptions, type CreateManifestStoreOptions, type CreatePlatformLoadersOptions, DEFAULT_I18N_DE, DEFAULT_PILOT_COPY, DEFAULT_YEARLY_FACTOR, DiscoveryLoadError, type DraftPricing, ENTITLEMENT_INJECTION_KEY, type EmailHistoryDetail, type EmailHistoryFilter, type EmailHistoryListResult, type EmailHistoryResendResult, type EmailHistoryRow, type EmailHistoryStatus, type EntitlementSnapshotShape, ExtensionsMap, type FeatureRegistryEntry, type FeatureRouterGuardOptions, type FeatureRowMarkers, HttpClient, KvStore, ManifestLoader, ManifestLoaderOptions, type ManifestStoreActions, type ManifestStoreDefinition, type ManifestStoreState, MarketingProjectionsApiError, type MfaDialogState, NavBuilderOptions, type PackageSnapshotShape, type PilotCopy, type PilotCreatePayload, type PilotCreateResult, type PilotEditPayload, type PilotEditResult, type PlanChangePreviewShape, type PlanSnapshotShape, type PlanVersionListFilter, type PlanVersionRow, PlannedOnlyFeatureError, PlansApiError, type PlatformEmailProvider, type PlatformEmailTestInput, type PlatformEmailTestResult, type PlatformEmailWriteInput, type PlatformLoaders, type PlatformTenantActionRow, type PlatformTenantActionTone, type PlatformTenantActionsOptions, type PlatformTenantActionsResult, type PriceLineItem, ProjectPageHost, type PromoCodeCreatePayload, type PromoCodeDurationType, type PromoCodePlanOption, type PromoCodeUpdatePayload, type PromoCodeValueType, type PromoState, type PromoStatus, PromotionsApiError, type QuotaMeta, type RedundantFeatureHintShape, type ResolvedTenantAction, SidebarSection, type SubscriptionBundleShape, type SubscriptionDraft, SuperAdminBrand, SuperAdminEndpoints, SuperAdminLoginAdapter, type TenantActionFlowProviders, type TenantActionInput, type TenantManifestNavItem, type TenantManifestShape, type TenantPlanSectionI18n, type TenantRowLike, TenantSubscriptionBundlesApiError, type UsageSnapshotShape, type UseActionsResult, type UseApiListOptions, type UseApiListResult, type UseAuditEntriesOptions, type UseAuditEntriesResult, type UseBatchColumnsResult, type UseBulkPublishOptions, type UseBulkPublishResult, type UseBundleVersionsMapOptions, type UseBundleVersionsMapResult, type UseBundleVersionsOptions, type UseBundleVersionsResult, type UseBundlesOptions, type UseBundlesResult, type UseBusinessTypeVersionsOptions, type UseBusinessTypeVersionsResult, type UseBusinessTypesOptions, type UseBusinessTypesResult, type UseCatalogEntriesOptions, type UseCatalogEntriesResult, type UseDiscoveryOptions, type UseDiscoveryResult, type UseEntitlementOptions, type UseEntitlementResult, type UseLivePlanVersionsOptions, type UseLivePlanVersionsResult, type UseManifestResult, type UseMarketingProjectionsOptions, type UseMarketingProjectionsResult, type UseNavResult, type UsePlanEditorOptions, type UsePlanEditorResult, type UsePlanVersionsOptions, type UsePlanVersionsResult, type UsePlansOptions, type UsePlansResult, type UsePromotionsOptions, type UsePromotionsResult, type UsePublicBootResult, type UseSubscriptionDraftOptions, type UseTenantActionFlowResult, type UseTenantBillingCatalogOptions, type UseTenantBillingCatalogResult, type UseTenantBillingOptions, type UseTenantBillingResult, type UseTenantManifestOptions, type UseTenantManifestResult, type UseTenantSubscriptionBundlesOptions, type UseTenantSubscriptionBundlesResult, type UseTenantsOptions, type UseTenantsResult, type VersionsOptions, type VersionsResult, buildFeatureRegistry, buildFeatureRouterGuard, buildQuotaRegistry, createAdminRoutes, createManifestStore, createPlatformLoaders, createProjectPageHostRoute, defaultIconForActionKey, defaultToneForActionKey, provideEntitlement, useActions, useApiList, useAuditEntries, useBatchColumns, useBulkPublish, useBundleVersions, useBundleVersionsMap, useBundles, useBusinessTypeVersions, useBusinessTypes, useCatalogEntries, useDiscovery, useEntitlement, useInjectedEntitlement, useLivePlanVersions, useManifest, useMarketingProjections, useNav, usePlanEditor, usePlanVersions, usePlanVersionsCatalog, usePlans, usePlatformTenantActions, usePromotions, usePublicBoot, useSubscriptionDraft, useSuperAdminActions, useSuperAdminBrand, useSuperAdminEndpoints, useSuperAdminExtensions, useSuperAdminHttp, useSuperAdminLoginAdapter, useSuperAdminManifest, useTenantActionFlow, useTenantBilling, useTenantBillingCatalog, useTenantManifest, useTenantSubscriptionBundles, useTenants };