@notmrabhi/flowforge 0.1.55 → 0.1.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{SchemaBuilderDrawer-BP7aZgFe.js → SchemaBuilderDrawer-BqNqYbVF.js} +2 -2
- package/dist/{SchemaBuilderDrawer-BP7aZgFe.js.map → SchemaBuilderDrawer-BqNqYbVF.js.map} +1 -1
- package/dist/{SchemaBuilderDrawer-CIxQGffa.js → SchemaBuilderDrawer-C1VhNFEm.js} +2 -2
- package/dist/{SchemaBuilderDrawer-CIxQGffa.js.map → SchemaBuilderDrawer-C1VhNFEm.js.map} +1 -1
- package/dist/{WorkflowExecutionHistory-CF0-D-7q.js → WorkflowExecutionHistory-BuTFR_lG.js} +2 -2
- package/dist/{WorkflowExecutionHistory-CF0-D-7q.js.map → WorkflowExecutionHistory-BuTFR_lG.js.map} +1 -1
- package/dist/{WorkflowExecutionHistory-CQkhhFQr.js → WorkflowExecutionHistory-DeakdR2x.js} +2 -2
- package/dist/{WorkflowExecutionHistory-CQkhhFQr.js.map → WorkflowExecutionHistory-DeakdR2x.js.map} +1 -1
- package/dist/canvas.cjs +1 -1
- package/dist/canvas.js +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +2 -2
- package/dist/{index-hv7IJZ9j.js → index-BEgvjJKb.js} +2 -2
- package/dist/{index-hv7IJZ9j.js.map → index-BEgvjJKb.js.map} +1 -1
- package/dist/{index-B-D9UuLO.js → index-CEDP3md_.js} +1499 -1339
- package/dist/{index-B-D9UuLO.js.map → index-CEDP3md_.js.map} +1 -1
- package/dist/{index-BbYsmgpo.js → index-Cgy0mjGX.js} +2 -2
- package/dist/{index-BbYsmgpo.js.map → index-Cgy0mjGX.js.map} +1 -1
- package/dist/{index-DUbQPmIx.js → index-DKZKHw5W.js} +6 -6
- package/dist/{index-DUbQPmIx.js.map → index-DKZKHw5W.js.map} +1 -1
- package/dist/{index-B-vpguq_.js → index-DXoOohrF.js} +2 -2
- package/dist/{index-B-vpguq_.js.map → index-DXoOohrF.js.map} +1 -1
- package/dist/{index-BsgdZXaY.js → index-DgFeszTW.js} +2 -2
- package/dist/{index-BsgdZXaY.js.map → index-DgFeszTW.js.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +3 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaBuilderDrawer-BP7aZgFe.js","sources":["../src/FlowForm/useFlowForm.ts","../src/FlowForm/SchemaBuilder/types.ts","../src/FlowForm/SchemaBuilder/FieldConfigPanel.tsx","../src/FlowForm/styles/constants.ts","../src/FlowForm/SchemaBuilder/AddFieldModal.tsx","../src/FlowForm/SchemaBuilder/EditSchemaModal.tsx","../src/FlowForm/SchemaBuilder/SchemaBuilder.tsx","../src/FlowForm/SchemaBuilder/SchemaBuilderDrawer.tsx"],"sourcesContent":["import { useState, useMemo, useCallback, useEffect, useRef } from 'react';\r\nimport { useFormik } from 'formik';\r\nimport type { FormSchema, FieldDescriptor } from './types';\r\nimport { resolveFieldKey } from './types';\r\nimport type { FormulaConfig, ConditionConfig } from './types/formula';\r\nimport { buildValidationSchema } from './SchemaBuilder/buildValidationSchema';\r\nimport { buildEvaluationPayload } from './DynamicFormRenderer/formulaUtils';\r\nimport type { EvaluationPayload } from './DynamicFormRenderer/formulaUtils';\r\n\r\n// ─── Types ────────────────────────────────────────────────────────────────────\r\n\r\nexport interface UseFlowFormOptions {\r\n schema: FormSchema;\r\n initialValues: Record<string, unknown>;\r\n /**\r\n * Called only when form is valid and submitted.\r\n * Receives raw formik values AND the fully-resolved evaluation payload\r\n * (formula chips resolved, condition expressions serialized).\r\n */\r\n onSubmit: (values: Record<string, unknown>, evaluation: EvaluationPayload) => void | Promise<void>;\r\n /** Pre-mark all fields as touched so errors show immediately (e.g. edit mode). */\r\n showErrorsImmediately?: boolean;\r\n}\r\n\r\nexport interface FlowFormInstance {\r\n // ── Public state ────────────────────────────────────────────────────────────\r\n values: Record<string, unknown>;\r\n errors: Record<string, unknown>;\r\n isValid: boolean;\r\n isDirty: boolean;\r\n isSubmitting: boolean;\r\n\r\n // ── Config state (formula chips + condition rows) ────────────────────────\r\n formulaConfig: FormulaConfig;\r\n conditionConfig: ConditionConfig;\r\n\r\n // ── Actions ─────────────────────────────────────────────────────────────────\r\n /** Validate and submit — safe to call from any button outside the form. */\r\n submit: () => void;\r\n reset: (nextValues?: Record<string, unknown>) => void;\r\n setFieldValue: (field: string, value: unknown) => void;\r\n\r\n // ── Internal — consumed only by DynamicFormRenderer / FlowForm ──────────\r\n _schema: FormSchema;\r\n _formik: ReturnType<typeof useFormik<Record<string, unknown>>>;\r\n _formulaConfig: FormulaConfig;\r\n _onFormulaConfigChange: (config: FormulaConfig) => void;\r\n _conditionConfig: ConditionConfig;\r\n _onConditionConfigChange: (config: ConditionConfig) => void;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport function useFlowForm({\r\n schema,\r\n initialValues,\r\n onSubmit,\r\n showErrorsImmediately = false,\r\n}: UseFlowFormOptions): FlowFormInstance {\r\n\r\n // Build Yup schema only when the field array reference actually changes.\r\n // Depending on `schema` (the wrapping object) rebuilt the entire Yup tree\r\n // on every render for hosts that construct schema inline.\r\n const fields = (schema.fields ?? []) as FieldDescriptor[];\r\n const validationSchema = useMemo(\r\n () => buildValidationSchema(fields),\r\n [fields],\r\n );\r\n\r\n // Pre-touch map — marks every field touched so errors show on open (edit mode)\r\n const initialTouched = useMemo(() => {\r\n if (!showErrorsImmediately) return undefined;\r\n return fields.reduce<Record<string, boolean>>((acc, f) => {\r\n const key = resolveFieldKey(f);\r\n if (key) acc[key] = true;\r\n return acc;\r\n }, {});\r\n }, [fields, showErrorsImmediately]);\r\n\r\n const [formulaConfig, setFormulaConfig] = useState<FormulaConfig>({});\r\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>({});\r\n\r\n // When initialValues identity changes (host loaded a different record),\r\n // Formik reinitializes — clear formula/condition config too so leftover\r\n // chip/condition state from the previous record doesn't bleed through.\r\n const initialValuesRef = useRef(initialValues);\r\n useEffect(() => {\r\n if (initialValuesRef.current === initialValues) return;\r\n initialValuesRef.current = initialValues;\r\n setFormulaConfig({});\r\n setConditionConfig({});\r\n }, [initialValues]);\r\n\r\n const formik = useFormik<Record<string, unknown>>({\r\n initialValues,\r\n validationSchema,\r\n initialTouched,\r\n validateOnMount: showErrorsImmediately,\r\n validateOnChange: true,\r\n validateOnBlur: true,\r\n enableReinitialize: true,\r\n onSubmit: async (values) => {\r\n const evaluation = buildEvaluationPayload({ values, conditionConfig });\r\n await onSubmit(values, evaluation);\r\n },\r\n });\r\n\r\n const submit = useCallback(() => {\r\n formik.submitForm();\r\n }, [formik]);\r\n\r\n const reset = useCallback((nextValues?: Record<string, unknown>) => {\r\n formik.resetForm(nextValues ? { values: nextValues } : undefined);\r\n setFormulaConfig({});\r\n setConditionConfig({});\r\n }, [formik]);\r\n\r\n return {\r\n values: formik.values,\r\n errors: formik.errors as Record<string, unknown>,\r\n isValid: formik.isValid,\r\n isDirty: formik.dirty,\r\n isSubmitting: formik.isSubmitting,\r\n\r\n formulaConfig,\r\n conditionConfig,\r\n\r\n submit,\r\n reset,\r\n setFieldValue: formik.setFieldValue,\r\n\r\n // Internals for DynamicFormRenderer\r\n _schema: schema,\r\n _formik: formik,\r\n _formulaConfig: formulaConfig,\r\n _onFormulaConfigChange: setFormulaConfig,\r\n _conditionConfig: conditionConfig,\r\n _onConditionConfigChange: setConditionConfig,\r\n };\r\n}\r\n","import { FlowForgeRegistry } from '../registry';\n\nexport const FIELD_TYPE_OPTIONS: Array<{ value: string; label: string }> = FlowForgeRegistry.getTypeOptions();\n","import { useState } from 'react';\nimport { Box, Collapse, Tooltip } from '@mui/material';\nimport { MdAdd, MdClose, MdCheck } from 'react-icons/md';\nimport type { FieldDescriptor, ConditionFieldDef, FieldConditionDef, FormSchema } from '../types';\nimport { FIELD_TYPE_OPTIONS } from './types';\nimport { FlowForgeRegistry } from '../registry';\nimport { FlowForm } from '../DynamicFormRenderer';\n\n// ─── Shared styles ────────────────────────────────────────────────────────────\n\n/** Use on <input> and <select> elements — matches app's form-control design */\nexport const input = 'form-control font-14';\n\n/** Use as className on <label> elements */\nexport const lbl = 'text-14 text-dark fw-medium mb-1 align-items-center d-flex gap-1';\n\nconst sectionTitle: React.CSSProperties = {\n fontSize: 10, fontWeight: 700, color: '#94a3b8',\n textTransform: 'uppercase', letterSpacing: 0.6,\n marginBottom: 8, display: 'block',\n};\n\n// ─── Array item type options ──────────────────────────────────────────────────\n\nconst ARRAY_ITEM_TYPES = [\n { value: 'text', label: 'Text' },\n { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' },\n { value: 'url', label: 'URL' },\n { value: 'password', label: 'Password' },\n { value: 'select', label: 'Select' },\n { value: 'object', label: 'Object (sub-fields)' },\n { value: 'array', label: 'Array (nested)' },\n];\n\n// ─── ColSpan picker ───────────────────────────────────────────────────────────\n\nconst COL_OPTIONS = [\n { value: 3, label: '1/4' },\n { value: 4, label: '1/3' },\n { value: 6, label: '1/2' },\n { value: 8, label: '2/3' },\n { value: 12, label: 'Full' },\n];\n\nfunction ColSpanPicker({ value, onChange }: { value?: number; onChange: (v: number) => void }) {\n const current = value ?? 12;\n return (\n <Box>\n <span className={lbl}>Column width</span>\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {COL_OPTIONS.map((opt) => (\n <Tooltip key={opt.value} title={`colSpan: ${opt.value}`} placement=\"top\">\n <Box\n component=\"button\"\n onClick={() => onChange(opt.value)}\n sx={{\n flex: 1, border: '1px solid',\n borderColor: current === opt.value ? '#6366f1' : '#dee2e6',\n borderRadius: '6px', cursor: 'pointer',\n bgcolor: current === opt.value ? '#eef2ff' : '#fff',\n color: current === opt.value ? '#6366f1' : '#6c757d',\n fontSize: 11, fontWeight: 600, py: 0.6, px: 0,\n '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' },\n }}\n >\n {opt.label}\n </Box>\n </Tooltip>\n ))}\n </Box>\n <Box sx={{ display: 'flex', gap: '3px', mt: 0.75 }}>\n {Array.from({ length: 12 }).map((_, i) => (\n <Box key={i} sx={{ flex: 1, height: 4, borderRadius: '2px', bgcolor: i < current ? '#6366f1' : '#e2e8f0', transition: 'background 0.12s' }} />\n ))}\n </Box>\n </Box>\n );\n}\n\n// ─── Options editor (for select) ─────────────────────────────────────────────\n\ninterface SelectOption { label: string; value: string }\n\nfunction OptionsEditor({ options = [], onChange }: { options: SelectOption[]; onChange: (o: SelectOption[]) => void }) {\n function update(i: number, key: keyof SelectOption, val: string) {\n onChange(options.map((o, idx) => idx === i ? { ...o, [key]: val } : o));\n }\n return (\n <Box>\n <span className={lbl}>Options <span style={{ color: '#dc3545' }}>*</span></span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {options.map((opt, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input className={input} style={{ flex: 1 }} placeholder=\"Label\" value={opt.label} onChange={(e) => update(i, 'label', e.target.value)} />\n <input className={input} style={{ flex: 1 }} placeholder=\"Value\" value={opt.value} onChange={(e) => update(i, 'value', e.target.value)} />\n <Box component=\"button\" onClick={() => onChange(options.filter((_, idx) => idx !== i))} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n ))}\n </Box>\n <Box component=\"button\" onClick={() => onChange([...options, { label: '', value: '' }])} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n <MdAdd size={13} /> Add option\n </Box>\n </Box>\n );\n}\n\n// ─── Condition builder ────────────────────────────────────────────────────────\n\nconst CONDITION_COL_TYPES = [\n { value: 'operator', label: 'Operator (predefined)' },\n { value: 'select', label: 'Select' },\n { value: 'text', label: 'Text' },\n];\n\nfunction ConditionColEditor({ col, onChange, onDelete }: { col: ConditionFieldDef; onChange: (c: ConditionFieldDef) => void; onDelete: () => void }) {\n const isSelect = col.type === 'select';\n const isOperator = col.type === 'operator';\n return (\n <Box sx={{ border: '1px solid #e2e8f0', borderRadius: '7px', p: 1.25, bgcolor: '#fff', display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <Box sx={{ fontSize: 10, fontWeight: 700, px: 0.75, py: 0.2, borderRadius: '4px', bgcolor: isOperator ? '#fef9c3' : '#eef2ff', color: isOperator ? '#92400e' : '#6366f1', flexShrink: 0 }}>\n {isOperator ? 'OPERATOR' : col.type.toUpperCase()}\n </Box>\n <Box sx={{ fontSize: 12, fontWeight: 600, color: '#0f172a', flex: 1 }}>{col.label || col.id || 'Unnamed'}</Box>\n <Box component=\"button\" onClick={onDelete} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Column type</label>\n <select value={col.type} onChange={(e) => onChange({ ...col, type: e.target.value, options: undefined })} className={input} style={{ cursor: 'pointer' }}>\n {CONDITION_COL_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box>\n <label className={lbl}>Column key <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={`${input} ${!col.id ? 'border-danger' : ''}`} value={col.id} onChange={(e) => onChange({ ...col, id: e.target.value })} placeholder=\"e.g. field, operator, value\" />\n {!col.id && <span style={{ fontSize: 10, color: '#dc3545' }}>Required — used as data key</span>}\n </Box>\n </Box>\n\n {!isOperator && (\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Label</label>\n <input className={input} value={col.label ?? ''} onChange={(e) => onChange({ ...col, label: e.target.value || undefined })} placeholder=\"Column label\" />\n </Box>\n <Box>\n <label className={lbl}>Placeholder</label>\n <input className={input} value={col.placeholder ?? ''} onChange={(e) => onChange({ ...col, placeholder: e.target.value || undefined })} placeholder=\"Hint…\" />\n </Box>\n </Box>\n )}\n\n {isSelect && (\n <OptionsEditor options={(col.options ?? []) as SelectOption[]} onChange={(opts) => onChange({ ...col, options: opts })} />\n )}\n\n {isOperator && (\n <Box sx={{ bgcolor: '#fefce8', border: '1px solid #fef08a', borderRadius: '6px', px: 1.25, py: 0.75 }}>\n <Box sx={{ fontSize: 11, color: '#78350f' }}>Predefined: equals, not equals, contains, starts with, ends with, is present, is not present, greater than, less than…</Box>\n </Box>\n )}\n\n {!isOperator && (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id={`formula-${col.id}`} checked={!!col.formula} onChange={(e) => onChange({ ...col, formula: e.target.checked || undefined })} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <label htmlFor={`formula-${col.id}`} className={lbl} style={{ margin: 0, cursor: 'pointer' }}>Formula input (chip editor)</label>\n </Box>\n )}\n </Box>\n );\n}\n\nfunction ConditionBuilder({ condition, onChange }: { condition: FieldConditionDef | undefined; onChange: (c: FieldConditionDef | undefined) => void }) {\n const enabled = !!condition;\n function toggle() { onChange(enabled ? undefined : { fields: [] }); }\n function addCol(type: string) {\n if (!condition) return;\n const defaultId = type === 'operator' ? 'operator' : condition.fields.filter((f) => f.type !== 'operator').length === 0 ? 'field' : 'value';\n onChange({ ...condition, fields: [...condition.fields, { id: defaultId, type }] });\n }\n function updateCol(i: number, col: ConditionFieldDef) {\n if (!condition) return;\n const next = [...condition.fields]; next[i] = col;\n onChange({ ...condition, fields: next });\n }\n function removeCol(i: number) {\n if (!condition) return;\n onChange({ ...condition, fields: condition.fields.filter((_, idx) => idx !== i) });\n }\n return (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75, mb: enabled ? 1.25 : 0 }}>\n <input type=\"checkbox\" id=\"enable-condition\" checked={enabled} onChange={toggle} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <span style={{ ...sectionTitle, margin: 0, color: enabled ? '#6366f1' : '#94a3b8' }}>Condition row</span>\n </Box>\n {enabled && condition && (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n {condition.fields.map((col, i) => (\n <ConditionColEditor key={i} col={col} onChange={(c) => updateCol(i, c)} onDelete={() => removeCol(i)} />\n ))}\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {CONDITION_COL_TYPES.map((t) => (\n <Box key={t.value} component=\"button\" onClick={() => addCol(t.value)} sx={{ flex: 1, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, py: 0.5, borderRadius: '6px', color: t.value === 'operator' ? '#92400e' : '#6366f1', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n + {t.value === 'operator' ? 'Operator' : t.label.split(' ')[0]}\n </Box>\n ))}\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, flexWrap: 'wrap' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id=\"allow-groups\" checked={!!condition.allowGroups} onChange={(e) => onChange({ ...condition, allowGroups: e.target.checked || undefined })} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <label htmlFor=\"allow-groups\" className={lbl} style={{ margin: 0, cursor: 'pointer' }}>Allow nested groups</label>\n </Box>\n {condition.allowGroups && (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <label className={lbl} style={{ margin: 0 }}>Max depth</label>\n <input type=\"number\" min={1} max={5} className={input} style={{ width: 60, textAlign: 'center' }} value={condition.maxGroupDepth ?? ''} onChange={(e) => onChange({ ...condition, maxGroupDepth: e.target.value ? Number(e.target.value) : undefined })} placeholder=\"∞\" />\n </Box>\n )}\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n\n// ─── CheckRow ─────────────────────────────────────────────────────────────────\n\nfunction CheckRow({ id, label, checked, onChange }: { id: string; label: string; checked: boolean; onChange: (v: boolean) => void }) {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id={id} checked={checked} onChange={(e) => onChange(e.target.checked)} style={{ cursor: 'pointer', width: 14, height: 14, flexShrink: 0 }} />\n <label htmlFor={id} className={lbl} style={{ margin: 0, cursor: 'pointer' }}>{label}</label>\n </Box>\n );\n}\n\n// ─── Tabs views editor ────────────────────────────────────────────────────────\n\ninterface TabView { id: string; label: string }\n\nfunction TabsViewsEditor({ views = [], onChange }: { views: TabView[]; onChange: (v: TabView[]) => void }) {\n function update(i: number, key: keyof TabView, val: string) {\n onChange(views.map((v, idx) => idx === i ? { ...v, [key]: val } : v));\n }\n function add() {\n const id = `tab${views.length + 1}`;\n onChange([...views, { id, label: `Tab ${views.length + 1}` }]);\n }\n return (\n <Box>\n <span className={lbl}>Views</span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {views.map((view, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input className={input} style={{ flex: 1 }} placeholder=\"Label\" value={view.label} onChange={e => update(i, 'label', e.target.value)} />\n <input className={input} style={{ flex: 1 }} placeholder=\"ID (no spaces)\" value={view.id} onChange={e => update(i, 'id', e.target.value.replace(/\\s/g, '_'))} />\n <Box component=\"button\" onClick={() => onChange(views.filter((_, idx) => idx !== i))} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n ))}\n </Box>\n <Box component=\"button\" onClick={add} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n <MdAdd size={13} /> Add view\n </Box>\n </Box>\n );\n}\n\n// ─── Button group picker ──────────────────────────────────────────────────────\n\nfunction ButtonGroup({ label: groupLabel, value, options, onChange }: {\n label: string;\n value: string;\n options: { value: string; label: string }[];\n onChange: (v: string) => void;\n}) {\n return (\n <Box>\n <span className={lbl}>{groupLabel}</span>\n <Box sx={{ display: 'flex', border: '1px solid #dee2e6', borderRadius: '7px', overflow: 'hidden' }}>\n {options.map(opt => (\n <Box\n key={opt.value}\n component=\"button\"\n onClick={() => onChange(opt.value)}\n sx={{\n flex: 1, border: 'none', borderRight: '1px solid #dee2e6', cursor: 'pointer',\n fontSize: 12, fontWeight: 600, py: 0.6,\n bgcolor: value === opt.value ? '#eef2ff' : '#fff',\n color: value === opt.value ? '#6366f1' : '#6c757d',\n '&:last-child': { borderRight: 'none' },\n '&:hover': { bgcolor: '#f5f3ff' },\n }}\n >\n {opt.label}\n </Box>\n ))}\n </Box>\n </Box>\n );\n}\n\n// ─── Main export ──────────────────────────────────────────────────────────────\n\ninterface FieldConfigPanelProps {\n field: FieldDescriptor;\n onChange: (updated: FieldDescriptor) => void;\n onSave: () => void;\n onCancel: () => void;\n noFooter?: boolean;\n}\n\nexport function FieldConfigPanel({ field, onChange, onSave, onCancel, noFooter }: FieldConfigPanelProps) {\n const [showAdvanced, setShowAdvanced] = useState(false);\n const fieldKey = field.id ?? field.name ?? '';\n const ext = field as Record<string, any>;\n const isOptionsField = field.type === 'select' || field.type === 'descriptive-select' || field.type === 'radio-group';\n\n const customRegistryDef = FlowForgeRegistry.get(field.type);\n const customConfigSchema = customRegistryDef?.configSchema;\n\n function set<K extends keyof FieldDescriptor>(key: K, value: FieldDescriptor[K]) {\n onChange({ ...field, [key]: value });\n }\n\n return (\n <>\n {/* Scrollable body */}\n <Box sx={{ flex: 1, overflowY: 'auto', px: 2.5, py: 2, display: 'flex', flexDirection: 'column', gap: 1.75 }}>\n\n {/* REQUIRED */}\n <Box>\n <span style={sectionTitle}>Required</span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Box>\n <label className={lbl}>Type</label>\n <select value={field.type} onChange={(e) => set('type', e.target.value)} className={input} style={{ cursor: 'pointer' }}>\n {FIELD_TYPE_OPTIONS.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: field.type === 'tabs' ? '1fr' : '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Field ID <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={input} value={field.id ?? field.name ?? ''} onChange={(e) => set('id', e.target.value)} placeholder=\"e.g. email\" />\n </Box>\n {field.type !== 'tabs' && (\n <Box>\n <label className={lbl}>Label <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={input} value={(field.label as string) ?? ''} onChange={(e) => set('label', e.target.value)} placeholder=\"Display label\" />\n </Box>\n )}\n </Box>\n {field.type !== 'tabs' && (\n <ColSpanPicker value={field.colSpan as number | undefined} onChange={(v) => set('colSpan', v === 12 ? undefined : v)} />\n )}\n </Box>\n </Box>\n\n {/* CUSTOM REGISTRY SCHEMA (Self-Building form config) */}\n {customConfigSchema && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <span style={sectionTitle}>Specific Settings</span>\n <FlowForm\n schema={{ layout: 'flat', compact: true, fields: customConfigSchema.fields }}\n initialValues={field as any}\n onValuesChange={(vals) => onChange({ ...field, ...vals } as FieldDescriptor)}\n onSubmit={() => { }}\n />\n </Box>\n )}\n\n {/* TYPE-SPECIFIC — Tabs config */}\n {field.type === 'tabs' && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5, display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n {/* Content */}\n <span style={sectionTitle}>Content</span>\n <TabsViewsEditor\n views={(ext.tabs ?? []).map((t: any) => ({ id: t.id, label: t.label }))}\n onChange={newViews => {\n const existing: any[] = ext.tabs ?? [];\n const merged = newViews.map(v => {\n const prev = existing.find((e: any) => e.id === v.id);\n return prev ? { ...prev, ...v } : { ...v, fields: [] };\n });\n onChange({ ...field, tabs: merged } as FieldDescriptor);\n }}\n />\n\n {/* Interaction */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Interaction</span>\n <Box>\n <label className={lbl}>Disabled</label>\n <input className={input} value={ext.disabledExpr ?? ''} onChange={e => onChange({ ...field, disabledExpr: e.target.value || undefined } as FieldDescriptor)} placeholder=\"false\" />\n </Box>\n\n {/* Appearance */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Appearance</span>\n <ButtonGroup\n label=\"Alignment\"\n value={ext.alignment ?? 'left'}\n options={[\n { value: 'left', label: '|←' },\n { value: 'center-left', label: '←|' },\n { value: 'center', label: '|·|' },\n { value: 'center-right', label: '|→' },\n { value: 'right', label: '→|' },\n ]}\n onChange={v => onChange({ ...field, alignment: v } as FieldDescriptor)}\n />\n <Box>\n <label className={lbl}>Hidden</label>\n <input className={input} value={ext.hiddenExpr ?? ''} onChange={e => onChange({ ...field, hiddenExpr: e.target.value || undefined } as FieldDescriptor)} placeholder=\"false\" />\n </Box>\n <ButtonGroup\n label=\"Variant\"\n value={ext.variant ?? 'line'}\n options={[{ value: 'pill', label: 'Pill' }, { value: 'line', label: 'Line' }]}\n onChange={v => onChange({ ...field, variant: v } as FieldDescriptor)}\n />\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Active color</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.activeColor ?? '#6366f1'} onChange={e => onChange({ ...field, activeColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.activeColor ?? ''} onChange={e => onChange({ ...field, activeColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"#6366f1\" style={{ flex: 1 }} />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Active text</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.activeTextColor ?? '#ffffff'} onChange={e => onChange({ ...field, activeTextColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.activeTextColor ?? ''} onChange={e => onChange({ ...field, activeTextColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"auto\" style={{ flex: 1 }} />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Inactive text</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.inactiveTextColor ?? '#64748b'} onChange={e => onChange({ ...field, inactiveTextColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.inactiveTextColor ?? ''} onChange={e => onChange({ ...field, inactiveTextColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"#64748b\" style={{ flex: 1 }} />\n </Box>\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Styles</label>\n <input className={input} value={ext.styles ?? ''} onChange={e => onChange({ ...field, styles: e.target.value || undefined } as FieldDescriptor)} placeholder=\"None\" />\n </Box>\n\n {/* Spacing */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Spacing</span>\n <ButtonGroup\n label=\"Height\"\n value={ext.height ?? 'auto'}\n options={[{ value: 'auto', label: 'Auto' }, { value: 'fixed', label: 'Fixed' }]}\n onChange={v => onChange({ ...field, height: v } as FieldDescriptor)}\n />\n <ButtonGroup\n label=\"Margin\"\n value={ext.margin ?? 'normal'}\n options={[{ value: 'normal', label: 'Normal' }, { value: 'none', label: 'None' }]}\n onChange={v => onChange({ ...field, margin: v } as FieldDescriptor)}\n />\n </Box>\n )}\n\n {/* TYPE-SPECIFIC — Select/Radio Options */}\n {isOptionsField && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <span style={sectionTitle}>Options</span>\n <OptionsEditor options={(ext.options ?? []) as SelectOption[]} onChange={(opts) => onChange({ ...field, options: opts } as FieldDescriptor)} />\n </Box>\n )}\n\n\n {/* TYPE-SPECIFIC — Array (flat settings only; child fields configured in next step) */}\n {field.type === 'array' && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5, display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={sectionTitle}>Array settings</span>\n <Box>\n <label className={lbl}>Item type</label>\n <select className={input} style={{ cursor: 'pointer' }} value={ext.itemType ?? 'text'} onChange={(e) => onChange({ ...field, itemType: e.target.value } as FieldDescriptor)}>\n {ARRAY_ITEM_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Item label</label>\n <input className={input} value={ext.itemLabel ?? ''} onChange={(e) => onChange({ ...field, itemLabel: e.target.value || undefined } as FieldDescriptor)} placeholder='e.g. \"Member\"' />\n </Box>\n <Box>\n <label className={lbl}>Add button label</label>\n <input className={input} value={ext.addLabel ?? ''} onChange={(e) => onChange({ ...field, addLabel: e.target.value || undefined } as FieldDescriptor)} placeholder=\"Add item\" />\n </Box>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Min items</label>\n <input type=\"number\" min={0} className={input} value={ext.minItems ?? ''} onChange={(e) => onChange({ ...field, minItems: e.target.value ? Number(e.target.value) : undefined } as FieldDescriptor)} placeholder=\"0\" />\n </Box>\n <Box>\n <label className={lbl}>Max items</label>\n <input type=\"number\" min={1} className={input} value={ext.maxItems ?? ''} onChange={(e) => onChange({ ...field, maxItems: e.target.value ? Number(e.target.value) : undefined } as FieldDescriptor)} placeholder=\"∞\" />\n </Box>\n </Box>\n {!['object', 'array', 'select'].includes(ext.itemType ?? 'text') && (\n <Box>\n <label className={lbl}>Item placeholder</label>\n <input className={input} value={ext.itemPlaceholder ?? ''} onChange={(e) => onChange({ ...field, itemPlaceholder: e.target.value || undefined } as FieldDescriptor)} placeholder=\"Enter value…\" />\n </Box>\n )}\n </Box>\n )}\n\n {/* CONDITION */}\n <ConditionBuilder\n condition={field.condition as FieldConditionDef | undefined}\n onChange={(c) => onChange({ ...field, condition: c })}\n />\n\n {/* OPTIONAL */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <Box component=\"button\" onClick={() => setShowAdvanced((v) => !v)} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 0.5, p: 0, mb: showAdvanced ? 1.25 : 0 }}>\n <span style={{ ...sectionTitle, margin: 0, color: showAdvanced ? '#6366f1' : '#94a3b8' }}>\n {showAdvanced ? '▾' : '▸'} Optional settings\n </span>\n </Box>\n <Collapse in={showAdvanced}>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.25 }}>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Placeholder</label>\n <input className={input} value={(field.placeholder as string) ?? ''} onChange={(e) => set('placeholder', e.target.value || undefined)} placeholder=\"Hint text…\" />\n </Box>\n <Box>\n <label className={lbl}>Helper text</label>\n <input className={input} value={(field.helperText as string) ?? ''} onChange={(e) => set('helperText', e.target.value || undefined)} placeholder=\"Description…\" />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Info tooltip</label>\n <input className={input} value={(field.info as string) ?? ''} onChange={(e) => set('info', e.target.value || undefined)} placeholder=\"Shown in ℹ tooltip\" />\n </Box>\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1.5 }}>\n <CheckRow id={`${fieldKey}-req`} label=\"Required\" checked={!!field.required} onChange={(v) => set('required', v || undefined)} />\n <CheckRow id={`${fieldKey}-dis`} label=\"Disabled\" checked={!!field.disabled} onChange={(v) => set('disabled', v || undefined)} />\n <CheckRow id={`${fieldKey}-hid`} label=\"Hidden\" checked={!!field.hidden} onChange={(v) => set('hidden', v || undefined)} />\n <CheckRow id={`${fieldKey}-opt`} label=\"Show optional\" checked={!!field.showOptional} onChange={(v) => set('showOptional', v || undefined)} />\n <CheckRow id={`${fieldKey}-div`} label=\"Divider after\" checked={!!field.dividerAfter} onChange={(v) => set('dividerAfter', v || undefined)} />\n <CheckRow id={`${fieldKey}-frm`} label=\"Formula input\" checked={!!field.formula} onChange={(v) => set('formula', v || undefined)} />\n </Box>\n </Box>\n </Collapse>\n </Box>\n </Box>\n\n {/* Footer */}\n {!noFooter && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', gap: 1, justifyContent: 'flex-end', bgcolor: '#f8fafc', flexShrink: 0 }}>\n <Box component=\"button\" onClick={onCancel} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={onSave} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Save\n </Box>\n </Box>\n )}\n </>\n );\n}\n","// Shared design tokens for FlowForm field components.\n// Keep values in sync with the MUI theme when one is provided.\n\nexport const COLOR = {\n text: '#0f172a',\n textMuted: '#64748b',\n textLight: '#94a3b8',\n textPlaceholder: '#9ca3af',\n border: '#e2e8f0',\n borderHover: '#cbd5e1',\n borderFocus: '#6366f1',\n borderError: '#ef4444',\n borderInput: 'rgba(0,0,0,0.23)',\n accent: '#6366f1',\n accentHover: '#4f46e5',\n accentLight: '#f5f3ff',\n accentMuted: '#c7d2fe',\n error: '#ef4444',\n errorBg: '#fef2f2',\n success: '#15803d',\n successBg: '#f0fdf4',\n bg: '#ffffff',\n bgMuted: '#f8fafc',\n bgSubtle: '#f1f5f9',\n} as const;\n\nexport const RADIUS = {\n sm: '4px',\n md: '6px',\n lg: '8px',\n xl: '10px',\n xxl: '12px',\n} as const;\n\nexport const FONT_SIZE = {\n xs: 10,\n sm: 11,\n base: 12,\n md: 13,\n lg: 14,\n} as const;\n\nexport const SHADOW = {\n focusRing: `0 0 0 3px rgba(99,102,241,0.15)`,\n card: '0 1px 2px rgba(15,23,42,0.04)',\n} as const;\n\n/** Standard input sx props — apply as a base and override as needed */\nexport const INPUT_SX = {\n width: '100%',\n fontSize: FONT_SIZE.md,\n fontFamily: 'inherit',\n padding: '8px 12px',\n border: `1px solid ${COLOR.borderInput}`,\n borderRadius: RADIUS.md,\n outline: 'none',\n background: COLOR.bg,\n color: COLOR.text,\n boxSizing: 'border-box' as const,\n transition: 'border-color 0.15s, box-shadow 0.15s',\n};\n","import { useState } from 'react';\nimport { Dialog, Box, Typography, IconButton, Stepper, Step, StepLabel } from '@mui/material';\nimport { MdClose, MdArrowBack, MdCheck } from 'react-icons/md';\nimport { FieldConfigPanel } from './FieldConfigPanel';\nimport { SchemaBuilder } from './SchemaBuilder';\nimport { FlowForm } from '../DynamicFormRenderer';\nimport type { FieldDescriptor } from '../types';\nimport type { ConditionConfig } from '../types/formula';\nimport { COLOR, FONT_SIZE, INPUT_SX } from '../styles/constants';\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction defaultField(): FieldDescriptor {\n return { type: 'text', id: '', label: '', colSpan: 12 } as FieldDescriptor;\n}\n\n/** Returns true when the field type needs a \"Child fields\" config step */\nfunction needsChildStep(field: FieldDescriptor): boolean {\n return field.type === 'object' || field.type === 'array' || field.type === 'schema';\n}\n\nfunction childStepLabel(field: FieldDescriptor): string {\n if (field.type === 'object') return 'Child Fields';\n if (field.type === 'schema') return 'Schema Fields';\n const itemType = (field as any).itemType ?? 'text';\n if (itemType === 'object') return 'Item Fields';\n if (itemType === 'select') return 'Item Options';\n return 'Item Config';\n}\n\n// ─── Step 2 body: child fields / item config ──────────────────────────────────\n\nfunction ChildFieldsStep({ field, onChange }: { field: FieldDescriptor; onChange: (f: FieldDescriptor) => void }) {\n const ext = field as Record<string, any>;\n const itemType = ext.itemType ?? 'text';\n\n if (field.type === 'object') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields nested inside this object. Each child field can itself be an object or array.\n </Typography>\n <SchemaBuilder\n value={(field.children ?? []) as FieldDescriptor[]}\n onChange={(children) => onChange({ ...field, children })}\n label=\"Child fields\"\n />\n </Box>\n );\n }\n\n if (field.type === 'schema') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields inside this schema. When the form is filled, their values are collected into a single object as this field's value.\n </Typography>\n <SchemaBuilder\n value={(field.children ?? []) as FieldDescriptor[]}\n onChange={(children) => onChange({ ...field, children })}\n label=\"Schema fields\"\n />\n </Box>\n );\n }\n\n // Array — content varies by itemType\n if (field.type === 'array') {\n if (itemType === 'object') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields for each item in the array. Each item will be an object with these fields.\n </Typography>\n <SchemaBuilder\n value={(ext.itemFields ?? []) as FieldDescriptor[]}\n onChange={(itemFields) => onChange({ ...field, itemFields } as FieldDescriptor)}\n label=\"Item fields\"\n />\n </Box>\n );\n }\n\n if (itemType === 'select') {\n const opts = (ext.itemOptions ?? []) as { label: string; value: string }[];\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Options available in each select item.\n </Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {opts.map((opt, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input\n style={{ ...INPUT_SX, flex: 1, padding: '6px 10px' }}\n placeholder=\"Label\"\n value={opt.label}\n onChange={(e) => {\n const next = opts.map((o, idx) => idx === i ? { ...o, label: e.target.value } : o);\n onChange({ ...field, itemOptions: next } as FieldDescriptor);\n }}\n />\n <input\n style={{ ...INPUT_SX, flex: 1, padding: '6px 10px' }}\n placeholder=\"Value\"\n value={opt.value}\n onChange={(e) => {\n const next = opts.map((o, idx) => idx === i ? { ...o, value: e.target.value } : o);\n onChange({ ...field, itemOptions: next } as FieldDescriptor);\n }}\n />\n <Box\n component=\"button\"\n onClick={() => onChange({ ...field, itemOptions: opts.filter((_, idx) => idx !== i) } as FieldDescriptor)}\n sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}\n >\n ✕\n </Box>\n </Box>\n ))}\n </Box>\n <Box\n component=\"button\"\n onClick={() => onChange({ ...field, itemOptions: [...opts, { label: '', value: '' }] } as FieldDescriptor)}\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', justifyContent: 'center', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}\n >\n + Add option\n </Box>\n </Box>\n );\n }\n\n if (itemType === 'array') {\n const nestedItemType = ext.itemSchema?.itemType ?? 'text';\n const PRIMITIVE_TYPES = [\n { value: 'text', label: 'Text' }, { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' }, { value: 'url', label: 'URL' },\n { value: 'password', label: 'Password' }, { value: 'select', label: 'Select' }, { value: 'object', label: 'Object' },\n ];\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Each item is itself an array. Configure the type of items inside the nested array.\n </Typography>\n <label style={{ fontSize: FONT_SIZE.sm, fontWeight: 600, color: COLOR.textMuted, display: 'block', marginBottom: 3 }}>Nested item type</label>\n <select\n style={{ ...INPUT_SX, padding: '6px 10px', cursor: 'pointer' }}\n value={nestedItemType}\n onChange={(e) => onChange({ ...field, itemSchema: { ...(ext.itemSchema ?? {}), itemType: e.target.value } } as FieldDescriptor)}\n >\n {PRIMITIVE_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n );\n }\n\n // Primitive itemType — nothing extra to configure\n return (\n <Box sx={{ p: 2.5 }}>\n <Box sx={{ border: '1.5px dashed #e2e8f0', borderRadius: '8px', py: 3, textAlign: 'center' }}>\n <Typography sx={{ fontSize: 13, color: '#94a3b8' }}>\n No extra configuration needed for <strong>{itemType}</strong> items.\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#cbd5e1', mt: 0.5 }}>\n Item placeholder and labels are set in the previous step.\n </Typography>\n </Box>\n </Box>\n );\n }\n\n return null;\n}\n\n// ─── Preview using real FlowForm ──────────────────────────────────────────────\n\nfunction FieldPreview({ field }: { field: FieldDescriptor }) {\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>({});\n const key = field.id ?? field.name ?? 'preview';\n const COL_OPTIONS = [\n { value: 3, label: '1/4' }, { value: 4, label: '1/3' },\n { value: 6, label: '1/2' }, { value: 8, label: '2/3' }, { value: 12, label: 'Full' },\n ];\n const colLabel = field.colSpan && field.colSpan < 12\n ? COL_OPTIONS.find((c) => c.value === field.colSpan)?.label ?? field.colSpan\n : 'Full';\n\n return (\n <Box sx={{ p: 2.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 2, px: 1.25, py: 0.75, bgcolor: '#f0fdf4', border: '1px solid #bbf7d0', borderRadius: '7px' }}>\n <Typography sx={{ fontSize: 11, color: '#15803d', fontWeight: 500, flex: 1 }}>\n Live preview — interact to test the field\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#64748b' }}>Width: {colLabel}</Typography>\n </Box>\n <FlowForm\n schema={{ layout: 'flat', fields: [field] }}\n initialValues={{ [key]: field.type === 'array' ? [] : (field.type === 'object' || field.type === 'schema') ? {} : '' }}\n onSubmit={() => {}}\n conditionConfig={conditionConfig}\n onConditionConfigChange={setConditionConfig}\n />\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface AddFieldModalProps {\n open: boolean;\n initial?: FieldDescriptor;\n onSave: (field: FieldDescriptor) => void;\n onClose: () => void;\n editMode?: boolean;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function AddFieldModal({ open, initial, onSave, onClose, editMode = false }: AddFieldModalProps) {\n const [step, setStep] = useState(1);\n const [draft, setDraft] = useState<FieldDescriptor>(() => initial ?? defaultField());\n\n function handleOpen() {\n setDraft(initial ?? defaultField());\n setStep(1);\n }\n\n const hasChild = needsChildStep(draft);\n const totalSteps = hasChild ? 3 : 2;\n\n // Step labels\n const stepLabels = hasChild\n ? ['Configure', childStepLabel(draft), 'Preview']\n : ['Configure', 'Preview'];\n\n const canNext = !!(draft.id || (draft as any).name) && !!draft.type;\n\n function goNext() { setStep((s) => Math.min(s + 1, totalSteps)); }\n function goBack() { setStep((s) => Math.max(s - 1, 1)); }\n\n function handleSave() { onSave(draft); onClose(); }\n\n // Map logical step to display step index (0-based for MUI Stepper)\n const activeStepIdx = step - 1;\n const isLastStep = step === totalSteps;\n const isPreview = (hasChild && step === 3) || (!hasChild && step === 2);\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n TransitionProps={{ onEnter: handleOpen }}\n maxWidth=\"sm\"\n fullWidth\n PaperProps={{ sx: { borderRadius: '12px', overflow: 'hidden', display: 'flex', flexDirection: 'column', maxHeight: '90vh' } }}\n >\n {/* Header */}\n <Box sx={{ px: 2.5, pt: 1.75, pb: 0, borderBottom: '1px solid #e2e8f0', flexShrink: 0 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 1.5 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a', flex: 1 }}>\n {editMode ? 'Edit Field' : 'Add Field'}\n </Typography>\n <IconButton size=\"small\" onClick={onClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Box>\n <Stepper activeStep={activeStepIdx} sx={{ pb: 1.5 }}>\n {stepLabels.map((label, i) => (\n <Step key={label} completed={activeStepIdx > i}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n </Box>\n\n {/* Body */}\n <Box sx={{ flex: 1, overflowY: 'auto' }}>\n {step === 1 && (\n <FieldConfigPanel field={draft} onChange={setDraft} onSave={goNext} onCancel={onClose} noFooter />\n )}\n {step === 2 && hasChild && (\n <ChildFieldsStep field={draft} onChange={setDraft} />\n )}\n {isPreview && (\n <FieldPreview field={draft} />\n )}\n </Box>\n\n {/* Footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {step > 1 && (\n <Box component=\"button\" onClick={goBack} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 500, color: '#6c757d', px: 0, '&:hover': { color: '#0f172a' } }}>\n <MdArrowBack size={14} /> Back\n </Box>\n )}\n <Box sx={{ flex: 1 }} />\n <Box component=\"button\" onClick={onClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n {isLastStep ? (\n <Box component=\"button\" onClick={handleSave} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> {editMode ? 'Save changes' : 'Add field'}\n </Box>\n ) : (\n <Box component=\"button\" onClick={goNext} disabled={!canNext} sx={{ border: 'none', cursor: canNext ? 'pointer' : 'not-allowed', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: canNext ? '#6366f1' : '#c7d2fe', color: '#fff', '&:hover': { bgcolor: canNext ? '#4f46e5' : '#c7d2fe' } }}>\n Next →\n </Box>\n )}\n </Box>\n </Dialog>\n );\n}\n","import { useState } from 'react';\nimport { Dialog, Box, Typography, IconButton, Tooltip } from '@mui/material';\nimport { MdClose, MdDeleteOutline, MdEdit, MdDragIndicator, MdCheck } from 'react-icons/md';\nimport { AddFieldModal } from './AddFieldModal';\nimport type { FieldDescriptor } from '../types';\n\n// ─── Field row in list ────────────────────────────────────────────────────────\n\ninterface ListRowProps {\n field: FieldDescriptor;\n index: number;\n total: number;\n onEdit: () => void;\n onDelete: () => void;\n onMoveUp: () => void;\n onMoveDown: () => void;\n}\n\nfunction ListRow({ field, index, total, onEdit, onDelete, onMoveUp, onMoveDown }: ListRowProps) {\n const label = (field.label as string) || field.id || field.name || 'Untitled';\n const key = field.id ?? field.name ?? '';\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, px: 1.5, py: 1, border: '1px solid #e2e8f0', borderRadius: '8px', bgcolor: '#fff' }}>\n {/* Drag handle / move buttons */}\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.25, color: '#cbd5e1' }}>\n <Box component=\"button\" onClick={onMoveUp} disabled={index === 0} sx={{ background: 'none', border: 'none', p: 0, cursor: index === 0 ? 'default' : 'pointer', color: index === 0 ? '#e2e8f0' : '#94a3b8', lineHeight: 1, fontSize: 10, '&:hover': { color: index === 0 ? '#e2e8f0' : '#475569' } }}>▲</Box>\n <Box component=\"button\" onClick={onMoveDown} disabled={index === total - 1} sx={{ background: 'none', border: 'none', p: 0, cursor: index === total - 1 ? 'default' : 'pointer', color: index === total - 1 ? '#e2e8f0' : '#94a3b8', lineHeight: 1, fontSize: 10, '&:hover': { color: index === total - 1 ? '#e2e8f0' : '#475569' } }}>▼</Box>\n </Box>\n\n <Box sx={{ fontSize: 10, fontWeight: 700, px: 0.75, py: 0.2, borderRadius: '4px', bgcolor: '#eef2ff', color: '#6366f1', flexShrink: 0 }}>\n {field.type}\n </Box>\n\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Typography sx={{ fontSize: 13, fontWeight: 600, color: '#0f172a', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {label}\n {field.required && <Box component=\"span\" sx={{ color: '#dc3545', ml: 0.25 }}>*</Box>}\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8', fontFamily: 'monospace' }}>{key}</Typography>\n </Box>\n\n <Tooltip title=\"Edit field\" placement=\"top\">\n <Box component=\"button\" onClick={onEdit} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', width: 28, height: 28, borderRadius: '6px', p: 0, color: '#94a3b8', '&:hover': { bgcolor: '#f1f5f9', color: '#475569' } }}>\n <MdEdit size={14} />\n </Box>\n </Tooltip>\n <Tooltip title=\"Remove field\" placement=\"top\">\n <Box component=\"button\" onClick={onDelete} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', width: 28, height: 28, borderRadius: '6px', p: 0, color: '#94a3b8', '&:hover': { bgcolor: '#fee2e2', color: '#dc2626' } }}>\n <MdDeleteOutline size={16} />\n </Box>\n </Tooltip>\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface EditSchemaModalProps {\n open: boolean;\n value: FieldDescriptor[];\n onSave: (fields: FieldDescriptor[]) => void;\n onClose: () => void;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function EditSchemaModal({ open, value, onSave, onClose }: EditSchemaModalProps) {\n const [draft, setDraft] = useState<FieldDescriptor[]>(value);\n const [editingIdx, setEditingIdx] = useState<number | null>(null);\n\n function handleOpen() { setDraft(value); setEditingIdx(null); }\n\n function handleDelete(i: number) { setDraft((d) => d.filter((_, idx) => idx !== i)); }\n\n function handleMove(i: number, dir: -1 | 1) {\n setDraft((d) => {\n const next = [...d];\n const j = i + dir;\n if (j < 0 || j >= next.length) return d;\n [next[i], next[j]] = [next[j], next[i]];\n return next;\n });\n }\n\n function handleSaveField(updated: FieldDescriptor) {\n if (editingIdx === null) return;\n setDraft((d) => { const next = [...d]; next[editingIdx] = updated; return next; });\n setEditingIdx(null);\n }\n\n function handleDone() { onSave(draft); onClose(); }\n\n const hasChanges = JSON.stringify(draft) !== JSON.stringify(value);\n\n return (\n <>\n <Dialog\n open={open}\n onClose={onClose}\n TransitionProps={{ onEnter: handleOpen }}\n maxWidth=\"sm\"\n fullWidth\n PaperProps={{ sx: { borderRadius: '12px', overflow: 'hidden', display: 'flex', flexDirection: 'column', maxHeight: '85vh' } }}\n >\n {/* Header */}\n <Box sx={{ display: 'flex', alignItems: 'center', px: 2.5, py: 1.75, borderBottom: '1px solid #e2e8f0', flexShrink: 0 }}>\n <Box sx={{ flex: 1 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a' }}>Edit Schema</Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8' }}>{draft.length} field{draft.length !== 1 ? 's' : ''} defined</Typography>\n </Box>\n <IconButton size=\"small\" onClick={onClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Box>\n\n {/* Body */}\n <Box sx={{ flex: 1, overflowY: 'auto', p: 2.5 }}>\n {draft.length === 0 ? (\n <Box sx={{ border: '1.5px dashed rgba(0,0,0,0.12)', borderRadius: '8px', py: 4, textAlign: 'center' }}>\n <Typography sx={{ fontSize: 13, color: '#94a3b8' }}>No fields defined yet</Typography>\n </Box>\n ) : (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.75 }}>\n {draft.map((field, i) => (\n <ListRow\n key={`${field.id ?? field.name}-${i}`}\n field={field}\n index={i}\n total={draft.length}\n onEdit={() => setEditingIdx(i)}\n onDelete={() => handleDelete(i)}\n onMoveUp={() => handleMove(i, -1)}\n onMoveDown={() => handleMove(i, 1)}\n />\n ))}\n </Box>\n )}\n </Box>\n\n {/* Footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {hasChanges\n ? <Typography sx={{ fontSize: 11, color: '#f59e0b', fontWeight: 500, flex: 1 }}>Unsaved changes</Typography>\n : <Box sx={{ flex: 1 }} />\n }\n <Box component=\"button\" onClick={onClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={handleDone} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Done\n </Box>\n </Box>\n </Dialog>\n\n {/* Edit field modal (nested) */}\n {editingIdx !== null && (\n <AddFieldModal\n open={editingIdx !== null}\n initial={draft[editingIdx]}\n onSave={handleSaveField}\n onClose={() => setEditingIdx(null)}\n editMode\n />\n )}\n </>\n );\n}\n","import { useState, useCallback, useMemo, useEffect, useRef } from 'react';\nimport { Tooltip } from '@mui/material';\nimport { MdAdd, MdSettings, MdAccountTree } from 'react-icons/md';\nimport { FaWpforms } from \"react-icons/fa6\";\nimport { AddFieldModal } from './AddFieldModal';\nimport { EditSchemaModal } from './EditSchemaModal';\nimport { FlowForm } from '../DynamicFormRenderer';\nimport { buildValidationSchema } from './buildValidationSchema';\nimport { buildEvaluationPayload, serializeConditionExpressions } from '../DynamicFormRenderer/formulaUtils';\nimport type { FieldSuggestion } from './AddFieldPanel';\nimport type { FieldDescriptor } from '../types';\nimport type { FormulaConfig, ConditionConfig } from '../types/formula';\nimport { VariablePickerProvider, type VariableGroup } from '../VariablePicker/VariablePickerContext';\nimport { VariablePicker } from '../VariablePicker/VariablePicker';\nimport { TabsEditContext } from './TabsEditContext';\n\nimport './SchemaBuilder.css';\n\nfunction buildInitialValues(fields: FieldDescriptor[]): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const f of fields) {\n const key = f.id ?? f.name ?? '';\n if (!key) continue;\n if (f.type === 'array') {\n result[key] = [];\n } else if (f.type === 'object' || f.type === 'schema') {\n result[key] = buildInitialValues((f.children ?? []) as FieldDescriptor[]);\n } else {\n result[key] = '';\n }\n }\n return result;\n}\n\nexport type { FieldSuggestion };\n\n// ─── Payload shape ────────────────────────────────────────────────────────────\n\nexport interface SchemaBuilderPayload {\n /** The FieldDescriptor[] schema — save this to DB to restore the editor */\n schema: FieldDescriptor[];\n /** Formula AST per field — part of editor state */\n formulaConfig: FormulaConfig;\n /** Condition rows per field — part of editor state */\n conditionConfig: ConditionConfig;\n /** Serialized condition expression string per field — ready for backend rule engine */\n conditionExpressions: Record<string, string>;\n /** Live form values entered by the user */\n values: Record<string, unknown>;\n /** Backend-ready evaluation payload (formulas resolved against values) */\n evaluationPayload: ReturnType<typeof buildEvaluationPayload>;\n}\n\nexport interface SchemaBuilderProps {\n value: FieldDescriptor[];\n onChange: (fields: FieldDescriptor[]) => void;\n suggestions?: FieldSuggestion[];\n label?: string;\n /** Fires on every change: schema edit, value input, formula/condition update */\n onPayload?: (payload: SchemaBuilderPayload) => void;\n /** Whether to auto-validate required fields (shows inline error messages) */\n validate?: boolean;\n /** Called whenever form validity changes — wire to enable/disable your Save button */\n onValidityChange?: (isValid: boolean) => void;\n /** Optional variable groups to seamlessly enable the Variable Picker for formula fields */\n variableGroups?: VariableGroup[];\n /** Saved form values to restore when reopening — keys match field ids */\n initialValues?: Record<string, unknown>;\n /** Saved formula config to restore when reopening */\n initialFormulaConfig?: FormulaConfig;\n /** Saved condition config to restore when reopening */\n initialConditionConfig?: ConditionConfig;\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function SchemaBuilder({\n value, onChange, suggestions, label = 'Fields',\n onPayload, validate = true, onValidityChange, variableGroups,\n initialValues: initialValuesProp,\n initialFormulaConfig,\n initialConditionConfig,\n}: SchemaBuilderProps) {\n const [addOpen, setAddOpen] = useState(false);\n const [editOpen, setEditOpen] = useState(false);\n\n // Add-field-to-tab state (used when TabsField's \"+\" button is clicked inside the preview)\n const [tabAddTarget, setTabAddTarget] = useState<{ containerFieldId: string; tabId: string } | null>(null);\n const [formulaConfig, setFormulaConfig] = useState<FormulaConfig>(initialFormulaConfig ?? {});\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>(initialConditionConfig ?? {});\n\n // Keep a ref to the latest form values so the config-change effect can include them\n const latestValues = useRef<Record<string, unknown>>(initialValuesProp ?? {});\n\n const builtInitialValues = useMemo(() => buildInitialValues(value), [value]);\n // Merge: schema-built empty values as base, saved values override\n const initialValues = useMemo(\n () => initialValuesProp && Object.keys(initialValuesProp).length > 0\n ? { ...builtInitialValues, ...initialValuesProp }\n : builtInitialValues,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [builtInitialValues, initialValuesProp],\n );\n\n const validationSchema = useMemo(() =>\n validate ? buildValidationSchema(value) : undefined,\n [validate, value]);\n\n // Fire onPayload whenever conditions / formula config change (not just on value input)\n useEffect(() => {\n if (!onPayload) return;\n onPayload({\n schema: value,\n formulaConfig,\n conditionConfig,\n conditionExpressions: serializeConditionExpressions(conditionConfig),\n values: latestValues.current,\n evaluationPayload: buildEvaluationPayload({ values: latestValues.current, conditionConfig }),\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [conditionConfig, formulaConfig, value]);\n\n const handleValuesChange = useCallback((vals: Record<string, unknown>) => {\n latestValues.current = vals;\n if (import.meta.env.DEV) {\n console.log('[SchemaBuilder] handleValuesChange — vals:', vals);\n }\n if (!onPayload) return;\n onPayload({\n schema: value,\n formulaConfig,\n conditionConfig,\n conditionExpressions: serializeConditionExpressions(conditionConfig),\n values: vals,\n evaluationPayload: buildEvaluationPayload({ values: vals, conditionConfig }),\n });\n }, [value, formulaConfig, conditionConfig, onPayload]);\n\n function handleAddField(field: FieldDescriptor) {\n onChange([...value, field]);\n }\n\n function handleAddFieldToTab(field: FieldDescriptor) {\n if (!tabAddTarget) return;\n const { containerFieldId, tabId } = tabAddTarget;\n const updated = value.map(f => {\n if ((f.id ?? (f as any).name) !== containerFieldId) return f;\n const tabs: any[] = (f as any).tabs ?? [];\n return {\n ...f,\n tabs: tabs.map(t =>\n t.id === tabId ? { ...t, fields: [...(t.fields ?? []), field] } : t\n ),\n };\n });\n onChange(updated as FieldDescriptor[]);\n setTabAddTarget(null);\n }\n\n function handleRemoveFieldFromTab(containerFieldId: string, tabId: string, fieldIndex: number) {\n const updated = value.map(f => {\n if ((f.id ?? (f as any).name) !== containerFieldId) return f;\n const tabs: any[] = (f as any).tabs ?? [];\n return {\n ...f,\n tabs: tabs.map(t =>\n t.id === tabId ? { ...t, fields: (t.fields ?? []).filter((_: any, i: number) => i !== fieldIndex) } : t\n ),\n };\n });\n onChange(updated as FieldDescriptor[]);\n }\n\n const tabsEditContextValue = useMemo(() => ({\n openAddFieldDialog: (containerFieldId: string, tabId: string) =>\n setTabAddTarget({ containerFieldId, tabId }),\n removeFieldFromTab: handleRemoveFieldFromTab,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), [value, onChange]);\n\n const inner = (\n <div className=\"schema-builder-root\">\n {/* Header row */}\n {value.length > 0 && (\n <div className=\"schema-builder-header\">\n <div className=\"schema-builder-actions\">\n <Tooltip title=\"Edit schema\" placement=\"top\">\n <button\n className=\"sb-btn sb-btn-outline\"\n onClick={() => setEditOpen(true)}\n >\n <MdSettings size={13} /> Edit Schema\n </button>\n </Tooltip>\n <Tooltip title=\"Add a new field\" placement=\"top\">\n <button\n className=\"sb-btn sb-btn-primary\"\n onClick={() => setAddOpen(true)}\n >\n <MdAdd size={14} /> Add Field\n </button>\n </Tooltip>\n </div>\n </div>\n )}\n\n {/* Rendered form using actual field components */}\n {value.length > 0 ? (\n <TabsEditContext.Provider value={tabsEditContextValue}>\n <FlowForm\n schema={{ layout: 'flat', fields: value }}\n initialValues={initialValues}\n onSubmit={() => { }}\n validationSchema={validationSchema}\n onValidityChange={onValidityChange}\n onValuesChange={onPayload ? handleValuesChange : undefined}\n formulaConfig={formulaConfig}\n onFormulaConfigChange={setFormulaConfig}\n conditionConfig={conditionConfig}\n onConditionConfigChange={setConditionConfig}\n />\n </TabsEditContext.Provider>\n ) : (\n <div className=\"schema-builder-empty-state\">\n <FaWpforms size={40} className=\"schema-builder-empty-icon\" />\n \n <p className=\"schema-builder-empty-title\">\n Tell us what fields should be in the list, and assign values to them.\n </p>\n \n <div className=\"schema-builder-empty-actions\">\n <button\n className=\"btn\"\n onClick={() => setAddOpen(true)}\n >\n Add field\n </button>\n \n {/* <div className=\"setup-manual-text\">\n or \n <span \n className=\"setup-manual-link\"\n onClick={() => setEditOpen(true)}\n >\n setup manually\n </span>\n </div> */}\n </div>\n </div>\n )}\n\n <AddFieldModal\n open={addOpen}\n onSave={handleAddField}\n onClose={() => setAddOpen(false)}\n />\n <EditSchemaModal\n open={editOpen}\n value={value}\n onSave={onChange}\n onClose={() => setEditOpen(false)}\n />\n {/* Modal for adding a field to a specific tab from the rendered preview */}\n <AddFieldModal\n open={!!tabAddTarget}\n onSave={handleAddFieldToTab}\n onClose={() => setTabAddTarget(null)}\n />\n </div>\n );\n\n if (variableGroups) {\n return (\n <VariablePickerProvider groups={variableGroups}>\n <VariablePicker width={260} mode=\"popover\" />\n {inner}\n </VariablePickerProvider>\n );\n }\n\n return inner;\n}\n","import { useState, useRef } from 'react';\nimport { Drawer, Box, Typography, IconButton, Divider, Chip, Tooltip } from '@mui/material';\nimport { MdSettings, MdArrowForward, MdClose, MdCheck, MdAdd, MdArrowBack } from 'react-icons/md';\nimport { SchemaBuilder } from './SchemaBuilder';\nimport type { SchemaBuilderProps, SchemaBuilderPayload } from './SchemaBuilder';\nimport { FieldConfigPanel } from './FieldConfigPanel';\nimport type { FieldDescriptor } from '../types';\n\n// ─── Compact summary shown in main drawer ────────────────────────────────────\n\nfunction FieldSummary({ fields, onOpen }: { fields: FieldDescriptor[]; onOpen: () => void }) {\n return (\n <Box sx={{ border: '1px solid #e2e8f0', borderRadius: '8px', bgcolor: '#fff', overflow: 'hidden' }}>\n {fields.length > 0 ? (\n <Box sx={{ px: 1.5, py: 1.25, display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {fields.map((f, i) => {\n const key = f.id ?? f.name ?? '';\n return (\n <Tooltip key={i} title={`${f.type} · ${key}`} placement=\"top\">\n <Chip\n label={(f.label as string) || key}\n size=\"small\"\n sx={{ fontSize: 11, fontWeight: 500, height: 22, bgcolor: '#f1f5f9', color: '#334155', border: '1px solid #e2e8f0', '& .MuiChip-label': { px: 1 } }}\n />\n </Tooltip>\n );\n })}\n </Box>\n ) : (\n <Box sx={{ px: 1.5, py: 1.5 }}>\n <Typography sx={{ fontSize: 12, color: '#94a3b8' }}>No fields defined yet</Typography>\n </Box>\n )}\n <Divider sx={{ borderColor: '#f1f5f9' }} />\n <Box onClick={onOpen} sx={{ display: 'flex', alignItems: 'center', gap: 0.75, px: 1.5, py: 1, cursor: 'pointer', '&:hover': { bgcolor: '#f8fafc' }, transition: 'background 0.12s' }}>\n {fields.length === 0 ? <MdAdd size={14} color=\"#6366f1\" /> : <MdSettings size={13} color=\"#6366f1\" />}\n <Typography sx={{ fontSize: 12, fontWeight: 600, color: '#6366f1', flex: 1 }}>\n {fields.length === 0 ? 'Add fields' : 'Configure fields'}\n </Typography>\n <MdArrowForward size={13} color=\"#94a3b8\" />\n </Box>\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface SchemaBuilderDrawerProps extends SchemaBuilderProps {\n label?: string;\n drawerTitle?: string;\n drawerWidth?: number;\n /**\n * Fired when the user clicks Done.\n * @param schema Save this to DB — pass it back to FlowForm/SchemaBuilder to restore the form\n * @param payload Send this to backend — contains conditionExpressions, formulaConfig, values, evaluationPayload\n */\n onDone?: (schema: FieldDescriptor[], payload: SchemaBuilderPayload | null) => void;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\ntype View = { type: 'list' } | { type: 'edit'; index: number };\n\nexport function SchemaBuilderDrawer({\n value,\n onChange,\n suggestions,\n onPayload,\n onDone,\n validate,\n onValidityChange,\n label = 'Fields',\n drawerTitle = 'Configure Fields',\n drawerWidth = 580,\n}: SchemaBuilderDrawerProps) {\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<View>({ type: 'list' });\n const [draft, setDraft] = useState<FieldDescriptor[]>(value);\n const latestPayload = useRef<SchemaBuilderPayload | null>(null);\n\n // Persisted state across open/close cycles — survives Cancel\n const savedValues = useRef<Record<string, unknown> | undefined>(undefined);\n const savedFormulaConfig = useRef<SchemaBuilderPayload['formulaConfig'] | undefined>(undefined);\n const savedConditionConfig = useRef<SchemaBuilderPayload['conditionConfig'] | undefined>(undefined);\n\n // Local draft of the field being edited\n const [fieldDraft, setFieldDraft] = useState<FieldDescriptor | null>(null);\n\n function handleOpen() {\n if (import.meta.env.DEV) console.log('[SchemaBuilderDrawer] handleOpen — savedValues.current:', savedValues.current);\n setDraft(value); setView({ type: 'list' }); setOpen(true);\n }\n\n function handleDone() {\n const p = latestPayload.current;\n // Persist the latest state so reopening restores it\n if (p) {\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n }\n if (import.meta.env.DEV) {\n console.log('[SchemaBuilderDrawer] handleDone — savedValues:', savedValues.current);\n }\n onChange(draft);\n setOpen(false);\n onDone?.(draft, p);\n if (import.meta.env.DEV) {\n console.group('🟣 SchemaBuilder — Done');\n console.log(\n '%c schema %c (save to DB → pass back to FlowForm to restore this form)',\n 'background:#6366f1;color:#fff;padding:1px 6px;border-radius:3px;font-weight:700',\n 'color:#64748b;font-weight:400',\n draft,\n );\n console.log(\n '%c payload %c (send to backend for evaluation)',\n 'background:#0f172a;color:#e2e8f0;padding:1px 6px;border-radius:3px;font-weight:700',\n 'color:#64748b;font-weight:400',\n {\n conditionExpressions: p?.conditionExpressions ?? {},\n formulaConfig: p?.formulaConfig ?? {},\n values: p?.values ?? {},\n evaluationPayload: p?.evaluationPayload ?? {},\n },\n );\n console.groupEnd();\n }\n }\n\n function handleClose() {\n // Save whatever the user had so far before closing\n const p = latestPayload.current;\n if (p) {\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n }\n setDraft(value);\n setOpen(false);\n }\n\n function handleEditField(index: number) {\n setFieldDraft({ ...draft[index] });\n setView({ type: 'edit', index });\n }\n\n function handleSaveField() {\n if (view.type !== 'edit' || !fieldDraft) return;\n const next = [...draft];\n next[view.index] = fieldDraft;\n setDraft(next);\n setView({ type: 'list' });\n setFieldDraft(null);\n }\n\n function handleCancelEdit() {\n setView({ type: 'list' });\n setFieldDraft(null);\n }\n\n const hasChanges = JSON.stringify(draft) !== JSON.stringify(value);\n const editingField = view.type === 'edit' ? draft[view.index] : null;\n\n return (\n <>\n {/* Summary in main drawer */}\n <Box>\n <Typography sx={{ fontSize: 12, fontWeight: 700, color: '#64748b', textTransform: 'uppercase', letterSpacing: 0.5, mb: 0.75 }}>\n {label}\n </Typography>\n <FieldSummary fields={value} onOpen={handleOpen} />\n </Box>\n\n {/* Secondary drawer */}\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={handleClose}\n PaperProps={{ sx: { width: drawerWidth, display: 'flex', flexDirection: 'column', boxShadow: '-4px 0 24px rgba(0,0,0,0.12)', overflow: 'hidden' } }}\n >\n {/* ── HEADER ────────────────────────────────────────────────── */}\n <Box sx={{ display: 'flex', alignItems: 'center', px: 2, py: 1.5, borderBottom: '1px solid #e2e8f0', flexShrink: 0, gap: 1 }}>\n {view.type === 'edit' && (\n <Tooltip title=\"Back to fields\" placement=\"bottom\">\n <IconButton size=\"small\" onClick={handleCancelEdit} sx={{ color: '#64748b' }}>\n <MdArrowBack size={17} />\n </IconButton>\n </Tooltip>\n )}\n <Box sx={{ flex: 1 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a' }}>\n {view.type === 'edit'\n ? ((fieldDraft?.label as string) || fieldDraft?.id || 'Edit field')\n : drawerTitle}\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8' }}>\n {view.type === 'edit' ? 'Configure field properties' : `${draft.length} field${draft.length !== 1 ? 's' : ''} defined`}\n </Typography>\n </Box>\n {view.type === 'list' && (\n <Tooltip title=\"Close\" placement=\"bottom\">\n <IconButton size=\"small\" onClick={handleClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n\n {/* ── BODY ──────────────────────────────────────────────────── */}\n {view.type === 'list' && (\n <>\n <Box sx={{ flex: 1, overflowY: 'auto', p: 2.5 }}>\n <SchemaBuilder\n value={draft}\n onChange={setDraft}\n suggestions={suggestions}\n onPayload={(p) => { \n latestPayload.current = p; \n // Persist immediately so adding/removing fields doesn't wipe current data\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n onPayload?.(p); \n }}\n validate={validate}\n onValidityChange={onValidityChange}\n label={label}\n initialValues={savedValues.current}\n initialFormulaConfig={savedFormulaConfig.current}\n initialConditionConfig={savedConditionConfig.current}\n />\n </Box>\n\n {/* List footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {hasChanges\n ? <Typography sx={{ fontSize: 11, color: '#f59e0b', fontWeight: 500, flex: 1 }}>Unsaved changes</Typography>\n : <Box sx={{ flex: 1 }} />\n }\n <Box component=\"button\" onClick={handleClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={handleDone} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Done\n </Box>\n </Box>\n </>\n )}\n\n {/* Edit view — FieldConfigPanel fills the drawer */}\n {view.type === 'edit' && fieldDraft && (\n <FieldConfigPanel\n field={fieldDraft}\n onChange={setFieldDraft}\n onSave={handleSaveField}\n onCancel={handleCancelEdit}\n />\n )}\n </Drawer>\n </>\n );\n}\n"],"names":["useFlowForm","schema","initialValues","onSubmit","showErrorsImmediately","fields","validationSchema","useMemo","buildValidationSchema","initialTouched","acc","f","key","resolveFieldKey","formulaConfig","setFormulaConfig","useState","conditionConfig","setConditionConfig","initialValuesRef","useRef","useEffect","formik","useFormik","values","evaluation","buildEvaluationPayload","submit","useCallback","reset","nextValues","FIELD_TYPE_OPTIONS","FlowForgeRegistry","input","lbl","sectionTitle","ARRAY_ITEM_TYPES","COL_OPTIONS","ColSpanPicker","value","onChange","current","Box","jsx","opt","Tooltip","_","i","OptionsEditor","options","update","val","o","idx","jsxs","e","MdClose","MdAdd","CONDITION_COL_TYPES","ConditionColEditor","col","onDelete","isSelect","isOperator","opts","ConditionBuilder","condition","enabled","toggle","addCol","type","defaultId","updateCol","next","removeCol","c","t","CheckRow","id","label","checked","TabsViewsEditor","views","v","add","view","ButtonGroup","groupLabel","FieldConfigPanel","field","onSave","onCancel","noFooter","showAdvanced","setShowAdvanced","fieldKey","ext","isOptionsField","customRegistryDef","customConfigSchema","set","Fragment","FlowForm","vals","newViews","existing","merged","prev","Collapse","MdCheck","COLOR","RADIUS","FONT_SIZE","INPUT_SX","defaultField","needsChildStep","childStepLabel","itemType","ChildFieldsStep","Typography","SchemaBuilder","children","itemFields","nestedItemType","_a","PRIMITIVE_TYPES","FieldPreview","colLabel","AddFieldModal","open","initial","onClose","editMode","step","setStep","draft","setDraft","handleOpen","hasChild","totalSteps","stepLabels","canNext","goNext","s","goBack","handleSave","activeStepIdx","isLastStep","isPreview","Dialog","IconButton","Stepper","Step","StepLabel","MdArrowBack","ListRow","index","total","onEdit","onMoveUp","onMoveDown","MdEdit","MdDeleteOutline","EditSchemaModal","editingIdx","setEditingIdx","handleDelete","d","handleMove","dir","j","handleSaveField","updated","handleDone","hasChanges","buildInitialValues","result","suggestions","onPayload","validate","onValidityChange","variableGroups","initialValuesProp","initialFormulaConfig","initialConditionConfig","addOpen","setAddOpen","editOpen","setEditOpen","tabAddTarget","setTabAddTarget","latestValues","builtInitialValues","serializeConditionExpressions","handleValuesChange","handleAddField","handleAddFieldToTab","containerFieldId","tabId","tabs","handleRemoveFieldFromTab","fieldIndex","tabsEditContextValue","inner","MdSettings","TabsEditContext","FaWpforms","VariablePickerProvider","VariablePicker","FieldSummary","onOpen","Chip","Divider","MdArrowForward","SchemaBuilderDrawer","onDone","drawerTitle","drawerWidth","setOpen","setView","latestPayload","savedValues","savedFormulaConfig","savedConditionConfig","fieldDraft","setFieldDraft","p","handleClose","handleCancelEdit","Drawer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SchemaBuilderDrawer-BqNqYbVF.js","sources":["../src/FlowForm/useFlowForm.ts","../src/FlowForm/SchemaBuilder/types.ts","../src/FlowForm/SchemaBuilder/FieldConfigPanel.tsx","../src/FlowForm/styles/constants.ts","../src/FlowForm/SchemaBuilder/AddFieldModal.tsx","../src/FlowForm/SchemaBuilder/EditSchemaModal.tsx","../src/FlowForm/SchemaBuilder/SchemaBuilder.tsx","../src/FlowForm/SchemaBuilder/SchemaBuilderDrawer.tsx"],"sourcesContent":["import { useState, useMemo, useCallback, useEffect, useRef } from 'react';\r\nimport { useFormik } from 'formik';\r\nimport type { FormSchema, FieldDescriptor } from './types';\r\nimport { resolveFieldKey } from './types';\r\nimport type { FormulaConfig, ConditionConfig } from './types/formula';\r\nimport { buildValidationSchema } from './SchemaBuilder/buildValidationSchema';\r\nimport { buildEvaluationPayload } from './DynamicFormRenderer/formulaUtils';\r\nimport type { EvaluationPayload } from './DynamicFormRenderer/formulaUtils';\r\n\r\n// ─── Types ────────────────────────────────────────────────────────────────────\r\n\r\nexport interface UseFlowFormOptions {\r\n schema: FormSchema;\r\n initialValues: Record<string, unknown>;\r\n /**\r\n * Called only when form is valid and submitted.\r\n * Receives raw formik values AND the fully-resolved evaluation payload\r\n * (formula chips resolved, condition expressions serialized).\r\n */\r\n onSubmit: (values: Record<string, unknown>, evaluation: EvaluationPayload) => void | Promise<void>;\r\n /** Pre-mark all fields as touched so errors show immediately (e.g. edit mode). */\r\n showErrorsImmediately?: boolean;\r\n}\r\n\r\nexport interface FlowFormInstance {\r\n // ── Public state ────────────────────────────────────────────────────────────\r\n values: Record<string, unknown>;\r\n errors: Record<string, unknown>;\r\n isValid: boolean;\r\n isDirty: boolean;\r\n isSubmitting: boolean;\r\n\r\n // ── Config state (formula chips + condition rows) ────────────────────────\r\n formulaConfig: FormulaConfig;\r\n conditionConfig: ConditionConfig;\r\n\r\n // ── Actions ─────────────────────────────────────────────────────────────────\r\n /** Validate and submit — safe to call from any button outside the form. */\r\n submit: () => void;\r\n reset: (nextValues?: Record<string, unknown>) => void;\r\n setFieldValue: (field: string, value: unknown) => void;\r\n\r\n // ── Internal — consumed only by DynamicFormRenderer / FlowForm ──────────\r\n _schema: FormSchema;\r\n _formik: ReturnType<typeof useFormik<Record<string, unknown>>>;\r\n _formulaConfig: FormulaConfig;\r\n _onFormulaConfigChange: (config: FormulaConfig) => void;\r\n _conditionConfig: ConditionConfig;\r\n _onConditionConfigChange: (config: ConditionConfig) => void;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport function useFlowForm({\r\n schema,\r\n initialValues,\r\n onSubmit,\r\n showErrorsImmediately = false,\r\n}: UseFlowFormOptions): FlowFormInstance {\r\n\r\n // Build Yup schema only when the field array reference actually changes.\r\n // Depending on `schema` (the wrapping object) rebuilt the entire Yup tree\r\n // on every render for hosts that construct schema inline.\r\n const fields = (schema.fields ?? []) as FieldDescriptor[];\r\n const validationSchema = useMemo(\r\n () => buildValidationSchema(fields),\r\n [fields],\r\n );\r\n\r\n // Pre-touch map — marks every field touched so errors show on open (edit mode)\r\n const initialTouched = useMemo(() => {\r\n if (!showErrorsImmediately) return undefined;\r\n return fields.reduce<Record<string, boolean>>((acc, f) => {\r\n const key = resolveFieldKey(f);\r\n if (key) acc[key] = true;\r\n return acc;\r\n }, {});\r\n }, [fields, showErrorsImmediately]);\r\n\r\n const [formulaConfig, setFormulaConfig] = useState<FormulaConfig>({});\r\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>({});\r\n\r\n // When initialValues identity changes (host loaded a different record),\r\n // Formik reinitializes — clear formula/condition config too so leftover\r\n // chip/condition state from the previous record doesn't bleed through.\r\n const initialValuesRef = useRef(initialValues);\r\n useEffect(() => {\r\n if (initialValuesRef.current === initialValues) return;\r\n initialValuesRef.current = initialValues;\r\n setFormulaConfig({});\r\n setConditionConfig({});\r\n }, [initialValues]);\r\n\r\n const formik = useFormik<Record<string, unknown>>({\r\n initialValues,\r\n validationSchema,\r\n initialTouched,\r\n validateOnMount: showErrorsImmediately,\r\n validateOnChange: true,\r\n validateOnBlur: true,\r\n enableReinitialize: true,\r\n onSubmit: async (values) => {\r\n const evaluation = buildEvaluationPayload({ values, conditionConfig });\r\n await onSubmit(values, evaluation);\r\n },\r\n });\r\n\r\n const submit = useCallback(() => {\r\n formik.submitForm();\r\n }, [formik]);\r\n\r\n const reset = useCallback((nextValues?: Record<string, unknown>) => {\r\n formik.resetForm(nextValues ? { values: nextValues } : undefined);\r\n setFormulaConfig({});\r\n setConditionConfig({});\r\n }, [formik]);\r\n\r\n return {\r\n values: formik.values,\r\n errors: formik.errors as Record<string, unknown>,\r\n isValid: formik.isValid,\r\n isDirty: formik.dirty,\r\n isSubmitting: formik.isSubmitting,\r\n\r\n formulaConfig,\r\n conditionConfig,\r\n\r\n submit,\r\n reset,\r\n setFieldValue: formik.setFieldValue,\r\n\r\n // Internals for DynamicFormRenderer\r\n _schema: schema,\r\n _formik: formik,\r\n _formulaConfig: formulaConfig,\r\n _onFormulaConfigChange: setFormulaConfig,\r\n _conditionConfig: conditionConfig,\r\n _onConditionConfigChange: setConditionConfig,\r\n };\r\n}\r\n","import { FlowForgeRegistry } from '../registry';\n\nexport const FIELD_TYPE_OPTIONS: Array<{ value: string; label: string }> = FlowForgeRegistry.getTypeOptions();\n","import { useState } from 'react';\nimport { Box, Collapse, Tooltip } from '@mui/material';\nimport { MdAdd, MdClose, MdCheck } from 'react-icons/md';\nimport type { FieldDescriptor, ConditionFieldDef, FieldConditionDef, FormSchema } from '../types';\nimport { FIELD_TYPE_OPTIONS } from './types';\nimport { FlowForgeRegistry } from '../registry';\nimport { FlowForm } from '../DynamicFormRenderer';\n\n// ─── Shared styles ────────────────────────────────────────────────────────────\n\n/** Use on <input> and <select> elements — matches app's form-control design */\nexport const input = 'form-control font-14';\n\n/** Use as className on <label> elements */\nexport const lbl = 'text-14 text-dark fw-medium mb-1 align-items-center d-flex gap-1';\n\nconst sectionTitle: React.CSSProperties = {\n fontSize: 10, fontWeight: 700, color: '#94a3b8',\n textTransform: 'uppercase', letterSpacing: 0.6,\n marginBottom: 8, display: 'block',\n};\n\n// ─── Array item type options ──────────────────────────────────────────────────\n\nconst ARRAY_ITEM_TYPES = [\n { value: 'text', label: 'Text' },\n { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' },\n { value: 'url', label: 'URL' },\n { value: 'password', label: 'Password' },\n { value: 'select', label: 'Select' },\n { value: 'object', label: 'Object (sub-fields)' },\n { value: 'array', label: 'Array (nested)' },\n];\n\n// ─── ColSpan picker ───────────────────────────────────────────────────────────\n\nconst COL_OPTIONS = [\n { value: 3, label: '1/4' },\n { value: 4, label: '1/3' },\n { value: 6, label: '1/2' },\n { value: 8, label: '2/3' },\n { value: 12, label: 'Full' },\n];\n\nfunction ColSpanPicker({ value, onChange }: { value?: number; onChange: (v: number) => void }) {\n const current = value ?? 12;\n return (\n <Box>\n <span className={lbl}>Column width</span>\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {COL_OPTIONS.map((opt) => (\n <Tooltip key={opt.value} title={`colSpan: ${opt.value}`} placement=\"top\">\n <Box\n component=\"button\"\n onClick={() => onChange(opt.value)}\n sx={{\n flex: 1, border: '1px solid',\n borderColor: current === opt.value ? '#6366f1' : '#dee2e6',\n borderRadius: '6px', cursor: 'pointer',\n bgcolor: current === opt.value ? '#eef2ff' : '#fff',\n color: current === opt.value ? '#6366f1' : '#6c757d',\n fontSize: 11, fontWeight: 600, py: 0.6, px: 0,\n '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' },\n }}\n >\n {opt.label}\n </Box>\n </Tooltip>\n ))}\n </Box>\n <Box sx={{ display: 'flex', gap: '3px', mt: 0.75 }}>\n {Array.from({ length: 12 }).map((_, i) => (\n <Box key={i} sx={{ flex: 1, height: 4, borderRadius: '2px', bgcolor: i < current ? '#6366f1' : '#e2e8f0', transition: 'background 0.12s' }} />\n ))}\n </Box>\n </Box>\n );\n}\n\n// ─── Options editor (for select) ─────────────────────────────────────────────\n\ninterface SelectOption { label: string; value: string }\n\nfunction OptionsEditor({ options = [], onChange }: { options: SelectOption[]; onChange: (o: SelectOption[]) => void }) {\n function update(i: number, key: keyof SelectOption, val: string) {\n onChange(options.map((o, idx) => idx === i ? { ...o, [key]: val } : o));\n }\n return (\n <Box>\n <span className={lbl}>Options <span style={{ color: '#dc3545' }}>*</span></span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {options.map((opt, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input className={input} style={{ flex: 1 }} placeholder=\"Label\" value={opt.label} onChange={(e) => update(i, 'label', e.target.value)} />\n <input className={input} style={{ flex: 1 }} placeholder=\"Value\" value={opt.value} onChange={(e) => update(i, 'value', e.target.value)} />\n <Box component=\"button\" onClick={() => onChange(options.filter((_, idx) => idx !== i))} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n ))}\n </Box>\n <Box component=\"button\" onClick={() => onChange([...options, { label: '', value: '' }])} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n <MdAdd size={13} /> Add option\n </Box>\n </Box>\n );\n}\n\n// ─── Condition builder ────────────────────────────────────────────────────────\n\nconst CONDITION_COL_TYPES = [\n { value: 'operator', label: 'Operator (predefined)' },\n { value: 'select', label: 'Select' },\n { value: 'text', label: 'Text' },\n];\n\nfunction ConditionColEditor({ col, onChange, onDelete }: { col: ConditionFieldDef; onChange: (c: ConditionFieldDef) => void; onDelete: () => void }) {\n const isSelect = col.type === 'select';\n const isOperator = col.type === 'operator';\n return (\n <Box sx={{ border: '1px solid #e2e8f0', borderRadius: '7px', p: 1.25, bgcolor: '#fff', display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <Box sx={{ fontSize: 10, fontWeight: 700, px: 0.75, py: 0.2, borderRadius: '4px', bgcolor: isOperator ? '#fef9c3' : '#eef2ff', color: isOperator ? '#92400e' : '#6366f1', flexShrink: 0 }}>\n {isOperator ? 'OPERATOR' : col.type.toUpperCase()}\n </Box>\n <Box sx={{ fontSize: 12, fontWeight: 600, color: '#0f172a', flex: 1 }}>{col.label || col.id || 'Unnamed'}</Box>\n <Box component=\"button\" onClick={onDelete} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Column type</label>\n <select value={col.type} onChange={(e) => onChange({ ...col, type: e.target.value, options: undefined })} className={input} style={{ cursor: 'pointer' }}>\n {CONDITION_COL_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box>\n <label className={lbl}>Column key <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={`${input} ${!col.id ? 'border-danger' : ''}`} value={col.id} onChange={(e) => onChange({ ...col, id: e.target.value })} placeholder=\"e.g. field, operator, value\" />\n {!col.id && <span style={{ fontSize: 10, color: '#dc3545' }}>Required — used as data key</span>}\n </Box>\n </Box>\n\n {!isOperator && (\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Label</label>\n <input className={input} value={col.label ?? ''} onChange={(e) => onChange({ ...col, label: e.target.value || undefined })} placeholder=\"Column label\" />\n </Box>\n <Box>\n <label className={lbl}>Placeholder</label>\n <input className={input} value={col.placeholder ?? ''} onChange={(e) => onChange({ ...col, placeholder: e.target.value || undefined })} placeholder=\"Hint…\" />\n </Box>\n </Box>\n )}\n\n {isSelect && (\n <OptionsEditor options={(col.options ?? []) as SelectOption[]} onChange={(opts) => onChange({ ...col, options: opts })} />\n )}\n\n {isOperator && (\n <Box sx={{ bgcolor: '#fefce8', border: '1px solid #fef08a', borderRadius: '6px', px: 1.25, py: 0.75 }}>\n <Box sx={{ fontSize: 11, color: '#78350f' }}>Predefined: equals, not equals, contains, starts with, ends with, is present, is not present, greater than, less than…</Box>\n </Box>\n )}\n\n {!isOperator && (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id={`formula-${col.id}`} checked={!!col.formula} onChange={(e) => onChange({ ...col, formula: e.target.checked || undefined })} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <label htmlFor={`formula-${col.id}`} className={lbl} style={{ margin: 0, cursor: 'pointer' }}>Formula input (chip editor)</label>\n </Box>\n )}\n </Box>\n );\n}\n\nfunction ConditionBuilder({ condition, onChange }: { condition: FieldConditionDef | undefined; onChange: (c: FieldConditionDef | undefined) => void }) {\n const enabled = !!condition;\n function toggle() { onChange(enabled ? undefined : { fields: [] }); }\n function addCol(type: string) {\n if (!condition) return;\n const defaultId = type === 'operator' ? 'operator' : condition.fields.filter((f) => f.type !== 'operator').length === 0 ? 'field' : 'value';\n onChange({ ...condition, fields: [...condition.fields, { id: defaultId, type }] });\n }\n function updateCol(i: number, col: ConditionFieldDef) {\n if (!condition) return;\n const next = [...condition.fields]; next[i] = col;\n onChange({ ...condition, fields: next });\n }\n function removeCol(i: number) {\n if (!condition) return;\n onChange({ ...condition, fields: condition.fields.filter((_, idx) => idx !== i) });\n }\n return (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75, mb: enabled ? 1.25 : 0 }}>\n <input type=\"checkbox\" id=\"enable-condition\" checked={enabled} onChange={toggle} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <span style={{ ...sectionTitle, margin: 0, color: enabled ? '#6366f1' : '#94a3b8' }}>Condition row</span>\n </Box>\n {enabled && condition && (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n {condition.fields.map((col, i) => (\n <ConditionColEditor key={i} col={col} onChange={(c) => updateCol(i, c)} onDelete={() => removeCol(i)} />\n ))}\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {CONDITION_COL_TYPES.map((t) => (\n <Box key={t.value} component=\"button\" onClick={() => addCol(t.value)} sx={{ flex: 1, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, py: 0.5, borderRadius: '6px', color: t.value === 'operator' ? '#92400e' : '#6366f1', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n + {t.value === 'operator' ? 'Operator' : t.label.split(' ')[0]}\n </Box>\n ))}\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, flexWrap: 'wrap' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id=\"allow-groups\" checked={!!condition.allowGroups} onChange={(e) => onChange({ ...condition, allowGroups: e.target.checked || undefined })} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <label htmlFor=\"allow-groups\" className={lbl} style={{ margin: 0, cursor: 'pointer' }}>Allow nested groups</label>\n </Box>\n {condition.allowGroups && (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <label className={lbl} style={{ margin: 0 }}>Max depth</label>\n <input type=\"number\" min={1} max={5} className={input} style={{ width: 60, textAlign: 'center' }} value={condition.maxGroupDepth ?? ''} onChange={(e) => onChange({ ...condition, maxGroupDepth: e.target.value ? Number(e.target.value) : undefined })} placeholder=\"∞\" />\n </Box>\n )}\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n\n// ─── CheckRow ─────────────────────────────────────────────────────────────────\n\nfunction CheckRow({ id, label, checked, onChange }: { id: string; label: string; checked: boolean; onChange: (v: boolean) => void }) {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id={id} checked={checked} onChange={(e) => onChange(e.target.checked)} style={{ cursor: 'pointer', width: 14, height: 14, flexShrink: 0 }} />\n <label htmlFor={id} className={lbl} style={{ margin: 0, cursor: 'pointer' }}>{label}</label>\n </Box>\n );\n}\n\n// ─── Tabs views editor ────────────────────────────────────────────────────────\n\ninterface TabView { id: string; label: string }\n\nfunction TabsViewsEditor({ views = [], onChange }: { views: TabView[]; onChange: (v: TabView[]) => void }) {\n function update(i: number, key: keyof TabView, val: string) {\n onChange(views.map((v, idx) => idx === i ? { ...v, [key]: val } : v));\n }\n function add() {\n const id = `tab${views.length + 1}`;\n onChange([...views, { id, label: `Tab ${views.length + 1}` }]);\n }\n return (\n <Box>\n <span className={lbl}>Views</span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {views.map((view, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input className={input} style={{ flex: 1 }} placeholder=\"Label\" value={view.label} onChange={e => update(i, 'label', e.target.value)} />\n <input className={input} style={{ flex: 1 }} placeholder=\"ID (no spaces)\" value={view.id} onChange={e => update(i, 'id', e.target.value.replace(/\\s/g, '_'))} />\n <Box component=\"button\" onClick={() => onChange(views.filter((_, idx) => idx !== i))} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n ))}\n </Box>\n <Box component=\"button\" onClick={add} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n <MdAdd size={13} /> Add view\n </Box>\n </Box>\n );\n}\n\n// ─── Button group picker ──────────────────────────────────────────────────────\n\nfunction ButtonGroup({ label: groupLabel, value, options, onChange }: {\n label: string;\n value: string;\n options: { value: string; label: string }[];\n onChange: (v: string) => void;\n}) {\n return (\n <Box>\n <span className={lbl}>{groupLabel}</span>\n <Box sx={{ display: 'flex', border: '1px solid #dee2e6', borderRadius: '7px', overflow: 'hidden' }}>\n {options.map(opt => (\n <Box\n key={opt.value}\n component=\"button\"\n onClick={() => onChange(opt.value)}\n sx={{\n flex: 1, border: 'none', borderRight: '1px solid #dee2e6', cursor: 'pointer',\n fontSize: 12, fontWeight: 600, py: 0.6,\n bgcolor: value === opt.value ? '#eef2ff' : '#fff',\n color: value === opt.value ? '#6366f1' : '#6c757d',\n '&:last-child': { borderRight: 'none' },\n '&:hover': { bgcolor: '#f5f3ff' },\n }}\n >\n {opt.label}\n </Box>\n ))}\n </Box>\n </Box>\n );\n}\n\n// ─── Main export ──────────────────────────────────────────────────────────────\n\ninterface FieldConfigPanelProps {\n field: FieldDescriptor;\n onChange: (updated: FieldDescriptor) => void;\n onSave: () => void;\n onCancel: () => void;\n noFooter?: boolean;\n}\n\nexport function FieldConfigPanel({ field, onChange, onSave, onCancel, noFooter }: FieldConfigPanelProps) {\n const [showAdvanced, setShowAdvanced] = useState(false);\n const fieldKey = field.id ?? field.name ?? '';\n const ext = field as Record<string, any>;\n const isOptionsField = field.type === 'select' || field.type === 'descriptive-select' || field.type === 'radio-group';\n\n const customRegistryDef = FlowForgeRegistry.get(field.type);\n const customConfigSchema = customRegistryDef?.configSchema;\n\n function set<K extends keyof FieldDescriptor>(key: K, value: FieldDescriptor[K]) {\n onChange({ ...field, [key]: value });\n }\n\n return (\n <>\n {/* Scrollable body */}\n <Box sx={{ flex: 1, overflowY: 'auto', px: 2.5, py: 2, display: 'flex', flexDirection: 'column', gap: 1.75 }}>\n\n {/* REQUIRED */}\n <Box>\n <span style={sectionTitle}>Required</span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Box>\n <label className={lbl}>Type</label>\n <select value={field.type} onChange={(e) => set('type', e.target.value)} className={input} style={{ cursor: 'pointer' }}>\n {FIELD_TYPE_OPTIONS.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: field.type === 'tabs' ? '1fr' : '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Field ID <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={input} value={field.id ?? field.name ?? ''} onChange={(e) => set('id', e.target.value)} placeholder=\"e.g. email\" />\n </Box>\n {field.type !== 'tabs' && (\n <Box>\n <label className={lbl}>Label <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={input} value={(field.label as string) ?? ''} onChange={(e) => set('label', e.target.value)} placeholder=\"Display label\" />\n </Box>\n )}\n </Box>\n {field.type !== 'tabs' && (\n <ColSpanPicker value={field.colSpan as number | undefined} onChange={(v) => set('colSpan', v === 12 ? undefined : v)} />\n )}\n </Box>\n </Box>\n\n {/* CUSTOM REGISTRY SCHEMA (Self-Building form config) */}\n {customConfigSchema && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <span style={sectionTitle}>Specific Settings</span>\n <FlowForm\n schema={{ layout: 'flat', compact: true, fields: customConfigSchema.fields }}\n initialValues={field as any}\n onValuesChange={(vals) => onChange({ ...field, ...vals } as FieldDescriptor)}\n onSubmit={() => { }}\n />\n </Box>\n )}\n\n {/* TYPE-SPECIFIC — Tabs config */}\n {field.type === 'tabs' && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5, display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n {/* Content */}\n <span style={sectionTitle}>Content</span>\n <TabsViewsEditor\n views={(ext.tabs ?? []).map((t: any) => ({ id: t.id, label: t.label }))}\n onChange={newViews => {\n const existing: any[] = ext.tabs ?? [];\n const merged = newViews.map(v => {\n const prev = existing.find((e: any) => e.id === v.id);\n return prev ? { ...prev, ...v } : { ...v, fields: [] };\n });\n onChange({ ...field, tabs: merged } as FieldDescriptor);\n }}\n />\n\n {/* Interaction */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Interaction</span>\n <Box>\n <label className={lbl}>Disabled</label>\n <input className={input} value={ext.disabledExpr ?? ''} onChange={e => onChange({ ...field, disabledExpr: e.target.value || undefined } as FieldDescriptor)} placeholder=\"false\" />\n </Box>\n\n {/* Appearance */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Appearance</span>\n <ButtonGroup\n label=\"Alignment\"\n value={ext.alignment ?? 'left'}\n options={[\n { value: 'left', label: '|←' },\n { value: 'center-left', label: '←|' },\n { value: 'center', label: '|·|' },\n { value: 'center-right', label: '|→' },\n { value: 'right', label: '→|' },\n ]}\n onChange={v => onChange({ ...field, alignment: v } as FieldDescriptor)}\n />\n <Box>\n <label className={lbl}>Hidden</label>\n <input className={input} value={ext.hiddenExpr ?? ''} onChange={e => onChange({ ...field, hiddenExpr: e.target.value || undefined } as FieldDescriptor)} placeholder=\"false\" />\n </Box>\n <ButtonGroup\n label=\"Variant\"\n value={ext.variant ?? 'line'}\n options={[{ value: 'pill', label: 'Pill' }, { value: 'line', label: 'Line' }]}\n onChange={v => onChange({ ...field, variant: v } as FieldDescriptor)}\n />\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Active color</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.activeColor ?? '#6366f1'} onChange={e => onChange({ ...field, activeColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.activeColor ?? ''} onChange={e => onChange({ ...field, activeColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"#6366f1\" style={{ flex: 1 }} />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Active text</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.activeTextColor ?? '#ffffff'} onChange={e => onChange({ ...field, activeTextColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.activeTextColor ?? ''} onChange={e => onChange({ ...field, activeTextColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"auto\" style={{ flex: 1 }} />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Inactive text</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.inactiveTextColor ?? '#64748b'} onChange={e => onChange({ ...field, inactiveTextColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.inactiveTextColor ?? ''} onChange={e => onChange({ ...field, inactiveTextColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"#64748b\" style={{ flex: 1 }} />\n </Box>\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Styles</label>\n <input className={input} value={ext.styles ?? ''} onChange={e => onChange({ ...field, styles: e.target.value || undefined } as FieldDescriptor)} placeholder=\"None\" />\n </Box>\n\n {/* Spacing */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Spacing</span>\n <ButtonGroup\n label=\"Height\"\n value={ext.height ?? 'auto'}\n options={[{ value: 'auto', label: 'Auto' }, { value: 'fixed', label: 'Fixed' }]}\n onChange={v => onChange({ ...field, height: v } as FieldDescriptor)}\n />\n <ButtonGroup\n label=\"Margin\"\n value={ext.margin ?? 'normal'}\n options={[{ value: 'normal', label: 'Normal' }, { value: 'none', label: 'None' }]}\n onChange={v => onChange({ ...field, margin: v } as FieldDescriptor)}\n />\n </Box>\n )}\n\n {/* TYPE-SPECIFIC — Select/Radio Options */}\n {isOptionsField && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <span style={sectionTitle}>Options</span>\n <OptionsEditor options={(ext.options ?? []) as SelectOption[]} onChange={(opts) => onChange({ ...field, options: opts } as FieldDescriptor)} />\n </Box>\n )}\n\n\n {/* TYPE-SPECIFIC — Array (flat settings only; child fields configured in next step) */}\n {field.type === 'array' && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5, display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={sectionTitle}>Array settings</span>\n <Box>\n <label className={lbl}>Item type</label>\n <select className={input} style={{ cursor: 'pointer' }} value={ext.itemType ?? 'text'} onChange={(e) => onChange({ ...field, itemType: e.target.value } as FieldDescriptor)}>\n {ARRAY_ITEM_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Item label</label>\n <input className={input} value={ext.itemLabel ?? ''} onChange={(e) => onChange({ ...field, itemLabel: e.target.value || undefined } as FieldDescriptor)} placeholder='e.g. \"Member\"' />\n </Box>\n <Box>\n <label className={lbl}>Add button label</label>\n <input className={input} value={ext.addLabel ?? ''} onChange={(e) => onChange({ ...field, addLabel: e.target.value || undefined } as FieldDescriptor)} placeholder=\"Add item\" />\n </Box>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Min items</label>\n <input type=\"number\" min={0} className={input} value={ext.minItems ?? ''} onChange={(e) => onChange({ ...field, minItems: e.target.value ? Number(e.target.value) : undefined } as FieldDescriptor)} placeholder=\"0\" />\n </Box>\n <Box>\n <label className={lbl}>Max items</label>\n <input type=\"number\" min={1} className={input} value={ext.maxItems ?? ''} onChange={(e) => onChange({ ...field, maxItems: e.target.value ? Number(e.target.value) : undefined } as FieldDescriptor)} placeholder=\"∞\" />\n </Box>\n </Box>\n {!['object', 'array', 'select'].includes(ext.itemType ?? 'text') && (\n <Box>\n <label className={lbl}>Item placeholder</label>\n <input className={input} value={ext.itemPlaceholder ?? ''} onChange={(e) => onChange({ ...field, itemPlaceholder: e.target.value || undefined } as FieldDescriptor)} placeholder=\"Enter value…\" />\n </Box>\n )}\n </Box>\n )}\n\n {/* CONDITION */}\n <ConditionBuilder\n condition={field.condition as FieldConditionDef | undefined}\n onChange={(c) => onChange({ ...field, condition: c })}\n />\n\n {/* OPTIONAL */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <Box component=\"button\" onClick={() => setShowAdvanced((v) => !v)} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 0.5, p: 0, mb: showAdvanced ? 1.25 : 0 }}>\n <span style={{ ...sectionTitle, margin: 0, color: showAdvanced ? '#6366f1' : '#94a3b8' }}>\n {showAdvanced ? '▾' : '▸'} Optional settings\n </span>\n </Box>\n <Collapse in={showAdvanced}>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.25 }}>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Placeholder</label>\n <input className={input} value={(field.placeholder as string) ?? ''} onChange={(e) => set('placeholder', e.target.value || undefined)} placeholder=\"Hint text…\" />\n </Box>\n <Box>\n <label className={lbl}>Helper text</label>\n <input className={input} value={(field.helperText as string) ?? ''} onChange={(e) => set('helperText', e.target.value || undefined)} placeholder=\"Description…\" />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Info tooltip</label>\n <input className={input} value={(field.info as string) ?? ''} onChange={(e) => set('info', e.target.value || undefined)} placeholder=\"Shown in ℹ tooltip\" />\n </Box>\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1.5 }}>\n <CheckRow id={`${fieldKey}-req`} label=\"Required\" checked={!!field.required} onChange={(v) => set('required', v || undefined)} />\n <CheckRow id={`${fieldKey}-dis`} label=\"Disabled\" checked={!!field.disabled} onChange={(v) => set('disabled', v || undefined)} />\n <CheckRow id={`${fieldKey}-hid`} label=\"Hidden\" checked={!!field.hidden} onChange={(v) => set('hidden', v || undefined)} />\n <CheckRow id={`${fieldKey}-opt`} label=\"Show optional\" checked={!!field.showOptional} onChange={(v) => set('showOptional', v || undefined)} />\n <CheckRow id={`${fieldKey}-div`} label=\"Divider after\" checked={!!field.dividerAfter} onChange={(v) => set('dividerAfter', v || undefined)} />\n <CheckRow id={`${fieldKey}-frm`} label=\"Formula input\" checked={!!field.formula} onChange={(v) => set('formula', v || undefined)} />\n </Box>\n </Box>\n </Collapse>\n </Box>\n </Box>\n\n {/* Footer */}\n {!noFooter && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', gap: 1, justifyContent: 'flex-end', bgcolor: '#f8fafc', flexShrink: 0 }}>\n <Box component=\"button\" onClick={onCancel} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={onSave} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Save\n </Box>\n </Box>\n )}\n </>\n );\n}\n","// Shared design tokens for FlowForm field components.\n// Keep values in sync with the MUI theme when one is provided.\n\nexport const COLOR = {\n text: '#0f172a',\n textMuted: '#64748b',\n textLight: '#94a3b8',\n textPlaceholder: '#9ca3af',\n border: '#e2e8f0',\n borderHover: '#cbd5e1',\n borderFocus: '#6366f1',\n borderError: '#ef4444',\n borderInput: 'rgba(0,0,0,0.23)',\n accent: '#6366f1',\n accentHover: '#4f46e5',\n accentLight: '#f5f3ff',\n accentMuted: '#c7d2fe',\n error: '#ef4444',\n errorBg: '#fef2f2',\n success: '#15803d',\n successBg: '#f0fdf4',\n bg: '#ffffff',\n bgMuted: '#f8fafc',\n bgSubtle: '#f1f5f9',\n} as const;\n\nexport const RADIUS = {\n sm: '4px',\n md: '6px',\n lg: '8px',\n xl: '10px',\n xxl: '12px',\n} as const;\n\nexport const FONT_SIZE = {\n xs: 10,\n sm: 11,\n base: 12,\n md: 13,\n lg: 14,\n} as const;\n\nexport const SHADOW = {\n focusRing: `0 0 0 3px rgba(99,102,241,0.15)`,\n card: '0 1px 2px rgba(15,23,42,0.04)',\n} as const;\n\n/** Standard input sx props — apply as a base and override as needed */\nexport const INPUT_SX = {\n width: '100%',\n fontSize: FONT_SIZE.md,\n fontFamily: 'inherit',\n padding: '8px 12px',\n border: `1px solid ${COLOR.borderInput}`,\n borderRadius: RADIUS.md,\n outline: 'none',\n background: COLOR.bg,\n color: COLOR.text,\n boxSizing: 'border-box' as const,\n transition: 'border-color 0.15s, box-shadow 0.15s',\n};\n","import { useState } from 'react';\nimport { Dialog, Box, Typography, IconButton, Stepper, Step, StepLabel } from '@mui/material';\nimport { MdClose, MdArrowBack, MdCheck } from 'react-icons/md';\nimport { FieldConfigPanel } from './FieldConfigPanel';\nimport { SchemaBuilder } from './SchemaBuilder';\nimport { FlowForm } from '../DynamicFormRenderer';\nimport type { FieldDescriptor } from '../types';\nimport type { ConditionConfig } from '../types/formula';\nimport { COLOR, FONT_SIZE, INPUT_SX } from '../styles/constants';\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction defaultField(): FieldDescriptor {\n return { type: 'text', id: '', label: '', colSpan: 12 } as FieldDescriptor;\n}\n\n/** Returns true when the field type needs a \"Child fields\" config step */\nfunction needsChildStep(field: FieldDescriptor): boolean {\n return field.type === 'object' || field.type === 'array' || field.type === 'schema';\n}\n\nfunction childStepLabel(field: FieldDescriptor): string {\n if (field.type === 'object') return 'Child Fields';\n if (field.type === 'schema') return 'Schema Fields';\n const itemType = (field as any).itemType ?? 'text';\n if (itemType === 'object') return 'Item Fields';\n if (itemType === 'select') return 'Item Options';\n return 'Item Config';\n}\n\n// ─── Step 2 body: child fields / item config ──────────────────────────────────\n\nfunction ChildFieldsStep({ field, onChange }: { field: FieldDescriptor; onChange: (f: FieldDescriptor) => void }) {\n const ext = field as Record<string, any>;\n const itemType = ext.itemType ?? 'text';\n\n if (field.type === 'object') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields nested inside this object. Each child field can itself be an object or array.\n </Typography>\n <SchemaBuilder\n value={(field.children ?? []) as FieldDescriptor[]}\n onChange={(children) => onChange({ ...field, children })}\n label=\"Child fields\"\n />\n </Box>\n );\n }\n\n if (field.type === 'schema') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields inside this schema. When the form is filled, their values are collected into a single object as this field's value.\n </Typography>\n <SchemaBuilder\n value={(field.children ?? []) as FieldDescriptor[]}\n onChange={(children) => onChange({ ...field, children })}\n label=\"Schema fields\"\n />\n </Box>\n );\n }\n\n // Array — content varies by itemType\n if (field.type === 'array') {\n if (itemType === 'object') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields for each item in the array. Each item will be an object with these fields.\n </Typography>\n <SchemaBuilder\n value={(ext.itemFields ?? []) as FieldDescriptor[]}\n onChange={(itemFields) => onChange({ ...field, itemFields } as FieldDescriptor)}\n label=\"Item fields\"\n />\n </Box>\n );\n }\n\n if (itemType === 'select') {\n const opts = (ext.itemOptions ?? []) as { label: string; value: string }[];\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Options available in each select item.\n </Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {opts.map((opt, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input\n style={{ ...INPUT_SX, flex: 1, padding: '6px 10px' }}\n placeholder=\"Label\"\n value={opt.label}\n onChange={(e) => {\n const next = opts.map((o, idx) => idx === i ? { ...o, label: e.target.value } : o);\n onChange({ ...field, itemOptions: next } as FieldDescriptor);\n }}\n />\n <input\n style={{ ...INPUT_SX, flex: 1, padding: '6px 10px' }}\n placeholder=\"Value\"\n value={opt.value}\n onChange={(e) => {\n const next = opts.map((o, idx) => idx === i ? { ...o, value: e.target.value } : o);\n onChange({ ...field, itemOptions: next } as FieldDescriptor);\n }}\n />\n <Box\n component=\"button\"\n onClick={() => onChange({ ...field, itemOptions: opts.filter((_, idx) => idx !== i) } as FieldDescriptor)}\n sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}\n >\n ✕\n </Box>\n </Box>\n ))}\n </Box>\n <Box\n component=\"button\"\n onClick={() => onChange({ ...field, itemOptions: [...opts, { label: '', value: '' }] } as FieldDescriptor)}\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', justifyContent: 'center', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}\n >\n + Add option\n </Box>\n </Box>\n );\n }\n\n if (itemType === 'array') {\n const nestedItemType = ext.itemSchema?.itemType ?? 'text';\n const PRIMITIVE_TYPES = [\n { value: 'text', label: 'Text' }, { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' }, { value: 'url', label: 'URL' },\n { value: 'password', label: 'Password' }, { value: 'select', label: 'Select' }, { value: 'object', label: 'Object' },\n ];\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Each item is itself an array. Configure the type of items inside the nested array.\n </Typography>\n <label style={{ fontSize: FONT_SIZE.sm, fontWeight: 600, color: COLOR.textMuted, display: 'block', marginBottom: 3 }}>Nested item type</label>\n <select\n style={{ ...INPUT_SX, padding: '6px 10px', cursor: 'pointer' }}\n value={nestedItemType}\n onChange={(e) => onChange({ ...field, itemSchema: { ...(ext.itemSchema ?? {}), itemType: e.target.value } } as FieldDescriptor)}\n >\n {PRIMITIVE_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n );\n }\n\n // Primitive itemType — nothing extra to configure\n return (\n <Box sx={{ p: 2.5 }}>\n <Box sx={{ border: '1.5px dashed #e2e8f0', borderRadius: '8px', py: 3, textAlign: 'center' }}>\n <Typography sx={{ fontSize: 13, color: '#94a3b8' }}>\n No extra configuration needed for <strong>{itemType}</strong> items.\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#cbd5e1', mt: 0.5 }}>\n Item placeholder and labels are set in the previous step.\n </Typography>\n </Box>\n </Box>\n );\n }\n\n return null;\n}\n\n// ─── Preview using real FlowForm ──────────────────────────────────────────────\n\nfunction FieldPreview({ field }: { field: FieldDescriptor }) {\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>({});\n const key = field.id ?? field.name ?? 'preview';\n const COL_OPTIONS = [\n { value: 3, label: '1/4' }, { value: 4, label: '1/3' },\n { value: 6, label: '1/2' }, { value: 8, label: '2/3' }, { value: 12, label: 'Full' },\n ];\n const colLabel = field.colSpan && field.colSpan < 12\n ? COL_OPTIONS.find((c) => c.value === field.colSpan)?.label ?? field.colSpan\n : 'Full';\n\n return (\n <Box sx={{ p: 2.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 2, px: 1.25, py: 0.75, bgcolor: '#f0fdf4', border: '1px solid #bbf7d0', borderRadius: '7px' }}>\n <Typography sx={{ fontSize: 11, color: '#15803d', fontWeight: 500, flex: 1 }}>\n Live preview — interact to test the field\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#64748b' }}>Width: {colLabel}</Typography>\n </Box>\n <FlowForm\n schema={{ layout: 'flat', fields: [field] }}\n initialValues={{ [key]: field.type === 'array' ? [] : (field.type === 'object' || field.type === 'schema') ? {} : '' }}\n onSubmit={() => {}}\n conditionConfig={conditionConfig}\n onConditionConfigChange={setConditionConfig}\n />\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface AddFieldModalProps {\n open: boolean;\n initial?: FieldDescriptor;\n onSave: (field: FieldDescriptor) => void;\n onClose: () => void;\n editMode?: boolean;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function AddFieldModal({ open, initial, onSave, onClose, editMode = false }: AddFieldModalProps) {\n const [step, setStep] = useState(1);\n const [draft, setDraft] = useState<FieldDescriptor>(() => initial ?? defaultField());\n\n function handleOpen() {\n setDraft(initial ?? defaultField());\n setStep(1);\n }\n\n const hasChild = needsChildStep(draft);\n const totalSteps = hasChild ? 3 : 2;\n\n // Step labels\n const stepLabels = hasChild\n ? ['Configure', childStepLabel(draft), 'Preview']\n : ['Configure', 'Preview'];\n\n const canNext = !!(draft.id || (draft as any).name) && !!draft.type;\n\n function goNext() { setStep((s) => Math.min(s + 1, totalSteps)); }\n function goBack() { setStep((s) => Math.max(s - 1, 1)); }\n\n function handleSave() { onSave(draft); onClose(); }\n\n // Map logical step to display step index (0-based for MUI Stepper)\n const activeStepIdx = step - 1;\n const isLastStep = step === totalSteps;\n const isPreview = (hasChild && step === 3) || (!hasChild && step === 2);\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n TransitionProps={{ onEnter: handleOpen }}\n maxWidth=\"sm\"\n fullWidth\n PaperProps={{ sx: { borderRadius: '12px', overflow: 'hidden', display: 'flex', flexDirection: 'column', maxHeight: '90vh' } }}\n >\n {/* Header */}\n <Box sx={{ px: 2.5, pt: 1.75, pb: 0, borderBottom: '1px solid #e2e8f0', flexShrink: 0 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 1.5 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a', flex: 1 }}>\n {editMode ? 'Edit Field' : 'Add Field'}\n </Typography>\n <IconButton size=\"small\" onClick={onClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Box>\n <Stepper activeStep={activeStepIdx} sx={{ pb: 1.5 }}>\n {stepLabels.map((label, i) => (\n <Step key={label} completed={activeStepIdx > i}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n </Box>\n\n {/* Body */}\n <Box sx={{ flex: 1, overflowY: 'auto' }}>\n {step === 1 && (\n <FieldConfigPanel field={draft} onChange={setDraft} onSave={goNext} onCancel={onClose} noFooter />\n )}\n {step === 2 && hasChild && (\n <ChildFieldsStep field={draft} onChange={setDraft} />\n )}\n {isPreview && (\n <FieldPreview field={draft} />\n )}\n </Box>\n\n {/* Footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {step > 1 && (\n <Box component=\"button\" onClick={goBack} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 500, color: '#6c757d', px: 0, '&:hover': { color: '#0f172a' } }}>\n <MdArrowBack size={14} /> Back\n </Box>\n )}\n <Box sx={{ flex: 1 }} />\n <Box component=\"button\" onClick={onClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n {isLastStep ? (\n <Box component=\"button\" onClick={handleSave} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> {editMode ? 'Save changes' : 'Add field'}\n </Box>\n ) : (\n <Box component=\"button\" onClick={goNext} disabled={!canNext} sx={{ border: 'none', cursor: canNext ? 'pointer' : 'not-allowed', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: canNext ? '#6366f1' : '#c7d2fe', color: '#fff', '&:hover': { bgcolor: canNext ? '#4f46e5' : '#c7d2fe' } }}>\n Next →\n </Box>\n )}\n </Box>\n </Dialog>\n );\n}\n","import { useState } from 'react';\nimport { Dialog, Box, Typography, IconButton, Tooltip } from '@mui/material';\nimport { MdClose, MdDeleteOutline, MdEdit, MdDragIndicator, MdCheck } from 'react-icons/md';\nimport { AddFieldModal } from './AddFieldModal';\nimport type { FieldDescriptor } from '../types';\n\n// ─── Field row in list ────────────────────────────────────────────────────────\n\ninterface ListRowProps {\n field: FieldDescriptor;\n index: number;\n total: number;\n onEdit: () => void;\n onDelete: () => void;\n onMoveUp: () => void;\n onMoveDown: () => void;\n}\n\nfunction ListRow({ field, index, total, onEdit, onDelete, onMoveUp, onMoveDown }: ListRowProps) {\n const label = (field.label as string) || field.id || field.name || 'Untitled';\n const key = field.id ?? field.name ?? '';\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, px: 1.5, py: 1, border: '1px solid #e2e8f0', borderRadius: '8px', bgcolor: '#fff' }}>\n {/* Drag handle / move buttons */}\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.25, color: '#cbd5e1' }}>\n <Box component=\"button\" onClick={onMoveUp} disabled={index === 0} sx={{ background: 'none', border: 'none', p: 0, cursor: index === 0 ? 'default' : 'pointer', color: index === 0 ? '#e2e8f0' : '#94a3b8', lineHeight: 1, fontSize: 10, '&:hover': { color: index === 0 ? '#e2e8f0' : '#475569' } }}>▲</Box>\n <Box component=\"button\" onClick={onMoveDown} disabled={index === total - 1} sx={{ background: 'none', border: 'none', p: 0, cursor: index === total - 1 ? 'default' : 'pointer', color: index === total - 1 ? '#e2e8f0' : '#94a3b8', lineHeight: 1, fontSize: 10, '&:hover': { color: index === total - 1 ? '#e2e8f0' : '#475569' } }}>▼</Box>\n </Box>\n\n <Box sx={{ fontSize: 10, fontWeight: 700, px: 0.75, py: 0.2, borderRadius: '4px', bgcolor: '#eef2ff', color: '#6366f1', flexShrink: 0 }}>\n {field.type}\n </Box>\n\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Typography sx={{ fontSize: 13, fontWeight: 600, color: '#0f172a', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {label}\n {field.required && <Box component=\"span\" sx={{ color: '#dc3545', ml: 0.25 }}>*</Box>}\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8', fontFamily: 'monospace' }}>{key}</Typography>\n </Box>\n\n <Tooltip title=\"Edit field\" placement=\"top\">\n <Box component=\"button\" onClick={onEdit} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', width: 28, height: 28, borderRadius: '6px', p: 0, color: '#94a3b8', '&:hover': { bgcolor: '#f1f5f9', color: '#475569' } }}>\n <MdEdit size={14} />\n </Box>\n </Tooltip>\n <Tooltip title=\"Remove field\" placement=\"top\">\n <Box component=\"button\" onClick={onDelete} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', width: 28, height: 28, borderRadius: '6px', p: 0, color: '#94a3b8', '&:hover': { bgcolor: '#fee2e2', color: '#dc2626' } }}>\n <MdDeleteOutline size={16} />\n </Box>\n </Tooltip>\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface EditSchemaModalProps {\n open: boolean;\n value: FieldDescriptor[];\n onSave: (fields: FieldDescriptor[]) => void;\n onClose: () => void;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function EditSchemaModal({ open, value, onSave, onClose }: EditSchemaModalProps) {\n const [draft, setDraft] = useState<FieldDescriptor[]>(value);\n const [editingIdx, setEditingIdx] = useState<number | null>(null);\n\n function handleOpen() { setDraft(value); setEditingIdx(null); }\n\n function handleDelete(i: number) { setDraft((d) => d.filter((_, idx) => idx !== i)); }\n\n function handleMove(i: number, dir: -1 | 1) {\n setDraft((d) => {\n const next = [...d];\n const j = i + dir;\n if (j < 0 || j >= next.length) return d;\n [next[i], next[j]] = [next[j], next[i]];\n return next;\n });\n }\n\n function handleSaveField(updated: FieldDescriptor) {\n if (editingIdx === null) return;\n setDraft((d) => { const next = [...d]; next[editingIdx] = updated; return next; });\n setEditingIdx(null);\n }\n\n function handleDone() { onSave(draft); onClose(); }\n\n const hasChanges = JSON.stringify(draft) !== JSON.stringify(value);\n\n return (\n <>\n <Dialog\n open={open}\n onClose={onClose}\n TransitionProps={{ onEnter: handleOpen }}\n maxWidth=\"sm\"\n fullWidth\n PaperProps={{ sx: { borderRadius: '12px', overflow: 'hidden', display: 'flex', flexDirection: 'column', maxHeight: '85vh' } }}\n >\n {/* Header */}\n <Box sx={{ display: 'flex', alignItems: 'center', px: 2.5, py: 1.75, borderBottom: '1px solid #e2e8f0', flexShrink: 0 }}>\n <Box sx={{ flex: 1 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a' }}>Edit Schema</Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8' }}>{draft.length} field{draft.length !== 1 ? 's' : ''} defined</Typography>\n </Box>\n <IconButton size=\"small\" onClick={onClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Box>\n\n {/* Body */}\n <Box sx={{ flex: 1, overflowY: 'auto', p: 2.5 }}>\n {draft.length === 0 ? (\n <Box sx={{ border: '1.5px dashed rgba(0,0,0,0.12)', borderRadius: '8px', py: 4, textAlign: 'center' }}>\n <Typography sx={{ fontSize: 13, color: '#94a3b8' }}>No fields defined yet</Typography>\n </Box>\n ) : (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.75 }}>\n {draft.map((field, i) => (\n <ListRow\n key={`${field.id ?? field.name}-${i}`}\n field={field}\n index={i}\n total={draft.length}\n onEdit={() => setEditingIdx(i)}\n onDelete={() => handleDelete(i)}\n onMoveUp={() => handleMove(i, -1)}\n onMoveDown={() => handleMove(i, 1)}\n />\n ))}\n </Box>\n )}\n </Box>\n\n {/* Footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {hasChanges\n ? <Typography sx={{ fontSize: 11, color: '#f59e0b', fontWeight: 500, flex: 1 }}>Unsaved changes</Typography>\n : <Box sx={{ flex: 1 }} />\n }\n <Box component=\"button\" onClick={onClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={handleDone} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Done\n </Box>\n </Box>\n </Dialog>\n\n {/* Edit field modal (nested) */}\n {editingIdx !== null && (\n <AddFieldModal\n open={editingIdx !== null}\n initial={draft[editingIdx]}\n onSave={handleSaveField}\n onClose={() => setEditingIdx(null)}\n editMode\n />\n )}\n </>\n );\n}\n","import { useState, useCallback, useMemo, useEffect, useRef } from 'react';\nimport { Tooltip } from '@mui/material';\nimport { MdAdd, MdSettings, MdAccountTree } from 'react-icons/md';\nimport { FaWpforms } from \"react-icons/fa6\";\nimport { AddFieldModal } from './AddFieldModal';\nimport { EditSchemaModal } from './EditSchemaModal';\nimport { FlowForm } from '../DynamicFormRenderer';\nimport { buildValidationSchema } from './buildValidationSchema';\nimport { buildEvaluationPayload, serializeConditionExpressions } from '../DynamicFormRenderer/formulaUtils';\nimport type { FieldSuggestion } from './AddFieldPanel';\nimport type { FieldDescriptor } from '../types';\nimport type { FormulaConfig, ConditionConfig } from '../types/formula';\nimport { VariablePickerProvider, type VariableGroup } from '../VariablePicker/VariablePickerContext';\nimport { VariablePicker } from '../VariablePicker/VariablePicker';\nimport { TabsEditContext } from './TabsEditContext';\n\nimport './SchemaBuilder.css';\n\nfunction buildInitialValues(fields: FieldDescriptor[]): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const f of fields) {\n const key = f.id ?? f.name ?? '';\n if (!key) continue;\n if (f.type === 'array') {\n result[key] = [];\n } else if (f.type === 'object' || f.type === 'schema') {\n result[key] = buildInitialValues((f.children ?? []) as FieldDescriptor[]);\n } else {\n result[key] = '';\n }\n }\n return result;\n}\n\nexport type { FieldSuggestion };\n\n// ─── Payload shape ────────────────────────────────────────────────────────────\n\nexport interface SchemaBuilderPayload {\n /** The FieldDescriptor[] schema — save this to DB to restore the editor */\n schema: FieldDescriptor[];\n /** Formula AST per field — part of editor state */\n formulaConfig: FormulaConfig;\n /** Condition rows per field — part of editor state */\n conditionConfig: ConditionConfig;\n /** Serialized condition expression string per field — ready for backend rule engine */\n conditionExpressions: Record<string, string>;\n /** Live form values entered by the user */\n values: Record<string, unknown>;\n /** Backend-ready evaluation payload (formulas resolved against values) */\n evaluationPayload: ReturnType<typeof buildEvaluationPayload>;\n}\n\nexport interface SchemaBuilderProps {\n value: FieldDescriptor[];\n onChange: (fields: FieldDescriptor[]) => void;\n suggestions?: FieldSuggestion[];\n label?: string;\n /** Fires on every change: schema edit, value input, formula/condition update */\n onPayload?: (payload: SchemaBuilderPayload) => void;\n /** Whether to auto-validate required fields (shows inline error messages) */\n validate?: boolean;\n /** Called whenever form validity changes — wire to enable/disable your Save button */\n onValidityChange?: (isValid: boolean) => void;\n /** Optional variable groups to seamlessly enable the Variable Picker for formula fields */\n variableGroups?: VariableGroup[];\n /** Saved form values to restore when reopening — keys match field ids */\n initialValues?: Record<string, unknown>;\n /** Saved formula config to restore when reopening */\n initialFormulaConfig?: FormulaConfig;\n /** Saved condition config to restore when reopening */\n initialConditionConfig?: ConditionConfig;\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function SchemaBuilder({\n value, onChange, suggestions, label = 'Fields',\n onPayload, validate = true, onValidityChange, variableGroups,\n initialValues: initialValuesProp,\n initialFormulaConfig,\n initialConditionConfig,\n}: SchemaBuilderProps) {\n const [addOpen, setAddOpen] = useState(false);\n const [editOpen, setEditOpen] = useState(false);\n\n // Add-field-to-tab state (used when TabsField's \"+\" button is clicked inside the preview)\n const [tabAddTarget, setTabAddTarget] = useState<{ containerFieldId: string; tabId: string } | null>(null);\n const [formulaConfig, setFormulaConfig] = useState<FormulaConfig>(initialFormulaConfig ?? {});\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>(initialConditionConfig ?? {});\n\n // Keep a ref to the latest form values so the config-change effect can include them\n const latestValues = useRef<Record<string, unknown>>(initialValuesProp ?? {});\n\n const builtInitialValues = useMemo(() => buildInitialValues(value), [value]);\n // Merge: schema-built empty values as base, saved values override\n const initialValues = useMemo(\n () => initialValuesProp && Object.keys(initialValuesProp).length > 0\n ? { ...builtInitialValues, ...initialValuesProp }\n : builtInitialValues,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [builtInitialValues, initialValuesProp],\n );\n\n const validationSchema = useMemo(() =>\n validate ? buildValidationSchema(value) : undefined,\n [validate, value]);\n\n // Fire onPayload whenever conditions / formula config change (not just on value input)\n useEffect(() => {\n if (!onPayload) return;\n onPayload({\n schema: value,\n formulaConfig,\n conditionConfig,\n conditionExpressions: serializeConditionExpressions(conditionConfig),\n values: latestValues.current,\n evaluationPayload: buildEvaluationPayload({ values: latestValues.current, conditionConfig }),\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [conditionConfig, formulaConfig, value]);\n\n const handleValuesChange = useCallback((vals: Record<string, unknown>) => {\n latestValues.current = vals;\n if (import.meta.env.DEV) {\n console.log('[SchemaBuilder] handleValuesChange — vals:', vals);\n }\n if (!onPayload) return;\n onPayload({\n schema: value,\n formulaConfig,\n conditionConfig,\n conditionExpressions: serializeConditionExpressions(conditionConfig),\n values: vals,\n evaluationPayload: buildEvaluationPayload({ values: vals, conditionConfig }),\n });\n }, [value, formulaConfig, conditionConfig, onPayload]);\n\n function handleAddField(field: FieldDescriptor) {\n onChange([...value, field]);\n }\n\n function handleAddFieldToTab(field: FieldDescriptor) {\n if (!tabAddTarget) return;\n const { containerFieldId, tabId } = tabAddTarget;\n const updated = value.map(f => {\n if ((f.id ?? (f as any).name) !== containerFieldId) return f;\n const tabs: any[] = (f as any).tabs ?? [];\n return {\n ...f,\n tabs: tabs.map(t =>\n t.id === tabId ? { ...t, fields: [...(t.fields ?? []), field] } : t\n ),\n };\n });\n onChange(updated as FieldDescriptor[]);\n setTabAddTarget(null);\n }\n\n function handleRemoveFieldFromTab(containerFieldId: string, tabId: string, fieldIndex: number) {\n const updated = value.map(f => {\n if ((f.id ?? (f as any).name) !== containerFieldId) return f;\n const tabs: any[] = (f as any).tabs ?? [];\n return {\n ...f,\n tabs: tabs.map(t =>\n t.id === tabId ? { ...t, fields: (t.fields ?? []).filter((_: any, i: number) => i !== fieldIndex) } : t\n ),\n };\n });\n onChange(updated as FieldDescriptor[]);\n }\n\n const tabsEditContextValue = useMemo(() => ({\n openAddFieldDialog: (containerFieldId: string, tabId: string) =>\n setTabAddTarget({ containerFieldId, tabId }),\n removeFieldFromTab: handleRemoveFieldFromTab,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), [value, onChange]);\n\n const inner = (\n <div className=\"schema-builder-root\">\n {/* Header row */}\n {value.length > 0 && (\n <div className=\"schema-builder-header\">\n <div className=\"schema-builder-actions\">\n <Tooltip title=\"Edit schema\" placement=\"top\">\n <button\n className=\"sb-btn sb-btn-outline\"\n onClick={() => setEditOpen(true)}\n >\n <MdSettings size={13} /> Edit Schema\n </button>\n </Tooltip>\n <Tooltip title=\"Add a new field\" placement=\"top\">\n <button\n className=\"sb-btn sb-btn-primary\"\n onClick={() => setAddOpen(true)}\n >\n <MdAdd size={14} /> Add Field\n </button>\n </Tooltip>\n </div>\n </div>\n )}\n\n {/* Rendered form using actual field components */}\n {value.length > 0 ? (\n <TabsEditContext.Provider value={tabsEditContextValue}>\n <FlowForm\n schema={{ layout: 'flat', fields: value }}\n initialValues={initialValues}\n onSubmit={() => { }}\n validationSchema={validationSchema}\n onValidityChange={onValidityChange}\n onValuesChange={onPayload ? handleValuesChange : undefined}\n formulaConfig={formulaConfig}\n onFormulaConfigChange={setFormulaConfig}\n conditionConfig={conditionConfig}\n onConditionConfigChange={setConditionConfig}\n />\n </TabsEditContext.Provider>\n ) : (\n <div className=\"schema-builder-empty-state\">\n <FaWpforms size={40} className=\"schema-builder-empty-icon\" />\n \n <p className=\"schema-builder-empty-title\">\n Tell us what fields should be in the list, and assign values to them.\n </p>\n \n <div className=\"schema-builder-empty-actions\">\n <button\n className=\"btn\"\n onClick={() => setAddOpen(true)}\n >\n Add field\n </button>\n \n {/* <div className=\"setup-manual-text\">\n or \n <span \n className=\"setup-manual-link\"\n onClick={() => setEditOpen(true)}\n >\n setup manually\n </span>\n </div> */}\n </div>\n </div>\n )}\n\n <AddFieldModal\n open={addOpen}\n onSave={handleAddField}\n onClose={() => setAddOpen(false)}\n />\n <EditSchemaModal\n open={editOpen}\n value={value}\n onSave={onChange}\n onClose={() => setEditOpen(false)}\n />\n {/* Modal for adding a field to a specific tab from the rendered preview */}\n <AddFieldModal\n open={!!tabAddTarget}\n onSave={handleAddFieldToTab}\n onClose={() => setTabAddTarget(null)}\n />\n </div>\n );\n\n if (variableGroups) {\n return (\n <VariablePickerProvider groups={variableGroups}>\n <VariablePicker width={260} mode=\"popover\" />\n {inner}\n </VariablePickerProvider>\n );\n }\n\n return inner;\n}\n","import { useState, useRef } from 'react';\nimport { Drawer, Box, Typography, IconButton, Divider, Chip, Tooltip } from '@mui/material';\nimport { MdSettings, MdArrowForward, MdClose, MdCheck, MdAdd, MdArrowBack } from 'react-icons/md';\nimport { SchemaBuilder } from './SchemaBuilder';\nimport type { SchemaBuilderProps, SchemaBuilderPayload } from './SchemaBuilder';\nimport { FieldConfigPanel } from './FieldConfigPanel';\nimport type { FieldDescriptor } from '../types';\n\n// ─── Compact summary shown in main drawer ────────────────────────────────────\n\nfunction FieldSummary({ fields, onOpen }: { fields: FieldDescriptor[]; onOpen: () => void }) {\n return (\n <Box sx={{ border: '1px solid #e2e8f0', borderRadius: '8px', bgcolor: '#fff', overflow: 'hidden' }}>\n {fields.length > 0 ? (\n <Box sx={{ px: 1.5, py: 1.25, display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {fields.map((f, i) => {\n const key = f.id ?? f.name ?? '';\n return (\n <Tooltip key={i} title={`${f.type} · ${key}`} placement=\"top\">\n <Chip\n label={(f.label as string) || key}\n size=\"small\"\n sx={{ fontSize: 11, fontWeight: 500, height: 22, bgcolor: '#f1f5f9', color: '#334155', border: '1px solid #e2e8f0', '& .MuiChip-label': { px: 1 } }}\n />\n </Tooltip>\n );\n })}\n </Box>\n ) : (\n <Box sx={{ px: 1.5, py: 1.5 }}>\n <Typography sx={{ fontSize: 12, color: '#94a3b8' }}>No fields defined yet</Typography>\n </Box>\n )}\n <Divider sx={{ borderColor: '#f1f5f9' }} />\n <Box onClick={onOpen} sx={{ display: 'flex', alignItems: 'center', gap: 0.75, px: 1.5, py: 1, cursor: 'pointer', '&:hover': { bgcolor: '#f8fafc' }, transition: 'background 0.12s' }}>\n {fields.length === 0 ? <MdAdd size={14} color=\"#6366f1\" /> : <MdSettings size={13} color=\"#6366f1\" />}\n <Typography sx={{ fontSize: 12, fontWeight: 600, color: '#6366f1', flex: 1 }}>\n {fields.length === 0 ? 'Add fields' : 'Configure fields'}\n </Typography>\n <MdArrowForward size={13} color=\"#94a3b8\" />\n </Box>\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface SchemaBuilderDrawerProps extends SchemaBuilderProps {\n label?: string;\n drawerTitle?: string;\n drawerWidth?: number;\n /**\n * Fired when the user clicks Done.\n * @param schema Save this to DB — pass it back to FlowForm/SchemaBuilder to restore the form\n * @param payload Send this to backend — contains conditionExpressions, formulaConfig, values, evaluationPayload\n */\n onDone?: (schema: FieldDescriptor[], payload: SchemaBuilderPayload | null) => void;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\ntype View = { type: 'list' } | { type: 'edit'; index: number };\n\nexport function SchemaBuilderDrawer({\n value,\n onChange,\n suggestions,\n onPayload,\n onDone,\n validate,\n onValidityChange,\n label = 'Fields',\n drawerTitle = 'Configure Fields',\n drawerWidth = 580,\n}: SchemaBuilderDrawerProps) {\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<View>({ type: 'list' });\n const [draft, setDraft] = useState<FieldDescriptor[]>(value);\n const latestPayload = useRef<SchemaBuilderPayload | null>(null);\n\n // Persisted state across open/close cycles — survives Cancel\n const savedValues = useRef<Record<string, unknown> | undefined>(undefined);\n const savedFormulaConfig = useRef<SchemaBuilderPayload['formulaConfig'] | undefined>(undefined);\n const savedConditionConfig = useRef<SchemaBuilderPayload['conditionConfig'] | undefined>(undefined);\n\n // Local draft of the field being edited\n const [fieldDraft, setFieldDraft] = useState<FieldDescriptor | null>(null);\n\n function handleOpen() {\n if (import.meta.env.DEV) console.log('[SchemaBuilderDrawer] handleOpen — savedValues.current:', savedValues.current);\n setDraft(value); setView({ type: 'list' }); setOpen(true);\n }\n\n function handleDone() {\n const p = latestPayload.current;\n // Persist the latest state so reopening restores it\n if (p) {\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n }\n if (import.meta.env.DEV) {\n console.log('[SchemaBuilderDrawer] handleDone — savedValues:', savedValues.current);\n }\n onChange(draft);\n setOpen(false);\n onDone?.(draft, p);\n if (import.meta.env.DEV) {\n console.group('🟣 SchemaBuilder — Done');\n console.log(\n '%c schema %c (save to DB → pass back to FlowForm to restore this form)',\n 'background:#6366f1;color:#fff;padding:1px 6px;border-radius:3px;font-weight:700',\n 'color:#64748b;font-weight:400',\n draft,\n );\n console.log(\n '%c payload %c (send to backend for evaluation)',\n 'background:#0f172a;color:#e2e8f0;padding:1px 6px;border-radius:3px;font-weight:700',\n 'color:#64748b;font-weight:400',\n {\n conditionExpressions: p?.conditionExpressions ?? {},\n formulaConfig: p?.formulaConfig ?? {},\n values: p?.values ?? {},\n evaluationPayload: p?.evaluationPayload ?? {},\n },\n );\n console.groupEnd();\n }\n }\n\n function handleClose() {\n // Save whatever the user had so far before closing\n const p = latestPayload.current;\n if (p) {\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n }\n setDraft(value);\n setOpen(false);\n }\n\n function handleEditField(index: number) {\n setFieldDraft({ ...draft[index] });\n setView({ type: 'edit', index });\n }\n\n function handleSaveField() {\n if (view.type !== 'edit' || !fieldDraft) return;\n const next = [...draft];\n next[view.index] = fieldDraft;\n setDraft(next);\n setView({ type: 'list' });\n setFieldDraft(null);\n }\n\n function handleCancelEdit() {\n setView({ type: 'list' });\n setFieldDraft(null);\n }\n\n const hasChanges = JSON.stringify(draft) !== JSON.stringify(value);\n const editingField = view.type === 'edit' ? draft[view.index] : null;\n\n return (\n <>\n {/* Summary in main drawer */}\n <Box>\n <Typography sx={{ fontSize: 12, fontWeight: 700, color: '#64748b', textTransform: 'uppercase', letterSpacing: 0.5, mb: 0.75 }}>\n {label}\n </Typography>\n <FieldSummary fields={value} onOpen={handleOpen} />\n </Box>\n\n {/* Secondary drawer */}\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={handleClose}\n PaperProps={{ sx: { width: drawerWidth, display: 'flex', flexDirection: 'column', boxShadow: '-4px 0 24px rgba(0,0,0,0.12)', overflow: 'hidden' } }}\n >\n {/* ── HEADER ────────────────────────────────────────────────── */}\n <Box sx={{ display: 'flex', alignItems: 'center', px: 2, py: 1.5, borderBottom: '1px solid #e2e8f0', flexShrink: 0, gap: 1 }}>\n {view.type === 'edit' && (\n <Tooltip title=\"Back to fields\" placement=\"bottom\">\n <IconButton size=\"small\" onClick={handleCancelEdit} sx={{ color: '#64748b' }}>\n <MdArrowBack size={17} />\n </IconButton>\n </Tooltip>\n )}\n <Box sx={{ flex: 1 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a' }}>\n {view.type === 'edit'\n ? ((fieldDraft?.label as string) || fieldDraft?.id || 'Edit field')\n : drawerTitle}\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8' }}>\n {view.type === 'edit' ? 'Configure field properties' : `${draft.length} field${draft.length !== 1 ? 's' : ''} defined`}\n </Typography>\n </Box>\n {view.type === 'list' && (\n <Tooltip title=\"Close\" placement=\"bottom\">\n <IconButton size=\"small\" onClick={handleClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n\n {/* ── BODY ──────────────────────────────────────────────────── */}\n {view.type === 'list' && (\n <>\n <Box sx={{ flex: 1, overflowY: 'auto', p: 2.5 }}>\n <SchemaBuilder\n value={draft}\n onChange={setDraft}\n suggestions={suggestions}\n onPayload={(p) => { \n latestPayload.current = p; \n // Persist immediately so adding/removing fields doesn't wipe current data\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n onPayload?.(p); \n }}\n validate={validate}\n onValidityChange={onValidityChange}\n label={label}\n initialValues={savedValues.current}\n initialFormulaConfig={savedFormulaConfig.current}\n initialConditionConfig={savedConditionConfig.current}\n />\n </Box>\n\n {/* List footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {hasChanges\n ? <Typography sx={{ fontSize: 11, color: '#f59e0b', fontWeight: 500, flex: 1 }}>Unsaved changes</Typography>\n : <Box sx={{ flex: 1 }} />\n }\n <Box component=\"button\" onClick={handleClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={handleDone} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Done\n </Box>\n </Box>\n </>\n )}\n\n {/* Edit view — FieldConfigPanel fills the drawer */}\n {view.type === 'edit' && fieldDraft && (\n <FieldConfigPanel\n field={fieldDraft}\n onChange={setFieldDraft}\n onSave={handleSaveField}\n onCancel={handleCancelEdit}\n />\n )}\n </Drawer>\n </>\n );\n}\n"],"names":["useFlowForm","schema","initialValues","onSubmit","showErrorsImmediately","fields","validationSchema","useMemo","buildValidationSchema","initialTouched","acc","f","key","resolveFieldKey","formulaConfig","setFormulaConfig","useState","conditionConfig","setConditionConfig","initialValuesRef","useRef","useEffect","formik","useFormik","values","evaluation","buildEvaluationPayload","submit","useCallback","reset","nextValues","FIELD_TYPE_OPTIONS","FlowForgeRegistry","input","lbl","sectionTitle","ARRAY_ITEM_TYPES","COL_OPTIONS","ColSpanPicker","value","onChange","current","Box","jsx","opt","Tooltip","_","i","OptionsEditor","options","update","val","o","idx","jsxs","e","MdClose","MdAdd","CONDITION_COL_TYPES","ConditionColEditor","col","onDelete","isSelect","isOperator","opts","ConditionBuilder","condition","enabled","toggle","addCol","type","defaultId","updateCol","next","removeCol","c","t","CheckRow","id","label","checked","TabsViewsEditor","views","v","add","view","ButtonGroup","groupLabel","FieldConfigPanel","field","onSave","onCancel","noFooter","showAdvanced","setShowAdvanced","fieldKey","ext","isOptionsField","customRegistryDef","customConfigSchema","set","Fragment","FlowForm","vals","newViews","existing","merged","prev","Collapse","MdCheck","COLOR","RADIUS","FONT_SIZE","INPUT_SX","defaultField","needsChildStep","childStepLabel","itemType","ChildFieldsStep","Typography","SchemaBuilder","children","itemFields","nestedItemType","_a","PRIMITIVE_TYPES","FieldPreview","colLabel","AddFieldModal","open","initial","onClose","editMode","step","setStep","draft","setDraft","handleOpen","hasChild","totalSteps","stepLabels","canNext","goNext","s","goBack","handleSave","activeStepIdx","isLastStep","isPreview","Dialog","IconButton","Stepper","Step","StepLabel","MdArrowBack","ListRow","index","total","onEdit","onMoveUp","onMoveDown","MdEdit","MdDeleteOutline","EditSchemaModal","editingIdx","setEditingIdx","handleDelete","d","handleMove","dir","j","handleSaveField","updated","handleDone","hasChanges","buildInitialValues","result","suggestions","onPayload","validate","onValidityChange","variableGroups","initialValuesProp","initialFormulaConfig","initialConditionConfig","addOpen","setAddOpen","editOpen","setEditOpen","tabAddTarget","setTabAddTarget","latestValues","builtInitialValues","serializeConditionExpressions","handleValuesChange","handleAddField","handleAddFieldToTab","containerFieldId","tabId","tabs","handleRemoveFieldFromTab","fieldIndex","tabsEditContextValue","inner","MdSettings","TabsEditContext","FaWpforms","VariablePickerProvider","VariablePicker","FieldSummary","onOpen","Chip","Divider","MdArrowForward","SchemaBuilderDrawer","onDone","drawerTitle","drawerWidth","setOpen","setView","latestPayload","savedValues","savedFormulaConfig","savedConditionConfig","fieldDraft","setFieldDraft","p","handleClose","handleCancelEdit","Drawer"],"mappings":"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"}
|