@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.
- package/dist/components/registry-display.d.ts.map +1 -1
- package/dist/components/registry-display.js +3 -7
- package/dist/components/registry-display.js.map +1 -1
- package/dist/generator.d.ts +0 -7
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +90 -40
- package/dist/generator.js.map +1 -1
- package/dist/templates/api-builder.d.ts +1 -1
- package/dist/templates/api-builder.d.ts.map +1 -1
- package/dist/templates/api-builder.js +7 -4
- package/dist/templates/api-builder.js.map +1 -1
- package/dist/templates/app-nav.d.ts +3 -20
- package/dist/templates/app-nav.d.ts.map +1 -1
- package/dist/templates/app-nav.js +55 -22
- package/dist/templates/app-nav.js.map +1 -1
- package/dist/templates/layout.d.ts.map +1 -1
- package/dist/templates/layout.js +16 -9
- package/dist/templates/layout.js.map +1 -1
- package/dist/templates/page-auth.d.ts +1 -1
- package/dist/templates/page-auth.d.ts.map +1 -1
- package/dist/templates/page-auth.js +20 -7
- package/dist/templates/page-auth.js.map +1 -1
- package/dist/templates/page-blog-post.d.ts +2 -2
- package/dist/templates/page-blog-post.d.ts.map +1 -1
- package/dist/templates/page-blog-post.js +38 -1
- package/dist/templates/page-blog-post.js.map +1 -1
- package/dist/templates/page-calendar.d.ts +2 -2
- package/dist/templates/page-calendar.d.ts.map +1 -1
- package/dist/templates/page-calendar.js +31 -3
- package/dist/templates/page-calendar.js.map +1 -1
- package/dist/templates/page-cart.d.ts +2 -2
- package/dist/templates/page-cart.d.ts.map +1 -1
- package/dist/templates/page-cart.js +27 -2
- package/dist/templates/page-cart.js.map +1 -1
- package/dist/templates/page-checkout.d.ts +2 -2
- package/dist/templates/page-checkout.d.ts.map +1 -1
- package/dist/templates/page-checkout.js +19 -2
- package/dist/templates/page-checkout.js.map +1 -1
- package/dist/templates/page-contact.d.ts +0 -2
- package/dist/templates/page-contact.d.ts.map +1 -1
- package/dist/templates/page-contact.js +83 -84
- package/dist/templates/page-contact.js.map +1 -1
- package/dist/templates/page-dashboard.d.ts +2 -2
- package/dist/templates/page-dashboard.d.ts.map +1 -1
- package/dist/templates/page-dashboard.js +30 -3
- package/dist/templates/page-dashboard.js.map +1 -1
- package/dist/templates/page-detail.d.ts +2 -2
- package/dist/templates/page-detail.d.ts.map +1 -1
- package/dist/templates/page-detail.js +156 -8
- package/dist/templates/page-detail.js.map +1 -1
- package/dist/templates/page-feed.d.ts +2 -2
- package/dist/templates/page-feed.d.ts.map +1 -1
- package/dist/templates/page-feed.js +44 -3
- package/dist/templates/page-feed.js.map +1 -1
- package/dist/templates/page-form.d.ts.map +1 -1
- package/dist/templates/page-form.js +341 -43
- package/dist/templates/page-form.js.map +1 -1
- package/dist/templates/page-gallery.d.ts +2 -2
- package/dist/templates/page-gallery.d.ts.map +1 -1
- package/dist/templates/page-gallery.js +36 -2
- package/dist/templates/page-gallery.js.map +1 -1
- package/dist/templates/page-invoice.d.ts +2 -2
- package/dist/templates/page-invoice.d.ts.map +1 -1
- package/dist/templates/page-invoice.js +40 -1
- package/dist/templates/page-invoice.js.map +1 -1
- package/dist/templates/page-kanban.d.ts +2 -2
- package/dist/templates/page-kanban.d.ts.map +1 -1
- package/dist/templates/page-kanban.js +29 -4
- package/dist/templates/page-kanban.js.map +1 -1
- package/dist/templates/page-landing-hero-cta.d.ts +3 -0
- package/dist/templates/page-landing-hero-cta.d.ts.map +1 -0
- package/dist/templates/page-landing-hero-cta.js +54 -0
- package/dist/templates/page-landing-hero-cta.js.map +1 -0
- package/dist/templates/page-landing-hero-features.d.ts +3 -0
- package/dist/templates/page-landing-hero-features.d.ts.map +1 -0
- package/dist/templates/page-landing-hero-features.js +45 -0
- package/dist/templates/page-landing-hero-features.js.map +1 -0
- package/dist/templates/page-landing-hero-pricing.d.ts +3 -0
- package/dist/templates/page-landing-hero-pricing.d.ts.map +1 -0
- package/dist/templates/page-landing-hero-pricing.js +46 -0
- package/dist/templates/page-landing-hero-pricing.js.map +1 -0
- package/dist/templates/page-landing-minimal.d.ts +3 -0
- package/dist/templates/page-landing-minimal.d.ts.map +1 -0
- package/dist/templates/page-landing-minimal.js +26 -0
- package/dist/templates/page-landing-minimal.js.map +1 -0
- package/dist/templates/page-list.d.ts +2 -2
- package/dist/templates/page-list.d.ts.map +1 -1
- package/dist/templates/page-list.js +96 -11
- package/dist/templates/page-list.js.map +1 -1
- package/dist/templates/page-otp-entry.d.ts +2 -2
- package/dist/templates/page-otp-entry.d.ts.map +1 -1
- package/dist/templates/page-otp-entry.js +23 -2
- package/dist/templates/page-otp-entry.js.map +1 -1
- package/dist/templates/page-otp-request.d.ts +2 -2
- package/dist/templates/page-otp-request.d.ts.map +1 -1
- package/dist/templates/page-otp-request.js +18 -2
- package/dist/templates/page-otp-request.js.map +1 -1
- package/dist/templates/page-profile.d.ts +2 -2
- package/dist/templates/page-profile.d.ts.map +1 -1
- package/dist/templates/page-profile.js +37 -1
- package/dist/templates/page-profile.js.map +1 -1
- package/dist/templates/page-reset-password.d.ts +3 -0
- package/dist/templates/page-reset-password.d.ts.map +1 -0
- package/dist/templates/page-reset-password.js +122 -0
- package/dist/templates/page-reset-password.js.map +1 -0
- package/dist/templates/page-search.d.ts +2 -2
- package/dist/templates/page-search.d.ts.map +1 -1
- package/dist/templates/page-search.js +22 -2
- package/dist/templates/page-search.js.map +1 -1
- package/dist/templates/page-settings.d.ts +2 -2
- package/dist/templates/page-settings.d.ts.map +1 -1
- package/dist/templates/page-settings.js +48 -4
- package/dist/templates/page-settings.js.map +1 -1
- package/dist/templates/page-wallet.d.ts +2 -2
- package/dist/templates/page-wallet.d.ts.map +1 -1
- package/dist/templates/page-wallet.js +44 -2
- package/dist/templates/page-wallet.js.map +1 -1
- 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
|
|
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}}
|
|
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":";AAAA,mFAAmF;;
|
|
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;
|
|
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
|
|
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":";AAAA,mFAAmF;;
|
|
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;
|
|
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
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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":";AAAA,kFAAkF;;
|
|
1
|
+
{"version":3,"file":"page-kanban.js","sourceRoot":"","sources":["../../src/templates/page-kanban.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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;
|
|
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"}
|