{"version":3,"file":"page-builder.cjs","sources":["../src/components/StyleControls.jsx","../src/components/IconPicker.jsx","../src/components/EmbedHelper.jsx","../src/components/DynamicIcon.jsx","../src/components/ContextMenu.jsx","../src/PageBuilder.jsx","../src/components/FormWithValidation.jsx","../src/Renderer.jsx","../src/index.jsx"],"sourcesContent":["import { useState } from 'react';\nimport { HexColorPicker } from 'react-colorful';\n\nexport function ColorPicker({ label, value, onChange, showBrandColors = false, brandColors = [] }) {\n  // brandColors can be passed as a prop for standalone usage\n  const [showPicker, setShowPicker] = useState(false);\n\n  return (\n    <div className=\"form-control\">\n      <label className=\"label\">\n        <span className=\"label-text font-semibold\">{label}</span>\n      </label>\n\n      {showBrandColors && brandColors.length > 0 && (\n        <div className=\"mb-2\">\n          <span className=\"text-xs text-gray-500 block mb-1\">Brand Colors:</span>\n          <div className=\"flex gap-2 flex-wrap\">\n            {brandColors.map((color, idx) => (\n              <button\n                key={idx}\n                type=\"button\"\n                className=\"w-8 h-8 rounded border-2 border-gray-300 hover:border-primary transition-colors\"\n                style={{ backgroundColor: color }}\n                onClick={() => onChange(color)}\n                title={color}\n              />\n            ))}\n          </div>\n        </div>\n      )}\n\n      <div className=\"flex gap-2 items-center\">\n        <input\n          type=\"text\"\n          className=\"input input-bordered input-sm flex-1\"\n          value={value || ''}\n          onChange={(e) => onChange(e.target.value)}\n          placeholder=\"#000000\"\n        />\n        <button\n          type=\"button\"\n          className=\"btn btn-sm btn-square\"\n          onClick={() => setShowPicker(!showPicker)}\n        >\n          🎨\n        </button>\n      </div>\n\n      {showPicker && (\n        <div className=\"mt-2\">\n          <HexColorPicker color={value || '#000000'} onChange={onChange} />\n        </div>\n      )}\n    </div>\n  );\n}\n\nexport function SpacingControl({ label, value, onChange, _property = 'padding' }) {\n  const [mode, setMode] = useState('all'); // 'all' or 'individual'\n  const [values, setValues] = useState({\n    all: '0px',\n    top: '0px',\n    right: '0px',\n    bottom: '0px',\n    left: '0px',\n    ...value\n  });\n\n  const presets = [\n    { label: 'None', value: '0px' },\n    { label: 'XS', value: '4px' },\n    { label: 'SM', value: '8px' },\n    { label: 'MD', value: '16px' },\n    { label: 'LG', value: '24px' },\n    { label: 'XL', value: '32px' },\n  ];\n\n  const handlePresetClick = (presetValue) => {\n    if (mode === 'all') {\n      setValues({ ...values, all: presetValue });\n      onChange({ all: presetValue });\n    }\n  };\n\n  const handleIndividualChange = (side, val) => {\n    const newValues = { ...values, [side]: val };\n    setValues(newValues);\n    onChange(newValues);\n  };\n\n  return (\n    <div className=\"form-control\">\n      <label className=\"label\">\n        <span className=\"label-text font-semibold\">{label}</span>\n      </label>\n\n      <div className=\"btn-group btn-group-sm mb-2 w-full\">\n        <button\n          type=\"button\"\n          className={`btn btn-sm flex-1 ${mode === 'all' ? 'btn-active' : ''}`}\n          onClick={() => setMode('all')}\n        >\n          All\n        </button>\n        <button\n          type=\"button\"\n          className={`btn btn-sm flex-1 ${mode === 'individual' ? 'btn-active' : ''}`}\n          onClick={() => setMode('individual')}\n        >\n          Individual\n        </button>\n      </div>\n\n      <div className=\"flex gap-1 mb-2 flex-wrap\">\n        {presets.map((preset) => (\n          <button\n            key={preset.value}\n            type=\"button\"\n            className=\"btn btn-xs\"\n            onClick={() => handlePresetClick(preset.value)}\n          >\n            {preset.label}\n          </button>\n        ))}\n      </div>\n\n      {mode === 'all' ? (\n        <input\n          type=\"text\"\n          className=\"input input-bordered input-sm w-full\"\n          value={values.all}\n          onChange={(e) => {\n            setValues({ ...values, all: e.target.value });\n            onChange({ all: e.target.value });\n          }}\n          placeholder=\"16px\"\n        />\n      ) : (\n        <div className=\"grid grid-cols-2 gap-2\">\n          <div>\n            <label className=\"label label-text-alt\">Top</label>\n            <input\n              type=\"text\"\n              className=\"input input-bordered input-sm w-full\"\n              value={values.top}\n              onChange={(e) => handleIndividualChange('top', e.target.value)}\n              placeholder=\"0px\"\n            />\n          </div>\n          <div>\n            <label className=\"label label-text-alt\">Right</label>\n            <input\n              type=\"text\"\n              className=\"input input-bordered input-sm w-full\"\n              value={values.right}\n              onChange={(e) => handleIndividualChange('right', e.target.value)}\n              placeholder=\"0px\"\n            />\n          </div>\n          <div>\n            <label className=\"label label-text-alt\">Bottom</label>\n            <input\n              type=\"text\"\n              className=\"input input-bordered input-sm w-full\"\n              value={values.bottom}\n              onChange={(e) => handleIndividualChange('bottom', e.target.value)}\n              placeholder=\"0px\"\n            />\n          </div>\n          <div>\n            <label className=\"label label-text-alt\">Left</label>\n            <input\n              type=\"text\"\n              className=\"input input-bordered input-sm w-full\"\n              value={values.left}\n              onChange={(e) => handleIndividualChange('left', e.target.value)}\n              placeholder=\"0px\"\n            />\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n\nexport function TypographyControl({ value = {}, onChange }) {\n  const fontSizes = ['12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px', '36px', '48px'];\n  const fontWeights = ['300', '400', '500', '600', '700', '800', '900'];\n  const fontFamilies = ['inherit', 'sans-serif', 'serif', 'monospace'];\n\n  return (\n    <div className=\"form-control space-y-3\">\n      <label className=\"label\">\n        <span className=\"label-text font-semibold\">Typography</span>\n      </label>\n\n      <div>\n        <label className=\"label label-text-alt\">Font Size</label>\n        <select\n          className=\"select select-bordered select-sm w-full\"\n          value={value.fontSize || '16px'}\n          onChange={(e) => onChange({ ...value, fontSize: e.target.value })}\n        >\n          {fontSizes.map(size => (\n            <option key={size} value={size}>{size}</option>\n          ))}\n        </select>\n      </div>\n\n      <div>\n        <label className=\"label label-text-alt\">Font Weight</label>\n        <select\n          className=\"select select-bordered select-sm w-full\"\n          value={value.fontWeight || '400'}\n          onChange={(e) => onChange({ ...value, fontWeight: e.target.value })}\n        >\n          {fontWeights.map(weight => (\n            <option key={weight} value={weight}>\n              {weight} {weight === '400' && '(Normal)'} {weight === '700' && '(Bold)'}\n            </option>\n          ))}\n        </select>\n      </div>\n\n      <div>\n        <label className=\"label label-text-alt\">Font Family</label>\n        <select\n          className=\"select select-bordered select-sm w-full\"\n          value={value.fontFamily || 'inherit'}\n          onChange={(e) => onChange({ ...value, fontFamily: e.target.value })}\n        >\n          {fontFamilies.map(family => (\n            <option key={family} value={family}>{family}</option>\n          ))}\n        </select>\n      </div>\n\n      <div>\n        <label className=\"label label-text-alt\">Line Height</label>\n        <input\n          type=\"text\"\n          className=\"input input-bordered input-sm w-full\"\n          value={value.lineHeight || ''}\n          onChange={(e) => onChange({ ...value, lineHeight: e.target.value })}\n          placeholder=\"1.5 or 24px\"\n        />\n      </div>\n\n      <div>\n        <label className=\"label label-text-alt\">Letter Spacing</label>\n        <input\n          type=\"text\"\n          className=\"input input-bordered input-sm w-full\"\n          value={value.letterSpacing || ''}\n          onChange={(e) => onChange({ ...value, letterSpacing: e.target.value })}\n          placeholder=\"0px or 0.5px\"\n        />\n      </div>\n    </div>\n  );\n}\n\nexport function BorderControl({ value = {}, onChange }) {\n  const borderStyles = ['none', 'solid', 'dashed', 'dotted', 'double'];\n\n  return (\n    <div className=\"form-control space-y-3\">\n      <label className=\"label\">\n        <span className=\"label-text font-semibold\">Border</span>\n      </label>\n\n      <div>\n        <label className=\"label label-text-alt\">Width</label>\n        <input\n          type=\"text\"\n          className=\"input input-bordered input-sm w-full\"\n          value={value.borderWidth || ''}\n          onChange={(e) => onChange({ ...value, borderWidth: e.target.value })}\n          placeholder=\"1px\"\n        />\n      </div>\n\n      <div>\n        <label className=\"label label-text-alt\">Style</label>\n        <select\n          className=\"select select-bordered select-sm w-full\"\n          value={value.borderStyle || 'solid'}\n          onChange={(e) => onChange({ ...value, borderStyle: e.target.value })}\n        >\n          {borderStyles.map(style => (\n            <option key={style} value={style}>{style}</option>\n          ))}\n        </select>\n      </div>\n\n      <div>\n        <label className=\"label label-text-alt\">Color</label>\n        <input\n          type=\"text\"\n          className=\"input input-bordered input-sm w-full\"\n          value={value.borderColor || ''}\n          onChange={(e) => onChange({ ...value, borderColor: e.target.value })}\n          placeholder=\"#000000\"\n        />\n      </div>\n\n      <div>\n        <label className=\"label label-text-alt\">Radius</label>\n        <input\n          type=\"text\"\n          className=\"input input-bordered input-sm w-full\"\n          value={value.borderRadius || ''}\n          onChange={(e) => onChange({ ...value, borderRadius: e.target.value })}\n          placeholder=\"4px or 50%\"\n        />\n      </div>\n    </div>\n  );\n}\n\nexport function ShadowControl({ value, onChange }) {\n  const presets = [\n    { label: 'None', value: 'none' },\n    { label: 'SM', value: '0 1px 2px 0 rgba(0, 0, 0, 0.05)' },\n    { label: 'MD', value: '0 4px 6px -1px rgba(0, 0, 0, 0.1)' },\n    { label: 'LG', value: '0 10px 15px -3px rgba(0, 0, 0, 0.1)' },\n    { label: 'XL', value: '0 20px 25px -5px rgba(0, 0, 0, 0.1)' },\n    { label: '2XL', value: '0 25px 50px -12px rgba(0, 0, 0, 0.25)' },\n  ];\n\n  return (\n    <div className=\"form-control\">\n      <label className=\"label\">\n        <span className=\"label-text font-semibold\">Box Shadow</span>\n      </label>\n\n      <div className=\"flex gap-1 mb-2 flex-wrap\">\n        {presets.map((preset) => (\n          <button\n            key={preset.label}\n            type=\"button\"\n            className=\"btn btn-xs\"\n            onClick={() => onChange(preset.value)}\n          >\n            {preset.label}\n          </button>\n        ))}\n      </div>\n\n      <textarea\n        className=\"textarea textarea-bordered text-xs\"\n        rows={2}\n        value={value || ''}\n        onChange={(e) => onChange(e.target.value)}\n        placeholder=\"0 4px 6px rgba(0, 0, 0, 0.1)\"\n      />\n    </div>\n  );\n}\n\nexport function DisplayControl({ value = {}, onChange }) {\n  const displayTypes = ['block', 'inline-block', 'flex', 'inline-flex', 'grid', 'inline-grid'];\n  const flexDirections = ['row', 'row-reverse', 'column', 'column-reverse'];\n  const justifyContent = ['flex-start', 'center', 'flex-end', 'space-between', 'space-around', 'space-evenly'];\n  const alignItems = ['flex-start', 'center', 'flex-end', 'stretch', 'baseline'];\n\n  const isFlex = value.display?.includes('flex');\n  const isGrid = value.display?.includes('grid');\n\n  return (\n    <div className=\"form-control space-y-3\">\n      <label className=\"label\">\n        <span className=\"label-text font-semibold\">Display & Layout</span>\n      </label>\n\n      <div>\n        <label className=\"label label-text-alt\">Display</label>\n        <select\n          className=\"select select-bordered select-sm w-full\"\n          value={value.display || 'block'}\n          onChange={(e) => onChange({ ...value, display: e.target.value })}\n        >\n          {displayTypes.map(type => (\n            <option key={type} value={type}>{type}</option>\n          ))}\n        </select>\n      </div>\n\n      {isFlex && (\n        <>\n          <div>\n            <label className=\"label label-text-alt\">Flex Direction</label>\n            <select\n              className=\"select select-bordered select-sm w-full\"\n              value={value.flexDirection || 'row'}\n              onChange={(e) => onChange({ ...value, flexDirection: e.target.value })}\n            >\n              {flexDirections.map(dir => (\n                <option key={dir} value={dir}>{dir}</option>\n              ))}\n            </select>\n          </div>\n\n          <div>\n            <label className=\"label label-text-alt\">Justify Content</label>\n            <select\n              className=\"select select-bordered select-sm w-full\"\n              value={value.justifyContent || 'flex-start'}\n              onChange={(e) => onChange({ ...value, justifyContent: e.target.value })}\n            >\n              {justifyContent.map(val => (\n                <option key={val} value={val}>{val}</option>\n              ))}\n            </select>\n          </div>\n\n          <div>\n            <label className=\"label label-text-alt\">Align Items</label>\n            <select\n              className=\"select select-bordered select-sm w-full\"\n              value={value.alignItems || 'stretch'}\n              onChange={(e) => onChange({ ...value, alignItems: e.target.value })}\n            >\n              {alignItems.map(val => (\n                <option key={val} value={val}>{val}</option>\n              ))}\n            </select>\n          </div>\n\n          <div>\n            <label className=\"label label-text-alt\">Gap</label>\n            <input\n              type=\"text\"\n              className=\"input input-bordered input-sm w-full\"\n              value={value.gap || ''}\n              onChange={(e) => onChange({ ...value, gap: e.target.value })}\n              placeholder=\"8px or 1rem\"\n            />\n          </div>\n        </>\n      )}\n\n      {isGrid && (\n        <>\n          <div>\n            <label className=\"label label-text-alt\">Grid Template Columns</label>\n            <input\n              type=\"text\"\n              className=\"input input-bordered input-sm w-full\"\n              value={value.gridTemplateColumns || ''}\n              onChange={(e) => onChange({ ...value, gridTemplateColumns: e.target.value })}\n              placeholder=\"repeat(3, 1fr)\"\n            />\n          </div>\n\n          <div>\n            <label className=\"label label-text-alt\">Grid Gap</label>\n            <input\n              type=\"text\"\n              className=\"input input-bordered input-sm w-full\"\n              value={value.gap || ''}\n              onChange={(e) => onChange({ ...value, gap: e.target.value })}\n              placeholder=\"16px\"\n            />\n          </div>\n        </>\n      )}\n    </div>\n  );\n}\n\n","import { useState, useEffect } from 'react';\nimport * as LucideIcons from 'lucide-react';\n\n// Heroicons list (manually curated subset for performance)\nconst heroIconNames = [\n  'HomeIcon', 'UserIcon', 'CogIcon', 'BellIcon', 'ChatBubbleLeftIcon',\n  'EnvelopeIcon', 'PhoneIcon', 'MapPinIcon', 'CalendarIcon', 'ClockIcon',\n  'HeartIcon', 'StarIcon', 'CheckIcon', 'XMarkIcon', 'PlusIcon',\n  'MinusIcon', 'ArrowRightIcon', 'ArrowLeftIcon', 'ArrowUpIcon', 'ArrowDownIcon',\n  'MagnifyingGlassIcon', 'ShoppingCartIcon', 'ShoppingBagIcon', 'CreditCardIcon', 'BanknotesIcon',\n  'DocumentIcon', 'FolderIcon', 'PaperClipIcon', 'PhotoIcon', 'VideoCameraIcon',\n  'MusicalNoteIcon', 'MicrophoneIcon', 'SpeakerWaveIcon', 'CameraIcon', 'FilmIcon',\n  'PencilIcon', 'TrashIcon', 'ArchiveBoxIcon', 'InboxIcon', 'PaperAirplaneIcon',\n  'BookOpenIcon', 'NewspaperIcon', 'AcademicCapIcon', 'BeakerIcon', 'LightBulbIcon',\n  'FireIcon', 'BoltIcon', 'SunIcon', 'MoonIcon', 'CloudIcon',\n  'GlobeAltIcon', 'LinkIcon', 'LockClosedIcon', 'LockOpenIcon', 'KeyIcon',\n  'ShieldCheckIcon', 'UserGroupIcon', 'UsersIcon', 'UserPlusIcon', 'UserMinusIcon',\n  'BuildingOfficeIcon', 'BuildingStorefrontIcon', 'HomeModernIcon', 'TruckIcon', 'RocketLaunchIcon',\n];\n\nexport default function IconPicker({ value = {}, onChange }) {\n  const [library, setLibrary] = useState(value.iconLibrary || 'lucide');\n  const [search, setSearch] = useState('');\n  const [heroIcons, setHeroIcons] = useState({});\n  const [currentPage, setCurrentPage] = useState(1);\n  const iconsPerPage = 60; // 6 columns × 10 rows\n\n  // Dynamically import hero icons when needed\n  useEffect(() => {\n    if (library === 'heroicons' && Object.keys(heroIcons).length === 0) {\n      import('@heroicons/react/24/outline').then(module => {\n        setHeroIcons(module);\n      });\n    }\n  }, [library, heroIcons]);\n\n  // Reset page when search changes\n  useEffect(() => {\n    setCurrentPage(1);\n  }, [search]);\n  \n  // Fix Lucide icon filtering - exclude internal functions\n  const lucideIconNames = Object.keys(LucideIcons).filter(name => {\n    const item = LucideIcons[name];\n    return (\n      typeof item === 'function' &&\n      name !== 'createLucideIcon' &&\n      name !== 'default' &&\n      !name.startsWith('_') &&\n      // Ensure it's actually a component (has displayName or is a valid React component)\n      item.length !== undefined\n    );\n  });\n\n  const filteredHeroIcons = search \n    ? heroIconNames.filter(name => name.toLowerCase().includes(search.toLowerCase()))\n    : heroIconNames;\n\n  const filteredLucideIcons = search\n    ? lucideIconNames.filter(name => name.toLowerCase().includes(search.toLowerCase()))\n    : lucideIconNames;\n\n  // Pagination calculations\n  const startIdx = (currentPage - 1) * iconsPerPage;\n  const endIdx = startIdx + iconsPerPage;\n  const totalPages = Math.ceil(filteredLucideIcons.length / iconsPerPage);\n\n  const handleIconSelect = (iconName) => {\n    onChange({\n      ...value,\n      iconLibrary: library,\n      iconName,\n      customSvg: null,\n    });\n  };\n\n  const handleSvgUpload = (e) => {\n    const file = e.target.files[0];\n    if (file && file.type === 'image/svg+xml') {\n      const reader = new FileReader();\n      reader.onload = (event) => {\n        onChange({\n          ...value,\n          iconLibrary: 'custom',\n          iconName: null,\n          customSvg: event.target.result,\n        });\n      };\n      reader.readAsText(file);\n    } else {\n      alert('Please upload a valid SVG file');\n    }\n  };\n\n  return (\n    <div className=\"icon-picker\">\n      <div className=\"form-control mb-4\">\n        <label className=\"label\">\n          <span className=\"label-text font-semibold\">Icon Library</span>\n        </label>\n        <div className=\"tabs tabs-boxed\">\n          <button\n            type=\"button\"\n            className={`tab ${library === 'heroicons' ? 'tab-active' : ''}`}\n            onClick={() => setLibrary('heroicons')}\n          >\n            Heroicons\n          </button>\n          <button\n            type=\"button\"\n            className={`tab ${library === 'lucide' ? 'tab-active' : ''}`}\n            onClick={() => setLibrary('lucide')}\n          >\n            Lucide\n          </button>\n          <button\n            type=\"button\"\n            className={`tab ${library === 'custom' ? 'tab-active' : ''}`}\n            onClick={() => setLibrary('custom')}\n          >\n            Custom SVG\n          </button>\n        </div>\n      </div>\n\n      {library === 'custom' ? (\n        <div className=\"form-control\">\n          <label className=\"label\">\n            <span className=\"label-text\">Upload SVG File</span>\n          </label>\n          <input\n            type=\"file\"\n            accept=\".svg,image/svg+xml\"\n            onChange={handleSvgUpload}\n            className=\"file-input file-input-bordered file-input-sm w-full\"\n          />\n          {value.customSvg && (\n            <div className=\"mt-4 p-4 border border-base-300 rounded-lg\">\n              <p className=\"text-sm mb-2\">Preview:</p>\n              <div\n                className=\"w-12 h-12\"\n                dangerouslySetInnerHTML={{ __html: value.customSvg }}\n              />\n            </div>\n          )}\n        </div>\n      ) : (\n        <div>\n          <div className=\"form-control mb-3\">\n            <input\n              type=\"search\"\n              placeholder=\"Search icons...\"\n              className=\"input input-bordered input-sm\"\n              value={search}\n              onChange={(e) => setSearch(e.target.value)}\n            />\n          </div>\n\n          <div className=\"h-64 overflow-y-auto border border-base-300 rounded-lg p-2\">\n            {library === 'heroicons' ? (\n              <div className=\"grid grid-cols-6 gap-2\">\n                {Object.keys(heroIcons).length > 0 ? (\n                  filteredHeroIcons.slice(0, 50).map((iconName) => {\n                    const IconComponent = heroIcons[iconName];\n                    if (!IconComponent) return null;\n                    return (\n                      <button\n                        key={iconName}\n                        type=\"button\"\n                        className={`btn btn-sm btn-square ${\n                          value.iconName === iconName ? 'btn-primary' : 'btn-ghost'\n                        }`}\n                        onClick={() => handleIconSelect(iconName)}\n                        title={iconName}\n                      >\n                        <IconComponent className=\"w-5 h-5\" />\n                      </button>\n                    );\n                  })\n                ) : (\n                  <div className=\"col-span-6 text-center py-4 text-gray-500\">\n                    Loading icons...\n                  </div>\n                )}\n              </div>\n            ) : (\n              <div className=\"grid grid-cols-6 gap-2\">\n                {filteredLucideIcons.slice(startIdx, endIdx).map((iconName) => {\n                  const IconComponent = LucideIcons[iconName];\n                  return (\n                    <button\n                      key={iconName}\n                      type=\"button\"\n                      className={`btn btn-sm btn-square ${\n                        value.iconName === iconName ? 'btn-primary' : 'btn-ghost'\n                      }`}\n                      onClick={() => handleIconSelect(iconName)}\n                      title={iconName}\n                    >\n                      <IconComponent className=\"w-5 h-5\" />\n                    </button>\n                  );\n                })}\n              </div>\n            )}\n          </div>\n\n          {library === 'heroicons' && (\n            <p className=\"text-xs text-gray-500 mt-2\">\n              Showing {Math.min(filteredHeroIcons.length, 50)} of {filteredHeroIcons.length} curated icons\n            </p>\n          )}\n          {library === 'lucide' && (\n            <>\n              <p className=\"text-xs text-gray-500 mt-2\">\n                Showing {startIdx + 1}-{Math.min(endIdx, filteredLucideIcons.length)} of {filteredLucideIcons.length} icons\n              </p>\n              {totalPages > 1 && (\n                <div className=\"flex items-center justify-between mt-2\">\n                  <button\n                    type=\"button\"\n                    className=\"btn btn-xs\"\n                    disabled={currentPage === 1}\n                    onClick={() => setCurrentPage(p => p - 1)}\n                  >\n                    ← Prev\n                  </button>\n                  <span className=\"text-xs font-semibold\">\n                    Page {currentPage} of {totalPages}\n                  </span>\n                  <button\n                    type=\"button\"\n                    className=\"btn btn-xs\"\n                    disabled={currentPage === totalPages}\n                    onClick={() => setCurrentPage(p => p + 1)}\n                  >\n                    Next →\n                  </button>\n                </div>\n              )}\n            </>\n          )}\n        </div>\n      )}\n\n      {value.iconName && (\n        <div className=\"mt-4\">\n          <p className=\"text-sm font-semibold mb-1\">Selected Icon:</p>\n          <div className=\"badge badge-primary\">{value.iconName}</div>\n        </div>\n      )}\n    </div>\n  );\n}\n\n","import { useState, useEffect } from 'react';\n\nexport function EmbedHelper({ value = {}, onChange }) {\n  const [mode, setMode] = useState('url');\n  const [urlInput, setUrlInput] = useState('');\n  const [codeInput, setCodeInput] = useState(value.embedCode || '');\n\n  useEffect(() => {\n    if (value.url) {\n      setUrlInput(value.url);\n    }\n  }, [value.url]);\n\n  function convertToYouTubeEmbed(url) {\n    // Extract video ID from various YouTube URL formats\n    let videoId = '';\n    \n    if (url.includes('youtube.com/watch?v=')) {\n      videoId = url.split('v=')[1]?.split('&')[0];\n    } else if (url.includes('youtu.be/')) {\n      videoId = url.split('youtu.be/')[1]?.split('?')[0];\n    } else if (url.includes('youtube.com/embed/')) {\n      videoId = url.split('embed/')[1]?.split('?')[0];\n    }\n\n    if (videoId) {\n      return `<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>`;\n    }\n    return null;\n  }\n\n  function convertToMapsEmbed(url) {\n    // Try to extract coordinates or place ID\n    if (url.includes('maps.google.com') || url.includes('google.com/maps')) {\n      // Simple approach: wrap the URL in an iframe\n      return `<iframe src=\"${url}\" width=\"600\" height=\"450\" style=\"border:0;\" allowfullscreen=\"\" loading=\"lazy\"></iframe>`;\n    }\n    return null;\n  }\n\n  function autoDetectEmbed(input) {\n    if (input.includes('youtube.com') || input.includes('youtu.be')) {\n      const code = convertToYouTubeEmbed(input);\n      if (code) {\n        return { type: 'youtube', code, url: input };\n      }\n    } else if (input.includes('maps.google.com') || input.includes('google.com/maps')) {\n      const code = convertToMapsEmbed(input);\n      if (code) {\n        return { type: 'maps', code, url: input };\n      }\n    } else if (input.startsWith('<iframe') || input.startsWith('<embed')) {\n      return { type: 'custom', code: input, url: '' };\n    }\n    return null;\n  }\n\n  const handleUrlChange = (input) => {\n    setUrlInput(input);\n    const detected = autoDetectEmbed(input);\n    if (detected) {\n      onChange({\n        embedType: detected.type,\n        embedCode: detected.code,\n        url: detected.url,\n      });\n    }\n  };\n\n  const handleCodeChange = (input) => {\n    setCodeInput(input);\n    onChange({\n      embedType: 'custom',\n      embedCode: input,\n      url: '',\n    });\n  };\n\n  return (\n    <div className=\"embed-helper\">\n      <div className=\"form-control mb-4\">\n        <label className=\"label\">\n          <span className=\"label-text font-semibold\">Embed Source</span>\n        </label>\n        <div className=\"btn-group w-full\">\n          <button\n            type=\"button\"\n            className={`btn btn-sm flex-1 ${mode === 'url' ? 'btn-active' : ''}`}\n            onClick={() => setMode('url')}\n          >\n            📎 Paste URL\n          </button>\n          <button\n            type=\"button\"\n            className={`btn btn-sm flex-1 ${mode === 'code' ? 'btn-active' : ''}`}\n            onClick={() => setMode('code')}\n          >\n            💻 Paste Code\n          </button>\n        </div>\n      </div>\n\n      {mode === 'url' ? (\n        <div className=\"form-control\">\n          <label className=\"label\">\n            <span className=\"label-text\">Video or Map URL</span>\n          </label>\n          <input\n            type=\"url\"\n            className=\"input input-bordered\"\n            placeholder=\"https://youtube.com/watch?v=... or https://maps.google.com/...\"\n            value={urlInput}\n            onChange={(e) => handleUrlChange(e.target.value)}\n          />\n          <label className=\"label\">\n            <span className=\"label-text-alt\">Supports YouTube and Google Maps URLs</span>\n          </label>\n        </div>\n      ) : (\n        <div className=\"form-control\">\n          <label className=\"label\">\n            <span className=\"label-text\">Embed Code</span>\n          </label>\n          <textarea\n            className=\"textarea textarea-bordered font-mono text-xs\"\n            rows={6}\n            placeholder=\"<iframe src='...'></iframe>\"\n            value={codeInput}\n            onChange={(e) => handleCodeChange(e.target.value)}\n          />\n          <label className=\"label\">\n            <span className=\"label-text-alt\">Paste iframe or embed code from any service</span>\n          </label>\n        </div>\n      )}\n\n      {value.embedCode && (\n        <div className=\"mt-4\">\n          <label className=\"label\">\n            <span className=\"label-text font-semibold\">Preview:</span>\n          </label>\n          <div className=\"border border-base-300 rounded-lg p-2 bg-gray-50 overflow-hidden\">\n            <div dangerouslySetInnerHTML={{ __html: value.embedCode }} />\n          </div>\n          {value.embedType && (\n            <div className=\"mt-2\">\n              <span className=\"badge badge-info\">{value.embedType}</span>\n            </div>\n          )}\n        </div>\n      )}\n    </div>\n  );\n}\n\n","import { lazy, Suspense } from 'react';\nimport * as LucideIcons from 'lucide-react';\n\nexport default function DynamicIcon({ library, name, size = '24', color = '#000000', className = '' }) {\n  // For Heroicons, use dynamic import\n  if (library === 'heroicons' && name) {\n    try {\n      // Dynamically import the icon\n      const HeroIcon = lazy(() => \n        import('@heroicons/react/24/outline').then(module => ({ \n          default: module[name] || (() => <div>?</div>) \n        }))\n      );\n      \n      return (\n        <Suspense fallback={<div style={{ width: `${size}px`, height: `${size}px` }}>...</div>}>\n          <HeroIcon\n            className={className}\n            style={{\n              width: `${size}px`,\n              height: `${size}px`,\n              color: color,\n            }}\n          />\n        </Suspense>\n      );\n    } catch (error) {\n      console.error('Error loading Heroicon:', name, error);\n    }\n  }\n\n  if (library === 'lucide' && name && LucideIcons[name]) {\n    const IconComponent = LucideIcons[name];\n    return (\n      <IconComponent\n        className={className}\n        size={parseInt(size)}\n        color={color}\n      />\n    );\n  }\n\n  // Fallback if icon not found\n  return (\n    <div\n      className={`inline-flex items-center justify-center ${className}`}\n      style={{\n        width: `${size}px`,\n        height: `${size}px`,\n        border: '1px dashed #ccc',\n      }}\n    >\n      ?\n    </div>\n  );\n}\n\n","import { useEffect } from 'react';\n\nexport default function ContextMenu({ \n  visible, \n  x, \n  y, \n  component, \n  onClose, \n  onAddChild,\n  onDuplicate,\n  onDelete,\n  onEditText,\n  onBringToFront,\n  onSendToBack\n}) {\n  // Close on Escape key\n  useEffect(() => {\n    const handleKeyDown = (e) => {\n      if (e.key === 'Escape' && visible) {\n        onClose();\n      }\n    };\n    window.addEventListener('keydown', handleKeyDown);\n    return () => window.removeEventListener('keydown', handleKeyDown);\n  }, [visible, onClose]);\n\n  // Close on click outside\n  useEffect(() => {\n    const handleClickOutside = (e) => {\n      if (visible && !e.target.closest('.context-menu')) {\n        onClose();\n      }\n    };\n    window.addEventListener('mousedown', handleClickOutside);\n    return () => window.removeEventListener('mousedown', handleClickOutside);\n  }, [visible, onClose]);\n\n  if (!visible || !component) return null;\n\n  const isContainer = component.type === 'container' || component.type === 'columns' || component.type === 'form-container';\n  const isText = component.type === 'heading' || component.type === 'text' || component.type === 'button';\n\n  return (\n    <div\n      className=\"context-menu fixed z-[9999] bg-base-100 border border-base-300 rounded-lg shadow-xl py-2 min-w-[200px]\"\n      style={{ left: `${x}px`, top: `${y}px` }}\n    >\n      {isContainer && (\n        <button\n          onClick={() => { onAddChild(); onClose(); }}\n          className=\"w-full text-left px-4 py-2 hover:bg-base-200 flex items-center gap-2\"\n        >\n          <span>➕</span> Add Child\n        </button>\n      )}\n      \n      {isText && (\n        <button\n          onClick={() => { onEditText(); onClose(); }}\n          className=\"w-full text-left px-4 py-2 hover:bg-base-200 flex items-center gap-2\"\n        >\n          <span>✏️</span> Edit Text\n        </button>\n      )}\n\n      <button\n        onClick={() => { onDuplicate(); onClose(); }}\n        className=\"w-full text-left px-4 py-2 hover:bg-base-200 flex items-center gap-2\"\n      >\n        <span>📋</span> Duplicate\n      </button>\n\n      <div className=\"divider my-1\"></div>\n\n      <button\n        onClick={() => { onBringToFront(); onClose(); }}\n        className=\"w-full text-left px-4 py-2 hover:bg-base-200 flex items-center gap-2\"\n      >\n        <span>⬆️</span> Bring to Front\n      </button>\n\n      <button\n        onClick={() => { onSendToBack(); onClose(); }}\n        className=\"w-full text-left px-4 py-2 hover:bg-base-200 flex items-center gap-2\"\n      >\n        <span>⬇️</span> Send to Back\n      </button>\n\n      <div className=\"divider my-1\"></div>\n\n      <button\n        onClick={() => { onDelete(); onClose(); }}\n        className=\"w-full text-left px-4 py-2 hover:bg-error hover:text-error-content flex items-center gap-2\"\n      >\n        <span>🗑️</span> Delete\n      </button>\n    </div>\n  );\n}\n\n","import { useEffect, useState, useCallback } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport { ColorPicker, SpacingControl, TypographyControl, BorderControl, ShadowControl, DisplayControl } from \"./components/StyleControls\";\nimport IconPicker from \"./components/IconPicker\";\nimport { EmbedHelper } from \"./components/EmbedHelper\";\nimport DynamicIcon from \"./components/DynamicIcon\";\nimport ContextMenu from \"./components/ContextMenu\";\n\n// Custom Page Builder - Simple and Reliable\nexport default function PageBuilder({\n  pageId,\n  initialComponents = [],\n  onSave,\n  onBack,\n  pageName = 'Page Builder',\n  pageSlug = '',\n}) {\n  const id = pageId;\n  const [page, setPage] = useState({ id: pageId, name: pageName, slug: pageSlug });\n  const [loading, setLoading] = useState(true);\n  const [saving, setSaving] = useState(false);\n  const [components, setComponents] = useState([]);\n  const [selectedId, setSelectedId] = useState(null);\n  const [editingId, setEditingId] = useState(null);\n  const [resizingId, setResizingId] = useState(null);\n  const [resizeStart, setResizeStart] = useState({ width: 0, height: 0, x: 0, y: 0 });\n  const [draggingId, setDraggingId] = useState(null);\n  const [dragStart, setDragStart] = useState({ x: 0, y: 0, componentX: 0, componentY: 0 });\n  const [activeGuides, setActiveGuides] = useState({ x: null, y: null });\n  const [altKeyPressed, setAltKeyPressed] = useState(false);\n  const [activeTab, setActiveTab] = useState('content'); // content, style, advanced\n  const [showAddMenu, setShowAddMenu] = useState(null); // ID of container showing add menu\n  const [fullWidth, setFullWidth] = useState(() => localStorage.getItem('builder.fullWidth') === 'true');\n  const [device, setDevice] = useState(() => localStorage.getItem('builder.device') || 'Desktop');\n  const [zoom, setZoom] = useState(() => parseFloat(localStorage.getItem('builder.zoom')) || 100);\n  const [contextMenu, setContextMenu] = useState({ visible: false, x: 0, y: 0, targetId: null });\n  const [showGrid, setShowGrid] = useState(() => localStorage.getItem('builder.showGrid') !== 'false');\n\n  // Device presets\n  const devicePresets = {\n    'Mobile': 375,\n    'Tablet': 768,\n    'Desktop': 1440,\n  };\n\n  // Persist preferences\n  useEffect(() => {\n    localStorage.setItem('builder.fullWidth', fullWidth);\n  }, [fullWidth]);\n\n  useEffect(() => {\n    localStorage.setItem('builder.device', device);\n  }, [device]);\n\n  useEffect(() => {\n    localStorage.setItem('builder.zoom', zoom);\n  }, [zoom]);\n\n  useEffect(() => {\n    localStorage.setItem('builder.showGrid', showGrid);\n  }, [showGrid]);\n\n  // Track Alt key for disabling snapping\n  useEffect(() => {\n    const handleKeyDown = (e) => {\n      if (e.key === 'Alt') setAltKeyPressed(true);\n    };\n    const handleKeyUp = (e) => {\n      if (e.key === 'Alt') setAltKeyPressed(false);\n    };\n    window.addEventListener('keydown', handleKeyDown);\n    window.addEventListener('keyup', handleKeyUp);\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown);\n      window.removeEventListener('keyup', handleKeyUp);\n    };\n  }, []);\n\n  // Snap helper functions\n  const getSnapLines = (components, activeId) => {\n    const verticalLines = [0, 600, 1200]; // Left edge, center, right edge of canvas\n    const horizontalLines = [0, 400]; // Top edge, center of canvas\n    \n    components.forEach(comp => {\n      if (comp.id === activeId) return;\n      const pos = comp.position || { x: 0, y: 0 };\n      const width = comp.width && comp.width !== 'auto' ? parseInt(comp.width) : 100;\n      const height = comp.height && comp.height !== 'auto' ? parseInt(comp.height) : 100;\n      \n      verticalLines.push(pos.x, pos.x + width / 2, pos.x + width);\n      horizontalLines.push(pos.y, pos.y + height / 2, pos.y + height);\n    });\n    \n    return { verticalLines, horizontalLines };\n  };\n\n  const snap = (value, targets, threshold = 8) => {\n    let minDist = threshold;\n    let snappedValue = value;\n    let snapTarget = null;\n    \n    for (const target of targets) {\n      const dist = Math.abs(value - target);\n      if (dist < minDist) {\n        minDist = dist;\n        snappedValue = target;\n        snapTarget = target;\n      }\n    }\n    \n    return { snapped: snapTarget !== null, value: snappedValue, target: snapTarget };\n  };\n\n  const snapToGrid = (value, gridSize = 10) => {\n    return Math.round(value / gridSize) * gridSize;\n  };\n\n  // Delete component (supports nested) - MOVED HERE to avoid TDZ\n  const deleteComponent = useCallback((id) => {\n    const deleteNested = (items) => {\n      return items.filter(c => c.id !== id).map(c => {\n        if (c.children) {\n          return { ...c, children: deleteNested(c.children) };\n        }\n        return c;\n      });\n    };\n    setComponents(deleteNested(components));\n    setSelectedId(null);\n  }, [components]);\n\n  // Find component by ID (supports nested) - MOVED HERE to avoid TDZ\n  const findComponent = useCallback((id, items = components) => {\n    for (const item of items) {\n      if (item.id === id) return item;\n      if (item.children) {\n        const found = findComponent(id, item.children);\n        if (found) return found;\n      }\n    }\n    return null;\n  }, [components]);\n\n  // Update component (supports nested) - MOVED HERE to avoid TDZ\n  const updateComponent = useCallback((id, updates) => {\n    const updateNested = (items) => {\n      return items.map(c => {\n        if (c.id === id) {\n          return { ...c, ...updates };\n        }\n        if (c.children) {\n          return { ...c, children: updateNested(c.children) };\n        }\n        return c;\n      });\n    };\n    setComponents(updateNested(components));\n  }, [components]);\n\n  // Helper to parse px values - MOVED HERE to avoid TDZ\n  const parsePx = (value) => {\n    if (typeof value === 'string' && value.endsWith('px')) {\n      return parseFloat(value) || 0;\n    }\n    if (typeof value === 'number') return value;\n    return 0;\n  };\n\n  // Auto-resize container to fit children - MOVED HERE to avoid TDZ\n  const recalcContainerSize = useCallback((parentId) => {\n    const parent = findComponent(parentId);\n    if (!parent || !parent.children || parent.children.length === 0) return;\n\n    const children = parent.children;\n    const padding = 16;\n\n    // Calculate bounds\n    let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n    children.forEach(child => {\n      const x = child.position?.x || 0;\n      const y = child.position?.y || 0;\n      const w = parsePx(child.width) || 0;\n      const h = parsePx(child.height) || 0;\n\n      minX = Math.min(minX, x);\n      minY = Math.min(minY, y);\n      maxX = Math.max(maxX, x + w);\n      maxY = Math.max(maxY, y + h);\n    });\n\n    // If no valid bounds, set defaults\n    if (!isFinite(minX)) return;\n\n    // Normalize children positions if any are negative\n    if (minX < 0 || minY < 0) {\n      const offsetX = Math.max(0, -minX + padding);\n      const offsetY = Math.max(0, -minY + padding);\n      \n      children.forEach(child => {\n        updateComponent(child.id, {\n          position: {\n            x: (child.position?.x || 0) + offsetX,\n            y: (child.position?.y || 0) + offsetY\n          }\n        });\n      });\n\n      maxX += offsetX;\n      maxY += offsetY;\n    }\n\n    // Calculate new container size\n    const newWidth = Math.max(200, Math.ceil(maxX - minX) + padding * 2);\n    const newHeight = Math.max(100, Math.ceil(maxY - minY) + padding * 2);\n\n    updateComponent(parentId, {\n      width: `${newWidth}px`,\n      height: `${newHeight}px`\n    });\n  }, [updateComponent, findComponent]);\n\n  // Keyboard shortcuts\n  useEffect(() => {\n    const handleKeyDown = (e) => {\n      // Ignore if user is typing in an input/textarea\n      if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') {\n        return;\n      }\n\n      const selectedComponent = selectedId ? findComponent(selectedId) : null;\n\n      // Enter key - start editing selected text element\n      if (e.key === 'Enter' && selectedId && selectedComponent) {\n        if (selectedComponent.type === 'heading' || selectedComponent.type === 'text' || selectedComponent.type === 'button') {\n          e.preventDefault();\n          setEditingId(selectedId);\n        }\n      }\n\n      // Delete/Backspace key - delete selected element\n      if ((e.key === 'Delete' || e.key === 'Backspace') && selectedId) {\n        e.preventDefault();\n        if (confirm('Delete this component?')) {\n          deleteComponent(selectedId);\n        }\n      }\n\n      // Escape key - deselect\n      if (e.key === 'Escape' && selectedId && !editingId) {\n        setSelectedId(null);\n      }\n    };\n\n    window.addEventListener('keydown', handleKeyDown);\n    return () => window.removeEventListener('keydown', handleKeyDown);\n  }, [selectedId, editingId, deleteComponent, findComponent]);\n\n  // Element resize handlers with corner support\n  useEffect(() => {\n    const handleMouseMove = (e) => {\n      if (!resizingId) return;\n\n      const deltaX = e.clientX - resizeStart.x;\n      const deltaY = e.clientY - resizeStart.y;\n\n      const component = findComponent(resizingId);\n      if (!component) return;\n\n      let newWidth, newHeight, newX, newY;\n\n      // Handle corner-based resizing with position adjustments\n      if (resizeStart.corner) {\n        switch (resizeStart.corner) {\n          case 'se': // Bottom-right: only size changes\n            newWidth = Math.max(50, resizeStart.width + deltaX);\n            newHeight = Math.max(50, resizeStart.height + deltaY);\n            newX = resizeStart.componentX;\n            newY = resizeStart.componentY;\n            break;\n          case 'sw': // Bottom-left: width shrinks from left, height grows down\n            newWidth = Math.max(50, resizeStart.width - deltaX);\n            newHeight = Math.max(50, resizeStart.height + deltaY);\n            newX = resizeStart.componentX + deltaX;\n            newY = resizeStart.componentY;\n            break;\n          case 'ne': // Top-right: width grows right, height shrinks from top\n            newWidth = Math.max(50, resizeStart.width + deltaX);\n            newHeight = Math.max(50, resizeStart.height - deltaY);\n            newX = resizeStart.componentX;\n            newY = resizeStart.componentY + deltaY;\n            break;\n          case 'nw': // Top-left: both shrink from top-left\n            newWidth = Math.max(50, resizeStart.width - deltaX);\n            newHeight = Math.max(50, resizeStart.height - deltaY);\n            newX = resizeStart.componentX + deltaX;\n            newY = resizeStart.componentY + deltaY;\n            break;\n          default:\n            newWidth = resizeStart.width;\n            newHeight = resizeStart.height;\n            newX = resizeStart.componentX;\n            newY = resizeStart.componentY;\n        }\n\n        // Update component with new size and position\n        if (component.type === 'text') {\n          updateComponent(resizingId, {\n            width: `${Math.round(newWidth)}px`,\n            position: { x: Math.round(newX), y: Math.round(newY) },\n          });\n        } else {\n          updateComponent(resizingId, {\n            width: `${Math.round(newWidth)}px`,\n            height: `${Math.round(newHeight)}px`,\n            position: { x: Math.round(newX), y: Math.round(newY) },\n          });\n        }\n      } else if (resizeStart.aspectRatio === false) {\n        // Legacy resize (for image handles)\n        newWidth = Math.max(50, resizeStart.width + deltaX);\n        newHeight = Math.max(50, resizeStart.height + deltaY);\n        \n        if (component.type === 'text') {\n          updateComponent(resizingId, {\n            width: `${Math.round(newWidth)}px`,\n          });\n        } else {\n          updateComponent(resizingId, {\n            width: `${Math.round(newWidth)}px`,\n            height: `${Math.round(newHeight)}px`,\n          });\n        }\n      } else {\n        // Maintain aspect ratio (legacy corner resize)\n        const aspectRatio = resizeStart.width / resizeStart.height;\n        newWidth = Math.max(50, resizeStart.width + deltaX);\n        newHeight = newWidth / aspectRatio;\n        \n        updateComponent(resizingId, {\n          width: `${Math.round(newWidth)}px`,\n          height: `${Math.round(newHeight)}px`,\n        });\n      }\n    };\n\n    const handleMouseUp = () => {\n      if (resizingId) {\n        // Check if resized component is inside a container and trigger resize\n        const resizedComp = findComponent(resizingId);\n        if (resizedComp) {\n          // Find parent by checking all containers\n          const findParent = (comps) => {\n            for (const comp of comps) {\n              if (comp.children) {\n                if (comp.children.some(c => c.id === resizingId)) {\n                  return comp.id;\n                }\n                const nested = findParent(comp.children);\n                if (nested) return nested;\n              }\n            }\n            return null;\n          };\n          const parentId = findParent(components);\n          if (parentId) {\n            setTimeout(() => recalcContainerSize(parentId), 0);\n          }\n        }\n        \n        setResizingId(null);\n      }\n    };\n\n    if (resizingId) {\n      window.addEventListener('mousemove', handleMouseMove);\n      window.addEventListener('mouseup', handleMouseUp);\n    }\n\n    return () => {\n      window.removeEventListener('mousemove', handleMouseMove);\n      window.removeEventListener('mouseup', handleMouseUp);\n    };\n  }, [resizingId, resizeStart, findComponent, recalcContainerSize, updateComponent, components]);\n\n  // Drag to position handlers with snapping\n  useEffect(() => {\n    let rafId = null;\n\n    const handleMouseMove = (e) => {\n      if (!draggingId) return;\n\n      if (rafId) cancelAnimationFrame(rafId);\n      \n      rafId = requestAnimationFrame(() => {\n        const deltaX = e.clientX - dragStart.x;\n        const deltaY = e.clientY - dragStart.y;\n\n        let newX = Math.max(0, dragStart.componentX + deltaX);\n        let newY = Math.max(0, dragStart.componentY + deltaY);\n\n        const guides = { x: null, y: null };\n\n        // Apply snapping if Alt key is not pressed\n        if (!altKeyPressed) {\n          const component = findComponent(draggingId);\n          if (component) {\n            const width = component.width && component.width !== 'auto' ? parseInt(component.width) : 100;\n            const height = component.height && component.height !== 'auto' ? parseInt(component.height) : 100;\n            \n            const { verticalLines, horizontalLines } = getSnapLines(components, draggingId);\n            \n            // Snap left edge, center, or right edge\n            const leftSnap = snap(newX, verticalLines);\n            const centerXSnap = snap(newX + width / 2, verticalLines);\n            const rightSnap = snap(newX + width, verticalLines);\n            \n            if (leftSnap.snapped) {\n              newX = leftSnap.value;\n              guides.x = leftSnap.target;\n            } else if (centerXSnap.snapped) {\n              newX = centerXSnap.value - width / 2;\n              guides.x = centerXSnap.target;\n            } else if (rightSnap.snapped) {\n              newX = rightSnap.value - width;\n              guides.x = rightSnap.target;\n            } else {\n              // Fallback to grid snap\n              newX = snapToGrid(newX, 10);\n            }\n            \n            // Snap top edge, center, or bottom edge\n            const topSnap = snap(newY, horizontalLines);\n            const centerYSnap = snap(newY + height / 2, horizontalLines);\n            const bottomSnap = snap(newY + height, horizontalLines);\n            \n            if (topSnap.snapped) {\n              newY = topSnap.value;\n              guides.y = topSnap.target;\n            } else if (centerYSnap.snapped) {\n              newY = centerYSnap.value - height / 2;\n              guides.y = centerYSnap.target;\n            } else if (bottomSnap.snapped) {\n              newY = bottomSnap.value - height;\n              guides.y = bottomSnap.target;\n            } else {\n              // Fallback to grid snap\n              newY = snapToGrid(newY, 10);\n            }\n          }\n        }\n\n        setActiveGuides(guides);\n        updateComponent(draggingId, {\n          position: { x: newX, y: newY },\n        });\n      });\n    };\n\n    const handleMouseUp = () => {\n      if (draggingId) {\n        // Check if dragged component is inside a container and trigger resize\n        const draggedComp = findComponent(draggingId);\n        if (draggedComp) {\n          // Find parent by checking all containers\n          const findParent = (comps) => {\n            for (const comp of comps) {\n              if (comp.children) {\n                if (comp.children.some(c => c.id === draggingId)) {\n                  return comp.id;\n                }\n                const nested = findParent(comp.children);\n                if (nested) return nested;\n              }\n            }\n            return null;\n          };\n          const parentId = findParent(components);\n          if (parentId) {\n            setTimeout(() => recalcContainerSize(parentId), 0);\n          }\n        }\n        \n        setDraggingId(null);\n        setActiveGuides({ x: null, y: null });\n      }\n      if (rafId) cancelAnimationFrame(rafId);\n    };\n\n    if (draggingId) {\n      window.addEventListener('mousemove', handleMouseMove);\n      window.addEventListener('mouseup', handleMouseUp);\n    }\n\n    return () => {\n      window.removeEventListener('mousemove', handleMouseMove);\n      window.removeEventListener('mouseup', handleMouseUp);\n      if (rafId) cancelAnimationFrame(rafId);\n    };\n  }, [draggingId, dragStart, altKeyPressed, components, findComponent, recalcContainerSize, updateComponent]);\n\n  // Initialize page data from props\n  useEffect(() => {\n    setPage({ id: pageId, name: pageName, slug: pageSlug });\n    setComponents(initialComponents);\n    setLoading(false);\n  }, [pageId, pageName, pageSlug, initialComponents]);\n\n  // Save page\n  const handleSave = async () => {\n    if (!page) return;\n    setSaving(true);\n    try {\n      if (onSave) {\n        await onSave({\n          components,\n          pageId: id,\n          pageName: page.name,\n          pageSlug: page.slug\n        });\n      }\n    } catch (e) {\n      console.error('Error saving page:', e);\n      alert('❌ Error saving page: ' + (e.message || 'Unknown error'));\n    } finally {\n      setSaving(false);\n    }\n  };\n\n  // Add component with position\n  const addComponent = (type, parentId = null) => {\n    // Calculate better initial position\n    let initialPosition;\n    \n    if (parentId) {\n      // Adding to a container - calculate based on siblings\n      const parent = findComponent(parentId);\n      const siblingCount = parent?.children?.length || 0;\n      initialPosition = {\n        x: 16 + (siblingCount % 3) * 220,\n        y: 16 + Math.floor(siblingCount / 3) * 160,\n      };\n    } else {\n      // Adding to root - stagger in a grid\n      const rootCount = components.length;\n      initialPosition = {\n        x: 80 + (rootCount % 3) * 300,\n        y: 80 + Math.floor(rootCount / 3) * 220,\n      };\n    }\n    \n    const baseComponent = {\n      id: Date.now().toString(),\n      type,\n      position: initialPosition,\n      styles: {},\n    };\n\n    // Define component-specific properties\n    let newComponent = { ...baseComponent };\n\n    switch (type) {\n      case 'heading':\n        newComponent = { ...newComponent, content: 'New Heading', className: 'text-3xl font-bold', width: 'auto', height: 'auto' };\n        break;\n      case 'text':\n        newComponent = { ...newComponent, content: 'New text content', className: 'text-base', width: '300px', height: 'auto' };\n        break;\n      case 'button':\n        newComponent = { ...newComponent, content: 'Click Me', href: '#', className: 'btn btn-primary', width: 'auto', height: 'auto' };\n        break;\n      case 'image':\n        newComponent = { ...newComponent, content: 'https://via.placeholder.com/400x300', className: 'rounded-lg object-cover', width: '400px', height: '300px' };\n        break;\n      case 'columns':\n        newComponent = { ...newComponent, className: 'grid grid-cols-1 md:grid-cols-2 gap-4', width: '600px', height: 'auto', children: [] };\n        break;\n      case 'container':\n        newComponent = { ...newComponent, className: 'p-4', width: '400px', height: 'auto', children: [] };\n        break;\n      case 'divider':\n        newComponent = { ...newComponent, className: 'divider', width: '100%', height: 'auto' };\n        break;\n      case 'spacer':\n        newComponent = { ...newComponent, className: 'h-12', width: '100%', height: '48px' };\n        break;\n      case 'html':\n        newComponent = { ...newComponent, content: '<div class=\"p-4\"><h2>Custom HTML</h2></div>', rawHtml: true, width: '600px', height: 'auto' };\n        break;\n      case 'icon':\n        newComponent = { ...newComponent, iconLibrary: 'heroicons', iconName: 'HomeIcon', customSvg: null, size: '24', color: '#000000', className: '', width: 'auto', height: 'auto' };\n        break;\n      case 'embed':\n        newComponent = { ...newComponent, embedCode: '', embedType: 'auto', url: '', className: 'rounded-lg overflow-hidden', width: '600px', height: '400px' };\n        break;\n      case 'form-container':\n        newComponent = { ...newComponent, action: '', method: 'POST', className: 'space-y-4', width: '600px', height: 'auto', children: [], successMessage: 'Form submitted successfully!', errorMessage: 'Failed to submit form' };\n        break;\n      case 'form-input':\n        newComponent = { ...newComponent, label: 'Input Field', placeholder: 'Enter text...', name: 'field', inputType: 'text', required: false, className: 'input input-bordered w-full', width: '400px', height: 'auto' };\n        break;\n      case 'form-textarea':\n        newComponent = { ...newComponent, label: 'Message', placeholder: 'Enter your message...', name: 'message', required: false, rows: 4, className: 'textarea textarea-bordered w-full', width: '400px', height: 'auto' };\n        break;\n      case 'form-select':\n        newComponent = { ...newComponent, label: 'Select Option', name: 'select', required: false, options: ['Option 1', 'Option 2', 'Option 3'], className: 'select select-bordered w-full', width: '400px', height: 'auto' };\n        break;\n      case 'form-checkbox':\n        newComponent = { ...newComponent, label: 'I agree', name: 'checkbox', required: false, className: 'checkbox', width: 'auto', height: 'auto' };\n        break;\n      case 'form-radio-group':\n        newComponent = { ...newComponent, label: 'Choose One', name: 'radio', required: false, options: ['Option 1', 'Option 2'], className: '', width: '400px', height: 'auto' };\n        break;\n      case 'form-file':\n        newComponent = { ...newComponent, label: 'Upload File', name: 'file', required: false, accept: '*', className: 'file-input file-input-bordered w-full', width: '400px', height: 'auto' };\n        break;\n      case 'form-date':\n        newComponent = { ...newComponent, label: 'Select Date', name: 'date', required: false, className: 'input input-bordered w-full', width: '400px', height: 'auto' };\n        break;\n      case 'form-submit':\n        newComponent = { ...newComponent, content: 'Submit', className: 'btn btn-primary', width: 'auto', height: 'auto' };\n        break;\n      default:\n        newComponent = { ...newComponent, content: '', className: '', width: '100px', height: 'auto' };\n    }\n\n    // Add children property for container types\n    if (['columns', 'container', 'form-container'].includes(type) && !newComponent.children) {\n      newComponent.children = [];\n    }\n    \n    if (parentId) {\n      // Add as child to parent container\n      setComponents(components.map(c => {\n        if (c.id === parentId && (c.type === 'columns' || c.type === 'container' || c.type === 'form-container')) {\n          return { ...c, children: [...(c.children || []), newComponent] };\n        }\n        return c;\n      }));\n      // Auto-resize parent container\n      setTimeout(() => recalcContainerSize(parentId), 0);\n    } else {\n      // Add to root\n      setComponents([...components, newComponent]);\n    }\n    setSelectedId(newComponent.id);\n  };\n\n  // Update component (supports nested)\n  // Helper to update component styles\n  const updateComponentStyle = (property, value) => {\n    if (!selectedId) return;\n    const component = findComponent(selectedId);\n    if (!component) return;\n    updateComponent(selectedId, {\n      styles: { ...(component.styles || {}), [property]: value }\n    });\n  };\n\n  // Generate inline styles from visual controls\n  const generateInlineStyles = (component) => {\n    const styles = {};\n    \n    if (component.styles) {\n      if (component.styles.backgroundColor) styles.backgroundColor = component.styles.backgroundColor;\n      if (component.styles.color) styles.color = component.styles.color;\n      if (component.styles.fontSize) styles.fontSize = component.styles.fontSize;\n      if (component.styles.fontWeight) styles.fontWeight = component.styles.fontWeight;\n      if (component.styles.fontFamily) styles.fontFamily = component.styles.fontFamily;\n      if (component.styles.lineHeight) styles.lineHeight = component.styles.lineHeight;\n      if (component.styles.letterSpacing) styles.letterSpacing = component.styles.letterSpacing;\n      if (component.styles.borderWidth) styles.borderWidth = component.styles.borderWidth;\n      if (component.styles.borderStyle) styles.borderStyle = component.styles.borderStyle;\n      if (component.styles.borderColor) styles.borderColor = component.styles.borderColor;\n      if (component.styles.borderRadius) styles.borderRadius = component.styles.borderRadius;\n      if (component.styles.boxShadow) styles.boxShadow = component.styles.boxShadow;\n      if (component.styles.display) styles.display = component.styles.display;\n      if (component.styles.flexDirection) styles.flexDirection = component.styles.flexDirection;\n      if (component.styles.justifyContent) styles.justifyContent = component.styles.justifyContent;\n      if (component.styles.alignItems) styles.alignItems = component.styles.alignItems;\n      if (component.styles.gap) styles.gap = component.styles.gap;\n      if (component.styles.gridTemplateColumns) styles.gridTemplateColumns = component.styles.gridTemplateColumns;\n      \n      // Handle spacing (padding/margin)\n      if (component.styles.padding) {\n        if (component.styles.padding.all) {\n          styles.padding = component.styles.padding.all;\n        } else {\n          if (component.styles.padding.top) styles.paddingTop = component.styles.padding.top;\n          if (component.styles.padding.right) styles.paddingRight = component.styles.padding.right;\n          if (component.styles.padding.bottom) styles.paddingBottom = component.styles.padding.bottom;\n          if (component.styles.padding.left) styles.paddingLeft = component.styles.padding.left;\n        }\n      }\n      \n      if (component.styles.margin) {\n        if (component.styles.margin.all) {\n          styles.margin = component.styles.margin.all;\n        } else {\n          if (component.styles.margin.top) styles.marginTop = component.styles.margin.top;\n          if (component.styles.margin.right) styles.marginRight = component.styles.margin.right;\n          if (component.styles.margin.bottom) styles.marginBottom = component.styles.margin.bottom;\n          if (component.styles.margin.left) styles.marginLeft = component.styles.margin.left;\n        }\n      }\n    }\n    \n    return styles;\n  };\n\n  // Duplicate component\n  const duplicateComponent = (id) => {\n    const component = components.find(c => c.id === id);\n    if (component) {\n      const newComponent = { ...component, id: Date.now().toString() };\n      const index = components.findIndex(c => c.id === id);\n      const newComponents = [...components];\n      newComponents.splice(index + 1, 0, newComponent);\n      setComponents(newComponents);\n    }\n  };\n\n\n  // Context menu handlers\n  const handleContextMenu = (e, componentId) => {\n    e.preventDefault();\n    e.stopPropagation();\n    setContextMenu({\n      visible: true,\n      x: e.clientX,\n      y: e.clientY,\n      targetId: componentId\n    });\n    setSelectedId(componentId);\n  };\n\n  const handleBringToFront = () => {\n    if (!contextMenu.targetId) return;\n    const component = findComponent(contextMenu.targetId);\n    if (!component) return;\n    // Move to end of array (renders last = on top)\n    setComponents(prev => [...prev.filter(c => c.id !== contextMenu.targetId), component]);\n  };\n\n  const handleSendToBack = () => {\n    if (!contextMenu.targetId) return;\n    const component = findComponent(contextMenu.targetId);\n    if (!component) return;\n    // Move to start of array (renders first = on bottom)\n    setComponents(prev => [component, ...prev.filter(c => c.id !== contextMenu.targetId)]);\n  };\n\n  if (loading) {\n    return (\n      <div className=\"flex items-center justify-center h-screen\">\n        <span className=\"loading loading-spinner loading-lg\"></span>\n      </div>\n    );\n  }\n\n  const selectedComponent = selectedId ? findComponent(selectedId) : null;\n\n  // Recursive component renderer\n  const renderComponent = (component, _index, _parentComponents) => {\n    const isContainer = component.type === 'columns' || component.type === 'container' || component.type === 'form-container';\n    const hasChildren = component.children && component.children.length > 0;\n    const position = component.position || { x: 0, y: 0 };\n    const inlineStyles = generateInlineStyles(component);\n\n    return (\n      <div\n        key={component.id}\n        onClick={(e) => { e.stopPropagation(); setSelectedId(component.id); }}\n        onContextMenu={(e) => handleContextMenu(e, component.id)}\n        className={`absolute group cursor-move border-2 transition-all ${\n          selectedId === component.id\n            ? 'border-primary bg-primary/5'\n            : isContainer \n              ? 'border-base-300/40 hover:border-gray-300'\n              : 'border-transparent hover:border-gray-300'\n        } ${isContainer ? 'p-2' : ''} ${draggingId === component.id ? 'opacity-70' : ''}`}\n        style={{\n          left: `${position.x}px`,\n          top: `${position.y}px`,\n          width: component.width !== 'auto' ? component.width : undefined,\n          height: component.height !== 'auto' && component.height ? component.height : undefined,\n          minWidth: component.type === 'text' ? '200px' : undefined,\n          ...inlineStyles,\n        }}\n        onMouseDown={(e) => {\n          // Allow drag from anywhere except interactive elements and resize handles\n          const isInteractive = e.target.closest('input, textarea, select, button, a, [contenteditable=\"true\"], .no-drag');\n          const isResizeHandle = e.target.classList.contains('cursor-nw-resize') || \n                                 e.target.classList.contains('cursor-ne-resize') ||\n                                 e.target.classList.contains('cursor-sw-resize') ||\n                                 e.target.classList.contains('cursor-se-resize') ||\n                                 e.target.classList.contains('cursor-s-resize') ||\n                                 e.target.classList.contains('cursor-e-resize');\n          \n          if (!isInteractive && !isResizeHandle) {\n            e.stopPropagation();\n            // Auto-select on drag start\n            if (selectedId !== component.id) {\n              setSelectedId(component.id);\n            }\n            setDraggingId(component.id);\n            setDragStart({\n              x: e.clientX,\n              y: e.clientY,\n              componentX: position.x,\n              componentY: position.y,\n            });\n          }\n        }}\n      >\n        {/* Drag Handle - Visible when selected */}\n        {selectedId === component.id && (\n          <div \n            className=\"drag-handle absolute -top-3 left-1/2 -translate-x-1/2 w-8 h-6 bg-primary rounded cursor-move flex items-center justify-center z-20\"\n            title=\"Drag to move\"\n          >\n            <svg className=\"w-4 h-4 text-white\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n              <path d=\"M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z\" />\n            </svg>\n          </div>\n        )}\n\n        {/* Resize Handles - Visible when selected */}\n        {selectedId === component.id && (\n          <>\n            {/* Top-left corner */}\n            <div\n              className=\"absolute -top-1 -left-1 w-3 h-3 bg-primary rounded-full cursor-nw-resize z-20 hover:scale-125 transition-transform\"\n              onMouseDown={(e) => {\n                e.stopPropagation();\n                setResizingId(component.id);\n                const rect = e.currentTarget.parentElement.getBoundingClientRect();\n                setResizeStart({\n                  width: rect.width,\n                  height: rect.height,\n                  x: e.clientX,\n                  y: e.clientY,\n                  corner: 'nw',\n                  componentX: position.x,\n                  componentY: position.y,\n                });\n              }}\n              title=\"Resize from top-left\"\n            />\n            {/* Top-right corner */}\n            <div\n              className=\"absolute -top-1 -right-1 w-3 h-3 bg-primary rounded-full cursor-ne-resize z-20 hover:scale-125 transition-transform\"\n              onMouseDown={(e) => {\n                e.stopPropagation();\n                setResizingId(component.id);\n                const rect = e.currentTarget.parentElement.getBoundingClientRect();\n                setResizeStart({\n                  width: rect.width,\n                  height: rect.height,\n                  x: e.clientX,\n                  y: e.clientY,\n                  corner: 'ne',\n                  componentX: position.x,\n                  componentY: position.y,\n                });\n              }}\n              title=\"Resize from top-right\"\n            />\n            {/* Bottom-left corner */}\n            <div\n              className=\"absolute -bottom-1 -left-1 w-3 h-3 bg-primary rounded-full cursor-sw-resize z-20 hover:scale-125 transition-transform\"\n              onMouseDown={(e) => {\n                e.stopPropagation();\n                setResizingId(component.id);\n                const rect = e.currentTarget.parentElement.getBoundingClientRect();\n                setResizeStart({\n                  width: rect.width,\n                  height: rect.height,\n                  x: e.clientX,\n                  y: e.clientY,\n                  corner: 'sw',\n                  componentX: position.x,\n                  componentY: position.y,\n                });\n              }}\n              title=\"Resize from bottom-left\"\n            />\n            {/* Bottom-right corner */}\n            <div\n              className=\"absolute -bottom-1 -right-1 w-3 h-3 bg-primary rounded-full cursor-se-resize z-20 hover:scale-125 transition-transform\"\n              onMouseDown={(e) => {\n                e.stopPropagation();\n                setResizingId(component.id);\n                const rect = e.currentTarget.parentElement.getBoundingClientRect();\n                setResizeStart({\n                  width: rect.width,\n                  height: rect.height,\n                  x: e.clientX,\n                  y: e.clientY,\n                  corner: 'se',\n                  componentX: position.x,\n                  componentY: position.y,\n                });\n              }}\n              title=\"Resize from bottom-right\"\n            />\n          </>\n        )}\n\n        {/* Component Toolbar */}\n        <div className={`absolute -top-10 right-0 gap-1 bg-base-200 p-1 rounded shadow-lg z-10 ${\n          selectedId === component.id ? 'flex' : 'hidden group-hover:flex'\n        }`}>\n          {isContainer && (\n            <div className=\"relative\">\n              <button\n                onClick={(e) => { \n                  e.stopPropagation(); \n                  setShowAddMenu(showAddMenu === component.id ? null : component.id);\n                }}\n                className=\"btn btn-xs btn-info\"\n                title=\"Add child component\"\n              >\n                ➕\n              </button>\n              {showAddMenu === component.id && (\n                <div className=\"absolute top-full right-0 mt-1 bg-base-100 border border-base-300 rounded shadow-lg p-2 z-50 w-48 max-h-64 overflow-y-auto\">\n                  <div className=\"text-xs font-bold text-gray-500 mb-1\">ADD COMPONENT:</div>\n                  <button onClick={(e) => { e.stopPropagation(); addComponent('heading', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">📝 Heading</button>\n                  <button onClick={(e) => { e.stopPropagation(); addComponent('text', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">📄 Text</button>\n                  <button onClick={(e) => { e.stopPropagation(); addComponent('button', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">🔘 Button</button>\n                  <button onClick={(e) => { e.stopPropagation(); addComponent('image', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">🖼️ Image</button>\n                  {component.type === 'form-container' && (\n                    <>\n                      <div className=\"divider my-1\"></div>\n                      <div className=\"text-xs font-bold text-gray-500 mb-1\">FORM FIELDS:</div>\n                      <button onClick={(e) => { e.stopPropagation(); addComponent('form-input', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">📝 Input</button>\n                      <button onClick={(e) => { e.stopPropagation(); addComponent('form-textarea', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">📄 Textarea</button>\n                      <button onClick={(e) => { e.stopPropagation(); addComponent('form-select', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">📑 Select</button>\n                      <button onClick={(e) => { e.stopPropagation(); addComponent('form-checkbox', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">☑️ Checkbox</button>\n                      <button onClick={(e) => { e.stopPropagation(); addComponent('form-radio-group', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">🔘 Radio</button>\n                      <button onClick={(e) => { e.stopPropagation(); addComponent('form-file', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">📎 File</button>\n                      <button onClick={(e) => { e.stopPropagation(); addComponent('form-date', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">📅 Date</button>\n                      <button onClick={(e) => { e.stopPropagation(); addComponent('form-submit', component.id); setShowAddMenu(null); }} className=\"btn btn-xs btn-block justify-start mb-1\">✅ Submit</button>\n                    </>\n                  )}\n                </div>\n              )}\n            </div>\n          )}\n          {(component.type === 'heading' || component.type === 'text' || component.type === 'button') && (\n            <button\n              onClick={(e) => { e.stopPropagation(); setEditingId(component.id); }}\n              className=\"btn btn-xs btn-info\"\n              title=\"Edit text (or double-click)\"\n            >\n              ✏️\n            </button>\n          )}\n          <button\n            onClick={(e) => { e.stopPropagation(); duplicateComponent(component.id); }}\n            className=\"btn btn-xs\"\n            title=\"Duplicate\"\n          >\n            📋\n          </button>\n          <button\n            onClick={(e) => { e.stopPropagation(); deleteComponent(component.id); }}\n            className=\"btn btn-xs btn-error\"\n            title=\"Delete\"\n          >\n            🗑️\n          </button>\n        </div>\n\n        {/* Render Component Content */}\n        {component.type === 'heading' && (\n          editingId === component.id ? (\n            <input\n              type=\"text\"\n              className={`${component.className} w-full border-2 border-primary bg-white px-2`}\n              value={component.content}\n              onChange={(e) => updateComponent(component.id, { content: e.target.value })}\n              onBlur={() => setEditingId(null)}\n              onKeyDown={(e) => {\n                if (e.key === 'Enter') setEditingId(null);\n                if (e.key === 'Escape') setEditingId(null);\n              }}\n              autoFocus\n              onClick={(e) => e.stopPropagation()}\n            />\n          ) : (\n            <h2 \n              className={component.className}\n              onDoubleClick={(e) => {\n                e.stopPropagation();\n                setEditingId(component.id);\n              }}\n            >\n              {component.content}\n            </h2>\n          )\n        )}\n        {component.type === 'text' && (\n          <div className=\"relative\">\n            {editingId === component.id ? (\n              <textarea\n                className={`${component.className} w-full min-h-[100px] border-2 border-primary bg-white p-2`}\n                value={component.content}\n                onChange={(e) => updateComponent(component.id, { content: e.target.value })}\n                onBlur={() => setEditingId(null)}\n                onKeyDown={(e) => {\n                  if (e.key === 'Escape') setEditingId(null);\n                }}\n                autoFocus\n                onClick={(e) => e.stopPropagation()}\n              />\n            ) : (\n              <div \n                className={component.className}\n                onDoubleClick={(e) => {\n                  e.stopPropagation();\n                  setEditingId(component.id);\n                }}\n              >\n                <ReactMarkdown className=\"prose prose-sm max-w-none\">\n                  {component.content}\n                </ReactMarkdown>\n              </div>\n            )}\n            \n            {/* Width resize handle for text */}\n            {selectedId === component.id && !editingId && (\n              <div\n                className=\"absolute top-1/2 -right-2 w-4 h-8 bg-primary rounded cursor-e-resize border-2 border-white shadow-lg z-20 -translate-y-1/2\"\n                onMouseDown={(e) => {\n                  e.stopPropagation();\n                  const parent = e.target.parentElement.parentElement;\n                  const rect = parent.getBoundingClientRect();\n                  setResizingId(component.id);\n                  setResizeStart({\n                    width: rect.width,\n                    height: rect.height,\n                    x: e.clientX,\n                    y: e.clientY,\n                    aspectRatio: false,\n                  });\n                }}\n                title=\"Drag to resize width\"\n              />\n            )}\n          </div>\n        )}\n        {component.type === 'button' && (\n          editingId === component.id ? (\n            <input\n              type=\"text\"\n              className=\"input input-bordered input-sm\"\n              value={component.content}\n              onChange={(e) => updateComponent(component.id, { content: e.target.value })}\n              onBlur={() => setEditingId(null)}\n              onKeyDown={(e) => {\n                if (e.key === 'Enter') setEditingId(null);\n                if (e.key === 'Escape') setEditingId(null);\n              }}\n              autoFocus\n              onClick={(e) => e.stopPropagation()}\n            />\n          ) : (\n            <a \n              href={component.href} \n              className={component.className}\n              onDoubleClick={(e) => {\n                e.stopPropagation();\n                setEditingId(component.id);\n              }}\n              onClick={(e) => e.preventDefault()}\n            >\n              {component.content}\n            </a>\n          )\n        )}\n        {component.type === 'image' && (\n          <div className=\"relative inline-block\">\n            <img \n              src={component.content} \n              alt=\"\" \n              className={component.className}\n              style={{\n                width: component.width !== 'auto' ? component.width : undefined,\n                height: component.height !== 'auto' ? component.height : undefined,\n                display: 'block',\n              }}\n              draggable={false}\n            />\n            \n            {/* Resize Handles - Only show when selected */}\n            {selectedId === component.id && (\n              <>\n                {/* Corner Resize Handles */}\n                <div\n                  className=\"absolute -bottom-2 -right-2 w-4 h-4 bg-primary rounded-full cursor-se-resize border-2 border-white shadow-lg z-20\"\n                  onMouseDown={(e) => {\n                    e.stopPropagation();\n                    const img = e.target.previousSibling;\n                    const rect = img.getBoundingClientRect();\n                    setResizingId(component.id);\n                    setResizeStart({\n                      width: rect.width,\n                      height: rect.height,\n                      x: e.clientX,\n                      y: e.clientY,\n                    });\n                  }}\n                  title=\"Drag to resize\"\n                />\n                \n                {/* Width Handle (right middle) */}\n                <div\n                  className=\"absolute top-1/2 -right-2 w-4 h-4 bg-primary rounded-full cursor-e-resize border-2 border-white shadow-lg z-20 -translate-y-1/2\"\n                  onMouseDown={(e) => {\n                    e.stopPropagation();\n                    const img = e.target.parentElement.querySelector('img');\n                    const rect = img.getBoundingClientRect();\n                    setResizingId(component.id);\n                    setResizeStart({\n                      width: rect.width,\n                      height: rect.height,\n                      x: e.clientX,\n                      y: e.clientY,\n                      aspectRatio: false,\n                    });\n                  }}\n                  title=\"Drag to resize width\"\n                />\n                \n                {/* Height Handle (bottom middle) */}\n                <div\n                  className=\"absolute -bottom-2 left-1/2 w-4 h-4 bg-primary rounded-full cursor-s-resize border-2 border-white shadow-lg z-20 -translate-x-1/2\"\n                  onMouseDown={(e) => {\n                    e.stopPropagation();\n                    const img = e.target.parentElement.querySelector('img');\n                    const rect = img.getBoundingClientRect();\n                    setResizingId(component.id);\n                    setResizeStart({\n                      width: rect.width,\n                      height: rect.height,\n                      x: e.clientX,\n                      y: e.clientY,\n                      aspectRatio: false,\n                    });\n                  }}\n                  title=\"Drag to resize height\"\n                />\n              </>\n            )}\n          </div>\n        )}\n        {component.type === 'divider' && (\n          <div className={component.className}></div>\n        )}\n        {component.type === 'spacer' && (\n          <div className={component.className}></div>\n        )}\n        {component.type === 'html' && (\n          <div \n            className=\"html-block\" \n            dangerouslySetInnerHTML={{ __html: component.content }}\n            onClick={(e) => e.stopPropagation()}\n          />\n        )}\n        {component.type === 'icon' && (\n          <div className=\"inline-flex items-center justify-center\" onClick={(e) => e.stopPropagation()}>\n            {component.iconLibrary === 'custom' ? (\n              <div dangerouslySetInnerHTML={{ __html: component.customSvg }} />\n            ) : (\n              <DynamicIcon \n                library={component.iconLibrary}\n                name={component.iconName}\n                size={component.size}\n                color={component.color}\n                className={component.className}\n              />\n            )}\n          </div>\n        )}\n        {component.type === 'embed' && (\n          <div \n            className=\"embed-container\"\n            dangerouslySetInnerHTML={{ __html: component.embedCode }}\n            onClick={(e) => e.stopPropagation()}\n          />\n        )}\n        {component.type === 'form-container' && (\n          <form \n            className={component.className} \n            onSubmit={(e) => e.preventDefault()}\n            onDragOver={(e) => {\n              e.preventDefault();\n              e.stopPropagation();\n              e.currentTarget.classList.add('ring-2', 'ring-primary');\n            }}\n            onDragLeave={(e) => {\n              e.currentTarget.classList.remove('ring-2', 'ring-primary');\n            }}\n            onDrop={(e) => {\n              e.preventDefault();\n              e.stopPropagation();\n              e.currentTarget.classList.remove('ring-2', 'ring-primary');\n              const componentType = e.dataTransfer.getData('componentType');\n              if (componentType) {\n                addComponent(componentType, component.id);\n              }\n            }}\n          >\n            {hasChildren ? (\n              component.children.map((child, idx) => renderComponent(child, idx, component.children))\n            ) : (\n              <div className=\"text-center py-8 text-gray-400 border-2 border-dashed border-gray-300 rounded\">\n                <p className=\"text-sm\">Click ➕ to add form fields or drag components here</p>\n              </div>\n            )}\n          </form>\n        )}\n        {component.type === 'form-input' && (\n          <div className=\"form-control mb-4\" onClick={(e) => e.stopPropagation()}>\n            <label className=\"label\">\n              <span className=\"label-text\">{component.label}</span>\n              {component.required && <span className=\"text-error\">*</span>}\n            </label>\n            <input\n              type={component.inputType || 'text'}\n              name={component.name}\n              placeholder={component.placeholder}\n              required={component.required}\n              className={component.className}\n              disabled\n            />\n          </div>\n        )}\n        {component.type === 'form-textarea' && (\n          <div className=\"form-control mb-4\" onClick={(e) => e.stopPropagation()}>\n            <label className=\"label\">\n              <span className=\"label-text\">{component.label}</span>\n              {component.required && <span className=\"text-error\">*</span>}\n            </label>\n            <textarea\n              name={component.name}\n              placeholder={component.placeholder}\n              required={component.required}\n              rows={component.rows || 4}\n              className={component.className}\n              disabled\n            />\n          </div>\n        )}\n        {component.type === 'form-select' && (\n          <div className=\"form-control mb-4\" onClick={(e) => e.stopPropagation()}>\n            <label className=\"label\">\n              <span className=\"label-text\">{component.label}</span>\n              {component.required && <span className=\"text-error\">*</span>}\n            </label>\n            <select\n              name={component.name}\n              required={component.required}\n              className={component.className}\n              disabled\n            >\n              <option value=\"\">Select...</option>\n              {component.options?.map((opt, idx) => (\n                <option key={idx} value={opt}>{opt}</option>\n              ))}\n            </select>\n          </div>\n        )}\n        {component.type === 'form-checkbox' && (\n          <div className=\"form-control mb-4\" onClick={(e) => e.stopPropagation()}>\n            <label className=\"label cursor-pointer justify-start gap-2\">\n              <input\n                type=\"checkbox\"\n                name={component.name}\n                required={component.required}\n                className={component.className}\n                disabled\n              />\n              <span className=\"label-text\">{component.label}</span>\n            </label>\n          </div>\n        )}\n        {component.type === 'form-radio-group' && (\n          <div className=\"form-control mb-4\" onClick={(e) => e.stopPropagation()}>\n            <label className=\"label\">\n              <span className=\"label-text\">{component.label}</span>\n              {component.required && <span className=\"text-error\">*</span>}\n            </label>\n            {component.options?.map((opt, idx) => (\n              <label key={idx} className=\"label cursor-pointer justify-start gap-2\">\n                <input\n                  type=\"radio\"\n                  name={component.name}\n                  value={opt}\n                  className=\"radio\"\n                  disabled\n                />\n                <span className=\"label-text\">{opt}</span>\n              </label>\n            ))}\n          </div>\n        )}\n        {component.type === 'form-file' && (\n          <div className=\"form-control mb-4\" onClick={(e) => e.stopPropagation()}>\n            <label className=\"label\">\n              <span className=\"label-text\">{component.label}</span>\n              {component.required && <span className=\"text-error\">*</span>}\n            </label>\n            <input\n              type=\"file\"\n              name={component.name}\n              accept={component.accept}\n              required={component.required}\n              className={component.className}\n              disabled\n            />\n          </div>\n        )}\n        {component.type === 'form-date' && (\n          <div className=\"form-control mb-4\" onClick={(e) => e.stopPropagation()}>\n            <label className=\"label\">\n              <span className=\"label-text\">{component.label}</span>\n              {component.required && <span className=\"text-error\">*</span>}\n            </label>\n            <input\n              type=\"date\"\n              name={component.name}\n              required={component.required}\n              className={component.className}\n              disabled\n            />\n          </div>\n        )}\n        {component.type === 'form-submit' && (\n          <button \n            type=\"submit\" \n            className={component.className}\n            disabled\n            onClick={(e) => e.stopPropagation()}\n          >\n            {component.content}\n          </button>\n        )}\n        {component.type === 'columns' && (\n          <div \n            className={component.className}\n            onDragOver={(e) => {\n              e.preventDefault();\n              e.stopPropagation();\n              e.currentTarget.classList.add('ring-2', 'ring-primary');\n            }}\n            onDragLeave={(e) => {\n              e.currentTarget.classList.remove('ring-2', 'ring-primary');\n            }}\n            onDrop={(e) => {\n              e.preventDefault();\n              e.stopPropagation();\n              e.currentTarget.classList.remove('ring-2', 'ring-primary');\n              const componentType = e.dataTransfer.getData('componentType');\n              if (componentType) {\n                addComponent(componentType, component.id);\n              }\n            }}\n          >\n            {hasChildren ? (\n              component.children.map((child, idx) => renderComponent(child, idx, component.children))\n            ) : (\n              <div className=\"text-center py-8 text-gray-400 border-2 border-dashed border-gray-300 rounded\">\n                <p className=\"text-sm\">Click ➕ to add content or drag components here</p>\n              </div>\n            )}\n          </div>\n        )}\n        {component.type === 'container' && (\n          <div \n            className={component.className}\n            onDragOver={(e) => {\n              e.preventDefault();\n              e.stopPropagation();\n              e.currentTarget.classList.add('ring-2', 'ring-primary');\n            }}\n            onDragLeave={(e) => {\n              e.currentTarget.classList.remove('ring-2', 'ring-primary');\n            }}\n            onDrop={(e) => {\n              e.preventDefault();\n              e.stopPropagation();\n              e.currentTarget.classList.remove('ring-2', 'ring-primary');\n              const componentType = e.dataTransfer.getData('componentType');\n              if (componentType) {\n                addComponent(componentType, component.id);\n              }\n            }}\n          >\n            {hasChildren ? (\n              component.children.map((child, idx) => renderComponent(child, idx, component.children))\n            ) : (\n              <div className=\"text-center py-8 text-gray-400 border-2 border-dashed border-gray-300 rounded\">\n                <p className=\"text-sm\">Click ➕ to add content or drag components here</p>\n              </div>\n            )}\n          </div>\n        )}\n      </div>\n    );\n  };\n\n  return (\n    <div className=\"h-screen flex flex-col bg-base-100\">\n      {/* Header */}\n      <div className=\"border-b border-base-300 px-6 py-4 flex items-center justify-between bg-base-200\">\n        <div className=\"flex items-center gap-4\">\n          <button onClick={onBack} className=\"btn btn-sm btn-ghost\">\n            ← Back\n          </button>\n          <div>\n            <h1 className=\"text-xl font-bold\">{page?.name || 'Page Builder'}</h1>\n            <p className=\"text-xs text-gray-500\">/{page?.slug}</p>\n          </div>\n        </div>\n        \n        {/* Toolbar Controls */}\n        <div className=\"flex items-center gap-2\">\n          {/* Device Selector */}\n          <select \n            value={device} \n            onChange={(e) => setDevice(e.target.value)}\n            className=\"select select-sm select-bordered\"\n          >\n            {Object.keys(devicePresets).map(d => (\n              <option key={d} value={d}>{d} ({devicePresets[d]}px)</option>\n            ))}\n          </select>\n          \n          {/* Zoom Control */}\n          <div className=\"flex items-center gap-1\">\n            <button \n              onClick={() => setZoom(Math.max(50, zoom - 10))}\n              className=\"btn btn-xs\"\n              title=\"Zoom Out\"\n            >\n              −\n            </button>\n            <span className=\"text-xs px-2\">{zoom}%</span>\n            <button \n              onClick={() => setZoom(Math.min(150, zoom + 10))}\n              className=\"btn btn-xs\"\n              title=\"Zoom In\"\n            >\n              +\n            </button>\n          </div>\n          \n          {/* Grid Toggle */}\n          <button\n            onClick={() => setShowGrid(!showGrid)}\n            className={`btn btn-sm ${showGrid ? 'btn-primary' : 'btn-ghost'}`}\n            title=\"Toggle 12-Column Grid\"\n          >\n            {showGrid ? '🔲' : '⬜'}\n          </button>\n\n          {/* Full Width Toggle */}\n          <button\n            onClick={() => setFullWidth(!fullWidth)}\n            className={`btn btn-sm ${fullWidth ? 'btn-primary' : 'btn-ghost'}`}\n            title=\"Toggle Full Width\"\n          >\n            {fullWidth ? '⬅️➡️' : '↔️'}\n          </button>\n          \n          {/* Save Button */}\n          <button\n            onClick={handleSave}\n            className=\"btn btn-primary btn-sm\"\n            disabled={saving}\n          >\n            {saving ? '💾 Saving...' : '💾 Save Page'}\n          </button>\n        </div>\n      </div>\n\n      {/* Main Content */}\n      <div className=\"flex-1 flex overflow-hidden\">\n        {/* Left Sidebar - Component Palette */}\n        {!fullWidth && (\n        <div className=\"w-64 bg-base-100 border-r border-base-300 p-4 overflow-y-auto\">\n          <h3 className=\"text-lg font-bold mb-4\">📦 Components</h3>\n          \n          <div className=\"mb-4\">\n            <h4 className=\"text-xs font-bold text-gray-500 uppercase mb-2\">Layout</h4>\n            <div className=\"space-y-2\">\n              <button\n                onClick={() => addComponent('columns')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'columns')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                ⚏ 2 Columns\n              </button>\n              <button\n                onClick={() => addComponent('container')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'container')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                📦 Container\n              </button>\n            </div>\n          </div>\n\n          <div className=\"divider my-2\"></div>\n\n          <div className=\"mb-4\">\n            <h4 className=\"text-xs font-bold text-gray-500 uppercase mb-2\">Content</h4>\n            <div className=\"space-y-2\">\n              <button\n                onClick={() => addComponent('heading')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'heading')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                📝 Heading\n              </button>\n              <button\n                onClick={() => addComponent('text')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'text')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n              📄 Text\n            </button>\n            <button\n              onClick={() => addComponent('button')}\n              draggable=\"true\"\n              onDragStart={(e) => e.dataTransfer.setData('componentType', 'button')}\n              className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n            >\n              🔘 Button\n            </button>\n            <button\n              onClick={() => addComponent('image')}\n              draggable=\"true\"\n              onDragStart={(e) => e.dataTransfer.setData('componentType', 'image')}\n              className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n            >\n              🖼️ Image\n            </button>\n            </div>\n          </div>\n\n          <div className=\"divider my-2\"></div>\n\n          <div className=\"mb-4\">\n            <h4 className=\"text-xs font-bold text-gray-500 uppercase mb-2\">Spacing</h4>\n            <div className=\"space-y-2\">\n              <button\n                onClick={() => addComponent('divider')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'divider')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                ➖ Divider\n              </button>\n              <button\n                onClick={() => addComponent('spacer')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'spacer')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                ⬜ Spacer\n              </button>\n            </div>\n          </div>\n\n          <div className=\"divider my-2\"></div>\n\n          <div className=\"mb-4\">\n            <h4 className=\"text-xs font-bold text-gray-500 uppercase mb-2\">Advanced</h4>\n            <div className=\"space-y-2\">\n              <button\n                onClick={() => addComponent('html')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'html')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                🔧 HTML Block\n              </button>\n              <button\n                onClick={() => addComponent('icon')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'icon')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                ⭐ Icon\n              </button>\n              <button\n                onClick={() => addComponent('embed')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'embed')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                📺 Embed\n              </button>\n            </div>\n          </div>\n\n          <div className=\"divider my-2\"></div>\n\n          <div className=\"mb-4\">\n            <h4 className=\"text-xs font-bold text-gray-500 uppercase mb-2\">Forms</h4>\n            <div className=\"space-y-2\">\n              <button\n                onClick={() => addComponent('form-container')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'form-container')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                📋 Form\n              </button>\n              <button\n                onClick={() => addComponent('form-input')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'form-input')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                📝 Input Field\n              </button>\n              <button\n                onClick={() => addComponent('form-textarea')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'form-textarea')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                📄 Text Area\n              </button>\n              <button\n                onClick={() => addComponent('form-select')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'form-select')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                📑 Dropdown\n              </button>\n              <button\n                onClick={() => addComponent('form-checkbox')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'form-checkbox')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                ☑️ Checkbox\n              </button>\n              <button\n                onClick={() => addComponent('form-radio-group')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'form-radio-group')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                🔘 Radio Group\n              </button>\n              <button\n                onClick={() => addComponent('form-file')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'form-file')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                📎 File Upload\n              </button>\n              <button\n                onClick={() => addComponent('form-date')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'form-date')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                📅 Date Picker\n              </button>\n              <button\n                onClick={() => addComponent('form-submit')}\n                draggable=\"true\"\n                onDragStart={(e) => e.dataTransfer.setData('componentType', 'form-submit')}\n                className=\"btn btn-sm btn-block justify-start cursor-grab active:cursor-grabbing\"\n              >\n                ✅ Submit Button\n              </button>\n            </div>\n          </div>\n          \n          <div className=\"divider my-4\"></div>\n          <div className=\"alert alert-info text-xs space-y-1\">\n            <div className=\"flex items-start gap-2\">\n              <svg className=\"w-4 h-4 mt-0.5 flex-shrink-0\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clipRule=\"evenodd\" />\n              </svg>\n              <div className=\"text-xs\">\n                <p className=\"font-semibold mb-1\">💡 Tips:</p>\n                <p>• Double-click text to edit</p>\n                <p>• Drag components from sidebar to canvas or containers</p>\n                <p>• Drag elements to position (auto-snaps to grid & elements)</p>\n                <p>• Click ➕ on containers to add nested components</p>\n                <p>• Hold <kbd className=\"kbd kbd-xs\">Alt</kbd> while dragging to disable snapping</p>\n                <p>• <kbd className=\"kbd kbd-xs\">Enter</kbd> to edit / <kbd className=\"kbd kbd-xs\">Delete</kbd> to remove</p>\n                <p>• <kbd className=\"kbd kbd-xs\">Esc</kbd> to deselect</p>\n              </div>\n            </div>\n          </div>\n        </div>\n        )}\n\n        {/* Center - Canvas */}\n        <div className=\"flex-1 overflow-auto bg-gray-50 p-8\">\n          <div \n            className=\"mx-auto bg-white shadow-xl rounded-lg min-h-[800px] relative\"\n            style={{ \n              width: fullWidth ? '100%' : `${devicePresets[device]}px`,\n              maxWidth: fullWidth ? 'none' : undefined,\n              transform: `scale(${zoom / 100})`,\n              transformOrigin: 'top center', \n              minHeight: '800px',\n              backgroundImage: `\n                repeating-linear-gradient(0deg, #edf2f7 0, #edf2f7 1px, transparent 1px, transparent 20px),\n                repeating-linear-gradient(90deg, #edf2f7 0, #edf2f7 1px, transparent 1px, transparent 20px),\n                repeating-linear-gradient(0deg, #cbd5e0 0, #cbd5e0 1px, transparent 1px, transparent 100px),\n                repeating-linear-gradient(90deg, #cbd5e0 0, #cbd5e0 1px, transparent 1px, transparent 100px)\n              `,\n              backgroundSize: '20px 20px, 20px 20px, 100px 100px, 100px 100px'\n            }}\n            onClick={() => setSelectedId(null)}\n          >\n            {/* 12-Column Bootstrap Grid Overlay */}\n            {showGrid && (\n              <div className=\"absolute inset-0 pointer-events-none z-0\" style={{ display: 'grid', gridTemplateColumns: 'repeat(12, 1fr)', gap: 0 }}>\n                {Array.from({ length: 12 }).map((_, i) => (\n                  <div\n                    key={i}\n                    className=\"h-full border-r border-blue-200/30\"\n                    style={{ backgroundColor: i % 2 === 0 ? 'rgba(59, 130, 246, 0.02)' : 'rgba(59, 130, 246, 0.01)' }}\n                  />\n                ))}\n              </div>\n            )}\n\n            {components.length === 0 ? (\n              <div className=\"absolute inset-0 flex items-center justify-center text-gray-400 pointer-events-none\">\n                <div className=\"text-center\">\n                  <p className=\"text-xl mb-2\">👈 Click a component to add it</p>\n                  <p className=\"text-sm\">Drag components to position them anywhere!</p>\n                </div>\n              </div>\n            ) : null}\n            \n            {/* Alignment guide lines */}\n            {activeGuides.x !== null && (\n              <div \n                className=\"absolute top-0 bottom-0 w-px bg-primary/60 pointer-events-none z-50 transition-opacity\"\n                style={{ left: `${activeGuides.x}px` }}\n              />\n            )}\n            {activeGuides.y !== null && (\n              <div \n                className=\"absolute left-0 right-0 h-px bg-primary/60 pointer-events-none z-50 transition-opacity\"\n                style={{ top: `${activeGuides.y}px` }}\n              />\n            )}\n            \n            {/* Render all components with absolute positioning */}\n            {components.map((component, index) => renderComponent(component, index, components))}\n          </div>\n        </div>\n\n        {/* Right Sidebar - Properties (collapsible) */}\n        {!fullWidth && (\n        <div \n          className={`bg-base-100 border-l border-base-300 overflow-hidden transition-[width] duration-300 ease-in-out ${\n            selectedComponent ? 'w-80' : 'w-0'\n          }`}\n        >\n          {selectedComponent ? (\n            <div className=\"p-4 overflow-y-auto h-full\">\n              <h3 className=\"text-lg font-bold mb-4\">⚙️ Properties</h3>\n              <div className=\"mb-2\">\n                <div className=\"badge badge-primary\">{selectedComponent.type}</div>\n              </div>\n\n              {/* Tabbed Interface */}\n              <div className=\"tabs tabs-boxed mb-4\">\n                <button\n                  type=\"button\"\n                  className={`tab ${activeTab === 'content' ? 'tab-active' : ''}`}\n                  onClick={() => setActiveTab('content')}\n                >\n                  Content\n                </button>\n                <button\n                  type=\"button\"\n                  className={`tab ${activeTab === 'style' ? 'tab-active' : ''}`}\n                  onClick={() => setActiveTab('style')}\n                >\n                  Style\n                </button>\n                <button\n                  type=\"button\"\n                  className={`tab ${activeTab === 'advanced' ? 'tab-active' : ''}`}\n                  onClick={() => setActiveTab('advanced')}\n                >\n                  Advanced\n                </button>\n              </div>\n\n              {/* Content Tab */}\n              {activeTab === 'content' && (\n                <div className=\"space-y-4\">\n                  {(selectedComponent.type === 'heading' || selectedComponent.type === 'text' || selectedComponent.type === 'button') && (\n                  <div className=\"form-control\">\n                    <label className=\"label\">\n                      <span className=\"label-text font-semibold\">Content</span>\n                    </label>\n                    <textarea\n                      className=\"textarea textarea-bordered\"\n                      value={selectedComponent.content}\n                      onChange={(e) => updateComponent(selectedId, { content: e.target.value })}\n                      rows={selectedComponent.type === 'text' ? 6 : 3}\n                    />\n                    {selectedComponent.type === 'text' && (\n                      <label className=\"label\">\n                        <span className=\"label-text-alt\">✨ Markdown supported: **bold**, *italic*, [link](url), etc.</span>\n                      </label>\n                    )}\n                  </div>\n                )}\n\n                {selectedComponent.type === 'button' && (\n                  <div className=\"form-control\">\n                    <label className=\"label\">\n                      <span className=\"label-text font-semibold\">Link URL</span>\n                    </label>\n                    <input\n                      type=\"text\"\n                      className=\"input input-bordered\"\n                      value={selectedComponent.href || ''}\n                      onChange={(e) => updateComponent(selectedId, { href: e.target.value })}\n                      placeholder=\"https://example.com\"\n                    />\n                  </div>\n                )}\n\n                {selectedComponent.type === 'image' && (\n                <>\n                  <div className=\"form-control\">\n                    <label className=\"label\">\n                      <span className=\"label-text font-semibold\">Image URL</span>\n                    </label>\n                    <input\n                      type=\"text\"\n                      className=\"input input-bordered\"\n                      value={selectedComponent.content}\n                      onChange={(e) => updateComponent(selectedId, { content: e.target.value })}\n                      placeholder=\"https://example.com/image.jpg\"\n                    />\n                  </div>\n                  \n                  <div className=\"grid grid-cols-2 gap-2\">\n                    <div className=\"form-control\">\n                      <label className=\"label\">\n                        <span className=\"label-text font-semibold\">Width</span>\n                      </label>\n                      <input\n                        type=\"text\"\n                        className=\"input input-bordered input-sm\"\n                        value={selectedComponent.width || 'auto'}\n                        onChange={(e) => updateComponent(selectedId, { width: e.target.value })}\n                        placeholder=\"auto, 100px, 50%\"\n                      />\n                      <label className=\"label\">\n                        <span className=\"label-text-alt\">Drag handles to resize</span>\n                      </label>\n                    </div>\n                    <div className=\"form-control\">\n                      <label className=\"label\">\n                        <span className=\"label-text font-semibold\">Height</span>\n                      </label>\n                      <input\n                        type=\"text\"\n                        className=\"input input-bordered input-sm\"\n                        value={selectedComponent.height || 'auto'}\n                        onChange={(e) => updateComponent(selectedId, { height: e.target.value })}\n                        placeholder=\"auto, 100px, 50%\"\n                      />\n                    </div>\n                  </div>\n\n                  <div className=\"form-control\">\n                    <label className=\"label\">\n                      <span className=\"label-text font-semibold\">Alignment</span>\n                    </label>\n                    <div className=\"btn-group w-full\">\n                      <button\n                        className={`btn btn-sm flex-1 ${selectedComponent.className?.includes('float-left') ? 'btn-primary' : ''}`}\n                        onClick={() => {\n                          const classes = selectedComponent.className?.replace(/float-(left|right)|mx-auto/g, '').trim() || '';\n                          updateComponent(selectedId, { className: `${classes} float-left mr-4`.trim() });\n                        }}\n                        title=\"Float left\"\n                      >\n                        ⬅️\n                      </button>\n                      <button\n                        className={`btn btn-sm flex-1 ${selectedComponent.className?.includes('mx-auto') ? 'btn-primary' : ''}`}\n                        onClick={() => {\n                          const classes = selectedComponent.className?.replace(/float-(left|right)|mx-auto/g, '').trim() || '';\n                          updateComponent(selectedId, { className: `${classes} mx-auto block`.trim() });\n                        }}\n                        title=\"Center\"\n                      >\n                        ↔️\n                      </button>\n                      <button\n                        className={`btn btn-sm flex-1 ${selectedComponent.className?.includes('float-right') ? 'btn-primary' : ''}`}\n                        onClick={() => {\n                          const classes = selectedComponent.className?.replace(/float-(left|right)|mx-auto/g, '').trim() || '';\n                          updateComponent(selectedId, { className: `${classes} float-right ml-4`.trim() });\n                        }}\n                        title=\"Float right\"\n                      >\n                        ➡️\n                      </button>\n                    </div>\n                    <label className=\"label\">\n                      <span className=\"label-text-alt\">Position image in layout</span>\n                    </label>\n                  </div>\n                </>\n              )}\n\n                  {/* HTML Block */}\n                  {selectedComponent.type === 'html' && (\n                    <div className=\"form-control\">\n                      <label className=\"label\">\n                        <span className=\"label-text font-semibold\">HTML Code</span>\n                      </label>\n                      <textarea\n                        className=\"textarea textarea-bordered font-mono text-xs\"\n                        rows={12}\n                        value={selectedComponent.content}\n                        onChange={(e) => updateComponent(selectedId, { content: e.target.value })}\n                        placeholder=\"<div>Your HTML here</div>\"\n                      />\n                      <label className=\"label\">\n                        <span className=\"label-text-alt\">⚠️ Be careful with custom HTML</span>\n                      </label>\n                    </div>\n                  )}\n\n                  {/* Icon */}\n                  {selectedComponent.type === 'icon' && (\n                    <>\n                      <IconPicker\n                        value={selectedComponent}\n                        onChange={(newProps) => updateComponent(selectedId, newProps)}\n                      />\n                      <div className=\"form-control mt-4\">\n                        <label className=\"label\">\n                          <span className=\"label-text font-semibold\">Size (px)</span>\n                        </label>\n                        <input\n                          type=\"number\"\n                          className=\"input input-bordered\"\n                          value={selectedComponent.size || 24}\n                          onChange={(e) => updateComponent(selectedId, { size: e.target.value })}\n                        />\n                      </div>\n                      <div className=\"form-control mt-4\">\n                        <label className=\"label\">\n                          <span className=\"label-text font-semibold\">Color</span>\n                        </label>\n                        <input\n                          type=\"text\"\n                          className=\"input input-bordered\"\n                          value={selectedComponent.color || '#000000'}\n                          onChange={(e) => updateComponent(selectedId, { color: e.target.value })}\n                        />\n                      </div>\n                    </>\n                  )}\n\n                  {/* Embed */}\n                  {selectedComponent.type === 'embed' && (\n                    <EmbedHelper\n                      value={selectedComponent}\n                      onChange={(newProps) => updateComponent(selectedId, newProps)}\n                    />\n                  )}\n\n                  {/* Form Container */}\n                  {selectedComponent.type === 'form-container' && (\n                    <>\n                      <div className=\"form-control\">\n                        <label className=\"label\">\n                          <span className=\"label-text font-semibold\">Action URL</span>\n                        </label>\n                        <input\n                          type=\"text\"\n                          className=\"input input-bordered\"\n                          value={selectedComponent.action || ''}\n                          onChange={(e) => updateComponent(selectedId, { action: e.target.value })}\n                          placeholder=\"/api/forms/submit\"\n                        />\n                      </div>\n                      <div className=\"form-control\">\n                        <label className=\"label\">\n                          <span className=\"label-text font-semibold\">Method</span>\n                        </label>\n                        <select\n                          className=\"select select-bordered\"\n                          value={selectedComponent.method || 'POST'}\n                          onChange={(e) => updateComponent(selectedId, { method: e.target.value })}\n                        >\n                          <option value=\"POST\">POST</option>\n                          <option value=\"GET\">GET</option>\n                        </select>\n                      </div>\n                    </>\n                  )}\n\n                  {/* Form Input/Select/Textarea/etc */}\n                  {(selectedComponent.type === 'form-input' || selectedComponent.type === 'form-textarea' || \n                    selectedComponent.type === 'form-select' || selectedComponent.type === 'form-checkbox' ||\n                    selectedComponent.type === 'form-radio-group' || selectedComponent.type === 'form-file' ||\n                    selectedComponent.type === 'form-date') && (\n                    <>\n                      <div className=\"form-control\">\n                        <label className=\"label\">\n                          <span className=\"label-text font-semibold\">Label</span>\n                        </label>\n                        <input\n                          type=\"text\"\n                          className=\"input input-bordered\"\n                          value={selectedComponent.label || ''}\n                          onChange={(e) => updateComponent(selectedId, { label: e.target.value })}\n                        />\n                      </div>\n                      <div className=\"form-control\">\n                        <label className=\"label\">\n                          <span className=\"label-text font-semibold\">Name</span>\n                        </label>\n                        <input\n                          type=\"text\"\n                          className=\"input input-bordered\"\n                          value={selectedComponent.name || ''}\n                          onChange={(e) => updateComponent(selectedId, { name: e.target.value })}\n                        />\n                      </div>\n                      {(selectedComponent.type === 'form-input' || selectedComponent.type === 'form-textarea') && (\n                        <div className=\"form-control\">\n                          <label className=\"label\">\n                            <span className=\"label-text font-semibold\">Placeholder</span>\n                          </label>\n                          <input\n                            type=\"text\"\n                            className=\"input input-bordered\"\n                            value={selectedComponent.placeholder || ''}\n                            onChange={(e) => updateComponent(selectedId, { placeholder: e.target.value })}\n                          />\n                        </div>\n                      )}\n                      {(selectedComponent.type === 'form-select' || selectedComponent.type === 'form-radio-group') && (\n                        <div className=\"form-control\">\n                          <label className=\"label\">\n                            <span className=\"label-text font-semibold\">Options (one per line)</span>\n                          </label>\n                          <textarea\n                            className=\"textarea textarea-bordered\"\n                            rows={4}\n                            value={(selectedComponent.options || []).join('\\n')}\n                            onChange={(e) => updateComponent(selectedId, { options: e.target.value.split('\\n').filter(o => o.trim()) })}\n                          />\n                        </div>\n                      )}\n                      <div className=\"form-control\">\n                        <label className=\"label cursor-pointer\">\n                          <span className=\"label-text\">Required</span>\n                          <input\n                            type=\"checkbox\"\n                            className=\"checkbox\"\n                            checked={selectedComponent.required || false}\n                            onChange={(e) => updateComponent(selectedId, { required: e.target.checked })}\n                          />\n                        </label>\n                      </div>\n                    </>\n                  )}\n                </div>\n              )}\n\n              {/* Style Tab */}\n              {activeTab === 'style' && (\n                <div className=\"space-y-6\">\n                  <ColorPicker\n                    label=\"Background Color\"\n                    value={selectedComponent.styles?.backgroundColor}\n                    onChange={(color) => updateComponentStyle('backgroundColor', color)}\n                    showBrandColors={true}\n                  />\n                  <ColorPicker\n                    label=\"Text Color\"\n                    value={selectedComponent.styles?.color}\n                    onChange={(color) => updateComponentStyle('color', color)}\n                    showBrandColors={true}\n                  />\n                  <TypographyControl\n                    value={selectedComponent.styles || {}}\n                    onChange={(styles) => updateComponent(selectedId, { styles: { ...selectedComponent.styles, ...styles } })}\n                  />\n                  <SpacingControl\n                    label=\"Padding\"\n                    value={selectedComponent.styles?.padding}\n                    onChange={(padding) => updateComponentStyle('padding', padding)}\n                    property=\"padding\"\n                  />\n                  <SpacingControl\n                    label=\"Margin\"\n                    value={selectedComponent.styles?.margin}\n                    onChange={(margin) => updateComponentStyle('margin', margin)}\n                    property=\"margin\"\n                  />\n                  <BorderControl\n                    value={selectedComponent.styles || {}}\n                    onChange={(styles) => updateComponent(selectedId, { styles: { ...selectedComponent.styles, ...styles } })}\n                  />\n                  <ShadowControl\n                    value={selectedComponent.styles?.boxShadow}\n                    onChange={(boxShadow) => updateComponentStyle('boxShadow', boxShadow)}\n                  />\n                  <DisplayControl\n                    value={selectedComponent.styles || {}}\n                    onChange={(styles) => updateComponent(selectedId, { styles: { ...selectedComponent.styles, ...styles } })}\n                  />\n                </div>\n              )}\n\n              {/* Advanced Tab */}\n              {activeTab === 'advanced' && (\n                <div className=\"space-y-4\">\n                  <div className=\"form-control\">\n                    <label className=\"label\">\n                      <span className=\"label-text font-semibold\">Width</span>\n                    </label>\n                    <input\n                      type=\"text\"\n                      className=\"input input-bordered\"\n                      value={selectedComponent.width || 'auto'}\n                      onChange={(e) => updateComponent(selectedId, { width: e.target.value })}\n                      placeholder=\"auto, 100px, 50%\"\n                    />\n                  </div>\n\n                  <div className=\"form-control\">\n                    <label className=\"label\">\n                      <span className=\"label-text font-semibold\">Height</span>\n                    </label>\n                    <input\n                      type=\"text\"\n                      className=\"input input-bordered\"\n                      value={selectedComponent.height || 'auto'}\n                      onChange={(e) => updateComponent(selectedId, { height: e.target.value })}\n                      placeholder=\"auto, 100px, 50%\"\n                    />\n                  </div>\n\n                  <div className=\"form-control\">\n                    <label className=\"label\">\n                      <span className=\"label-text font-semibold\">CSS Classes</span>\n                    </label>\n                    <input\n                      type=\"text\"\n                      className=\"input input-bordered\"\n                      value={selectedComponent.className || ''}\n                      onChange={(e) => updateComponent(selectedId, { className: e.target.value })}\n                      placeholder=\"text-xl font-bold\"\n                    />\n                    <label className=\"label\">\n                      <span className=\"label-text-alt\">Use Tailwind CSS classes</span>\n                    </label>\n                  </div>\n\n                  <div className=\"form-control\">\n                    <label className=\"label\">\n                      <span className=\"label-text font-semibold\">Custom CSS</span>\n                    </label>\n                    <textarea\n                      className=\"textarea textarea-bordered font-mono text-xs\"\n                      rows={8}\n                      value={selectedComponent.customCss || ''}\n                      onChange={(e) => updateComponent(selectedId, { customCss: e.target.value })}\n                      placeholder=\".my-element { color: red; }\"\n                    />\n                    <label className=\"label\">\n                      <span className=\"label-text-alt\">⚠️ Advanced: inline CSS for this component</span>\n                    </label>\n                  </div>\n\n                  <div className=\"divider\"></div>\n\n                  <button\n                    onClick={() => deleteComponent(selectedId)}\n                    className=\"btn btn-error btn-block btn-sm\"\n                  >\n                    🗑️ Delete Component\n                  </button>\n                </div>\n              )}\n            </div>\n          ) : null}\n        </div>\n        )}\n      </div>\n\n      {/* Context Menu */}\n      <ContextMenu\n        visible={contextMenu.visible}\n        x={contextMenu.x}\n        y={contextMenu.y}\n        component={contextMenu.targetId ? findComponent(contextMenu.targetId) : null}\n        onClose={() => setContextMenu({ ...contextMenu, visible: false })}\n        onAddChild={() => {\n          if (contextMenu.targetId) {\n            setShowAddMenu(contextMenu.targetId);\n          }\n        }}\n        onDuplicate={() => {\n          if (contextMenu.targetId) {\n            duplicateComponent(contextMenu.targetId);\n          }\n        }}\n        onDelete={() => {\n          if (contextMenu.targetId) {\n            deleteComponent(contextMenu.targetId);\n          }\n        }}\n        onEditText={() => {\n          if (contextMenu.targetId) {\n            setEditingId(contextMenu.targetId);\n          }\n        }}\n        onBringToFront={handleBringToFront}\n        onSendToBack={handleSendToBack}\n      />\n    </div>\n  );\n}\n\n","import { useForm } from 'react-hook-form';\nimport { useState } from 'react';\n\nexport default function FormWithValidation({ component, children }) {\n  const { handleSubmit, formState: { errors } } = useForm();\n  const [submitStatus, setSubmitStatus] = useState({ type: '', message: '' });\n\n  const onSubmit = async (data) => {\n    setSubmitStatus({ type: '', message: '' });\n\n    try {\n      const response = await fetch(component.action || '/api/forms/submit', {\n        method: component.method || 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(data),\n      });\n\n      if (response.ok) {\n        setSubmitStatus({\n          type: 'success',\n          message: component.successMessage || 'Form submitted successfully!',\n        });\n        // Reset form if needed\n      } else {\n        throw new Error('Submission failed');\n      }\n    } catch (error) {\n      setSubmitStatus({\n        type: 'error',\n        message: component.errorMessage || 'Failed to submit form. Please try again.',\n      });\n    }\n  };\n\n  return (\n    <form onSubmit={handleSubmit(onSubmit)} className={component.className}>\n      {submitStatus.message && (\n        <div className={`alert ${submitStatus.type === 'success' ? 'alert-success' : 'alert-error'} mb-4`}>\n          <span>{submitStatus.message}</span>\n        </div>\n      )}\n\n      {children}\n\n      {errors && Object.keys(errors).length > 0 && (\n        <div className=\"alert alert-error mb-4\">\n          <span>Please fix the errors above</span>\n        </div>\n      )}\n    </form>\n  );\n}\n\n","import { useState } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport DynamicIcon from \"./components/DynamicIcon\";\nimport FormWithValidation from \"./components/FormWithValidation\";\n\n// Render a single component based on type (recursive for nested components)\nfunction RenderComponent({ component }) {\n  const { type, content, href, className, children, width, height } = component;\n\n  switch (type) {\n    case 'heading':\n      return <h2 className={className || \"text-3xl font-bold mb-4\"}>{content}</h2>;\n    case 'text':\n      return (\n        <div className={className || \"text-gray-600 mb-4\"}>\n          <ReactMarkdown className=\"prose prose-sm max-w-none\">\n            {content}\n          </ReactMarkdown>\n        </div>\n      );\n    case 'button':\n      return (\n        <a href={href || \"#\"} className={className || \"btn btn-primary\"}>\n          {content}\n        </a>\n      );\n    case 'image':\n      return (\n        <img \n          src={content} \n          alt=\"\" \n          className={className || \"w-full h-auto\"}\n          style={{\n            width: width !== 'auto' ? width : undefined,\n            height: height !== 'auto' ? height : undefined,\n          }}\n        />\n      );\n    case 'divider':\n      return <div className={className || \"divider my-8\"}></div>;\n    case 'spacer':\n      return <div className={className || \"h-12\"}></div>;\n    case 'columns':\n      return (\n        <div className={className || \"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4\"}>\n          {children && children.map((child) => (\n            <RenderComponent key={child.id} component={child} />\n          ))}\n        </div>\n      );\n    case 'container':\n      return (\n        <div className={className || \"p-4 mb-4\"}>\n          {children && children.map((child) => (\n            <RenderComponent key={child.id} component={child} />\n          ))}\n        </div>\n      );\n    case 'html':\n      return <div dangerouslySetInnerHTML={{ __html: content }} />;\n    case 'icon':\n      if (component.iconLibrary === 'custom') {\n        return <div dangerouslySetInnerHTML={{ __html: component.customSvg }} />;\n      }\n      return <DynamicIcon {...component} />;\n    case 'embed':\n      return (\n        <div \n          className={className}\n          style={{ width, height }}\n          dangerouslySetInnerHTML={{ __html: component.embedCode }}\n        />\n      );\n    case 'form-container':\n      return (\n        <FormWithValidation component={component}>\n          {children && children.map((child) => (\n            <RenderComponent key={child.id} component={child} />\n          ))}\n        </FormWithValidation>\n      );\n    case 'form-input':\n      return (\n        <div className=\"form-control mb-4\">\n          <label className=\"label\">\n            <span className=\"label-text\">{component.label}</span>\n            {component.required && <span className=\"text-error\">*</span>}\n          </label>\n          <input\n            type={component.inputType || 'text'}\n            name={component.name}\n            placeholder={component.placeholder}\n            required={component.required}\n            className={className || \"input input-bordered w-full\"}\n          />\n        </div>\n      );\n    case 'form-textarea':\n      return (\n        <div className=\"form-control mb-4\">\n          <label className=\"label\">\n            <span className=\"label-text\">{component.label}</span>\n            {component.required && <span className=\"text-error\">*</span>}\n          </label>\n          <textarea\n            name={component.name}\n            placeholder={component.placeholder}\n            required={component.required}\n            rows={component.rows || 4}\n            className={className || \"textarea textarea-bordered w-full\"}\n          />\n        </div>\n      );\n    case 'form-select':\n      return (\n        <div className=\"form-control mb-4\">\n          <label className=\"label\">\n            <span className=\"label-text\">{component.label}</span>\n            {component.required && <span className=\"text-error\">*</span>}\n          </label>\n          <select\n            name={component.name}\n            required={component.required}\n            className={className || \"select select-bordered w-full\"}\n          >\n            <option value=\"\">Select...</option>\n            {component.options?.map((opt, idx) => (\n              <option key={idx} value={opt}>{opt}</option>\n            ))}\n          </select>\n        </div>\n      );\n    case 'form-checkbox':\n      return (\n        <div className=\"form-control mb-4\">\n          <label className=\"label cursor-pointer justify-start gap-2\">\n            <input\n              type=\"checkbox\"\n              name={component.name}\n              required={component.required}\n              className={className || \"checkbox\"}\n            />\n            <span className=\"label-text\">{component.label}</span>\n          </label>\n        </div>\n      );\n    case 'form-radio-group':\n      return (\n        <div className=\"form-control mb-4\">\n          <label className=\"label\">\n            <span className=\"label-text\">{component.label}</span>\n            {component.required && <span className=\"text-error\">*</span>}\n          </label>\n          {component.options?.map((opt, idx) => (\n            <label key={idx} className=\"label cursor-pointer justify-start gap-2\">\n              <input\n                type=\"radio\"\n                name={component.name}\n                value={opt}\n                className=\"radio\"\n                required={component.required && idx === 0}\n              />\n              <span className=\"label-text\">{opt}</span>\n            </label>\n          ))}\n        </div>\n      );\n    case 'form-file':\n      return (\n        <div className=\"form-control mb-4\">\n          <label className=\"label\">\n            <span className=\"label-text\">{component.label}</span>\n            {component.required && <span className=\"text-error\">*</span>}\n          </label>\n          <input\n            type=\"file\"\n            name={component.name}\n            accept={component.accept}\n            required={component.required}\n            className={className || \"file-input file-input-bordered w-full\"}\n          />\n        </div>\n      );\n    case 'form-date':\n      return (\n        <div className=\"form-control mb-4\">\n          <label className=\"label\">\n            <span className=\"label-text\">{component.label}</span>\n            {component.required && <span className=\"text-error\">*</span>}\n          </label>\n          <input\n            type=\"date\"\n            name={component.name}\n            required={component.required}\n            className={className || \"input input-bordered w-full\"}\n          />\n        </div>\n      );\n    case 'form-submit':\n      return (\n        <button \n          type=\"submit\" \n          className={className || \"btn btn-primary\"}\n        >\n          {content}\n        </button>\n      );\n    default:\n      return null;\n  }\n}\n\nexport default function Renderer({ \n  components = [],\n  isDraft = false,\n  showDraftBanner = true,\n  pageName = '',\n  pageSlug = ''\n}) {\n  const [loading] = useState(false);\n  const [page] = useState({ name: pageName, slug: pageSlug });\n\n  if (loading) {\n    return (\n      <div className=\"flex items-center justify-center h-64\">\n        <span className=\"loading loading-spinner loading-lg\"></span>\n      </div>\n    );\n  }\n\n  if (!page || components.length === 0) {\n    return <div className=\"container mx-auto px-4 py-12\">Page content coming soon.</div>;\n  }\n\n  return (\n    <div className=\"min-h-screen py-12\">\n      {/* Draft Banner */}\n      {isDraft && showDraftBanner && (\n        <div className=\"bg-warning text-warning-content py-2 px-4\">\n          <div className=\"container mx-auto flex items-center justify-between\">\n            <div className=\"flex items-center gap-2\">\n              <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n                <path fillRule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clipRule=\"evenodd\" />\n              </svg>\n              <span className=\"font-semibold\">DRAFT MODE</span>\n              <span className=\"text-sm\">This page is only visible to admins</span>\n            </div>\n          </div>\n        </div>\n      )}\n\n      <div className=\"container mx-auto px-4\">\n        <h1 className=\"text-4xl font-bold mb-8\">{page.title}</h1>\n        {page.description && (\n          <p className=\"text-xl text-gray-600 mb-12\">{page.description}</p>\n        )}\n        <div className=\"space-y-4\">\n          {components.map((component) => (\n            <RenderComponent key={component.id} component={component} />\n          ))}\n        </div>\n      </div>\n    </div>\n  );\n}\n\n\n","// Main exports\nexport { default as PageBuilder } from './PageBuilder';\nexport { default as Renderer } from './Renderer';\n\n// Component types constants\nexport const ComponentTypes = {\n  HEADING: 'heading',\n  TEXT: 'text',\n  BUTTON: 'button',\n  IMAGE: 'image',\n  COLUMNS: 'columns',\n  CONTAINER: 'container',\n  DIVIDER: 'divider',\n  SPACER: 'spacer',\n  HTML: 'html',\n  ICON: 'icon',\n  EMBED: 'embed',\n  FORM_CONTAINER: 'form-container',\n  FORM_INPUT: 'form-input',\n  FORM_TEXTAREA: 'form-textarea',\n  FORM_SELECT: 'form-select',\n  FORM_CHECKBOX: 'form-checkbox',\n  FORM_RADIO_GROUP: 'form-radio-group',\n  FORM_FILE: 'form-file',\n  FORM_DATE: 'form-date',\n  FORM_SUBMIT: 'form-submit'\n};\n\n// Export version\nexport const VERSION = '1.0.0';\n\n"],"names":["useState","jsxs","jsx","HexColorPicker","Fragment","useEffect","module","LucideIcons","lazy","Suspense","components","useCallback","id","_a","_b","selectedComponent","ReactMarkdown","useForm"],"mappings":"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"}