form-page-builder 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +107 -0
- package/dist/index.cjs +2395 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +534 -0
- package/dist/index.d.ts +534 -0
- package/dist/index.js +2402 -0
- package/dist/index.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/FormBuilder.tsx","../src/i18n/languages.ts","../src/i18n/strings.ts","../src/i18n/chrome.ts","../src/lib/bilingual.ts","../src/lib/storage/localStorageAdapter.ts","../src/hooks/useTheme.ts","../src/theme/defaultTheme.ts","../src/hooks/useFormDocument.ts","../src/constants/fieldTypes.ts","../src/lib/id.ts","../src/lib/fieldDefaults.ts","../src/hooks/usePersistence.ts","../src/lib/storage/keys.ts","../src/lib/migrate.ts","../src/hooks/useDragReorder.ts","../src/components/Toolbar.tsx","../src/styles/styles.ts","../src/components/Segmented.tsx","../src/components/LayoutPopover.tsx","../src/constants/colors.ts","../src/constants/layout.ts","../src/components/Palette.tsx","../src/components/Canvas.tsx","../src/components/SectionCard.tsx","../src/constants/submitStyle.ts","../src/components/FieldTicket.tsx","../src/components/fields/FieldBlock.tsx","../src/constants/typography.ts","../src/constants/icons.ts","../src/components/fields/ImageBlock.tsx","../src/components/Inspector.tsx","../src/components/fields/DefaultValueEditor.tsx","../src/components/PreviewPane.tsx","../src/lib/validate.ts","../src/lib/format.ts","../src/components/modals/JsonModal.tsx","../src/components/modals/LibraryModal.tsx","../src/components/modals/SaveAsModal.tsx","../src/components/modals/SettingsModal.tsx","../src/styles/globalCss.ts"],"sourcesContent":["export { default as FormBuilder, default } from \"./FormBuilder\";\nexport { localStorageAdapter } from \"./lib/storage/localStorageAdapter\";\nexport type {\n FormBuilderProps, StorageAdapter, Theme, ThemeLayout, ThemeOverrides,\n FormField, FieldPatch, FieldType, Option, Section, FormDocument, DocumentFields,\n SavedFormMeta, LocalizedString, LanguageOption, ChromeShape, StringsShape,\n InputField, TextareaField, SelectField, RadioField, CheckboxGroupField,\n CheckboxField, ToggleField, ParagraphField, ImageField, SubmitStyle,\n} from \"./types\";\n","\"use client\";\n\nimport { useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport type { FormBuilderProps } from \"./types\";\nimport { DEFAULT_LANGUAGES } from \"./i18n/languages\";\nimport { DEFAULT_STRINGS } from \"./i18n/strings\";\nimport { CHROME } from \"./i18n/chrome\";\nimport { t } from \"./lib/bilingual\";\nimport { localStorageAdapter } from \"./lib/storage/localStorageAdapter\";\nimport { useTheme } from \"./hooks/useTheme\";\nimport { useFormDocument } from \"./hooks/useFormDocument\";\nimport { usePersistence } from \"./hooks/usePersistence\";\nimport { useDragReorder } from \"./hooks/useDragReorder\";\nimport { Toolbar } from \"./components/Toolbar\";\nimport { Palette } from \"./components/Palette\";\nimport { Canvas } from \"./components/Canvas\";\nimport { Inspector } from \"./components/Inspector\";\nimport { PreviewPane } from \"./components/PreviewPane\";\nimport { JsonModal } from \"./components/modals/JsonModal\";\nimport { LibraryModal } from \"./components/modals/LibraryModal\";\nimport { SaveAsModal } from \"./components/modals/SaveAsModal\";\nimport { SettingsModal } from \"./components/modals/SettingsModal\";\nimport { css } from \"./styles/globalCss\";\nimport { styles } from \"./styles/styles\";\n\nexport default function FormBuilder({\n theme: themeOverrideProp,\n language: languageOverride,\n languages = DEFAULT_LANGUAGES,\n strings: stringsOverride,\n chrome: chromeOverride,\n themeEditable = false,\n storage: storageProp,\n}: FormBuilderProps = {}) {\n const storage = storageProp ?? localStorageAdapter;\n const { theme, updateThemeColor, updateThemeLayout, resetTheme, replaceThemeOverrides, themeOverrides } = useTheme(themeOverrideProp);\n\n const [language, setLanguage] = useState(languageOverride || languages[0]?.code || \"en\");\n const strings = { ...(DEFAULT_STRINGS[language as keyof typeof DEFAULT_STRINGS] || DEFAULT_STRINGS.en), ...((stringsOverride && stringsOverride[language]) || {}) };\n const chrome = { ...(CHROME[language as keyof typeof CHROME] || CHROME.en), ...((chromeOverride && chromeOverride[language]) || {}) };\n\n const doc = useFormDocument({ language, chrome });\n const drag = useDragReorder(doc.reorderWithinSection);\n\n const [mode, setMode] = useState<\"build\" | \"preview\">(\"build\");\n const [showJson, setShowJson] = useState(false);\n const [showSettings, setShowSettings] = useState(false);\n const [showLibrary, setShowLibrary] = useState(false);\n const [copied, setCopied] = useState(false);\n\n const persistence = usePersistence({\n storage,\n language,\n document: {\n title: doc.title, submitLabel: doc.submitLabel, submitMode: doc.submitMode,\n submitStyle: doc.submitStyle, themeOverrides, sections: doc.sections,\n },\n onLoadDocument: doc.loadDocument,\n onLoadThemeOverrides: replaceThemeOverrides,\n onTitleChange: doc.setTitle,\n onNewForm: () => { doc.resetToBlank(); resetTheme(); },\n ensureActiveSection: () => doc.setActiveSectionId((prev) => prev ?? doc.sections[0]?.id ?? null),\n });\n\n const jsonDoc = {\n version: 4 as const,\n title: doc.title, submitLabel: doc.submitLabel, submitMode: doc.submitMode, submitStyle: doc.submitStyle, themeOverrides,\n sections: doc.sections.map((s) => ({ id: s.id, title: s.title, background: s.background, collapsed: s.collapsed, submitStyle: s.submitStyle, fields: s.fields })),\n };\n const jsonString = JSON.stringify(jsonDoc, null, 2);\n\n function copyJson() {\n navigator.clipboard.writeText(jsonString).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }).catch(() => {});\n }\n\n const activeSectionIdx = doc.sections.findIndex((s) => s.id === doc.activeSection?.id);\n const activeSectionLabel = t(doc.activeSection?.title, language) || `#${activeSectionIdx + 1}`;\n\n const rootStyle: CSSProperties = {\n ...styles.app,\n \"--fb-primary\": theme.primary, \"--fb-primary-soft\": theme.primarySoft,\n \"--fb-danger\": theme.danger, \"--fb-danger-soft\": theme.dangerSoft,\n \"--fb-ink\": theme.ink, \"--fb-muted\": theme.muted, \"--fb-border\": theme.border,\n \"--fb-surface\": theme.surface, \"--fb-canvas\": theme.canvas, \"--fb-page-bg\": theme.pageBackground,\n \"--fb-space-page\": `${theme.layout.pagePadding}px`, \"--fb-space-canvas\": `${theme.layout.canvasPadding}px`,\n \"--fb-space-section\": `${theme.layout.sectionGap}px`, \"--fb-space-field\": `${theme.layout.fieldGap}px`,\n \"--fb-space-toolbar\": `${theme.layout.toolbarPadding}px`, \"--fb-space-panel\": `${theme.layout.panelPadding}px`,\n \"--fb-space-ticket\": `${theme.layout.ticketPadding}px`,\n } as CSSProperties;\n\n return (\n <div style={rootStyle}>\n <style>{css}</style>\n\n <Toolbar\n title={doc.title}\n language={language}\n languages={languages}\n mode={mode}\n saveState={persistence.saveState}\n chrome={chrome}\n themeEditable={themeEditable}\n theme={theme}\n savedFormsCount={persistence.savedForms.length}\n onTitleChange={doc.updateTitle}\n onLanguageChange={setLanguage}\n onModeChange={setMode}\n onOpenSettings={() => setShowSettings(true)}\n onNewForm={persistence.newForm}\n onOpenLibrary={() => setShowLibrary(true)}\n onSaveExisting={persistence.saveExisting}\n onOpenJson={() => setShowJson(true)}\n updateThemeColor={updateThemeColor}\n updateThemeLayout={updateThemeLayout}\n resetTheme={resetTheme}\n />\n\n {persistence.loadingDraft ? (\n <div style={styles.loadingScreen}>\n <Loader2 size={20} className=\"spin\" />\n <span style={{ marginTop: 8, fontSize: 13, color: \"var(--fb-muted)\" }}>{chrome.loadingDraft}</span>\n </div>\n ) : mode === \"build\" ? (\n <div style={styles.workArea}>\n <Palette activeSectionLabel={activeSectionLabel} chrome={chrome} onAddField={doc.addField} />\n\n <Canvas\n sections={doc.sections}\n activeSectionId={doc.activeSectionId}\n submitMode={doc.submitMode}\n submitStyle={doc.submitStyle}\n selectedId={doc.selectedId}\n dragOverKey={drag.dragOverKey}\n chrome={chrome}\n strings={strings}\n language={language}\n onActivateSection={doc.setActiveSectionId}\n onToggleSectionCollapse={doc.toggleSectionCollapse}\n onUpdateSectionTitle={doc.updateSectionTitle}\n onUpdateSectionBackground={doc.updateSectionBackground}\n onDuplicateSection={doc.duplicateSection}\n onMoveSection={doc.moveSection}\n onDeleteSection={doc.deleteSection}\n onUpdateSectionSubmitStyle={doc.updateSectionSubmitStyle}\n onClearSectionSubmitStyle={doc.clearSectionSubmitStyle}\n onAddSection={doc.addSection}\n onSelectField={(sectionId, fieldId) => { doc.setSelectedId(fieldId); doc.setActiveSectionId(sectionId); }}\n onFieldChange={doc.updateField}\n onMoveField={doc.moveField}\n onDuplicateField={doc.duplicateField}\n onDeleteField={doc.deleteField}\n getDropZoneHandlers={drag.getDropZoneHandlers}\n getDragHandleProps={drag.getDragHandleProps}\n />\n\n <Inspector\n selected={doc.selected}\n language={language}\n chrome={chrome}\n onUpdateField={(patch) => doc.selected && doc.updateField(doc.selected.id, patch)}\n onDeleteField={() => doc.selected && doc.deleteField(doc.selected.id)}\n onUpdateOption={(optIdx, patch) => doc.selected && doc.updateOption(doc.selected.id, optIdx, patch)}\n onAddOption={() => doc.selected && doc.addOption(doc.selected.id)}\n onRemoveOption={(optIdx) => doc.selected && doc.removeOption(doc.selected.id, optIdx)}\n />\n </div>\n ) : (\n <PreviewPane\n title={doc.title} sections={doc.sections} onFieldChange={doc.updateField} language={language}\n strings={strings} chrome={chrome} baseMaxWidth={theme.layout.maxWidth}\n submitLabel={doc.submitLabel} submitMode={doc.submitMode} submitStyle={doc.submitStyle}\n />\n )}\n\n {showJson && (\n <JsonModal chrome={chrome} jsonString={jsonString} copied={copied} onCopy={copyJson} onClose={() => setShowJson(false)} />\n )}\n\n {showLibrary && (\n <LibraryModal\n chrome={chrome}\n savedForms={persistence.savedForms}\n currentFormId={persistence.currentFormId}\n onOpen={async (id) => { await persistence.loadForm(id); setShowLibrary(false); }}\n onDelete={persistence.deleteForm}\n onClose={() => setShowLibrary(false)}\n />\n )}\n\n {persistence.saveAsPrompt && (\n <SaveAsModal\n chrome={chrome}\n suggestedName={persistence.saveAsPrompt.suggestedName}\n onSave={persistence.saveAs}\n onClose={persistence.dismissSaveAsPrompt}\n />\n )}\n\n {showSettings && (\n <SettingsModal\n chrome={chrome}\n strings={strings}\n submitLabel={doc.submitLabel}\n language={language}\n submitMode={doc.submitMode}\n submitStyle={doc.submitStyle}\n onSubmitLabelChange={doc.updateSubmitLabel}\n onSubmitModeChange={doc.setSubmitMode}\n onSubmitStyleChange={doc.updateSubmitStyle}\n onClose={() => setShowSettings(false)}\n />\n )}\n </div>\n );\n}\n","export interface LanguageOption {\n code: string;\n label: string;\n}\n\nexport const DEFAULT_LANGUAGES: LanguageOption[] = [\n { code: \"en\", label: \"EN\" },\n { code: \"ja\", label: \"日本語\" },\n];\n","export const DEFAULT_STRINGS = {\n en: {\n submit: \"Submit\", selectPlaceholder: \"Select...\", requiredError: \"This field is required.\",\n invalidEmail: \"Enter a valid email address.\", invalidPhone: \"Enter a valid phone number.\",\n fixErrors: \"Please fix the highlighted fields before submitting.\", submittedTitle: \"Form submitted\",\n submittedBody: \"Here's what would be sent to your backend:\", addFieldsHint: \"Add fields in Build mode to see them here.\",\n close: \"Close\",\n tooLong: (n: number) => `Must be ${n} characters or fewer.`,\n tooSmall: (n: number) => `Must be at least ${n}.`,\n tooLarge: (n: number) => `Must be at most ${n}.`,\n },\n ja: {\n submit: \"送信\", selectPlaceholder: \"選択してください\", requiredError: \"この項目は必須です。\",\n invalidEmail: \"有効なメールアドレスを入力してください。\", invalidPhone: \"有効な電話番号を入力してください。\",\n fixErrors: \"入力内容をご確認のうえ、再度送信してください。\", submittedTitle: \"送信完了\",\n submittedBody: \"バックエンドに送信される内容は以下の通りです:\", addFieldsHint: \"ビルドモードでフィールドを追加すると、ここに表示されます。\",\n close: \"閉じる\",\n tooLong: (n: number) => `${n}文字以内で入力してください。`,\n tooSmall: (n: number) => `${n}以上の値を入力してください。`,\n tooLarge: (n: number) => `${n}以下の値を入力してください。`,\n },\n};\n\nexport type StringsShape = typeof DEFAULT_STRINGS.en;\n","export const CHROME = {\n en: {\n contentBlocks: \"Content\", formFields: \"Form Fields\", addingTo: \"Adding to\",\n properties: \"Properties\", selectFieldHint: \"Select a field to edit its properties.\",\n label: \"Label\", hideLabel: \"Hide label\", inputType: \"Input type\", content: \"Content\",\n headingStyle: \"Heading style\", typography: \"Typography\", style: \"Style\", align: \"Align\",\n color: \"Color\", imageUrl: \"Image URL\",\n imageUrlHelper: \"Upload the image on your own end (Drive, CDN, S3...) and paste the link here — this package doesn't host images.\",\n altText: \"Alt text\", linkOptional: \"Link (optional)\", shape: \"Shape\",\n placeholder: \"Placeholder\", maxLength: \"Max length\", noLimit: \"No limit\",\n minValue: \"Min value\", maxValue: \"Max value\", options: \"Options\", addOption: \"Add option\",\n defaultValue: \"Default value\", defaultChecked: \"Default checked\", checked: \"Checked\",\n unchecked: \"Unchecked\", none: \"None\", requiredField: \"Required field\", layout: \"Layout\",\n width: \"Width\", full: \"Full\", labelPosition: \"Label position\", above: \"Above\",\n inline: \"Inline\", verticalAlign: \"Vertical align\", top: \"Top\", middle: \"Middle\",\n bottom: \"Bottom\", icon: \"Icon\", showIcon: \"Show icon next to label\",\n deleteField: \"Delete field\", build: \"Build\", preview: \"Preview\", newForm: \"New\",\n myForms: \"My forms\", save: \"Save\", viewJson: \"View JSON\", saving: \"Saving...\",\n saved: \"Saved\", saveFailed: \"Save failed\", startNewForm: \"Start a new form\",\n openSavedForm: \"Open a saved form\", saveToLibraryTitle: \"Save this form to your library\",\n sectionTitlePlaceholder: (n: number) => `Section ${n} title (optional)`,\n noFieldsInSection: \"No fields in this section yet — pick a field type on the left.\",\n addSection: \"Add section\", moveUp: \"Move up\", moveDown: \"Move down\",\n duplicate: \"Duplicate\", delete: \"Delete\", deleteSection: \"Delete section\",\n required: \"required\", formJson: \"Form JSON\", copy: \"Copy\", copied: \"Copied\",\n nothingSaved: \"Nothing saved yet. Click \\\"Save\\\" in the toolbar to store this form here.\",\n updated: \"Updated\", open: \"Open\", saveForm: \"Save form\", formName: \"Form name\",\n saveToLibrary: \"Save to library\", loadingDraft: \"Loading your draft...\",\n current: \"current\", customColor: \"Custom color\",\n fieldsCount: (n: number) => `${n} field${n === 1 ? \"\" : \"s\"}`,\n formSettings: \"Form settings\", submitLabel: \"Submit button text\",\n submitMode: \"Submit button\", combined: \"Combined (one button)\", perSection: \"Per section\",\n settings: \"Form settings\",\n fieldTypeInput: \"Input\", fieldTypeTextarea: \"Textarea\", fieldTypeSelect: \"Select\",\n fieldTypeRadio: \"Radio group\", fieldTypeCheckboxGroup: \"Checkbox group\",\n fieldTypeCheckbox: \"Checkbox\", fieldTypeToggle: \"Toggle\", fieldTypeParagraph: \"Paragraph\",\n fieldTypeImage: \"Image\",\n subtypeText: \"Text\", subtypeEmail: \"Email\", subtypePhone: \"Phone\", subtypeNumber: \"Number\",\n subtypePassword: \"Password\", subtypeDate: \"Date\", subtypeTime: \"Time\",\n shapeSquare: \"Square\", shapeCircle: \"Circle\", shapeBanner: \"Banner\",\n tagBody: \"Body\", tagCaption: \"Caption\",\n submitSectionTitle: \"Submit\", submitStyle: \"Submit button style\", buttonSize: \"Size\",\n theme: \"Theme\", primaryColor: \"Primary color\", pageBackground: \"Page background\",\n maxWidthPx: \"Max width (px)\", reset: \"Reset\",\n deviceLaptop: \"Laptop\", deviceTablet: \"Tablet\", deviceMobile: \"Mobile\",\n untitledField: \"Untitled field\", optionSeed: (n: number) => `Option ${n}`,\n spacing: \"Spacing\", spacingPagePadding: \"Page padding\", spacingCanvasPadding: \"Canvas padding\",\n spacingSectionGap: \"Section gap\", spacingFieldGap: \"Field gap\", spacingToolbarPadding: \"Toolbar padding\",\n spacingPanelPadding: \"Panel padding\", spacingTicketPadding: \"Field padding\",\n },\n ja: {\n contentBlocks: \"コンテンツ\", formFields: \"フォーム項目\", addingTo: \"追加先\",\n properties: \"プロパティ\", selectFieldHint: \"編集するフィールドを選択してください。\",\n label: \"ラベル\", hideLabel: \"ラベルを非表示\", inputType: \"入力タイプ\", content: \"内容\",\n headingStyle: \"見出しスタイル\", typography: \"文字スタイル\", style: \"スタイル\", align: \"配置\",\n color: \"色\", imageUrl: \"画像URL\",\n imageUrlHelper: \"画像は各自でアップロード(Drive、CDN、S3など)し、そのURLをここに貼り付けてください。本パッケージは画像を保存しません。\",\n altText: \"代替テキスト\", linkOptional: \"リンク(任意)\", shape: \"形状\",\n placeholder: \"プレースホルダー\", maxLength: \"最大文字数\", noLimit: \"制限なし\",\n minValue: \"最小値\", maxValue: \"最大値\", options: \"選択肢\", addOption: \"選択肢を追加\",\n defaultValue: \"初期値\", defaultChecked: \"初期選択\", checked: \"オン\",\n unchecked: \"オフ\", none: \"なし\", requiredField: \"必須項目\", layout: \"レイアウト\",\n width: \"幅\", full: \"全幅\", labelPosition: \"ラベル位置\", above: \"上\",\n inline: \"横並び\", verticalAlign: \"垂直位置\", top: \"上\", middle: \"中央\",\n bottom: \"下\", icon: \"アイコン\", showIcon: \"ラベル横にアイコンを表示\",\n deleteField: \"フィールドを削除\", build: \"作成\", preview: \"プレビュー\", newForm: \"新規\",\n myForms: \"マイフォーム\", save: \"保存\", viewJson: \"JSONを表示\", saving: \"保存中...\",\n saved: \"保存済み\", saveFailed: \"保存に失敗しました\", startNewForm: \"新しいフォームを作成\",\n openSavedForm: \"保存済みフォームを開く\", saveToLibraryTitle: \"このフォームをライブラリに保存\",\n sectionTitlePlaceholder: (n: number) => `セクション${n}のタイトル(任意)`,\n noFieldsInSection: \"このセクションにはまだフィールドがありません。左のパネルからフィールドを選んでください。\",\n addSection: \"セクションを追加\", moveUp: \"上へ移動\", moveDown: \"下へ移動\",\n duplicate: \"複製\", delete: \"削除\", deleteSection: \"セクションを削除\",\n required: \"必須\", formJson: \"フォームJSON\", copy: \"コピー\", copied: \"コピーしました\",\n nothingSaved: \"まだ保存されていません。ツールバーの「保存」をクリックしてください。\",\n updated: \"更新日時\", open: \"開く\", saveForm: \"フォームを保存\", formName: \"フォーム名\",\n saveToLibrary: \"ライブラリに保存\", loadingDraft: \"下書きを読み込んでいます...\",\n current: \"現在編集中\", customColor: \"カスタムカラー\",\n fieldsCount: (n: number) => `${n}件のフィールド`,\n formSettings: \"フォーム設定\", submitLabel: \"送信ボタンのテキスト\",\n submitMode: \"送信ボタンの表示\", combined: \"まとめて1つ\", perSection: \"セクションごと\",\n settings: \"フォーム設定\",\n fieldTypeInput: \"入力\", fieldTypeTextarea: \"テキストエリア\", fieldTypeSelect: \"セレクト\",\n fieldTypeRadio: \"ラジオボタン\", fieldTypeCheckboxGroup: \"チェックボックスグループ\",\n fieldTypeCheckbox: \"チェックボックス\", fieldTypeToggle: \"トグル\", fieldTypeParagraph: \"段落\",\n fieldTypeImage: \"画像\",\n subtypeText: \"テキスト\", subtypeEmail: \"メール\", subtypePhone: \"電話番号\", subtypeNumber: \"数値\",\n subtypePassword: \"パスワード\", subtypeDate: \"日付\", subtypeTime: \"時刻\",\n shapeSquare: \"正方形\", shapeCircle: \"円形\", shapeBanner: \"バナー\",\n tagBody: \"本文\", tagCaption: \"キャプション\",\n submitSectionTitle: \"送信\", submitStyle: \"送信ボタンのスタイル\", buttonSize: \"サイズ\",\n theme: \"テーマ\", primaryColor: \"メインカラー\", pageBackground: \"ページ背景色\",\n maxWidthPx: \"最大幅(px)\", reset: \"リセット\",\n deviceLaptop: \"パソコン\", deviceTablet: \"タブレット\", deviceMobile: \"モバイル\",\n untitledField: \"名称未設定のフィールド\", optionSeed: (n: number) => `選択肢${n}`,\n spacing: \"余白設定\", spacingPagePadding: \"ページ余白\", spacingCanvasPadding: \"キャンバス余白\",\n spacingSectionGap: \"セクション間隔\", spacingFieldGap: \"フィールド間隔\", spacingToolbarPadding: \"ツールバー余白\",\n spacingPanelPadding: \"パネル余白\", spacingTicketPadding: \"フィールド内余白\",\n },\n};\n\nexport type ChromeShape = typeof CHROME.en;\n","import type { LocalizedString } from \"../types\";\n\nexport function bi(en = \"\", ja = \"\"): LocalizedString {\n return { en, ja };\n}\n\nexport function t(val: LocalizedString | string | undefined, lang: string): string {\n if (val && typeof val === \"object\") return val[lang] || val.en || \"\";\n return val || \"\";\n}\n\nexport function withLang(val: LocalizedString | string | undefined, lang: string, value: string): LocalizedString {\n const base = val && typeof val === \"object\" ? val : bi(typeof val === \"string\" ? val : \"\");\n return { ...base, [lang]: value };\n}\n","import type { StorageAdapter } from \"../../types\";\n\nfunction hasLocalStorage(): boolean {\n return typeof window !== \"undefined\" && !!window.localStorage;\n}\n\n/**\n * Default StorageAdapter, backed by window.localStorage. Availability is\n * checked inside each method (not once at module load) so the same module\n * behaves correctly whether it runs during SSR (no window) or later on the\n * client, within the same process.\n */\nexport const localStorageAdapter: StorageAdapter = {\n async get(key) {\n if (!hasLocalStorage()) return null;\n return window.localStorage.getItem(key);\n },\n async set(key, value) {\n if (!hasLocalStorage()) return;\n window.localStorage.setItem(key, value);\n },\n async delete(key) {\n if (!hasLocalStorage()) return;\n window.localStorage.removeItem(key);\n },\n};\n","import { useState } from \"react\";\nimport type { Theme, ThemeOverrides } from \"../types\";\nimport { DEFAULT_THEME } from \"../theme/defaultTheme\";\n\nexport interface UseThemeResult {\n theme: Theme;\n themeOverrides: ThemeOverrides;\n updateThemeColor: (key: keyof Omit<Theme, \"layout\">, value: string) => void;\n updateThemeLayout: (key: keyof Theme[\"layout\"], value: number) => void;\n resetTheme: () => void;\n replaceThemeOverrides: (overrides: ThemeOverrides) => void;\n}\n\nexport function useTheme(themeOverrideProp?: Partial<Theme>): UseThemeResult {\n const baseTheme: Theme = {\n ...DEFAULT_THEME,\n ...(themeOverrideProp || {}),\n layout: { ...DEFAULT_THEME.layout, ...((themeOverrideProp && themeOverrideProp.layout) || {}) },\n };\n const [themeOverrides, setThemeOverrides] = useState<ThemeOverrides>({});\n const theme: Theme = {\n ...baseTheme,\n ...themeOverrides,\n layout: { ...baseTheme.layout, ...(themeOverrides.layout || {}) },\n };\n\n function updateThemeColor(key: keyof Omit<Theme, \"layout\">, value: string) {\n setThemeOverrides((prev) => ({ ...prev, [key]: value }));\n }\n function updateThemeLayout(key: keyof Theme[\"layout\"], value: number) {\n setThemeOverrides((prev) => ({ ...prev, layout: { ...prev.layout, [key]: value } }));\n }\n function resetTheme() {\n setThemeOverrides({});\n }\n function replaceThemeOverrides(overrides: ThemeOverrides) {\n setThemeOverrides(overrides);\n }\n\n return { theme, themeOverrides, updateThemeColor, updateThemeLayout, resetTheme, replaceThemeOverrides };\n}\n","import type { Theme } from \"../types\";\n\nexport const DEFAULT_THEME: Theme = {\n primary: \"#5B5FEF\", primarySoft: \"#EEF0FF\", danger: \"#C4432E\", dangerSoft: \"#FDECE4\",\n ink: \"#1B1E24\", muted: \"#9296A3\", border: \"#E2E4E9\", surface: \"#FFFFFF\",\n canvas: \"#F5F6F8\", pageBackground: \"#FFFFFF\",\n layout: { maxWidth: 640, pagePadding: 28, canvasPadding: 20, sectionGap: 20, fieldGap: 16, toolbarPadding: 10, panelPadding: 14, ticketPadding: 14 },\n};\n","import { useState } from \"react\";\nimport type { ChromeShape } from \"../i18n/chrome\";\nimport type { DocumentFields, FieldPatch, FieldType, FormField, LocalizedString, Section, SubmitStyle } from \"../types\";\nimport { bi, withLang } from \"../lib/bilingual\";\nimport { defaultFieldFor, defaultSection } from \"../lib/fieldDefaults\";\nimport { genSectionId, nextId, resyncIdCounter } from \"../lib/id\";\n\nexport interface UseFormDocumentArgs {\n language: string;\n chrome: ChromeShape;\n}\n\nexport function useFormDocument({ language, chrome }: UseFormDocumentArgs) {\n const [title, setTitle] = useState<LocalizedString>(bi(\"Untitled form\", \"\"));\n const [submitLabel, setSubmitLabelState] = useState<LocalizedString>(bi());\n const [submitMode, setSubmitMode] = useState<\"combined\" | \"perSection\">(\"combined\");\n const [submitStyle, setSubmitStyleState] = useState<SubmitStyle>({ color: \"\", size: \"md\" });\n const [sections, setSections] = useState<Section[]>([defaultSection()]);\n const [activeSectionId, setActiveSectionId] = useState<string | null>(null);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n\n const allFields = sections.flatMap((s) => s.fields);\n const selected = allFields.find((f) => f.id === selectedId) || null;\n const activeSection = sections.find((s) => s.id === activeSectionId) || sections[0] || defaultSection();\n\n function updateTitle(value: string) {\n setTitle((prev) => withLang(prev, language, value));\n }\n function updateSubmitLabel(value: string) {\n setSubmitLabelState((prev) => withLang(prev, language, value));\n }\n function updateSubmitStyle(patch: Partial<SubmitStyle>) {\n setSubmitStyleState((prev) => ({ ...prev, ...patch }));\n }\n\n function addSection() {\n const s = defaultSection();\n setSections((prev) => [...prev, s]);\n setActiveSectionId(s.id);\n }\n function duplicateSection(sectionId: string) {\n const newSectionId = genSectionId();\n setSections((prev) => {\n const idx = prev.findIndex((s) => s.id === sectionId);\n if (idx === -1) return prev;\n const copy: Section = { ...prev[idx], id: newSectionId, fields: prev[idx].fields.map((f) => ({ ...f, id: nextId() })) };\n const next = [...prev];\n next.splice(idx + 1, 0, copy);\n return next;\n });\n setActiveSectionId(newSectionId);\n }\n function deleteSection(sectionId: string) {\n setSections((prev) => {\n if (prev.length <= 1) return prev;\n const next = prev.filter((s) => s.id !== sectionId);\n setActiveSectionId((curr) => (curr === sectionId ? next[0].id : curr));\n return next;\n });\n }\n function moveSection(sectionId: string, dir: 1 | -1) {\n setSections((prev) => {\n const idx = prev.findIndex((s) => s.id === sectionId);\n const swap = idx + dir;\n if (swap < 0 || swap >= prev.length) return prev;\n const next = [...prev];\n [next[idx], next[swap]] = [next[swap], next[idx]];\n return next;\n });\n }\n function updateSectionTitle(sectionId: string, value: string) {\n setSections((prev) => prev.map((s) => (s.id === sectionId ? { ...s, title: withLang(s.title, language, value) } : s)));\n }\n function updateSectionBackground(sectionId: string, color: string) {\n setSections((prev) => prev.map((s) => (s.id === sectionId ? { ...s, background: color } : s)));\n }\n function toggleSectionCollapse(sectionId: string) {\n setSections((prev) => prev.map((s) => (s.id === sectionId ? { ...s, collapsed: !s.collapsed } : s)));\n }\n function updateSectionSubmitStyle(sectionId: string, patch: Partial<SubmitStyle>) {\n setSections((prev) => prev.map((s) => (s.id === sectionId ? { ...s, submitStyle: { ...(s.submitStyle || submitStyle), ...patch } } : s)));\n }\n function clearSectionSubmitStyle(sectionId: string) {\n setSections((prev) => prev.map((s) => (s.id === sectionId ? { ...s, submitStyle: null } : s)));\n }\n\n function addField(type: FieldType) {\n const field = defaultFieldFor(type, language, chrome);\n const targetId = activeSectionId || sections[0]?.id;\n if (!targetId) return;\n setSections((prev) => prev.map((s) => (s.id === targetId ? { ...s, fields: [...s.fields, field] } : s)));\n setSelectedId(field.id);\n }\n function updateField(fieldId: string, patch: FieldPatch) {\n setSections((prev) => prev.map((s) => ({ ...s, fields: s.fields.map((f) => (f.id === fieldId ? ({ ...f, ...patch } as FormField) : f)) })));\n }\n function deleteField(fieldId: string) {\n setSections((prev) => prev.map((s) => ({ ...s, fields: s.fields.filter((f) => f.id !== fieldId) })));\n if (selectedId === fieldId) setSelectedId(null);\n }\n function duplicateField(fieldId: string) {\n const newId = nextId();\n setSections((prev) => prev.map((s) => {\n const idx = s.fields.findIndex((f) => f.id === fieldId);\n if (idx === -1) return s;\n const copy = { ...s.fields[idx], id: newId };\n const fields = [...s.fields];\n fields.splice(idx + 1, 0, copy);\n return { ...s, fields };\n }));\n setSelectedId(newId);\n }\n function moveField(fieldId: string, dir: 1 | -1) {\n setSections((prev) => prev.map((s) => {\n const idx = s.fields.findIndex((f) => f.id === fieldId);\n if (idx === -1) return s;\n const swap = idx + dir;\n if (swap < 0 || swap >= s.fields.length) return s;\n const fields = [...s.fields];\n [fields[idx], fields[swap]] = [fields[swap], fields[idx]];\n return { ...s, fields };\n }));\n }\n function reorderWithinSection(sectionId: string, fromIdx: number | null, toIdx: number | null) {\n if (fromIdx === toIdx || fromIdx == null || toIdx == null) return;\n setSections((prev) => prev.map((s) => {\n if (s.id !== sectionId) return s;\n const fields = [...s.fields];\n const [moved] = fields.splice(fromIdx, 1);\n fields.splice(toIdx, 0, moved);\n return { ...s, fields };\n }));\n }\n function updateOption(fieldId: string, optIdx: number, patch: { label?: LocalizedString; value?: string }) {\n setSections((prev) => prev.map((s) => ({\n ...s,\n fields: s.fields.map((f) => {\n if (f.id !== fieldId || !(\"options\" in f) || !f.options) return f;\n return { ...f, options: f.options.map((o, i) => (i === optIdx ? { ...o, ...patch } : o)) };\n }),\n })));\n }\n function addOption(fieldId: string) {\n setSections((prev) => prev.map((s) => ({\n ...s,\n fields: s.fields.map((f) => {\n if (f.id !== fieldId || !(\"options\" in f) || !f.options) return f;\n const n = f.options.length + 1;\n return { ...f, options: [...f.options, { label: withLang(bi(), language, chrome.optionSeed(n)), value: `option_${n}` }] };\n }),\n })));\n }\n function removeOption(fieldId: string, optIdx: number) {\n setSections((prev) => prev.map((s) => ({\n ...s,\n fields: s.fields.map((f) => (f.id !== fieldId || !(\"options\" in f) || !f.options ? f : { ...f, options: f.options.filter((_, i) => i !== optIdx) })),\n })));\n }\n\n function loadDocument(doc: DocumentFields) {\n resyncIdCounter(doc.sections.flatMap((s) => s.fields));\n setSections(doc.sections);\n setActiveSectionId(doc.sections[0]?.id || null);\n setTitle(doc.title);\n setSubmitLabelState(doc.submitLabel);\n setSubmitMode(doc.submitMode);\n setSubmitStyleState(doc.submitStyle);\n setSelectedId(null);\n }\n\n function resetToBlank() {\n const s = defaultSection();\n setSections([s]);\n setActiveSectionId(s.id);\n setTitle(bi(\"Untitled form\", \"\"));\n setSubmitLabelState(bi());\n setSubmitMode(\"combined\");\n setSubmitStyleState({ color: \"\", size: \"md\" });\n setSelectedId(null);\n }\n\n return {\n title, submitLabel, submitMode, submitStyle, sections, activeSectionId, selectedId,\n allFields, selected, activeSection,\n setActiveSectionId, setSelectedId, setSubmitMode, setTitle,\n updateTitle, updateSubmitLabel, updateSubmitStyle,\n addSection, duplicateSection, deleteSection, moveSection,\n updateSectionTitle, updateSectionBackground, toggleSectionCollapse,\n updateSectionSubmitStyle, clearSectionSubmitStyle,\n addField, updateField, deleteField, duplicateField, moveField, reorderWithinSection,\n updateOption, addOption, removeOption,\n loadDocument, resetToBlank,\n };\n}\n\nexport type UseFormDocumentResult = ReturnType<typeof useFormDocument>;\n","import {\n Type, AlignLeft, ChevronDown, Circle, ListChecks, CheckSquare, ToggleLeft,\n FileText, Image as ImageIcon,\n} from \"lucide-react\";\nimport type { IconKey, IconComponent } from \"./icons\";\n\nexport type FieldType =\n | \"paragraph\" | \"image\" | \"input\" | \"textarea\" | \"select\"\n | \"radio\" | \"checkboxGroup\" | \"checkbox\" | \"toggle\";\n\nexport interface FieldTypeMeta {\n type: FieldType;\n icon: IconComponent;\n isContent?: boolean;\n isImage?: boolean;\n placeholder?: boolean;\n hasSubtype?: boolean;\n options?: boolean;\n multiValue?: boolean;\n boolean?: boolean;\n defaultIcon: IconKey;\n}\n\nexport const FIELD_TYPES: FieldTypeMeta[] = [\n { type: \"paragraph\", icon: FileText, isContent: true, defaultIcon: \"FileText\" },\n { type: \"image\", icon: ImageIcon, isContent: true, isImage: true, defaultIcon: \"Type\" },\n { type: \"input\", icon: Type, placeholder: true, hasSubtype: true, defaultIcon: \"Type\" },\n { type: \"textarea\", icon: AlignLeft, placeholder: true, defaultIcon: \"AlignLeft\" },\n { type: \"select\", icon: ChevronDown, options: true, defaultIcon: \"ChevronDown\" },\n { type: \"radio\", icon: Circle, options: true, defaultIcon: \"Circle\" },\n { type: \"checkboxGroup\", icon: ListChecks, options: true, multiValue: true, defaultIcon: \"ListChecks\" },\n { type: \"checkbox\", icon: CheckSquare, boolean: true, defaultIcon: \"CheckSquare\" },\n { type: \"toggle\", icon: ToggleLeft, boolean: true, defaultIcon: \"ToggleLeft\" },\n];\nexport const TYPE_MAP = Object.fromEntries(FIELD_TYPES.map((f) => [f.type, f])) as Record<FieldType, FieldTypeMeta>;\nexport const CONTENT_TYPES = FIELD_TYPES.filter((f) => f.isContent);\nexport const FORM_TYPES = FIELD_TYPES.filter((f) => !f.isContent);\nexport function getMeta(type: FieldType): FieldTypeMeta {\n return TYPE_MAP[type] || TYPE_MAP.input;\n}\n\nexport const LEGACY_INPUT_TYPES = [\"text\", \"email\", \"phone\", \"number\", \"password\", \"date\"] as const;\nexport const INPUT_SUBTYPES = [\"text\", \"email\", \"phone\", \"number\", \"password\", \"date\", \"time\"] as const;\nexport const IMAGE_SHAPES = [\"square\", \"circle\", \"banner\"] as const;\n\nexport const FIELD_TYPE_CHROME_KEY: Record<FieldType, string> = {\n paragraph: \"fieldTypeParagraph\", image: \"fieldTypeImage\", input: \"fieldTypeInput\",\n textarea: \"fieldTypeTextarea\", select: \"fieldTypeSelect\", radio: \"fieldTypeRadio\",\n checkboxGroup: \"fieldTypeCheckboxGroup\", checkbox: \"fieldTypeCheckbox\", toggle: \"fieldTypeToggle\",\n};\nexport const INPUT_SUBTYPE_CHROME_KEY: Record<string, string> = {\n text: \"subtypeText\", email: \"subtypeEmail\", phone: \"subtypePhone\", number: \"subtypeNumber\",\n password: \"subtypePassword\", date: \"subtypeDate\", time: \"subtypeTime\",\n};\nexport const IMAGE_SHAPE_CHROME_KEY: Record<string, string> = {\n square: \"shapeSquare\", circle: \"shapeCircle\", banner: \"shapeBanner\",\n};\n","import type { FormField } from \"../types\";\n\nexport const genFormId = () => `form_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 7)}`;\nexport const genSectionId = () => `section_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 7)}`;\n\nlet idCounter = 1;\nexport const nextId = () => `field_${idCounter++}`;\n\nexport function resyncIdCounter(fields: FormField[]) {\n let max = 0;\n fields.forEach((f) => {\n const m = /^field_(\\d+)$/.exec(f.id);\n if (m) max = Math.max(max, parseInt(m[1], 10));\n });\n idCounter = Math.max(idCounter, max + 1);\n}\n","import type { ChromeShape } from \"../i18n/chrome\";\nimport type { FieldType, FormField, Section } from \"../types\";\nimport { FIELD_TYPE_CHROME_KEY, getMeta } from \"../constants/fieldTypes\";\nimport { bi, withLang } from \"./bilingual\";\nimport { nextId, genSectionId } from \"./id\";\n\nexport function defaultFieldFor(type: FieldType, language: string, chrome: ChromeShape): FormField {\n const meta = getMeta(type);\n const seedLabel = (chrome as Record<string, unknown>)[FIELD_TYPE_CHROME_KEY[type]] as string | undefined || type;\n const base: Record<string, unknown> = {\n id: nextId(),\n type,\n label: withLang(bi(), language, seedLabel),\n hideLabel: false,\n width: \"1/1\",\n verticalAlign: \"top\",\n labelPosition: \"top\",\n showIcon: false,\n displayIcon: meta.defaultIcon,\n };\n if (!meta.isContent) base.required = false;\n if (meta.hasSubtype) base.inputType = \"text\";\n if (meta.placeholder) base.placeholder = bi();\n if (meta.options) {\n base.options = [\n { label: withLang(bi(), language, chrome.optionSeed(1)), value: \"option_1\" },\n { label: withLang(bi(), language, chrome.optionSeed(2)), value: \"option_2\" },\n ];\n }\n if (meta.isImage) {\n base.src = \"\";\n base.alt = bi();\n base.link = \"\";\n base.shape = \"square\";\n } else if (meta.boolean) {\n base.defaultValue = false;\n } else if (meta.multiValue) {\n base.defaultValue = [];\n } else if (type === \"paragraph\") {\n base.content = bi();\n base.tag = \"p\";\n base.fontSize = \"md\";\n base.fontWeight = \"normal\";\n base.fontStyle = \"normal\";\n base.textAlign = \"left\";\n base.color = \"\";\n } else {\n base.defaultValue = \"\";\n }\n // `base` is built up field-by-field depending on the type's metadata flags,\n // so it can only be soundly typed as FormField once fully assembled.\n return base as unknown as FormField;\n}\n\nexport function defaultSection(titleEn = \"\"): Section {\n return { id: genSectionId(), title: bi(titleEn, \"\"), background: \"\", collapsed: false, submitStyle: null, fields: [] };\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport type { DocumentFields, LocalizedString, SavedFormMeta, StorageAdapter, ThemeOverrides } from \"../types\";\nimport { DRAFT_KEY, INDEX_KEY, formKey } from \"../lib/storage/keys\";\nimport { migrateDocument } from \"../lib/migrate\";\nimport { genFormId } from \"../lib/id\";\nimport { bi, t } from \"../lib/bilingual\";\n\nexport interface UsePersistenceArgs {\n storage: StorageAdapter;\n language: string;\n document: DocumentFields;\n onLoadDocument: (doc: DocumentFields) => void;\n onLoadThemeOverrides: (overrides: ThemeOverrides) => void;\n onTitleChange: (title: LocalizedString) => void;\n onNewForm: () => void;\n ensureActiveSection: () => void;\n}\n\nexport interface SaveAsPrompt {\n open: boolean;\n suggestedName: string;\n}\n\n/**\n * Owns draft autoload + autosave + the saved-forms library, on top of a\n * pluggable StorageAdapter. Both the draft-load effect and the autosave\n * effect live in this single hook because `hasLoadedOnce` (set by the load\n * effect) gates the autosave effect from firing before the real draft has\n * loaded — splitting them would require sharing a ref across hooks.\n */\nexport function usePersistence({\n storage, language, document, onLoadDocument, onLoadThemeOverrides, onTitleChange, onNewForm, ensureActiveSection,\n}: UsePersistenceArgs) {\n const [currentFormId, setCurrentFormId] = useState<string | null>(null);\n const [loadingDraft, setLoadingDraft] = useState(true);\n const [saveState, setSaveState] = useState<\"idle\" | \"saving\" | \"saved\" | \"error\">(\"idle\");\n const [savedForms, setSavedForms] = useState<SavedFormMeta[]>([]);\n const [saveAsPrompt, setSaveAsPrompt] = useState<SaveAsPrompt | null>(null);\n\n const autosaveTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hasLoadedOnce = useRef(false);\n\n async function refreshLibrary() {\n try {\n const raw = await storage.get(INDEX_KEY);\n const list: SavedFormMeta[] = raw ? JSON.parse(raw) : [];\n setSavedForms(list.sort((a, b) => b.updatedAt - a.updatedAt));\n } catch (err) {\n setSavedForms([]);\n }\n }\n\n useEffect(() => {\n (async () => {\n try {\n const raw = await storage.get(DRAFT_KEY);\n if (raw) {\n const parsed = JSON.parse(raw);\n const doc = migrateDocument(parsed);\n if (doc) {\n onLoadDocument(doc);\n onLoadThemeOverrides(doc.themeOverrides);\n }\n if (parsed.currentFormId) setCurrentFormId(parsed.currentFormId);\n } else {\n ensureActiveSection();\n }\n } catch (err) {\n ensureActiveSection();\n } finally {\n setLoadingDraft(false);\n hasLoadedOnce.current = true;\n }\n })();\n refreshLibrary();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!hasLoadedOnce.current) return;\n setSaveState(\"saving\");\n if (autosaveTimer.current) clearTimeout(autosaveTimer.current);\n autosaveTimer.current = setTimeout(async () => {\n try {\n await storage.set(DRAFT_KEY, JSON.stringify({ ...document, currentFormId }));\n setSaveState(\"saved\");\n } catch (err) {\n setSaveState(\"error\");\n }\n }, 600);\n return () => {\n if (autosaveTimer.current) clearTimeout(autosaveTimer.current);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [document.title, document.submitLabel, document.submitMode, document.submitStyle, document.themeOverrides, document.sections, currentFormId]);\n\n async function saveAs(name: string) {\n const id = genFormId();\n const now = Date.now();\n try {\n const newTitle = bi(name, \"\");\n await storage.set(formKey(id), JSON.stringify({ ...document, title: newTitle, id, updatedAt: now }));\n const next = [...savedForms, { id, title: name, updatedAt: now }];\n await storage.set(INDEX_KEY, JSON.stringify(next));\n setSavedForms(next);\n setCurrentFormId(id);\n onTitleChange(newTitle);\n setSaveAsPrompt(null);\n } catch (err) {\n alert(\"Couldn't save the form. Please try again.\");\n }\n }\n\n async function saveExisting() {\n if (!currentFormId) {\n setSaveAsPrompt({ open: true, suggestedName: t(document.title, language) });\n return;\n }\n const now = Date.now();\n try {\n await storage.set(formKey(currentFormId), JSON.stringify({ ...document, id: currentFormId, updatedAt: now }));\n const next = savedForms.map((f) => (f.id === currentFormId ? { ...f, title: t(document.title, \"en\"), updatedAt: now } : f));\n setSavedForms(next);\n await storage.set(INDEX_KEY, JSON.stringify(next));\n } catch (err) {\n alert(\"Couldn't save the form. Please try again.\");\n }\n }\n\n async function loadForm(id: string) {\n try {\n const raw = await storage.get(formKey(id));\n if (!raw) return;\n const doc = migrateDocument(JSON.parse(raw));\n if (!doc) return;\n onLoadDocument(doc);\n onLoadThemeOverrides(doc.themeOverrides);\n setCurrentFormId(id);\n } catch (err) {\n alert(\"Couldn't load that form.\");\n }\n }\n\n async function deleteForm(id: string) {\n try {\n await storage.delete(formKey(id));\n const next = savedForms.filter((f) => f.id !== id);\n setSavedForms(next);\n await storage.set(INDEX_KEY, JSON.stringify(next));\n if (currentFormId === id) setCurrentFormId(null);\n } catch (err) {\n // Non-critical.\n }\n }\n\n function newForm() {\n onNewForm();\n setCurrentFormId(null);\n }\n\n function dismissSaveAsPrompt() {\n setSaveAsPrompt(null);\n }\n\n return {\n loadingDraft, saveState, savedForms, currentFormId,\n saveAs, saveExisting, loadForm, deleteForm, refreshLibrary, newForm,\n saveAsPrompt, dismissSaveAsPrompt,\n };\n}\n\nexport type UsePersistenceResult = ReturnType<typeof usePersistence>;\n","export const DRAFT_KEY = \"form-page-builder:draft\";\nexport const INDEX_KEY = \"form-page-builder:index\";\nexport const formKey = (id: string) => `form-page-builder:saved:${id}`;\n","import type { DocumentFields, FormField, Section } from \"../types\";\nimport { LEGACY_INPUT_TYPES } from \"../constants/fieldTypes\";\nimport { bi } from \"./bilingual\";\nimport { defaultSection } from \"./fieldDefaults\";\nimport { genSectionId } from \"./id\";\n\n/**\n * Raw, untyped JSON as loaded from storage (draft, saved form, or a\n * hand-edited/older export). Its whole purpose is to absorb legacy/loose\n * shapes, so it's deliberately not typed against the current domain model.\n */\ntype RawDocument = Record<string, any>;\n\nexport function migrateField(field: Record<string, any>): FormField {\n let f: Record<string, any> = { ...field };\n if (LEGACY_INPUT_TYPES.includes(f.type)) f = { ...f, type: \"input\", inputType: f.type };\n f.label = typeof f.label === \"string\" ? bi(f.label) : f.label || bi();\n f.hideLabel = !!f.hideLabel;\n if (\"placeholder\" in f) f.placeholder = typeof f.placeholder === \"string\" ? bi(f.placeholder) : f.placeholder || bi();\n if (\"content\" in f) f.content = typeof f.content === \"string\" ? bi(f.content) : f.content || bi();\n if (\"alt\" in f) f.alt = typeof f.alt === \"string\" ? bi(f.alt) : f.alt || bi();\n if (f.options) f.options = f.options.map((o: any) => ({ ...o, label: typeof o.label === \"string\" ? bi(o.label) : o.label || bi() }));\n if (f.type === \"paragraph\") {\n f.tag = f.tag || \"p\";\n f.fontSize = f.fontSize || \"md\";\n f.fontWeight = f.fontWeight || \"normal\";\n f.fontStyle = f.fontStyle || \"normal\";\n f.textAlign = f.textAlign || \"left\";\n f.color = f.color || \"\";\n }\n f.verticalAlign = f.verticalAlign || \"top\";\n return f as FormField;\n}\n\nexport function migrateFields(fields: Record<string, any>[] | undefined): FormField[] {\n return (fields || []).map(migrateField);\n}\n\nexport function migrateDocument(raw: RawDocument | null | undefined): DocumentFields | null {\n if (!raw) return null;\n const title = typeof raw.title === \"string\" ? bi(raw.title) : raw.title || bi();\n const submitLabel = typeof raw.submitLabel === \"string\" ? bi(raw.submitLabel) : raw.submitLabel || bi();\n const submitMode = raw.submitMode === \"perSection\" ? \"perSection\" : \"combined\";\n const submitStyle = raw.submitStyle || { color: \"\", size: \"md\" };\n const themeOverrides = raw.themeOverrides || {};\n if (raw.sections) {\n return {\n title, submitLabel, submitMode, submitStyle, themeOverrides,\n sections: raw.sections.map((s: Record<string, any>): Section => ({\n id: s.id || genSectionId(),\n title: typeof s.title === \"string\" ? bi(s.title) : s.title || bi(),\n background: s.background || \"\",\n collapsed: !!s.collapsed,\n submitStyle: s.submitStyle || null,\n fields: migrateFields(s.fields || []),\n })),\n };\n }\n return { title, submitLabel, submitMode, submitStyle, themeOverrides, sections: [{ ...defaultSection(), fields: migrateFields(raw.fields || []) }] };\n}\n","import { useRef, useState } from \"react\";\nimport type { DragEvent } from \"react\";\n\ntype ReorderFn = (sectionId: string, fromIdx: number | null, toIdx: number | null) => void;\n\nexport function useDragReorder(reorderWithinSection: ReorderFn) {\n const dragRef = useRef<{ sectionId: string | null; index: number | null }>({ sectionId: null, index: null });\n const [dragOverKey, setDragOverKey] = useState<string | null>(null);\n\n function getDropZoneHandlers(sectionId: string, index: number) {\n const dragKey = `${sectionId}:${index}`;\n return {\n onDragOver: (e: DragEvent) => {\n e.preventDefault();\n setDragOverKey(dragKey);\n },\n onDragLeave: () => setDragOverKey(null),\n onDrop: () => {\n if (dragRef.current.sectionId === sectionId) reorderWithinSection(sectionId, dragRef.current.index, index);\n dragRef.current = { sectionId: null, index: null };\n setDragOverKey(null);\n },\n };\n }\n\n function getDragHandleProps(sectionId: string, index: number) {\n return {\n draggable: true,\n onDragStart: () => {\n dragRef.current = { sectionId, index };\n },\n };\n }\n\n return { dragOverKey, getDropZoneHandlers, getDragHandleProps };\n}\n","import { Loader2, AlertCircle, Languages, Pencil, Eye, Settings, FilePlus2, FolderOpen, Save, Code2 } from \"lucide-react\";\nimport type { ChromeShape } from \"../i18n/chrome\";\nimport type { LanguageOption, LocalizedString, Theme } from \"../types\";\nimport { t } from \"../lib/bilingual\";\nimport { styles } from \"../styles/styles\";\nimport { Segmented } from \"./Segmented\";\nimport { LayoutPopover } from \"./LayoutPopover\";\n\nexport interface ToolbarProps {\n title: LocalizedString;\n language: string;\n languages: LanguageOption[];\n mode: \"build\" | \"preview\";\n saveState: \"idle\" | \"saving\" | \"saved\" | \"error\";\n chrome: ChromeShape;\n themeEditable: boolean;\n theme: Theme;\n savedFormsCount: number;\n onTitleChange: (value: string) => void;\n onLanguageChange: (code: string) => void;\n onModeChange: (mode: \"build\" | \"preview\") => void;\n onOpenSettings: () => void;\n onNewForm: () => void;\n onOpenLibrary: () => void;\n onSaveExisting: () => void;\n onOpenJson: () => void;\n updateThemeColor: (key: keyof Omit<Theme, \"layout\">, value: string) => void;\n updateThemeLayout: (key: keyof Theme[\"layout\"], value: number) => void;\n resetTheme: () => void;\n}\n\nexport function Toolbar({\n title, language, languages, mode, saveState, chrome, themeEditable, theme, savedFormsCount,\n onTitleChange, onLanguageChange, onModeChange, onOpenSettings, onNewForm, onOpenLibrary, onSaveExisting, onOpenJson,\n updateThemeColor, updateThemeLayout, resetTheme,\n}: ToolbarProps) {\n return (\n <div style={styles.toolbar}>\n <div style={styles.toolbarLeft}>\n <div style={styles.logoMark}>FB</div>\n <input value={t(title, language)} onChange={(e) => onTitleChange(e.target.value)} style={styles.titleInput} aria-label=\"Form title\" />\n </div>\n <div style={styles.toolbarRight}>\n <span style={styles.saveStatus}>\n {saveState === \"saving\" && (<><Loader2 size={12} className=\"spin\" /> {chrome.saving}</>)}\n {saveState === \"saved\" && chrome.saved}\n {saveState === \"error\" && (<span style={{ color: \"var(--fb-danger)\", display: \"flex\", alignItems: \"center\", gap: 4 }}><AlertCircle size={12} /> {chrome.saveFailed}</span>)}\n </span>\n <div style={styles.toolbarDivider} />\n <Languages size={14} color=\"var(--fb-muted)\" />\n <Segmented options={languages.map((l) => ({ value: l.code, label: l.label }))} value={language} onChange={onLanguageChange} />\n <div style={styles.toolbarDivider} />\n <button style={mode === \"build\" ? styles.tabBtnActive : styles.tabBtn} onClick={() => onModeChange(\"build\")}><Pencil size={14} /> {chrome.build}</button>\n <button style={mode === \"preview\" ? styles.tabBtnActive : styles.tabBtn} onClick={() => onModeChange(\"preview\")}><Eye size={14} /> {chrome.preview}</button>\n <div style={styles.toolbarDivider} />\n {themeEditable && (\n <LayoutPopover chrome={chrome} theme={theme} updateThemeColor={updateThemeColor} updateThemeLayout={updateThemeLayout} resetTheme={resetTheme} />\n )}\n <button style={styles.iconBtn} title={chrome.settings} onClick={onOpenSettings}><Settings size={14} /></button>\n <button style={styles.ghostBtn} onClick={onNewForm} title={chrome.startNewForm}><FilePlus2 size={14} /> {chrome.newForm}</button>\n <button style={styles.ghostBtn} onClick={onOpenLibrary} title={chrome.openSavedForm}>\n <FolderOpen size={14} /> {chrome.myForms}\n {savedFormsCount > 0 && <span style={styles.countBadge}>{savedFormsCount}</span>}\n </button>\n <button style={styles.primaryBtn} onClick={onSaveExisting} title={chrome.saveToLibraryTitle}><Save size={14} /> {chrome.save}</button>\n <button style={styles.ghostBtn} onClick={onOpenJson}><Code2 size={14} /> {chrome.viewJson}</button>\n </div>\n </div>\n );\n}\n","import type { CSSProperties } from \"react\";\n\nexport const styles: Record<string, CSSProperties> = {\n app: { fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, sans-serif\", background: \"var(--fb-canvas)\", borderRadius: 12, overflow: \"hidden\", border: \"1px solid var(--fb-border)\", color: \"var(--fb-ink)\", minHeight: 640, maxHeight: \"100vh\", display: \"flex\", flexDirection: \"column\" },\n toolbar: { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", padding: \"var(--fb-space-toolbar) 16px\", borderBottom: \"1px solid var(--fb-border)\", background: \"var(--fb-surface)\", flexWrap: \"wrap\", gap: 8, position: \"relative\" },\n toolbarLeft: { display: \"flex\", alignItems: \"center\", gap: 10 },\n logoMark: { width: 26, height: 26, borderRadius: 7, background: \"var(--fb-primary)\", color: \"#fff\", fontSize: 11, fontWeight: 700, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontFamily: \"'JetBrains Mono', monospace\", letterSpacing: \"-0.5px\" },\n titleInput: { border: \"none\", outline: \"none\", fontSize: 14, fontWeight: 600, background: \"transparent\", color: \"var(--fb-ink)\", padding: \"4px 6px\", borderRadius: 6, minWidth: 160 },\n toolbarRight: { display: \"flex\", alignItems: \"center\", gap: 6, flexWrap: \"wrap\" },\n toolbarDivider: { width: 1, height: 20, background: \"var(--fb-border)\", margin: \"0 4px\" },\n tabBtn: { display: \"flex\", alignItems: \"center\", gap: 6, padding: \"6px 12px\", borderRadius: 7, border: \"1px solid transparent\", background: \"transparent\", color: \"#6B6E79\", fontSize: 13, fontWeight: 500 },\n tabBtnActive: { display: \"flex\", alignItems: \"center\", gap: 6, padding: \"6px 12px\", borderRadius: 7, border: \"1px solid var(--fb-border)\", background: \"var(--fb-primary-soft)\", color: \"var(--fb-primary)\", fontSize: 13, fontWeight: 600 },\n ghostBtn: { display: \"flex\", alignItems: \"center\", gap: 6, padding: \"6px 12px\", borderRadius: 7, border: \"1px solid var(--fb-border)\", background: \"var(--fb-surface)\", color: \"#4A4D57\", fontSize: 13, fontWeight: 500 },\n primaryBtn: { display: \"flex\", alignItems: \"center\", gap: 6, padding: \"6px 13px\", borderRadius: 7, border: \"1px solid var(--fb-primary)\", background: \"var(--fb-primary)\", color: \"#fff\", fontSize: 13, fontWeight: 600 },\n saveStatus: { display: \"flex\", alignItems: \"center\", gap: 5, fontSize: 12, color: \"var(--fb-muted)\", minWidth: 60 },\n countBadge: { fontSize: 10.5, fontWeight: 700, background: \"var(--fb-primary-soft)\", color: \"var(--fb-primary)\", borderRadius: 9, padding: \"1px 6px\", marginLeft: 2 },\n loadingScreen: { flex: 1, display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", color: \"var(--fb-muted)\" },\n libraryBody: { padding: \"var(--fb-space-panel)\", overflowY: \"auto\", display: \"flex\", flexDirection: \"column\", gap: 4 },\n libraryRow: { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 10, padding: \"10px 8px\", borderRadius: 8, border: \"1px solid #F0F1F4\" },\n libraryRowTitle: { fontSize: 13.5, fontWeight: 600, color: \"var(--fb-ink)\", display: \"flex\", alignItems: \"center\", gap: 8, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" },\n libraryRowMeta: { fontSize: 11.5, color: \"var(--fb-muted)\", marginTop: 2 },\n currentBadge: { fontSize: 10, fontWeight: 700, color: \"var(--fb-primary)\", background: \"var(--fb-primary-soft)\", padding: \"2px 6px\", borderRadius: 5, flexShrink: 0 },\n workArea: { display: \"flex\", flex: 1, minHeight: 0 },\n palette: { width: 200, borderRight: \"1px solid var(--fb-border)\", background: \"var(--fb-surface)\", padding: \"var(--fb-space-panel)\", overflowY: \"auto\" },\n panelHeading: { fontSize: 11, fontWeight: 700, letterSpacing: \"0.06em\", textTransform: \"uppercase\", color: \"var(--fb-muted)\", marginBottom: 10 },\n activeSectionHint: { fontSize: 11.5, color: \"var(--fb-muted)\", marginBottom: 14, lineHeight: 1.4 },\n paletteList: { display: \"flex\", flexDirection: \"column\", gap: 4 },\n paletteItem: { display: \"flex\", alignItems: \"center\", gap: 9, padding: \"8px 9px\", borderRadius: 8, border: \"1px solid transparent\", background: \"transparent\", fontSize: 13, color: \"#33353E\", textAlign: \"left\" },\n canvas: { flex: 1, padding: \"var(--fb-space-canvas)\", overflowY: \"auto\", background: \"var(--fb-canvas)\" },\n sectionBlock: { borderRadius: 12, padding: \"var(--fb-space-panel)\", marginBottom: \"var(--fb-space-section)\", transition: \"border-color 0.12s\" },\n sectionHeader: { display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 12, flexWrap: \"wrap\" },\n chevronBtn: { width: 22, height: 22, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", border: \"none\", background: \"transparent\", color: \"var(--fb-muted)\", flexShrink: 0 },\n colorDot: { width: 10, height: 10, borderRadius: \"50%\", border: \"1px solid var(--fb-border)\", flexShrink: 0 },\n sectionTitleInput: { border: \"none\", outline: \"none\", background: \"transparent\", fontSize: 14, fontWeight: 700, color: \"var(--fb-ink)\", padding: \"2px 0\", minWidth: 120, flex: 1 },\n sectionHeaderActions: { display: \"flex\", alignItems: \"center\", gap: 6, flexWrap: \"wrap\", marginLeft: \"auto\" },\n sectionEmpty: { fontSize: 12.5, color: \"var(--fb-muted)\", padding: \"18px 4px\", textAlign: \"center\", border: \"1px dashed var(--fb-border)\", borderRadius: 8 },\n submitStyleRow: { display: \"flex\", alignItems: \"center\", gap: 8, flexWrap: \"wrap\", background: \"#F7F8FA\", border: \"1px solid #F0F1F4\", borderRadius: 8, padding: \"6px 10px\", marginBottom: 12 },\n miniLabel: { fontSize: 11, fontWeight: 600, color: \"var(--fb-muted)\" },\n resetLinkBtn: { display: \"flex\", alignItems: \"center\", gap: 3, fontSize: 11, color: \"var(--fb-muted)\", background: \"transparent\", border: \"none\", padding: \"2px 4px\" },\n addSectionBtn: { display: \"flex\", alignItems: \"center\", justifyContent: \"center\", gap: 6, width: \"100%\", padding: \"10px\", borderRadius: 10, border: \"1px dashed #C7C9D6\", background: \"transparent\", color: \"var(--fb-primary)\", fontSize: 13, fontWeight: 600 },\n swatchRow: { display: \"flex\", alignItems: \"center\", gap: 5, flexWrap: \"wrap\" },\n swatchBtn: { width: 20, height: 20, borderRadius: \"50%\", border: \"1px solid var(--fb-border)\", padding: 0 },\n swatchBtnActive: { border: \"2px solid var(--fb-primary)\" },\n colorPickerInput: { width: 22, height: 22, padding: 0, border: \"none\", borderRadius: \"50%\", overflow: \"hidden\", background: \"none\", cursor: \"pointer\" },\n fieldList: { display: \"flex\", flexWrap: \"wrap\", gap: \"var(--fb-space-field)\" },\n ticket: { display: \"flex\", alignItems: \"stretch\", background: \"var(--fb-surface)\", border: \"1px solid var(--fb-border)\", borderRadius: 10, position: \"relative\", transition: \"border-color 0.12s, box-shadow 0.12s\" },\n ticketSelected: { borderColor: \"var(--fb-primary)\", boxShadow: \"0 0 0 3px var(--fb-primary-soft)\" },\n ticketDragOver: { borderColor: \"var(--fb-muted)\" },\n ticketIndex: { fontFamily: \"'JetBrains Mono', monospace\", fontSize: 13, fontWeight: 700, color: \"#C7C9D6\", width: 34, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", flexShrink: 0 },\n ticketPerforation: { width: 0, borderLeft: \"1px dashed var(--fb-border)\" },\n ticketBody: { flex: 1, padding: \"10px var(--fb-space-ticket)\", minWidth: 0 },\n ticketTop: { display: \"flex\", alignItems: \"center\", gap: 7, marginBottom: 4 },\n typeBadge: { fontSize: 10.5, fontFamily: \"'JetBrains Mono', monospace\", color: \"var(--fb-muted)\" },\n requiredBadge: { fontSize: 10, fontWeight: 700, color: \"#B4522F\", background: \"var(--fb-danger-soft)\", padding: \"2px 6px\", borderRadius: 5, letterSpacing: \"0.02em\", marginLeft: \"auto\" },\n chipRow: { display: \"flex\", gap: 5, marginBottom: 7, flexWrap: \"wrap\" },\n miniBadge: { fontSize: 10, fontWeight: 600, color: \"var(--fb-primary)\", background: \"var(--fb-primary-soft)\", padding: \"2px 6px\", borderRadius: 5, letterSpacing: \"0.02em\" },\n segmented: { display: \"flex\", gap: 3, background: \"#F0F1F4\", padding: 3, borderRadius: 8, marginBottom: 4 },\n segmentedBtn: { flex: 1, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", gap: 5, padding: \"6px 8px\", borderRadius: 6, border: \"none\", background: \"transparent\", color: \"#6B6E79\", fontSize: 12.5, fontWeight: 500 },\n segmentedBtnActive: { flex: 1, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", gap: 5, padding: \"6px 8px\", borderRadius: 6, border: \"none\", background: \"#fff\", color: \"var(--fb-ink)\", fontSize: 12.5, fontWeight: 600, boxShadow: \"0 1px 2px rgba(0,0,0,0.08)\" },\n iconGrid: { display: \"grid\", gridTemplateColumns: \"repeat(6, 1fr)\", gap: 5, marginTop: 6 },\n iconGridBtn: { width: 30, height: 30, borderRadius: 7, border: \"1px solid var(--fb-border)\", background: \"#fff\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: \"#6B6E79\" },\n iconGridBtnActive: { width: 30, height: 30, borderRadius: 7, border: \"1px solid var(--fb-primary)\", background: \"var(--fb-primary-soft)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: \"var(--fb-primary)\" },\n styleToggleRow: { display: \"flex\", gap: 5, marginBottom: 4 },\n styleToggle: { width: 30, height: 30, borderRadius: 7, border: \"1px solid var(--fb-border)\", background: \"#fff\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: \"var(--fb-muted)\" },\n styleToggleActive: { width: 30, height: 30, borderRadius: 7, border: \"1px solid var(--fb-primary)\", background: \"var(--fb-primary-soft)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: \"var(--fb-primary)\" },\n previewInput: { border: \"1px solid #E9EAEE\", borderRadius: 7, padding: \"7px 10px\", fontSize: 13, color: \"var(--fb-muted)\", background: \"#FBFBFD\", display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" },\n previewRadio: { display: \"flex\", alignItems: \"center\", gap: 6, fontSize: 13, color: \"#4A4D57\" },\n ticketActions: { display: \"flex\", flexDirection: \"column\", gap: 3, padding: 8, borderLeft: \"1px solid #F0F1F4\" },\n iconBtn: { width: 24, height: 24, borderRadius: 6, border: \"1px solid #E9EAEE\", background: \"#fff\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: \"#6B6E79\" },\n iconBtnDanger: { color: \"var(--fb-danger)\" },\n inspector: { width: 270, borderLeft: \"1px solid var(--fb-border)\", background: \"var(--fb-surface)\", padding: \"var(--fb-space-panel)\", overflowY: \"auto\" },\n inspectorEmpty: { fontSize: 13, color: \"var(--fb-muted)\", lineHeight: 1.5, marginTop: 6 },\n inspectorBody: { display: \"flex\", flexDirection: \"column\", gap: 4 },\n helperText: { fontSize: 11, color: \"var(--fb-muted)\", lineHeight: 1.4, margin: \"2px 0 4px\" },\n propLabel: { fontSize: 11.5, fontWeight: 600, color: \"#6B6E79\", marginTop: 12, marginBottom: 5 },\n propInput: { border: \"1px solid var(--fb-border)\", borderRadius: 7, padding: \"7px 9px\", fontSize: 13, color: \"var(--fb-ink)\", outline: \"none\", width: \"100%\", boxSizing: \"border-box\" },\n optionList: { display: \"flex\", flexDirection: \"column\", gap: 6 },\n optionRow: { display: \"flex\", gap: 6, alignItems: \"center\" },\n optionInput: { flex: 1, border: \"1px solid var(--fb-border)\", borderRadius: 6, padding: \"6px 8px\", fontSize: 12.5, outline: \"none\", minWidth: 0, boxSizing: \"border-box\" },\n addOptionBtn: { display: \"flex\", alignItems: \"center\", gap: 5, fontSize: 12.5, color: \"var(--fb-primary)\", background: \"transparent\", border: \"1px dashed #C7C9D6\", borderRadius: 7, padding: \"6px 8px\", justifyContent: \"center\", marginTop: 2 },\n toggleRow: { display: \"flex\", alignItems: \"center\", gap: 8, background: \"transparent\", border: \"none\", padding: \"8px 0\" },\n toggleTrack: { width: 30, height: 17, borderRadius: 20, position: \"relative\", transition: \"background 0.15s\", display: \"inline-block\" },\n toggleThumb: { position: \"absolute\", top: 2, left: 2, width: 13, height: 13, borderRadius: \"50%\", background: \"#fff\", transition: \"transform 0.15s\", boxShadow: \"0 1px 2px rgba(0,0,0,0.2)\" },\n inspectorDivider: { height: 1, background: \"var(--fb-border)\", margin: \"14px 0 10px\" },\n deleteFieldBtn: { display: \"flex\", alignItems: \"center\", gap: 6, fontSize: 12.5, color: \"var(--fb-danger)\", background: \"var(--fb-danger-soft)\", border: \"none\", borderRadius: 7, padding: \"8px 10px\", justifyContent: \"center\" },\n modalOverlay: { position: \"fixed\", inset: 0, background: \"rgba(20,22,28,0.45)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 50 },\n modal: { background: \"#fff\", borderRadius: 12, width: 520, maxHeight: \"70vh\", display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", boxShadow: \"0 20px 60px rgba(0,0,0,0.25)\" },\n modalHeader: { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", padding: \"12px 16px\", borderBottom: \"1px solid var(--fb-border)\" },\n jsonPre: { margin: 0, padding: 16, fontSize: 12, lineHeight: 1.6, overflow: \"auto\", background: \"#14171C\", color: \"#D6D8E0\", fontFamily: \"'JetBrains Mono', monospace\" },\n previewWrap: { flex: 1, display: \"flex\", justifyContent: \"center\", padding: \"var(--fb-space-page) 20px\", overflowY: \"auto\", background: \"var(--fb-canvas)\" },\n previewToolbar: { width: \"100%\", display: \"flex\", gap: 10, marginBottom: 16, justifyContent: \"center\" },\n previewCard: { width: \"100%\", maxWidth: 480, background: \"var(--fb-page-bg)\", border: \"1px solid var(--fb-border)\", borderRadius: 12, padding: \"var(--fb-space-page)\" },\n previewTitle: { fontSize: 19, fontWeight: 700, margin: \"0 0 20px\" },\n previewLabel: { display: \"block\", fontSize: 13, fontWeight: 600, color: \"#33353E\", marginBottom: 6 },\n previewGrid: { display: \"flex\", flexWrap: \"wrap\", gap: \"var(--fb-space-field)\" },\n sectionRuntimeTitle: { fontSize: 15, fontWeight: 700, margin: \"0 0 12px\", color: \"var(--fb-ink)\" },\n imagePlaceholder: { display: \"flex\", alignItems: \"center\", justifyContent: \"center\", border: \"1px dashed var(--fb-border)\" },\n fieldError: { display: \"flex\", alignItems: \"center\", gap: 5, fontSize: 12, color: \"var(--fb-danger)\", marginTop: 5 },\n formErrorNote: { display: \"flex\", alignItems: \"center\", gap: 6, fontSize: 12.5, color: \"var(--fb-danger)\", marginTop: 10, justifyContent: \"center\" },\n submittedList: { display: \"flex\", flexDirection: \"column\", gap: 8, marginTop: 4 },\n submittedRow: { display: \"flex\", justifyContent: \"space-between\", gap: 12, fontSize: 13, padding: \"6px 0\", borderBottom: \"1px solid var(--fb-border)\" },\n submittedLabel: { color: \"var(--fb-muted)\", flexShrink: 0 },\n submittedValue: { color: \"var(--fb-ink)\", fontWeight: 600, textAlign: \"right\" },\n realInput: { width: \"100%\", border: \"1px solid var(--fb-border)\", borderRadius: 8, padding: \"9px 11px\", fontSize: 13.5, outline: \"none\", color: \"var(--fb-ink)\", boxSizing: \"border-box\" },\n realInputError: { borderColor: \"var(--fb-danger)\" },\n submitBtn: { marginTop: 8, color: \"#fff\", border: \"none\", borderRadius: 8, fontWeight: 600, width: \"100%\" },\n layoutPanel: { position: \"absolute\", top: \"calc(100% + 6px)\", right: 0, width: 260, background: \"#fff\", border: \"1px solid var(--fb-border)\", borderRadius: 10, boxShadow: \"0 12px 32px rgba(0,0,0,0.18)\", padding: 14, zIndex: 60, maxHeight: \"70vh\", overflowY: \"auto\" },\n layoutPanelHeader: { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 4 },\n spacingRow: { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 8, padding: \"4px 0\" },\n spacingLabel: { fontSize: 12, color: \"#4A4D57\" },\n spacingInput: { width: 60, border: \"1px solid var(--fb-border)\", borderRadius: 6, padding: \"4px 6px\", fontSize: 12, textAlign: \"right\", outline: \"none\" },\n};\n","import type { ReactNode } from \"react\";\nimport type { IconComponent } from \"../constants/icons\";\nimport { styles } from \"../styles/styles\";\n\nexport interface SegmentedOption<T extends string = string> {\n value: T;\n label: ReactNode;\n icon?: IconComponent;\n}\n\nexport interface SegmentedProps<T extends string = string> {\n options: SegmentedOption<T>[];\n value: T;\n onChange: (value: T) => void;\n}\n\nexport function Segmented<T extends string = string>({ options, value, onChange }: SegmentedProps<T>) {\n return (\n <div style={styles.segmented}>\n {options.map((opt) => {\n const Icon = opt.icon;\n const active = value === opt.value;\n return (\n <button key={opt.value} type=\"button\" style={active ? styles.segmentedBtnActive : styles.segmentedBtn} onClick={() => onChange(opt.value)}>\n {Icon && <Icon size={13} />}{opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Ruler, RotateCcw } from \"lucide-react\";\nimport type { ChromeShape } from \"../i18n/chrome\";\nimport type { Theme } from \"../types\";\nimport { BUTTON_COLOR_SWATCHES, SECTION_BG_SWATCHES } from \"../constants/colors\";\nimport { SPACING_FIELDS } from \"../constants/layout\";\nimport { DEFAULT_THEME } from \"../theme/defaultTheme\";\nimport { styles } from \"../styles/styles\";\n\nexport interface LayoutPopoverProps {\n chrome: ChromeShape;\n theme: Theme;\n updateThemeColor: (key: keyof Omit<Theme, \"layout\">, value: string) => void;\n updateThemeLayout: (key: keyof Theme[\"layout\"], value: number) => void;\n resetTheme: () => void;\n}\n\nexport function LayoutPopover({ chrome, theme, updateThemeColor, updateThemeLayout, resetTheme }: LayoutPopoverProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <div style={{ position: \"relative\" }}>\n <button style={styles.iconBtn} title={chrome.spacing} onClick={() => setOpen((v) => !v)}><Ruler size={14} /></button>\n {open && (\n <div style={styles.layoutPanel}>\n <div style={styles.layoutPanelHeader}>\n <span style={{ fontWeight: 600, fontSize: 13 }}>{chrome.theme} / {chrome.spacing}</span>\n <button type=\"button\" style={styles.resetLinkBtn} onClick={resetTheme}><RotateCcw size={11} /> {chrome.reset}</button>\n </div>\n <label style={styles.propLabel}>{chrome.primaryColor}</label>\n <div style={styles.swatchRow}>\n {BUTTON_COLOR_SWATCHES.slice(1).map((c) => (<button key={c} type=\"button\" title={c} style={{ ...styles.swatchBtn, background: c, ...(theme.primary === c ? styles.swatchBtnActive : {}) }} onClick={() => updateThemeColor(\"primary\", c)} />))}\n <input type=\"color\" value={theme.primary} onChange={(e) => updateThemeColor(\"primary\", e.target.value)} style={styles.colorPickerInput} />\n </div>\n <label style={styles.propLabel}>{chrome.pageBackground}</label>\n <div style={styles.swatchRow}>\n {SECTION_BG_SWATCHES.filter(Boolean).map((c) => (<button key={c} type=\"button\" title={c} style={{ ...styles.swatchBtn, background: c, ...(theme.pageBackground === c ? styles.swatchBtnActive : {}) }} onClick={() => updateThemeColor(\"pageBackground\", c)} />))}\n <input type=\"color\" value={theme.pageBackground} onChange={(e) => updateThemeColor(\"pageBackground\", e.target.value)} style={styles.colorPickerInput} />\n </div>\n <label style={styles.propLabel}>{chrome.maxWidthPx}</label>\n <input type=\"number\" style={styles.propInput} value={theme.layout.maxWidth} onChange={(e) => updateThemeLayout(\"maxWidth\", Number(e.target.value) || DEFAULT_THEME.layout.maxWidth)} />\n <div style={styles.inspectorDivider} />\n <div style={styles.panelHeading}>{chrome.spacing}</div>\n {SPACING_FIELDS.map(({ key, labelKey }) => (\n <div key={key} style={styles.spacingRow}>\n <span style={styles.spacingLabel}>{chrome[labelKey as keyof ChromeShape] as string}</span>\n <input type=\"number\" style={styles.spacingInput} value={theme.layout[key as keyof Theme[\"layout\"]]} onChange={(e) => updateThemeLayout(key as keyof Theme[\"layout\"], Number(e.target.value) || 0)} />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","export const COLOR_SWATCHES = [\"\", \"#1B1E24\", \"#5B5FEF\", \"#C4432E\", \"#0EA5A4\", \"#D97706\"];\nexport const SECTION_BG_SWATCHES = [\"\", \"#FFFFFF\", \"#F5F6F8\", \"#EEF0FF\", \"#FDF4E7\", \"#E9F7EF\", \"#FDECEC\"];\nexport const BUTTON_COLOR_SWATCHES = [\"\", \"#5B5FEF\", \"#0EA5A4\", \"#D97706\", \"#C4432E\", \"#1B1E24\"];\n","import { Monitor, Tablet, Smartphone } from \"lucide-react\";\nimport type { WidthOption } from \"../types\";\nimport type { ChromeShape } from \"../i18n/chrome\";\nimport { DEFAULT_THEME } from \"../theme/defaultTheme\";\n\nexport const WIDTH_OPTIONS: { value: WidthOption; label?: string; labelKey?: string }[] = [\n { value: \"1/3\", label: \"1/3\" }, { value: \"1/2\", label: \"1/2\" }, { value: \"1/1\", labelKey: \"full\" },\n];\nexport const WIDTH_PERCENT: Record<WidthOption, string> = { \"1/3\": \"33.3333%\", \"1/2\": \"50%\", \"1/1\": \"100%\" };\nexport const ALIGN_MAP = { top: \"flex-start\", middle: \"center\", bottom: \"flex-end\" } as const;\n\nexport function effectiveWidth(width: WidthOption | undefined, device: string): WidthOption {\n if (device === \"mobile\") return \"1/1\";\n if (device === \"tablet\" && width === \"1/3\") return \"1/2\";\n return width || \"1/1\";\n}\n\nexport const SPACING_FIELDS = [\n { key: \"pagePadding\", labelKey: \"spacingPagePadding\" },\n { key: \"canvasPadding\", labelKey: \"spacingCanvasPadding\" },\n { key: \"sectionGap\", labelKey: \"spacingSectionGap\" },\n { key: \"fieldGap\", labelKey: \"spacingFieldGap\" },\n { key: \"toolbarPadding\", labelKey: \"spacingToolbarPadding\" },\n { key: \"panelPadding\", labelKey: \"spacingPanelPadding\" },\n { key: \"ticketPadding\", labelKey: \"spacingTicketPadding\" },\n] as const;\n\nexport interface DeviceOption {\n value: \"laptop\" | \"tablet\" | \"mobile\";\n label: string;\n icon: typeof Monitor;\n maxWidth: number;\n}\n\nexport function buildDeviceOptions(baseMaxWidth: number, chrome: ChromeShape): DeviceOption[] {\n const mw = Number(baseMaxWidth) > 0 ? baseMaxWidth : DEFAULT_THEME.layout.maxWidth;\n return [\n { value: \"laptop\", label: chrome.deviceLaptop, icon: Monitor, maxWidth: mw },\n { value: \"tablet\", label: chrome.deviceTablet, icon: Tablet, maxWidth: Math.min(mw, 480) },\n { value: \"mobile\", label: chrome.deviceMobile, icon: Smartphone, maxWidth: Math.min(mw, 340) },\n ];\n}\n","import { Plus } from \"lucide-react\";\nimport type { ChromeShape } from \"../i18n/chrome\";\nimport type { FieldType } from \"../types\";\nimport { CONTENT_TYPES, FORM_TYPES, FIELD_TYPE_CHROME_KEY } from \"../constants/fieldTypes\";\nimport { styles } from \"../styles/styles\";\n\nexport interface PaletteProps {\n activeSectionLabel: string;\n chrome: ChromeShape;\n onAddField: (type: FieldType) => void;\n}\n\nexport function Palette({ activeSectionLabel, chrome, onAddField }: PaletteProps) {\n return (\n <div style={styles.palette}>\n <div style={styles.activeSectionHint}>\n {chrome.addingTo} <strong>{activeSectionLabel}</strong>\n </div>\n <div style={styles.panelHeading}>{chrome.contentBlocks}</div>\n <div style={styles.paletteList}>\n {CONTENT_TYPES.map((f) => {\n const Icon = f.icon;\n return (<button key={f.type} style={styles.paletteItem} onClick={() => onAddField(f.type)}><Icon size={16} color=\"var(--fb-primary)\" /><span>{chrome[FIELD_TYPE_CHROME_KEY[f.type] as keyof ChromeShape] as string}</span><Plus size={13} color=\"#A6A8B3\" style={{ marginLeft: \"auto\" }} /></button>);\n })}\n </div>\n <div style={{ ...styles.panelHeading, marginTop: 16 }}>{chrome.formFields}</div>\n <div style={styles.paletteList}>\n {FORM_TYPES.map((f) => {\n const Icon = f.icon;\n return (<button key={f.type} style={styles.paletteItem} onClick={() => onAddField(f.type)}><Icon size={16} color=\"var(--fb-primary)\" /><span>{chrome[FIELD_TYPE_CHROME_KEY[f.type] as keyof ChromeShape] as string}</span><Plus size={13} color=\"#A6A8B3\" style={{ marginLeft: \"auto\" }} /></button>);\n })}\n </div>\n </div>\n );\n}\n","import { Layers } from \"lucide-react\";\nimport type { ChromeShape } from \"../i18n/chrome\";\nimport type { StringsShape } from \"../i18n/strings\";\nimport type { FieldPatch, Section, SubmitStyle } from \"../types\";\nimport { styles } from \"../styles/styles\";\nimport { SectionCard } from \"./SectionCard\";\n\nexport interface CanvasProps {\n sections: Section[];\n activeSectionId: string | null;\n submitMode: \"combined\" | \"perSection\";\n submitStyle: SubmitStyle;\n selectedId: string | null;\n dragOverKey: string | null;\n chrome: ChromeShape;\n strings: StringsShape;\n language: string;\n onActivateSection: (sectionId: string) => void;\n onToggleSectionCollapse: (sectionId: string) => void;\n onUpdateSectionTitle: (sectionId: string, value: string) => void;\n onUpdateSectionBackground: (sectionId: string, color: string) => void;\n onDuplicateSection: (sectionId: string) => void;\n onMoveSection: (sectionId: string, dir: 1 | -1) => void;\n onDeleteSection: (sectionId: string) => void;\n onUpdateSectionSubmitStyle: (sectionId: string, patch: Partial<SubmitStyle>) => void;\n onClearSectionSubmitStyle: (sectionId: string) => void;\n onAddSection: () => void;\n onSelectField: (sectionId: string, fieldId: string) => void;\n onFieldChange: (fieldId: string, patch: FieldPatch) => void;\n onMoveField: (fieldId: string, dir: 1 | -1) => void;\n onDuplicateField: (fieldId: string) => void;\n onDeleteField: (fieldId: string) => void;\n getDropZoneHandlers: (sectionId: string, idx: number) => { onDragOver: (e: any) => void; onDragLeave: () => void; onDrop: () => void };\n getDragHandleProps: (sectionId: string, idx: number) => { draggable: boolean; onDragStart: () => void };\n}\n\nexport function Canvas({\n sections, activeSectionId, submitMode, submitStyle, selectedId, dragOverKey, chrome, strings, language,\n onActivateSection, onToggleSectionCollapse, onUpdateSectionTitle, onUpdateSectionBackground,\n onDuplicateSection, onMoveSection, onDeleteSection, onUpdateSectionSubmitStyle, onClearSectionSubmitStyle,\n onAddSection, onSelectField, onFieldChange, onMoveField, onDuplicateField, onDeleteField,\n getDropZoneHandlers, getDragHandleProps,\n}: CanvasProps) {\n return (\n <div style={styles.canvas}>\n {sections.map((section, sIdx) => (\n <SectionCard\n key={section.id}\n section={section}\n sIdx={sIdx}\n sectionsLength={sections.length}\n isActive={activeSectionId === section.id}\n submitMode={submitMode}\n submitStyle={submitStyle}\n selectedId={selectedId}\n dragOverKey={dragOverKey}\n chrome={chrome}\n strings={strings}\n language={language}\n onActivate={() => onActivateSection(section.id)}\n onToggleCollapse={() => onToggleSectionCollapse(section.id)}\n onUpdateTitle={(value) => onUpdateSectionTitle(section.id, value)}\n onUpdateBackground={(color) => onUpdateSectionBackground(section.id, color)}\n onDuplicateSection={() => onDuplicateSection(section.id)}\n onMoveSection={(dir) => onMoveSection(section.id, dir)}\n onDeleteSection={() => onDeleteSection(section.id)}\n onUpdateSectionSubmitStyle={(patch) => onUpdateSectionSubmitStyle(section.id, patch)}\n onClearSectionSubmitStyle={() => onClearSectionSubmitStyle(section.id)}\n onSelectField={(fieldId) => onSelectField(section.id, fieldId)}\n onFieldChange={onFieldChange}\n onMoveField={onMoveField}\n onDuplicateField={onDuplicateField}\n onDeleteField={onDeleteField}\n getDropZoneHandlers={getDropZoneHandlers}\n getDragHandleProps={getDragHandleProps}\n />\n ))}\n <button style={styles.addSectionBtn} onClick={onAddSection}><Layers size={14} /> {chrome.addSection}</button>\n </div>\n );\n}\n","import { ChevronDown, ChevronRight, Copy, ArrowUp, ArrowDown, Trash2, RotateCcw } from \"lucide-react\";\nimport type { ChromeShape } from \"../i18n/chrome\";\nimport type { StringsShape } from \"../i18n/strings\";\nimport type { FieldPatch, Section, SubmitStyle } from \"../types\";\nimport { SECTION_BG_SWATCHES, BUTTON_COLOR_SWATCHES } from \"../constants/colors\";\nimport { SUBMIT_SIZE_OPTIONS } from \"../constants/submitStyle\";\nimport { styles } from \"../styles/styles\";\nimport { t } from \"../lib/bilingual\";\nimport { Segmented } from \"./Segmented\";\nimport { FieldTicket } from \"./FieldTicket\";\n\nexport interface SectionCardProps {\n section: Section;\n sIdx: number;\n sectionsLength: number;\n isActive: boolean;\n submitMode: \"combined\" | \"perSection\";\n submitStyle: SubmitStyle;\n selectedId: string | null;\n dragOverKey: string | null;\n chrome: ChromeShape;\n strings: StringsShape;\n language: string;\n onActivate: () => void;\n onToggleCollapse: () => void;\n onUpdateTitle: (value: string) => void;\n onUpdateBackground: (color: string) => void;\n onDuplicateSection: () => void;\n onMoveSection: (dir: 1 | -1) => void;\n onDeleteSection: () => void;\n onUpdateSectionSubmitStyle: (patch: Partial<SubmitStyle>) => void;\n onClearSectionSubmitStyle: () => void;\n onSelectField: (fieldId: string) => void;\n onFieldChange: (fieldId: string, patch: FieldPatch) => void;\n onMoveField: (fieldId: string, dir: 1 | -1) => void;\n onDuplicateField: (fieldId: string) => void;\n onDeleteField: (fieldId: string) => void;\n getDropZoneHandlers: (sectionId: string, idx: number) => { onDragOver: (e: any) => void; onDragLeave: () => void; onDrop: () => void };\n getDragHandleProps: (sectionId: string, idx: number) => { draggable: boolean; onDragStart: () => void };\n}\n\nexport function SectionCard({\n section, sIdx, sectionsLength, isActive, submitMode, submitStyle, selectedId, dragOverKey, chrome, strings, language,\n onActivate, onToggleCollapse, onUpdateTitle, onUpdateBackground, onDuplicateSection, onMoveSection, onDeleteSection,\n onUpdateSectionSubmitStyle, onClearSectionSubmitStyle,\n onSelectField, onFieldChange, onMoveField, onDuplicateField, onDeleteField,\n getDropZoneHandlers, getDragHandleProps,\n}: SectionCardProps) {\n return (\n <div\n style={{ ...styles.sectionBlock, background: section.background || \"transparent\", border: isActive ? \"1px solid var(--fb-primary)\" : \"1px dashed var(--fb-border)\" }}\n onClick={onActivate}\n >\n <div style={styles.sectionHeader}>\n <button style={styles.chevronBtn} onClick={(e) => { e.stopPropagation(); onToggleCollapse(); }}>\n {section.collapsed ? <ChevronRight size={15} /> : <ChevronDown size={15} />}\n </button>\n <span style={{ ...styles.colorDot, background: section.background || \"var(--fb-canvas)\" }} />\n <input\n style={styles.sectionTitleInput}\n placeholder={chrome.sectionTitlePlaceholder(sIdx + 1)}\n value={t(section.title, language)}\n onChange={(e) => onUpdateTitle(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n />\n {section.collapsed && <span style={styles.miniBadge}>{chrome.fieldsCount(section.fields.length)}</span>}\n <div style={styles.sectionHeaderActions} onClick={(e) => e.stopPropagation()}>\n {!section.collapsed && (\n <div style={styles.swatchRow}>\n {SECTION_BG_SWATCHES.map((c) => (\n <button key={c || \"none\"} type=\"button\" title={c || chrome.none} style={{ ...styles.swatchBtn, background: c || \"var(--fb-canvas)\", ...(section.background === c ? styles.swatchBtnActive : {}) }} onClick={() => onUpdateBackground(c)} />\n ))}\n <input type=\"color\" title={chrome.customColor} value={/^#/.test(section.background) ? section.background : \"#ffffff\"} onChange={(e) => onUpdateBackground(e.target.value)} style={styles.colorPickerInput} />\n </div>\n )}\n <button style={styles.iconBtn} title={chrome.duplicate} onClick={onDuplicateSection}><Copy size={13} /></button>\n <button style={styles.iconBtn} title={chrome.moveUp} disabled={sIdx === 0} onClick={() => onMoveSection(-1)}><ArrowUp size={13} /></button>\n <button style={styles.iconBtn} title={chrome.moveDown} disabled={sIdx === sectionsLength - 1} onClick={() => onMoveSection(1)}><ArrowDown size={13} /></button>\n <button style={{ ...styles.iconBtn, ...styles.iconBtnDanger }} title={chrome.deleteSection} disabled={sectionsLength <= 1} onClick={onDeleteSection}><Trash2 size={13} /></button>\n </div>\n </div>\n\n {!section.collapsed && submitMode === \"perSection\" && (\n <div style={styles.submitStyleRow} onClick={(e) => e.stopPropagation()}>\n <span style={styles.miniLabel}>{chrome.submitStyle}</span>\n <div style={styles.swatchRow}>\n {BUTTON_COLOR_SWATCHES.map((c) => (\n <button key={c || \"inherit\"} type=\"button\" title={c || chrome.none} style={{ ...styles.swatchBtn, background: c || \"var(--fb-primary)\", ...((section.submitStyle?.color || \"\") === c ? styles.swatchBtnActive : {}) }} onClick={() => onUpdateSectionSubmitStyle({ color: c })} />\n ))}\n </div>\n <Segmented options={SUBMIT_SIZE_OPTIONS} value={section.submitStyle?.size || submitStyle.size} onChange={(v) => onUpdateSectionSubmitStyle({ size: v })} />\n {section.submitStyle && (<button type=\"button\" style={styles.resetLinkBtn} onClick={onClearSectionSubmitStyle}><RotateCcw size={11} /> {chrome.reset}</button>)}\n </div>\n )}\n\n {!section.collapsed && (\n section.fields.length === 0 ? (\n <div style={styles.sectionEmpty}>{chrome.noFieldsInSection}</div>\n ) : (\n <div style={styles.fieldList}>\n {section.fields.map((field, idx) => (\n <FieldTicket\n key={field.id}\n field={field}\n idx={idx}\n sectionId={section.id}\n isSelected={field.id === selectedId}\n isDragOver={dragOverKey === `${section.id}:${idx}`}\n chrome={chrome}\n strings={strings}\n language={language}\n onSelect={() => onSelectField(field.id)}\n onFieldChange={onFieldChange}\n onMoveField={onMoveField}\n onDuplicateField={onDuplicateField}\n onDeleteField={onDeleteField}\n dropZoneHandlers={getDropZoneHandlers(section.id, idx)}\n dragHandleProps={getDragHandleProps(section.id, idx)}\n />\n ))}\n </div>\n )\n )}\n </div>\n );\n}\n","import type { SubmitStyle } from \"../types\";\n\nexport const SUBMIT_SIZE_OPTIONS: { value: SubmitStyle[\"size\"]; label: string }[] = [\n { value: \"sm\", label: \"S\" }, { value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" },\n];\nexport const SUBMIT_SIZE_STYLES: Record<SubmitStyle[\"size\"], { padding: string; fontSize: number }> = {\n sm: { padding: \"7px 12px\", fontSize: 12.5 }, md: { padding: \"10px 16px\", fontSize: 13.5 }, lg: { padding: \"13px 22px\", fontSize: 15 },\n};\n\nexport function resolveSubmitStyle(style: Partial<SubmitStyle> | null | undefined) {\n const sizeStyle = SUBMIT_SIZE_STYLES[style?.size || \"md\"] || SUBMIT_SIZE_STYLES.md;\n return { ...sizeStyle, background: style?.color || \"var(--fb-primary)\" };\n}\n","import { ArrowUp, ArrowDown, Copy, Trash2, GripVertical } from \"lucide-react\";\nimport type { ChromeShape } from \"../i18n/chrome\";\nimport type { StringsShape } from \"../i18n/strings\";\nimport type { FieldPatch, FormField } from \"../types\";\nimport { getMeta, FIELD_TYPE_CHROME_KEY, INPUT_SUBTYPE_CHROME_KEY } from \"../constants/fieldTypes\";\nimport { WIDTH_PERCENT, ALIGN_MAP } from \"../constants/layout\";\nimport { styles } from \"../styles/styles\";\nimport { FieldBlock } from \"./fields/FieldBlock\";\n\nexport interface FieldTicketProps {\n field: FormField;\n idx: number;\n sectionId: string;\n isSelected: boolean;\n isDragOver: boolean;\n chrome: ChromeShape;\n strings: StringsShape;\n language: string;\n onSelect: () => void;\n onFieldChange: (fieldId: string, patch: FieldPatch) => void;\n onMoveField: (fieldId: string, dir: 1 | -1) => void;\n onDuplicateField: (fieldId: string) => void;\n onDeleteField: (fieldId: string) => void;\n dropZoneHandlers: { onDragOver: (e: any) => void; onDragLeave: () => void; onDrop: () => void };\n dragHandleProps: { draggable: boolean; onDragStart: () => void };\n}\n\nexport function FieldTicket({\n field, idx, isSelected, isDragOver, chrome, strings, language,\n onSelect, onFieldChange, onMoveField, onDuplicateField, onDeleteField,\n dropZoneHandlers, dragHandleProps,\n}: FieldTicketProps) {\n const meta = getMeta(field.type);\n const Icon = meta.icon;\n const widthPct = WIDTH_PERCENT[field.width || \"1/1\"];\n\n return (\n <div\n {...dropZoneHandlers}\n onClick={onSelect}\n style={{\n ...styles.ticket,\n flex: `1 1 calc(${widthPct} - 10px)`,\n minWidth: 230,\n alignSelf: ALIGN_MAP[field.verticalAlign || \"top\"],\n ...(isSelected ? styles.ticketSelected : {}),\n ...(isDragOver ? styles.ticketDragOver : {}),\n }}\n >\n <div style={styles.ticketIndex}>{String(idx + 1).padStart(2, \"0\")}</div>\n <div style={styles.ticketPerforation} />\n <div style={styles.ticketBody}>\n <div style={styles.ticketTop}>\n <span {...dragHandleProps} style={{ cursor: \"grab\", display: \"flex\" }}><GripVertical size={14} color=\"#C4C6D0\" /></span>\n <Icon size={13} color=\"var(--fb-primary)\" />\n <span style={styles.typeBadge}>\n {(chrome as Record<string, unknown>)[FIELD_TYPE_CHROME_KEY[field.type]] as string || field.type}\n {field.type === \"input\" && field.inputType && field.inputType !== \"text\" ? ` · ${(chrome as Record<string, unknown>)[INPUT_SUBTYPE_CHROME_KEY[field.inputType]]}` : \"\"}\n </span>\n {field.required && <span style={styles.requiredBadge}>{chrome.required}</span>}\n </div>\n {(field.width && field.width !== \"1/1\") || field.labelPosition === \"inline\" || field.verticalAlign !== \"top\" || field.hideLabel ? (\n <div style={styles.chipRow}>\n {field.width && field.width !== \"1/1\" && <span style={styles.miniBadge}>{chrome.width} {field.width}</span>}\n {field.labelPosition === \"inline\" && <span style={styles.miniBadge}>{chrome.inline}</span>}\n {field.verticalAlign !== \"top\" && <span style={styles.miniBadge}>{chrome[field.verticalAlign as \"middle\" | \"bottom\"]}</span>}\n {field.hideLabel && <span style={styles.miniBadge}>{chrome.hideLabel}</span>}\n </div>\n ) : null}\n <div style={{ marginTop: 8 }}>\n <FieldBlock field={field} lang={language} onFieldChange={onFieldChange} strings={strings} chrome={chrome} isBuild />\n </div>\n </div>\n <div style={styles.ticketActions} onClick={(e) => e.stopPropagation()}>\n <button style={styles.iconBtn} title={chrome.moveUp} onClick={() => onMoveField(field.id, -1)}><ArrowUp size={13} /></button>\n <button style={styles.iconBtn} title={chrome.moveDown} onClick={() => onMoveField(field.id, 1)}><ArrowDown size={13} /></button>\n <button style={styles.iconBtn} title={chrome.duplicate} onClick={() => onDuplicateField(field.id)}><Copy size={13} /></button>\n <button style={{ ...styles.iconBtn, ...styles.iconBtnDanger }} title={chrome.delete} onClick={() => onDeleteField(field.id)}><Trash2 size={13} /></button>\n </div>\n </div>\n );\n}\n","import type { ChangeEvent, ElementType } from \"react\";\nimport { CircleAlert } from \"lucide-react\";\nimport type { ChromeShape } from \"../../i18n/chrome\";\nimport type { StringsShape } from \"../../i18n/strings\";\nimport type { FieldPatch, FormField, ImageField, ParagraphField } from \"../../types\";\nimport { FONT_SIZE_OPTIONS, TAG_TO_ELEMENT } from \"../../constants/typography\";\nimport { getMeta } from \"../../constants/fieldTypes\";\nimport { ICON_LIBRARY, type IconComponent } from \"../../constants/icons\";\nimport { t } from \"../../lib/bilingual\";\nimport { styles } from \"../../styles/styles\";\nimport { ImageBlock } from \"./ImageBlock\";\n\nexport interface FieldBlockProps {\n field: FormField;\n lang: string;\n onFieldChange: (fieldId: string, patch: FieldPatch) => void;\n strings: StringsShape;\n chrome?: ChromeShape;\n error?: string | null;\n isBuild?: boolean;\n}\n\nexport function FieldBlock({ field, lang, onFieldChange, strings, chrome, error, isBuild }: FieldBlockProps) {\n if (field.type === \"image\") return <ImageBlock field={field} lang={lang} />;\n\n if (field.type === \"paragraph\") {\n const fontPx = FONT_SIZE_OPTIONS.find((f) => f.value === field.fontSize)?.px || 14;\n const Tag = (TAG_TO_ELEMENT[field.tag] || \"p\") as ElementType;\n return (\n <Tag style={{ margin: 0, whiteSpace: \"pre-wrap\", fontSize: fontPx, fontWeight: field.fontWeight === \"bold\" ? 700 : 400, fontStyle: field.fontStyle === \"italic\" ? \"italic\" : \"normal\", textAlign: field.textAlign || \"left\", color: field.color || \"var(--fb-ink)\", lineHeight: 1.6 }}>\n {t(field.content, lang) || \"...\"}\n </Tag>\n );\n }\n\n const meta = getMeta(field.type);\n const IconComp = field.showIcon && field.displayIcon ? ICON_LIBRARY[field.displayIcon] : null;\n const isInline = field.labelPosition === \"inline\" && !meta.boolean;\n const labelText = t(field.label, lang);\n const showLabel = !meta.boolean && !field.hideLabel;\n\n return (\n <div>\n <div style={{ display: \"flex\", flexDirection: isInline ? \"row\" : \"column\", alignItems: isInline ? \"center\" : \"stretch\", gap: isInline ? 10 : 6 }}>\n {showLabel && (\n <label style={{ ...styles.previewLabel, marginBottom: isInline ? 0 : 6, flexShrink: 0, width: isInline ? 120 : \"auto\", display: \"flex\", alignItems: \"center\", gap: 6 }}>\n {IconComp && <IconComp size={14} color=\"#6B6E79\" />}\n {labelText || (isBuild ? <span style={{ fontStyle: \"italic\", color: \"var(--fb-muted)\" }}>{chrome?.untitledField || \"Untitled field\"}</span> : \"\")}\n {field.required && <span style={{ color: \"var(--fb-danger)\" }}> *</span>}\n </label>\n )}\n <div style={{ flex: 1, minWidth: 0 }}>{renderInteractive(field, lang, onFieldChange, IconComp, !!error, strings)}</div>\n </div>\n {error && (<div style={styles.fieldError}><CircleAlert size={12} /> {error}</div>)}\n </div>\n );\n}\n\ntype InteractiveField = Exclude<FormField, ImageField | ParagraphField>;\n\nfunction renderInteractive(\n field: InteractiveField,\n lang: string,\n onFieldChange: (fieldId: string, patch: FieldPatch) => void,\n IconComp: IconComponent | null,\n hasError: boolean,\n strings: StringsShape,\n) {\n const value = field.defaultValue;\n const set = (v: string | boolean | string[]) => onFieldChange(field.id, { defaultValue: v });\n const inputStyle = hasError ? { ...styles.realInput, ...styles.realInputError } : styles.realInput;\n const common = { style: inputStyle, placeholder: t(\"placeholder\" in field ? field.placeholder : undefined, lang), value: (value as string) || \"\", onChange: (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => set(e.target.value) };\n\n if (field.type === \"input\") {\n switch (field.inputType) {\n case \"number\": return <input type=\"number\" {...common} min={field.min ?? undefined} max={field.max ?? undefined} />;\n case \"email\": return <input type=\"email\" {...common} />;\n case \"password\": return <input type=\"password\" {...common} maxLength={field.maxLength || undefined} />;\n case \"phone\": return <input type=\"tel\" {...common} />;\n case \"date\": return <input type=\"date\" {...common} />;\n case \"time\": return <input type=\"time\" {...common} />;\n default: return <input type=\"text\" {...common} maxLength={field.maxLength || undefined} />;\n }\n }\n\n switch (field.type) {\n case \"textarea\":\n return <textarea {...common} rows={3} maxLength={field.maxLength || undefined} />;\n case \"select\":\n return (\n <select style={inputStyle} value={(value as string) || \"\"} onChange={(e) => set(e.target.value)}>\n <option value=\"\">{strings.selectPlaceholder}</option>\n {(field.options || []).map((o) => (<option key={o.value} value={o.value}>{t(o.label, lang)}</option>))}\n </select>\n );\n case \"radio\":\n return (<div style={{ display: \"flex\", gap: 16, flexWrap: \"wrap\", marginTop: 4 }}>{(field.options || []).map((o) => (<label key={o.value} style={styles.previewRadio}><input type=\"radio\" name={field.id} value={o.value} checked={value === o.value} onChange={(e) => set(e.target.value)} />{t(o.label, lang)}</label>))}</div>);\n case \"checkboxGroup\": {\n const vals = Array.isArray(value) ? value : [];\n return (\n <div style={{ display: \"flex\", gap: 16, flexWrap: \"wrap\", marginTop: 4 }}>\n {(field.options || []).map((o) => { const checked = vals.includes(o.value); return (<label key={o.value} style={styles.previewRadio}><input type=\"checkbox\" checked={checked} onChange={(e) => { const next = e.target.checked ? [...vals, o.value] : vals.filter((v) => v !== o.value); set(next); }} style={{ accentColor: \"var(--fb-primary)\" }} />{t(o.label, lang)}</label>); })}\n </div>\n );\n }\n case \"checkbox\":\n return (<label style={styles.previewRadio}><input type=\"checkbox\" checked={!!value} onChange={(e) => set(e.target.checked)} style={{ accentColor: \"var(--fb-primary)\" }} />{IconComp && <IconComp size={14} color=\"#6B6E79\" />}{t(field.label, lang)}{field.required && <span style={{ color: \"var(--fb-danger)\" }}> *</span>}</label>);\n case \"toggle\":\n return (<label style={styles.previewRadio}><input type=\"checkbox\" checked={!!value} onChange={(e) => set(e.target.checked)} style={{ accentColor: \"var(--fb-primary)\" }} />{IconComp && <IconComp size={14} color=\"#6B6E79\" />}{t(field.label, lang)}</label>);\n default:\n return <input type=\"text\" {...common} />;\n }\n}\n","import { AlignLeft, AlignCenter, AlignRight } from \"lucide-react\";\nimport type { ParagraphField } from \"../types\";\n\nexport const FONT_SIZE_OPTIONS: { value: ParagraphField[\"fontSize\"]; label: string; px: number }[] = [\n { value: \"sm\", label: \"S\", px: 12 }, { value: \"md\", label: \"M\", px: 14 },\n { value: \"lg\", label: \"L\", px: 18 }, { value: \"xl\", label: \"XL\", px: 24 },\n];\nexport const TEXT_ALIGN_OPTIONS: { value: ParagraphField[\"textAlign\"]; label: string; icon: typeof AlignLeft }[] = [\n { value: \"left\", label: \"\", icon: AlignLeft }, { value: \"center\", label: \"\", icon: AlignCenter }, { value: \"right\", label: \"\", icon: AlignRight },\n];\n\nexport const PARAGRAPH_TAG_OPTIONS: ParagraphField[\"tag\"][] = [\"h1\", \"h2\", \"h3\", \"p\", \"caption\"];\nexport const TAG_PRESETS: Record<ParagraphField[\"tag\"], { fontSize: ParagraphField[\"fontSize\"]; fontWeight: ParagraphField[\"fontWeight\"] }> = {\n h1: { fontSize: \"xl\", fontWeight: \"bold\" }, h2: { fontSize: \"lg\", fontWeight: \"bold\" },\n h3: { fontSize: \"md\", fontWeight: \"bold\" }, p: { fontSize: \"md\", fontWeight: \"normal\" },\n caption: { fontSize: \"sm\", fontWeight: \"normal\" },\n};\nexport const TAG_TO_ELEMENT: Record<ParagraphField[\"tag\"], string> = { h1: \"h1\", h2: \"h2\", h3: \"h3\", p: \"p\", caption: \"span\" };\nexport const TAG_CHROME_KEY: Partial<Record<ParagraphField[\"tag\"], string>> = { p: \"tagBody\", caption: \"tagCaption\" };\n","import {\n Type, Mail, Phone, Hash, Lock, AlignLeft, ChevronDown, Circle, CheckSquare,\n ListChecks, ToggleLeft, Calendar, Clock, User, MapPin, Building2, Globe,\n CreditCard, FileText, Star, Flag, Home, Briefcase,\n} from \"lucide-react\";\n\nexport const ICON_LIBRARY = {\n Type, Mail, Phone, Hash, Lock, AlignLeft, ChevronDown, Circle, CheckSquare,\n ListChecks, ToggleLeft, Calendar, Clock, User, MapPin, Building2, Globe,\n CreditCard, FileText, Star, Flag, Home, Briefcase,\n};\n\nexport type IconKey = keyof typeof ICON_LIBRARY;\nexport type IconComponent = (typeof ICON_LIBRARY)[IconKey];\n","import type { CSSProperties } from \"react\";\nimport { Image as ImageIcon } from \"lucide-react\";\nimport type { ImageField } from \"../../types\";\nimport { t } from \"../../lib/bilingual\";\nimport { styles } from \"../../styles/styles\";\n\n// Always responsive: width fills the field's own grid width (1/3, 1/2, Full),\n// height is derived from aspect-ratio, object-fit crops cleanly. No fixed\n// pixel dimensions, so nothing can overflow on narrow screens.\nfunction buildImageStyle(field: ImageField): CSSProperties {\n const aspectRatio = field.shape === \"banner\" ? \"16 / 5\" : \"1 / 1\";\n return {\n width: \"100%\", aspectRatio, objectFit: \"cover\", display: \"block\",\n borderRadius: field.shape === \"circle\" ? \"50%\" : 8,\n background: \"var(--fb-canvas)\",\n };\n}\n\nexport function ImageBlock({ field, lang }: { field: ImageField; lang: string }) {\n const shapeStyle = buildImageStyle(field);\n const img = field.src ? (\n <img src={field.src} alt={t(field.alt, lang || \"en\")} style={shapeStyle} />\n ) : (\n <div style={{ ...shapeStyle, ...styles.imagePlaceholder }}><ImageIcon size={20} color=\"var(--fb-muted)\" /></div>\n );\n return field.link ? <a href={field.link} target=\"_blank\" rel=\"noreferrer\" style={{ display: \"block\" }}>{img}</a> : img;\n}\n","import { Bold, Italic, X, Plus, Trash2 } from \"lucide-react\";\nimport type { ChromeShape } from \"../i18n/chrome\";\nimport type { FieldPatch, FormField, LocalizedString, Option } from \"../types\";\nimport { getMeta, INPUT_SUBTYPES, INPUT_SUBTYPE_CHROME_KEY, IMAGE_SHAPE_CHROME_KEY } from \"../constants/fieldTypes\";\nimport { IMAGE_SHAPES } from \"../constants/fieldTypes\";\nimport { PARAGRAPH_TAG_OPTIONS, TAG_CHROME_KEY, TAG_PRESETS, FONT_SIZE_OPTIONS, TEXT_ALIGN_OPTIONS } from \"../constants/typography\";\nimport { COLOR_SWATCHES } from \"../constants/colors\";\nimport { WIDTH_OPTIONS } from \"../constants/layout\";\nimport { ICON_LIBRARY } from \"../constants/icons\";\nimport { t, withLang } from \"../lib/bilingual\";\nimport { styles } from \"../styles/styles\";\nimport { Segmented } from \"./Segmented\";\nimport { DefaultValueEditor } from \"./fields/DefaultValueEditor\";\n\nexport interface InspectorProps {\n selected: FormField | null;\n language: string;\n chrome: ChromeShape;\n onUpdateField: (patch: FieldPatch) => void;\n onDeleteField: () => void;\n onUpdateOption: (optIdx: number, patch: Partial<Option>) => void;\n onAddOption: () => void;\n onRemoveOption: (optIdx: number) => void;\n}\n\nexport function Inspector({ selected, language, chrome, onUpdateField, onDeleteField, onUpdateOption, onAddOption, onRemoveOption }: InspectorProps) {\n return (\n <div style={styles.inspector}>\n <div style={styles.panelHeading}>{chrome.properties}</div>\n {!selected ? (\n <div style={styles.inspectorEmpty}>{chrome.selectFieldHint}</div>\n ) : (\n <InspectorBody\n selected={selected}\n language={language}\n chrome={chrome}\n onUpdateField={onUpdateField}\n onDeleteField={onDeleteField}\n onUpdateOption={onUpdateOption}\n onAddOption={onAddOption}\n onRemoveOption={onRemoveOption}\n />\n )}\n </div>\n );\n}\n\nfunction InspectorBody({ selected, language, chrome, onUpdateField, onDeleteField, onUpdateOption, onAddOption, onRemoveOption }: Omit<InspectorProps, \"selected\"> & { selected: FormField }) {\n const meta = getMeta(selected.type);\n const f = selected as any;\n\n return (\n <div style={styles.inspectorBody}>\n {!meta.isContent && (\n <>\n <label style={styles.propLabel}>{chrome.label}</label>\n <input style={styles.propInput} value={t(selected.label, language)} onChange={(e) => onUpdateField({ label: withLang(selected.label, language, e.target.value) })} />\n <label style={styles.toggleRow}>\n <input type=\"checkbox\" checked={!!selected.hideLabel} onChange={(e) => onUpdateField({ hideLabel: e.target.checked })} style={{ width: 15, height: 15, accentColor: \"var(--fb-primary)\" }} />\n <span style={{ fontSize: 13, color: \"#4A4D57\" }}>{chrome.hideLabel}</span>\n </label>\n </>\n )}\n\n {meta.hasSubtype && (\n <>\n <label style={styles.propLabel}>{chrome.inputType}</label>\n <select style={styles.propInput} value={f.inputType || \"text\"} onChange={(e) => onUpdateField({ inputType: e.target.value as FieldPatch[\"inputType\"] })}>\n {INPUT_SUBTYPES.map((s) => (<option key={s} value={s}>{chrome[INPUT_SUBTYPE_CHROME_KEY[s] as keyof ChromeShape] as string}</option>))}\n </select>\n </>\n )}\n\n {selected.type === \"paragraph\" && (\n <>\n <label style={styles.propLabel}>{chrome.content}</label>\n <textarea style={{ ...styles.propInput, minHeight: 70, resize: \"vertical\" }} value={t(selected.content, language)} onChange={(e) => onUpdateField({ content: withLang(selected.content, language, e.target.value) })} />\n\n <div style={styles.inspectorDivider} />\n <div style={styles.panelHeading}>{chrome.typography}</div>\n <label style={styles.propLabel}>{chrome.headingStyle}</label>\n <Segmented options={PARAGRAPH_TAG_OPTIONS.map((v) => ({ value: v, label: TAG_CHROME_KEY[v] ? (chrome[TAG_CHROME_KEY[v] as keyof ChromeShape] as string) : v.toUpperCase() }))} value={selected.tag || \"p\"} onChange={(v) => onUpdateField({ tag: v, ...TAG_PRESETS[v] })} />\n <label style={styles.propLabel}>{chrome.width}</label>\n <Segmented options={FONT_SIZE_OPTIONS} value={selected.fontSize || \"md\"} onChange={(v) => onUpdateField({ fontSize: v })} />\n <label style={styles.propLabel}>{chrome.style}</label>\n <div style={styles.styleToggleRow}>\n <button type=\"button\" style={selected.fontWeight === \"bold\" ? styles.styleToggleActive : styles.styleToggle} onClick={() => onUpdateField({ fontWeight: selected.fontWeight === \"bold\" ? \"normal\" : \"bold\" })}><Bold size={14} /></button>\n <button type=\"button\" style={selected.fontStyle === \"italic\" ? styles.styleToggleActive : styles.styleToggle} onClick={() => onUpdateField({ fontStyle: selected.fontStyle === \"italic\" ? \"normal\" : \"italic\" })}><Italic size={14} /></button>\n </div>\n <label style={styles.propLabel}>{chrome.align}</label>\n <Segmented options={TEXT_ALIGN_OPTIONS} value={selected.textAlign || \"left\"} onChange={(v) => onUpdateField({ textAlign: v })} />\n <label style={styles.propLabel}>{chrome.color}</label>\n <div style={styles.swatchRow}>\n {COLOR_SWATCHES.map((c) => (<button key={c || \"default\"} type=\"button\" title={c || chrome.none} style={{ ...styles.swatchBtn, background: c || \"var(--fb-ink)\", ...(selected.color === c ? styles.swatchBtnActive : {}) }} onClick={() => onUpdateField({ color: c })} />))}\n <input type=\"color\" value={selected.color || \"#1B1E24\"} onChange={(e) => onUpdateField({ color: e.target.value })} style={styles.colorPickerInput} />\n </div>\n </>\n )}\n\n {selected.type === \"image\" && (\n <>\n <label style={styles.propLabel}>{chrome.imageUrl}</label>\n <input style={styles.propInput} placeholder=\"https://...\" value={selected.src || \"\"} onChange={(e) => onUpdateField({ src: e.target.value })} />\n <p style={styles.helperText}>{chrome.imageUrlHelper}</p>\n <label style={styles.propLabel}>{chrome.altText}</label>\n <input style={styles.propInput} value={t(selected.alt, language)} onChange={(e) => onUpdateField({ alt: withLang(selected.alt, language, e.target.value) })} />\n <label style={styles.propLabel}>{chrome.linkOptional}</label>\n <input style={styles.propInput} placeholder=\"https://...\" value={selected.link || \"\"} onChange={(e) => onUpdateField({ link: e.target.value })} />\n <label style={styles.propLabel}>{chrome.shape}</label>\n <Segmented options={IMAGE_SHAPES.map((v) => ({ value: v, label: chrome[IMAGE_SHAPE_CHROME_KEY[v] as keyof ChromeShape] as string }))} value={selected.shape || \"square\"} onChange={(v) => onUpdateField({ shape: v })} />\n <p style={styles.helperText}>Fills the field's own width (set below under Layout) and scales height automatically — always responsive, never overflows.</p>\n </>\n )}\n\n {meta.placeholder && (\n <>\n <label style={styles.propLabel}>{chrome.placeholder}</label>\n <input style={styles.propInput} value={t(f.placeholder, language)} onChange={(e) => onUpdateField({ placeholder: withLang(f.placeholder, language, e.target.value) })} />\n </>\n )}\n\n {selected.type === \"input\" && (selected.inputType === \"text\" || selected.inputType === \"password\" || !selected.inputType) && (\n <><label style={styles.propLabel}>{chrome.maxLength}</label><input type=\"number\" style={styles.propInput} placeholder={chrome.noLimit} value={selected.maxLength || \"\"} onChange={(e) => onUpdateField({ maxLength: e.target.value ? Number(e.target.value) : null })} /></>\n )}\n {selected.type === \"input\" && selected.inputType === \"number\" && (\n <>\n <label style={styles.propLabel}>{chrome.minValue}</label><input type=\"number\" style={styles.propInput} value={selected.min ?? \"\"} onChange={(e) => onUpdateField({ min: e.target.value === \"\" ? null : Number(e.target.value) })} />\n <label style={styles.propLabel}>{chrome.maxValue}</label><input type=\"number\" style={styles.propInput} value={selected.max ?? \"\"} onChange={(e) => onUpdateField({ max: e.target.value === \"\" ? null : Number(e.target.value) })} />\n </>\n )}\n {selected.type === \"textarea\" && (\n <><label style={styles.propLabel}>{chrome.maxLength}</label><input type=\"number\" style={styles.propInput} placeholder={chrome.noLimit} value={selected.maxLength || \"\"} onChange={(e) => onUpdateField({ maxLength: e.target.value ? Number(e.target.value) : null })} /></>\n )}\n\n {meta.options && (\n <>\n <label style={styles.propLabel}>{chrome.options}</label>\n <div style={styles.optionList}>\n {((f.options || []) as Option[]).map((opt, i) => (\n <div key={i} style={styles.optionRow}>\n <input style={styles.optionInput} value={t(opt.label, language)} onChange={(e) => onUpdateOption(i, { label: withLang(opt.label, language, e.target.value) })} />\n <button style={styles.iconBtn} onClick={() => onRemoveOption(i)} disabled={(f.options || []).length <= 1}><X size={13} /></button>\n </div>\n ))}\n <button style={styles.addOptionBtn} onClick={onAddOption}><Plus size={13} /> {chrome.addOption}</button>\n </div>\n </>\n )}\n\n <DefaultValueEditor field={selected} meta={meta} lang={language} chrome={chrome} onChange={onUpdateField} />\n\n {!meta.isContent && (\n <label style={styles.toggleRow}>\n <input type=\"checkbox\" checked={!!selected.required} onChange={(e) => onUpdateField({ required: e.target.checked })} style={{ width: 15, height: 15, accentColor: \"var(--fb-primary)\" }} />\n <span style={{ fontSize: 13, color: \"#4A4D57\" }}>{chrome.requiredField}</span>\n </label>\n )}\n\n <div style={styles.inspectorDivider} />\n <div style={styles.panelHeading}>{chrome.layout}</div>\n <label style={styles.propLabel}>{chrome.width}</label>\n <Segmented options={WIDTH_OPTIONS.map((o) => ({ ...o, label: o.labelKey ? chrome[o.labelKey as keyof ChromeShape] as string : o.label || \"\" }))} value={selected.width || \"1/1\"} onChange={(v) => onUpdateField({ width: v })} />\n <label style={styles.propLabel}>{chrome.verticalAlign}</label>\n <Segmented options={[{ value: \"top\", label: chrome.top }, { value: \"middle\", label: chrome.middle }, { value: \"bottom\", label: chrome.bottom }]} value={selected.verticalAlign || \"top\"} onChange={(v) => onUpdateField({ verticalAlign: v as FieldPatch[\"verticalAlign\"] })} />\n {!meta.boolean && !meta.isContent && (\n <><label style={styles.propLabel}>{chrome.labelPosition}</label><Segmented options={[{ value: \"top\", label: chrome.above }, { value: \"inline\", label: chrome.inline }]} value={selected.labelPosition || \"top\"} onChange={(v) => onUpdateField({ labelPosition: v as FieldPatch[\"labelPosition\"] })} /></>\n )}\n\n {!meta.isContent && (\n <>\n <div style={styles.inspectorDivider} />\n <div style={styles.panelHeading}>{chrome.icon}</div>\n <label style={styles.toggleRow}>\n <input type=\"checkbox\" checked={!!selected.showIcon} onChange={(e) => onUpdateField({ showIcon: e.target.checked })} style={{ width: 15, height: 15, accentColor: \"var(--fb-primary)\" }} />\n <span style={{ fontSize: 13, color: \"#4A4D57\" }}>{chrome.showIcon}</span>\n </label>\n {selected.showIcon && (\n <div style={styles.iconGrid}>\n {Object.keys(ICON_LIBRARY).map((key) => {\n const IconComp = ICON_LIBRARY[key as keyof typeof ICON_LIBRARY];\n const active = selected.displayIcon === key;\n return (<button key={key} type=\"button\" title={key} style={active ? styles.iconGridBtnActive : styles.iconGridBtn} onClick={() => onUpdateField({ displayIcon: key as FieldPatch[\"displayIcon\"] })}><IconComp size={15} /></button>);\n })}\n </div>\n )}\n </>\n )}\n\n <div style={styles.inspectorDivider} />\n <button style={styles.deleteFieldBtn} onClick={onDeleteField}><Trash2 size={13} /> {chrome.deleteField}</button>\n </div>\n );\n}\n","import type { ChromeShape } from \"../../i18n/chrome\";\nimport type { FieldPatch, FormField } from \"../../types\";\nimport type { FieldTypeMeta } from \"../../constants/fieldTypes\";\nimport { t } from \"../../lib/bilingual\";\nimport { styles } from \"../../styles/styles\";\n\nexport interface DefaultValueEditorProps {\n field: FormField;\n meta: FieldTypeMeta;\n lang: string;\n chrome: ChromeShape;\n onChange: (patch: FieldPatch) => void;\n}\n\nexport function DefaultValueEditor({ field, meta, lang, chrome, onChange }: DefaultValueEditorProps) {\n if (meta.isContent) return null;\n const f = field as any;\n\n if (meta.boolean) {\n return (\n <>\n <label style={styles.propLabel}>{chrome.defaultValue}</label>\n <button style={styles.toggleRow} onClick={() => onChange({ defaultValue: !f.defaultValue })}>\n <span style={{ ...styles.toggleTrack, background: f.defaultValue ? \"var(--fb-primary)\" : \"var(--fb-border)\" }}><span style={{ ...styles.toggleThumb, transform: f.defaultValue ? \"translateX(16px)\" : \"translateX(0)\" }} /></span>\n <span style={{ fontSize: 13, color: \"#4A4D57\" }}>{f.defaultValue ? chrome.checked : chrome.unchecked}</span>\n </button>\n </>\n );\n }\n\n if (meta.multiValue) {\n const selectedVals: string[] = f.defaultValue || [];\n return (\n <>\n <label style={styles.propLabel}>{chrome.defaultChecked}</label>\n <div style={styles.optionList}>\n {(f.options || []).map((o: any) => {\n const checked = selectedVals.includes(o.value);\n return (\n <label key={o.value} style={{ ...styles.previewRadio, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={checked} onChange={(e) => { const next = e.target.checked ? [...selectedVals, o.value] : selectedVals.filter((v) => v !== o.value); onChange({ defaultValue: next }); }} style={{ accentColor: \"var(--fb-primary)\" }} />\n {t(o.label, lang)}\n </label>\n );\n })}\n </div>\n </>\n );\n }\n\n if (meta.options) {\n return (\n <>\n <label style={styles.propLabel}>{chrome.defaultValue}</label>\n <select style={styles.propInput} value={f.defaultValue || \"\"} onChange={(e) => onChange({ defaultValue: e.target.value })}>\n <option value=\"\">{chrome.none}</option>\n {(f.options || []).map((o: any) => (<option key={o.value} value={o.value}>{t(o.label, lang)}</option>))}\n </select>\n </>\n );\n }\n\n const htmlType =\n field.type === \"input\" && field.inputType === \"number\" ? \"number\" :\n field.type === \"input\" && field.inputType === \"date\" ? \"date\" :\n field.type === \"input\" && field.inputType === \"time\" ? \"time\" : \"text\";\n return (\n <>\n <label style={styles.propLabel}>{chrome.defaultValue}</label>\n <input type={htmlType} style={styles.propInput} value={f.defaultValue || \"\"} onChange={(e) => onChange({ defaultValue: e.target.value })} />\n </>\n );\n}\n","import { useState } from \"react\";\nimport { PartyPopper, X, CircleAlert } from \"lucide-react\";\nimport type { ChromeShape } from \"../i18n/chrome\";\nimport type { StringsShape } from \"../i18n/strings\";\nimport type { FieldPatch, LocalizedString, Section, SubmitStyle } from \"../types\";\nimport { buildDeviceOptions, effectiveWidth, WIDTH_PERCENT, ALIGN_MAP } from \"../constants/layout\";\nimport { resolveSubmitStyle } from \"../constants/submitStyle\";\nimport { getMeta } from \"../constants/fieldTypes\";\nimport { validateField } from \"../lib/validate\";\nimport { formatValue } from \"../lib/format\";\nimport { t } from \"../lib/bilingual\";\nimport { styles } from \"../styles/styles\";\nimport { Segmented } from \"./Segmented\";\nimport { FieldBlock } from \"./fields/FieldBlock\";\n\nexport interface PreviewPaneProps {\n title: LocalizedString;\n sections: Section[];\n onFieldChange: (fieldId: string, patch: FieldPatch) => void;\n language: string;\n strings: StringsShape;\n chrome: ChromeShape;\n baseMaxWidth: number;\n submitLabel: LocalizedString;\n submitMode: \"combined\" | \"perSection\";\n submitStyle: SubmitStyle;\n}\n\ninterface SubmittedRow {\n label: string;\n value: string;\n}\n\nexport function PreviewPane({ title, sections, onFieldChange, language, strings, chrome, baseMaxWidth, submitLabel, submitMode, submitStyle }: PreviewPaneProps) {\n const [device, setDevice] = useState<\"laptop\" | \"tablet\" | \"mobile\">(\"laptop\");\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [submitted, setSubmitted] = useState<SubmittedRow[] | null>(null);\n const deviceOptions = buildDeviceOptions(baseMaxWidth, chrome);\n const maxWidth = (deviceOptions.find((d) => d.value === device) || deviceOptions[0]).maxWidth;\n const allFields = sections.flatMap((s) => s.fields);\n const submitText = t(submitLabel, language) || strings.submit;\n const overallHasFormFields = allFields.some((f) => !getMeta(f.type).isContent);\n\n function runValidation(fields: typeof allFields) {\n const errs: Record<string, string> = {};\n fields.forEach((f) => {\n const e = validateField(f, (f as any).defaultValue, strings);\n if (e) errs[f.id] = e;\n });\n return errs;\n }\n\n function handleSubmitAll() {\n const errs = runValidation(allFields);\n setErrors(errs);\n if (Object.keys(errs).length > 0) { setSubmitted(null); return; }\n setSubmitted(allFields.filter((f) => !getMeta(f.type).isContent).map((f) => ({ label: t(f.label, language), value: formatValue(f, language) })));\n }\n\n function handleSubmitSection(section: Section) {\n const errs = runValidation(section.fields);\n setErrors((prev) => {\n const next = { ...prev };\n section.fields.forEach((f) => delete next[f.id]);\n return { ...next, ...errs };\n });\n if (Object.keys(errs).length > 0) { setSubmitted(null); return; }\n setSubmitted(section.fields.filter((f) => !getMeta(f.type).isContent).map((f) => ({ label: t(f.label, language), value: formatValue(f, language) })));\n }\n\n return (\n <div style={styles.previewWrap}>\n <div style={{ width: \"100%\", maxWidth, display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n <div style={styles.previewToolbar}><Segmented options={deviceOptions} value={device} onChange={setDevice} /></div>\n <div style={{ ...styles.previewCard, maxWidth, width: \"100%\" }}>\n <h2 style={styles.previewTitle}>{t(title, language)}</h2>\n {allFields.length === 0 && <p style={{ color: \"var(--fb-muted)\", fontSize: 14 }}>{strings.addFieldsHint}</p>}\n\n {sections.map((section) => {\n const sectionHasFormFields = section.fields.some((f) => !getMeta(f.type).isContent);\n const sectionHasErrors = section.fields.some((f) => errors[f.id]);\n return (\n <div key={section.id} style={{ background: section.background || \"transparent\", padding: section.background ? 16 : 0, borderRadius: section.background ? 10 : 0, marginBottom: \"var(--fb-space-section)\" }}>\n {t(section.title, language) && <h3 style={styles.sectionRuntimeTitle}>{t(section.title, language)}</h3>}\n <div style={styles.previewGrid}>\n {section.fields.map((field) => {\n const width = effectiveWidth(field.width, device);\n const flexBasis = `1 1 calc(${WIDTH_PERCENT[width]} - 14px)`;\n return (\n <div key={field.id} style={{ flex: flexBasis, minWidth: 0, alignSelf: ALIGN_MAP[field.verticalAlign || \"top\"] }}>\n <FieldBlock field={field} lang={language} onFieldChange={onFieldChange} strings={strings} chrome={chrome} error={errors[field.id]} />\n </div>\n );\n })}\n </div>\n {submitMode === \"perSection\" && sectionHasFormFields && (\n <>\n <button style={{ ...styles.submitBtn, ...resolveSubmitStyle(section.submitStyle || submitStyle) }} onClick={() => handleSubmitSection(section)}>{submitText}</button>\n {sectionHasErrors && (<p style={styles.formErrorNote}><CircleAlert size={13} /> {strings.fixErrors}</p>)}\n </>\n )}\n </div>\n );\n })}\n\n {submitMode === \"combined\" && overallHasFormFields && (<button style={{ ...styles.submitBtn, ...resolveSubmitStyle(submitStyle) }} onClick={handleSubmitAll}>{submitText}</button>)}\n {submitMode === \"combined\" && Object.keys(errors).length > 0 && (<p style={styles.formErrorNote}><CircleAlert size={13} /> {strings.fixErrors}</p>)}\n </div>\n </div>\n\n {submitted && (\n <div style={styles.modalOverlay} onClick={() => setSubmitted(null)}>\n <div style={{ ...styles.modal, width: 420 }} onClick={(e) => e.stopPropagation()}>\n <div style={styles.modalHeader}>\n <span style={{ fontWeight: 600, fontSize: 14, display: \"flex\", alignItems: \"center\", gap: 7 }}><PartyPopper size={15} color=\"var(--fb-primary)\" /> {strings.submittedTitle}</span>\n <button style={styles.iconBtn} onClick={() => setSubmitted(null)}><X size={16} /></button>\n </div>\n <div style={{ padding: 16 }}>\n <p style={{ fontSize: 12.5, color: \"var(--fb-muted)\", marginTop: 0 }}>{strings.submittedBody}</p>\n <div style={styles.submittedList}>\n {submitted.map((row, i) => (<div key={i} style={styles.submittedRow}><span style={styles.submittedLabel}>{row.label}</span><span style={styles.submittedValue}>{row.value}</span></div>))}\n </div>\n <button style={{ ...styles.primaryBtn, width: \"100%\", justifyContent: \"center\", marginTop: 14 }} onClick={() => setSubmitted(null)}>{strings.close}</button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import type { FormField } from \"../types\";\nimport type { StringsShape } from \"../i18n/strings\";\nimport { getMeta } from \"../constants/fieldTypes\";\n\nexport function validateField(field: FormField, value: unknown, strings: StringsShape): string | null {\n const meta = getMeta(field.type);\n if (meta.isContent) return null;\n const isEmpty =\n value === undefined || value === null || value === \"\" ||\n (Array.isArray(value) && value.length === 0) ||\n (!!meta.boolean && !!field.required && value !== true);\n if (field.required && isEmpty) return strings.requiredError;\n if (isEmpty) return null;\n if (field.type === \"input\" && field.inputType === \"email\" && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(String(value))) return strings.invalidEmail;\n if (field.type === \"input\" && field.inputType === \"phone\" && !/^[0-9+\\-\\s()]{7,20}$/.test(String(value))) return strings.invalidPhone;\n if (field.type === \"input\" && field.inputType === \"number\") {\n const num = Number(value);\n if (field.min !== undefined && field.min !== null && (field.min as unknown as string) !== \"\" && num < Number(field.min)) return strings.tooSmall(field.min);\n if (field.max !== undefined && field.max !== null && (field.max as unknown as string) !== \"\" && num > Number(field.max)) return strings.tooLarge(field.max);\n }\n if (\n (field.type === \"textarea\" || (field.type === \"input\" && ![\"number\", \"date\", \"time\"].includes(field.inputType))) &&\n field.maxLength && String(value).length > field.maxLength\n ) {\n return strings.tooLong(field.maxLength);\n }\n return null;\n}\n","import type { FormField } from \"../types\";\nimport { t } from \"./bilingual\";\n\nexport function formatValue(field: FormField, lang: string): string {\n const v = (field as any).defaultValue;\n if (Array.isArray(v)) {\n if (v.length === 0) return \"—\";\n return v.map((val: string) => t((field as any).options?.find((o: any) => o.value === val)?.label, lang) || val).join(\", \");\n }\n if (typeof v === \"boolean\") return v ? \"Yes\" : \"No\";\n if ((field as any).options && v) return t((field as any).options.find((o: any) => o.value === v)?.label, lang) || v;\n if (v === undefined || v === null || v === \"\") return \"—\";\n return String(v);\n}\n","import { Check, ClipboardCopy, X } from \"lucide-react\";\nimport type { ChromeShape } from \"../../i18n/chrome\";\nimport { styles } from \"../../styles/styles\";\n\nexport interface JsonModalProps {\n chrome: ChromeShape;\n jsonString: string;\n copied: boolean;\n onCopy: () => void;\n onClose: () => void;\n}\n\nexport function JsonModal({ chrome, jsonString, copied, onCopy, onClose }: JsonModalProps) {\n return (\n <div style={styles.modalOverlay} onClick={onClose}>\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\n <div style={styles.modalHeader}>\n <span style={{ fontWeight: 600, fontSize: 14 }}>{chrome.formJson}</span>\n <div style={{ display: \"flex\", gap: 8 }}>\n <button style={styles.ghostBtn} onClick={onCopy}>{copied ? <Check size={14} /> : <ClipboardCopy size={14} />}{copied ? chrome.copied : chrome.copy}</button>\n <button style={styles.iconBtn} onClick={onClose}><X size={16} /></button>\n </div>\n </div>\n <pre style={styles.jsonPre}>{jsonString}</pre>\n </div>\n </div>\n );\n}\n","import { Trash2, X } from \"lucide-react\";\nimport type { ChromeShape } from \"../../i18n/chrome\";\nimport type { SavedFormMeta } from \"../../types\";\nimport { styles } from \"../../styles/styles\";\n\nexport interface LibraryModalProps {\n chrome: ChromeShape;\n savedForms: SavedFormMeta[];\n currentFormId: string | null;\n onOpen: (id: string) => void;\n onDelete: (id: string) => void;\n onClose: () => void;\n}\n\nexport function LibraryModal({ chrome, savedForms, currentFormId, onOpen, onDelete, onClose }: LibraryModalProps) {\n return (\n <div style={styles.modalOverlay} onClick={onClose}>\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\n <div style={styles.modalHeader}><span style={{ fontWeight: 600, fontSize: 14 }}>{chrome.myForms}</span><button style={styles.iconBtn} onClick={onClose}><X size={16} /></button></div>\n <div style={styles.libraryBody}>\n {savedForms.length === 0 ? (\n <div style={styles.inspectorEmpty}>{chrome.nothingSaved}</div>\n ) : (\n savedForms.map((f) => (\n <div key={f.id} style={styles.libraryRow}>\n <div style={{ minWidth: 0 }}>\n <div style={styles.libraryRowTitle}>{f.title}{f.id === currentFormId && <span style={styles.currentBadge}>{chrome.current}</span>}</div>\n <div style={styles.libraryRowMeta}>{chrome.updated} {new Date(f.updatedAt).toLocaleString()}</div>\n </div>\n <div style={{ display: \"flex\", gap: 6, flexShrink: 0 }}>\n <button style={styles.ghostBtn} onClick={() => onOpen(f.id)}>{chrome.open}</button>\n <button style={{ ...styles.iconBtn, ...styles.iconBtnDanger }} title={chrome.delete} onClick={() => onDelete(f.id)}><Trash2 size={13} /></button>\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Save, X } from \"lucide-react\";\nimport type { ChromeShape } from \"../../i18n/chrome\";\nimport { styles } from \"../../styles/styles\";\n\nexport interface SaveAsModalProps {\n chrome: ChromeShape;\n suggestedName: string;\n onSave: (name: string) => void;\n onClose: () => void;\n}\n\nexport function SaveAsModal({ chrome, suggestedName, onSave, onClose }: SaveAsModalProps) {\n const [name, setName] = useState(suggestedName);\n\n return (\n <div style={styles.modalOverlay} onClick={onClose}>\n <div style={{ ...styles.modal, width: 380 }} onClick={(e) => e.stopPropagation()}>\n <div style={styles.modalHeader}><span style={{ fontWeight: 600, fontSize: 14 }}>{chrome.saveForm}</span><button style={styles.iconBtn} onClick={onClose}><X size={16} /></button></div>\n <div style={{ padding: 16 }}>\n <label style={styles.propLabel}>{chrome.formName}</label>\n <input autoFocus style={styles.propInput} value={name} onChange={(e) => setName(e.target.value)} onKeyDown={(e) => e.key === \"Enter\" && name.trim() && onSave(name.trim())} />\n <button style={{ ...styles.primaryBtn, width: \"100%\", justifyContent: \"center\", marginTop: 14 }} disabled={!name.trim()} onClick={() => onSave(name.trim())}><Save size={14} /> {chrome.saveToLibrary}</button>\n </div>\n </div>\n </div>\n );\n}\n","import { X } from \"lucide-react\";\nimport type { ChromeShape } from \"../../i18n/chrome\";\nimport type { StringsShape } from \"../../i18n/strings\";\nimport type { LocalizedString, SubmitStyle } from \"../../types\";\nimport { BUTTON_COLOR_SWATCHES } from \"../../constants/colors\";\nimport { SUBMIT_SIZE_OPTIONS } from \"../../constants/submitStyle\";\nimport { t } from \"../../lib/bilingual\";\nimport { styles } from \"../../styles/styles\";\nimport { Segmented } from \"../Segmented\";\n\nexport interface SettingsModalProps {\n chrome: ChromeShape;\n strings: StringsShape;\n submitLabel: LocalizedString;\n language: string;\n submitMode: \"combined\" | \"perSection\";\n submitStyle: SubmitStyle;\n onSubmitLabelChange: (value: string) => void;\n onSubmitModeChange: (mode: \"combined\" | \"perSection\") => void;\n onSubmitStyleChange: (patch: Partial<SubmitStyle>) => void;\n onClose: () => void;\n}\n\nexport function SettingsModal({\n chrome, strings, submitLabel, language, submitMode, submitStyle,\n onSubmitLabelChange, onSubmitModeChange, onSubmitStyleChange, onClose,\n}: SettingsModalProps) {\n return (\n <div style={styles.modalOverlay} onClick={onClose}>\n <div style={{ ...styles.modal, width: 400 }} onClick={(e) => e.stopPropagation()}>\n <div style={styles.modalHeader}><span style={{ fontWeight: 600, fontSize: 14 }}>{chrome.formSettings}</span><button style={styles.iconBtn} onClick={onClose}><X size={16} /></button></div>\n <div style={{ padding: 16 }}>\n <div style={styles.panelHeading}>{chrome.submitSectionTitle}</div>\n <label style={styles.propLabel}>{chrome.submitLabel}</label>\n <input style={styles.propInput} placeholder={strings.submit} value={t(submitLabel, language)} onChange={(e) => onSubmitLabelChange(e.target.value)} />\n <label style={styles.propLabel}>{chrome.submitMode}</label>\n <Segmented options={[{ value: \"combined\", label: chrome.combined }, { value: \"perSection\", label: chrome.perSection }]} value={submitMode} onChange={onSubmitModeChange} />\n\n <div style={styles.inspectorDivider} />\n <div style={styles.panelHeading}>{chrome.submitStyle}</div>\n <label style={styles.propLabel}>{chrome.color}</label>\n <div style={styles.swatchRow}>\n {BUTTON_COLOR_SWATCHES.map((c) => (<button key={c || \"default\"} type=\"button\" title={c || chrome.none} style={{ ...styles.swatchBtn, background: c || \"var(--fb-primary)\", ...((submitStyle.color || \"\") === c ? styles.swatchBtnActive : {}) }} onClick={() => onSubmitStyleChange({ color: c })} />))}\n <input type=\"color\" value={submitStyle.color || \"#5B5FEF\"} onChange={(e) => onSubmitStyleChange({ color: e.target.value })} style={styles.colorPickerInput} />\n </div>\n <label style={styles.propLabel}>{chrome.buttonSize}</label>\n <Segmented options={SUBMIT_SIZE_OPTIONS} value={submitStyle.size} onChange={(v) => onSubmitStyleChange({ size: v })} />\n </div>\n </div>\n </div>\n );\n}\n","export const css = `\n * { box-sizing: border-box; }\n button { font-family: inherit; cursor: pointer; }\n input, textarea, select { font-family: inherit; }\n @keyframes fb-spin { to { transform: rotate(360deg); } }\n .spin { animation: fb-spin 0.8s linear infinite; }\n`;\n"],"mappings":"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","names":["import_react","import_lucide_react","import_react","ImageIcon","import_react","import_react","import_lucide_react","import_react","import_lucide_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_lucide_react","import_lucide_react","import_lucide_react","import_lucide_react","import_lucide_react","import_lucide_react","import_jsx_runtime","ImageIcon","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime"]}
|