@underpeaks/generator-nextjs 1.0.28 → 1.0.31
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/media/edit/nxf_audio_upload.d.ts +2 -0
- package/dist/components/media/edit/nxf_audio_upload.d.ts.map +1 -1
- package/dist/components/media/edit/nxf_audio_upload.js +68 -0
- package/dist/components/media/edit/nxf_audio_upload.js.map +1 -1
- package/dist/components/numeric/display/nxf_formatted_currency.d.ts +2 -0
- package/dist/components/numeric/display/nxf_formatted_currency.d.ts.map +1 -1
- package/dist/components/numeric/display/nxf_formatted_currency.js +29 -0
- package/dist/components/numeric/display/nxf_formatted_currency.js.map +1 -1
- package/dist/components/registry-display.d.ts +5 -0
- package/dist/components/registry-display.d.ts.map +1 -0
- package/dist/components/registry-display.js +116 -0
- package/dist/components/registry-display.js.map +1 -0
- package/dist/components/registry-edit.d.ts +5 -0
- package/dist/components/registry-edit.d.ts.map +1 -0
- package/dist/components/registry-edit.js +156 -0
- package/dist/components/registry-edit.js.map +1 -0
- package/dist/generator.d.ts +13 -1
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +105 -32
- package/dist/generator.js.map +1 -1
- package/dist/templates/page-blog-post.d.ts +3 -0
- package/dist/templates/page-blog-post.d.ts.map +1 -0
- package/dist/templates/page-blog-post.js +63 -0
- package/dist/templates/page-blog-post.js.map +1 -0
- package/dist/templates/page-calendar.d.ts +3 -0
- package/dist/templates/page-calendar.d.ts.map +1 -0
- package/dist/templates/page-calendar.js +66 -0
- package/dist/templates/page-calendar.js.map +1 -0
- package/dist/templates/page-cart.d.ts +3 -0
- package/dist/templates/page-cart.d.ts.map +1 -0
- package/dist/templates/page-cart.js +37 -0
- package/dist/templates/page-cart.js.map +1 -0
- package/dist/templates/page-chat.d.ts +3 -0
- package/dist/templates/page-chat.d.ts.map +1 -0
- package/dist/templates/page-chat.js +65 -0
- package/dist/templates/page-chat.js.map +1 -0
- package/dist/templates/page-checkout.d.ts +3 -0
- package/dist/templates/page-checkout.d.ts.map +1 -0
- package/dist/templates/page-checkout.js +57 -0
- package/dist/templates/page-checkout.js.map +1 -0
- package/dist/templates/page-contact.d.ts +3 -0
- package/dist/templates/page-contact.d.ts.map +1 -0
- package/dist/templates/page-contact.js +86 -0
- package/dist/templates/page-contact.js.map +1 -0
- package/dist/templates/page-custom.d.ts +3 -0
- package/dist/templates/page-custom.d.ts.map +1 -0
- package/dist/templates/page-custom.js +31 -0
- package/dist/templates/page-custom.js.map +1 -0
- package/dist/templates/page-dashboard.d.ts +3 -0
- package/dist/templates/page-dashboard.d.ts.map +1 -0
- package/dist/templates/page-dashboard.js +63 -0
- package/dist/templates/page-dashboard.js.map +1 -0
- package/dist/templates/page-feed.d.ts +3 -0
- package/dist/templates/page-feed.d.ts.map +1 -0
- package/dist/templates/page-feed.js +68 -0
- package/dist/templates/page-feed.js.map +1 -0
- package/dist/templates/page-gallery.d.ts +3 -0
- package/dist/templates/page-gallery.d.ts.map +1 -0
- package/dist/templates/page-gallery.js +67 -0
- package/dist/templates/page-gallery.js.map +1 -0
- package/dist/templates/page-invoice.d.ts +3 -0
- package/dist/templates/page-invoice.d.ts.map +1 -0
- package/dist/templates/page-invoice.js +70 -0
- package/dist/templates/page-invoice.js.map +1 -0
- package/dist/templates/page-kanban.d.ts +3 -0
- package/dist/templates/page-kanban.d.ts.map +1 -0
- package/dist/templates/page-kanban.js +72 -0
- package/dist/templates/page-kanban.js.map +1 -0
- package/dist/templates/page-map.d.ts +3 -0
- package/dist/templates/page-map.d.ts.map +1 -0
- package/dist/templates/page-map.js +33 -0
- package/dist/templates/page-map.js.map +1 -0
- package/dist/templates/page-messages.d.ts +3 -0
- package/dist/templates/page-messages.d.ts.map +1 -0
- package/dist/templates/page-messages.js +31 -0
- package/dist/templates/page-messages.js.map +1 -0
- package/dist/templates/page-otp-entry.d.ts +3 -0
- package/dist/templates/page-otp-entry.d.ts.map +1 -0
- package/dist/templates/page-otp-entry.js +85 -0
- package/dist/templates/page-otp-entry.js.map +1 -0
- package/dist/templates/page-otp-request.d.ts +3 -0
- package/dist/templates/page-otp-request.d.ts.map +1 -0
- package/dist/templates/page-otp-request.js +70 -0
- package/dist/templates/page-otp-request.js.map +1 -0
- package/dist/templates/page-profile.d.ts +3 -0
- package/dist/templates/page-profile.d.ts.map +1 -0
- package/dist/templates/page-profile.js +68 -0
- package/dist/templates/page-profile.js.map +1 -0
- package/dist/templates/page-search.d.ts +3 -0
- package/dist/templates/page-search.d.ts.map +1 -0
- package/dist/templates/page-search.js +74 -0
- package/dist/templates/page-search.js.map +1 -0
- package/dist/templates/page-settings.d.ts +3 -0
- package/dist/templates/page-settings.d.ts.map +1 -0
- package/dist/templates/page-settings.js +76 -0
- package/dist/templates/page-settings.js.map +1 -0
- package/dist/templates/page-wallet.d.ts +3 -0
- package/dist/templates/page-wallet.d.ts.map +1 -0
- package/dist/templates/page-wallet.js +44 -0
- package/dist/templates/page-wallet.js.map +1 -0
- package/package.json +1 -1
- package/dist/templates/page-remaining.d.ts +0 -3
- package/dist/templates/page-remaining.d.ts.map +0 -1
- package/dist/templates/page-remaining.js +0 -870
- package/dist/templates/page-remaining.js.map +0 -1
package/dist/generator.js
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.generateNextjs = generateNextjs;
|
|
5
5
|
const generator_core_1 = require("@underpeaks/generator-core");
|
|
6
|
+
const registry_edit_1 = require("./components/registry-edit");
|
|
7
|
+
const registry_display_1 = require("./components/registry-display");
|
|
6
8
|
const types_1 = require("./templates/types");
|
|
7
9
|
const api_route_1 = require("./templates/api-route");
|
|
8
10
|
const api_route_id_1 = require("./templates/api-route-id");
|
|
@@ -11,7 +13,26 @@ const page_detail_1 = require("./templates/page-detail");
|
|
|
11
13
|
const page_form_1 = require("./templates/page-form");
|
|
12
14
|
const page_auth_1 = require("./templates/page-auth");
|
|
13
15
|
const page_landing_1 = require("./templates/page-landing");
|
|
14
|
-
const
|
|
16
|
+
const page_dashboard_1 = require("./templates/page-dashboard");
|
|
17
|
+
const page_profile_1 = require("./templates/page-profile");
|
|
18
|
+
const page_blog_post_1 = require("./templates/page-blog-post");
|
|
19
|
+
const page_contact_1 = require("./templates/page-contact");
|
|
20
|
+
const page_cart_1 = require("./templates/page-cart");
|
|
21
|
+
const page_checkout_1 = require("./templates/page-checkout");
|
|
22
|
+
const page_wallet_1 = require("./templates/page-wallet");
|
|
23
|
+
const page_invoice_1 = require("./templates/page-invoice");
|
|
24
|
+
const page_chat_1 = require("./templates/page-chat");
|
|
25
|
+
const page_messages_1 = require("./templates/page-messages");
|
|
26
|
+
const page_feed_1 = require("./templates/page-feed");
|
|
27
|
+
const page_map_1 = require("./templates/page-map");
|
|
28
|
+
const page_search_1 = require("./templates/page-search");
|
|
29
|
+
const page_settings_1 = require("./templates/page-settings");
|
|
30
|
+
const page_gallery_1 = require("./templates/page-gallery");
|
|
31
|
+
const page_kanban_1 = require("./templates/page-kanban");
|
|
32
|
+
const page_calendar_1 = require("./templates/page-calendar");
|
|
33
|
+
const page_otp_request_1 = require("./templates/page-otp-request");
|
|
34
|
+
const page_otp_entry_1 = require("./templates/page-otp-entry");
|
|
35
|
+
const page_custom_1 = require("./templates/page-custom");
|
|
15
36
|
const navigation_1 = require("./templates/navigation");
|
|
16
37
|
const tailwind_1 = require("./templates/tailwind");
|
|
17
38
|
const theme_1 = require("./templates/theme");
|
|
@@ -24,34 +45,27 @@ const api_builder_1 = require("./templates/api-builder");
|
|
|
24
45
|
const index_1 = require("./integrations/index");
|
|
25
46
|
const storage_1 = require("./integrations/storage");
|
|
26
47
|
const validators_1 = require("./templates/validators");
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
'dashboard', 'profile', 'blog-post', 'contact',
|
|
35
|
-
'cart', 'checkout', 'wallet', 'invoice',
|
|
36
|
-
'chat', 'messages', 'feed', 'map', 'search', 'settings',
|
|
37
|
-
'gallery', 'kanban', 'calendar',
|
|
38
|
-
'otp_request', 'otp_entry', 'custom',
|
|
39
|
-
];
|
|
40
|
-
const AUTH_TYPES = [
|
|
41
|
-
'sign_in', 'sign_up', 'forgot_password', 'reset_password',
|
|
42
|
-
];
|
|
43
|
-
const NAV_TYPES = ['top-nav', 'sidebar-nav', 'bottom-nav', 'drawer-nav'];
|
|
48
|
+
/**
|
|
49
|
+
* NOTE on widget dedup: see the matching comment in generator-flutter's
|
|
50
|
+
* generator.ts — this only decides WHICH unique ui_type widgets the
|
|
51
|
+
* project needs, always generating all of them fresh. Whether a
|
|
52
|
+
* developer has hand-edited a widget file locally is checked in the
|
|
53
|
+
* CLI's extraction step, not here.
|
|
54
|
+
*/
|
|
44
55
|
async function generateNextjs(data) {
|
|
45
56
|
const filtered = (0, generator_core_1.filterProjectData)(data);
|
|
46
57
|
const files = [];
|
|
58
|
+
// ── Widget library (scanned + deduplicated by ui_type) ────────────────────
|
|
59
|
+
const usage = (0, generator_core_1.scanUsedUiTypes)(filtered.models, filtered.pages);
|
|
60
|
+
const resolved = (0, generator_core_1.resolveRequiredWidgets)(usage, { editRegistry: registry_edit_1.nextjsEditRegistry, displayRegistry: registry_display_1.nextjsDisplayRegistry });
|
|
61
|
+
files.push(...resolved.files);
|
|
62
|
+
if (resolved.missing.length > 0) {
|
|
63
|
+
console.warn(`[nxf] No component registered for ui_type(s): ${resolved.missing.join(', ')} — these fields will not render.`);
|
|
64
|
+
}
|
|
47
65
|
// ── Generated layer (always regenerated) ──────────────────────────────────
|
|
48
66
|
files.push((0, nxf_client_1.generateNxfClient)(data.source));
|
|
49
67
|
files.push((0, layout_1.generateLayout)(filtered.pages, data.project_name));
|
|
50
|
-
|
|
51
|
-
// template ever generated it — every project with a nav page would fail
|
|
52
|
-
// to build. Only generated when at least one page actually has a nav
|
|
53
|
-
// type set, matching layout.ts's own (now-fixed) hasNav check exactly.
|
|
54
|
-
if (filtered.pages.some((p) => NAV_TYPES.includes(p.nav_type ?? ''))) {
|
|
68
|
+
if (filtered.pages.some((p) => generator_core_1.NAV_TEMPLATE_TYPES.includes(p.nav_type ?? ''))) {
|
|
55
69
|
files.push((0, app_nav_1.generateAppNav)(filtered.pages));
|
|
56
70
|
}
|
|
57
71
|
files.push((0, env_1.generateEnvTemplate)(data.project_id));
|
|
@@ -65,25 +79,21 @@ async function generateNextjs(data) {
|
|
|
65
79
|
files.push((0, theme_1.generateTheme)(data.theme));
|
|
66
80
|
}
|
|
67
81
|
files.push((0, navigation_1.generateNavigation)(filtered.pages, filtered.routes));
|
|
68
|
-
// API Builder codegen
|
|
69
82
|
files.push((0, api_builder_1.generateApiBuilderNextjs)(data.endpoints ?? []));
|
|
70
|
-
// Integration codegen
|
|
71
83
|
if (data.integrations && data.integrations.length > 0) {
|
|
72
84
|
files.push(...(0, index_1.generateNextjsIntegrations)(data.integrations));
|
|
73
85
|
}
|
|
74
|
-
// Hosted storage — always available on Studio
|
|
75
86
|
files.push((0, storage_1.generateStorageNextjs)({}));
|
|
76
|
-
// ── Root ───────────────────────────────────────────────────────────────────
|
|
77
87
|
files.push((0, readme_1.generateReadme)(data.project_name));
|
|
78
88
|
files.push((0, validators_1.generateValidators)());
|
|
79
89
|
// ── Presentation layer (generated once, user owns) ────────────────────────
|
|
80
90
|
for (const page of filtered.pages) {
|
|
81
91
|
const model = filtered.models.find((m) => m.sm_id === page.model_id);
|
|
82
|
-
if (
|
|
92
|
+
if (generator_core_1.AUTH_TEMPLATE_TYPES.includes(page.template_type)) {
|
|
83
93
|
files.push(...(0, page_auth_1.generateNextjsAuthPages)(page));
|
|
84
94
|
continue;
|
|
85
95
|
}
|
|
86
|
-
if (
|
|
96
|
+
if (generator_core_1.LANDING_TEMPLATE_TYPES.includes(page.template_type)) {
|
|
87
97
|
files.push((0, page_landing_1.generateLandingPage)(page));
|
|
88
98
|
continue;
|
|
89
99
|
}
|
|
@@ -101,13 +111,76 @@ async function generateNextjs(data) {
|
|
|
101
111
|
if (model)
|
|
102
112
|
files.push((0, page_form_1.generateFormPage)(page, model));
|
|
103
113
|
break;
|
|
114
|
+
case 'dashboard':
|
|
115
|
+
files.push((0, page_dashboard_1.generateDashboardPage)(page, model));
|
|
116
|
+
break;
|
|
117
|
+
case 'profile':
|
|
118
|
+
files.push((0, page_profile_1.generateProfilePage)(page, model));
|
|
119
|
+
break;
|
|
120
|
+
case 'blog-post':
|
|
121
|
+
files.push((0, page_blog_post_1.generateBlogPostPage)(page, model));
|
|
122
|
+
break;
|
|
123
|
+
case 'contact':
|
|
124
|
+
files.push((0, page_contact_1.generateContactPage)(page));
|
|
125
|
+
break;
|
|
126
|
+
case 'cart':
|
|
127
|
+
files.push((0, page_cart_1.generateCartPage)(page));
|
|
128
|
+
break;
|
|
129
|
+
case 'checkout':
|
|
130
|
+
files.push((0, page_checkout_1.generateCheckoutPage)(page));
|
|
131
|
+
break;
|
|
132
|
+
case 'wallet':
|
|
133
|
+
files.push((0, page_wallet_1.generateWalletPage)(page));
|
|
134
|
+
break;
|
|
135
|
+
case 'invoice':
|
|
136
|
+
files.push((0, page_invoice_1.generateInvoicePage)(page, model));
|
|
137
|
+
break;
|
|
138
|
+
case 'chat':
|
|
139
|
+
files.push((0, page_chat_1.generateChatPage)(page));
|
|
140
|
+
break;
|
|
141
|
+
case 'messages':
|
|
142
|
+
files.push((0, page_messages_1.generateMessagesPage)(page));
|
|
143
|
+
break;
|
|
144
|
+
case 'feed':
|
|
145
|
+
files.push((0, page_feed_1.generateFeedPage)(page, model));
|
|
146
|
+
break;
|
|
147
|
+
case 'map':
|
|
148
|
+
files.push((0, page_map_1.generateMapPage)(page));
|
|
149
|
+
break;
|
|
150
|
+
case 'search':
|
|
151
|
+
files.push((0, page_search_1.generateSearchPage)(page, model));
|
|
152
|
+
break;
|
|
153
|
+
case 'settings':
|
|
154
|
+
files.push((0, page_settings_1.generateSettingsPage)(page));
|
|
155
|
+
break;
|
|
156
|
+
case 'gallery':
|
|
157
|
+
files.push((0, page_gallery_1.generateGalleryPage)(page, model));
|
|
158
|
+
break;
|
|
159
|
+
case 'kanban':
|
|
160
|
+
files.push((0, page_kanban_1.generateKanbanPage)(page, model));
|
|
161
|
+
break;
|
|
162
|
+
case 'calendar':
|
|
163
|
+
files.push((0, page_calendar_1.generateCalendarPage)(page, model));
|
|
164
|
+
break;
|
|
165
|
+
case 'otp_request':
|
|
166
|
+
files.push((0, page_otp_request_1.generateOtpRequestPage)(page));
|
|
167
|
+
break;
|
|
168
|
+
case 'otp_entry':
|
|
169
|
+
files.push((0, page_otp_entry_1.generateOtpEntryPage)(page));
|
|
170
|
+
break;
|
|
171
|
+
case 'custom':
|
|
172
|
+
files.push((0, page_custom_1.generateCustomPage)(page));
|
|
173
|
+
break;
|
|
104
174
|
default:
|
|
105
|
-
if (
|
|
106
|
-
|
|
175
|
+
if (generator_core_1.STANDARD_TEMPLATE_TYPES.includes(page.template_type)) {
|
|
176
|
+
console.warn(`[nxf] template_type '${page.template_type}' is listed as standard but has no generator wired in generator.ts.`);
|
|
107
177
|
}
|
|
108
178
|
break;
|
|
109
179
|
}
|
|
110
180
|
}
|
|
111
|
-
return
|
|
181
|
+
return {
|
|
182
|
+
files,
|
|
183
|
+
widgetWarnings: { missing: resolved.missing },
|
|
184
|
+
};
|
|
112
185
|
}
|
|
113
186
|
//# sourceMappingURL=generator.js.map
|
package/dist/generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":";AAAA,sEAAsE;;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-blog-post.d.ts","sourceRoot":"","sources":["../../src/templates/page-blog-post.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG/E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,aAAa,CAyDhF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-blog-post.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateBlogPostPage = generateBlogPostPage;
|
|
5
|
+
const generator_core_1 = require("@underpeaks/generator-core");
|
|
6
|
+
function generateBlogPostPage(page, model) {
|
|
7
|
+
const routePath = page.slug.replace(/^\//, '');
|
|
8
|
+
const className = model ? (0, generator_core_1.modelToClassName)(model.name) : 'Item';
|
|
9
|
+
const fileName = model ? (0, generator_core_1.modelToFileName)(model.name) : 'item';
|
|
10
|
+
const pk = model ? (0, generator_core_1.getPrimaryKey)(model) : null;
|
|
11
|
+
const pkName = pk?.name ?? 'id';
|
|
12
|
+
const columns = model ? (0, generator_core_1.getVisibleColumns)(model) : [];
|
|
13
|
+
const titleField = columns.find((c) => c.name.includes('title'))?.name ?? columns[0]?.name ?? pkName;
|
|
14
|
+
const bodyField = columns.find((c) => c.name.includes('body') || c.name.includes('content'))?.name ?? null;
|
|
15
|
+
const imageField = columns.find((c) => c.name.includes('image') || c.name.includes('cover'))?.name ?? null;
|
|
16
|
+
const authorField = columns.find((c) => c.name.includes('author'))?.name ?? null;
|
|
17
|
+
const lines = [];
|
|
18
|
+
lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
|
|
19
|
+
lines.push(`// Page: ${page.name} — blog-post`);
|
|
20
|
+
lines.push(`// Presentation layer — generated once, you own this file.`);
|
|
21
|
+
lines.push(`// Regenerate: nxf generate nextjs --include-views`);
|
|
22
|
+
lines.push(``);
|
|
23
|
+
lines.push(`import type { ${className} } from '../../../../generated/types/${fileName}.types'`);
|
|
24
|
+
lines.push(`import { notFound } from 'next/navigation'`);
|
|
25
|
+
lines.push(`import Image from 'next/image'`);
|
|
26
|
+
lines.push(``);
|
|
27
|
+
lines.push(`async function getItem(id: string): Promise<${className} | null> {`);
|
|
28
|
+
lines.push(` const res = await fetch(\`\${process.env.NEXT_PUBLIC_APP_URL}/api/${fileName}/\${id}\`, { cache: 'no-store' })`);
|
|
29
|
+
lines.push(` if (res.status === 404) return null`);
|
|
30
|
+
lines.push(` const json = await res.json()`);
|
|
31
|
+
lines.push(` return json.data`);
|
|
32
|
+
lines.push(`}`);
|
|
33
|
+
lines.push(``);
|
|
34
|
+
lines.push(`interface Props { params: Promise<{ ${pkName}: string }> }`);
|
|
35
|
+
lines.push(``);
|
|
36
|
+
lines.push(`export default async function BlogPostPage({ params }: Props) {`);
|
|
37
|
+
lines.push(` const { ${pkName} } = await params`);
|
|
38
|
+
lines.push(` const item = await getItem(${pkName})`);
|
|
39
|
+
lines.push(` if (!item) notFound()`);
|
|
40
|
+
lines.push(` return (`);
|
|
41
|
+
lines.push(` <article className="container mx-auto px-4 py-8 max-w-2xl">`);
|
|
42
|
+
if (imageField) {
|
|
43
|
+
lines.push(` {item.${imageField} && (`);
|
|
44
|
+
lines.push(` <div className="relative w-full h-64 rounded-xl overflow-hidden mb-8">`);
|
|
45
|
+
lines.push(` <Image src={item.${imageField} as string} alt="" fill className="object-cover" />`);
|
|
46
|
+
lines.push(` </div>`);
|
|
47
|
+
lines.push(` )}`);
|
|
48
|
+
}
|
|
49
|
+
lines.push(` <h1 className="text-3xl font-bold text-gray-900 mb-4">{item.${titleField}?.toString()}</h1>`);
|
|
50
|
+
if (authorField)
|
|
51
|
+
lines.push(` <p className="text-sm text-gray-500 mb-8">By {item.${authorField}?.toString()}</p>`);
|
|
52
|
+
if (bodyField)
|
|
53
|
+
lines.push(` <div className="prose max-w-none"><p className="text-gray-700 leading-relaxed">{item.${bodyField}?.toString()}</p></div>`);
|
|
54
|
+
lines.push(` </article>`);
|
|
55
|
+
lines.push(` )`);
|
|
56
|
+
lines.push(`}`);
|
|
57
|
+
return {
|
|
58
|
+
path: `app/(presentation)/${routePath}/[${pkName}]/page.tsx`,
|
|
59
|
+
content: lines.join('\n'),
|
|
60
|
+
category: 'customizable',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=page-blog-post.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-blog-post.js","sourceRoot":"","sources":["../../src/templates/page-blog-post.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-calendar.d.ts","sourceRoot":"","sources":["../../src/templates/page-calendar.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG/E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,aAAa,CA8DhF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-calendar.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateCalendarPage = generateCalendarPage;
|
|
5
|
+
const generator_core_1 = require("@underpeaks/generator-core");
|
|
6
|
+
function generateCalendarPage(page, model) {
|
|
7
|
+
const routePath = page.slug.replace(/^\//, '');
|
|
8
|
+
const className = model ? (0, generator_core_1.modelToClassName)(model.name) : 'Item';
|
|
9
|
+
const fileName = model ? (0, generator_core_1.modelToFileName)(model.name) : 'item';
|
|
10
|
+
const pk = model ? (0, generator_core_1.getPrimaryKey)(model) : null;
|
|
11
|
+
const pkName = pk?.name ?? 'id';
|
|
12
|
+
const columns = model ? (0, generator_core_1.getVisibleColumns)(model) : [];
|
|
13
|
+
const titleField = columns.find((c) => c.name.includes('title') || c.name.includes('name'))?.name ?? columns[0]?.name ?? pkName;
|
|
14
|
+
const dateField = columns.find((c) => c.name.includes('date') || c.name.includes('start'))?.name ?? null;
|
|
15
|
+
const modelSlug = model ? model.name.replace('nxf_', '').replace(/_/g, '-') : fileName;
|
|
16
|
+
const lines = [];
|
|
17
|
+
lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
|
|
18
|
+
lines.push(`// Page: ${page.name} — calendar`);
|
|
19
|
+
lines.push(`// Presentation layer — generated once, you own this file.`);
|
|
20
|
+
lines.push(`// Regenerate: nxf generate nextjs --include-views`);
|
|
21
|
+
lines.push(``);
|
|
22
|
+
lines.push(`import type { ${className} } from '../../../generated/types/${fileName}.types'`);
|
|
23
|
+
lines.push(``);
|
|
24
|
+
lines.push(`async function getItems(): Promise<${className}[]> {`);
|
|
25
|
+
lines.push(` const res = await fetch(\`\${process.env.NEXT_PUBLIC_APP_URL}/api/${modelSlug}\`, { cache: 'no-store' })`);
|
|
26
|
+
lines.push(` if (!res.ok) return []`);
|
|
27
|
+
lines.push(` const json = await res.json()`);
|
|
28
|
+
lines.push(` return json.data ?? []`);
|
|
29
|
+
lines.push(`}`);
|
|
30
|
+
lines.push(``);
|
|
31
|
+
lines.push(`export default async function CalendarPage() {`);
|
|
32
|
+
lines.push(` const items = await getItems()`);
|
|
33
|
+
lines.push(` const now = new Date()`);
|
|
34
|
+
lines.push(` return (`);
|
|
35
|
+
lines.push(` <div className="container mx-auto px-4 py-8">`);
|
|
36
|
+
lines.push(` <h1 className="text-2xl font-bold mb-6">${page.name}</h1>`);
|
|
37
|
+
lines.push(` <div className="bg-white border border-gray-200 rounded-xl overflow-hidden">`);
|
|
38
|
+
lines.push(` <div className="flex items-center justify-between px-6 py-4 border-b border-gray-100">`);
|
|
39
|
+
lines.push(` <h2 className="font-semibold">{now.toLocaleString('default', { month: 'long', year: 'numeric' })}</h2>`);
|
|
40
|
+
lines.push(` </div>`);
|
|
41
|
+
lines.push(` <div className="p-4 flex flex-col gap-2">`);
|
|
42
|
+
lines.push(` {items.length === 0 ? (`);
|
|
43
|
+
lines.push(` <p className="text-center text-gray-400 py-8">No events yet.</p>`);
|
|
44
|
+
lines.push(` ) : (`);
|
|
45
|
+
lines.push(` items.map((item) => (`);
|
|
46
|
+
lines.push(` <div key={item.${pkName}} className="flex items-center gap-3 px-4 py-3 bg-gray-50 rounded-lg">`);
|
|
47
|
+
lines.push(` <div className="w-2 h-2 rounded-full bg-black shrink-0" />`);
|
|
48
|
+
lines.push(` <span className="text-sm font-medium">{item.${titleField}?.toString() ?? '—'}</span>`);
|
|
49
|
+
if (dateField) {
|
|
50
|
+
lines.push(` <span className="text-xs text-gray-400 ml-auto">{item.${dateField}?.toString() ?? ''}</span>`);
|
|
51
|
+
}
|
|
52
|
+
lines.push(` </div>`);
|
|
53
|
+
lines.push(` ))`);
|
|
54
|
+
lines.push(` )}`);
|
|
55
|
+
lines.push(` </div>`);
|
|
56
|
+
lines.push(` </div>`);
|
|
57
|
+
lines.push(` </div>`);
|
|
58
|
+
lines.push(` )`);
|
|
59
|
+
lines.push(`}`);
|
|
60
|
+
return {
|
|
61
|
+
path: `app/(presentation)/${routePath}/page.tsx`,
|
|
62
|
+
content: lines.join('\n'),
|
|
63
|
+
category: 'customizable',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=page-calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-calendar.js","sourceRoot":"","sources":["../../src/templates/page-calendar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-cart.d.ts","sourceRoot":"","sources":["../../src/templates/page-cart.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAExE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAkC7D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-cart.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateCartPage = generateCartPage;
|
|
5
|
+
function generateCartPage(page) {
|
|
6
|
+
const routePath = page.slug.replace(/^\//, '');
|
|
7
|
+
const lines = [];
|
|
8
|
+
lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
|
|
9
|
+
lines.push(`// Page: ${page.name} — cart`);
|
|
10
|
+
lines.push(`// Presentation layer — generated once, you own this file.`);
|
|
11
|
+
lines.push(`// Regenerate: nxf generate nextjs --include-views`);
|
|
12
|
+
lines.push(``);
|
|
13
|
+
lines.push(`'use client'`);
|
|
14
|
+
lines.push(`import Link from 'next/link'`);
|
|
15
|
+
lines.push(``);
|
|
16
|
+
lines.push(`export default function CartPage() {`);
|
|
17
|
+
lines.push(` return (`);
|
|
18
|
+
lines.push(` <div className="container mx-auto px-4 py-8 max-w-2xl">`);
|
|
19
|
+
lines.push(` <h1 className="text-2xl font-bold mb-6">Cart</h1>`);
|
|
20
|
+
lines.push(` <div className="bg-white border border-gray-200 rounded-xl p-8 text-center">`);
|
|
21
|
+
lines.push(` <div className="text-5xl mb-4">🛒</div>`);
|
|
22
|
+
lines.push(` <p className="text-gray-500 mb-6">Your cart is empty</p>`);
|
|
23
|
+
lines.push(` <Link href="/products"`);
|
|
24
|
+
lines.push(` className="px-6 py-2.5 bg-black text-white rounded-lg text-sm font-medium hover:bg-gray-800 transition">`);
|
|
25
|
+
lines.push(` Continue Shopping`);
|
|
26
|
+
lines.push(` </Link>`);
|
|
27
|
+
lines.push(` </div>`);
|
|
28
|
+
lines.push(` </div>`);
|
|
29
|
+
lines.push(` )`);
|
|
30
|
+
lines.push(`}`);
|
|
31
|
+
return {
|
|
32
|
+
path: `app/(presentation)/${routePath}/page.tsx`,
|
|
33
|
+
content: lines.join('\n'),
|
|
34
|
+
category: 'customizable',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=page-cart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-cart.js","sourceRoot":"","sources":["../../src/templates/page-cart.ts"],"names":[],"mappings":";AAAA,gFAAgF;;AAIhF,4CAkCC;AAlCD,SAAgB,gBAAgB,CAAC,IAAa;IAC5C,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,2CAA2C,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,SAAS,CAAC,CAAA;IAC1C,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;IACxE,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;IAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;IAClD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;IACzE,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAA;IACrE,KAAK,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAA;IAChG,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IAC7D,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;IAC9E,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC5C,KAAK,CAAC,IAAI,CAAC,oHAAoH,CAAC,CAAA;IAChI,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IACzC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC7B,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-chat.d.ts","sourceRoot":"","sources":["../../src/templates/page-chat.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAExE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CA8D7D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-chat.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateChatPage = generateChatPage;
|
|
5
|
+
function generateChatPage(page) {
|
|
6
|
+
const routePath = page.slug.replace(/^\//, '');
|
|
7
|
+
const lines = [];
|
|
8
|
+
lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
|
|
9
|
+
lines.push(`// Page: ${page.name} — chat`);
|
|
10
|
+
lines.push(`// Presentation layer — generated once, you own this file.`);
|
|
11
|
+
lines.push(`// Regenerate: nxf generate nextjs --include-views`);
|
|
12
|
+
lines.push(``);
|
|
13
|
+
lines.push(`'use client'`);
|
|
14
|
+
lines.push(`import { useState, useRef, useEffect } from 'react'`);
|
|
15
|
+
lines.push(``);
|
|
16
|
+
lines.push(`export default function ChatPage() {`);
|
|
17
|
+
lines.push(` const [messages, setMessages] = useState<{ text: string; isMe: boolean }[]>([])`);
|
|
18
|
+
lines.push(` const [input, setInput] = useState('')`);
|
|
19
|
+
lines.push(` const bottomRef = useRef<HTMLDivElement>(null)`);
|
|
20
|
+
lines.push(``);
|
|
21
|
+
lines.push(` useEffect(() => {`);
|
|
22
|
+
lines.push(` bottomRef.current?.scrollIntoView({ behavior: 'smooth' })`);
|
|
23
|
+
lines.push(` }, [messages])`);
|
|
24
|
+
lines.push(``);
|
|
25
|
+
lines.push(` function send() {`);
|
|
26
|
+
lines.push(` if (!input.trim()) return`);
|
|
27
|
+
lines.push(` setMessages((prev) => [...prev, { text: input.trim(), isMe: true }])`);
|
|
28
|
+
lines.push(` setInput('')`);
|
|
29
|
+
lines.push(` }`);
|
|
30
|
+
lines.push(``);
|
|
31
|
+
lines.push(` return (`);
|
|
32
|
+
lines.push(` <div className="flex flex-col h-[calc(100vh-4rem)]">`);
|
|
33
|
+
lines.push(` <div className="flex-1 overflow-y-auto p-4 flex flex-col gap-3">`);
|
|
34
|
+
lines.push(` {messages.length === 0 && (`);
|
|
35
|
+
lines.push(` <p className="text-center text-gray-400 text-sm mt-8">No messages yet. Say hello!</p>`);
|
|
36
|
+
lines.push(` )}`);
|
|
37
|
+
lines.push(` {messages.map((msg, i) => (`);
|
|
38
|
+
lines.push(` <div key={i} className={\`flex \${msg.isMe ? 'justify-end' : 'justify-start'}\`}>`);
|
|
39
|
+
lines.push(` <div className={\`max-w-xs px-4 py-2 rounded-2xl text-sm \${msg.isMe ? 'bg-black text-white' : 'bg-gray-100 text-gray-900'}\`}>`);
|
|
40
|
+
lines.push(` {msg.text}`);
|
|
41
|
+
lines.push(` </div>`);
|
|
42
|
+
lines.push(` </div>`);
|
|
43
|
+
lines.push(` ))}`);
|
|
44
|
+
lines.push(` <div ref={bottomRef} />`);
|
|
45
|
+
lines.push(` </div>`);
|
|
46
|
+
lines.push(` <div className="border-t border-gray-200 p-4 flex gap-2">`);
|
|
47
|
+
lines.push(` <input value={input} onChange={(e) => setInput(e.target.value)}`);
|
|
48
|
+
lines.push(` onKeyDown={(e) => e.key === 'Enter' && send()}`);
|
|
49
|
+
lines.push(` placeholder="Type a message..."`);
|
|
50
|
+
lines.push(` className="flex-1 px-4 py-2 border border-gray-200 rounded-full text-sm focus:outline-none focus:ring-2 focus:ring-black" />`);
|
|
51
|
+
lines.push(` <button onClick={send}`);
|
|
52
|
+
lines.push(` className="w-10 h-10 rounded-full bg-black text-white flex items-center justify-center hover:bg-gray-800 transition">`);
|
|
53
|
+
lines.push(` ↑`);
|
|
54
|
+
lines.push(` </button>`);
|
|
55
|
+
lines.push(` </div>`);
|
|
56
|
+
lines.push(` </div>`);
|
|
57
|
+
lines.push(` )`);
|
|
58
|
+
lines.push(`}`);
|
|
59
|
+
return {
|
|
60
|
+
path: `app/(presentation)/${routePath}/page.tsx`,
|
|
61
|
+
content: lines.join('\n'),
|
|
62
|
+
category: 'customizable',
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=page-chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-chat.js","sourceRoot":"","sources":["../../src/templates/page-chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-checkout.d.ts","sourceRoot":"","sources":["../../src/templates/page-checkout.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAExE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAsDjE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/page-checkout.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateCheckoutPage = generateCheckoutPage;
|
|
5
|
+
function generateCheckoutPage(page) {
|
|
6
|
+
const routePath = page.slug.replace(/^\//, '');
|
|
7
|
+
const lines = [];
|
|
8
|
+
lines.push(`// GENERATED BY UNDERPEAKS CODEGEN v1.0.0`);
|
|
9
|
+
lines.push(`// Page: ${page.name} — checkout`);
|
|
10
|
+
lines.push(`// Presentation layer — generated once, you own this file.`);
|
|
11
|
+
lines.push(`// Regenerate: nxf generate nextjs --include-views`);
|
|
12
|
+
lines.push(``);
|
|
13
|
+
lines.push(`'use client'`);
|
|
14
|
+
lines.push(`import { useState } from 'react'`);
|
|
15
|
+
lines.push(`import { useRouter } from 'next/navigation'`);
|
|
16
|
+
lines.push(``);
|
|
17
|
+
lines.push(`export default function CheckoutPage() {`);
|
|
18
|
+
lines.push(` const router = useRouter()`);
|
|
19
|
+
lines.push(` const [step, setStep] = useState(0)`);
|
|
20
|
+
lines.push(` const steps = ['Contact', 'Shipping', 'Payment']`);
|
|
21
|
+
lines.push(` return (`);
|
|
22
|
+
lines.push(` <div className="container mx-auto px-4 py-8 max-w-2xl">`);
|
|
23
|
+
lines.push(` <h1 className="text-2xl font-bold mb-6">Checkout</h1>`);
|
|
24
|
+
lines.push(` <div className="flex gap-2 mb-8">`);
|
|
25
|
+
lines.push(` {steps.map((s, i) => (`);
|
|
26
|
+
lines.push(` <div key={s} className="flex items-center gap-2">`);
|
|
27
|
+
lines.push(` <div className={\`w-8 h-8 rounded-full flex items-center justify-center text-sm font-medium \${i <= step ? 'bg-black text-white' : 'bg-gray-100 text-gray-400'}\`}>{i + 1}</div>`);
|
|
28
|
+
lines.push(` <span className="text-sm text-gray-600">{s}</span>`);
|
|
29
|
+
lines.push(` {i < steps.length - 1 && <div className="w-8 h-px bg-gray-200" />}`);
|
|
30
|
+
lines.push(` </div>`);
|
|
31
|
+
lines.push(` ))}`);
|
|
32
|
+
lines.push(` </div>`);
|
|
33
|
+
lines.push(` <div className="bg-white border border-gray-200 rounded-xl p-6">`);
|
|
34
|
+
lines.push(` <p className="text-gray-500 text-sm">Step {step + 1}: {steps[step]}</p>`);
|
|
35
|
+
lines.push(` <div className="mt-4 flex gap-3">`);
|
|
36
|
+
lines.push(` {step > 0 && (`);
|
|
37
|
+
lines.push(` <button onClick={() => setStep((s) => s - 1)}`);
|
|
38
|
+
lines.push(` className="flex-1 py-2.5 border border-gray-200 rounded-lg text-sm font-medium hover:bg-gray-50 transition">`);
|
|
39
|
+
lines.push(` Back`);
|
|
40
|
+
lines.push(` </button>`);
|
|
41
|
+
lines.push(` )}`);
|
|
42
|
+
lines.push(` <button onClick={() => step < 2 ? setStep((s) => s + 1) : router.push('/orders')}`);
|
|
43
|
+
lines.push(` className="flex-1 py-2.5 bg-black text-white rounded-lg text-sm font-medium hover:bg-gray-800 transition">`);
|
|
44
|
+
lines.push(` {step === 2 ? 'Place Order' : 'Continue'}`);
|
|
45
|
+
lines.push(` </button>`);
|
|
46
|
+
lines.push(` </div>`);
|
|
47
|
+
lines.push(` </div>`);
|
|
48
|
+
lines.push(` </div>`);
|
|
49
|
+
lines.push(` )`);
|
|
50
|
+
lines.push(`}`);
|
|
51
|
+
return {
|
|
52
|
+
path: `app/(presentation)/${routePath}/page.tsx`,
|
|
53
|
+
content: lines.join('\n'),
|
|
54
|
+
category: 'customizable',
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=page-checkout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-checkout.js","sourceRoot":"","sources":["../../src/templates/page-checkout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-contact.d.ts","sourceRoot":"","sources":["../../src/templates/page-contact.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAExE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAmFhE"}
|