@underpeaks/generator-nextjs 1.0.29 → 1.0.32

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 (118) hide show
  1. package/dist/components/registry-display.d.ts.map +1 -1
  2. package/dist/components/registry-display.js +3 -7
  3. package/dist/components/registry-display.js.map +1 -1
  4. package/dist/generator.d.ts +0 -7
  5. package/dist/generator.d.ts.map +1 -1
  6. package/dist/generator.js +90 -40
  7. package/dist/generator.js.map +1 -1
  8. package/dist/templates/api-builder.d.ts +1 -1
  9. package/dist/templates/api-builder.d.ts.map +1 -1
  10. package/dist/templates/api-builder.js +7 -4
  11. package/dist/templates/api-builder.js.map +1 -1
  12. package/dist/templates/app-nav.d.ts +3 -20
  13. package/dist/templates/app-nav.d.ts.map +1 -1
  14. package/dist/templates/app-nav.js +55 -22
  15. package/dist/templates/app-nav.js.map +1 -1
  16. package/dist/templates/layout.d.ts.map +1 -1
  17. package/dist/templates/layout.js +16 -9
  18. package/dist/templates/layout.js.map +1 -1
  19. package/dist/templates/page-auth.d.ts +1 -1
  20. package/dist/templates/page-auth.d.ts.map +1 -1
  21. package/dist/templates/page-auth.js +20 -7
  22. package/dist/templates/page-auth.js.map +1 -1
  23. package/dist/templates/page-blog-post.d.ts +2 -2
  24. package/dist/templates/page-blog-post.d.ts.map +1 -1
  25. package/dist/templates/page-blog-post.js +38 -1
  26. package/dist/templates/page-blog-post.js.map +1 -1
  27. package/dist/templates/page-calendar.d.ts +2 -2
  28. package/dist/templates/page-calendar.d.ts.map +1 -1
  29. package/dist/templates/page-calendar.js +31 -3
  30. package/dist/templates/page-calendar.js.map +1 -1
  31. package/dist/templates/page-cart.d.ts +2 -2
  32. package/dist/templates/page-cart.d.ts.map +1 -1
  33. package/dist/templates/page-cart.js +27 -2
  34. package/dist/templates/page-cart.js.map +1 -1
  35. package/dist/templates/page-checkout.d.ts +2 -2
  36. package/dist/templates/page-checkout.d.ts.map +1 -1
  37. package/dist/templates/page-checkout.js +19 -2
  38. package/dist/templates/page-checkout.js.map +1 -1
  39. package/dist/templates/page-contact.d.ts +0 -2
  40. package/dist/templates/page-contact.d.ts.map +1 -1
  41. package/dist/templates/page-contact.js +83 -84
  42. package/dist/templates/page-contact.js.map +1 -1
  43. package/dist/templates/page-dashboard.d.ts +2 -2
  44. package/dist/templates/page-dashboard.d.ts.map +1 -1
  45. package/dist/templates/page-dashboard.js +30 -3
  46. package/dist/templates/page-dashboard.js.map +1 -1
  47. package/dist/templates/page-detail.d.ts +2 -2
  48. package/dist/templates/page-detail.d.ts.map +1 -1
  49. package/dist/templates/page-detail.js +156 -8
  50. package/dist/templates/page-detail.js.map +1 -1
  51. package/dist/templates/page-feed.d.ts +2 -2
  52. package/dist/templates/page-feed.d.ts.map +1 -1
  53. package/dist/templates/page-feed.js +44 -3
  54. package/dist/templates/page-feed.js.map +1 -1
  55. package/dist/templates/page-form.d.ts.map +1 -1
  56. package/dist/templates/page-form.js +341 -43
  57. package/dist/templates/page-form.js.map +1 -1
  58. package/dist/templates/page-gallery.d.ts +2 -2
  59. package/dist/templates/page-gallery.d.ts.map +1 -1
  60. package/dist/templates/page-gallery.js +36 -2
  61. package/dist/templates/page-gallery.js.map +1 -1
  62. package/dist/templates/page-invoice.d.ts +2 -2
  63. package/dist/templates/page-invoice.d.ts.map +1 -1
  64. package/dist/templates/page-invoice.js +40 -1
  65. package/dist/templates/page-invoice.js.map +1 -1
  66. package/dist/templates/page-kanban.d.ts +2 -2
  67. package/dist/templates/page-kanban.d.ts.map +1 -1
  68. package/dist/templates/page-kanban.js +29 -4
  69. package/dist/templates/page-kanban.js.map +1 -1
  70. package/dist/templates/page-landing-hero-cta.d.ts +3 -0
  71. package/dist/templates/page-landing-hero-cta.d.ts.map +1 -0
  72. package/dist/templates/page-landing-hero-cta.js +54 -0
  73. package/dist/templates/page-landing-hero-cta.js.map +1 -0
  74. package/dist/templates/page-landing-hero-features.d.ts +3 -0
  75. package/dist/templates/page-landing-hero-features.d.ts.map +1 -0
  76. package/dist/templates/page-landing-hero-features.js +45 -0
  77. package/dist/templates/page-landing-hero-features.js.map +1 -0
  78. package/dist/templates/page-landing-hero-pricing.d.ts +3 -0
  79. package/dist/templates/page-landing-hero-pricing.d.ts.map +1 -0
  80. package/dist/templates/page-landing-hero-pricing.js +46 -0
  81. package/dist/templates/page-landing-hero-pricing.js.map +1 -0
  82. package/dist/templates/page-landing-minimal.d.ts +3 -0
  83. package/dist/templates/page-landing-minimal.d.ts.map +1 -0
  84. package/dist/templates/page-landing-minimal.js +26 -0
  85. package/dist/templates/page-landing-minimal.js.map +1 -0
  86. package/dist/templates/page-list.d.ts +2 -2
  87. package/dist/templates/page-list.d.ts.map +1 -1
  88. package/dist/templates/page-list.js +96 -11
  89. package/dist/templates/page-list.js.map +1 -1
  90. package/dist/templates/page-otp-entry.d.ts +2 -2
  91. package/dist/templates/page-otp-entry.d.ts.map +1 -1
  92. package/dist/templates/page-otp-entry.js +23 -2
  93. package/dist/templates/page-otp-entry.js.map +1 -1
  94. package/dist/templates/page-otp-request.d.ts +2 -2
  95. package/dist/templates/page-otp-request.d.ts.map +1 -1
  96. package/dist/templates/page-otp-request.js +18 -2
  97. package/dist/templates/page-otp-request.js.map +1 -1
  98. package/dist/templates/page-profile.d.ts +2 -2
  99. package/dist/templates/page-profile.d.ts.map +1 -1
  100. package/dist/templates/page-profile.js +37 -1
  101. package/dist/templates/page-profile.js.map +1 -1
  102. package/dist/templates/page-reset-password.d.ts +3 -0
  103. package/dist/templates/page-reset-password.d.ts.map +1 -0
  104. package/dist/templates/page-reset-password.js +122 -0
  105. package/dist/templates/page-reset-password.js.map +1 -0
  106. package/dist/templates/page-search.d.ts +2 -2
  107. package/dist/templates/page-search.d.ts.map +1 -1
  108. package/dist/templates/page-search.js +22 -2
  109. package/dist/templates/page-search.js.map +1 -1
  110. package/dist/templates/page-settings.d.ts +2 -2
  111. package/dist/templates/page-settings.d.ts.map +1 -1
  112. package/dist/templates/page-settings.js +48 -4
  113. package/dist/templates/page-settings.js.map +1 -1
  114. package/dist/templates/page-wallet.d.ts +2 -2
  115. package/dist/templates/page-wallet.d.ts.map +1 -1
  116. package/dist/templates/page-wallet.js +44 -2
  117. package/dist/templates/page-wallet.js.map +1 -1
  118. package/package.json +1 -1
@@ -3,7 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.generateGalleryPage = generateGalleryPage;
5
5
  const generator_core_1 = require("@underpeaks/generator-core");
6
- function generateGalleryPage(page, model) {
6
+ function toRoutePath(slug) {
7
+ return slug.replace(/^\//, '');
8
+ }
9
+ function generateGalleryPage(page, model,
10
+ // NAVIGATOR: same card-tap-override pattern as page-list.ts — default
11
+ // stays tap-to-detail unless an explicit 'tap' + 'card-tap' route says
12
+ // otherwise.
13
+ routes = [], allPages = []) {
7
14
  const routePath = page.slug.replace(/^\//, '');
8
15
  const className = model ? (0, generator_core_1.modelToClassName)(model.name) : 'Item';
9
16
  const fileName = model ? (0, generator_core_1.modelToFileName)(model.name) : 'item';
@@ -13,11 +20,29 @@ function generateGalleryPage(page, model) {
13
20
  const imageField = columns.find((c) => c.name.includes('image') || c.name.includes('photo') || c.name.includes('url'))?.name ?? columns[0]?.name ?? pkName;
14
21
  const titleField = columns.find((c) => c.name.includes('title') || c.name.includes('name'))?.name ?? columns[0]?.name ?? pkName;
15
22
  const modelSlug = model ? model.name.replace('nxf_', '').replace(/_/g, '-') : fileName;
23
+ const tapRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'tap' && r.attach_to === 'card-tap');
24
+ const buttonRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'button');
25
+ const tapTarget = tapRoute ? allPages.find((p) => p.page_id === tapRoute.to_page_id) : undefined;
26
+ const buttonTarget = buttonRoute ? allPages.find((p) => p.page_id === buttonRoute.to_page_id) : undefined;
27
+ const tapTargetUsable = !!tapTarget && tapTarget.template_type !== 'detail';
28
+ const buttonTargetUsable = !!buttonTarget && buttonTarget.template_type !== 'detail';
29
+ const cardTapHrefAttr = tapTargetUsable
30
+ ? `href="/${toRoutePath(tapTarget.slug)}"`
31
+ : `href={\`/${routePath}/\${item.${pkName}}\`}`;
32
+ const buttonLabel = (buttonRoute?.label && buttonRoute.label.trim()) || 'Continue';
16
33
  const lines = [];
17
34
  lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
18
35
  lines.push(`// Page: ${page.name} — gallery`);
19
36
  lines.push(`// Presentation layer — generated once, you own this file.`);
20
37
  lines.push(`// Regenerate: nxf generate nextjs --include-views`);
38
+ if (tapRoute && !tapTargetUsable) {
39
+ lines.push(`// NAVIGATOR: a card-tap route exists but its target ('${tapRoute.to_page_id}') requires`);
40
+ lines.push(`// a record id we don't have here — falling back to default tap-to-detail.`);
41
+ }
42
+ if (buttonRoute && !buttonTargetUsable) {
43
+ lines.push(`// NAVIGATOR: a button route exists but its target ('${buttonRoute.to_page_id}') requires`);
44
+ lines.push(`// a record id we don't have here — button not rendered.`);
45
+ }
21
46
  lines.push(``);
22
47
  lines.push(`import type { ${className} } from '../../../generated/types/${fileName}.types'`);
23
48
  lines.push(`import Image from 'next/image'`);
@@ -40,7 +65,7 @@ function generateGalleryPage(page, model) {
40
65
  lines.push(` ) : (`);
41
66
  lines.push(` <div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3">`);
42
67
  lines.push(` {items.map((item) => (`);
43
- lines.push(` <Link key={item.${pkName}} href={\`/${routePath}/\${item.${pkName}}\`}`);
68
+ lines.push(` <Link key={item.${pkName}} ${cardTapHrefAttr}`);
44
69
  lines.push(` className="group relative aspect-square bg-gray-100 rounded-xl overflow-hidden">`);
45
70
  lines.push(` {item.${imageField} ? (`);
46
71
  lines.push(` <Image src={item.${imageField} as string} alt={item.${titleField}?.toString() ?? ''} fill className="object-cover group-hover:scale-105 transition-transform duration-300" />`);
@@ -55,6 +80,15 @@ function generateGalleryPage(page, model) {
55
80
  lines.push(` ))}`);
56
81
  lines.push(` </div>`);
57
82
  lines.push(` )}`);
83
+ if (buttonTargetUsable) {
84
+ lines.push(` {/* NAVIGATOR: button-trigger route wired to '${buttonTarget.name}' */}`);
85
+ lines.push(` <div className="mt-6">`);
86
+ lines.push(` <Link href="/${toRoutePath(buttonTarget.slug)}"`);
87
+ lines.push(` className="block text-center px-6 py-2.5 bg-black text-white rounded-lg text-sm font-medium hover:bg-gray-800 transition">`);
88
+ lines.push(` ${buttonLabel}`);
89
+ lines.push(` </Link>`);
90
+ lines.push(` </div>`);
91
+ }
58
92
  lines.push(` </div>`);
59
93
  lines.push(` )`);
60
94
  lines.push(`}`);
@@ -1 +1 @@
1
- {"version":3,"file":"page-gallery.js","sourceRoot":"","sources":["../../src/templates/page-gallery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-gallery.js","sourceRoot":"","sources":["../../src/templates/page-gallery.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import type { Model, PageDef, GeneratedFile } from '@underpeaks/generator-core';
2
- export declare function generateInvoicePage(page: PageDef, model?: Model): GeneratedFile;
1
+ import type { Model, PageDef, PageRoute, GeneratedFile } from '@underpeaks/generator-core';
2
+ export declare function generateInvoicePage(page: PageDef, model?: Model, routes?: PageRoute[], allPages?: PageDef[]): GeneratedFile;
3
3
  //# sourceMappingURL=page-invoice.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-invoice.d.ts","sourceRoot":"","sources":["../../src/templates/page-invoice.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG/E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,aAAa,CAkE/E"}
1
+ {"version":3,"file":"page-invoice.d.ts","sourceRoot":"","sources":["../../src/templates/page-invoice.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAO1F,wBAAgB,mBAAmB,CACjC,IAAI,EAAM,OAAO,EACjB,KAAK,CAAC,EAAI,KAAK,EAGf,MAAM,GAAI,SAAS,EAAO,EAC1B,QAAQ,GAAE,OAAO,EAAS,GACzB,aAAa,CAuGf"}
@@ -3,7 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.generateInvoicePage = generateInvoicePage;
5
5
  const generator_core_1 = require("@underpeaks/generator-core");
6
- function generateInvoicePage(page, model) {
6
+ function toRoutePath(slug) {
7
+ return slug.replace(/^\//, '');
8
+ }
9
+ function generateInvoicePage(page, model,
10
+ // NAVIGATOR: functionally a detail page — same back/button pattern as
11
+ // page-detail.ts.
12
+ routes = [], allPages = []) {
7
13
  const routePath = page.slug.replace(/^\//, '');
8
14
  const className = model ? (0, generator_core_1.modelToClassName)(model.name) : 'Item';
9
15
  const fileName = model ? (0, generator_core_1.modelToFileName)(model.name) : 'item';
@@ -11,14 +17,32 @@ function generateInvoicePage(page, model) {
11
17
  const pkName = pk?.name ?? 'id';
12
18
  const columns = model ? (0, generator_core_1.getVisibleColumns)(model) : [];
13
19
  const totalField = columns.find((c) => c.name.includes('total') || c.name.includes('amount'))?.name ?? null;
20
+ const backRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'back');
21
+ const buttonRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'button');
22
+ const backTarget = backRoute ? allPages.find((p) => p.page_id === backRoute.to_page_id) : undefined;
23
+ const buttonTarget = buttonRoute ? allPages.find((p) => p.page_id === buttonRoute.to_page_id) : undefined;
24
+ const backTargetUsable = !!backTarget && backTarget.template_type !== 'detail' && backTarget.template_type !== 'invoice';
25
+ const buttonTargetUsable = !!buttonTarget && buttonTarget.template_type !== 'detail' && buttonTarget.template_type !== 'invoice';
26
+ const buttonLabel = (buttonRoute?.label && buttonRoute.label.trim()) || 'Continue';
14
27
  const lines = [];
15
28
  lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
16
29
  lines.push(`// Page: ${page.name} — invoice`);
17
30
  lines.push(`// Presentation layer — generated once, you own this file.`);
18
31
  lines.push(`// Regenerate: nxf generate nextjs --include-views`);
32
+ if (backRoute && !backTargetUsable) {
33
+ lines.push(`// NAVIGATOR: a 'back' route exists but its target ('${backRoute.to_page_id}') requires`);
34
+ lines.push(`// a record id we don't have here — no back link rendered.`);
35
+ }
36
+ if (buttonRoute && !buttonTargetUsable) {
37
+ lines.push(`// NAVIGATOR: a 'button' route exists but its target ('${buttonRoute.to_page_id}') requires`);
38
+ lines.push(`// a record id we don't have here — button not rendered.`);
39
+ }
19
40
  lines.push(``);
20
41
  lines.push(`import type { ${className} } from '../../../../generated/types/${fileName}.types'`);
21
42
  lines.push(`import { notFound } from 'next/navigation'`);
43
+ if (backTargetUsable || buttonTargetUsable) {
44
+ lines.push(`import Link from 'next/link'`);
45
+ }
22
46
  lines.push(``);
23
47
  lines.push(`async function getItem(id: string): Promise<${className} | null> {`);
24
48
  lines.push(` const res = await fetch(\`\${process.env.NEXT_PUBLIC_APP_URL}/api/${fileName}/\${id}\`, { cache: 'no-store' })`);
@@ -35,6 +59,12 @@ function generateInvoicePage(page, model) {
35
59
  lines.push(` if (!item) notFound()`);
36
60
  lines.push(` return (`);
37
61
  lines.push(` <div className="container mx-auto px-4 py-8 max-w-2xl">`);
62
+ if (backTargetUsable) {
63
+ lines.push(` {/* NAVIGATOR: back-trigger route wired to '${backTarget.name}' */}`);
64
+ lines.push(` <Link href="/${toRoutePath(backTarget.slug)}" className="text-sm text-gray-500 hover:text-gray-900 inline-block mb-4">`);
65
+ lines.push(` ← Back`);
66
+ lines.push(` </Link>`);
67
+ }
38
68
  lines.push(` <div className="bg-white border border-gray-200 rounded-xl p-8">`);
39
69
  lines.push(` <div className="flex justify-between items-start mb-8">`);
40
70
  lines.push(` <div>`);
@@ -58,6 +88,15 @@ function generateInvoicePage(page, model) {
58
88
  lines.push(` </div>`);
59
89
  }
60
90
  lines.push(` </div>`);
91
+ if (buttonTargetUsable) {
92
+ lines.push(` {/* NAVIGATOR: button-trigger route wired to '${buttonTarget.name}' */}`);
93
+ lines.push(` <div className="mt-6">`);
94
+ lines.push(` <Link href="/${toRoutePath(buttonTarget.slug)}"`);
95
+ lines.push(` className="block text-center px-6 py-2.5 bg-black text-white rounded-lg text-sm font-medium hover:bg-gray-800 transition">`);
96
+ lines.push(` ${buttonLabel}`);
97
+ lines.push(` </Link>`);
98
+ lines.push(` </div>`);
99
+ }
61
100
  lines.push(` </div>`);
62
101
  lines.push(` )`);
63
102
  lines.push(`}`);
@@ -1 +1 @@
1
- {"version":3,"file":"page-invoice.js","sourceRoot":"","sources":["../../src/templates/page-invoice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-invoice.js","sourceRoot":"","sources":["../../src/templates/page-invoice.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import type { Model, PageDef, GeneratedFile } from '@underpeaks/generator-core';
2
- export declare function generateKanbanPage(page: PageDef, model?: Model): GeneratedFile;
1
+ import type { Model, PageDef, PageRoute, GeneratedFile } from '@underpeaks/generator-core';
2
+ export declare function generateKanbanPage(page: PageDef, model?: Model, routes?: PageRoute[], allPages?: PageDef[]): GeneratedFile;
3
3
  //# sourceMappingURL=page-kanban.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-kanban.d.ts","sourceRoot":"","sources":["../../src/templates/page-kanban.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,aAAa,CAmE9E"}
1
+ {"version":3,"file":"page-kanban.d.ts","sourceRoot":"","sources":["../../src/templates/page-kanban.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAO1F,wBAAgB,kBAAkB,CAChC,IAAI,EAAM,OAAO,EACjB,KAAK,CAAC,EAAI,KAAK,EAGf,MAAM,GAAI,SAAS,EAAO,EAC1B,QAAQ,GAAE,OAAO,EAAS,GACzB,aAAa,CAsFf"}
@@ -3,7 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.generateKanbanPage = generateKanbanPage;
5
5
  const generator_core_1 = require("@underpeaks/generator-core");
6
- function generateKanbanPage(page, model) {
6
+ function toRoutePath(slug) {
7
+ return slug.replace(/^\//, '');
8
+ }
9
+ function generateKanbanPage(page, model,
10
+ // NAVIGATOR: cards had NO tap handler at all before — only wired up
11
+ // when an explicit 'tap' + 'card-tap' route exists.
12
+ routes = [], allPages = []) {
7
13
  const routePath = page.slug.replace(/^\//, '');
8
14
  const className = model ? (0, generator_core_1.modelToClassName)(model.name) : 'Item';
9
15
  const fileName = model ? (0, generator_core_1.modelToFileName)(model.name) : 'item';
@@ -13,12 +19,22 @@ function generateKanbanPage(page, model) {
13
19
  const titleField = columns.find((c) => c.name.includes('title') || c.name.includes('name'))?.name ?? columns[0]?.name ?? pkName;
14
20
  const statusField = columns.find((c) => c.name.includes('status') || c.name.includes('stage'))?.name ?? null;
15
21
  const modelSlug = model ? model.name.replace('nxf_', '').replace(/_/g, '-') : fileName;
22
+ const tapRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'tap' && r.attach_to === 'card-tap');
23
+ const tapTarget = tapRoute ? allPages.find((p) => p.page_id === tapRoute.to_page_id) : undefined;
24
+ const tapTargetUsable = !!tapTarget && tapTarget.template_type !== 'detail';
16
25
  const lines = [];
17
26
  lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
18
27
  lines.push(`// Page: ${page.name} — kanban`);
19
28
  lines.push(`// Presentation layer — generated once, you own this file.`);
20
29
  lines.push(`// Regenerate: nxf generate nextjs --include-views`);
30
+ if (tapRoute && !tapTargetUsable) {
31
+ lines.push(`// NAVIGATOR: a card-tap route exists but its target ('${tapRoute.to_page_id}') requires`);
32
+ lines.push(`// a record id we don't have here — cards stay non-interactive.`);
33
+ }
21
34
  lines.push(``);
35
+ if (tapTargetUsable) {
36
+ lines.push(`import Link from 'next/link'`);
37
+ }
22
38
  lines.push(`import type { ${className} } from '../../../generated/types/${fileName}.types'`);
23
39
  lines.push(``);
24
40
  lines.push(`const COLUMNS = ['To Do', 'In Progress', 'Done']`);
@@ -52,9 +68,18 @@ function generateKanbanPage(page, model) {
52
68
  lines.push(` <span className="text-xs bg-gray-200 text-gray-600 rounded-full px-2 py-0.5">{colItems.length}</span>`);
53
69
  lines.push(` </div>`);
54
70
  lines.push(` {colItems.map((item) => (`);
55
- lines.push(` <div key={item.${pkName}} className="bg-white border border-gray-200 rounded-lg p-3 shadow-sm">`);
56
- lines.push(` <p className="text-sm font-medium text-gray-900">{item.${titleField}?.toString() ?? ''}</p>`);
57
- lines.push(` </div>`);
71
+ if (tapTargetUsable) {
72
+ lines.push(` // NAVIGATOR: card-tap route wired to '${tapTarget.name}'`);
73
+ lines.push(` <Link key={item.${pkName}} href="/${toRoutePath(tapTarget.slug)}"`);
74
+ lines.push(` className="block bg-white border border-gray-200 rounded-lg p-3 shadow-sm hover:border-gray-400 transition">`);
75
+ lines.push(` <p className="text-sm font-medium text-gray-900">{item.${titleField}?.toString() ?? '—'}</p>`);
76
+ lines.push(` </Link>`);
77
+ }
78
+ else {
79
+ lines.push(` <div key={item.${pkName}} className="bg-white border border-gray-200 rounded-lg p-3 shadow-sm">`);
80
+ lines.push(` <p className="text-sm font-medium text-gray-900">{item.${titleField}?.toString() ?? '—'}</p>`);
81
+ lines.push(` </div>`);
82
+ }
58
83
  lines.push(` ))}`);
59
84
  lines.push(` </div>`);
60
85
  lines.push(` )`);
@@ -1 +1 @@
1
- {"version":3,"file":"page-kanban.js","sourceRoot":"","sources":["../../src/templates/page-kanban.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-kanban.js","sourceRoot":"","sources":["../../src/templates/page-kanban.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PageDef, PageRoute, GeneratedFile } from '@underpeaks/generator-core';
2
+ export declare function generateLandingHeroCta(page: PageDef, routes?: PageRoute[], allPages?: PageDef[]): GeneratedFile;
3
+ //# sourceMappingURL=page-landing-hero-cta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-landing-hero-cta.d.ts","sourceRoot":"","sources":["../../src/templates/page-landing-hero-cta.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AASnF,wBAAgB,sBAAsB,CACpC,IAAI,EAAM,OAAO,EACjB,MAAM,GAAI,SAAS,EAAO,EAC1B,QAAQ,GAAE,OAAO,EAAS,GACzB,aAAa,CA+Cf"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ // File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-landing-hero-cta.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.generateLandingHeroCta = generateLandingHeroCta;
5
+ function toRoutePath(slug) {
6
+ return slug.replace(/^\//, '');
7
+ }
8
+ // FIX: the CTA button hardcoded href="/get-started" — no guarantee a page
9
+ // exists at that path. Only overridden by an explicit 'button' trigger
10
+ // route — no template-type guessing.
11
+ function generateLandingHeroCta(page, routes = [], allPages = []) {
12
+ const routePath = page.slug.replace(/^\//, '');
13
+ const buttonRoute = routes.find((r) => r.from_page_id === page.page_id && r.trigger === 'button');
14
+ const buttonTarget = buttonRoute ? allPages.find((p) => p.page_id === buttonRoute.to_page_id) : undefined;
15
+ const buttonTargetUsable = !!buttonTarget && buttonTarget.template_type !== 'detail';
16
+ const ctaRoute = buttonTargetUsable ? `/${toRoutePath(buttonTarget.slug)}` : '/get-started';
17
+ const buttonLabel = (buttonRoute?.label && buttonRoute.label.trim()) || 'Get Started';
18
+ const lines = [];
19
+ lines.push(`// GENERATED FILE — becomes yours to customise after first generation.`);
20
+ lines.push(`// Regenerate: nxf generate nextjs`);
21
+ if (!buttonTargetUsable) {
22
+ lines.push(`// NOTE: the CTA button falls back to hardcoded '/get-started' — there's no`);
23
+ lines.push(`// guarantee a page exists at that path. Add a 'button' trigger route on`);
24
+ lines.push(`// this page in Navigator to point it somewhere real.`);
25
+ }
26
+ lines.push(``);
27
+ lines.push(`import Link from 'next/link'`);
28
+ lines.push(``);
29
+ lines.push(`export default function LandingHeroCtaPage() {`);
30
+ lines.push(` return (`);
31
+ lines.push(` <div className="min-h-screen flex items-center justify-center px-4">`);
32
+ lines.push(` <div className="max-w-2xl text-center">`);
33
+ lines.push(` <h1 className="text-4xl md:text-5xl font-bold text-gray-900 mb-6">`);
34
+ lines.push(` ${page.name}`);
35
+ lines.push(` </h1>`);
36
+ lines.push(` <p className="text-lg text-gray-500 mb-10">`);
37
+ lines.push(` A short, clear line about what this product does.`);
38
+ lines.push(` </p>`);
39
+ lines.push(` {/* NAVIGATOR: button-trigger route${buttonTargetUsable ? ` wired to '${buttonTarget.name}'` : ' not configured — see NOTE above'} */}`);
40
+ lines.push(` <Link href="${ctaRoute}"`);
41
+ lines.push(` className="inline-block px-8 py-3 bg-black text-white rounded-lg text-base font-medium hover:bg-gray-800 transition">`);
42
+ lines.push(` ${buttonLabel}`);
43
+ lines.push(` </Link>`);
44
+ lines.push(` </div>`);
45
+ lines.push(` </div>`);
46
+ lines.push(` )`);
47
+ lines.push(`}`);
48
+ return {
49
+ path: `app/(presentation)/${routePath}/page.tsx`,
50
+ content: lines.join('\n'),
51
+ category: 'customizable',
52
+ };
53
+ }
54
+ //# sourceMappingURL=page-landing-hero-cta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-landing-hero-cta.js","sourceRoot":"","sources":["../../src/templates/page-landing-hero-cta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PageDef, GeneratedFile } from '@underpeaks/generator-core';
2
+ export declare function generateLandingHeroFeatures(page: PageDef): GeneratedFile;
3
+ //# sourceMappingURL=page-landing-hero-features.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-landing-hero-features.d.ts","sourceRoot":"","sources":["../../src/templates/page-landing-hero-features.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAExE,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CA0CxE"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ // File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-landing-hero-features.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.generateLandingHeroFeatures = generateLandingHeroFeatures;
5
+ function generateLandingHeroFeatures(page) {
6
+ const routePath = page.slug.replace(/^\//, '');
7
+ const lines = [];
8
+ lines.push(`// GENERATED FILE — becomes yours to customise after first generation.`);
9
+ lines.push(`// Regenerate: nxf generate nextjs`);
10
+ lines.push(``);
11
+ lines.push(`const FEATURES = [`);
12
+ lines.push(` { title: 'Fast', desc: 'Built for speed from the ground up.' },`);
13
+ lines.push(` { title: 'Reliable', desc: 'Consistent, predictable behaviour.' },`);
14
+ lines.push(` { title: 'Flexible', desc: 'Adapts to how you already work.' },`);
15
+ lines.push(`]`);
16
+ lines.push(``);
17
+ lines.push(`export default function LandingHeroFeaturesPage() {`);
18
+ lines.push(` return (`);
19
+ lines.push(` <div className="min-h-screen px-4 py-20">`);
20
+ lines.push(` <div className="max-w-3xl mx-auto text-center mb-16">`);
21
+ lines.push(` <h1 className="text-4xl md:text-5xl font-bold text-gray-900 mb-4">`);
22
+ lines.push(` ${page.name}`);
23
+ lines.push(` </h1>`);
24
+ lines.push(` <p className="text-lg text-gray-500">`);
25
+ lines.push(` Everything you need, built in.`);
26
+ lines.push(` </p>`);
27
+ lines.push(` </div>`);
28
+ lines.push(` <div className="max-w-4xl mx-auto grid grid-cols-1 md:grid-cols-3 gap-8">`);
29
+ lines.push(` {FEATURES.map((f) => (`);
30
+ lines.push(` <div key={f.title} className="text-center">`);
31
+ lines.push(` <h3 className="font-semibold text-gray-900 mb-2">{f.title}</h3>`);
32
+ lines.push(` <p className="text-sm text-gray-500">{f.desc}</p>`);
33
+ lines.push(` </div>`);
34
+ lines.push(` ))}`);
35
+ lines.push(` </div>`);
36
+ lines.push(` </div>`);
37
+ lines.push(` )`);
38
+ lines.push(`}`);
39
+ return {
40
+ path: `app/(presentation)/${routePath}/page.tsx`,
41
+ content: lines.join('\n'),
42
+ category: 'customizable',
43
+ };
44
+ }
45
+ //# sourceMappingURL=page-landing-hero-features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-landing-hero-features.js","sourceRoot":"","sources":["../../src/templates/page-landing-hero-features.ts"],"names":[],"mappings":";AAAA,iGAAiG;;AAIjG,kEA0CC;AA1CD,SAAgB,2BAA2B,CAAC,IAAa;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAE9C,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;IACpF,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAChC,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;IACpF,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAA;IACnF,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAA;IAChF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;IACjE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAC3D,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;IACzE,KAAK,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;IACxF,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC3B,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAC3D,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACtD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAA;IAC7F,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC5C,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;IACnE,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAA;IACzF,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAA;IAC3E,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACzB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO;QACL,IAAI,EAAM,sBAAsB,SAAS,WAAW;QACpD,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,cAAc;KACzB,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PageDef, GeneratedFile } from '@underpeaks/generator-core';
2
+ export declare function generateLandingHeroPricing(page: PageDef): GeneratedFile;
3
+ //# sourceMappingURL=page-landing-hero-pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-landing-hero-pricing.d.ts","sourceRoot":"","sources":["../../src/templates/page-landing-hero-pricing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAExE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CA2CvE"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ // File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-landing-hero-pricing.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.generateLandingHeroPricing = generateLandingHeroPricing;
5
+ function generateLandingHeroPricing(page) {
6
+ const routePath = page.slug.replace(/^\//, '');
7
+ const lines = [];
8
+ lines.push(`// GENERATED FILE — becomes yours to customise after first generation.`);
9
+ lines.push(`// Regenerate: nxf generate nextjs`);
10
+ lines.push(``);
11
+ lines.push(`const PLANS = [`);
12
+ lines.push(` { name: 'Starter', price: '$9/mo', blurb: 'For individuals getting started.' },`);
13
+ lines.push(` { name: 'Pro', price: '$29/mo', blurb: 'For growing teams.' },`);
14
+ lines.push(` { name: 'Enterprise', price: 'Contact us', blurb: 'For large organisations.' },`);
15
+ lines.push(`]`);
16
+ lines.push(``);
17
+ lines.push(`export default function LandingHeroPricingPage() {`);
18
+ lines.push(` return (`);
19
+ lines.push(` <div className="min-h-screen px-4 py-20">`);
20
+ lines.push(` <div className="max-w-3xl mx-auto text-center mb-16">`);
21
+ lines.push(` <h1 className="text-4xl md:text-5xl font-bold text-gray-900 mb-4">`);
22
+ lines.push(` ${page.name}`);
23
+ lines.push(` </h1>`);
24
+ lines.push(` <p className="text-lg text-gray-500">`);
25
+ lines.push(` Simple pricing for every stage.`);
26
+ lines.push(` </p>`);
27
+ lines.push(` </div>`);
28
+ lines.push(` <div className="max-w-4xl mx-auto grid grid-cols-1 md:grid-cols-3 gap-6">`);
29
+ lines.push(` {PLANS.map((p) => (`);
30
+ lines.push(` <div key={p.name} className="bg-white border border-gray-200 rounded-xl p-8 text-center">`);
31
+ lines.push(` <h3 className="font-bold text-lg text-gray-900 mb-1">{p.name}</h3>`);
32
+ lines.push(` <p className="text-2xl font-bold text-gray-900 mb-3">{p.price}</p>`);
33
+ lines.push(` <p className="text-sm text-gray-500">{p.blurb}</p>`);
34
+ lines.push(` </div>`);
35
+ lines.push(` ))}`);
36
+ lines.push(` </div>`);
37
+ lines.push(` </div>`);
38
+ lines.push(` )`);
39
+ lines.push(`}`);
40
+ return {
41
+ path: `app/(presentation)/${routePath}/page.tsx`,
42
+ content: lines.join('\n'),
43
+ category: 'customizable',
44
+ };
45
+ }
46
+ //# sourceMappingURL=page-landing-hero-pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-landing-hero-pricing.js","sourceRoot":"","sources":["../../src/templates/page-landing-hero-pricing.ts"],"names":[],"mappings":";AAAA,gGAAgG;;AAIhG,gEA2CC;AA3CD,SAAgB,0BAA0B,CAAC,IAAa;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAE9C,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;IACpF,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC7B,KAAK,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAA;IACvG,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAA;IACzF,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAA;IAC/F,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IAChE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAC3D,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;IACzE,KAAK,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;IACxF,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC3B,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAC3D,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAA;IAC7F,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IACzC,KAAK,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAA;IACjH,KAAK,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;IAC5F,KAAK,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;IAC5F,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAA;IAC5E,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACzB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO;QACL,IAAI,EAAM,sBAAsB,SAAS,WAAW;QACpD,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,cAAc;KACzB,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PageDef, GeneratedFile } from '@underpeaks/generator-core';
2
+ export declare function generateLandingMinimal(page: PageDef): GeneratedFile;
3
+ //# sourceMappingURL=page-landing-minimal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-landing-minimal.d.ts","sourceRoot":"","sources":["../../src/templates/page-landing-minimal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAExE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAuBnE"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ // File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-landing-minimal.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.generateLandingMinimal = generateLandingMinimal;
5
+ function generateLandingMinimal(page) {
6
+ const routePath = page.slug.replace(/^\//, '');
7
+ const lines = [];
8
+ lines.push(`// GENERATED FILE — becomes yours to customise after first generation.`);
9
+ lines.push(`// Regenerate: nxf generate nextjs`);
10
+ lines.push(``);
11
+ lines.push(`export default function LandingMinimalPage() {`);
12
+ lines.push(` return (`);
13
+ lines.push(` <div className="min-h-screen flex items-center justify-center px-4">`);
14
+ lines.push(` <h1 className="text-2xl font-semibold text-gray-900 text-center">`);
15
+ lines.push(` ${page.name}`);
16
+ lines.push(` </h1>`);
17
+ lines.push(` </div>`);
18
+ lines.push(` )`);
19
+ lines.push(`}`);
20
+ return {
21
+ path: `app/(presentation)/${routePath}/page.tsx`,
22
+ content: lines.join('\n'),
23
+ category: 'customizable',
24
+ };
25
+ }
26
+ //# sourceMappingURL=page-landing-minimal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-landing-minimal.js","sourceRoot":"","sources":["../../src/templates/page-landing-minimal.ts"],"names":[],"mappings":";AAAA,2FAA2F;;AAI3F,wDAuBC;AAvBD,SAAgB,sBAAsB,CAAC,IAAa;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAE9C,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;IACpF,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC5D,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAA;IACtF,KAAK,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAA;IACrF,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAClC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACzB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO;QACL,IAAI,EAAM,sBAAsB,SAAS,WAAW;QACpD,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,cAAc;KACzB,CAAA;AACH,CAAC"}
@@ -1,3 +1,3 @@
1
- import type { Model, PageDef, GeneratedFile } from '@underpeaks/generator-core';
2
- export declare function generateListPage(page: PageDef, model: Model): GeneratedFile;
1
+ import type { Model, PageDef, PageRoute, GeneratedFile } from '@underpeaks/generator-core';
2
+ export declare function generateListPage(page: PageDef, model: Model, projectType: string, routes?: PageRoute[], allPages?: PageDef[]): GeneratedFile;
3
3
  //# sourceMappingURL=page-list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-list.d.ts","sourceRoot":"","sources":["../../src/templates/page-list.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAQ/E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,aAAa,CA+H3E"}
1
+ {"version":3,"file":"page-list.d.ts","sourceRoot":"","sources":["../../src/templates/page-list.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAc1F,wBAAgB,gBAAgB,CAC9B,IAAI,EAAS,OAAO,EACpB,KAAK,EAAQ,KAAK,EAClB,WAAW,EAAE,MAAM,EAKnB,MAAM,GAAO,SAAS,EAAO,EAC7B,QAAQ,GAAK,OAAO,EAAS,GAC5B,aAAa,CAkNf"}