@prolibu-suite/cobalt-form-builder 1.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cobalt-form-builder.cjs +1 -1
- package/dist/cobalt-form-builder.cjs.map +1 -1
- package/dist/cobalt-form-builder.css +1 -1
- package/dist/cobalt-form-builder.js +235 -235
- package/dist/cobalt-form-builder.js.map +1 -1
- package/dist/components/EditableText.vue.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cobalt-form-builder.js","sources":["../src/stores/schema.ts","../src/fieldCatalog.ts","../src/components/FieldToolbox.vue","../src/components/EditableText.vue","../../../node_modules/.pnpm/vue-draggable-plus@0.6.1_@types+sortablejs@1.15.9/node_modules/vue-draggable-plus/dist/vue-draggable-plus.js","../src/components/FieldCardExpanded.vue","../src/components/FieldCard.vue","../src/components/PageCard.vue","../src/components/FieldCanvas.vue","../src/components/PropertiesPanel.vue","../src/components/DesignerTab.vue","../src/components/JsonTab.vue","../src/components/PreviewTab.vue","../src/CobaltFormBuilder.vue"],"sourcesContent":["import { computed, inject, reactive, ref, type InjectionKey } from 'vue';\nimport {\n isPagedSchema,\n resolveTheme,\n toPagedSchema,\n type ThemeSpec,\n} from '@prolibu-suite/cobalt-form-core';\n\n/**\n * Internal model for the builder. We always work with the paged shape so\n * the UI can render pages as containers à la SurveyJS, even when the user\n * only has one page.\n */\ninterface BuilderPage {\n name: string;\n title?: string;\n description?: string;\n visibleIf?: string;\n hideTitle?: boolean;\n hideDescription?: boolean;\n fields: Record<string, any>;\n}\n\ninterface BuilderSchema {\n title: string;\n description: string;\n mode: 'form' | 'quiz' | 'survey';\n pages: BuilderPage[];\n theme: ThemeSpec;\n}\n\n/**\n * Selection has three scopes, each editing a different layer of the schema:\n * - `form` → global form-level settings (theme, title, mode).\n * - `page` → page-level (id, visibleIf, etc.). pageIdx points at it.\n * - `field` → field inside the current page. fieldName is the key.\n */\nexport interface Selection {\n kind: 'form' | 'page' | 'field';\n pageIdx: number;\n fieldName: string | null;\n}\n\n/**\n * Granular events the store emits on mutations. `CobaltFormBuilder` bridges\n * them to Vue emits so host apps can react to specific actions (e.g. track\n * analytics when a field is added).\n */\nexport type SchemaEvent =\n | { type: 'field-added'; pageIdx: number; fieldName: string; kind: string }\n | { type: 'field-removed'; pageIdx: number; fieldName: string }\n | { type: 'field-renamed'; pageIdx: number; oldName: string; newName: string }\n | { type: 'field-updated'; pageIdx: number; fieldName: string; patch: Record<string, any> }\n | { type: 'field-duplicated'; pageIdx: number; sourceName: string; newName: string }\n | { type: 'field-reordered'; pageIdx: number; order: string[] }\n | { type: 'page-added'; pageIdx: number }\n | { type: 'page-removed'; pageIdx: number }\n | { type: 'page-duplicated'; sourceIdx: number; newIdx: number }\n | { type: 'page-updated'; pageIdx: number; patch: Record<string, any> }\n | { type: 'theme-changed'; theme: ThemeSpec }\n | { type: 'selection-changed'; selection: Selection }\n | { type: 'schema-replaced' }\n | { type: 'undo' }\n | { type: 'redo' };\n\nconst HISTORY_LIMIT = 50;\n\nfunction blankSchema(): BuilderSchema {\n return {\n title: 'Untitled Form',\n description: '',\n mode: 'form',\n pages: [\n {\n name: 'page1',\n title: 'Page 1',\n description: '',\n fields: {\n name: { type: 'String', required: true, label: 'Nombre', full: true },\n email: { type: 'String', required: true, format: 'email', label: 'Email' },\n },\n },\n ],\n theme: {},\n };\n}\n\nexport const FIELD_DEFAULTS: Record<string, () => Record<string, any>> = {\n text: () => ({ type: 'String' }),\n textarea: () => ({ type: 'String', uiCom: 'TextArea' }),\n number: () => ({ type: 'Number' }),\n date: () => ({ type: 'Date' }),\n phone: () => ({ type: 'String', uiCom: 'PhoneWithIndicative', defaultCountry: 'CO' }),\n boolean: () => ({ type: 'Boolean' }),\n select: () => ({ type: 'String', enum: ['Option A', 'Option B'] }),\n ref: () => ({ type: 'ObjectId', ref: 'Company', displayName: 'name' }),\n rating: () => ({ type: 'Number', uiCom: 'Rating', max: 5 }),\n slider: () => ({ type: 'Number', uiCom: 'Slider', min: 0, max: 100 }),\n color: () => ({ type: 'String', uiCom: 'ColorPicker' }),\n section: () => ({ uiCom: 'Section' }),\n file: () => ({ type: 'String', uiCom: 'File' }),\n ordering: () => ({ type: 'Array', uiCom: 'Ordering', enum: ['First item', 'Second item', 'Third item'] }),\n matching: () => ({ type: 'Object', uiCom: 'Matching', matchLeft: ['Term 1', 'Term 2'], matchRight: ['Definition 1', 'Definition 2'] }),\n 'image-choice': () => ({ type: 'String', uiCom: 'ImageRadioGroup', enum: ['Option A', 'Option B', 'Option C'], optionImages: ['', '', ''] }),\n};\n\nfunction titleize(s: string): string {\n return s\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/_/g, ' ')\n .toLowerCase()\n .replace(/^./, (c) => c.toUpperCase());\n}\n\nfunction deepClone<T>(v: T): T {\n return JSON.parse(JSON.stringify(v));\n}\n\nexport interface SchemaStoreOptions {\n /** Schema to hydrate the builder with on creation. */\n initialSchema?: Record<string, any>;\n /** Bag of typed events the host can listen to (in addition to v-model). */\n onEvent?: (event: SchemaEvent) => void;\n}\n\n/**\n * Create an independent schema-store instance. Each `<CobaltFormBuilder>`\n * mounts its own store and provides it via `SCHEMA_STORE_KEY` so child\n * components inject it without sharing state across instances.\n *\n * Returned shape matches the public composable API the components used\n * before (data, selection, methods) — no Pinia involved.\n */\nexport function createSchemaStore(options: SchemaStoreOptions = {}) {\n const emit = options.onEvent ?? (() => {});\n\n const data = ref<BuilderSchema>(blankSchema());\n const selection = ref<Selection>({ kind: 'page', pageIdx: 0, fieldName: null });\n\n // Undo/redo: snapshots of the full schema before each mutation.\n const past = ref<BuilderSchema[]>([]);\n const future = ref<BuilderSchema[]>([]);\n\n const canUndo = computed(() => past.value.length > 0);\n const canRedo = computed(() => future.value.length > 0);\n\n // ── Selection helpers ────────────────────────────────────────────────────\n\n const currentPage = computed<BuilderPage | null>(\n () => data.value.pages[selection.value.pageIdx] ?? null,\n );\n\n const selectedField = computed(() => {\n const page = currentPage.value;\n const name = selection.value.fieldName;\n if (!page || !name) return null;\n return page.fields[name] ?? null;\n });\n\n function setSelection(next: Selection): void {\n selection.value = next;\n emit({ type: 'selection-changed', selection: next });\n }\n\n function selectField(pageIdx: number, fieldName: string | null): void {\n setSelection({\n kind: fieldName ? 'field' : 'page',\n pageIdx,\n fieldName,\n });\n }\n\n function selectPage(pageIdx: number): void {\n setSelection({ kind: 'page', pageIdx, fieldName: null });\n }\n\n /** Select the form itself (global scope — theme, mode, top-level config). */\n function selectForm(): void {\n setSelection({ ...selection.value, kind: 'form' });\n }\n\n // ── Undo/redo plumbing ───────────────────────────────────────────────────\n\n function snapshot(): void {\n past.value.push(deepClone(data.value));\n if (past.value.length > HISTORY_LIMIT) past.value.shift();\n future.value = [];\n }\n\n function undo(): void {\n const prev = past.value.pop();\n if (!prev) return;\n future.value.push(deepClone(data.value));\n data.value = prev;\n clampSelection();\n emit({ type: 'undo' });\n }\n\n function redo(): void {\n const next = future.value.pop();\n if (!next) return;\n past.value.push(deepClone(data.value));\n data.value = next;\n clampSelection();\n emit({ type: 'redo' });\n }\n\n function clampSelection(): void {\n const pi = Math.min(selection.value.pageIdx, data.value.pages.length - 1);\n const page = data.value.pages[pi];\n const fn =\n selection.value.fieldName && page?.fields[selection.value.fieldName]\n ? selection.value.fieldName\n : null;\n const kind =\n selection.value.kind === 'form'\n ? 'form'\n : fn\n ? 'field'\n : 'page';\n selection.value = { kind, pageIdx: Math.max(pi, 0), fieldName: fn };\n }\n\n // ── Survey-level mutations ──────────────────────────────────────────────\n\n function setTitle(title: string): void {\n if (title === data.value.title) return;\n snapshot();\n data.value.title = title;\n }\n\n function setDescription(description: string): void {\n if (description === data.value.description) return;\n snapshot();\n data.value.description = description;\n }\n\n function setMode(mode: BuilderSchema['mode']): void {\n if (mode === data.value.mode) return;\n snapshot();\n data.value.mode = mode;\n }\n\n // ── Page mutations ──────────────────────────────────────────────────────\n\n function addPage(): void {\n snapshot();\n const num = data.value.pages.length + 1;\n data.value.pages.push({\n name: `page${num}`,\n title: `Page ${num}`,\n description: '',\n fields: {},\n });\n const newIdx = data.value.pages.length - 1;\n selectPage(newIdx);\n emit({ type: 'page-added', pageIdx: newIdx });\n }\n\n function removePage(idx: number): void {\n if (data.value.pages.length <= 1) return;\n snapshot();\n data.value.pages.splice(idx, 1);\n clampSelection();\n emit({ type: 'page-removed', pageIdx: idx });\n }\n\n function duplicatePage(idx: number): void {\n const src = data.value.pages[idx];\n if (!src) return;\n snapshot();\n const copy = deepClone(src);\n copy.name = uniquePageName(`${src.name}_copy`);\n copy.title = `${src.title || src.name} (copy)`;\n data.value.pages.splice(idx + 1, 0, copy);\n const newIdx = idx + 1;\n selectPage(newIdx);\n emit({ type: 'page-duplicated', sourceIdx: idx, newIdx });\n }\n\n function updatePage(idx: number, patch: Partial<BuilderPage>): void {\n const page = data.value.pages[idx];\n if (!page) return;\n snapshot();\n Object.assign(page, patch);\n emit({ type: 'page-updated', pageIdx: idx, patch: patch as Record<string, any> });\n }\n\n function uniquePageName(base: string): string {\n const existing = new Set(data.value.pages.map((p) => p.name));\n if (!existing.has(base)) return base;\n let i = 1;\n while (existing.has(`${base}_${i}`)) i++;\n return `${base}_${i}`;\n }\n\n // ── Field mutations ─────────────────────────────────────────────────────\n\n function uniqueFieldName(pageIdx: number, base: string): string {\n const page = data.value.pages[pageIdx];\n if (!page) return base;\n let n = base;\n let i = 1;\n while (n in page.fields) n = `${base}_${i++}`;\n return n;\n }\n\n /**\n * In quiz mode, select fields should render as radio buttons instead of\n * dropdowns. This applies `uiCom: 'RadioGroup'` automatically.\n */\n function applyModeOverrides(kind: string, def: Record<string, any>): Record<string, any> {\n if (data.value.mode !== 'quiz') return def;\n if (kind === 'select') return { ...def, uiCom: 'RadioGroup' };\n return def;\n }\n\n function addField(kind: string, pageIdx = selection.value.pageIdx): void {\n const page = data.value.pages[pageIdx];\n if (!page) return;\n const factory = FIELD_DEFAULTS[kind] ?? (() => ({ type: 'String' }));\n const def = applyModeOverrides(kind, factory());\n const name = uniqueFieldName(pageIdx, kind);\n if (name.startsWith('_')) throw new Error(`Reserved name \"${name}\"`);\n snapshot();\n page.fields = { ...page.fields, [name]: { ...def, label: titleize(name) } };\n selectField(pageIdx, name);\n emit({ type: 'field-added', pageIdx, fieldName: name, kind });\n }\n\n function insertFieldAfter(pageIdx: number, refName: string, kind: string): void {\n const page = data.value.pages[pageIdx];\n if (!page) return;\n const factory = FIELD_DEFAULTS[kind] ?? (() => ({ type: 'String' }));\n const def = applyModeOverrides(kind, factory());\n const name = uniqueFieldName(pageIdx, kind);\n if (name.startsWith('_')) throw new Error(`Reserved name \"${name}\"`);\n snapshot();\n\n const entries = Object.entries(page.fields);\n const refIdx = entries.findIndex(([n]) => n === refName);\n const newEntry: [string, any] = [name, { ...def, label: titleize(name) }];\n if (refIdx === -1) entries.push(newEntry);\n else entries.splice(refIdx + 1, 0, newEntry);\n\n page.fields = Object.fromEntries(entries);\n selectField(pageIdx, name);\n emit({ type: 'field-added', pageIdx, fieldName: name, kind });\n }\n\n function removeField(pageIdx: number, name: string): void {\n const page = data.value.pages[pageIdx];\n if (!page || !(name in page.fields)) return;\n snapshot();\n const next = { ...page.fields };\n delete next[name];\n page.fields = next;\n if (\n selection.value.pageIdx === pageIdx &&\n selection.value.fieldName === name\n ) {\n selection.value = { kind: 'page', pageIdx, fieldName: null };\n }\n emit({ type: 'field-removed', pageIdx, fieldName: name });\n }\n\n function duplicateField(pageIdx: number, name: string): void {\n const page = data.value.pages[pageIdx];\n if (!page || !(name in page.fields)) return;\n snapshot();\n const copy = deepClone(page.fields[name]);\n const newName = uniqueFieldName(pageIdx, `${name}_copy`);\n const next: Record<string, any> = {};\n for (const [k, v] of Object.entries(page.fields)) {\n next[k] = v;\n if (k === name) next[newName] = copy;\n }\n page.fields = next;\n selectField(pageIdx, newName);\n emit({ type: 'field-duplicated', pageIdx, sourceName: name, newName });\n }\n\n function updateField(pageIdx: number, name: string, patch: Record<string, any>): void {\n const page = data.value.pages[pageIdx];\n if (!page || !(name in page.fields)) return;\n snapshot();\n page.fields = {\n ...page.fields,\n [name]: { ...page.fields[name], ...patch },\n };\n emit({ type: 'field-updated', pageIdx, fieldName: name, patch });\n }\n\n function replaceFieldDef(pageIdx: number, name: string, newDef: Record<string, any>): void {\n const page = data.value.pages[pageIdx];\n if (!page || !(name in page.fields)) return;\n snapshot();\n page.fields = { ...page.fields, [name]: { ...newDef } };\n emit({ type: 'field-updated', pageIdx, fieldName: name, patch: newDef });\n }\n\n function renameField(pageIdx: number, oldName: string, newName: string): void {\n if (oldName === newName) return;\n const page = data.value.pages[pageIdx];\n if (!page || !(oldName in page.fields)) return;\n if (newName in page.fields) throw new Error(`Field \"${newName}\" already exists`);\n if (newName.startsWith('_')) throw new Error(`Reserved name \"${newName}\"`);\n snapshot();\n const next: Record<string, any> = {};\n for (const [k, v] of Object.entries(page.fields)) {\n next[k === oldName ? newName : k] = v;\n }\n page.fields = next;\n if (\n selection.value.pageIdx === pageIdx &&\n selection.value.fieldName === oldName\n ) {\n selection.value = { kind: 'field', pageIdx, fieldName: newName };\n }\n emit({ type: 'field-renamed', pageIdx, oldName, newName });\n }\n\n function moveField(pageIdx: number, fromIdx: number, toIdx: number): void {\n const page = data.value.pages[pageIdx];\n if (!page) return;\n const names = Object.keys(page.fields);\n if (fromIdx === toIdx || fromIdx < 0 || fromIdx >= names.length) return;\n if (toIdx < 0 || toIdx >= names.length) return;\n snapshot();\n const [moved] = names.splice(fromIdx, 1);\n names.splice(toIdx, 0, moved);\n const next: Record<string, any> = {};\n for (const n of names) next[n] = page.fields[n];\n page.fields = next;\n emit({ type: 'field-reordered', pageIdx, order: names });\n }\n\n function reorderFieldsByNames(pageIdx: number, names: string[]): void {\n const page = data.value.pages[pageIdx];\n if (!page) return;\n const existing = Object.keys(page.fields);\n if (names.length !== existing.length) return;\n for (const n of names) {\n if (!existing.includes(n)) return;\n }\n if (existing.every((n, i) => n === names[i])) return;\n snapshot();\n const next: Record<string, any> = {};\n for (const n of names) next[n] = page.fields[n];\n page.fields = next;\n emit({ type: 'field-reordered', pageIdx, order: names });\n }\n\n // ── Theme ───────────────────────────────────────────────────────────────\n\n const resolvedTheme = computed(() => resolveTheme(data.value.theme));\n\n function setTheme(patch: Partial<ThemeSpec>): void {\n snapshot();\n data.value.theme = { ...data.value.theme, ...patch };\n emit({ type: 'theme-changed', theme: data.value.theme });\n }\n\n function setThemeSection(section: 'background' | 'header', patch: Record<string, any>): void {\n snapshot();\n const current = (data.value.theme[section] ?? {}) as Record<string, any>;\n data.value.theme = {\n ...data.value.theme,\n [section]: { ...current, ...patch },\n };\n emit({ type: 'theme-changed', theme: data.value.theme });\n }\n\n function resetTheme(): void {\n snapshot();\n data.value.theme = {};\n emit({ type: 'theme-changed', theme: data.value.theme });\n }\n\n // ── Bulk replace (JSON tab, hydration from props) ───────────────────────\n\n function replaceAll(raw: any): void {\n snapshot();\n if (isPagedSchema(raw)) {\n const paged = toPagedSchema(raw);\n data.value = {\n title: raw.title || data.value.title,\n description: raw.description || '',\n mode: paged.mode || 'form',\n pages: paged.pages.map((p) => ({\n name: p.name,\n title: p.title,\n description: p.description,\n visibleIf: p.visibleIf,\n hideTitle: p.hideTitle,\n hideDescription: p.hideDescription,\n fields: p.fields,\n })),\n theme: paged.theme || {},\n };\n } else {\n data.value = {\n ...blankSchema(),\n pages: [{ name: 'page1', title: 'Page 1', description: '', fields: raw }],\n };\n }\n selection.value = { kind: 'page', pageIdx: 0, fieldName: null };\n emit({ type: 'schema-replaced' });\n }\n\n // ── Export ──────────────────────────────────────────────────────────────\n\n /** Canonical schema shape consumed by `<co-form-wizard>`. */\n const exported = computed<Record<string, any>>(() => {\n const hasTheme = Object.keys(data.value.theme).length > 0;\n if (data.value.pages.length === 1 && !hasTheme) {\n return data.value.pages[0].fields;\n }\n return {\n title: data.value.title,\n ...(data.value.description ? { description: data.value.description } : {}),\n mode: data.value.mode,\n pages: data.value.pages.map((p) => ({\n name: p.name,\n title: p.title,\n description: p.description,\n visibleIf: p.visibleIf,\n ...(p.hideTitle ? { hideTitle: true } : {}),\n ...(p.hideDescription ? { hideDescription: true } : {}),\n fields: p.fields,\n })),\n ...(hasTheme ? { theme: data.value.theme } : {}),\n };\n });\n\n // Optional initial hydration. We bypass snapshot so the user's initial\n // state isn't treated as a \"first edit\" they can undo back to nothing.\n if (options.initialSchema && Object.keys(options.initialSchema).length > 0) {\n if (isPagedSchema(options.initialSchema)) {\n const paged = toPagedSchema(options.initialSchema);\n data.value = {\n title: options.initialSchema.title || (paged.mode === 'quiz' ? '' : 'Untitled Form'),\n description: options.initialSchema.description || '',\n mode: paged.mode || 'form',\n pages: paged.pages.map((p) => ({\n name: p.name,\n title: p.title,\n description: p.description,\n visibleIf: p.visibleIf,\n hideTitle: p.hideTitle,\n hideDescription: p.hideDescription,\n fields: p.fields,\n })),\n theme: paged.theme || {},\n };\n } else {\n data.value = {\n ...blankSchema(),\n pages: [{ name: 'page1', title: 'Page 1', description: '', fields: options.initialSchema }],\n };\n }\n }\n\n // `reactive()` wrap auto-unwraps the inner refs/computeds so consumers\n // access `store.selection.pageIdx` (no `.value`), matching the API\n // shape Pinia exposes via `defineStore` — keeps the existing component\n // call-sites working unchanged after the migration.\n return reactive({\n data,\n selection,\n currentPage,\n selectedField,\n canUndo,\n canRedo,\n exported,\n resolvedTheme,\n selectField,\n selectPage,\n selectForm,\n undo,\n redo,\n setTitle,\n setDescription,\n setMode,\n setTheme,\n setThemeSection,\n resetTheme,\n addPage,\n removePage,\n duplicatePage,\n updatePage,\n addField,\n insertFieldAfter,\n removeField,\n duplicateField,\n updateField,\n replaceFieldDef,\n renameField,\n moveField,\n reorderFieldsByNames,\n replaceAll,\n });\n}\n\nexport type SchemaStore = ReturnType<typeof createSchemaStore>;\n\nexport const SCHEMA_STORE_KEY: InjectionKey<SchemaStore> = Symbol(\n 'CobaltFormBuilder.schemaStore',\n);\n\n/**\n * Inject the schema store provided by an ancestor `<CobaltFormBuilder>`.\n * Throws if called outside one — that's almost always a bug worth surfacing\n * loudly rather than silently returning an unrelated singleton.\n */\nexport function useSchemaStore(): SchemaStore {\n const store = inject(SCHEMA_STORE_KEY);\n if (!store) {\n throw new Error(\n '[cobalt-form-builder] useSchemaStore() must be called inside a <CobaltFormBuilder>. ' +\n 'Make sure the component lives in the builder subtree, or call createSchemaStore() ' +\n 'and provide it yourself.',\n );\n }\n return store;\n}\n","/**\n * Catalog of field types the builder can insert. Each entry pairs a Cobalt\n * FieldKind (or composite `uiCom`) with a human label, group, search aliases,\n * and a Phosphor icon name rendered by <co-icon>.\n */\n\nexport interface FieldCatalogEntry {\n id: string;\n label: string;\n group: 'inputs' | 'choices' | 'advanced' | 'layout';\n /** Extra terms the search matches against. */\n aliases?: string[];\n /** Phosphor icon name (used by <co-icon name=\"...\" />). */\n icon: string;\n /** Whether this field type is available in quiz mode. */\n quizAllowed?: boolean;\n /** Display label override when the builder is in quiz mode. */\n quizLabel?: string;\n}\n\nexport const FIELD_CATALOG: FieldCatalogEntry[] = [\n // Inputs\n { id: 'text', label: 'Single-line input', group: 'inputs', aliases: ['text', 'string'], icon: 'text-aa', quizAllowed: true, quizLabel: 'Short Answer' },\n { id: 'textarea', label: 'Multi-line text', group: 'inputs', aliases: ['textarea', 'comment'], icon: 'text-align-left', quizAllowed: true, quizLabel: 'Long Answer' },\n { id: 'number', label: 'Number', group: 'inputs', aliases: ['integer', 'numeric'], icon: 'hash', quizAllowed: true, quizLabel: 'Numeric Answer' },\n { id: 'date', label: 'Date', group: 'inputs', aliases: ['calendar'], icon: 'calendar' },\n { id: 'phone', label: 'Phone', group: 'inputs', aliases: ['tel', 'telephone', 'indicative', 'PhoneWithIndicative'], icon: 'phone' },\n\n // Choices\n { id: 'boolean', label: 'Yes / No', group: 'choices', aliases: ['switch', 'toggle'], icon: 'toggle-left', quizAllowed: true, quizLabel: 'True / False' },\n { id: 'select', label: 'Dropdown', group: 'choices', aliases: ['dropdown', 'enum', 'multiple choice'], icon: 'caret-circle-down', quizAllowed: true, quizLabel: 'Multiple Choice' },\n { id: 'ordering', label: 'Ordering', group: 'choices', aliases: ['rank', 'sequence', 'sort', 'order'], icon: 'sort-ascending', quizAllowed: true, quizLabel: 'Ordering' },\n { id: 'matching', label: 'Matching', group: 'choices', aliases: ['pair', 'connect', 'match'], icon: 'arrows-left-right', quizAllowed: true, quizLabel: 'Matching' },\n { id: 'image-choice', label: 'Image choice', group: 'choices', aliases: ['image', 'picture', 'photo'], icon: 'image-square', quizAllowed: true, quizLabel: 'Image Choice' },\n { id: 'ref', label: 'Reference', group: 'choices', aliases: ['lookup', 'model'], icon: 'link' },\n\n // Advanced\n { id: 'rating', label: 'Rating scale', group: 'advanced', aliases: ['stars', 'score'], icon: 'star', quizAllowed: true, quizLabel: 'Rating Scale' },\n { id: 'slider', label: 'Slider', group: 'advanced', aliases: ['range'], icon: 'sliders-horizontal' },\n { id: 'color', label: 'Color picker', group: 'advanced', aliases: ['hex', 'palette'], icon: 'palette' },\n { id: 'file', label: 'File upload', group: 'advanced', aliases: ['attachment'], icon: 'paperclip', quizAllowed: true, quizLabel: 'File Upload' },\n\n // Layout\n { id: 'section', label: 'Section divider', group: 'layout', aliases: ['header', 'group'], icon: 'minus', quizAllowed: true },\n];\n\nexport const GROUP_LABELS: Record<FieldCatalogEntry['group'], string> = {\n inputs: 'Inputs',\n choices: 'Choices',\n advanced: 'Advanced',\n layout: 'Layout',\n};\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { CoInput, CoListItem } from '@prolibu-suite/cobalt-vue';\nimport { useSchemaStore } from '../stores/schema';\nimport { FIELD_CATALOG, GROUP_LABELS, type FieldCatalogEntry } from '../fieldCatalog';\n\nconst schema = useSchemaStore();\nconst query = ref('');\n\ninterface Group {\n id: FieldCatalogEntry['group'];\n label: string;\n items: FieldCatalogEntry[];\n}\n\nconst groups = computed<Group[]>(() => {\n const q = query.value.trim().toLowerCase();\n const isQuiz = schema.data.mode === 'quiz';\n\n // In quiz mode, only show field types marked as quizAllowed.\n const base = isQuiz ? FIELD_CATALOG.filter((f) => f.quizAllowed) : FIELD_CATALOG;\n\n const filtered = q\n ? base.filter((f) => {\n const lbl = (isQuiz && f.quizLabel ? f.quizLabel : f.label).toLowerCase();\n if (lbl.includes(q)) return true;\n if (f.id.toLowerCase().includes(q)) return true;\n return (f.aliases || []).some((a) => a.toLowerCase().includes(q));\n })\n : base;\n\n const byGroup: Record<string, Group> = {};\n for (const item of filtered) {\n if (!byGroup[item.group]) {\n byGroup[item.group] = {\n id: item.group,\n label: GROUP_LABELS[item.group],\n items: [],\n };\n }\n byGroup[item.group].items.push(item);\n }\n return Object.values(byGroup);\n});\n\nfunction onDragStart(ev: DragEvent, kind: string): void {\n if (!ev.dataTransfer) return;\n ev.dataTransfer.setData('application/cobalt-field-kind', kind);\n ev.dataTransfer.effectAllowed = 'copy';\n}\n\nfunction onSelect(kind: string): void {\n schema.addField(kind);\n}\n\nfunction detailValue(ev: CustomEvent): any {\n const d = ev.detail;\n if (d != null && typeof d === 'object' && 'value' in d) return (d as any).value;\n return d;\n}\n</script>\n\n<template>\n <div class=\"toolbox\">\n <!-- Form-level entry: opens theme settings in the right panel (hidden in quiz). -->\n <button\n v-if=\"schema.data.mode !== 'quiz'\"\n class=\"toolbox__form-btn\"\n :class=\"{ 'is-active': schema.selection.kind === 'form' }\"\n @click=\"schema.selectForm()\"\n >\n <span class=\"toolbox__form-btn-icon\">\n <co-icon name=\"paint-brush\" size=\"16\" />\n </span>\n <span class=\"toolbox__form-btn-body\">\n <span class=\"toolbox__form-btn-label\">Theme</span>\n <span class=\"toolbox__form-btn-sub\">Global form settings</span>\n </span>\n <co-icon name=\"caret-right\" size=\"14\" />\n </button>\n\n <div class=\"toolbox__search\">\n <CoInput\n placeholder=\"Type to search…\"\n icon-left=\"magnifying-glass\"\n :value=\"query\"\n @coInput=\"query = detailValue($event) ?? ''\"\n />\n </div>\n\n <div class=\"toolbox__scroll\">\n <div v-if=\"groups.length === 0\" class=\"toolbox__empty\">\n No matches for \"{{ query }}\"\n </div>\n\n <div v-for=\"g in groups\" :key=\"g.id\" class=\"toolbox__group\">\n <div class=\"toolbox__group-label\">{{ g.label }}</div>\n <ul class=\"toolbox__list\">\n <li\n v-for=\"item in g.items\"\n :key=\"item.id\"\n draggable=\"true\"\n class=\"toolbox__row\"\n @dragstart=\"onDragStart($event, item.id)\"\n >\n <CoListItem\n :label=\"schema.data.mode === 'quiz' && item.quizLabel ? item.quizLabel : item.label\"\n :icon=\"item.icon\"\n dense\n @coSelect=\"onSelect(item.id)\"\n />\n </li>\n </ul>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.toolbox {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n/* Form-level entry (global theme settings). Visually distinct from the\n * field types below so users immediately recognize it as a different\n * scope rather than another draggable widget. */\n.toolbox__form-btn {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 10px);\n width: 100%;\n padding: var(--co-spacing-md, 12px) var(--co-spacing-lg, 16px);\n border: 0;\n background: transparent;\n border-bottom: 1px solid var(--fb-border);\n text-align: left;\n transition: background 120ms;\n color: var(--co-semantic-text-default, #111827);\n}\n\n.toolbox__form-btn:hover {\n background: var(--fb-bg);\n}\n\n.toolbox__form-btn.is-active {\n background: color-mix(in srgb, var(--co-color-primary-azul) 8%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n}\n\n.toolbox__form-btn-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: var(--co-border-radius-xs, 8px);\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n flex-shrink: 0;\n}\n\n.toolbox__form-btn-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.toolbox__form-btn-label {\n font-size: var(--co-font-size-13, 13px);\n font-weight: 600;\n line-height: 1.3;\n}\n\n.toolbox__form-btn-sub {\n font-size: var(--co-font-size-11, 11px);\n color: var(--co-semantic-text-secondary, #6b7280);\n margin-top: 1px;\n}\n\n.toolbox__form-btn.is-active .toolbox__form-btn-sub {\n color: color-mix(in srgb, var(--co-color-primary-azul) 70%, var(--co-semantic-text-secondary, #6b7280));\n}\n\n.toolbox__search {\n padding: var(--co-spacing-lg, 16px) var(--co-spacing-lg, 16px) var(--co-spacing-md, 12px);\n border-bottom: 1px solid var(--fb-border);\n}\n\n.toolbox__scroll {\n flex: 1;\n overflow-y: auto;\n padding: var(--co-spacing-sm, 8px) 0;\n}\n\n.toolbox__empty {\n padding: var(--co-spacing-2xl, 24px) var(--co-spacing-lg, 16px);\n text-align: center;\n font-size: var(--co-font-size-12, 12px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.toolbox__group {\n padding: var(--co-spacing-sm, 10px) 0;\n}\n\n.toolbox__group + .toolbox__group {\n border-top: 1px solid var(--fb-border);\n margin-top: var(--co-spacing-xs, 4px);\n padding-top: var(--co-spacing-md, 14px);\n}\n\n.toolbox__group-label {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--co-semantic-text-muted, #9ca3af);\n padding: 0 var(--co-spacing-lg, 16px) var(--co-spacing-xs, 6px);\n}\n\n.toolbox__list {\n list-style: none;\n padding: 0 var(--co-spacing-xs, 6px);\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n/* `co-list-item` brings its own padding/hover. We only add the\n * draggable affordance and let the rounded corners settle on the row. */\n.toolbox__row {\n cursor: grab;\n border-radius: var(--co-border-radius-xs, 8px);\n transition: background 100ms;\n}\n\n.toolbox__row:hover {\n background: var(--fb-bg);\n}\n\n.toolbox__row:active { cursor: grabbing; }\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\n\n/**\n * Inline-editable text. Click to focus, blur or Enter to commit.\n *\n * We use contenteditable on a span so layout doesn't shift between\n * read/edit modes — switching to an <input> would jump the row height.\n */\nconst props = defineProps<{\n modelValue: string;\n placeholder?: string;\n multiline?: boolean;\n error?: boolean;\n}>();\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst el = ref<HTMLElement | null>(null);\nconst focused = ref(false);\nconst hasContent = ref(false);\n\n// Reflect external changes into the DOM when not actively editing.\nwatch(\n () => props.modelValue,\n (v) => {\n hasContent.value = !!v;\n if (focused.value) return;\n if (el.value && el.value.innerText !== v) {\n el.value.innerText = v;\n }\n },\n { immediate: true },\n);\n\nfunction onInput(): void {\n // Track whether the span has text so we can hide the placeholder immediately.\n hasContent.value = !!(el.value && el.value.innerText.trim());\n}\n\nfunction commit(): void {\n if (!el.value) return;\n const raw = el.value.innerText.replace(/\\n+$/, '');\n if (raw === props.modelValue) return;\n emit('update:modelValue', raw);\n}\n\nfunction onBlur(): void {\n focused.value = false;\n commit();\n hasContent.value = !!props.modelValue;\n}\n\nfunction onFocus(): void {\n focused.value = true;\n}\n\nfunction onKeydown(ev: KeyboardEvent): void {\n if (!props.multiline && ev.key === 'Enter') {\n ev.preventDefault();\n (ev.target as HTMLElement).blur();\n } else if (ev.key === 'Escape') {\n if (el.value) el.value.innerText = props.modelValue;\n (ev.target as HTMLElement).blur();\n }\n}\n</script>\n\n<template>\n <span\n ref=\"el\"\n class=\"editable\"\n :class=\"{ 'is-empty': !hasContent, 'is-error': error }\"\n :data-placeholder=\"placeholder\"\n contenteditable=\"plaintext-only\"\n spellcheck=\"false\"\n @input=\"onInput\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @keydown=\"onKeydown\"\n >{{ modelValue }}</span>\n</template>\n\n<style scoped>\n.editable {\n display: inline-block;\n position: relative;\n min-width: 1px;\n outline: none;\n border-radius: var(--co-border-radius-xxs, 4px);\n padding: 0 var(--co-spacing-xxs, 2px);\n cursor: text;\n border: 1px dashed transparent;\n transition: border-color 150ms, background 150ms;\n}\n\n.editable:hover {\n background: var(--co-semantic-surface-hover, #f3f4f6);\n border-color: var(--co-semantic-border-default, #e5e7eb);\n}\n\n.editable:focus {\n background: var(--co-semantic-surface-hover, #f3f4f6);\n box-shadow: 0 0 0 1px var(--co-semantic-border-default, #e5e7eb);\n}\n\n.editable.is-empty {\n border-color: var(--co-semantic-border-subtle, #f3f4f6);\n}\n\n.editable.is-empty::before {\n content: attr(data-placeholder);\n position: absolute;\n left: var(--co-spacing-xxs, 2px);\n top: 0;\n color: var(--co-semantic-text-muted, #9ca3af);\n pointer-events: none;\n white-space: nowrap;\n}\n\n/* Error state */\n.editable.is-error {\n border-color: var(--co-color-status-error, #AA2E1B);\n border-style: dashed;\n}\n\n.editable.is-error:focus {\n box-shadow: 0 0 0 1px var(--co-color-status-error, #AA2E1B);\n}\n</style>\n","var an = Object.defineProperty;\nvar Pe = Object.getOwnPropertySymbols;\nvar yt = Object.prototype.hasOwnProperty, wt = Object.prototype.propertyIsEnumerable;\nvar bt = (t, e, n) => e in t ? an(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, fe = (t, e) => {\n for (var n in e || (e = {}))\n yt.call(e, n) && bt(t, n, e[n]);\n if (Pe)\n for (var n of Pe(e))\n wt.call(e, n) && bt(t, n, e[n]);\n return t;\n};\nvar $e = (t, e) => {\n var n = {};\n for (var o in t)\n yt.call(t, o) && e.indexOf(o) < 0 && (n[o] = t[o]);\n if (t != null && Pe)\n for (var o of Pe(t))\n e.indexOf(o) < 0 && wt.call(t, o) && (n[o] = t[o]);\n return n;\n};\nimport { getCurrentInstance as dt, unref as U, watch as ln, onUnmounted as sn, onMounted as un, nextTick as kt, isRef as qe, defineComponent as cn, computed as Et, toRefs as fn, ref as dn, reactive as hn, h as pn, isProxy as gn } from \"vue\";\nconst Ht = \"[vue-draggable-plus]: \";\nfunction mn(t) {\n console.warn(Ht + t);\n}\nfunction vn(t) {\n console.error(Ht + t);\n}\nfunction St(t, e, n) {\n return n >= 0 && n < t.length && t.splice(n, 0, t.splice(e, 1)[0]), t;\n}\nfunction bn(t) {\n return t.replace(/-(\\w)/g, (e, n) => n ? n.toUpperCase() : \"\");\n}\nfunction yn(t) {\n return Object.keys(t).reduce((e, n) => (typeof t[n] != \"undefined\" && (e[bn(n)] = t[n]), e), {});\n}\nfunction Dt(t, e) {\n return Array.isArray(t) && t.splice(e, 1), t;\n}\nfunction _t(t, e, n) {\n return Array.isArray(t) && t.splice(e, 0, n), t;\n}\nfunction wn(t) {\n return typeof t == \"undefined\";\n}\nfunction En(t) {\n return typeof t == \"string\";\n}\nfunction Tt(t, e, n) {\n const o = t.children[n];\n t.insertBefore(e, o);\n}\nfunction Ke(t) {\n t.parentNode && t.parentNode.removeChild(t);\n}\nfunction Sn(t, e = document) {\n var o;\n let n = null;\n return typeof (e == null ? void 0 : e.querySelector) == \"function\" ? n = (o = e == null ? void 0 : e.querySelector) == null ? void 0 : o.call(e, t) : n = document.querySelector(t), n || mn(`Element not found: ${t}`), n;\n}\nfunction Dn(t, e, n = null) {\n return function(...o) {\n return t.apply(n, o), e.apply(n, o);\n };\n}\nfunction _n(t, e) {\n const n = fe({}, t);\n return Object.keys(e).forEach((o) => {\n n[o] ? n[o] = Dn(t[o], e[o]) : n[o] = e[o];\n }), n;\n}\nfunction Tn(t) {\n return t instanceof HTMLElement;\n}\nfunction Ct(t, e) {\n Object.keys(t).forEach((n) => {\n e(n, t[n]);\n });\n}\nfunction Cn(t) {\n return t.charCodeAt(0) === 111 && t.charCodeAt(1) === 110 && (t.charCodeAt(2) > 122 || t.charCodeAt(2) < 97);\n}\nconst On = Object.assign;\n/**!\n * Sortable 1.15.2\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction Ot(t, e) {\n var n = Object.keys(t);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(t);\n e && (o = o.filter(function(r) {\n return Object.getOwnPropertyDescriptor(t, r).enumerable;\n })), n.push.apply(n, o);\n }\n return n;\n}\nfunction ne(t) {\n for (var e = 1; e < arguments.length; e++) {\n var n = arguments[e] != null ? arguments[e] : {};\n e % 2 ? Ot(Object(n), !0).forEach(function(o) {\n In(t, o, n[o]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : Ot(Object(n)).forEach(function(o) {\n Object.defineProperty(t, o, Object.getOwnPropertyDescriptor(n, o));\n });\n }\n return t;\n}\nfunction Ye(t) {\n \"@babel/helpers - typeof\";\n return typeof Symbol == \"function\" && typeof Symbol.iterator == \"symbol\" ? Ye = function(e) {\n return typeof e;\n } : Ye = function(e) {\n return e && typeof Symbol == \"function\" && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n }, Ye(t);\n}\nfunction In(t, e, n) {\n return e in t ? Object.defineProperty(t, e, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = n, t;\n}\nfunction ie() {\n return ie = Object.assign || function(t) {\n for (var e = 1; e < arguments.length; e++) {\n var n = arguments[e];\n for (var o in n)\n Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);\n }\n return t;\n }, ie.apply(this, arguments);\n}\nfunction An(t, e) {\n if (t == null)\n return {};\n var n = {}, o = Object.keys(t), r, i;\n for (i = 0; i < o.length; i++)\n r = o[i], !(e.indexOf(r) >= 0) && (n[r] = t[r]);\n return n;\n}\nfunction xn(t, e) {\n if (t == null)\n return {};\n var n = An(t, e), o, r;\n if (Object.getOwnPropertySymbols) {\n var i = Object.getOwnPropertySymbols(t);\n for (r = 0; r < i.length; r++)\n o = i[r], !(e.indexOf(o) >= 0) && Object.prototype.propertyIsEnumerable.call(t, o) && (n[o] = t[o]);\n }\n return n;\n}\nvar Nn = \"1.15.2\";\nfunction re(t) {\n if (typeof window != \"undefined\" && window.navigator)\n return !!/* @__PURE__ */ navigator.userAgent.match(t);\n}\nvar ae = re(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i), xe = re(/Edge/i), It = re(/firefox/i), Te = re(/safari/i) && !re(/chrome/i) && !re(/android/i), Lt = re(/iP(ad|od|hone)/i), Wt = re(/chrome/i) && re(/android/i), Gt = {\n capture: !1,\n passive: !1\n};\nfunction S(t, e, n) {\n t.addEventListener(e, n, !ae && Gt);\n}\nfunction E(t, e, n) {\n t.removeEventListener(e, n, !ae && Gt);\n}\nfunction We(t, e) {\n if (e) {\n if (e[0] === \">\" && (e = e.substring(1)), t)\n try {\n if (t.matches)\n return t.matches(e);\n if (t.msMatchesSelector)\n return t.msMatchesSelector(e);\n if (t.webkitMatchesSelector)\n return t.webkitMatchesSelector(e);\n } catch (n) {\n return !1;\n }\n return !1;\n }\n}\nfunction Pn(t) {\n return t.host && t !== document && t.host.nodeType ? t.host : t.parentNode;\n}\nfunction Q(t, e, n, o) {\n if (t) {\n n = n || document;\n do {\n if (e != null && (e[0] === \">\" ? t.parentNode === n && We(t, e) : We(t, e)) || o && t === n)\n return t;\n if (t === n)\n break;\n } while (t = Pn(t));\n }\n return null;\n}\nvar At = /\\s+/g;\nfunction V(t, e, n) {\n if (t && e)\n if (t.classList)\n t.classList[n ? \"add\" : \"remove\"](e);\n else {\n var o = (\" \" + t.className + \" \").replace(At, \" \").replace(\" \" + e + \" \", \" \");\n t.className = (o + (n ? \" \" + e : \"\")).replace(At, \" \");\n }\n}\nfunction h(t, e, n) {\n var o = t && t.style;\n if (o) {\n if (n === void 0)\n return document.defaultView && document.defaultView.getComputedStyle ? n = document.defaultView.getComputedStyle(t, \"\") : t.currentStyle && (n = t.currentStyle), e === void 0 ? n : n[e];\n !(e in o) && e.indexOf(\"webkit\") === -1 && (e = \"-webkit-\" + e), o[e] = n + (typeof n == \"string\" ? \"\" : \"px\");\n }\n}\nfunction ye(t, e) {\n var n = \"\";\n if (typeof t == \"string\")\n n = t;\n else\n do {\n var o = h(t, \"transform\");\n o && o !== \"none\" && (n = o + \" \" + n);\n } while (!e && (t = t.parentNode));\n var r = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n return r && new r(n);\n}\nfunction jt(t, e, n) {\n if (t) {\n var o = t.getElementsByTagName(e), r = 0, i = o.length;\n if (n)\n for (; r < i; r++)\n n(o[r], r);\n return o;\n }\n return [];\n}\nfunction te() {\n var t = document.scrollingElement;\n return t || document.documentElement;\n}\nfunction P(t, e, n, o, r) {\n if (!(!t.getBoundingClientRect && t !== window)) {\n var i, a, l, s, u, d, f;\n if (t !== window && t.parentNode && t !== te() ? (i = t.getBoundingClientRect(), a = i.top, l = i.left, s = i.bottom, u = i.right, d = i.height, f = i.width) : (a = 0, l = 0, s = window.innerHeight, u = window.innerWidth, d = window.innerHeight, f = window.innerWidth), (e || n) && t !== window && (r = r || t.parentNode, !ae))\n do\n if (r && r.getBoundingClientRect && (h(r, \"transform\") !== \"none\" || n && h(r, \"position\") !== \"static\")) {\n var m = r.getBoundingClientRect();\n a -= m.top + parseInt(h(r, \"border-top-width\")), l -= m.left + parseInt(h(r, \"border-left-width\")), s = a + i.height, u = l + i.width;\n break;\n }\n while (r = r.parentNode);\n if (o && t !== window) {\n var y = ye(r || t), b = y && y.a, w = y && y.d;\n y && (a /= w, l /= b, f /= b, d /= w, s = a + d, u = l + f);\n }\n return {\n top: a,\n left: l,\n bottom: s,\n right: u,\n width: f,\n height: d\n };\n }\n}\nfunction xt(t, e, n) {\n for (var o = ce(t, !0), r = P(t)[e]; o; ) {\n var i = P(o)[n], a = void 0;\n if (a = r >= i, !a)\n return o;\n if (o === te())\n break;\n o = ce(o, !1);\n }\n return !1;\n}\nfunction we(t, e, n, o) {\n for (var r = 0, i = 0, a = t.children; i < a.length; ) {\n if (a[i].style.display !== \"none\" && a[i] !== p.ghost && (o || a[i] !== p.dragged) && Q(a[i], n.draggable, t, !1)) {\n if (r === e)\n return a[i];\n r++;\n }\n i++;\n }\n return null;\n}\nfunction ht(t, e) {\n for (var n = t.lastElementChild; n && (n === p.ghost || h(n, \"display\") === \"none\" || e && !We(n, e)); )\n n = n.previousElementSibling;\n return n || null;\n}\nfunction J(t, e) {\n var n = 0;\n if (!t || !t.parentNode)\n return -1;\n for (; t = t.previousElementSibling; )\n t.nodeName.toUpperCase() !== \"TEMPLATE\" && t !== p.clone && (!e || We(t, e)) && n++;\n return n;\n}\nfunction Nt(t) {\n var e = 0, n = 0, o = te();\n if (t)\n do {\n var r = ye(t), i = r.a, a = r.d;\n e += t.scrollLeft * i, n += t.scrollTop * a;\n } while (t !== o && (t = t.parentNode));\n return [e, n];\n}\nfunction Mn(t, e) {\n for (var n in t)\n if (t.hasOwnProperty(n)) {\n for (var o in e)\n if (e.hasOwnProperty(o) && e[o] === t[n][o])\n return Number(n);\n }\n return -1;\n}\nfunction ce(t, e) {\n if (!t || !t.getBoundingClientRect)\n return te();\n var n = t, o = !1;\n do\n if (n.clientWidth < n.scrollWidth || n.clientHeight < n.scrollHeight) {\n var r = h(n);\n if (n.clientWidth < n.scrollWidth && (r.overflowX == \"auto\" || r.overflowX == \"scroll\") || n.clientHeight < n.scrollHeight && (r.overflowY == \"auto\" || r.overflowY == \"scroll\")) {\n if (!n.getBoundingClientRect || n === document.body)\n return te();\n if (o || e)\n return n;\n o = !0;\n }\n }\n while (n = n.parentNode);\n return te();\n}\nfunction Fn(t, e) {\n if (t && e)\n for (var n in e)\n e.hasOwnProperty(n) && (t[n] = e[n]);\n return t;\n}\nfunction Je(t, e) {\n return Math.round(t.top) === Math.round(e.top) && Math.round(t.left) === Math.round(e.left) && Math.round(t.height) === Math.round(e.height) && Math.round(t.width) === Math.round(e.width);\n}\nvar Ce;\nfunction zt(t, e) {\n return function() {\n if (!Ce) {\n var n = arguments, o = this;\n n.length === 1 ? t.call(o, n[0]) : t.apply(o, n), Ce = setTimeout(function() {\n Ce = void 0;\n }, e);\n }\n };\n}\nfunction Rn() {\n clearTimeout(Ce), Ce = void 0;\n}\nfunction Ut(t, e, n) {\n t.scrollLeft += e, t.scrollTop += n;\n}\nfunction Vt(t) {\n var e = window.Polymer, n = window.jQuery || window.Zepto;\n return e && e.dom ? e.dom(t).cloneNode(!0) : n ? n(t).clone(!0)[0] : t.cloneNode(!0);\n}\nfunction $t(t, e, n) {\n var o = {};\n return Array.from(t.children).forEach(function(r) {\n var i, a, l, s;\n if (!(!Q(r, e.draggable, t, !1) || r.animated || r === n)) {\n var u = P(r);\n o.left = Math.min((i = o.left) !== null && i !== void 0 ? i : 1 / 0, u.left), o.top = Math.min((a = o.top) !== null && a !== void 0 ? a : 1 / 0, u.top), o.right = Math.max((l = o.right) !== null && l !== void 0 ? l : -1 / 0, u.right), o.bottom = Math.max((s = o.bottom) !== null && s !== void 0 ? s : -1 / 0, u.bottom);\n }\n }), o.width = o.right - o.left, o.height = o.bottom - o.top, o.x = o.left, o.y = o.top, o;\n}\nvar q = \"Sortable\" + (/* @__PURE__ */ new Date()).getTime();\nfunction Xn() {\n var t = [], e;\n return {\n captureAnimationState: function() {\n if (t = [], !!this.options.animation) {\n var o = [].slice.call(this.el.children);\n o.forEach(function(r) {\n if (!(h(r, \"display\") === \"none\" || r === p.ghost)) {\n t.push({\n target: r,\n rect: P(r)\n });\n var i = ne({}, t[t.length - 1].rect);\n if (r.thisAnimationDuration) {\n var a = ye(r, !0);\n a && (i.top -= a.f, i.left -= a.e);\n }\n r.fromRect = i;\n }\n });\n }\n },\n addAnimationState: function(o) {\n t.push(o);\n },\n removeAnimationState: function(o) {\n t.splice(Mn(t, {\n target: o\n }), 1);\n },\n animateAll: function(o) {\n var r = this;\n if (!this.options.animation) {\n clearTimeout(e), typeof o == \"function\" && o();\n return;\n }\n var i = !1, a = 0;\n t.forEach(function(l) {\n var s = 0, u = l.target, d = u.fromRect, f = P(u), m = u.prevFromRect, y = u.prevToRect, b = l.rect, w = ye(u, !0);\n w && (f.top -= w.f, f.left -= w.e), u.toRect = f, u.thisAnimationDuration && Je(m, f) && !Je(d, f) && // Make sure animatingRect is on line between toRect & fromRect\n (b.top - f.top) / (b.left - f.left) === (d.top - f.top) / (d.left - f.left) && (s = Bn(b, m, y, r.options)), Je(f, d) || (u.prevFromRect = d, u.prevToRect = f, s || (s = r.options.animation), r.animate(u, b, f, s)), s && (i = !0, a = Math.max(a, s), clearTimeout(u.animationResetTimer), u.animationResetTimer = setTimeout(function() {\n u.animationTime = 0, u.prevFromRect = null, u.fromRect = null, u.prevToRect = null, u.thisAnimationDuration = null;\n }, s), u.thisAnimationDuration = s);\n }), clearTimeout(e), i ? e = setTimeout(function() {\n typeof o == \"function\" && o();\n }, a) : typeof o == \"function\" && o(), t = [];\n },\n animate: function(o, r, i, a) {\n if (a) {\n h(o, \"transition\", \"\"), h(o, \"transform\", \"\");\n var l = ye(this.el), s = l && l.a, u = l && l.d, d = (r.left - i.left) / (s || 1), f = (r.top - i.top) / (u || 1);\n o.animatingX = !!d, o.animatingY = !!f, h(o, \"transform\", \"translate3d(\" + d + \"px,\" + f + \"px,0)\"), this.forRepaintDummy = Yn(o), h(o, \"transition\", \"transform \" + a + \"ms\" + (this.options.easing ? \" \" + this.options.easing : \"\")), h(o, \"transform\", \"translate3d(0,0,0)\"), typeof o.animated == \"number\" && clearTimeout(o.animated), o.animated = setTimeout(function() {\n h(o, \"transition\", \"\"), h(o, \"transform\", \"\"), o.animated = !1, o.animatingX = !1, o.animatingY = !1;\n }, a);\n }\n }\n };\n}\nfunction Yn(t) {\n return t.offsetWidth;\n}\nfunction Bn(t, e, n, o) {\n return Math.sqrt(Math.pow(e.top - t.top, 2) + Math.pow(e.left - t.left, 2)) / Math.sqrt(Math.pow(e.top - n.top, 2) + Math.pow(e.left - n.left, 2)) * o.animation;\n}\nvar ge = [], Ze = {\n initializeByDefault: !0\n}, Ne = {\n mount: function(e) {\n for (var n in Ze)\n Ze.hasOwnProperty(n) && !(n in e) && (e[n] = Ze[n]);\n ge.forEach(function(o) {\n if (o.pluginName === e.pluginName)\n throw \"Sortable: Cannot mount plugin \".concat(e.pluginName, \" more than once\");\n }), ge.push(e);\n },\n pluginEvent: function(e, n, o) {\n var r = this;\n this.eventCanceled = !1, o.cancel = function() {\n r.eventCanceled = !0;\n };\n var i = e + \"Global\";\n ge.forEach(function(a) {\n n[a.pluginName] && (n[a.pluginName][i] && n[a.pluginName][i](ne({\n sortable: n\n }, o)), n.options[a.pluginName] && n[a.pluginName][e] && n[a.pluginName][e](ne({\n sortable: n\n }, o)));\n });\n },\n initializePlugins: function(e, n, o, r) {\n ge.forEach(function(l) {\n var s = l.pluginName;\n if (!(!e.options[s] && !l.initializeByDefault)) {\n var u = new l(e, n, e.options);\n u.sortable = e, u.options = e.options, e[s] = u, ie(o, u.defaults);\n }\n });\n for (var i in e.options)\n if (e.options.hasOwnProperty(i)) {\n var a = this.modifyOption(e, i, e.options[i]);\n typeof a != \"undefined\" && (e.options[i] = a);\n }\n },\n getEventProperties: function(e, n) {\n var o = {};\n return ge.forEach(function(r) {\n typeof r.eventProperties == \"function\" && ie(o, r.eventProperties.call(n[r.pluginName], e));\n }), o;\n },\n modifyOption: function(e, n, o) {\n var r;\n return ge.forEach(function(i) {\n e[i.pluginName] && i.optionListeners && typeof i.optionListeners[n] == \"function\" && (r = i.optionListeners[n].call(e[i.pluginName], o));\n }), r;\n }\n};\nfunction kn(t) {\n var e = t.sortable, n = t.rootEl, o = t.name, r = t.targetEl, i = t.cloneEl, a = t.toEl, l = t.fromEl, s = t.oldIndex, u = t.newIndex, d = t.oldDraggableIndex, f = t.newDraggableIndex, m = t.originalEvent, y = t.putSortable, b = t.extraEventProperties;\n if (e = e || n && n[q], !!e) {\n var w, L = e.options, G = \"on\" + o.charAt(0).toUpperCase() + o.substr(1);\n window.CustomEvent && !ae && !xe ? w = new CustomEvent(o, {\n bubbles: !0,\n cancelable: !0\n }) : (w = document.createEvent(\"Event\"), w.initEvent(o, !0, !0)), w.to = a || n, w.from = l || n, w.item = r || n, w.clone = i, w.oldIndex = s, w.newIndex = u, w.oldDraggableIndex = d, w.newDraggableIndex = f, w.originalEvent = m, w.pullMode = y ? y.lastPutMode : void 0;\n var R = ne(ne({}, b), Ne.getEventProperties(o, e));\n for (var j in R)\n w[j] = R[j];\n n && n.dispatchEvent(w), L[G] && L[G].call(e, w);\n }\n}\nvar Hn = [\"evt\"], z = function(e, n) {\n var o = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, r = o.evt, i = xn(o, Hn);\n Ne.pluginEvent.bind(p)(e, n, ne({\n dragEl: c,\n parentEl: O,\n ghostEl: g,\n rootEl: T,\n nextEl: pe,\n lastDownEl: Be,\n cloneEl: C,\n cloneHidden: ue,\n dragStarted: Se,\n putSortable: Y,\n activeSortable: p.active,\n originalEvent: r,\n oldIndex: be,\n oldDraggableIndex: Oe,\n newIndex: $,\n newDraggableIndex: se,\n hideGhostForTarget: Zt,\n unhideGhostForTarget: Qt,\n cloneNowHidden: function() {\n ue = !0;\n },\n cloneNowShown: function() {\n ue = !1;\n },\n dispatchSortableEvent: function(l) {\n W({\n sortable: n,\n name: l,\n originalEvent: r\n });\n }\n }, i));\n};\nfunction W(t) {\n kn(ne({\n putSortable: Y,\n cloneEl: C,\n targetEl: c,\n rootEl: T,\n oldIndex: be,\n oldDraggableIndex: Oe,\n newIndex: $,\n newDraggableIndex: se\n }, t));\n}\nvar c, O, g, T, pe, Be, C, ue, be, $, Oe, se, Me, Y, ve = !1, Ge = !1, je = [], de, Z, Qe, et, Pt, Mt, Se, me, Ie, Ae = !1, Fe = !1, ke, H, tt = [], lt = !1, ze = [], Ve = typeof document != \"undefined\", Re = Lt, Ft = xe || ae ? \"cssFloat\" : \"float\", Ln = Ve && !Wt && !Lt && \"draggable\" in document.createElement(\"div\"), qt = function() {\n if (Ve) {\n if (ae)\n return !1;\n var t = document.createElement(\"x\");\n return t.style.cssText = \"pointer-events:auto\", t.style.pointerEvents === \"auto\";\n }\n}(), Kt = function(e, n) {\n var o = h(e), r = parseInt(o.width) - parseInt(o.paddingLeft) - parseInt(o.paddingRight) - parseInt(o.borderLeftWidth) - parseInt(o.borderRightWidth), i = we(e, 0, n), a = we(e, 1, n), l = i && h(i), s = a && h(a), u = l && parseInt(l.marginLeft) + parseInt(l.marginRight) + P(i).width, d = s && parseInt(s.marginLeft) + parseInt(s.marginRight) + P(a).width;\n if (o.display === \"flex\")\n return o.flexDirection === \"column\" || o.flexDirection === \"column-reverse\" ? \"vertical\" : \"horizontal\";\n if (o.display === \"grid\")\n return o.gridTemplateColumns.split(\" \").length <= 1 ? \"vertical\" : \"horizontal\";\n if (i && l.float && l.float !== \"none\") {\n var f = l.float === \"left\" ? \"left\" : \"right\";\n return a && (s.clear === \"both\" || s.clear === f) ? \"vertical\" : \"horizontal\";\n }\n return i && (l.display === \"block\" || l.display === \"flex\" || l.display === \"table\" || l.display === \"grid\" || u >= r && o[Ft] === \"none\" || a && o[Ft] === \"none\" && u + d > r) ? \"vertical\" : \"horizontal\";\n}, Wn = function(e, n, o) {\n var r = o ? e.left : e.top, i = o ? e.right : e.bottom, a = o ? e.width : e.height, l = o ? n.left : n.top, s = o ? n.right : n.bottom, u = o ? n.width : n.height;\n return r === l || i === s || r + a / 2 === l + u / 2;\n}, Gn = function(e, n) {\n var o;\n return je.some(function(r) {\n var i = r[q].options.emptyInsertThreshold;\n if (!(!i || ht(r))) {\n var a = P(r), l = e >= a.left - i && e <= a.right + i, s = n >= a.top - i && n <= a.bottom + i;\n if (l && s)\n return o = r;\n }\n }), o;\n}, Jt = function(e) {\n function n(i, a) {\n return function(l, s, u, d) {\n var f = l.options.group.name && s.options.group.name && l.options.group.name === s.options.group.name;\n if (i == null && (a || f))\n return !0;\n if (i == null || i === !1)\n return !1;\n if (a && i === \"clone\")\n return i;\n if (typeof i == \"function\")\n return n(i(l, s, u, d), a)(l, s, u, d);\n var m = (a ? l : s).options.group.name;\n return i === !0 || typeof i == \"string\" && i === m || i.join && i.indexOf(m) > -1;\n };\n }\n var o = {}, r = e.group;\n (!r || Ye(r) != \"object\") && (r = {\n name: r\n }), o.name = r.name, o.checkPull = n(r.pull, !0), o.checkPut = n(r.put), o.revertClone = r.revertClone, e.group = o;\n}, Zt = function() {\n !qt && g && h(g, \"display\", \"none\");\n}, Qt = function() {\n !qt && g && h(g, \"display\", \"\");\n};\nVe && !Wt && document.addEventListener(\"click\", function(t) {\n if (Ge)\n return t.preventDefault(), t.stopPropagation && t.stopPropagation(), t.stopImmediatePropagation && t.stopImmediatePropagation(), Ge = !1, !1;\n}, !0);\nvar he = function(e) {\n if (c) {\n e = e.touches ? e.touches[0] : e;\n var n = Gn(e.clientX, e.clientY);\n if (n) {\n var o = {};\n for (var r in e)\n e.hasOwnProperty(r) && (o[r] = e[r]);\n o.target = o.rootEl = n, o.preventDefault = void 0, o.stopPropagation = void 0, n[q]._onDragOver(o);\n }\n }\n}, jn = function(e) {\n c && c.parentNode[q]._isOutsideThisEl(e.target);\n};\nfunction p(t, e) {\n if (!(t && t.nodeType && t.nodeType === 1))\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(t));\n this.el = t, this.options = e = ie({}, e), t[q] = this;\n var n = {\n group: null,\n sort: !0,\n disabled: !1,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(t.nodeName) ? \">li\" : \">*\",\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: !1,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: !0,\n direction: function() {\n return Kt(t, this.options);\n },\n ghostClass: \"sortable-ghost\",\n chosenClass: \"sortable-chosen\",\n dragClass: \"sortable-drag\",\n ignore: \"a, img\",\n filter: null,\n preventOnFilter: !0,\n animation: 0,\n easing: null,\n setData: function(a, l) {\n a.setData(\"Text\", l.textContent);\n },\n dropBubble: !1,\n dragoverBubble: !1,\n dataIdAttr: \"data-id\",\n delay: 0,\n delayOnTouchOnly: !1,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: !1,\n fallbackClass: \"sortable-fallback\",\n fallbackOnBody: !1,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: p.supportPointer !== !1 && \"PointerEvent\" in window && !Te,\n emptyInsertThreshold: 5\n };\n Ne.initializePlugins(this, t, n);\n for (var o in n)\n !(o in e) && (e[o] = n[o]);\n Jt(e);\n for (var r in this)\n r.charAt(0) === \"_\" && typeof this[r] == \"function\" && (this[r] = this[r].bind(this));\n this.nativeDraggable = e.forceFallback ? !1 : Ln, this.nativeDraggable && (this.options.touchStartThreshold = 1), e.supportPointer ? S(t, \"pointerdown\", this._onTapStart) : (S(t, \"mousedown\", this._onTapStart), S(t, \"touchstart\", this._onTapStart)), this.nativeDraggable && (S(t, \"dragover\", this), S(t, \"dragenter\", this)), je.push(this.el), e.store && e.store.get && this.sort(e.store.get(this) || []), ie(this, Xn());\n}\np.prototype = /** @lends Sortable.prototype */\n{\n constructor: p,\n _isOutsideThisEl: function(e) {\n !this.el.contains(e) && e !== this.el && (me = null);\n },\n _getDirection: function(e, n) {\n return typeof this.options.direction == \"function\" ? this.options.direction.call(this, e, n, c) : this.options.direction;\n },\n _onTapStart: function(e) {\n if (e.cancelable) {\n var n = this, o = this.el, r = this.options, i = r.preventOnFilter, a = e.type, l = e.touches && e.touches[0] || e.pointerType && e.pointerType === \"touch\" && e, s = (l || e).target, u = e.target.shadowRoot && (e.path && e.path[0] || e.composedPath && e.composedPath()[0]) || s, d = r.filter;\n if (Zn(o), !c && !(/mousedown|pointerdown/.test(a) && e.button !== 0 || r.disabled) && !u.isContentEditable && !(!this.nativeDraggable && Te && s && s.tagName.toUpperCase() === \"SELECT\") && (s = Q(s, r.draggable, o, !1), !(s && s.animated) && Be !== s)) {\n if (be = J(s), Oe = J(s, r.draggable), typeof d == \"function\") {\n if (d.call(this, e, s, this)) {\n W({\n sortable: n,\n rootEl: u,\n name: \"filter\",\n targetEl: s,\n toEl: o,\n fromEl: o\n }), z(\"filter\", n, {\n evt: e\n }), i && e.cancelable && e.preventDefault();\n return;\n }\n } else if (d && (d = d.split(\",\").some(function(f) {\n if (f = Q(u, f.trim(), o, !1), f)\n return W({\n sortable: n,\n rootEl: f,\n name: \"filter\",\n targetEl: s,\n fromEl: o,\n toEl: o\n }), z(\"filter\", n, {\n evt: e\n }), !0;\n }), d)) {\n i && e.cancelable && e.preventDefault();\n return;\n }\n r.handle && !Q(u, r.handle, o, !1) || this._prepareDragStart(e, l, s);\n }\n }\n },\n _prepareDragStart: function(e, n, o) {\n var r = this, i = r.el, a = r.options, l = i.ownerDocument, s;\n if (o && !c && o.parentNode === i) {\n var u = P(o);\n if (T = i, c = o, O = c.parentNode, pe = c.nextSibling, Be = o, Me = a.group, p.dragged = c, de = {\n target: c,\n clientX: (n || e).clientX,\n clientY: (n || e).clientY\n }, Pt = de.clientX - u.left, Mt = de.clientY - u.top, this._lastX = (n || e).clientX, this._lastY = (n || e).clientY, c.style[\"will-change\"] = \"all\", s = function() {\n if (z(\"delayEnded\", r, {\n evt: e\n }), p.eventCanceled) {\n r._onDrop();\n return;\n }\n r._disableDelayedDragEvents(), !It && r.nativeDraggable && (c.draggable = !0), r._triggerDragStart(e, n), W({\n sortable: r,\n name: \"choose\",\n originalEvent: e\n }), V(c, a.chosenClass, !0);\n }, a.ignore.split(\",\").forEach(function(d) {\n jt(c, d.trim(), nt);\n }), S(l, \"dragover\", he), S(l, \"mousemove\", he), S(l, \"touchmove\", he), S(l, \"mouseup\", r._onDrop), S(l, \"touchend\", r._onDrop), S(l, \"touchcancel\", r._onDrop), It && this.nativeDraggable && (this.options.touchStartThreshold = 4, c.draggable = !0), z(\"delayStart\", this, {\n evt: e\n }), a.delay && (!a.delayOnTouchOnly || n) && (!this.nativeDraggable || !(xe || ae))) {\n if (p.eventCanceled) {\n this._onDrop();\n return;\n }\n S(l, \"mouseup\", r._disableDelayedDrag), S(l, \"touchend\", r._disableDelayedDrag), S(l, \"touchcancel\", r._disableDelayedDrag), S(l, \"mousemove\", r._delayedDragTouchMoveHandler), S(l, \"touchmove\", r._delayedDragTouchMoveHandler), a.supportPointer && S(l, \"pointermove\", r._delayedDragTouchMoveHandler), r._dragStartTimer = setTimeout(s, a.delay);\n } else\n s();\n }\n },\n _delayedDragTouchMoveHandler: function(e) {\n var n = e.touches ? e.touches[0] : e;\n Math.max(Math.abs(n.clientX - this._lastX), Math.abs(n.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1)) && this._disableDelayedDrag();\n },\n _disableDelayedDrag: function() {\n c && nt(c), clearTimeout(this._dragStartTimer), this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function() {\n var e = this.el.ownerDocument;\n E(e, \"mouseup\", this._disableDelayedDrag), E(e, \"touchend\", this._disableDelayedDrag), E(e, \"touchcancel\", this._disableDelayedDrag), E(e, \"mousemove\", this._delayedDragTouchMoveHandler), E(e, \"touchmove\", this._delayedDragTouchMoveHandler), E(e, \"pointermove\", this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function(e, n) {\n n = n || e.pointerType == \"touch\" && e, !this.nativeDraggable || n ? this.options.supportPointer ? S(document, \"pointermove\", this._onTouchMove) : n ? S(document, \"touchmove\", this._onTouchMove) : S(document, \"mousemove\", this._onTouchMove) : (S(c, \"dragend\", this), S(T, \"dragstart\", this._onDragStart));\n try {\n document.selection ? He(function() {\n document.selection.empty();\n }) : window.getSelection().removeAllRanges();\n } catch (o) {\n }\n },\n _dragStarted: function(e, n) {\n if (ve = !1, T && c) {\n z(\"dragStarted\", this, {\n evt: n\n }), this.nativeDraggable && S(document, \"dragover\", jn);\n var o = this.options;\n !e && V(c, o.dragClass, !1), V(c, o.ghostClass, !0), p.active = this, e && this._appendGhost(), W({\n sortable: this,\n name: \"start\",\n originalEvent: n\n });\n } else\n this._nulling();\n },\n _emulateDragOver: function() {\n if (Z) {\n this._lastX = Z.clientX, this._lastY = Z.clientY, Zt();\n for (var e = document.elementFromPoint(Z.clientX, Z.clientY), n = e; e && e.shadowRoot && (e = e.shadowRoot.elementFromPoint(Z.clientX, Z.clientY), e !== n); )\n n = e;\n if (c.parentNode[q]._isOutsideThisEl(e), n)\n do {\n if (n[q]) {\n var o = void 0;\n if (o = n[q]._onDragOver({\n clientX: Z.clientX,\n clientY: Z.clientY,\n target: e,\n rootEl: n\n }), o && !this.options.dragoverBubble)\n break;\n }\n e = n;\n } while (n = n.parentNode);\n Qt();\n }\n },\n _onTouchMove: function(e) {\n if (de) {\n var n = this.options, o = n.fallbackTolerance, r = n.fallbackOffset, i = e.touches ? e.touches[0] : e, a = g && ye(g, !0), l = g && a && a.a, s = g && a && a.d, u = Re && H && Nt(H), d = (i.clientX - de.clientX + r.x) / (l || 1) + (u ? u[0] - tt[0] : 0) / (l || 1), f = (i.clientY - de.clientY + r.y) / (s || 1) + (u ? u[1] - tt[1] : 0) / (s || 1);\n if (!p.active && !ve) {\n if (o && Math.max(Math.abs(i.clientX - this._lastX), Math.abs(i.clientY - this._lastY)) < o)\n return;\n this._onDragStart(e, !0);\n }\n if (g) {\n a ? (a.e += d - (Qe || 0), a.f += f - (et || 0)) : a = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: d,\n f\n };\n var m = \"matrix(\".concat(a.a, \",\").concat(a.b, \",\").concat(a.c, \",\").concat(a.d, \",\").concat(a.e, \",\").concat(a.f, \")\");\n h(g, \"webkitTransform\", m), h(g, \"mozTransform\", m), h(g, \"msTransform\", m), h(g, \"transform\", m), Qe = d, et = f, Z = i;\n }\n e.cancelable && e.preventDefault();\n }\n },\n _appendGhost: function() {\n if (!g) {\n var e = this.options.fallbackOnBody ? document.body : T, n = P(c, !0, Re, !0, e), o = this.options;\n if (Re) {\n for (H = e; h(H, \"position\") === \"static\" && h(H, \"transform\") === \"none\" && H !== document; )\n H = H.parentNode;\n H !== document.body && H !== document.documentElement ? (H === document && (H = te()), n.top += H.scrollTop, n.left += H.scrollLeft) : H = te(), tt = Nt(H);\n }\n g = c.cloneNode(!0), V(g, o.ghostClass, !1), V(g, o.fallbackClass, !0), V(g, o.dragClass, !0), h(g, \"transition\", \"\"), h(g, \"transform\", \"\"), h(g, \"box-sizing\", \"border-box\"), h(g, \"margin\", 0), h(g, \"top\", n.top), h(g, \"left\", n.left), h(g, \"width\", n.width), h(g, \"height\", n.height), h(g, \"opacity\", \"0.8\"), h(g, \"position\", Re ? \"absolute\" : \"fixed\"), h(g, \"zIndex\", \"100000\"), h(g, \"pointerEvents\", \"none\"), p.ghost = g, e.appendChild(g), h(g, \"transform-origin\", Pt / parseInt(g.style.width) * 100 + \"% \" + Mt / parseInt(g.style.height) * 100 + \"%\");\n }\n },\n _onDragStart: function(e, n) {\n var o = this, r = e.dataTransfer, i = o.options;\n if (z(\"dragStart\", this, {\n evt: e\n }), p.eventCanceled) {\n this._onDrop();\n return;\n }\n z(\"setupClone\", this), p.eventCanceled || (C = Vt(c), C.removeAttribute(\"id\"), C.draggable = !1, C.style[\"will-change\"] = \"\", this._hideClone(), V(C, this.options.chosenClass, !1), p.clone = C), o.cloneId = He(function() {\n z(\"clone\", o), !p.eventCanceled && (o.options.removeCloneOnHide || T.insertBefore(C, c), o._hideClone(), W({\n sortable: o,\n name: \"clone\"\n }));\n }), !n && V(c, i.dragClass, !0), n ? (Ge = !0, o._loopId = setInterval(o._emulateDragOver, 50)) : (E(document, \"mouseup\", o._onDrop), E(document, \"touchend\", o._onDrop), E(document, \"touchcancel\", o._onDrop), r && (r.effectAllowed = \"move\", i.setData && i.setData.call(o, r, c)), S(document, \"drop\", o), h(c, \"transform\", \"translateZ(0)\")), ve = !0, o._dragStartId = He(o._dragStarted.bind(o, n, e)), S(document, \"selectstart\", o), Se = !0, Te && h(document.body, \"user-select\", \"none\");\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function(e) {\n var n = this.el, o = e.target, r, i, a, l = this.options, s = l.group, u = p.active, d = Me === s, f = l.sort, m = Y || u, y, b = this, w = !1;\n if (lt)\n return;\n function L(ee, Ee) {\n z(ee, b, ne({\n evt: e,\n isOwner: d,\n axis: y ? \"vertical\" : \"horizontal\",\n revert: a,\n dragRect: r,\n targetRect: i,\n canSort: f,\n fromSortable: m,\n target: o,\n completed: R,\n onMove: function(vt, rn) {\n return Xe(T, n, c, r, vt, P(vt), e, rn);\n },\n changed: j\n }, Ee));\n }\n function G() {\n L(\"dragOverAnimationCapture\"), b.captureAnimationState(), b !== m && m.captureAnimationState();\n }\n function R(ee) {\n return L(\"dragOverCompleted\", {\n insertion: ee\n }), ee && (d ? u._hideClone() : u._showClone(b), b !== m && (V(c, Y ? Y.options.ghostClass : u.options.ghostClass, !1), V(c, l.ghostClass, !0)), Y !== b && b !== p.active ? Y = b : b === p.active && Y && (Y = null), m === b && (b._ignoreWhileAnimating = o), b.animateAll(function() {\n L(\"dragOverAnimationComplete\"), b._ignoreWhileAnimating = null;\n }), b !== m && (m.animateAll(), m._ignoreWhileAnimating = null)), (o === c && !c.animated || o === n && !o.animated) && (me = null), !l.dragoverBubble && !e.rootEl && o !== document && (c.parentNode[q]._isOutsideThisEl(e.target), !ee && he(e)), !l.dragoverBubble && e.stopPropagation && e.stopPropagation(), w = !0;\n }\n function j() {\n $ = J(c), se = J(c, l.draggable), W({\n sortable: b,\n name: \"change\",\n toEl: n,\n newIndex: $,\n newDraggableIndex: se,\n originalEvent: e\n });\n }\n if (e.preventDefault !== void 0 && e.cancelable && e.preventDefault(), o = Q(o, l.draggable, n, !0), L(\"dragOver\"), p.eventCanceled)\n return w;\n if (c.contains(e.target) || o.animated && o.animatingX && o.animatingY || b._ignoreWhileAnimating === o)\n return R(!1);\n if (Ge = !1, u && !l.disabled && (d ? f || (a = O !== T) : Y === this || (this.lastPutMode = Me.checkPull(this, u, c, e)) && s.checkPut(this, u, c, e))) {\n if (y = this._getDirection(e, o) === \"vertical\", r = P(c), L(\"dragOverValid\"), p.eventCanceled)\n return w;\n if (a)\n return O = T, G(), this._hideClone(), L(\"revert\"), p.eventCanceled || (pe ? T.insertBefore(c, pe) : T.appendChild(c)), R(!0);\n var B = ht(n, l.draggable);\n if (!B || $n(e, y, this) && !B.animated) {\n if (B === c)\n return R(!1);\n if (B && n === e.target && (o = B), o && (i = P(o)), Xe(T, n, c, r, o, i, e, !!o) !== !1)\n return G(), B && B.nextSibling ? n.insertBefore(c, B.nextSibling) : n.appendChild(c), O = n, j(), R(!0);\n } else if (B && Vn(e, y, this)) {\n var X = we(n, 0, l, !0);\n if (X === c)\n return R(!1);\n if (o = X, i = P(o), Xe(T, n, c, r, o, i, e, !1) !== !1)\n return G(), n.insertBefore(c, X), O = n, j(), R(!0);\n } else if (o.parentNode === n) {\n i = P(o);\n var K = 0, oe, le = c.parentNode !== n, k = !Wn(c.animated && c.toRect || r, o.animated && o.toRect || i, y), v = y ? \"top\" : \"left\", D = xt(o, \"top\", \"top\") || xt(c, \"top\", \"top\"), A = D ? D.scrollTop : void 0;\n me !== o && (oe = i[v], Ae = !1, Fe = !k && l.invertSwap || le), K = qn(e, o, i, y, k ? 1 : l.swapThreshold, l.invertedSwapThreshold == null ? l.swapThreshold : l.invertedSwapThreshold, Fe, me === o);\n var I;\n if (K !== 0) {\n var _ = J(c);\n do\n _ -= K, I = O.children[_];\n while (I && (h(I, \"display\") === \"none\" || I === g));\n }\n if (K === 0 || I === o)\n return R(!1);\n me = o, Ie = K;\n var x = o.nextElementSibling, M = !1;\n M = K === 1;\n var F = Xe(T, n, c, r, o, i, e, M);\n if (F !== !1)\n return (F === 1 || F === -1) && (M = F === 1), lt = !0, setTimeout(Un, 30), G(), M && !x ? n.appendChild(c) : o.parentNode.insertBefore(c, M ? x : o), D && Ut(D, 0, A - D.scrollTop), O = c.parentNode, oe !== void 0 && !Fe && (ke = Math.abs(oe - P(o)[v])), j(), R(!0);\n }\n if (n.contains(c))\n return R(!1);\n }\n return !1;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function() {\n E(document, \"mousemove\", this._onTouchMove), E(document, \"touchmove\", this._onTouchMove), E(document, \"pointermove\", this._onTouchMove), E(document, \"dragover\", he), E(document, \"mousemove\", he), E(document, \"touchmove\", he);\n },\n _offUpEvents: function() {\n var e = this.el.ownerDocument;\n E(e, \"mouseup\", this._onDrop), E(e, \"touchend\", this._onDrop), E(e, \"pointerup\", this._onDrop), E(e, \"touchcancel\", this._onDrop), E(document, \"selectstart\", this);\n },\n _onDrop: function(e) {\n var n = this.el, o = this.options;\n if ($ = J(c), se = J(c, o.draggable), z(\"drop\", this, {\n evt: e\n }), O = c && c.parentNode, $ = J(c), se = J(c, o.draggable), p.eventCanceled) {\n this._nulling();\n return;\n }\n ve = !1, Fe = !1, Ae = !1, clearInterval(this._loopId), clearTimeout(this._dragStartTimer), st(this.cloneId), st(this._dragStartId), this.nativeDraggable && (E(document, \"drop\", this), E(n, \"dragstart\", this._onDragStart)), this._offMoveEvents(), this._offUpEvents(), Te && h(document.body, \"user-select\", \"\"), h(c, \"transform\", \"\"), e && (Se && (e.cancelable && e.preventDefault(), !o.dropBubble && e.stopPropagation()), g && g.parentNode && g.parentNode.removeChild(g), (T === O || Y && Y.lastPutMode !== \"clone\") && C && C.parentNode && C.parentNode.removeChild(C), c && (this.nativeDraggable && E(c, \"dragend\", this), nt(c), c.style[\"will-change\"] = \"\", Se && !ve && V(c, Y ? Y.options.ghostClass : this.options.ghostClass, !1), V(c, this.options.chosenClass, !1), W({\n sortable: this,\n name: \"unchoose\",\n toEl: O,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: e\n }), T !== O ? ($ >= 0 && (W({\n rootEl: O,\n name: \"add\",\n toEl: O,\n fromEl: T,\n originalEvent: e\n }), W({\n sortable: this,\n name: \"remove\",\n toEl: O,\n originalEvent: e\n }), W({\n rootEl: O,\n name: \"sort\",\n toEl: O,\n fromEl: T,\n originalEvent: e\n }), W({\n sortable: this,\n name: \"sort\",\n toEl: O,\n originalEvent: e\n })), Y && Y.save()) : $ !== be && $ >= 0 && (W({\n sortable: this,\n name: \"update\",\n toEl: O,\n originalEvent: e\n }), W({\n sortable: this,\n name: \"sort\",\n toEl: O,\n originalEvent: e\n })), p.active && (($ == null || $ === -1) && ($ = be, se = Oe), W({\n sortable: this,\n name: \"end\",\n toEl: O,\n originalEvent: e\n }), this.save()))), this._nulling();\n },\n _nulling: function() {\n z(\"nulling\", this), T = c = O = g = pe = C = Be = ue = de = Z = Se = $ = se = be = Oe = me = Ie = Y = Me = p.dragged = p.ghost = p.clone = p.active = null, ze.forEach(function(e) {\n e.checked = !0;\n }), ze.length = Qe = et = 0;\n },\n handleEvent: function(e) {\n switch (e.type) {\n case \"drop\":\n case \"dragend\":\n this._onDrop(e);\n break;\n case \"dragenter\":\n case \"dragover\":\n c && (this._onDragOver(e), zn(e));\n break;\n case \"selectstart\":\n e.preventDefault();\n break;\n }\n },\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function() {\n for (var e = [], n, o = this.el.children, r = 0, i = o.length, a = this.options; r < i; r++)\n n = o[r], Q(n, a.draggable, this.el, !1) && e.push(n.getAttribute(a.dataIdAttr) || Jn(n));\n return e;\n },\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function(e, n) {\n var o = {}, r = this.el;\n this.toArray().forEach(function(i, a) {\n var l = r.children[a];\n Q(l, this.options.draggable, r, !1) && (o[i] = l);\n }, this), n && this.captureAnimationState(), e.forEach(function(i) {\n o[i] && (r.removeChild(o[i]), r.appendChild(o[i]));\n }), n && this.animateAll();\n },\n /**\n * Save the current sorting\n */\n save: function() {\n var e = this.options.store;\n e && e.set && e.set(this);\n },\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function(e, n) {\n return Q(e, n || this.options.draggable, this.el, !1);\n },\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function(e, n) {\n var o = this.options;\n if (n === void 0)\n return o[e];\n var r = Ne.modifyOption(this, e, n);\n typeof r != \"undefined\" ? o[e] = r : o[e] = n, e === \"group\" && Jt(o);\n },\n /**\n * Destroy\n */\n destroy: function() {\n z(\"destroy\", this);\n var e = this.el;\n e[q] = null, E(e, \"mousedown\", this._onTapStart), E(e, \"touchstart\", this._onTapStart), E(e, \"pointerdown\", this._onTapStart), this.nativeDraggable && (E(e, \"dragover\", this), E(e, \"dragenter\", this)), Array.prototype.forEach.call(e.querySelectorAll(\"[draggable]\"), function(n) {\n n.removeAttribute(\"draggable\");\n }), this._onDrop(), this._disableDelayedDragEvents(), je.splice(je.indexOf(this.el), 1), this.el = e = null;\n },\n _hideClone: function() {\n if (!ue) {\n if (z(\"hideClone\", this), p.eventCanceled)\n return;\n h(C, \"display\", \"none\"), this.options.removeCloneOnHide && C.parentNode && C.parentNode.removeChild(C), ue = !0;\n }\n },\n _showClone: function(e) {\n if (e.lastPutMode !== \"clone\") {\n this._hideClone();\n return;\n }\n if (ue) {\n if (z(\"showClone\", this), p.eventCanceled)\n return;\n c.parentNode == T && !this.options.group.revertClone ? T.insertBefore(C, c) : pe ? T.insertBefore(C, pe) : T.appendChild(C), this.options.group.revertClone && this.animate(c, C), h(C, \"display\", \"\"), ue = !1;\n }\n }\n};\nfunction zn(t) {\n t.dataTransfer && (t.dataTransfer.dropEffect = \"move\"), t.cancelable && t.preventDefault();\n}\nfunction Xe(t, e, n, o, r, i, a, l) {\n var s, u = t[q], d = u.options.onMove, f;\n return window.CustomEvent && !ae && !xe ? s = new CustomEvent(\"move\", {\n bubbles: !0,\n cancelable: !0\n }) : (s = document.createEvent(\"Event\"), s.initEvent(\"move\", !0, !0)), s.to = e, s.from = t, s.dragged = n, s.draggedRect = o, s.related = r || e, s.relatedRect = i || P(e), s.willInsertAfter = l, s.originalEvent = a, t.dispatchEvent(s), d && (f = d.call(u, s, a)), f;\n}\nfunction nt(t) {\n t.draggable = !1;\n}\nfunction Un() {\n lt = !1;\n}\nfunction Vn(t, e, n) {\n var o = P(we(n.el, 0, n.options, !0)), r = $t(n.el, n.options, g), i = 10;\n return e ? t.clientX < r.left - i || t.clientY < o.top && t.clientX < o.right : t.clientY < r.top - i || t.clientY < o.bottom && t.clientX < o.left;\n}\nfunction $n(t, e, n) {\n var o = P(ht(n.el, n.options.draggable)), r = $t(n.el, n.options, g), i = 10;\n return e ? t.clientX > r.right + i || t.clientY > o.bottom && t.clientX > o.left : t.clientY > r.bottom + i || t.clientX > o.right && t.clientY > o.top;\n}\nfunction qn(t, e, n, o, r, i, a, l) {\n var s = o ? t.clientY : t.clientX, u = o ? n.height : n.width, d = o ? n.top : n.left, f = o ? n.bottom : n.right, m = !1;\n if (!a) {\n if (l && ke < u * r) {\n if (!Ae && (Ie === 1 ? s > d + u * i / 2 : s < f - u * i / 2) && (Ae = !0), Ae)\n m = !0;\n else if (Ie === 1 ? s < d + ke : s > f - ke)\n return -Ie;\n } else if (s > d + u * (1 - r) / 2 && s < f - u * (1 - r) / 2)\n return Kn(e);\n }\n return m = m || a, m && (s < d + u * i / 2 || s > f - u * i / 2) ? s > d + u / 2 ? 1 : -1 : 0;\n}\nfunction Kn(t) {\n return J(c) < J(t) ? 1 : -1;\n}\nfunction Jn(t) {\n for (var e = t.tagName + t.className + t.src + t.href + t.textContent, n = e.length, o = 0; n--; )\n o += e.charCodeAt(n);\n return o.toString(36);\n}\nfunction Zn(t) {\n ze.length = 0;\n for (var e = t.getElementsByTagName(\"input\"), n = e.length; n--; ) {\n var o = e[n];\n o.checked && ze.push(o);\n }\n}\nfunction He(t) {\n return setTimeout(t, 0);\n}\nfunction st(t) {\n return clearTimeout(t);\n}\nVe && S(document, \"touchmove\", function(t) {\n (p.active || ve) && t.cancelable && t.preventDefault();\n});\np.utils = {\n on: S,\n off: E,\n css: h,\n find: jt,\n is: function(e, n) {\n return !!Q(e, n, e, !1);\n },\n extend: Fn,\n throttle: zt,\n closest: Q,\n toggleClass: V,\n clone: Vt,\n index: J,\n nextTick: He,\n cancelNextTick: st,\n detectDirection: Kt,\n getChild: we\n};\np.get = function(t) {\n return t[q];\n};\np.mount = function() {\n for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++)\n e[n] = arguments[n];\n e[0].constructor === Array && (e = e[0]), e.forEach(function(o) {\n if (!o.prototype || !o.prototype.constructor)\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(o));\n o.utils && (p.utils = ne(ne({}, p.utils), o.utils)), Ne.mount(o);\n });\n};\np.create = function(t, e) {\n return new p(t, e);\n};\np.version = Nn;\nvar N = [], De, ut, ct = !1, ot, rt, Ue, _e;\nfunction Qn() {\n function t() {\n this.defaults = {\n scroll: !0,\n forceAutoScrollFallback: !1,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: !0\n };\n for (var e in this)\n e.charAt(0) === \"_\" && typeof this[e] == \"function\" && (this[e] = this[e].bind(this));\n }\n return t.prototype = {\n dragStarted: function(n) {\n var o = n.originalEvent;\n this.sortable.nativeDraggable ? S(document, \"dragover\", this._handleAutoScroll) : this.options.supportPointer ? S(document, \"pointermove\", this._handleFallbackAutoScroll) : o.touches ? S(document, \"touchmove\", this._handleFallbackAutoScroll) : S(document, \"mousemove\", this._handleFallbackAutoScroll);\n },\n dragOverCompleted: function(n) {\n var o = n.originalEvent;\n !this.options.dragOverBubble && !o.rootEl && this._handleAutoScroll(o);\n },\n drop: function() {\n this.sortable.nativeDraggable ? E(document, \"dragover\", this._handleAutoScroll) : (E(document, \"pointermove\", this._handleFallbackAutoScroll), E(document, \"touchmove\", this._handleFallbackAutoScroll), E(document, \"mousemove\", this._handleFallbackAutoScroll)), Rt(), Le(), Rn();\n },\n nulling: function() {\n Ue = ut = De = ct = _e = ot = rt = null, N.length = 0;\n },\n _handleFallbackAutoScroll: function(n) {\n this._handleAutoScroll(n, !0);\n },\n _handleAutoScroll: function(n, o) {\n var r = this, i = (n.touches ? n.touches[0] : n).clientX, a = (n.touches ? n.touches[0] : n).clientY, l = document.elementFromPoint(i, a);\n if (Ue = n, o || this.options.forceAutoScrollFallback || xe || ae || Te) {\n it(n, this.options, l, o);\n var s = ce(l, !0);\n ct && (!_e || i !== ot || a !== rt) && (_e && Rt(), _e = setInterval(function() {\n var u = ce(document.elementFromPoint(i, a), !0);\n u !== s && (s = u, Le()), it(n, r.options, u, o);\n }, 10), ot = i, rt = a);\n } else {\n if (!this.options.bubbleScroll || ce(l, !0) === te()) {\n Le();\n return;\n }\n it(n, this.options, ce(l, !1), !1);\n }\n }\n }, ie(t, {\n pluginName: \"scroll\",\n initializeByDefault: !0\n });\n}\nfunction Le() {\n N.forEach(function(t) {\n clearInterval(t.pid);\n }), N = [];\n}\nfunction Rt() {\n clearInterval(_e);\n}\nvar it = zt(function(t, e, n, o) {\n if (e.scroll) {\n var r = (t.touches ? t.touches[0] : t).clientX, i = (t.touches ? t.touches[0] : t).clientY, a = e.scrollSensitivity, l = e.scrollSpeed, s = te(), u = !1, d;\n ut !== n && (ut = n, Le(), De = e.scroll, d = e.scrollFn, De === !0 && (De = ce(n, !0)));\n var f = 0, m = De;\n do {\n var y = m, b = P(y), w = b.top, L = b.bottom, G = b.left, R = b.right, j = b.width, B = b.height, X = void 0, K = void 0, oe = y.scrollWidth, le = y.scrollHeight, k = h(y), v = y.scrollLeft, D = y.scrollTop;\n y === s ? (X = j < oe && (k.overflowX === \"auto\" || k.overflowX === \"scroll\" || k.overflowX === \"visible\"), K = B < le && (k.overflowY === \"auto\" || k.overflowY === \"scroll\" || k.overflowY === \"visible\")) : (X = j < oe && (k.overflowX === \"auto\" || k.overflowX === \"scroll\"), K = B < le && (k.overflowY === \"auto\" || k.overflowY === \"scroll\"));\n var A = X && (Math.abs(R - r) <= a && v + j < oe) - (Math.abs(G - r) <= a && !!v), I = K && (Math.abs(L - i) <= a && D + B < le) - (Math.abs(w - i) <= a && !!D);\n if (!N[f])\n for (var _ = 0; _ <= f; _++)\n N[_] || (N[_] = {});\n (N[f].vx != A || N[f].vy != I || N[f].el !== y) && (N[f].el = y, N[f].vx = A, N[f].vy = I, clearInterval(N[f].pid), (A != 0 || I != 0) && (u = !0, N[f].pid = setInterval(function() {\n o && this.layer === 0 && p.active._onTouchMove(Ue);\n var x = N[this.layer].vy ? N[this.layer].vy * l : 0, M = N[this.layer].vx ? N[this.layer].vx * l : 0;\n typeof d == \"function\" && d.call(p.dragged.parentNode[q], M, x, t, Ue, N[this.layer].el) !== \"continue\" || Ut(N[this.layer].el, M, x);\n }.bind({\n layer: f\n }), 24))), f++;\n } while (e.bubbleScroll && m !== s && (m = ce(m, !1)));\n ct = u;\n }\n}, 30), en = function(e) {\n var n = e.originalEvent, o = e.putSortable, r = e.dragEl, i = e.activeSortable, a = e.dispatchSortableEvent, l = e.hideGhostForTarget, s = e.unhideGhostForTarget;\n if (n) {\n var u = o || i;\n l();\n var d = n.changedTouches && n.changedTouches.length ? n.changedTouches[0] : n, f = document.elementFromPoint(d.clientX, d.clientY);\n s(), u && !u.el.contains(f) && (a(\"spill\"), this.onSpill({\n dragEl: r,\n putSortable: o\n }));\n }\n};\nfunction pt() {\n}\npt.prototype = {\n startIndex: null,\n dragStart: function(e) {\n var n = e.oldDraggableIndex;\n this.startIndex = n;\n },\n onSpill: function(e) {\n var n = e.dragEl, o = e.putSortable;\n this.sortable.captureAnimationState(), o && o.captureAnimationState();\n var r = we(this.sortable.el, this.startIndex, this.options);\n r ? this.sortable.el.insertBefore(n, r) : this.sortable.el.appendChild(n), this.sortable.animateAll(), o && o.animateAll();\n },\n drop: en\n};\nie(pt, {\n pluginName: \"revertOnSpill\"\n});\nfunction gt() {\n}\ngt.prototype = {\n onSpill: function(e) {\n var n = e.dragEl, o = e.putSortable, r = o || this.sortable;\n r.captureAnimationState(), n.parentNode && n.parentNode.removeChild(n), r.animateAll();\n },\n drop: en\n};\nie(gt, {\n pluginName: \"removeOnSpill\"\n});\np.mount(new Qn());\np.mount(gt, pt);\nfunction eo(t) {\n return t == null ? t : JSON.parse(JSON.stringify(t));\n}\nfunction to(t) {\n dt() && sn(t);\n}\nfunction no(t) {\n dt() ? un(t) : kt(t);\n}\nlet tn = null, nn = null;\nfunction Xt(t = null, e = null) {\n tn = t, nn = e;\n}\nfunction oo() {\n return {\n data: tn,\n clonedData: nn\n };\n}\nconst Yt = Symbol(\"cloneElement\");\nfunction on(...t) {\n var le, k;\n const e = (le = dt()) == null ? void 0 : le.proxy;\n let n = null;\n const o = t[0];\n let [, r, i] = t;\n Array.isArray(U(r)) || (i = r, r = null);\n let a = null;\n const {\n immediate: l = !0,\n clone: s = eo,\n forceFallback: u,\n fallbackOnBody: d,\n customUpdate: f\n } = (k = U(i)) != null ? k : {};\n function m(v) {\n var F;\n const { from: D, oldIndex: A, item: I } = v, _ = Array.from(D.childNodes);\n n = u && !d ? _.slice(0, -1) : _;\n const x = U((F = U(r)) == null ? void 0 : F[A]), M = s(x);\n Xt(x, M), I[Yt] = M;\n }\n function y(v) {\n const D = v.item[Yt];\n if (!wn(D)) {\n if (Ke(v.item), qe(r)) {\n const A = [...U(r)];\n r.value = _t(A, v.newDraggableIndex, D);\n return;\n }\n _t(U(r), v.newDraggableIndex, D);\n }\n }\n function b(v) {\n const { from: D, item: A, oldIndex: I, oldDraggableIndex: _, pullMode: x, clone: M } = v;\n if (Tt(D, A, I), x === \"clone\") {\n Ke(M);\n return;\n }\n if (qe(r)) {\n const F = [...U(r)];\n r.value = Dt(F, _);\n return;\n }\n Dt(U(r), _);\n }\n function w(v) {\n if (f) {\n f(v);\n return;\n }\n const { from: D, item: A, oldIndex: I, oldDraggableIndex: _, newDraggableIndex: x } = v;\n if (Ke(A), Tt(D, A, I), qe(r)) {\n const M = [...U(r)];\n r.value = St(\n M,\n _,\n x\n );\n return;\n }\n St(U(r), _, x);\n }\n function L(v) {\n const { newIndex: D, oldIndex: A, from: I, to: _ } = v;\n let x = null;\n const M = D === A && I === _;\n try {\n if (M) {\n let F = null;\n n == null || n.some((ee, Ee) => {\n if (F && (n == null ? void 0 : n.length) !== _.childNodes.length)\n return I.insertBefore(F, ee.nextSibling), !0;\n const mt = _.childNodes[Ee];\n F = _ == null ? void 0 : _.replaceChild(ee, mt);\n });\n }\n } catch (F) {\n x = F;\n } finally {\n n = null;\n }\n kt(() => {\n if (Xt(), x)\n throw x;\n });\n }\n const G = {\n onUpdate: w,\n onStart: m,\n onAdd: y,\n onRemove: b,\n onEnd: L\n };\n function R(v) {\n const D = U(o);\n return v || (v = En(D) ? Sn(D, e == null ? void 0 : e.$el) : D), v && !Tn(v) && (v = v.$el), v || vn(\"Root element not found\"), v;\n }\n function j() {\n var I;\n const _ = (I = U(i)) != null ? I : {}, { immediate: v, clone: D } = _, A = $e(_, [\"immediate\", \"clone\"]);\n return Ct(A, (x, M) => {\n Cn(x) && (A[x] = (F, ...ee) => {\n const Ee = oo();\n return On(F, Ee), M(F, ...ee);\n });\n }), _n(\n r === null ? {} : G,\n A\n );\n }\n const B = (v) => {\n v = R(v), a && X.destroy(), a = new p(v, j());\n };\n ln(\n () => i,\n () => {\n a && Ct(j(), (v, D) => {\n a == null || a.option(v, D);\n });\n },\n { deep: !0 }\n );\n const X = {\n option: (v, D) => a == null ? void 0 : a.option(v, D),\n destroy: () => {\n a == null || a.destroy(), a = null;\n },\n save: () => a == null ? void 0 : a.save(),\n toArray: () => a == null ? void 0 : a.toArray(),\n closest: (...v) => a == null ? void 0 : a.closest(...v)\n }, K = () => X == null ? void 0 : X.option(\"disabled\", !0), oe = () => X == null ? void 0 : X.option(\"disabled\", !1);\n return no(() => {\n l && B();\n }), to(X.destroy), fe({ start: B, pause: K, resume: oe }, X);\n}\nconst ft = [\n \"update\",\n \"start\",\n \"add\",\n \"remove\",\n \"choose\",\n \"unchoose\",\n \"end\",\n \"sort\",\n \"filter\",\n \"clone\",\n \"move\",\n \"change\"\n], ro = [\n \"clone\",\n \"animation\",\n \"ghostClass\",\n \"group\",\n \"sort\",\n \"disabled\",\n \"store\",\n \"handle\",\n \"draggable\",\n \"swapThreshold\",\n \"invertSwap\",\n \"invertedSwapThreshold\",\n \"removeCloneOnHide\",\n \"direction\",\n \"chosenClass\",\n \"dragClass\",\n \"ignore\",\n \"filter\",\n \"preventOnFilter\",\n \"easing\",\n \"setData\",\n \"dropBubble\",\n \"dragoverBubble\",\n \"dataIdAttr\",\n \"delay\",\n \"delayOnTouchOnly\",\n \"touchStartThreshold\",\n \"forceFallback\",\n \"fallbackClass\",\n \"fallbackOnBody\",\n \"fallbackTolerance\",\n \"fallbackOffset\",\n \"supportPointer\",\n \"emptyInsertThreshold\",\n \"scroll\",\n \"forceAutoScrollFallback\",\n \"scrollSensitivity\",\n \"scrollSpeed\",\n \"bubbleScroll\",\n \"modelValue\",\n \"tag\",\n \"target\",\n \"customUpdate\",\n ...ft.map((t) => `on${t.replace(/^\\S/, (e) => e.toUpperCase())}`)\n], lo = cn({\n name: \"VueDraggable\",\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: ro,\n emits: [\"update:modelValue\", ...ft],\n setup(t, { slots: e, emit: n, expose: o, attrs: r }) {\n const i = ft.reduce((d, f) => {\n const m = `on${f.replace(/^\\S/, (y) => y.toUpperCase())}`;\n return d[m] = (...y) => n(f, ...y), d;\n }, {}), a = Et(() => {\n const y = fn(t), { modelValue: d } = y, f = $e(y, [\"modelValue\"]), m = Object.entries(f).reduce((b, [w, L]) => {\n const G = U(L);\n return G !== void 0 && (b[w] = G), b;\n }, {});\n return fe(fe({}, i), yn(fe(fe({}, r), m)));\n }), l = Et({\n get: () => t.modelValue,\n set: (d) => n(\"update:modelValue\", d)\n }), s = dn(), u = hn(\n on(t.target || s, l, a)\n );\n return o(u), () => {\n var d;\n return pn(t.tag || \"div\", { ref: s }, (d = e == null ? void 0 : e.default) == null ? void 0 : d.call(e, u));\n };\n }\n}), Bt = {\n mounted: \"mounted\",\n unmounted: \"unmounted\"\n}, at = /* @__PURE__ */ new WeakMap(), so = {\n [Bt.mounted](t, e) {\n const n = gn(e.value) ? [e.value] : e.value, [o, r] = n, i = on(t, o, r);\n at.set(t, i.destroy);\n },\n [Bt.unmounted](t) {\n var e;\n (e = at.get(t)) == null || e(), at.delete(t);\n }\n};\nexport {\n lo as VueDraggable,\n on as useDraggable,\n so as vDraggable\n};\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport {\n CoButton,\n CoCheckbox,\n CoIconButton,\n CoInput,\n CoRating,\n CoSelect,\n CoSlider,\n CoSwitch,\n} from '@prolibu-suite/cobalt-vue';\nimport { FIELD_CATALOG } from '../fieldCatalog';\nimport { FIELD_DEFAULTS, useSchemaStore } from '../stores/schema';\nimport EditableText from './EditableText.vue';\n\nconst props = defineProps<{\n pageIdx: number;\n fieldName: string;\n}>();\n\nconst schema = useSchemaStore();\n\nconst def = computed<Record<string, any>>(\n () => schema.data.pages[props.pageIdx]?.fields[props.fieldName] ?? {},\n);\n\n/**\n * The field's catalog entry — used for the icon and the type switcher's\n * initial value. Mirrors the lookup in `FieldCard.vue`.\n */\nconst catalogEntry = computed(() => {\n const d = def.value;\n if (d.uiCom === 'TextArea') return FIELD_CATALOG.find((x) => x.id === 'textarea');\n if (d.uiCom === 'Rating') return FIELD_CATALOG.find((x) => x.id === 'rating');\n if (d.uiCom === 'Slider') return FIELD_CATALOG.find((x) => x.id === 'slider');\n if (d.uiCom === 'ColorPicker') return FIELD_CATALOG.find((x) => x.id === 'color');\n if (d.uiCom === 'Section') return FIELD_CATALOG.find((x) => x.id === 'section');\n if (d.uiCom === 'File') return FIELD_CATALOG.find((x) => x.id === 'file');\n if (d.uiCom === 'Ordering') return FIELD_CATALOG.find((x) => x.id === 'ordering');\n if (d.uiCom === 'Matching') return FIELD_CATALOG.find((x) => x.id === 'matching');\n if (d.uiCom === 'ImageRadioGroup') return FIELD_CATALOG.find((x) => x.id === 'image-choice');\n if (d.ref) return FIELD_CATALOG.find((x) => x.id === 'ref');\n if (Array.isArray(d.enum)) return FIELD_CATALOG.find((x) => x.id === 'select');\n if (d.type === 'Number') return FIELD_CATALOG.find((x) => x.id === 'number');\n if (d.type === 'Date') return FIELD_CATALOG.find((x) => x.id === 'date');\n if (d.type === 'Boolean') return FIELD_CATALOG.find((x) => x.id === 'boolean');\n return FIELD_CATALOG.find((x) => x.id === 'text');\n});\n\nconst kind = computed(() => catalogEntry.value?.id ?? 'text');\n\n// In quiz mode, only show quiz-allowed field types in the type switcher.\nconst TYPE_OPTIONS = computed(() => {\n const isQuiz = schema.data.mode === 'quiz';\n const source = isQuiz ? FIELD_CATALOG.filter((c) => c.quizAllowed) : FIELD_CATALOG;\n return source.map((c) => ({\n label: isQuiz && c.quizLabel ? c.quizLabel : c.label,\n value: c.id,\n }));\n});\n\n// ── Event detail normalizer (Cobalt mixes `value` vs `checked` vs raw) ────\nfunction detailValue(ev: CustomEvent): any {\n const d = ev.detail;\n if (d != null && typeof d === 'object' && 'value' in d) return (d as any).value;\n if (d != null && typeof d === 'object' && 'checked' in d) return (d as any).checked;\n return d;\n}\n\n// ── Patches ──────────────────────────────────────────────────────────────\n\nfunction patch(key: string, value: any): void {\n schema.updateField(props.pageIdx, props.fieldName, { [key]: value });\n}\n\nfunction onRename(newName: string): void {\n if (!newName || newName === props.fieldName) return;\n try {\n schema.renameField(props.pageIdx, props.fieldName, newName);\n } catch (err) {\n // EditableText resyncs on next prop change; swallow + warn.\n console.warn('[builder] rename failed:', (err as Error).message);\n }\n}\n\nfunction collapse(): void {\n // Selecting the page deselects the field → collapses this card.\n schema.selectPage(props.pageIdx);\n}\n\nfunction duplicate(): void {\n schema.duplicateField(props.pageIdx, props.fieldName);\n}\n\nfunction remove(): void {\n schema.removeField(props.pageIdx, props.fieldName);\n}\n\n// ── Type switcher with attribute migration ───────────────────────────────\n\n/** Keys preserved across type changes — user-facing config that's portable. */\nconst PRESERVED_KEYS = [\n 'label',\n 'required',\n 'helperText',\n 'placeholder',\n 'full',\n 'hidden',\n 'disabled',\n 'readOnly',\n 'visibleIf',\n 'enableIf',\n 'requiredIf',\n // Quiz-mode metadata — preserved across type changes.\n 'correctOptions',\n 'correctValue',\n 'correctOrder',\n 'correctPairs',\n 'optionImages',\n 'matchLeft',\n 'matchRight',\n 'multiSelect',\n 'points',\n 'explanation',\n 'sampleAnswer',\n] as const;\n\nfunction changeType(newKind: string): void {\n if (!newKind || newKind === kind.value) return;\n const factory = FIELD_DEFAULTS[newKind];\n const baseDefaults = factory ? factory() : { type: 'String' };\n const preserved: Record<string, any> = {};\n for (const k of PRESERVED_KEYS) {\n if (def.value[k] !== undefined) preserved[k] = def.value[k];\n }\n schema.replaceFieldDef(props.pageIdx, props.fieldName, {\n ...baseDefaults,\n ...preserved,\n });\n}\n\n// ── Select options editor ────────────────────────────────────────────────\n\nconst options = computed<string[]>(() =>\n Array.isArray(def.value.enum) ? def.value.enum : [],\n);\n\nfunction updateOption(idx: number, value: string): void {\n const next = [...options.value];\n next[idx] = value;\n patch('enum', next);\n}\n\nfunction removeOption(idx: number): void {\n const next = options.value.filter((_, i) => i !== idx);\n patch('enum', next.length ? next : undefined);\n}\n\nfunction addOption(): void {\n const next = [...options.value, `Option ${options.value.length + 1}`];\n patch('enum', next);\n}\n\n// ── Image-choice helpers ─────────────────────────────────────────────────\n\nconst imgInputRefs: Record<number, HTMLInputElement | null> = {};\n\nfunction setImgInputRef(idx: number) {\n return (el: any) => { imgInputRefs[idx] = el as HTMLInputElement | null; };\n}\n\nfunction triggerImgInput(idx: number): void {\n imgInputRefs[idx]?.click();\n}\n\nconst optionImages = computed<string[]>(() =>\n Array.isArray(def.value.optionImages) ? def.value.optionImages : [],\n);\n\nfunction setOptionImage(idx: number, dataUrl: string): void {\n const next = [...optionImages.value];\n while (next.length <= idx) next.push('');\n next[idx] = dataUrl;\n patch('optionImages', next);\n}\n\nfunction removeOptionImage(idx: number): void {\n const next = [...optionImages.value];\n if (idx < next.length) next[idx] = '';\n patch('optionImages', next);\n}\n\nfunction onImageFileSelected(ev: Event, idx: number): void {\n const input = ev.target as HTMLInputElement;\n const file = input?.files?.[0];\n if (!file) return;\n\n // Resize to max 400×400 to keep schema payload small.\n const img = new Image();\n const objectUrl = URL.createObjectURL(file);\n img.onload = () => {\n const MAX = 400;\n let { width, height } = img;\n if (width > MAX || height > MAX) {\n const ratio = Math.min(MAX / width, MAX / height);\n width = Math.round(width * ratio);\n height = Math.round(height * ratio);\n }\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(img, 0, 0, width, height);\n setOptionImage(idx, canvas.toDataURL('image/webp', 0.8));\n }\n URL.revokeObjectURL(objectUrl);\n };\n img.onerror = () => URL.revokeObjectURL(objectUrl);\n img.src = objectUrl;\n input.value = '';\n}\n\nfunction addImageOption(): void {\n const next = [...options.value, `Option ${options.value.length + 1}`];\n patch('enum', next);\n const imgs = [...optionImages.value, ''];\n patch('optionImages', imgs);\n}\n\nfunction removeImageOption(idx: number): void {\n patch('enum', options.value.filter((_, i) => i !== idx));\n patch('optionImages', optionImages.value.filter((_, i) => i !== idx));\n}\n\n// ── Drag and drop reorder for select options ─────────────────────────────\n\nconst draggingOptionIdx = ref<number | null>(null);\nconst optionDropTarget = ref<number | null>(null);\n\nfunction onOptionDragStart(ev: DragEvent, idx: number): void {\n if (!ev.dataTransfer) return;\n draggingOptionIdx.value = idx;\n ev.dataTransfer.setData('application/cobalt-option-move', String(idx));\n ev.dataTransfer.effectAllowed = 'move';\n}\n\nfunction onOptionDragOver(ev: DragEvent, idx: number): void {\n if (draggingOptionIdx.value === null) return;\n ev.preventDefault();\n if (ev.dataTransfer) ev.dataTransfer.dropEffect = 'move';\n optionDropTarget.value = idx;\n}\n\nfunction onOptionDragLeave(): void {\n optionDropTarget.value = null;\n}\n\nfunction onOptionDrop(ev: DragEvent, idx: number): void {\n ev.preventDefault();\n const from = draggingOptionIdx.value;\n draggingOptionIdx.value = null;\n optionDropTarget.value = null;\n if (from === null || from === idx) return;\n const next = [...options.value];\n const [moved] = next.splice(from, 1);\n // When dragging downwards, the visual gap shifts up by one after the splice.\n const target = from < idx ? idx - 1 : idx;\n next.splice(target, 0, moved);\n patch('enum', next);\n}\n\nfunction onOptionDragEnd(): void {\n draggingOptionIdx.value = null;\n optionDropTarget.value = null;\n}\n\n// ── \"Other (describe)\" toggle for selects ────────────────────────────────\n// Convention: an option literally equal to \"Other\" (case-insensitive) means\n// \"Other (describe)\". Cobalt's <co-select> doesn't have a built-in escape\n// hatch for this yet, so for now we encode it as a regular enum entry and\n// hint the builder UI about it via this toggle.\n\nconst hasOther = computed(() =>\n options.value.some((o) => String(o).trim().toLowerCase() === 'other'),\n);\n\nfunction toggleOther(): void {\n if (hasOther.value) {\n patch(\n 'enum',\n options.value.filter((o) => String(o).trim().toLowerCase() !== 'other'),\n );\n } else {\n patch('enum', [...options.value, 'Other']);\n }\n}\n\n// ── Mini-toolbar (Google Forms-style) ────────────────────────────────────\n\nconst insertOpen = ref(false);\n\n/** Subset of catalog shown in the quick-insert popover. */\nconst INSERT_OPTIONS = computed(() => {\n const isQuiz = schema.data.mode === 'quiz';\n if (isQuiz) {\n return FIELD_CATALOG.filter((c) => c.quizAllowed);\n }\n const ids = ['text', 'textarea', 'number', 'date', 'select', 'boolean', 'rating'];\n return FIELD_CATALOG.filter((c) => ids.includes(c.id));\n});\n\nfunction insertAfter(newKind: string): void {\n insertOpen.value = false;\n schema.insertFieldAfter(props.pageIdx, props.fieldName, newKind);\n}\n\nfunction insertSection(): void {\n insertOpen.value = false;\n schema.insertFieldAfter(props.pageIdx, props.fieldName, 'section');\n}\n\n// ── Preview helpers ──────────────────────────────────────────────────────\n\nconst previewInputType = computed<string>(() => {\n switch (kind.value) {\n case 'number': return 'number';\n case 'date': return 'date';\n case 'color': return 'color';\n case 'file': return 'file';\n default: return 'text';\n }\n});\n\nfunction toNumOrUndef(v: any): number | undefined {\n if (v === '' || v == null) return undefined;\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\n// Reactive defaults for the slider preview when the schema is missing values.\nconst sliderMin = computed<number>(() => Number(def.value.min ?? 0));\nconst sliderMax = computed<number>(() => Number(def.value.max ?? 100));\nconst sliderStep = computed<number>(() => Number(def.value.step ?? 1));\nconst sliderPreviewValue = computed<number>(() => sliderMin.value);\n\nconst ratingMax = computed<number>(() => Number(def.value.max ?? 5));\n\n// ── Quiz mode — Answer Key panel ─────────────────────────────────────────\n\nconst isQuiz = computed(() => schema.data.mode === 'quiz');\nconst answerKeyOpen = ref(false);\n\nconst correctOptions = computed<number[]>(\n () => (Array.isArray(def.value.correctOptions) ? def.value.correctOptions : []),\n);\nconst fieldPoints = computed<number>(() => Number(def.value.points ?? 0));\nconst fieldExplanation = computed<string>(() => def.value.explanation || '');\nconst fieldSampleAnswer = computed<string>(() => def.value.sampleAnswer || '');\nconst fieldCorrectValue = computed<string>(() => {\n const v = def.value.correctValue;\n return v !== undefined && v !== null ? String(v) : '';\n});\n\n/** Whether answer key has been configured (for visual badge). */\nconst hasAnswerKey = computed(() =>\n correctOptions.value.length > 0 ||\n fieldPoints.value > 0 ||\n fieldCorrectValue.value !== '' ||\n (def.value.correctOrder && def.value.correctOrder.length > 0) ||\n Object.keys(def.value.correctPairs || {}).length > 0,\n);\n\nconst answerKeyLabel = computed(() => {\n let label = 'Answer key';\n if (fieldPoints.value > 0) {\n label += ` (${fieldPoints.value} ${fieldPoints.value === 1 ? 'pt' : 'pts'})`;\n }\n return label;\n});\n\nfunction toggleCorrectOption(idx: number): void {\n const current = [...correctOptions.value];\n const pos = current.indexOf(idx);\n const isMulti = def.value.multiSelect;\n if (kind.value === 'boolean' || !isMulti) {\n // Single-select (boolean, or multiSelect off) — only one correct answer\n patch('correctOptions', pos >= 0 ? [] : [idx]);\n return;\n }\n if (pos >= 0) {\n current.splice(pos, 1);\n } else {\n current.push(idx);\n }\n patch('correctOptions', current);\n}\n\nfunction setPoints(v: any): void {\n patch('points', Number(v) || 0);\n}\n\nfunction setExplanation(v: string): void {\n patch('explanation', v);\n}\n\nfunction setSampleAnswer(v: string): void {\n patch('sampleAnswer', v);\n}\n\nfunction setCorrectValue(v: any): void {\n if (v === '' || v === null || v === undefined) {\n patch('correctValue', undefined);\n return;\n }\n if (kind.value === 'number' || kind.value === 'rating') {\n patch('correctValue', Number(v));\n } else {\n patch('correctValue', v);\n }\n}\n\nfunction closeAnswerKey(): void {\n answerKeyOpen.value = false;\n}\n\n/** Label to display in the header/footer — use quizLabel in quiz mode. */\nconst displayTypeLabel = computed(() => {\n if (!isQuiz.value) return catalogEntry.value?.label || 'Field';\n return catalogEntry.value?.quizLabel || catalogEntry.value?.label || 'Field';\n});\n\n/** Boolean options for answer key (True/False questions). */\nconst booleanOptions = ['True', 'False'];\n\n// ── Ordering items editor ────────────────────────────────────────────────\n\nconst orderingItems = computed<string[]>(() =>\n Array.isArray(def.value.enum) ? def.value.enum : [],\n);\n\nfunction updateOrderingItem(idx: number, value: string): void {\n const next = [...orderingItems.value];\n next[idx] = value;\n patch('enum', next);\n}\n\nfunction removeOrderingItem(idx: number): void {\n const next = orderingItems.value.filter((_, i) => i !== idx);\n patch('enum', next.length ? next : undefined);\n}\n\nfunction addOrderingItem(): void {\n const next = [...orderingItems.value, `Item ${orderingItems.value.length + 1}`];\n patch('enum', next);\n}\n\n// ── Ordering answer key helpers ──────────────────────────────────────────\n\n/** correctOrder stores the sequence of indices into `enum` that represents the correct answer.\n * If not set, it defaults to the natural order [0,1,2,…]. */\nconst correctOrder = computed<number[]>(() => {\n if (Array.isArray(def.value.correctOrder) && def.value.correctOrder.length === orderingItems.value.length) {\n return def.value.correctOrder;\n }\n return orderingItems.value.map((_, i) => i);\n});\n\nconst correctOrderLabels = computed(() =>\n correctOrder.value.map((origIdx) => orderingItems.value[origIdx] || `Item ${origIdx + 1}`),\n);\n\nfunction moveCorrectOrderItem(posIdx: number, direction: -1 | 1): void {\n const arr = [...correctOrder.value];\n const target = posIdx + direction;\n if (target < 0 || target >= arr.length) return;\n [arr[posIdx], arr[target]] = [arr[target], arr[posIdx]];\n patch('correctOrder', arr);\n}\n\nconst orderingDragIdx = ref<number | null>(null);\nconst orderingDropIdx = ref<number | null>(null);\n\nfunction onOrderingDrop(fromIdx: number, toIdx: number): void {\n if (fromIdx === toIdx) return;\n const arr = [...correctOrder.value];\n const [moved] = arr.splice(fromIdx, 1);\n // Adjust target for downward moves: removing fromIdx shifts later indices down by 1\n const insertAt = fromIdx < toIdx ? toIdx - 1 : toIdx;\n arr.splice(insertAt, 0, moved);\n patch('correctOrder', arr);\n}\n\n// ── Matching pairs editor ────────────────────────────────────────────────\n\nconst matchLeft = computed<string[]>(() =>\n Array.isArray(def.value.matchLeft) ? def.value.matchLeft : [],\n);\n\nconst matchRight = computed<string[]>(() =>\n Array.isArray(def.value.matchRight) ? def.value.matchRight : [],\n);\n\nfunction updateMatchLeft(idx: number, value: string): void {\n const next = [...matchLeft.value];\n next[idx] = value;\n patch('matchLeft', next);\n}\n\nfunction updateMatchRight(idx: number, value: string): void {\n const next = [...matchRight.value];\n next[idx] = value;\n patch('matchRight', next);\n}\n\nfunction addMatchPair(): void {\n const n = matchLeft.value.length + 1;\n patch('matchLeft', [...matchLeft.value, `Term ${n}`]);\n patch('matchRight', [...matchRight.value, `Definition ${n}`]);\n}\n\n// ── Matching answer key helpers ──────────────────────────────────────────\n\nconst correctPairs = computed<Record<string, number>>(() =>\n (def.value.correctPairs && typeof def.value.correctPairs === 'object') ? def.value.correctPairs : {},\n);\n\nfunction setCorrectPair(leftIdx: number, rightIdx: number | undefined): void {\n const pairs = { ...correctPairs.value };\n if (rightIdx === undefined || rightIdx === null) {\n delete pairs[leftIdx];\n } else {\n pairs[leftIdx] = rightIdx;\n }\n patch('correctPairs', Object.keys(pairs).length ? pairs : undefined);\n}\n\nfunction removeMatchPair(idx: number): void {\n patch('matchLeft', matchLeft.value.filter((_, i) => i !== idx));\n patch('matchRight', matchRight.value.filter((_, i) => i !== idx));\n // Also clean up correctPairs\n const pairs = { ...(def.value.correctPairs || {}) };\n delete pairs[idx];\n // Reindex pairs above the removed index\n const reindexed: Record<number, number> = {};\n for (const [k, v] of Object.entries(pairs)) {\n const ki = Number(k);\n const newK = ki > idx ? ki - 1 : ki;\n const newV = (v as number) > idx ? (v as number) - 1 : (v as number);\n reindexed[newK] = newV;\n }\n patch('correctPairs', reindexed);\n}\n</script>\n\n<template>\n <div class=\"expanded-wrap\" @click.stop>\n <div class=\"expanded\">\n <!-- ── HEADER ─────────────────────────────────────────────────────── -->\n <header class=\"expanded__head\">\n <span class=\"expanded__icon\">\n <co-icon v-if=\"catalogEntry\" :name=\"catalogEntry.icon\" size=\"20\" />\n </span>\n\n <div class=\"expanded__title\">\n <EditableText\n class=\"expanded__label\"\n :model-value=\"def.label || ''\"\n placeholder=\"Untitled field\"\n @update:model-value=\"patch('label', $event)\"\n />\n <div class=\"expanded__meta\">\n <EditableText\n class=\"expanded__id\"\n :model-value=\"fieldName\"\n placeholder=\"field_id\"\n @update:model-value=\"onRename\"\n />\n <span class=\"expanded__sep\">·</span>\n <span>{{ displayTypeLabel }}</span>\n </div>\n </div>\n\n <div class=\"expanded__head-actions\">\n <CoSelect\n class=\"expanded__type\"\n :options=\"JSON.stringify(TYPE_OPTIONS)\"\n :value=\"kind\"\n @coChange=\"changeType(detailValue($event))\"\n />\n <CoIconButton\n icon=\"x\"\n variant=\"outlined\"\n size=\"sm\"\n label=\"Collapse\"\n @click=\"collapse\"\n />\n </div>\n </header>\n\n <!-- ── BODY ───────────────────────────────────────────────────────── -->\n <div class=\"expanded__body\">\n <!-- TEXT / TEXTAREA / NUMBER / DATE / COLOR / FILE -->\n <template v-if=\"['text','textarea','number','date','color','file'].includes(kind)\">\n <CoInput\n label=\"Placeholder\"\n :value=\"def.placeholder || ''\"\n @coInput=\"patch('placeholder', detailValue($event))\"\n />\n\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <CoInput\n :label=\"def.label\"\n :placeholder=\"def.placeholder\"\n :helper-text=\"def.helperText\"\n :type=\"previewInputType\"\n :multiline=\"kind === 'textarea' || undefined\"\n :required=\"!!def.required\"\n disabled\n />\n </div>\n </template>\n\n <!-- SELECT -->\n <template v-else-if=\"kind === 'select'\">\n <div class=\"expanded__options\">\n <div class=\"expanded__options-label\">Options</div>\n\n <div\n v-for=\"(opt, idx) in options\"\n :key=\"idx\"\n class=\"expanded__option\"\n :class=\"{\n 'is-drop-target': optionDropTarget === idx && draggingOptionIdx !== idx,\n 'is-dragging': draggingOptionIdx === idx,\n }\"\n draggable=\"true\"\n @dragstart=\"onOptionDragStart($event, idx)\"\n @dragover=\"onOptionDragOver($event, idx)\"\n @dragleave=\"onOptionDragLeave\"\n @drop=\"onOptionDrop($event, idx)\"\n @dragend=\"onOptionDragEnd\"\n >\n <span class=\"expanded__option-grip\" aria-hidden=\"true\">⋮⋮</span>\n <span class=\"expanded__option-bullet\" aria-hidden=\"true\" />\n <CoInput\n class=\"expanded__option-input\"\n :value=\"opt\"\n :placeholder=\"`Option ${idx + 1}`\"\n @coInput=\"updateOption(idx, detailValue($event))\"\n />\n <CoIconButton\n icon=\"x\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Remove option\"\n @click=\"removeOption(idx)\"\n />\n </div>\n\n <div class=\"expanded__options-foot\">\n <CoButton\n label=\"Add option\"\n variant=\"stroke\"\n size=\"s\"\n icon-left=\"plus\"\n @click=\"addOption\"\n />\n <CoCheckbox\n label='Add \"Other (describe)\"'\n :checked=\"hasOther\"\n @coChange=\"toggleOther\"\n />\n </div>\n </div>\n </template>\n\n <!-- BOOLEAN -->\n <template v-else-if=\"kind === 'boolean'\">\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <CoSwitch :label=\"def.label || fieldName\" :helper-text=\"def.helperText\" disabled />\n </div>\n </template>\n\n <!-- RATING -->\n <template v-else-if=\"kind === 'rating'\">\n <div class=\"expanded__row\">\n <CoInput\n label=\"Max stars\"\n type=\"number\"\n :value=\"String(ratingMax)\"\n @coInput=\"patch('max', toNumOrUndef(detailValue($event)) ?? 5)\"\n />\n </div>\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <CoRating :label=\"def.label || fieldName\" :max=\"ratingMax\" :value=\"0\" read-only />\n </div>\n </template>\n\n <!-- SLIDER -->\n <template v-else-if=\"kind === 'slider'\">\n <div class=\"expanded__row expanded__row--3\">\n <CoInput\n label=\"Min\"\n type=\"number\"\n :value=\"String(sliderMin)\"\n @coInput=\"patch('min', toNumOrUndef(detailValue($event)) ?? 0)\"\n />\n <CoInput\n label=\"Max\"\n type=\"number\"\n :value=\"String(sliderMax)\"\n @coInput=\"patch('max', toNumOrUndef(detailValue($event)) ?? 100)\"\n />\n <CoInput\n label=\"Step\"\n type=\"number\"\n :value=\"String(sliderStep)\"\n @coInput=\"patch('step', toNumOrUndef(detailValue($event)) ?? 1)\"\n />\n </div>\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <CoSlider\n :label=\"def.label || fieldName\"\n :min=\"sliderMin\"\n :max=\"sliderMax\"\n :step=\"sliderStep\"\n :value=\"sliderPreviewValue\"\n show-value\n disabled\n />\n </div>\n </template>\n\n <!-- REF -->\n <template v-else-if=\"kind === 'ref'\">\n <div class=\"expanded__row expanded__row--2\">\n <CoInput\n label=\"Model\"\n placeholder=\"Company, User, Deal…\"\n :value=\"def.ref || ''\"\n @coInput=\"patch('ref', detailValue($event))\"\n />\n <CoInput\n label=\"Display field\"\n placeholder=\"name\"\n :value=\"def.displayName || ''\"\n @coInput=\"patch('displayName', detailValue($event))\"\n />\n </div>\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <CoInput\n :label=\"def.label || fieldName\"\n :placeholder=\"`Search ${def.ref || 'model'}…`\"\n icon-left=\"magnifying-glass\"\n disabled\n />\n </div>\n </template>\n\n <!-- IMAGE CHOICE -->\n <template v-else-if=\"kind === 'image-choice'\">\n <div class=\"expanded__options\">\n <div class=\"expanded__options-label\">Image options</div>\n <div\n v-for=\"(opt, idx) in options\"\n :key=\"idx\"\n class=\"expanded__image-option\"\n >\n <div class=\"expanded__image-thumb-wrap\">\n <img\n v-if=\"optionImages[idx]\"\n :src=\"optionImages[idx]\"\n class=\"expanded__image-thumb\"\n alt=\"\"\n />\n <div v-else class=\"expanded__image-placeholder\" @click=\"triggerImgInput(idx)\">\n <co-icon name=\"image-square\" size=\"24\" />\n <span>Add image</span>\n </div>\n <div v-if=\"optionImages[idx]\" class=\"expanded__image-actions\">\n <CoIconButton\n icon=\"pencil-simple\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Change image\"\n @click=\"triggerImgInput(idx)\"\n />\n <CoIconButton\n icon=\"trash\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Remove image\"\n @click=\"removeOptionImage(idx)\"\n />\n </div>\n <input\n :ref=\"setImgInputRef(idx)\"\n type=\"file\"\n accept=\"image/*\"\n style=\"display:none\"\n @change=\"onImageFileSelected($event, idx)\"\n />\n </div>\n <div class=\"expanded__image-label-row\">\n <CoInput\n class=\"expanded__option-input\"\n :value=\"opt\"\n :placeholder=\"`Option ${idx + 1}`\"\n @coInput=\"updateOption(idx, detailValue($event))\"\n />\n <CoIconButton\n icon=\"x\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Remove option\"\n @click=\"removeImageOption(idx)\"\n />\n </div>\n </div>\n <div class=\"expanded__options-foot\">\n <CoButton\n label=\"Add option\"\n variant=\"stroke\"\n size=\"s\"\n icon-left=\"plus\"\n @click=\"addImageOption\"\n />\n </div>\n </div>\n </template>\n\n <!-- ORDERING -->\n <template v-else-if=\"kind === 'ordering'\">\n <div class=\"expanded__options\">\n <div class=\"expanded__options-label\">Items (shown in correct order)</div>\n <div\n v-for=\"(item, idx) in orderingItems\"\n :key=\"idx\"\n class=\"expanded__option\"\n >\n <span class=\"expanded__option-number\">{{ idx + 1 }}</span>\n <CoInput\n class=\"expanded__option-input\"\n :value=\"item\"\n :placeholder=\"`Item ${idx + 1}`\"\n @coInput=\"updateOrderingItem(idx, detailValue($event))\"\n />\n <CoIconButton\n icon=\"x\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Remove item\"\n @click=\"removeOrderingItem(idx)\"\n />\n </div>\n <div class=\"expanded__options-foot\">\n <CoButton\n label=\"Add item\"\n variant=\"stroke\"\n size=\"s\"\n icon-left=\"plus\"\n @click=\"addOrderingItem\"\n />\n </div>\n </div>\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview — students will see items in shuffled order</div>\n </div>\n </template>\n\n <!-- MATCHING -->\n <template v-else-if=\"kind === 'matching'\">\n <div class=\"expanded__options\">\n <div class=\"expanded__options-label\">Pairs</div>\n <div class=\"expanded__matching-head\">\n <span class=\"expanded__matching-col-label\">Term</span>\n <span class=\"expanded__matching-col-label\">Definition</span>\n </div>\n <div\n v-for=\"(_, idx) in matchLeft\"\n :key=\"idx\"\n class=\"expanded__matching-row\"\n >\n <CoInput\n class=\"expanded__matching-input\"\n :value=\"matchLeft[idx]\"\n :placeholder=\"`Term ${idx + 1}`\"\n @coInput=\"updateMatchLeft(idx, detailValue($event))\"\n />\n <co-icon name=\"arrows-left-right\" size=\"16\" style=\"flex-shrink:0;color:var(--co-semantic-text-muted)\" />\n <CoInput\n class=\"expanded__matching-input\"\n :value=\"matchRight[idx]\"\n :placeholder=\"`Definition ${idx + 1}`\"\n @coInput=\"updateMatchRight(idx, detailValue($event))\"\n />\n <CoIconButton\n icon=\"x\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Remove pair\"\n @click=\"removeMatchPair(idx)\"\n />\n </div>\n <div class=\"expanded__options-foot\">\n <CoButton\n label=\"Add pair\"\n variant=\"stroke\"\n size=\"s\"\n icon-left=\"plus\"\n @click=\"addMatchPair\"\n />\n </div>\n </div>\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview — definitions will be shuffled for students</div>\n </div>\n </template>\n\n <!-- SECTION (not a field — just a header/divider in the rendered form) -->\n <template v-else-if=\"kind === 'section'\">\n <CoInput\n label=\"Description\"\n multiline\n placeholder=\"Optional explanatory text shown under the section title.\"\n :value=\"def.helperText || ''\"\n @coInput=\"patch('helperText', detailValue($event))\"\n />\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <div class=\"expanded__section-preview\">\n <h4>{{ def.label || 'Section title' }}</h4>\n <p v-if=\"def.helperText\">{{ def.helperText }}</p>\n </div>\n </div>\n </template>\n\n <!-- Helper text — common to most types (sections render their own description). -->\n <CoInput\n v-if=\"kind !== 'section'\"\n label=\"Helper text\"\n :value=\"def.helperText || ''\"\n placeholder=\"Optional helper / hint shown below the field\"\n @coInput=\"patch('helperText', detailValue($event))\"\n />\n </div>\n\n <!-- ── FOOTER ─────────────────────────────────────────────────────── -->\n <footer class=\"expanded__foot\">\n <!-- Answer Key button — quiz mode only, not for section dividers -->\n <CoButton\n v-if=\"isQuiz && kind !== 'section'\"\n :icon-left=\"hasAnswerKey ? 'check-square' : 'key'\"\n :label=\"answerKeyLabel\"\n :variant=\"answerKeyOpen ? 'primary' : 'stroke'\"\n size=\"s\"\n @click=\"answerKeyOpen = !answerKeyOpen\"\n />\n\n <CoSwitch\n :checked=\"!!def.required\"\n label=\"Required\"\n @coChange=\"patch('required', detailValue($event))\"\n />\n\n <div class=\"expanded__foot-spacer\" />\n\n <CoButton label=\"Duplicate\" icon-left=\"copy\" variant=\"ghost\" size=\"s\" @click=\"duplicate\" />\n <CoButton label=\"Delete\" icon-left=\"trash\" variant=\"ghost\" size=\"s\" @click=\"remove\" />\n </footer>\n\n <!-- ── ANSWER KEY PANEL (quiz mode) ──────────────────────────────── -->\n <div v-if=\"isQuiz && answerKeyOpen && kind !== 'section'\" class=\"answer-key\">\n <div class=\"answer-key__head\">\n <div class=\"answer-key__head-left\">\n <co-icon name=\"check-square\" size=\"18\" />\n <span class=\"answer-key__head-label\">Choose correct answer(s):</span>\n </div>\n <div class=\"answer-key__head-right\">\n <CoInput\n class=\"answer-key__points-input\"\n type=\"number\"\n :value=\"String(fieldPoints)\"\n @coInput=\"setPoints(detailValue($event))\"\n />\n <span class=\"answer-key__points-label\">points</span>\n </div>\n </div>\n\n <div class=\"answer-key__body\">\n <!-- Multiple Choice (select) — allow multi-select toggle -->\n <template v-if=\"kind === 'select'\">\n <CoCheckbox\n label=\"Allow multiple selections\"\n :checked=\"!!def.multiSelect\"\n @coChange=\"patch('multiSelect', detailValue($event) || undefined)\"\n />\n <div class=\"answer-key__question-label\">{{ def.label || 'Question' }}</div>\n <div\n v-for=\"(opt, idx) in options\"\n :key=\"idx\"\n class=\"answer-key__option\"\n :class=\"{ 'is-correct': correctOptions.includes(idx) }\"\n >\n <CoCheckbox\n :label=\"opt || `Option ${idx + 1}`\"\n :checked=\"correctOptions.includes(idx)\"\n @coChange=\"toggleCorrectOption(idx)\"\n />\n </div>\n </template>\n\n <!-- Image Choice — same as select, mark correct option(s) -->\n <template v-else-if=\"kind === 'image-choice'\">\n <CoCheckbox\n label=\"Allow multiple selections\"\n :checked=\"!!def.multiSelect\"\n @coChange=\"patch('multiSelect', detailValue($event) || undefined)\"\n />\n <div class=\"answer-key__question-label\">{{ def.label || 'Question' }}</div>\n <div\n v-for=\"(opt, idx) in options\"\n :key=\"idx\"\n class=\"answer-key__option\"\n :class=\"{ 'is-correct': correctOptions.includes(idx) }\"\n >\n <co-icon name=\"image-square\" size=\"16\" style=\"flex-shrink:0;color:var(--co-semantic-text-muted)\" />\n <CoCheckbox\n :label=\"opt || `Option ${idx + 1}`\"\n :checked=\"correctOptions.includes(idx)\"\n @coChange=\"toggleCorrectOption(idx)\"\n />\n </div>\n </template>\n\n <!-- True / False (boolean) — two radio buttons -->\n <template v-else-if=\"kind === 'boolean'\">\n <div class=\"answer-key__question-label\">{{ def.label || 'Question' }}</div>\n <div\n v-for=\"(opt, idx) in booleanOptions\"\n :key=\"idx\"\n class=\"answer-key__option\"\n :class=\"{ 'is-correct': correctOptions.includes(idx) }\"\n >\n <CoCheckbox\n :label=\"opt\"\n :checked=\"correctOptions.includes(idx)\"\n @coChange=\"toggleCorrectOption(idx)\"\n />\n </div>\n </template>\n\n <!-- Open ended (text / textarea) — manual grading -->\n <template v-else-if=\"kind === 'text' || kind === 'textarea'\">\n <div class=\"answer-key__manual\">\n <co-icon name=\"note-pencil\" size=\"20\" />\n <span>This question requires manual grading.</span>\n </div>\n <CoInput\n label=\"Sample answer / Rubric\"\n multiline\n :value=\"fieldSampleAnswer\"\n placeholder=\"Describe the expected answer or grading criteria…\"\n @coInput=\"setSampleAnswer(detailValue($event))\"\n />\n </template>\n\n <!-- Numeric answer — exact correct value -->\n <template v-else-if=\"kind === 'number'\">\n <div class=\"answer-key__question-label\">{{ def.label || 'Question' }}</div>\n <CoInput\n label=\"Correct answer\"\n type=\"number\"\n :value=\"fieldCorrectValue\"\n placeholder=\"Enter the correct numeric value\"\n @coInput=\"setCorrectValue(detailValue($event))\"\n />\n </template>\n\n <!-- Ordering — define correct order with drag & drop -->\n <template v-else-if=\"kind === 'ordering'\">\n <div class=\"answer-key__question-label\">Define the correct order:</div>\n <div\n v-for=\"(label, posIdx) in correctOrderLabels\"\n :key=\"posIdx\"\n class=\"answer-key__option is-correct\"\n :class=\"{\n 'is-dragging': orderingDragIdx === posIdx,\n 'is-drop-target': orderingDropIdx === posIdx && orderingDragIdx !== posIdx,\n }\"\n draggable=\"true\"\n @dragstart=\"orderingDragIdx = posIdx; $event.dataTransfer!.effectAllowed = 'move'\"\n @dragover.prevent=\"$event.dataTransfer!.dropEffect = 'move'; orderingDropIdx = posIdx\"\n @drop.prevent=\"if (orderingDragIdx != null) onOrderingDrop(orderingDragIdx, posIdx); orderingDragIdx = null; orderingDropIdx = null\"\n @dragend=\"orderingDragIdx = null; orderingDropIdx = null\"\n >\n <span class=\"answer-key__order-grip\" aria-hidden=\"true\">\n <co-icon name=\"dots-six-vertical\" size=\"16\" />\n </span>\n <span class=\"answer-key__order-num\">{{ posIdx + 1 }}</span>\n <span style=\"flex:1\">{{ label }}</span>\n </div>\n <div class=\"answer-key__hint\">\n <co-icon name=\"info\" size=\"16\" />\n <span>Drag items to set the correct order. Students will see items shuffled.</span>\n </div>\n </template>\n\n <!-- Matching — define correct pairs via dropdowns -->\n <template v-else-if=\"kind === 'matching'\">\n <div class=\"answer-key__question-label\">Match each term to its correct definition:</div>\n <div\n v-for=\"(term, idx) in matchLeft\"\n :key=\"idx\"\n class=\"answer-key__matching-pair\"\n >\n <span class=\"answer-key__matching-term\">{{ term }}</span>\n <co-icon name=\"arrow-right\" size=\"16\" />\n <select\n class=\"answer-key__matching-select\"\n :value=\"correctPairs[idx] !== undefined ? String(correctPairs[idx]) : ''\"\n @change=\"setCorrectPair(idx, ($event.target as HTMLSelectElement).value ? Number(($event.target as HTMLSelectElement).value) : undefined)\"\n >\n <option value=\"\">— Select definition —</option>\n <option\n v-for=\"(defText, rIdx) in matchRight\"\n :key=\"rIdx\"\n :value=\"String(rIdx)\"\n >{{ defText }}</option>\n </select>\n </div>\n <div class=\"answer-key__hint\">\n <co-icon name=\"info\" size=\"16\" />\n <span>Select the correct definition for each term. Definitions will be shuffled for students.</span>\n </div>\n </template>\n\n <!-- Fallback — manual grading -->\n <template v-else>\n <div class=\"answer-key__manual\">\n <co-icon name=\"note-pencil\" size=\"20\" />\n <span>This question requires manual grading.</span>\n </div>\n </template>\n </div>\n\n <!-- Explanation / Feedback -->\n <div class=\"answer-key__feedback\">\n <CoInput\n label=\"Add answer feedback\"\n icon-left=\"chat-dots\"\n :value=\"fieldExplanation\"\n placeholder=\"Explain why this answer is correct…\"\n @coInput=\"setExplanation(detailValue($event))\"\n />\n </div>\n\n <div class=\"answer-key__foot\">\n <CoButton label=\"Done\" variant=\"stroke\" @click=\"closeAnswerKey\" />\n </div>\n </div>\n </div>\n\n <!-- ── Mini-toolbar (Google Forms-style) ──────────────────────────── -->\n <aside class=\"mini-toolbar\" :class=\"{ 'is-open': insertOpen }\">\n <button\n class=\"mini-toolbar__btn\"\n title=\"Add field below\"\n @click.stop=\"insertOpen = !insertOpen\"\n >\n <co-icon name=\"plus\" size=\"16\" />\n </button>\n <button\n class=\"mini-toolbar__btn\"\n title=\"Add section below\"\n @click=\"insertSection\"\n >\n <co-icon name=\"minus\" size=\"16\" />\n </button>\n <button\n class=\"mini-toolbar__btn\"\n title=\"Duplicate\"\n @click=\"duplicate\"\n >\n <co-icon name=\"copy\" size=\"16\" />\n </button>\n\n <!-- Popover with type picker -->\n <div v-if=\"insertOpen\" class=\"mini-popover\" @click.stop>\n <div class=\"mini-popover__label\">Insert field below</div>\n <button\n v-for=\"entry in INSERT_OPTIONS\"\n :key=\"entry.id\"\n class=\"mini-popover__item\"\n @click=\"insertAfter(entry.id)\"\n >\n <co-icon :name=\"entry.icon\" size=\"16\" />\n <span>{{ entry.label }}</span>\n </button>\n </div>\n </aside>\n </div>\n</template>\n\n<style scoped>\n/* Wrapper holds the card + the floating mini-toolbar side by side, with\n * the toolbar peeking out to the right just like Google Forms. */\n.expanded-wrap {\n display: flex;\n align-items: flex-start;\n gap: var(--co-spacing-md, 12px);\n margin: 2px 0;\n position: relative;\n}\n\n.expanded {\n flex: 1;\n min-width: 0;\n background: var(--fb-panel);\n border: 1px solid var(--co-color-primary-azul, #2563eb);\n border-radius: var(--co-border-radius-sm, 12px);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent), var(--fb-shadow-md);\n overflow: hidden;\n}\n\n/* Mini-toolbar (floating right). */\n.mini-toolbar {\n position: sticky;\n top: var(--co-spacing-lg, 16px);\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: var(--co-spacing-xs, 4px);\n background: var(--fb-panel);\n border: 1px solid var(--fb-border);\n border-radius: var(--co-border-radius-full, 9999px);\n box-shadow: var(--fb-shadow-md);\n flex-shrink: 0;\n}\n\n.mini-toolbar__btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 0;\n background: transparent;\n border-radius: var(--co-border-radius-full, 9999px);\n color: var(--co-semantic-text-secondary, #6b7280);\n transition: all 120ms;\n}\n\n.mini-toolbar__btn:hover {\n background: color-mix(in srgb, var(--co-color-primary-azul) 8%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n}\n\n.mini-toolbar.is-open .mini-toolbar__btn:first-child {\n background: var(--co-color-primary-azul, #2563eb);\n color: white;\n}\n\n/* The mini-toolbar sits flush with the right edge of the canvas, so\n * opening this popover to the right would push it under the properties\n * sidebar (where it gets clipped / hidden). Anchor it to the LEFT of the\n * toolbar — always inside the canvas viewport. */\n.mini-popover {\n position: absolute;\n top: 0;\n right: calc(100% + var(--co-spacing-sm, 8px));\n z-index: 10;\n min-width: 220px;\n padding: var(--co-spacing-xs, 6px);\n background: var(--fb-panel);\n border: 1px solid var(--fb-border);\n border-radius: var(--co-border-radius-xs, 10px);\n box-shadow: var(--fb-shadow-lg);\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.mini-popover__label {\n padding: 6px 10px 4px;\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n.mini-popover__item {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n padding: 8px 10px;\n border: 0;\n background: transparent;\n border-radius: var(--co-border-radius-xxs, 6px);\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-default, #111827);\n text-align: left;\n width: 100%;\n}\n\n.mini-popover__item:hover {\n background: var(--fb-bg);\n}\n\n.mini-popover__item co-icon {\n color: var(--co-color-primary-azul, #2563eb);\n}\n\n/* ── Header ─────────────────────────────────────────────────────────── */\n.expanded__head {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--co-spacing-md, 12px);\n padding: var(--co-spacing-md, 14px) var(--co-spacing-lg, 16px);\n border-bottom: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n}\n\n.expanded__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: var(--co-border-radius-xs, 8px);\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n flex-shrink: 0;\n}\n\n.expanded__title {\n flex: 1 1 0%;\n min-width: 120px;\n overflow: hidden;\n}\n\n.expanded__label {\n display: block;\n font-size: var(--co-font-size-15, 15px);\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n line-height: 1.3;\n word-break: break-word;\n overflow-wrap: anywhere;\n}\n\n.expanded__meta {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 3px;\n font-size: var(--co-font-size-12, 12px);\n color: var(--co-semantic-text-secondary, #6b7280);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.expanded__id {\n font-family: ui-monospace, Menlo, monospace;\n font-size: 11px;\n padding: 2px 7px;\n border-radius: 4px;\n background: var(--fb-bg);\n color: var(--co-semantic-text-default, #111827);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 140px;\n flex-shrink: 1;\n}\n\n.expanded__sep { color: var(--co-semantic-text-muted, #9ca3af); }\n\n.expanded__head-actions {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n flex-shrink: 0;\n}\n\n.expanded__type {\n min-width: 0;\n max-width: 180px;\n}\n\n/* ── Body ───────────────────────────────────────────────────────────── */\n.expanded__body {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-md, 14px);\n padding: var(--co-spacing-lg, 18px) var(--co-spacing-lg, 18px);\n}\n\n.expanded__preview {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xs, 6px);\n padding: var(--co-spacing-md, 12px);\n background: var(--fb-bg);\n border: 1px dashed var(--fb-border);\n border-radius: var(--co-border-radius-xs, 8px);\n}\n\n.expanded__preview-label {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n/* Multi-column row for compact inputs (slider min/max/step, ref model/display). */\n.expanded__row {\n display: grid;\n gap: var(--co-spacing-md, 12px);\n}\n\n.expanded__row--2 { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); }\n.expanded__row--3 { grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); }\n\n.expanded__section-preview {\n padding: var(--co-spacing-sm, 8px) 0;\n}\n\n.expanded__section-preview h4 {\n margin: 0 0 4px;\n font-size: var(--co-font-size-16, 16px);\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n border-bottom: 1px solid var(--fb-border);\n padding-bottom: 6px;\n}\n\n.expanded__section-preview p {\n margin: 0;\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n/* ── Options (select editor) ────────────────────────────────────────── */\n.expanded__options {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xs, 6px);\n}\n\n.expanded__options-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--co-semantic-text-secondary, #6b7280);\n margin-bottom: 2px;\n}\n\n.expanded__options-foot {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-md, 12px);\n margin-top: var(--co-spacing-xs, 4px);\n}\n\n.expanded__option {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n padding: 2px 0;\n border-radius: var(--co-border-radius-xxs, 6px);\n transition: background 100ms, opacity 100ms;\n}\n\n.expanded__option:hover .expanded__option-grip { opacity: 1; }\n\n.expanded__option.is-dragging {\n opacity: 0.4;\n}\n\n.expanded__option.is-drop-target {\n background: color-mix(in srgb, var(--co-color-primary-azul) 8%, transparent);\n box-shadow: 0 -2px 0 var(--co-color-primary-azul, #2563eb);\n}\n\n.expanded__option-grip {\n color: var(--co-semantic-text-muted, #9ca3af);\n letter-spacing: -2px;\n font-size: 14px;\n line-height: 1;\n cursor: grab;\n opacity: 0;\n transition: opacity 100ms;\n user-select: none;\n flex-shrink: 0;\n}\n\n.expanded__option-grip:active { cursor: grabbing; }\n\n.expanded__option-bullet {\n width: 16px;\n height: 16px;\n border: 2px solid var(--fb-border-strong);\n border-radius: var(--co-border-radius-full, 9999px);\n flex-shrink: 0;\n}\n\n.expanded__option-input {\n flex: 1;\n}\n\n/* ── Footer ─────────────────────────────────────────────────────────── */\n.expanded__foot {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--co-spacing-sm, 8px) var(--co-spacing-md, 12px);\n padding: var(--co-spacing-sm, 10px) var(--co-spacing-lg, 16px);\n border-top: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n}\n\n.expanded__foot-spacer { flex: 1; }\n\n/* ── Answer Key panel ──────────────────────────────────────────────── */\n.answer-key {\n border-top: 1px solid var(--fb-border);\n border-left: 4px solid var(--co-color-primary-azul, #2563eb);\n background: color-mix(in srgb, var(--co-color-primary-azul) 3%, var(--fb-panel));\n}\n\n.answer-key__head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: var(--co-spacing-sm, 8px);\n padding: var(--co-spacing-md, 14px) var(--co-spacing-lg, 16px);\n border-bottom: 1px solid color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent);\n}\n\n.answer-key__head-left {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n color: var(--co-color-primary-azul, #2563eb);\n}\n\n.answer-key__head-label {\n font-size: var(--co-font-size-14, 14px);\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n}\n\n.answer-key__head-right {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.answer-key__points-input {\n max-width: 80px;\n}\n\n.answer-key__points-label {\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.answer-key__body {\n padding: var(--co-spacing-md, 14px) var(--co-spacing-lg, 16px);\n}\n\n.answer-key__question-label {\n font-size: var(--co-font-size-13, 13px);\n font-weight: 500;\n color: var(--co-semantic-text-secondary, #6b7280);\n margin-bottom: var(--co-spacing-sm, 8px);\n}\n\n.answer-key__option {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 10px);\n padding: 10px 12px;\n margin-bottom: 4px;\n border-radius: var(--co-border-radius-xxs, 8px);\n cursor: pointer;\n transition: background 100ms;\n user-select: none;\n}\n\n.answer-key__option:hover {\n background: color-mix(in srgb, var(--co-color-primary-azul) 6%, transparent);\n}\n\n.answer-key__option.is-correct {\n background: color-mix(in srgb, #16a34a 8%, transparent);\n}\n\n.answer-key__manual {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 10px);\n padding: var(--co-spacing-md, 14px) var(--co-spacing-lg, 16px);\n background: color-mix(in srgb, #eab308 8%, transparent);\n border: 1px solid color-mix(in srgb, #eab308 20%, transparent);\n border-radius: var(--co-border-radius-xs, 8px);\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.answer-key__manual co-icon { color: #ca8a04; }\n\n/* Feedback / explanation section */\n.answer-key__feedback {\n padding: 0 var(--co-spacing-lg, 16px) var(--co-spacing-md, 14px);\n border-top: 1px solid color-mix(in srgb, var(--co-color-primary-azul) 8%, transparent);\n margin-top: var(--co-spacing-xs, 4px);\n}\n\n.answer-key__foot {\n display: flex;\n justify-content: flex-end;\n padding: 0 var(--co-spacing-lg, 16px) var(--co-spacing-md, 14px);\n}\n\n/* Answer key — ordering number badge */\n.answer-key__order-num {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: var(--co-border-radius-full, 9999px);\n background: color-mix(in srgb, #16a34a 12%, transparent);\n color: #16a34a;\n font-size: 12px;\n font-weight: 700;\n flex-shrink: 0;\n}\n\n/* Answer key — ordering grip handle */\n.answer-key__order-grip {\n display: flex;\n align-items: center;\n color: var(--co-semantic-text-muted, #9ca3af);\n flex-shrink: 0;\n cursor: grab;\n}\n\n/* Answer key — ordering drag states */\n.answer-key__option[draggable=\"true\"] {\n cursor: grab;\n user-select: none;\n transition: border-color 120ms, box-shadow 120ms, opacity 120ms;\n}\n\n.answer-key__option.is-dragging {\n opacity: 0.4;\n cursor: grabbing;\n}\n\n.answer-key__option.is-drop-target:not(.is-dragging) {\n border-color: var(--co-color-primary-azul, #2563eb);\n box-shadow: 0 -2px 0 0 var(--co-color-primary-azul, #2563eb);\n}\n\n/* Answer key — matching pair row */\n.answer-key__matching-pair {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n padding: 8px 12px;\n margin-bottom: 4px;\n border-radius: var(--co-border-radius-xxs, 8px);\n background: color-mix(in srgb, #16a34a 6%, transparent);\n font-size: var(--co-font-size-13, 13px);\n}\n\n.answer-key__matching-term {\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n flex-shrink: 0;\n min-width: 80px;\n}\n\n.answer-key__matching-def {\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n/* Answer key — matching dropdown */\n.answer-key__matching-select {\n flex: 1;\n min-width: 0;\n padding: 6px 10px;\n border: 1px solid var(--fb-border-strong, rgba(17, 24, 39, 0.14));\n border-radius: var(--co-border-radius-xxs, 4px);\n background: var(--fb-panel, #fff);\n color: var(--co-semantic-text-default, #111827);\n font-size: var(--co-font-size-13, 13px);\n font-family: var(--co-font-family-primary, sans-serif);\n color-scheme: light;\n cursor: pointer;\n -webkit-appearance: menulist;\n appearance: menulist;\n}\n\n/* Answer key — informational hint */\n.answer-key__hint {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-xs, 4px);\n padding: var(--co-spacing-sm, 8px) 0 0;\n font-size: 12px;\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n/* Builder — image-choice option card */\n.expanded__image-option {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xs, 4px);\n padding: var(--co-spacing-sm, 8px);\n border: 1px solid var(--fb-border, rgba(17, 24, 39, 0.08));\n border-radius: var(--co-border-radius-xs, 8px);\n background: var(--fb-panel, #fff);\n margin-bottom: var(--co-spacing-sm, 8px);\n}\n\n.expanded__image-thumb-wrap {\n position: relative;\n width: 100%;\n height: 120px;\n border-radius: var(--co-border-radius-xxs, 4px);\n overflow: hidden;\n background: var(--fb-panel-soft, #fafbfc);\n border: 1px dashed var(--fb-border-strong, rgba(17, 24, 39, 0.14));\n}\n\n.expanded__image-thumb {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.expanded__image-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--co-spacing-xs, 4px);\n height: 100%;\n cursor: pointer;\n color: var(--co-semantic-text-muted, #9ca3af);\n font-size: 12px;\n transition: color 120ms, border-color 120ms;\n}\n\n.expanded__image-placeholder:hover {\n color: var(--co-color-primary-azul, #2563eb);\n}\n\n.expanded__image-actions {\n position: absolute;\n top: var(--co-spacing-xs, 4px);\n right: var(--co-spacing-xs, 4px);\n display: flex;\n gap: 2px;\n opacity: 0;\n transition: opacity 120ms;\n}\n\n.expanded__image-thumb-wrap:hover .expanded__image-actions {\n opacity: 1;\n}\n\n.expanded__image-label-row {\n display: flex;\n gap: var(--co-spacing-sm, 8px);\n align-items: center;\n}\n\n.expanded__image-label-row .expanded__option-input {\n flex: 1;\n}\n\n/* Builder — ordering item number */\n.expanded__option-number {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: var(--co-border-radius-full, 9999px);\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n font-size: 11px;\n font-weight: 700;\n flex-shrink: 0;\n}\n\n/* Builder — matching pair layout */\n.expanded__matching-head {\n display: grid;\n grid-template-columns: 1fr 16px 1fr 28px;\n gap: var(--co-spacing-sm, 8px);\n padding: 0 0 var(--co-spacing-xs, 4px);\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n.expanded__matching-row {\n display: grid;\n grid-template-columns: 1fr 16px 1fr 28px;\n gap: var(--co-spacing-sm, 8px);\n align-items: center;\n margin-bottom: var(--co-spacing-xs, 4px);\n}\n\n.expanded__matching-input {\n min-width: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useSchemaStore } from '../stores/schema';\nimport { FIELD_CATALOG } from '../fieldCatalog';\nimport FieldCardExpanded from './FieldCardExpanded.vue';\n\nconst props = defineProps<{\n pageIdx: number;\n fieldIdx: number;\n fieldName: string;\n}>();\n\nconst schema = useSchemaStore();\n\nconst page = computed(() => schema.data.pages[props.pageIdx]);\nconst def = computed<Record<string, any>>(\n () => page.value?.fields[props.fieldName] ?? {},\n);\n\nconst isSelected = computed(\n () =>\n schema.selection.pageIdx === props.pageIdx &&\n schema.selection.fieldName === props.fieldName,\n);\n\nconst catalogEntry = computed(() => {\n const d = def.value;\n if (d.uiCom === 'TextArea') return FIELD_CATALOG.find((x) => x.id === 'textarea');\n if (d.uiCom === 'Rating') return FIELD_CATALOG.find((x) => x.id === 'rating');\n if (d.uiCom === 'Slider') return FIELD_CATALOG.find((x) => x.id === 'slider');\n if (d.uiCom === 'ColorPicker') return FIELD_CATALOG.find((x) => x.id === 'color');\n if (d.uiCom === 'Section') return FIELD_CATALOG.find((x) => x.id === 'section');\n if (d.uiCom === 'File') return FIELD_CATALOG.find((x) => x.id === 'file');\n if (d.uiCom === 'Ordering') return FIELD_CATALOG.find((x) => x.id === 'ordering');\n if (d.uiCom === 'Matching') return FIELD_CATALOG.find((x) => x.id === 'matching');\n if (d.uiCom === 'ImageRadioGroup') return FIELD_CATALOG.find((x) => x.id === 'image-choice');\n if (d.ref) return FIELD_CATALOG.find((x) => x.id === 'ref');\n if (Array.isArray(d.enum)) return FIELD_CATALOG.find((x) => x.id === 'select');\n if (d.type === 'Number') return FIELD_CATALOG.find((x) => x.id === 'number');\n if (d.type === 'Date') return FIELD_CATALOG.find((x) => x.id === 'date');\n if (d.type === 'Boolean') return FIELD_CATALOG.find((x) => x.id === 'boolean');\n return FIELD_CATALOG.find((x) => x.id === 'text');\n});\n\nfunction select(): void {\n schema.selectField(props.pageIdx, props.fieldName);\n}\n\nfunction duplicate(ev: Event): void {\n ev.stopPropagation();\n schema.duplicateField(props.pageIdx, props.fieldName);\n}\n\nfunction remove(ev: Event): void {\n ev.stopPropagation();\n schema.removeField(props.pageIdx, props.fieldName);\n}\n\n// Reorder is handled by `vue-draggable-plus` on the parent <PageCard>;\n// it picks the `.field__grip` element as the drag handle.\n</script>\n\n<template>\n <FieldCardExpanded\n v-if=\"isSelected\"\n :page-idx=\"pageIdx\"\n :field-name=\"fieldName\"\n />\n\n <div\n v-else\n class=\"field\"\n @click.stop=\"select\"\n >\n <span class=\"field__grip\" aria-hidden=\"true\">⋮⋮</span>\n\n <span class=\"field__icon\">\n <co-icon v-if=\"catalogEntry\" :name=\"catalogEntry.icon\" size=\"18\" />\n </span>\n\n <div class=\"field__body\">\n <div class=\"field__name\">\n {{ def.label || fieldName }}\n <span v-if=\"def.required\" class=\"field__chip field__chip--warn\">required</span>\n <span v-if=\"def.visibleIf\" class=\"field__chip\">visibleIf</span>\n <span v-if=\"def.full\" class=\"field__chip\">full</span>\n </div>\n <div class=\"field__meta\">\n <span class=\"field__meta-id\">{{ fieldName }}</span>\n <span class=\"field__meta-sep\">·</span>\n <span>{{ schema.data.mode === 'quiz' && catalogEntry?.quizLabel ? catalogEntry.quizLabel : (catalogEntry?.label || def.type || 'String') }}</span>\n </div>\n </div>\n\n <div class=\"field__actions\" @click.stop>\n <button class=\"field__action\" title=\"Duplicate\" @click=\"duplicate\">\n <co-icon name=\"copy\" size=\"14\" />\n </button>\n <button class=\"field__action field__action--danger\" title=\"Delete\" @click=\"remove\">\n <co-icon name=\"trash\" size=\"14\" />\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n.field {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--co-spacing-md, 12px);\n padding: var(--co-spacing-md, 14px) var(--co-spacing-lg, 16px);\n background: var(--fb-panel);\n border: 1px solid var(--fb-border);\n border-radius: var(--co-border-radius-sm, 10px);\n cursor: pointer;\n transition: all 120ms;\n margin: 2px 0;\n}\n\n.field:hover {\n border-color: var(--fb-border-strong);\n box-shadow: var(--fb-shadow-sm);\n}\n\n.field:hover .field__actions { opacity: 1; }\n.field:hover .field__grip { opacity: 1; }\n\n.field.is-selected {\n border-color: var(--co-color-primary-azul, #2563eb);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent);\n}\n\n.field__grip {\n color: var(--co-semantic-text-muted, #9ca3af);\n letter-spacing: -2px;\n cursor: grab;\n opacity: 0.4;\n transition: opacity 120ms, color 120ms;\n user-select: none;\n font-size: 14px;\n line-height: 1;\n /* Padding gives a comfy click target — drag handles too small are\n * frustrating, especially on touch. */\n padding: 4px 2px;\n margin: -4px -2px;\n}\n\n.field:hover .field__grip {\n opacity: 1;\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.field__grip:active { cursor: grabbing; }\n\n.field__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: var(--co-border-radius-xs, 8px);\n background: color-mix(in srgb, var(--co-color-primary-azul) 8%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n flex-shrink: 0;\n}\n\n.field__body { flex: 1; min-width: 0; }\n\n.field__name {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-xs, 6px);\n font-weight: 600;\n font-size: var(--co-font-size-14, 14px);\n color: var(--co-semantic-text-default, #111827);\n line-height: 1.3;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.field__meta {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-xs, 6px);\n margin-top: 3px;\n font-size: var(--co-font-size-12, 12px);\n color: var(--co-semantic-text-secondary, #6b7280);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.field__meta-id {\n font-family: ui-monospace, Menlo, monospace;\n background: var(--fb-bg);\n padding: 2px 7px;\n border-radius: 4px;\n font-size: 11px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 120px;\n flex-shrink: 1;\n}\n\n.field__meta-sep { color: var(--co-semantic-text-muted, #9ca3af); }\n\n.field__chip {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n padding: 2px 7px;\n border-radius: var(--co-border-radius-full, 9999px);\n background: var(--fb-bg);\n color: var(--co-semantic-text-secondary, #6b7280);\n flex-shrink: 0;\n white-space: nowrap;\n}\n\n.field__chip--warn {\n background: rgba(253, 191, 0, 0.15);\n color: #92400e;\n}\n\n.field__actions {\n display: flex;\n gap: 2px;\n opacity: 0;\n transition: opacity 120ms;\n}\n\n.field.is-selected .field__actions { opacity: 1; }\n\n.field__action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 0;\n background: transparent;\n border-radius: var(--co-border-radius-xxs, 6px);\n color: var(--co-semantic-text-secondary, #6b7280);\n transition: all 120ms;\n}\n\n.field__action:hover {\n background: var(--fb-bg);\n color: var(--co-semantic-text-default, #111827);\n}\n\n.field__action--danger:hover {\n color: var(--co-color-status-error, #aa2e1b);\n background: rgba(170, 46, 27, 0.08);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { VueDraggable } from 'vue-draggable-plus';\nimport { useSchemaStore } from '../stores/schema';\nimport EditableText from './EditableText.vue';\nimport FieldCard from './FieldCard.vue';\n\nconst props = defineProps<{\n pageIdx: number;\n}>();\n\nconst schema = useSchemaStore();\n\nconst page = computed(() => schema.data.pages[props.pageIdx]);\nconst isSelected = computed(\n () => schema.selection.pageIdx === props.pageIdx && schema.selection.fieldName === null,\n);\n\n/**\n * Field-order array bound to vue-draggable-plus via v-model. The getter\n * derives from the store; the setter pushes the new order back via the\n * `reorderFieldsByNames` helper (which validates + snapshots for undo).\n */\nconst fieldNames = computed<string[]>({\n get: () => (page.value ? Object.keys(page.value.fields) : []),\n set: (names) => schema.reorderFieldsByNames(props.pageIdx, names),\n});\n\n/** Highlight when the toolbox is dragging a new field-kind over the page. */\nconst toolboxDragOver = ref(false);\n\nfunction selectPage(): void {\n schema.selectPage(props.pageIdx);\n}\n\nfunction dup(ev: Event): void {\n ev.stopPropagation();\n schema.duplicatePage(props.pageIdx);\n}\n\nfunction remove(ev: Event): void {\n ev.stopPropagation();\n if (schema.data.pages.length <= 1) return;\n schema.removePage(props.pageIdx);\n}\n\nfunction patchPage(patch: Record<string, any>): void {\n schema.updatePage(props.pageIdx, patch);\n}\n\n// ── Native HTML5 drop from the toolbox ───────────────────────────────────\n// VueDraggable owns within-page reorder. The toolbox still uses native\n// HTML5 dnd to add new fields — we handle its payload here on the page\n// body, separate from SortableJS's pointer flow.\n\nfunction onBodyDragOver(ev: DragEvent): void {\n if (!ev.dataTransfer) return;\n if (!Array.from(ev.dataTransfer.types).includes('application/cobalt-field-kind')) return;\n ev.preventDefault();\n ev.dataTransfer.dropEffect = 'copy';\n toolboxDragOver.value = true;\n}\n\nfunction onBodyDragLeave(ev: DragEvent): void {\n // Only clear when leaving the body itself, not children.\n if (ev.currentTarget === ev.target) toolboxDragOver.value = false;\n}\n\nfunction onBodyDrop(ev: DragEvent): void {\n toolboxDragOver.value = false;\n const kind = ev.dataTransfer?.getData('application/cobalt-field-kind');\n if (!kind) return;\n ev.preventDefault();\n schema.addField(kind, props.pageIdx);\n}\n</script>\n\n<template>\n <section\n v-if=\"page\"\n class=\"page\"\n :class=\"{\n 'is-selected': isSelected,\n 'is-toolbox-drag': toolboxDragOver,\n 'page--quiz': schema.data.mode === 'quiz',\n }\"\n @click=\"selectPage\"\n >\n <header v-if=\"schema.data.mode !== 'quiz'\" class=\"page__head\">\n <div class=\"page__head-text\">\n <div class=\"page__head-pill\">PAGE {{ pageIdx + 1 }}</div>\n <EditableText\n class=\"page__title\"\n :model-value=\"page.title || ''\"\n placeholder=\"Untitled page\"\n @update:model-value=\"patchPage({ title: $event })\"\n />\n <EditableText\n class=\"page__desc\"\n :model-value=\"page.description || ''\"\n placeholder=\"Add a description for this page (optional)\"\n @update:model-value=\"patchPage({ description: $event })\"\n />\n </div>\n <div class=\"page__head-actions\" @click.stop>\n <button class=\"page__action\" title=\"Duplicate page\" @click=\"dup\">\n <co-icon name=\"copy\" size=\"14\" />\n <span>Duplicate</span>\n </button>\n <button\n class=\"page__action page__action--danger\"\n :disabled=\"schema.data.pages.length <= 1\"\n title=\"Delete page\"\n @click=\"remove\"\n >\n <co-icon name=\"trash\" size=\"14\" />\n <span>Delete</span>\n </button>\n </div>\n </header>\n\n <div\n class=\"page__body\"\n @dragover=\"onBodyDragOver\"\n @dragleave=\"onBodyDragLeave\"\n @drop=\"onBodyDrop\"\n >\n <VueDraggable\n v-model=\"fieldNames\"\n class=\"page__sortable\"\n :animation=\"140\"\n ghost-class=\"page__ghost\"\n chosen-class=\"page__chosen\"\n drag-class=\"page__drag\"\n handle=\".field__grip\"\n >\n <FieldCard\n v-for=\"(name, idx) in fieldNames\"\n :key=\"name\"\n :page-idx=\"pageIdx\"\n :field-idx=\"idx\"\n :field-name=\"name\"\n />\n </VueDraggable>\n\n <div v-if=\"fieldNames.length === 0\" class=\"page__empty\">\n <co-icon name=\"plus\" size=\"20\" />\n <span>Drag a field here or click one in the toolbox</span>\n </div>\n </div>\n </section>\n</template>\n\n<style scoped>\n.page {\n background: var(--fb-panel);\n border: 1px solid var(--fb-border);\n border-radius: var(--co-border-radius-lg, 16px);\n overflow: hidden;\n transition: border-color 120ms, box-shadow 120ms;\n box-shadow: var(--fb-shadow-sm);\n}\n\n.page:hover {\n box-shadow: var(--fb-shadow-md);\n}\n\n.page.is-selected {\n border-color: var(--co-color-primary-azul, #2563eb);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent), var(--fb-shadow-md);\n}\n\n/* Quiz mode — strip page card chrome so questions sit directly on the canvas. */\n.page--quiz {\n background: transparent;\n border: none;\n border-radius: 0;\n box-shadow: none;\n}\n\n.page--quiz:hover {\n box-shadow: none;\n}\n\n.page--quiz.is-selected {\n border-color: transparent;\n box-shadow: none;\n}\n\n/* Toolbox is dragging a new field over this page → outline cue. */\n.page.is-toolbox-drag {\n border-color: var(--co-color-primary-azul, #2563eb);\n border-style: dashed;\n background: color-mix(in srgb, var(--co-color-primary-azul) 4%, var(--fb-panel));\n}\n\n.page__head {\n display: flex;\n align-items: flex-start;\n gap: var(--co-spacing-md, 12px);\n padding: var(--co-spacing-xl, 20px) var(--co-spacing-2xl, 24px);\n border-bottom: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n}\n\n.page__head-text { flex: 1; min-width: 0; }\n\n.page__head-pill {\n display: inline-flex;\n align-items: center;\n font-size: var(--co-font-size-10, 10px);\n font-weight: 700;\n letter-spacing: 0.08em;\n color: var(--co-color-primary-azul, #2563eb);\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n padding: 3px 8px;\n border-radius: var(--co-border-radius-full, 9999px);\n margin-bottom: 6px;\n}\n\n.page__title {\n display: block;\n font-size: var(--co-font-size-18, 18px);\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n letter-spacing: -0.01em;\n line-height: 1.3;\n}\n\n.page__desc {\n display: block;\n margin-top: 4px;\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.page__head-actions {\n display: flex;\n gap: 2px;\n opacity: 0;\n transition: opacity 120ms;\n}\n\n.page:hover .page__head-actions,\n.page.is-selected .page__head-actions { opacity: 1; }\n\n.page__action {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n border: 0;\n background: transparent;\n border-radius: var(--co-border-radius-xxs, 6px);\n font-size: var(--co-font-size-12, 12px);\n font-weight: 500;\n color: var(--co-semantic-text-secondary, #6b7280);\n transition: all 120ms;\n}\n\n.page__action:hover:not(:disabled) {\n background: var(--fb-panel);\n color: var(--co-semantic-text-default, #111827);\n box-shadow: var(--fb-shadow-sm);\n}\n\n.page__action--danger:hover:not(:disabled) {\n color: var(--co-color-status-error, #aa2e1b);\n}\n\n.page__action:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.page__body {\n display: flex;\n flex-direction: column;\n padding: var(--co-spacing-xl, 20px) var(--co-spacing-2xl, 24px);\n gap: 0;\n min-height: 80px;\n}\n\n/* VueDraggable container — its children are the FieldCard rows. */\n.page__sortable {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xs, 6px);\n}\n\n/* ── Sortable visual states ─────────────────────────────────────────── *\n * ghost-class: placeholder showing where the dragged item will land.\n * chosen-class: applied to the picked-up element during the drag.\n * drag-class: applied to the drag image clone (browser-rendered when\n * using native HTML5 drag — most of the styling is decorative since\n * the browser snapshots the element at drag-start).\n */\n.page__ghost {\n opacity: 0.6;\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n border: 1px dashed var(--co-color-primary-azul, #2563eb) !important;\n border-radius: var(--co-border-radius-sm, 10px);\n}\n\n/* Hide the ghost row's contents so the placeholder is a clean drop-zone\n * outline (instead of a faded copy of the field). */\n.page__ghost > * {\n visibility: hidden;\n}\n\n.page__chosen {\n cursor: grabbing;\n}\n\n.page__drag {\n opacity: 0.95;\n box-shadow: var(--fb-shadow-lg);\n}\n\n.page__empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--co-spacing-md, 12px);\n padding: var(--co-spacing-4xl, 40px) var(--co-spacing-2xl, 24px);\n border: 2px dashed var(--fb-border);\n border-radius: var(--co-border-radius-sm, 12px);\n color: var(--co-semantic-text-secondary, #6b7280);\n font-size: var(--co-font-size-13, 13px);\n background: var(--fb-panel-soft);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, inject, type Ref } from 'vue';\nimport { themeToStyles } from '@prolibu-suite/cobalt-form-core';\nimport { useSchemaStore } from '../stores/schema';\nimport EditableText from './EditableText.vue';\nimport PageCard from './PageCard.vue';\n\nconst schema = useSchemaStore();\n\n/**\n * Translate the user's theme into inline CSS custom properties + data\n * attributes for the canvas. This makes theme edits **live** while the\n * user is in the Designer tab — the editor chrome (topbar/sidebars) stays\n * untouched; only the form area reacts.\n */\nconst themeStyles = computed(() => themeToStyles(schema.resolvedTheme));\n\nconst isQuiz = computed(() => schema.data.mode === 'quiz');\n\nconst titlePlaceholder = computed(() => isQuiz.value ? 'Quiz title…' : 'Untitled form');\nconst descPlaceholder = computed(() => isQuiz.value ? 'Quiz description (optional)' : 'Add a description (optional)');\n\nconst externalTitleError = inject<Ref<boolean>>('titleError', computed(() => false));\nconst titleHasError = computed(() => externalTitleError.value && !schema.data.title?.trim());\n\n/** Inline styles for the inner (form-scoped) container. */\nconst innerStyle = computed<Record<string, string>>(() => ({\n ...themeStyles.value.customProperties,\n}));\n\n/** Inline styles for the outer canvas — background color/image live here. */\nconst outerStyle = computed<Record<string, string>>(() => ({\n ...themeStyles.value.inlineStyles,\n}));\n\nconst dataAttrs = computed(() => ({\n 'data-theme': themeStyles.value.modifiers.colorScheme,\n 'data-appearance': themeStyles.value.modifiers.appearance,\n 'data-density': themeStyles.value.modifiers.density,\n 'data-radius': themeStyles.value.modifiers.radius,\n ...(themeStyles.value.modifiers.hideHeader ? { 'data-hide-header': '' } : {}),\n}));\n</script>\n\n<template>\n <div class=\"canvas\" :style=\"outerStyle\">\n <div class=\"canvas__inner\" :style=\"innerStyle\" v-bind=\"dataAttrs\">\n <header\n v-if=\"!themeStyles.modifiers.hideHeader\"\n class=\"canvas__head\"\n :class=\"{ 'is-selected': schema.selection.kind === 'form' }\"\n @click.stop=\"schema.selectForm()\"\n >\n <EditableText\n class=\"canvas__title\"\n :model-value=\"schema.data.title\"\n :placeholder=\"titlePlaceholder\"\n :error=\"titleHasError\"\n @update:model-value=\"schema.setTitle($event)\"\n />\n <EditableText\n class=\"canvas__desc\"\n :model-value=\"schema.data.description\"\n :placeholder=\"descPlaceholder\"\n @update:model-value=\"schema.setDescription($event)\"\n />\n </header>\n\n <div class=\"canvas__pages\">\n <PageCard\n v-for=\"(_, idx) in schema.data.pages\"\n :key=\"schema.data.pages[idx].name + '-' + idx\"\n :page-idx=\"idx\"\n />\n </div>\n\n <button v-if=\"schema.data.mode !== 'quiz'\" class=\"canvas__add-page\" @click=\"schema.addPage()\">\n <co-icon name=\"plus\" size=\"14\" />\n <span>Add page</span>\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* The outer canvas is the area BEHIND the form — background color/image\n * from the user's theme paint this layer. Spacing/padding keeps the form\n * card centred regardless of background. */\n.canvas {\n min-height: 100%;\n padding: var(--co-spacing-4xl, 40px) var(--co-spacing-2xl, 24px) var(--co-spacing-3xl, 32px);\n /* Default background is the editor's neutral gray; user can override\n * via theme. The `transparent` fallback lets the image show through. */\n background-color: var(--co-form-canvas-bg, var(--fb-bg, #f6f7f9));\n}\n\n.canvas__inner {\n max-width: 820px;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xl, 20px);\n}\n\n/* ── Dark mode: re-bind the FB surface tokens inside the canvas only.\n * The editor chrome (topbar, toolbox, side panel) stays light because the\n * `[data-theme=\"dark\"]` selector is scoped here. */\n.canvas__inner[data-theme=\"dark\"] {\n --fb-bg: #1a1f2b;\n --fb-panel: #232936;\n --fb-panel-soft: #1c2230;\n --fb-border: rgba(255, 255, 255, 0.08);\n --fb-border-strong: rgba(255, 255, 255, 0.16);\n --co-semantic-text-default: #f9fafb;\n --co-semantic-text-secondary: #9ca3af;\n --co-semantic-text-muted: #6b7280;\n --co-semantic-surface-hover: rgba(255, 255, 255, 0.06);\n --co-semantic-border-default: rgba(255, 255, 255, 0.08);\n --fb-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);\n --fb-shadow-md: 0 1px 2px rgba(0, 0, 0, 0.4), 0 4px 12px rgba(0, 0, 0, 0.35);\n color: var(--co-semantic-text-default);\n}\n\n.canvas[data-theme=\"dark\"] {\n background-color: #0f1420;\n}\n\n.canvas__inner[data-theme=\"dark\"] .canvas__title { color: #f9fafb; }\n.canvas__inner[data-theme=\"dark\"] .canvas__desc { color: #9ca3af; }\n\n/* Compact density — tighter gap between pages, smaller header padding. */\n.canvas__inner[data-density=\"compact\"] {\n gap: var(--co-spacing-md, 12px);\n}\n\n.canvas__inner[data-density=\"compact\"] .canvas__head {\n padding: var(--co-spacing-lg, 16px) var(--co-spacing-xl, 20px);\n}\n\n/* Flat appearance — strip the head card chrome so it sits directly on\n * the canvas background, matching how the rendered form would look. */\n.canvas__inner[data-appearance=\"flat\"] .canvas__head {\n background: transparent;\n border: 0;\n padding: var(--co-spacing-xl, 20px) 0;\n box-shadow: none;\n}\n\n/* ── Flat appearance ────────────────────────────────────────────────\n * Strips every card surface — pages, page headers, field rows — so\n * editing the form looks like editing on a blank canvas. Selection\n * outlines stay subtle so the user can still tell what's active.\n * Vue scoped CSS can't reach into other component scopes directly,\n * so the cross-component bits use :deep().\n */\n.canvas__inner[data-appearance=\"flat\"] :deep(.page),\n.canvas__inner[data-appearance=\"flat\"] :deep(.page:hover) {\n background: transparent;\n border: 0;\n box-shadow: none;\n}\n\n.canvas__inner[data-appearance=\"flat\"] :deep(.page.is-selected) {\n background: transparent;\n border: 1px dashed var(--co-color-primary-azul, #2563eb);\n box-shadow: none;\n}\n\n.canvas__inner[data-appearance=\"flat\"] :deep(.page__head) {\n background: transparent;\n border-bottom: 0;\n}\n\n/* Field rows lose their card chrome too — only a hover background and\n * the selection outline remain so the editing affordance survives. */\n.canvas__inner[data-appearance=\"flat\"] :deep(.field),\n.canvas__inner[data-appearance=\"flat\"] :deep(.field:hover) {\n background: transparent;\n border: 0;\n box-shadow: none;\n}\n\n.canvas__inner[data-appearance=\"flat\"] :deep(.field:hover) {\n background: var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.03));\n}\n\n.canvas__head {\n background: var(--co-form-header-bg, var(--fb-panel));\n border: 1px solid var(--fb-border);\n border-radius: var(--co-border-radius-lg, 16px);\n padding: var(--co-spacing-2xl, 24px) var(--co-spacing-3xl, 28px);\n box-shadow: var(--fb-shadow-sm);\n cursor: pointer;\n transition: border-color 120ms, box-shadow 120ms;\n min-height: var(--co-form-header-height, auto);\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n\n.canvas__head:hover {\n box-shadow: var(--fb-shadow-md);\n}\n\n.canvas__head.is-selected {\n border-color: var(--co-color-primary-azul, #2563eb);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent), var(--fb-shadow-md);\n}\n\n.canvas__head-pill {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.08em;\n color: var(--co-color-primary-azul, #2563eb);\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n padding: 3px 8px;\n border-radius: var(--co-border-radius-full, 9999px);\n margin-bottom: 6px;\n}\n\n.canvas__title {\n display: block;\n font-size: 26px;\n font-weight: 700;\n color: var(--co-semantic-text-default, #111827);\n letter-spacing: -0.02em;\n line-height: 1.2;\n}\n\n.canvas__desc {\n display: block;\n margin-top: var(--co-spacing-xs, 6px);\n font-size: var(--co-font-size-14, 14px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.canvas__pages {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xl, 20px);\n}\n\n.canvas__add-page {\n align-self: center;\n display: inline-flex;\n align-items: center;\n gap: var(--co-spacing-xs, 6px);\n padding: var(--co-spacing-sm, 10px) var(--co-spacing-xl, 20px);\n border: 1px dashed var(--fb-border-strong);\n background: var(--fb-panel);\n border-radius: var(--co-border-radius-full, 9999px);\n color: var(--co-semantic-text-secondary, #6b7280);\n font-size: var(--co-font-size-13, 13px);\n font-weight: 500;\n transition: all 120ms;\n}\n\n.canvas__add-page:hover {\n border-color: var(--co-color-primary-azul, #2563eb);\n color: var(--co-color-primary-azul, #2563eb);\n background: color-mix(in srgb, var(--co-color-primary-azul) 4%, transparent);\n border-style: solid;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport {\n CoButton,\n CoCheckbox,\n CoInput,\n CoSelect,\n CoSlider,\n CoSwitch,\n CoTab,\n CoTabGroup,\n} from '@prolibu-suite/cobalt-vue';\nimport { ACCENT_PRESET_HEX } from '@prolibu-suite/cobalt-form-core';\nimport { useSchemaStore } from '../stores/schema';\n\n/**\n * Selection-driven side panel with THREE independent scopes — each has\n * its own tab set and never overlaps with the others:\n *\n * - FORM scope → global form/theme settings (General/Header/Background/\n * Appearance). Selected by clicking the form title block.\n * - PAGE scope → page-specific (id, visibleIf). Default selection.\n * - FIELD scope → field-specific (Layout/Logic/Validation). Inline editor\n * on canvas + this side panel.\n */\n\ntype FormSection = 'general' | 'header' | 'background' | 'appearance' | 'advanced';\ntype PageSection = 'general' | 'logic';\ntype FieldSection = 'layout' | 'logic' | 'validation';\n\nconst FORM_TABS: { id: FormSection; label: string; icon: string }[] = [\n { id: 'general', label: 'General', icon: 'gear' },\n { id: 'header', label: 'Header', icon: 'image' },\n { id: 'background', label: 'Background', icon: 'paint-bucket' },\n { id: 'appearance', label: 'Appearance', icon: 'paint-brush' },\n { id: 'advanced', label: 'Advanced', icon: 'code' },\n];\n\nconst PAGE_TABS: { id: PageSection; label: string; icon: string }[] = [\n { id: 'general', label: 'General', icon: 'gear' },\n { id: 'logic', label: 'Logic', icon: 'git-branch' },\n];\n\nconst FIELD_TABS: { id: FieldSection; label: string; icon: string }[] = [\n { id: 'layout', label: 'Layout', icon: 'layout' },\n { id: 'logic', label: 'Logic', icon: 'git-branch' },\n { id: 'validation', label: 'Validation', icon: 'shield-check' },\n];\n\nconst APPEARANCE_OPTIONS = [\n { label: 'Panels (default)', value: 'panels' },\n { label: 'Without panels', value: 'flat' },\n];\nconst DENSITY_OPTIONS = [\n { label: 'Comfortable', value: 'comfortable' },\n { label: 'Compact', value: 'compact' },\n];\nconst RADIUS_OPTIONS = [\n { label: 'Rounded', value: 'rounded' },\n { label: 'Sharp', value: 'sharp' },\n];\nconst SIZE_OPTIONS = [\n { label: 'Auto', value: 'auto' },\n { label: 'Contain', value: 'contain' },\n { label: 'Cover', value: 'cover' },\n];\nconst ATTACHMENT_OPTIONS = [\n { label: 'Scroll', value: 'scroll' },\n { label: 'Fixed', value: 'fixed' },\n];\nconst FORMAT_OPTIONS = [\n { label: '(none)', value: '' },\n { label: 'email', value: 'email' },\n { label: 'url', value: 'url' },\n { label: 'uuid', value: 'uuid' },\n];\nconst ACCENT_CHIPS = [\n { id: 'azul', label: 'Azul', hex: ACCENT_PRESET_HEX.azul },\n { id: 'verde', label: 'Verde', hex: ACCENT_PRESET_HEX.verde },\n { id: 'amarillo', label: 'Amarillo', hex: ACCENT_PRESET_HEX.amarillo },\n { id: 'rosado', label: 'Rosado', hex: ACCENT_PRESET_HEX.rosado },\n] as const;\n\nconst schema = useSchemaStore();\nconst isQuiz = computed(() => schema.data.mode === 'quiz');\n\nconst kind = computed(() => schema.selection.kind);\nconst page = computed(() => schema.currentPage!);\nconst field = computed<Record<string, any>>(() => schema.selectedField || {});\nconst fieldName = computed(() => schema.selection.fieldName ?? '');\n\n// One tab-state per scope so user lands on the right default each time.\nconst formSection = ref<FormSection>('general');\nconst pageSection = ref<PageSection>('general');\nconst fieldSection = ref<FieldSection>('layout');\n\n// Reset tab to the first useful one when switching scopes.\nwatch(kind, (k) => {\n if (k === 'form') formSection.value = 'general';\n else if (k === 'page') pageSection.value = 'general';\n else if (k === 'field') fieldSection.value = 'layout';\n});\n\nconst theme = computed(() => schema.data.theme);\nconst resolved = computed(() => schema.resolvedTheme);\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\nfunction detailValue(ev: CustomEvent): any {\n const d = ev.detail;\n if (d != null && typeof d === 'object' && 'value' in d) return (d as any).value;\n if (d != null && typeof d === 'object' && 'checked' in d) return (d as any).checked;\n return d;\n}\n\nfunction toNumOrUndef(v: any): number | undefined {\n if (v === '' || v == null) return undefined;\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\nfunction patchField(key: string, value: any): void {\n schema.updateField(schema.selection.pageIdx, fieldName.value, { [key]: value });\n}\n\nfunction patchPage(key: string, value: any): void {\n schema.updatePage(schema.selection.pageIdx, { [key]: value });\n}\n\nfunction patchTheme(key: string, value: any): void {\n schema.setTheme({ [key]: value } as any);\n}\n\nfunction patchThemeSection(sec: 'background' | 'header', key: string, value: any): void {\n schema.setThemeSection(sec, { [key]: value });\n}\n\nfunction pickAccent(id: 'azul' | 'verde' | 'amarillo' | 'rosado'): void {\n patchTheme('accent', id);\n}\n\nfunction pickCustomAccent(hex: string): void {\n const s = hex.trim();\n if (!/^#[0-9a-fA-F]{3,8}$/.test(s)) return;\n schema.setTheme({ accent: 'custom', accentHex: s });\n}\n\nconst scopeLabel = computed(() => {\n if (kind.value === 'form') return 'Form';\n if (kind.value === 'page') return 'Page';\n return 'Field';\n});\n\nconst scopeSubtitle = computed(() => {\n if (kind.value === 'form') return schema.data.title || 'Untitled form';\n if (kind.value === 'page') return page.value?.name ?? '';\n return fieldName.value;\n});\n</script>\n\n<template>\n <div class=\"props\">\n <header class=\"props__head\">\n <div class=\"props__title\">{{ scopeLabel }}</div>\n <div class=\"props__subtitle\">{{ scopeSubtitle }}</div>\n </header>\n\n <!-- ═══════════ FORM SCOPE ═══════════ -->\n <template v-if=\"kind === 'form'\">\n <CoTabGroup\n class=\"props__tabs\"\n :value=\"formSection\"\n @coTabChange=\"formSection = (detailValue($event) as FormSection) || formSection\"\n >\n <CoTab\n v-for=\"t in FORM_TABS\"\n :key=\"t.id\"\n :label=\"t.label\"\n :value=\"t.id\"\n :icon-left=\"t.icon\"\n size=\"small\"\n />\n </CoTabGroup>\n\n <div class=\"props__body\">\n <template v-if=\"formSection === 'general'\">\n <div class=\"row\">\n <div class=\"row__label\">Color scheme</div>\n <div class=\"seg\">\n <button\n class=\"seg__btn\"\n :class=\"{ 'is-active': resolved.colorScheme === 'light' }\"\n @click=\"patchTheme('colorScheme', 'light')\"\n >\n <co-icon name=\"sun\" size=\"14\" />\n <span>Light</span>\n </button>\n <button\n class=\"seg__btn\"\n :class=\"{ 'is-active': resolved.colorScheme === 'dark' }\"\n @click=\"patchTheme('colorScheme', 'dark')\"\n >\n <co-icon name=\"moon\" size=\"14\" />\n <span>Dark</span>\n </button>\n </div>\n </div>\n <CoSelect\n label=\"Question appearance\"\n :options=\"JSON.stringify(APPEARANCE_OPTIONS)\"\n :value=\"resolved.questionAppearance\"\n @coChange=\"patchTheme('questionAppearance', detailValue($event))\"\n />\n <CoSelect\n label=\"Density\"\n :options=\"JSON.stringify(DENSITY_OPTIONS)\"\n :value=\"resolved.density\"\n @coChange=\"patchTheme('density', detailValue($event))\"\n />\n <CoSelect\n label=\"Border radius\"\n :options=\"JSON.stringify(RADIUS_OPTIONS)\"\n :value=\"resolved.borderRadius\"\n @coChange=\"patchTheme('borderRadius', detailValue($event))\"\n />\n </template>\n\n <template v-if=\"formSection === 'header'\">\n <CoSwitch\n label=\"Show header\"\n :checked=\"resolved.header.show\"\n @coChange=\"patchThemeSection('header', 'show', detailValue($event))\"\n />\n <CoInput\n label=\"Background color\"\n placeholder=\"#fff or rgb(...)\"\n :value=\"theme.header?.backgroundColor || ''\"\n @coInput=\"patchThemeSection('header', 'backgroundColor', detailValue($event) || null)\"\n />\n <CoInput\n label=\"Height\"\n placeholder=\"120px\"\n helper-text=\"Any CSS length. Leave empty for auto.\"\n :value=\"theme.header?.height || ''\"\n @coInput=\"patchThemeSection('header', 'height', detailValue($event) || null)\"\n />\n </template>\n\n <template v-if=\"formSection === 'background'\">\n <CoInput\n label=\"Background color\"\n placeholder=\"#F3F3F3\"\n :value=\"theme.background?.color || ''\"\n @coInput=\"patchThemeSection('background', 'color', detailValue($event) || null)\"\n />\n <CoInput\n label=\"Background image URL\"\n placeholder=\"https://…\"\n :value=\"theme.background?.imageUrl || ''\"\n @coInput=\"patchThemeSection('background', 'imageUrl', detailValue($event) || null)\"\n />\n <CoSelect\n label=\"Image size\"\n :options=\"JSON.stringify(SIZE_OPTIONS)\"\n :value=\"resolved.background.imageSize\"\n @coChange=\"patchThemeSection('background', 'imageSize', detailValue($event))\"\n />\n <CoSelect\n label=\"Image attachment\"\n :options=\"JSON.stringify(ATTACHMENT_OPTIONS)\"\n :value=\"resolved.background.imageAttachment\"\n @coChange=\"patchThemeSection('background', 'imageAttachment', detailValue($event))\"\n />\n <div class=\"row\">\n <div class=\"row__label\">Opacity ({{ resolved.background.opacity }}%)</div>\n <CoSlider\n :min=\"0\"\n :max=\"100\"\n :step=\"5\"\n :value=\"resolved.background.opacity\"\n show-value\n @coChange=\"patchThemeSection('background', 'opacity', detailValue($event))\"\n />\n </div>\n </template>\n\n <template v-if=\"formSection === 'appearance'\">\n <div class=\"row\">\n <div class=\"row__label\">Accent</div>\n <div class=\"accent\">\n <button\n v-for=\"chip in ACCENT_CHIPS\"\n :key=\"chip.id\"\n class=\"accent__chip\"\n :class=\"{ 'is-active': resolved.accent === chip.id }\"\n :style=\"{ '--accent': chip.hex }\"\n :title=\"chip.label\"\n @click=\"pickAccent(chip.id)\"\n >\n <span class=\"accent__chip-dot\" />\n <span>{{ chip.label }}</span>\n </button>\n </div>\n </div>\n <CoInput\n label=\"Custom accent (hex)\"\n placeholder=\"#2563EB\"\n helper-text=\"Sets accent to Custom and overrides the primary.\"\n :value=\"resolved.accent === 'custom' ? resolved.accentHex : ''\"\n @coChange=\"pickCustomAccent(detailValue($event) ?? '')\"\n />\n <CoInput\n label=\"Font family\"\n placeholder=\"Inter, system-ui, sans-serif\"\n helper-text=\"CSS font stack. Empty = Geist (Cobalt default).\"\n :value=\"theme.fontFamily || ''\"\n @coInput=\"patchTheme('fontFamily', detailValue($event) || undefined)\"\n />\n </template>\n\n <template v-if=\"formSection === 'advanced'\">\n <div class=\"row\">\n <div class=\"row__label\">Custom CSS</div>\n <textarea\n class=\"codebox\"\n spellcheck=\"false\"\n rows=\"14\"\n placeholder=\".co-form-wizard [data-co-field="email"] co-input { ... }\"\n :value=\"theme.customCss || ''\"\n @input=\"patchTheme('customCss', ($event.target as HTMLTextAreaElement).value || undefined)\"\n />\n <p class=\"props__hint\">\n Injected scoped to the form. Target fields via\n <code>[data-co-field=\"name\"]</code> or\n <code>[data-co-field-kind=\"select\"]</code>.\n <code>@import</code>, inline scripts and\n <code></style></code> are stripped.\n </p>\n </div>\n </template>\n </div>\n\n <footer class=\"props__foot\">\n <CoButton\n label=\"Reset theme\"\n variant=\"stroke\"\n size=\"s\"\n icon-left=\"arrow-counter-clockwise\"\n @click=\"schema.resetTheme\"\n />\n </footer>\n </template>\n\n <!-- ═══════════ PAGE SCOPE (hidden in quiz mode) ═══════════ -->\n <template v-else-if=\"kind === 'page' && !isQuiz\">\n <CoTabGroup\n class=\"props__tabs\"\n :value=\"pageSection\"\n @coTabChange=\"pageSection = (detailValue($event) as PageSection) || pageSection\"\n >\n <CoTab\n v-for=\"t in PAGE_TABS\"\n :key=\"t.id\"\n :label=\"t.label\"\n :value=\"t.id\"\n :icon-left=\"t.icon\"\n size=\"small\"\n />\n </CoTabGroup>\n\n <div class=\"props__body\">\n <template v-if=\"pageSection === 'general'\">\n <CoInput\n label=\"Name (id)\"\n :value=\"page.name\"\n helper-text=\"Used as the page key in the schema.\"\n @coInput=\"patchPage('name', detailValue($event))\"\n />\n <CoInput\n label=\"Title\"\n :value=\"page.title || ''\"\n helper-text=\"Also editable inline on the canvas.\"\n @coInput=\"patchPage('title', detailValue($event))\"\n />\n <CoSwitch\n label=\"Show title in form\"\n :checked=\"!page.hideTitle\"\n @coChange=\"patchPage('hideTitle', detailValue($event) ? undefined : true)\"\n />\n <CoInput\n label=\"Description\"\n multiline\n :value=\"page.description || ''\"\n @coInput=\"patchPage('description', detailValue($event))\"\n />\n <CoSwitch\n label=\"Show description in form\"\n :checked=\"!page.hideDescription\"\n @coChange=\"patchPage('hideDescription', detailValue($event) ? undefined : true)\"\n />\n </template>\n\n <template v-if=\"pageSection === 'logic'\">\n <CoInput\n label=\"visibleIf\"\n placeholder=\"{customerType} == 'premium'\"\n helper-text=\"Page hidden unless expression is truthy.\"\n :value=\"page.visibleIf || ''\"\n @coInput=\"patchPage('visibleIf', detailValue($event) || undefined)\"\n />\n </template>\n </div>\n </template>\n\n <!-- ═══════════ FIELD SCOPE ═══════════ -->\n <template v-else>\n <CoTabGroup\n class=\"props__tabs\"\n :value=\"fieldSection\"\n @coTabChange=\"fieldSection = (detailValue($event) as FieldSection) || fieldSection\"\n >\n <CoTab\n v-for=\"t in (isQuiz ? FIELD_TABS.filter(t => t.id === 'layout') : FIELD_TABS)\"\n :key=\"t.id\"\n :label=\"t.label\"\n :value=\"t.id\"\n :icon-left=\"t.icon\"\n size=\"small\"\n />\n </CoTabGroup>\n\n <div class=\"props__body\">\n <template v-if=\"fieldSection === 'layout'\">\n <CoCheckbox\n v-if=\"!isQuiz\"\n label=\"Full width (span all columns)\"\n :checked=\"!!field.full\"\n @coChange=\"patchField('full', detailValue($event))\"\n />\n <CoCheckbox\n v-if=\"!isQuiz\"\n label=\"Hidden\"\n :checked=\"!!field.hidden\"\n @coChange=\"patchField('hidden', detailValue($event))\"\n />\n <CoCheckbox\n v-if=\"!isQuiz\"\n label=\"Disabled\"\n :checked=\"!!field.disabled || !!field.readOnly\"\n @coChange=\"patchField('disabled', detailValue($event) || undefined)\"\n />\n <CoSelect\n v-if=\"!isQuiz && field.type === 'String'\"\n label=\"Format\"\n :options=\"JSON.stringify(FORMAT_OPTIONS)\"\n :value=\"field.format || ''\"\n @coChange=\"patchField('format', detailValue($event) || undefined)\"\n />\n\n <!-- Slot for host-app custom content below layout controls -->\n <slot name=\"field-layout-extra\" :field=\"field\" :field-name=\"fieldName\" :patch-field=\"patchField\" />\n </template>\n\n <template v-if=\"fieldSection === 'logic'\">\n <CoInput\n label=\"visibleIf\"\n placeholder=\"{type} == 'premium'\"\n :value=\"field.visibleIf || ''\"\n @coInput=\"patchField('visibleIf', detailValue($event) || undefined)\"\n />\n <CoInput\n label=\"enableIf\"\n placeholder=\"{accepted} == true\"\n :value=\"field.enableIf || ''\"\n @coInput=\"patchField('enableIf', detailValue($event) || undefined)\"\n />\n <CoInput\n label=\"requiredIf\"\n placeholder=\"{country} == 'US'\"\n :value=\"field.requiredIf || ''\"\n @coInput=\"patchField('requiredIf', detailValue($event) || undefined)\"\n />\n <p class=\"props__hint\">\n Operators: <code>== != > < >= <= contains && ||</code>\n </p>\n </template>\n\n <template v-if=\"fieldSection === 'validation'\">\n <CoCheckbox\n label=\"Required\"\n :checked=\"!!field.required\"\n @coChange=\"patchField('required', detailValue($event))\"\n />\n <CoInput\n v-if=\"field.type === 'String'\"\n label=\"Min length\"\n type=\"number\"\n :value=\"field.minLength ?? ''\"\n @coInput=\"patchField('minLength', toNumOrUndef(detailValue($event)))\"\n />\n <CoInput\n v-if=\"field.type === 'String'\"\n label=\"Max length\"\n type=\"number\"\n :value=\"field.maxLength ?? ''\"\n @coInput=\"patchField('maxLength', toNumOrUndef(detailValue($event)))\"\n />\n <CoInput\n v-if=\"field.type === 'Number'\"\n label=\"Min\"\n type=\"number\"\n :value=\"field.min ?? ''\"\n @coInput=\"patchField('min', toNumOrUndef(detailValue($event)))\"\n />\n <CoInput\n v-if=\"field.type === 'Number'\"\n label=\"Max\"\n type=\"number\"\n :value=\"field.max ?? ''\"\n @coInput=\"patchField('max', toNumOrUndef(detailValue($event)))\"\n />\n </template>\n </div>\n </template>\n </div>\n</template>\n\n<style scoped>\n.props {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.props__head {\n padding: var(--co-spacing-lg, 16px) var(--co-spacing-xl, 20px);\n border-bottom: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n}\n\n.props__title {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n.props__subtitle {\n font-family: ui-monospace, Menlo, monospace;\n font-size: var(--co-font-size-14, 14px);\n color: var(--co-semantic-text-default, #111827);\n margin-top: 4px;\n word-break: break-all;\n font-weight: 500;\n}\n\n.props__tabs {\n border-bottom: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n padding: 0 var(--co-spacing-sm, 8px);\n /* Horizontal scroll when tab labels overflow (the FORM scope has 5\n * tabs; even at 360px sidebar width some labels get clipped). */\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: thin;\n}\n\n.props__tabs::-webkit-scrollbar {\n height: 4px;\n}\n\n.props__tabs::-webkit-scrollbar-thumb {\n background: var(--fb-border-strong);\n border-radius: 2px;\n}\n\n.props__tabs::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.props__body {\n flex: 1;\n /* `min-height: 0` is required for a flex column child to be allowed\n * to shrink below its content size and let `overflow-y: auto` actually\n * scroll instead of pushing the parent past its viewport height. */\n min-height: 0;\n overflow-y: auto;\n padding: var(--co-spacing-xl, 20px);\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-md, 14px);\n}\n\n.props__foot {\n padding: var(--co-spacing-md, 12px) var(--co-spacing-lg, 16px);\n border-top: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n}\n\n.props__hint {\n margin: 0;\n font-size: var(--co-font-size-11, 11px);\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n.props__hint code {\n font-family: ui-monospace, Menlo, monospace;\n background: var(--co-semantic-surface-hover, #f3f4f6);\n padding: 1px 4px;\n border-radius: 3px;\n}\n\n.row {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xs, 6px);\n}\n\n.row__label {\n font-size: var(--co-font-size-11, 11px);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.seg {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 2px;\n padding: 2px;\n background: var(--fb-bg);\n border-radius: var(--co-border-radius-xs, 8px);\n border: 1px solid var(--fb-border);\n}\n\n.seg__btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 6px 10px;\n border: 0;\n background: transparent;\n border-radius: var(--co-border-radius-xxs, 6px);\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-secondary, #6b7280);\n transition: all 120ms;\n}\n\n.seg__btn:hover { color: var(--co-semantic-text-default, #111827); }\n\n.seg__btn.is-active {\n background: var(--fb-panel);\n color: var(--co-color-primary-azul, #2563eb);\n font-weight: 600;\n box-shadow: var(--fb-shadow-sm);\n}\n\n.accent {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 6px;\n}\n\n.accent__chip {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border: 1px solid var(--fb-border);\n background: var(--fb-panel);\n border-radius: var(--co-border-radius-xs, 8px);\n font-size: var(--co-font-size-12, 12px);\n color: var(--co-semantic-text-default, #111827);\n text-align: left;\n transition: all 120ms;\n}\n\n.accent__chip:hover { border-color: var(--fb-border-strong); }\n\n.accent__chip.is-active {\n border-color: var(--accent);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 18%, transparent);\n}\n\n.accent__chip-dot {\n display: inline-block;\n width: 14px;\n height: 14px;\n border-radius: var(--co-border-radius-full, 9999px);\n background: var(--accent);\n}\n\n.codebox {\n font-family: ui-monospace, Menlo, monospace;\n font-size: var(--co-font-size-12, 12px);\n line-height: 1.55;\n padding: var(--co-spacing-sm, 10px) var(--co-spacing-md, 12px);\n border: 1px solid var(--co-semantic-border-default, var(--fb-border));\n border-radius: var(--co-border-radius-xs, 8px);\n background: var(--fb-panel-soft);\n color: var(--co-semantic-text-default, #111827);\n resize: vertical;\n outline: none;\n width: 100%;\n min-height: 220px;\n}\n\n.codebox:focus {\n border-color: var(--co-color-primary-azul, #2563eb);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport FieldToolbox from './FieldToolbox.vue';\nimport FieldCanvas from './FieldCanvas.vue';\nimport PropertiesPanel from './PropertiesPanel.vue';\nimport { useSchemaStore } from '../stores/schema';\n\nconst schema = useSchemaStore();\nconst leftOpen = ref(true);\nconst isQuiz = computed(() => schema.data.mode === 'quiz');\n</script>\n\n<template>\n <div class=\"designer\" :class=\"{ 'designer--left-collapsed': !leftOpen, 'designer--no-right': isQuiz }\">\n <aside class=\"designer__panel designer__panel--left\">\n <FieldToolbox />\n </aside>\n\n <section class=\"designer__canvas\">\n <button\n class=\"designer__toggle-left\"\n :title=\"leftOpen ? 'Hide toolbox' : 'Show toolbox'\"\n @click=\"leftOpen = !leftOpen\"\n >\n <co-icon :name=\"leftOpen ? 'caret-left' : 'list'\" :size=\"16\" />\n </button>\n <div class=\"designer__canvas-scroll\">\n <FieldCanvas />\n </div>\n </section>\n\n <aside v-if=\"!isQuiz\" class=\"designer__panel designer__panel--right\">\n <PropertiesPanel>\n <template #field-layout-extra=\"slotProps\">\n <slot name=\"field-layout-extra\" v-bind=\"slotProps\" />\n </template>\n </PropertiesPanel>\n </aside>\n </div>\n</template>\n\n<style scoped>\n.designer {\n display: grid;\n grid-template-columns: var(--fb-sidebar-left) 1fr var(--fb-sidebar-right);\n height: 100%;\n min-width: 0;\n}\n\n/* Explicit grid placement so items never shift */\n.designer__panel--left { grid-column: 1; }\n.designer__canvas { grid-column: 2; }\n.designer__panel--right { grid-column: 3; }\n\n.designer--left-collapsed {\n grid-template-columns: 0px 1fr var(--fb-sidebar-right);\n}\n\n.designer--no-right {\n grid-template-columns: var(--fb-sidebar-left) 1fr;\n}\n\n.designer--left-collapsed.designer--no-right {\n grid-template-columns: 0px 1fr;\n}\n\n.designer__panel {\n background: var(--fb-panel);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.designer__panel--left {\n border-right: 1px solid var(--fb-border);\n transition: opacity 150ms, max-width 150ms;\n}\n\n.designer--left-collapsed .designer__panel--left {\n opacity: 0;\n pointer-events: none;\n}\n\n.designer__panel--right {\n border-left: 1px solid var(--fb-border);\n min-width: 0;\n}\n\n.designer__canvas {\n position: relative;\n overflow: hidden;\n background: var(--fb-bg);\n min-width: 0;\n}\n\n.designer__canvas-scroll {\n height: 100%;\n overflow-y: auto;\n}\n\n.designer__toggle-left {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 8px;\n border: 1px solid var(--fb-border-strong);\n background: var(--fb-panel);\n color: var(--co-semantic-text-secondary, #6b7280);\n cursor: pointer;\n box-shadow: var(--fb-shadow-sm);\n transition: background 120ms, color 120ms;\n}\n\n.designer__toggle-left:hover {\n background: var(--fb-bg);\n color: var(--co-semantic-text-default, #111827);\n}\n\n/* ── Container-query responsive adjustments ─────────────────────────── */\n\n@container fb-shell (max-width: 900px) {\n .designer {\n --fb-sidebar-left: 200px;\n --fb-sidebar-right: 280px;\n }\n}\n\n@container fb-shell (max-width: 700px) {\n .designer {\n --fb-sidebar-left: 160px;\n --fb-sidebar-right: 240px;\n }\n}\n\n@container fb-shell (max-width: 550px) {\n .designer {\n --fb-sidebar-left: 120px;\n --fb-sidebar-right: 200px;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { CoButton } from '@prolibu-suite/cobalt-vue';\nimport { useSchemaStore } from '../stores/schema';\n\nconst schema = useSchemaStore();\n\nconst draft = ref('');\nconst error = ref<string | null>(null);\n\nconst serialized = computed(() => JSON.stringify(schema.exported, null, 2));\n\nwatch(serialized, (v) => (draft.value = v), { immediate: true });\n\nfunction apply(): void {\n try {\n const parsed = JSON.parse(draft.value);\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('Schema must be a JSON object');\n }\n schema.replaceAll(parsed);\n error.value = null;\n } catch (err) {\n error.value = (err as Error).message;\n }\n}\n\nfunction reset(): void {\n draft.value = serialized.value;\n error.value = null;\n}\n</script>\n\n<template>\n <div class=\"json-tab\">\n <div class=\"json-tab__bar\">\n <CoButton label=\"Apply\" variant=\"primary\" size=\"s\" @click=\"apply\" />\n <CoButton label=\"Discard\" variant=\"stroke\" size=\"s\" @click=\"reset\" />\n <span v-if=\"error\" class=\"json-tab__err\">{{ error }}</span>\n <span class=\"json-tab__hint\">\n Plain editor — Monaco integration is a follow-up.\n </span>\n </div>\n <textarea v-model=\"draft\" class=\"json-tab__area\" spellcheck=\"false\" />\n </div>\n</template>\n\n<style scoped>\n.json-tab {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: var(--co-spacing-lg, 16px);\n gap: var(--co-spacing-md, 12px);\n}\n\n.json-tab__bar {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n}\n\n.json-tab__err {\n color: var(--co-color-status-error, #aa2e1b);\n font-size: var(--co-font-size-12, 12px);\n}\n\n.json-tab__hint {\n margin-left: auto;\n color: var(--co-semantic-text-secondary, #6b7280);\n font-size: var(--co-font-size-12, 12px);\n}\n\n.json-tab__area {\n flex: 1;\n font-family: ui-monospace, Menlo, monospace;\n font-size: var(--co-font-size-13, 13px);\n padding: var(--co-spacing-md, 12px);\n border: 1px solid var(--co-semantic-border-default, #e5e7eb);\n border-radius: var(--co-border-radius-xs, 8px);\n background: var(--co-semantic-surface-page, #fff);\n resize: none;\n outline: none;\n color: var(--co-semantic-text-default, #111827);\n}\n\n.json-tab__area:focus {\n border-color: var(--co-color-primary-azul, #2563eb);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { isPagedSchema } from '@prolibu-suite/cobalt-form-core';\nimport { useSchemaStore } from '../stores/schema';\n\nconst schema = useSchemaStore();\n\n/**\n * Route to the right renderer:\n * - paged schema (has `pages` array) → `<co-form-wizard>` which knows how\n * to render title / description / stepper / pages.\n * - flat schema → `<co-form>` (simple single-page).\n *\n * `isMultiPage` (pages > 1) is NOT the right check because a single-page\n * schema that carries a `theme` block is still paged on export — and\n * `<co-form>` would mistreat the top-level `pages`/`theme` keys as fields.\n */\nconst exported = computed(() => schema.exported);\nconst isPaged = computed(() => isPagedSchema(exported.value));\nconst schemaJson = computed(() => JSON.stringify(exported.value));\nconst themeJson = computed(() => {\n const out = Object.keys(schema.data.theme).length > 0\n ? JSON.stringify(schema.data.theme)\n : undefined;\n console.log('[PreviewTab] themeJson →', out, 'rawTheme:', schema.data.theme, 'isPaged:', isPaged.value);\n return out;\n});\n\nconst lastSubmit = ref<Record<string, any> | null>(null);\n\nfunction onSubmit(ev: Event): void {\n const detail = (ev as CustomEvent).detail;\n lastSubmit.value = detail?.values ?? null;\n}\n</script>\n\n<template>\n <div class=\"preview\">\n <div class=\"preview__pane preview__pane--form\">\n <!-- No external title block: the wizard renders title + description\n inside its themed scope (so the bg/colors wrap the title too). -->\n <co-form-wizard\n v-if=\"isPaged\"\n :key=\"schemaJson + (themeJson ?? '')\"\n :schema=\"schemaJson\"\n :theme=\"themeJson\"\n layout=\"grid\"\n columns=\"1\"\n :validate-on=\"schema.data.mode === 'quiz' ? 'submit' : 'change'\"\n @coSubmit=\"onSubmit\"\n />\n <co-form\n v-else\n :key=\"schemaJson + (themeJson ?? '')\"\n :schema=\"schemaJson\"\n :theme=\"themeJson\"\n layout=\"grid\"\n columns=\"2\"\n :validate-on=\"schema.data.mode === 'quiz' ? 'submit' : 'change'\"\n @coSubmit=\"onSubmit\"\n />\n </div>\n\n <aside class=\"preview__pane preview__pane--side\">\n <div class=\"preview__pane-head\">\n <h3 class=\"preview__title\">Last submit</h3>\n <p class=\"preview__desc\">Fill the form and press Submit to see the payload.</p>\n </div>\n <pre v-if=\"lastSubmit\" class=\"preview__json\">{{ JSON.stringify(lastSubmit, null, 2) }}</pre>\n <div v-else class=\"preview__empty\">No submissions yet.</div>\n </aside>\n </div>\n</template>\n\n<style scoped>\n.preview {\n display: grid;\n grid-template-columns: 1fr 360px;\n gap: var(--co-spacing-lg, 16px);\n padding: var(--co-spacing-lg, 16px);\n height: 100%;\n overflow: hidden;\n}\n\n.preview__pane {\n background: var(--co-semantic-surface-page, #fff);\n border: 1px solid var(--co-semantic-border-default, #e5e7eb);\n border-radius: var(--co-border-radius-sm, 12px);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n/* The form pane is a transparent surface — the wizard/co-form inside paints\n * its own background (via the theme). Keeping the pane edge-less avoids the\n * \"white frame around a themed form\" look. */\n.preview__pane--form {\n background: transparent;\n border: 0;\n padding: 0;\n}\n\n.preview__pane-head {\n padding: var(--co-spacing-lg, 16px) var(--co-spacing-xl, 20px);\n border-bottom: 1px solid var(--co-semantic-border-default, #e5e7eb);\n}\n\n.preview__pane--side > :not(.preview__pane-head) {\n padding: var(--co-spacing-md, 12px) var(--co-spacing-lg, 16px);\n}\n\n.preview__title {\n margin: 0;\n font-size: var(--co-font-size-14, 14px);\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n}\n\n.preview__desc {\n margin: 4px 0 0;\n font-size: var(--co-font-size-12, 12px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.preview__json {\n margin: var(--co-spacing-md, 12px) var(--co-spacing-lg, 16px);\n background: #0b1020;\n color: #e2e8f0;\n padding: var(--co-spacing-md, 12px);\n border-radius: var(--co-border-radius-xs, 8px);\n font-size: var(--co-font-size-12, 12px);\n overflow: auto;\n max-height: 100%;\n}\n\n.preview__empty {\n margin: var(--co-spacing-md, 12px) var(--co-spacing-lg, 16px);\n padding: var(--co-spacing-2xl, 24px);\n text-align: center;\n border: 1px dashed var(--co-semantic-border-default, #e5e7eb);\n border-radius: var(--co-border-radius-xs, 8px);\n color: var(--co-semantic-text-secondary, #6b7280);\n font-size: var(--co-font-size-12, 12px);\n}\n\n/* ── Container-query responsive adjustments ─────────────────────────── */\n\n@container fb-shell (max-width: 900px) {\n .preview {\n grid-template-columns: 1fr 280px;\n }\n}\n\n@container fb-shell (max-width: 700px) {\n .preview {\n grid-template-columns: 1fr;\n grid-template-rows: 1fr auto;\n overflow-y: auto;\n }\n\n .preview__pane--side {\n max-height: 300px;\n }\n}\n\n@container fb-shell (max-width: 450px) {\n .preview {\n padding: var(--co-spacing-sm, 8px);\n gap: var(--co-spacing-sm, 8px);\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, provide, ref, watch } from 'vue';\nimport { CoIconButton } from '@prolibu-suite/cobalt-vue';\nimport { defineCustomElements as defineCobaltCore } from '@prolibu-suite/cobalt-core/loader';\nimport { defineCustomElements as defineCobaltForm } from '@prolibu-suite/cobalt-form/loader';\nimport {\n SCHEMA_STORE_KEY,\n createSchemaStore,\n type SchemaEvent,\n} from './stores/schema';\nimport DesignerTab from './components/DesignerTab.vue';\nimport JsonTab from './components/JsonTab.vue';\nimport PreviewTab from './components/PreviewTab.vue';\n\n/**\n * Reusable Vue 3 component for the Cobalt Form Builder.\n *\n * Each instance creates its own scoped store via `createSchemaStore()`\n * and provides it via `SCHEMA_STORE_KEY`. Multiple builders on the same\n * page therefore stay isolated.\n *\n * Slots let host apps replace the chrome around the editor:\n * - `brand` — left side of the topbar (default: \"CF\" mark + title)\n * - `actions` — right side of the topbar (default: undo/redo buttons)\n * - `before` — content above the topbar (custom banner / breadcrumb)\n * - `after` — content below the editor (custom footer / save bar)\n * - `[custom]` — any custom tab slot. Pass `{ id, label }` objects in the\n * `tabs` prop and provide a matching `#<id>` slot.\n * Each custom slot receives `{ store }` as slot props.\n *\n * Granular `SchemaEvent`s are re-emitted as Vue events the host can\n * listen for analytics, autosave, etc.\n */\n\ntype BuiltinTabId = 'designer' | 'preview' | 'json';\n\nexport interface CustomTab {\n id: string;\n label: string;\n}\n\ntype TabEntry = BuiltinTabId | CustomTab;\n\nconst props = withDefaults(\n defineProps<{\n /** The schema being edited (paged shape preferred — `{title,pages,theme}`). */\n modelValue?: Record<string, any>;\n /** Which top-level tabs to expose. Strings for built-in tabs, objects for custom ones. */\n tabs?: TabEntry[];\n /** Hide the builder's brand mark (when the host has its own chrome). */\n hideBrand?: boolean;\n /** Brand label text (defaults to \"Cobalt Form Builder\"). */\n brandLabel?: string;\n /** Skip auto-registering Cobalt custom elements (host already did it). */\n skipCobaltRegister?: boolean;\n /**\n * Force the schema mode. When set, the store's `data.mode` is synced\n * to this value on mount and whenever it changes. This drives quiz-mode\n * behavior (filtered toolbox, answer-key panel, etc.).\n */\n mode?: 'form' | 'quiz' | 'survey';\n /** Show error state on the title field (e.g. after failed validation). */\n titleError?: boolean;\n }>(),\n {\n modelValue: () => ({}),\n tabs: () => ['designer', 'preview', 'json'],\n hideBrand: false,\n brandLabel: 'Cobalt Form Builder',\n skipCobaltRegister: false,\n mode: undefined,\n titleError: false,\n },\n);\n\nconst emit = defineEmits<{\n // v-model\n 'update:modelValue': [value: Record<string, any>];\n // Granular events — fired by the store on every mutation. The shape\n // matches `SchemaEvent`. Each is also re-emitted with its specific name\n // so the host can use either `@event` or `@field-added` etc.\n event: [payload: SchemaEvent];\n 'field-added': [payload: Extract<SchemaEvent, { type: 'field-added' }>];\n 'field-removed': [payload: Extract<SchemaEvent, { type: 'field-removed' }>];\n 'field-renamed': [payload: Extract<SchemaEvent, { type: 'field-renamed' }>];\n 'field-updated': [payload: Extract<SchemaEvent, { type: 'field-updated' }>];\n 'field-duplicated': [payload: Extract<SchemaEvent, { type: 'field-duplicated' }>];\n 'field-reordered': [payload: Extract<SchemaEvent, { type: 'field-reordered' }>];\n 'page-added': [payload: Extract<SchemaEvent, { type: 'page-added' }>];\n 'page-removed': [payload: Extract<SchemaEvent, { type: 'page-removed' }>];\n 'page-duplicated': [payload: Extract<SchemaEvent, { type: 'page-duplicated' }>];\n 'page-updated': [payload: Extract<SchemaEvent, { type: 'page-updated' }>];\n 'theme-changed': [payload: Extract<SchemaEvent, { type: 'theme-changed' }>];\n 'selection-changed': [payload: Extract<SchemaEvent, { type: 'selection-changed' }>];\n 'schema-replaced': [payload: Extract<SchemaEvent, { type: 'schema-replaced' }>];\n undo: [payload: Extract<SchemaEvent, { type: 'undo' }>];\n redo: [payload: Extract<SchemaEvent, { type: 'redo' }>];\n}>();\n\ndefineSlots<{\n brand?: () => any;\n actions?: (props: { store: ReturnType<typeof createSchemaStore> }) => any;\n before?: () => any;\n after?: (props: { store: ReturnType<typeof createSchemaStore> }) => any;\n 'field-layout-extra'?: (props: { field: Record<string, any>; fieldName: string; patchField: (key: string, value: any) => void }) => any;\n [key: string]: ((props: { store: ReturnType<typeof createSchemaStore> }) => any) | ((props: any) => any) | undefined;\n}>();\n\nconst BUILTIN_LABELS: Record<string, string> = {\n designer: 'Designer',\n preview: 'Preview',\n json: 'JSON Editor',\n};\n\nconst BUILTIN_IDS = new Set<string>(Object.keys(BUILTIN_LABELS));\n\nfunction normalizeTab(entry: TabEntry): { id: string; label: string } {\n if (typeof entry === 'string') {\n return { id: entry, label: BUILTIN_LABELS[entry] ?? entry };\n }\n return { id: entry.id, label: entry.label };\n}\n\nconst visibleTabs = computed(() => props.tabs.map(normalizeTab));\n\nconst customTabIds = computed(() =>\n visibleTabs.value.filter((t) => !BUILTIN_IDS.has(t.id)).map((t) => t.id),\n);\n\nconst firstTabId = computed(() => {\n const first = props.tabs[0];\n return typeof first === 'string' ? first : first?.id ?? 'designer';\n});\n\nconst active = ref<string>(firstTabId.value);\n\n// ── Per-instance store ───────────────────────────────────────────────────\n\nlet suppressModelEmit = false;\n\nconst store = createSchemaStore({\n initialSchema: props.modelValue,\n onEvent: (event) => {\n // Generic \"event\" fires for everything (good for logging) plus a\n // type-specific event so consumers can listen narrowly.\n emit('event', event);\n // @ts-expect-error — emit name comes from the event's type literally;\n // the union typing above already enforces payload shape per name.\n emit(event.type, event);\n },\n});\n\nprovide(SCHEMA_STORE_KEY, store);\n\nconst titleError = computed(() => props.titleError);\nprovide('titleError', titleError);\n\n// ── v-model bridging ─────────────────────────────────────────────────────\n\nwatch(\n () => store.exported,\n (next) => {\n if (suppressModelEmit) return;\n emit('update:modelValue', next as Record<string, any>);\n },\n { deep: true },\n);\n\nwatch(\n () => props.modelValue,\n (next) => {\n if (!next) return;\n const incoming = JSON.stringify(next);\n const current = JSON.stringify(store.exported);\n if (incoming === current) return;\n suppressModelEmit = true;\n store.replaceAll(next);\n suppressModelEmit = false;\n },\n { deep: true },\n);\n\n// ── Lifecycle ────────────────────────────────────────────────────────────\n\nonMounted(() => {\n if (!props.skipCobaltRegister) {\n defineCobaltCore();\n defineCobaltForm();\n }\n // Sync the mode prop to the store (if provided).\n if (props.mode) {\n store.setMode(props.mode);\n }\n window.addEventListener('keydown', onKey);\n});\n\n// Keep store mode in sync when the prop changes at runtime.\nwatch(\n () => props.mode,\n (next) => {\n if (next) store.setMode(next);\n },\n);\n\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', onKey);\n});\n\n// ── Keyboard shortcuts ──────────────────────────────────────────────────\n\nfunction onKey(ev: KeyboardEvent): void {\n // Esc collapses inline editor (skip when focus is in an editable element).\n if (ev.key === 'Escape') {\n const target = ev.target as HTMLElement | null;\n const editable =\n target?.isContentEditable ||\n target?.tagName === 'INPUT' ||\n target?.tagName === 'TEXTAREA' ||\n target?.tagName === 'SELECT';\n if (editable) {\n (target as HTMLElement).blur();\n return;\n }\n if (store.selection.fieldName !== null) {\n store.selectPage(store.selection.pageIdx);\n }\n return;\n }\n\n const isMod = ev.metaKey || ev.ctrlKey;\n if (!isMod) return;\n if (ev.key === 'z' && !ev.shiftKey) {\n ev.preventDefault();\n store.undo();\n } else if ((ev.key === 'z' && ev.shiftKey) || ev.key === 'y') {\n ev.preventDefault();\n store.redo();\n }\n}\n</script>\n\n<template>\n <div class=\"shell\">\n <slot name=\"before\" />\n\n <header class=\"shell__topbar\">\n <slot name=\"brand\">\n <div v-if=\"!hideBrand\" class=\"shell__brand\">\n <div class=\"shell__brand-mark\">CF</div>\n <h1 class=\"shell__brand-title\">{{ brandLabel }}</h1>\n </div>\n </slot>\n\n <nav class=\"shell__tabs\">\n <button\n v-for=\"t in visibleTabs\"\n :key=\"t.id\"\n class=\"shell__tab\"\n :class=\"{ 'is-active': active === t.id }\"\n @click=\"active = t.id\"\n >\n {{ t.label }}\n </button>\n </nav>\n\n <div class=\"shell__actions\">\n <slot name=\"actions\" :store=\"store\">\n <CoIconButton\n icon=\"arrow-counter-clockwise\"\n variant=\"outlined\"\n size=\"sm\"\n label=\"Undo (⌘Z)\"\n :disabled=\"!store.canUndo\"\n @click=\"store.undo()\"\n />\n <CoIconButton\n icon=\"arrow-clockwise\"\n variant=\"outlined\"\n size=\"sm\"\n label=\"Redo (⌘⇧Z)\"\n :disabled=\"!store.canRedo\"\n @click=\"store.redo()\"\n />\n </slot>\n </div>\n </header>\n\n <main class=\"shell__content\">\n <DesignerTab v-show=\"active === 'designer'\">\n <template #field-layout-extra=\"slotProps\">\n <slot name=\"field-layout-extra\" v-bind=\"slotProps\" />\n </template>\n </DesignerTab>\n <PreviewTab v-if=\"active === 'preview'\" />\n <JsonTab v-if=\"active === 'json'\" />\n <div\n v-for=\"cid in customTabIds\"\n v-show=\"active === cid\"\n :key=\"cid\"\n class=\"shell__custom-tab\"\n >\n <slot :name=\"cid\" :store=\"store\" />\n </div>\n </main>\n\n <slot name=\"after\" :store=\"store\" />\n </div>\n</template>\n\n<style scoped>\n.shell {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n container-type: inline-size;\n container-name: fb-shell;\n}\n\n.shell__topbar {\n display: flex;\n align-items: center;\n height: var(--fb-topbar-height);\n padding: 0 var(--co-spacing-2xl, 24px);\n background: var(--fb-panel);\n border-bottom: 1px solid var(--fb-border);\n gap: var(--co-spacing-2xl, 24px);\n flex-shrink: 0;\n}\n\n.shell__brand {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-md, 12px);\n padding-right: var(--co-spacing-lg, 16px);\n border-right: 1px solid var(--fb-border);\n height: 36px;\n}\n\n.shell__brand-mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: var(--co-border-radius-xs, 8px);\n background: var(--co-color-primary-azul, #2563eb);\n color: white;\n font-weight: 700;\n font-size: 13px;\n letter-spacing: 0.02em;\n box-shadow: 0 1px 2px color-mix(in srgb, var(--co-color-primary-azul) 25%, transparent);\n}\n\n.shell__brand-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n letter-spacing: -0.01em;\n}\n\n.shell__tabs {\n display: flex;\n align-items: center;\n height: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none; /* Firefox */\n -ms-overflow-style: none; /* IE/Edge */\n min-width: 0;\n}\n\n.shell__tabs::-webkit-scrollbar {\n display: none; /* Chrome / Safari */\n}\n\n.shell__tab {\n padding: 0 var(--co-spacing-lg, 16px);\n height: 100%;\n border: 0;\n background: transparent;\n font-size: var(--co-font-size-14, 14px);\n color: var(--co-semantic-text-secondary, #6b7280);\n border-bottom: 2px solid transparent;\n font-weight: 500;\n transition: color 120ms;\n cursor: pointer;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.shell__tab:hover { color: var(--co-semantic-text-default, #111827); }\n\n.shell__tab.is-active {\n color: var(--co-color-primary-azul, #2563eb);\n border-bottom-color: var(--co-color-primary-azul, #2563eb);\n font-weight: 600;\n}\n\n.shell__actions {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--co-spacing-xs, 6px);\n}\n\n.shell__content {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n background: var(--fb-bg);\n}\n\n.shell__custom-tab {\n height: 100%;\n overflow-y: auto;\n}\n\n/* ── Container-query responsive adjustments ─────────────────────────── */\n\n@container fb-shell (max-width: 700px) {\n .shell__topbar {\n --fb-topbar-height: 48px;\n padding: 0 var(--co-spacing-md, 12px);\n gap: var(--co-spacing-md, 12px);\n }\n\n .shell__brand {\n display: none;\n }\n\n .shell__tab {\n padding: 0 var(--co-spacing-sm, 10px);\n font-size: var(--co-font-size-13, 13px);\n }\n}\n\n@container fb-shell (max-width: 450px) {\n .shell__tab {\n padding: 0 var(--co-spacing-xs, 6px);\n font-size: var(--co-font-size-12, 12px);\n }\n\n .shell__actions {\n gap: 2px;\n }\n}\n</style>\n"],"names":["HISTORY_LIMIT","blankSchema","FIELD_DEFAULTS","titleize","s","c","deepClone","v","createSchemaStore","options","emit","data","ref","selection","past","future","canUndo","computed","canRedo","currentPage","selectedField","page","name","setSelection","next","selectField","pageIdx","fieldName","selectPage","selectForm","snapshot","undo","prev","clampSelection","redo","pi","fn","kind","setTitle","title","setDescription","description","setMode","mode","addPage","num","newIdx","removePage","idx","duplicatePage","src","copy","uniquePageName","updatePage","patch","base","existing","p","i","uniqueFieldName","n","applyModeOverrides","def","addField","factory","insertFieldAfter","refName","entries","refIdx","newEntry","removeField","duplicateField","newName","k","updateField","replaceFieldDef","newDef","renameField","oldName","moveField","fromIdx","toIdx","names","moved","reorderFieldsByNames","resolvedTheme","resolveTheme","setTheme","setThemeSection","section","current","resetTheme","replaceAll","raw","isPagedSchema","paged","toPagedSchema","exported","hasTheme","reactive","SCHEMA_STORE_KEY","useSchemaStore","store","inject","FIELD_CATALOG","GROUP_LABELS","schema","query","groups","q","isQuiz","f","filtered","a","byGroup","item","onDragStart","ev","onSelect","detailValue","d","_openBlock","_createElementBlock","_hoisted_1","_unref","_cache","$event","_createElementVNode","_hoisted_2","_createVNode","CoInput","_hoisted_3","_hoisted_4","_toDisplayString","_Fragment","_renderList","g","_hoisted_5","_hoisted_6","CoListItem","props","__props","__emit","el","focused","hasContent","watch","onInput","commit","onBlur","onFocus","onKeydown","_normalizeClass","an","Pe","yt","wt","bt","t","e","fe","$e","o","Ht","mn","vn","St","bn","yn","Dt","_t","wn","En","Tt","Ke","Sn","Dn","_n","Tn","Ct","Cn","On","Ot","r","ne","In","Ye","ie","An","xn","Nn","re","ae","xe","It","Te","Lt","Wt","Gt","S","E","We","Pn","Q","At","V","h","ye","jt","te","P","l","u","m","y","b","w","xt","ce","we","ht","J","Nt","Mn","Fn","Je","Ce","zt","Rn","Ut","Vt","$t","Xn","Bn","Yn","ge","Ze","Ne","kn","L","G","R","j","Hn","z","O","T","pe","Be","C","ue","Se","Y","be","Oe","$","se","Zt","Qt","W","Me","ve","Ge","je","de","Z","Qe","et","Pt","Mt","me","Ie","Ae","Fe","ke","H","tt","lt","ze","Ve","Re","Ft","Ln","qt","Kt","Wn","Gn","Jt","he","jn","Zn","nt","He","ee","Ee","vt","rn","Xe","B","$n","Vn","X","K","oe","le","D","A","qn","I","_","x","M","F","Un","st","zn","Jn","Kn","N","De","ut","ct","ot","rt","Ue","_e","Qn","Rt","Le","it","en","pt","gt","eo","to","dt","sn","no","un","kt","tn","nn","Xt","oo","Yt","on","U","qe","mt","ln","ft","ro","lo","cn","Et","dn","hn","pn","catalogEntry","TYPE_OPTIONS","key","value","onRename","err","collapse","duplicate","remove","PRESERVED_KEYS","changeType","newKind","baseDefaults","preserved","updateOption","removeOption","addOption","imgInputRefs","setImgInputRef","triggerImgInput","optionImages","setOptionImage","dataUrl","removeOptionImage","onImageFileSelected","input","file","img","objectUrl","width","height","ratio","canvas","ctx","addImageOption","imgs","removeImageOption","draggingOptionIdx","optionDropTarget","onOptionDragStart","onOptionDragOver","onOptionDragLeave","onOptionDrop","from","target","onOptionDragEnd","hasOther","toggleOther","insertOpen","INSERT_OPTIONS","ids","insertAfter","insertSection","previewInputType","toNumOrUndef","sliderMin","sliderMax","sliderStep","sliderPreviewValue","ratingMax","answerKeyOpen","correctOptions","fieldPoints","fieldExplanation","fieldSampleAnswer","fieldCorrectValue","hasAnswerKey","answerKeyLabel","label","toggleCorrectOption","pos","isMulti","setPoints","setExplanation","setSampleAnswer","setCorrectValue","closeAnswerKey","displayTypeLabel","booleanOptions","orderingItems","updateOrderingItem","removeOrderingItem","addOrderingItem","correctOrder","correctOrderLabels","origIdx","orderingDragIdx","orderingDropIdx","onOrderingDrop","arr","insertAt","matchLeft","matchRight","updateMatchLeft","updateMatchRight","addMatchPair","correctPairs","setCorrectPair","leftIdx","rightIdx","pairs","removeMatchPair","reindexed","ki","newK","newV","EditableText","_hoisted_7","CoSelect","CoIconButton","_hoisted_8","_hoisted_9","_hoisted_10","opt","_hoisted_12","CoButton","CoCheckbox","_hoisted_13","CoSwitch","_hoisted_14","_hoisted_15","CoRating","_hoisted_16","_hoisted_17","CoSlider","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_24","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_createBlock","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","posIdx","_withModifiers","_hoisted_46","_hoisted_47","term","_hoisted_48","defText","rIdx","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","entry","isSelected","select","FieldCardExpanded","_createTextVNode","fieldNames","toolboxDragOver","dup","patchPage","onBodyDragOver","onBodyDragLeave","onBodyDrop","VueDraggable","FieldCard","themeStyles","themeToStyles","titlePlaceholder","descPlaceholder","externalTitleError","titleHasError","innerStyle","outerStyle","dataAttrs","_mergeProps","PageCard","FORM_TABS","PAGE_TABS","FIELD_TABS","APPEARANCE_OPTIONS","DENSITY_OPTIONS","RADIUS_OPTIONS","SIZE_OPTIONS","ATTACHMENT_OPTIONS","FORMAT_OPTIONS","ACCENT_CHIPS","ACCENT_PRESET_HEX","field","formSection","pageSection","fieldSection","theme","resolved","patchField","patchTheme","patchThemeSection","sec","pickAccent","id","pickCustomAccent","hex","scopeLabel","scopeSubtitle","CoTabGroup","CoTab","_hoisted_11","chip","_normalizeStyle","_renderSlot","_ctx","leftOpen","FieldToolbox","FieldCanvas","PropertiesPanel","_withCtx","slotProps","draft","error","serialized","apply","parsed","reset","isPaged","schemaJson","themeJson","out","lastSubmit","onSubmit","detail","BUILTIN_LABELS","BUILTIN_IDS","normalizeTab","visibleTabs","customTabIds","firstTabId","first","active","suppressModelEmit","event","provide","titleError","incoming","onMounted","defineCobaltCore","defineCobaltForm","onKey","onBeforeUnmount","DesignerTab","PreviewTab","JsonTab","cid","_vShow"],"mappings":"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","x_google_ignoreList":[4]}
|
|
1
|
+
{"version":3,"file":"cobalt-form-builder.js","sources":["../src/stores/schema.ts","../src/fieldCatalog.ts","../src/components/FieldToolbox.vue","../src/components/EditableText.vue","../../../node_modules/.pnpm/vue-draggable-plus@0.6.1_@types+sortablejs@1.15.9/node_modules/vue-draggable-plus/dist/vue-draggable-plus.js","../src/components/FieldCardExpanded.vue","../src/components/FieldCard.vue","../src/components/PageCard.vue","../src/components/FieldCanvas.vue","../src/components/PropertiesPanel.vue","../src/components/DesignerTab.vue","../src/components/JsonTab.vue","../src/components/PreviewTab.vue","../src/CobaltFormBuilder.vue"],"sourcesContent":["import { computed, inject, reactive, ref, type InjectionKey } from 'vue';\nimport {\n isPagedSchema,\n resolveTheme,\n toPagedSchema,\n type ThemeSpec,\n} from '@prolibu-suite/cobalt-form-core';\n\n/**\n * Internal model for the builder. We always work with the paged shape so\n * the UI can render pages as containers à la SurveyJS, even when the user\n * only has one page.\n */\ninterface BuilderPage {\n name: string;\n title?: string;\n description?: string;\n visibleIf?: string;\n hideTitle?: boolean;\n hideDescription?: boolean;\n fields: Record<string, any>;\n}\n\ninterface BuilderSchema {\n title: string;\n description: string;\n mode: 'form' | 'quiz' | 'survey';\n pages: BuilderPage[];\n theme: ThemeSpec;\n}\n\n/**\n * Selection has three scopes, each editing a different layer of the schema:\n * - `form` → global form-level settings (theme, title, mode).\n * - `page` → page-level (id, visibleIf, etc.). pageIdx points at it.\n * - `field` → field inside the current page. fieldName is the key.\n */\nexport interface Selection {\n kind: 'form' | 'page' | 'field';\n pageIdx: number;\n fieldName: string | null;\n}\n\n/**\n * Granular events the store emits on mutations. `CobaltFormBuilder` bridges\n * them to Vue emits so host apps can react to specific actions (e.g. track\n * analytics when a field is added).\n */\nexport type SchemaEvent =\n | { type: 'field-added'; pageIdx: number; fieldName: string; kind: string }\n | { type: 'field-removed'; pageIdx: number; fieldName: string }\n | { type: 'field-renamed'; pageIdx: number; oldName: string; newName: string }\n | { type: 'field-updated'; pageIdx: number; fieldName: string; patch: Record<string, any> }\n | { type: 'field-duplicated'; pageIdx: number; sourceName: string; newName: string }\n | { type: 'field-reordered'; pageIdx: number; order: string[] }\n | { type: 'page-added'; pageIdx: number }\n | { type: 'page-removed'; pageIdx: number }\n | { type: 'page-duplicated'; sourceIdx: number; newIdx: number }\n | { type: 'page-updated'; pageIdx: number; patch: Record<string, any> }\n | { type: 'theme-changed'; theme: ThemeSpec }\n | { type: 'selection-changed'; selection: Selection }\n | { type: 'schema-replaced' }\n | { type: 'undo' }\n | { type: 'redo' };\n\nconst HISTORY_LIMIT = 50;\n\nfunction blankSchema(): BuilderSchema {\n return {\n title: 'Untitled Form',\n description: '',\n mode: 'form',\n pages: [\n {\n name: 'page1',\n title: 'Page 1',\n description: '',\n fields: {\n name: { type: 'String', required: true, label: 'Nombre', full: true },\n email: { type: 'String', required: true, format: 'email', label: 'Email' },\n },\n },\n ],\n theme: {},\n };\n}\n\nexport const FIELD_DEFAULTS: Record<string, () => Record<string, any>> = {\n text: () => ({ type: 'String' }),\n textarea: () => ({ type: 'String', uiCom: 'TextArea' }),\n number: () => ({ type: 'Number' }),\n date: () => ({ type: 'Date' }),\n phone: () => ({ type: 'String', uiCom: 'PhoneWithIndicative', defaultCountry: 'CO' }),\n boolean: () => ({ type: 'Boolean' }),\n select: () => ({ type: 'String', enum: ['Option A', 'Option B'] }),\n ref: () => ({ type: 'ObjectId', ref: 'Company', displayName: 'name' }),\n rating: () => ({ type: 'Number', uiCom: 'Rating', max: 5 }),\n slider: () => ({ type: 'Number', uiCom: 'Slider', min: 0, max: 100 }),\n color: () => ({ type: 'String', uiCom: 'ColorPicker' }),\n section: () => ({ uiCom: 'Section' }),\n file: () => ({ type: 'String', uiCom: 'File' }),\n ordering: () => ({ type: 'Array', uiCom: 'Ordering', enum: ['First item', 'Second item', 'Third item'] }),\n matching: () => ({ type: 'Object', uiCom: 'Matching', matchLeft: ['Term 1', 'Term 2'], matchRight: ['Definition 1', 'Definition 2'] }),\n 'image-choice': () => ({ type: 'String', uiCom: 'ImageRadioGroup', enum: ['Option A', 'Option B', 'Option C'], optionImages: ['', '', ''] }),\n};\n\nfunction titleize(s: string): string {\n return s\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/_/g, ' ')\n .toLowerCase()\n .replace(/^./, (c) => c.toUpperCase());\n}\n\nfunction deepClone<T>(v: T): T {\n return JSON.parse(JSON.stringify(v));\n}\n\nexport interface SchemaStoreOptions {\n /** Schema to hydrate the builder with on creation. */\n initialSchema?: Record<string, any>;\n /** Bag of typed events the host can listen to (in addition to v-model). */\n onEvent?: (event: SchemaEvent) => void;\n}\n\n/**\n * Create an independent schema-store instance. Each `<CobaltFormBuilder>`\n * mounts its own store and provides it via `SCHEMA_STORE_KEY` so child\n * components inject it without sharing state across instances.\n *\n * Returned shape matches the public composable API the components used\n * before (data, selection, methods) — no Pinia involved.\n */\nexport function createSchemaStore(options: SchemaStoreOptions = {}) {\n const emit = options.onEvent ?? (() => {});\n\n const data = ref<BuilderSchema>(blankSchema());\n const selection = ref<Selection>({ kind: 'page', pageIdx: 0, fieldName: null });\n\n // Undo/redo: snapshots of the full schema before each mutation.\n const past = ref<BuilderSchema[]>([]);\n const future = ref<BuilderSchema[]>([]);\n\n const canUndo = computed(() => past.value.length > 0);\n const canRedo = computed(() => future.value.length > 0);\n\n // ── Selection helpers ────────────────────────────────────────────────────\n\n const currentPage = computed<BuilderPage | null>(\n () => data.value.pages[selection.value.pageIdx] ?? null,\n );\n\n const selectedField = computed(() => {\n const page = currentPage.value;\n const name = selection.value.fieldName;\n if (!page || !name) return null;\n return page.fields[name] ?? null;\n });\n\n function setSelection(next: Selection): void {\n selection.value = next;\n emit({ type: 'selection-changed', selection: next });\n }\n\n function selectField(pageIdx: number, fieldName: string | null): void {\n setSelection({\n kind: fieldName ? 'field' : 'page',\n pageIdx,\n fieldName,\n });\n }\n\n function selectPage(pageIdx: number): void {\n setSelection({ kind: 'page', pageIdx, fieldName: null });\n }\n\n /** Select the form itself (global scope — theme, mode, top-level config). */\n function selectForm(): void {\n setSelection({ ...selection.value, kind: 'form' });\n }\n\n // ── Undo/redo plumbing ───────────────────────────────────────────────────\n\n function snapshot(): void {\n past.value.push(deepClone(data.value));\n if (past.value.length > HISTORY_LIMIT) past.value.shift();\n future.value = [];\n }\n\n function undo(): void {\n const prev = past.value.pop();\n if (!prev) return;\n future.value.push(deepClone(data.value));\n data.value = prev;\n clampSelection();\n emit({ type: 'undo' });\n }\n\n function redo(): void {\n const next = future.value.pop();\n if (!next) return;\n past.value.push(deepClone(data.value));\n data.value = next;\n clampSelection();\n emit({ type: 'redo' });\n }\n\n function clampSelection(): void {\n const pi = Math.min(selection.value.pageIdx, data.value.pages.length - 1);\n const page = data.value.pages[pi];\n const fn =\n selection.value.fieldName && page?.fields[selection.value.fieldName]\n ? selection.value.fieldName\n : null;\n const kind =\n selection.value.kind === 'form'\n ? 'form'\n : fn\n ? 'field'\n : 'page';\n selection.value = { kind, pageIdx: Math.max(pi, 0), fieldName: fn };\n }\n\n // ── Survey-level mutations ──────────────────────────────────────────────\n\n function setTitle(title: string): void {\n if (title === data.value.title) return;\n snapshot();\n data.value.title = title;\n }\n\n function setDescription(description: string): void {\n if (description === data.value.description) return;\n snapshot();\n data.value.description = description;\n }\n\n function setMode(mode: BuilderSchema['mode']): void {\n if (mode === data.value.mode) return;\n snapshot();\n data.value.mode = mode;\n }\n\n // ── Page mutations ──────────────────────────────────────────────────────\n\n function addPage(): void {\n snapshot();\n const num = data.value.pages.length + 1;\n data.value.pages.push({\n name: `page${num}`,\n title: `Page ${num}`,\n description: '',\n fields: {},\n });\n const newIdx = data.value.pages.length - 1;\n selectPage(newIdx);\n emit({ type: 'page-added', pageIdx: newIdx });\n }\n\n function removePage(idx: number): void {\n if (data.value.pages.length <= 1) return;\n snapshot();\n data.value.pages.splice(idx, 1);\n clampSelection();\n emit({ type: 'page-removed', pageIdx: idx });\n }\n\n function duplicatePage(idx: number): void {\n const src = data.value.pages[idx];\n if (!src) return;\n snapshot();\n const copy = deepClone(src);\n copy.name = uniquePageName(`${src.name}_copy`);\n copy.title = `${src.title || src.name} (copy)`;\n data.value.pages.splice(idx + 1, 0, copy);\n const newIdx = idx + 1;\n selectPage(newIdx);\n emit({ type: 'page-duplicated', sourceIdx: idx, newIdx });\n }\n\n function updatePage(idx: number, patch: Partial<BuilderPage>): void {\n const page = data.value.pages[idx];\n if (!page) return;\n snapshot();\n Object.assign(page, patch);\n emit({ type: 'page-updated', pageIdx: idx, patch: patch as Record<string, any> });\n }\n\n function uniquePageName(base: string): string {\n const existing = new Set(data.value.pages.map((p) => p.name));\n if (!existing.has(base)) return base;\n let i = 1;\n while (existing.has(`${base}_${i}`)) i++;\n return `${base}_${i}`;\n }\n\n // ── Field mutations ─────────────────────────────────────────────────────\n\n function uniqueFieldName(pageIdx: number, base: string): string {\n const page = data.value.pages[pageIdx];\n if (!page) return base;\n let n = base;\n let i = 1;\n while (n in page.fields) n = `${base}_${i++}`;\n return n;\n }\n\n /**\n * In quiz mode, select fields should render as radio buttons instead of\n * dropdowns. This applies `uiCom: 'RadioGroup'` automatically.\n */\n function applyModeOverrides(kind: string, def: Record<string, any>): Record<string, any> {\n if (data.value.mode !== 'quiz') return def;\n if (kind === 'select') return { ...def, uiCom: 'RadioGroup' };\n return def;\n }\n\n function addField(kind: string, pageIdx = selection.value.pageIdx): void {\n const page = data.value.pages[pageIdx];\n if (!page) return;\n const factory = FIELD_DEFAULTS[kind] ?? (() => ({ type: 'String' }));\n const def = applyModeOverrides(kind, factory());\n const name = uniqueFieldName(pageIdx, kind);\n if (name.startsWith('_')) throw new Error(`Reserved name \"${name}\"`);\n snapshot();\n page.fields = { ...page.fields, [name]: { ...def, label: titleize(name) } };\n selectField(pageIdx, name);\n emit({ type: 'field-added', pageIdx, fieldName: name, kind });\n }\n\n function insertFieldAfter(pageIdx: number, refName: string, kind: string): void {\n const page = data.value.pages[pageIdx];\n if (!page) return;\n const factory = FIELD_DEFAULTS[kind] ?? (() => ({ type: 'String' }));\n const def = applyModeOverrides(kind, factory());\n const name = uniqueFieldName(pageIdx, kind);\n if (name.startsWith('_')) throw new Error(`Reserved name \"${name}\"`);\n snapshot();\n\n const entries = Object.entries(page.fields);\n const refIdx = entries.findIndex(([n]) => n === refName);\n const newEntry: [string, any] = [name, { ...def, label: titleize(name) }];\n if (refIdx === -1) entries.push(newEntry);\n else entries.splice(refIdx + 1, 0, newEntry);\n\n page.fields = Object.fromEntries(entries);\n selectField(pageIdx, name);\n emit({ type: 'field-added', pageIdx, fieldName: name, kind });\n }\n\n function removeField(pageIdx: number, name: string): void {\n const page = data.value.pages[pageIdx];\n if (!page || !(name in page.fields)) return;\n snapshot();\n const next = { ...page.fields };\n delete next[name];\n page.fields = next;\n if (\n selection.value.pageIdx === pageIdx &&\n selection.value.fieldName === name\n ) {\n selection.value = { kind: 'page', pageIdx, fieldName: null };\n }\n emit({ type: 'field-removed', pageIdx, fieldName: name });\n }\n\n function duplicateField(pageIdx: number, name: string): void {\n const page = data.value.pages[pageIdx];\n if (!page || !(name in page.fields)) return;\n snapshot();\n const copy = deepClone(page.fields[name]);\n const newName = uniqueFieldName(pageIdx, `${name}_copy`);\n const next: Record<string, any> = {};\n for (const [k, v] of Object.entries(page.fields)) {\n next[k] = v;\n if (k === name) next[newName] = copy;\n }\n page.fields = next;\n selectField(pageIdx, newName);\n emit({ type: 'field-duplicated', pageIdx, sourceName: name, newName });\n }\n\n function updateField(pageIdx: number, name: string, patch: Record<string, any>): void {\n const page = data.value.pages[pageIdx];\n if (!page || !(name in page.fields)) return;\n snapshot();\n page.fields = {\n ...page.fields,\n [name]: { ...page.fields[name], ...patch },\n };\n emit({ type: 'field-updated', pageIdx, fieldName: name, patch });\n }\n\n function replaceFieldDef(pageIdx: number, name: string, newDef: Record<string, any>): void {\n const page = data.value.pages[pageIdx];\n if (!page || !(name in page.fields)) return;\n snapshot();\n page.fields = { ...page.fields, [name]: { ...newDef } };\n emit({ type: 'field-updated', pageIdx, fieldName: name, patch: newDef });\n }\n\n function renameField(pageIdx: number, oldName: string, newName: string): void {\n if (oldName === newName) return;\n const page = data.value.pages[pageIdx];\n if (!page || !(oldName in page.fields)) return;\n if (newName in page.fields) throw new Error(`Field \"${newName}\" already exists`);\n if (newName.startsWith('_')) throw new Error(`Reserved name \"${newName}\"`);\n snapshot();\n const next: Record<string, any> = {};\n for (const [k, v] of Object.entries(page.fields)) {\n next[k === oldName ? newName : k] = v;\n }\n page.fields = next;\n if (\n selection.value.pageIdx === pageIdx &&\n selection.value.fieldName === oldName\n ) {\n selection.value = { kind: 'field', pageIdx, fieldName: newName };\n }\n emit({ type: 'field-renamed', pageIdx, oldName, newName });\n }\n\n function moveField(pageIdx: number, fromIdx: number, toIdx: number): void {\n const page = data.value.pages[pageIdx];\n if (!page) return;\n const names = Object.keys(page.fields);\n if (fromIdx === toIdx || fromIdx < 0 || fromIdx >= names.length) return;\n if (toIdx < 0 || toIdx >= names.length) return;\n snapshot();\n const [moved] = names.splice(fromIdx, 1);\n names.splice(toIdx, 0, moved);\n const next: Record<string, any> = {};\n for (const n of names) next[n] = page.fields[n];\n page.fields = next;\n emit({ type: 'field-reordered', pageIdx, order: names });\n }\n\n function reorderFieldsByNames(pageIdx: number, names: string[]): void {\n const page = data.value.pages[pageIdx];\n if (!page) return;\n const existing = Object.keys(page.fields);\n if (names.length !== existing.length) return;\n for (const n of names) {\n if (!existing.includes(n)) return;\n }\n if (existing.every((n, i) => n === names[i])) return;\n snapshot();\n const next: Record<string, any> = {};\n for (const n of names) next[n] = page.fields[n];\n page.fields = next;\n emit({ type: 'field-reordered', pageIdx, order: names });\n }\n\n // ── Theme ───────────────────────────────────────────────────────────────\n\n const resolvedTheme = computed(() => resolveTheme(data.value.theme));\n\n function setTheme(patch: Partial<ThemeSpec>): void {\n snapshot();\n data.value.theme = { ...data.value.theme, ...patch };\n emit({ type: 'theme-changed', theme: data.value.theme });\n }\n\n function setThemeSection(section: 'background' | 'header', patch: Record<string, any>): void {\n snapshot();\n const current = (data.value.theme[section] ?? {}) as Record<string, any>;\n data.value.theme = {\n ...data.value.theme,\n [section]: { ...current, ...patch },\n };\n emit({ type: 'theme-changed', theme: data.value.theme });\n }\n\n function resetTheme(): void {\n snapshot();\n data.value.theme = {};\n emit({ type: 'theme-changed', theme: data.value.theme });\n }\n\n // ── Bulk replace (JSON tab, hydration from props) ───────────────────────\n\n function replaceAll(raw: any): void {\n snapshot();\n if (isPagedSchema(raw)) {\n const paged = toPagedSchema(raw);\n data.value = {\n title: raw.title || data.value.title,\n description: raw.description || '',\n mode: paged.mode || 'form',\n pages: paged.pages.map((p) => ({\n name: p.name,\n title: p.title,\n description: p.description,\n visibleIf: p.visibleIf,\n hideTitle: p.hideTitle,\n hideDescription: p.hideDescription,\n fields: p.fields,\n })),\n theme: paged.theme || {},\n };\n } else {\n data.value = {\n ...blankSchema(),\n pages: [{ name: 'page1', title: 'Page 1', description: '', fields: raw }],\n };\n }\n selection.value = { kind: 'page', pageIdx: 0, fieldName: null };\n emit({ type: 'schema-replaced' });\n }\n\n // ── Export ──────────────────────────────────────────────────────────────\n\n /** Canonical schema shape consumed by `<co-form-wizard>`. */\n const exported = computed<Record<string, any>>(() => {\n const hasTheme = Object.keys(data.value.theme).length > 0;\n if (data.value.pages.length === 1 && !hasTheme) {\n return data.value.pages[0].fields;\n }\n return {\n title: data.value.title,\n ...(data.value.description ? { description: data.value.description } : {}),\n mode: data.value.mode,\n pages: data.value.pages.map((p) => ({\n name: p.name,\n title: p.title,\n description: p.description,\n visibleIf: p.visibleIf,\n ...(p.hideTitle ? { hideTitle: true } : {}),\n ...(p.hideDescription ? { hideDescription: true } : {}),\n fields: p.fields,\n })),\n ...(hasTheme ? { theme: data.value.theme } : {}),\n };\n });\n\n // Optional initial hydration. We bypass snapshot so the user's initial\n // state isn't treated as a \"first edit\" they can undo back to nothing.\n if (options.initialSchema && Object.keys(options.initialSchema).length > 0) {\n if (isPagedSchema(options.initialSchema)) {\n const paged = toPagedSchema(options.initialSchema);\n data.value = {\n title: options.initialSchema.title || (paged.mode === 'quiz' ? '' : 'Untitled Form'),\n description: options.initialSchema.description || '',\n mode: paged.mode || 'form',\n pages: paged.pages.map((p) => ({\n name: p.name,\n title: p.title,\n description: p.description,\n visibleIf: p.visibleIf,\n hideTitle: p.hideTitle,\n hideDescription: p.hideDescription,\n fields: p.fields,\n })),\n theme: paged.theme || {},\n };\n } else {\n data.value = {\n ...blankSchema(),\n pages: [{ name: 'page1', title: 'Page 1', description: '', fields: options.initialSchema }],\n };\n }\n }\n\n // `reactive()` wrap auto-unwraps the inner refs/computeds so consumers\n // access `store.selection.pageIdx` (no `.value`), matching the API\n // shape Pinia exposes via `defineStore` — keeps the existing component\n // call-sites working unchanged after the migration.\n return reactive({\n data,\n selection,\n currentPage,\n selectedField,\n canUndo,\n canRedo,\n exported,\n resolvedTheme,\n selectField,\n selectPage,\n selectForm,\n undo,\n redo,\n setTitle,\n setDescription,\n setMode,\n setTheme,\n setThemeSection,\n resetTheme,\n addPage,\n removePage,\n duplicatePage,\n updatePage,\n addField,\n insertFieldAfter,\n removeField,\n duplicateField,\n updateField,\n replaceFieldDef,\n renameField,\n moveField,\n reorderFieldsByNames,\n replaceAll,\n });\n}\n\nexport type SchemaStore = ReturnType<typeof createSchemaStore>;\n\nexport const SCHEMA_STORE_KEY: InjectionKey<SchemaStore> = Symbol(\n 'CobaltFormBuilder.schemaStore',\n);\n\n/**\n * Inject the schema store provided by an ancestor `<CobaltFormBuilder>`.\n * Throws if called outside one — that's almost always a bug worth surfacing\n * loudly rather than silently returning an unrelated singleton.\n */\nexport function useSchemaStore(): SchemaStore {\n const store = inject(SCHEMA_STORE_KEY);\n if (!store) {\n throw new Error(\n '[cobalt-form-builder] useSchemaStore() must be called inside a <CobaltFormBuilder>. ' +\n 'Make sure the component lives in the builder subtree, or call createSchemaStore() ' +\n 'and provide it yourself.',\n );\n }\n return store;\n}\n","/**\n * Catalog of field types the builder can insert. Each entry pairs a Cobalt\n * FieldKind (or composite `uiCom`) with a human label, group, search aliases,\n * and a Phosphor icon name rendered by <co-icon>.\n */\n\nexport interface FieldCatalogEntry {\n id: string;\n label: string;\n group: 'inputs' | 'choices' | 'advanced' | 'layout';\n /** Extra terms the search matches against. */\n aliases?: string[];\n /** Phosphor icon name (used by <co-icon name=\"...\" />). */\n icon: string;\n /** Whether this field type is available in quiz mode. */\n quizAllowed?: boolean;\n /** Display label override when the builder is in quiz mode. */\n quizLabel?: string;\n}\n\nexport const FIELD_CATALOG: FieldCatalogEntry[] = [\n // Inputs\n { id: 'text', label: 'Single-line input', group: 'inputs', aliases: ['text', 'string'], icon: 'text-aa', quizAllowed: true, quizLabel: 'Short Answer' },\n { id: 'textarea', label: 'Multi-line text', group: 'inputs', aliases: ['textarea', 'comment'], icon: 'text-align-left', quizAllowed: true, quizLabel: 'Long Answer' },\n { id: 'number', label: 'Number', group: 'inputs', aliases: ['integer', 'numeric'], icon: 'hash', quizAllowed: true, quizLabel: 'Numeric Answer' },\n { id: 'date', label: 'Date', group: 'inputs', aliases: ['calendar'], icon: 'calendar' },\n { id: 'phone', label: 'Phone', group: 'inputs', aliases: ['tel', 'telephone', 'indicative', 'PhoneWithIndicative'], icon: 'phone' },\n\n // Choices\n { id: 'boolean', label: 'Yes / No', group: 'choices', aliases: ['switch', 'toggle'], icon: 'toggle-left', quizAllowed: true, quizLabel: 'True / False' },\n { id: 'select', label: 'Dropdown', group: 'choices', aliases: ['dropdown', 'enum', 'multiple choice'], icon: 'caret-circle-down', quizAllowed: true, quizLabel: 'Multiple Choice' },\n { id: 'ordering', label: 'Ordering', group: 'choices', aliases: ['rank', 'sequence', 'sort', 'order'], icon: 'sort-ascending', quizAllowed: true, quizLabel: 'Ordering' },\n { id: 'matching', label: 'Matching', group: 'choices', aliases: ['pair', 'connect', 'match'], icon: 'arrows-left-right', quizAllowed: true, quizLabel: 'Matching' },\n { id: 'image-choice', label: 'Image choice', group: 'choices', aliases: ['image', 'picture', 'photo'], icon: 'image-square', quizAllowed: true, quizLabel: 'Image Choice' },\n { id: 'ref', label: 'Reference', group: 'choices', aliases: ['lookup', 'model'], icon: 'link' },\n\n // Advanced\n { id: 'rating', label: 'Rating scale', group: 'advanced', aliases: ['stars', 'score'], icon: 'star', quizAllowed: true, quizLabel: 'Rating Scale' },\n { id: 'slider', label: 'Slider', group: 'advanced', aliases: ['range'], icon: 'sliders-horizontal' },\n { id: 'color', label: 'Color picker', group: 'advanced', aliases: ['hex', 'palette'], icon: 'palette' },\n { id: 'file', label: 'File upload', group: 'advanced', aliases: ['attachment'], icon: 'paperclip', quizAllowed: true, quizLabel: 'File Upload' },\n\n // Layout\n { id: 'section', label: 'Section divider', group: 'layout', aliases: ['header', 'group'], icon: 'minus', quizAllowed: true },\n];\n\nexport const GROUP_LABELS: Record<FieldCatalogEntry['group'], string> = {\n inputs: 'Inputs',\n choices: 'Choices',\n advanced: 'Advanced',\n layout: 'Layout',\n};\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { CoInput, CoListItem } from '@prolibu-suite/cobalt-vue';\nimport { useSchemaStore } from '../stores/schema';\nimport { FIELD_CATALOG, GROUP_LABELS, type FieldCatalogEntry } from '../fieldCatalog';\n\nconst schema = useSchemaStore();\nconst query = ref('');\n\ninterface Group {\n id: FieldCatalogEntry['group'];\n label: string;\n items: FieldCatalogEntry[];\n}\n\nconst groups = computed<Group[]>(() => {\n const q = query.value.trim().toLowerCase();\n const isQuiz = schema.data.mode === 'quiz';\n\n // In quiz mode, only show field types marked as quizAllowed.\n const base = isQuiz ? FIELD_CATALOG.filter((f) => f.quizAllowed) : FIELD_CATALOG;\n\n const filtered = q\n ? base.filter((f) => {\n const lbl = (isQuiz && f.quizLabel ? f.quizLabel : f.label).toLowerCase();\n if (lbl.includes(q)) return true;\n if (f.id.toLowerCase().includes(q)) return true;\n return (f.aliases || []).some((a) => a.toLowerCase().includes(q));\n })\n : base;\n\n const byGroup: Record<string, Group> = {};\n for (const item of filtered) {\n if (!byGroup[item.group]) {\n byGroup[item.group] = {\n id: item.group,\n label: GROUP_LABELS[item.group],\n items: [],\n };\n }\n byGroup[item.group].items.push(item);\n }\n return Object.values(byGroup);\n});\n\nfunction onDragStart(ev: DragEvent, kind: string): void {\n if (!ev.dataTransfer) return;\n ev.dataTransfer.setData('application/cobalt-field-kind', kind);\n ev.dataTransfer.effectAllowed = 'copy';\n}\n\nfunction onSelect(kind: string): void {\n schema.addField(kind);\n}\n\nfunction detailValue(ev: CustomEvent): any {\n const d = ev.detail;\n if (d != null && typeof d === 'object' && 'value' in d) return (d as any).value;\n return d;\n}\n</script>\n\n<template>\n <div class=\"toolbox\">\n <!-- Form-level entry: opens theme settings in the right panel (hidden in quiz). -->\n <button\n v-if=\"schema.data.mode !== 'quiz'\"\n class=\"toolbox__form-btn\"\n :class=\"{ 'is-active': schema.selection.kind === 'form' }\"\n @click=\"schema.selectForm()\"\n >\n <span class=\"toolbox__form-btn-icon\">\n <co-icon name=\"paint-brush\" size=\"16\" />\n </span>\n <span class=\"toolbox__form-btn-body\">\n <span class=\"toolbox__form-btn-label\">Theme</span>\n <span class=\"toolbox__form-btn-sub\">Global form settings</span>\n </span>\n <co-icon name=\"caret-right\" size=\"14\" />\n </button>\n\n <div class=\"toolbox__search\">\n <CoInput\n placeholder=\"Type to search…\"\n icon-left=\"magnifying-glass\"\n :value=\"query\"\n @coInput=\"query = detailValue($event) ?? ''\"\n />\n </div>\n\n <div class=\"toolbox__scroll\">\n <div v-if=\"groups.length === 0\" class=\"toolbox__empty\">\n No matches for \"{{ query }}\"\n </div>\n\n <div v-for=\"g in groups\" :key=\"g.id\" class=\"toolbox__group\">\n <div class=\"toolbox__group-label\">{{ g.label }}</div>\n <ul class=\"toolbox__list\">\n <li\n v-for=\"item in g.items\"\n :key=\"item.id\"\n draggable=\"true\"\n class=\"toolbox__row\"\n @dragstart=\"onDragStart($event, item.id)\"\n >\n <CoListItem\n :label=\"schema.data.mode === 'quiz' && item.quizLabel ? item.quizLabel : item.label\"\n :icon=\"item.icon\"\n dense\n @coSelect=\"onSelect(item.id)\"\n />\n </li>\n </ul>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.toolbox {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n/* Form-level entry (global theme settings). Visually distinct from the\n * field types below so users immediately recognize it as a different\n * scope rather than another draggable widget. */\n.toolbox__form-btn {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 10px);\n width: 100%;\n padding: var(--co-spacing-md, 12px) var(--co-spacing-lg, 16px);\n border: 0;\n background: transparent;\n border-bottom: 1px solid var(--fb-border);\n text-align: left;\n transition: background 120ms;\n color: var(--co-semantic-text-default, #111827);\n}\n\n.toolbox__form-btn:hover {\n background: var(--fb-bg);\n}\n\n.toolbox__form-btn.is-active {\n background: color-mix(in srgb, var(--co-color-primary-azul) 8%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n}\n\n.toolbox__form-btn-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: var(--co-border-radius-xs, 8px);\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n flex-shrink: 0;\n}\n\n.toolbox__form-btn-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.toolbox__form-btn-label {\n font-size: var(--co-font-size-13, 13px);\n font-weight: 600;\n line-height: 1.3;\n}\n\n.toolbox__form-btn-sub {\n font-size: var(--co-font-size-11, 11px);\n color: var(--co-semantic-text-secondary, #6b7280);\n margin-top: 1px;\n}\n\n.toolbox__form-btn.is-active .toolbox__form-btn-sub {\n color: color-mix(in srgb, var(--co-color-primary-azul) 70%, var(--co-semantic-text-secondary, #6b7280));\n}\n\n.toolbox__search {\n padding: var(--co-spacing-lg, 16px) var(--co-spacing-lg, 16px) var(--co-spacing-md, 12px);\n border-bottom: 1px solid var(--fb-border);\n}\n\n.toolbox__scroll {\n flex: 1;\n overflow-y: auto;\n padding: var(--co-spacing-sm, 8px) 0;\n}\n\n.toolbox__empty {\n padding: var(--co-spacing-2xl, 24px) var(--co-spacing-lg, 16px);\n text-align: center;\n font-size: var(--co-font-size-12, 12px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.toolbox__group {\n padding: var(--co-spacing-sm, 10px) 0;\n}\n\n.toolbox__group + .toolbox__group {\n border-top: 1px solid var(--fb-border);\n margin-top: var(--co-spacing-xs, 4px);\n padding-top: var(--co-spacing-md, 14px);\n}\n\n.toolbox__group-label {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--co-semantic-text-muted, #9ca3af);\n padding: 0 var(--co-spacing-lg, 16px) var(--co-spacing-xs, 6px);\n}\n\n.toolbox__list {\n list-style: none;\n padding: 0 var(--co-spacing-xs, 6px);\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n/* `co-list-item` brings its own padding/hover. We only add the\n * draggable affordance and let the rounded corners settle on the row. */\n.toolbox__row {\n cursor: grab;\n border-radius: var(--co-border-radius-xs, 8px);\n transition: background 100ms;\n}\n\n.toolbox__row:hover {\n background: var(--fb-bg);\n}\n\n.toolbox__row:active { cursor: grabbing; }\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\n\n/**\n * Inline-editable text. Click to focus, blur or Enter to commit.\n *\n * We use contenteditable on a span so layout doesn't shift between\n * read/edit modes — switching to an <input> would jump the row height.\n */\nconst props = defineProps<{\n modelValue: string;\n placeholder?: string;\n multiline?: boolean;\n error?: boolean;\n}>();\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst el = ref<HTMLElement | null>(null);\nconst focused = ref(false);\nconst hasContent = ref(false);\n\n// `plaintext-only` is a valid contenteditable value (and is allowed by\n// @vue/runtime-dom's own types), but vue-tsc's template checker rejects the\n// literal. Bind through a cast const so the checker is satisfied — the rendered\n// attribute is unchanged.\nconst contentEditable = 'plaintext-only' as unknown as boolean;\n\n// Reflect external changes into the DOM when not actively editing.\nwatch(\n () => props.modelValue,\n (v) => {\n hasContent.value = !!v;\n if (focused.value) return;\n if (el.value && el.value.innerText !== v) {\n el.value.innerText = v;\n }\n },\n { immediate: true },\n);\n\nfunction onInput(): void {\n // Track whether the span has text so we can hide the placeholder immediately.\n hasContent.value = !!(el.value && el.value.innerText.trim());\n}\n\nfunction commit(): void {\n if (!el.value) return;\n const raw = el.value.innerText.replace(/\\n+$/, '');\n if (raw === props.modelValue) return;\n emit('update:modelValue', raw);\n}\n\nfunction onBlur(): void {\n focused.value = false;\n commit();\n hasContent.value = !!props.modelValue;\n}\n\nfunction onFocus(): void {\n focused.value = true;\n}\n\nfunction onKeydown(ev: KeyboardEvent): void {\n if (!props.multiline && ev.key === 'Enter') {\n ev.preventDefault();\n (ev.target as HTMLElement).blur();\n } else if (ev.key === 'Escape') {\n if (el.value) el.value.innerText = props.modelValue;\n (ev.target as HTMLElement).blur();\n }\n}\n</script>\n\n<template>\n <span\n ref=\"el\"\n class=\"editable\"\n :class=\"{ 'is-empty': !hasContent, 'is-error': error }\"\n :data-placeholder=\"placeholder\"\n :contenteditable=\"contentEditable\"\n spellcheck=\"false\"\n @input=\"onInput\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @keydown=\"onKeydown\"\n >{{ modelValue }}</span>\n</template>\n\n<style scoped>\n.editable {\n display: inline-block;\n position: relative;\n min-width: 1px;\n outline: none;\n border-radius: var(--co-border-radius-xxs, 4px);\n padding: 0 var(--co-spacing-xxs, 2px);\n cursor: text;\n border: 1px dashed transparent;\n transition: border-color 150ms, background 150ms;\n}\n\n.editable:hover {\n background: var(--co-semantic-surface-hover, #f3f4f6);\n border-color: var(--co-semantic-border-default, #e5e7eb);\n}\n\n.editable:focus {\n background: var(--co-semantic-surface-hover, #f3f4f6);\n box-shadow: 0 0 0 1px var(--co-semantic-border-default, #e5e7eb);\n}\n\n.editable.is-empty {\n border-color: var(--co-semantic-border-subtle, #f3f4f6);\n}\n\n.editable.is-empty::before {\n content: attr(data-placeholder);\n position: absolute;\n left: var(--co-spacing-xxs, 2px);\n top: 0;\n color: var(--co-semantic-text-muted, #9ca3af);\n pointer-events: none;\n white-space: nowrap;\n}\n\n/* Error state */\n.editable.is-error {\n border-color: var(--co-color-status-error, #AA2E1B);\n border-style: dashed;\n}\n\n.editable.is-error:focus {\n box-shadow: 0 0 0 1px var(--co-color-status-error, #AA2E1B);\n}\n</style>\n","var an = Object.defineProperty;\nvar Pe = Object.getOwnPropertySymbols;\nvar yt = Object.prototype.hasOwnProperty, wt = Object.prototype.propertyIsEnumerable;\nvar bt = (t, e, n) => e in t ? an(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, fe = (t, e) => {\n for (var n in e || (e = {}))\n yt.call(e, n) && bt(t, n, e[n]);\n if (Pe)\n for (var n of Pe(e))\n wt.call(e, n) && bt(t, n, e[n]);\n return t;\n};\nvar $e = (t, e) => {\n var n = {};\n for (var o in t)\n yt.call(t, o) && e.indexOf(o) < 0 && (n[o] = t[o]);\n if (t != null && Pe)\n for (var o of Pe(t))\n e.indexOf(o) < 0 && wt.call(t, o) && (n[o] = t[o]);\n return n;\n};\nimport { getCurrentInstance as dt, unref as U, watch as ln, onUnmounted as sn, onMounted as un, nextTick as kt, isRef as qe, defineComponent as cn, computed as Et, toRefs as fn, ref as dn, reactive as hn, h as pn, isProxy as gn } from \"vue\";\nconst Ht = \"[vue-draggable-plus]: \";\nfunction mn(t) {\n console.warn(Ht + t);\n}\nfunction vn(t) {\n console.error(Ht + t);\n}\nfunction St(t, e, n) {\n return n >= 0 && n < t.length && t.splice(n, 0, t.splice(e, 1)[0]), t;\n}\nfunction bn(t) {\n return t.replace(/-(\\w)/g, (e, n) => n ? n.toUpperCase() : \"\");\n}\nfunction yn(t) {\n return Object.keys(t).reduce((e, n) => (typeof t[n] != \"undefined\" && (e[bn(n)] = t[n]), e), {});\n}\nfunction Dt(t, e) {\n return Array.isArray(t) && t.splice(e, 1), t;\n}\nfunction _t(t, e, n) {\n return Array.isArray(t) && t.splice(e, 0, n), t;\n}\nfunction wn(t) {\n return typeof t == \"undefined\";\n}\nfunction En(t) {\n return typeof t == \"string\";\n}\nfunction Tt(t, e, n) {\n const o = t.children[n];\n t.insertBefore(e, o);\n}\nfunction Ke(t) {\n t.parentNode && t.parentNode.removeChild(t);\n}\nfunction Sn(t, e = document) {\n var o;\n let n = null;\n return typeof (e == null ? void 0 : e.querySelector) == \"function\" ? n = (o = e == null ? void 0 : e.querySelector) == null ? void 0 : o.call(e, t) : n = document.querySelector(t), n || mn(`Element not found: ${t}`), n;\n}\nfunction Dn(t, e, n = null) {\n return function(...o) {\n return t.apply(n, o), e.apply(n, o);\n };\n}\nfunction _n(t, e) {\n const n = fe({}, t);\n return Object.keys(e).forEach((o) => {\n n[o] ? n[o] = Dn(t[o], e[o]) : n[o] = e[o];\n }), n;\n}\nfunction Tn(t) {\n return t instanceof HTMLElement;\n}\nfunction Ct(t, e) {\n Object.keys(t).forEach((n) => {\n e(n, t[n]);\n });\n}\nfunction Cn(t) {\n return t.charCodeAt(0) === 111 && t.charCodeAt(1) === 110 && (t.charCodeAt(2) > 122 || t.charCodeAt(2) < 97);\n}\nconst On = Object.assign;\n/**!\n * Sortable 1.15.2\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction Ot(t, e) {\n var n = Object.keys(t);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(t);\n e && (o = o.filter(function(r) {\n return Object.getOwnPropertyDescriptor(t, r).enumerable;\n })), n.push.apply(n, o);\n }\n return n;\n}\nfunction ne(t) {\n for (var e = 1; e < arguments.length; e++) {\n var n = arguments[e] != null ? arguments[e] : {};\n e % 2 ? Ot(Object(n), !0).forEach(function(o) {\n In(t, o, n[o]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : Ot(Object(n)).forEach(function(o) {\n Object.defineProperty(t, o, Object.getOwnPropertyDescriptor(n, o));\n });\n }\n return t;\n}\nfunction Ye(t) {\n \"@babel/helpers - typeof\";\n return typeof Symbol == \"function\" && typeof Symbol.iterator == \"symbol\" ? Ye = function(e) {\n return typeof e;\n } : Ye = function(e) {\n return e && typeof Symbol == \"function\" && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n }, Ye(t);\n}\nfunction In(t, e, n) {\n return e in t ? Object.defineProperty(t, e, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = n, t;\n}\nfunction ie() {\n return ie = Object.assign || function(t) {\n for (var e = 1; e < arguments.length; e++) {\n var n = arguments[e];\n for (var o in n)\n Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);\n }\n return t;\n }, ie.apply(this, arguments);\n}\nfunction An(t, e) {\n if (t == null)\n return {};\n var n = {}, o = Object.keys(t), r, i;\n for (i = 0; i < o.length; i++)\n r = o[i], !(e.indexOf(r) >= 0) && (n[r] = t[r]);\n return n;\n}\nfunction xn(t, e) {\n if (t == null)\n return {};\n var n = An(t, e), o, r;\n if (Object.getOwnPropertySymbols) {\n var i = Object.getOwnPropertySymbols(t);\n for (r = 0; r < i.length; r++)\n o = i[r], !(e.indexOf(o) >= 0) && Object.prototype.propertyIsEnumerable.call(t, o) && (n[o] = t[o]);\n }\n return n;\n}\nvar Nn = \"1.15.2\";\nfunction re(t) {\n if (typeof window != \"undefined\" && window.navigator)\n return !!/* @__PURE__ */ navigator.userAgent.match(t);\n}\nvar ae = re(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i), xe = re(/Edge/i), It = re(/firefox/i), Te = re(/safari/i) && !re(/chrome/i) && !re(/android/i), Lt = re(/iP(ad|od|hone)/i), Wt = re(/chrome/i) && re(/android/i), Gt = {\n capture: !1,\n passive: !1\n};\nfunction S(t, e, n) {\n t.addEventListener(e, n, !ae && Gt);\n}\nfunction E(t, e, n) {\n t.removeEventListener(e, n, !ae && Gt);\n}\nfunction We(t, e) {\n if (e) {\n if (e[0] === \">\" && (e = e.substring(1)), t)\n try {\n if (t.matches)\n return t.matches(e);\n if (t.msMatchesSelector)\n return t.msMatchesSelector(e);\n if (t.webkitMatchesSelector)\n return t.webkitMatchesSelector(e);\n } catch (n) {\n return !1;\n }\n return !1;\n }\n}\nfunction Pn(t) {\n return t.host && t !== document && t.host.nodeType ? t.host : t.parentNode;\n}\nfunction Q(t, e, n, o) {\n if (t) {\n n = n || document;\n do {\n if (e != null && (e[0] === \">\" ? t.parentNode === n && We(t, e) : We(t, e)) || o && t === n)\n return t;\n if (t === n)\n break;\n } while (t = Pn(t));\n }\n return null;\n}\nvar At = /\\s+/g;\nfunction V(t, e, n) {\n if (t && e)\n if (t.classList)\n t.classList[n ? \"add\" : \"remove\"](e);\n else {\n var o = (\" \" + t.className + \" \").replace(At, \" \").replace(\" \" + e + \" \", \" \");\n t.className = (o + (n ? \" \" + e : \"\")).replace(At, \" \");\n }\n}\nfunction h(t, e, n) {\n var o = t && t.style;\n if (o) {\n if (n === void 0)\n return document.defaultView && document.defaultView.getComputedStyle ? n = document.defaultView.getComputedStyle(t, \"\") : t.currentStyle && (n = t.currentStyle), e === void 0 ? n : n[e];\n !(e in o) && e.indexOf(\"webkit\") === -1 && (e = \"-webkit-\" + e), o[e] = n + (typeof n == \"string\" ? \"\" : \"px\");\n }\n}\nfunction ye(t, e) {\n var n = \"\";\n if (typeof t == \"string\")\n n = t;\n else\n do {\n var o = h(t, \"transform\");\n o && o !== \"none\" && (n = o + \" \" + n);\n } while (!e && (t = t.parentNode));\n var r = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n return r && new r(n);\n}\nfunction jt(t, e, n) {\n if (t) {\n var o = t.getElementsByTagName(e), r = 0, i = o.length;\n if (n)\n for (; r < i; r++)\n n(o[r], r);\n return o;\n }\n return [];\n}\nfunction te() {\n var t = document.scrollingElement;\n return t || document.documentElement;\n}\nfunction P(t, e, n, o, r) {\n if (!(!t.getBoundingClientRect && t !== window)) {\n var i, a, l, s, u, d, f;\n if (t !== window && t.parentNode && t !== te() ? (i = t.getBoundingClientRect(), a = i.top, l = i.left, s = i.bottom, u = i.right, d = i.height, f = i.width) : (a = 0, l = 0, s = window.innerHeight, u = window.innerWidth, d = window.innerHeight, f = window.innerWidth), (e || n) && t !== window && (r = r || t.parentNode, !ae))\n do\n if (r && r.getBoundingClientRect && (h(r, \"transform\") !== \"none\" || n && h(r, \"position\") !== \"static\")) {\n var m = r.getBoundingClientRect();\n a -= m.top + parseInt(h(r, \"border-top-width\")), l -= m.left + parseInt(h(r, \"border-left-width\")), s = a + i.height, u = l + i.width;\n break;\n }\n while (r = r.parentNode);\n if (o && t !== window) {\n var y = ye(r || t), b = y && y.a, w = y && y.d;\n y && (a /= w, l /= b, f /= b, d /= w, s = a + d, u = l + f);\n }\n return {\n top: a,\n left: l,\n bottom: s,\n right: u,\n width: f,\n height: d\n };\n }\n}\nfunction xt(t, e, n) {\n for (var o = ce(t, !0), r = P(t)[e]; o; ) {\n var i = P(o)[n], a = void 0;\n if (a = r >= i, !a)\n return o;\n if (o === te())\n break;\n o = ce(o, !1);\n }\n return !1;\n}\nfunction we(t, e, n, o) {\n for (var r = 0, i = 0, a = t.children; i < a.length; ) {\n if (a[i].style.display !== \"none\" && a[i] !== p.ghost && (o || a[i] !== p.dragged) && Q(a[i], n.draggable, t, !1)) {\n if (r === e)\n return a[i];\n r++;\n }\n i++;\n }\n return null;\n}\nfunction ht(t, e) {\n for (var n = t.lastElementChild; n && (n === p.ghost || h(n, \"display\") === \"none\" || e && !We(n, e)); )\n n = n.previousElementSibling;\n return n || null;\n}\nfunction J(t, e) {\n var n = 0;\n if (!t || !t.parentNode)\n return -1;\n for (; t = t.previousElementSibling; )\n t.nodeName.toUpperCase() !== \"TEMPLATE\" && t !== p.clone && (!e || We(t, e)) && n++;\n return n;\n}\nfunction Nt(t) {\n var e = 0, n = 0, o = te();\n if (t)\n do {\n var r = ye(t), i = r.a, a = r.d;\n e += t.scrollLeft * i, n += t.scrollTop * a;\n } while (t !== o && (t = t.parentNode));\n return [e, n];\n}\nfunction Mn(t, e) {\n for (var n in t)\n if (t.hasOwnProperty(n)) {\n for (var o in e)\n if (e.hasOwnProperty(o) && e[o] === t[n][o])\n return Number(n);\n }\n return -1;\n}\nfunction ce(t, e) {\n if (!t || !t.getBoundingClientRect)\n return te();\n var n = t, o = !1;\n do\n if (n.clientWidth < n.scrollWidth || n.clientHeight < n.scrollHeight) {\n var r = h(n);\n if (n.clientWidth < n.scrollWidth && (r.overflowX == \"auto\" || r.overflowX == \"scroll\") || n.clientHeight < n.scrollHeight && (r.overflowY == \"auto\" || r.overflowY == \"scroll\")) {\n if (!n.getBoundingClientRect || n === document.body)\n return te();\n if (o || e)\n return n;\n o = !0;\n }\n }\n while (n = n.parentNode);\n return te();\n}\nfunction Fn(t, e) {\n if (t && e)\n for (var n in e)\n e.hasOwnProperty(n) && (t[n] = e[n]);\n return t;\n}\nfunction Je(t, e) {\n return Math.round(t.top) === Math.round(e.top) && Math.round(t.left) === Math.round(e.left) && Math.round(t.height) === Math.round(e.height) && Math.round(t.width) === Math.round(e.width);\n}\nvar Ce;\nfunction zt(t, e) {\n return function() {\n if (!Ce) {\n var n = arguments, o = this;\n n.length === 1 ? t.call(o, n[0]) : t.apply(o, n), Ce = setTimeout(function() {\n Ce = void 0;\n }, e);\n }\n };\n}\nfunction Rn() {\n clearTimeout(Ce), Ce = void 0;\n}\nfunction Ut(t, e, n) {\n t.scrollLeft += e, t.scrollTop += n;\n}\nfunction Vt(t) {\n var e = window.Polymer, n = window.jQuery || window.Zepto;\n return e && e.dom ? e.dom(t).cloneNode(!0) : n ? n(t).clone(!0)[0] : t.cloneNode(!0);\n}\nfunction $t(t, e, n) {\n var o = {};\n return Array.from(t.children).forEach(function(r) {\n var i, a, l, s;\n if (!(!Q(r, e.draggable, t, !1) || r.animated || r === n)) {\n var u = P(r);\n o.left = Math.min((i = o.left) !== null && i !== void 0 ? i : 1 / 0, u.left), o.top = Math.min((a = o.top) !== null && a !== void 0 ? a : 1 / 0, u.top), o.right = Math.max((l = o.right) !== null && l !== void 0 ? l : -1 / 0, u.right), o.bottom = Math.max((s = o.bottom) !== null && s !== void 0 ? s : -1 / 0, u.bottom);\n }\n }), o.width = o.right - o.left, o.height = o.bottom - o.top, o.x = o.left, o.y = o.top, o;\n}\nvar q = \"Sortable\" + (/* @__PURE__ */ new Date()).getTime();\nfunction Xn() {\n var t = [], e;\n return {\n captureAnimationState: function() {\n if (t = [], !!this.options.animation) {\n var o = [].slice.call(this.el.children);\n o.forEach(function(r) {\n if (!(h(r, \"display\") === \"none\" || r === p.ghost)) {\n t.push({\n target: r,\n rect: P(r)\n });\n var i = ne({}, t[t.length - 1].rect);\n if (r.thisAnimationDuration) {\n var a = ye(r, !0);\n a && (i.top -= a.f, i.left -= a.e);\n }\n r.fromRect = i;\n }\n });\n }\n },\n addAnimationState: function(o) {\n t.push(o);\n },\n removeAnimationState: function(o) {\n t.splice(Mn(t, {\n target: o\n }), 1);\n },\n animateAll: function(o) {\n var r = this;\n if (!this.options.animation) {\n clearTimeout(e), typeof o == \"function\" && o();\n return;\n }\n var i = !1, a = 0;\n t.forEach(function(l) {\n var s = 0, u = l.target, d = u.fromRect, f = P(u), m = u.prevFromRect, y = u.prevToRect, b = l.rect, w = ye(u, !0);\n w && (f.top -= w.f, f.left -= w.e), u.toRect = f, u.thisAnimationDuration && Je(m, f) && !Je(d, f) && // Make sure animatingRect is on line between toRect & fromRect\n (b.top - f.top) / (b.left - f.left) === (d.top - f.top) / (d.left - f.left) && (s = Bn(b, m, y, r.options)), Je(f, d) || (u.prevFromRect = d, u.prevToRect = f, s || (s = r.options.animation), r.animate(u, b, f, s)), s && (i = !0, a = Math.max(a, s), clearTimeout(u.animationResetTimer), u.animationResetTimer = setTimeout(function() {\n u.animationTime = 0, u.prevFromRect = null, u.fromRect = null, u.prevToRect = null, u.thisAnimationDuration = null;\n }, s), u.thisAnimationDuration = s);\n }), clearTimeout(e), i ? e = setTimeout(function() {\n typeof o == \"function\" && o();\n }, a) : typeof o == \"function\" && o(), t = [];\n },\n animate: function(o, r, i, a) {\n if (a) {\n h(o, \"transition\", \"\"), h(o, \"transform\", \"\");\n var l = ye(this.el), s = l && l.a, u = l && l.d, d = (r.left - i.left) / (s || 1), f = (r.top - i.top) / (u || 1);\n o.animatingX = !!d, o.animatingY = !!f, h(o, \"transform\", \"translate3d(\" + d + \"px,\" + f + \"px,0)\"), this.forRepaintDummy = Yn(o), h(o, \"transition\", \"transform \" + a + \"ms\" + (this.options.easing ? \" \" + this.options.easing : \"\")), h(o, \"transform\", \"translate3d(0,0,0)\"), typeof o.animated == \"number\" && clearTimeout(o.animated), o.animated = setTimeout(function() {\n h(o, \"transition\", \"\"), h(o, \"transform\", \"\"), o.animated = !1, o.animatingX = !1, o.animatingY = !1;\n }, a);\n }\n }\n };\n}\nfunction Yn(t) {\n return t.offsetWidth;\n}\nfunction Bn(t, e, n, o) {\n return Math.sqrt(Math.pow(e.top - t.top, 2) + Math.pow(e.left - t.left, 2)) / Math.sqrt(Math.pow(e.top - n.top, 2) + Math.pow(e.left - n.left, 2)) * o.animation;\n}\nvar ge = [], Ze = {\n initializeByDefault: !0\n}, Ne = {\n mount: function(e) {\n for (var n in Ze)\n Ze.hasOwnProperty(n) && !(n in e) && (e[n] = Ze[n]);\n ge.forEach(function(o) {\n if (o.pluginName === e.pluginName)\n throw \"Sortable: Cannot mount plugin \".concat(e.pluginName, \" more than once\");\n }), ge.push(e);\n },\n pluginEvent: function(e, n, o) {\n var r = this;\n this.eventCanceled = !1, o.cancel = function() {\n r.eventCanceled = !0;\n };\n var i = e + \"Global\";\n ge.forEach(function(a) {\n n[a.pluginName] && (n[a.pluginName][i] && n[a.pluginName][i](ne({\n sortable: n\n }, o)), n.options[a.pluginName] && n[a.pluginName][e] && n[a.pluginName][e](ne({\n sortable: n\n }, o)));\n });\n },\n initializePlugins: function(e, n, o, r) {\n ge.forEach(function(l) {\n var s = l.pluginName;\n if (!(!e.options[s] && !l.initializeByDefault)) {\n var u = new l(e, n, e.options);\n u.sortable = e, u.options = e.options, e[s] = u, ie(o, u.defaults);\n }\n });\n for (var i in e.options)\n if (e.options.hasOwnProperty(i)) {\n var a = this.modifyOption(e, i, e.options[i]);\n typeof a != \"undefined\" && (e.options[i] = a);\n }\n },\n getEventProperties: function(e, n) {\n var o = {};\n return ge.forEach(function(r) {\n typeof r.eventProperties == \"function\" && ie(o, r.eventProperties.call(n[r.pluginName], e));\n }), o;\n },\n modifyOption: function(e, n, o) {\n var r;\n return ge.forEach(function(i) {\n e[i.pluginName] && i.optionListeners && typeof i.optionListeners[n] == \"function\" && (r = i.optionListeners[n].call(e[i.pluginName], o));\n }), r;\n }\n};\nfunction kn(t) {\n var e = t.sortable, n = t.rootEl, o = t.name, r = t.targetEl, i = t.cloneEl, a = t.toEl, l = t.fromEl, s = t.oldIndex, u = t.newIndex, d = t.oldDraggableIndex, f = t.newDraggableIndex, m = t.originalEvent, y = t.putSortable, b = t.extraEventProperties;\n if (e = e || n && n[q], !!e) {\n var w, L = e.options, G = \"on\" + o.charAt(0).toUpperCase() + o.substr(1);\n window.CustomEvent && !ae && !xe ? w = new CustomEvent(o, {\n bubbles: !0,\n cancelable: !0\n }) : (w = document.createEvent(\"Event\"), w.initEvent(o, !0, !0)), w.to = a || n, w.from = l || n, w.item = r || n, w.clone = i, w.oldIndex = s, w.newIndex = u, w.oldDraggableIndex = d, w.newDraggableIndex = f, w.originalEvent = m, w.pullMode = y ? y.lastPutMode : void 0;\n var R = ne(ne({}, b), Ne.getEventProperties(o, e));\n for (var j in R)\n w[j] = R[j];\n n && n.dispatchEvent(w), L[G] && L[G].call(e, w);\n }\n}\nvar Hn = [\"evt\"], z = function(e, n) {\n var o = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, r = o.evt, i = xn(o, Hn);\n Ne.pluginEvent.bind(p)(e, n, ne({\n dragEl: c,\n parentEl: O,\n ghostEl: g,\n rootEl: T,\n nextEl: pe,\n lastDownEl: Be,\n cloneEl: C,\n cloneHidden: ue,\n dragStarted: Se,\n putSortable: Y,\n activeSortable: p.active,\n originalEvent: r,\n oldIndex: be,\n oldDraggableIndex: Oe,\n newIndex: $,\n newDraggableIndex: se,\n hideGhostForTarget: Zt,\n unhideGhostForTarget: Qt,\n cloneNowHidden: function() {\n ue = !0;\n },\n cloneNowShown: function() {\n ue = !1;\n },\n dispatchSortableEvent: function(l) {\n W({\n sortable: n,\n name: l,\n originalEvent: r\n });\n }\n }, i));\n};\nfunction W(t) {\n kn(ne({\n putSortable: Y,\n cloneEl: C,\n targetEl: c,\n rootEl: T,\n oldIndex: be,\n oldDraggableIndex: Oe,\n newIndex: $,\n newDraggableIndex: se\n }, t));\n}\nvar c, O, g, T, pe, Be, C, ue, be, $, Oe, se, Me, Y, ve = !1, Ge = !1, je = [], de, Z, Qe, et, Pt, Mt, Se, me, Ie, Ae = !1, Fe = !1, ke, H, tt = [], lt = !1, ze = [], Ve = typeof document != \"undefined\", Re = Lt, Ft = xe || ae ? \"cssFloat\" : \"float\", Ln = Ve && !Wt && !Lt && \"draggable\" in document.createElement(\"div\"), qt = function() {\n if (Ve) {\n if (ae)\n return !1;\n var t = document.createElement(\"x\");\n return t.style.cssText = \"pointer-events:auto\", t.style.pointerEvents === \"auto\";\n }\n}(), Kt = function(e, n) {\n var o = h(e), r = parseInt(o.width) - parseInt(o.paddingLeft) - parseInt(o.paddingRight) - parseInt(o.borderLeftWidth) - parseInt(o.borderRightWidth), i = we(e, 0, n), a = we(e, 1, n), l = i && h(i), s = a && h(a), u = l && parseInt(l.marginLeft) + parseInt(l.marginRight) + P(i).width, d = s && parseInt(s.marginLeft) + parseInt(s.marginRight) + P(a).width;\n if (o.display === \"flex\")\n return o.flexDirection === \"column\" || o.flexDirection === \"column-reverse\" ? \"vertical\" : \"horizontal\";\n if (o.display === \"grid\")\n return o.gridTemplateColumns.split(\" \").length <= 1 ? \"vertical\" : \"horizontal\";\n if (i && l.float && l.float !== \"none\") {\n var f = l.float === \"left\" ? \"left\" : \"right\";\n return a && (s.clear === \"both\" || s.clear === f) ? \"vertical\" : \"horizontal\";\n }\n return i && (l.display === \"block\" || l.display === \"flex\" || l.display === \"table\" || l.display === \"grid\" || u >= r && o[Ft] === \"none\" || a && o[Ft] === \"none\" && u + d > r) ? \"vertical\" : \"horizontal\";\n}, Wn = function(e, n, o) {\n var r = o ? e.left : e.top, i = o ? e.right : e.bottom, a = o ? e.width : e.height, l = o ? n.left : n.top, s = o ? n.right : n.bottom, u = o ? n.width : n.height;\n return r === l || i === s || r + a / 2 === l + u / 2;\n}, Gn = function(e, n) {\n var o;\n return je.some(function(r) {\n var i = r[q].options.emptyInsertThreshold;\n if (!(!i || ht(r))) {\n var a = P(r), l = e >= a.left - i && e <= a.right + i, s = n >= a.top - i && n <= a.bottom + i;\n if (l && s)\n return o = r;\n }\n }), o;\n}, Jt = function(e) {\n function n(i, a) {\n return function(l, s, u, d) {\n var f = l.options.group.name && s.options.group.name && l.options.group.name === s.options.group.name;\n if (i == null && (a || f))\n return !0;\n if (i == null || i === !1)\n return !1;\n if (a && i === \"clone\")\n return i;\n if (typeof i == \"function\")\n return n(i(l, s, u, d), a)(l, s, u, d);\n var m = (a ? l : s).options.group.name;\n return i === !0 || typeof i == \"string\" && i === m || i.join && i.indexOf(m) > -1;\n };\n }\n var o = {}, r = e.group;\n (!r || Ye(r) != \"object\") && (r = {\n name: r\n }), o.name = r.name, o.checkPull = n(r.pull, !0), o.checkPut = n(r.put), o.revertClone = r.revertClone, e.group = o;\n}, Zt = function() {\n !qt && g && h(g, \"display\", \"none\");\n}, Qt = function() {\n !qt && g && h(g, \"display\", \"\");\n};\nVe && !Wt && document.addEventListener(\"click\", function(t) {\n if (Ge)\n return t.preventDefault(), t.stopPropagation && t.stopPropagation(), t.stopImmediatePropagation && t.stopImmediatePropagation(), Ge = !1, !1;\n}, !0);\nvar he = function(e) {\n if (c) {\n e = e.touches ? e.touches[0] : e;\n var n = Gn(e.clientX, e.clientY);\n if (n) {\n var o = {};\n for (var r in e)\n e.hasOwnProperty(r) && (o[r] = e[r]);\n o.target = o.rootEl = n, o.preventDefault = void 0, o.stopPropagation = void 0, n[q]._onDragOver(o);\n }\n }\n}, jn = function(e) {\n c && c.parentNode[q]._isOutsideThisEl(e.target);\n};\nfunction p(t, e) {\n if (!(t && t.nodeType && t.nodeType === 1))\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(t));\n this.el = t, this.options = e = ie({}, e), t[q] = this;\n var n = {\n group: null,\n sort: !0,\n disabled: !1,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(t.nodeName) ? \">li\" : \">*\",\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: !1,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: !0,\n direction: function() {\n return Kt(t, this.options);\n },\n ghostClass: \"sortable-ghost\",\n chosenClass: \"sortable-chosen\",\n dragClass: \"sortable-drag\",\n ignore: \"a, img\",\n filter: null,\n preventOnFilter: !0,\n animation: 0,\n easing: null,\n setData: function(a, l) {\n a.setData(\"Text\", l.textContent);\n },\n dropBubble: !1,\n dragoverBubble: !1,\n dataIdAttr: \"data-id\",\n delay: 0,\n delayOnTouchOnly: !1,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: !1,\n fallbackClass: \"sortable-fallback\",\n fallbackOnBody: !1,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: p.supportPointer !== !1 && \"PointerEvent\" in window && !Te,\n emptyInsertThreshold: 5\n };\n Ne.initializePlugins(this, t, n);\n for (var o in n)\n !(o in e) && (e[o] = n[o]);\n Jt(e);\n for (var r in this)\n r.charAt(0) === \"_\" && typeof this[r] == \"function\" && (this[r] = this[r].bind(this));\n this.nativeDraggable = e.forceFallback ? !1 : Ln, this.nativeDraggable && (this.options.touchStartThreshold = 1), e.supportPointer ? S(t, \"pointerdown\", this._onTapStart) : (S(t, \"mousedown\", this._onTapStart), S(t, \"touchstart\", this._onTapStart)), this.nativeDraggable && (S(t, \"dragover\", this), S(t, \"dragenter\", this)), je.push(this.el), e.store && e.store.get && this.sort(e.store.get(this) || []), ie(this, Xn());\n}\np.prototype = /** @lends Sortable.prototype */\n{\n constructor: p,\n _isOutsideThisEl: function(e) {\n !this.el.contains(e) && e !== this.el && (me = null);\n },\n _getDirection: function(e, n) {\n return typeof this.options.direction == \"function\" ? this.options.direction.call(this, e, n, c) : this.options.direction;\n },\n _onTapStart: function(e) {\n if (e.cancelable) {\n var n = this, o = this.el, r = this.options, i = r.preventOnFilter, a = e.type, l = e.touches && e.touches[0] || e.pointerType && e.pointerType === \"touch\" && e, s = (l || e).target, u = e.target.shadowRoot && (e.path && e.path[0] || e.composedPath && e.composedPath()[0]) || s, d = r.filter;\n if (Zn(o), !c && !(/mousedown|pointerdown/.test(a) && e.button !== 0 || r.disabled) && !u.isContentEditable && !(!this.nativeDraggable && Te && s && s.tagName.toUpperCase() === \"SELECT\") && (s = Q(s, r.draggable, o, !1), !(s && s.animated) && Be !== s)) {\n if (be = J(s), Oe = J(s, r.draggable), typeof d == \"function\") {\n if (d.call(this, e, s, this)) {\n W({\n sortable: n,\n rootEl: u,\n name: \"filter\",\n targetEl: s,\n toEl: o,\n fromEl: o\n }), z(\"filter\", n, {\n evt: e\n }), i && e.cancelable && e.preventDefault();\n return;\n }\n } else if (d && (d = d.split(\",\").some(function(f) {\n if (f = Q(u, f.trim(), o, !1), f)\n return W({\n sortable: n,\n rootEl: f,\n name: \"filter\",\n targetEl: s,\n fromEl: o,\n toEl: o\n }), z(\"filter\", n, {\n evt: e\n }), !0;\n }), d)) {\n i && e.cancelable && e.preventDefault();\n return;\n }\n r.handle && !Q(u, r.handle, o, !1) || this._prepareDragStart(e, l, s);\n }\n }\n },\n _prepareDragStart: function(e, n, o) {\n var r = this, i = r.el, a = r.options, l = i.ownerDocument, s;\n if (o && !c && o.parentNode === i) {\n var u = P(o);\n if (T = i, c = o, O = c.parentNode, pe = c.nextSibling, Be = o, Me = a.group, p.dragged = c, de = {\n target: c,\n clientX: (n || e).clientX,\n clientY: (n || e).clientY\n }, Pt = de.clientX - u.left, Mt = de.clientY - u.top, this._lastX = (n || e).clientX, this._lastY = (n || e).clientY, c.style[\"will-change\"] = \"all\", s = function() {\n if (z(\"delayEnded\", r, {\n evt: e\n }), p.eventCanceled) {\n r._onDrop();\n return;\n }\n r._disableDelayedDragEvents(), !It && r.nativeDraggable && (c.draggable = !0), r._triggerDragStart(e, n), W({\n sortable: r,\n name: \"choose\",\n originalEvent: e\n }), V(c, a.chosenClass, !0);\n }, a.ignore.split(\",\").forEach(function(d) {\n jt(c, d.trim(), nt);\n }), S(l, \"dragover\", he), S(l, \"mousemove\", he), S(l, \"touchmove\", he), S(l, \"mouseup\", r._onDrop), S(l, \"touchend\", r._onDrop), S(l, \"touchcancel\", r._onDrop), It && this.nativeDraggable && (this.options.touchStartThreshold = 4, c.draggable = !0), z(\"delayStart\", this, {\n evt: e\n }), a.delay && (!a.delayOnTouchOnly || n) && (!this.nativeDraggable || !(xe || ae))) {\n if (p.eventCanceled) {\n this._onDrop();\n return;\n }\n S(l, \"mouseup\", r._disableDelayedDrag), S(l, \"touchend\", r._disableDelayedDrag), S(l, \"touchcancel\", r._disableDelayedDrag), S(l, \"mousemove\", r._delayedDragTouchMoveHandler), S(l, \"touchmove\", r._delayedDragTouchMoveHandler), a.supportPointer && S(l, \"pointermove\", r._delayedDragTouchMoveHandler), r._dragStartTimer = setTimeout(s, a.delay);\n } else\n s();\n }\n },\n _delayedDragTouchMoveHandler: function(e) {\n var n = e.touches ? e.touches[0] : e;\n Math.max(Math.abs(n.clientX - this._lastX), Math.abs(n.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1)) && this._disableDelayedDrag();\n },\n _disableDelayedDrag: function() {\n c && nt(c), clearTimeout(this._dragStartTimer), this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function() {\n var e = this.el.ownerDocument;\n E(e, \"mouseup\", this._disableDelayedDrag), E(e, \"touchend\", this._disableDelayedDrag), E(e, \"touchcancel\", this._disableDelayedDrag), E(e, \"mousemove\", this._delayedDragTouchMoveHandler), E(e, \"touchmove\", this._delayedDragTouchMoveHandler), E(e, \"pointermove\", this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function(e, n) {\n n = n || e.pointerType == \"touch\" && e, !this.nativeDraggable || n ? this.options.supportPointer ? S(document, \"pointermove\", this._onTouchMove) : n ? S(document, \"touchmove\", this._onTouchMove) : S(document, \"mousemove\", this._onTouchMove) : (S(c, \"dragend\", this), S(T, \"dragstart\", this._onDragStart));\n try {\n document.selection ? He(function() {\n document.selection.empty();\n }) : window.getSelection().removeAllRanges();\n } catch (o) {\n }\n },\n _dragStarted: function(e, n) {\n if (ve = !1, T && c) {\n z(\"dragStarted\", this, {\n evt: n\n }), this.nativeDraggable && S(document, \"dragover\", jn);\n var o = this.options;\n !e && V(c, o.dragClass, !1), V(c, o.ghostClass, !0), p.active = this, e && this._appendGhost(), W({\n sortable: this,\n name: \"start\",\n originalEvent: n\n });\n } else\n this._nulling();\n },\n _emulateDragOver: function() {\n if (Z) {\n this._lastX = Z.clientX, this._lastY = Z.clientY, Zt();\n for (var e = document.elementFromPoint(Z.clientX, Z.clientY), n = e; e && e.shadowRoot && (e = e.shadowRoot.elementFromPoint(Z.clientX, Z.clientY), e !== n); )\n n = e;\n if (c.parentNode[q]._isOutsideThisEl(e), n)\n do {\n if (n[q]) {\n var o = void 0;\n if (o = n[q]._onDragOver({\n clientX: Z.clientX,\n clientY: Z.clientY,\n target: e,\n rootEl: n\n }), o && !this.options.dragoverBubble)\n break;\n }\n e = n;\n } while (n = n.parentNode);\n Qt();\n }\n },\n _onTouchMove: function(e) {\n if (de) {\n var n = this.options, o = n.fallbackTolerance, r = n.fallbackOffset, i = e.touches ? e.touches[0] : e, a = g && ye(g, !0), l = g && a && a.a, s = g && a && a.d, u = Re && H && Nt(H), d = (i.clientX - de.clientX + r.x) / (l || 1) + (u ? u[0] - tt[0] : 0) / (l || 1), f = (i.clientY - de.clientY + r.y) / (s || 1) + (u ? u[1] - tt[1] : 0) / (s || 1);\n if (!p.active && !ve) {\n if (o && Math.max(Math.abs(i.clientX - this._lastX), Math.abs(i.clientY - this._lastY)) < o)\n return;\n this._onDragStart(e, !0);\n }\n if (g) {\n a ? (a.e += d - (Qe || 0), a.f += f - (et || 0)) : a = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: d,\n f\n };\n var m = \"matrix(\".concat(a.a, \",\").concat(a.b, \",\").concat(a.c, \",\").concat(a.d, \",\").concat(a.e, \",\").concat(a.f, \")\");\n h(g, \"webkitTransform\", m), h(g, \"mozTransform\", m), h(g, \"msTransform\", m), h(g, \"transform\", m), Qe = d, et = f, Z = i;\n }\n e.cancelable && e.preventDefault();\n }\n },\n _appendGhost: function() {\n if (!g) {\n var e = this.options.fallbackOnBody ? document.body : T, n = P(c, !0, Re, !0, e), o = this.options;\n if (Re) {\n for (H = e; h(H, \"position\") === \"static\" && h(H, \"transform\") === \"none\" && H !== document; )\n H = H.parentNode;\n H !== document.body && H !== document.documentElement ? (H === document && (H = te()), n.top += H.scrollTop, n.left += H.scrollLeft) : H = te(), tt = Nt(H);\n }\n g = c.cloneNode(!0), V(g, o.ghostClass, !1), V(g, o.fallbackClass, !0), V(g, o.dragClass, !0), h(g, \"transition\", \"\"), h(g, \"transform\", \"\"), h(g, \"box-sizing\", \"border-box\"), h(g, \"margin\", 0), h(g, \"top\", n.top), h(g, \"left\", n.left), h(g, \"width\", n.width), h(g, \"height\", n.height), h(g, \"opacity\", \"0.8\"), h(g, \"position\", Re ? \"absolute\" : \"fixed\"), h(g, \"zIndex\", \"100000\"), h(g, \"pointerEvents\", \"none\"), p.ghost = g, e.appendChild(g), h(g, \"transform-origin\", Pt / parseInt(g.style.width) * 100 + \"% \" + Mt / parseInt(g.style.height) * 100 + \"%\");\n }\n },\n _onDragStart: function(e, n) {\n var o = this, r = e.dataTransfer, i = o.options;\n if (z(\"dragStart\", this, {\n evt: e\n }), p.eventCanceled) {\n this._onDrop();\n return;\n }\n z(\"setupClone\", this), p.eventCanceled || (C = Vt(c), C.removeAttribute(\"id\"), C.draggable = !1, C.style[\"will-change\"] = \"\", this._hideClone(), V(C, this.options.chosenClass, !1), p.clone = C), o.cloneId = He(function() {\n z(\"clone\", o), !p.eventCanceled && (o.options.removeCloneOnHide || T.insertBefore(C, c), o._hideClone(), W({\n sortable: o,\n name: \"clone\"\n }));\n }), !n && V(c, i.dragClass, !0), n ? (Ge = !0, o._loopId = setInterval(o._emulateDragOver, 50)) : (E(document, \"mouseup\", o._onDrop), E(document, \"touchend\", o._onDrop), E(document, \"touchcancel\", o._onDrop), r && (r.effectAllowed = \"move\", i.setData && i.setData.call(o, r, c)), S(document, \"drop\", o), h(c, \"transform\", \"translateZ(0)\")), ve = !0, o._dragStartId = He(o._dragStarted.bind(o, n, e)), S(document, \"selectstart\", o), Se = !0, Te && h(document.body, \"user-select\", \"none\");\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function(e) {\n var n = this.el, o = e.target, r, i, a, l = this.options, s = l.group, u = p.active, d = Me === s, f = l.sort, m = Y || u, y, b = this, w = !1;\n if (lt)\n return;\n function L(ee, Ee) {\n z(ee, b, ne({\n evt: e,\n isOwner: d,\n axis: y ? \"vertical\" : \"horizontal\",\n revert: a,\n dragRect: r,\n targetRect: i,\n canSort: f,\n fromSortable: m,\n target: o,\n completed: R,\n onMove: function(vt, rn) {\n return Xe(T, n, c, r, vt, P(vt), e, rn);\n },\n changed: j\n }, Ee));\n }\n function G() {\n L(\"dragOverAnimationCapture\"), b.captureAnimationState(), b !== m && m.captureAnimationState();\n }\n function R(ee) {\n return L(\"dragOverCompleted\", {\n insertion: ee\n }), ee && (d ? u._hideClone() : u._showClone(b), b !== m && (V(c, Y ? Y.options.ghostClass : u.options.ghostClass, !1), V(c, l.ghostClass, !0)), Y !== b && b !== p.active ? Y = b : b === p.active && Y && (Y = null), m === b && (b._ignoreWhileAnimating = o), b.animateAll(function() {\n L(\"dragOverAnimationComplete\"), b._ignoreWhileAnimating = null;\n }), b !== m && (m.animateAll(), m._ignoreWhileAnimating = null)), (o === c && !c.animated || o === n && !o.animated) && (me = null), !l.dragoverBubble && !e.rootEl && o !== document && (c.parentNode[q]._isOutsideThisEl(e.target), !ee && he(e)), !l.dragoverBubble && e.stopPropagation && e.stopPropagation(), w = !0;\n }\n function j() {\n $ = J(c), se = J(c, l.draggable), W({\n sortable: b,\n name: \"change\",\n toEl: n,\n newIndex: $,\n newDraggableIndex: se,\n originalEvent: e\n });\n }\n if (e.preventDefault !== void 0 && e.cancelable && e.preventDefault(), o = Q(o, l.draggable, n, !0), L(\"dragOver\"), p.eventCanceled)\n return w;\n if (c.contains(e.target) || o.animated && o.animatingX && o.animatingY || b._ignoreWhileAnimating === o)\n return R(!1);\n if (Ge = !1, u && !l.disabled && (d ? f || (a = O !== T) : Y === this || (this.lastPutMode = Me.checkPull(this, u, c, e)) && s.checkPut(this, u, c, e))) {\n if (y = this._getDirection(e, o) === \"vertical\", r = P(c), L(\"dragOverValid\"), p.eventCanceled)\n return w;\n if (a)\n return O = T, G(), this._hideClone(), L(\"revert\"), p.eventCanceled || (pe ? T.insertBefore(c, pe) : T.appendChild(c)), R(!0);\n var B = ht(n, l.draggable);\n if (!B || $n(e, y, this) && !B.animated) {\n if (B === c)\n return R(!1);\n if (B && n === e.target && (o = B), o && (i = P(o)), Xe(T, n, c, r, o, i, e, !!o) !== !1)\n return G(), B && B.nextSibling ? n.insertBefore(c, B.nextSibling) : n.appendChild(c), O = n, j(), R(!0);\n } else if (B && Vn(e, y, this)) {\n var X = we(n, 0, l, !0);\n if (X === c)\n return R(!1);\n if (o = X, i = P(o), Xe(T, n, c, r, o, i, e, !1) !== !1)\n return G(), n.insertBefore(c, X), O = n, j(), R(!0);\n } else if (o.parentNode === n) {\n i = P(o);\n var K = 0, oe, le = c.parentNode !== n, k = !Wn(c.animated && c.toRect || r, o.animated && o.toRect || i, y), v = y ? \"top\" : \"left\", D = xt(o, \"top\", \"top\") || xt(c, \"top\", \"top\"), A = D ? D.scrollTop : void 0;\n me !== o && (oe = i[v], Ae = !1, Fe = !k && l.invertSwap || le), K = qn(e, o, i, y, k ? 1 : l.swapThreshold, l.invertedSwapThreshold == null ? l.swapThreshold : l.invertedSwapThreshold, Fe, me === o);\n var I;\n if (K !== 0) {\n var _ = J(c);\n do\n _ -= K, I = O.children[_];\n while (I && (h(I, \"display\") === \"none\" || I === g));\n }\n if (K === 0 || I === o)\n return R(!1);\n me = o, Ie = K;\n var x = o.nextElementSibling, M = !1;\n M = K === 1;\n var F = Xe(T, n, c, r, o, i, e, M);\n if (F !== !1)\n return (F === 1 || F === -1) && (M = F === 1), lt = !0, setTimeout(Un, 30), G(), M && !x ? n.appendChild(c) : o.parentNode.insertBefore(c, M ? x : o), D && Ut(D, 0, A - D.scrollTop), O = c.parentNode, oe !== void 0 && !Fe && (ke = Math.abs(oe - P(o)[v])), j(), R(!0);\n }\n if (n.contains(c))\n return R(!1);\n }\n return !1;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function() {\n E(document, \"mousemove\", this._onTouchMove), E(document, \"touchmove\", this._onTouchMove), E(document, \"pointermove\", this._onTouchMove), E(document, \"dragover\", he), E(document, \"mousemove\", he), E(document, \"touchmove\", he);\n },\n _offUpEvents: function() {\n var e = this.el.ownerDocument;\n E(e, \"mouseup\", this._onDrop), E(e, \"touchend\", this._onDrop), E(e, \"pointerup\", this._onDrop), E(e, \"touchcancel\", this._onDrop), E(document, \"selectstart\", this);\n },\n _onDrop: function(e) {\n var n = this.el, o = this.options;\n if ($ = J(c), se = J(c, o.draggable), z(\"drop\", this, {\n evt: e\n }), O = c && c.parentNode, $ = J(c), se = J(c, o.draggable), p.eventCanceled) {\n this._nulling();\n return;\n }\n ve = !1, Fe = !1, Ae = !1, clearInterval(this._loopId), clearTimeout(this._dragStartTimer), st(this.cloneId), st(this._dragStartId), this.nativeDraggable && (E(document, \"drop\", this), E(n, \"dragstart\", this._onDragStart)), this._offMoveEvents(), this._offUpEvents(), Te && h(document.body, \"user-select\", \"\"), h(c, \"transform\", \"\"), e && (Se && (e.cancelable && e.preventDefault(), !o.dropBubble && e.stopPropagation()), g && g.parentNode && g.parentNode.removeChild(g), (T === O || Y && Y.lastPutMode !== \"clone\") && C && C.parentNode && C.parentNode.removeChild(C), c && (this.nativeDraggable && E(c, \"dragend\", this), nt(c), c.style[\"will-change\"] = \"\", Se && !ve && V(c, Y ? Y.options.ghostClass : this.options.ghostClass, !1), V(c, this.options.chosenClass, !1), W({\n sortable: this,\n name: \"unchoose\",\n toEl: O,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: e\n }), T !== O ? ($ >= 0 && (W({\n rootEl: O,\n name: \"add\",\n toEl: O,\n fromEl: T,\n originalEvent: e\n }), W({\n sortable: this,\n name: \"remove\",\n toEl: O,\n originalEvent: e\n }), W({\n rootEl: O,\n name: \"sort\",\n toEl: O,\n fromEl: T,\n originalEvent: e\n }), W({\n sortable: this,\n name: \"sort\",\n toEl: O,\n originalEvent: e\n })), Y && Y.save()) : $ !== be && $ >= 0 && (W({\n sortable: this,\n name: \"update\",\n toEl: O,\n originalEvent: e\n }), W({\n sortable: this,\n name: \"sort\",\n toEl: O,\n originalEvent: e\n })), p.active && (($ == null || $ === -1) && ($ = be, se = Oe), W({\n sortable: this,\n name: \"end\",\n toEl: O,\n originalEvent: e\n }), this.save()))), this._nulling();\n },\n _nulling: function() {\n z(\"nulling\", this), T = c = O = g = pe = C = Be = ue = de = Z = Se = $ = se = be = Oe = me = Ie = Y = Me = p.dragged = p.ghost = p.clone = p.active = null, ze.forEach(function(e) {\n e.checked = !0;\n }), ze.length = Qe = et = 0;\n },\n handleEvent: function(e) {\n switch (e.type) {\n case \"drop\":\n case \"dragend\":\n this._onDrop(e);\n break;\n case \"dragenter\":\n case \"dragover\":\n c && (this._onDragOver(e), zn(e));\n break;\n case \"selectstart\":\n e.preventDefault();\n break;\n }\n },\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function() {\n for (var e = [], n, o = this.el.children, r = 0, i = o.length, a = this.options; r < i; r++)\n n = o[r], Q(n, a.draggable, this.el, !1) && e.push(n.getAttribute(a.dataIdAttr) || Jn(n));\n return e;\n },\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function(e, n) {\n var o = {}, r = this.el;\n this.toArray().forEach(function(i, a) {\n var l = r.children[a];\n Q(l, this.options.draggable, r, !1) && (o[i] = l);\n }, this), n && this.captureAnimationState(), e.forEach(function(i) {\n o[i] && (r.removeChild(o[i]), r.appendChild(o[i]));\n }), n && this.animateAll();\n },\n /**\n * Save the current sorting\n */\n save: function() {\n var e = this.options.store;\n e && e.set && e.set(this);\n },\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function(e, n) {\n return Q(e, n || this.options.draggable, this.el, !1);\n },\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function(e, n) {\n var o = this.options;\n if (n === void 0)\n return o[e];\n var r = Ne.modifyOption(this, e, n);\n typeof r != \"undefined\" ? o[e] = r : o[e] = n, e === \"group\" && Jt(o);\n },\n /**\n * Destroy\n */\n destroy: function() {\n z(\"destroy\", this);\n var e = this.el;\n e[q] = null, E(e, \"mousedown\", this._onTapStart), E(e, \"touchstart\", this._onTapStart), E(e, \"pointerdown\", this._onTapStart), this.nativeDraggable && (E(e, \"dragover\", this), E(e, \"dragenter\", this)), Array.prototype.forEach.call(e.querySelectorAll(\"[draggable]\"), function(n) {\n n.removeAttribute(\"draggable\");\n }), this._onDrop(), this._disableDelayedDragEvents(), je.splice(je.indexOf(this.el), 1), this.el = e = null;\n },\n _hideClone: function() {\n if (!ue) {\n if (z(\"hideClone\", this), p.eventCanceled)\n return;\n h(C, \"display\", \"none\"), this.options.removeCloneOnHide && C.parentNode && C.parentNode.removeChild(C), ue = !0;\n }\n },\n _showClone: function(e) {\n if (e.lastPutMode !== \"clone\") {\n this._hideClone();\n return;\n }\n if (ue) {\n if (z(\"showClone\", this), p.eventCanceled)\n return;\n c.parentNode == T && !this.options.group.revertClone ? T.insertBefore(C, c) : pe ? T.insertBefore(C, pe) : T.appendChild(C), this.options.group.revertClone && this.animate(c, C), h(C, \"display\", \"\"), ue = !1;\n }\n }\n};\nfunction zn(t) {\n t.dataTransfer && (t.dataTransfer.dropEffect = \"move\"), t.cancelable && t.preventDefault();\n}\nfunction Xe(t, e, n, o, r, i, a, l) {\n var s, u = t[q], d = u.options.onMove, f;\n return window.CustomEvent && !ae && !xe ? s = new CustomEvent(\"move\", {\n bubbles: !0,\n cancelable: !0\n }) : (s = document.createEvent(\"Event\"), s.initEvent(\"move\", !0, !0)), s.to = e, s.from = t, s.dragged = n, s.draggedRect = o, s.related = r || e, s.relatedRect = i || P(e), s.willInsertAfter = l, s.originalEvent = a, t.dispatchEvent(s), d && (f = d.call(u, s, a)), f;\n}\nfunction nt(t) {\n t.draggable = !1;\n}\nfunction Un() {\n lt = !1;\n}\nfunction Vn(t, e, n) {\n var o = P(we(n.el, 0, n.options, !0)), r = $t(n.el, n.options, g), i = 10;\n return e ? t.clientX < r.left - i || t.clientY < o.top && t.clientX < o.right : t.clientY < r.top - i || t.clientY < o.bottom && t.clientX < o.left;\n}\nfunction $n(t, e, n) {\n var o = P(ht(n.el, n.options.draggable)), r = $t(n.el, n.options, g), i = 10;\n return e ? t.clientX > r.right + i || t.clientY > o.bottom && t.clientX > o.left : t.clientY > r.bottom + i || t.clientX > o.right && t.clientY > o.top;\n}\nfunction qn(t, e, n, o, r, i, a, l) {\n var s = o ? t.clientY : t.clientX, u = o ? n.height : n.width, d = o ? n.top : n.left, f = o ? n.bottom : n.right, m = !1;\n if (!a) {\n if (l && ke < u * r) {\n if (!Ae && (Ie === 1 ? s > d + u * i / 2 : s < f - u * i / 2) && (Ae = !0), Ae)\n m = !0;\n else if (Ie === 1 ? s < d + ke : s > f - ke)\n return -Ie;\n } else if (s > d + u * (1 - r) / 2 && s < f - u * (1 - r) / 2)\n return Kn(e);\n }\n return m = m || a, m && (s < d + u * i / 2 || s > f - u * i / 2) ? s > d + u / 2 ? 1 : -1 : 0;\n}\nfunction Kn(t) {\n return J(c) < J(t) ? 1 : -1;\n}\nfunction Jn(t) {\n for (var e = t.tagName + t.className + t.src + t.href + t.textContent, n = e.length, o = 0; n--; )\n o += e.charCodeAt(n);\n return o.toString(36);\n}\nfunction Zn(t) {\n ze.length = 0;\n for (var e = t.getElementsByTagName(\"input\"), n = e.length; n--; ) {\n var o = e[n];\n o.checked && ze.push(o);\n }\n}\nfunction He(t) {\n return setTimeout(t, 0);\n}\nfunction st(t) {\n return clearTimeout(t);\n}\nVe && S(document, \"touchmove\", function(t) {\n (p.active || ve) && t.cancelable && t.preventDefault();\n});\np.utils = {\n on: S,\n off: E,\n css: h,\n find: jt,\n is: function(e, n) {\n return !!Q(e, n, e, !1);\n },\n extend: Fn,\n throttle: zt,\n closest: Q,\n toggleClass: V,\n clone: Vt,\n index: J,\n nextTick: He,\n cancelNextTick: st,\n detectDirection: Kt,\n getChild: we\n};\np.get = function(t) {\n return t[q];\n};\np.mount = function() {\n for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++)\n e[n] = arguments[n];\n e[0].constructor === Array && (e = e[0]), e.forEach(function(o) {\n if (!o.prototype || !o.prototype.constructor)\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(o));\n o.utils && (p.utils = ne(ne({}, p.utils), o.utils)), Ne.mount(o);\n });\n};\np.create = function(t, e) {\n return new p(t, e);\n};\np.version = Nn;\nvar N = [], De, ut, ct = !1, ot, rt, Ue, _e;\nfunction Qn() {\n function t() {\n this.defaults = {\n scroll: !0,\n forceAutoScrollFallback: !1,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: !0\n };\n for (var e in this)\n e.charAt(0) === \"_\" && typeof this[e] == \"function\" && (this[e] = this[e].bind(this));\n }\n return t.prototype = {\n dragStarted: function(n) {\n var o = n.originalEvent;\n this.sortable.nativeDraggable ? S(document, \"dragover\", this._handleAutoScroll) : this.options.supportPointer ? S(document, \"pointermove\", this._handleFallbackAutoScroll) : o.touches ? S(document, \"touchmove\", this._handleFallbackAutoScroll) : S(document, \"mousemove\", this._handleFallbackAutoScroll);\n },\n dragOverCompleted: function(n) {\n var o = n.originalEvent;\n !this.options.dragOverBubble && !o.rootEl && this._handleAutoScroll(o);\n },\n drop: function() {\n this.sortable.nativeDraggable ? E(document, \"dragover\", this._handleAutoScroll) : (E(document, \"pointermove\", this._handleFallbackAutoScroll), E(document, \"touchmove\", this._handleFallbackAutoScroll), E(document, \"mousemove\", this._handleFallbackAutoScroll)), Rt(), Le(), Rn();\n },\n nulling: function() {\n Ue = ut = De = ct = _e = ot = rt = null, N.length = 0;\n },\n _handleFallbackAutoScroll: function(n) {\n this._handleAutoScroll(n, !0);\n },\n _handleAutoScroll: function(n, o) {\n var r = this, i = (n.touches ? n.touches[0] : n).clientX, a = (n.touches ? n.touches[0] : n).clientY, l = document.elementFromPoint(i, a);\n if (Ue = n, o || this.options.forceAutoScrollFallback || xe || ae || Te) {\n it(n, this.options, l, o);\n var s = ce(l, !0);\n ct && (!_e || i !== ot || a !== rt) && (_e && Rt(), _e = setInterval(function() {\n var u = ce(document.elementFromPoint(i, a), !0);\n u !== s && (s = u, Le()), it(n, r.options, u, o);\n }, 10), ot = i, rt = a);\n } else {\n if (!this.options.bubbleScroll || ce(l, !0) === te()) {\n Le();\n return;\n }\n it(n, this.options, ce(l, !1), !1);\n }\n }\n }, ie(t, {\n pluginName: \"scroll\",\n initializeByDefault: !0\n });\n}\nfunction Le() {\n N.forEach(function(t) {\n clearInterval(t.pid);\n }), N = [];\n}\nfunction Rt() {\n clearInterval(_e);\n}\nvar it = zt(function(t, e, n, o) {\n if (e.scroll) {\n var r = (t.touches ? t.touches[0] : t).clientX, i = (t.touches ? t.touches[0] : t).clientY, a = e.scrollSensitivity, l = e.scrollSpeed, s = te(), u = !1, d;\n ut !== n && (ut = n, Le(), De = e.scroll, d = e.scrollFn, De === !0 && (De = ce(n, !0)));\n var f = 0, m = De;\n do {\n var y = m, b = P(y), w = b.top, L = b.bottom, G = b.left, R = b.right, j = b.width, B = b.height, X = void 0, K = void 0, oe = y.scrollWidth, le = y.scrollHeight, k = h(y), v = y.scrollLeft, D = y.scrollTop;\n y === s ? (X = j < oe && (k.overflowX === \"auto\" || k.overflowX === \"scroll\" || k.overflowX === \"visible\"), K = B < le && (k.overflowY === \"auto\" || k.overflowY === \"scroll\" || k.overflowY === \"visible\")) : (X = j < oe && (k.overflowX === \"auto\" || k.overflowX === \"scroll\"), K = B < le && (k.overflowY === \"auto\" || k.overflowY === \"scroll\"));\n var A = X && (Math.abs(R - r) <= a && v + j < oe) - (Math.abs(G - r) <= a && !!v), I = K && (Math.abs(L - i) <= a && D + B < le) - (Math.abs(w - i) <= a && !!D);\n if (!N[f])\n for (var _ = 0; _ <= f; _++)\n N[_] || (N[_] = {});\n (N[f].vx != A || N[f].vy != I || N[f].el !== y) && (N[f].el = y, N[f].vx = A, N[f].vy = I, clearInterval(N[f].pid), (A != 0 || I != 0) && (u = !0, N[f].pid = setInterval(function() {\n o && this.layer === 0 && p.active._onTouchMove(Ue);\n var x = N[this.layer].vy ? N[this.layer].vy * l : 0, M = N[this.layer].vx ? N[this.layer].vx * l : 0;\n typeof d == \"function\" && d.call(p.dragged.parentNode[q], M, x, t, Ue, N[this.layer].el) !== \"continue\" || Ut(N[this.layer].el, M, x);\n }.bind({\n layer: f\n }), 24))), f++;\n } while (e.bubbleScroll && m !== s && (m = ce(m, !1)));\n ct = u;\n }\n}, 30), en = function(e) {\n var n = e.originalEvent, o = e.putSortable, r = e.dragEl, i = e.activeSortable, a = e.dispatchSortableEvent, l = e.hideGhostForTarget, s = e.unhideGhostForTarget;\n if (n) {\n var u = o || i;\n l();\n var d = n.changedTouches && n.changedTouches.length ? n.changedTouches[0] : n, f = document.elementFromPoint(d.clientX, d.clientY);\n s(), u && !u.el.contains(f) && (a(\"spill\"), this.onSpill({\n dragEl: r,\n putSortable: o\n }));\n }\n};\nfunction pt() {\n}\npt.prototype = {\n startIndex: null,\n dragStart: function(e) {\n var n = e.oldDraggableIndex;\n this.startIndex = n;\n },\n onSpill: function(e) {\n var n = e.dragEl, o = e.putSortable;\n this.sortable.captureAnimationState(), o && o.captureAnimationState();\n var r = we(this.sortable.el, this.startIndex, this.options);\n r ? this.sortable.el.insertBefore(n, r) : this.sortable.el.appendChild(n), this.sortable.animateAll(), o && o.animateAll();\n },\n drop: en\n};\nie(pt, {\n pluginName: \"revertOnSpill\"\n});\nfunction gt() {\n}\ngt.prototype = {\n onSpill: function(e) {\n var n = e.dragEl, o = e.putSortable, r = o || this.sortable;\n r.captureAnimationState(), n.parentNode && n.parentNode.removeChild(n), r.animateAll();\n },\n drop: en\n};\nie(gt, {\n pluginName: \"removeOnSpill\"\n});\np.mount(new Qn());\np.mount(gt, pt);\nfunction eo(t) {\n return t == null ? t : JSON.parse(JSON.stringify(t));\n}\nfunction to(t) {\n dt() && sn(t);\n}\nfunction no(t) {\n dt() ? un(t) : kt(t);\n}\nlet tn = null, nn = null;\nfunction Xt(t = null, e = null) {\n tn = t, nn = e;\n}\nfunction oo() {\n return {\n data: tn,\n clonedData: nn\n };\n}\nconst Yt = Symbol(\"cloneElement\");\nfunction on(...t) {\n var le, k;\n const e = (le = dt()) == null ? void 0 : le.proxy;\n let n = null;\n const o = t[0];\n let [, r, i] = t;\n Array.isArray(U(r)) || (i = r, r = null);\n let a = null;\n const {\n immediate: l = !0,\n clone: s = eo,\n forceFallback: u,\n fallbackOnBody: d,\n customUpdate: f\n } = (k = U(i)) != null ? k : {};\n function m(v) {\n var F;\n const { from: D, oldIndex: A, item: I } = v, _ = Array.from(D.childNodes);\n n = u && !d ? _.slice(0, -1) : _;\n const x = U((F = U(r)) == null ? void 0 : F[A]), M = s(x);\n Xt(x, M), I[Yt] = M;\n }\n function y(v) {\n const D = v.item[Yt];\n if (!wn(D)) {\n if (Ke(v.item), qe(r)) {\n const A = [...U(r)];\n r.value = _t(A, v.newDraggableIndex, D);\n return;\n }\n _t(U(r), v.newDraggableIndex, D);\n }\n }\n function b(v) {\n const { from: D, item: A, oldIndex: I, oldDraggableIndex: _, pullMode: x, clone: M } = v;\n if (Tt(D, A, I), x === \"clone\") {\n Ke(M);\n return;\n }\n if (qe(r)) {\n const F = [...U(r)];\n r.value = Dt(F, _);\n return;\n }\n Dt(U(r), _);\n }\n function w(v) {\n if (f) {\n f(v);\n return;\n }\n const { from: D, item: A, oldIndex: I, oldDraggableIndex: _, newDraggableIndex: x } = v;\n if (Ke(A), Tt(D, A, I), qe(r)) {\n const M = [...U(r)];\n r.value = St(\n M,\n _,\n x\n );\n return;\n }\n St(U(r), _, x);\n }\n function L(v) {\n const { newIndex: D, oldIndex: A, from: I, to: _ } = v;\n let x = null;\n const M = D === A && I === _;\n try {\n if (M) {\n let F = null;\n n == null || n.some((ee, Ee) => {\n if (F && (n == null ? void 0 : n.length) !== _.childNodes.length)\n return I.insertBefore(F, ee.nextSibling), !0;\n const mt = _.childNodes[Ee];\n F = _ == null ? void 0 : _.replaceChild(ee, mt);\n });\n }\n } catch (F) {\n x = F;\n } finally {\n n = null;\n }\n kt(() => {\n if (Xt(), x)\n throw x;\n });\n }\n const G = {\n onUpdate: w,\n onStart: m,\n onAdd: y,\n onRemove: b,\n onEnd: L\n };\n function R(v) {\n const D = U(o);\n return v || (v = En(D) ? Sn(D, e == null ? void 0 : e.$el) : D), v && !Tn(v) && (v = v.$el), v || vn(\"Root element not found\"), v;\n }\n function j() {\n var I;\n const _ = (I = U(i)) != null ? I : {}, { immediate: v, clone: D } = _, A = $e(_, [\"immediate\", \"clone\"]);\n return Ct(A, (x, M) => {\n Cn(x) && (A[x] = (F, ...ee) => {\n const Ee = oo();\n return On(F, Ee), M(F, ...ee);\n });\n }), _n(\n r === null ? {} : G,\n A\n );\n }\n const B = (v) => {\n v = R(v), a && X.destroy(), a = new p(v, j());\n };\n ln(\n () => i,\n () => {\n a && Ct(j(), (v, D) => {\n a == null || a.option(v, D);\n });\n },\n { deep: !0 }\n );\n const X = {\n option: (v, D) => a == null ? void 0 : a.option(v, D),\n destroy: () => {\n a == null || a.destroy(), a = null;\n },\n save: () => a == null ? void 0 : a.save(),\n toArray: () => a == null ? void 0 : a.toArray(),\n closest: (...v) => a == null ? void 0 : a.closest(...v)\n }, K = () => X == null ? void 0 : X.option(\"disabled\", !0), oe = () => X == null ? void 0 : X.option(\"disabled\", !1);\n return no(() => {\n l && B();\n }), to(X.destroy), fe({ start: B, pause: K, resume: oe }, X);\n}\nconst ft = [\n \"update\",\n \"start\",\n \"add\",\n \"remove\",\n \"choose\",\n \"unchoose\",\n \"end\",\n \"sort\",\n \"filter\",\n \"clone\",\n \"move\",\n \"change\"\n], ro = [\n \"clone\",\n \"animation\",\n \"ghostClass\",\n \"group\",\n \"sort\",\n \"disabled\",\n \"store\",\n \"handle\",\n \"draggable\",\n \"swapThreshold\",\n \"invertSwap\",\n \"invertedSwapThreshold\",\n \"removeCloneOnHide\",\n \"direction\",\n \"chosenClass\",\n \"dragClass\",\n \"ignore\",\n \"filter\",\n \"preventOnFilter\",\n \"easing\",\n \"setData\",\n \"dropBubble\",\n \"dragoverBubble\",\n \"dataIdAttr\",\n \"delay\",\n \"delayOnTouchOnly\",\n \"touchStartThreshold\",\n \"forceFallback\",\n \"fallbackClass\",\n \"fallbackOnBody\",\n \"fallbackTolerance\",\n \"fallbackOffset\",\n \"supportPointer\",\n \"emptyInsertThreshold\",\n \"scroll\",\n \"forceAutoScrollFallback\",\n \"scrollSensitivity\",\n \"scrollSpeed\",\n \"bubbleScroll\",\n \"modelValue\",\n \"tag\",\n \"target\",\n \"customUpdate\",\n ...ft.map((t) => `on${t.replace(/^\\S/, (e) => e.toUpperCase())}`)\n], lo = cn({\n name: \"VueDraggable\",\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: ro,\n emits: [\"update:modelValue\", ...ft],\n setup(t, { slots: e, emit: n, expose: o, attrs: r }) {\n const i = ft.reduce((d, f) => {\n const m = `on${f.replace(/^\\S/, (y) => y.toUpperCase())}`;\n return d[m] = (...y) => n(f, ...y), d;\n }, {}), a = Et(() => {\n const y = fn(t), { modelValue: d } = y, f = $e(y, [\"modelValue\"]), m = Object.entries(f).reduce((b, [w, L]) => {\n const G = U(L);\n return G !== void 0 && (b[w] = G), b;\n }, {});\n return fe(fe({}, i), yn(fe(fe({}, r), m)));\n }), l = Et({\n get: () => t.modelValue,\n set: (d) => n(\"update:modelValue\", d)\n }), s = dn(), u = hn(\n on(t.target || s, l, a)\n );\n return o(u), () => {\n var d;\n return pn(t.tag || \"div\", { ref: s }, (d = e == null ? void 0 : e.default) == null ? void 0 : d.call(e, u));\n };\n }\n}), Bt = {\n mounted: \"mounted\",\n unmounted: \"unmounted\"\n}, at = /* @__PURE__ */ new WeakMap(), so = {\n [Bt.mounted](t, e) {\n const n = gn(e.value) ? [e.value] : e.value, [o, r] = n, i = on(t, o, r);\n at.set(t, i.destroy);\n },\n [Bt.unmounted](t) {\n var e;\n (e = at.get(t)) == null || e(), at.delete(t);\n }\n};\nexport {\n lo as VueDraggable,\n on as useDraggable,\n so as vDraggable\n};\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport {\n CoButton,\n CoCheckbox,\n CoIconButton,\n CoInput,\n CoRating,\n CoSelect,\n CoSlider,\n CoSwitch,\n} from '@prolibu-suite/cobalt-vue';\nimport { FIELD_CATALOG } from '../fieldCatalog';\nimport { FIELD_DEFAULTS, useSchemaStore } from '../stores/schema';\nimport EditableText from './EditableText.vue';\n\nconst props = defineProps<{\n pageIdx: number;\n fieldName: string;\n}>();\n\nconst schema = useSchemaStore();\n\nconst def = computed<Record<string, any>>(\n () => schema.data.pages[props.pageIdx]?.fields[props.fieldName] ?? {},\n);\n\n/**\n * The field's catalog entry — used for the icon and the type switcher's\n * initial value. Mirrors the lookup in `FieldCard.vue`.\n */\nconst catalogEntry = computed(() => {\n const d = def.value;\n if (d.uiCom === 'TextArea') return FIELD_CATALOG.find((x) => x.id === 'textarea');\n if (d.uiCom === 'Rating') return FIELD_CATALOG.find((x) => x.id === 'rating');\n if (d.uiCom === 'Slider') return FIELD_CATALOG.find((x) => x.id === 'slider');\n if (d.uiCom === 'ColorPicker') return FIELD_CATALOG.find((x) => x.id === 'color');\n if (d.uiCom === 'Section') return FIELD_CATALOG.find((x) => x.id === 'section');\n if (d.uiCom === 'File') return FIELD_CATALOG.find((x) => x.id === 'file');\n if (d.uiCom === 'Ordering') return FIELD_CATALOG.find((x) => x.id === 'ordering');\n if (d.uiCom === 'Matching') return FIELD_CATALOG.find((x) => x.id === 'matching');\n if (d.uiCom === 'ImageRadioGroup') return FIELD_CATALOG.find((x) => x.id === 'image-choice');\n if (d.ref) return FIELD_CATALOG.find((x) => x.id === 'ref');\n if (Array.isArray(d.enum)) return FIELD_CATALOG.find((x) => x.id === 'select');\n if (d.type === 'Number') return FIELD_CATALOG.find((x) => x.id === 'number');\n if (d.type === 'Date') return FIELD_CATALOG.find((x) => x.id === 'date');\n if (d.type === 'Boolean') return FIELD_CATALOG.find((x) => x.id === 'boolean');\n return FIELD_CATALOG.find((x) => x.id === 'text');\n});\n\nconst kind = computed(() => catalogEntry.value?.id ?? 'text');\n\n// In quiz mode, only show quiz-allowed field types in the type switcher.\nconst TYPE_OPTIONS = computed(() => {\n const isQuiz = schema.data.mode === 'quiz';\n const source = isQuiz ? FIELD_CATALOG.filter((c) => c.quizAllowed) : FIELD_CATALOG;\n return source.map((c) => ({\n label: isQuiz && c.quizLabel ? c.quizLabel : c.label,\n value: c.id,\n }));\n});\n\n// ── Event detail normalizer (Cobalt mixes `value` vs `checked` vs raw) ────\nfunction detailValue(ev: CustomEvent): any {\n const d = ev.detail;\n if (d != null && typeof d === 'object' && 'value' in d) return (d as any).value;\n if (d != null && typeof d === 'object' && 'checked' in d) return (d as any).checked;\n return d;\n}\n\n// ── Patches ──────────────────────────────────────────────────────────────\n\nfunction patch(key: string, value: any): void {\n schema.updateField(props.pageIdx, props.fieldName, { [key]: value });\n}\n\nfunction onRename(newName: string): void {\n if (!newName || newName === props.fieldName) return;\n try {\n schema.renameField(props.pageIdx, props.fieldName, newName);\n } catch (err) {\n // EditableText resyncs on next prop change; swallow + warn.\n console.warn('[builder] rename failed:', (err as Error).message);\n }\n}\n\nfunction collapse(): void {\n // Selecting the page deselects the field → collapses this card.\n schema.selectPage(props.pageIdx);\n}\n\nfunction duplicate(): void {\n schema.duplicateField(props.pageIdx, props.fieldName);\n}\n\nfunction remove(): void {\n schema.removeField(props.pageIdx, props.fieldName);\n}\n\n// ── Type switcher with attribute migration ───────────────────────────────\n\n/** Keys preserved across type changes — user-facing config that's portable. */\nconst PRESERVED_KEYS = [\n 'label',\n 'required',\n 'helperText',\n 'placeholder',\n 'full',\n 'hidden',\n 'disabled',\n 'readOnly',\n 'visibleIf',\n 'enableIf',\n 'requiredIf',\n // Quiz-mode metadata — preserved across type changes.\n 'correctOptions',\n 'correctValue',\n 'correctOrder',\n 'correctPairs',\n 'optionImages',\n 'matchLeft',\n 'matchRight',\n 'multiSelect',\n 'points',\n 'explanation',\n 'sampleAnswer',\n] as const;\n\nfunction changeType(newKind: string): void {\n if (!newKind || newKind === kind.value) return;\n const factory = FIELD_DEFAULTS[newKind];\n const baseDefaults = factory ? factory() : { type: 'String' };\n const preserved: Record<string, any> = {};\n for (const k of PRESERVED_KEYS) {\n if (def.value[k] !== undefined) preserved[k] = def.value[k];\n }\n schema.replaceFieldDef(props.pageIdx, props.fieldName, {\n ...baseDefaults,\n ...preserved,\n });\n}\n\n// ── Select options editor ────────────────────────────────────────────────\n\nconst options = computed<string[]>(() =>\n Array.isArray(def.value.enum) ? def.value.enum : [],\n);\n\nfunction updateOption(idx: number, value: string): void {\n const next = [...options.value];\n next[idx] = value;\n patch('enum', next);\n}\n\nfunction removeOption(idx: number): void {\n const next = options.value.filter((_, i) => i !== idx);\n patch('enum', next.length ? next : undefined);\n}\n\nfunction addOption(): void {\n const next = [...options.value, `Option ${options.value.length + 1}`];\n patch('enum', next);\n}\n\n// ── Image-choice helpers ─────────────────────────────────────────────────\n\nconst imgInputRefs: Record<number, HTMLInputElement | null> = {};\n\nfunction setImgInputRef(idx: number) {\n return (el: any) => { imgInputRefs[idx] = el as HTMLInputElement | null; };\n}\n\nfunction triggerImgInput(idx: number): void {\n imgInputRefs[idx]?.click();\n}\n\nconst optionImages = computed<string[]>(() =>\n Array.isArray(def.value.optionImages) ? def.value.optionImages : [],\n);\n\nfunction setOptionImage(idx: number, dataUrl: string): void {\n const next = [...optionImages.value];\n while (next.length <= idx) next.push('');\n next[idx] = dataUrl;\n patch('optionImages', next);\n}\n\nfunction removeOptionImage(idx: number): void {\n const next = [...optionImages.value];\n if (idx < next.length) next[idx] = '';\n patch('optionImages', next);\n}\n\nfunction onImageFileSelected(ev: Event, idx: number): void {\n const input = ev.target as HTMLInputElement;\n const file = input?.files?.[0];\n if (!file) return;\n\n // Resize to max 400×400 to keep schema payload small.\n const img = new Image();\n const objectUrl = URL.createObjectURL(file);\n img.onload = () => {\n const MAX = 400;\n let { width, height } = img;\n if (width > MAX || height > MAX) {\n const ratio = Math.min(MAX / width, MAX / height);\n width = Math.round(width * ratio);\n height = Math.round(height * ratio);\n }\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(img, 0, 0, width, height);\n setOptionImage(idx, canvas.toDataURL('image/webp', 0.8));\n }\n URL.revokeObjectURL(objectUrl);\n };\n img.onerror = () => URL.revokeObjectURL(objectUrl);\n img.src = objectUrl;\n input.value = '';\n}\n\nfunction addImageOption(): void {\n const next = [...options.value, `Option ${options.value.length + 1}`];\n patch('enum', next);\n const imgs = [...optionImages.value, ''];\n patch('optionImages', imgs);\n}\n\nfunction removeImageOption(idx: number): void {\n patch('enum', options.value.filter((_, i) => i !== idx));\n patch('optionImages', optionImages.value.filter((_, i) => i !== idx));\n}\n\n// ── Drag and drop reorder for select options ─────────────────────────────\n\nconst draggingOptionIdx = ref<number | null>(null);\nconst optionDropTarget = ref<number | null>(null);\n\nfunction onOptionDragStart(ev: DragEvent, idx: number): void {\n if (!ev.dataTransfer) return;\n draggingOptionIdx.value = idx;\n ev.dataTransfer.setData('application/cobalt-option-move', String(idx));\n ev.dataTransfer.effectAllowed = 'move';\n}\n\nfunction onOptionDragOver(ev: DragEvent, idx: number): void {\n if (draggingOptionIdx.value === null) return;\n ev.preventDefault();\n if (ev.dataTransfer) ev.dataTransfer.dropEffect = 'move';\n optionDropTarget.value = idx;\n}\n\nfunction onOptionDragLeave(): void {\n optionDropTarget.value = null;\n}\n\nfunction onOptionDrop(ev: DragEvent, idx: number): void {\n ev.preventDefault();\n const from = draggingOptionIdx.value;\n draggingOptionIdx.value = null;\n optionDropTarget.value = null;\n if (from === null || from === idx) return;\n const next = [...options.value];\n const [moved] = next.splice(from, 1);\n // When dragging downwards, the visual gap shifts up by one after the splice.\n const target = from < idx ? idx - 1 : idx;\n next.splice(target, 0, moved);\n patch('enum', next);\n}\n\nfunction onOptionDragEnd(): void {\n draggingOptionIdx.value = null;\n optionDropTarget.value = null;\n}\n\n// ── \"Other (describe)\" toggle for selects ────────────────────────────────\n// Convention: an option literally equal to \"Other\" (case-insensitive) means\n// \"Other (describe)\". Cobalt's <co-select> doesn't have a built-in escape\n// hatch for this yet, so for now we encode it as a regular enum entry and\n// hint the builder UI about it via this toggle.\n\nconst hasOther = computed(() =>\n options.value.some((o) => String(o).trim().toLowerCase() === 'other'),\n);\n\nfunction toggleOther(): void {\n if (hasOther.value) {\n patch(\n 'enum',\n options.value.filter((o) => String(o).trim().toLowerCase() !== 'other'),\n );\n } else {\n patch('enum', [...options.value, 'Other']);\n }\n}\n\n// ── Mini-toolbar (Google Forms-style) ────────────────────────────────────\n\nconst insertOpen = ref(false);\n\n/** Subset of catalog shown in the quick-insert popover. */\nconst INSERT_OPTIONS = computed(() => {\n const isQuiz = schema.data.mode === 'quiz';\n if (isQuiz) {\n return FIELD_CATALOG.filter((c) => c.quizAllowed);\n }\n const ids = ['text', 'textarea', 'number', 'date', 'select', 'boolean', 'rating'];\n return FIELD_CATALOG.filter((c) => ids.includes(c.id));\n});\n\nfunction insertAfter(newKind: string): void {\n insertOpen.value = false;\n schema.insertFieldAfter(props.pageIdx, props.fieldName, newKind);\n}\n\nfunction insertSection(): void {\n insertOpen.value = false;\n schema.insertFieldAfter(props.pageIdx, props.fieldName, 'section');\n}\n\n// ── Preview helpers ──────────────────────────────────────────────────────\n\nconst previewInputType = computed<string>(() => {\n switch (kind.value) {\n case 'number': return 'number';\n case 'date': return 'date';\n case 'color': return 'color';\n case 'file': return 'file';\n default: return 'text';\n }\n});\n\nfunction toNumOrUndef(v: any): number | undefined {\n if (v === '' || v == null) return undefined;\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\n// Reactive defaults for the slider preview when the schema is missing values.\nconst sliderMin = computed<number>(() => Number(def.value.min ?? 0));\nconst sliderMax = computed<number>(() => Number(def.value.max ?? 100));\nconst sliderStep = computed<number>(() => Number(def.value.step ?? 1));\nconst sliderPreviewValue = computed<number>(() => sliderMin.value);\n\nconst ratingMax = computed<number>(() => Number(def.value.max ?? 5));\n\n// ── Quiz mode — Answer Key panel ─────────────────────────────────────────\n\nconst isQuiz = computed(() => schema.data.mode === 'quiz');\nconst answerKeyOpen = ref(false);\n\nconst correctOptions = computed<number[]>(\n () => (Array.isArray(def.value.correctOptions) ? def.value.correctOptions : []),\n);\nconst fieldPoints = computed<number>(() => Number(def.value.points ?? 0));\nconst fieldExplanation = computed<string>(() => def.value.explanation || '');\nconst fieldSampleAnswer = computed<string>(() => def.value.sampleAnswer || '');\nconst fieldCorrectValue = computed<string>(() => {\n const v = def.value.correctValue;\n return v !== undefined && v !== null ? String(v) : '';\n});\n\n/** Whether answer key has been configured (for visual badge). */\nconst hasAnswerKey = computed(() =>\n correctOptions.value.length > 0 ||\n fieldPoints.value > 0 ||\n fieldCorrectValue.value !== '' ||\n (def.value.correctOrder && def.value.correctOrder.length > 0) ||\n Object.keys(def.value.correctPairs || {}).length > 0,\n);\n\nconst answerKeyLabel = computed(() => {\n let label = 'Answer key';\n if (fieldPoints.value > 0) {\n label += ` (${fieldPoints.value} ${fieldPoints.value === 1 ? 'pt' : 'pts'})`;\n }\n return label;\n});\n\nfunction toggleCorrectOption(idx: number): void {\n const current = [...correctOptions.value];\n const pos = current.indexOf(idx);\n const isMulti = def.value.multiSelect;\n if (kind.value === 'boolean' || !isMulti) {\n // Single-select (boolean, or multiSelect off) — only one correct answer\n patch('correctOptions', pos >= 0 ? [] : [idx]);\n return;\n }\n if (pos >= 0) {\n current.splice(pos, 1);\n } else {\n current.push(idx);\n }\n patch('correctOptions', current);\n}\n\nfunction setPoints(v: any): void {\n patch('points', Number(v) || 0);\n}\n\nfunction setExplanation(v: string): void {\n patch('explanation', v);\n}\n\nfunction setSampleAnswer(v: string): void {\n patch('sampleAnswer', v);\n}\n\nfunction setCorrectValue(v: any): void {\n if (v === '' || v === null || v === undefined) {\n patch('correctValue', undefined);\n return;\n }\n if (kind.value === 'number' || kind.value === 'rating') {\n patch('correctValue', Number(v));\n } else {\n patch('correctValue', v);\n }\n}\n\nfunction closeAnswerKey(): void {\n answerKeyOpen.value = false;\n}\n\n/** Label to display in the header/footer — use quizLabel in quiz mode. */\nconst displayTypeLabel = computed(() => {\n if (!isQuiz.value) return catalogEntry.value?.label || 'Field';\n return catalogEntry.value?.quizLabel || catalogEntry.value?.label || 'Field';\n});\n\n/** Boolean options for answer key (True/False questions). */\nconst booleanOptions = ['True', 'False'];\n\n// ── Ordering items editor ────────────────────────────────────────────────\n\nconst orderingItems = computed<string[]>(() =>\n Array.isArray(def.value.enum) ? def.value.enum : [],\n);\n\nfunction updateOrderingItem(idx: number, value: string): void {\n const next = [...orderingItems.value];\n next[idx] = value;\n patch('enum', next);\n}\n\nfunction removeOrderingItem(idx: number): void {\n const next = orderingItems.value.filter((_, i) => i !== idx);\n patch('enum', next.length ? next : undefined);\n}\n\nfunction addOrderingItem(): void {\n const next = [...orderingItems.value, `Item ${orderingItems.value.length + 1}`];\n patch('enum', next);\n}\n\n// ── Ordering answer key helpers ──────────────────────────────────────────\n\n/** correctOrder stores the sequence of indices into `enum` that represents the correct answer.\n * If not set, it defaults to the natural order [0,1,2,…]. */\nconst correctOrder = computed<number[]>(() => {\n if (Array.isArray(def.value.correctOrder) && def.value.correctOrder.length === orderingItems.value.length) {\n return def.value.correctOrder;\n }\n return orderingItems.value.map((_, i) => i);\n});\n\nconst correctOrderLabels = computed(() =>\n correctOrder.value.map((origIdx) => orderingItems.value[origIdx] || `Item ${origIdx + 1}`),\n);\n\nfunction moveCorrectOrderItem(posIdx: number, direction: -1 | 1): void {\n const arr = [...correctOrder.value];\n const target = posIdx + direction;\n if (target < 0 || target >= arr.length) return;\n [arr[posIdx], arr[target]] = [arr[target], arr[posIdx]];\n patch('correctOrder', arr);\n}\n\nconst orderingDragIdx = ref<number | null>(null);\nconst orderingDropIdx = ref<number | null>(null);\n\nfunction onOrderingDrop(fromIdx: number, toIdx: number): void {\n if (fromIdx === toIdx) return;\n const arr = [...correctOrder.value];\n const [moved] = arr.splice(fromIdx, 1);\n // Adjust target for downward moves: removing fromIdx shifts later indices down by 1\n const insertAt = fromIdx < toIdx ? toIdx - 1 : toIdx;\n arr.splice(insertAt, 0, moved);\n patch('correctOrder', arr);\n}\n\n// ── Matching pairs editor ────────────────────────────────────────────────\n\nconst matchLeft = computed<string[]>(() =>\n Array.isArray(def.value.matchLeft) ? def.value.matchLeft : [],\n);\n\nconst matchRight = computed<string[]>(() =>\n Array.isArray(def.value.matchRight) ? def.value.matchRight : [],\n);\n\nfunction updateMatchLeft(idx: number, value: string): void {\n const next = [...matchLeft.value];\n next[idx] = value;\n patch('matchLeft', next);\n}\n\nfunction updateMatchRight(idx: number, value: string): void {\n const next = [...matchRight.value];\n next[idx] = value;\n patch('matchRight', next);\n}\n\nfunction addMatchPair(): void {\n const n = matchLeft.value.length + 1;\n patch('matchLeft', [...matchLeft.value, `Term ${n}`]);\n patch('matchRight', [...matchRight.value, `Definition ${n}`]);\n}\n\n// ── Matching answer key helpers ──────────────────────────────────────────\n\nconst correctPairs = computed<Record<string, number>>(() =>\n (def.value.correctPairs && typeof def.value.correctPairs === 'object') ? def.value.correctPairs : {},\n);\n\nfunction setCorrectPair(leftIdx: number, rightIdx: number | undefined): void {\n const pairs = { ...correctPairs.value };\n if (rightIdx === undefined || rightIdx === null) {\n delete pairs[leftIdx];\n } else {\n pairs[leftIdx] = rightIdx;\n }\n patch('correctPairs', Object.keys(pairs).length ? pairs : undefined);\n}\n\nfunction removeMatchPair(idx: number): void {\n patch('matchLeft', matchLeft.value.filter((_, i) => i !== idx));\n patch('matchRight', matchRight.value.filter((_, i) => i !== idx));\n // Also clean up correctPairs\n const pairs = { ...(def.value.correctPairs || {}) };\n delete pairs[idx];\n // Reindex pairs above the removed index\n const reindexed: Record<number, number> = {};\n for (const [k, v] of Object.entries(pairs)) {\n const ki = Number(k);\n const newK = ki > idx ? ki - 1 : ki;\n const newV = (v as number) > idx ? (v as number) - 1 : (v as number);\n reindexed[newK] = newV;\n }\n patch('correctPairs', reindexed);\n}\n</script>\n\n<template>\n <div class=\"expanded-wrap\" @click.stop>\n <div class=\"expanded\">\n <!-- ── HEADER ─────────────────────────────────────────────────────── -->\n <header class=\"expanded__head\">\n <span class=\"expanded__icon\">\n <co-icon v-if=\"catalogEntry\" :name=\"catalogEntry.icon\" size=\"20\" />\n </span>\n\n <div class=\"expanded__title\">\n <EditableText\n class=\"expanded__label\"\n :model-value=\"def.label || ''\"\n placeholder=\"Untitled field\"\n @update:model-value=\"patch('label', $event)\"\n />\n <div class=\"expanded__meta\">\n <EditableText\n class=\"expanded__id\"\n :model-value=\"fieldName\"\n placeholder=\"field_id\"\n @update:model-value=\"onRename\"\n />\n <span class=\"expanded__sep\">·</span>\n <span>{{ displayTypeLabel }}</span>\n </div>\n </div>\n\n <div class=\"expanded__head-actions\">\n <CoSelect\n class=\"expanded__type\"\n :options=\"JSON.stringify(TYPE_OPTIONS)\"\n :value=\"kind\"\n @coChange=\"changeType(detailValue($event))\"\n />\n <CoIconButton\n icon=\"x\"\n variant=\"outlined\"\n size=\"sm\"\n label=\"Collapse\"\n @click=\"collapse\"\n />\n </div>\n </header>\n\n <!-- ── BODY ───────────────────────────────────────────────────────── -->\n <div class=\"expanded__body\">\n <!-- TEXT / TEXTAREA / NUMBER / DATE / COLOR / FILE -->\n <template v-if=\"['text','textarea','number','date','color','file'].includes(kind)\">\n <CoInput\n label=\"Placeholder\"\n :value=\"def.placeholder || ''\"\n @coInput=\"patch('placeholder', detailValue($event))\"\n />\n\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <CoInput\n :label=\"def.label\"\n :placeholder=\"def.placeholder\"\n :helper-text=\"def.helperText\"\n :type=\"previewInputType\"\n :multiline=\"kind === 'textarea' || undefined\"\n :required=\"!!def.required\"\n disabled\n />\n </div>\n </template>\n\n <!-- SELECT -->\n <template v-else-if=\"kind === 'select'\">\n <div class=\"expanded__options\">\n <div class=\"expanded__options-label\">Options</div>\n\n <div\n v-for=\"(opt, idx) in options\"\n :key=\"idx\"\n class=\"expanded__option\"\n :class=\"{\n 'is-drop-target': optionDropTarget === idx && draggingOptionIdx !== idx,\n 'is-dragging': draggingOptionIdx === idx,\n }\"\n draggable=\"true\"\n @dragstart=\"onOptionDragStart($event, idx)\"\n @dragover=\"onOptionDragOver($event, idx)\"\n @dragleave=\"onOptionDragLeave\"\n @drop=\"onOptionDrop($event, idx)\"\n @dragend=\"onOptionDragEnd\"\n >\n <span class=\"expanded__option-grip\" aria-hidden=\"true\">⋮⋮</span>\n <span class=\"expanded__option-bullet\" aria-hidden=\"true\" />\n <CoInput\n class=\"expanded__option-input\"\n :value=\"opt\"\n :placeholder=\"`Option ${idx + 1}`\"\n @coInput=\"updateOption(idx, detailValue($event))\"\n />\n <CoIconButton\n icon=\"x\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Remove option\"\n @click=\"removeOption(idx)\"\n />\n </div>\n\n <div class=\"expanded__options-foot\">\n <CoButton\n label=\"Add option\"\n variant=\"stroke\"\n size=\"s\"\n icon-left=\"plus\"\n @click=\"addOption\"\n />\n <CoCheckbox\n label='Add \"Other (describe)\"'\n :checked=\"hasOther\"\n @coChange=\"toggleOther\"\n />\n </div>\n </div>\n </template>\n\n <!-- BOOLEAN -->\n <template v-else-if=\"kind === 'boolean'\">\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <CoSwitch :label=\"def.label || fieldName\" :helper-text=\"def.helperText\" disabled />\n </div>\n </template>\n\n <!-- RATING -->\n <template v-else-if=\"kind === 'rating'\">\n <div class=\"expanded__row\">\n <CoInput\n label=\"Max stars\"\n type=\"number\"\n :value=\"String(ratingMax)\"\n @coInput=\"patch('max', toNumOrUndef(detailValue($event)) ?? 5)\"\n />\n </div>\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <CoRating :label=\"def.label || fieldName\" :max=\"ratingMax\" :value=\"0\" read-only />\n </div>\n </template>\n\n <!-- SLIDER -->\n <template v-else-if=\"kind === 'slider'\">\n <div class=\"expanded__row expanded__row--3\">\n <CoInput\n label=\"Min\"\n type=\"number\"\n :value=\"String(sliderMin)\"\n @coInput=\"patch('min', toNumOrUndef(detailValue($event)) ?? 0)\"\n />\n <CoInput\n label=\"Max\"\n type=\"number\"\n :value=\"String(sliderMax)\"\n @coInput=\"patch('max', toNumOrUndef(detailValue($event)) ?? 100)\"\n />\n <CoInput\n label=\"Step\"\n type=\"number\"\n :value=\"String(sliderStep)\"\n @coInput=\"patch('step', toNumOrUndef(detailValue($event)) ?? 1)\"\n />\n </div>\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <CoSlider\n :label=\"def.label || fieldName\"\n :min=\"sliderMin\"\n :max=\"sliderMax\"\n :step=\"sliderStep\"\n :value=\"sliderPreviewValue\"\n show-value\n disabled\n />\n </div>\n </template>\n\n <!-- REF -->\n <template v-else-if=\"kind === 'ref'\">\n <div class=\"expanded__row expanded__row--2\">\n <CoInput\n label=\"Model\"\n placeholder=\"Company, User, Deal…\"\n :value=\"def.ref || ''\"\n @coInput=\"patch('ref', detailValue($event))\"\n />\n <CoInput\n label=\"Display field\"\n placeholder=\"name\"\n :value=\"def.displayName || ''\"\n @coInput=\"patch('displayName', detailValue($event))\"\n />\n </div>\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <CoInput\n :label=\"def.label || fieldName\"\n :placeholder=\"`Search ${def.ref || 'model'}…`\"\n icon-left=\"magnifying-glass\"\n disabled\n />\n </div>\n </template>\n\n <!-- IMAGE CHOICE -->\n <template v-else-if=\"kind === 'image-choice'\">\n <div class=\"expanded__options\">\n <div class=\"expanded__options-label\">Image options</div>\n <div\n v-for=\"(opt, idx) in options\"\n :key=\"idx\"\n class=\"expanded__image-option\"\n >\n <div class=\"expanded__image-thumb-wrap\">\n <img\n v-if=\"optionImages[idx]\"\n :src=\"optionImages[idx]\"\n class=\"expanded__image-thumb\"\n alt=\"\"\n />\n <div v-else class=\"expanded__image-placeholder\" @click=\"triggerImgInput(idx)\">\n <co-icon name=\"image-square\" size=\"24\" />\n <span>Add image</span>\n </div>\n <div v-if=\"optionImages[idx]\" class=\"expanded__image-actions\">\n <CoIconButton\n icon=\"pencil-simple\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Change image\"\n @click=\"triggerImgInput(idx)\"\n />\n <CoIconButton\n icon=\"trash\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Remove image\"\n @click=\"removeOptionImage(idx)\"\n />\n </div>\n <input\n :ref=\"setImgInputRef(idx)\"\n type=\"file\"\n accept=\"image/*\"\n style=\"display:none\"\n @change=\"onImageFileSelected($event, idx)\"\n />\n </div>\n <div class=\"expanded__image-label-row\">\n <CoInput\n class=\"expanded__option-input\"\n :value=\"opt\"\n :placeholder=\"`Option ${idx + 1}`\"\n @coInput=\"updateOption(idx, detailValue($event))\"\n />\n <CoIconButton\n icon=\"x\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Remove option\"\n @click=\"removeImageOption(idx)\"\n />\n </div>\n </div>\n <div class=\"expanded__options-foot\">\n <CoButton\n label=\"Add option\"\n variant=\"stroke\"\n size=\"s\"\n icon-left=\"plus\"\n @click=\"addImageOption\"\n />\n </div>\n </div>\n </template>\n\n <!-- ORDERING -->\n <template v-else-if=\"kind === 'ordering'\">\n <div class=\"expanded__options\">\n <div class=\"expanded__options-label\">Items (shown in correct order)</div>\n <div\n v-for=\"(item, idx) in orderingItems\"\n :key=\"idx\"\n class=\"expanded__option\"\n >\n <span class=\"expanded__option-number\">{{ idx + 1 }}</span>\n <CoInput\n class=\"expanded__option-input\"\n :value=\"item\"\n :placeholder=\"`Item ${idx + 1}`\"\n @coInput=\"updateOrderingItem(idx, detailValue($event))\"\n />\n <CoIconButton\n icon=\"x\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Remove item\"\n @click=\"removeOrderingItem(idx)\"\n />\n </div>\n <div class=\"expanded__options-foot\">\n <CoButton\n label=\"Add item\"\n variant=\"stroke\"\n size=\"s\"\n icon-left=\"plus\"\n @click=\"addOrderingItem\"\n />\n </div>\n </div>\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview — students will see items in shuffled order</div>\n </div>\n </template>\n\n <!-- MATCHING -->\n <template v-else-if=\"kind === 'matching'\">\n <div class=\"expanded__options\">\n <div class=\"expanded__options-label\">Pairs</div>\n <div class=\"expanded__matching-head\">\n <span class=\"expanded__matching-col-label\">Term</span>\n <span class=\"expanded__matching-col-label\">Definition</span>\n </div>\n <div\n v-for=\"(_, idx) in matchLeft\"\n :key=\"idx\"\n class=\"expanded__matching-row\"\n >\n <CoInput\n class=\"expanded__matching-input\"\n :value=\"matchLeft[idx]\"\n :placeholder=\"`Term ${idx + 1}`\"\n @coInput=\"updateMatchLeft(idx, detailValue($event))\"\n />\n <co-icon name=\"arrows-left-right\" size=\"16\" style=\"flex-shrink:0;color:var(--co-semantic-text-muted)\" />\n <CoInput\n class=\"expanded__matching-input\"\n :value=\"matchRight[idx]\"\n :placeholder=\"`Definition ${idx + 1}`\"\n @coInput=\"updateMatchRight(idx, detailValue($event))\"\n />\n <CoIconButton\n icon=\"x\"\n variant=\"outlined\"\n size=\"xs\"\n label=\"Remove pair\"\n @click=\"removeMatchPair(idx)\"\n />\n </div>\n <div class=\"expanded__options-foot\">\n <CoButton\n label=\"Add pair\"\n variant=\"stroke\"\n size=\"s\"\n icon-left=\"plus\"\n @click=\"addMatchPair\"\n />\n </div>\n </div>\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview — definitions will be shuffled for students</div>\n </div>\n </template>\n\n <!-- SECTION (not a field — just a header/divider in the rendered form) -->\n <template v-else-if=\"kind === 'section'\">\n <CoInput\n label=\"Description\"\n multiline\n placeholder=\"Optional explanatory text shown under the section title.\"\n :value=\"def.helperText || ''\"\n @coInput=\"patch('helperText', detailValue($event))\"\n />\n <div class=\"expanded__preview\">\n <div class=\"expanded__preview-label\">Preview</div>\n <div class=\"expanded__section-preview\">\n <h4>{{ def.label || 'Section title' }}</h4>\n <p v-if=\"def.helperText\">{{ def.helperText }}</p>\n </div>\n </div>\n </template>\n\n <!-- Helper text — common to most types (sections render their own description). -->\n <CoInput\n v-if=\"kind !== 'section'\"\n label=\"Helper text\"\n :value=\"def.helperText || ''\"\n placeholder=\"Optional helper / hint shown below the field\"\n @coInput=\"patch('helperText', detailValue($event))\"\n />\n </div>\n\n <!-- ── FOOTER ─────────────────────────────────────────────────────── -->\n <footer class=\"expanded__foot\">\n <!-- Answer Key button — quiz mode only, not for section dividers -->\n <CoButton\n v-if=\"isQuiz && kind !== 'section'\"\n :icon-left=\"hasAnswerKey ? 'check-square' : 'key'\"\n :label=\"answerKeyLabel\"\n :variant=\"answerKeyOpen ? 'primary' : 'stroke'\"\n size=\"s\"\n @click=\"answerKeyOpen = !answerKeyOpen\"\n />\n\n <CoSwitch\n :checked=\"!!def.required\"\n label=\"Required\"\n @coChange=\"patch('required', detailValue($event))\"\n />\n\n <div class=\"expanded__foot-spacer\" />\n\n <CoButton label=\"Duplicate\" icon-left=\"copy\" variant=\"ghost\" size=\"s\" @click=\"duplicate\" />\n <CoButton label=\"Delete\" icon-left=\"trash\" variant=\"ghost\" size=\"s\" @click=\"remove\" />\n </footer>\n\n <!-- ── ANSWER KEY PANEL (quiz mode) ──────────────────────────────── -->\n <div v-if=\"isQuiz && answerKeyOpen && kind !== 'section'\" class=\"answer-key\">\n <div class=\"answer-key__head\">\n <div class=\"answer-key__head-left\">\n <co-icon name=\"check-square\" size=\"18\" />\n <span class=\"answer-key__head-label\">Choose correct answer(s):</span>\n </div>\n <div class=\"answer-key__head-right\">\n <CoInput\n class=\"answer-key__points-input\"\n type=\"number\"\n :value=\"String(fieldPoints)\"\n @coInput=\"setPoints(detailValue($event))\"\n />\n <span class=\"answer-key__points-label\">points</span>\n </div>\n </div>\n\n <div class=\"answer-key__body\">\n <!-- Multiple Choice (select) — allow multi-select toggle -->\n <template v-if=\"kind === 'select'\">\n <CoCheckbox\n label=\"Allow multiple selections\"\n :checked=\"!!def.multiSelect\"\n @coChange=\"patch('multiSelect', detailValue($event) || undefined)\"\n />\n <div class=\"answer-key__question-label\">{{ def.label || 'Question' }}</div>\n <div\n v-for=\"(opt, idx) in options\"\n :key=\"idx\"\n class=\"answer-key__option\"\n :class=\"{ 'is-correct': correctOptions.includes(idx) }\"\n >\n <CoCheckbox\n :label=\"opt || `Option ${idx + 1}`\"\n :checked=\"correctOptions.includes(idx)\"\n @coChange=\"toggleCorrectOption(idx)\"\n />\n </div>\n </template>\n\n <!-- Image Choice — same as select, mark correct option(s) -->\n <template v-else-if=\"kind === 'image-choice'\">\n <CoCheckbox\n label=\"Allow multiple selections\"\n :checked=\"!!def.multiSelect\"\n @coChange=\"patch('multiSelect', detailValue($event) || undefined)\"\n />\n <div class=\"answer-key__question-label\">{{ def.label || 'Question' }}</div>\n <div\n v-for=\"(opt, idx) in options\"\n :key=\"idx\"\n class=\"answer-key__option\"\n :class=\"{ 'is-correct': correctOptions.includes(idx) }\"\n >\n <co-icon name=\"image-square\" size=\"16\" style=\"flex-shrink:0;color:var(--co-semantic-text-muted)\" />\n <CoCheckbox\n :label=\"opt || `Option ${idx + 1}`\"\n :checked=\"correctOptions.includes(idx)\"\n @coChange=\"toggleCorrectOption(idx)\"\n />\n </div>\n </template>\n\n <!-- True / False (boolean) — two radio buttons -->\n <template v-else-if=\"kind === 'boolean'\">\n <div class=\"answer-key__question-label\">{{ def.label || 'Question' }}</div>\n <div\n v-for=\"(opt, idx) in booleanOptions\"\n :key=\"idx\"\n class=\"answer-key__option\"\n :class=\"{ 'is-correct': correctOptions.includes(idx) }\"\n >\n <CoCheckbox\n :label=\"opt\"\n :checked=\"correctOptions.includes(idx)\"\n @coChange=\"toggleCorrectOption(idx)\"\n />\n </div>\n </template>\n\n <!-- Open ended (text / textarea) — manual grading -->\n <template v-else-if=\"kind === 'text' || kind === 'textarea'\">\n <div class=\"answer-key__manual\">\n <co-icon name=\"note-pencil\" size=\"20\" />\n <span>This question requires manual grading.</span>\n </div>\n <CoInput\n label=\"Sample answer / Rubric\"\n multiline\n :value=\"fieldSampleAnswer\"\n placeholder=\"Describe the expected answer or grading criteria…\"\n @coInput=\"setSampleAnswer(detailValue($event))\"\n />\n </template>\n\n <!-- Numeric answer — exact correct value -->\n <template v-else-if=\"kind === 'number'\">\n <div class=\"answer-key__question-label\">{{ def.label || 'Question' }}</div>\n <CoInput\n label=\"Correct answer\"\n type=\"number\"\n :value=\"fieldCorrectValue\"\n placeholder=\"Enter the correct numeric value\"\n @coInput=\"setCorrectValue(detailValue($event))\"\n />\n </template>\n\n <!-- Ordering — define correct order with drag & drop -->\n <template v-else-if=\"kind === 'ordering'\">\n <div class=\"answer-key__question-label\">Define the correct order:</div>\n <div\n v-for=\"(label, posIdx) in correctOrderLabels\"\n :key=\"posIdx\"\n class=\"answer-key__option is-correct\"\n :class=\"{\n 'is-dragging': orderingDragIdx === posIdx,\n 'is-drop-target': orderingDropIdx === posIdx && orderingDragIdx !== posIdx,\n }\"\n draggable=\"true\"\n @dragstart=\"orderingDragIdx = posIdx; $event.dataTransfer!.effectAllowed = 'move'\"\n @dragover.prevent=\"$event.dataTransfer!.dropEffect = 'move'; orderingDropIdx = posIdx\"\n @drop.prevent=\"if (orderingDragIdx != null) onOrderingDrop(orderingDragIdx, posIdx); orderingDragIdx = null; orderingDropIdx = null\"\n @dragend=\"orderingDragIdx = null; orderingDropIdx = null\"\n >\n <span class=\"answer-key__order-grip\" aria-hidden=\"true\">\n <co-icon name=\"dots-six-vertical\" size=\"16\" />\n </span>\n <span class=\"answer-key__order-num\">{{ posIdx + 1 }}</span>\n <span style=\"flex:1\">{{ label }}</span>\n </div>\n <div class=\"answer-key__hint\">\n <co-icon name=\"info\" size=\"16\" />\n <span>Drag items to set the correct order. Students will see items shuffled.</span>\n </div>\n </template>\n\n <!-- Matching — define correct pairs via dropdowns -->\n <template v-else-if=\"kind === 'matching'\">\n <div class=\"answer-key__question-label\">Match each term to its correct definition:</div>\n <div\n v-for=\"(term, idx) in matchLeft\"\n :key=\"idx\"\n class=\"answer-key__matching-pair\"\n >\n <span class=\"answer-key__matching-term\">{{ term }}</span>\n <co-icon name=\"arrow-right\" size=\"16\" />\n <select\n class=\"answer-key__matching-select\"\n :value=\"correctPairs[idx] !== undefined ? String(correctPairs[idx]) : ''\"\n @change=\"setCorrectPair(idx, ($event.target as HTMLSelectElement).value ? Number(($event.target as HTMLSelectElement).value) : undefined)\"\n >\n <option value=\"\">— Select definition —</option>\n <option\n v-for=\"(defText, rIdx) in matchRight\"\n :key=\"rIdx\"\n :value=\"String(rIdx)\"\n >{{ defText }}</option>\n </select>\n </div>\n <div class=\"answer-key__hint\">\n <co-icon name=\"info\" size=\"16\" />\n <span>Select the correct definition for each term. Definitions will be shuffled for students.</span>\n </div>\n </template>\n\n <!-- Fallback — manual grading -->\n <template v-else>\n <div class=\"answer-key__manual\">\n <co-icon name=\"note-pencil\" size=\"20\" />\n <span>This question requires manual grading.</span>\n </div>\n </template>\n </div>\n\n <!-- Explanation / Feedback -->\n <div class=\"answer-key__feedback\">\n <CoInput\n label=\"Add answer feedback\"\n icon-left=\"chat-dots\"\n :value=\"fieldExplanation\"\n placeholder=\"Explain why this answer is correct…\"\n @coInput=\"setExplanation(detailValue($event))\"\n />\n </div>\n\n <div class=\"answer-key__foot\">\n <CoButton label=\"Done\" variant=\"stroke\" @click=\"closeAnswerKey\" />\n </div>\n </div>\n </div>\n\n <!-- ── Mini-toolbar (Google Forms-style) ──────────────────────────── -->\n <aside class=\"mini-toolbar\" :class=\"{ 'is-open': insertOpen }\">\n <button\n class=\"mini-toolbar__btn\"\n title=\"Add field below\"\n @click.stop=\"insertOpen = !insertOpen\"\n >\n <co-icon name=\"plus\" size=\"16\" />\n </button>\n <button\n class=\"mini-toolbar__btn\"\n title=\"Add section below\"\n @click=\"insertSection\"\n >\n <co-icon name=\"minus\" size=\"16\" />\n </button>\n <button\n class=\"mini-toolbar__btn\"\n title=\"Duplicate\"\n @click=\"duplicate\"\n >\n <co-icon name=\"copy\" size=\"16\" />\n </button>\n\n <!-- Popover with type picker -->\n <div v-if=\"insertOpen\" class=\"mini-popover\" @click.stop>\n <div class=\"mini-popover__label\">Insert field below</div>\n <button\n v-for=\"entry in INSERT_OPTIONS\"\n :key=\"entry.id\"\n class=\"mini-popover__item\"\n @click=\"insertAfter(entry.id)\"\n >\n <co-icon :name=\"entry.icon\" size=\"16\" />\n <span>{{ entry.label }}</span>\n </button>\n </div>\n </aside>\n </div>\n</template>\n\n<style scoped>\n/* Wrapper holds the card + the floating mini-toolbar side by side, with\n * the toolbar peeking out to the right just like Google Forms. */\n.expanded-wrap {\n display: flex;\n align-items: flex-start;\n gap: var(--co-spacing-md, 12px);\n margin: 2px 0;\n position: relative;\n}\n\n.expanded {\n flex: 1;\n min-width: 0;\n background: var(--fb-panel);\n border: 1px solid var(--co-color-primary-azul, #2563eb);\n border-radius: var(--co-border-radius-sm, 12px);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent), var(--fb-shadow-md);\n overflow: hidden;\n}\n\n/* Mini-toolbar (floating right). */\n.mini-toolbar {\n position: sticky;\n top: var(--co-spacing-lg, 16px);\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: var(--co-spacing-xs, 4px);\n background: var(--fb-panel);\n border: 1px solid var(--fb-border);\n border-radius: var(--co-border-radius-full, 9999px);\n box-shadow: var(--fb-shadow-md);\n flex-shrink: 0;\n}\n\n.mini-toolbar__btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 0;\n background: transparent;\n border-radius: var(--co-border-radius-full, 9999px);\n color: var(--co-semantic-text-secondary, #6b7280);\n transition: all 120ms;\n}\n\n.mini-toolbar__btn:hover {\n background: color-mix(in srgb, var(--co-color-primary-azul) 8%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n}\n\n.mini-toolbar.is-open .mini-toolbar__btn:first-child {\n background: var(--co-color-primary-azul, #2563eb);\n color: white;\n}\n\n/* The mini-toolbar sits flush with the right edge of the canvas, so\n * opening this popover to the right would push it under the properties\n * sidebar (where it gets clipped / hidden). Anchor it to the LEFT of the\n * toolbar — always inside the canvas viewport. */\n.mini-popover {\n position: absolute;\n top: 0;\n right: calc(100% + var(--co-spacing-sm, 8px));\n z-index: 10;\n min-width: 220px;\n padding: var(--co-spacing-xs, 6px);\n background: var(--fb-panel);\n border: 1px solid var(--fb-border);\n border-radius: var(--co-border-radius-xs, 10px);\n box-shadow: var(--fb-shadow-lg);\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.mini-popover__label {\n padding: 6px 10px 4px;\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n.mini-popover__item {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n padding: 8px 10px;\n border: 0;\n background: transparent;\n border-radius: var(--co-border-radius-xxs, 6px);\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-default, #111827);\n text-align: left;\n width: 100%;\n}\n\n.mini-popover__item:hover {\n background: var(--fb-bg);\n}\n\n.mini-popover__item co-icon {\n color: var(--co-color-primary-azul, #2563eb);\n}\n\n/* ── Header ─────────────────────────────────────────────────────────── */\n.expanded__head {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--co-spacing-md, 12px);\n padding: var(--co-spacing-md, 14px) var(--co-spacing-lg, 16px);\n border-bottom: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n}\n\n.expanded__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: var(--co-border-radius-xs, 8px);\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n flex-shrink: 0;\n}\n\n.expanded__title {\n flex: 1 1 0%;\n min-width: 120px;\n overflow: hidden;\n}\n\n.expanded__label {\n display: block;\n font-size: var(--co-font-size-15, 15px);\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n line-height: 1.3;\n word-break: break-word;\n overflow-wrap: anywhere;\n}\n\n.expanded__meta {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 3px;\n font-size: var(--co-font-size-12, 12px);\n color: var(--co-semantic-text-secondary, #6b7280);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.expanded__id {\n font-family: ui-monospace, Menlo, monospace;\n font-size: 11px;\n padding: 2px 7px;\n border-radius: 4px;\n background: var(--fb-bg);\n color: var(--co-semantic-text-default, #111827);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 140px;\n flex-shrink: 1;\n}\n\n.expanded__sep { color: var(--co-semantic-text-muted, #9ca3af); }\n\n.expanded__head-actions {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n flex-shrink: 0;\n}\n\n.expanded__type {\n min-width: 0;\n max-width: 180px;\n}\n\n/* ── Body ───────────────────────────────────────────────────────────── */\n.expanded__body {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-md, 14px);\n padding: var(--co-spacing-lg, 18px) var(--co-spacing-lg, 18px);\n}\n\n.expanded__preview {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xs, 6px);\n padding: var(--co-spacing-md, 12px);\n background: var(--fb-bg);\n border: 1px dashed var(--fb-border);\n border-radius: var(--co-border-radius-xs, 8px);\n}\n\n.expanded__preview-label {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n/* Multi-column row for compact inputs (slider min/max/step, ref model/display). */\n.expanded__row {\n display: grid;\n gap: var(--co-spacing-md, 12px);\n}\n\n.expanded__row--2 { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); }\n.expanded__row--3 { grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); }\n\n.expanded__section-preview {\n padding: var(--co-spacing-sm, 8px) 0;\n}\n\n.expanded__section-preview h4 {\n margin: 0 0 4px;\n font-size: var(--co-font-size-16, 16px);\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n border-bottom: 1px solid var(--fb-border);\n padding-bottom: 6px;\n}\n\n.expanded__section-preview p {\n margin: 0;\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n/* ── Options (select editor) ────────────────────────────────────────── */\n.expanded__options {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xs, 6px);\n}\n\n.expanded__options-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--co-semantic-text-secondary, #6b7280);\n margin-bottom: 2px;\n}\n\n.expanded__options-foot {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-md, 12px);\n margin-top: var(--co-spacing-xs, 4px);\n}\n\n.expanded__option {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n padding: 2px 0;\n border-radius: var(--co-border-radius-xxs, 6px);\n transition: background 100ms, opacity 100ms;\n}\n\n.expanded__option:hover .expanded__option-grip { opacity: 1; }\n\n.expanded__option.is-dragging {\n opacity: 0.4;\n}\n\n.expanded__option.is-drop-target {\n background: color-mix(in srgb, var(--co-color-primary-azul) 8%, transparent);\n box-shadow: 0 -2px 0 var(--co-color-primary-azul, #2563eb);\n}\n\n.expanded__option-grip {\n color: var(--co-semantic-text-muted, #9ca3af);\n letter-spacing: -2px;\n font-size: 14px;\n line-height: 1;\n cursor: grab;\n opacity: 0;\n transition: opacity 100ms;\n user-select: none;\n flex-shrink: 0;\n}\n\n.expanded__option-grip:active { cursor: grabbing; }\n\n.expanded__option-bullet {\n width: 16px;\n height: 16px;\n border: 2px solid var(--fb-border-strong);\n border-radius: var(--co-border-radius-full, 9999px);\n flex-shrink: 0;\n}\n\n.expanded__option-input {\n flex: 1;\n}\n\n/* ── Footer ─────────────────────────────────────────────────────────── */\n.expanded__foot {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--co-spacing-sm, 8px) var(--co-spacing-md, 12px);\n padding: var(--co-spacing-sm, 10px) var(--co-spacing-lg, 16px);\n border-top: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n}\n\n.expanded__foot-spacer { flex: 1; }\n\n/* ── Answer Key panel ──────────────────────────────────────────────── */\n.answer-key {\n border-top: 1px solid var(--fb-border);\n border-left: 4px solid var(--co-color-primary-azul, #2563eb);\n background: color-mix(in srgb, var(--co-color-primary-azul) 3%, var(--fb-panel));\n}\n\n.answer-key__head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: var(--co-spacing-sm, 8px);\n padding: var(--co-spacing-md, 14px) var(--co-spacing-lg, 16px);\n border-bottom: 1px solid color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent);\n}\n\n.answer-key__head-left {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n color: var(--co-color-primary-azul, #2563eb);\n}\n\n.answer-key__head-label {\n font-size: var(--co-font-size-14, 14px);\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n}\n\n.answer-key__head-right {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.answer-key__points-input {\n max-width: 80px;\n}\n\n.answer-key__points-label {\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.answer-key__body {\n padding: var(--co-spacing-md, 14px) var(--co-spacing-lg, 16px);\n}\n\n.answer-key__question-label {\n font-size: var(--co-font-size-13, 13px);\n font-weight: 500;\n color: var(--co-semantic-text-secondary, #6b7280);\n margin-bottom: var(--co-spacing-sm, 8px);\n}\n\n.answer-key__option {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 10px);\n padding: 10px 12px;\n margin-bottom: 4px;\n border-radius: var(--co-border-radius-xxs, 8px);\n cursor: pointer;\n transition: background 100ms;\n user-select: none;\n}\n\n.answer-key__option:hover {\n background: color-mix(in srgb, var(--co-color-primary-azul) 6%, transparent);\n}\n\n.answer-key__option.is-correct {\n background: color-mix(in srgb, #16a34a 8%, transparent);\n}\n\n.answer-key__manual {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 10px);\n padding: var(--co-spacing-md, 14px) var(--co-spacing-lg, 16px);\n background: color-mix(in srgb, #eab308 8%, transparent);\n border: 1px solid color-mix(in srgb, #eab308 20%, transparent);\n border-radius: var(--co-border-radius-xs, 8px);\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.answer-key__manual co-icon { color: #ca8a04; }\n\n/* Feedback / explanation section */\n.answer-key__feedback {\n padding: 0 var(--co-spacing-lg, 16px) var(--co-spacing-md, 14px);\n border-top: 1px solid color-mix(in srgb, var(--co-color-primary-azul) 8%, transparent);\n margin-top: var(--co-spacing-xs, 4px);\n}\n\n.answer-key__foot {\n display: flex;\n justify-content: flex-end;\n padding: 0 var(--co-spacing-lg, 16px) var(--co-spacing-md, 14px);\n}\n\n/* Answer key — ordering number badge */\n.answer-key__order-num {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: var(--co-border-radius-full, 9999px);\n background: color-mix(in srgb, #16a34a 12%, transparent);\n color: #16a34a;\n font-size: 12px;\n font-weight: 700;\n flex-shrink: 0;\n}\n\n/* Answer key — ordering grip handle */\n.answer-key__order-grip {\n display: flex;\n align-items: center;\n color: var(--co-semantic-text-muted, #9ca3af);\n flex-shrink: 0;\n cursor: grab;\n}\n\n/* Answer key — ordering drag states */\n.answer-key__option[draggable=\"true\"] {\n cursor: grab;\n user-select: none;\n transition: border-color 120ms, box-shadow 120ms, opacity 120ms;\n}\n\n.answer-key__option.is-dragging {\n opacity: 0.4;\n cursor: grabbing;\n}\n\n.answer-key__option.is-drop-target:not(.is-dragging) {\n border-color: var(--co-color-primary-azul, #2563eb);\n box-shadow: 0 -2px 0 0 var(--co-color-primary-azul, #2563eb);\n}\n\n/* Answer key — matching pair row */\n.answer-key__matching-pair {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n padding: 8px 12px;\n margin-bottom: 4px;\n border-radius: var(--co-border-radius-xxs, 8px);\n background: color-mix(in srgb, #16a34a 6%, transparent);\n font-size: var(--co-font-size-13, 13px);\n}\n\n.answer-key__matching-term {\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n flex-shrink: 0;\n min-width: 80px;\n}\n\n.answer-key__matching-def {\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n/* Answer key — matching dropdown */\n.answer-key__matching-select {\n flex: 1;\n min-width: 0;\n padding: 6px 10px;\n border: 1px solid var(--fb-border-strong, rgba(17, 24, 39, 0.14));\n border-radius: var(--co-border-radius-xxs, 4px);\n background: var(--fb-panel, #fff);\n color: var(--co-semantic-text-default, #111827);\n font-size: var(--co-font-size-13, 13px);\n font-family: var(--co-font-family-primary, sans-serif);\n color-scheme: light;\n cursor: pointer;\n -webkit-appearance: menulist;\n appearance: menulist;\n}\n\n/* Answer key — informational hint */\n.answer-key__hint {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-xs, 4px);\n padding: var(--co-spacing-sm, 8px) 0 0;\n font-size: 12px;\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n/* Builder — image-choice option card */\n.expanded__image-option {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xs, 4px);\n padding: var(--co-spacing-sm, 8px);\n border: 1px solid var(--fb-border, rgba(17, 24, 39, 0.08));\n border-radius: var(--co-border-radius-xs, 8px);\n background: var(--fb-panel, #fff);\n margin-bottom: var(--co-spacing-sm, 8px);\n}\n\n.expanded__image-thumb-wrap {\n position: relative;\n width: 100%;\n height: 120px;\n border-radius: var(--co-border-radius-xxs, 4px);\n overflow: hidden;\n background: var(--fb-panel-soft, #fafbfc);\n border: 1px dashed var(--fb-border-strong, rgba(17, 24, 39, 0.14));\n}\n\n.expanded__image-thumb {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.expanded__image-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--co-spacing-xs, 4px);\n height: 100%;\n cursor: pointer;\n color: var(--co-semantic-text-muted, #9ca3af);\n font-size: 12px;\n transition: color 120ms, border-color 120ms;\n}\n\n.expanded__image-placeholder:hover {\n color: var(--co-color-primary-azul, #2563eb);\n}\n\n.expanded__image-actions {\n position: absolute;\n top: var(--co-spacing-xs, 4px);\n right: var(--co-spacing-xs, 4px);\n display: flex;\n gap: 2px;\n opacity: 0;\n transition: opacity 120ms;\n}\n\n.expanded__image-thumb-wrap:hover .expanded__image-actions {\n opacity: 1;\n}\n\n.expanded__image-label-row {\n display: flex;\n gap: var(--co-spacing-sm, 8px);\n align-items: center;\n}\n\n.expanded__image-label-row .expanded__option-input {\n flex: 1;\n}\n\n/* Builder — ordering item number */\n.expanded__option-number {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: var(--co-border-radius-full, 9999px);\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n font-size: 11px;\n font-weight: 700;\n flex-shrink: 0;\n}\n\n/* Builder — matching pair layout */\n.expanded__matching-head {\n display: grid;\n grid-template-columns: 1fr 16px 1fr 28px;\n gap: var(--co-spacing-sm, 8px);\n padding: 0 0 var(--co-spacing-xs, 4px);\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n.expanded__matching-row {\n display: grid;\n grid-template-columns: 1fr 16px 1fr 28px;\n gap: var(--co-spacing-sm, 8px);\n align-items: center;\n margin-bottom: var(--co-spacing-xs, 4px);\n}\n\n.expanded__matching-input {\n min-width: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useSchemaStore } from '../stores/schema';\nimport { FIELD_CATALOG } from '../fieldCatalog';\nimport FieldCardExpanded from './FieldCardExpanded.vue';\n\nconst props = defineProps<{\n pageIdx: number;\n fieldIdx: number;\n fieldName: string;\n}>();\n\nconst schema = useSchemaStore();\n\nconst page = computed(() => schema.data.pages[props.pageIdx]);\nconst def = computed<Record<string, any>>(\n () => page.value?.fields[props.fieldName] ?? {},\n);\n\nconst isSelected = computed(\n () =>\n schema.selection.pageIdx === props.pageIdx &&\n schema.selection.fieldName === props.fieldName,\n);\n\nconst catalogEntry = computed(() => {\n const d = def.value;\n if (d.uiCom === 'TextArea') return FIELD_CATALOG.find((x) => x.id === 'textarea');\n if (d.uiCom === 'Rating') return FIELD_CATALOG.find((x) => x.id === 'rating');\n if (d.uiCom === 'Slider') return FIELD_CATALOG.find((x) => x.id === 'slider');\n if (d.uiCom === 'ColorPicker') return FIELD_CATALOG.find((x) => x.id === 'color');\n if (d.uiCom === 'Section') return FIELD_CATALOG.find((x) => x.id === 'section');\n if (d.uiCom === 'File') return FIELD_CATALOG.find((x) => x.id === 'file');\n if (d.uiCom === 'Ordering') return FIELD_CATALOG.find((x) => x.id === 'ordering');\n if (d.uiCom === 'Matching') return FIELD_CATALOG.find((x) => x.id === 'matching');\n if (d.uiCom === 'ImageRadioGroup') return FIELD_CATALOG.find((x) => x.id === 'image-choice');\n if (d.ref) return FIELD_CATALOG.find((x) => x.id === 'ref');\n if (Array.isArray(d.enum)) return FIELD_CATALOG.find((x) => x.id === 'select');\n if (d.type === 'Number') return FIELD_CATALOG.find((x) => x.id === 'number');\n if (d.type === 'Date') return FIELD_CATALOG.find((x) => x.id === 'date');\n if (d.type === 'Boolean') return FIELD_CATALOG.find((x) => x.id === 'boolean');\n return FIELD_CATALOG.find((x) => x.id === 'text');\n});\n\nfunction select(): void {\n schema.selectField(props.pageIdx, props.fieldName);\n}\n\nfunction duplicate(ev: Event): void {\n ev.stopPropagation();\n schema.duplicateField(props.pageIdx, props.fieldName);\n}\n\nfunction remove(ev: Event): void {\n ev.stopPropagation();\n schema.removeField(props.pageIdx, props.fieldName);\n}\n\n// Reorder is handled by `vue-draggable-plus` on the parent <PageCard>;\n// it picks the `.field__grip` element as the drag handle.\n</script>\n\n<template>\n <FieldCardExpanded\n v-if=\"isSelected\"\n :page-idx=\"pageIdx\"\n :field-name=\"fieldName\"\n />\n\n <div\n v-else\n class=\"field\"\n @click.stop=\"select\"\n >\n <span class=\"field__grip\" aria-hidden=\"true\">⋮⋮</span>\n\n <span class=\"field__icon\">\n <co-icon v-if=\"catalogEntry\" :name=\"catalogEntry.icon\" size=\"18\" />\n </span>\n\n <div class=\"field__body\">\n <div class=\"field__name\">\n {{ def.label || fieldName }}\n <span v-if=\"def.required\" class=\"field__chip field__chip--warn\">required</span>\n <span v-if=\"def.visibleIf\" class=\"field__chip\">visibleIf</span>\n <span v-if=\"def.full\" class=\"field__chip\">full</span>\n </div>\n <div class=\"field__meta\">\n <span class=\"field__meta-id\">{{ fieldName }}</span>\n <span class=\"field__meta-sep\">·</span>\n <span>{{ schema.data.mode === 'quiz' && catalogEntry?.quizLabel ? catalogEntry.quizLabel : (catalogEntry?.label || def.type || 'String') }}</span>\n </div>\n </div>\n\n <div class=\"field__actions\" @click.stop>\n <button class=\"field__action\" title=\"Duplicate\" @click=\"duplicate\">\n <co-icon name=\"copy\" size=\"14\" />\n </button>\n <button class=\"field__action field__action--danger\" title=\"Delete\" @click=\"remove\">\n <co-icon name=\"trash\" size=\"14\" />\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n.field {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--co-spacing-md, 12px);\n padding: var(--co-spacing-md, 14px) var(--co-spacing-lg, 16px);\n background: var(--fb-panel);\n border: 1px solid var(--fb-border);\n border-radius: var(--co-border-radius-sm, 10px);\n cursor: pointer;\n transition: all 120ms;\n margin: 2px 0;\n}\n\n.field:hover {\n border-color: var(--fb-border-strong);\n box-shadow: var(--fb-shadow-sm);\n}\n\n.field:hover .field__actions { opacity: 1; }\n.field:hover .field__grip { opacity: 1; }\n\n.field.is-selected {\n border-color: var(--co-color-primary-azul, #2563eb);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent);\n}\n\n.field__grip {\n color: var(--co-semantic-text-muted, #9ca3af);\n letter-spacing: -2px;\n cursor: grab;\n opacity: 0.4;\n transition: opacity 120ms, color 120ms;\n user-select: none;\n font-size: 14px;\n line-height: 1;\n /* Padding gives a comfy click target — drag handles too small are\n * frustrating, especially on touch. */\n padding: 4px 2px;\n margin: -4px -2px;\n}\n\n.field:hover .field__grip {\n opacity: 1;\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.field__grip:active { cursor: grabbing; }\n\n.field__icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: var(--co-border-radius-xs, 8px);\n background: color-mix(in srgb, var(--co-color-primary-azul) 8%, transparent);\n color: var(--co-color-primary-azul, #2563eb);\n flex-shrink: 0;\n}\n\n.field__body { flex: 1; min-width: 0; }\n\n.field__name {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-xs, 6px);\n font-weight: 600;\n font-size: var(--co-font-size-14, 14px);\n color: var(--co-semantic-text-default, #111827);\n line-height: 1.3;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.field__meta {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-xs, 6px);\n margin-top: 3px;\n font-size: var(--co-font-size-12, 12px);\n color: var(--co-semantic-text-secondary, #6b7280);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.field__meta-id {\n font-family: ui-monospace, Menlo, monospace;\n background: var(--fb-bg);\n padding: 2px 7px;\n border-radius: 4px;\n font-size: 11px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 120px;\n flex-shrink: 1;\n}\n\n.field__meta-sep { color: var(--co-semantic-text-muted, #9ca3af); }\n\n.field__chip {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n padding: 2px 7px;\n border-radius: var(--co-border-radius-full, 9999px);\n background: var(--fb-bg);\n color: var(--co-semantic-text-secondary, #6b7280);\n flex-shrink: 0;\n white-space: nowrap;\n}\n\n.field__chip--warn {\n background: rgba(253, 191, 0, 0.15);\n color: #92400e;\n}\n\n.field__actions {\n display: flex;\n gap: 2px;\n opacity: 0;\n transition: opacity 120ms;\n}\n\n.field.is-selected .field__actions { opacity: 1; }\n\n.field__action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 0;\n background: transparent;\n border-radius: var(--co-border-radius-xxs, 6px);\n color: var(--co-semantic-text-secondary, #6b7280);\n transition: all 120ms;\n}\n\n.field__action:hover {\n background: var(--fb-bg);\n color: var(--co-semantic-text-default, #111827);\n}\n\n.field__action--danger:hover {\n color: var(--co-color-status-error, #aa2e1b);\n background: rgba(170, 46, 27, 0.08);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { VueDraggable } from 'vue-draggable-plus';\nimport { useSchemaStore } from '../stores/schema';\nimport EditableText from './EditableText.vue';\nimport FieldCard from './FieldCard.vue';\n\nconst props = defineProps<{\n pageIdx: number;\n}>();\n\nconst schema = useSchemaStore();\n\nconst page = computed(() => schema.data.pages[props.pageIdx]);\nconst isSelected = computed(\n () => schema.selection.pageIdx === props.pageIdx && schema.selection.fieldName === null,\n);\n\n/**\n * Field-order array bound to vue-draggable-plus via v-model. The getter\n * derives from the store; the setter pushes the new order back via the\n * `reorderFieldsByNames` helper (which validates + snapshots for undo).\n */\nconst fieldNames = computed<string[]>({\n get: () => (page.value ? Object.keys(page.value.fields) : []),\n set: (names) => schema.reorderFieldsByNames(props.pageIdx, names),\n});\n\n/** Highlight when the toolbox is dragging a new field-kind over the page. */\nconst toolboxDragOver = ref(false);\n\nfunction selectPage(): void {\n schema.selectPage(props.pageIdx);\n}\n\nfunction dup(ev: Event): void {\n ev.stopPropagation();\n schema.duplicatePage(props.pageIdx);\n}\n\nfunction remove(ev: Event): void {\n ev.stopPropagation();\n if (schema.data.pages.length <= 1) return;\n schema.removePage(props.pageIdx);\n}\n\nfunction patchPage(patch: Record<string, any>): void {\n schema.updatePage(props.pageIdx, patch);\n}\n\n// ── Native HTML5 drop from the toolbox ───────────────────────────────────\n// VueDraggable owns within-page reorder. The toolbox still uses native\n// HTML5 dnd to add new fields — we handle its payload here on the page\n// body, separate from SortableJS's pointer flow.\n\nfunction onBodyDragOver(ev: DragEvent): void {\n if (!ev.dataTransfer) return;\n if (!Array.from(ev.dataTransfer.types).includes('application/cobalt-field-kind')) return;\n ev.preventDefault();\n ev.dataTransfer.dropEffect = 'copy';\n toolboxDragOver.value = true;\n}\n\nfunction onBodyDragLeave(ev: DragEvent): void {\n // Only clear when leaving the body itself, not children.\n if (ev.currentTarget === ev.target) toolboxDragOver.value = false;\n}\n\nfunction onBodyDrop(ev: DragEvent): void {\n toolboxDragOver.value = false;\n const kind = ev.dataTransfer?.getData('application/cobalt-field-kind');\n if (!kind) return;\n ev.preventDefault();\n schema.addField(kind, props.pageIdx);\n}\n</script>\n\n<template>\n <section\n v-if=\"page\"\n class=\"page\"\n :class=\"{\n 'is-selected': isSelected,\n 'is-toolbox-drag': toolboxDragOver,\n 'page--quiz': schema.data.mode === 'quiz',\n }\"\n @click=\"selectPage\"\n >\n <header v-if=\"schema.data.mode !== 'quiz'\" class=\"page__head\">\n <div class=\"page__head-text\">\n <div class=\"page__head-pill\">PAGE {{ pageIdx + 1 }}</div>\n <EditableText\n class=\"page__title\"\n :model-value=\"page.title || ''\"\n placeholder=\"Untitled page\"\n @update:model-value=\"patchPage({ title: $event })\"\n />\n <EditableText\n class=\"page__desc\"\n :model-value=\"page.description || ''\"\n placeholder=\"Add a description for this page (optional)\"\n @update:model-value=\"patchPage({ description: $event })\"\n />\n </div>\n <div class=\"page__head-actions\" @click.stop>\n <button class=\"page__action\" title=\"Duplicate page\" @click=\"dup\">\n <co-icon name=\"copy\" size=\"14\" />\n <span>Duplicate</span>\n </button>\n <button\n class=\"page__action page__action--danger\"\n :disabled=\"schema.data.pages.length <= 1\"\n title=\"Delete page\"\n @click=\"remove\"\n >\n <co-icon name=\"trash\" size=\"14\" />\n <span>Delete</span>\n </button>\n </div>\n </header>\n\n <div\n class=\"page__body\"\n @dragover=\"onBodyDragOver\"\n @dragleave=\"onBodyDragLeave\"\n @drop=\"onBodyDrop\"\n >\n <VueDraggable\n v-model=\"fieldNames\"\n class=\"page__sortable\"\n :animation=\"140\"\n ghost-class=\"page__ghost\"\n chosen-class=\"page__chosen\"\n drag-class=\"page__drag\"\n handle=\".field__grip\"\n >\n <FieldCard\n v-for=\"(name, idx) in fieldNames\"\n :key=\"name\"\n :page-idx=\"pageIdx\"\n :field-idx=\"idx\"\n :field-name=\"name\"\n />\n </VueDraggable>\n\n <div v-if=\"fieldNames.length === 0\" class=\"page__empty\">\n <co-icon name=\"plus\" size=\"20\" />\n <span>Drag a field here or click one in the toolbox</span>\n </div>\n </div>\n </section>\n</template>\n\n<style scoped>\n.page {\n background: var(--fb-panel);\n border: 1px solid var(--fb-border);\n border-radius: var(--co-border-radius-lg, 16px);\n overflow: hidden;\n transition: border-color 120ms, box-shadow 120ms;\n box-shadow: var(--fb-shadow-sm);\n}\n\n.page:hover {\n box-shadow: var(--fb-shadow-md);\n}\n\n.page.is-selected {\n border-color: var(--co-color-primary-azul, #2563eb);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent), var(--fb-shadow-md);\n}\n\n/* Quiz mode — strip page card chrome so questions sit directly on the canvas. */\n.page--quiz {\n background: transparent;\n border: none;\n border-radius: 0;\n box-shadow: none;\n}\n\n.page--quiz:hover {\n box-shadow: none;\n}\n\n.page--quiz.is-selected {\n border-color: transparent;\n box-shadow: none;\n}\n\n/* Toolbox is dragging a new field over this page → outline cue. */\n.page.is-toolbox-drag {\n border-color: var(--co-color-primary-azul, #2563eb);\n border-style: dashed;\n background: color-mix(in srgb, var(--co-color-primary-azul) 4%, var(--fb-panel));\n}\n\n.page__head {\n display: flex;\n align-items: flex-start;\n gap: var(--co-spacing-md, 12px);\n padding: var(--co-spacing-xl, 20px) var(--co-spacing-2xl, 24px);\n border-bottom: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n}\n\n.page__head-text { flex: 1; min-width: 0; }\n\n.page__head-pill {\n display: inline-flex;\n align-items: center;\n font-size: var(--co-font-size-10, 10px);\n font-weight: 700;\n letter-spacing: 0.08em;\n color: var(--co-color-primary-azul, #2563eb);\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n padding: 3px 8px;\n border-radius: var(--co-border-radius-full, 9999px);\n margin-bottom: 6px;\n}\n\n.page__title {\n display: block;\n font-size: var(--co-font-size-18, 18px);\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n letter-spacing: -0.01em;\n line-height: 1.3;\n}\n\n.page__desc {\n display: block;\n margin-top: 4px;\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.page__head-actions {\n display: flex;\n gap: 2px;\n opacity: 0;\n transition: opacity 120ms;\n}\n\n.page:hover .page__head-actions,\n.page.is-selected .page__head-actions { opacity: 1; }\n\n.page__action {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n border: 0;\n background: transparent;\n border-radius: var(--co-border-radius-xxs, 6px);\n font-size: var(--co-font-size-12, 12px);\n font-weight: 500;\n color: var(--co-semantic-text-secondary, #6b7280);\n transition: all 120ms;\n}\n\n.page__action:hover:not(:disabled) {\n background: var(--fb-panel);\n color: var(--co-semantic-text-default, #111827);\n box-shadow: var(--fb-shadow-sm);\n}\n\n.page__action--danger:hover:not(:disabled) {\n color: var(--co-color-status-error, #aa2e1b);\n}\n\n.page__action:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.page__body {\n display: flex;\n flex-direction: column;\n padding: var(--co-spacing-xl, 20px) var(--co-spacing-2xl, 24px);\n gap: 0;\n min-height: 80px;\n}\n\n/* VueDraggable container — its children are the FieldCard rows. */\n.page__sortable {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xs, 6px);\n}\n\n/* ── Sortable visual states ─────────────────────────────────────────── *\n * ghost-class: placeholder showing where the dragged item will land.\n * chosen-class: applied to the picked-up element during the drag.\n * drag-class: applied to the drag image clone (browser-rendered when\n * using native HTML5 drag — most of the styling is decorative since\n * the browser snapshots the element at drag-start).\n */\n.page__ghost {\n opacity: 0.6;\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n border: 1px dashed var(--co-color-primary-azul, #2563eb) !important;\n border-radius: var(--co-border-radius-sm, 10px);\n}\n\n/* Hide the ghost row's contents so the placeholder is a clean drop-zone\n * outline (instead of a faded copy of the field). */\n.page__ghost > * {\n visibility: hidden;\n}\n\n.page__chosen {\n cursor: grabbing;\n}\n\n.page__drag {\n opacity: 0.95;\n box-shadow: var(--fb-shadow-lg);\n}\n\n.page__empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--co-spacing-md, 12px);\n padding: var(--co-spacing-4xl, 40px) var(--co-spacing-2xl, 24px);\n border: 2px dashed var(--fb-border);\n border-radius: var(--co-border-radius-sm, 12px);\n color: var(--co-semantic-text-secondary, #6b7280);\n font-size: var(--co-font-size-13, 13px);\n background: var(--fb-panel-soft);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, inject, type Ref } from 'vue';\nimport { themeToStyles } from '@prolibu-suite/cobalt-form-core';\nimport { useSchemaStore } from '../stores/schema';\nimport EditableText from './EditableText.vue';\nimport PageCard from './PageCard.vue';\n\nconst schema = useSchemaStore();\n\n/**\n * Translate the user's theme into inline CSS custom properties + data\n * attributes for the canvas. This makes theme edits **live** while the\n * user is in the Designer tab — the editor chrome (topbar/sidebars) stays\n * untouched; only the form area reacts.\n */\nconst themeStyles = computed(() => themeToStyles(schema.resolvedTheme));\n\nconst isQuiz = computed(() => schema.data.mode === 'quiz');\n\nconst titlePlaceholder = computed(() => isQuiz.value ? 'Quiz title…' : 'Untitled form');\nconst descPlaceholder = computed(() => isQuiz.value ? 'Quiz description (optional)' : 'Add a description (optional)');\n\nconst externalTitleError = inject<Ref<boolean>>('titleError', computed(() => false));\nconst titleHasError = computed(() => externalTitleError.value && !schema.data.title?.trim());\n\n/** Inline styles for the inner (form-scoped) container. */\nconst innerStyle = computed<Record<string, string>>(() => ({\n ...themeStyles.value.customProperties,\n}));\n\n/** Inline styles for the outer canvas — background color/image live here. */\nconst outerStyle = computed<Record<string, string>>(() => ({\n ...themeStyles.value.inlineStyles,\n}));\n\nconst dataAttrs = computed(() => ({\n 'data-theme': themeStyles.value.modifiers.colorScheme,\n 'data-appearance': themeStyles.value.modifiers.appearance,\n 'data-density': themeStyles.value.modifiers.density,\n 'data-radius': themeStyles.value.modifiers.radius,\n ...(themeStyles.value.modifiers.hideHeader ? { 'data-hide-header': '' } : {}),\n}));\n</script>\n\n<template>\n <div class=\"canvas\" :style=\"outerStyle\">\n <div class=\"canvas__inner\" :style=\"innerStyle\" v-bind=\"dataAttrs\">\n <header\n v-if=\"!themeStyles.modifiers.hideHeader\"\n class=\"canvas__head\"\n :class=\"{ 'is-selected': schema.selection.kind === 'form' }\"\n @click.stop=\"schema.selectForm()\"\n >\n <EditableText\n class=\"canvas__title\"\n :model-value=\"schema.data.title\"\n :placeholder=\"titlePlaceholder\"\n :error=\"titleHasError\"\n @update:model-value=\"schema.setTitle($event)\"\n />\n <EditableText\n class=\"canvas__desc\"\n :model-value=\"schema.data.description\"\n :placeholder=\"descPlaceholder\"\n @update:model-value=\"schema.setDescription($event)\"\n />\n </header>\n\n <div class=\"canvas__pages\">\n <PageCard\n v-for=\"(_, idx) in schema.data.pages\"\n :key=\"schema.data.pages[idx].name + '-' + idx\"\n :page-idx=\"idx\"\n />\n </div>\n\n <button v-if=\"schema.data.mode !== 'quiz'\" class=\"canvas__add-page\" @click=\"schema.addPage()\">\n <co-icon name=\"plus\" size=\"14\" />\n <span>Add page</span>\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* The outer canvas is the area BEHIND the form — background color/image\n * from the user's theme paint this layer. Spacing/padding keeps the form\n * card centred regardless of background. */\n.canvas {\n min-height: 100%;\n padding: var(--co-spacing-4xl, 40px) var(--co-spacing-2xl, 24px) var(--co-spacing-3xl, 32px);\n /* Default background is the editor's neutral gray; user can override\n * via theme. The `transparent` fallback lets the image show through. */\n background-color: var(--co-form-canvas-bg, var(--fb-bg, #f6f7f9));\n}\n\n.canvas__inner {\n max-width: 820px;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xl, 20px);\n}\n\n/* ── Dark mode: re-bind the FB surface tokens inside the canvas only.\n * The editor chrome (topbar, toolbox, side panel) stays light because the\n * `[data-theme=\"dark\"]` selector is scoped here. */\n.canvas__inner[data-theme=\"dark\"] {\n --fb-bg: #1a1f2b;\n --fb-panel: #232936;\n --fb-panel-soft: #1c2230;\n --fb-border: rgba(255, 255, 255, 0.08);\n --fb-border-strong: rgba(255, 255, 255, 0.16);\n --co-semantic-text-default: #f9fafb;\n --co-semantic-text-secondary: #9ca3af;\n --co-semantic-text-muted: #6b7280;\n --co-semantic-surface-hover: rgba(255, 255, 255, 0.06);\n --co-semantic-border-default: rgba(255, 255, 255, 0.08);\n --fb-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);\n --fb-shadow-md: 0 1px 2px rgba(0, 0, 0, 0.4), 0 4px 12px rgba(0, 0, 0, 0.35);\n color: var(--co-semantic-text-default);\n}\n\n.canvas[data-theme=\"dark\"] {\n background-color: #0f1420;\n}\n\n.canvas__inner[data-theme=\"dark\"] .canvas__title { color: #f9fafb; }\n.canvas__inner[data-theme=\"dark\"] .canvas__desc { color: #9ca3af; }\n\n/* Compact density — tighter gap between pages, smaller header padding. */\n.canvas__inner[data-density=\"compact\"] {\n gap: var(--co-spacing-md, 12px);\n}\n\n.canvas__inner[data-density=\"compact\"] .canvas__head {\n padding: var(--co-spacing-lg, 16px) var(--co-spacing-xl, 20px);\n}\n\n/* Flat appearance — strip the head card chrome so it sits directly on\n * the canvas background, matching how the rendered form would look. */\n.canvas__inner[data-appearance=\"flat\"] .canvas__head {\n background: transparent;\n border: 0;\n padding: var(--co-spacing-xl, 20px) 0;\n box-shadow: none;\n}\n\n/* ── Flat appearance ────────────────────────────────────────────────\n * Strips every card surface — pages, page headers, field rows — so\n * editing the form looks like editing on a blank canvas. Selection\n * outlines stay subtle so the user can still tell what's active.\n * Vue scoped CSS can't reach into other component scopes directly,\n * so the cross-component bits use :deep().\n */\n.canvas__inner[data-appearance=\"flat\"] :deep(.page),\n.canvas__inner[data-appearance=\"flat\"] :deep(.page:hover) {\n background: transparent;\n border: 0;\n box-shadow: none;\n}\n\n.canvas__inner[data-appearance=\"flat\"] :deep(.page.is-selected) {\n background: transparent;\n border: 1px dashed var(--co-color-primary-azul, #2563eb);\n box-shadow: none;\n}\n\n.canvas__inner[data-appearance=\"flat\"] :deep(.page__head) {\n background: transparent;\n border-bottom: 0;\n}\n\n/* Field rows lose their card chrome too — only a hover background and\n * the selection outline remain so the editing affordance survives. */\n.canvas__inner[data-appearance=\"flat\"] :deep(.field),\n.canvas__inner[data-appearance=\"flat\"] :deep(.field:hover) {\n background: transparent;\n border: 0;\n box-shadow: none;\n}\n\n.canvas__inner[data-appearance=\"flat\"] :deep(.field:hover) {\n background: var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.03));\n}\n\n.canvas__head {\n background: var(--co-form-header-bg, var(--fb-panel));\n border: 1px solid var(--fb-border);\n border-radius: var(--co-border-radius-lg, 16px);\n padding: var(--co-spacing-2xl, 24px) var(--co-spacing-3xl, 28px);\n box-shadow: var(--fb-shadow-sm);\n cursor: pointer;\n transition: border-color 120ms, box-shadow 120ms;\n min-height: var(--co-form-header-height, auto);\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n\n.canvas__head:hover {\n box-shadow: var(--fb-shadow-md);\n}\n\n.canvas__head.is-selected {\n border-color: var(--co-color-primary-azul, #2563eb);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent), var(--fb-shadow-md);\n}\n\n.canvas__head-pill {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.08em;\n color: var(--co-color-primary-azul, #2563eb);\n background: color-mix(in srgb, var(--co-color-primary-azul) 10%, transparent);\n padding: 3px 8px;\n border-radius: var(--co-border-radius-full, 9999px);\n margin-bottom: 6px;\n}\n\n.canvas__title {\n display: block;\n font-size: 26px;\n font-weight: 700;\n color: var(--co-semantic-text-default, #111827);\n letter-spacing: -0.02em;\n line-height: 1.2;\n}\n\n.canvas__desc {\n display: block;\n margin-top: var(--co-spacing-xs, 6px);\n font-size: var(--co-font-size-14, 14px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.canvas__pages {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xl, 20px);\n}\n\n.canvas__add-page {\n align-self: center;\n display: inline-flex;\n align-items: center;\n gap: var(--co-spacing-xs, 6px);\n padding: var(--co-spacing-sm, 10px) var(--co-spacing-xl, 20px);\n border: 1px dashed var(--fb-border-strong);\n background: var(--fb-panel);\n border-radius: var(--co-border-radius-full, 9999px);\n color: var(--co-semantic-text-secondary, #6b7280);\n font-size: var(--co-font-size-13, 13px);\n font-weight: 500;\n transition: all 120ms;\n}\n\n.canvas__add-page:hover {\n border-color: var(--co-color-primary-azul, #2563eb);\n color: var(--co-color-primary-azul, #2563eb);\n background: color-mix(in srgb, var(--co-color-primary-azul) 4%, transparent);\n border-style: solid;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport {\n CoButton,\n CoCheckbox,\n CoInput,\n CoSelect,\n CoSlider,\n CoSwitch,\n CoTab,\n CoTabGroup,\n} from '@prolibu-suite/cobalt-vue';\nimport { ACCENT_PRESET_HEX } from '@prolibu-suite/cobalt-form-core';\nimport { useSchemaStore } from '../stores/schema';\n\n/**\n * Selection-driven side panel with THREE independent scopes — each has\n * its own tab set and never overlaps with the others:\n *\n * - FORM scope → global form/theme settings (General/Header/Background/\n * Appearance). Selected by clicking the form title block.\n * - PAGE scope → page-specific (id, visibleIf). Default selection.\n * - FIELD scope → field-specific (Layout/Logic/Validation). Inline editor\n * on canvas + this side panel.\n */\n\ntype FormSection = 'general' | 'header' | 'background' | 'appearance' | 'advanced';\ntype PageSection = 'general' | 'logic';\ntype FieldSection = 'layout' | 'logic' | 'validation';\n\nconst FORM_TABS: { id: FormSection; label: string; icon: string }[] = [\n { id: 'general', label: 'General', icon: 'gear' },\n { id: 'header', label: 'Header', icon: 'image' },\n { id: 'background', label: 'Background', icon: 'paint-bucket' },\n { id: 'appearance', label: 'Appearance', icon: 'paint-brush' },\n { id: 'advanced', label: 'Advanced', icon: 'code' },\n];\n\nconst PAGE_TABS: { id: PageSection; label: string; icon: string }[] = [\n { id: 'general', label: 'General', icon: 'gear' },\n { id: 'logic', label: 'Logic', icon: 'git-branch' },\n];\n\nconst FIELD_TABS: { id: FieldSection; label: string; icon: string }[] = [\n { id: 'layout', label: 'Layout', icon: 'layout' },\n { id: 'logic', label: 'Logic', icon: 'git-branch' },\n { id: 'validation', label: 'Validation', icon: 'shield-check' },\n];\n\nconst APPEARANCE_OPTIONS = [\n { label: 'Panels (default)', value: 'panels' },\n { label: 'Without panels', value: 'flat' },\n];\nconst DENSITY_OPTIONS = [\n { label: 'Comfortable', value: 'comfortable' },\n { label: 'Compact', value: 'compact' },\n];\nconst RADIUS_OPTIONS = [\n { label: 'Rounded', value: 'rounded' },\n { label: 'Sharp', value: 'sharp' },\n];\nconst SIZE_OPTIONS = [\n { label: 'Auto', value: 'auto' },\n { label: 'Contain', value: 'contain' },\n { label: 'Cover', value: 'cover' },\n];\nconst ATTACHMENT_OPTIONS = [\n { label: 'Scroll', value: 'scroll' },\n { label: 'Fixed', value: 'fixed' },\n];\nconst FORMAT_OPTIONS = [\n { label: '(none)', value: '' },\n { label: 'email', value: 'email' },\n { label: 'url', value: 'url' },\n { label: 'uuid', value: 'uuid' },\n];\nconst ACCENT_CHIPS = [\n { id: 'azul', label: 'Azul', hex: ACCENT_PRESET_HEX.azul },\n { id: 'verde', label: 'Verde', hex: ACCENT_PRESET_HEX.verde },\n { id: 'amarillo', label: 'Amarillo', hex: ACCENT_PRESET_HEX.amarillo },\n { id: 'rosado', label: 'Rosado', hex: ACCENT_PRESET_HEX.rosado },\n] as const;\n\nconst schema = useSchemaStore();\nconst isQuiz = computed(() => schema.data.mode === 'quiz');\n\nconst kind = computed(() => schema.selection.kind);\nconst page = computed(() => schema.currentPage!);\nconst field = computed<Record<string, any>>(() => schema.selectedField || {});\nconst fieldName = computed(() => schema.selection.fieldName ?? '');\n\n// One tab-state per scope so user lands on the right default each time.\nconst formSection = ref<FormSection>('general');\nconst pageSection = ref<PageSection>('general');\nconst fieldSection = ref<FieldSection>('layout');\n\n// Reset tab to the first useful one when switching scopes.\nwatch(kind, (k) => {\n if (k === 'form') formSection.value = 'general';\n else if (k === 'page') pageSection.value = 'general';\n else if (k === 'field') fieldSection.value = 'layout';\n});\n\nconst theme = computed(() => schema.data.theme);\nconst resolved = computed(() => schema.resolvedTheme);\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\nfunction detailValue(ev: CustomEvent): any {\n const d = ev.detail;\n if (d != null && typeof d === 'object' && 'value' in d) return (d as any).value;\n if (d != null && typeof d === 'object' && 'checked' in d) return (d as any).checked;\n return d;\n}\n\nfunction toNumOrUndef(v: any): number | undefined {\n if (v === '' || v == null) return undefined;\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\nfunction patchField(key: string, value: any): void {\n schema.updateField(schema.selection.pageIdx, fieldName.value, { [key]: value });\n}\n\nfunction patchPage(key: string, value: any): void {\n schema.updatePage(schema.selection.pageIdx, { [key]: value });\n}\n\nfunction patchTheme(key: string, value: any): void {\n schema.setTheme({ [key]: value } as any);\n}\n\nfunction patchThemeSection(sec: 'background' | 'header', key: string, value: any): void {\n schema.setThemeSection(sec, { [key]: value });\n}\n\nfunction pickAccent(id: 'azul' | 'verde' | 'amarillo' | 'rosado'): void {\n patchTheme('accent', id);\n}\n\nfunction pickCustomAccent(hex: string): void {\n const s = hex.trim();\n if (!/^#[0-9a-fA-F]{3,8}$/.test(s)) return;\n schema.setTheme({ accent: 'custom', accentHex: s });\n}\n\nconst scopeLabel = computed(() => {\n if (kind.value === 'form') return 'Form';\n if (kind.value === 'page') return 'Page';\n return 'Field';\n});\n\nconst scopeSubtitle = computed(() => {\n if (kind.value === 'form') return schema.data.title || 'Untitled form';\n if (kind.value === 'page') return page.value?.name ?? '';\n return fieldName.value;\n});\n</script>\n\n<template>\n <div class=\"props\">\n <header class=\"props__head\">\n <div class=\"props__title\">{{ scopeLabel }}</div>\n <div class=\"props__subtitle\">{{ scopeSubtitle }}</div>\n </header>\n\n <!-- ═══════════ FORM SCOPE ═══════════ -->\n <template v-if=\"kind === 'form'\">\n <CoTabGroup\n class=\"props__tabs\"\n :value=\"formSection\"\n @coTabChange=\"formSection = (detailValue($event) as FormSection) || formSection\"\n >\n <CoTab\n v-for=\"t in FORM_TABS\"\n :key=\"t.id\"\n :label=\"t.label\"\n :value=\"t.id\"\n :icon-left=\"t.icon\"\n size=\"small\"\n />\n </CoTabGroup>\n\n <div class=\"props__body\">\n <template v-if=\"formSection === 'general'\">\n <div class=\"row\">\n <div class=\"row__label\">Color scheme</div>\n <div class=\"seg\">\n <button\n class=\"seg__btn\"\n :class=\"{ 'is-active': resolved.colorScheme === 'light' }\"\n @click=\"patchTheme('colorScheme', 'light')\"\n >\n <co-icon name=\"sun\" size=\"14\" />\n <span>Light</span>\n </button>\n <button\n class=\"seg__btn\"\n :class=\"{ 'is-active': resolved.colorScheme === 'dark' }\"\n @click=\"patchTheme('colorScheme', 'dark')\"\n >\n <co-icon name=\"moon\" size=\"14\" />\n <span>Dark</span>\n </button>\n </div>\n </div>\n <CoSelect\n label=\"Question appearance\"\n :options=\"JSON.stringify(APPEARANCE_OPTIONS)\"\n :value=\"resolved.questionAppearance\"\n @coChange=\"patchTheme('questionAppearance', detailValue($event))\"\n />\n <CoSelect\n label=\"Density\"\n :options=\"JSON.stringify(DENSITY_OPTIONS)\"\n :value=\"resolved.density\"\n @coChange=\"patchTheme('density', detailValue($event))\"\n />\n <CoSelect\n label=\"Border radius\"\n :options=\"JSON.stringify(RADIUS_OPTIONS)\"\n :value=\"resolved.borderRadius\"\n @coChange=\"patchTheme('borderRadius', detailValue($event))\"\n />\n </template>\n\n <template v-if=\"formSection === 'header'\">\n <CoSwitch\n label=\"Show header\"\n :checked=\"resolved.header.show\"\n @coChange=\"patchThemeSection('header', 'show', detailValue($event))\"\n />\n <CoInput\n label=\"Background color\"\n placeholder=\"#fff or rgb(...)\"\n :value=\"theme.header?.backgroundColor || ''\"\n @coInput=\"patchThemeSection('header', 'backgroundColor', detailValue($event) || null)\"\n />\n <CoInput\n label=\"Height\"\n placeholder=\"120px\"\n helper-text=\"Any CSS length. Leave empty for auto.\"\n :value=\"theme.header?.height || ''\"\n @coInput=\"patchThemeSection('header', 'height', detailValue($event) || null)\"\n />\n </template>\n\n <template v-if=\"formSection === 'background'\">\n <CoInput\n label=\"Background color\"\n placeholder=\"#F3F3F3\"\n :value=\"theme.background?.color || ''\"\n @coInput=\"patchThemeSection('background', 'color', detailValue($event) || null)\"\n />\n <CoInput\n label=\"Background image URL\"\n placeholder=\"https://…\"\n :value=\"theme.background?.imageUrl || ''\"\n @coInput=\"patchThemeSection('background', 'imageUrl', detailValue($event) || null)\"\n />\n <CoSelect\n label=\"Image size\"\n :options=\"JSON.stringify(SIZE_OPTIONS)\"\n :value=\"resolved.background.imageSize\"\n @coChange=\"patchThemeSection('background', 'imageSize', detailValue($event))\"\n />\n <CoSelect\n label=\"Image attachment\"\n :options=\"JSON.stringify(ATTACHMENT_OPTIONS)\"\n :value=\"resolved.background.imageAttachment\"\n @coChange=\"patchThemeSection('background', 'imageAttachment', detailValue($event))\"\n />\n <div class=\"row\">\n <div class=\"row__label\">Opacity ({{ resolved.background.opacity }}%)</div>\n <CoSlider\n :min=\"0\"\n :max=\"100\"\n :step=\"5\"\n :value=\"resolved.background.opacity\"\n show-value\n @coChange=\"patchThemeSection('background', 'opacity', detailValue($event))\"\n />\n </div>\n </template>\n\n <template v-if=\"formSection === 'appearance'\">\n <div class=\"row\">\n <div class=\"row__label\">Accent</div>\n <div class=\"accent\">\n <button\n v-for=\"chip in ACCENT_CHIPS\"\n :key=\"chip.id\"\n class=\"accent__chip\"\n :class=\"{ 'is-active': resolved.accent === chip.id }\"\n :style=\"{ '--accent': chip.hex }\"\n :title=\"chip.label\"\n @click=\"pickAccent(chip.id)\"\n >\n <span class=\"accent__chip-dot\" />\n <span>{{ chip.label }}</span>\n </button>\n </div>\n </div>\n <CoInput\n label=\"Custom accent (hex)\"\n placeholder=\"#2563EB\"\n helper-text=\"Sets accent to Custom and overrides the primary.\"\n :value=\"resolved.accent === 'custom' ? resolved.accentHex : ''\"\n @coChange=\"pickCustomAccent(detailValue($event) ?? '')\"\n />\n <CoInput\n label=\"Font family\"\n placeholder=\"Inter, system-ui, sans-serif\"\n helper-text=\"CSS font stack. Empty = Geist (Cobalt default).\"\n :value=\"theme.fontFamily || ''\"\n @coInput=\"patchTheme('fontFamily', detailValue($event) || undefined)\"\n />\n </template>\n\n <template v-if=\"formSection === 'advanced'\">\n <div class=\"row\">\n <div class=\"row__label\">Custom CSS</div>\n <textarea\n class=\"codebox\"\n spellcheck=\"false\"\n rows=\"14\"\n placeholder=\".co-form-wizard [data-co-field="email"] co-input { ... }\"\n :value=\"theme.customCss || ''\"\n @input=\"patchTheme('customCss', ($event.target as HTMLTextAreaElement).value || undefined)\"\n />\n <p class=\"props__hint\">\n Injected scoped to the form. Target fields via\n <code>[data-co-field=\"name\"]</code> or\n <code>[data-co-field-kind=\"select\"]</code>.\n <code>@import</code>, inline scripts and\n <code></style></code> are stripped.\n </p>\n </div>\n </template>\n </div>\n\n <footer class=\"props__foot\">\n <CoButton\n label=\"Reset theme\"\n variant=\"stroke\"\n size=\"s\"\n icon-left=\"arrow-counter-clockwise\"\n @click=\"schema.resetTheme\"\n />\n </footer>\n </template>\n\n <!-- ═══════════ PAGE SCOPE (hidden in quiz mode) ═══════════ -->\n <template v-else-if=\"kind === 'page' && !isQuiz\">\n <CoTabGroup\n class=\"props__tabs\"\n :value=\"pageSection\"\n @coTabChange=\"pageSection = (detailValue($event) as PageSection) || pageSection\"\n >\n <CoTab\n v-for=\"t in PAGE_TABS\"\n :key=\"t.id\"\n :label=\"t.label\"\n :value=\"t.id\"\n :icon-left=\"t.icon\"\n size=\"small\"\n />\n </CoTabGroup>\n\n <div class=\"props__body\">\n <template v-if=\"pageSection === 'general'\">\n <CoInput\n label=\"Name (id)\"\n :value=\"page.name\"\n helper-text=\"Used as the page key in the schema.\"\n @coInput=\"patchPage('name', detailValue($event))\"\n />\n <CoInput\n label=\"Title\"\n :value=\"page.title || ''\"\n helper-text=\"Also editable inline on the canvas.\"\n @coInput=\"patchPage('title', detailValue($event))\"\n />\n <CoSwitch\n label=\"Show title in form\"\n :checked=\"!page.hideTitle\"\n @coChange=\"patchPage('hideTitle', detailValue($event) ? undefined : true)\"\n />\n <CoInput\n label=\"Description\"\n multiline\n :value=\"page.description || ''\"\n @coInput=\"patchPage('description', detailValue($event))\"\n />\n <CoSwitch\n label=\"Show description in form\"\n :checked=\"!page.hideDescription\"\n @coChange=\"patchPage('hideDescription', detailValue($event) ? undefined : true)\"\n />\n </template>\n\n <template v-if=\"pageSection === 'logic'\">\n <CoInput\n label=\"visibleIf\"\n placeholder=\"{customerType} == 'premium'\"\n helper-text=\"Page hidden unless expression is truthy.\"\n :value=\"page.visibleIf || ''\"\n @coInput=\"patchPage('visibleIf', detailValue($event) || undefined)\"\n />\n </template>\n </div>\n </template>\n\n <!-- ═══════════ FIELD SCOPE ═══════════ -->\n <template v-else>\n <CoTabGroup\n class=\"props__tabs\"\n :value=\"fieldSection\"\n @coTabChange=\"fieldSection = (detailValue($event) as FieldSection) || fieldSection\"\n >\n <CoTab\n v-for=\"t in (isQuiz ? FIELD_TABS.filter(t => t.id === 'layout') : FIELD_TABS)\"\n :key=\"t.id\"\n :label=\"t.label\"\n :value=\"t.id\"\n :icon-left=\"t.icon\"\n size=\"small\"\n />\n </CoTabGroup>\n\n <div class=\"props__body\">\n <template v-if=\"fieldSection === 'layout'\">\n <CoCheckbox\n v-if=\"!isQuiz\"\n label=\"Full width (span all columns)\"\n :checked=\"!!field.full\"\n @coChange=\"patchField('full', detailValue($event))\"\n />\n <CoCheckbox\n v-if=\"!isQuiz\"\n label=\"Hidden\"\n :checked=\"!!field.hidden\"\n @coChange=\"patchField('hidden', detailValue($event))\"\n />\n <CoCheckbox\n v-if=\"!isQuiz\"\n label=\"Disabled\"\n :checked=\"!!field.disabled || !!field.readOnly\"\n @coChange=\"patchField('disabled', detailValue($event) || undefined)\"\n />\n <CoSelect\n v-if=\"!isQuiz && field.type === 'String'\"\n label=\"Format\"\n :options=\"JSON.stringify(FORMAT_OPTIONS)\"\n :value=\"field.format || ''\"\n @coChange=\"patchField('format', detailValue($event) || undefined)\"\n />\n\n <!-- Slot for host-app custom content below layout controls -->\n <slot name=\"field-layout-extra\" :field=\"field\" :field-name=\"fieldName\" :patch-field=\"patchField\" />\n </template>\n\n <template v-if=\"fieldSection === 'logic'\">\n <CoInput\n label=\"visibleIf\"\n placeholder=\"{type} == 'premium'\"\n :value=\"field.visibleIf || ''\"\n @coInput=\"patchField('visibleIf', detailValue($event) || undefined)\"\n />\n <CoInput\n label=\"enableIf\"\n placeholder=\"{accepted} == true\"\n :value=\"field.enableIf || ''\"\n @coInput=\"patchField('enableIf', detailValue($event) || undefined)\"\n />\n <CoInput\n label=\"requiredIf\"\n placeholder=\"{country} == 'US'\"\n :value=\"field.requiredIf || ''\"\n @coInput=\"patchField('requiredIf', detailValue($event) || undefined)\"\n />\n <p class=\"props__hint\">\n Operators: <code>== != > < >= <= contains && ||</code>\n </p>\n </template>\n\n <template v-if=\"fieldSection === 'validation'\">\n <CoCheckbox\n label=\"Required\"\n :checked=\"!!field.required\"\n @coChange=\"patchField('required', detailValue($event))\"\n />\n <CoInput\n v-if=\"field.type === 'String'\"\n label=\"Min length\"\n type=\"number\"\n :value=\"field.minLength ?? ''\"\n @coInput=\"patchField('minLength', toNumOrUndef(detailValue($event)))\"\n />\n <CoInput\n v-if=\"field.type === 'String'\"\n label=\"Max length\"\n type=\"number\"\n :value=\"field.maxLength ?? ''\"\n @coInput=\"patchField('maxLength', toNumOrUndef(detailValue($event)))\"\n />\n <CoInput\n v-if=\"field.type === 'Number'\"\n label=\"Min\"\n type=\"number\"\n :value=\"field.min ?? ''\"\n @coInput=\"patchField('min', toNumOrUndef(detailValue($event)))\"\n />\n <CoInput\n v-if=\"field.type === 'Number'\"\n label=\"Max\"\n type=\"number\"\n :value=\"field.max ?? ''\"\n @coInput=\"patchField('max', toNumOrUndef(detailValue($event)))\"\n />\n </template>\n </div>\n </template>\n </div>\n</template>\n\n<style scoped>\n.props {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.props__head {\n padding: var(--co-spacing-lg, 16px) var(--co-spacing-xl, 20px);\n border-bottom: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n}\n\n.props__title {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n.props__subtitle {\n font-family: ui-monospace, Menlo, monospace;\n font-size: var(--co-font-size-14, 14px);\n color: var(--co-semantic-text-default, #111827);\n margin-top: 4px;\n word-break: break-all;\n font-weight: 500;\n}\n\n.props__tabs {\n border-bottom: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n padding: 0 var(--co-spacing-sm, 8px);\n /* Horizontal scroll when tab labels overflow (the FORM scope has 5\n * tabs; even at 360px sidebar width some labels get clipped). */\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: thin;\n}\n\n.props__tabs::-webkit-scrollbar {\n height: 4px;\n}\n\n.props__tabs::-webkit-scrollbar-thumb {\n background: var(--fb-border-strong);\n border-radius: 2px;\n}\n\n.props__tabs::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.props__body {\n flex: 1;\n /* `min-height: 0` is required for a flex column child to be allowed\n * to shrink below its content size and let `overflow-y: auto` actually\n * scroll instead of pushing the parent past its viewport height. */\n min-height: 0;\n overflow-y: auto;\n padding: var(--co-spacing-xl, 20px);\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-md, 14px);\n}\n\n.props__foot {\n padding: var(--co-spacing-md, 12px) var(--co-spacing-lg, 16px);\n border-top: 1px solid var(--fb-border);\n background: var(--fb-panel-soft);\n}\n\n.props__hint {\n margin: 0;\n font-size: var(--co-font-size-11, 11px);\n color: var(--co-semantic-text-muted, #9ca3af);\n}\n\n.props__hint code {\n font-family: ui-monospace, Menlo, monospace;\n background: var(--co-semantic-surface-hover, #f3f4f6);\n padding: 1px 4px;\n border-radius: 3px;\n}\n\n.row {\n display: flex;\n flex-direction: column;\n gap: var(--co-spacing-xs, 6px);\n}\n\n.row__label {\n font-size: var(--co-font-size-11, 11px);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.seg {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 2px;\n padding: 2px;\n background: var(--fb-bg);\n border-radius: var(--co-border-radius-xs, 8px);\n border: 1px solid var(--fb-border);\n}\n\n.seg__btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 6px 10px;\n border: 0;\n background: transparent;\n border-radius: var(--co-border-radius-xxs, 6px);\n font-size: var(--co-font-size-13, 13px);\n color: var(--co-semantic-text-secondary, #6b7280);\n transition: all 120ms;\n}\n\n.seg__btn:hover { color: var(--co-semantic-text-default, #111827); }\n\n.seg__btn.is-active {\n background: var(--fb-panel);\n color: var(--co-color-primary-azul, #2563eb);\n font-weight: 600;\n box-shadow: var(--fb-shadow-sm);\n}\n\n.accent {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 6px;\n}\n\n.accent__chip {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border: 1px solid var(--fb-border);\n background: var(--fb-panel);\n border-radius: var(--co-border-radius-xs, 8px);\n font-size: var(--co-font-size-12, 12px);\n color: var(--co-semantic-text-default, #111827);\n text-align: left;\n transition: all 120ms;\n}\n\n.accent__chip:hover { border-color: var(--fb-border-strong); }\n\n.accent__chip.is-active {\n border-color: var(--accent);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 18%, transparent);\n}\n\n.accent__chip-dot {\n display: inline-block;\n width: 14px;\n height: 14px;\n border-radius: var(--co-border-radius-full, 9999px);\n background: var(--accent);\n}\n\n.codebox {\n font-family: ui-monospace, Menlo, monospace;\n font-size: var(--co-font-size-12, 12px);\n line-height: 1.55;\n padding: var(--co-spacing-sm, 10px) var(--co-spacing-md, 12px);\n border: 1px solid var(--co-semantic-border-default, var(--fb-border));\n border-radius: var(--co-border-radius-xs, 8px);\n background: var(--fb-panel-soft);\n color: var(--co-semantic-text-default, #111827);\n resize: vertical;\n outline: none;\n width: 100%;\n min-height: 220px;\n}\n\n.codebox:focus {\n border-color: var(--co-color-primary-azul, #2563eb);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--co-color-primary-azul) 12%, transparent);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport FieldToolbox from './FieldToolbox.vue';\nimport FieldCanvas from './FieldCanvas.vue';\nimport PropertiesPanel from './PropertiesPanel.vue';\nimport { useSchemaStore } from '../stores/schema';\n\nconst schema = useSchemaStore();\nconst leftOpen = ref(true);\nconst isQuiz = computed(() => schema.data.mode === 'quiz');\n</script>\n\n<template>\n <div class=\"designer\" :class=\"{ 'designer--left-collapsed': !leftOpen, 'designer--no-right': isQuiz }\">\n <aside class=\"designer__panel designer__panel--left\">\n <FieldToolbox />\n </aside>\n\n <section class=\"designer__canvas\">\n <button\n class=\"designer__toggle-left\"\n :title=\"leftOpen ? 'Hide toolbox' : 'Show toolbox'\"\n @click=\"leftOpen = !leftOpen\"\n >\n <co-icon :name=\"leftOpen ? 'caret-left' : 'list'\" :size=\"16\" />\n </button>\n <div class=\"designer__canvas-scroll\">\n <FieldCanvas />\n </div>\n </section>\n\n <aside v-if=\"!isQuiz\" class=\"designer__panel designer__panel--right\">\n <PropertiesPanel>\n <template #field-layout-extra=\"slotProps\">\n <slot name=\"field-layout-extra\" v-bind=\"slotProps\" />\n </template>\n </PropertiesPanel>\n </aside>\n </div>\n</template>\n\n<style scoped>\n.designer {\n display: grid;\n grid-template-columns: var(--fb-sidebar-left) 1fr var(--fb-sidebar-right);\n height: 100%;\n min-width: 0;\n}\n\n/* Explicit grid placement so items never shift */\n.designer__panel--left { grid-column: 1; }\n.designer__canvas { grid-column: 2; }\n.designer__panel--right { grid-column: 3; }\n\n.designer--left-collapsed {\n grid-template-columns: 0px 1fr var(--fb-sidebar-right);\n}\n\n.designer--no-right {\n grid-template-columns: var(--fb-sidebar-left) 1fr;\n}\n\n.designer--left-collapsed.designer--no-right {\n grid-template-columns: 0px 1fr;\n}\n\n.designer__panel {\n background: var(--fb-panel);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.designer__panel--left {\n border-right: 1px solid var(--fb-border);\n transition: opacity 150ms, max-width 150ms;\n}\n\n.designer--left-collapsed .designer__panel--left {\n opacity: 0;\n pointer-events: none;\n}\n\n.designer__panel--right {\n border-left: 1px solid var(--fb-border);\n min-width: 0;\n}\n\n.designer__canvas {\n position: relative;\n overflow: hidden;\n background: var(--fb-bg);\n min-width: 0;\n}\n\n.designer__canvas-scroll {\n height: 100%;\n overflow-y: auto;\n}\n\n.designer__toggle-left {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 8px;\n border: 1px solid var(--fb-border-strong);\n background: var(--fb-panel);\n color: var(--co-semantic-text-secondary, #6b7280);\n cursor: pointer;\n box-shadow: var(--fb-shadow-sm);\n transition: background 120ms, color 120ms;\n}\n\n.designer__toggle-left:hover {\n background: var(--fb-bg);\n color: var(--co-semantic-text-default, #111827);\n}\n\n/* ── Container-query responsive adjustments ─────────────────────────── */\n\n@container fb-shell (max-width: 900px) {\n .designer {\n --fb-sidebar-left: 200px;\n --fb-sidebar-right: 280px;\n }\n}\n\n@container fb-shell (max-width: 700px) {\n .designer {\n --fb-sidebar-left: 160px;\n --fb-sidebar-right: 240px;\n }\n}\n\n@container fb-shell (max-width: 550px) {\n .designer {\n --fb-sidebar-left: 120px;\n --fb-sidebar-right: 200px;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { CoButton } from '@prolibu-suite/cobalt-vue';\nimport { useSchemaStore } from '../stores/schema';\n\nconst schema = useSchemaStore();\n\nconst draft = ref('');\nconst error = ref<string | null>(null);\n\nconst serialized = computed(() => JSON.stringify(schema.exported, null, 2));\n\nwatch(serialized, (v) => (draft.value = v), { immediate: true });\n\nfunction apply(): void {\n try {\n const parsed = JSON.parse(draft.value);\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('Schema must be a JSON object');\n }\n schema.replaceAll(parsed);\n error.value = null;\n } catch (err) {\n error.value = (err as Error).message;\n }\n}\n\nfunction reset(): void {\n draft.value = serialized.value;\n error.value = null;\n}\n</script>\n\n<template>\n <div class=\"json-tab\">\n <div class=\"json-tab__bar\">\n <CoButton label=\"Apply\" variant=\"primary\" size=\"s\" @click=\"apply\" />\n <CoButton label=\"Discard\" variant=\"stroke\" size=\"s\" @click=\"reset\" />\n <span v-if=\"error\" class=\"json-tab__err\">{{ error }}</span>\n <span class=\"json-tab__hint\">\n Plain editor — Monaco integration is a follow-up.\n </span>\n </div>\n <textarea v-model=\"draft\" class=\"json-tab__area\" spellcheck=\"false\" />\n </div>\n</template>\n\n<style scoped>\n.json-tab {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: var(--co-spacing-lg, 16px);\n gap: var(--co-spacing-md, 12px);\n}\n\n.json-tab__bar {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-sm, 8px);\n}\n\n.json-tab__err {\n color: var(--co-color-status-error, #aa2e1b);\n font-size: var(--co-font-size-12, 12px);\n}\n\n.json-tab__hint {\n margin-left: auto;\n color: var(--co-semantic-text-secondary, #6b7280);\n font-size: var(--co-font-size-12, 12px);\n}\n\n.json-tab__area {\n flex: 1;\n font-family: ui-monospace, Menlo, monospace;\n font-size: var(--co-font-size-13, 13px);\n padding: var(--co-spacing-md, 12px);\n border: 1px solid var(--co-semantic-border-default, #e5e7eb);\n border-radius: var(--co-border-radius-xs, 8px);\n background: var(--co-semantic-surface-page, #fff);\n resize: none;\n outline: none;\n color: var(--co-semantic-text-default, #111827);\n}\n\n.json-tab__area:focus {\n border-color: var(--co-color-primary-azul, #2563eb);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { isPagedSchema } from '@prolibu-suite/cobalt-form-core';\nimport { useSchemaStore } from '../stores/schema';\n\nconst schema = useSchemaStore();\n\n/**\n * Route to the right renderer:\n * - paged schema (has `pages` array) → `<co-form-wizard>` which knows how\n * to render title / description / stepper / pages.\n * - flat schema → `<co-form>` (simple single-page).\n *\n * `isMultiPage` (pages > 1) is NOT the right check because a single-page\n * schema that carries a `theme` block is still paged on export — and\n * `<co-form>` would mistreat the top-level `pages`/`theme` keys as fields.\n */\nconst exported = computed(() => schema.exported);\nconst isPaged = computed(() => isPagedSchema(exported.value));\nconst schemaJson = computed(() => JSON.stringify(exported.value));\nconst themeJson = computed(() => {\n const out = Object.keys(schema.data.theme).length > 0\n ? JSON.stringify(schema.data.theme)\n : undefined;\n console.log('[PreviewTab] themeJson →', out, 'rawTheme:', schema.data.theme, 'isPaged:', isPaged.value);\n return out;\n});\n\nconst lastSubmit = ref<Record<string, any> | null>(null);\n\nfunction onSubmit(ev: Event): void {\n const detail = (ev as CustomEvent).detail;\n lastSubmit.value = detail?.values ?? null;\n}\n</script>\n\n<template>\n <div class=\"preview\">\n <div class=\"preview__pane preview__pane--form\">\n <!-- No external title block: the wizard renders title + description\n inside its themed scope (so the bg/colors wrap the title too). -->\n <co-form-wizard\n v-if=\"isPaged\"\n :key=\"schemaJson + (themeJson ?? '')\"\n :schema=\"schemaJson\"\n :theme=\"themeJson\"\n layout=\"grid\"\n columns=\"1\"\n :validate-on=\"schema.data.mode === 'quiz' ? 'submit' : 'change'\"\n @coSubmit=\"onSubmit\"\n />\n <co-form\n v-else\n :key=\"schemaJson + (themeJson ?? '')\"\n :schema=\"schemaJson\"\n :theme=\"themeJson\"\n layout=\"grid\"\n columns=\"2\"\n :validate-on=\"schema.data.mode === 'quiz' ? 'submit' : 'change'\"\n @coSubmit=\"onSubmit\"\n />\n </div>\n\n <aside class=\"preview__pane preview__pane--side\">\n <div class=\"preview__pane-head\">\n <h3 class=\"preview__title\">Last submit</h3>\n <p class=\"preview__desc\">Fill the form and press Submit to see the payload.</p>\n </div>\n <pre v-if=\"lastSubmit\" class=\"preview__json\">{{ JSON.stringify(lastSubmit, null, 2) }}</pre>\n <div v-else class=\"preview__empty\">No submissions yet.</div>\n </aside>\n </div>\n</template>\n\n<style scoped>\n.preview {\n display: grid;\n grid-template-columns: 1fr 360px;\n gap: var(--co-spacing-lg, 16px);\n padding: var(--co-spacing-lg, 16px);\n height: 100%;\n overflow: hidden;\n}\n\n.preview__pane {\n background: var(--co-semantic-surface-page, #fff);\n border: 1px solid var(--co-semantic-border-default, #e5e7eb);\n border-radius: var(--co-border-radius-sm, 12px);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n/* The form pane is a transparent surface — the wizard/co-form inside paints\n * its own background (via the theme). Keeping the pane edge-less avoids the\n * \"white frame around a themed form\" look. */\n.preview__pane--form {\n background: transparent;\n border: 0;\n padding: 0;\n}\n\n.preview__pane-head {\n padding: var(--co-spacing-lg, 16px) var(--co-spacing-xl, 20px);\n border-bottom: 1px solid var(--co-semantic-border-default, #e5e7eb);\n}\n\n.preview__pane--side > :not(.preview__pane-head) {\n padding: var(--co-spacing-md, 12px) var(--co-spacing-lg, 16px);\n}\n\n.preview__title {\n margin: 0;\n font-size: var(--co-font-size-14, 14px);\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n}\n\n.preview__desc {\n margin: 4px 0 0;\n font-size: var(--co-font-size-12, 12px);\n color: var(--co-semantic-text-secondary, #6b7280);\n}\n\n.preview__json {\n margin: var(--co-spacing-md, 12px) var(--co-spacing-lg, 16px);\n background: #0b1020;\n color: #e2e8f0;\n padding: var(--co-spacing-md, 12px);\n border-radius: var(--co-border-radius-xs, 8px);\n font-size: var(--co-font-size-12, 12px);\n overflow: auto;\n max-height: 100%;\n}\n\n.preview__empty {\n margin: var(--co-spacing-md, 12px) var(--co-spacing-lg, 16px);\n padding: var(--co-spacing-2xl, 24px);\n text-align: center;\n border: 1px dashed var(--co-semantic-border-default, #e5e7eb);\n border-radius: var(--co-border-radius-xs, 8px);\n color: var(--co-semantic-text-secondary, #6b7280);\n font-size: var(--co-font-size-12, 12px);\n}\n\n/* ── Container-query responsive adjustments ─────────────────────────── */\n\n@container fb-shell (max-width: 900px) {\n .preview {\n grid-template-columns: 1fr 280px;\n }\n}\n\n@container fb-shell (max-width: 700px) {\n .preview {\n grid-template-columns: 1fr;\n grid-template-rows: 1fr auto;\n overflow-y: auto;\n }\n\n .preview__pane--side {\n max-height: 300px;\n }\n}\n\n@container fb-shell (max-width: 450px) {\n .preview {\n padding: var(--co-spacing-sm, 8px);\n gap: var(--co-spacing-sm, 8px);\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, provide, ref, watch } from 'vue';\nimport { CoIconButton } from '@prolibu-suite/cobalt-vue';\nimport { defineCustomElements as defineCobaltCore } from '@prolibu-suite/cobalt-core/loader';\nimport { defineCustomElements as defineCobaltForm } from '@prolibu-suite/cobalt-form/loader';\nimport {\n SCHEMA_STORE_KEY,\n createSchemaStore,\n type SchemaEvent,\n} from './stores/schema';\nimport DesignerTab from './components/DesignerTab.vue';\nimport JsonTab from './components/JsonTab.vue';\nimport PreviewTab from './components/PreviewTab.vue';\n\n/**\n * Reusable Vue 3 component for the Cobalt Form Builder.\n *\n * Each instance creates its own scoped store via `createSchemaStore()`\n * and provides it via `SCHEMA_STORE_KEY`. Multiple builders on the same\n * page therefore stay isolated.\n *\n * Slots let host apps replace the chrome around the editor:\n * - `brand` — left side of the topbar (default: \"CF\" mark + title)\n * - `actions` — right side of the topbar (default: undo/redo buttons)\n * - `before` — content above the topbar (custom banner / breadcrumb)\n * - `after` — content below the editor (custom footer / save bar)\n * - `[custom]` — any custom tab slot. Pass `{ id, label }` objects in the\n * `tabs` prop and provide a matching `#<id>` slot.\n * Each custom slot receives `{ store }` as slot props.\n *\n * Granular `SchemaEvent`s are re-emitted as Vue events the host can\n * listen for analytics, autosave, etc.\n */\n\ntype BuiltinTabId = 'designer' | 'preview' | 'json';\n\nexport interface CustomTab {\n id: string;\n label: string;\n}\n\ntype TabEntry = BuiltinTabId | CustomTab;\n\nconst props = withDefaults(\n defineProps<{\n /** The schema being edited (paged shape preferred — `{title,pages,theme}`). */\n modelValue?: Record<string, any>;\n /** Which top-level tabs to expose. Strings for built-in tabs, objects for custom ones. */\n tabs?: TabEntry[];\n /** Hide the builder's brand mark (when the host has its own chrome). */\n hideBrand?: boolean;\n /** Brand label text (defaults to \"Cobalt Form Builder\"). */\n brandLabel?: string;\n /** Skip auto-registering Cobalt custom elements (host already did it). */\n skipCobaltRegister?: boolean;\n /**\n * Force the schema mode. When set, the store's `data.mode` is synced\n * to this value on mount and whenever it changes. This drives quiz-mode\n * behavior (filtered toolbox, answer-key panel, etc.).\n */\n mode?: 'form' | 'quiz' | 'survey';\n /** Show error state on the title field (e.g. after failed validation). */\n titleError?: boolean;\n }>(),\n {\n modelValue: () => ({}),\n tabs: () => ['designer', 'preview', 'json'],\n hideBrand: false,\n brandLabel: 'Cobalt Form Builder',\n skipCobaltRegister: false,\n mode: undefined,\n titleError: false,\n },\n);\n\nconst emit = defineEmits<{\n // v-model\n 'update:modelValue': [value: Record<string, any>];\n // Granular events — fired by the store on every mutation. The shape\n // matches `SchemaEvent`. Each is also re-emitted with its specific name\n // so the host can use either `@event` or `@field-added` etc.\n event: [payload: SchemaEvent];\n 'field-added': [payload: Extract<SchemaEvent, { type: 'field-added' }>];\n 'field-removed': [payload: Extract<SchemaEvent, { type: 'field-removed' }>];\n 'field-renamed': [payload: Extract<SchemaEvent, { type: 'field-renamed' }>];\n 'field-updated': [payload: Extract<SchemaEvent, { type: 'field-updated' }>];\n 'field-duplicated': [payload: Extract<SchemaEvent, { type: 'field-duplicated' }>];\n 'field-reordered': [payload: Extract<SchemaEvent, { type: 'field-reordered' }>];\n 'page-added': [payload: Extract<SchemaEvent, { type: 'page-added' }>];\n 'page-removed': [payload: Extract<SchemaEvent, { type: 'page-removed' }>];\n 'page-duplicated': [payload: Extract<SchemaEvent, { type: 'page-duplicated' }>];\n 'page-updated': [payload: Extract<SchemaEvent, { type: 'page-updated' }>];\n 'theme-changed': [payload: Extract<SchemaEvent, { type: 'theme-changed' }>];\n 'selection-changed': [payload: Extract<SchemaEvent, { type: 'selection-changed' }>];\n 'schema-replaced': [payload: Extract<SchemaEvent, { type: 'schema-replaced' }>];\n undo: [payload: Extract<SchemaEvent, { type: 'undo' }>];\n redo: [payload: Extract<SchemaEvent, { type: 'redo' }>];\n}>();\n\ndefineSlots<{\n brand?: () => any;\n actions?: (props: { store: ReturnType<typeof createSchemaStore> }) => any;\n before?: () => any;\n after?: (props: { store: ReturnType<typeof createSchemaStore> }) => any;\n 'field-layout-extra'?: (props: { field: Record<string, any>; fieldName: string; patchField: (key: string, value: any) => void }) => any;\n [key: string]: ((props: { store: ReturnType<typeof createSchemaStore> }) => any) | ((props: any) => any) | undefined;\n}>();\n\nconst BUILTIN_LABELS: Record<string, string> = {\n designer: 'Designer',\n preview: 'Preview',\n json: 'JSON Editor',\n};\n\nconst BUILTIN_IDS = new Set<string>(Object.keys(BUILTIN_LABELS));\n\nfunction normalizeTab(entry: TabEntry): { id: string; label: string } {\n if (typeof entry === 'string') {\n return { id: entry, label: BUILTIN_LABELS[entry] ?? entry };\n }\n return { id: entry.id, label: entry.label };\n}\n\nconst visibleTabs = computed(() => props.tabs.map(normalizeTab));\n\nconst customTabIds = computed(() =>\n visibleTabs.value.filter((t) => !BUILTIN_IDS.has(t.id)).map((t) => t.id),\n);\n\nconst firstTabId = computed(() => {\n const first = props.tabs[0];\n return typeof first === 'string' ? first : first?.id ?? 'designer';\n});\n\nconst active = ref<string>(firstTabId.value);\n\n// ── Per-instance store ───────────────────────────────────────────────────\n\nlet suppressModelEmit = false;\n\nconst store = createSchemaStore({\n initialSchema: props.modelValue,\n onEvent: (event) => {\n // Generic \"event\" fires for everything (good for logging) plus a\n // type-specific event so consumers can listen narrowly.\n emit('event', event);\n // @ts-expect-error — emit name comes from the event's type literally;\n // the union typing above already enforces payload shape per name.\n emit(event.type, event);\n },\n});\n\nprovide(SCHEMA_STORE_KEY, store);\n\nconst titleError = computed(() => props.titleError);\nprovide('titleError', titleError);\n\n// ── v-model bridging ─────────────────────────────────────────────────────\n\nwatch(\n () => store.exported,\n (next) => {\n if (suppressModelEmit) return;\n emit('update:modelValue', next as Record<string, any>);\n },\n { deep: true },\n);\n\nwatch(\n () => props.modelValue,\n (next) => {\n if (!next) return;\n const incoming = JSON.stringify(next);\n const current = JSON.stringify(store.exported);\n if (incoming === current) return;\n suppressModelEmit = true;\n store.replaceAll(next);\n suppressModelEmit = false;\n },\n { deep: true },\n);\n\n// ── Lifecycle ────────────────────────────────────────────────────────────\n\nonMounted(() => {\n if (!props.skipCobaltRegister) {\n defineCobaltCore();\n defineCobaltForm();\n }\n // Sync the mode prop to the store (if provided).\n if (props.mode) {\n store.setMode(props.mode);\n }\n window.addEventListener('keydown', onKey);\n});\n\n// Keep store mode in sync when the prop changes at runtime.\nwatch(\n () => props.mode,\n (next) => {\n if (next) store.setMode(next);\n },\n);\n\nonBeforeUnmount(() => {\n window.removeEventListener('keydown', onKey);\n});\n\n// ── Keyboard shortcuts ──────────────────────────────────────────────────\n\nfunction onKey(ev: KeyboardEvent): void {\n // Esc collapses inline editor (skip when focus is in an editable element).\n if (ev.key === 'Escape') {\n const target = ev.target as HTMLElement | null;\n const editable =\n target?.isContentEditable ||\n target?.tagName === 'INPUT' ||\n target?.tagName === 'TEXTAREA' ||\n target?.tagName === 'SELECT';\n if (editable) {\n (target as HTMLElement).blur();\n return;\n }\n if (store.selection.fieldName !== null) {\n store.selectPage(store.selection.pageIdx);\n }\n return;\n }\n\n const isMod = ev.metaKey || ev.ctrlKey;\n if (!isMod) return;\n if (ev.key === 'z' && !ev.shiftKey) {\n ev.preventDefault();\n store.undo();\n } else if ((ev.key === 'z' && ev.shiftKey) || ev.key === 'y') {\n ev.preventDefault();\n store.redo();\n }\n}\n</script>\n\n<template>\n <div class=\"shell\">\n <slot name=\"before\" />\n\n <header class=\"shell__topbar\">\n <slot name=\"brand\">\n <div v-if=\"!hideBrand\" class=\"shell__brand\">\n <div class=\"shell__brand-mark\">CF</div>\n <h1 class=\"shell__brand-title\">{{ brandLabel }}</h1>\n </div>\n </slot>\n\n <nav class=\"shell__tabs\">\n <button\n v-for=\"t in visibleTabs\"\n :key=\"t.id\"\n class=\"shell__tab\"\n :class=\"{ 'is-active': active === t.id }\"\n @click=\"active = t.id\"\n >\n {{ t.label }}\n </button>\n </nav>\n\n <div class=\"shell__actions\">\n <slot name=\"actions\" :store=\"store\">\n <CoIconButton\n icon=\"arrow-counter-clockwise\"\n variant=\"outlined\"\n size=\"sm\"\n label=\"Undo (⌘Z)\"\n :disabled=\"!store.canUndo\"\n @click=\"store.undo()\"\n />\n <CoIconButton\n icon=\"arrow-clockwise\"\n variant=\"outlined\"\n size=\"sm\"\n label=\"Redo (⌘⇧Z)\"\n :disabled=\"!store.canRedo\"\n @click=\"store.redo()\"\n />\n </slot>\n </div>\n </header>\n\n <main class=\"shell__content\">\n <DesignerTab v-show=\"active === 'designer'\">\n <template #field-layout-extra=\"slotProps\">\n <slot name=\"field-layout-extra\" v-bind=\"slotProps\" />\n </template>\n </DesignerTab>\n <PreviewTab v-if=\"active === 'preview'\" />\n <JsonTab v-if=\"active === 'json'\" />\n <div\n v-for=\"cid in customTabIds\"\n v-show=\"active === cid\"\n :key=\"cid\"\n class=\"shell__custom-tab\"\n >\n <slot :name=\"cid\" :store=\"store\" />\n </div>\n </main>\n\n <slot name=\"after\" :store=\"store\" />\n </div>\n</template>\n\n<style scoped>\n.shell {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n container-type: inline-size;\n container-name: fb-shell;\n}\n\n.shell__topbar {\n display: flex;\n align-items: center;\n height: var(--fb-topbar-height);\n padding: 0 var(--co-spacing-2xl, 24px);\n background: var(--fb-panel);\n border-bottom: 1px solid var(--fb-border);\n gap: var(--co-spacing-2xl, 24px);\n flex-shrink: 0;\n}\n\n.shell__brand {\n display: flex;\n align-items: center;\n gap: var(--co-spacing-md, 12px);\n padding-right: var(--co-spacing-lg, 16px);\n border-right: 1px solid var(--fb-border);\n height: 36px;\n}\n\n.shell__brand-mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: var(--co-border-radius-xs, 8px);\n background: var(--co-color-primary-azul, #2563eb);\n color: white;\n font-weight: 700;\n font-size: 13px;\n letter-spacing: 0.02em;\n box-shadow: 0 1px 2px color-mix(in srgb, var(--co-color-primary-azul) 25%, transparent);\n}\n\n.shell__brand-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--co-semantic-text-default, #111827);\n letter-spacing: -0.01em;\n}\n\n.shell__tabs {\n display: flex;\n align-items: center;\n height: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none; /* Firefox */\n -ms-overflow-style: none; /* IE/Edge */\n min-width: 0;\n}\n\n.shell__tabs::-webkit-scrollbar {\n display: none; /* Chrome / Safari */\n}\n\n.shell__tab {\n padding: 0 var(--co-spacing-lg, 16px);\n height: 100%;\n border: 0;\n background: transparent;\n font-size: var(--co-font-size-14, 14px);\n color: var(--co-semantic-text-secondary, #6b7280);\n border-bottom: 2px solid transparent;\n font-weight: 500;\n transition: color 120ms;\n cursor: pointer;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.shell__tab:hover { color: var(--co-semantic-text-default, #111827); }\n\n.shell__tab.is-active {\n color: var(--co-color-primary-azul, #2563eb);\n border-bottom-color: var(--co-color-primary-azul, #2563eb);\n font-weight: 600;\n}\n\n.shell__actions {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--co-spacing-xs, 6px);\n}\n\n.shell__content {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n background: var(--fb-bg);\n}\n\n.shell__custom-tab {\n height: 100%;\n overflow-y: auto;\n}\n\n/* ── Container-query responsive adjustments ─────────────────────────── */\n\n@container fb-shell (max-width: 700px) {\n .shell__topbar {\n --fb-topbar-height: 48px;\n padding: 0 var(--co-spacing-md, 12px);\n gap: var(--co-spacing-md, 12px);\n }\n\n .shell__brand {\n display: none;\n }\n\n .shell__tab {\n padding: 0 var(--co-spacing-sm, 10px);\n font-size: var(--co-font-size-13, 13px);\n }\n}\n\n@container fb-shell (max-width: 450px) {\n .shell__tab {\n padding: 0 var(--co-spacing-xs, 6px);\n font-size: var(--co-font-size-12, 12px);\n }\n\n .shell__actions {\n gap: 2px;\n }\n}\n</style>\n"],"names":["HISTORY_LIMIT","blankSchema","FIELD_DEFAULTS","titleize","s","c","deepClone","v","createSchemaStore","options","emit","data","ref","selection","past","future","canUndo","computed","canRedo","currentPage","selectedField","page","name","setSelection","next","selectField","pageIdx","fieldName","selectPage","selectForm","snapshot","undo","prev","clampSelection","redo","pi","fn","kind","setTitle","title","setDescription","description","setMode","mode","addPage","num","newIdx","removePage","idx","duplicatePage","src","copy","uniquePageName","updatePage","patch","base","existing","p","i","uniqueFieldName","n","applyModeOverrides","def","addField","factory","insertFieldAfter","refName","entries","refIdx","newEntry","removeField","duplicateField","newName","k","updateField","replaceFieldDef","newDef","renameField","oldName","moveField","fromIdx","toIdx","names","moved","reorderFieldsByNames","resolvedTheme","resolveTheme","setTheme","setThemeSection","section","current","resetTheme","replaceAll","raw","isPagedSchema","paged","toPagedSchema","exported","hasTheme","reactive","SCHEMA_STORE_KEY","useSchemaStore","store","inject","FIELD_CATALOG","GROUP_LABELS","schema","query","groups","q","isQuiz","f","filtered","a","byGroup","item","onDragStart","ev","onSelect","detailValue","d","_openBlock","_createElementBlock","_hoisted_1","_unref","_cache","$event","_createElementVNode","_hoisted_2","_createVNode","CoInput","_hoisted_3","_hoisted_4","_toDisplayString","_Fragment","_renderList","g","_hoisted_5","_hoisted_6","CoListItem","contentEditable","props","__props","__emit","el","focused","hasContent","watch","onInput","commit","onBlur","onFocus","onKeydown","_normalizeClass","an","Pe","yt","wt","bt","t","e","fe","$e","o","Ht","mn","vn","St","bn","yn","Dt","_t","wn","En","Tt","Ke","Sn","Dn","_n","Tn","Ct","Cn","On","Ot","r","ne","In","Ye","ie","An","xn","Nn","re","ae","xe","It","Te","Lt","Wt","Gt","S","E","We","Pn","Q","At","V","h","ye","jt","te","P","l","u","m","y","b","w","xt","ce","we","ht","J","Nt","Mn","Fn","Je","Ce","zt","Rn","Ut","Vt","$t","Xn","Bn","Yn","ge","Ze","Ne","kn","L","G","R","j","Hn","z","O","T","pe","Be","C","ue","Se","Y","be","Oe","$","se","Zt","Qt","W","Me","ve","Ge","je","de","Z","Qe","et","Pt","Mt","me","Ie","Ae","Fe","ke","H","tt","lt","ze","Ve","Re","Ft","Ln","qt","Kt","Wn","Gn","Jt","he","jn","Zn","nt","He","ee","Ee","vt","rn","Xe","B","$n","Vn","X","K","oe","le","D","A","qn","I","_","x","M","F","Un","st","zn","Jn","Kn","N","De","ut","ct","ot","rt","Ue","_e","Qn","Rt","Le","it","en","pt","gt","eo","to","dt","sn","no","un","kt","tn","nn","Xt","oo","Yt","on","U","qe","mt","ln","ft","ro","lo","cn","Et","dn","hn","pn","catalogEntry","TYPE_OPTIONS","key","value","onRename","err","collapse","duplicate","remove","PRESERVED_KEYS","changeType","newKind","baseDefaults","preserved","updateOption","removeOption","addOption","imgInputRefs","setImgInputRef","triggerImgInput","optionImages","setOptionImage","dataUrl","removeOptionImage","onImageFileSelected","input","file","img","objectUrl","width","height","ratio","canvas","ctx","addImageOption","imgs","removeImageOption","draggingOptionIdx","optionDropTarget","onOptionDragStart","onOptionDragOver","onOptionDragLeave","onOptionDrop","from","target","onOptionDragEnd","hasOther","toggleOther","insertOpen","INSERT_OPTIONS","ids","insertAfter","insertSection","previewInputType","toNumOrUndef","sliderMin","sliderMax","sliderStep","sliderPreviewValue","ratingMax","answerKeyOpen","correctOptions","fieldPoints","fieldExplanation","fieldSampleAnswer","fieldCorrectValue","hasAnswerKey","answerKeyLabel","label","toggleCorrectOption","pos","isMulti","setPoints","setExplanation","setSampleAnswer","setCorrectValue","closeAnswerKey","displayTypeLabel","booleanOptions","orderingItems","updateOrderingItem","removeOrderingItem","addOrderingItem","correctOrder","correctOrderLabels","origIdx","orderingDragIdx","orderingDropIdx","onOrderingDrop","arr","insertAt","matchLeft","matchRight","updateMatchLeft","updateMatchRight","addMatchPair","correctPairs","setCorrectPair","leftIdx","rightIdx","pairs","removeMatchPair","reindexed","ki","newK","newV","EditableText","_hoisted_7","CoSelect","CoIconButton","_hoisted_8","_hoisted_9","_hoisted_10","opt","_hoisted_12","CoButton","CoCheckbox","_hoisted_13","CoSwitch","_hoisted_14","_hoisted_15","CoRating","_hoisted_16","_hoisted_17","CoSlider","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_24","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_createBlock","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","posIdx","_withModifiers","_hoisted_46","_hoisted_47","term","_hoisted_48","defText","rIdx","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","entry","isSelected","select","FieldCardExpanded","_createTextVNode","fieldNames","toolboxDragOver","dup","patchPage","onBodyDragOver","onBodyDragLeave","onBodyDrop","VueDraggable","FieldCard","themeStyles","themeToStyles","titlePlaceholder","descPlaceholder","externalTitleError","titleHasError","innerStyle","outerStyle","dataAttrs","_mergeProps","PageCard","FORM_TABS","PAGE_TABS","FIELD_TABS","APPEARANCE_OPTIONS","DENSITY_OPTIONS","RADIUS_OPTIONS","SIZE_OPTIONS","ATTACHMENT_OPTIONS","FORMAT_OPTIONS","ACCENT_CHIPS","ACCENT_PRESET_HEX","field","formSection","pageSection","fieldSection","theme","resolved","patchField","patchTheme","patchThemeSection","sec","pickAccent","id","pickCustomAccent","hex","scopeLabel","scopeSubtitle","CoTabGroup","CoTab","_hoisted_11","chip","_normalizeStyle","_renderSlot","_ctx","leftOpen","FieldToolbox","FieldCanvas","PropertiesPanel","_withCtx","slotProps","draft","error","serialized","apply","parsed","reset","isPaged","schemaJson","themeJson","out","lastSubmit","onSubmit","detail","BUILTIN_LABELS","BUILTIN_IDS","normalizeTab","visibleTabs","customTabIds","firstTabId","first","active","suppressModelEmit","event","provide","titleError","incoming","onMounted","defineCobaltCore","defineCobaltForm","onKey","onBeforeUnmount","DesignerTab","PreviewTab","JsonTab","cid","_vShow"],"mappings":"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","x_google_ignoreList":[4]}
|