ediflix-template 0.1.1 → 0.1.2

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/index.d.mts CHANGED
@@ -1,5 +1,80 @@
1
1
  import React from 'react';
2
+ import { z } from 'zod';
2
3
 
3
4
  declare function Hi(): React.JSX.Element;
4
5
 
5
- export { Hi };
6
+ declare const ModernTemplateSchema: z.ZodObject<{
7
+ hero: z.ZodObject<{
8
+ badge: z.ZodString;
9
+ title: z.ZodString;
10
+ titleAccent: z.ZodString;
11
+ description: z.ZodString;
12
+ ctaText: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ title: string;
15
+ badge: string;
16
+ titleAccent: string;
17
+ description: string;
18
+ ctaText: string;
19
+ }, {
20
+ title: string;
21
+ badge: string;
22
+ titleAccent: string;
23
+ description: string;
24
+ ctaText: string;
25
+ }>;
26
+ product: z.ZodObject<{
27
+ image: z.ZodString;
28
+ }, "strip", z.ZodTypeAny, {
29
+ image: string;
30
+ }, {
31
+ image: string;
32
+ }>;
33
+ }, "strip", z.ZodTypeAny, {
34
+ hero: {
35
+ title: string;
36
+ badge: string;
37
+ titleAccent: string;
38
+ description: string;
39
+ ctaText: string;
40
+ };
41
+ product: {
42
+ image: string;
43
+ };
44
+ }, {
45
+ hero: {
46
+ title: string;
47
+ badge: string;
48
+ titleAccent: string;
49
+ description: string;
50
+ ctaText: string;
51
+ };
52
+ product: {
53
+ image: string;
54
+ };
55
+ }>;
56
+ type ModernTemplateSchemaType = z.infer<typeof ModernTemplateSchema>;
57
+
58
+ interface ModernTemplateProps {
59
+ data?: Partial<ModernTemplateSchemaType>;
60
+ isEditable?: boolean;
61
+ onSave?: (data: ModernTemplateSchemaType) => void;
62
+ }
63
+ declare function ModernTemplate({ data, isEditable, onSave }: ModernTemplateProps): React.JSX.Element;
64
+
65
+ interface EditorContextType {
66
+ isEditable: boolean;
67
+ pageData: Record<string, any>;
68
+ hasChanges: boolean;
69
+ setIsEditable: (value: boolean) => void;
70
+ updatePageData: (key: string, value: any) => void;
71
+ saveChanges: () => void;
72
+ discardChanges: () => void;
73
+ setOnSave: (cb: (data: any) => void) => void;
74
+ }
75
+ declare const EditorProvider: React.FC<{
76
+ children: React.ReactNode;
77
+ }>;
78
+ declare const useEditor: () => EditorContextType;
79
+
80
+ export { EditorProvider, Hi, ModernTemplate, ModernTemplateSchema, type ModernTemplateSchemaType, useEditor };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,80 @@
1
1
  import React from 'react';
2
+ import { z } from 'zod';
2
3
 
3
4
  declare function Hi(): React.JSX.Element;
4
5
 
5
- export { Hi };
6
+ declare const ModernTemplateSchema: z.ZodObject<{
7
+ hero: z.ZodObject<{
8
+ badge: z.ZodString;
9
+ title: z.ZodString;
10
+ titleAccent: z.ZodString;
11
+ description: z.ZodString;
12
+ ctaText: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ title: string;
15
+ badge: string;
16
+ titleAccent: string;
17
+ description: string;
18
+ ctaText: string;
19
+ }, {
20
+ title: string;
21
+ badge: string;
22
+ titleAccent: string;
23
+ description: string;
24
+ ctaText: string;
25
+ }>;
26
+ product: z.ZodObject<{
27
+ image: z.ZodString;
28
+ }, "strip", z.ZodTypeAny, {
29
+ image: string;
30
+ }, {
31
+ image: string;
32
+ }>;
33
+ }, "strip", z.ZodTypeAny, {
34
+ hero: {
35
+ title: string;
36
+ badge: string;
37
+ titleAccent: string;
38
+ description: string;
39
+ ctaText: string;
40
+ };
41
+ product: {
42
+ image: string;
43
+ };
44
+ }, {
45
+ hero: {
46
+ title: string;
47
+ badge: string;
48
+ titleAccent: string;
49
+ description: string;
50
+ ctaText: string;
51
+ };
52
+ product: {
53
+ image: string;
54
+ };
55
+ }>;
56
+ type ModernTemplateSchemaType = z.infer<typeof ModernTemplateSchema>;
57
+
58
+ interface ModernTemplateProps {
59
+ data?: Partial<ModernTemplateSchemaType>;
60
+ isEditable?: boolean;
61
+ onSave?: (data: ModernTemplateSchemaType) => void;
62
+ }
63
+ declare function ModernTemplate({ data, isEditable, onSave }: ModernTemplateProps): React.JSX.Element;
64
+
65
+ interface EditorContextType {
66
+ isEditable: boolean;
67
+ pageData: Record<string, any>;
68
+ hasChanges: boolean;
69
+ setIsEditable: (value: boolean) => void;
70
+ updatePageData: (key: string, value: any) => void;
71
+ saveChanges: () => void;
72
+ discardChanges: () => void;
73
+ setOnSave: (cb: (data: any) => void) => void;
74
+ }
75
+ declare const EditorProvider: React.FC<{
76
+ children: React.ReactNode;
77
+ }>;
78
+ declare const useEditor: () => EditorContextType;
79
+
80
+ export { EditorProvider, Hi, ModernTemplate, ModernTemplateSchema, type ModernTemplateSchemaType, useEditor };
package/dist/index.js CHANGED
@@ -1,2 +1,36 @@
1
- "use strict";var a=Object.create;var o=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var c=(i,t)=>{for(var e in t)o(i,e,{get:t[e],enumerable:!0})},d=(i,t,e,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of m(t))!H.call(i,r)&&r!==e&&o(i,r,{get:()=>t[r],enumerable:!(u=l(t,r))||u.enumerable});return i};var s=(i,t,e)=>(e=i!=null?a(p(i)):{},d(t||!i||!i.__esModule?o(e,"default",{value:i,enumerable:!0}):e,i)),v=i=>d(o({},"__esModule",{value:!0}),i);var x={};c(x,{Hi:()=>f});module.exports=v(x);var n=s(require("react"));function f(){return n.default.createElement("div",null,"Hi")}0&&(module.exports={Hi});
1
+ "use strict";var me=Object.create;var N=Object.defineProperty,pe=Object.defineProperties,fe=Object.getOwnPropertyDescriptor,ge=Object.getOwnPropertyDescriptors,be=Object.getOwnPropertyNames,k=Object.getOwnPropertySymbols,he=Object.getPrototypeOf,A=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable;var q=(e,t,r)=>t in e?N(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,w=(e,t)=>{for(var r in t||(t={}))A.call(t,r)&&q(e,r,t[r]);if(k)for(var r of k(t))O.call(t,r)&&q(e,r,t[r]);return e},F=(e,t)=>pe(e,ge(t));var _=(e,t)=>{var r={};for(var o in e)A.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&k)for(var o of k(e))t.indexOf(o)<0&&O.call(e,o)&&(r[o]=e[o]);return r};var xe=(e,t)=>{for(var r in t)N(e,r,{get:t[r],enumerable:!0})},W=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of be(t))!A.call(e,s)&&s!==r&&N(e,s,{get:()=>t[s],enumerable:!(o=fe(t,s))||o.enumerable});return e};var b=(e,t,r)=>(r=e!=null?me(he(e)):{},W(t||!e||!e.__esModule?N(r,"default",{value:e,enumerable:!0}):r,e)),ye=e=>W(N({},"__esModule",{value:!0}),e);var Ee={};xe(Ee,{EditorProvider:()=>ae,Hi:()=>D,ModernTemplate:()=>ie,ModernTemplateSchema:()=>se,useEditor:()=>z});module.exports=ye(Ee);var U=b(require("react"));function D(){return U.default.createElement("div",null,"Hi")}var x=b(require("react"));var u=b(require("react"));var d=b(require("react"));var L=b(require("react")),K=require("@radix-ui/react-slot"),Q=require("class-variance-authority");var J=require("clsx"),$=require("tailwind-merge");function G(...e){return(0,$.twMerge)((0,J.clsx)(e))}var ve=(0,Q.cva)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),S=L.forwardRef((H,c)=>{var y=H,{className:e,variant:t,size:r,asChild:o=!1}=y,s=_(y,["className","variant","size","asChild"]);return L.createElement(o?K.Slot:"button",w({className:G(ve({variant:t,size:r,className:e})),ref:c},s))});S.displayName="Button";var X=require("lucide-react");function Y(){return d.default.createElement("nav",{className:"fixed top-0 left-0 right-0 z-50 px-6 py-4"},d.default.createElement("div",{className:"max-w-7xl mx-auto flex items-center justify-between"},d.default.createElement("div",{className:"flex items-center gap-2 group cursor-pointer"},d.default.createElement("div",{className:"bg-primary p-2 rounded-xl group-hover:rotate-12 transition-transform duration-300"},d.default.createElement(X.Headphones,{className:"w-5 h-5 text-white fill-current"})),d.default.createElement("span",{className:"text-xl font-bold tracking-tighter"},"Beatsbud")),d.default.createElement("div",{className:"hidden md:flex items-center gap-8 text-sm font-medium text-zinc-400"},d.default.createElement("a",{href:"#",className:"hover:text-white transition-colors"},"Home"),d.default.createElement("a",{href:"#",className:"hover:text-white transition-colors"},"About"),d.default.createElement("a",{href:"#",className:"hover:text-white transition-colors"},"Features"),d.default.createElement("a",{href:"#",className:"hover:text-white transition-colors"},"Download"),d.default.createElement("a",{href:"#",className:"hover:text-white transition-colors"},"Contact Us")),d.default.createElement(S,{variant:"outline",className:"rounded-full border-white/20 bg-transparent hover:bg-white hover:text-black transition-all"},"Download Now")))}var l=b(require("react"));var C=require("lucide-react"),P=require("framer-motion");function Z({data:e,isEditable:t}){return l.default.createElement("div",{className:"flex flex-col items-center justify-center text-center px-6 pt-32 pb-12 relative z-10 max-w-4xl mx-auto"},l.default.createElement(P.motion.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5},className:"flex items-center gap-2 bg-white/5 border border-white/10 px-4 py-1.5 rounded-full mb-8"},l.default.createElement("div",{className:"flex -space-x-1"},[1,2,3,4].map(r=>l.default.createElement(C.Star,{key:r,className:"w-3.5 h-3.5 text-yellow-500 fill-current"})),l.default.createElement(C.Star,{className:"w-3.5 h-3.5 text-yellow-500/50 fill-current"})),l.default.createElement("span",{className:"text-xs font-semibold text-zinc-300","data-editable":t?"true":"false","data-field":"hero-badge"},e==null?void 0:e.badge)),l.default.createElement(P.motion.h1,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:.1},className:"text-5xl md:text-8xl font-black tracking-tight text-white mb-6 leading-[0.9] flex flex-col items-center"},l.default.createElement("span",{"data-editable":t?"true":"false","data-field":"hero-title"},e==null?void 0:e.title),l.default.createElement("span",{className:"text-zinc-500","data-editable":t?"true":"false","data-field":"hero-titleAccent"},e==null?void 0:e.titleAccent)),l.default.createElement(P.motion.p,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:.2},className:"text-lg md:text-xl text-zinc-400 mb-10 max-w-2xl leading-relaxed","data-editable":t?"true":"false","data-field":"hero-description"},e==null?void 0:e.description),l.default.createElement(P.motion.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:.3}},l.default.createElement(S,{size:"lg",className:"bg-primary hover:bg-red-700 text-white rounded-full px-10 py-7 text-lg font-bold group"},l.default.createElement(C.Play,{className:"w-5 h-5 mr-3 fill-current group-hover:scale-110 transition-transform"}),l.default.createElement("span",{"data-editable":t?"true":"false","data-field":"hero-ctaText"},e==null?void 0:e.ctaText))))}var T=b(require("react")),R=require("framer-motion");function ee({data:e,isEditable:t}){return T.default.createElement("div",{className:"flex flex-col items-center justify-center w-full max-w-5xl mx-auto px-6 pb-20 mt-12 relative h-screen"},T.default.createElement("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[60%] h-[60%] bg-primary/20 blur-[100px] rounded-full pointer-events-none"}),T.default.createElement(R.motion.div,{initial:{opacity:0,scale:.9,y:30},whileInView:{opacity:1,scale:1,y:0},viewport:{once:!0},transition:{duration:1.2,type:"spring",stiffness:40},className:"relative z-10 group"},T.default.createElement("img",{src:e==null?void 0:e.image,alt:"Premium Beatsbud Headphones",className:"w-full max-w-[700px] h-auto object-contain drop-shadow-[0_50px_50px_rgba(0,0,0,0.7)]","data-editable":t?"true":"false","data-field":"product-image","data-type":"image"}),T.default.createElement("div",{className:"absolute -bottom-6 left-1/2 -translate-x-1/2 w-[60%] h-4 bg-black/60 blur-2xl rounded-full"})))}function te({data:e,isEditable:t}){return u.default.createElement("main",{className:"flex flex-col items-center bg-[#0a0a0a] text-white overflow-y-auto relative font-sans"},u.default.createElement("div",{className:"absolute inset-0 bg-beats-grid pointer-events-none opacity-40"}),u.default.createElement("div",{className:"absolute inset-0 bg-beats-gradient pointer-events-none"}),u.default.createElement("div",{className:"absolute top-[-10%] left-[-10%] w-[40%] h-[40%] bg-primary/10 blur-[120px] rounded-full pointer-events-none"}),u.default.createElement("div",{className:"absolute bottom-[-10%] right-[-10%] w-[40%] h-[40%] bg-primary/5 blur-[120px] rounded-full pointer-events-none"}),u.default.createElement(Y,null),u.default.createElement("div",{className:"flex-1 flex flex-col w-full relative"},u.default.createElement(Z,{data:e.hero,isEditable:t}),u.default.createElement(ee,{data:e.product,isEditable:t})),u.default.createElement("div",{className:"absolute bottom-0 left-1/2 -translate-x-1/2 w-full h-[30vh] bg-gradient-to-t from-primary/10 to-transparent pointer-events-none z-0"}))}var re={hero:{badge:"4.3 Stars from over 5000+ reviews",title:"Experience an audio",titleAccent:"like never before",description:"Whether you're a music lover, podcast enthusiast, or someone who simply wants to enjoy crystal-clear audio while on the go, our app has got you covered.",ctaText:"Play Demo"},product:{image:"https://images.unsplash.com/photo-1546435770-a3e426ff472b?q=80&w=500"}};function I(e,...t){if(!t.length)return e;let r=t.shift();if(!r)return I(e,...t);for(let o in r)if(r.hasOwnProperty(o)){let s=e[o],c=r[o];c&&typeof c=="object"&&!Array.isArray(c)&&s&&typeof s=="object"&&!Array.isArray(s)?e[o]=I(s,c):e[o]=c}return I(e,...t)}function oe(e,t){return e?I(w({},t),e):t}var n=b(require("react"));var ne=(0,n.createContext)(void 0),ae=({children:e})=>{let[t,r]=(0,n.useState)(!0),[o,s]=(0,n.useState)({}),[c,H]=(0,n.useState)(!1),[y,V]=(0,n.useState)(null),le=(0,n.useCallback)(f=>{V(()=>f)},[]),E=(0,n.useRef)(null),B=(0,n.useRef)(null),M=(0,n.useCallback)((f,h)=>{s(g=>F(w({},g),{[f]:h})),H(!0)},[]),de=(0,n.useCallback)(f=>{var g;let h=(g=f.target.files)==null?void 0:g[0];if(h&&E.current){let v=new FileReader;v.onloadend=()=>{var p;let a=v.result,i=(p=E.current)==null?void 0:p.dataset.field;i&&(M(i,a),E.current&&(E.current.src=a))},v.readAsDataURL(h)}B.current&&(B.current.value="")},[M]),ce=(0,n.useCallback)(()=>{y?y(o):(console.log("\u{1F4BE} Final pageData JSON:",JSON.stringify(o,null,2)),alert("Check console for JSON export!")),H(!1)},[o,y]),ue=(0,n.useCallback)(()=>{H(!1),window.location.reload()},[]);return(0,n.useEffect)(()=>{if(!t)return;let f=a=>{let i=a.target;if(i.dataset.editable==="true"){let p=i.dataset.field;p&&M(p,i.innerText)}},h=a=>{var j;let p=a.target.closest('[data-editable="true"]');p&&p.dataset.type==="image"&&(a.preventDefault(),E.current=p,(j=B.current)==null||j.click())},g="editor-global-styles";if(!document.getElementById(g)){let a=document.createElement("style");a.id=g,a.innerHTML=`
2
+ [data-editable="true"] {
3
+ position: relative;
4
+ outline: none !important;
5
+ transition: all 0.2s ease;
6
+ }
7
+ [data-editable="true"]:hover {
8
+ outline: 2px dashed #ff0000 !important;
9
+ outline-offset: 4px;
10
+ cursor: text;
11
+ }
12
+ [data-editable="true"][data-type="image"]:hover {
13
+ cursor: pointer;
14
+ }
15
+ [data-editable="true"]::after {
16
+ content: 'Edit';
17
+ position: absolute;
18
+ top: -24px;
19
+ right: 0;
20
+ background: #ff0000;
21
+ color: white;
22
+ font-size: 10px;
23
+ font-weight: bold;
24
+ padding: 2px 6px;
25
+ border-radius: 4px;
26
+ opacity: 0;
27
+ pointer-events: none;
28
+ transition: opacity 0.2s ease;
29
+ z-index: 50;
30
+ text-transform: uppercase;
31
+ }
32
+ [data-editable="true"]:hover::after {
33
+ opacity: 1;
34
+ }
35
+ `,document.head.appendChild(a)}let v=new MutationObserver(()=>{document.querySelectorAll('[data-editable="true"]').forEach(a=>{let i=a;i.dataset.type!=="image"&&i.contentEditable!=="true"&&(i.contentEditable="true",i.setAttribute("suppressContentEditableWarning","true"))})});return v.observe(document.body,{childList:!0,subtree:!0}),document.querySelectorAll('[data-editable="true"]').forEach(a=>{let i=a;i.dataset.type!=="image"&&(i.contentEditable="true",i.setAttribute("suppressContentEditableWarning","true"))}),document.addEventListener("focusout",f),document.addEventListener("click",h),()=>{document.removeEventListener("focusout",f),document.removeEventListener("click",h),v.disconnect();let a=document.getElementById(g);a&&a.remove(),document.querySelectorAll('[data-editable="true"]').forEach(i=>{i.contentEditable="false"})}},[t,M]),n.default.createElement(ne.Provider,{value:{isEditable:t,pageData:o,hasChanges:c,setIsEditable:r,updatePageData:M,saveChanges:ce,discardChanges:ue,setOnSave:le}},e,n.default.createElement("input",{type:"file",ref:B,onChange:de,accept:"image/*",style:{display:"none"}}))},z=()=>{let e=(0,n.useContext)(ne);if(e===void 0)throw new Error("useEditor must be used within an EditorProvider");return e};function ie({data:e,isEditable:t=!1,onSave:r}){let{setIsEditable:o,setOnSave:s}=z();(0,x.useEffect)(()=>{o(t)},[t,o]),(0,x.useEffect)(()=>{r&&s(r)},[r,s]);let c=(0,x.useMemo)(()=>oe(e,re),[e]);return x.default.createElement(te,{data:c,isEditable:t})}var m=require("zod"),we=m.z.object({badge:m.z.string().min(1,"Badge text is required"),title:m.z.string().min(1,"Title is required"),titleAccent:m.z.string().min(1,"Accent title is required"),description:m.z.string().min(1,"Description is required"),ctaText:m.z.string().min(1,"CTA text is required")}),Te=m.z.object({image:m.z.string().url("Invalid image URL")}),se=m.z.object({hero:we,product:Te});0&&(module.exports={EditorProvider,Hi,ModernTemplate,ModernTemplateSchema,useEditor});
2
36
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/Hi.tsx"],"sourcesContent":["export { default as Hi } from 'src/components/Hi';\r\n// export { ModernTemplate } from './templates/Modern/Template';\r\n// export { ModernTemplateSchema, type ModernTemplateSchemaType } from './templates/Modern/schema';\r\n// export { EditorProvider, useEditor } from './context/EditorContext';\r\n","'use client';\r\n\r\nimport React from 'react';\r\n\r\nexport default function Hi() {\r\n return (\r\n <div>Hi</div>\r\n )\r\n}"],"mappings":"0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,QAAAE,IAAA,eAAAC,EAAAH,GCEA,IAAAI,EAAkB,oBAEH,SAARC,GAAsB,CACzB,OACI,EAAAC,QAAA,cAAC,WAAI,IAAE,CAEf","names":["index_exports","__export","Hi","__toCommonJS","import_react","Hi","React"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/Hi.tsx","../src/templates/Modern/Template.tsx","../src/templates/Modern/View.tsx","../src/components/beatsbud/Navbar.tsx","../src/components/ui/button.tsx","../src/lib/utils.ts","../src/components/beatsbud/Hero.tsx","../src/components/beatsbud/ProductImage.tsx","../src/templates/Modern/defaultData.ts","../src/utils/index.ts","../src/context/EditorContext.tsx","../src/templates/Modern/schema.ts"],"sourcesContent":["export { default as Hi } from 'src/components/Hi';\r\nexport { ModernTemplate } from 'src/templates/Modern/Template';\r\nexport { ModernTemplateSchema, type ModernTemplateSchemaType } from 'src/templates/Modern/schema';\r\nexport { EditorProvider, useEditor } from 'src/context/EditorContext';\r\n","'use client';\r\n\r\nimport React from 'react';\r\n\r\nexport default function Hi() {\r\n return (\r\n <div>Hi</div>\r\n )\r\n}","\"use client\";\r\n\r\nimport React, { useMemo, useEffect } from \"react\";\r\nimport { View } from \"./View\";\r\nimport { defaultData } from \"./defaultData\";\r\nimport { ModernTemplateSchemaType } from \"./schema\";\r\nimport { mergeWithDefaults } from \"../../utils\";\r\nimport { useEditor } from \"../../context/EditorContext\";\r\n\r\ninterface ModernTemplateProps {\r\n data?: Partial<ModernTemplateSchemaType>;\r\n isEditable?: boolean;\r\n onSave?: (data: ModernTemplateSchemaType) => void;\r\n}\r\n\r\nexport function ModernTemplate({ data, isEditable = false, onSave }: ModernTemplateProps) {\r\n const { setIsEditable, setOnSave } = useEditor();\r\n\r\n // Sync props with global editor context\r\n useEffect(() => {\r\n setIsEditable(isEditable);\r\n }, [isEditable, setIsEditable]);\r\n\r\n useEffect(() => {\r\n if (onSave) {\r\n setOnSave(onSave as any);\r\n }\r\n }, [onSave, setOnSave]);\r\n\r\n const mergedData = useMemo(() => {\r\n return mergeWithDefaults(\r\n data as ModernTemplateSchemaType | undefined,\r\n defaultData\r\n );\r\n }, [data]);\r\n\r\n return (\r\n <View\r\n data={mergedData}\r\n isEditable={isEditable}\r\n />\r\n );\r\n}\r\n\r\nexport default ModernTemplate;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { BeatsbudNavbar } from \"../../components/beatsbud/Navbar\";\r\nimport { BeatsbudHero } from \"../../components/beatsbud/Hero\";\r\nimport { BeatsbudProductImage } from \"../../components/beatsbud/ProductImage\";\r\nimport { ModernTemplateSchemaType } from \"./schema\";\r\n\r\ninterface ViewProps {\r\n data: ModernTemplateSchemaType;\r\n isEditable?: boolean;\r\n}\r\n\r\nexport function View({ data, isEditable }: ViewProps) {\r\n return (\r\n <main className=\"flex flex-col items-center bg-[#0a0a0a] text-white overflow-y-auto relative font-sans\">\r\n {/* Background Decorative Elements */}\r\n <div className=\"absolute inset-0 bg-beats-grid pointer-events-none opacity-40\" />\r\n <div className=\"absolute inset-0 bg-beats-gradient pointer-events-none\" />\r\n\r\n {/* Animated Glow */}\r\n <div className=\"absolute top-[-10%] left-[-10%] w-[40%] h-[40%] bg-primary/10 blur-[120px] rounded-full pointer-events-none\" />\r\n <div className=\"absolute bottom-[-10%] right-[-10%] w-[40%] h-[40%] bg-primary/5 blur-[120px] rounded-full pointer-events-none\" />\r\n\r\n <BeatsbudNavbar />\r\n\r\n <div className=\"flex-1 flex flex-col w-full relative\">\r\n <BeatsbudHero data={data.hero} isEditable={isEditable} />\r\n <BeatsbudProductImage data={data.product} isEditable={isEditable} />\r\n </div>\r\n\r\n {/* Subtle Bottom Glow behind phones */}\r\n <div className=\"absolute bottom-0 left-1/2 -translate-x-1/2 w-full h-[30vh] bg-gradient-to-t from-primary/10 to-transparent pointer-events-none z-0\" />\r\n </main>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Button } from \"../ui/button\";\r\nimport { Headphones } from \"lucide-react\";\r\n\r\nexport function BeatsbudNavbar() {\r\n return (\r\n <nav className=\"fixed top-0 left-0 right-0 z-50 px-6 py-4\">\r\n <div className=\"max-w-7xl mx-auto flex items-center justify-between\">\r\n <div className=\"flex items-center gap-2 group cursor-pointer\">\r\n <div className=\"bg-primary p-2 rounded-xl group-hover:rotate-12 transition-transform duration-300\">\r\n <Headphones className=\"w-5 h-5 text-white fill-current\" />\r\n </div>\r\n <span className=\"text-xl font-bold tracking-tighter\">Beatsbud</span>\r\n </div>\r\n\r\n <div className=\"hidden md:flex items-center gap-8 text-sm font-medium text-zinc-400\">\r\n <a href=\"#\" className=\"hover:text-white transition-colors\">Home</a>\r\n <a href=\"#\" className=\"hover:text-white transition-colors\">About</a>\r\n <a href=\"#\" className=\"hover:text-white transition-colors\">Features</a>\r\n <a href=\"#\" className=\"hover:text-white transition-colors\">Download</a>\r\n <a href=\"#\" className=\"hover:text-white transition-colors\">Contact Us</a>\r\n </div>\r\n\r\n <Button\r\n variant=\"outline\"\r\n className=\"rounded-full border-white/20 bg-transparent hover:bg-white hover:text-black transition-all\"\r\n >\r\n Download Now\r\n </Button>\r\n </div>\r\n </nav>\r\n );\r\n}\r\n","import * as React from \"react\"\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\r\n outline:\r\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\r\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-10 px-4 py-2\",\r\n sm: \"h-9 rounded-md px-3\",\r\n lg: \"h-11 rounded-md px-8\",\r\n icon: \"h-10 w-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : \"button\"\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\nButton.displayName = \"Button\"\r\n\r\nexport { Button, buttonVariants }\r\n","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Button } from \"../ui/button\";\r\nimport { Play, Star } from \"lucide-react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { ModernHeroSchemaType } from \"../../templates/Modern/schema\";\r\n\r\ninterface HeroProps {\r\n data: ModernHeroSchemaType;\r\n isEditable?: boolean;\r\n}\r\n\r\nexport function BeatsbudHero({ data, isEditable }: HeroProps) {\r\n return (\r\n <div className=\"flex flex-col items-center justify-center text-center px-6 pt-32 pb-12 relative z-10 max-w-4xl mx-auto\">\r\n <motion.div\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.5 }}\r\n className=\"flex items-center gap-2 bg-white/5 border border-white/10 px-4 py-1.5 rounded-full mb-8\"\r\n >\r\n <div className=\"flex -space-x-1\">\r\n {[1, 2, 3, 4].map((i) => (\r\n <Star key={i} className=\"w-3.5 h-3.5 text-yellow-500 fill-current\" />\r\n ))}\r\n <Star className=\"w-3.5 h-3.5 text-yellow-500/50 fill-current\" />\r\n </div>\r\n <span\r\n className=\"text-xs font-semibold text-zinc-300\"\r\n data-editable={isEditable ? \"true\" : \"false\"}\r\n data-field=\"hero-badge\"\r\n >\r\n {data?.badge}\r\n </span>\r\n </motion.div>\r\n\r\n <motion.h1\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.5, delay: 0.1 }}\r\n className=\"text-5xl md:text-8xl font-black tracking-tight text-white mb-6 leading-[0.9] flex flex-col items-center\"\r\n >\r\n <span data-editable={isEditable ? \"true\" : \"false\"} data-field=\"hero-title\">{data?.title}</span>\r\n <span\r\n className=\"text-zinc-500\"\r\n data-editable={isEditable ? \"true\" : \"false\"}\r\n data-field=\"hero-titleAccent\"\r\n >\r\n {data?.titleAccent}\r\n </span>\r\n </motion.h1>\r\n\r\n <motion.p\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.5, delay: 0.2 }}\r\n className=\"text-lg md:text-xl text-zinc-400 mb-10 max-w-2xl leading-relaxed\"\r\n data-editable={isEditable ? \"true\" : \"false\"}\r\n data-field=\"hero-description\"\r\n >\r\n {data?.description}\r\n </motion.p>\r\n\r\n <motion.div\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.5, delay: 0.3 }}\r\n >\r\n <Button\r\n size=\"lg\"\r\n className=\"bg-primary hover:bg-red-700 text-white rounded-full px-10 py-7 text-lg font-bold group\"\r\n >\r\n <Play className=\"w-5 h-5 mr-3 fill-current group-hover:scale-110 transition-transform\" />\r\n <span\r\n data-editable={isEditable ? \"true\" : \"false\"}\r\n data-field=\"hero-ctaText\"\r\n >\r\n {data?.ctaText}\r\n </span>\r\n </Button>\r\n </motion.div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { ModernProductSchemaType } from \"../../templates/Modern/schema\";\r\n\r\ninterface ProductImageProps {\r\n data: ModernProductSchemaType;\r\n isEditable?: boolean;\r\n}\r\n\r\nexport function BeatsbudProductImage({ data, isEditable }: ProductImageProps) {\r\n return (\r\n <div className=\"flex flex-col items-center justify-center w-full max-w-5xl mx-auto px-6 pb-20 mt-12 relative h-screen\">\r\n {/* Soft Background Glow for the Product */}\r\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[60%] h-[60%] bg-primary/20 blur-[100px] rounded-full pointer-events-none\" />\r\n\r\n <motion.div\r\n initial={{ opacity: 0, scale: 0.9, y: 30 }}\r\n whileInView={{ opacity: 1, scale: 1, y: 0 }}\r\n viewport={{ once: true }}\r\n transition={{\r\n duration: 1.2,\r\n type: \"spring\",\r\n stiffness: 40\r\n }}\r\n className=\"relative z-10 group\"\r\n >\r\n <img\r\n src={data?.image}\r\n alt=\"Premium Beatsbud Headphones\"\r\n className=\"w-full max-w-[700px] h-auto object-contain drop-shadow-[0_50px_50px_rgba(0,0,0,0.7)]\"\r\n data-editable={isEditable ? \"true\" : \"false\"}\r\n data-field=\"product-image\"\r\n data-type=\"image\"\r\n />\r\n\r\n {/* Realistic Shadow element */}\r\n <div className=\"absolute -bottom-6 left-1/2 -translate-x-1/2 w-[60%] h-4 bg-black/60 blur-2xl rounded-full\" />\r\n </motion.div>\r\n </div>\r\n );\r\n}\r\n","import { ModernTemplateSchemaType } from \"./schema\";\r\n\r\nexport const defaultData: ModernTemplateSchemaType = {\r\n hero: {\r\n badge: \"4.3 Stars from over 5000+ reviews\",\r\n title: \"Experience an audio\",\r\n titleAccent: \"like never before\",\r\n description: \"Whether you're a music lover, podcast enthusiast, or someone who simply wants to enjoy crystal-clear audio while on the go, our app has got you covered.\",\r\n ctaText: \"Play Demo\",\r\n },\r\n product: {\r\n image: \"https://images.unsplash.com/photo-1546435770-a3e426ff472b?q=80&w=500\",\r\n },\r\n};\r\n","/**\r\n * Deep merge utility to merge props.data with defaultData\r\n * Props data takes precedence over defaultData\r\n */\r\nexport function deepMerge<T extends Record<string, any>>(\r\n target: T,\r\n ...sources: (Record<string, any> | undefined)[]\r\n): T {\r\n if (!sources.length) return target;\r\n\r\n const source = sources.shift();\r\n if (!source) return deepMerge(target, ...sources);\r\n\r\n for (const key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n const targetValue = target[key];\r\n const sourceValue = source[key];\r\n\r\n if (\r\n sourceValue &&\r\n typeof sourceValue === 'object' &&\r\n !Array.isArray(sourceValue) &&\r\n targetValue &&\r\n typeof targetValue === 'object' &&\r\n !Array.isArray(targetValue)\r\n ) {\r\n (target as any)[key] = deepMerge(targetValue, sourceValue);\r\n } else {\r\n (target as any)[key] = sourceValue;\r\n }\r\n }\r\n }\r\n\r\n return deepMerge(target, ...sources);\r\n}\r\n\r\n/**\r\n * Merge provided data with defaults\r\n * Provided data takes precedence\r\n */\r\nexport function mergeWithDefaults<T extends Record<string, any>>(\r\n providedData: T | undefined,\r\n defaultData: T\r\n): T {\r\n if (!providedData) return defaultData;\r\n return deepMerge({ ...defaultData }, providedData);\r\n}\r\n\r\n/**\r\n * Generate a unique ID for form fields\r\n */\r\nexport function generateId(prefix = 'lms'): string {\r\n return `${prefix}-${Math.random().toString(36).substr(2, 9)}`;\r\n}\r\n\r\n/**\r\n * Truncate string to specified length\r\n */\r\nexport function truncate(text: string, length: number): string {\r\n return text.length > length ? text.substring(0, length) + '...' : text;\r\n}\r\n\r\n/**\r\n * Convert plain text to slug\r\n */\r\nexport function slugify(text: string): string {\r\n return text\r\n .toLowerCase()\r\n .trim()\r\n .replace(/[^\\w\\s-]/g, '')\r\n .replace(/\\s+/g, '-')\r\n .replace(/-+/g, '-');\r\n}\r\n","\"use client\";\r\n\r\nimport React, { createContext, useContext, useState, useCallback, useEffect, useRef } from \"react\";\r\n\r\ninterface EditorContextType {\r\n isEditable: boolean;\r\n pageData: Record<string, any>;\r\n hasChanges: boolean;\r\n setIsEditable: (value: boolean) => void;\r\n updatePageData: (key: string, value: any) => void;\r\n saveChanges: () => void;\r\n discardChanges: () => void;\r\n setOnSave: (cb: (data: any) => void) => void;\r\n}\r\n\r\nconst EditorContext = createContext<EditorContextType | undefined>(undefined);\r\n\r\nexport const EditorProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n const [isEditable, setIsEditable] = useState(true);\r\n const [pageData, setPageData] = useState<Record<string, any>>({});\r\n const [hasChanges, setHasChanges] = useState(false);\r\n const [onSaveCallback, setOnSaveCallback] = useState<((data: any) => void) | null>(null);\r\n\r\n const setOnSave = useCallback((cb: (data: any) => void) => {\r\n setOnSaveCallback(() => cb);\r\n }, []);\r\n\r\n // Ref to track the current image being edited\r\n const activeImageRef = useRef<HTMLImageElement | null>(null);\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n\r\n const updatePageData = useCallback((key: string, value: any) => {\r\n setPageData((prev) => ({ ...prev, [key]: value }));\r\n setHasChanges(true);\r\n }, []);\r\n\r\n const handleFileChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const file = e.target.files?.[0];\r\n if (file && activeImageRef.current) {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n const dataUrl = reader.result as string;\r\n const field = activeImageRef.current?.dataset.field;\r\n if (field) {\r\n updatePageData(field, dataUrl);\r\n if (activeImageRef.current) {\r\n activeImageRef.current.src = dataUrl;\r\n }\r\n }\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n // Reset file input so same file can be selected again\r\n if (fileInputRef.current) fileInputRef.current.value = \"\";\r\n }, [updatePageData]);\r\n\r\n const saveChanges = useCallback(() => {\r\n if (onSaveCallback) {\r\n onSaveCallback(pageData);\r\n } else {\r\n console.log(\"💾 Final pageData JSON:\", JSON.stringify(pageData, null, 2));\r\n alert(\"Check console for JSON export!\");\r\n }\r\n setHasChanges(false);\r\n }, [pageData, onSaveCallback]);\r\n\r\n const discardChanges = useCallback(() => {\r\n setHasChanges(false);\r\n // In a real app, we might want to reload or revert DOM changes, \r\n // but for this simple version, we'll just reset the state.\r\n window.location.reload();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isEditable) return;\r\n\r\n const handleBlur = (e: FocusEvent) => {\r\n const target = e.target as HTMLElement;\r\n if (target.dataset.editable === \"true\") {\r\n const field = target.dataset.field;\r\n if (field) {\r\n updatePageData(field, target.innerText);\r\n }\r\n }\r\n };\r\n\r\n const handleClick = (e: MouseEvent) => {\r\n const target = e.target as HTMLElement;\r\n const editableEl = target.closest('[data-editable=\"true\"]') as HTMLElement;\r\n\r\n if (editableEl && editableEl.dataset.type === \"image\") {\r\n e.preventDefault();\r\n activeImageRef.current = editableEl as HTMLImageElement;\r\n fileInputRef.current?.click();\r\n }\r\n };\r\n\r\n // Global style injection for editing indicators\r\n const styleId = \"editor-global-styles\";\r\n if (!document.getElementById(styleId)) {\r\n const style = document.createElement(\"style\");\r\n style.id = styleId;\r\n style.innerHTML = `\r\n [data-editable=\"true\"] {\r\n position: relative;\r\n outline: none !important;\r\n transition: all 0.2s ease;\r\n }\r\n [data-editable=\"true\"]:hover {\r\n outline: 2px dashed #ff0000 !important;\r\n outline-offset: 4px;\r\n cursor: text;\r\n }\r\n [data-editable=\"true\"][data-type=\"image\"]:hover {\r\n cursor: pointer;\r\n }\r\n [data-editable=\"true\"]::after {\r\n content: 'Edit';\r\n position: absolute;\r\n top: -24px;\r\n right: 0;\r\n background: #ff0000;\r\n color: white;\r\n font-size: 10px;\r\n font-weight: bold;\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n opacity: 0;\r\n pointer-events: none;\r\n transition: opacity 0.2s ease;\r\n z-index: 50;\r\n text-transform: uppercase;\r\n }\r\n [data-editable=\"true\"]:hover::after {\r\n opacity: 1;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n // Inject contentEditable\r\n const observer = new MutationObserver(() => {\r\n document.querySelectorAll('[data-editable=\"true\"]').forEach((el) => {\r\n const htmlEl = el as HTMLElement;\r\n if (htmlEl.dataset.type !== \"image\" && htmlEl.contentEditable !== \"true\") {\r\n htmlEl.contentEditable = \"true\";\r\n htmlEl.setAttribute(\"suppressContentEditableWarning\", \"true\");\r\n }\r\n });\r\n });\r\n\r\n observer.observe(document.body, { childList: true, subtree: true });\r\n\r\n // Initial injection\r\n document.querySelectorAll('[data-editable=\"true\"]').forEach((el) => {\r\n const htmlEl = el as HTMLElement;\r\n if (htmlEl.dataset.type !== \"image\") {\r\n htmlEl.contentEditable = \"true\";\r\n htmlEl.setAttribute(\"suppressContentEditableWarning\", \"true\");\r\n }\r\n });\r\n\r\n document.addEventListener(\"focusout\", handleBlur);\r\n document.addEventListener(\"click\", handleClick);\r\n\r\n return () => {\r\n document.removeEventListener(\"focusout\", handleBlur);\r\n document.removeEventListener(\"click\", handleClick);\r\n observer.disconnect();\r\n const style = document.getElementById(styleId);\r\n if (style) style.remove();\r\n document.querySelectorAll('[data-editable=\"true\"]').forEach((el) => {\r\n (el as HTMLElement).contentEditable = \"false\";\r\n });\r\n };\r\n }, [isEditable, updatePageData]);\r\n\r\n return (\r\n <EditorContext.Provider value={{\r\n isEditable,\r\n pageData,\r\n hasChanges,\r\n setIsEditable,\r\n updatePageData,\r\n saveChanges,\r\n discardChanges,\r\n setOnSave\r\n }}>\r\n {children}\r\n <input\r\n type=\"file\"\r\n ref={fileInputRef}\r\n onChange={handleFileChange}\r\n accept=\"image/*\"\r\n style={{ display: \"none\" }}\r\n />\r\n </EditorContext.Provider>\r\n );\r\n};\r\n\r\nexport const useEditor = () => {\r\n const context = useContext(EditorContext);\r\n if (context === undefined) {\r\n throw new Error(\"useEditor must be used within an EditorProvider\");\r\n }\r\n return context;\r\n};\r\n","import { z } from 'zod';\r\n\r\nexport const ModernHeroSchema = z.object({\r\n badge: z.string().min(1, 'Badge text is required'),\r\n title: z.string().min(1, 'Title is required'),\r\n titleAccent: z.string().min(1, 'Accent title is required'),\r\n description: z.string().min(1, 'Description is required'),\r\n ctaText: z.string().min(1, 'CTA text is required'),\r\n});\r\n\r\nexport const ModernProductSchema = z.object({\r\n image: z.string().url('Invalid image URL'),\r\n});\r\n\r\nexport const ModernTemplateSchema = z.object({\r\n hero: ModernHeroSchema,\r\n product: ModernProductSchema,\r\n});\r\n\r\nexport type ModernHeroSchemaType = z.infer<typeof ModernHeroSchema>;\r\nexport type ModernProductSchemaType = z.infer<typeof ModernProductSchema>;\r\nexport type ModernTemplateSchemaType = z.infer<typeof ModernTemplateSchema>;\r\n"],"mappings":"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","names":["index_exports","__export","EditorProvider","Hi","ModernTemplate","ModernTemplateSchema","useEditor","__toCommonJS","import_react","Hi","React","import_react","import_react","import_react","React","import_react_slot","import_class_variance_authority","import_clsx","import_tailwind_merge","cn","inputs","buttonVariants","Button","_a","ref","_b","className","variant","size","asChild","props","__objRest","__spreadValues","cn","import_lucide_react","BeatsbudNavbar","React","Button","import_react","import_lucide_react","import_framer_motion","BeatsbudHero","data","isEditable","React","i","Button","import_react","import_framer_motion","BeatsbudProductImage","data","isEditable","React","View","data","isEditable","React","BeatsbudNavbar","BeatsbudHero","BeatsbudProductImage","defaultData","deepMerge","target","sources","source","key","targetValue","sourceValue","mergeWithDefaults","providedData","defaultData","__spreadValues","import_react","EditorContext","EditorProvider","children","isEditable","setIsEditable","pageData","setPageData","hasChanges","setHasChanges","onSaveCallback","setOnSaveCallback","setOnSave","cb","activeImageRef","fileInputRef","updatePageData","key","value","prev","__spreadProps","__spreadValues","handleFileChange","e","_a","file","reader","dataUrl","field","saveChanges","discardChanges","handleBlur","target","handleClick","editableEl","styleId","style","observer","el","htmlEl","React","useEditor","context","ModernTemplate","data","isEditable","onSave","setIsEditable","setOnSave","useEditor","mergedData","mergeWithDefaults","defaultData","React","View","import_zod","ModernHeroSchema","ModernProductSchema","ModernTemplateSchema"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,36 @@
1
- import t from"react";function i(){return t.createElement("div",null,"Hi")}export{i as Hi};
1
+ var re=Object.defineProperty,oe=Object.defineProperties;var ne=Object.getOwnPropertyDescriptors;var S=Object.getOwnPropertySymbols;var A=Object.prototype.hasOwnProperty,D=Object.prototype.propertyIsEnumerable;var z=(e,t,r)=>t in e?re(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,x=(e,t)=>{for(var r in t||(t={}))A.call(t,r)&&z(e,r,t[r]);if(S)for(var r of S(t))D.call(t,r)&&z(e,r,t[r]);return e},V=(e,t)=>oe(e,ne(t));var j=(e,t)=>{var r={};for(var o in e)A.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&S)for(var o of S(e))t.indexOf(o)<0&&D.call(e,o)&&(r[o]=e[o]);return r};import ae from"react";function q(){return ae.createElement("div",null,"Hi")}import xe,{useMemo as ye,useEffect as Y}from"react";import c from"react";import s from"react";import*as P from"react";import{Slot as le}from"@radix-ui/react-slot";import{cva as de}from"class-variance-authority";import{clsx as ie}from"clsx";import{twMerge as se}from"tailwind-merge";function O(...e){return se(ie(e))}var ce=de("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),w=P.forwardRef((M,d)=>{var b=M,{className:e,variant:t,size:r,asChild:o=!1}=b,l=j(b,["className","variant","size","asChild"]);return P.createElement(o?le:"button",x({className:O(ce({variant:t,size:r,className:e})),ref:d},l))});w.displayName="Button";import{Headphones as ue}from"lucide-react";function F(){return s.createElement("nav",{className:"fixed top-0 left-0 right-0 z-50 px-6 py-4"},s.createElement("div",{className:"max-w-7xl mx-auto flex items-center justify-between"},s.createElement("div",{className:"flex items-center gap-2 group cursor-pointer"},s.createElement("div",{className:"bg-primary p-2 rounded-xl group-hover:rotate-12 transition-transform duration-300"},s.createElement(ue,{className:"w-5 h-5 text-white fill-current"})),s.createElement("span",{className:"text-xl font-bold tracking-tighter"},"Beatsbud")),s.createElement("div",{className:"hidden md:flex items-center gap-8 text-sm font-medium text-zinc-400"},s.createElement("a",{href:"#",className:"hover:text-white transition-colors"},"Home"),s.createElement("a",{href:"#",className:"hover:text-white transition-colors"},"About"),s.createElement("a",{href:"#",className:"hover:text-white transition-colors"},"Features"),s.createElement("a",{href:"#",className:"hover:text-white transition-colors"},"Download"),s.createElement("a",{href:"#",className:"hover:text-white transition-colors"},"Contact Us")),s.createElement(w,{variant:"outline",className:"rounded-full border-white/20 bg-transparent hover:bg-white hover:text-black transition-all"},"Download Now")))}import i from"react";import{Play as me,Star as _}from"lucide-react";import{motion as C}from"framer-motion";function W({data:e,isEditable:t}){return i.createElement("div",{className:"flex flex-col items-center justify-center text-center px-6 pt-32 pb-12 relative z-10 max-w-4xl mx-auto"},i.createElement(C.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5},className:"flex items-center gap-2 bg-white/5 border border-white/10 px-4 py-1.5 rounded-full mb-8"},i.createElement("div",{className:"flex -space-x-1"},[1,2,3,4].map(r=>i.createElement(_,{key:r,className:"w-3.5 h-3.5 text-yellow-500 fill-current"})),i.createElement(_,{className:"w-3.5 h-3.5 text-yellow-500/50 fill-current"})),i.createElement("span",{className:"text-xs font-semibold text-zinc-300","data-editable":t?"true":"false","data-field":"hero-badge"},e==null?void 0:e.badge)),i.createElement(C.h1,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:.1},className:"text-5xl md:text-8xl font-black tracking-tight text-white mb-6 leading-[0.9] flex flex-col items-center"},i.createElement("span",{"data-editable":t?"true":"false","data-field":"hero-title"},e==null?void 0:e.title),i.createElement("span",{className:"text-zinc-500","data-editable":t?"true":"false","data-field":"hero-titleAccent"},e==null?void 0:e.titleAccent)),i.createElement(C.p,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:.2},className:"text-lg md:text-xl text-zinc-400 mb-10 max-w-2xl leading-relaxed","data-editable":t?"true":"false","data-field":"hero-description"},e==null?void 0:e.description),i.createElement(C.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:.3}},i.createElement(w,{size:"lg",className:"bg-primary hover:bg-red-700 text-white rounded-full px-10 py-7 text-lg font-bold group"},i.createElement(me,{className:"w-5 h-5 mr-3 fill-current group-hover:scale-110 transition-transform"}),i.createElement("span",{"data-editable":t?"true":"false","data-field":"hero-ctaText"},e==null?void 0:e.ctaText))))}import T from"react";import{motion as pe}from"framer-motion";function U({data:e,isEditable:t}){return T.createElement("div",{className:"flex flex-col items-center justify-center w-full max-w-5xl mx-auto px-6 pb-20 mt-12 relative h-screen"},T.createElement("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[60%] h-[60%] bg-primary/20 blur-[100px] rounded-full pointer-events-none"}),T.createElement(pe.div,{initial:{opacity:0,scale:.9,y:30},whileInView:{opacity:1,scale:1,y:0},viewport:{once:!0},transition:{duration:1.2,type:"spring",stiffness:40},className:"relative z-10 group"},T.createElement("img",{src:e==null?void 0:e.image,alt:"Premium Beatsbud Headphones",className:"w-full max-w-[700px] h-auto object-contain drop-shadow-[0_50px_50px_rgba(0,0,0,0.7)]","data-editable":t?"true":"false","data-field":"product-image","data-type":"image"}),T.createElement("div",{className:"absolute -bottom-6 left-1/2 -translate-x-1/2 w-[60%] h-4 bg-black/60 blur-2xl rounded-full"})))}function J({data:e,isEditable:t}){return c.createElement("main",{className:"flex flex-col items-center bg-[#0a0a0a] text-white overflow-y-auto relative font-sans"},c.createElement("div",{className:"absolute inset-0 bg-beats-grid pointer-events-none opacity-40"}),c.createElement("div",{className:"absolute inset-0 bg-beats-gradient pointer-events-none"}),c.createElement("div",{className:"absolute top-[-10%] left-[-10%] w-[40%] h-[40%] bg-primary/10 blur-[120px] rounded-full pointer-events-none"}),c.createElement("div",{className:"absolute bottom-[-10%] right-[-10%] w-[40%] h-[40%] bg-primary/5 blur-[120px] rounded-full pointer-events-none"}),c.createElement(F,null),c.createElement("div",{className:"flex-1 flex flex-col w-full relative"},c.createElement(W,{data:e.hero,isEditable:t}),c.createElement(U,{data:e.product,isEditable:t})),c.createElement("div",{className:"absolute bottom-0 left-1/2 -translate-x-1/2 w-full h-[30vh] bg-gradient-to-t from-primary/10 to-transparent pointer-events-none z-0"}))}var $={hero:{badge:"4.3 Stars from over 5000+ reviews",title:"Experience an audio",titleAccent:"like never before",description:"Whether you're a music lover, podcast enthusiast, or someone who simply wants to enjoy crystal-clear audio while on the go, our app has got you covered.",ctaText:"Play Demo"},product:{image:"https://images.unsplash.com/photo-1546435770-a3e426ff472b?q=80&w=500"}};function H(e,...t){if(!t.length)return e;let r=t.shift();if(!r)return H(e,...t);for(let o in r)if(r.hasOwnProperty(o)){let l=e[o],d=r[o];d&&typeof d=="object"&&!Array.isArray(d)&&l&&typeof l=="object"&&!Array.isArray(l)?e[o]=H(l,d):e[o]=d}return H(e,...t)}function G(e,t){return e?H(x({},t),e):t}import K,{createContext as fe,useContext as ge,useState as B,useCallback as E,useEffect as be,useRef as Q}from"react";var X=fe(void 0),he=({children:e})=>{let[t,r]=B(!0),[o,l]=B({}),[d,M]=B(!1),[b,L]=B(null),Z=E(p=>{L(()=>p)},[]),y=Q(null),N=Q(null),v=E((p,g)=>{l(f=>V(x({},f),{[p]:g})),M(!0)},[]),R=E(p=>{var f;let g=(f=p.target.files)==null?void 0:f[0];if(g&&y.current){let h=new FileReader;h.onloadend=()=>{var u;let n=h.result,a=(u=y.current)==null?void 0:u.dataset.field;a&&(v(a,n),y.current&&(y.current.src=n))},h.readAsDataURL(g)}N.current&&(N.current.value="")},[v]),ee=E(()=>{b?b(o):(console.log("\u{1F4BE} Final pageData JSON:",JSON.stringify(o,null,2)),alert("Check console for JSON export!")),M(!1)},[o,b]),te=E(()=>{M(!1),window.location.reload()},[]);return be(()=>{if(!t)return;let p=n=>{let a=n.target;if(a.dataset.editable==="true"){let u=a.dataset.field;u&&v(u,a.innerText)}},g=n=>{var I;let u=n.target.closest('[data-editable="true"]');u&&u.dataset.type==="image"&&(n.preventDefault(),y.current=u,(I=N.current)==null||I.click())},f="editor-global-styles";if(!document.getElementById(f)){let n=document.createElement("style");n.id=f,n.innerHTML=`
2
+ [data-editable="true"] {
3
+ position: relative;
4
+ outline: none !important;
5
+ transition: all 0.2s ease;
6
+ }
7
+ [data-editable="true"]:hover {
8
+ outline: 2px dashed #ff0000 !important;
9
+ outline-offset: 4px;
10
+ cursor: text;
11
+ }
12
+ [data-editable="true"][data-type="image"]:hover {
13
+ cursor: pointer;
14
+ }
15
+ [data-editable="true"]::after {
16
+ content: 'Edit';
17
+ position: absolute;
18
+ top: -24px;
19
+ right: 0;
20
+ background: #ff0000;
21
+ color: white;
22
+ font-size: 10px;
23
+ font-weight: bold;
24
+ padding: 2px 6px;
25
+ border-radius: 4px;
26
+ opacity: 0;
27
+ pointer-events: none;
28
+ transition: opacity 0.2s ease;
29
+ z-index: 50;
30
+ text-transform: uppercase;
31
+ }
32
+ [data-editable="true"]:hover::after {
33
+ opacity: 1;
34
+ }
35
+ `,document.head.appendChild(n)}let h=new MutationObserver(()=>{document.querySelectorAll('[data-editable="true"]').forEach(n=>{let a=n;a.dataset.type!=="image"&&a.contentEditable!=="true"&&(a.contentEditable="true",a.setAttribute("suppressContentEditableWarning","true"))})});return h.observe(document.body,{childList:!0,subtree:!0}),document.querySelectorAll('[data-editable="true"]').forEach(n=>{let a=n;a.dataset.type!=="image"&&(a.contentEditable="true",a.setAttribute("suppressContentEditableWarning","true"))}),document.addEventListener("focusout",p),document.addEventListener("click",g),()=>{document.removeEventListener("focusout",p),document.removeEventListener("click",g),h.disconnect();let n=document.getElementById(f);n&&n.remove(),document.querySelectorAll('[data-editable="true"]').forEach(a=>{a.contentEditable="false"})}},[t,v]),K.createElement(X.Provider,{value:{isEditable:t,pageData:o,hasChanges:d,setIsEditable:r,updatePageData:v,saveChanges:ee,discardChanges:te,setOnSave:Z}},e,K.createElement("input",{type:"file",ref:N,onChange:R,accept:"image/*",style:{display:"none"}}))},k=()=>{let e=ge(X);if(e===void 0)throw new Error("useEditor must be used within an EditorProvider");return e};function ve({data:e,isEditable:t=!1,onSave:r}){let{setIsEditable:o,setOnSave:l}=k();Y(()=>{o(t)},[t,o]),Y(()=>{r&&l(r)},[r,l]);let d=ye(()=>G(e,$),[e]);return xe.createElement(J,{data:d,isEditable:t})}import{z as m}from"zod";var we=m.object({badge:m.string().min(1,"Badge text is required"),title:m.string().min(1,"Title is required"),titleAccent:m.string().min(1,"Accent title is required"),description:m.string().min(1,"Description is required"),ctaText:m.string().min(1,"CTA text is required")}),Te=m.object({image:m.string().url("Invalid image URL")}),Ee=m.object({hero:we,product:Te});export{he as EditorProvider,q as Hi,ve as ModernTemplate,Ee as ModernTemplateSchema,k as useEditor};
2
36
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Hi.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React from 'react';\r\n\r\nexport default function Hi() {\r\n return (\r\n <div>Hi</div>\r\n )\r\n}"],"mappings":"AAEA,OAAOA,MAAW,QAEH,SAARC,GAAsB,CACzB,OACID,EAAA,cAAC,WAAI,IAAE,CAEf","names":["React","Hi"]}
1
+ {"version":3,"sources":["../src/components/Hi.tsx","../src/templates/Modern/Template.tsx","../src/templates/Modern/View.tsx","../src/components/beatsbud/Navbar.tsx","../src/components/ui/button.tsx","../src/lib/utils.ts","../src/components/beatsbud/Hero.tsx","../src/components/beatsbud/ProductImage.tsx","../src/templates/Modern/defaultData.ts","../src/utils/index.ts","../src/context/EditorContext.tsx","../src/templates/Modern/schema.ts"],"sourcesContent":["'use client';\r\n\r\nimport React from 'react';\r\n\r\nexport default function Hi() {\r\n return (\r\n <div>Hi</div>\r\n )\r\n}","\"use client\";\r\n\r\nimport React, { useMemo, useEffect } from \"react\";\r\nimport { View } from \"./View\";\r\nimport { defaultData } from \"./defaultData\";\r\nimport { ModernTemplateSchemaType } from \"./schema\";\r\nimport { mergeWithDefaults } from \"../../utils\";\r\nimport { useEditor } from \"../../context/EditorContext\";\r\n\r\ninterface ModernTemplateProps {\r\n data?: Partial<ModernTemplateSchemaType>;\r\n isEditable?: boolean;\r\n onSave?: (data: ModernTemplateSchemaType) => void;\r\n}\r\n\r\nexport function ModernTemplate({ data, isEditable = false, onSave }: ModernTemplateProps) {\r\n const { setIsEditable, setOnSave } = useEditor();\r\n\r\n // Sync props with global editor context\r\n useEffect(() => {\r\n setIsEditable(isEditable);\r\n }, [isEditable, setIsEditable]);\r\n\r\n useEffect(() => {\r\n if (onSave) {\r\n setOnSave(onSave as any);\r\n }\r\n }, [onSave, setOnSave]);\r\n\r\n const mergedData = useMemo(() => {\r\n return mergeWithDefaults(\r\n data as ModernTemplateSchemaType | undefined,\r\n defaultData\r\n );\r\n }, [data]);\r\n\r\n return (\r\n <View\r\n data={mergedData}\r\n isEditable={isEditable}\r\n />\r\n );\r\n}\r\n\r\nexport default ModernTemplate;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { BeatsbudNavbar } from \"../../components/beatsbud/Navbar\";\r\nimport { BeatsbudHero } from \"../../components/beatsbud/Hero\";\r\nimport { BeatsbudProductImage } from \"../../components/beatsbud/ProductImage\";\r\nimport { ModernTemplateSchemaType } from \"./schema\";\r\n\r\ninterface ViewProps {\r\n data: ModernTemplateSchemaType;\r\n isEditable?: boolean;\r\n}\r\n\r\nexport function View({ data, isEditable }: ViewProps) {\r\n return (\r\n <main className=\"flex flex-col items-center bg-[#0a0a0a] text-white overflow-y-auto relative font-sans\">\r\n {/* Background Decorative Elements */}\r\n <div className=\"absolute inset-0 bg-beats-grid pointer-events-none opacity-40\" />\r\n <div className=\"absolute inset-0 bg-beats-gradient pointer-events-none\" />\r\n\r\n {/* Animated Glow */}\r\n <div className=\"absolute top-[-10%] left-[-10%] w-[40%] h-[40%] bg-primary/10 blur-[120px] rounded-full pointer-events-none\" />\r\n <div className=\"absolute bottom-[-10%] right-[-10%] w-[40%] h-[40%] bg-primary/5 blur-[120px] rounded-full pointer-events-none\" />\r\n\r\n <BeatsbudNavbar />\r\n\r\n <div className=\"flex-1 flex flex-col w-full relative\">\r\n <BeatsbudHero data={data.hero} isEditable={isEditable} />\r\n <BeatsbudProductImage data={data.product} isEditable={isEditable} />\r\n </div>\r\n\r\n {/* Subtle Bottom Glow behind phones */}\r\n <div className=\"absolute bottom-0 left-1/2 -translate-x-1/2 w-full h-[30vh] bg-gradient-to-t from-primary/10 to-transparent pointer-events-none z-0\" />\r\n </main>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Button } from \"../ui/button\";\r\nimport { Headphones } from \"lucide-react\";\r\n\r\nexport function BeatsbudNavbar() {\r\n return (\r\n <nav className=\"fixed top-0 left-0 right-0 z-50 px-6 py-4\">\r\n <div className=\"max-w-7xl mx-auto flex items-center justify-between\">\r\n <div className=\"flex items-center gap-2 group cursor-pointer\">\r\n <div className=\"bg-primary p-2 rounded-xl group-hover:rotate-12 transition-transform duration-300\">\r\n <Headphones className=\"w-5 h-5 text-white fill-current\" />\r\n </div>\r\n <span className=\"text-xl font-bold tracking-tighter\">Beatsbud</span>\r\n </div>\r\n\r\n <div className=\"hidden md:flex items-center gap-8 text-sm font-medium text-zinc-400\">\r\n <a href=\"#\" className=\"hover:text-white transition-colors\">Home</a>\r\n <a href=\"#\" className=\"hover:text-white transition-colors\">About</a>\r\n <a href=\"#\" className=\"hover:text-white transition-colors\">Features</a>\r\n <a href=\"#\" className=\"hover:text-white transition-colors\">Download</a>\r\n <a href=\"#\" className=\"hover:text-white transition-colors\">Contact Us</a>\r\n </div>\r\n\r\n <Button\r\n variant=\"outline\"\r\n className=\"rounded-full border-white/20 bg-transparent hover:bg-white hover:text-black transition-all\"\r\n >\r\n Download Now\r\n </Button>\r\n </div>\r\n </nav>\r\n );\r\n}\r\n","import * as React from \"react\"\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\r\n outline:\r\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\r\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-10 px-4 py-2\",\r\n sm: \"h-9 rounded-md px-3\",\r\n lg: \"h-11 rounded-md px-8\",\r\n icon: \"h-10 w-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : \"button\"\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\nButton.displayName = \"Button\"\r\n\r\nexport { Button, buttonVariants }\r\n","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Button } from \"../ui/button\";\r\nimport { Play, Star } from \"lucide-react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { ModernHeroSchemaType } from \"../../templates/Modern/schema\";\r\n\r\ninterface HeroProps {\r\n data: ModernHeroSchemaType;\r\n isEditable?: boolean;\r\n}\r\n\r\nexport function BeatsbudHero({ data, isEditable }: HeroProps) {\r\n return (\r\n <div className=\"flex flex-col items-center justify-center text-center px-6 pt-32 pb-12 relative z-10 max-w-4xl mx-auto\">\r\n <motion.div\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.5 }}\r\n className=\"flex items-center gap-2 bg-white/5 border border-white/10 px-4 py-1.5 rounded-full mb-8\"\r\n >\r\n <div className=\"flex -space-x-1\">\r\n {[1, 2, 3, 4].map((i) => (\r\n <Star key={i} className=\"w-3.5 h-3.5 text-yellow-500 fill-current\" />\r\n ))}\r\n <Star className=\"w-3.5 h-3.5 text-yellow-500/50 fill-current\" />\r\n </div>\r\n <span\r\n className=\"text-xs font-semibold text-zinc-300\"\r\n data-editable={isEditable ? \"true\" : \"false\"}\r\n data-field=\"hero-badge\"\r\n >\r\n {data?.badge}\r\n </span>\r\n </motion.div>\r\n\r\n <motion.h1\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.5, delay: 0.1 }}\r\n className=\"text-5xl md:text-8xl font-black tracking-tight text-white mb-6 leading-[0.9] flex flex-col items-center\"\r\n >\r\n <span data-editable={isEditable ? \"true\" : \"false\"} data-field=\"hero-title\">{data?.title}</span>\r\n <span\r\n className=\"text-zinc-500\"\r\n data-editable={isEditable ? \"true\" : \"false\"}\r\n data-field=\"hero-titleAccent\"\r\n >\r\n {data?.titleAccent}\r\n </span>\r\n </motion.h1>\r\n\r\n <motion.p\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.5, delay: 0.2 }}\r\n className=\"text-lg md:text-xl text-zinc-400 mb-10 max-w-2xl leading-relaxed\"\r\n data-editable={isEditable ? \"true\" : \"false\"}\r\n data-field=\"hero-description\"\r\n >\r\n {data?.description}\r\n </motion.p>\r\n\r\n <motion.div\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.5, delay: 0.3 }}\r\n >\r\n <Button\r\n size=\"lg\"\r\n className=\"bg-primary hover:bg-red-700 text-white rounded-full px-10 py-7 text-lg font-bold group\"\r\n >\r\n <Play className=\"w-5 h-5 mr-3 fill-current group-hover:scale-110 transition-transform\" />\r\n <span\r\n data-editable={isEditable ? \"true\" : \"false\"}\r\n data-field=\"hero-ctaText\"\r\n >\r\n {data?.ctaText}\r\n </span>\r\n </Button>\r\n </motion.div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { ModernProductSchemaType } from \"../../templates/Modern/schema\";\r\n\r\ninterface ProductImageProps {\r\n data: ModernProductSchemaType;\r\n isEditable?: boolean;\r\n}\r\n\r\nexport function BeatsbudProductImage({ data, isEditable }: ProductImageProps) {\r\n return (\r\n <div className=\"flex flex-col items-center justify-center w-full max-w-5xl mx-auto px-6 pb-20 mt-12 relative h-screen\">\r\n {/* Soft Background Glow for the Product */}\r\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[60%] h-[60%] bg-primary/20 blur-[100px] rounded-full pointer-events-none\" />\r\n\r\n <motion.div\r\n initial={{ opacity: 0, scale: 0.9, y: 30 }}\r\n whileInView={{ opacity: 1, scale: 1, y: 0 }}\r\n viewport={{ once: true }}\r\n transition={{\r\n duration: 1.2,\r\n type: \"spring\",\r\n stiffness: 40\r\n }}\r\n className=\"relative z-10 group\"\r\n >\r\n <img\r\n src={data?.image}\r\n alt=\"Premium Beatsbud Headphones\"\r\n className=\"w-full max-w-[700px] h-auto object-contain drop-shadow-[0_50px_50px_rgba(0,0,0,0.7)]\"\r\n data-editable={isEditable ? \"true\" : \"false\"}\r\n data-field=\"product-image\"\r\n data-type=\"image\"\r\n />\r\n\r\n {/* Realistic Shadow element */}\r\n <div className=\"absolute -bottom-6 left-1/2 -translate-x-1/2 w-[60%] h-4 bg-black/60 blur-2xl rounded-full\" />\r\n </motion.div>\r\n </div>\r\n );\r\n}\r\n","import { ModernTemplateSchemaType } from \"./schema\";\r\n\r\nexport const defaultData: ModernTemplateSchemaType = {\r\n hero: {\r\n badge: \"4.3 Stars from over 5000+ reviews\",\r\n title: \"Experience an audio\",\r\n titleAccent: \"like never before\",\r\n description: \"Whether you're a music lover, podcast enthusiast, or someone who simply wants to enjoy crystal-clear audio while on the go, our app has got you covered.\",\r\n ctaText: \"Play Demo\",\r\n },\r\n product: {\r\n image: \"https://images.unsplash.com/photo-1546435770-a3e426ff472b?q=80&w=500\",\r\n },\r\n};\r\n","/**\r\n * Deep merge utility to merge props.data with defaultData\r\n * Props data takes precedence over defaultData\r\n */\r\nexport function deepMerge<T extends Record<string, any>>(\r\n target: T,\r\n ...sources: (Record<string, any> | undefined)[]\r\n): T {\r\n if (!sources.length) return target;\r\n\r\n const source = sources.shift();\r\n if (!source) return deepMerge(target, ...sources);\r\n\r\n for (const key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n const targetValue = target[key];\r\n const sourceValue = source[key];\r\n\r\n if (\r\n sourceValue &&\r\n typeof sourceValue === 'object' &&\r\n !Array.isArray(sourceValue) &&\r\n targetValue &&\r\n typeof targetValue === 'object' &&\r\n !Array.isArray(targetValue)\r\n ) {\r\n (target as any)[key] = deepMerge(targetValue, sourceValue);\r\n } else {\r\n (target as any)[key] = sourceValue;\r\n }\r\n }\r\n }\r\n\r\n return deepMerge(target, ...sources);\r\n}\r\n\r\n/**\r\n * Merge provided data with defaults\r\n * Provided data takes precedence\r\n */\r\nexport function mergeWithDefaults<T extends Record<string, any>>(\r\n providedData: T | undefined,\r\n defaultData: T\r\n): T {\r\n if (!providedData) return defaultData;\r\n return deepMerge({ ...defaultData }, providedData);\r\n}\r\n\r\n/**\r\n * Generate a unique ID for form fields\r\n */\r\nexport function generateId(prefix = 'lms'): string {\r\n return `${prefix}-${Math.random().toString(36).substr(2, 9)}`;\r\n}\r\n\r\n/**\r\n * Truncate string to specified length\r\n */\r\nexport function truncate(text: string, length: number): string {\r\n return text.length > length ? text.substring(0, length) + '...' : text;\r\n}\r\n\r\n/**\r\n * Convert plain text to slug\r\n */\r\nexport function slugify(text: string): string {\r\n return text\r\n .toLowerCase()\r\n .trim()\r\n .replace(/[^\\w\\s-]/g, '')\r\n .replace(/\\s+/g, '-')\r\n .replace(/-+/g, '-');\r\n}\r\n","\"use client\";\r\n\r\nimport React, { createContext, useContext, useState, useCallback, useEffect, useRef } from \"react\";\r\n\r\ninterface EditorContextType {\r\n isEditable: boolean;\r\n pageData: Record<string, any>;\r\n hasChanges: boolean;\r\n setIsEditable: (value: boolean) => void;\r\n updatePageData: (key: string, value: any) => void;\r\n saveChanges: () => void;\r\n discardChanges: () => void;\r\n setOnSave: (cb: (data: any) => void) => void;\r\n}\r\n\r\nconst EditorContext = createContext<EditorContextType | undefined>(undefined);\r\n\r\nexport const EditorProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n const [isEditable, setIsEditable] = useState(true);\r\n const [pageData, setPageData] = useState<Record<string, any>>({});\r\n const [hasChanges, setHasChanges] = useState(false);\r\n const [onSaveCallback, setOnSaveCallback] = useState<((data: any) => void) | null>(null);\r\n\r\n const setOnSave = useCallback((cb: (data: any) => void) => {\r\n setOnSaveCallback(() => cb);\r\n }, []);\r\n\r\n // Ref to track the current image being edited\r\n const activeImageRef = useRef<HTMLImageElement | null>(null);\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n\r\n const updatePageData = useCallback((key: string, value: any) => {\r\n setPageData((prev) => ({ ...prev, [key]: value }));\r\n setHasChanges(true);\r\n }, []);\r\n\r\n const handleFileChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const file = e.target.files?.[0];\r\n if (file && activeImageRef.current) {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n const dataUrl = reader.result as string;\r\n const field = activeImageRef.current?.dataset.field;\r\n if (field) {\r\n updatePageData(field, dataUrl);\r\n if (activeImageRef.current) {\r\n activeImageRef.current.src = dataUrl;\r\n }\r\n }\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n // Reset file input so same file can be selected again\r\n if (fileInputRef.current) fileInputRef.current.value = \"\";\r\n }, [updatePageData]);\r\n\r\n const saveChanges = useCallback(() => {\r\n if (onSaveCallback) {\r\n onSaveCallback(pageData);\r\n } else {\r\n console.log(\"💾 Final pageData JSON:\", JSON.stringify(pageData, null, 2));\r\n alert(\"Check console for JSON export!\");\r\n }\r\n setHasChanges(false);\r\n }, [pageData, onSaveCallback]);\r\n\r\n const discardChanges = useCallback(() => {\r\n setHasChanges(false);\r\n // In a real app, we might want to reload or revert DOM changes, \r\n // but for this simple version, we'll just reset the state.\r\n window.location.reload();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isEditable) return;\r\n\r\n const handleBlur = (e: FocusEvent) => {\r\n const target = e.target as HTMLElement;\r\n if (target.dataset.editable === \"true\") {\r\n const field = target.dataset.field;\r\n if (field) {\r\n updatePageData(field, target.innerText);\r\n }\r\n }\r\n };\r\n\r\n const handleClick = (e: MouseEvent) => {\r\n const target = e.target as HTMLElement;\r\n const editableEl = target.closest('[data-editable=\"true\"]') as HTMLElement;\r\n\r\n if (editableEl && editableEl.dataset.type === \"image\") {\r\n e.preventDefault();\r\n activeImageRef.current = editableEl as HTMLImageElement;\r\n fileInputRef.current?.click();\r\n }\r\n };\r\n\r\n // Global style injection for editing indicators\r\n const styleId = \"editor-global-styles\";\r\n if (!document.getElementById(styleId)) {\r\n const style = document.createElement(\"style\");\r\n style.id = styleId;\r\n style.innerHTML = `\r\n [data-editable=\"true\"] {\r\n position: relative;\r\n outline: none !important;\r\n transition: all 0.2s ease;\r\n }\r\n [data-editable=\"true\"]:hover {\r\n outline: 2px dashed #ff0000 !important;\r\n outline-offset: 4px;\r\n cursor: text;\r\n }\r\n [data-editable=\"true\"][data-type=\"image\"]:hover {\r\n cursor: pointer;\r\n }\r\n [data-editable=\"true\"]::after {\r\n content: 'Edit';\r\n position: absolute;\r\n top: -24px;\r\n right: 0;\r\n background: #ff0000;\r\n color: white;\r\n font-size: 10px;\r\n font-weight: bold;\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n opacity: 0;\r\n pointer-events: none;\r\n transition: opacity 0.2s ease;\r\n z-index: 50;\r\n text-transform: uppercase;\r\n }\r\n [data-editable=\"true\"]:hover::after {\r\n opacity: 1;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n // Inject contentEditable\r\n const observer = new MutationObserver(() => {\r\n document.querySelectorAll('[data-editable=\"true\"]').forEach((el) => {\r\n const htmlEl = el as HTMLElement;\r\n if (htmlEl.dataset.type !== \"image\" && htmlEl.contentEditable !== \"true\") {\r\n htmlEl.contentEditable = \"true\";\r\n htmlEl.setAttribute(\"suppressContentEditableWarning\", \"true\");\r\n }\r\n });\r\n });\r\n\r\n observer.observe(document.body, { childList: true, subtree: true });\r\n\r\n // Initial injection\r\n document.querySelectorAll('[data-editable=\"true\"]').forEach((el) => {\r\n const htmlEl = el as HTMLElement;\r\n if (htmlEl.dataset.type !== \"image\") {\r\n htmlEl.contentEditable = \"true\";\r\n htmlEl.setAttribute(\"suppressContentEditableWarning\", \"true\");\r\n }\r\n });\r\n\r\n document.addEventListener(\"focusout\", handleBlur);\r\n document.addEventListener(\"click\", handleClick);\r\n\r\n return () => {\r\n document.removeEventListener(\"focusout\", handleBlur);\r\n document.removeEventListener(\"click\", handleClick);\r\n observer.disconnect();\r\n const style = document.getElementById(styleId);\r\n if (style) style.remove();\r\n document.querySelectorAll('[data-editable=\"true\"]').forEach((el) => {\r\n (el as HTMLElement).contentEditable = \"false\";\r\n });\r\n };\r\n }, [isEditable, updatePageData]);\r\n\r\n return (\r\n <EditorContext.Provider value={{\r\n isEditable,\r\n pageData,\r\n hasChanges,\r\n setIsEditable,\r\n updatePageData,\r\n saveChanges,\r\n discardChanges,\r\n setOnSave\r\n }}>\r\n {children}\r\n <input\r\n type=\"file\"\r\n ref={fileInputRef}\r\n onChange={handleFileChange}\r\n accept=\"image/*\"\r\n style={{ display: \"none\" }}\r\n />\r\n </EditorContext.Provider>\r\n );\r\n};\r\n\r\nexport const useEditor = () => {\r\n const context = useContext(EditorContext);\r\n if (context === undefined) {\r\n throw new Error(\"useEditor must be used within an EditorProvider\");\r\n }\r\n return context;\r\n};\r\n","import { z } from 'zod';\r\n\r\nexport const ModernHeroSchema = z.object({\r\n badge: z.string().min(1, 'Badge text is required'),\r\n title: z.string().min(1, 'Title is required'),\r\n titleAccent: z.string().min(1, 'Accent title is required'),\r\n description: z.string().min(1, 'Description is required'),\r\n ctaText: z.string().min(1, 'CTA text is required'),\r\n});\r\n\r\nexport const ModernProductSchema = z.object({\r\n image: z.string().url('Invalid image URL'),\r\n});\r\n\r\nexport const ModernTemplateSchema = z.object({\r\n hero: ModernHeroSchema,\r\n product: ModernProductSchema,\r\n});\r\n\r\nexport type ModernHeroSchemaType = z.infer<typeof ModernHeroSchema>;\r\nexport type ModernProductSchemaType = z.infer<typeof ModernProductSchema>;\r\nexport type ModernTemplateSchemaType = z.infer<typeof ModernTemplateSchema>;\r\n"],"mappings":"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","names":["React","Hi","React","useMemo","useEffect","React","React","React","Slot","cva","clsx","twMerge","cn","inputs","buttonVariants","cva","Button","_a","ref","_b","className","variant","size","asChild","props","__objRest","Slot","__spreadValues","cn","Headphones","BeatsbudNavbar","React","Button","React","Play","Star","motion","BeatsbudHero","data","isEditable","React","i","Button","React","motion","BeatsbudProductImage","data","isEditable","View","data","isEditable","React","BeatsbudNavbar","BeatsbudHero","BeatsbudProductImage","defaultData","deepMerge","target","sources","source","key","targetValue","sourceValue","mergeWithDefaults","providedData","defaultData","__spreadValues","React","createContext","useContext","useState","useCallback","useEffect","useRef","EditorContext","createContext","EditorProvider","children","isEditable","setIsEditable","useState","pageData","setPageData","hasChanges","setHasChanges","onSaveCallback","setOnSaveCallback","setOnSave","useCallback","cb","activeImageRef","useRef","fileInputRef","updatePageData","key","value","prev","__spreadProps","__spreadValues","handleFileChange","e","_a","file","reader","dataUrl","field","saveChanges","discardChanges","useEffect","handleBlur","target","handleClick","editableEl","styleId","style","observer","el","htmlEl","React","useEditor","context","useContext","ModernTemplate","data","isEditable","onSave","setIsEditable","setOnSave","useEditor","useEffect","mergedData","useMemo","mergeWithDefaults","defaultData","React","View","z","ModernHeroSchema","ModernProductSchema","ModernTemplateSchema"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ediflix-template",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",