From ad637fd8b4f83da7bb5a4284db32c4043114d7b4 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 10 Jul 2026 20:27:26 -0400 Subject: [PATCH] x --- .../components/page-builder/HeroV2Form.tsx | 159 ++++++++++++++++++ .../components/page-builder/UspBarForm.tsx | 146 ++++++++++++++++ apps/admin/src/pages/PageBuilderPage.tsx | 25 +++ apps/admin/src/pages/SystemSettingsPage.tsx | 18 +- apps/admin/src/pages/ThemeSettingsPage.tsx | 13 +- apps/backend/src/routes/pages.ts | 9 +- apps/mcp-server/index.ts | 11 +- apps/spa/src/components/DynamicHeroV2.tsx | 110 ++++++++++++ .../src/components/DynamicPageRenderer.tsx | 6 + apps/spa/src/components/DynamicUspBar.tsx | 55 ++++++ apps/spa/src/components/ThemeInjector.tsx | 5 + apps/website/src/app/[lang]/layout.tsx | 16 +- apps/website/src/app/globals.css | 41 +++-- .../dynamic/DynamicPageRenderer.tsx | 148 +++++++++++++++- packages/types/index.ts | 27 ++- .../06488f6a-d9da-4fb9-91b2-24c0fc39276f.png | Bin 0 -> 1429877 bytes .../3ec17ae5-f3f7-4a40-8360-bfc39e2eb9b2.png | Bin 0 -> 1721770 bytes .../423a7d0c-c351-4412-b469-a41b457a3c5c.png | Bin 0 -> 1708197 bytes .../5d5b62eb-ca8a-4696-a965-6126bf5360f1.png | Bin 0 -> 1443679 bytes .../5f97b29b-15e8-48b3-aac6-eb638ca34afd.png | Bin 0 -> 1649537 bytes .../83e5c453-7acb-4a40-ad31-c9afa55cfd0d.png | Bin 0 -> 1775443 bytes .../9d2cbbd7-147d-433c-bb6b-1d5886bcef8b.png | Bin 0 -> 1774132 bytes .../ab39ee58-0c6b-426e-9cee-a9f3b2f2a5e2.png | Bin 0 -> 1689591 bytes .../c382cc84-203f-49e7-aa85-ffffc551c582.png | Bin 0 -> 1552429 bytes .../c465fff2-8ccc-4a65-8d66-0de34cfd55ca.png | Bin 0 -> 1752259 bytes .../d45af121-0d95-47fe-91b4-95053815677c.png | Bin 0 -> 1545118 bytes .../d9769c29-0da0-4523-96d7-fbff9bafa0a6.png | Bin 0 -> 1796753 bytes 27 files changed, 764 insertions(+), 25 deletions(-) create mode 100644 apps/admin/src/components/page-builder/HeroV2Form.tsx create mode 100644 apps/admin/src/components/page-builder/UspBarForm.tsx create mode 100644 apps/spa/src/components/DynamicHeroV2.tsx create mode 100644 apps/spa/src/components/DynamicUspBar.tsx create mode 100644 style/06488f6a-d9da-4fb9-91b2-24c0fc39276f.png create mode 100644 style/3ec17ae5-f3f7-4a40-8360-bfc39e2eb9b2.png create mode 100644 style/423a7d0c-c351-4412-b469-a41b457a3c5c.png create mode 100644 style/5d5b62eb-ca8a-4696-a965-6126bf5360f1.png create mode 100644 style/5f97b29b-15e8-48b3-aac6-eb638ca34afd.png create mode 100644 style/83e5c453-7acb-4a40-ad31-c9afa55cfd0d.png create mode 100644 style/9d2cbbd7-147d-433c-bb6b-1d5886bcef8b.png create mode 100644 style/ab39ee58-0c6b-426e-9cee-a9f3b2f2a5e2.png create mode 100644 style/c382cc84-203f-49e7-aa85-ffffc551c582.png create mode 100644 style/c465fff2-8ccc-4a65-8d66-0de34cfd55ca.png create mode 100644 style/d45af121-0d95-47fe-91b4-95053815677c.png create mode 100644 style/d9769c29-0da0-4523-96d7-fbff9bafa0a6.png diff --git a/apps/admin/src/components/page-builder/HeroV2Form.tsx b/apps/admin/src/components/page-builder/HeroV2Form.tsx new file mode 100644 index 0000000..44d3153 --- /dev/null +++ b/apps/admin/src/components/page-builder/HeroV2Form.tsx @@ -0,0 +1,159 @@ +import { UploadCloud, Image as ImageIcon } from 'lucide-react'; +import { type PageSection } from '@homaroma/types'; + +interface HeroV2FormProps { + editingSection: Partial; + editingLang: string; + getLocalizedValue: (payload: any, field: string) => string; + updateLocalizedValue: (field: string, value: string) => void; + updatePayloadValue: (field: string, value: string | number | boolean) => void; + setUploadTarget: (target: { type: 'main' | 'slide'; index?: number } | null) => void; + setIsMediaModalOpen: (open: boolean) => void; +} + +export default function HeroV2Form({ + editingSection, + getLocalizedValue, + updateLocalizedValue, + updatePayloadValue, + setUploadTarget, + setIsMediaModalOpen, +}: HeroV2FormProps) { + return ( +
+ {/* Hero image uploading */} +
+ +
{ + setUploadTarget({ type: 'main' }); + setIsMediaModalOpen(true); + }} + > + {editingSection.payload?.imageUrl ? ( + <> + Hero Background +
+ +
+ + ) : ( +
+ +

Select Image

+
+ )} +
+
+ +
+ + +
+ +
+ updatePayloadValue('showOrnament', e.target.checked)} + className="rounded bg-slate-900 border-white/10" + /> + +
+ +
+ + updateLocalizedValue('tagline', e.target.value)} + className="admin-input w-full" + /> +
+ +
+ + updateLocalizedValue('title', e.target.value)} + className="admin-input w-full" + /> +

Use [brackets] for golden accent serif text (e.g. Inhale [Serenity]).

+
+ +
+ +