@saasicat/ui-vue 0.15.1 → 0.17.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 (43) hide show
  1. package/README.md +13 -10
  2. package/dist/{messages-BIYw32u1.d.ts → catalog-C4Gv2_KM.d.cts} +126 -39
  3. package/dist/{messages-BIYw32u1.d.cts → catalog-C4Gv2_KM.d.ts} +126 -39
  4. package/dist/{chunk-TY2WYKME.js → chunk-247RJPU4.js} +38 -11
  5. package/dist/{chunk-TBLXKSTR.js → chunk-IZGFS5RS.js} +90 -21
  6. package/dist/{chunk-66BUSVC5.js → chunk-XPSD5HKG.js} +30 -4
  7. package/dist/client/index.cjs +122 -22
  8. package/dist/client/index.d.cts +51 -5
  9. package/dist/client/index.d.ts +51 -5
  10. package/dist/client/index.js +14 -2
  11. package/dist/index.cjs +152 -30
  12. package/dist/index.d.cts +5 -5
  13. package/dist/index.d.ts +5 -5
  14. package/dist/index.js +17 -3
  15. package/dist/quasar/index.cjs +110 -14
  16. package/dist/quasar/index.d.cts +2 -2
  17. package/dist/quasar/index.d.ts +2 -2
  18. package/dist/quasar/index.js +2 -2
  19. package/dist/{use-super-admin-i18n-DL_qI1BY.d.cts → use-super-admin-i18n-BdPqeTHl.d.cts} +51 -5
  20. package/dist/{use-super-admin-i18n-CWNu_W3u.d.ts → use-super-admin-i18n-uteRCL9q.d.ts} +51 -5
  21. package/package.json +8 -3
  22. package/src/client/i18n/catalog.ts +120 -0
  23. package/src/client/i18n/currency.ts +7 -2
  24. package/src/client/i18n/define.ts +2 -2
  25. package/src/client/i18n/index.ts +1 -0
  26. package/src/client/i18n/locale.ts +52 -8
  27. package/src/client/i18n/messages/bundles.ts +2 -3
  28. package/src/client/i18n/messages/marketing.ts +2 -2
  29. package/src/client/i18n/messages/nav.ts +3 -3
  30. package/src/client/i18n/messages/shell.ts +2 -0
  31. package/src/client/i18n/messages.ts +7 -4
  32. package/src/client/index.ts +1 -0
  33. package/src/client/login-branding.ts +61 -0
  34. package/src/client/nav-builder.ts +33 -6
  35. package/src/client/types.ts +51 -14
  36. package/src/components/LocaleSwitcher.vue +77 -0
  37. package/src/components/bundle-editor/bundle-version-status.ts +16 -8
  38. package/src/pages-standard/AdminLayout.vue +9 -3
  39. package/src/pages-standard/SuperAdminLoginPage.vue +17 -9
  40. package/src/pages-standard/SuperAdminSetupWizard.vue +7 -0
  41. package/src/pages-standard/discovery-page/discovery-ui.ts +8 -8
  42. package/src/pages-standard/plan-versions/format.ts +2 -2
  43. package/src/vue/use-super-admin-i18n.ts +116 -19
@@ -1,5 +1,5 @@
1
- import { H as HttpClient, K as KvStore, S as SaLocale } from '../messages-BIYw32u1.cjs';
2
- export { d as ActionDefNotInManifestError, A as ActionHandler, c as ActionRegistry, D as DEFAULT_SA_LOCALE, e as HttpResponse, M as MessageTree, f as MissingHandlerError, P as PartialMessages, R as ResolvedAction, g as SA_INTL_LOCALES, h as SA_LOCALES, i as SA_MESSAGES, a as SaMessages, b as SaMessagesOverrides, T as TranslationOf, j as defaultHttpClient, k as defaultKvStore, l as defineMessages, m as mergeMessages, r as resolveMessages } from '../messages-BIYw32u1.cjs';
1
+ import { H as HttpClient, K as KvStore, S as SaLocale, x as SaNavMessages } from '../catalog-C4Gv2_KM.cjs';
2
+ export { f as ActionDefNotInManifestError, A as ActionHandler, e as ActionRegistry, D as DEFAULT_SA_LOCALE, g as HttpResponse, M as MessageTree, h as MissingHandlerError, P as PartialMessages, R as ResolvedAction, i as SA_INTL_LOCALES, j as SA_LOCALES, k as SA_LOCALE_LABELS, l as SA_MESSAGES, m as SaBuiltinLocale, n as SaCatalog, o as SaCatalogOptions, c as SaLocaleDefinition, b as SaLocaleOption, a as SaMessages, d as SaMessagesOverrides, T as TranslationOf, p as builtinLocaleOf, q as createSaCatalog, r as defaultHttpClient, s as defaultKvStore, t as defineMessages, u as isSaBuiltinLocale, v as mergeMessages, w as resolveMessages } from '../catalog-C4Gv2_KM.cjs';
3
3
  import { PublicBootResponse, AdminManifest, StandardPageKey, TenantColumnDef, PromoCodeRecord, AdminTenantDetail, AdminUserListFilter, AdminUserListRow, AdminAuditListFilter, AuditEntry, AdminSubscriptionListRow } from '@saasicat/types';
4
4
 
5
5
  declare const ADMIN_UI_VERSION = "1.2.0";
@@ -122,8 +122,17 @@ interface NavBuilderOptions {
122
122
  * UI locale for the default labels and section names, default `'de'`.
123
123
  * Pass the same locale to `buildSidebar()`'s `sectionOrder` (via
124
124
  * `defaultSectionOrder(locale)`) — section names are compared as strings.
125
+ *
126
+ * Only resolves the two catalogs the platform ships. Prefer `nav`, which
127
+ * carries app overrides and app-supplied languages as well.
125
128
  */
126
129
  locale?: SaLocale;
130
+ /**
131
+ * Resolved `nav` namespace, as `useSuperAdminI18n().messages.value.nav`
132
+ * hands it out. Wins over `locale`, and is the only way the sidebar sees
133
+ * `i18n.overrides` or a language the app added itself.
134
+ */
135
+ nav?: SaNavMessages;
127
136
  /**
128
137
  * Optional: overrides the default routes for certain standard pages.
129
138
  * Consumers set this if they want an alternative URL structure.
@@ -149,9 +158,11 @@ interface NavBuilderOptions {
149
158
  /**
150
159
  * Localized default section names in drawer order (Übersicht → Produktkatalog
151
160
  * → Kunden → System). Pass the result to `buildSidebar()` when building routes
152
- * with a non-default locale.
161
+ * with a non-default locale, or hand it the resolved `nav` catalog directly —
162
+ * section names are compared as strings, so both sides must come from the same
163
+ * source.
153
164
  */
154
- declare function defaultSectionOrder(locale?: SaLocale): readonly string[];
165
+ declare function defaultSectionOrder(locale?: SaLocale | SaNavMessages): readonly string[];
155
166
  /**
156
167
  * Returns the list of all routes defined by the current manifest —
157
168
  * filtered to the capabilities that the logged-in user has.
@@ -293,4 +304,39 @@ declare function formatMessage(template: string, params: MessageParams): string;
293
304
  */
294
305
  declare function formatCurrency(amount: number | string | null | undefined, locale?: SaLocale, currency?: string): string;
295
306
 
296
- export { ADMIN_UI_VERSION, type AdminPromoListFilter, type AdminPromoListRow, type AdminResourceClientOptions, type BatchColumnData, BatchColumnDriftError, BatchColumnFetcher, type BatchColumnFetcherOptions, type BatchColumnRow, type BatchColumnValue, BootLoadError, BootLoader, type BootLoaderOptions, type BuildRouteEntry, type CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, HttpClient, HttpJsonError, KvStore, ManifestLoadError, ManifestLoader, type ManifestLoaderOptions, type MessageParams, type NavBuilderOptions, type ParamStyle, SaLocale, type SidebarItem, type SidebarSection, buildRoutes, buildSidebar, createAdminResourceClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, postJson, resolveExtension, trimTrailingSlashes };
307
+ /** The slice of the public boot response these cards read. */
308
+ interface LoginBootProject {
309
+ displayName?: string | null;
310
+ label?: string | null;
311
+ icon?: string | null;
312
+ logoUrl?: string | null;
313
+ environment?: string | null;
314
+ }
315
+ /** App-configured branding, used wherever boot says nothing. */
316
+ interface LoginBrandFallback {
317
+ name?: string;
318
+ tag?: string;
319
+ logoText?: string;
320
+ }
321
+ interface LoginBranding {
322
+ name: string;
323
+ tag: string;
324
+ icon: string;
325
+ logoUrl: string | null;
326
+ /** Environment worth showing, i.e. anything but production. `null` hides it. */
327
+ environment: string | null;
328
+ }
329
+ /**
330
+ * `boot` is whatever the endpoint returned — possibly `null`, possibly an
331
+ * object without `project`. Both are treated as "boot said nothing" rather
332
+ * than as a reason to fail.
333
+ */
334
+ declare function resolveLoginBranding(boot: {
335
+ project?: LoginBootProject | null;
336
+ } | null | undefined, fallback?: LoginBrandFallback): LoginBranding;
337
+ /** Test credentials must never be printed in production, whatever boot omits. */
338
+ declare function isProductionBoot(boot: {
339
+ project?: LoginBootProject | null;
340
+ } | null | undefined): boolean;
341
+
342
+ export { ADMIN_UI_VERSION, type AdminPromoListFilter, type AdminPromoListRow, type AdminResourceClientOptions, type BatchColumnData, BatchColumnDriftError, BatchColumnFetcher, type BatchColumnFetcherOptions, type BatchColumnRow, type BatchColumnValue, BootLoadError, BootLoader, type BootLoaderOptions, type BuildRouteEntry, type CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, HttpClient, HttpJsonError, KvStore, type LoginBootProject, type LoginBrandFallback, type LoginBranding, ManifestLoadError, ManifestLoader, type ManifestLoaderOptions, type MessageParams, type NavBuilderOptions, type ParamStyle, SaLocale, type SidebarItem, type SidebarSection, buildRoutes, buildSidebar, createAdminResourceClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, isProductionBoot, postJson, resolveExtension, resolveLoginBranding, trimTrailingSlashes };
@@ -1,5 +1,5 @@
1
- import { H as HttpClient, K as KvStore, S as SaLocale } from '../messages-BIYw32u1.js';
2
- export { d as ActionDefNotInManifestError, A as ActionHandler, c as ActionRegistry, D as DEFAULT_SA_LOCALE, e as HttpResponse, M as MessageTree, f as MissingHandlerError, P as PartialMessages, R as ResolvedAction, g as SA_INTL_LOCALES, h as SA_LOCALES, i as SA_MESSAGES, a as SaMessages, b as SaMessagesOverrides, T as TranslationOf, j as defaultHttpClient, k as defaultKvStore, l as defineMessages, m as mergeMessages, r as resolveMessages } from '../messages-BIYw32u1.js';
1
+ import { H as HttpClient, K as KvStore, S as SaLocale, x as SaNavMessages } from '../catalog-C4Gv2_KM.js';
2
+ export { f as ActionDefNotInManifestError, A as ActionHandler, e as ActionRegistry, D as DEFAULT_SA_LOCALE, g as HttpResponse, M as MessageTree, h as MissingHandlerError, P as PartialMessages, R as ResolvedAction, i as SA_INTL_LOCALES, j as SA_LOCALES, k as SA_LOCALE_LABELS, l as SA_MESSAGES, m as SaBuiltinLocale, n as SaCatalog, o as SaCatalogOptions, c as SaLocaleDefinition, b as SaLocaleOption, a as SaMessages, d as SaMessagesOverrides, T as TranslationOf, p as builtinLocaleOf, q as createSaCatalog, r as defaultHttpClient, s as defaultKvStore, t as defineMessages, u as isSaBuiltinLocale, v as mergeMessages, w as resolveMessages } from '../catalog-C4Gv2_KM.js';
3
3
  import { PublicBootResponse, AdminManifest, StandardPageKey, TenantColumnDef, PromoCodeRecord, AdminTenantDetail, AdminUserListFilter, AdminUserListRow, AdminAuditListFilter, AuditEntry, AdminSubscriptionListRow } from '@saasicat/types';
4
4
 
5
5
  declare const ADMIN_UI_VERSION = "1.2.0";
@@ -122,8 +122,17 @@ interface NavBuilderOptions {
122
122
  * UI locale for the default labels and section names, default `'de'`.
123
123
  * Pass the same locale to `buildSidebar()`'s `sectionOrder` (via
124
124
  * `defaultSectionOrder(locale)`) — section names are compared as strings.
125
+ *
126
+ * Only resolves the two catalogs the platform ships. Prefer `nav`, which
127
+ * carries app overrides and app-supplied languages as well.
125
128
  */
126
129
  locale?: SaLocale;
130
+ /**
131
+ * Resolved `nav` namespace, as `useSuperAdminI18n().messages.value.nav`
132
+ * hands it out. Wins over `locale`, and is the only way the sidebar sees
133
+ * `i18n.overrides` or a language the app added itself.
134
+ */
135
+ nav?: SaNavMessages;
127
136
  /**
128
137
  * Optional: overrides the default routes for certain standard pages.
129
138
  * Consumers set this if they want an alternative URL structure.
@@ -149,9 +158,11 @@ interface NavBuilderOptions {
149
158
  /**
150
159
  * Localized default section names in drawer order (Übersicht → Produktkatalog
151
160
  * → Kunden → System). Pass the result to `buildSidebar()` when building routes
152
- * with a non-default locale.
161
+ * with a non-default locale, or hand it the resolved `nav` catalog directly —
162
+ * section names are compared as strings, so both sides must come from the same
163
+ * source.
153
164
  */
154
- declare function defaultSectionOrder(locale?: SaLocale): readonly string[];
165
+ declare function defaultSectionOrder(locale?: SaLocale | SaNavMessages): readonly string[];
155
166
  /**
156
167
  * Returns the list of all routes defined by the current manifest —
157
168
  * filtered to the capabilities that the logged-in user has.
@@ -293,4 +304,39 @@ declare function formatMessage(template: string, params: MessageParams): string;
293
304
  */
294
305
  declare function formatCurrency(amount: number | string | null | undefined, locale?: SaLocale, currency?: string): string;
295
306
 
296
- export { ADMIN_UI_VERSION, type AdminPromoListFilter, type AdminPromoListRow, type AdminResourceClientOptions, type BatchColumnData, BatchColumnDriftError, BatchColumnFetcher, type BatchColumnFetcherOptions, type BatchColumnRow, type BatchColumnValue, BootLoadError, BootLoader, type BootLoaderOptions, type BuildRouteEntry, type CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, HttpClient, HttpJsonError, KvStore, ManifestLoadError, ManifestLoader, type ManifestLoaderOptions, type MessageParams, type NavBuilderOptions, type ParamStyle, SaLocale, type SidebarItem, type SidebarSection, buildRoutes, buildSidebar, createAdminResourceClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, postJson, resolveExtension, trimTrailingSlashes };
307
+ /** The slice of the public boot response these cards read. */
308
+ interface LoginBootProject {
309
+ displayName?: string | null;
310
+ label?: string | null;
311
+ icon?: string | null;
312
+ logoUrl?: string | null;
313
+ environment?: string | null;
314
+ }
315
+ /** App-configured branding, used wherever boot says nothing. */
316
+ interface LoginBrandFallback {
317
+ name?: string;
318
+ tag?: string;
319
+ logoText?: string;
320
+ }
321
+ interface LoginBranding {
322
+ name: string;
323
+ tag: string;
324
+ icon: string;
325
+ logoUrl: string | null;
326
+ /** Environment worth showing, i.e. anything but production. `null` hides it. */
327
+ environment: string | null;
328
+ }
329
+ /**
330
+ * `boot` is whatever the endpoint returned — possibly `null`, possibly an
331
+ * object without `project`. Both are treated as "boot said nothing" rather
332
+ * than as a reason to fail.
333
+ */
334
+ declare function resolveLoginBranding(boot: {
335
+ project?: LoginBootProject | null;
336
+ } | null | undefined, fallback?: LoginBrandFallback): LoginBranding;
337
+ /** Test credentials must never be printed in production, whatever boot omits. */
338
+ declare function isProductionBoot(boot: {
339
+ project?: LoginBootProject | null;
340
+ } | null | undefined): boolean;
341
+
342
+ export { ADMIN_UI_VERSION, type AdminPromoListFilter, type AdminPromoListRow, type AdminResourceClientOptions, type BatchColumnData, BatchColumnDriftError, BatchColumnFetcher, type BatchColumnFetcherOptions, type BatchColumnRow, type BatchColumnValue, BootLoadError, BootLoader, type BootLoaderOptions, type BuildRouteEntry, type CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, HttpClient, HttpJsonError, KvStore, type LoginBootProject, type LoginBrandFallback, type LoginBranding, ManifestLoadError, ManifestLoader, type ManifestLoaderOptions, type MessageParams, type NavBuilderOptions, type ParamStyle, SaLocale, type SidebarItem, type SidebarSection, buildRoutes, buildSidebar, createAdminResourceClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, isProductionBoot, postJson, resolveExtension, resolveLoginBranding, trimTrailingSlashes };
@@ -16,23 +16,29 @@ import {
16
16
  createAdminResourceClient,
17
17
  defaultSectionOrder,
18
18
  getJson,
19
+ isProductionBoot,
19
20
  postJson,
20
21
  resolveExtension,
22
+ resolveLoginBranding,
21
23
  trimTrailingSlashes
22
- } from "../chunk-66BUSVC5.js";
24
+ } from "../chunk-XPSD5HKG.js";
23
25
  import {
24
26
  DEFAULT_SA_LOCALE,
25
27
  SA_INTL_LOCALES,
26
28
  SA_LOCALES,
29
+ SA_LOCALE_LABELS,
27
30
  SA_MESSAGES,
31
+ builtinLocaleOf,
32
+ createSaCatalog,
28
33
  defaultHttpClient,
29
34
  defaultKvStore,
30
35
  defineMessages,
31
36
  formatCurrency,
32
37
  formatMessage,
38
+ isSaBuiltinLocale,
33
39
  mergeMessages,
34
40
  resolveMessages
35
- } from "../chunk-TBLXKSTR.js";
41
+ } from "../chunk-IZGFS5RS.js";
36
42
  export {
37
43
  ADMIN_UI_VERSION,
38
44
  ActionDefNotInManifestError,
@@ -49,10 +55,13 @@ export {
49
55
  MissingHandlerError,
50
56
  SA_INTL_LOCALES,
51
57
  SA_LOCALES,
58
+ SA_LOCALE_LABELS,
52
59
  SA_MESSAGES,
53
60
  buildRoutes,
54
61
  buildSidebar,
62
+ builtinLocaleOf,
55
63
  createAdminResourceClient,
64
+ createSaCatalog,
56
65
  defaultHttpClient,
57
66
  defaultKvStore,
58
67
  defaultSectionOrder,
@@ -60,9 +69,12 @@ export {
60
69
  formatCurrency,
61
70
  formatMessage,
62
71
  getJson,
72
+ isProductionBoot,
73
+ isSaBuiltinLocale,
63
74
  mergeMessages,
64
75
  postJson,
65
76
  resolveExtension,
77
+ resolveLoginBranding,
66
78
  resolveMessages,
67
79
  trimTrailingSlashes
68
80
  };
package/dist/index.cjs CHANGED
@@ -48,6 +48,8 @@ __export(src_exports, {
48
48
  PromotionsApiError: () => PromotionsApiError,
49
49
  SA_INTL_LOCALES: () => SA_INTL_LOCALES,
50
50
  SA_LOCALES: () => SA_LOCALES,
51
+ SA_LOCALE_LABELS: () => SA_LOCALE_LABELS,
52
+ SA_LOCALE_STORAGE_KEY: () => SA_LOCALE_STORAGE_KEY,
51
53
  SA_MESSAGES: () => SA_MESSAGES,
52
54
  SUPER_ADMIN_ACTIONS_KEY: () => SUPER_ADMIN_ACTIONS_KEY,
53
55
  SUPER_ADMIN_BRAND_KEY: () => SUPER_ADMIN_BRAND_KEY,
@@ -65,11 +67,13 @@ __export(src_exports, {
65
67
  buildQuotaRegistry: () => buildQuotaRegistry,
66
68
  buildRoutes: () => buildRoutes,
67
69
  buildSidebar: () => buildSidebar,
70
+ builtinLocaleOf: () => builtinLocaleOf,
68
71
  createAdminResourceClient: () => createAdminResourceClient,
69
72
  createAdminRoutes: () => createAdminRoutes,
70
73
  createManifestStore: () => createManifestStore,
71
74
  createPlatformLoaders: () => createPlatformLoaders,
72
75
  createProjectPageHostRoute: () => createProjectPageHostRoute,
76
+ createSaCatalog: () => createSaCatalog,
73
77
  createSuperAdminI18n: () => createSuperAdminI18n,
74
78
  defaultHttpClient: () => defaultHttpClient,
75
79
  defaultIconForActionKey: () => defaultIconForActionKey,
@@ -81,10 +85,13 @@ __export(src_exports, {
81
85
  formatCurrency: () => formatCurrency,
82
86
  formatMessage: () => formatMessage,
83
87
  getJson: () => getJson,
88
+ isProductionBoot: () => isProductionBoot,
89
+ isSaBuiltinLocale: () => isSaBuiltinLocale,
84
90
  mergeMessages: () => mergeMessages,
85
91
  postJson: () => postJson,
86
92
  provideEntitlement: () => provideEntitlement,
87
93
  resolveExtension: () => resolveExtension,
94
+ resolveLoginBranding: () => resolveLoginBranding,
88
95
  resolveMessages: () => resolveMessages,
89
96
  trimTrailingSlashes: () => trimTrailingSlashes,
90
97
  useActions: () => useActions,
@@ -132,23 +139,45 @@ module.exports = __toCommonJS(src_exports);
132
139
  var ADMIN_UI_VERSION = "1.2.0";
133
140
 
134
141
  // src/client/types.ts
135
- function defaultKvStore() {
136
- if (typeof globalThis.localStorage === "undefined") {
137
- return {
138
- get: () => null,
139
- set: () => {
140
- },
141
- remove: () => {
142
- }
143
- };
142
+ var NOOP_KV_STORE = {
143
+ get: () => null,
144
+ set: () => {
145
+ },
146
+ remove: () => {
144
147
  }
145
- const ls = globalThis.localStorage;
148
+ };
149
+ function defaultKvStore() {
150
+ const ls = resolveLocalStorage();
151
+ if (!ls) return NOOP_KV_STORE;
146
152
  return {
147
- get: (k) => ls.getItem(k),
148
- set: (k, v) => ls.setItem(k, v),
149
- remove: (k) => ls.removeItem(k)
153
+ get: (k) => {
154
+ try {
155
+ return ls.getItem(k);
156
+ } catch {
157
+ return null;
158
+ }
159
+ },
160
+ set: (k, v) => {
161
+ try {
162
+ ls.setItem(k, v);
163
+ } catch {
164
+ }
165
+ },
166
+ remove: (k) => {
167
+ try {
168
+ ls.removeItem(k);
169
+ } catch {
170
+ }
171
+ }
150
172
  };
151
173
  }
174
+ function resolveLocalStorage() {
175
+ try {
176
+ return globalThis.localStorage ?? null;
177
+ } catch {
178
+ return null;
179
+ }
180
+ }
152
181
  function defaultHttpClient() {
153
182
  return (url, init) => fetch(url, init);
154
183
  }
@@ -316,6 +345,16 @@ var SA_INTL_LOCALES = {
316
345
  de: "de-DE",
317
346
  en: "en-US"
318
347
  };
348
+ var SA_LOCALE_LABELS = {
349
+ de: "Deutsch",
350
+ en: "English"
351
+ };
352
+ function isSaBuiltinLocale(value) {
353
+ return typeof value === "string" && SA_LOCALES.includes(value);
354
+ }
355
+ function builtinLocaleOf(locale, fallback = DEFAULT_SA_LOCALE) {
356
+ return isSaBuiltinLocale(locale) ? locale : fallback;
357
+ }
319
358
 
320
359
  // src/client/i18n/define.ts
321
360
  function defineMessages(de, en) {
@@ -437,15 +476,21 @@ var PAGE_SECTIONS = {
437
476
  platformEmail: "system",
438
477
  platformEmailHistory: "system"
439
478
  };
479
+ function resolveNav(options) {
480
+ return options.nav ?? builtinNav(options.locale);
481
+ }
482
+ function builtinNav(locale) {
483
+ return navMessages[isSaBuiltinLocale(locale) ? locale : DEFAULT_SA_LOCALE];
484
+ }
440
485
  function defaultSectionOrder(locale = DEFAULT_SA_LOCALE) {
441
- const sections = navMessages[locale].sections;
486
+ const sections = typeof locale === "string" ? builtinNav(locale).sections : locale.sections;
442
487
  return [sections.overview, sections.catalog, sections.customers, sections.system];
443
488
  }
444
489
  function buildRoutes(manifest, options = {}) {
445
490
  const routes = [];
446
491
  const capabilities = manifest.capabilities ?? {};
447
492
  const standard = manifest.navigation?.standardPages ?? {};
448
- const nav = navMessages[options.locale ?? DEFAULT_SA_LOCALE];
493
+ const nav = resolveNav(options);
449
494
  const defaultNavSections = Object.fromEntries(
450
495
  Object.entries(PAGE_SECTIONS).map(([page, section]) => [page, nav.sections[section]])
451
496
  );
@@ -780,7 +825,7 @@ function formatterFor(locale, currency, decimals) {
780
825
  const key = `${locale}:${currency}:${decimals}`;
781
826
  let formatter = formatters.get(key);
782
827
  if (!formatter) {
783
- formatter = new Intl.NumberFormat(SA_INTL_LOCALES[locale], {
828
+ formatter = new Intl.NumberFormat(SA_INTL_LOCALES[locale] ?? locale, {
784
829
  style: "currency",
785
830
  currency,
786
831
  minimumFractionDigits: decimals,
@@ -946,7 +991,7 @@ var bundlesMessages = defineMessages(
946
991
  bundleKeyHint: "API-stabil \xB7 wird aus dem Label erzeugt",
947
992
  errorKeyFormat: "Nur A-Z, 0-9, Underscore; muss mit Buchstabe beginnen.",
948
993
  errorKeyExists: "Dieser Bundle-Key existiert bereits.",
949
- descriptionPlaceholder: "z. B. Kampagnen, WhatsApp und Korrespondenz f\xFCr aktive Vereine.",
994
+ descriptionPlaceholder: "z. B. Kampagnen, WhatsApp und Korrespondenz.",
950
995
  sectionPricing: "v1 \xB7 Pricing & G\xFCltigkeit",
951
996
  pricingHint: "Monats- & Jahrespreis sowie Datum, ab dem das Bundle verkaufbar wird.",
952
997
  validFromImmediate: "\u2713 Bundle ist nach Anlage sofort live und verkaufbar.",
@@ -1158,7 +1203,7 @@ var bundlesMessages = defineMessages(
1158
1203
  bundleKeyHint: "API-stable \xB7 derived from the label",
1159
1204
  errorKeyFormat: "Only A-Z, 0-9, underscore; must start with a letter.",
1160
1205
  errorKeyExists: "This bundle key already exists.",
1161
- descriptionPlaceholder: "e.g. Campaigns, WhatsApp and correspondence for active clubs.",
1206
+ descriptionPlaceholder: "e.g. Campaigns, WhatsApp and correspondence.",
1162
1207
  sectionPricing: "v1 \xB7 pricing & validity",
1163
1208
  pricingHint: "Monthly & yearly price plus the date from which the bundle becomes sellable.",
1164
1209
  validFromImmediate: "\u2713 The bundle is live and sellable right after creation.",
@@ -1832,7 +1877,7 @@ var marketingMessages = defineMessages(
1832
1877
  ctaOverrideLabel: "CTA-Text \xFCberschreiben (optional)",
1833
1878
  ctaOverrideHint: "leer lassen f\xFCr Auto-Text",
1834
1879
  topFeatureCount: "{count} Eintr\xE4ge",
1835
- featureLabelPlaceholder: "z. B. Beitragsverwaltung",
1880
+ featureLabelPlaceholder: "z. B. Erweiterte Berichte",
1836
1881
  featureStrongPlaceholder: "Highlight, z. B. bis 100",
1837
1882
  moveUp: "Nach oben",
1838
1883
  moveDown: "Nach unten",
@@ -1960,7 +2005,7 @@ var marketingMessages = defineMessages(
1960
2005
  ctaOverrideLabel: "Override CTA text (optional)",
1961
2006
  ctaOverrideHint: "leave empty for the auto text",
1962
2007
  topFeatureCount: "{count} entries",
1963
- featureLabelPlaceholder: "e.g. Membership management",
2008
+ featureLabelPlaceholder: "e.g. Advanced reporting",
1964
2009
  featureStrongPlaceholder: "Highlight, e.g. up to 100",
1965
2010
  moveUp: "Move up",
1966
2011
  moveDown: "Move down",
@@ -3403,7 +3448,8 @@ var shellMessages = defineMessages(
3403
3448
  productionWarning: "Aktionen wirken sich sofort auf alle Mandanten aus.",
3404
3449
  subtitle: "SuperAdmin \xB7 Plattform-Verwaltung",
3405
3450
  roleBadge: "SUPER ADMIN",
3406
- logout: "Abmelden"
3451
+ logout: "Abmelden",
3452
+ language: "Sprache"
3407
3453
  },
3408
3454
  drawer: {
3409
3455
  docs: "Doku \xF6ffnen"
@@ -3471,7 +3517,8 @@ var shellMessages = defineMessages(
3471
3517
  productionWarning: "Actions take effect immediately for all tenants.",
3472
3518
  subtitle: "SuperAdmin \xB7 Platform administration",
3473
3519
  roleBadge: "SUPER ADMIN",
3474
- logout: "Sign out"
3520
+ logout: "Sign out",
3521
+ language: "Language"
3475
3522
  },
3476
3523
  drawer: {
3477
3524
  docs: "Open documentation"
@@ -3744,6 +3791,54 @@ function resolveMessages(locale, overrides) {
3744
3791
  return mergeMessages(SA_MESSAGES[locale], overrides);
3745
3792
  }
3746
3793
 
3794
+ // src/client/i18n/catalog.ts
3795
+ function createSaCatalog(options = {}) {
3796
+ const additional = options.additionalLocales ?? {};
3797
+ const known = /* @__PURE__ */ new Set([...SA_LOCALES, ...Object.keys(additional)]);
3798
+ const requested = options.locales?.filter((code) => known.has(code));
3799
+ const offered = requested && requested.length > 0 ? requested : [...SA_LOCALES, ...Object.keys(additional)];
3800
+ const labelFor = (locale) => additional[locale]?.label ?? (isSaBuiltinLocale(locale) ? SA_LOCALE_LABELS[locale] : locale);
3801
+ const cache = /* @__PURE__ */ new Map();
3802
+ const messagesFor = (locale) => {
3803
+ const hit = cache.get(locale);
3804
+ if (hit) return hit;
3805
+ const definition = additional[locale];
3806
+ const base = SA_MESSAGES[definition?.basedOn ?? (isSaBuiltinLocale(locale) ? locale : "en")];
3807
+ const translated = definition ? mergeMessages(base, definition.messages) : base;
3808
+ const resolved = mergeMessages(translated, options.overrides?.[locale]);
3809
+ cache.set(locale, resolved);
3810
+ return resolved;
3811
+ };
3812
+ const offeredSet = new Set(offered);
3813
+ return {
3814
+ locales: offered.map((code) => ({ code, label: labelFor(code) })),
3815
+ has: (locale) => offeredSet.has(locale),
3816
+ // The app's first offered locale beats the platform default: an app
3817
+ // shipping English only must not start in German.
3818
+ defaultLocale: offered.includes(DEFAULT_SA_LOCALE) ? DEFAULT_SA_LOCALE : offered[0],
3819
+ messagesFor,
3820
+ intlLocaleFor: (locale) => additional[locale]?.intlLocale ?? (isSaBuiltinLocale(locale) ? SA_INTL_LOCALES[locale] : locale),
3821
+ labelFor
3822
+ };
3823
+ }
3824
+
3825
+ // src/client/login-branding.ts
3826
+ var DEFAULT_TAG = "SuperAdmin";
3827
+ function resolveLoginBranding(boot, fallback = {}) {
3828
+ const project = boot?.project ?? null;
3829
+ const environment = project?.environment ?? null;
3830
+ return {
3831
+ name: project?.displayName || fallback.name || "",
3832
+ tag: project?.label || fallback.tag || DEFAULT_TAG,
3833
+ icon: project?.icon || fallback.logoText || "",
3834
+ logoUrl: project?.logoUrl || null,
3835
+ environment: environment && environment !== "production" ? environment : null
3836
+ };
3837
+ }
3838
+ function isProductionBoot(boot) {
3839
+ return boot?.project?.environment === "production";
3840
+ }
3841
+
3747
3842
  // src/vue/super-admin-context.ts
3748
3843
  var SUPER_ADMIN_BRAND_KEY = /* @__PURE__ */ Symbol.for(
3749
3844
  "@saasicat/ui-vue/SUPER_ADMIN_BRAND"
@@ -3841,22 +3936,42 @@ function useSuperAdminHttp() {
3841
3936
 
3842
3937
  // src/vue/use-super-admin-i18n.ts
3843
3938
  var import_vue2 = require("vue");
3939
+ var SA_LOCALE_STORAGE_KEY = "sa:locale";
3844
3940
  var SUPER_ADMIN_I18N_KEY = /* @__PURE__ */ Symbol.for(
3845
3941
  "@saasicat/ui-vue/SUPER_ADMIN_I18N"
3846
3942
  );
3847
3943
  function createSuperAdminI18n(options = {}) {
3848
- const locale = (0, import_vue2.isRef)(options.locale) ? options.locale : (0, import_vue2.ref)(options.locale ?? DEFAULT_SA_LOCALE);
3849
- const messages = (0, import_vue2.computed)(
3850
- () => resolveMessages(locale.value, options.overrides?.[locale.value])
3944
+ const catalog = createSaCatalog(options);
3945
+ const locale = (0, import_vue2.isRef)(options.locale) ? options.locale : createOwnedLocale(options, catalog);
3946
+ const active = (0, import_vue2.computed)(
3947
+ () => catalog.has(locale.value) ? locale.value : catalog.defaultLocale
3851
3948
  );
3852
- const intlLocale = (0, import_vue2.computed)(() => SA_INTL_LOCALES[locale.value]);
3853
- return { locale, messages, intlLocale };
3949
+ const messages = (0, import_vue2.computed)(() => catalog.messagesFor(active.value));
3950
+ const intlLocale = (0, import_vue2.computed)(() => catalog.intlLocaleFor(active.value));
3951
+ const writable = !(0, import_vue2.isReadonly)(locale);
3952
+ return {
3953
+ locale,
3954
+ messages,
3955
+ intlLocale,
3956
+ switcherEnabled: (options.switcher ?? true) && writable && catalog.locales.length > 1,
3957
+ availableLocales: catalog.locales
3958
+ };
3959
+ }
3960
+ function createOwnedLocale(options, catalog) {
3961
+ const initial = options.locale ?? catalog.defaultLocale;
3962
+ if (options.persist === false) return (0, import_vue2.ref)(initial);
3963
+ const storage = options.storage ?? defaultKvStore();
3964
+ const key = `${options.storageKeyPrefix ?? ""}${SA_LOCALE_STORAGE_KEY}`;
3965
+ const stored = storage.get(key);
3966
+ const locale = (0, import_vue2.ref)(stored && catalog.has(stored) ? stored : initial);
3967
+ (0, import_vue2.watch)(locale, (next) => storage.set(key, next));
3968
+ return locale;
3854
3969
  }
3855
3970
  var fallbackI18n = null;
3856
3971
  function useSuperAdminI18n() {
3857
3972
  const injected = (0, import_vue2.inject)(SUPER_ADMIN_I18N_KEY, null);
3858
3973
  if (injected) return injected;
3859
- fallbackI18n ??= createSuperAdminI18n();
3974
+ fallbackI18n ??= createSuperAdminI18n({ persist: false });
3860
3975
  return fallbackI18n;
3861
3976
  }
3862
3977
  function useSaMessages(namespace) {
@@ -4404,7 +4519,7 @@ function useTenantBilling(options = {}) {
4404
4519
 
4405
4520
  // src/vue/use-subscription-draft.ts
4406
4521
  var import_vue12 = require("vue");
4407
- var import_types10 = require("@saasicat/types");
4522
+ var import_types11 = require("@saasicat/types");
4408
4523
  var DEFAULT_YEARLY_FACTOR = 10;
4409
4524
  function unwrap(source) {
4410
4525
  if (source && typeof source === "object" && "value" in source) {
@@ -4444,7 +4559,7 @@ function useSubscriptionDraft(options) {
4444
4559
  const planFeatures = selectedPlan.value?.features ?? [];
4445
4560
  const selected = selectedBundles.value;
4446
4561
  const keptIds = new Set(
4447
- (0, import_types10.selectChargeableBundles)(planFeatures, selected).map((b) => b.bundleVersionId)
4562
+ (0, import_types11.selectChargeableBundles)(planFeatures, selected).map((b) => b.bundleVersionId)
4448
4563
  );
4449
4564
  return selected.filter((b) => keptIds.has(b.bundleVersionId));
4450
4565
  });
@@ -6586,6 +6701,8 @@ function defaultTenantPlanSectionI18n(locale) {
6586
6701
  PromotionsApiError,
6587
6702
  SA_INTL_LOCALES,
6588
6703
  SA_LOCALES,
6704
+ SA_LOCALE_LABELS,
6705
+ SA_LOCALE_STORAGE_KEY,
6589
6706
  SA_MESSAGES,
6590
6707
  SUPER_ADMIN_ACTIONS_KEY,
6591
6708
  SUPER_ADMIN_BRAND_KEY,
@@ -6603,11 +6720,13 @@ function defaultTenantPlanSectionI18n(locale) {
6603
6720
  buildQuotaRegistry,
6604
6721
  buildRoutes,
6605
6722
  buildSidebar,
6723
+ builtinLocaleOf,
6606
6724
  createAdminResourceClient,
6607
6725
  createAdminRoutes,
6608
6726
  createManifestStore,
6609
6727
  createPlatformLoaders,
6610
6728
  createProjectPageHostRoute,
6729
+ createSaCatalog,
6611
6730
  createSuperAdminI18n,
6612
6731
  defaultHttpClient,
6613
6732
  defaultIconForActionKey,
@@ -6619,10 +6738,13 @@ function defaultTenantPlanSectionI18n(locale) {
6619
6738
  formatCurrency,
6620
6739
  formatMessage,
6621
6740
  getJson,
6741
+ isProductionBoot,
6742
+ isSaBuiltinLocale,
6622
6743
  mergeMessages,
6623
6744
  postJson,
6624
6745
  provideEntitlement,
6625
6746
  resolveExtension,
6747
+ resolveLoginBranding,
6626
6748
  resolveMessages,
6627
6749
  trimTrailingSlashes,
6628
6750
  useActions,
package/dist/index.d.cts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { BootLoaderOptions, ManifestLoaderOptions, BuildRouteEntry, SidebarSection, NavBuilderOptions, BatchColumnData, BatchColumnFetcherOptions, BootLoader, ManifestLoader } from './client/index.cjs';
2
- export { ADMIN_UI_VERSION, AdminPromoListFilter, AdminPromoListRow, AdminResourceClientOptions, BatchColumnDriftError, BatchColumnFetcher, BatchColumnRow, BatchColumnValue, BootLoadError, CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, HttpJsonError, ManifestLoadError, MessageParams, ParamStyle, SidebarItem, buildRoutes, buildSidebar, createAdminResourceClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, postJson, resolveExtension, trimTrailingSlashes } from './client/index.cjs';
3
- import { H as HttpClient, c as ActionRegistry, A as ActionHandler, K as KvStore, S as SaLocale } from './messages-BIYw32u1.cjs';
4
- export { d as ActionDefNotInManifestError, D as DEFAULT_SA_LOCALE, e as HttpResponse, M as MessageTree, f as MissingHandlerError, P as PartialMessages, R as ResolvedAction, g as SA_INTL_LOCALES, h as SA_LOCALES, i as SA_MESSAGES, a as SaMessages, b as SaMessagesOverrides, T as TranslationOf, j as defaultHttpClient, k as defaultKvStore, l as defineMessages, m as mergeMessages, r as resolveMessages } from './messages-BIYw32u1.cjs';
5
- import { A as ActionsMap, a as SuperAdminBrand, b as SuperAdminEndpoints, E as ExtensionsMap, c as SuperAdminLoginAdapter } from './use-super-admin-i18n-DL_qI1BY.cjs';
6
- export { f as ExtensionLoader, I as InstallPlugin, g as SUPER_ADMIN_ACTIONS_KEY, h as SUPER_ADMIN_BRAND_KEY, i as SUPER_ADMIN_ENDPOINTS_KEY, j as SUPER_ADMIN_EXTENSIONS_KEY, k as SUPER_ADMIN_HTTP_KEY, l as SUPER_ADMIN_I18N_KEY, m as SUPER_ADMIN_LOGIN_ADAPTER_KEY, n as SUPER_ADMIN_MANIFEST_KEY, o as SUPER_ADMIN_NOTIFY_KEY, p as SuperAdminAuthGuardOptions, S as SuperAdminGuardOptions, e as SuperAdminI18n, d as SuperAdminI18nOptions, q as SuperAdminLoginResult, r as SuperAdminManifestGuardOptions, U as UiNotify, s as UiNotifyKind, t as UiNotifyOptions, u as buildNavigationGuard, v as createSuperAdminI18n, w as useSaMessages, x as useSuperAdminI18n } from './use-super-admin-i18n-DL_qI1BY.cjs';
2
+ export { ADMIN_UI_VERSION, AdminPromoListFilter, AdminPromoListRow, AdminResourceClientOptions, BatchColumnDriftError, BatchColumnFetcher, BatchColumnRow, BatchColumnValue, BootLoadError, CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, HttpJsonError, LoginBootProject, LoginBrandFallback, LoginBranding, ManifestLoadError, MessageParams, ParamStyle, SidebarItem, buildRoutes, buildSidebar, createAdminResourceClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, isProductionBoot, postJson, resolveExtension, resolveLoginBranding, trimTrailingSlashes } from './client/index.cjs';
3
+ import { H as HttpClient, e as ActionRegistry, A as ActionHandler, K as KvStore, S as SaLocale } from './catalog-C4Gv2_KM.cjs';
4
+ export { f as ActionDefNotInManifestError, D as DEFAULT_SA_LOCALE, g as HttpResponse, M as MessageTree, h as MissingHandlerError, P as PartialMessages, R as ResolvedAction, i as SA_INTL_LOCALES, j as SA_LOCALES, k as SA_LOCALE_LABELS, l as SA_MESSAGES, m as SaBuiltinLocale, n as SaCatalog, o as SaCatalogOptions, c as SaLocaleDefinition, b as SaLocaleOption, a as SaMessages, d as SaMessagesOverrides, T as TranslationOf, p as builtinLocaleOf, q as createSaCatalog, r as defaultHttpClient, s as defaultKvStore, t as defineMessages, u as isSaBuiltinLocale, v as mergeMessages, w as resolveMessages } from './catalog-C4Gv2_KM.cjs';
5
+ import { A as ActionsMap, a as SuperAdminBrand, b as SuperAdminEndpoints, E as ExtensionsMap, c as SuperAdminLoginAdapter } from './use-super-admin-i18n-BdPqeTHl.cjs';
6
+ export { f as ExtensionLoader, I as InstallPlugin, g as SA_LOCALE_STORAGE_KEY, h as SUPER_ADMIN_ACTIONS_KEY, i as SUPER_ADMIN_BRAND_KEY, j as SUPER_ADMIN_ENDPOINTS_KEY, k as SUPER_ADMIN_EXTENSIONS_KEY, l as SUPER_ADMIN_HTTP_KEY, m as SUPER_ADMIN_I18N_KEY, n as SUPER_ADMIN_LOGIN_ADAPTER_KEY, o as SUPER_ADMIN_MANIFEST_KEY, p as SUPER_ADMIN_NOTIFY_KEY, q as SuperAdminAuthGuardOptions, S as SuperAdminGuardOptions, e as SuperAdminI18n, d as SuperAdminI18nOptions, r as SuperAdminLoginResult, s as SuperAdminManifestGuardOptions, U as UiNotify, t as UiNotifyKind, u as UiNotifyOptions, v as buildNavigationGuard, w as createSuperAdminI18n, x as useSaMessages, y as useSuperAdminI18n } from './use-super-admin-i18n-BdPqeTHl.cjs';
7
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, MarketingProjectionFilter, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, PromotionRow, CreatePromotionData, UpdatePromotionData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, TenantActionDef } from '@saasicat/types';
8
8
  import { RouteRecordRaw, NavigationGuardWithThis } from 'vue-router';
9
9
  import * as vue from 'vue';
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { BootLoaderOptions, ManifestLoaderOptions, BuildRouteEntry, SidebarSection, NavBuilderOptions, BatchColumnData, BatchColumnFetcherOptions, BootLoader, ManifestLoader } from './client/index.js';
2
- export { ADMIN_UI_VERSION, AdminPromoListFilter, AdminPromoListRow, AdminResourceClientOptions, BatchColumnDriftError, BatchColumnFetcher, BatchColumnRow, BatchColumnValue, BootLoadError, CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, HttpJsonError, ManifestLoadError, MessageParams, ParamStyle, SidebarItem, buildRoutes, buildSidebar, createAdminResourceClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, postJson, resolveExtension, trimTrailingSlashes } from './client/index.js';
3
- import { H as HttpClient, c as ActionRegistry, A as ActionHandler, K as KvStore, S as SaLocale } from './messages-BIYw32u1.js';
4
- export { d as ActionDefNotInManifestError, D as DEFAULT_SA_LOCALE, e as HttpResponse, M as MessageTree, f as MissingHandlerError, P as PartialMessages, R as ResolvedAction, g as SA_INTL_LOCALES, h as SA_LOCALES, i as SA_MESSAGES, a as SaMessages, b as SaMessagesOverrides, T as TranslationOf, j as defaultHttpClient, k as defaultKvStore, l as defineMessages, m as mergeMessages, r as resolveMessages } from './messages-BIYw32u1.js';
5
- import { A as ActionsMap, a as SuperAdminBrand, b as SuperAdminEndpoints, E as ExtensionsMap, c as SuperAdminLoginAdapter } from './use-super-admin-i18n-CWNu_W3u.js';
6
- export { f as ExtensionLoader, I as InstallPlugin, g as SUPER_ADMIN_ACTIONS_KEY, h as SUPER_ADMIN_BRAND_KEY, i as SUPER_ADMIN_ENDPOINTS_KEY, j as SUPER_ADMIN_EXTENSIONS_KEY, k as SUPER_ADMIN_HTTP_KEY, l as SUPER_ADMIN_I18N_KEY, m as SUPER_ADMIN_LOGIN_ADAPTER_KEY, n as SUPER_ADMIN_MANIFEST_KEY, o as SUPER_ADMIN_NOTIFY_KEY, p as SuperAdminAuthGuardOptions, S as SuperAdminGuardOptions, e as SuperAdminI18n, d as SuperAdminI18nOptions, q as SuperAdminLoginResult, r as SuperAdminManifestGuardOptions, U as UiNotify, s as UiNotifyKind, t as UiNotifyOptions, u as buildNavigationGuard, v as createSuperAdminI18n, w as useSaMessages, x as useSuperAdminI18n } from './use-super-admin-i18n-CWNu_W3u.js';
2
+ export { ADMIN_UI_VERSION, AdminPromoListFilter, AdminPromoListRow, AdminResourceClientOptions, BatchColumnDriftError, BatchColumnFetcher, BatchColumnRow, BatchColumnValue, BootLoadError, CachedManifestEntry, DEFAULT_STANDARD_PAGE_ROUTES, HttpJsonError, LoginBootProject, LoginBrandFallback, LoginBranding, ManifestLoadError, MessageParams, ParamStyle, SidebarItem, buildRoutes, buildSidebar, createAdminResourceClient, defaultSectionOrder, formatCurrency, formatMessage, getJson, isProductionBoot, postJson, resolveExtension, resolveLoginBranding, trimTrailingSlashes } from './client/index.js';
3
+ import { H as HttpClient, e as ActionRegistry, A as ActionHandler, K as KvStore, S as SaLocale } from './catalog-C4Gv2_KM.js';
4
+ export { f as ActionDefNotInManifestError, D as DEFAULT_SA_LOCALE, g as HttpResponse, M as MessageTree, h as MissingHandlerError, P as PartialMessages, R as ResolvedAction, i as SA_INTL_LOCALES, j as SA_LOCALES, k as SA_LOCALE_LABELS, l as SA_MESSAGES, m as SaBuiltinLocale, n as SaCatalog, o as SaCatalogOptions, c as SaLocaleDefinition, b as SaLocaleOption, a as SaMessages, d as SaMessagesOverrides, T as TranslationOf, p as builtinLocaleOf, q as createSaCatalog, r as defaultHttpClient, s as defaultKvStore, t as defineMessages, u as isSaBuiltinLocale, v as mergeMessages, w as resolveMessages } from './catalog-C4Gv2_KM.js';
5
+ import { A as ActionsMap, a as SuperAdminBrand, b as SuperAdminEndpoints, E as ExtensionsMap, c as SuperAdminLoginAdapter } from './use-super-admin-i18n-uteRCL9q.js';
6
+ export { f as ExtensionLoader, I as InstallPlugin, g as SA_LOCALE_STORAGE_KEY, h as SUPER_ADMIN_ACTIONS_KEY, i as SUPER_ADMIN_BRAND_KEY, j as SUPER_ADMIN_ENDPOINTS_KEY, k as SUPER_ADMIN_EXTENSIONS_KEY, l as SUPER_ADMIN_HTTP_KEY, m as SUPER_ADMIN_I18N_KEY, n as SUPER_ADMIN_LOGIN_ADAPTER_KEY, o as SUPER_ADMIN_MANIFEST_KEY, p as SUPER_ADMIN_NOTIFY_KEY, q as SuperAdminAuthGuardOptions, S as SuperAdminGuardOptions, e as SuperAdminI18n, d as SuperAdminI18nOptions, r as SuperAdminLoginResult, s as SuperAdminManifestGuardOptions, U as UiNotify, t as UiNotifyKind, u as UiNotifyOptions, v as buildNavigationGuard, w as createSuperAdminI18n, x as useSaMessages, y as useSuperAdminI18n } from './use-super-admin-i18n-uteRCL9q.js';
7
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, MarketingProjectionFilter, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, PromotionRow, CreatePromotionData, UpdatePromotionData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, TenantActionDef } from '@saasicat/types';
8
8
  import { RouteRecordRaw, NavigationGuardWithThis } from 'vue-router';
9
9
  import * as vue from 'vue';