ediflix-template 0.1.3 → 0.1.5

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/README.md CHANGED
@@ -1 +1,33 @@
1
- # LMS-CLIENT
1
+ # ediflix-template
2
+
3
+ A professional landing page template with an integrated editor.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install ediflix-template
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### 1. Import Styles
14
+
15
+ Import the library styles in your main entry point (e.g., `layout.tsx` or `_app.tsx`):
16
+
17
+ ```tsx
18
+ import "ediflix-template/dist/styles.css";
19
+ ```
20
+
21
+ ### 2. Implementation
22
+
23
+ ```tsx
24
+ import { ModernTemplate, EditorProvider } from "ediflix-template";
25
+
26
+ export default function Page() {
27
+ return (
28
+ <EditorProvider>
29
+ <ModernTemplate isEditable={true} />
30
+ </EditorProvider>
31
+ );
32
+ }
33
+ ```
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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":"ikCAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,oBAAAE,GAAA,OAAAC,EAAA,mBAAAC,GAAA,yBAAAC,GAAA,cAAAC,IAAA,eAAAC,GAAAP,ICEA,IAAAQ,EAAkB,oBAEH,SAARC,GAAsB,CACzB,OACI,EAAAC,QAAA,cAAC,WAAI,IAAE,CAEf,CCNA,IAAAC,EAA0C,oBCA1C,IAAAC,EAAkB,oBCAlB,IAAAC,EAAkB,oBCFlB,IAAAC,EAAuB,oBACvBC,EAAqB,gCACrBC,EAAuC,oCCFvC,IAAAC,EAAsC,gBACtCC,EAAwB,0BAEjB,SAASC,KAAMC,EAAsB,CAC1C,SAAO,cAAQ,QAAKA,CAAM,CAAC,CAC7B,CDCA,IAAMC,MAAiB,OACrB,2VACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,yDACT,YACE,qEACF,QACE,iFACF,UACE,+DACF,MAAO,+CACP,KAAM,iDACR,EACA,KAAM,CACJ,QAAS,iBACT,GAAI,sBACJ,GAAI,uBACJ,KAAM,WACR,CACF,EACA,gBAAiB,CACf,QAAS,UACT,KAAM,SACR,CACF,CACF,EAQMC,EAAe,aACnB,CAACC,EAAyDC,IAAQ,CAAjE,IAAAC,EAAAF,EAAE,WAAAG,EAAW,QAAAC,EAAS,KAAAC,EAAM,QAAAC,EAAU,EA1CzC,EA0CGJ,EAAgDK,EAAAC,EAAhDN,EAAgD,CAA9C,YAAW,UAAS,OAAM,YAE3B,OACE,gBAFWI,EAAU,OAAO,SAE3BG,EAAA,CACC,UAAWC,EAAGZ,GAAe,CAAE,QAAAM,EAAS,KAAAC,EAAM,UAAAF,CAAU,CAAC,CAAC,EAC1D,IAAKF,GACDM,EACN,CAEJ,CACF,EACAR,EAAO,YAAc,SDjDrB,IAAAY,EAA2B,wBAEpB,SAASC,GAAiB,CAC7B,OACI,EAAAC,QAAA,cAAC,OAAI,UAAU,6CACX,EAAAA,QAAA,cAAC,OAAI,UAAU,uDACX,EAAAA,QAAA,cAAC,OAAI,UAAU,gDACX,EAAAA,QAAA,cAAC,OAAI,UAAU,qFACX,EAAAA,QAAA,cAAC,cAAW,UAAU,kCAAkC,CAC5D,EACA,EAAAA,QAAA,cAAC,QAAK,UAAU,sCAAqC,UAAQ,CACjE,EAEA,EAAAA,QAAA,cAAC,OAAI,UAAU,uEACX,EAAAA,QAAA,cAAC,KAAE,KAAK,IAAI,UAAU,sCAAqC,MAAI,EAC/D,EAAAA,QAAA,cAAC,KAAE,KAAK,IAAI,UAAU,sCAAqC,OAAK,EAChE,EAAAA,QAAA,cAAC,KAAE,KAAK,IAAI,UAAU,sCAAqC,UAAQ,EACnE,EAAAA,QAAA,cAAC,KAAE,KAAK,IAAI,UAAU,sCAAqC,UAAQ,EACnE,EAAAA,QAAA,cAAC,KAAE,KAAK,IAAI,UAAU,sCAAqC,YAAU,CACzE,EAEA,EAAAA,QAAA,cAACC,EAAA,CACG,QAAQ,UACR,UAAU,8FACb,cAED,CACJ,CACJ,CAER,CGhCA,IAAAC,EAAkB,oBAElB,IAAAC,EAA2B,wBAC3BC,EAAuB,yBAQhB,SAASC,EAAa,CAAE,KAAAC,EAAM,WAAAC,CAAW,EAAc,CAC1D,OACI,EAAAC,QAAA,cAAC,OAAI,UAAU,0GACX,EAAAA,QAAA,cAAC,SAAO,IAAP,CACG,QAAS,CAAE,QAAS,EAAG,EAAG,EAAG,EAC7B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAE,EAC5B,WAAY,CAAE,SAAU,EAAI,EAC5B,UAAU,2FAEV,EAAAA,QAAA,cAAC,OAAI,UAAU,mBACV,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,IAAKC,GACf,EAAAD,QAAA,cAAC,QAAK,IAAKC,EAAG,UAAU,2CAA2C,CACtE,EACD,EAAAD,QAAA,cAAC,QAAK,UAAU,8CAA8C,CAClE,EACA,EAAAA,QAAA,cAAC,QACG,UAAU,sCACV,gBAAeD,EAAa,OAAS,QACrC,aAAW,cAEVD,GAAA,YAAAA,EAAM,KACX,CACJ,EAEA,EAAAE,QAAA,cAAC,SAAO,GAAP,CACG,QAAS,CAAE,QAAS,EAAG,EAAG,EAAG,EAC7B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAE,EAC5B,WAAY,CAAE,SAAU,GAAK,MAAO,EAAI,EACxC,UAAU,2GAEV,EAAAA,QAAA,cAAC,QAAK,gBAAeD,EAAa,OAAS,QAAS,aAAW,cAAcD,GAAA,YAAAA,EAAM,KAAM,EACzF,EAAAE,QAAA,cAAC,QACG,UAAU,gBACV,gBAAeD,EAAa,OAAS,QACrC,aAAW,oBAEVD,GAAA,YAAAA,EAAM,WACX,CACJ,EAEA,EAAAE,QAAA,cAAC,SAAO,EAAP,CACG,QAAS,CAAE,QAAS,EAAG,EAAG,EAAG,EAC7B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAE,EAC5B,WAAY,CAAE,SAAU,GAAK,MAAO,EAAI,EACxC,UAAU,mEACV,gBAAeD,EAAa,OAAS,QACrC,aAAW,oBAEVD,GAAA,YAAAA,EAAM,WACX,EAEA,EAAAE,QAAA,cAAC,SAAO,IAAP,CACG,QAAS,CAAE,QAAS,EAAG,EAAG,EAAG,EAC7B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAE,EAC5B,WAAY,CAAE,SAAU,GAAK,MAAO,EAAI,GAExC,EAAAA,QAAA,cAACE,EAAA,CACG,KAAK,KACL,UAAU,0FAEV,EAAAF,QAAA,cAAC,QAAK,UAAU,uEAAuE,EACvF,EAAAA,QAAA,cAAC,QACG,gBAAeD,EAAa,OAAS,QACrC,aAAW,gBAEVD,GAAA,YAAAA,EAAM,OACX,CACJ,CACJ,CACJ,CAER,CClFA,IAAAK,EAAkB,oBAClBC,EAAuB,yBAQhB,SAASC,GAAqB,CAAE,KAAAC,EAAM,WAAAC,CAAW,EAAsB,CAC1E,OACI,EAAAC,QAAA,cAAC,OAAI,UAAU,yGAEX,EAAAA,QAAA,cAAC,OAAI,UAAU,0IAA0I,EAEzJ,EAAAA,QAAA,cAAC,SAAO,IAAP,CACG,QAAS,CAAE,QAAS,EAAG,MAAO,GAAK,EAAG,EAAG,EACzC,YAAa,CAAE,QAAS,EAAG,MAAO,EAAG,EAAG,CAAE,EAC1C,SAAU,CAAE,KAAM,EAAK,EACvB,WAAY,CACR,SAAU,IACV,KAAM,SACN,UAAW,EACf,EACA,UAAU,uBAEV,EAAAA,QAAA,cAAC,OACG,IAAKF,GAAA,YAAAA,EAAM,MACX,IAAI,8BACJ,UAAU,uFACV,gBAAeC,EAAa,OAAS,QACrC,aAAW,gBACX,YAAU,QACd,EAGA,EAAAC,QAAA,cAAC,OAAI,UAAU,6FAA6F,CAChH,CACJ,CAER,CL7BO,SAASC,GAAK,CAAE,KAAAC,EAAM,WAAAC,CAAW,EAAc,CAClD,OACI,EAAAC,QAAA,cAAC,QAAK,UAAU,yFAEZ,EAAAA,QAAA,cAAC,OAAI,UAAU,gEAAgE,EAC/E,EAAAA,QAAA,cAAC,OAAI,UAAU,yDAAyD,EAGxE,EAAAA,QAAA,cAAC,OAAI,UAAU,8GAA8G,EAC7H,EAAAA,QAAA,cAAC,OAAI,UAAU,iHAAiH,EAEhI,EAAAA,QAAA,cAACC,EAAA,IAAe,EAEhB,EAAAD,QAAA,cAAC,OAAI,UAAU,wCACX,EAAAA,QAAA,cAACE,EAAA,CAAa,KAAMJ,EAAK,KAAM,WAAYC,EAAY,EACvD,EAAAC,QAAA,cAACG,GAAA,CAAqB,KAAML,EAAK,QAAS,WAAYC,EAAY,CACtE,EAGA,EAAAC,QAAA,cAAC,OAAI,UAAU,sIAAsI,CACzJ,CAER,CMjCO,IAAMI,GAAwC,CACjD,KAAM,CACF,MAAO,oCACP,MAAO,sBACP,YAAa,oBACb,YAAa,2JACb,QAAS,WACb,EACA,QAAS,CACL,MAAO,sEACX,CACJ,ECTO,SAASC,EACdC,KACGC,EACA,CACH,GAAI,CAACA,EAAQ,OAAQ,OAAOD,EAE5B,IAAME,EAASD,EAAQ,MAAM,EAC7B,GAAI,CAACC,EAAQ,OAAOH,EAAUC,EAAQ,GAAGC,CAAO,EAEhD,QAAWE,KAAOD,EAChB,GAAIA,EAAO,eAAeC,CAAG,EAAG,CAC9B,IAAMC,EAAcJ,EAAOG,CAAG,EACxBE,EAAcH,EAAOC,CAAG,EAG5BE,GACA,OAAOA,GAAgB,UACvB,CAAC,MAAM,QAAQA,CAAW,GAC1BD,GACA,OAAOA,GAAgB,UACvB,CAAC,MAAM,QAAQA,CAAW,EAEzBJ,EAAeG,CAAG,EAAIJ,EAAUK,EAAaC,CAAW,EAExDL,EAAeG,CAAG,EAAIE,CAE3B,CAGF,OAAON,EAAUC,EAAQ,GAAGC,CAAO,CACrC,CAMO,SAASK,GACdC,EACAC,EACG,CACH,OAAKD,EACER,EAAUU,EAAA,GAAKD,GAAeD,CAAY,EADvBC,CAE5B,CC5CA,IAAAE,EAA2F,oBAa3F,IAAMC,MAAgB,iBAA6C,MAAS,EAE/DC,GAA0D,CAAC,CAAE,SAAAC,CAAS,IAAM,CACrF,GAAM,CAACC,EAAYC,CAAa,KAAI,YAAS,EAAI,EAC3C,CAACC,EAAUC,CAAW,KAAI,YAA8B,CAAC,CAAC,EAC1D,CAACC,EAAYC,CAAa,KAAI,YAAS,EAAK,EAC5C,CAACC,EAAgBC,CAAiB,KAAI,YAAuC,IAAI,EAEjFC,MAAY,eAAaC,GAA4B,CACvDF,EAAkB,IAAME,CAAE,CAC9B,EAAG,CAAC,CAAC,EAGCC,KAAiB,UAAgC,IAAI,EACrDC,KAAe,UAAyB,IAAI,EAE5CC,KAAiB,eAAY,CAACC,EAAaC,IAAe,CAC5DX,EAAaY,GAAUC,EAAAC,EAAA,GAAKF,GAAL,CAAW,CAACF,CAAG,EAAGC,CAAM,EAAE,EACjDT,EAAc,EAAI,CACtB,EAAG,CAAC,CAAC,EAECa,MAAmB,eAAaC,GAA2C,CApCrF,IAAAC,EAqCQ,IAAMC,GAAOD,EAAAD,EAAE,OAAO,QAAT,YAAAC,EAAiB,GAC9B,GAAIC,GAAQX,EAAe,QAAS,CAChC,IAAMY,EAAS,IAAI,WACnBA,EAAO,UAAY,IAAM,CAxCrC,IAAAF,EAyCgB,IAAMG,EAAUD,EAAO,OACjBE,GAAQJ,EAAAV,EAAe,UAAf,YAAAU,EAAwB,QAAQ,MAC1CI,IACAZ,EAAeY,EAAOD,CAAO,EACzBb,EAAe,UACfA,EAAe,QAAQ,IAAMa,GAGzC,EACAD,EAAO,cAAcD,CAAI,CAC7B,CAEIV,EAAa,UAASA,EAAa,QAAQ,MAAQ,GAC3D,EAAG,CAACC,CAAc,CAAC,EAEba,MAAc,eAAY,IAAM,CAC9BnB,EACAA,EAAeJ,CAAQ,GAEvB,QAAQ,IAAI,iCAA2B,KAAK,UAAUA,EAAU,KAAM,CAAC,CAAC,EACxE,MAAM,gCAAgC,GAE1CG,EAAc,EAAK,CACvB,EAAG,CAACH,EAAUI,CAAc,CAAC,EAEvBoB,MAAiB,eAAY,IAAM,CACrCrB,EAAc,EAAK,EAGnB,OAAO,SAAS,OAAO,CAC3B,EAAG,CAAC,CAAC,EAEL,sBAAU,IAAM,CACZ,GAAI,CAACL,EAAY,OAEjB,IAAM2B,EAAcR,GAAkB,CAClC,IAAMS,EAAST,EAAE,OACjB,GAAIS,EAAO,QAAQ,WAAa,OAAQ,CACpC,IAAMJ,EAAQI,EAAO,QAAQ,MACzBJ,GACAZ,EAAeY,EAAOI,EAAO,SAAS,CAE9C,CACJ,EAEMC,EAAeV,GAAkB,CAtF/C,IAAAC,EAwFY,IAAMU,EADSX,EAAE,OACS,QAAQ,wBAAwB,EAEtDW,GAAcA,EAAW,QAAQ,OAAS,UAC1CX,EAAE,eAAe,EACjBT,EAAe,QAAUoB,GACzBV,EAAAT,EAAa,UAAb,MAAAS,EAAsB,QAE9B,EAGMW,EAAU,uBAChB,GAAI,CAAC,SAAS,eAAeA,CAAO,EAAG,CACnC,IAAMC,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,GAAKD,EACXC,EAAM,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAmClB,SAAS,KAAK,YAAYA,CAAK,CACnC,CAGA,IAAMC,EAAW,IAAI,iBAAiB,IAAM,CACxC,SAAS,iBAAiB,wBAAwB,EAAE,QAASC,GAAO,CAChE,IAAMC,EAASD,EACXC,EAAO,QAAQ,OAAS,SAAWA,EAAO,kBAAoB,SAC9DA,EAAO,gBAAkB,OACzBA,EAAO,aAAa,iCAAkC,MAAM,EAEpE,CAAC,CACL,CAAC,EAED,OAAAF,EAAS,QAAQ,SAAS,KAAM,CAAE,UAAW,GAAM,QAAS,EAAK,CAAC,EAGlE,SAAS,iBAAiB,wBAAwB,EAAE,QAASC,GAAO,CAChE,IAAMC,EAASD,EACXC,EAAO,QAAQ,OAAS,UACxBA,EAAO,gBAAkB,OACzBA,EAAO,aAAa,iCAAkC,MAAM,EAEpE,CAAC,EAED,SAAS,iBAAiB,WAAYR,CAAU,EAChD,SAAS,iBAAiB,QAASE,CAAW,EAEvC,IAAM,CACT,SAAS,oBAAoB,WAAYF,CAAU,EACnD,SAAS,oBAAoB,QAASE,CAAW,EACjDI,EAAS,WAAW,EACpB,IAAMD,EAAQ,SAAS,eAAeD,CAAO,EACzCC,GAAOA,EAAM,OAAO,EACxB,SAAS,iBAAiB,wBAAwB,EAAE,QAASE,GAAO,CAC/DA,EAAmB,gBAAkB,OAC1C,CAAC,CACL,CACJ,EAAG,CAAClC,EAAYY,CAAc,CAAC,EAG3B,EAAAwB,QAAA,cAACvC,GAAc,SAAd,CAAuB,MAAO,CAC3B,WAAAG,EACA,SAAAE,EACA,WAAAE,EACA,cAAAH,EACA,eAAAW,EACA,YAAAa,GACA,eAAAC,GACA,UAAAlB,EACJ,GACKT,EACD,EAAAqC,QAAA,cAAC,SACG,KAAK,OACL,IAAKzB,EACL,SAAUO,GACV,OAAO,UACP,MAAO,CAAE,QAAS,MAAO,EAC7B,CACJ,CAER,EAEamB,EAAY,IAAM,CAC3B,IAAMC,KAAU,cAAWzC,EAAa,EACxC,GAAIyC,IAAY,OACZ,MAAM,IAAI,MAAM,iDAAiD,EAErE,OAAOA,CACX,ET/LO,SAASC,GAAe,CAAE,KAAAC,EAAM,WAAAC,EAAa,GAAO,OAAAC,CAAO,EAAwB,CACtF,GAAM,CAAE,cAAAC,EAAe,UAAAC,CAAU,EAAIC,EAAU,KAG/C,aAAU,IAAM,CACZF,EAAcF,CAAU,CAC5B,EAAG,CAACA,EAAYE,CAAa,CAAC,KAE9B,aAAU,IAAM,CACRD,GACAE,EAAUF,CAAa,CAE/B,EAAG,CAACA,EAAQE,CAAS,CAAC,EAEtB,IAAME,KAAa,WAAQ,IAChBC,GACHP,EACAQ,EACJ,EACD,CAACR,CAAI,CAAC,EAET,OACI,EAAAS,QAAA,cAACC,GAAA,CACG,KAAMJ,EACN,WAAYL,EAChB,CAER,CU1CA,IAAAU,EAAkB,eAELC,GAAmB,IAAE,OAAO,CACrC,MAAO,IAAE,OAAO,EAAE,IAAI,EAAG,wBAAwB,EACjD,MAAO,IAAE,OAAO,EAAE,IAAI,EAAG,mBAAmB,EAC5C,YAAa,IAAE,OAAO,EAAE,IAAI,EAAG,0BAA0B,EACzD,YAAa,IAAE,OAAO,EAAE,IAAI,EAAG,yBAAyB,EACxD,QAAS,IAAE,OAAO,EAAE,IAAI,EAAG,sBAAsB,CACrD,CAAC,EAEYC,GAAsB,IAAE,OAAO,CACxC,MAAO,IAAE,OAAO,EAAE,IAAI,mBAAmB,CAC7C,CAAC,EAEYC,GAAuB,IAAE,OAAO,CACzC,KAAMF,GACN,QAASC,EACb,CAAC","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"]}
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 './components/Hi';\r\nexport { ModernTemplate } from './templates/Modern/Template';\r\nexport { ModernTemplateSchema, type ModernTemplateSchemaType } from './templates/Modern/schema';\r\nexport { 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}","\"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"]}
@@ -0,0 +1 @@
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-inter),sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:0 0% 7%;--card:0 0% 98%;--card-foreground:0 0% 7%;--popover:0 0% 100%;--popover-foreground:0 0% 7%;--primary:44 96% 51%;--primary-foreground:240 5.9% 10%;--secondary:0 0% 10%;--secondary-foreground:0 0% 100%;--muted:0 0% 90%;--muted-foreground:0 0% 40%;--accent:44 100% 94%;--accent-foreground:44 96% 51%;--destructive:0 84% 60%;--destructive-foreground:0 0% 100%;--border:0 0% 88%;--input:0 0% 96%;--ring:44 96% 51%;--chart-1:44 96% 51%;--chart-2:38 92% 50%;--chart-3:12 85% 45%;--chart-4:45 90% 55%;--chart-5:0 0% 20%;--sidebar:0 0% 98%;--sidebar-foreground:0 0% 10%;--sidebar-primary:44 96% 51%;--sidebar-primary-foreground:240 5.9% 10%;--sidebar-accent:44 100% 94%;--sidebar-accent-foreground:44 96% 51%;--sidebar-border:0 0% 85%;--sidebar-ring:44 96% 51%;--font-sans:Inter,system-ui,sans-serif;--font-serif:Georgia,serif;--font-mono:Menlo,monospace;--radius:0.3rem;--shadow-sm:0px 2px 6px rgba(250,186,10,.15);--shadow-md:0px 4px 12px rgba(250,186,10,.25);--shadow-lg:0px 8px 24px rgba(250,186,10,.35)}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}html{scroll-behavior:smooth}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}a,button{transition:all .2s ease-in-out}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-10{bottom:-2.5rem}.-bottom-12{bottom:-3rem}.-bottom-6{bottom:-1.5rem}.-left-4{left:-1rem}.-left-\[100px\]{left:-100px}.-right-10{right:-2.5rem}.-right-4{right:-1rem}.-top-12{top:-3rem}.-top-\[150px\]{top:-150px}.bottom-0{bottom:0}.bottom-\[-10\%\]{bottom:-10%}.bottom-\[10\.5\%\]{bottom:10.5%}.bottom-\[7\.5\%\]{bottom:7.5%}.left-0{left:0}.left-1{left:.25rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-\[-5\%\]{left:-5%}.left-\[13\%\]{left:13%}.left-\[50\%\]{left:50%}.left-\[8\%\]{left:8%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-\[-5\%\]{right:-5%}.right-\[30\.5\%\]{right:30.5%}.right-\[37\%\]{right:37%}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[-10\%\]{top:-10%}.top-\[45\%\]{top:45%}.top-\[47\%\]{top:47%}.top-\[50\%\]{top:50%}.-z-10{z-index:-10}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[100\]{z-index:100}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-mt-4{margin-top:-1rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-16{margin-bottom:4rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-12{margin-top:3rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[3\/4\]{aspect-ratio:3/4}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-square{aspect-ratio:1/1}.aspect-video{aspect-ratio:16/9}.size-4{width:1rem;height:1rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1\.2rem\]{height:1.2rem}.h-\[120\%\]{height:120%}.h-\[1px\]{height:1px}.h-\[26\%\]{height:26%}.h-\[28\%\]{height:28%}.h-\[300px\]{height:300px}.h-\[34px\]{height:34px}.h-\[4\%\]{height:4%}.h-\[400px\]{height:400px}.h-\[5\%\]{height:5%}.h-\[500px\]{height:500px}.h-\[60\%\]{height:60%}.h-\[90\%\]{height:90%}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.max-h-60{max-height:15rem}.max-h-96{max-height:24rem}.max-h-\[90vh\]{max-height:90vh}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:0}.min-h-\[2\.25rem\]{min-height:2.25rem}.min-h-\[2\.5rem\]{min-height:2.5rem}.min-h-\[3rem\]{min-height:3rem}.min-h-\[80px\]{min-height:80px}.min-h-svh{min-height:100svh}.w-0{width:0}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[--sidebar-width-mobile\]{width:var(--sidebar-width-mobile)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1\.2rem\]{width:1.2rem}.w-\[10\%\]{width:10%}.w-\[120\%\]{width:120%}.w-\[15\.5\%\]{width:15.5%}.w-\[16\%\]{width:16%}.w-\[1px\]{width:1px}.w-\[300px\]{width:300px}.w-\[400px\]{width:400px}.w-\[500px\]{width:500px}.w-\[60\%\]{width:60%}.w-\[600px\]{width:600px}.w-\[8\%\]{width:8%}.w-\[90\%\]{width:90%}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0}.min-w-5{min-width:1.25rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[600px\]{max-width:600px}.max-w-\[700px\]{max-width:700px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-px{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x:-1px}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.translate-x-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x:-50%}.translate-x-px{--tw-translate-x:1px}.translate-x-px,.translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y:1rem}.translate-y-\[-50\%\]{--tw-translate-y:-50%}.rotate-0,.translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate:0deg}.rotate-90{--tw-rotate:90deg}.rotate-90,.scale-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-100,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-\[spin_0\.03s_linear_infinite\]{animation:spin .03s linear infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.auto-rows-\[300px\]{grid-auto-rows:300px}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-.25rem*var(--tw-space-x-reverse));margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded-2xl{border-radius:1rem}.rounded-\[100\%\]{border-radius:100%}.rounded-\[2px\]{border-radius:2px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-\[1\.5px\]{border-width:1.5px}.border-\[3px\]{border-width:3px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[--color-border\]{border-color:var(--color-border)}.border-black\/20{border-color:rgba(0,0,0,.2)}.border-border\/50{border-color:hsl(var(--border)/.5)}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/50{border-color:hsl(var(--destructive)/.5)}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-transparent{border-color:transparent}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.border-white\/20{border-color:hsla(0,0%,100%,.2)}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[--color-bg\]{background-color:var(--color-bg)}.bg-accent{background-color:hsl(var(--accent))}.bg-background{background-color:hsl(var(--background))}.bg-background\/20{background-color:hsl(var(--background)/.2)}.bg-black\/10{background-color:rgba(0,0,0,.1)}.bg-black\/20{background-color:rgba(0,0,0,.2)}.bg-black\/30{background-color:rgba(0,0,0,.3)}.bg-black\/60{background-color:rgba(0,0,0,.6)}.bg-black\/80{background-color:rgba(0,0,0,.8)}.bg-black\/90{background-color:rgba(0,0,0,.9)}.bg-blue-500\/5{background-color:rgba(59,130,246,.05)}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/30{background-color:hsl(var(--muted)/.3)}.bg-muted\/50{background-color:hsl(var(--muted)/.5)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/20{background-color:hsl(var(--primary)/.2)}.bg-primary\/5{background-color:hsl(var(--primary)/.05)}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/30{background-color:hsl(var(--secondary)/.3)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-transparent{background-color:transparent}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-zinc-900\/90{background-color:rgba(24,24,27,.9)}.bg-\[radial-gradient\(hsl\(var\(--primary\)\)_1px\2c transparent_1px\)\]{background-image:radial-gradient(hsl(var(--primary)) 1px,transparent 1px)}.bg-\[radial-gradient\(hsl\(var\(--primary\)\)_2px\2c transparent_2px\)\]{background-image:radial-gradient(hsl(var(--primary)) 2px,transparent 2px)}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-background{--tw-gradient-from:hsl(var(--background)) var(--tw-gradient-from-position);--tw-gradient-to:hsl(var(--background)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-primary{--tw-gradient-from:hsl(var(--primary)) var(--tw-gradient-from-position);--tw-gradient-to:hsl(var(--primary)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-primary\/10{--tw-gradient-from:hsl(var(--primary)/0.1) var(--tw-gradient-from-position);--tw-gradient-to:hsl(var(--primary)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-primary\/20{--tw-gradient-from:hsl(var(--primary)/0.2) var(--tw-gradient-from-position);--tw-gradient-to:hsl(var(--primary)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-white\/30{--tw-gradient-from:hsla(0,0%,100%,.3) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-primary\/5{--tw-gradient-to:hsl(var(--primary)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsl(var(--primary)/0.05) var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-primary\/60{--tw-gradient-to:hsl(var(--primary)/0.6) var(--tw-gradient-to-position)}.to-secondary\/10{--tw-gradient-to:hsl(var(--secondary)/0.1) var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-current{fill:currentColor}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-\[1px\]{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-7{padding-top:1.75rem;padding-bottom:1.75rem}.pb-12{padding-bottom:3rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-1\.5{padding-right:.375rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-32{padding-top:8rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:var(--font-inter),sans-serif}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-\[0\.8rem\]{font-size:.8rem}.text-\[10px\]{font-size:10px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\[0\.9\]{line-height:.9}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/50{color:hsl(var(--foreground)/.5)}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/60{color:hsl(var(--sidebar-foreground)/.6)}.text-transparent{color:transparent}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.text-yellow-500\/50{color:rgba(234,179,8,.5)}.text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity,1))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.opacity-\[0\.1\]{opacity:.1}.opacity-\[0\.25\]{opacity:.25}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-none,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-black\/50{--tw-shadow-color:rgba(0,0,0,.5);--tw-shadow:var(--tw-shadow-colored)}.shadow-primary\/20{--tw-shadow-color:hsl(var(--primary)/0.2);--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-sidebar-ring{--tw-ring-color:hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.blur{--tw-blur:blur(8px)}.blur,.blur-2xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-2xl{--tw-blur:blur(40px)}.blur-3xl{--tw-blur:blur(64px)}.blur-3xl,.blur-\[100px\]{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[100px\]{--tw-blur:blur(100px)}.blur-\[3px\]{--tw-blur:blur(3px)}.blur-\[3px\],.blur-sm{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-sm{--tw-blur:blur(4px)}.drop-shadow-\[0_20px_50px_rgba\(0\2c 0\2c 0\2c 0\.2\)\]{--tw-drop-shadow:drop-shadow(0 20px 50px rgba(0,0,0,.2))}.drop-shadow-\[0_20px_50px_rgba\(0\2c 0\2c 0\2c 0\.2\)\],.drop-shadow-\[0_50px_50px_rgba\(0\2c 0\2c 0\2c 0\.7\)\]{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\[0_50px_50px_rgba\(0\2c 0\2c 0\2c 0\.7\)\]{--tw-drop-shadow:drop-shadow(0 50px 50px rgba(0,0,0,.7))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-2xl{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-2xl{--tw-backdrop-blur:blur(40px)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px)}.backdrop-blur-\[1px\],.backdrop-blur-\[2px\]{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-md,.backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-blur-xl{--tw-backdrop-blur:blur(24px)}.backdrop-blur-xl,.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\2c right\2c width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\2c opa\]{transition-property:margin,opa;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.fade-in-0{--tw-enter-opacity:0}.zoom-in-95{--tw-enter-scale:.95}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.duration-700{animation-duration:.7s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.\[background-size\:10px_10px\]{background-size:10px 10px}.\[background-size\:24px_24px\]{background-size:24px 24px}.\[mask-image\:linear-gradient\(to_right\2c black_10\%\2c transparent_80\%\)\]{-webkit-mask-image:linear-gradient(90deg,#000 10%,transparent 80%);mask-image:linear-gradient(90deg,#000 10%,transparent 80%)}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.animate-float{animation:float 3s ease-in-out infinite}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive)/.8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive)/.9)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted)/.5)}.hover\:bg-primary:hover{background-color:hsl(var(--primary))}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary)/.8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary)/.9)}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary)/.8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.hover\:bg-white\/20:hover{background-color:hsla(0,0%,100%,.2)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-primary-foreground:hover{color:hsl(var(--primary-foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-primary\/40:hover{--tw-shadow-color:hsl(var(--primary)/0.4);--tw-shadow:var(--tw-shadow-colored)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-primary:focus{background-color:hsl(var(--primary))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-primary-foreground:focus{color:hsl(var(--primary-foreground))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-1:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-primary:focus{--tw-ring-color:hsl(var(--primary))}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color:hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:translate-y-0{--tw-translate-y:0px}.group:hover .group-hover\:rotate-12,.group:hover .group-hover\:translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:rotate-12{--tw-rotate:12deg}.group:hover .group-hover\:scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:bg-black\/0{background-color:transparent}.group:hover .group-hover\:opacity-100,.group\/menu-item:hover .group-hover\/menu-item\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:border-muted\/40{border-color:hsl(var(--muted)/.4)}.group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover{border-color:hsl(var(--destructive)/.3)}.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover{background-color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{color:hsl(var(--destructive-foreground))}.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity,1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus{--tw-ring-color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(248 113 113/var(--tw-ring-opacity,1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color:#dc2626}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.aria-selected\:bg-accent\/50[aria-selected=true]{background-color:hsl(var(--accent)/.5)}.aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}.aria-selected\:text-muted-foreground[aria-selected=true]{color:hsl(var(--muted-foreground))}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom],.data-\[side\=left\]\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right],.data-\[side\=top\]\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end],.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x)}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[active\=true\]\:bg-primary\/10[data-active=true]{background-color:hsl(var(--primary)/.1)}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=active\]\:bg-primary[data-state=active],.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-bold[data-active=true]{font-weight:700}.data-\[active\=true\]\:text-primary[data-active=true]{color:hsl(var(--primary))}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[state\=active\]\:text-primary-foreground[data-state=active],.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity:0.8}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed],.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}.data-\[state\=open\]\:slide-in-from-top-full[data-state=open]{--tw-enter-translate-y:-100%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width)*-1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width)*-1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-10{width:2.5rem!important;height:2.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0,.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate:180deg}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer[data-variant=inset]~.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]{min-height:calc(100svh - 1rem)}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}@supports ((-webkit-backdrop-filter:var(--tw )) or (backdrop-filter:var(--tw ))){.supports-\[backdrop-filter\]\:bg-white\/10{background-color:hsla(0,0%,100%,.1)}}.dark\:-rotate-90:is(.dark *){--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:rotate-0:is(.dark *){--tw-rotate:0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:scale-0:is(.dark *){--tw-scale-x:0;--tw-scale-y:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:scale-100:is(.dark *){--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}@media (min-width:640px){.sm\:bottom-0{bottom:0}.sm\:right-0{right:0}.sm\:top-auto{top:auto}.sm\:mt-0{margin-top:0}.sm\:flex{display:flex}.sm\:w-\[400px\]{width:400px}.sm\:max-w-sm{max-width:24rem}.sm\:flex-row{flex-direction:row}.sm\:flex-col{flex-direction:column}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}.data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y:100%}}@media (min-width:768px){.md\:-left-12{left:-3rem}.md\:-right-12{right:-3rem}.md\:right-8{right:2rem}.md\:top-8{top:2rem}.md\:col-span-2{grid-column:span 2/span 2}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:aspect-auto{aspect-ratio:auto}.md\:h-\[400px\]{height:400px}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:p-8{padding:2rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-8xl{font-size:6rem;line-height:1}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}}@media (min-width:1024px){.lg\:hidden{display:none}.lg\:h-\[500px\]{height:500px}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:overflow-visible{overflow:visible}.lg\:object-\[center_20\%\]{-o-object-position:center 20%;object-position:center 20%}}.\[\&\:has\(\[aria-selected\]\)\]\:bg-accent:has([aria-selected]){background-color:hsl(var(--accent))}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:has([aria-selected]):first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:has([aria-selected]):last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\.day-outside\)\]\:bg-accent\/50:has([aria-selected].day-outside){background-color:hsl(var(--accent)/.5)}.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:size-5>svg{width:1.25rem;height:1.25rem}.\[\&\>svg\]\:h-2\.5>svg{height:.625rem}.\[\&\>svg\]\:h-3>svg{height:.75rem}.\[\&\>svg\]\:w-2\.5>svg{width:.625rem}.\[\&\>svg\]\:w-3>svg{width:.75rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:hsl(var(--muted-foreground))}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:hsl(var(--border)/.5)}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:hsl(var(--border))}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer{outline:2px solid transparent;outline-offset:2px}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:hsl(var(--muted))}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-sector\]\:outline-none .recharts-sector,.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{outline:2px solid transparent;outline-offset:2px}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}
package/package.json CHANGED
@@ -1,21 +1,22 @@
1
1
  {
2
2
  "name": "ediflix-template",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
8
- "dist"
8
+ "dist",
9
+ "README.md"
9
10
  ],
10
11
  "scripts": {
11
12
  "dev": "next dev --turbopack",
12
13
  "build": "next build",
13
- "build:package": "tsup ./src/index.ts --dts",
14
+ "build:lib": "tsup",
15
+ "build:css": "tailwindcss -i ./src/app/globals.css -o ./dist/styles.css --minify",
16
+ "build:package": "npm run build:lib && npm run build:css",
14
17
  "env": "node src/scripts/env-manager.cjs",
15
18
  "start": "next start",
16
- "lint": "next lint",
17
- "typecheck": "tsc --noEmit",
18
- "build:css": "tailwindcss -i ./src/styles/tailwind.css -o ./dist/styles.css --minify"
19
+ "typecheck": "tsc --noEmit"
19
20
  },
20
21
  "peerDependencies": {
21
22
  "react": "^18.3.1",