@lukoweb/apitogo 0.1.55 → 0.1.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/cli.js CHANGED
@@ -667,7 +667,7 @@ var init_file_exists = __esm({
667
667
 
668
668
  // src/config/validators/ModulesSchema.ts
669
669
  import { z as z3 } from "zod";
670
- var ModuleToggleSchema, DocsModuleSchema, LandingLinkSchema, LandingFeatureSchema, LandingCodeExampleSchema, LandingHeroSchema, LandingTickerItemSchema, LandingTickerSchema, LandingTrustSchema, LandingApiShowcaseItemSchema, LandingApiShowcaseSchema, LandingPricingCtaSchema, LandingContentSchema, DashboardContentSchema, ProfileContentSchema, PlanTierSchema, PlansContentSchema, SubmodulePageFields, LandingModuleSchema, UserManagementModuleSchema, ApiKeysModuleSchema, PlanCatalogItemSchema, PlansModuleSchema, DashboardModuleSchema, UserPanelModuleSchema, ModulesSchema;
670
+ var ModuleToggleSchema, DocsModuleSchema, LandingLinkSchema, LandingFeatureSchema, LandingCodeExampleSchema, LandingHeroSchema, LandingFeaturesSectionSchema, LandingTickerItemSchema, LandingTickerSchema, LandingTrustSchema, LandingApiShowcaseItemSchema, LandingApiShowcaseSchema, LandingPricingCtaSchema, LandingContentSchema, DashboardContentSchema, ProfileContentSchema, PlanTierSchema, PlansContentSchema, SubmodulePageFields, LandingModuleSchema, UserManagementModuleSchema, ApiKeysModuleSchema, PlanCatalogItemSchema, PlansModuleSchema, DashboardModuleSchema, UserPanelModuleSchema, ModulesSchema;
671
671
  var init_ModulesSchema = __esm({
672
672
  "src/config/validators/ModulesSchema.ts"() {
673
673
  ModuleToggleSchema = z3.object({
@@ -708,12 +708,18 @@ var init_ModulesSchema = __esm({
708
708
  }).optional();
709
709
  LandingHeroSchema = z3.object({
710
710
  title: z3.string().optional(),
711
+ titleAccent: z3.string().optional().describe("Accent-colored word or phrase shown on a new line after the title."),
711
712
  subtitle: z3.string().optional(),
712
713
  description: z3.string().optional(),
713
714
  badge: z3.string().optional(),
714
715
  highlights: z3.array(z3.string()).optional(),
715
716
  codeExample: LandingCodeExampleSchema
716
717
  }).optional();
718
+ LandingFeaturesSectionSchema = z3.object({
719
+ label: z3.string().optional(),
720
+ title: z3.string().optional(),
721
+ description: z3.string().optional()
722
+ }).optional();
717
723
  LandingTickerItemSchema = z3.object({
718
724
  label: z3.string(),
719
725
  value: z3.string(),
@@ -753,6 +759,7 @@ var init_ModulesSchema = __esm({
753
759
  }).optional();
754
760
  LandingContentSchema = z3.object({
755
761
  hero: LandingHeroSchema,
762
+ featuresSection: LandingFeaturesSectionSchema,
756
763
  features: z3.array(LandingFeatureSchema).optional(),
757
764
  primaryAction: LandingLinkSchema.optional(),
758
765
  secondaryAction: LandingLinkSchema.optional(),
@@ -799,6 +806,9 @@ var init_ModulesSchema = __esm({
799
806
  ),
800
807
  content: LandingContentSchema.describe(
801
808
  "Default landing page content when no custom component is provided."
809
+ ),
810
+ useDefaults: z3.boolean().optional().describe(
811
+ "When true, merge DEFAULT_LANDING_CONTENT for unset sections. When false or omitted, only configured sections are shown."
802
812
  )
803
813
  });
804
814
  UserManagementModuleSchema = ModuleToggleSchema.extend({
@@ -1032,10 +1042,160 @@ var init_local_manifest = __esm({
1032
1042
  }
1033
1043
  });
1034
1044
 
1045
+ // src/config/default-landing-content.ts
1046
+ var DEFAULT_LANDING_CONTENT;
1047
+ var init_default_landing_content = __esm({
1048
+ "src/config/default-landing-content.ts"() {
1049
+ DEFAULT_LANDING_CONTENT = {
1050
+ hero: {
1051
+ badge: "99.98% uptime",
1052
+ subtitle: "Production-ready APIs, one endpoint away",
1053
+ title: "Developer APIs that ship",
1054
+ titleAccent: "today.",
1055
+ description: "Documentation, interactive API reference, auth, and billing \u2014 sub-40ms responses, one API key, generous free tier.",
1056
+ highlights: ["No credit card", "10k requests free", "SDKs for 6 languages"],
1057
+ codeExample: {
1058
+ filename: "example.sh",
1059
+ language: "bash",
1060
+ code: `$ curl https://api.example.com/v1/items \\
1061
+ -H "Authorization: Bearer YOUR_API_KEY" \\
1062
+ -d "limit=10"
1063
+
1064
+ {
1065
+ "items": [
1066
+ { "id": "item_1", "name": "Widget", "status": "active" },
1067
+ { "id": "item_2", "name": "Gadget", "status": "active" }
1068
+ ]
1069
+ } // 28ms`
1070
+ }
1071
+ },
1072
+ primaryAction: { label: "Get your API key", href: "/register" },
1073
+ secondaryAction: { label: "Read the docs", href: "/introduction" },
1074
+ ticker: {
1075
+ items: [
1076
+ { label: "GET", value: "/v1/items", change: "28ms" },
1077
+ { label: "POST", value: "/v1/items", change: "34ms" },
1078
+ { label: "GET", value: "/v1/users", change: "19ms" },
1079
+ { label: "PATCH", value: "/v1/users/{id}", change: "41ms" },
1080
+ { label: "GET", value: "/v1/health", change: "16ms" },
1081
+ { label: "DELETE", value: "/v1/items/{id}", change: "22ms" },
1082
+ { label: "GET", value: "/v1/search", change: "47ms" },
1083
+ { label: "POST", value: "/v1/auth/token", change: "52ms" }
1084
+ ]
1085
+ },
1086
+ trust: {
1087
+ title: "Trusted by teams shipping production APIs",
1088
+ logos: ["Acme Corp", "BuildFast", "DataFlow", "ShipKit", "DevStack", "LaunchPad"]
1089
+ },
1090
+ featuresSection: {
1091
+ label: "// why us",
1092
+ title: "Everything you need to build on your API",
1093
+ description: "Skip the infra. We handle docs, auth, keys, and billing so you can focus on your product."
1094
+ },
1095
+ features: [
1096
+ {
1097
+ icon: "gauge",
1098
+ title: "Sub-40ms responses",
1099
+ description: "Edge-cached and globally distributed, so your app feels instant anywhere."
1100
+ },
1101
+ {
1102
+ icon: "radio",
1103
+ title: "Real-time streams",
1104
+ description: "WebSocket feeds with automatic reconnection for live data and events."
1105
+ },
1106
+ {
1107
+ icon: "blocks",
1108
+ title: "Unified schema",
1109
+ description: "One consistent API design \u2014 no per-endpoint glue code or custom adapters."
1110
+ },
1111
+ {
1112
+ icon: "shield-check",
1113
+ title: "99.98% uptime",
1114
+ description: "Redundant infra with a public status page and an SLA on paid plans."
1115
+ },
1116
+ {
1117
+ icon: "code",
1118
+ title: "SDKs for 6 languages",
1119
+ description: "Typed clients for JS, Python, Go, Rust, Ruby and PHP. Copy, paste, ship."
1120
+ },
1121
+ {
1122
+ icon: "webhook",
1123
+ title: "Webhooks & alerts",
1124
+ description: "Push events and threshold alerts straight to your endpoints."
1125
+ }
1126
+ ],
1127
+ apiShowcase: {
1128
+ title: "Production APIs. One key.",
1129
+ browseAllLabel: "Browse all APIs",
1130
+ browseAllHref: "/api",
1131
+ autoFromOpenApi: true,
1132
+ items: [
1133
+ {
1134
+ name: "List resources",
1135
+ path: "/v1/items",
1136
+ icon: "boxes",
1137
+ latency: "28ms"
1138
+ },
1139
+ {
1140
+ name: "Create resource",
1141
+ path: "/v1/items",
1142
+ icon: "badge-dollar-sign",
1143
+ latency: "34ms"
1144
+ },
1145
+ {
1146
+ name: "Get resource",
1147
+ path: "/v1/items/{id}",
1148
+ icon: "layers",
1149
+ latency: "19ms"
1150
+ },
1151
+ {
1152
+ name: "Search",
1153
+ path: "/v1/search",
1154
+ icon: "arrow-left-right",
1155
+ latency: "41ms"
1156
+ },
1157
+ {
1158
+ name: "User profile",
1159
+ path: "/v1/users/me",
1160
+ icon: "wallet",
1161
+ latency: "52ms"
1162
+ },
1163
+ {
1164
+ name: "Health check",
1165
+ path: "/v1/health",
1166
+ icon: "activity",
1167
+ latency: "16ms"
1168
+ },
1169
+ {
1170
+ name: "Metadata",
1171
+ path: "/v1/meta",
1172
+ icon: "coins",
1173
+ latency: "22ms"
1174
+ },
1175
+ {
1176
+ name: "Rate limits",
1177
+ path: "/v1/limits",
1178
+ icon: "gauge",
1179
+ latency: "16ms"
1180
+ }
1181
+ ]
1182
+ },
1183
+ pricingCta: {
1184
+ title: "Start free. Scale when you do.",
1185
+ description: "10,000 requests a month, free forever. Upgrade only when your app takes off.",
1186
+ primaryAction: { label: "Create free account", href: "/register" },
1187
+ secondaryAction: { label: "See pricing", href: "/pricing" }
1188
+ },
1189
+ showPoweredBy: true
1190
+ };
1191
+ }
1192
+ });
1193
+
1035
1194
  // src/config/resolve-modules.ts
1036
- var hasExplicitModules, joinPanelPath, DEFAULT_LANDING_FEATURES, resolveLandingContent, DEFAULT_DASHBOARD_QUICK_LINKS, resolveDashboardContent, resolveProfileContent, resolvePlansContent, resolveModulesConfig;
1195
+ var hasExplicitModules, joinPanelPath, mergeLandingSection, buildDefaultLandingContent, resolveLandingContent, DEFAULT_DASHBOARD_QUICK_LINKS, resolveDashboardContent, resolveProfileContent, resolvePlansContent, resolveModulesConfig;
1037
1196
  var init_resolve_modules = __esm({
1038
1197
  "src/config/resolve-modules.ts"() {
1198
+ init_default_landing_content();
1039
1199
  init_ModulesSchema();
1040
1200
  hasExplicitModules = (config2) => config2.modules !== void 0;
1041
1201
  joinPanelPath = (basePath, routePath) => {
@@ -1049,55 +1209,98 @@ var init_resolve_modules = __esm({
1049
1209
  }
1050
1210
  return `/${`${base}/${route}`.replace(/^\/+/, "")}`;
1051
1211
  };
1052
- DEFAULT_LANDING_FEATURES = [
1053
- {
1054
- title: "Documentation",
1055
- description: "Write guides and references in Markdown or MDX with full navigation and search."
1056
- },
1057
- {
1058
- title: "API Reference",
1059
- description: "Publish interactive OpenAPI docs with a built-in playground and code samples."
1060
- },
1061
- {
1062
- title: "Developer Portal",
1063
- description: "Extend with landing pages, authentication, API keys, and subscription modules."
1212
+ mergeLandingSection = (defaults, override) => {
1213
+ if (override?.enabled === false) {
1214
+ return void 0;
1064
1215
  }
1065
- ];
1066
- resolveLandingContent = (config2, content) => {
1216
+ if (!defaults && !override) {
1217
+ return void 0;
1218
+ }
1219
+ return { ...defaults, ...override };
1220
+ };
1221
+ buildDefaultLandingContent = (config2) => {
1067
1222
  const siteTitle = config2.metadata?.applicationName ?? config2.site?.title ?? "APIToGo";
1068
- const resolved = {
1223
+ return {
1224
+ ...DEFAULT_LANDING_CONTENT,
1069
1225
  hero: {
1070
- title: content?.hero?.title ?? siteTitle,
1071
- subtitle: content?.hero?.subtitle ?? "Developer portal",
1072
- description: content?.hero?.description ?? config2.metadata?.description ?? "Ship beautiful API documentation and developer experiences with APIToGo.",
1073
- badge: content?.hero?.badge,
1074
- highlights: content?.hero?.highlights,
1075
- codeExample: content?.hero?.codeExample
1226
+ ...DEFAULT_LANDING_CONTENT.hero,
1227
+ title: `${siteTitle} APIs that ship`
1076
1228
  },
1077
- features: content?.features ?? DEFAULT_LANDING_FEATURES,
1078
- primaryAction: content?.primaryAction ?? {
1079
- label: "Get started",
1080
- href: "/introduction"
1229
+ primaryAction: {
1230
+ ...DEFAULT_LANDING_CONTENT.primaryAction,
1231
+ href: "/introduction",
1232
+ label: "Get started"
1081
1233
  },
1082
- secondaryAction: content?.secondaryAction ?? {
1083
- label: "API Reference",
1084
- href: "/api"
1234
+ secondaryAction: {
1235
+ ...DEFAULT_LANDING_CONTENT.secondaryAction,
1236
+ href: "/api",
1237
+ label: "API Reference"
1085
1238
  },
1086
- showPoweredBy: content?.showPoweredBy
1239
+ pricingCta: DEFAULT_LANDING_CONTENT.pricingCta ? {
1240
+ ...DEFAULT_LANDING_CONTENT.pricingCta,
1241
+ primaryAction: {
1242
+ label: "Get started",
1243
+ href: "/introduction"
1244
+ },
1245
+ secondaryAction: {
1246
+ label: "See pricing",
1247
+ href: "/pricing"
1248
+ }
1249
+ } : void 0
1087
1250
  };
1088
- if (content?.ticker && content.ticker.enabled !== false) {
1089
- resolved.ticker = content.ticker;
1090
- }
1091
- if (content?.trust && content.trust.enabled !== false) {
1092
- resolved.trust = content.trust;
1093
- }
1094
- if (content?.apiShowcase && content.apiShowcase.enabled !== false) {
1095
- resolved.apiShowcase = content.apiShowcase;
1251
+ };
1252
+ resolveLandingContent = (config2, content, options) => {
1253
+ const siteTitle = config2.metadata?.applicationName ?? config2.site?.title ?? "APIToGo";
1254
+ if (options?.useDefaults === true) {
1255
+ const defaults = buildDefaultLandingContent(config2);
1256
+ return {
1257
+ hero: {
1258
+ ...defaults.hero,
1259
+ ...content?.hero,
1260
+ title: content?.hero?.title ?? defaults.hero?.title,
1261
+ description: content?.hero?.description ?? config2.metadata?.description ?? defaults.hero?.description,
1262
+ codeExample: content?.hero?.codeExample ?? defaults.hero?.codeExample,
1263
+ titleAccent: content?.hero?.titleAccent ?? (content?.hero?.title ? void 0 : defaults.hero?.titleAccent)
1264
+ },
1265
+ featuresSection: mergeLandingSection(
1266
+ defaults.featuresSection,
1267
+ content?.featuresSection
1268
+ ),
1269
+ features: content?.features ?? defaults.features,
1270
+ primaryAction: content?.primaryAction ?? defaults.primaryAction,
1271
+ secondaryAction: content?.secondaryAction ?? defaults.secondaryAction,
1272
+ showPoweredBy: content?.showPoweredBy ?? defaults.showPoweredBy,
1273
+ ticker: mergeLandingSection(defaults.ticker, content?.ticker),
1274
+ trust: mergeLandingSection(defaults.trust, content?.trust),
1275
+ apiShowcase: mergeLandingSection(
1276
+ defaults.apiShowcase,
1277
+ content?.apiShowcase
1278
+ ),
1279
+ pricingCta: mergeLandingSection(defaults.pricingCta, content?.pricingCta)
1280
+ };
1096
1281
  }
1097
- if (content?.pricingCta && content.pricingCta.enabled !== false) {
1098
- resolved.pricingCta = content.pricingCta;
1282
+ const hasContent = content !== void 0 && Object.keys(content).length > 0;
1283
+ if (!hasContent) {
1284
+ return {
1285
+ hero: { title: siteTitle },
1286
+ showPoweredBy: true
1287
+ };
1099
1288
  }
1100
- return resolved;
1289
+ return {
1290
+ hero: {
1291
+ ...content.hero,
1292
+ title: content.hero?.title ?? siteTitle
1293
+ },
1294
+ featuresSection: content.featuresSection ? mergeLandingSection(void 0, content.featuresSection) : void 0,
1295
+ features: content.features,
1296
+ primaryAction: content.primaryAction,
1297
+ secondaryAction: content.secondaryAction,
1298
+ showPoweredBy: content.showPoweredBy ?? true,
1299
+ ticker: content.ticker ? mergeLandingSection(void 0, content.ticker) : void 0,
1300
+ trust: content.trust ? mergeLandingSection(void 0, content.trust) : void 0,
1301
+ apiShowcase: content.apiShowcase ? mergeLandingSection(void 0, content.apiShowcase) : void 0,
1302
+ pricingCta: content.pricingCta ? mergeLandingSection(void 0, content.pricingCta) : void 0
1303
+ };
1101
1304
  };
1102
1305
  DEFAULT_DASHBOARD_QUICK_LINKS = [
1103
1306
  { label: "Documentation", href: "/introduction" },
@@ -1151,7 +1354,9 @@ var init_resolve_modules = __esm({
1151
1354
  path: landingModule?.path ?? "/",
1152
1355
  component: landingModule?.component,
1153
1356
  layout: landingModule?.layout ?? "landing",
1154
- content: resolveLandingContent(config2, landingModule?.content)
1357
+ content: resolveLandingContent(config2, landingModule?.content, {
1358
+ useDefaults: landingModule?.useDefaults === true
1359
+ })
1155
1360
  },
1156
1361
  userPanel: {
1157
1362
  enabled: userPanelEnabled,
@@ -1379,9 +1584,10 @@ var init_shadcn_registry = __esm({
1379
1584
  });
1380
1585
 
1381
1586
  // src/vite/plugin-theme.ts
1587
+ import { createRequire } from "node:module";
1382
1588
  import path4 from "node:path";
1383
1589
  import { normalizeTheme } from "shiki";
1384
- var THEME_VARIABLES, uncamelize, processColorValue, generateCss, generateRegistryCss, processCustomCss, MAIN_REPLACE, DEFAULT_THEME_REPLACE, GOOGLE_FONTS, getGoogleFontUrl, processFont, processFontConfig, processFonts, virtualModuleId, resolvedVirtualModuleId, viteThemePlugin;
1590
+ var THEME_VARIABLES, uncamelize, processColorValue, generateCss, generateRegistryCss, processCustomCss, MAIN_REPLACE, DEFAULT_THEME_REPLACE, GOOGLE_FONTS, getGoogleFontUrl, processFont, processFontConfig, processFonts, MODULE_SOURCE_PACKAGES, resolveModuleSourceDirs, virtualModuleId, resolvedVirtualModuleId, viteThemePlugin;
1385
1591
  var init_plugin_theme = __esm({
1386
1592
  "src/vite/plugin-theme.ts"() {
1387
1593
  init_loader();
@@ -1549,6 +1755,33 @@ var init_plugin_theme = __esm({
1549
1755
  }
1550
1756
  return { imports, families };
1551
1757
  };
1758
+ MODULE_SOURCE_PACKAGES = [
1759
+ "@lukoweb/apitogo-module-landing",
1760
+ "@lukoweb/apitogo-module-user-panel"
1761
+ ];
1762
+ resolveModuleSourceDirs = (config2) => {
1763
+ if (config2.__meta.mode === "internal") {
1764
+ return MODULE_SOURCE_PACKAGES.map(
1765
+ (pkg) => path4.join(
1766
+ config2.__meta.moduleDir,
1767
+ "..",
1768
+ pkg.replace("@lukoweb/apitogo-", ""),
1769
+ "src"
1770
+ )
1771
+ );
1772
+ }
1773
+ const require2 = createRequire(
1774
+ path4.join(config2.__meta.rootDir, "package.json")
1775
+ );
1776
+ const dirs = [];
1777
+ for (const pkg of MODULE_SOURCE_PACKAGES) {
1778
+ try {
1779
+ dirs.push(path4.dirname(require2.resolve(pkg)));
1780
+ } catch {
1781
+ }
1782
+ }
1783
+ return dirs;
1784
+ };
1552
1785
  virtualModuleId = "virtual:zudoku-theme.css";
1553
1786
  resolvedVirtualModuleId = `\0${virtualModuleId}`;
1554
1787
  viteThemePlugin = () => {
@@ -1666,7 +1899,8 @@ ${rootVars.join("\n")}
1666
1899
  [
1667
1900
  config2.__meta.rootDir,
1668
1901
  ...config2.__meta.dependencies,
1669
- ...config2.__pluginDirs ?? []
1902
+ ...config2.__pluginDirs ?? [],
1903
+ ...resolveModuleSourceDirs(config2)
1670
1904
  ].map((file) => path4.relative(path4.dirname(id), file))
1671
1905
  );
1672
1906
  const code = [...files].map((file) => `@source "${file}";`);
@@ -4980,7 +5214,7 @@ import {
4980
5214
  // package.json
4981
5215
  var package_default = {
4982
5216
  name: "@lukoweb/apitogo",
4983
- version: "0.1.55",
5217
+ version: "0.1.57",
4984
5218
  type: "module",
4985
5219
  sideEffects: [
4986
5220
  "**/*.css",
@@ -0,0 +1,2 @@
1
+ import type { ResolvedLandingContent } from "./validators/ModulesSchema.js";
2
+ export declare const DEFAULT_LANDING_CONTENT: ResolvedLandingContent;
@@ -3,6 +3,7 @@ import { LandingContentSchema } from "./validators/ModulesSchema.js";
3
3
  export declare const LandingManifestContentSchema: z.ZodOptional<z.ZodObject<{
4
4
  hero: z.ZodOptional<z.ZodObject<{
5
5
  title: z.ZodOptional<z.ZodString>;
6
+ titleAccent: z.ZodOptional<z.ZodString>;
6
7
  subtitle: z.ZodOptional<z.ZodString>;
7
8
  description: z.ZodOptional<z.ZodString>;
8
9
  badge: z.ZodOptional<z.ZodString>;
@@ -13,6 +14,11 @@ export declare const LandingManifestContentSchema: z.ZodOptional<z.ZodObject<{
13
14
  code: z.ZodString;
14
15
  }, z.core.$strip>>;
15
16
  }, z.core.$strip>>;
17
+ featuresSection: z.ZodOptional<z.ZodObject<{
18
+ label: z.ZodOptional<z.ZodString>;
19
+ title: z.ZodOptional<z.ZodString>;
20
+ description: z.ZodOptional<z.ZodString>;
21
+ }, z.core.$strip>>;
16
22
  features: z.ZodOptional<z.ZodArray<z.ZodObject<{
17
23
  title: z.ZodString;
18
24
  description: z.ZodString;
@@ -91,6 +91,7 @@ export declare const DevPortalLocalManifestSchema: z.ZodObject<{
91
91
  content: z.ZodOptional<z.ZodObject<{
92
92
  hero: z.ZodOptional<z.ZodObject<{
93
93
  title: z.ZodOptional<z.ZodString>;
94
+ titleAccent: z.ZodOptional<z.ZodString>;
94
95
  subtitle: z.ZodOptional<z.ZodString>;
95
96
  description: z.ZodOptional<z.ZodString>;
96
97
  badge: z.ZodOptional<z.ZodString>;
@@ -101,6 +102,11 @@ export declare const DevPortalLocalManifestSchema: z.ZodObject<{
101
102
  code: z.ZodString;
102
103
  }, z.core.$strip>>;
103
104
  }, z.core.$strip>>;
105
+ featuresSection: z.ZodOptional<z.ZodObject<{
106
+ label: z.ZodOptional<z.ZodString>;
107
+ title: z.ZodOptional<z.ZodString>;
108
+ description: z.ZodOptional<z.ZodString>;
109
+ }, z.core.$strip>>;
104
110
  features: z.ZodOptional<z.ZodArray<z.ZodObject<{
105
111
  title: z.ZodString;
106
112
  description: z.ZodString;
@@ -1,7 +1,9 @@
1
1
  import { type ResolvedModulesConfig, type LandingContentConfig, type ResolvedLandingContent, type DashboardContentConfig, type ProfileContentConfig, type PlansContentConfig, type ResolvedDashboardContent, type ResolvedProfileContent, type ResolvedPlansContent } from "./validators/ModulesSchema.js";
2
2
  import type { ZudokuConfig } from "./validators/ZudokuConfig.js";
3
3
  export declare const joinPanelPath: (basePath: string, routePath: string) => string;
4
- export declare const resolveLandingContent: (config: ZudokuConfig, content?: LandingContentConfig) => ResolvedLandingContent;
4
+ export declare const resolveLandingContent: (config: ZudokuConfig, content?: LandingContentConfig, options?: {
5
+ useDefaults?: boolean;
6
+ }) => ResolvedLandingContent;
5
7
  export declare const resolveDashboardContent: (content?: DashboardContentConfig) => ResolvedDashboardContent;
6
8
  export declare const resolveProfileContent: (content?: ProfileContentConfig) => ResolvedProfileContent;
7
9
  export declare const resolvePlansContent: (content?: PlansContentConfig) => ResolvedPlansContent;
@@ -36,6 +36,7 @@ export declare const LandingCodeExampleSchema: z.ZodOptional<z.ZodObject<{
36
36
  }, z.core.$strip>>;
37
37
  export declare const LandingHeroSchema: z.ZodOptional<z.ZodObject<{
38
38
  title: z.ZodOptional<z.ZodString>;
39
+ titleAccent: z.ZodOptional<z.ZodString>;
39
40
  subtitle: z.ZodOptional<z.ZodString>;
40
41
  description: z.ZodOptional<z.ZodString>;
41
42
  badge: z.ZodOptional<z.ZodString>;
@@ -46,6 +47,11 @@ export declare const LandingHeroSchema: z.ZodOptional<z.ZodObject<{
46
47
  code: z.ZodString;
47
48
  }, z.core.$strip>>;
48
49
  }, z.core.$strip>>;
50
+ export declare const LandingFeaturesSectionSchema: z.ZodOptional<z.ZodObject<{
51
+ label: z.ZodOptional<z.ZodString>;
52
+ title: z.ZodOptional<z.ZodString>;
53
+ description: z.ZodOptional<z.ZodString>;
54
+ }, z.core.$strip>>;
49
55
  export declare const LandingTickerItemSchema: z.ZodObject<{
50
56
  label: z.ZodString;
51
57
  value: z.ZodString;
@@ -102,6 +108,7 @@ export declare const LandingPricingCtaSchema: z.ZodOptional<z.ZodObject<{
102
108
  export declare const LandingContentSchema: z.ZodOptional<z.ZodObject<{
103
109
  hero: z.ZodOptional<z.ZodObject<{
104
110
  title: z.ZodOptional<z.ZodString>;
111
+ titleAccent: z.ZodOptional<z.ZodString>;
105
112
  subtitle: z.ZodOptional<z.ZodString>;
106
113
  description: z.ZodOptional<z.ZodString>;
107
114
  badge: z.ZodOptional<z.ZodString>;
@@ -112,6 +119,11 @@ export declare const LandingContentSchema: z.ZodOptional<z.ZodObject<{
112
119
  code: z.ZodString;
113
120
  }, z.core.$strip>>;
114
121
  }, z.core.$strip>>;
122
+ featuresSection: z.ZodOptional<z.ZodObject<{
123
+ label: z.ZodOptional<z.ZodString>;
124
+ title: z.ZodOptional<z.ZodString>;
125
+ description: z.ZodOptional<z.ZodString>;
126
+ }, z.core.$strip>>;
115
127
  features: z.ZodOptional<z.ZodArray<z.ZodObject<{
116
128
  title: z.ZodString;
117
129
  description: z.ZodString;
@@ -212,6 +224,7 @@ export declare const LandingModuleSchema: z.ZodObject<{
212
224
  content: z.ZodOptional<z.ZodObject<{
213
225
  hero: z.ZodOptional<z.ZodObject<{
214
226
  title: z.ZodOptional<z.ZodString>;
227
+ titleAccent: z.ZodOptional<z.ZodString>;
215
228
  subtitle: z.ZodOptional<z.ZodString>;
216
229
  description: z.ZodOptional<z.ZodString>;
217
230
  badge: z.ZodOptional<z.ZodString>;
@@ -222,6 +235,11 @@ export declare const LandingModuleSchema: z.ZodObject<{
222
235
  code: z.ZodString;
223
236
  }, z.core.$strip>>;
224
237
  }, z.core.$strip>>;
238
+ featuresSection: z.ZodOptional<z.ZodObject<{
239
+ label: z.ZodOptional<z.ZodString>;
240
+ title: z.ZodOptional<z.ZodString>;
241
+ description: z.ZodOptional<z.ZodString>;
242
+ }, z.core.$strip>>;
225
243
  features: z.ZodOptional<z.ZodArray<z.ZodObject<{
226
244
  title: z.ZodString;
227
245
  description: z.ZodString;
@@ -278,6 +296,7 @@ export declare const LandingModuleSchema: z.ZodObject<{
278
296
  }, z.core.$strip>>;
279
297
  showPoweredBy: z.ZodOptional<z.ZodBoolean>;
280
298
  }, z.core.$strip>>;
299
+ useDefaults: z.ZodOptional<z.ZodBoolean>;
281
300
  }, z.core.$strip>;
282
301
  export declare const UserManagementModuleSchema: z.ZodObject<{
283
302
  enabled: z.ZodOptional<z.ZodBoolean>;
@@ -442,6 +461,7 @@ export declare const ModulesSchema: z.ZodOptional<z.ZodObject<{
442
461
  content: z.ZodOptional<z.ZodObject<{
443
462
  hero: z.ZodOptional<z.ZodObject<{
444
463
  title: z.ZodOptional<z.ZodString>;
464
+ titleAccent: z.ZodOptional<z.ZodString>;
445
465
  subtitle: z.ZodOptional<z.ZodString>;
446
466
  description: z.ZodOptional<z.ZodString>;
447
467
  badge: z.ZodOptional<z.ZodString>;
@@ -452,6 +472,11 @@ export declare const ModulesSchema: z.ZodOptional<z.ZodObject<{
452
472
  code: z.ZodString;
453
473
  }, z.core.$strip>>;
454
474
  }, z.core.$strip>>;
475
+ featuresSection: z.ZodOptional<z.ZodObject<{
476
+ label: z.ZodOptional<z.ZodString>;
477
+ title: z.ZodOptional<z.ZodString>;
478
+ description: z.ZodOptional<z.ZodString>;
479
+ }, z.core.$strip>>;
455
480
  features: z.ZodOptional<z.ZodArray<z.ZodObject<{
456
481
  title: z.ZodString;
457
482
  description: z.ZodString;
@@ -508,6 +533,7 @@ export declare const ModulesSchema: z.ZodOptional<z.ZodObject<{
508
533
  }, z.core.$strip>>;
509
534
  showPoweredBy: z.ZodOptional<z.ZodBoolean>;
510
535
  }, z.core.$strip>>;
536
+ useDefaults: z.ZodOptional<z.ZodBoolean>;
511
537
  }, z.core.$strip>>;
512
538
  userPanel: z.ZodOptional<z.ZodObject<{
513
539
  enabled: z.ZodOptional<z.ZodBoolean>;
@@ -604,12 +630,18 @@ export type LandingPricingCtaConfig = z.infer<typeof LandingPricingCtaSchema>;
604
630
  export type ResolvedLandingContent = {
605
631
  hero?: {
606
632
  title?: string;
633
+ titleAccent?: string;
607
634
  subtitle?: string;
608
635
  description?: string;
609
636
  badge?: string;
610
637
  highlights?: string[];
611
638
  codeExample?: NonNullable<LandingCodeExampleConfig>;
612
639
  };
640
+ featuresSection?: {
641
+ label?: string;
642
+ title?: string;
643
+ description?: string;
644
+ };
613
645
  features?: LandingFeatureConfig[];
614
646
  primaryAction?: LandingLinkConfig;
615
647
  secondaryAction?: LandingLinkConfig;
@@ -6890,6 +6890,7 @@ export declare const ZudokuConfig: z.ZodObject<{
6890
6890
  content: z.ZodOptional<z.ZodObject<{
6891
6891
  hero: z.ZodOptional<z.ZodObject<{
6892
6892
  title: z.ZodOptional<z.ZodString>;
6893
+ titleAccent: z.ZodOptional<z.ZodString>;
6893
6894
  subtitle: z.ZodOptional<z.ZodString>;
6894
6895
  description: z.ZodOptional<z.ZodString>;
6895
6896
  badge: z.ZodOptional<z.ZodString>;
@@ -6900,6 +6901,11 @@ export declare const ZudokuConfig: z.ZodObject<{
6900
6901
  code: z.ZodString;
6901
6902
  }, z.core.$strip>>;
6902
6903
  }, z.core.$strip>>;
6904
+ featuresSection: z.ZodOptional<z.ZodObject<{
6905
+ label: z.ZodOptional<z.ZodString>;
6906
+ title: z.ZodOptional<z.ZodString>;
6907
+ description: z.ZodOptional<z.ZodString>;
6908
+ }, z.core.$strip>>;
6903
6909
  features: z.ZodOptional<z.ZodArray<z.ZodObject<{
6904
6910
  title: z.ZodString;
6905
6911
  description: z.ZodString;
@@ -6956,6 +6962,7 @@ export declare const ZudokuConfig: z.ZodObject<{
6956
6962
  }, z.core.$strip>>;
6957
6963
  showPoweredBy: z.ZodOptional<z.ZodBoolean>;
6958
6964
  }, z.core.$strip>>;
6965
+ useDefaults: z.ZodOptional<z.ZodBoolean>;
6959
6966
  }, z.core.$strip>>;
6960
6967
  userPanel: z.ZodOptional<z.ZodObject<{
6961
6968
  enabled: z.ZodOptional<z.ZodBoolean>;
@@ -4,6 +4,7 @@ export declare function resolveDevPortalApiBaseUrl(config: Pick<DevPortalAuthent
4
4
  export declare function isPlaceholderDevPortalApiUrl(apiBaseUrl: string | undefined): boolean;
5
5
  export declare function toAbsoluteReturnUrl(pathOrUrl: string): string;
6
6
  export declare function buildDevPortalOidcChallengeUrl(apiBaseUrl: string, providerId: string, returnUrl: string): string;
7
+ export declare function buildDevPortalLoginUrl(apiBaseUrl: string, returnUrl: string): string;
7
8
  export declare function buildDevPortalLogoutUrl(apiBaseUrl: string, returnUrl: string): string;
8
9
  export declare function normalizeDevPortalAuthConfig(raw: unknown): import("./dev-portal-constants.js").DevPortalAuthConfigResponse;
9
10
  export declare function isNativeAuthEnabled(config: import("./dev-portal-constants.js").DevPortalAuthConfigResponse | null | undefined): boolean;