your-ai-workflow-firebase-os 1.2.21 → 1.2.22
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/your-ai-workflow-firebase-os.cjs.js +108 -160
- package/dist/your-ai-workflow-firebase-os.es.js +395 -476
- package/package.json +1 -1
- package/scripts/postinstall.js +14 -0
- package/src/prompts/pages/publicPage.ts +28 -32
- package/src/prompts/tabs/crud/admin.ts +18 -42
- package/src/prompts/tabs/crud/private.ts +19 -45
- package/src/prompts/tabs/crud/shared.ts +19 -43
- package/src/templates/PrivatePageTemplate.tsx +3 -3
package/package.json
CHANGED
package/scripts/postinstall.js
CHANGED
|
@@ -114,6 +114,20 @@ copyConfig('forms/contactForm.config.ts', 'contactForm.config.ts');
|
|
|
114
114
|
copyConfig('forms/supportForm.config.ts', 'supportForm.config.ts');
|
|
115
115
|
console.log(' ✓ Copied configuration files to your src/your-ai-workflow-firebase-os/configs directory');
|
|
116
116
|
|
|
117
|
+
// Copy microcomponents examples
|
|
118
|
+
const microcomponentsSourceDir = path.join(__dirname, '..', 'src', 'microcomponents');
|
|
119
|
+
const microcomponentsDestDir = path.join(fbosDir, 'microcomponents');
|
|
120
|
+
if (fs.existsSync(microcomponentsSourceDir)) {
|
|
121
|
+
if (!fs.existsSync(microcomponentsDestDir)) fs.mkdirSync(microcomponentsDestDir, { recursive: true });
|
|
122
|
+
const files = fs.readdirSync(microcomponentsSourceDir);
|
|
123
|
+
for (const file of files) {
|
|
124
|
+
if (file.endsWith('.tsx')) {
|
|
125
|
+
fs.copyFileSync(path.join(microcomponentsSourceDir, file), path.join(microcomponentsDestDir, file));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
console.log(' ✓ Copied microcomponent examples to your src/your-ai-workflow-firebase-os/microcomponents directory');
|
|
129
|
+
}
|
|
130
|
+
|
|
117
131
|
// Read and rewrite Home.tsx
|
|
118
132
|
const sourceHomePath = path.join(__dirname, '..', 'src', 'pages', 'Home.tsx');
|
|
119
133
|
if (fs.existsSync(sourceHomePath)) {
|
|
@@ -3,42 +3,38 @@ export const publicPagePrompt = (config: any, forms: string[] = []) => {
|
|
|
3
3
|
.toLowerCase().replace(/[^a-z0-9]+/g, '_');
|
|
4
4
|
const microName = `${parsedPageName.charAt(0).toUpperCase()}${parsedPageName.slice(1)}Content`;
|
|
5
5
|
|
|
6
|
-
return `
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
\`\`\`json
|
|
12
|
-
${JSON.stringify({
|
|
13
|
-
pageName: config.pageName,
|
|
14
|
-
pageTitle: config.pageTitle,
|
|
15
|
-
route: config.route,
|
|
16
|
-
template: config.template,
|
|
17
|
-
}, null, 2)}
|
|
18
|
-
\`\`\`
|
|
6
|
+
return `Create a microcomponent for the Public Landing Page: \`${config.pageName}\`.
|
|
7
|
+
|
|
8
|
+
### ── Context ────────────────────────────────────────────────────────────────
|
|
9
|
+
- **Route**: \`${config.route}\`
|
|
10
|
+
- **Examples Folder**: Check \`src/your-ai-workflow-firebase-os/microcomponents/\` for reference examples of how to build and insert microcomponents.
|
|
19
11
|
|
|
20
12
|
### ── Available Forms ────────────────────────────────────────────────────────
|
|
21
|
-
The following public forms are available in the system. **These are for your information only—do NOT use them unless specifically needed.** Your priority is to listen to the user's specific input and decide if a particular modal, form, or component is actually required for the context of this page:
|
|
22
13
|
${forms.length > 0 ? forms.map(f => `- ${f}`).join('\n') : '- No public forms found'}
|
|
14
|
+
Use these only if specifically requested by the user.
|
|
15
|
+
|
|
16
|
+
### ── Your Task ──────────────────────────────────────────────────────────────
|
|
17
|
+
1. **Create Microcomponent**: Build \`src/microcomponents/${microName}.tsx\`.
|
|
18
|
+
2. **Build Content**: Implement landing page content (hero sections, features, etc).
|
|
19
|
+
3. **Register Route**: In \`src/App.tsx\`, map your microcomponent to the \`customRoutes\` prop of \`<FirebaseOS>\`:
|
|
20
|
+
|
|
21
|
+
\`\`\`tsx
|
|
22
|
+
import { ${microName} } from './microcomponents/${microName}';
|
|
23
|
+
|
|
24
|
+
// Inside App.tsx:
|
|
25
|
+
<FirebaseOS
|
|
26
|
+
customRoutes={{
|
|
27
|
+
'${config.route}': ${microName}
|
|
28
|
+
}}
|
|
29
|
+
// ...
|
|
30
|
+
/>
|
|
31
|
+
\`\`\`
|
|
23
32
|
|
|
24
|
-
### ──
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
### ── Guardrails ─────────────────────────────────────────────────────────────
|
|
30
|
-
- **DO NOT** modify the outer layout of \`PublicPageTemplate.tsx\` (back buttons, page header, footer, dynamic title).
|
|
31
|
-
- **DO NOT** change the routing or page exports.
|
|
32
|
-
- Focus exclusively on the inner content box using the micro-component strategy.
|
|
33
|
-
|
|
34
|
-
### ── Aesthetic & Performance (Theme System) ───────────────────────────────
|
|
35
|
-
Build with the user's active theme in mind:
|
|
36
|
-
- **CSS Variables**: \`var(--bg-color)\`, \`var(--fg-color)\`, \`var(--accent-color)\`, \`var(--panel-bg)\`, \`var(--panel-border)\`.
|
|
37
|
-
- **Components**: Re-use \`<Button />\`, \`<Input />\`, \`<ConfirmModal />\`, and \`<ContactPopup />\` natively.
|
|
38
|
-
- **Styles**: Use the \`glass-panel\` class for sections and \`text-gradient\` for headers.
|
|
39
|
-
|
|
40
|
-
### ── Important Formatting Rules ──────────────────────────────────────────────
|
|
41
|
-
- **NO REDUNDANT HEADERS**: The parent template already injects a large dynamic page title and action buttons. DO NOT add a main \`<h1>\` or \`<h2>\` page title at the top of your micro-component. Start directly with your cards, lists, or sub-sections.
|
|
33
|
+
### ── Guidelines ─────────────────────────────────────────────────────────────
|
|
34
|
+
- **Use Theme Tokens**: \`var(--bg-color)\`, \`var(--fg-color)\`, \`var(--accent-color)\`, \`var(--panel-border)\`.
|
|
35
|
+
- **Pre-built UI**: Import \`{ Button, Input, ContactPopup }\` from \`your-ai-workflow-firebase-os\`.
|
|
36
|
+
- **Layout**: Use \`glass-panel\` class for sections. DO NOT add redundant \`<h1>\` page titles (the layout handles this).
|
|
37
|
+
- **DO NOT create React Router routes**. Only use the \`customRoutes\` mapping.
|
|
42
38
|
|
|
43
39
|
[WHAT SHOULD I BUILD ON THIS PUBLIC PAGE?]`;
|
|
44
40
|
};
|
|
@@ -3,61 +3,37 @@ export const adminCrudPrompt = (config: any, recordsCollection: string) => {
|
|
|
3
3
|
.toLowerCase().replace(/[^a-z0-9]+/g, '_');
|
|
4
4
|
const microName = `${parsedTabName.charAt(0).toUpperCase()}${parsedTabName.slice(1)}Content`;
|
|
5
5
|
|
|
6
|
-
return `
|
|
7
|
-
|
|
8
|
-
The "infrastructure" (routing, header, database connection) is entirely set up and functioning. Your goal is to design the "Dashboard Content" that lives inside this specific admin view.
|
|
9
|
-
|
|
10
|
-
### ── Current View Configuration ──────────────────────────────────────────────
|
|
11
|
-
\`\`\`json
|
|
12
|
-
${JSON.stringify({
|
|
13
|
-
viewName: config.tabName,
|
|
14
|
-
viewTitle: config.tabTitle,
|
|
15
|
-
route: config.route,
|
|
16
|
-
template: config.template,
|
|
17
|
-
storageEnabled: !!config.storage,
|
|
18
|
-
showActionButton: !!config.showButton,
|
|
19
|
-
buttonStyle: config.buttonAction || 'primary',
|
|
20
|
-
}, null, 2)}
|
|
21
|
-
\`\`\`
|
|
6
|
+
return `Create a microcomponent for the Admin view: \`${config.tabName}\`.
|
|
22
7
|
|
|
23
|
-
### ──
|
|
24
|
-
**
|
|
8
|
+
### ── Context ────────────────────────────────────────────────────────────────
|
|
9
|
+
- **Route**: \`${config.route}\`
|
|
10
|
+
- **Data Collection**: \`${recordsCollection}\`
|
|
11
|
+
- **Storage**: ${config.storage ? "Enabled (admin_files/)" : "Disabled"}
|
|
12
|
+
- **Examples Folder**: Check \`src/your-ai-workflow-firebase-os/microcomponents/\` for reference examples of how to build and insert microcomponents.
|
|
25
13
|
|
|
26
|
-
### ──
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
- **Access Level**: Full Admin Access. This view is only visible to users with the 'admin' role.
|
|
14
|
+
### ── Your Task ──────────────────────────────────────────────────────────────
|
|
15
|
+
1. **Create Microcomponent**: Build \`src/microcomponents/${microName}.tsx\`. Include \`<DashboardNav />\` from \`your-ai-workflow-firebase-os\` at the top.
|
|
16
|
+
2. **Handle UX/UI**: Implement the required admin dashboard interface (charts, lists, management tools). Write your own Firebase queries using the provided collection. No forms are needed.
|
|
17
|
+
3. **Register Route**: In \`src/App.tsx\`, map your microcomponent to the \`customRoutes\` prop of \`<FirebaseOS>\`:
|
|
31
18
|
|
|
32
|
-
### ── Your Mission ────────────────────────────────────────────────────────────
|
|
33
|
-
1. **Create the Page**: Create a full page component at \`src/pages/\${microName}Page.tsx\`. Include \`<DashboardNav />\` from \`your-ai-workflow-firebase-os\` at the top of the content area.
|
|
34
|
-
2. **Handle UX/UI**: Inside this component, build the interface (lists, charts, management forms, or any feature requested).
|
|
35
|
-
3. **Register the Route**: Open \`src/App.tsx\` and map this component to the \`customRoutes\` prop of \`<FirebaseOS>\`:
|
|
36
19
|
\`\`\`tsx
|
|
37
|
-
import {
|
|
20
|
+
import { ${microName} } from './microcomponents/${microName}';
|
|
38
21
|
|
|
39
22
|
// Inside App.tsx:
|
|
40
23
|
<FirebaseOS
|
|
41
24
|
customRoutes={{
|
|
42
|
-
'
|
|
25
|
+
'${config.route}': ${microName}
|
|
43
26
|
}}
|
|
44
27
|
// ...
|
|
45
28
|
/>
|
|
46
29
|
\`\`\`
|
|
47
30
|
|
|
48
|
-
### ──
|
|
49
|
-
- **
|
|
50
|
-
- **
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
Build with the user's active theme in mind:
|
|
54
|
-
- **CSS Variables**: \`var(--bg-color)\`, \`var(--fg-color)\`, \`var(--accent-color)\`, \`var(--panel-bg)\`, \`var(--panel-border)\`.
|
|
55
|
-
- **Components**: Re-use \`<Button />\`, \`<Input />\`, \`<ConfirmModal />\`, and \`<DashboardNav />\` natively.
|
|
56
|
-
- **Styles**: Use \`glass-panel\` and \`text-gradient\` for a premium look.
|
|
57
|
-
- **Example**: See \`src/microcomponents/AdminExampleContent.tsx\` for a structural reference.
|
|
58
|
-
|
|
59
|
-
### ── Important Formatting Rules ──────────────────────────────────────────────
|
|
60
|
-
- **NO REDUNDANT HEADERS**: The parent template already injects a large dynamic page title and action buttons. DO NOT add a main \`<h1>\` or \`<h2>\` page title at the top of your micro-component. Start directly with your cards, lists, or sub-sections.
|
|
31
|
+
### ── Guidelines ─────────────────────────────────────────────────────────────
|
|
32
|
+
- **Use Theme Tokens**: \`var(--bg-color)\`, \`var(--fg-color)\`, \`var(--accent-color)\`, \`var(--panel-border)\`.
|
|
33
|
+
- **Pre-built UI**: Import \`{ Button, Input, ConfirmModal }\` from \`your-ai-workflow-firebase-os\`.
|
|
34
|
+
- **Layout**: Use \`glass-panel\` class for cards. DO NOT add redundant \`<h1>\` page titles (the layout handles this).
|
|
35
|
+
- **DO NOT create React Router routes**. Only use the \`customRoutes\` mapping.
|
|
61
36
|
|
|
62
37
|
[WHAT FEATURES SHOULD I ADD TO THIS ADMIN VIEW?]`;
|
|
63
38
|
};
|
|
39
|
+
|
|
@@ -1,65 +1,39 @@
|
|
|
1
|
-
export const privateCrudPrompt = (config: any, recordsCollection: string
|
|
1
|
+
export const privateCrudPrompt = (config: any, recordsCollection: string) => {
|
|
2
2
|
const parsedTabName = (config.tabName || config.pageId || 'private_page')
|
|
3
3
|
.toLowerCase().replace(/[^a-z0-9]+/g, '_');
|
|
4
4
|
const microName = `${parsedTabName.charAt(0).toUpperCase()}${parsedTabName.slice(1)}Content`;
|
|
5
5
|
|
|
6
|
-
return `
|
|
6
|
+
return `Create a microcomponent for the Private view: \`${config.tabName}\`.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
### ── Context ────────────────────────────────────────────────────────────────
|
|
9
|
+
- **Route**: \`${config.route}\`
|
|
10
|
+
- **Data Collection**: \`${recordsCollection}\`
|
|
11
|
+
- **Storage**: ${config.storage ? "Enabled (user_files/)" : "Disabled"}
|
|
12
|
+
- **Security**: Data must be filtered by \`where('uid', '==', user.uid)\`.
|
|
13
|
+
- **Examples Folder**: Check \`src/your-ai-workflow-firebase-os/microcomponents/\` for reference examples of how to build and insert microcomponents.
|
|
9
14
|
|
|
10
|
-
### ──
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
viewTitle: config.tabTitle,
|
|
15
|
-
route: config.route,
|
|
16
|
-
template: config.template,
|
|
17
|
-
storageEnabled: !!config.storage,
|
|
18
|
-
showActionButton: !!config.showButton,
|
|
19
|
-
availablePrivateForms: forms,
|
|
20
|
-
}, null, 2)}
|
|
21
|
-
\`\`\`
|
|
22
|
-
|
|
23
|
-
### ── Available Forms ────────────────────────────────────────────────────────
|
|
24
|
-
The following private forms are available in the system. **These are for your information only—do NOT use them unless specifically needed.** Your priority is to listen to the user's specific input and decide if a particular modal, form, or component is actually required for the context of this page:
|
|
25
|
-
${forms.length > 0 ? forms.map(f => `- ${f}`).join('\n') : '- No private forms found'}
|
|
26
|
-
|
|
27
|
-
### ── Data & Storage Architecture ─────────────────────────────────────────────
|
|
28
|
-
Every user sees their own unique data on this page. The system is rigged to handle this isolation:
|
|
29
|
-
- **Firestore Collection**: \`${recordsCollection}\`. The template already filters this by \`uid == current_user.uid\`. Use this for all record storage.
|
|
30
|
-
- **Storage Layer**: ${config.storage ? "Enabled. User files are saved to \`user_files/\` and strictly isolated by user ID." : "Disabled for this view."}
|
|
31
|
-
- **Access Level**: Private. Only the owner of the data can view or modify these records.
|
|
15
|
+
### ── Your Task ──────────────────────────────────────────────────────────────
|
|
16
|
+
1. **Create Microcomponent**: Build \`src/microcomponents/${microName}.tsx\`. Include \`<DashboardNav />\` from \`your-ai-workflow-firebase-os\` at the top.
|
|
17
|
+
2. **Handle UX/UI**: Implement the required private dashboard interface (charts, lists, management tools). Write your own Firebase queries using the provided collection. No forms are needed.
|
|
18
|
+
3. **Register Route**: In \`src/App.tsx\`, map your microcomponent to the \`customRoutes\` prop of \`<FirebaseOS>\`:
|
|
32
19
|
|
|
33
|
-
### ── Your Mission ────────────────────────────────────────────────────────────
|
|
34
|
-
1. **Create the Page**: Create a full page component at \`src/pages/\${microName}Page.tsx\`. Include \`<DashboardNav />\` from \`your-ai-workflow-firebase-os\` at the top of the content area.
|
|
35
|
-
2. **Handle UX/UI**: Inside this component, build the interface (lists, charts, forms, etc).
|
|
36
|
-
3. **Register the Route**: Open \`src/App.tsx\` and map this component to the \`customRoutes\` prop of \`<FirebaseOS>\`:
|
|
37
20
|
\`\`\`tsx
|
|
38
|
-
import {
|
|
21
|
+
import { ${microName} } from './microcomponents/${microName}';
|
|
39
22
|
|
|
40
23
|
// Inside App.tsx:
|
|
41
24
|
<FirebaseOS
|
|
42
25
|
customRoutes={{
|
|
43
|
-
'
|
|
26
|
+
'${config.route}': ${microName}
|
|
44
27
|
}}
|
|
45
28
|
// ...
|
|
46
29
|
/>
|
|
47
30
|
\`\`\`
|
|
48
31
|
|
|
49
|
-
### ──
|
|
50
|
-
- **
|
|
51
|
-
- **
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
### ── Aesthetic & Performance (Theme System) ───────────────────────────────
|
|
55
|
-
Build with the user's active theme in mind:
|
|
56
|
-
- **CSS Variables**: Use \`var(--bg-color)\`, \`var(--fg-color)\`, \`var(--accent-color)\`, \`var(--panel-bg)\`, \`var(--panel-border)\`.
|
|
57
|
-
- **Components**: Re-use \`<Button />\`, \`<Input />\`, \`<ConfirmModal />\`, and \`<DashboardNav />\` natively.
|
|
58
|
-
- **Styles**: Use \`glass-panel\` and \`text-gradient\` for a premium look.
|
|
59
|
-
- **Example**: See \`src/microcomponents/PrivateExampleContent.tsx\` for a structural reference.
|
|
60
|
-
|
|
61
|
-
### ── Important Formatting Rules ──────────────────────────────────────────────
|
|
62
|
-
- **NO REDUNDANT HEADERS**: The parent template already injects a large dynamic page title and action buttons. DO NOT add a main \`<h1>\` or \`<h2>\` page title at the top of your micro-component. Start directly with your cards, lists, or sub-sections.
|
|
32
|
+
### ── Guidelines ─────────────────────────────────────────────────────────────
|
|
33
|
+
- **Use Theme Tokens**: \`var(--bg-color)\`, \`var(--fg-color)\`, \`var(--accent-color)\`, \`var(--panel-border)\`.
|
|
34
|
+
- **Pre-built UI**: Import \`{ Button, Input, ConfirmModal }\` from \`your-ai-workflow-firebase-os\`.
|
|
35
|
+
- **Layout**: Use \`glass-panel\` class for cards. DO NOT add redundant \`<h1>\` page titles (the layout handles this).
|
|
36
|
+
- **DO NOT create React Router routes**. Only use the \`customRoutes\` mapping.
|
|
63
37
|
|
|
64
38
|
[WHAT SHOULD I BUILD INSIDE THIS PRIVATE VIEW?]`;
|
|
65
39
|
};
|
|
@@ -3,61 +3,37 @@ export const sharedCrudPrompt = (config: any, recordsCollection: string) => {
|
|
|
3
3
|
.toLowerCase().replace(/[^a-z0-9]+/g, '_');
|
|
4
4
|
const microName = `${parsedTabName.charAt(0).toUpperCase()}${parsedTabName.slice(1)}Content`;
|
|
5
5
|
|
|
6
|
-
return `
|
|
6
|
+
return `Create a microcomponent for the Shared view: \`${config.tabName}\`.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
### ── Context ────────────────────────────────────────────────────────────────
|
|
9
|
+
- **Route**: \`${config.route}\`
|
|
10
|
+
- **Data Collection**: \`${recordsCollection}\`
|
|
11
|
+
- **Storage**: ${config.storage ? "Enabled (mem_files/)" : "Disabled"}
|
|
12
|
+
- **Security**: Data is visible to all authenticated members. Only admins and the original creator can edit/delete.
|
|
13
|
+
- **Examples Folder**: Check \`src/your-ai-workflow-firebase-os/microcomponents/\` for reference examples of how to build and insert microcomponents.
|
|
9
14
|
|
|
10
|
-
### ──
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
viewTitle: config.tabTitle,
|
|
15
|
-
route: config.route,
|
|
16
|
-
template: config.template,
|
|
17
|
-
storageEnabled: !!config.storage,
|
|
18
|
-
showActionButton: !!config.showButton,
|
|
19
|
-
}, null, 2)}
|
|
20
|
-
\`\`\`
|
|
21
|
-
|
|
22
|
-
### ── Note on Forms ──────────────────────────────────────────────────────────
|
|
23
|
-
**No forms are needed for this view.** Focus on building the collaborative features and shared content areas requested by the user.
|
|
24
|
-
|
|
25
|
-
### ── Data & Storage Architecture ─────────────────────────────────────────────
|
|
26
|
-
All logged-in members share the data on this page. The system is configured for collaboration:
|
|
27
|
-
- **Firestore Collection**: \`${recordsCollection}\`. All authenticated users can read and create records here. The template ensures only creators can edit/delete their own items.
|
|
28
|
-
- **Storage Layer**: ${config.storage ? "Enabled. Shared files are saved to \`mem_files/\` and are visible to all members." : "Disabled for this view."}
|
|
29
|
-
- **Access Level**: Shared Member Access. Requires authentication.
|
|
15
|
+
### ── Your Task ──────────────────────────────────────────────────────────────
|
|
16
|
+
1. **Create Microcomponent**: Build \`src/microcomponents/${microName}.tsx\`. Include \`<DashboardNav />\` from \`your-ai-workflow-firebase-os\` at the top.
|
|
17
|
+
2. **Handle UX/UI**: Implement the required shared dashboard interface (charts, lists, management tools). Write your own Firebase queries using the provided collection. No forms are needed.
|
|
18
|
+
3. **Register Route**: In \`src/App.tsx\`, map your microcomponent to the \`customRoutes\` prop of \`<FirebaseOS>\`:
|
|
30
19
|
|
|
31
|
-
### ── Your Mission ────────────────────────────────────────────────────────────
|
|
32
|
-
1. **Create the Page**: Create a full page component at \`src/pages/\${microName}Page.tsx\`. Include \`<DashboardNav />\` from \`your-ai-workflow-firebase-os\` at the top of the content area.
|
|
33
|
-
2. **Handle UX/UI**: Inside this component, build the collaborative interface (group lists, message boards, shared resource trackers).
|
|
34
|
-
3. **Register the Route**: Open \`src/App.tsx\` and map this component to the \`customRoutes\` prop of \`<FirebaseOS>\`:
|
|
35
20
|
\`\`\`tsx
|
|
36
|
-
import {
|
|
21
|
+
import { ${microName} } from './microcomponents/${microName}';
|
|
37
22
|
|
|
38
23
|
// Inside App.tsx:
|
|
39
24
|
<FirebaseOS
|
|
40
25
|
customRoutes={{
|
|
41
|
-
'
|
|
26
|
+
'${config.route}': ${microName}
|
|
42
27
|
}}
|
|
43
28
|
// ...
|
|
44
29
|
/>
|
|
45
30
|
\`\`\`
|
|
46
31
|
|
|
47
|
-
### ──
|
|
48
|
-
- **
|
|
49
|
-
- **
|
|
50
|
-
- **
|
|
51
|
-
|
|
52
|
-
### ── Aesthetic & Performance (Theme System) ───────────────────────────────
|
|
53
|
-
Build with the user's active theme in mind:
|
|
54
|
-
- **CSS Variables**: \`var(--bg-color)\`, \`var(--fg-color)\`, \`var(--accent-color)\`, \`var(--panel-bg)\`, \`var(--panel-border)\`.
|
|
55
|
-
- **Components**: Re-use \`<Button />\`, \`<Input />\`, \`<ConfirmModal />\`, and \`<DashboardNav />\` natively.
|
|
56
|
-
- **Styles**: Use \`glass-panel\` and \`text-gradient\` for a premium look.
|
|
57
|
-
- **Example**: See \`src/microcomponents/SharedExampleContent.tsx\` for a structural reference.
|
|
58
|
-
|
|
59
|
-
### ── Important Formatting Rules ──────────────────────────────────────────────
|
|
60
|
-
- **NO REDUNDANT HEADERS**: The parent template already injects a large dynamic page title and action buttons. DO NOT add a main \`<h1>\` or \`<h2>\` page title at the top of your micro-component. Start directly with your cards, lists, or sub-sections.
|
|
32
|
+
### ── Guidelines ─────────────────────────────────────────────────────────────
|
|
33
|
+
- **Use Theme Tokens**: \`var(--bg-color)\`, \`var(--fg-color)\`, \`var(--accent-color)\`, \`var(--panel-border)\`.
|
|
34
|
+
- **Pre-built UI**: Import \`{ Button, Input, ConfirmModal }\` from \`your-ai-workflow-firebase-os\`.
|
|
35
|
+
- **Layout**: Use \`glass-panel\` class for cards. DO NOT add redundant \`<h1>\` page titles (the layout handles this).
|
|
36
|
+
- **DO NOT create React Router routes**. Only use the \`customRoutes\` mapping.
|
|
61
37
|
|
|
62
|
-
[WHAT
|
|
38
|
+
[WHAT FEATURES SHOULD I ADD TO THIS SHARED VIEW?]`;
|
|
63
39
|
};
|
|
@@ -56,7 +56,7 @@ export function PrivatePageTemplate({ config }: { config: any }) {
|
|
|
56
56
|
const [editNote, setEditNote] = useState('');
|
|
57
57
|
const [editFields, setEditFields] = useState<{key: string; value: string}[]>([]);
|
|
58
58
|
const fileInputRef = useRef<HTMLInputElement>(null);
|
|
59
|
-
|
|
59
|
+
|
|
60
60
|
|
|
61
61
|
const parsedTabName = (config.tabName || config.pageId || 'private_page')
|
|
62
62
|
.toLowerCase().replace(/[^a-z0-9]+/g, '_');
|
|
@@ -65,7 +65,7 @@ export function PrivatePageTemplate({ config }: { config: any }) {
|
|
|
65
65
|
useEffect(() => {
|
|
66
66
|
document.title = config.tabTitle || config.tabName || themeConfig.appName || 'Firebase OS';
|
|
67
67
|
getDocs(collection(db, 'sys_forms')).then(snap => {
|
|
68
|
-
|
|
68
|
+
|
|
69
69
|
});
|
|
70
70
|
}, [config.tabTitle, config.tabName, themeConfig.appName]);
|
|
71
71
|
|
|
@@ -411,7 +411,7 @@ export function PrivatePageTemplate({ config }: { config: any }) {
|
|
|
411
411
|
};
|
|
412
412
|
|
|
413
413
|
// ── Prompt text ───────────────────────────────────────────────────────────
|
|
414
|
-
const promptText = privateCrudPrompt(config, recordsCollection
|
|
414
|
+
const promptText = privateCrudPrompt(config, recordsCollection);
|
|
415
415
|
|
|
416
416
|
const handleCopyPrompt = () => {
|
|
417
417
|
navigator.clipboard.writeText(promptText);
|