@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.
@@ -1 +1 @@
1
- {"version":3,"file":"cobalt-form-builder.cjs","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=&quot;email&quot;] 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>&lt;/style&gt;</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>== != &gt; &lt; &gt;= &lt;= contains &amp;&amp; ||</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","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","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","j","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","t","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.cjs","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=&quot;email&quot;] 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>&lt;/style&gt;</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>== != &gt; &lt; &gt;= &lt;= contains &amp;&amp; ||</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","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","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","j","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","t","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":"4RAiEMA,GAAgB,GAEtB,SAASC,IAA6B,CACpC,MAAO,CACL,MAAO,gBACP,YAAa,GACb,KAAM,OACN,MAAO,CACL,CACE,KAAM,QACN,MAAO,SACP,YAAa,GACb,OAAQ,CACN,KAAM,CAAE,KAAM,SAAU,SAAU,GAAM,MAAO,SAAU,KAAM,EAAA,EAC/D,MAAO,CAAE,KAAM,SAAU,SAAU,GAAM,OAAQ,QAAS,MAAO,OAAA,CAAQ,CAC3E,CACF,EAEF,MAAO,CAAA,CAAC,CAEZ,CAEO,MAAMC,GAA4D,CACvE,KAAM,KAAO,CAAE,KAAM,WACrB,SAAU,KAAO,CAAE,KAAM,SAAU,MAAO,UAAA,GAC1C,OAAQ,KAAO,CAAE,KAAM,WACvB,KAAM,KAAO,CAAE,KAAM,SACrB,MAAO,KAAO,CAAE,KAAM,SAAU,MAAO,sBAAuB,eAAgB,OAC9E,QAAS,KAAO,CAAE,KAAM,YACxB,OAAQ,KAAO,CAAE,KAAM,SAAU,KAAM,CAAC,WAAY,UAAU,IAC9D,IAAK,KAAO,CAAE,KAAM,WAAY,IAAK,UAAW,YAAa,SAC7D,OAAQ,KAAO,CAAE,KAAM,SAAU,MAAO,SAAU,IAAK,IACvD,OAAQ,KAAO,CAAE,KAAM,SAAU,MAAO,SAAU,IAAK,EAAG,IAAK,MAC/D,MAAO,KAAO,CAAE,KAAM,SAAU,MAAO,aAAA,GACvC,QAAS,KAAO,CAAE,MAAO,YACzB,KAAM,KAAO,CAAE,KAAM,SAAU,MAAO,MAAA,GACtC,SAAU,KAAO,CAAE,KAAM,QAAS,MAAO,WAAY,KAAM,CAAC,aAAc,cAAe,YAAY,CAAA,GACrG,SAAU,KAAO,CAAE,KAAM,SAAU,MAAO,WAAY,UAAW,CAAC,SAAU,QAAQ,EAAG,WAAY,CAAC,eAAgB,cAAc,CAAA,GAClI,eAAgB,KAAO,CAAE,KAAM,SAAU,MAAO,kBAAmB,KAAM,CAAC,WAAY,WAAY,UAAU,EAAG,aAAc,CAAC,GAAI,GAAI,EAAE,CAAA,EAC1I,EAEA,SAASC,GAASC,EAAmB,CACnC,OAAOA,EACJ,QAAQ,kBAAmB,OAAO,EAClC,QAAQ,KAAM,GAAG,EACjB,YAAA,EACA,QAAQ,KAAOC,GAAMA,EAAE,aAAa,CACzC,CAEA,SAASC,GAAaC,EAAS,CAC7B,OAAO,KAAK,MAAM,KAAK,UAAUA,CAAC,CAAC,CACrC,CAiBO,SAASC,GAAkBC,EAA8B,GAAI,CAClE,MAAMC,EAAOD,EAAQ,UAAY,IAAM,CAAC,GAElCE,EAAOC,MAAmBX,IAAa,EACvCY,EAAYD,MAAe,CAAE,KAAM,OAAQ,QAAS,EAAG,UAAW,KAAM,EAGxEE,EAAOF,EAAAA,IAAqB,EAAE,EAC9BG,EAASH,EAAAA,IAAqB,EAAE,EAEhCI,EAAUC,EAAAA,SAAS,IAAMH,EAAK,MAAM,OAAS,CAAC,EAC9CI,EAAUD,EAAAA,SAAS,IAAMF,EAAO,MAAM,OAAS,CAAC,EAIhDI,EAAcF,EAAAA,SAClB,IAAMN,EAAK,MAAM,MAAME,EAAU,MAAM,OAAO,GAAK,IAAA,EAG/CO,EAAgBH,EAAAA,SAAS,IAAM,CACnC,MAAMI,EAAOF,EAAY,MACnBG,EAAOT,EAAU,MAAM,UAC7B,MAAI,CAACQ,GAAQ,CAACC,EAAa,KACpBD,EAAK,OAAOC,CAAI,GAAK,IAC9B,CAAC,EAED,SAASC,EAAaC,EAAuB,CAC3CX,EAAU,MAAQW,EAClBd,EAAK,CAAE,KAAM,oBAAqB,UAAWc,EAAM,CACrD,CAEA,SAASC,EAAYC,EAAiBC,EAAgC,CACpEJ,EAAa,CACX,KAAMI,EAAY,QAAU,OAC5B,QAAAD,EACA,UAAAC,CAAA,CACD,CACH,CAEA,SAASC,EAAWF,EAAuB,CACzCH,EAAa,CAAE,KAAM,OAAQ,QAAAG,EAAS,UAAW,KAAM,CACzD,CAGA,SAASG,GAAmB,CAC1BN,EAAa,CAAE,GAAGV,EAAU,MAAO,KAAM,OAAQ,CACnD,CAIA,SAASiB,GAAiB,CACxBhB,EAAK,MAAM,KAAKR,GAAUK,EAAK,KAAK,CAAC,EACjCG,EAAK,MAAM,OAASd,IAAec,EAAK,MAAM,MAAA,EAClDC,EAAO,MAAQ,CAAA,CACjB,CAEA,SAASgB,GAAa,CACpB,MAAMC,EAAOlB,EAAK,MAAM,IAAA,EACnBkB,IACLjB,EAAO,MAAM,KAAKT,GAAUK,EAAK,KAAK,CAAC,EACvCA,EAAK,MAAQqB,EACbC,EAAA,EACAvB,EAAK,CAAE,KAAM,OAAQ,EACvB,CAEA,SAASwB,GAAa,CACpB,MAAMV,EAAOT,EAAO,MAAM,IAAA,EACrBS,IACLV,EAAK,MAAM,KAAKR,GAAUK,EAAK,KAAK,CAAC,EACrCA,EAAK,MAAQa,EACbS,EAAA,EACAvB,EAAK,CAAE,KAAM,OAAQ,EACvB,CAEA,SAASuB,GAAuB,CAC9B,MAAME,EAAK,KAAK,IAAItB,EAAU,MAAM,QAASF,EAAK,MAAM,MAAM,OAAS,CAAC,EAClEU,EAAOV,EAAK,MAAM,MAAMwB,CAAE,EAC1BC,EACJvB,EAAU,MAAM,WAAaQ,GAAM,OAAOR,EAAU,MAAM,SAAS,EAC/DA,EAAU,MAAM,UAChB,KACAwB,EACJxB,EAAU,MAAM,OAAS,OACrB,OACAuB,EACE,QACA,OACRvB,EAAU,MAAQ,CAAE,KAAAwB,EAAM,QAAS,KAAK,IAAIF,EAAI,CAAC,EAAG,UAAWC,CAAA,CACjE,CAIA,SAASE,EAASC,EAAqB,CACjCA,IAAU5B,EAAK,MAAM,QACzBmB,EAAA,EACAnB,EAAK,MAAM,MAAQ4B,EACrB,CAEA,SAASC,EAAeC,EAA2B,CAC7CA,IAAgB9B,EAAK,MAAM,cAC/BmB,EAAA,EACAnB,EAAK,MAAM,YAAc8B,EAC3B,CAEA,SAASC,GAAQC,EAAmC,CAC9CA,IAAShC,EAAK,MAAM,OACxBmB,EAAA,EACAnB,EAAK,MAAM,KAAOgC,EACpB,CAIA,SAASC,GAAgB,CACvBd,EAAA,EACA,MAAMe,EAAMlC,EAAK,MAAM,MAAM,OAAS,EACtCA,EAAK,MAAM,MAAM,KAAK,CACpB,KAAM,OAAOkC,CAAG,GAChB,MAAO,QAAQA,CAAG,GAClB,YAAa,GACb,OAAQ,CAAA,CAAC,CACV,EACD,MAAMC,EAASnC,EAAK,MAAM,MAAM,OAAS,EACzCiB,EAAWkB,CAAM,EACjBpC,EAAK,CAAE,KAAM,aAAc,QAASoC,EAAQ,CAC9C,CAEA,SAASC,EAAWC,EAAmB,CACjCrC,EAAK,MAAM,MAAM,QAAU,IAC/BmB,EAAA,EACAnB,EAAK,MAAM,MAAM,OAAOqC,EAAK,CAAC,EAC9Bf,EAAA,EACAvB,EAAK,CAAE,KAAM,eAAgB,QAASsC,EAAK,EAC7C,CAEA,SAASC,GAAcD,EAAmB,CACxC,MAAME,EAAMvC,EAAK,MAAM,MAAMqC,CAAG,EAChC,GAAI,CAACE,EAAK,OACVpB,EAAA,EACA,MAAMqB,EAAO7C,GAAU4C,CAAG,EAC1BC,EAAK,KAAOC,EAAe,GAAGF,EAAI,IAAI,OAAO,EAC7CC,EAAK,MAAQ,GAAGD,EAAI,OAASA,EAAI,IAAI,UACrCvC,EAAK,MAAM,MAAM,OAAOqC,EAAM,EAAG,EAAGG,CAAI,EACxC,MAAML,EAASE,EAAM,EACrBpB,EAAWkB,CAAM,EACjBpC,EAAK,CAAE,KAAM,kBAAmB,UAAWsC,EAAK,OAAAF,EAAQ,CAC1D,CAEA,SAASO,EAAWL,EAAaM,EAAmC,CAClE,MAAMjC,EAAOV,EAAK,MAAM,MAAMqC,CAAG,EAC5B3B,IACLS,EAAA,EACA,OAAO,OAAOT,EAAMiC,CAAK,EACzB5C,EAAK,CAAE,KAAM,eAAgB,QAASsC,EAAK,MAAAM,EAAqC,EAClF,CAEA,SAASF,EAAeG,EAAsB,CAC5C,MAAMC,EAAW,IAAI,IAAI7C,EAAK,MAAM,MAAM,IAAK8C,GAAMA,EAAE,IAAI,CAAC,EAC5D,GAAI,CAACD,EAAS,IAAID,CAAI,EAAG,OAAOA,EAChC,IAAIG,EAAI,EACR,KAAOF,EAAS,IAAI,GAAGD,CAAI,IAAIG,CAAC,EAAE,GAAGA,IACrC,MAAO,GAAGH,CAAI,IAAIG,CAAC,EACrB,CAIA,SAASC,EAAgBjC,EAAiB6B,EAAsB,CAC9D,MAAMlC,EAAOV,EAAK,MAAM,MAAMe,CAAO,EACrC,GAAI,CAACL,EAAM,OAAOkC,EAClB,IAAIK,EAAIL,EACJG,EAAI,EACR,KAAOE,KAAKvC,EAAK,UAAY,GAAGkC,CAAI,IAAIG,GAAG,GAC3C,OAAOE,CACT,CAMA,SAASC,EAAmBxB,EAAcyB,EAA+C,CACvF,OAAInD,EAAK,MAAM,OAAS,OAAemD,EACnCzB,IAAS,SAAiB,CAAE,GAAGyB,EAAK,MAAO,YAAA,EACxCA,CACT,CAEA,SAASC,EAAS1B,EAAcX,EAAUb,EAAU,MAAM,QAAe,CACvE,MAAMQ,EAAOV,EAAK,MAAM,MAAMe,CAAO,EACrC,GAAI,CAACL,EAAM,OACX,MAAM2C,EAAU9D,GAAemC,CAAI,IAAM,KAAO,CAAE,KAAM,QAAA,IAClDyB,EAAMD,EAAmBxB,EAAM2B,EAAA,CAAS,EACxC1C,EAAOqC,EAAgBjC,EAASW,CAAI,EAC1C,GAAIf,EAAK,WAAW,GAAG,QAAS,IAAI,MAAM,kBAAkBA,CAAI,GAAG,EACnEQ,EAAA,EACAT,EAAK,OAAS,CAAE,GAAGA,EAAK,OAAQ,CAACC,CAAI,EAAG,CAAE,GAAGwC,EAAK,MAAO3D,GAASmB,CAAI,EAAE,EACxEG,EAAYC,EAASJ,CAAI,EACzBZ,EAAK,CAAE,KAAM,cAAe,QAAAgB,EAAS,UAAWJ,EAAM,KAAAe,EAAM,CAC9D,CAEA,SAAS4B,EAAiBvC,EAAiBwC,EAAiB7B,EAAoB,CAC9E,MAAMhB,EAAOV,EAAK,MAAM,MAAMe,CAAO,EACrC,GAAI,CAACL,EAAM,OACX,MAAM2C,EAAU9D,GAAemC,CAAI,IAAM,KAAO,CAAE,KAAM,QAAA,IAClDyB,EAAMD,EAAmBxB,EAAM2B,EAAA,CAAS,EACxC1C,GAAOqC,EAAgBjC,EAASW,CAAI,EAC1C,GAAIf,GAAK,WAAW,GAAG,QAAS,IAAI,MAAM,kBAAkBA,EAAI,GAAG,EACnEQ,EAAA,EAEA,MAAMqC,GAAU,OAAO,QAAQ9C,EAAK,MAAM,EACpC+C,GAASD,GAAQ,UAAU,CAAC,CAACP,EAAC,IAAMA,KAAMM,CAAO,EACjDG,GAA0B,CAAC/C,GAAM,CAAE,GAAGwC,EAAK,MAAO3D,GAASmB,EAAI,EAAG,EACpE8C,KAAW,GAAID,GAAQ,KAAKE,EAAQ,EACnCF,GAAQ,OAAOC,GAAS,EAAG,EAAGC,EAAQ,EAE3ChD,EAAK,OAAS,OAAO,YAAY8C,EAAO,EACxC1C,EAAYC,EAASJ,EAAI,EACzBZ,EAAK,CAAE,KAAM,cAAe,QAAAgB,EAAS,UAAWJ,GAAM,KAAAe,EAAM,CAC9D,CAEA,SAASiC,EAAY5C,EAAiBJ,EAAoB,CACxD,MAAMD,EAAOV,EAAK,MAAM,MAAMe,CAAO,EACrC,GAAI,CAACL,GAAQ,EAAEC,KAAQD,EAAK,QAAS,OACrCS,EAAA,EACA,MAAMN,EAAO,CAAE,GAAGH,EAAK,MAAA,EACvB,OAAOG,EAAKF,CAAI,EAChBD,EAAK,OAASG,EAEZX,EAAU,MAAM,UAAYa,GAC5Bb,EAAU,MAAM,YAAcS,IAE9BT,EAAU,MAAQ,CAAE,KAAM,OAAQ,QAAAa,EAAS,UAAW,IAAA,GAExDhB,EAAK,CAAE,KAAM,gBAAiB,QAAAgB,EAAS,UAAWJ,EAAM,CAC1D,CAEA,SAASiD,EAAe7C,EAAiBJ,EAAoB,CAC3D,MAAMD,EAAOV,EAAK,MAAM,MAAMe,CAAO,EACrC,GAAI,CAACL,GAAQ,EAAEC,KAAQD,EAAK,QAAS,OACrCS,EAAA,EACA,MAAMqB,EAAO7C,GAAUe,EAAK,OAAOC,CAAI,CAAC,EAClCkD,EAAUb,EAAgBjC,EAAS,GAAGJ,CAAI,OAAO,EACjDE,EAA4B,CAAA,EAClC,SAAW,CAACiD,GAAGlE,EAAC,IAAK,OAAO,QAAQc,EAAK,MAAM,EAC7CG,EAAKiD,EAAC,EAAIlE,GACNkE,KAAMnD,IAAME,EAAKgD,CAAO,EAAIrB,GAElC9B,EAAK,OAASG,EACdC,EAAYC,EAAS8C,CAAO,EAC5B9D,EAAK,CAAE,KAAM,mBAAoB,QAAAgB,EAAS,WAAYJ,EAAM,QAAAkD,EAAS,CACvE,CAEA,SAASE,EAAYhD,EAAiBJ,EAAcgC,EAAkC,CACpF,MAAMjC,EAAOV,EAAK,MAAM,MAAMe,CAAO,EACjC,CAACL,GAAQ,EAAEC,KAAQD,EAAK,UAC5BS,EAAA,EACAT,EAAK,OAAS,CACZ,GAAGA,EAAK,OACR,CAACC,CAAI,EAAG,CAAE,GAAGD,EAAK,OAAOC,CAAI,EAAG,GAAGgC,CAAA,CAAM,EAE3C5C,EAAK,CAAE,KAAM,gBAAiB,QAAAgB,EAAS,UAAWJ,EAAM,MAAAgC,EAAO,EACjE,CAEA,SAASqB,EAAgBjD,EAAiBJ,EAAcsD,EAAmC,CACzF,MAAMvD,EAAOV,EAAK,MAAM,MAAMe,CAAO,EACjC,CAACL,GAAQ,EAAEC,KAAQD,EAAK,UAC5BS,EAAA,EACAT,EAAK,OAAS,CAAE,GAAGA,EAAK,OAAQ,CAACC,CAAI,EAAG,CAAE,GAAGsD,EAAO,EACpDlE,EAAK,CAAE,KAAM,gBAAiB,QAAAgB,EAAS,UAAWJ,EAAM,MAAOsD,EAAQ,EACzE,CAEA,SAASC,EAAYnD,EAAiBoD,EAAiBN,EAAuB,CAC5E,GAAIM,IAAYN,EAAS,OACzB,MAAMnD,EAAOV,EAAK,MAAM,MAAMe,CAAO,EACrC,GAAI,CAACL,GAAQ,EAAEyD,KAAWzD,EAAK,QAAS,OACxC,GAAImD,KAAWnD,EAAK,OAAQ,MAAM,IAAI,MAAM,UAAUmD,CAAO,kBAAkB,EAC/E,GAAIA,EAAQ,WAAW,GAAG,QAAS,IAAI,MAAM,kBAAkBA,CAAO,GAAG,EACzE1C,EAAA,EACA,MAAMN,EAA4B,CAAA,EAClC,SAAW,CAACiD,EAAGlE,EAAC,IAAK,OAAO,QAAQc,EAAK,MAAM,EAC7CG,EAAKiD,IAAMK,EAAUN,EAAUC,CAAC,EAAIlE,GAEtCc,EAAK,OAASG,EAEZX,EAAU,MAAM,UAAYa,GAC5Bb,EAAU,MAAM,YAAciE,IAE9BjE,EAAU,MAAQ,CAAE,KAAM,QAAS,QAAAa,EAAS,UAAW8C,CAAA,GAEzD9D,EAAK,CAAE,KAAM,gBAAiB,QAAAgB,EAAS,QAAAoD,EAAS,QAAAN,EAAS,CAC3D,CAEA,SAASO,GAAUrD,EAAiBsD,EAAiBC,EAAqB,CACxE,MAAM5D,EAAOV,EAAK,MAAM,MAAMe,CAAO,EACrC,GAAI,CAACL,EAAM,OACX,MAAM6D,EAAQ,OAAO,KAAK7D,EAAK,MAAM,EAErC,GADI2D,IAAYC,GAASD,EAAU,GAAKA,GAAWE,EAAM,QACrDD,EAAQ,GAAKA,GAASC,EAAM,OAAQ,OACxCpD,EAAA,EACA,KAAM,CAACqD,CAAK,EAAID,EAAM,OAAOF,EAAS,CAAC,EACvCE,EAAM,OAAOD,EAAO,EAAGE,CAAK,EAC5B,MAAM3D,GAA4B,CAAA,EAClC,UAAWoC,MAAKsB,EAAO1D,GAAKoC,EAAC,EAAIvC,EAAK,OAAOuC,EAAC,EAC9CvC,EAAK,OAASG,GACdd,EAAK,CAAE,KAAM,kBAAmB,QAAAgB,EAAS,MAAOwD,EAAO,CACzD,CAEA,SAASE,GAAqB1D,EAAiBwD,EAAuB,CACpE,MAAM7D,EAAOV,EAAK,MAAM,MAAMe,CAAO,EACrC,GAAI,CAACL,EAAM,OACX,MAAMmC,EAAW,OAAO,KAAKnC,EAAK,MAAM,EACxC,GAAI6D,EAAM,SAAW1B,EAAS,OAAQ,OACtC,UAAWI,KAAKsB,EACd,GAAI,CAAC1B,EAAS,SAASI,CAAC,EAAG,OAE7B,GAAIJ,EAAS,MAAM,CAACI,EAAGF,KAAME,IAAMsB,EAAMxB,EAAC,CAAC,EAAG,OAC9C5B,EAAA,EACA,MAAMN,EAA4B,CAAA,EAClC,UAAWoC,KAAKsB,EAAO1D,EAAKoC,CAAC,EAAIvC,EAAK,OAAOuC,CAAC,EAC9CvC,EAAK,OAASG,EACdd,EAAK,CAAE,KAAM,kBAAmB,QAAAgB,EAAS,MAAOwD,EAAO,CACzD,CAIA,MAAMG,GAAgBpE,EAAAA,SAAS,IAAMqE,GAAAA,aAAa3E,EAAK,MAAM,KAAK,CAAC,EAEnE,SAAS4E,GAASjC,EAAiC,CACjDxB,EAAA,EACAnB,EAAK,MAAM,MAAQ,CAAE,GAAGA,EAAK,MAAM,MAAO,GAAG2C,CAAA,EAC7C5C,EAAK,CAAE,KAAM,gBAAiB,MAAOC,EAAK,MAAM,MAAO,CACzD,CAEA,SAAS6E,GAAgBC,EAAkCnC,EAAkC,CAC3FxB,EAAA,EACA,MAAM4D,EAAW/E,EAAK,MAAM,MAAM8E,CAAO,GAAK,CAAA,EAC9C9E,EAAK,MAAM,MAAQ,CACjB,GAAGA,EAAK,MAAM,MACd,CAAC8E,CAAO,EAAG,CAAE,GAAGC,EAAS,GAAGpC,CAAA,CAAM,EAEpC5C,EAAK,CAAE,KAAM,gBAAiB,MAAOC,EAAK,MAAM,MAAO,CACzD,CAEA,SAASgF,IAAmB,CAC1B7D,EAAA,EACAnB,EAAK,MAAM,MAAQ,CAAA,EACnBD,EAAK,CAAE,KAAM,gBAAiB,MAAOC,EAAK,MAAM,MAAO,CACzD,CAIA,SAASiF,GAAWC,EAAgB,CAElC,GADA/D,EAAA,EACIgE,GAAAA,cAAcD,CAAG,EAAG,CACtB,MAAME,EAAQC,GAAAA,cAAcH,CAAG,EAC/BlF,EAAK,MAAQ,CACX,MAAOkF,EAAI,OAASlF,EAAK,MAAM,MAC/B,YAAakF,EAAI,aAAe,GAChC,KAAME,EAAM,MAAQ,OACpB,MAAOA,EAAM,MAAM,IAAKtC,IAAO,CAC7B,KAAMA,EAAE,KACR,MAAOA,EAAE,MACT,YAAaA,EAAE,YACf,UAAWA,EAAE,UACb,UAAWA,EAAE,UACb,gBAAiBA,EAAE,gBACnB,OAAQA,EAAE,MAAA,EACV,EACF,MAAOsC,EAAM,OAAS,CAAA,CAAC,CAE3B,MACEpF,EAAK,MAAQ,CACX,GAAGV,GAAA,EACH,MAAO,CAAC,CAAE,KAAM,QAAS,MAAO,SAAU,YAAa,GAAI,OAAQ4F,CAAA,CAAK,CAAA,EAG5EhF,EAAU,MAAQ,CAAE,KAAM,OAAQ,QAAS,EAAG,UAAW,IAAA,EACzDH,EAAK,CAAE,KAAM,kBAAmB,CAClC,CAKA,MAAMuF,GAAWhF,EAAAA,SAA8B,IAAM,CACnD,MAAMiF,EAAW,OAAO,KAAKvF,EAAK,MAAM,KAAK,EAAE,OAAS,EACxD,OAAIA,EAAK,MAAM,MAAM,SAAW,GAAK,CAACuF,EAC7BvF,EAAK,MAAM,MAAM,CAAC,EAAE,OAEtB,CACL,MAAOA,EAAK,MAAM,MAClB,GAAIA,EAAK,MAAM,YAAc,CAAE,YAAaA,EAAK,MAAM,WAAA,EAAgB,CAAA,EACvE,KAAMA,EAAK,MAAM,KACjB,MAAOA,EAAK,MAAM,MAAM,IAAK8C,IAAO,CAClC,KAAMA,EAAE,KACR,MAAOA,EAAE,MACT,YAAaA,EAAE,YACf,UAAWA,EAAE,UACb,GAAIA,EAAE,UAAY,CAAE,UAAW,EAAA,EAAS,CAAA,EACxC,GAAIA,EAAE,gBAAkB,CAAE,gBAAiB,EAAA,EAAS,CAAA,EACpD,OAAQA,EAAE,MAAA,EACV,EACF,GAAIyC,EAAW,CAAE,MAAOvF,EAAK,MAAM,KAAA,EAAU,CAAA,CAAC,CAElD,CAAC,EAID,GAAIF,EAAQ,eAAiB,OAAO,KAAKA,EAAQ,aAAa,EAAE,OAAS,EACvE,GAAIqF,GAAAA,cAAcrF,EAAQ,aAAa,EAAG,CACxC,MAAMsF,EAAQC,GAAAA,cAAcvF,EAAQ,aAAa,EACjDE,EAAK,MAAQ,CACX,MAAOF,EAAQ,cAAc,QAAUsF,EAAM,OAAS,OAAS,GAAK,iBACpE,YAAatF,EAAQ,cAAc,aAAe,GAClD,KAAMsF,EAAM,MAAQ,OACpB,MAAOA,EAAM,MAAM,IAAKtC,IAAO,CAC7B,KAAMA,EAAE,KACR,MAAOA,EAAE,MACT,YAAaA,EAAE,YACf,UAAWA,EAAE,UACb,UAAWA,EAAE,UACb,gBAAiBA,EAAE,gBACnB,OAAQA,EAAE,MAAA,EACV,EACF,MAAOsC,EAAM,OAAS,CAAA,CAAC,CAE3B,MACEpF,EAAK,MAAQ,CACX,GAAGV,GAAA,EACH,MAAO,CAAC,CAAE,KAAM,QAAS,MAAO,SAAU,YAAa,GAAI,OAAQQ,EAAQ,aAAA,CAAe,CAAA,EAShG,OAAO0F,WAAS,CACd,KAAAxF,EACA,UAAAE,EACA,YAAAM,EACA,cAAAC,EACA,QAAAJ,EACA,QAAAE,EACA,SAAA+E,GACA,cAAAZ,GACA,YAAA5D,EACA,WAAAG,EACA,WAAAC,EACA,KAAAE,EACA,KAAAG,EACA,SAAAI,EACA,eAAAE,EACA,QAAAE,GACA,SAAA6C,GACA,gBAAAC,GACA,WAAAG,GACA,QAAA/C,EACA,WAAAG,EACA,cAAAE,GACA,WAAAI,EACA,SAAAU,EACA,iBAAAE,EACA,YAAAK,EACA,eAAAC,EACA,YAAAG,EACA,gBAAAC,EACA,YAAAE,EACA,UAAAE,GACA,qBAAAK,GACA,WAAAQ,EAAA,CACD,CACH,CAIO,MAAMQ,GAA8C,OACzD,+BACF,EAOO,SAASC,IAA8B,CAC5C,MAAMC,EAAQC,EAAAA,OAAOH,EAAgB,EACrC,GAAI,CAACE,EACH,MAAM,IAAI,MACR,gMAAA,EAKJ,OAAOA,CACT,CC7lBO,MAAME,EAAqC,CAEhD,CAAE,GAAI,OAAY,MAAO,oBAAqB,MAAO,SAAU,QAAS,CAAC,OAAQ,QAAQ,EAAG,KAAM,UAAqB,YAAa,GAAO,UAAW,cAAA,EACtJ,CAAE,GAAI,WAAY,MAAO,kBAAqB,MAAO,SAAU,QAAS,CAAC,WAAY,SAAS,EAAG,KAAM,kBAAmB,YAAa,GAAO,UAAW,aAAA,EACzJ,CAAE,GAAI,SAAY,MAAO,SAAqB,MAAO,SAAU,QAAS,CAAC,UAAW,SAAS,EAAG,KAAM,OAAW,YAAa,GAAO,UAAW,gBAAA,EAChJ,CAAE,GAAI,OAAY,MAAO,OAAqB,MAAO,SAAU,QAAS,CAAC,UAAU,EAAG,KAAM,UAAA,EAC5F,CAAE,GAAI,QAAY,MAAO,QAAqB,MAAO,SAAU,QAAS,CAAC,MAAO,YAAa,aAAc,qBAAqB,EAAG,KAAM,OAAA,EAGzI,CAAE,GAAI,UAAY,MAAO,WAAqB,MAAO,UAAW,QAAS,CAAC,SAAU,QAAQ,EAAG,KAAM,cAAqB,YAAa,GAAO,UAAW,cAAA,EACzJ,CAAE,GAAI,SAAY,MAAO,WAAqB,MAAO,UAAW,QAAS,CAAC,WAAY,OAAQ,iBAAiB,EAAG,KAAM,oBAAqB,YAAa,GAAO,UAAW,iBAAA,EAC5K,CAAE,GAAI,WAAY,MAAO,WAAsB,MAAO,UAAW,QAAS,CAAC,OAAQ,WAAY,OAAQ,OAAO,EAAG,KAAM,iBAAkB,YAAa,GAAM,UAAW,UAAA,EACvK,CAAE,GAAI,WAAY,MAAO,WAAsB,MAAO,UAAW,QAAS,CAAC,OAAQ,UAAW,OAAO,EAAG,KAAM,oBAAqB,YAAa,GAAM,UAAW,UAAA,EACjK,CAAE,GAAI,eAAgB,MAAO,eAAkB,MAAO,UAAW,QAAS,CAAC,QAAS,UAAW,OAAO,EAAG,KAAM,eAAgB,YAAa,GAAM,UAAW,cAAA,EAC7J,CAAE,GAAI,MAAY,MAAO,YAAqB,MAAO,UAAW,QAAS,CAAC,SAAU,OAAO,EAAG,KAAM,MAAA,EAGpG,CAAE,GAAI,SAAY,MAAO,eAAqB,MAAO,WAAY,QAAS,CAAC,QAAS,OAAO,EAAG,KAAM,OAAqB,YAAa,GAAO,UAAW,cAAA,EACxJ,CAAE,GAAI,SAAY,MAAO,SAAqB,MAAO,WAAY,QAAS,CAAC,OAAO,EAAG,KAAM,oBAAA,EAC3F,CAAE,GAAI,QAAY,MAAO,eAAqB,MAAO,WAAY,QAAS,CAAC,MAAO,SAAS,EAAG,KAAM,SAAA,EACpG,CAAE,GAAI,OAAY,MAAO,cAAqB,MAAO,WAAY,QAAS,CAAC,YAAY,EAAG,KAAM,YAAqB,YAAa,GAAO,UAAW,aAAA,EAGpJ,CAAE,GAAI,UAAY,MAAO,kBAAqB,MAAO,SAAU,QAAS,CAAC,SAAU,OAAO,EAAG,KAAM,QAAqB,YAAa,EAAA,CACvI,EAEaC,GAA2D,CACtE,OAAQ,SACR,QAAS,UACT,SAAU,WACV,OAAQ,QACV,wPC7CA,MAAMC,EAASL,GAAA,EACTM,EAAQ/F,EAAAA,IAAI,EAAE,EAQdgG,EAAS3F,EAAAA,SAAkB,IAAM,CACrC,MAAM4F,EAAIF,EAAM,MAAM,KAAA,EAAO,YAAA,EACvBG,EAASJ,EAAO,KAAK,OAAS,OAG9BnD,EAAOuD,EAASN,EAAc,OAAQO,GAAMA,EAAE,WAAW,EAAIP,EAE7DQ,EAAWH,EACbtD,EAAK,OAAQwD,IACED,GAAUC,EAAE,UAAYA,EAAE,UAAYA,EAAE,OAAO,YAAA,EACpD,SAASF,CAAC,GACdE,EAAE,GAAG,YAAA,EAAc,SAASF,CAAC,EAAU,IACnCE,EAAE,SAAW,CAAA,GAAI,KAAME,GAAMA,EAAE,YAAA,EAAc,SAASJ,CAAC,CAAC,CACjE,EACDtD,EAEE2D,EAAiC,CAAA,EACvC,UAAWC,KAAQH,EACZE,EAAQC,EAAK,KAAK,IACrBD,EAAQC,EAAK,KAAK,EAAI,CACpB,GAAIA,EAAK,MACT,MAAOV,GAAaU,EAAK,KAAK,EAC9B,MAAO,CAAA,CAAC,GAGZD,EAAQC,EAAK,KAAK,EAAE,MAAM,KAAKA,CAAI,EAErC,OAAO,OAAO,OAAOD,CAAO,CAC9B,CAAC,EAED,SAASE,EAAYC,EAAehF,EAAoB,CACjDgF,EAAG,eACRA,EAAG,aAAa,QAAQ,gCAAiChF,CAAI,EAC7DgF,EAAG,aAAa,cAAgB,OAClC,CAEA,SAASC,EAASjF,EAAoB,CACpCqE,EAAO,SAASrE,CAAI,CACtB,CAEA,SAASkF,EAAYF,EAAsB,CACzC,MAAMG,EAAIH,EAAG,OACb,OAAIG,GAAK,MAAQ,OAAOA,GAAM,UAAY,UAAWA,EAAWA,EAAU,MACnEA,CACT,eAIEC,YAAA,EAAAC,qBAoDM,MApDNC,GAoDM,CAjDIC,QAAAlB,CAAA,EAAO,KAAK,OAAI,sBADxBgB,EAAAA,mBAcS,SAAA,OAZP,wBAAM,oBAAmB,CAAA,YACFE,EAAAA,SAAO,UAAU,OAAI,MAAA,CAAA,CAAA,EAC3C,QAAKC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEF,EAAAA,MAAAlB,CAAA,EAAO,WAAA,EAAU,ydAY3BqB,EAAAA,mBAOM,MAPNC,GAOM,CANJC,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,YAAY,kBACZ,YAAU,mBACT,MAAOvB,EAAA,MACP,UAAOkB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEnB,EAAA,MAAQY,EAAYO,CAAM,GAAA,GAAA,sBAIxCC,EAAAA,mBAwBM,MAxBNI,GAwBM,CAvBOvB,EAAA,MAAO,SAAM,GAAxBa,EAAAA,UAAA,EAAAC,EAAAA,mBAEM,MAFNU,GAAuD,oBACrCC,EAAAA,gBAAG1B,EAAA,KAAK,EAAG,KAC7B,CAAA,gDAEAe,EAAAA,mBAkBMY,EAAAA,SAAA,KAAAC,EAAAA,WAlBW3B,EAAA,MAAL4B,kBAAZd,EAAAA,mBAkBM,MAAA,CAlBoB,IAAKc,EAAE,GAAI,MAAM,gBAAA,GACzCT,EAAAA,mBAAqD,MAArDU,GAAqDJ,EAAAA,gBAAhBG,EAAE,KAAK,EAAA,CAAA,EAC5CT,EAAAA,mBAeK,KAfLW,GAeK,EAdHjB,YAAA,EAAA,EAAAC,EAAAA,mBAaKY,EAAAA,SAAA,KAAAC,EAAAA,WAZYC,EAAE,MAAVrB,kBADTO,EAAAA,mBAaK,KAAA,CAXF,IAAKP,EAAK,GACX,UAAU,OACV,MAAM,eACL,eAAWC,EAAYU,EAAQX,EAAK,EAAE,CAAA,GAEvCc,cAKEL,EAAAA,MAAAe,EAAAA,UAAA,EAAA,CAJC,MAAOf,EAAAA,MAAAlB,CAAA,EAAO,KAAK,OAAI,QAAeS,EAAK,UAAYA,EAAK,UAAYA,EAAK,MAC7E,KAAMA,EAAK,KACZ,MAAA,GACC,WAAQW,GAAER,EAASH,EAAK,EAAE,CAAA,sNCjFnCyB,GAAkB,8LAnBxB,MAAMC,EAAQC,EAORpI,EAAOqI,EAIPC,EAAKpI,EAAAA,IAAwB,IAAI,EACjCqI,EAAUrI,EAAAA,IAAI,EAAK,EACnBsI,EAAatI,EAAAA,IAAI,EAAK,EAS5BuI,EAAAA,MACE,IAAMN,EAAM,WACXtI,GAAM,CACL2I,EAAW,MAAQ,CAAC,CAAC3I,EACjB,CAAA0I,EAAQ,OACRD,EAAG,OAASA,EAAG,MAAM,YAAczI,IACrCyI,EAAG,MAAM,UAAYzI,EAEzB,EACA,CAAE,UAAW,EAAA,CAAK,EAGpB,SAAS6I,GAAgB,CAEvBF,EAAW,MAAQ,CAAC,EAAEF,EAAG,OAASA,EAAG,MAAM,UAAU,OACvD,CAEA,SAASK,GAAe,CACtB,GAAI,CAACL,EAAG,MAAO,OACf,MAAMnD,EAAMmD,EAAG,MAAM,UAAU,QAAQ,OAAQ,EAAE,EAC7CnD,IAAQgD,EAAM,YAClBnI,EAAK,oBAAqBmF,CAAG,CAC/B,CAEA,SAASyD,GAAe,CACtBL,EAAQ,MAAQ,GAChBI,EAAA,EACAH,EAAW,MAAQ,CAAC,CAACL,EAAM,UAC7B,CAEA,SAASU,GAAgB,CACvBN,EAAQ,MAAQ,EAClB,CAEA,SAASO,EAAUnC,EAAyB,CACtC,CAACwB,EAAM,WAAaxB,EAAG,MAAQ,SACjCA,EAAG,eAAA,EACFA,EAAG,OAAuB,KAAA,GAClBA,EAAG,MAAQ,WAChB2B,EAAG,QAAOA,EAAG,MAAM,UAAYH,EAAM,YACxCxB,EAAG,OAAuB,KAAA,EAE/B,6BAIEK,EAAAA,mBAWwB,OAAA,SAVlB,KAAJ,IAAIsB,EACJ,MAAKS,EAAAA,eAAA,CAAC,WAAU,CAAA,WAAA,CACOP,EAAA,iBAAwBJ,EAAA,KAAA,CAAK,CAAA,EACnD,mBAAkBA,EAAA,YAClB,gBAAiBF,GAClB,WAAW,QACV,QAAAQ,EACA,OAAAE,EACA,QAAAC,EACA,UAAAC,CAAA,oBACCV,EAAA,UAAU,EAAA,GAAAnB,EAAA,kDCxFhB,IAAI+B,GAAK,OAAO,eACZC,GAAK,OAAO,sBACZC,GAAK,OAAO,UAAU,eAAgBC,GAAK,OAAO,UAAU,qBAC5DC,GAAK,CAAC,EAAGC,EAAG,IAAMA,KAAK,EAAIL,GAAG,EAAGK,EAAG,CAAE,WAAY,GAAI,aAAc,GAAI,SAAU,GAAI,MAAO,CAAC,CAAE,EAAI,EAAEA,CAAC,EAAI,EAAGC,GAAK,CAAC,EAAGD,IAAM,CAC/H,QAAS,KAAKA,IAAMA,EAAI,CAAA,GACtBH,GAAG,KAAKG,EAAG,CAAC,GAAKD,GAAG,EAAG,EAAGC,EAAE,CAAC,CAAC,EAChC,GAAIJ,GACF,QAAS,KAAKA,GAAGI,CAAC,EAChBF,GAAG,KAAKE,EAAG,CAAC,GAAKD,GAAG,EAAG,EAAGC,EAAE,CAAC,CAAC,EAClC,OAAO,CACT,EACIE,GAAK,CAAC,EAAGF,IAAM,CACjB,IAAI,EAAI,CAAA,EACR,QAASG,KAAK,EACZN,GAAG,KAAK,EAAGM,CAAC,GAAKH,EAAE,QAAQG,CAAC,EAAI,IAAM,EAAEA,CAAC,EAAI,EAAEA,CAAC,GAClD,GAAI,GAAK,MAAQP,GACf,QAASO,KAAKP,GAAG,CAAC,EAChBI,EAAE,QAAQG,CAAC,EAAI,GAAKL,GAAG,KAAK,EAAGK,CAAC,IAAM,EAAEA,CAAC,EAAI,EAAEA,CAAC,GACpD,OAAO,CACT,EAEA,MAAMC,GAAK,yBACX,SAASC,GAAG,EAAG,CACb,QAAQ,KAAKD,GAAK,CAAC,CACrB,CACA,SAASE,GAAG,EAAG,CACb,QAAQ,MAAMF,GAAK,CAAC,CACtB,CACA,SAASG,GAAG,EAAGP,EAAG,EAAG,CACnB,OAAO,GAAK,GAAK,EAAI,EAAE,QAAU,EAAE,OAAO,EAAG,EAAG,EAAE,OAAOA,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CACtE,CACA,SAASQ,GAAG,EAAG,CACb,OAAO,EAAE,QAAQ,SAAU,CAACR,EAAG,IAAM,EAAI,EAAE,YAAW,EAAK,EAAE,CAC/D,CACA,SAASS,GAAG,EAAG,CACb,OAAO,OAAO,KAAK,CAAC,EAAE,OAAO,CAACT,EAAG,KAAO,OAAO,EAAE,CAAC,EAAK,MAAgBA,EAAEQ,GAAG,CAAC,CAAC,EAAI,EAAE,CAAC,GAAIR,GAAI,EAAE,CACjG,CACA,SAASU,GAAG,EAAGV,EAAG,CAChB,OAAO,MAAM,QAAQ,CAAC,GAAK,EAAE,OAAOA,EAAG,CAAC,EAAG,CAC7C,CACA,SAASW,GAAG,EAAGX,EAAG,EAAG,CACnB,OAAO,MAAM,QAAQ,CAAC,GAAK,EAAE,OAAOA,EAAG,EAAG,CAAC,EAAG,CAChD,CACA,SAASY,GAAG,EAAG,CACb,OAAO,OAAO,EAAK,GACrB,CACA,SAASC,GAAG,EAAG,CACb,OAAO,OAAO,GAAK,QACrB,CACA,SAASC,GAAG,EAAGd,EAAG,EAAG,CACnB,MAAMG,EAAI,EAAE,SAAS,CAAC,EACtB,EAAE,aAAaH,EAAGG,CAAC,CACrB,CACA,SAASY,GAAG,EAAG,CACb,EAAE,YAAc,EAAE,WAAW,YAAY,CAAC,CAC5C,CACA,SAASC,GAAG,EAAGhB,EAAI,SAAU,CAC3B,IAAIG,EACJ,IAAItG,EAAI,KACR,OAAO,OAA6BmG,GAAE,eAAkB,WAAanG,GAAKsG,EAAyBH,GAAE,gBAAkB,KAAO,OAASG,EAAE,KAAKH,EAAG,CAAC,EAAInG,EAAI,SAAS,cAAc,CAAC,EAAGA,GAAKwG,GAAG,sBAAsB,CAAC,EAAE,EAAGxG,CAC3N,CACA,SAASoH,GAAG,EAAGjB,EAAG,EAAI,KAAM,CAC1B,OAAO,YAAYG,EAAG,CACpB,OAAO,EAAE,MAAM,EAAGA,CAAC,EAAGH,EAAE,MAAM,EAAGG,CAAC,CACpC,CACF,CACA,SAASe,GAAG,EAAGlB,EAAG,CAChB,MAAM,EAAIC,GAAG,CAAA,EAAI,CAAC,EAClB,OAAO,OAAO,KAAKD,CAAC,EAAE,QAASG,GAAM,CACnC,EAAEA,CAAC,EAAI,EAAEA,CAAC,EAAIc,GAAG,EAAEd,CAAC,EAAGH,EAAEG,CAAC,CAAC,EAAI,EAAEA,CAAC,EAAIH,EAAEG,CAAC,CAC3C,CAAC,EAAG,CACN,CACA,SAASgB,GAAG,EAAG,CACb,OAAO,aAAa,WACtB,CACA,SAASC,GAAG,EAAGpB,EAAG,CAChB,OAAO,KAAK,CAAC,EAAE,QAAS,GAAM,CAC5BA,EAAE,EAAG,EAAE,CAAC,CAAC,CACX,CAAC,CACH,CACA,SAASqB,GAAG,EAAG,CACb,OAAO,EAAE,WAAW,CAAC,IAAM,KAAO,EAAE,WAAW,CAAC,IAAM,MAAQ,EAAE,WAAW,CAAC,EAAI,KAAO,EAAE,WAAW,CAAC,EAAI,GAC3G,CACA,MAAMC,GAAK,OAAO,OAOlB,SAASC,GAAG,EAAGvB,EAAG,CAChB,IAAI,EAAI,OAAO,KAAK,CAAC,EACrB,GAAI,OAAO,sBAAuB,CAChC,IAAIG,EAAI,OAAO,sBAAsB,CAAC,EACtCH,IAAMG,EAAIA,EAAE,OAAO,SAASqB,EAAG,CAC7B,OAAO,OAAO,yBAAyB,EAAGA,CAAC,EAAE,UAC/C,CAAC,GAAI,EAAE,KAAK,MAAM,EAAGrB,CAAC,CACxB,CACA,OAAO,CACT,CACA,SAASsB,GAAG,EAAG,CACb,QAASzB,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAI,EAAI,UAAUA,CAAC,GAAK,KAAO,UAAUA,CAAC,EAAI,CAAA,EAC9CA,EAAI,EAAIuB,GAAG,OAAO,CAAC,EAAG,EAAE,EAAE,QAAQ,SAASpB,EAAG,CAC5CuB,GAAG,EAAGvB,EAAG,EAAEA,CAAC,CAAC,CACf,CAAC,EAAI,OAAO,0BAA4B,OAAO,iBAAiB,EAAG,OAAO,0BAA0B,CAAC,CAAC,EAAIoB,GAAG,OAAO,CAAC,CAAC,EAAE,QAAQ,SAASpB,EAAG,CAC1I,OAAO,eAAe,EAAGA,EAAG,OAAO,yBAAyB,EAAGA,CAAC,CAAC,CACnE,CAAC,CACH,CACA,OAAO,CACT,CACA,SAASwB,GAAG,EAAG,CACb,0BACA,OAAO,OAAO,QAAU,YAAc,OAAO,OAAO,UAAY,SAAWA,GAAK,SAAS3B,EAAG,CAC1F,OAAO,OAAOA,CAChB,EAAI2B,GAAK,SAAS3B,EAAG,CACnB,OAAOA,GAAK,OAAO,QAAU,YAAcA,EAAE,cAAgB,QAAUA,IAAM,OAAO,UAAY,SAAW,OAAOA,CACpH,EAAG2B,GAAG,CAAC,CACT,CACA,SAASD,GAAG,EAAG1B,EAAG,EAAG,CACnB,OAAOA,KAAK,EAAI,OAAO,eAAe,EAAGA,EAAG,CAC1C,MAAO,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EACd,CAAG,EAAI,EAAEA,CAAC,EAAI,EAAG,CACjB,CACA,SAAS4B,IAAK,CACZ,OAAOA,GAAK,OAAO,QAAU,SAAS,EAAG,CACvC,QAAS5B,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAI,EAAI,UAAUA,CAAC,EACnB,QAASG,KAAK,EACZ,OAAO,UAAU,eAAe,KAAK,EAAGA,CAAC,IAAM,EAAEA,CAAC,EAAI,EAAEA,CAAC,EAC7D,CACA,OAAO,CACT,EAAGyB,GAAG,MAAM,KAAM,SAAS,CAC7B,CACA,SAASC,GAAG,EAAG7B,EAAG,CAChB,GAAI,GAAK,KACP,MAAO,CAAA,EACT,IAAI,EAAI,CAAA,EAAIG,EAAI,OAAO,KAAK,CAAC,EAAGqB,EAAG7H,EACnC,IAAKA,EAAI,EAAGA,EAAIwG,EAAE,OAAQxG,IACxB6H,EAAIrB,EAAExG,CAAC,EAAG,EAAEqG,EAAE,QAAQwB,CAAC,GAAK,KAAO,EAAEA,CAAC,EAAI,EAAEA,CAAC,GAC/C,OAAO,CACT,CACA,SAASM,GAAG,EAAG9B,EAAG,CAChB,GAAI,GAAK,KACP,MAAO,CAAA,EACT,IAAI,EAAI6B,GAAG,EAAG7B,CAAC,EAAGG,EAAGqB,EACrB,GAAI,OAAO,sBAAuB,CAChC,IAAI7H,EAAI,OAAO,sBAAsB,CAAC,EACtC,IAAK6H,EAAI,EAAGA,EAAI7H,EAAE,OAAQ6H,IACxBrB,EAAIxG,EAAE6H,CAAC,EAAG,EAAExB,EAAE,QAAQG,CAAC,GAAK,IAAM,OAAO,UAAU,qBAAqB,KAAK,EAAGA,CAAC,IAAM,EAAEA,CAAC,EAAI,EAAEA,CAAC,EACrG,CACA,OAAO,CACT,CACA,IAAI4B,GAAK,SACT,SAASC,GAAG,EAAG,CACb,GAAI,OAAO,OAAU,KAAe,OAAO,UACzC,MAAO,CAAC,CAAiB,UAAU,UAAU,MAAM,CAAC,CACxD,CACA,IAAIC,GAAKD,GAAG,uDAAuD,EAAGE,GAAKF,GAAG,OAAO,EAAGG,GAAKH,GAAG,UAAU,EAAGI,GAAKJ,GAAG,SAAS,GAAK,CAACA,GAAG,SAAS,GAAK,CAACA,GAAG,UAAU,EAAGK,GAAKL,GAAG,iBAAiB,EAAGM,GAAKN,GAAG,SAAS,GAAKA,GAAG,UAAU,EAAGO,GAAK,CAC3O,QAAS,GACT,QAAS,EACX,EACA,SAASC,EAAE,EAAGxC,EAAG,EAAG,CAClB,EAAE,iBAAiBA,EAAG,EAAG,CAACiC,IAAMM,EAAE,CACpC,CACA,SAASE,EAAE,EAAGzC,EAAG,EAAG,CAClB,EAAE,oBAAoBA,EAAG,EAAG,CAACiC,IAAMM,EAAE,CACvC,CACA,SAASG,GAAG,EAAG1C,EAAG,CAChB,GAAIA,EAAG,CACL,GAAIA,EAAE,CAAC,IAAM,MAAQA,EAAIA,EAAE,UAAU,CAAC,GAAI,EACxC,GAAI,CACF,GAAI,EAAE,QACJ,OAAO,EAAE,QAAQA,CAAC,EACpB,GAAI,EAAE,kBACJ,OAAO,EAAE,kBAAkBA,CAAC,EAC9B,GAAI,EAAE,sBACJ,OAAO,EAAE,sBAAsBA,CAAC,CACpC,MAAY,CACV,MAAO,EACT,CACF,MAAO,EACT,CACF,CACA,SAAS2C,GAAG,EAAG,CACb,OAAO,EAAE,MAAQ,IAAM,UAAY,EAAE,KAAK,SAAW,EAAE,KAAO,EAAE,UAClE,CACA,SAASC,GAAE,EAAG5C,EAAG,EAAGG,EAAG,CACrB,GAAI,EAAG,CACL,EAAI,GAAK,SACT,EAAG,CACD,GAAIH,GAAK,OAASA,EAAE,CAAC,IAAM,IAAM,EAAE,aAAe,GAAK0C,GAAG,EAAG1C,CAAC,EAAI0C,GAAG,EAAG1C,CAAC,IAAMG,GAAK,IAAM,EACxF,OAAO,EACT,GAAI,IAAM,EACR,KACJ,OAAS,EAAIwC,GAAG,CAAC,EACnB,CACA,OAAO,IACT,CACA,IAAIE,GAAK,OACT,SAASC,GAAE,EAAG9C,EAAG,EAAG,CAClB,GAAI,GAAKA,EACP,GAAI,EAAE,UACJ,EAAE,UAAU,EAAI,MAAQ,QAAQ,EAAEA,CAAC,MAChC,CACH,IAAIG,GAAK,IAAM,EAAE,UAAY,KAAK,QAAQ0C,GAAI,GAAG,EAAE,QAAQ,IAAM7C,EAAI,IAAK,GAAG,EAC7E,EAAE,WAAaG,GAAK,EAAI,IAAMH,EAAI,KAAK,QAAQ6C,GAAI,GAAG,CACxD,CACJ,CACA,SAASE,EAAE,EAAG/C,EAAG,EAAG,CAClB,IAAIG,EAAI,GAAK,EAAE,MACf,GAAIA,EAAG,CACL,GAAI,IAAM,OACR,OAAO,SAAS,aAAe,SAAS,YAAY,iBAAmB,EAAI,SAAS,YAAY,iBAAiB,EAAG,EAAE,EAAI,EAAE,eAAiB,EAAI,EAAE,cAAeH,IAAM,OAAS,EAAI,EAAEA,CAAC,EAC1L,EAAEA,KAAKG,IAAMH,EAAE,QAAQ,QAAQ,IAAM,KAAOA,EAAI,WAAaA,GAAIG,EAAEH,CAAC,EAAI,GAAK,OAAO,GAAK,SAAW,GAAK,KAC3G,CACF,CACA,SAASgD,GAAG,EAAGhD,EAAG,CAChB,IAAI,EAAI,GACR,GAAI,OAAO,GAAK,SACd,EAAI,MAEJ,GAAG,CACD,IAAIG,EAAI4C,EAAE,EAAG,WAAW,EACxB5C,GAAKA,IAAM,SAAW,EAAIA,EAAI,IAAM,EACtC,OAAS,CAACH,IAAM,EAAI,EAAE,aACxB,IAAIwB,EAAI,OAAO,WAAa,OAAO,iBAAmB,OAAO,WAAa,OAAO,YACjF,OAAOA,GAAK,IAAIA,EAAE,CAAC,CACrB,CACA,SAASyB,GAAG,EAAGjD,EAAG,EAAG,CACnB,GAAI,EAAG,CACL,IAAIG,EAAI,EAAE,qBAAqBH,CAAC,EAAGwB,EAAI,EAAG7H,EAAIwG,EAAE,OAChD,GAAI,EACF,KAAOqB,EAAI7H,EAAG6H,IACZ,EAAErB,EAAEqB,CAAC,EAAGA,CAAC,EACb,OAAOrB,CACT,CACA,MAAO,CAAA,CACT,CACA,SAAS+C,IAAK,CACZ,IAAI,EAAI,SAAS,iBACjB,OAAO,GAAK,SAAS,eACvB,CACA,SAASC,GAAE,EAAGnD,EAAG,EAAGG,EAAGqB,EAAG,CACxB,GAAI,EAAE,CAAC,EAAE,uBAAyB,IAAM,QAAS,CAC/C,IAAI7H,EAAGuD,EAAGkG,EAAG/M,EAAGgN,EAAG5F,EAAGT,EACtB,GAAI,IAAM,QAAU,EAAE,YAAc,IAAMkG,MAAQvJ,EAAI,EAAE,wBAAyBuD,EAAIvD,EAAE,IAAKyJ,EAAIzJ,EAAE,KAAMtD,EAAIsD,EAAE,OAAQ0J,EAAI1J,EAAE,MAAO8D,EAAI9D,EAAE,OAAQqD,EAAIrD,EAAE,QAAUuD,EAAI,EAAGkG,EAAI,EAAG/M,EAAI,OAAO,YAAagN,EAAI,OAAO,WAAY5F,EAAI,OAAO,YAAaT,EAAI,OAAO,aAAcgD,GAAK,IAAM,IAAM,SAAWwB,EAAIA,GAAK,EAAE,WAAY,CAACS,IACjU,EACE,IAAIT,GAAKA,EAAE,wBAA0BuB,EAAEvB,EAAG,WAAW,IAAM,QAAU,GAAKuB,EAAEvB,EAAG,UAAU,IAAM,UAAW,CACxG,IAAI8B,EAAI9B,EAAE,sBAAqB,EAC/BtE,GAAKoG,EAAE,IAAM,SAASP,EAAEvB,EAAG,kBAAkB,CAAC,EAAG4B,GAAKE,EAAE,KAAO,SAASP,EAAEvB,EAAG,mBAAmB,CAAC,EAAGnL,EAAI6G,EAAIvD,EAAE,OAAQ0J,EAAID,EAAIzJ,EAAE,MAChI,KACF,OACK6H,EAAIA,EAAE,YACf,GAAIrB,GAAK,IAAM,OAAQ,CACrB,IAAIoD,EAAIP,GAAGxB,GAAK,CAAC,EAAGgC,EAAID,GAAKA,EAAE,EAAGE,EAAIF,GAAKA,EAAE,EAC7CA,IAAMrG,GAAKuG,EAAGL,GAAKI,EAAGxG,GAAKwG,EAAG/F,GAAKgG,EAAGpN,EAAI6G,EAAIO,EAAG4F,EAAID,EAAIpG,EAC3D,CACA,MAAO,CACL,IAAKE,EACL,KAAMkG,EACN,OAAQ/M,EACR,MAAOgN,EACP,MAAOrG,EACP,OAAQS,CACd,CACE,CACF,CACA,SAASiG,GAAG,EAAG1D,EAAG,EAAG,CACnB,QAASG,EAAIwD,GAAG,EAAG,EAAE,EAAGnC,EAAI2B,GAAE,CAAC,EAAEnD,CAAC,EAAGG,GAAK,CACxC,IAAIxG,EAAIwJ,GAAEhD,CAAC,EAAE,CAAC,EAAGjD,EAAI,OACrB,GAAIA,EAAIsE,GAAK7H,EAAG,CAACuD,EACf,OAAOiD,EACT,GAAIA,IAAM+C,GAAE,EACV,MACF/C,EAAIwD,GAAGxD,EAAG,EAAE,CACd,CACA,MAAO,EACT,CACA,SAASyD,GAAG,EAAG5D,EAAG,EAAGG,EAAG,CACtB,QAASqB,EAAI,EAAG7H,EAAI,EAAGuD,EAAI,EAAE,SAAUvD,EAAIuD,EAAE,QAAU,CACrD,GAAIA,EAAEvD,CAAC,EAAE,MAAM,UAAY,QAAUuD,EAAEvD,CAAC,IAAMD,EAAE,QAAUyG,GAAKjD,EAAEvD,CAAC,IAAMD,EAAE,UAAYkJ,GAAE1F,EAAEvD,CAAC,EAAG,EAAE,UAAW,EAAG,EAAE,EAAG,CACjH,GAAI6H,IAAMxB,EACR,OAAO9C,EAAEvD,CAAC,EACZ6H,GACF,CACA7H,GACF,CACA,OAAO,IACT,CACA,SAASkK,GAAG,EAAG7D,EAAG,CAChB,QAAS,EAAI,EAAE,iBAAkB,IAAM,IAAMtG,EAAE,OAASqJ,EAAE,EAAG,SAAS,IAAM,QAAU/C,GAAK,CAAC0C,GAAG,EAAG1C,CAAC,IACjG,EAAI,EAAE,uBACR,OAAO,GAAK,IACd,CACA,SAAS8D,GAAE,EAAG9D,EAAG,CACf,IAAI,EAAI,EACR,GAAI,CAAC,GAAK,CAAC,EAAE,WACX,MAAO,GACT,KAAO,EAAI,EAAE,wBACX,EAAE,SAAS,YAAW,IAAO,YAAc,IAAMtG,EAAE,QAAU,CAACsG,GAAK0C,GAAG,EAAG1C,CAAC,IAAM,IAClF,OAAO,CACT,CACA,SAAS+D,GAAG,EAAG,CACb,IAAI/D,EAAI,EAAG,EAAI,EAAGG,EAAI+C,GAAE,EACxB,GAAI,EACF,EAAG,CACD,IAAI1B,EAAIwB,GAAG,CAAC,EAAGrJ,EAAI6H,EAAE,EAAGtE,EAAIsE,EAAE,EAC9BxB,GAAK,EAAE,WAAarG,EAAG,GAAK,EAAE,UAAYuD,CAC5C,OAAS,IAAMiD,IAAM,EAAI,EAAE,aAC7B,MAAO,CAACH,EAAG,CAAC,CACd,CACA,SAASgE,GAAG,EAAGhE,EAAG,CAChB,QAAS,KAAK,EACZ,GAAI,EAAE,eAAe,CAAC,GACpB,QAASG,KAAKH,EACZ,GAAIA,EAAE,eAAeG,CAAC,GAAKH,EAAEG,CAAC,IAAM,EAAE,CAAC,EAAEA,CAAC,EACxC,OAAO,OAAO,CAAC,EAEvB,MAAO,EACT,CACA,SAASwD,GAAG,EAAG3D,EAAG,CAChB,GAAI,CAAC,GAAK,CAAC,EAAE,sBACX,OAAOkD,GAAE,EACX,IAAI,EAAI,EAAG/C,EAAI,GACf,EACE,IAAI,EAAE,YAAc,EAAE,aAAe,EAAE,aAAe,EAAE,aAAc,CACpE,IAAIqB,EAAIuB,EAAE,CAAC,EACX,GAAI,EAAE,YAAc,EAAE,cAAgBvB,EAAE,WAAa,QAAUA,EAAE,WAAa,WAAa,EAAE,aAAe,EAAE,eAAiBA,EAAE,WAAa,QAAUA,EAAE,WAAa,UAAW,CAChL,GAAI,CAAC,EAAE,uBAAyB,IAAM,SAAS,KAC7C,OAAO0B,GAAE,EACX,GAAI/C,GAAKH,EACP,OAAO,EACTG,EAAI,EACN,CACF,OACK,EAAI,EAAE,YACb,OAAO+C,GAAE,CACX,CACA,SAASe,GAAG,EAAGjE,EAAG,CAChB,GAAI,GAAKA,EACP,QAAS,KAAKA,EACZA,EAAE,eAAe,CAAC,IAAM,EAAE,CAAC,EAAIA,EAAE,CAAC,GACtC,OAAO,CACT,CACA,SAASkE,GAAG,EAAGlE,EAAG,CAChB,OAAO,KAAK,MAAM,EAAE,GAAG,IAAM,KAAK,MAAMA,EAAE,GAAG,GAAK,KAAK,MAAM,EAAE,IAAI,IAAM,KAAK,MAAMA,EAAE,IAAI,GAAK,KAAK,MAAM,EAAE,MAAM,IAAM,KAAK,MAAMA,EAAE,MAAM,GAAK,KAAK,MAAM,EAAE,KAAK,IAAM,KAAK,MAAMA,EAAE,KAAK,CAC5L,CACA,IAAImE,GACJ,SAASC,GAAG,EAAGpE,EAAG,CAChB,OAAO,UAAW,CAChB,GAAI,CAACmE,GAAI,CACP,IAAI,EAAI,UAAWhE,EAAI,KACvB,EAAE,SAAW,EAAI,EAAE,KAAKA,EAAG,EAAE,CAAC,CAAC,EAAI,EAAE,MAAMA,EAAG,CAAC,EAAGgE,GAAK,WAAW,UAAW,CAC3EA,GAAK,MACP,EAAGnE,CAAC,CACN,CACF,CACF,CACA,SAASqE,IAAK,CACZ,aAAaF,EAAE,EAAGA,GAAK,MACzB,CACA,SAASG,GAAG,EAAGtE,EAAG,EAAG,CACnB,EAAE,YAAcA,EAAG,EAAE,WAAa,CACpC,CACA,SAASuE,GAAG,EAAG,CACb,IAAIvE,EAAI,OAAO,QAAS,EAAI,OAAO,QAAU,OAAO,MACpD,OAAOA,GAAKA,EAAE,IAAMA,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,EAAI,EAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAI,EAAE,UAAU,EAAE,CACrF,CACA,SAASwE,GAAG,EAAGxE,EAAG,EAAG,CACnB,IAAIG,EAAI,CAAA,EACR,OAAO,MAAM,KAAK,EAAE,QAAQ,EAAE,QAAQ,SAASqB,EAAG,CAChD,IAAI7H,EAAGuD,EAAGkG,EAAG/M,EACb,GAAI,EAAE,CAACuM,GAAEpB,EAAGxB,EAAE,UAAW,EAAG,EAAE,GAAKwB,EAAE,UAAYA,IAAM,GAAI,CACzD,IAAI6B,EAAIF,GAAE3B,CAAC,EACXrB,EAAE,KAAO,KAAK,KAAKxG,EAAIwG,EAAE,QAAU,MAAQxG,IAAM,OAASA,EAAI,IAAO0J,EAAE,IAAI,EAAGlD,EAAE,IAAM,KAAK,KAAKjD,EAAIiD,EAAE,OAAS,MAAQjD,IAAM,OAASA,EAAI,IAAOmG,EAAE,GAAG,EAAGlD,EAAE,MAAQ,KAAK,KAAKiD,EAAIjD,EAAE,SAAW,MAAQiD,IAAM,OAASA,EAAI,KAAQC,EAAE,KAAK,EAAGlD,EAAE,OAAS,KAAK,KAAK9J,EAAI8J,EAAE,UAAY,MAAQ9J,IAAM,OAASA,EAAI,KAAQgN,EAAE,MAAM,CAC/T,CACF,CAAC,EAAGlD,EAAE,MAAQA,EAAE,MAAQA,EAAE,KAAMA,EAAE,OAASA,EAAE,OAASA,EAAE,IAAKA,EAAE,EAAIA,EAAE,KAAMA,EAAE,EAAIA,EAAE,IAAKA,CAC1F,CACA,IAAIrD,GAAI,WAA8B,IAAI,KAAI,EAAI,QAAO,EACzD,SAAS2H,IAAK,CACZ,IAAI,EAAI,CAAA,EAAIzE,EACZ,MAAO,CACL,sBAAuB,UAAW,CAChC,GAAI,EAAI,CAAA,EAAI,CAAC,CAAC,KAAK,QAAQ,UAAW,CACpC,IAAIG,EAAI,CAAA,EAAG,MAAM,KAAK,KAAK,GAAG,QAAQ,EACtCA,EAAE,QAAQ,SAASqB,EAAG,CACpB,GAAI,EAAEuB,EAAEvB,EAAG,SAAS,IAAM,QAAUA,IAAM9H,EAAE,OAAQ,CAClD,EAAE,KAAK,CACL,OAAQ8H,EACR,KAAM2B,GAAE3B,CAAC,CACvB,CAAa,EACD,IAAI7H,EAAI8H,GAAG,GAAI,EAAE,EAAE,OAAS,CAAC,EAAE,IAAI,EACnC,GAAID,EAAE,sBAAuB,CAC3B,IAAItE,EAAI8F,GAAGxB,EAAG,EAAE,EAChBtE,IAAMvD,EAAE,KAAOuD,EAAE,EAAGvD,EAAE,MAAQuD,EAAE,EAClC,CACAsE,EAAE,SAAW7H,CACf,CACF,CAAC,CACH,CACF,EACA,kBAAmB,SAASwG,EAAG,CAC7B,EAAE,KAAKA,CAAC,CACV,EACA,qBAAsB,SAASA,EAAG,CAChC,EAAE,OAAO6D,GAAG,EAAG,CACb,OAAQ7D,CAChB,CAAO,EAAG,CAAC,CACP,EACA,WAAY,SAASA,EAAG,CACtB,IAAIqB,EAAI,KACR,GAAI,CAAC,KAAK,QAAQ,UAAW,CAC3B,aAAaxB,CAAC,EAAG,OAAOG,GAAK,YAAcA,EAAC,EAC5C,MACF,CACA,IAAIxG,EAAI,GAAIuD,EAAI,EAChB,EAAE,QAAQ,SAASkG,EAAG,CACpB,IAAI/M,EAAI,EAAGgN,EAAID,EAAE,OAAQ3F,EAAI4F,EAAE,SAAUrG,EAAImG,GAAEE,CAAC,EAAGC,EAAID,EAAE,aAAc,EAAIA,EAAE,WAAYG,EAAIJ,EAAE,KAAMK,EAAIT,GAAGK,EAAG,EAAE,EACjHI,IAAMzG,EAAE,KAAOyG,EAAE,EAAGzG,EAAE,MAAQyG,EAAE,GAAIJ,EAAE,OAASrG,EAAGqG,EAAE,uBAAyBa,GAAGZ,EAAGtG,CAAC,GAAK,CAACkH,GAAGzG,EAAGT,CAAC,IAChGwG,EAAE,IAAMxG,EAAE,MAAQwG,EAAE,KAAOxG,EAAE,SAAWS,EAAE,IAAMT,EAAE,MAAQS,EAAE,KAAOT,EAAE,QAAU3G,EAAIqO,GAAGlB,EAAGF,EAAG,EAAG9B,EAAE,OAAO,GAAI0C,GAAGlH,EAAGS,CAAC,IAAM4F,EAAE,aAAe5F,EAAG4F,EAAE,WAAarG,EAAG3G,IAAMA,EAAImL,EAAE,QAAQ,WAAYA,EAAE,QAAQ6B,EAAGG,EAAGxG,EAAG3G,CAAC,GAAIA,IAAMsD,EAAI,GAAIuD,EAAI,KAAK,IAAIA,EAAG7G,CAAC,EAAG,aAAagN,EAAE,mBAAmB,EAAGA,EAAE,oBAAsB,WAAW,UAAW,CAC3UA,EAAE,cAAgB,EAAGA,EAAE,aAAe,KAAMA,EAAE,SAAW,KAAMA,EAAE,WAAa,KAAMA,EAAE,sBAAwB,IAChH,EAAGhN,CAAC,EAAGgN,EAAE,sBAAwBhN,EACnC,CAAC,EAAG,aAAa2J,CAAC,EAAGrG,EAAIqG,EAAI,WAAW,UAAW,CACjD,OAAOG,GAAK,YAAcA,EAAC,CAC7B,EAAGjD,CAAC,EAAI,OAAOiD,GAAK,YAAcA,EAAC,EAAI,EAAI,CAAA,CAC7C,EACA,QAAS,SAASA,EAAGqB,EAAG7H,EAAGuD,EAAG,CAC5B,GAAIA,EAAG,CACL6F,EAAE5C,EAAG,aAAc,EAAE,EAAG4C,EAAE5C,EAAG,YAAa,EAAE,EAC5C,IAAIiD,EAAIJ,GAAG,KAAK,EAAE,EAAG3M,EAAI+M,GAAKA,EAAE,EAAGC,EAAID,GAAKA,EAAE,EAAG3F,GAAK+D,EAAE,KAAO7H,EAAE,OAAStD,GAAK,GAAI2G,GAAKwE,EAAE,IAAM7H,EAAE,MAAQ0J,GAAK,GAC/GlD,EAAE,WAAa,CAAC,CAAC1C,EAAG0C,EAAE,WAAa,CAAC,CAACnD,EAAG+F,EAAE5C,EAAG,YAAa,eAAiB1C,EAAI,MAAQT,EAAI,OAAO,EAAG,KAAK,gBAAkB2H,GAAGxE,CAAC,EAAG4C,EAAE5C,EAAG,aAAc,aAAejD,EAAI,MAAQ,KAAK,QAAQ,OAAS,IAAM,KAAK,QAAQ,OAAS,GAAG,EAAG6F,EAAE5C,EAAG,YAAa,oBAAoB,EAAG,OAAOA,EAAE,UAAY,UAAY,aAAaA,EAAE,QAAQ,EAAGA,EAAE,SAAW,WAAW,UAAW,CAC9W4C,EAAE5C,EAAG,aAAc,EAAE,EAAG4C,EAAE5C,EAAG,YAAa,EAAE,EAAGA,EAAE,SAAW,GAAIA,EAAE,WAAa,GAAIA,EAAE,WAAa,EACpG,EAAGjD,CAAC,CACN,CACF,CACJ,CACA,CACA,SAASyH,GAAG,EAAG,CACb,OAAO,EAAE,WACX,CACA,SAASD,GAAG,EAAG1E,EAAG,EAAGG,EAAG,CACtB,OAAO,KAAK,KAAK,KAAK,IAAIH,EAAE,IAAM,EAAE,IAAK,CAAC,EAAI,KAAK,IAAIA,EAAE,KAAO,EAAE,KAAM,CAAC,CAAC,EAAI,KAAK,KAAK,KAAK,IAAIA,EAAE,IAAM,EAAE,IAAK,CAAC,EAAI,KAAK,IAAIA,EAAE,KAAO,EAAE,KAAM,CAAC,CAAC,EAAIG,EAAE,SACzJ,CACA,IAAIyE,GAAK,CAAA,EAAIC,GAAK,CAChB,oBAAqB,EACvB,EAAGC,GAAK,CACN,MAAO,SAAS9E,EAAG,CACjB,QAASnG,KAAKgL,GACZA,GAAG,eAAehL,CAAC,GAAK,EAAEA,KAAKmG,KAAOA,EAAEnG,CAAC,EAAIgL,GAAGhL,CAAC,GACnD+K,GAAG,QAAQ,SAASzE,EAAG,CACrB,GAAIA,EAAE,aAAeH,EAAE,WACrB,KAAM,iCAAiC,OAAOA,EAAE,WAAY,iBAAiB,CACjF,CAAC,EAAG4E,GAAG,KAAK5E,CAAC,CACf,EACA,YAAa,SAASA,EAAGnG,EAAGsG,EAAG,CAC7B,IAAIqB,EAAI,KACR,KAAK,cAAgB,GAAIrB,EAAE,OAAS,UAAW,CAC7CqB,EAAE,cAAgB,EACpB,EACA,IAAI7H,EAAIqG,EAAI,SACZ4E,GAAG,QAAQ,SAAS1H,EAAG,CACrBrD,EAAEqD,EAAE,UAAU,IAAMrD,EAAEqD,EAAE,UAAU,EAAEvD,CAAC,GAAKE,EAAEqD,EAAE,UAAU,EAAEvD,CAAC,EAAE8H,GAAG,CAC9D,SAAU5H,CAClB,EAASsG,CAAC,CAAC,EAAGtG,EAAE,QAAQqD,EAAE,UAAU,GAAKrD,EAAEqD,EAAE,UAAU,EAAE8C,CAAC,GAAKnG,EAAEqD,EAAE,UAAU,EAAE8C,CAAC,EAAEyB,GAAG,CAC7E,SAAU5H,CAClB,EAASsG,CAAC,CAAC,EACP,CAAC,CACH,EACA,kBAAmB,SAASH,EAAGnG,EAAGsG,EAAGqB,EAAG,CACtCoD,GAAG,QAAQ,SAASxB,EAAG,CACrB,IAAI/M,EAAI+M,EAAE,WACV,GAAI,EAAE,CAACpD,EAAE,QAAQ3J,CAAC,GAAK,CAAC+M,EAAE,qBAAsB,CAC9C,IAAIC,EAAI,IAAID,EAAEpD,EAAGnG,EAAGmG,EAAE,OAAO,EAC7BqD,EAAE,SAAWrD,EAAGqD,EAAE,QAAUrD,EAAE,QAASA,EAAE3J,CAAC,EAAIgN,EAAGzB,GAAGzB,EAAGkD,EAAE,QAAQ,CACnE,CACF,CAAC,EACD,QAAS1J,KAAKqG,EAAE,QACd,GAAIA,EAAE,QAAQ,eAAerG,CAAC,EAAG,CAC/B,IAAIuD,EAAI,KAAK,aAAa8C,EAAGrG,EAAGqG,EAAE,QAAQrG,CAAC,CAAC,EAC5C,OAAOuD,EAAK,MAAgB8C,EAAE,QAAQrG,CAAC,EAAIuD,EAC7C,CACJ,EACA,mBAAoB,SAAS8C,EAAGnG,EAAG,CACjC,IAAIsG,EAAI,CAAA,EACR,OAAOyE,GAAG,QAAQ,SAASpD,EAAG,CAC5B,OAAOA,EAAE,iBAAmB,YAAcI,GAAGzB,EAAGqB,EAAE,gBAAgB,KAAK3H,EAAE2H,EAAE,UAAU,EAAGxB,CAAC,CAAC,CAC5F,CAAC,EAAGG,CACN,EACA,aAAc,SAASH,EAAGnG,EAAGsG,EAAG,CAC9B,IAAIqB,EACJ,OAAOoD,GAAG,QAAQ,SAASjL,EAAG,CAC5BqG,EAAErG,EAAE,UAAU,GAAKA,EAAE,iBAAmB,OAAOA,EAAE,gBAAgBE,CAAC,GAAK,aAAe2H,EAAI7H,EAAE,gBAAgBE,CAAC,EAAE,KAAKmG,EAAErG,EAAE,UAAU,EAAGwG,CAAC,EACxI,CAAC,EAAGqB,CACN,CACF,EACA,SAASuD,GAAG,EAAG,CACb,IAAI/E,EAAI,EAAE,SAAU,EAAI,EAAE,OAAQG,EAAI,EAAE,KAAMqB,EAAI,EAAE,SAAU7H,EAAI,EAAE,QAASuD,EAAI,EAAE,KAAMkG,EAAI,EAAE,OAAQ/M,EAAI,EAAE,SAAUgN,EAAI,EAAE,SAAU5F,EAAI,EAAE,kBAAmBT,EAAI,EAAE,kBAAmBsG,EAAI,EAAE,cAAeC,EAAI,EAAE,YAAaC,EAAI,EAAE,qBACvO,GAAIxD,EAAIA,GAAK,GAAK,EAAElD,EAAC,EAAG,CAAC,CAACkD,EAAG,CAC3B,IAAIyD,EAAGuB,EAAIhF,EAAE,QAASiF,EAAI,KAAO9E,EAAE,OAAO,CAAC,EAAE,YAAW,EAAKA,EAAE,OAAO,CAAC,EACvE,OAAO,aAAe,CAAC8B,IAAM,CAACC,GAAKuB,EAAI,IAAI,YAAYtD,EAAG,CACxD,QAAS,GACT,WAAY,EAClB,CAAK,GAAKsD,EAAI,SAAS,YAAY,OAAO,EAAGA,EAAE,UAAUtD,EAAG,GAAI,EAAE,GAAIsD,EAAE,GAAKvG,GAAK,EAAGuG,EAAE,KAAOL,GAAK,EAAGK,EAAE,KAAOjC,GAAK,EAAGiC,EAAE,MAAQ9J,EAAG8J,EAAE,SAAWpN,EAAGoN,EAAE,SAAWJ,EAAGI,EAAE,kBAAoBhG,EAAGgG,EAAE,kBAAoBzG,EAAGyG,EAAE,cAAgBH,EAAGG,EAAE,SAAWF,EAAIA,EAAE,YAAc,OACxQ,IAAI2B,EAAIzD,GAAGA,GAAG,GAAI+B,CAAC,EAAGsB,GAAG,mBAAmB3E,EAAGH,CAAC,CAAC,EACjD,QAAS,KAAKkF,EACZzB,EAAE,CAAC,EAAIyB,EAAE,CAAC,EACZ,GAAK,EAAE,cAAczB,CAAC,EAAGuB,EAAEC,CAAC,GAAKD,EAAEC,CAAC,EAAE,KAAKjF,EAAGyD,CAAC,CACjD,CACF,CACA,IAAI0B,GAAK,CAAC,KAAK,EAAGC,GAAI,SAASpF,EAAGnG,EAAG,CACnC,IAAIsG,EAAI,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAS,UAAU,CAAC,EAAI,CAAA,EAAIqB,EAAIrB,EAAE,IAAKxG,EAAImI,GAAG3B,EAAGgF,EAAE,EACpGL,GAAG,YAAY,KAAKpL,CAAC,EAAEsG,EAAGnG,EAAG4H,GAAG,CAC9B,OAAQnL,EACR,SAAU+O,GACV,QAAS5G,EACT,OAAQ6G,EACR,OAAQC,GACR,WAAYC,GACZ,QAASC,GACT,YAAaC,GACb,YAAaC,GACb,YAAaC,GACb,eAAgBlM,EAAE,OAClB,cAAe8H,EACf,SAAUqE,GACV,kBAAmBC,GACnB,SAAUC,GACV,kBAAmBC,GACnB,mBAAoBC,GACpB,qBAAsBC,GACtB,eAAgB,UAAW,CACzBR,GAAK,EACP,EACA,cAAe,UAAW,CACxBA,GAAK,EACP,EACA,sBAAuB,SAAStC,EAAG,CACjC+C,GAAE,CACA,SAAUtM,EACV,KAAMuJ,EACN,cAAe5B,CACvB,CAAO,CACH,CACJ,EAAK7H,CAAC,CAAC,CACP,EACA,SAASwM,GAAE,EAAG,CACZpB,GAAGtD,GAAG,CACJ,YAAamE,GACb,QAASH,GACT,SAAUnP,EACV,OAAQgP,EACR,SAAUO,GACV,kBAAmBC,GACnB,SAAUC,GACV,kBAAmBC,EACvB,EAAK,CAAC,CAAC,CACP,CACA,IAAI1P,EAAG+O,GAAG5G,EAAG6G,EAAGC,GAAIC,GAAIC,GAAGC,GAAIG,GAAIE,GAAGD,GAAIE,GAAII,GAAIR,GAAGS,GAAK,GAAIC,GAAK,GAAIC,GAAK,CAAA,EAAIC,GAAIC,GAAGC,GAAIC,GAAIC,GAAIC,GAAIlB,GAAImB,GAAIC,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAIC,GAAGC,GAAK,CAAA,EAAIC,GAAK,GAAIC,GAAK,CAAA,EAAIC,GAAK,OAAO,SAAY,IAAaC,GAAKnF,GAAIoF,GAAKvF,IAAMD,GAAK,WAAa,QAASyF,GAAKH,IAAM,CAACjF,IAAM,CAACD,IAAM,cAAe,SAAS,cAAc,KAAK,EAAGsF,IAAK,UAAW,CAChV,GAAIJ,GAAI,CACN,GAAItF,GACF,MAAO,GACT,IAAI,EAAI,SAAS,cAAc,GAAG,EAClC,OAAO,EAAE,MAAM,QAAU,sBAAuB,EAAE,MAAM,gBAAkB,MAC5E,CACF,GAAC,EAAI2F,GAAK,SAAS5H,EAAGnG,EAAG,CACvB,IAAIsG,EAAI4C,EAAE/C,CAAC,EAAGwB,EAAI,SAASrB,EAAE,KAAK,EAAI,SAASA,EAAE,WAAW,EAAI,SAASA,EAAE,YAAY,EAAI,SAASA,EAAE,eAAe,EAAI,SAASA,EAAE,gBAAgB,EAAGxG,EAAIiK,GAAG5D,EAAG,EAAGnG,CAAC,EAAGqD,EAAI0G,GAAG5D,EAAG,EAAGnG,CAAC,EAAGuJ,EAAIzJ,GAAKoJ,EAAEpJ,CAAC,EAAGtD,EAAI6G,GAAK6F,EAAE7F,CAAC,EAAGmG,EAAID,GAAK,SAASA,EAAE,UAAU,EAAI,SAASA,EAAE,WAAW,EAAID,GAAExJ,CAAC,EAAE,MAAO8D,EAAIpH,GAAK,SAASA,EAAE,UAAU,EAAI,SAASA,EAAE,WAAW,EAAI8M,GAAEjG,CAAC,EAAE,MAChW,GAAIiD,EAAE,UAAY,OAChB,OAAOA,EAAE,gBAAkB,UAAYA,EAAE,gBAAkB,iBAAmB,WAAa,aAC7F,GAAIA,EAAE,UAAY,OAChB,OAAOA,EAAE,oBAAoB,MAAM,GAAG,EAAE,QAAU,EAAI,WAAa,aACrE,GAAIxG,GAAKyJ,EAAE,OAASA,EAAE,QAAU,OAAQ,CACtC,IAAIpG,EAAIoG,EAAE,QAAU,OAAS,OAAS,QACtC,OAAOlG,IAAM7G,EAAE,QAAU,QAAUA,EAAE,QAAU2G,GAAK,WAAa,YACnE,CACA,OAAOrD,IAAMyJ,EAAE,UAAY,SAAWA,EAAE,UAAY,QAAUA,EAAE,UAAY,SAAWA,EAAE,UAAY,QAAUC,GAAK7B,GAAKrB,EAAEsH,EAAE,IAAM,QAAUvK,GAAKiD,EAAEsH,EAAE,IAAM,QAAUpE,EAAI5F,EAAI+D,GAAK,WAAa,YAClM,EAAGqG,GAAK,SAAS7H,EAAGnG,EAAGsG,EAAG,CACxB,IAAIqB,EAAIrB,EAAIH,EAAE,KAAOA,EAAE,IAAKrG,EAAIwG,EAAIH,EAAE,MAAQA,EAAE,OAAQ9C,EAAIiD,EAAIH,EAAE,MAAQA,EAAE,OAAQoD,EAAIjD,EAAItG,EAAE,KAAOA,EAAE,IAAKxD,EAAI8J,EAAItG,EAAE,MAAQA,EAAE,OAAQwJ,EAAIlD,EAAItG,EAAE,MAAQA,EAAE,OAC5J,OAAO2H,IAAM4B,GAAKzJ,IAAMtD,GAAKmL,EAAItE,EAAI,IAAMkG,EAAIC,EAAI,CACrD,EAAGyE,GAAK,SAAS9H,EAAGnG,EAAG,CACrB,IAAIsG,EACJ,OAAOoG,GAAG,KAAK,SAAS/E,EAAG,CACzB,IAAI7H,EAAI6H,EAAE1E,EAAC,EAAE,QAAQ,qBACrB,GAAI,EAAE,CAACnD,GAAKkK,GAAGrC,CAAC,GAAI,CAClB,IAAItE,EAAIiG,GAAE3B,CAAC,EAAG4B,EAAIpD,GAAK9C,EAAE,KAAOvD,GAAKqG,GAAK9C,EAAE,MAAQvD,EAAGtD,EAAIwD,GAAKqD,EAAE,IAAMvD,GAAKE,GAAKqD,EAAE,OAASvD,EAC7F,GAAIyJ,GAAK/M,EACP,OAAO8J,EAAIqB,CACf,CACF,CAAC,EAAGrB,CACN,EAAG4H,GAAK,SAAS/H,EAAG,CAClB,SAASnG,EAAEF,EAAGuD,EAAG,CACf,OAAO,SAASkG,EAAG/M,EAAGgN,EAAG5F,EAAG,CAC1B,IAAIT,EAAIoG,EAAE,QAAQ,MAAM,MAAQ/M,EAAE,QAAQ,MAAM,MAAQ+M,EAAE,QAAQ,MAAM,OAAS/M,EAAE,QAAQ,MAAM,KACjG,GAAIsD,GAAK,OAASuD,GAAKF,GACrB,MAAO,GACT,GAAIrD,GAAK,MAAQA,IAAM,GACrB,MAAO,GACT,GAAIuD,GAAKvD,IAAM,QACb,OAAOA,EACT,GAAI,OAAOA,GAAK,WACd,OAAOE,EAAEF,EAAEyJ,EAAG/M,EAAGgN,EAAG5F,CAAC,EAAGP,CAAC,EAAEkG,EAAG/M,EAAGgN,EAAG5F,CAAC,EACvC,IAAI6F,GAAKpG,EAAIkG,EAAI/M,GAAG,QAAQ,MAAM,KAClC,OAAOsD,IAAM,IAAM,OAAOA,GAAK,UAAYA,IAAM2J,GAAK3J,EAAE,MAAQA,EAAE,QAAQ2J,CAAC,EAAI,EACjF,CACF,CACA,IAAInD,EAAI,CAAA,EAAIqB,EAAIxB,EAAE,OACjB,CAACwB,GAAKG,GAAGH,CAAC,GAAK,YAAcA,EAAI,CAChC,KAAMA,CACV,GAAMrB,EAAE,KAAOqB,EAAE,KAAMrB,EAAE,UAAYtG,EAAE2H,EAAE,KAAM,EAAE,EAAGrB,EAAE,SAAWtG,EAAE2H,EAAE,GAAG,EAAGrB,EAAE,YAAcqB,EAAE,YAAaxB,EAAE,MAAQG,CACpH,EAAG8F,GAAK,UAAW,CACjB,CAAC0B,IAAMlJ,GAAKsE,EAAEtE,EAAG,UAAW,MAAM,CACpC,EAAGyH,GAAK,UAAW,CACjB,CAACyB,IAAMlJ,GAAKsE,EAAEtE,EAAG,UAAW,EAAE,CAChC,EACA8I,IAAM,CAACjF,IAAM,SAAS,iBAAiB,QAAS,SAAS,EAAG,CAC1D,GAAIgE,GACF,OAAO,EAAE,eAAc,EAAI,EAAE,iBAAmB,EAAE,gBAAe,EAAI,EAAE,0BAA4B,EAAE,yBAAwB,EAAIA,GAAK,GAAI,EAC9I,EAAG,EAAE,EACL,IAAI0B,GAAK,SAAShI,EAAG,CACnB,GAAI1J,EAAG,CACL0J,EAAIA,EAAE,QAAUA,EAAE,QAAQ,CAAC,EAAIA,EAC/B,IAAInG,EAAIiO,GAAG9H,EAAE,QAASA,EAAE,OAAO,EAC/B,GAAInG,EAAG,CACL,IAAIsG,EAAI,CAAA,EACR,QAASqB,KAAKxB,EACZA,EAAE,eAAewB,CAAC,IAAMrB,EAAEqB,CAAC,EAAIxB,EAAEwB,CAAC,GACpCrB,EAAE,OAASA,EAAE,OAAStG,EAAGsG,EAAE,eAAiB,OAAQA,EAAE,gBAAkB,OAAQtG,EAAEiD,EAAC,EAAE,YAAYqD,CAAC,CACpG,CACF,CACF,EAAG8H,GAAK,SAASjI,EAAG,CAClB1J,GAAKA,EAAE,WAAWwG,EAAC,EAAE,iBAAiBkD,EAAE,MAAM,CAChD,EACA,SAAStG,EAAE,EAAGsG,EAAG,CACf,GAAI,EAAE,GAAK,EAAE,UAAY,EAAE,WAAa,GACtC,KAAM,8CAA8C,OAAO,CAAA,EAAG,SAAS,KAAK,CAAC,CAAC,EAChF,KAAK,GAAK,EAAG,KAAK,QAAUA,EAAI4B,GAAG,CAAA,EAAI5B,CAAC,EAAG,EAAElD,EAAC,EAAI,KAClD,IAAI,EAAI,CACN,MAAO,KACP,KAAM,GACN,SAAU,GACV,MAAO,KACP,OAAQ,KACR,UAAW,WAAW,KAAK,EAAE,QAAQ,EAAI,MAAQ,KACjD,cAAe,EAEf,WAAY,GAEZ,sBAAuB,KAEvB,kBAAmB,GACnB,UAAW,UAAW,CACpB,OAAO8K,GAAG,EAAG,KAAK,OAAO,CAC3B,EACA,WAAY,iBACZ,YAAa,kBACb,UAAW,gBACX,OAAQ,SACR,OAAQ,KACR,gBAAiB,GACjB,UAAW,EACX,OAAQ,KACR,QAAS,SAAS1K,EAAGkG,EAAG,CACtBlG,EAAE,QAAQ,OAAQkG,EAAE,WAAW,CACjC,EACA,WAAY,GACZ,eAAgB,GAChB,WAAY,UACZ,MAAO,EACP,iBAAkB,GAClB,qBAAsB,OAAO,SAAW,OAAS,QAAQ,SAAS,OAAO,iBAAkB,EAAE,GAAK,EAClG,cAAe,GACf,cAAe,oBACf,eAAgB,GAChB,kBAAmB,EACnB,eAAgB,CACd,EAAG,EACH,EAAG,CACT,EACI,eAAgB1J,EAAE,iBAAmB,IAAM,iBAAkB,QAAU,CAAC0I,GACxE,qBAAsB,CAC1B,EACE0C,GAAG,kBAAkB,KAAM,EAAG,CAAC,EAC/B,QAAS3E,KAAK,EACZ,EAAEA,KAAKH,KAAOA,EAAEG,CAAC,EAAI,EAAEA,CAAC,GAC1B4H,GAAG/H,CAAC,EACJ,QAASwB,KAAK,KACZA,EAAE,OAAO,CAAC,IAAM,KAAO,OAAO,KAAKA,CAAC,GAAK,aAAe,KAAKA,CAAC,EAAI,KAAKA,CAAC,EAAE,KAAK,IAAI,GACrF,KAAK,gBAAkBxB,EAAE,cAAgB,GAAK0H,GAAI,KAAK,kBAAoB,KAAK,QAAQ,oBAAsB,GAAI1H,EAAE,eAAiBwC,EAAE,EAAG,cAAe,KAAK,WAAW,GAAKA,EAAE,EAAG,YAAa,KAAK,WAAW,EAAGA,EAAE,EAAG,aAAc,KAAK,WAAW,GAAI,KAAK,kBAAoBA,EAAE,EAAG,WAAY,IAAI,EAAGA,EAAE,EAAG,YAAa,IAAI,GAAI+D,GAAG,KAAK,KAAK,EAAE,EAAGvG,EAAE,OAASA,EAAE,MAAM,KAAO,KAAK,KAAKA,EAAE,MAAM,IAAI,IAAI,GAAK,CAAA,CAAE,EAAG4B,GAAG,KAAM6C,IAAI,CACpa,CACA/K,EAAE,UACF,CACE,YAAaA,EACb,iBAAkB,SAASsG,EAAG,CAC5B,CAAC,KAAK,GAAG,SAASA,CAAC,GAAKA,IAAM,KAAK,KAAO8G,GAAK,KACjD,EACA,cAAe,SAAS9G,EAAGnG,EAAG,CAC5B,OAAO,OAAO,KAAK,QAAQ,WAAa,WAAa,KAAK,QAAQ,UAAU,KAAK,KAAMmG,EAAGnG,EAAGvD,CAAC,EAAI,KAAK,QAAQ,SACjH,EACA,YAAa,SAAS0J,EAAG,CACvB,GAAIA,EAAE,WAAY,CAChB,IAAInG,EAAI,KAAMsG,EAAI,KAAK,GAAIqB,EAAI,KAAK,QAAS7H,EAAI6H,EAAE,gBAAiBtE,EAAI8C,EAAE,KAAMoD,EAAIpD,EAAE,SAAWA,EAAE,QAAQ,CAAC,GAAKA,EAAE,aAAeA,EAAE,cAAgB,SAAWA,EAAG3J,GAAK+M,GAAKpD,GAAG,OAAQqD,EAAIrD,EAAE,OAAO,aAAeA,EAAE,MAAQA,EAAE,KAAK,CAAC,GAAKA,EAAE,cAAgBA,EAAE,eAAe,CAAC,IAAM3J,EAAGoH,EAAI+D,EAAE,OAC7R,GAAI0G,GAAG/H,CAAC,EAAG,CAAC7J,GAAK,EAAE,wBAAwB,KAAK4G,CAAC,GAAK8C,EAAE,SAAW,GAAKwB,EAAE,WAAa,CAAC6B,EAAE,mBAAqB,EAAE,CAAC,KAAK,iBAAmBjB,IAAM/L,GAAKA,EAAE,QAAQ,YAAW,IAAO,YAAcA,EAAIuM,GAAEvM,EAAGmL,EAAE,UAAWrB,EAAG,EAAE,EAAG,EAAE9J,GAAKA,EAAE,WAAamP,KAAOnP,GAAI,CAC5P,GAAIwP,GAAK/B,GAAEzN,CAAC,EAAGyP,GAAKhC,GAAEzN,EAAGmL,EAAE,SAAS,EAAG,OAAO/D,GAAK,YACjD,GAAIA,EAAE,KAAK,KAAMuC,EAAG3J,EAAG,IAAI,EAAG,CAC5B8P,GAAE,CACA,SAAUtM,EACV,OAAQwJ,EACR,KAAM,SACN,SAAUhN,EACV,KAAM8J,EACN,OAAQA,CACtB,CAAa,EAAGiF,GAAE,SAAUvL,EAAG,CACjB,IAAKmG,CACnB,CAAa,EAAGrG,GAAKqG,EAAE,YAAcA,EAAE,eAAc,EACzC,MACF,UACSvC,IAAMA,EAAIA,EAAE,MAAM,GAAG,EAAE,KAAK,SAAST,EAAG,CACjD,GAAIA,EAAI4F,GAAES,EAAGrG,EAAE,OAAQmD,EAAG,EAAE,EAAGnD,EAC7B,OAAOmJ,GAAE,CACP,SAAUtM,EACV,OAAQmD,EACR,KAAM,SACN,SAAU3G,EACV,OAAQ8J,EACR,KAAMA,CACpB,CAAa,EAAGiF,GAAE,SAAUvL,EAAG,CACjB,IAAKmG,CACnB,CAAa,EAAG,EACR,CAAC,EAAGvC,GAAI,CACN9D,GAAKqG,EAAE,YAAcA,EAAE,eAAc,EACrC,MACF,CACAwB,EAAE,QAAU,CAACoB,GAAES,EAAG7B,EAAE,OAAQrB,EAAG,EAAE,GAAK,KAAK,kBAAkBH,EAAGoD,EAAG/M,CAAC,CACtE,CACF,CACF,EACA,kBAAmB,SAAS2J,EAAGnG,EAAGsG,EAAG,CACnC,IAAIqB,EAAI,KAAM7H,EAAI6H,EAAE,GAAItE,EAAIsE,EAAE,QAAS4B,EAAIzJ,EAAE,cAAetD,EAC5D,GAAI8J,GAAK,CAAC7J,GAAK6J,EAAE,aAAexG,EAAG,CACjC,IAAI0J,EAAIF,GAAEhD,CAAC,EACX,GAAImF,EAAI3L,EAAGrD,EAAI6J,EAAGkF,GAAI/O,EAAE,WAAYiP,GAAKjP,EAAE,YAAakP,GAAKrF,EAAGiG,GAAKlJ,EAAE,MAAOxD,EAAE,QAAUpD,EAAGkQ,GAAK,CAChG,OAAQlQ,EACR,SAAUuD,GAAKmG,GAAG,QAClB,SAAUnG,GAAKmG,GAAG,OAC1B,EAAS4G,GAAKJ,GAAG,QAAUnD,EAAE,KAAMwD,GAAKL,GAAG,QAAUnD,EAAE,IAAK,KAAK,QAAUxJ,GAAKmG,GAAG,QAAS,KAAK,QAAUnG,GAAKmG,GAAG,QAAS1J,EAAE,MAAM,aAAa,EAAI,MAAOD,EAAI,UAAW,CACnK,GAAI+O,GAAE,aAAc5D,EAAG,CACrB,IAAKxB,CACf,CAAS,EAAGtG,EAAE,cAAe,CACnB8H,EAAE,QAAO,EACT,MACF,CACAA,EAAE,0BAAyB,EAAI,CAACW,IAAMX,EAAE,kBAAoBlL,EAAE,UAAY,IAAKkL,EAAE,kBAAkBxB,EAAGnG,CAAC,EAAGsM,GAAE,CAC1G,SAAU3E,EACV,KAAM,SACN,cAAexB,CACzB,CAAS,EAAG8C,GAAExM,EAAG4G,EAAE,YAAa,EAAE,CAC5B,EAAGA,EAAE,OAAO,MAAM,GAAG,EAAE,QAAQ,SAASO,EAAG,CACzCwF,GAAG3M,EAAGmH,EAAE,KAAI,EAAI0K,EAAE,CACpB,CAAC,EAAG3F,EAAEY,EAAG,WAAY4E,EAAE,EAAGxF,EAAEY,EAAG,YAAa4E,EAAE,EAAGxF,EAAEY,EAAG,YAAa4E,EAAE,EAAGxF,EAAEY,EAAG,UAAW5B,EAAE,OAAO,EAAGgB,EAAEY,EAAG,WAAY5B,EAAE,OAAO,EAAGgB,EAAEY,EAAG,cAAe5B,EAAE,OAAO,EAAGW,IAAM,KAAK,kBAAoB,KAAK,QAAQ,oBAAsB,EAAG7L,EAAE,UAAY,IAAK8O,GAAE,aAAc,KAAM,CAC7Q,IAAKpF,CACb,CAAO,EAAG9C,EAAE,QAAU,CAACA,EAAE,kBAAoBrD,KAAO,CAAC,KAAK,iBAAmB,EAAEqI,IAAMD,KAAM,CACnF,GAAIvI,EAAE,cAAe,CACnB,KAAK,QAAO,EACZ,MACF,CACA8I,EAAEY,EAAG,UAAW5B,EAAE,mBAAmB,EAAGgB,EAAEY,EAAG,WAAY5B,EAAE,mBAAmB,EAAGgB,EAAEY,EAAG,cAAe5B,EAAE,mBAAmB,EAAGgB,EAAEY,EAAG,YAAa5B,EAAE,4BAA4B,EAAGgB,EAAEY,EAAG,YAAa5B,EAAE,4BAA4B,EAAGtE,EAAE,gBAAkBsF,EAAEY,EAAG,cAAe5B,EAAE,4BAA4B,EAAGA,EAAE,gBAAkB,WAAWnL,EAAG6G,EAAE,KAAK,CACvV,MACE7G,EAAC,CACL,CACF,EACA,6BAA8B,SAAS2J,EAAG,CACxC,IAAInG,EAAImG,EAAE,QAAUA,EAAE,QAAQ,CAAC,EAAIA,EACnC,KAAK,IAAI,KAAK,IAAInG,EAAE,QAAU,KAAK,MAAM,EAAG,KAAK,IAAIA,EAAE,QAAU,KAAK,MAAM,CAAC,GAAK,KAAK,MAAM,KAAK,QAAQ,qBAAuB,KAAK,iBAAmB,OAAO,kBAAoB,EAAE,GAAK,KAAK,oBAAmB,CACrN,EACA,oBAAqB,UAAW,CAC9BvD,GAAK6R,GAAG7R,CAAC,EAAG,aAAa,KAAK,eAAe,EAAG,KAAK,0BAAyB,CAChF,EACA,0BAA2B,UAAW,CACpC,IAAI0J,EAAI,KAAK,GAAG,cAChByC,EAAEzC,EAAG,UAAW,KAAK,mBAAmB,EAAGyC,EAAEzC,EAAG,WAAY,KAAK,mBAAmB,EAAGyC,EAAEzC,EAAG,cAAe,KAAK,mBAAmB,EAAGyC,EAAEzC,EAAG,YAAa,KAAK,4BAA4B,EAAGyC,EAAEzC,EAAG,YAAa,KAAK,4BAA4B,EAAGyC,EAAEzC,EAAG,cAAe,KAAK,4BAA4B,CACzS,EACA,kBAAmB,SAASA,EAAGnG,EAAG,CAChCA,EAAIA,GAAKmG,EAAE,aAAe,SAAWA,EAAG,CAAC,KAAK,iBAAmBnG,EAAI,KAAK,QAAQ,eAAiB2I,EAAE,SAAU,cAAe,KAAK,YAAY,EAAI3I,EAAI2I,EAAE,SAAU,YAAa,KAAK,YAAY,EAAIA,EAAE,SAAU,YAAa,KAAK,YAAY,GAAKA,EAAElM,EAAG,UAAW,IAAI,EAAGkM,EAAE8C,EAAG,YAAa,KAAK,YAAY,GAC9S,GAAI,CACF,SAAS,UAAY8C,GAAG,UAAW,CACjC,SAAS,UAAU,MAAK,CAC1B,CAAC,EAAI,OAAO,aAAY,EAAG,gBAAe,CAC5C,MAAY,CACZ,CACF,EACA,aAAc,SAASpI,EAAGnG,EAAG,CAC3B,GAAIwM,GAAK,GAAIf,GAAKhP,EAAG,CACnB8O,GAAE,cAAe,KAAM,CACrB,IAAKvL,CACb,CAAO,EAAG,KAAK,iBAAmB2I,EAAE,SAAU,WAAYyF,EAAE,EACtD,IAAI9H,EAAI,KAAK,QACb,CAACH,GAAK8C,GAAExM,EAAG6J,EAAE,UAAW,EAAE,EAAG2C,GAAExM,EAAG6J,EAAE,WAAY,EAAE,EAAGzG,EAAE,OAAS,KAAMsG,GAAK,KAAK,aAAY,EAAImG,GAAE,CAChG,SAAU,KACV,KAAM,QACN,cAAetM,CACvB,CAAO,CACH,MACE,KAAK,SAAQ,CACjB,EACA,iBAAkB,UAAW,CAC3B,GAAI4M,GAAG,CACL,KAAK,OAASA,GAAE,QAAS,KAAK,OAASA,GAAE,QAASR,GAAE,EACpD,QAASjG,EAAI,SAAS,iBAAiByG,GAAE,QAASA,GAAE,OAAO,EAAG5M,EAAImG,EAAGA,GAAKA,EAAE,aAAeA,EAAIA,EAAE,WAAW,iBAAiByG,GAAE,QAASA,GAAE,OAAO,EAAGzG,IAAMnG,IACxJA,EAAImG,EACN,GAAI1J,EAAE,WAAWwG,EAAC,EAAE,iBAAiBkD,CAAC,EAAGnG,EACvC,EAAG,CACD,GAAIA,EAAEiD,EAAC,EAAG,CACR,IAAIqD,EAAI,OACR,GAAIA,EAAItG,EAAEiD,EAAC,EAAE,YAAY,CACvB,QAAS2J,GAAE,QACX,QAASA,GAAE,QACX,OAAQzG,EACR,OAAQnG,CACtB,CAAa,EAAGsG,GAAK,CAAC,KAAK,QAAQ,eACrB,KACJ,CACAH,EAAInG,CACN,OAASA,EAAIA,EAAE,YACjBqM,GAAE,CACJ,CACF,EACA,aAAc,SAASlG,EAAG,CACxB,GAAIwG,GAAI,CACN,IAAI3M,EAAI,KAAK,QAASsG,EAAItG,EAAE,kBAAmB2H,EAAI3H,EAAE,eAAgBF,EAAIqG,EAAE,QAAUA,EAAE,QAAQ,CAAC,EAAIA,EAAG9C,EAAIuB,GAAKuE,GAAGvE,EAAG,EAAE,EAAG2E,EAAI3E,GAAKvB,GAAKA,EAAE,EAAG7G,EAAIoI,GAAKvB,GAAKA,EAAE,EAAGmG,EAAImE,IAAML,IAAKpD,GAAGoD,EAAC,EAAG1J,GAAK9D,EAAE,QAAU6M,GAAG,QAAUhF,EAAE,IAAM4B,GAAK,IAAMC,EAAIA,EAAE,CAAC,EAAI+D,GAAG,CAAC,EAAI,IAAMhE,GAAK,GAAIpG,GAAKrD,EAAE,QAAU6M,GAAG,QAAUhF,EAAE,IAAMnL,GAAK,IAAMgN,EAAIA,EAAE,CAAC,EAAI+D,GAAG,CAAC,EAAI,IAAM/Q,GAAK,GACzV,GAAI,CAACqD,EAAE,QAAU,CAAC2M,GAAI,CACpB,GAAIlG,GAAK,KAAK,IAAI,KAAK,IAAIxG,EAAE,QAAU,KAAK,MAAM,EAAG,KAAK,IAAIA,EAAE,QAAU,KAAK,MAAM,CAAC,EAAIwG,EACxF,OACF,KAAK,aAAaH,EAAG,EAAE,CACzB,CACA,GAAIvB,EAAG,CACLvB,GAAKA,EAAE,GAAKO,GAAKiJ,IAAM,GAAIxJ,EAAE,GAAKF,GAAK2J,IAAM,IAAMzJ,EAAI,CACrD,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAGO,EACH,EAAAT,CACV,EACQ,IAAIsG,EAAI,UAAU,OAAOpG,EAAE,EAAG,GAAG,EAAE,OAAOA,EAAE,EAAG,GAAG,EAAE,OAAOA,EAAE,EAAG,GAAG,EAAE,OAAOA,EAAE,EAAG,GAAG,EAAE,OAAOA,EAAE,EAAG,GAAG,EAAE,OAAOA,EAAE,EAAG,GAAG,EACtH6F,EAAEtE,EAAG,kBAAmB6E,CAAC,EAAGP,EAAEtE,EAAG,eAAgB6E,CAAC,EAAGP,EAAEtE,EAAG,cAAe6E,CAAC,EAAGP,EAAEtE,EAAG,YAAa6E,CAAC,EAAGoD,GAAKjJ,EAAGkJ,GAAK3J,EAAGyJ,GAAI9M,CACzH,CACAqG,EAAE,YAAcA,EAAE,eAAc,CAClC,CACF,EACA,aAAc,UAAW,CACvB,GAAI,CAACvB,EAAG,CACN,IAAIuB,EAAI,KAAK,QAAQ,eAAiB,SAAS,KAAOsF,EAAGzL,EAAIsJ,GAAE7M,EAAG,GAAIkR,GAAI,GAAIxH,CAAC,EAAGG,EAAI,KAAK,QAC3F,GAAIqH,GAAI,CACN,IAAKL,GAAInH,EAAG+C,EAAEoE,GAAG,UAAU,IAAM,UAAYpE,EAAEoE,GAAG,WAAW,IAAM,QAAUA,KAAM,UACjFA,GAAIA,GAAE,WACRA,KAAM,SAAS,MAAQA,KAAM,SAAS,iBAAmBA,KAAM,WAAaA,GAAIjE,GAAE,GAAKrJ,EAAE,KAAOsN,GAAE,UAAWtN,EAAE,MAAQsN,GAAE,YAAcA,GAAIjE,GAAE,EAAIkE,GAAKrD,GAAGoD,EAAC,CAC5J,CACA1I,EAAInI,EAAE,UAAU,EAAE,EAAGwM,GAAErE,EAAG0B,EAAE,WAAY,EAAE,EAAG2C,GAAErE,EAAG0B,EAAE,cAAe,EAAE,EAAG2C,GAAErE,EAAG0B,EAAE,UAAW,EAAE,EAAG4C,EAAEtE,EAAG,aAAc,EAAE,EAAGsE,EAAEtE,EAAG,YAAa,EAAE,EAAGsE,EAAEtE,EAAG,aAAc,YAAY,EAAGsE,EAAEtE,EAAG,SAAU,CAAC,EAAGsE,EAAEtE,EAAG,MAAO5E,EAAE,GAAG,EAAGkJ,EAAEtE,EAAG,OAAQ5E,EAAE,IAAI,EAAGkJ,EAAEtE,EAAG,QAAS5E,EAAE,KAAK,EAAGkJ,EAAEtE,EAAG,SAAU5E,EAAE,MAAM,EAAGkJ,EAAEtE,EAAG,UAAW,KAAK,EAAGsE,EAAEtE,EAAG,WAAY+I,GAAK,WAAa,OAAO,EAAGzE,EAAEtE,EAAG,SAAU,QAAQ,EAAGsE,EAAEtE,EAAG,gBAAiB,MAAM,EAAG/E,EAAE,MAAQ+E,EAAGuB,EAAE,YAAYvB,CAAC,EAAGsE,EAAEtE,EAAG,mBAAoBmI,GAAK,SAASnI,EAAE,MAAM,KAAK,EAAI,IAAM,KAAOoI,GAAK,SAASpI,EAAE,MAAM,MAAM,EAAI,IAAM,GAAG,CAC5iB,CACF,EACA,aAAc,SAASuB,EAAGnG,EAAG,CAC3B,IAAIsG,EAAI,KAAMqB,EAAIxB,EAAE,aAAcrG,EAAIwG,EAAE,QACxC,GAAIiF,GAAE,YAAa,KAAM,CACvB,IAAKpF,CACX,CAAK,EAAGtG,EAAE,cAAe,CACnB,KAAK,QAAO,EACZ,MACF,CACA0L,GAAE,aAAc,IAAI,EAAG1L,EAAE,gBAAkB+L,GAAIlB,GAAGjO,CAAC,EAAGmP,GAAE,gBAAgB,IAAI,EAAGA,GAAE,UAAY,GAAIA,GAAE,MAAM,aAAa,EAAI,GAAI,KAAK,WAAU,EAAI3C,GAAE2C,GAAG,KAAK,QAAQ,YAAa,EAAE,EAAG/L,EAAE,MAAQ+L,IAAItF,EAAE,QAAUiI,GAAG,UAAW,CAC3NhD,GAAE,QAASjF,CAAC,EAAG,CAACzG,EAAE,gBAAkByG,EAAE,QAAQ,mBAAqBmF,EAAE,aAAaG,GAAGnP,CAAC,EAAG6J,EAAE,WAAU,EAAIgG,GAAE,CACzG,SAAUhG,EACV,KAAM,OACd,CAAO,EACH,CAAC,EAAG,CAACtG,GAAKiJ,GAAExM,EAAGqD,EAAE,UAAW,EAAE,EAAGE,GAAKyM,GAAK,GAAInG,EAAE,QAAU,YAAYA,EAAE,iBAAkB,EAAE,IAAMsC,EAAE,SAAU,UAAWtC,EAAE,OAAO,EAAGsC,EAAE,SAAU,WAAYtC,EAAE,OAAO,EAAGsC,EAAE,SAAU,cAAetC,EAAE,OAAO,EAAGqB,IAAMA,EAAE,cAAgB,OAAQ7H,EAAE,SAAWA,EAAE,QAAQ,KAAKwG,EAAGqB,EAAGlL,CAAC,GAAIkM,EAAE,SAAU,OAAQrC,CAAC,EAAG4C,EAAEzM,EAAG,YAAa,eAAe,GAAI+P,GAAK,GAAIlG,EAAE,aAAeiI,GAAGjI,EAAE,aAAa,KAAKA,EAAGtG,EAAGmG,CAAC,CAAC,EAAGwC,EAAE,SAAU,cAAerC,CAAC,EAAGwF,GAAK,GAAIvD,IAAMW,EAAE,SAAS,KAAM,cAAe,MAAM,CACve,EAEA,YAAa,SAAS/C,EAAG,CACvB,IAAInG,EAAI,KAAK,GAAIsG,EAAIH,EAAE,OAAQwB,EAAG7H,EAAGuD,EAAGkG,EAAI,KAAK,QAAS/M,EAAI+M,EAAE,MAAOC,EAAI3J,EAAE,OAAQ+D,EAAI2I,KAAO/P,EAAG2G,EAAIoG,EAAE,KAAME,EAAIsC,IAAKvC,EAAG,EAAGG,EAAI,KAAMC,EAAI,GAC5I,GAAI4D,GACF,OACF,SAASrC,EAAEqD,EAAIC,EAAI,CACjBlD,GAAEiD,EAAI7E,EAAG/B,GAAG,CACV,IAAKzB,EACL,QAASvC,EACT,KAAM,EAAI,WAAa,aACvB,OAAQP,EACR,SAAUsE,EACV,WAAY7H,EACZ,QAASqD,EACT,aAAcsG,EACd,OAAQnD,EACR,UAAW+E,EACX,OAAQ,SAASqD,GAAIC,GAAI,CACvB,OAAOC,GAAGnD,EAAGzL,EAAGvD,EAAGkL,EAAG+G,GAAIpF,GAAEoF,EAAE,EAAGvI,EAAGwI,EAAE,CACxC,EACA,QAASE,CACjB,EAASJ,CAAE,CAAC,CACR,CACA,SAASrD,GAAI,CACXD,EAAE,0BAA0B,EAAGxB,EAAE,sBAAqB,EAAIA,IAAMF,GAAKA,EAAE,sBAAqB,CAC9F,CACA,SAAS4B,EAAEmD,EAAI,CACb,OAAOrD,EAAE,oBAAqB,CAC5B,UAAWqD,CACnB,CAAO,EAAGA,IAAO5K,EAAI4F,EAAE,WAAU,EAAKA,EAAE,WAAWG,CAAC,EAAGA,IAAMF,IAAMR,GAAExM,EAAGsP,GAAIA,GAAE,QAAQ,WAAavC,EAAE,QAAQ,WAAY,EAAE,EAAGP,GAAExM,EAAG8M,EAAE,WAAY,EAAE,GAAIwC,KAAMpC,GAAKA,IAAM9J,EAAE,OAASkM,GAAIpC,EAAIA,IAAM9J,EAAE,QAAUkM,KAAMA,GAAI,MAAOtC,IAAME,IAAMA,EAAE,sBAAwBrD,GAAIqD,EAAE,WAAW,UAAW,CACxRwB,EAAE,2BAA2B,EAAGxB,EAAE,sBAAwB,IAC5D,CAAC,EAAGA,IAAMF,IAAMA,EAAE,aAAcA,EAAE,sBAAwB,QAASnD,IAAM7J,GAAK,CAACA,EAAE,UAAY6J,IAAMtG,GAAK,CAACsG,EAAE,YAAc2G,GAAK,MAAO,CAAC1D,EAAE,gBAAkB,CAACpD,EAAE,QAAUG,IAAM,WAAa7J,EAAE,WAAWwG,EAAC,EAAE,iBAAiBkD,EAAE,MAAM,EAAG,CAACqI,GAAML,GAAGhI,CAAC,GAAI,CAACoD,EAAE,gBAAkBpD,EAAE,iBAAmBA,EAAE,gBAAe,EAAIyD,EAAI,EAC1T,CACA,SAASiF,GAAI,CACX3C,GAAIjC,GAAExN,CAAC,EAAG0P,GAAKlC,GAAExN,EAAG8M,EAAE,SAAS,EAAG+C,GAAE,CAClC,SAAU3C,EACV,KAAM,SACN,KAAM3J,EACN,SAAUkM,GACV,kBAAmBC,GACnB,cAAehG,CACvB,CAAO,CACH,CACA,GAAIA,EAAE,iBAAmB,QAAUA,EAAE,YAAcA,EAAE,eAAc,EAAIG,EAAIyC,GAAEzC,EAAGiD,EAAE,UAAWvJ,EAAG,EAAE,EAAGmL,EAAE,UAAU,EAAGtL,EAAE,cACpH,OAAO+J,EACT,GAAInN,EAAE,SAAS0J,EAAE,MAAM,GAAKG,EAAE,UAAYA,EAAE,YAAcA,EAAE,YAAcqD,EAAE,wBAA0BrD,EACpG,OAAO+E,EAAE,EAAE,EACb,GAAIoB,GAAK,GAAIjD,GAAK,CAACD,EAAE,WAAa3F,EAAIT,IAAME,EAAImI,KAAMC,GAAKM,KAAM,OAAS,KAAK,YAAcQ,GAAG,UAAU,KAAM/C,EAAG/M,EAAG0J,CAAC,IAAM3J,EAAE,SAAS,KAAMgN,EAAG/M,EAAG0J,CAAC,GAAI,CACvJ,GAAI,EAAI,KAAK,cAAcA,EAAGG,CAAC,IAAM,WAAYqB,EAAI2B,GAAE7M,CAAC,EAAG0O,EAAE,eAAe,EAAGtL,EAAE,cAC/E,OAAO+J,EACT,GAAIvG,EACF,OAAOmI,GAAIC,EAAGL,EAAC,EAAI,KAAK,WAAU,EAAID,EAAE,QAAQ,EAAGtL,EAAE,gBAAkB6L,GAAKD,EAAE,aAAahP,EAAGiP,EAAE,EAAID,EAAE,YAAYhP,CAAC,GAAI4O,EAAE,EAAE,EAC7H,IAAIyD,EAAI9E,GAAGhK,EAAGuJ,EAAE,SAAS,EACzB,GAAI,CAACuF,GAAKC,GAAG5I,EAAG,EAAG,IAAI,GAAK,CAAC2I,EAAE,SAAU,CACvC,GAAIA,IAAMrS,EACR,OAAO4O,EAAE,EAAE,EACb,GAAIyD,GAAK9O,IAAMmG,EAAE,SAAWG,EAAIwI,GAAIxI,IAAMxG,EAAIwJ,GAAEhD,CAAC,GAAIsI,GAAGnD,EAAGzL,EAAGvD,EAAGkL,EAAGrB,EAAGxG,EAAGqG,EAAG,CAAC,CAACG,CAAC,IAAM,GACpF,OAAO8E,EAAC,EAAI0D,GAAKA,EAAE,YAAc9O,EAAE,aAAavD,EAAGqS,EAAE,WAAW,EAAI9O,EAAE,YAAYvD,CAAC,EAAG+O,GAAIxL,EAAG6O,EAAC,EAAIxD,EAAE,EAAE,CAC1G,SAAWyD,GAAKE,GAAG7I,EAAG,EAAG,IAAI,EAAG,CAC9B,IAAI8I,GAAIlF,GAAG/J,EAAG,EAAGuJ,EAAG,EAAE,EACtB,GAAI0F,KAAMxS,EACR,OAAO4O,EAAE,EAAE,EACb,GAAI/E,EAAI2I,GAAGnP,EAAIwJ,GAAEhD,CAAC,EAAGsI,GAAGnD,EAAGzL,EAAGvD,EAAGkL,EAAGrB,EAAGxG,EAAGqG,EAAG,EAAE,IAAM,GACnD,OAAOiF,EAAC,EAAIpL,EAAE,aAAavD,EAAGwS,EAAC,EAAGzD,GAAIxL,EAAG6O,IAAKxD,EAAE,EAAE,CACtD,SAAW/E,EAAE,aAAetG,EAAG,CAC7BF,EAAIwJ,GAAEhD,CAAC,EACP,IAAI4I,EAAI,EAAGC,EAAIC,GAAK3S,EAAE,aAAeuD,EAAGa,EAAI,CAACmN,GAAGvR,EAAE,UAAYA,EAAE,QAAUkL,EAAGrB,EAAE,UAAYA,EAAE,QAAUxG,EAAG,CAAC,EAAGnD,EAAI,EAAI,MAAQ,OAAQ0S,EAAIxF,GAAGvD,EAAG,MAAO,KAAK,GAAKuD,GAAGpN,EAAG,MAAO,KAAK,EAAG6S,EAAID,EAAIA,EAAE,UAAY,OAC5MpC,KAAO3G,IAAM6I,EAAKrP,EAAEnD,CAAC,EAAGwQ,GAAK,GAAIC,GAAK,CAACvM,GAAK0I,EAAE,YAAc6F,IAAKF,EAAIK,GAAGpJ,EAAGG,EAAGxG,EAAG,EAAGe,EAAI,EAAI0I,EAAE,cAAeA,EAAE,uBAAyB,KAAOA,EAAE,cAAgBA,EAAE,sBAAuB6D,GAAIH,KAAO3G,CAAC,EACtM,IAAIkJ,EACJ,GAAIN,IAAM,EAAG,CACX,IAAIO,EAAIxF,GAAExN,CAAC,EACX,GACEgT,GAAKP,EAAGM,EAAIhE,GAAE,SAASiE,CAAC,QACnBD,IAAMtG,EAAEsG,EAAG,SAAS,IAAM,QAAUA,IAAM5K,GACnD,CACA,GAAIsK,IAAM,GAAKM,IAAMlJ,EACnB,OAAO+E,EAAE,EAAE,EACb4B,GAAK3G,EAAG4G,GAAKgC,EACb,IAAIQ,EAAIpJ,EAAE,mBAAoBqJ,EAAI,GAClCA,EAAIT,IAAM,EACV,IAAIU,EAAIhB,GAAGnD,EAAGzL,EAAGvD,EAAGkL,EAAGrB,EAAGxG,EAAGqG,EAAGwJ,CAAC,EACjC,GAAIC,IAAM,GACR,OAAQA,IAAM,GAAKA,IAAM,MAAQD,EAAIC,IAAM,GAAIpC,GAAK,GAAI,WAAWqC,GAAI,EAAE,EAAGzE,EAAC,EAAIuE,GAAK,CAACD,EAAI1P,EAAE,YAAYvD,CAAC,EAAI6J,EAAE,WAAW,aAAa7J,EAAGkT,EAAID,EAAIpJ,CAAC,EAAG+I,GAAK5E,GAAG4E,EAAG,EAAGC,EAAID,EAAE,SAAS,EAAG7D,GAAI/O,EAAE,WAAY0S,IAAO,QAAU,CAAC/B,KAAOC,GAAK,KAAK,IAAI8B,EAAK7F,GAAEhD,CAAC,EAAE3J,CAAC,CAAC,GAAIkS,EAAC,EAAIxD,EAAE,EAAE,CAC7Q,CACA,GAAIrL,EAAE,SAASvD,CAAC,EACd,OAAO4O,EAAE,EAAE,CACf,CACA,MAAO,EACT,EACA,sBAAuB,KACvB,eAAgB,UAAW,CACzBzC,EAAE,SAAU,YAAa,KAAK,YAAY,EAAGA,EAAE,SAAU,YAAa,KAAK,YAAY,EAAGA,EAAE,SAAU,cAAe,KAAK,YAAY,EAAGA,EAAE,SAAU,WAAYuF,EAAE,EAAGvF,EAAE,SAAU,YAAauF,EAAE,EAAGvF,EAAE,SAAU,YAAauF,EAAE,CACjO,EACA,aAAc,UAAW,CACvB,IAAIhI,EAAI,KAAK,GAAG,cAChByC,EAAEzC,EAAG,UAAW,KAAK,OAAO,EAAGyC,EAAEzC,EAAG,WAAY,KAAK,OAAO,EAAGyC,EAAEzC,EAAG,YAAa,KAAK,OAAO,EAAGyC,EAAEzC,EAAG,cAAe,KAAK,OAAO,EAAGyC,EAAE,SAAU,cAAe,IAAI,CACpK,EACA,QAAS,SAASzC,EAAG,CACnB,IAAInG,EAAI,KAAK,GAAIsG,EAAI,KAAK,QAC1B,GAAI4F,GAAIjC,GAAExN,CAAC,EAAG0P,GAAKlC,GAAExN,EAAG6J,EAAE,SAAS,EAAGiF,GAAE,OAAQ,KAAM,CACpD,IAAKpF,CACX,CAAK,EAAGqF,GAAI/O,GAAKA,EAAE,WAAYyP,GAAIjC,GAAExN,CAAC,EAAG0P,GAAKlC,GAAExN,EAAG6J,EAAE,SAAS,EAAGzG,EAAE,cAAe,CAC5E,KAAK,SAAQ,EACb,MACF,CACA2M,GAAK,GAAIY,GAAK,GAAID,GAAK,GAAI,cAAc,KAAK,OAAO,EAAG,aAAa,KAAK,eAAe,EAAG2C,GAAG,KAAK,OAAO,EAAGA,GAAG,KAAK,YAAY,EAAG,KAAK,kBAAoBlH,EAAE,SAAU,OAAQ,IAAI,EAAGA,EAAE5I,EAAG,YAAa,KAAK,YAAY,GAAI,KAAK,eAAc,EAAI,KAAK,aAAY,EAAIuI,IAAMW,EAAE,SAAS,KAAM,cAAe,EAAE,EAAGA,EAAEzM,EAAG,YAAa,EAAE,EAAG0J,IAAM2F,KAAO3F,EAAE,YAAcA,EAAE,eAAc,EAAI,CAACG,EAAE,YAAcH,EAAE,gBAAe,GAAKvB,GAAKA,EAAE,YAAcA,EAAE,WAAW,YAAYA,CAAC,GAAI6G,IAAMD,IAAKO,IAAKA,GAAE,cAAgB,UAAYH,IAAKA,GAAE,YAAcA,GAAE,WAAW,YAAYA,EAAC,EAAGnP,IAAM,KAAK,iBAAmBmM,EAAEnM,EAAG,UAAW,IAAI,EAAG6R,GAAG7R,CAAC,EAAGA,EAAE,MAAM,aAAa,EAAI,GAAIqP,IAAM,CAACU,IAAMvD,GAAExM,EAAGsP,GAAIA,GAAE,QAAQ,WAAa,KAAK,QAAQ,WAAY,EAAE,EAAG9C,GAAExM,EAAG,KAAK,QAAQ,YAAa,EAAE,EAAG6P,GAAE,CACjwB,SAAU,KACV,KAAM,WACN,KAAMd,GACN,SAAU,KACV,kBAAmB,KACnB,cAAerF,CACrB,CAAK,EAAGsF,IAAMD,IAAKU,IAAK,IAAMI,GAAE,CAC1B,OAAQd,GACR,KAAM,MACN,KAAMA,GACN,OAAQC,EACR,cAAetF,CACrB,CAAK,EAAGmG,GAAE,CACJ,SAAU,KACV,KAAM,SACN,KAAMd,GACN,cAAerF,CACrB,CAAK,EAAGmG,GAAE,CACJ,OAAQd,GACR,KAAM,OACN,KAAMA,GACN,OAAQC,EACR,cAAetF,CACrB,CAAK,EAAGmG,GAAE,CACJ,SAAU,KACV,KAAM,OACN,KAAMd,GACN,cAAerF,CACrB,CAAK,GAAI4F,IAAKA,GAAE,KAAI,GAAMG,KAAMF,IAAME,IAAK,IAAMI,GAAE,CAC7C,SAAU,KACV,KAAM,SACN,KAAMd,GACN,cAAerF,CACrB,CAAK,EAAGmG,GAAE,CACJ,SAAU,KACV,KAAM,OACN,KAAMd,GACN,cAAerF,CACrB,CAAK,GAAItG,EAAE,UAAYqM,IAAK,MAAQA,KAAM,MAAQA,GAAIF,GAAIG,GAAKF,IAAKK,GAAE,CAChE,SAAU,KACV,KAAM,MACN,KAAMd,GACN,cAAerF,CACrB,CAAK,EAAG,KAAK,KAAI,KAAO,KAAK,SAAQ,CACnC,EACA,SAAU,UAAW,CACnBoF,GAAE,UAAW,IAAI,EAAGE,EAAIhP,EAAI+O,GAAI5G,EAAI8G,GAAKE,GAAID,GAAKE,GAAKc,GAAKC,GAAId,GAAKI,GAAIC,GAAKH,GAAKC,GAAKgB,GAAKC,GAAKnB,GAAIQ,GAAK1M,EAAE,QAAUA,EAAE,MAAQA,EAAE,MAAQA,EAAE,OAAS,KAAM4N,GAAG,QAAQ,SAAStH,EAAG,CACjLA,EAAE,QAAU,EACd,CAAC,EAAGsH,GAAG,OAASZ,GAAKC,GAAK,CAC5B,EACA,YAAa,SAAS3G,EAAG,CACvB,OAAQA,EAAE,KAAI,CACZ,IAAK,OACL,IAAK,UACH,KAAK,QAAQA,CAAC,EACd,MACF,IAAK,YACL,IAAK,WACH1J,IAAM,KAAK,YAAY0J,CAAC,EAAG4J,GAAG5J,CAAC,GAC/B,MACF,IAAK,cACHA,EAAE,eAAc,EAChB,KACR,CACE,EAKA,QAAS,UAAW,CAClB,QAASA,EAAI,CAAA,EAAInG,EAAGsG,EAAI,KAAK,GAAG,SAAUqB,EAAI,EAAG7H,EAAIwG,EAAE,OAAQjD,EAAI,KAAK,QAASsE,EAAI7H,EAAG6H,IACtF3H,EAAIsG,EAAEqB,CAAC,EAAGoB,GAAE/I,EAAGqD,EAAE,UAAW,KAAK,GAAI,EAAE,GAAK8C,EAAE,KAAKnG,EAAE,aAAaqD,EAAE,UAAU,GAAK2M,GAAGhQ,CAAC,CAAC,EAC1F,OAAOmG,CACT,EAKA,KAAM,SAASA,EAAGnG,EAAG,CACnB,IAAIsG,EAAI,CAAA,EAAIqB,EAAI,KAAK,GACrB,KAAK,QAAO,EAAG,QAAQ,SAAS7H,EAAGuD,EAAG,CACpC,IAAIkG,EAAI5B,EAAE,SAAStE,CAAC,EACpB0F,GAAEQ,EAAG,KAAK,QAAQ,UAAW5B,EAAG,EAAE,IAAMrB,EAAExG,CAAC,EAAIyJ,EACjD,EAAG,IAAI,EAAGvJ,GAAK,KAAK,sBAAqB,EAAImG,EAAE,QAAQ,SAASrG,EAAG,CACjEwG,EAAExG,CAAC,IAAM6H,EAAE,YAAYrB,EAAExG,CAAC,CAAC,EAAG6H,EAAE,YAAYrB,EAAExG,CAAC,CAAC,EAClD,CAAC,EAAGE,GAAK,KAAK,WAAU,CAC1B,EAIA,KAAM,UAAW,CACf,IAAImG,EAAI,KAAK,QAAQ,MACrBA,GAAKA,EAAE,KAAOA,EAAE,IAAI,IAAI,CAC1B,EAOA,QAAS,SAASA,EAAGnG,EAAG,CACtB,OAAO+I,GAAE5C,EAAGnG,GAAK,KAAK,QAAQ,UAAW,KAAK,GAAI,EAAE,CACtD,EAOA,OAAQ,SAASmG,EAAGnG,EAAG,CACrB,IAAIsG,EAAI,KAAK,QACb,GAAItG,IAAM,OACR,OAAOsG,EAAEH,CAAC,EACZ,IAAIwB,EAAIsD,GAAG,aAAa,KAAM9E,EAAGnG,CAAC,EAClC,OAAO2H,EAAK,IAAcrB,EAAEH,CAAC,EAAIwB,EAAIrB,EAAEH,CAAC,EAAInG,EAAGmG,IAAM,SAAW+H,GAAG5H,CAAC,CACtE,EAIA,QAAS,UAAW,CAClBiF,GAAE,UAAW,IAAI,EACjB,IAAIpF,EAAI,KAAK,GACbA,EAAElD,EAAC,EAAI,KAAM2F,EAAEzC,EAAG,YAAa,KAAK,WAAW,EAAGyC,EAAEzC,EAAG,aAAc,KAAK,WAAW,EAAGyC,EAAEzC,EAAG,cAAe,KAAK,WAAW,EAAG,KAAK,kBAAoByC,EAAEzC,EAAG,WAAY,IAAI,EAAGyC,EAAEzC,EAAG,YAAa,IAAI,GAAI,MAAM,UAAU,QAAQ,KAAKA,EAAE,iBAAiB,aAAa,EAAG,SAASnG,EAAG,CACpRA,EAAE,gBAAgB,WAAW,CAC/B,CAAC,EAAG,KAAK,QAAO,EAAI,KAAK,0BAAyB,EAAI0M,GAAG,OAAOA,GAAG,QAAQ,KAAK,EAAE,EAAG,CAAC,EAAG,KAAK,GAAKvG,EAAI,IACzG,EACA,WAAY,UAAW,CACrB,GAAI,CAAC0F,GAAI,CACP,GAAIN,GAAE,YAAa,IAAI,EAAG1L,EAAE,cAC1B,OACFqJ,EAAE0C,GAAG,UAAW,MAAM,EAAG,KAAK,QAAQ,mBAAqBA,GAAE,YAAcA,GAAE,WAAW,YAAYA,EAAC,EAAGC,GAAK,EAC/G,CACF,EACA,WAAY,SAAS1F,EAAG,CACtB,GAAIA,EAAE,cAAgB,QAAS,CAC7B,KAAK,WAAU,EACf,MACF,CACA,GAAI0F,GAAI,CACN,GAAIN,GAAE,YAAa,IAAI,EAAG1L,EAAE,cAC1B,OACFpD,EAAE,YAAcgP,GAAK,CAAC,KAAK,QAAQ,MAAM,YAAcA,EAAE,aAAaG,GAAGnP,CAAC,EAAIiP,GAAKD,EAAE,aAAaG,GAAGF,EAAE,EAAID,EAAE,YAAYG,EAAC,EAAG,KAAK,QAAQ,MAAM,aAAe,KAAK,QAAQnP,EAAGmP,EAAC,EAAG1C,EAAE0C,GAAG,UAAW,EAAE,EAAGC,GAAK,EAC/M,CACF,CACF,EACA,SAASkE,GAAG,EAAG,CACb,EAAE,eAAiB,EAAE,aAAa,WAAa,QAAS,EAAE,YAAc,EAAE,eAAc,CAC1F,CACA,SAASnB,GAAG,EAAGzI,EAAG,EAAGG,EAAGqB,EAAG7H,EAAGuD,EAAGkG,EAAG,CAClC,IAAI/M,EAAGgN,EAAI,EAAEvG,EAAC,EAAGW,EAAI4F,EAAE,QAAQ,OAAQrG,EACvC,OAAO,OAAO,aAAe,CAACiF,IAAM,CAACC,GAAK7L,EAAI,IAAI,YAAY,OAAQ,CACpE,QAAS,GACT,WAAY,EAChB,CAAG,GAAKA,EAAI,SAAS,YAAY,OAAO,EAAGA,EAAE,UAAU,OAAQ,GAAI,EAAE,GAAIA,EAAE,GAAK2J,EAAG3J,EAAE,KAAO,EAAGA,EAAE,QAAU,EAAGA,EAAE,YAAc8J,EAAG9J,EAAE,QAAUmL,GAAKxB,EAAG3J,EAAE,YAAcsD,GAAKwJ,GAAEnD,CAAC,EAAG3J,EAAE,gBAAkB+M,EAAG/M,EAAE,cAAgB6G,EAAG,EAAE,cAAc7G,CAAC,EAAGoH,IAAMT,EAAIS,EAAE,KAAK4F,EAAGhN,EAAG6G,CAAC,GAAIF,CAC5Q,CACA,SAASmL,GAAG,EAAG,CACb,EAAE,UAAY,EAChB,CACA,SAASuB,IAAK,CACZrC,GAAK,EACP,CACA,SAASwB,GAAG,EAAG7I,EAAG,EAAG,CACnB,IAAIG,EAAIgD,GAAES,GAAG,EAAE,GAAI,EAAG,EAAE,QAAS,EAAE,CAAC,EAAGpC,EAAIgD,GAAG,EAAE,GAAI,EAAE,QAAS/F,CAAC,EAAG9E,EAAI,GACvE,OAAOqG,EAAI,EAAE,QAAUwB,EAAE,KAAO7H,GAAK,EAAE,QAAUwG,EAAE,KAAO,EAAE,QAAUA,EAAE,MAAQ,EAAE,QAAUqB,EAAE,IAAM7H,GAAK,EAAE,QAAUwG,EAAE,QAAU,EAAE,QAAUA,EAAE,IACjJ,CACA,SAASyI,GAAG,EAAG5I,EAAG,EAAG,CACnB,IAAIG,EAAIgD,GAAEU,GAAG,EAAE,GAAI,EAAE,QAAQ,SAAS,CAAC,EAAGrC,EAAIgD,GAAG,EAAE,GAAI,EAAE,QAAS/F,CAAC,EAAG9E,EAAI,GAC1E,OAAOqG,EAAI,EAAE,QAAUwB,EAAE,MAAQ7H,GAAK,EAAE,QAAUwG,EAAE,QAAU,EAAE,QAAUA,EAAE,KAAO,EAAE,QAAUqB,EAAE,OAAS7H,GAAK,EAAE,QAAUwG,EAAE,OAAS,EAAE,QAAUA,EAAE,GACtJ,CACA,SAASiJ,GAAG,EAAGpJ,EAAG,EAAGG,EAAGqB,EAAG7H,EAAGuD,EAAGkG,EAAG,CAClC,IAAI/M,EAAI8J,EAAI,EAAE,QAAU,EAAE,QAASkD,EAAIlD,EAAI,EAAE,OAAS,EAAE,MAAO1C,EAAI0C,EAAI,EAAE,IAAM,EAAE,KAAMnD,EAAImD,EAAI,EAAE,OAAS,EAAE,MAAOmD,EAAI,GACvH,GAAI,CAACpG,GACH,GAAIkG,GAAK8D,GAAK7D,EAAI7B,GAChB,GAAI,CAACwF,KAAOD,KAAO,EAAI1Q,EAAIoH,EAAI4F,EAAI1J,EAAI,EAAItD,EAAI2G,EAAIqG,EAAI1J,EAAI,KAAOqN,GAAK,IAAKA,GAC1E1D,EAAI,WACGyD,KAAO,EAAI1Q,EAAIoH,EAAIyJ,GAAK7Q,EAAI2G,EAAIkK,GACvC,MAAO,CAACH,WACD1Q,EAAIoH,EAAI4F,GAAK,EAAI7B,GAAK,GAAKnL,EAAI2G,EAAIqG,GAAK,EAAI7B,GAAK,EAC1D,OAAOsI,GAAG9J,CAAC,EAEf,OAAOsD,EAAIA,GAAKpG,EAAGoG,IAAMjN,EAAIoH,EAAI4F,EAAI1J,EAAI,GAAKtD,EAAI2G,EAAIqG,EAAI1J,EAAI,GAAKtD,EAAIoH,EAAI4F,EAAI,EAAI,EAAI,GAAK,CAC9F,CACA,SAASyG,GAAG,EAAG,CACb,OAAOhG,GAAExN,CAAC,EAAIwN,GAAE,CAAC,EAAI,EAAI,EAC3B,CACA,SAAS+F,GAAG,EAAG,CACb,QAAS7J,EAAI,EAAE,QAAU,EAAE,UAAY,EAAE,IAAM,EAAE,KAAO,EAAE,YAAa,EAAIA,EAAE,OAAQG,EAAI,EAAG,KAC1FA,GAAKH,EAAE,WAAW,CAAC,EACrB,OAAOG,EAAE,SAAS,EAAE,CACtB,CACA,SAAS+H,GAAG,EAAG,CACbZ,GAAG,OAAS,EACZ,QAAStH,EAAI,EAAE,qBAAqB,OAAO,EAAG,EAAIA,EAAE,OAAQ,KAAO,CACjE,IAAIG,EAAIH,EAAE,CAAC,EACXG,EAAE,SAAWmH,GAAG,KAAKnH,CAAC,CACxB,CACF,CACA,SAASiI,GAAG,EAAG,CACb,OAAO,WAAW,EAAG,CAAC,CACxB,CACA,SAASuB,GAAG,EAAG,CACb,OAAO,aAAa,CAAC,CACvB,CACApC,IAAM/E,EAAE,SAAU,YAAa,SAAS,EAAG,EACxC9I,EAAE,QAAU2M,KAAO,EAAE,YAAc,EAAE,eAAc,CACtD,CAAC,EACD3M,EAAE,MAAQ,CACR,GAAI8I,EACJ,IAAKC,EACL,IAAKM,EACL,KAAME,GACN,GAAI,SAASjD,EAAGnG,EAAG,CACjB,MAAO,CAAC,CAAC+I,GAAE5C,EAAGnG,EAAGmG,EAAG,EAAE,CACxB,EACA,OAAQiE,GACR,SAAUG,GACV,QAASxB,GACT,YAAaE,GACb,MAAOyB,GACP,MAAOT,GACP,SAAUsE,GACV,eAAgBuB,GAChB,gBAAiB/B,GACjB,SAAUhE,EACZ,EACAlK,EAAE,IAAM,SAAS,EAAG,CAClB,OAAO,EAAEoD,EAAC,CACZ,EACApD,EAAE,MAAQ,UAAW,CACnB,QAAS,EAAI,UAAU,OAAQsG,EAAI,IAAI,MAAM,CAAC,EAAG,EAAI,EAAG,EAAI,EAAG,IAC7DA,EAAE,CAAC,EAAI,UAAU,CAAC,EACpBA,EAAE,CAAC,EAAE,cAAgB,QAAUA,EAAIA,EAAE,CAAC,GAAIA,EAAE,QAAQ,SAASG,EAAG,CAC9D,GAAI,CAACA,EAAE,WAAa,CAACA,EAAE,UAAU,YAC/B,KAAM,gEAAgE,OAAO,CAAA,EAAG,SAAS,KAAKA,CAAC,CAAC,EAClGA,EAAE,QAAUzG,EAAE,MAAQ+H,GAAGA,GAAG,GAAI/H,EAAE,KAAK,EAAGyG,EAAE,KAAK,GAAI2E,GAAG,MAAM3E,CAAC,CACjE,CAAC,CACH,EACAzG,EAAE,OAAS,SAAS,EAAGsG,EAAG,CACxB,OAAO,IAAItG,EAAE,EAAGsG,CAAC,CACnB,EACAtG,EAAE,QAAUqI,GACZ,IAAIgI,GAAI,CAAA,EAAIC,GAAIC,GAAIC,GAAK,GAAIC,GAAIC,GAAIC,GAAIC,GACzC,SAASC,IAAK,CACZ,SAAS,GAAI,CACX,KAAK,SAAW,CACd,OAAQ,GACR,wBAAyB,GACzB,kBAAmB,GACnB,YAAa,GACb,aAAc,EACpB,EACI,QAASvK,KAAK,KACZA,EAAE,OAAO,CAAC,IAAM,KAAO,OAAO,KAAKA,CAAC,GAAK,aAAe,KAAKA,CAAC,EAAI,KAAKA,CAAC,EAAE,KAAK,IAAI,EACvF,CACA,OAAO,EAAE,UAAY,CACnB,YAAa,SAASnG,EAAG,CACvB,IAAIsG,EAAItG,EAAE,cACV,KAAK,SAAS,gBAAkB2I,EAAE,SAAU,WAAY,KAAK,iBAAiB,EAAI,KAAK,QAAQ,eAAiBA,EAAE,SAAU,cAAe,KAAK,yBAAyB,EAAIrC,EAAE,QAAUqC,EAAE,SAAU,YAAa,KAAK,yBAAyB,EAAIA,EAAE,SAAU,YAAa,KAAK,yBAAyB,CAC7S,EACA,kBAAmB,SAAS3I,EAAG,CAC7B,IAAIsG,EAAItG,EAAE,cACV,CAAC,KAAK,QAAQ,gBAAkB,CAACsG,EAAE,QAAU,KAAK,kBAAkBA,CAAC,CACvE,EACA,KAAM,UAAW,CACf,KAAK,SAAS,gBAAkBsC,EAAE,SAAU,WAAY,KAAK,iBAAiB,GAAKA,EAAE,SAAU,cAAe,KAAK,yBAAyB,EAAGA,EAAE,SAAU,YAAa,KAAK,yBAAyB,EAAGA,EAAE,SAAU,YAAa,KAAK,yBAAyB,GAAI+H,GAAE,EAAIC,GAAE,EAAIpG,GAAE,CACpR,EACA,QAAS,UAAW,CAClBgG,GAAKJ,GAAKD,GAAKE,GAAKI,GAAKH,GAAKC,GAAK,KAAML,GAAE,OAAS,CACtD,EACA,0BAA2B,SAASlQ,EAAG,CACrC,KAAK,kBAAkBA,EAAG,EAAE,CAC9B,EACA,kBAAmB,SAASA,EAAGsG,EAAG,CAChC,IAAIqB,EAAI,KAAM7H,GAAKE,EAAE,QAAUA,EAAE,QAAQ,CAAC,EAAIA,GAAG,QAASqD,GAAKrD,EAAE,QAAUA,EAAE,QAAQ,CAAC,EAAIA,GAAG,QAASuJ,EAAI,SAAS,iBAAiBzJ,EAAGuD,CAAC,EACxI,GAAImN,GAAKxQ,EAAGsG,GAAK,KAAK,QAAQ,yBAA2B+B,IAAMD,IAAMG,GAAI,CACvEsI,GAAG7Q,EAAG,KAAK,QAASuJ,EAAGjD,CAAC,EACxB,IAAI9J,EAAIsN,GAAGP,EAAG,EAAE,EAChB8G,KAAO,CAACI,IAAM3Q,IAAMwQ,IAAMjN,IAAMkN,MAAQE,IAAME,GAAE,EAAIF,GAAK,YAAY,UAAW,CAC9E,IAAIjH,EAAIM,GAAG,SAAS,iBAAiBhK,EAAGuD,CAAC,EAAG,EAAE,EAC9CmG,IAAMhN,IAAMA,EAAIgN,EAAGoH,GAAE,GAAKC,GAAG7Q,EAAG2H,EAAE,QAAS6B,EAAGlD,CAAC,CACjD,EAAG,EAAE,EAAGgK,GAAKxQ,EAAGyQ,GAAKlN,EACvB,KAAO,CACL,GAAI,CAAC,KAAK,QAAQ,cAAgByG,GAAGP,EAAG,EAAE,IAAMF,KAAM,CACpDuH,GAAE,EACF,MACF,CACAC,GAAG7Q,EAAG,KAAK,QAAS8J,GAAGP,EAAG,EAAE,EAAG,EAAE,CACnC,CACF,CACJ,EAAKxB,GAAG,EAAG,CACP,WAAY,SACZ,oBAAqB,EACzB,CAAG,CACH,CACA,SAAS6I,IAAK,CACZV,GAAE,QAAQ,SAAS,EAAG,CACpB,cAAc,EAAE,GAAG,CACrB,CAAC,EAAGA,GAAI,CAAA,CACV,CACA,SAASS,IAAK,CACZ,cAAcF,EAAE,CAClB,CACA,IAAII,GAAKtG,GAAG,SAAS,EAAGpE,EAAG,EAAGG,EAAG,CAC/B,GAAIH,EAAE,OAAQ,CACZ,IAAIwB,GAAK,EAAE,QAAU,EAAE,QAAQ,CAAC,EAAI,GAAG,QAAS7H,GAAK,EAAE,QAAU,EAAE,QAAQ,CAAC,EAAI,GAAG,QAASuD,EAAI8C,EAAE,kBAAmBoD,EAAIpD,EAAE,YAAa3J,EAAI6M,GAAE,EAAIG,EAAI,GAAI5F,EAC1JwM,KAAO,IAAMA,GAAK,EAAGQ,GAAE,EAAIT,GAAKhK,EAAE,OAAQvC,EAAIuC,EAAE,SAAUgK,KAAO,KAAOA,GAAKrG,GAAG,EAAG,EAAE,IACrF,IAAI3G,EAAI,EAAGsG,EAAI0G,GACf,EAAG,CACD,IAAIzG,EAAID,EAAGE,EAAIL,GAAEI,CAAC,EAAGE,EAAID,EAAE,IAAKwB,EAAIxB,EAAE,OAAQyB,EAAIzB,EAAE,KAAM0B,EAAI1B,EAAE,MAAO,EAAIA,EAAE,MAAOmF,GAAInF,EAAE,OAAQsF,EAAI,OAAQC,EAAI,OAAQC,GAAKzF,EAAE,YAAa0F,EAAK1F,EAAE,aAAc7I,EAAIqI,EAAEQ,CAAC,EAAG/M,EAAI+M,EAAE,WAAY2F,EAAI3F,EAAE,UACrMA,IAAMlN,GAAKyS,EAAI,EAAIE,KAAOtO,EAAE,YAAc,QAAUA,EAAE,YAAc,UAAYA,EAAE,YAAc,WAAYqO,EAAIJ,GAAIM,IAAOvO,EAAE,YAAc,QAAUA,EAAE,YAAc,UAAYA,EAAE,YAAc,aAAeoO,EAAI,EAAIE,KAAOtO,EAAE,YAAc,QAAUA,EAAE,YAAc,UAAWqO,EAAIJ,GAAIM,IAAOvO,EAAE,YAAc,QAAUA,EAAE,YAAc,WAC7U,IAAIyO,EAAIL,IAAM,KAAK,IAAI5D,EAAI1D,CAAC,GAAKtE,GAAK1G,EAAI,EAAIwS,KAAO,KAAK,IAAI/D,EAAIzD,CAAC,GAAKtE,GAAK,CAAC,CAAC1G,GAAI6S,EAAIN,IAAM,KAAK,IAAI/D,EAAIrL,CAAC,GAAKuD,GAAKgM,EAAIP,GAAIM,IAAO,KAAK,IAAIxF,EAAI9J,CAAC,GAAKuD,GAAK,CAAC,CAACgM,GAC9J,GAAI,CAACa,GAAE/M,CAAC,EACN,QAASsM,EAAI,EAAGA,GAAKtM,EAAGsM,IACtBS,GAAET,CAAC,IAAMS,GAAET,CAAC,EAAI,CAAA,IACnBS,GAAE/M,CAAC,EAAE,IAAMmM,GAAKY,GAAE/M,CAAC,EAAE,IAAMqM,GAAKU,GAAE/M,CAAC,EAAE,KAAOuG,KAAOwG,GAAE/M,CAAC,EAAE,GAAKuG,EAAGwG,GAAE/M,CAAC,EAAE,GAAKmM,EAAGY,GAAE/M,CAAC,EAAE,GAAKqM,EAAG,cAAcU,GAAE/M,CAAC,EAAE,GAAG,GAAImM,GAAK,GAAKE,GAAK,KAAOhG,EAAI,GAAI0G,GAAE/M,CAAC,EAAE,IAAM,aAAY,UAAW,CACnLmD,GAAK,KAAK,QAAU,GAAKzG,EAAE,OAAO,aAAa2Q,EAAE,EACjD,IAAId,EAAIQ,GAAE,KAAK,KAAK,EAAE,GAAKA,GAAE,KAAK,KAAK,EAAE,GAAK3G,EAAI,EAAGoG,EAAIO,GAAE,KAAK,KAAK,EAAE,GAAKA,GAAE,KAAK,KAAK,EAAE,GAAK3G,EAAI,EACnG,OAAO3F,GAAK,YAAcA,EAAE,KAAK/D,EAAE,QAAQ,WAAWoD,EAAC,EAAG0M,EAAGD,EAAG,EAAGc,GAAIN,GAAE,KAAK,KAAK,EAAE,EAAE,IAAM,YAAczF,GAAGyF,GAAE,KAAK,KAAK,EAAE,GAAIP,EAAGD,CAAC,CACtI,GAAE,KAAK,CACL,MAAOvM,CACf,CAAO,EAAG,EAAE,IAAKA,GACb,OAASgD,EAAE,cAAgBsD,IAAMjN,IAAMiN,EAAIK,GAAGL,EAAG,EAAE,IACnD4G,GAAK7G,CACP,CACF,EAAG,EAAE,EAAGsH,GAAK,SAAS3K,EAAG,CACvB,IAAInG,EAAImG,EAAE,cAAeG,EAAIH,EAAE,YAAawB,EAAIxB,EAAE,OAAQrG,EAAIqG,EAAE,eAAgB9C,EAAI8C,EAAE,sBAAuBoD,EAAIpD,EAAE,mBAAoB3J,EAAI2J,EAAE,qBAC7I,GAAInG,EAAG,CACL,IAAIwJ,EAAIlD,GAAKxG,EACbyJ,EAAC,EACD,IAAI3F,EAAI5D,EAAE,gBAAkBA,EAAE,eAAe,OAASA,EAAE,eAAe,CAAC,EAAIA,EAAGmD,EAAI,SAAS,iBAAiBS,EAAE,QAASA,EAAE,OAAO,EACjIpH,IAAKgN,GAAK,CAACA,EAAE,GAAG,SAASrG,CAAC,IAAME,EAAE,OAAO,EAAG,KAAK,QAAQ,CACvD,OAAQsE,EACR,YAAarB,CACnB,CAAK,EACH,CACF,EACA,SAASyK,IAAK,CACd,CACAA,GAAG,UAAY,CACb,WAAY,KACZ,UAAW,SAAS5K,EAAG,CACrB,IAAInG,EAAImG,EAAE,kBACV,KAAK,WAAanG,CACpB,EACA,QAAS,SAASmG,EAAG,CACnB,IAAInG,EAAImG,EAAE,OAAQG,EAAIH,EAAE,YACxB,KAAK,SAAS,sBAAqB,EAAIG,GAAKA,EAAE,sBAAqB,EACnE,IAAIqB,EAAIoC,GAAG,KAAK,SAAS,GAAI,KAAK,WAAY,KAAK,OAAO,EAC1DpC,EAAI,KAAK,SAAS,GAAG,aAAa3H,EAAG2H,CAAC,EAAI,KAAK,SAAS,GAAG,YAAY3H,CAAC,EAAG,KAAK,SAAS,aAAcsG,GAAKA,EAAE,WAAU,CAC1H,EACA,KAAMwK,EACR,EACA/I,GAAGgJ,GAAI,CACL,WAAY,eACd,CAAC,EACD,SAASC,IAAK,CACd,CACAA,GAAG,UAAY,CACb,QAAS,SAAS7K,EAAG,CACnB,IAAInG,EAAImG,EAAE,OAAQG,EAAIH,EAAE,YAAawB,EAAIrB,GAAK,KAAK,SACnDqB,EAAE,sBAAqB,EAAI3H,EAAE,YAAcA,EAAE,WAAW,YAAYA,CAAC,EAAG2H,EAAE,WAAU,CACtF,EACA,KAAMmJ,EACR,EACA/I,GAAGiJ,GAAI,CACL,WAAY,eACd,CAAC,EACDnR,EAAE,MAAM,IAAI6Q,EAAI,EAChB7Q,EAAE,MAAMmR,GAAID,EAAE,EACd,SAASE,GAAG,EAAG,CACb,OAAO,GAAK,KAAO,EAAI,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,CACrD,CACA,SAASC,GAAG,EAAG,CACbC,qBAAE,GAAMC,EAAAA,YAAG,CAAC,CACd,CACA,SAASC,GAAG,EAAG,CACbF,EAAAA,mBAAE,EAAKG,EAAAA,UAAG,CAAC,EAAIC,EAAAA,SAAG,CAAC,CACrB,CACA,IAAIC,GAAK,KAAMC,GAAK,KACpB,SAASC,GAAG,EAAI,KAAMvL,EAAI,KAAM,CAC9BqL,GAAK,EAAGC,GAAKtL,CACf,CACA,SAASwL,IAAK,CACZ,MAAO,CACL,KAAMH,GACN,WAAYC,EAChB,CACA,CACA,MAAMG,GAAK,OAAO,cAAc,EAChC,SAASC,MAAM,EAAG,CAChB,IAAIzC,EAAIvO,EACR,MAAMsF,GAAKiJ,EAAK+B,EAAAA,mBAAE,IAAO,KAAO,OAAS/B,EAAG,MAC5C,IAAIpP,EAAI,KACR,MAAMsG,EAAI,EAAE,CAAC,EACb,GAAI,CAAA,CAAGqB,EAAG7H,CAAC,EAAI,EACf,MAAM,QAAQgS,EAAAA,MAAEnK,CAAC,CAAC,IAAM7H,EAAI6H,EAAGA,EAAI,MACnC,IAAItE,EAAI,KACR,KAAM,CACJ,UAAWkG,EAAI,GACf,MAAO/M,EAAIyU,GACX,cAAezH,EACf,eAAgB5F,EAChB,aAAcT,CAClB,GAAOtC,EAAIiR,EAAAA,MAAEhS,CAAC,IAAM,KAAOe,EAAI,CAAA,EAC7B,SAAS4I,EAAE9M,EAAG,CACZ,IAAIiT,EACJ,KAAM,CAAE,KAAMP,EAAG,SAAUC,EAAG,KAAME,GAAM7S,EAAG8S,EAAI,MAAM,KAAKJ,EAAE,UAAU,EACxErP,EAAIwJ,GAAK,CAAC5F,EAAI6L,EAAE,MAAM,EAAG,EAAE,EAAIA,EAC/B,MAAMC,EAAIoC,EAAAA,OAAGlC,EAAIkC,EAAAA,MAAEnK,CAAC,IAAM,KAAO,OAASiI,EAAEN,CAAC,CAAC,EAAGK,EAAInT,EAAEkT,CAAC,EACxDgC,GAAGhC,EAAGC,CAAC,EAAGH,EAAEoC,EAAE,EAAIjC,CACpB,CACA,SAASjG,EAAE/M,EAAG,CACZ,MAAM0S,EAAI1S,EAAE,KAAKiV,EAAE,EACnB,GAAI,CAAC7K,GAAGsI,CAAC,EAAG,CACV,GAAInI,GAAGvK,EAAE,IAAI,EAAGoV,EAAAA,MAAGpK,CAAC,EAAG,CACrB,MAAM2H,EAAI,CAAC,GAAGwC,EAAAA,MAAEnK,CAAC,CAAC,EAClBA,EAAE,MAAQb,GAAGwI,EAAG3S,EAAE,kBAAmB0S,CAAC,EACtC,MACF,CACAvI,GAAGgL,EAAAA,MAAEnK,CAAC,EAAGhL,EAAE,kBAAmB0S,CAAC,CACjC,CACF,CACA,SAAS1F,EAAEhN,EAAG,CACZ,KAAM,CAAE,KAAM0S,EAAG,KAAMC,EAAG,SAAUE,EAAG,kBAAmBC,EAAG,SAAUC,EAAG,MAAOC,CAAC,EAAKhT,EACvF,GAAIsK,GAAGoI,EAAGC,EAAGE,CAAC,EAAGE,IAAM,QAAS,CAC9BxI,GAAGyI,CAAC,EACJ,MACF,CACA,GAAIoC,EAAAA,MAAGpK,CAAC,EAAG,CACT,MAAMiI,EAAI,CAAC,GAAGkC,EAAAA,MAAEnK,CAAC,CAAC,EAClBA,EAAE,MAAQd,GAAG+I,EAAGH,CAAC,EACjB,MACF,CACA5I,GAAGiL,EAAAA,MAAEnK,CAAC,EAAG8H,CAAC,CACZ,CACA,SAAS7F,EAAEjN,EAAG,CACZ,GAAIwG,EAAG,CACLA,EAAExG,CAAC,EACH,MACF,CACA,KAAM,CAAE,KAAM0S,EAAG,KAAMC,EAAG,SAAUE,EAAG,kBAAmBC,EAAG,kBAAmBC,CAAC,EAAK/S,EACtF,GAAIuK,GAAGoI,CAAC,EAAGrI,GAAGoI,EAAGC,EAAGE,CAAC,EAAGuC,QAAGpK,CAAC,EAAG,CAC7B,MAAMgI,EAAI,CAAC,GAAGmC,EAAAA,MAAEnK,CAAC,CAAC,EAClBA,EAAE,MAAQjB,GACRiJ,EACAF,EACAC,CACR,EACM,MACF,CACAhJ,GAAGoL,EAAAA,MAAEnK,CAAC,EAAG8H,EAAGC,CAAC,CACf,CACA,SAASvE,EAAExO,EAAG,CACZ,KAAM,CAAE,SAAU0S,EAAG,SAAUC,EAAG,KAAME,EAAG,GAAIC,CAAC,EAAK9S,EACrD,IAAI+S,EAAI,KACR,MAAMC,EAAIN,IAAMC,GAAKE,IAAMC,EAC3B,GAAI,CACF,GAAIE,EAAG,CACL,IAAIC,EAAI,KACK5P,GAAE,KAAK,CAACwO,EAAIC,KAAO,CAC9B,GAAImB,GAA2B5P,GAAE,SAAYyP,EAAE,WAAW,OACxD,OAAOD,EAAE,aAAaI,EAAGpB,EAAG,WAAW,EAAG,GAC5C,MAAMwD,GAAKvC,EAAE,WAAWhB,EAAE,EAC1BmB,EAAyBH,GAAE,aAAajB,EAAIwD,EAAE,CAChD,CAAC,CACH,CACF,OAASpC,EAAG,CACVF,EAAIE,CACN,QAAC,CACC5P,EAAI,IACN,CACAuR,EAAAA,SAAG,IAAM,CACP,GAAIG,GAAE,EAAIhC,EACR,MAAMA,CACV,CAAC,CACH,CACA,MAAMtE,EAAI,CACR,SAAUxB,EACV,QAASH,EACT,MAAOC,EACP,SAAUC,EACV,MAAOwB,CACX,EACE,SAASE,GAAE1O,EAAG,CACZ,MAAM0S,EAAIyC,EAAAA,MAAExL,CAAC,EACb,OAAO3J,IAAMA,EAAIqK,GAAGqI,CAAC,EAAIlI,GAAGkI,EAAwBlJ,GAAE,GAAG,EAAIkJ,GAAI1S,GAAK,CAAC2K,GAAG3K,CAAC,IAAMA,EAAIA,EAAE,KAAMA,GAAK8J,GAAG,wBAAwB,EAAG9J,CAClI,CACA,SAASkS,GAAI,CACX,IAAI,EACJ,MAAMY,GAAK,EAAIqC,QAAEhS,CAAC,IAAM,KAAO,EAAI,CAAA,EAAI,CAAE,UAAWnD,EAAG,MAAO0S,GAAMI,EAAGH,EAAIjJ,GAAGoJ,EAAG,CAAC,YAAa,OAAO,CAAC,EACvG,OAAOlI,GAAG+H,EAAG,CAACI,EAAGC,IAAM,CACrBnI,GAAGkI,CAAC,IAAMJ,EAAEI,CAAC,EAAI,CAACE,KAAMpB,IAAO,CAC7B,MAAMC,GAAKkD,GAAE,EACb,OAAOlK,GAAGmI,EAAGnB,EAAE,EAAGkB,EAAEC,EAAG,GAAGpB,CAAE,CAC9B,EACF,CAAC,EAAGnH,GACFM,IAAM,KAAO,CAAA,EAAKyD,EAClBkE,CACN,CACE,CACA,MAAMR,EAAKnS,GAAM,CACfA,EAAI0O,GAAE1O,CAAC,EAAG0G,GAAK4L,GAAE,QAAO,EAAI5L,EAAI,IAAIxD,EAAElD,EAAGkS,EAAC,CAAE,CAC9C,EACAoD,EAAAA,MACE,IAAMnS,EACN,IAAM,CACJuD,GAAKkE,GAAGsH,EAAC,EAAI,CAAClS,EAAG0S,IAAM,CACRhM,GAAE,OAAO1G,EAAG0S,CAAC,CAC5B,CAAC,CACH,EACA,CAAE,KAAM,EAAE,CACd,EACE,MAAMJ,GAAI,CACR,OAAQ,CAACtS,EAAG0S,IAA2BhM,GAAE,OAAO1G,EAAG0S,CAAC,EACpD,QAAS,IAAM,CACAhM,GAAE,QAAO,EAAIA,EAAI,IAChC,EACA,KAAM,IAA2BA,GAAE,KAAI,EACvC,QAAS,IAA2BA,GAAE,QAAO,EAC7C,QAAS,IAAI1G,IAA2B0G,GAAE,QAAQ,GAAG1G,CAAC,CAC1D,EAAKuS,EAAI,IAA2BD,IAAE,OAAO,WAAY,EAAE,EAAGE,EAAK,IAA2BF,IAAE,OAAO,WAAY,EAAE,EACnH,OAAOoC,GAAG,IAAM,CACd9H,GAAKuF,EAAC,CACR,CAAC,EAAGoC,GAAGjC,GAAE,OAAO,EAAG7I,GAAG,CAAE,MAAO0I,EAAG,MAAOI,EAAG,OAAQC,CAAE,EAAIF,EAAC,CAC7D,CACK,MAACiD,GAAK,CACT,SACA,QACA,MACA,SACA,SACA,WACA,MACA,OACA,SACA,QACA,OACA,QACF,EAAGC,GAAK,CACN,QACA,YACA,aACA,QACA,OACA,WACA,QACA,SACA,YACA,gBACA,aACA,wBACA,oBACA,YACA,cACA,YACA,SACA,SACA,kBACA,SACA,UACA,aACA,iBACA,aACA,QACA,mBACA,sBACA,gBACA,gBACA,iBACA,oBACA,iBACA,iBACA,uBACA,SACA,0BACA,oBACA,cACA,eACA,aACA,MACA,SACA,eACA,GAAGD,GAAG,IAAK,GAAM,KAAK,EAAE,QAAQ,MAAQ/L,GAAMA,EAAE,YAAW,CAAE,CAAC,EAAE,CAClE,EAAGiM,GAAKC,kBAAG,CACT,KAAM,eACN,MAAO,CACL,KAAM,aACN,MAAO,mBACX,EACE,MAAOF,GACP,MAAO,CAAC,oBAAqB,GAAGD,EAAE,EAClC,MAAM,EAAG,CAAE,MAAO/L,EAAG,KAAM,EAAG,OAAQG,EAAG,MAAOqB,CAAC,EAAI,CACnD,MAAM7H,EAAIoS,GAAG,OAAO,CAACtO,EAAGT,IAAM,CAC5B,MAAMsG,EAAI,KAAKtG,EAAE,QAAQ,MAAQuG,GAAMA,EAAE,YAAW,CAAE,CAAC,GACvD,OAAO9F,EAAE6F,CAAC,EAAI,IAAIC,IAAM,EAAEvG,EAAG,GAAGuG,CAAC,EAAG9F,CACtC,EAAG,CAAA,CAAE,EAAGP,EAAIiP,EAAAA,SAAG,IAAM,CACnB,MAAM5I,EAAIlL,EAAAA,OAAG,CAAC,EAAG,CAAE,WAAYoF,CAAC,EAAK8F,EAAGvG,EAAIkD,GAAGqD,EAAG,CAAC,YAAY,CAAC,EAAGD,EAAI,OAAO,QAAQtG,CAAC,EAAE,OAAO,CAACwG,EAAG,CAACC,EAAGuB,CAAC,IAAM,CAC7G,MAAMC,EAAI0G,EAAAA,MAAE3G,CAAC,EACb,OAAOC,IAAM,SAAWzB,EAAEC,CAAC,EAAIwB,GAAIzB,CACrC,EAAG,CAAA,CAAE,EACL,OAAOvD,GAAGA,GAAG,GAAItG,CAAC,EAAG8G,GAAGR,GAAGA,GAAG,CAAA,EAAIuB,CAAC,EAAG8B,CAAC,CAAC,CAAC,CAC3C,CAAC,EAAGF,EAAI+I,WAAG,CACT,IAAK,IAAM,EAAE,WACb,IAAM1O,GAAM,EAAE,oBAAqBA,CAAC,CAC1C,CAAK,EAAGpH,EAAI+V,MAAE,EAAI/I,EAAIgJ,EAAAA,SAChBX,GAAG,EAAE,QAAUrV,EAAG+M,EAAGlG,CAAC,CAC5B,EACI,OAAOiD,EAAEkD,CAAC,EAAG,IAAM,CACjB,IAAI5F,EACJ,OAAO6O,EAAAA,EAAG,EAAE,KAAO,MAAO,CAAE,IAAKjW,CAAC,GAAKoH,EAAyBuC,GAAE,UAAY,KAAO,OAASvC,EAAE,KAAKuC,EAAGqD,CAAC,CAAC,CAC5G,CACF,CACF,CAAC,uwDC5iDD,MAAMvE,EAAQC,EAKRpC,EAASL,GAAA,EAETvC,EAAM7C,EAAAA,SACV,IAAMyF,EAAO,KAAK,MAAMmC,EAAM,OAAO,GAAG,OAAOA,EAAM,SAAS,GAAK,CAAA,CAAC,EAOhEyN,EAAerV,EAAAA,SAAS,IAAM,CAClC,MAAMuG,EAAI1D,EAAI,MACd,OAAI0D,EAAE,QAAU,WAAmBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,UAAU,EAC5E9L,EAAE,QAAU,SAAiBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,QAAQ,EACxE9L,EAAE,QAAU,SAAiBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,QAAQ,EACxE9L,EAAE,QAAU,cAAsBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,OAAO,EAC5E9L,EAAE,QAAU,UAAkBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,SAAS,EAC1E9L,EAAE,QAAU,OAAehB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,MAAM,EACpE9L,EAAE,QAAU,WAAmBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,UAAU,EAC5E9L,EAAE,QAAU,WAAmBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,UAAU,EAC5E9L,EAAE,QAAU,kBAA0BhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,cAAc,EACvF9L,EAAE,IAAYhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,KAAK,EACtD,MAAM,QAAQ9L,EAAE,IAAI,EAAUhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,QAAQ,EACzE9L,EAAE,OAAS,SAAiBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,QAAQ,EACvE9L,EAAE,OAAS,OAAehB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,MAAM,EACnE9L,EAAE,OAAS,UAAkBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,SAAS,EACtE9M,EAAc,KAAM8M,GAAMA,EAAE,KAAO,MAAM,CAClD,CAAC,EAEKjR,EAAOpB,EAAAA,SAAS,IAAMqV,EAAa,OAAO,IAAM,MAAM,EAGtDC,EAAetV,EAAAA,SAAS,IAAM,CAClC,MAAM6F,EAASJ,EAAO,KAAK,OAAS,OAEpC,OADeI,EAASN,EAAc,OAAQnG,GAAMA,EAAE,WAAW,EAAImG,GACvD,IAAKnG,IAAO,CACxB,MAAOyG,GAAUzG,EAAE,UAAYA,EAAE,UAAYA,EAAE,MAC/C,MAAOA,EAAE,EAAA,EACT,CACJ,CAAC,EAGD,SAASkH,EAAYF,EAAsB,CACzC,MAAMG,EAAIH,EAAG,OACb,OAAIG,GAAK,MAAQ,OAAOA,GAAM,UAAY,UAAWA,EAAWA,EAAU,MACtEA,GAAK,MAAQ,OAAOA,GAAM,UAAY,YAAaA,EAAWA,EAAU,QACrEA,CACT,CAIA,SAASlE,EAAMkT,EAAaC,EAAkB,CAC5C/P,EAAO,YAAYmC,EAAM,QAASA,EAAM,UAAW,CAAE,CAAC2N,CAAG,EAAGC,EAAO,CACrE,CAEA,SAASC,EAASlS,EAAuB,CACvC,GAAI,GAACA,GAAWA,IAAYqE,EAAM,WAClC,GAAI,CACFnC,EAAO,YAAYmC,EAAM,QAASA,EAAM,UAAWrE,CAAO,CAC5D,OAASmS,EAAK,CAEZ,QAAQ,KAAK,2BAA6BA,EAAc,OAAO,CACjE,CACF,CAEA,SAASC,GAAiB,CAExBlQ,EAAO,WAAWmC,EAAM,OAAO,CACjC,CAEA,SAASgO,GAAkB,CACzBnQ,EAAO,eAAemC,EAAM,QAASA,EAAM,SAAS,CACtD,CAEA,SAASiO,GAAe,CACtBpQ,EAAO,YAAYmC,EAAM,QAASA,EAAM,SAAS,CACnD,CAKA,MAAMkO,EAAiB,CACrB,QACA,WACA,aACA,cACA,OACA,SACA,WACA,WACA,YACA,WACA,aAEA,iBACA,eACA,eACA,eACA,eACA,YACA,aACA,cACA,SACA,cACA,cAAA,EAGF,SAASC,EAAWC,EAAuB,CACzC,GAAI,CAACA,GAAWA,IAAY5U,EAAK,MAAO,OACxC,MAAM2B,EAAU9D,GAAe+W,CAAO,EAChCC,EAAelT,EAAUA,EAAA,EAAY,CAAE,KAAM,QAAA,EAC7CmT,EAAiC,CAAA,EACvC,UAAW1S,KAAKsS,EACVjT,EAAI,MAAMW,CAAC,IAAM,WAAqBA,CAAC,EAAIX,EAAI,MAAMW,CAAC,GAE5DiC,EAAO,gBAAgBmC,EAAM,QAASA,EAAM,UAAW,CACrD,GAAGqO,EACH,GAAGC,CAAA,CACJ,CACH,CAIA,MAAM1W,EAAUQ,EAAAA,SAAmB,IACjC,MAAM,QAAQ6C,EAAI,MAAM,IAAI,EAAIA,EAAI,MAAM,KAAO,CAAA,CAAC,EAGpD,SAASsT,EAAapU,EAAayT,EAAqB,CACtD,MAAMjV,EAAO,CAAC,GAAGf,EAAQ,KAAK,EAC9Be,EAAKwB,CAAG,EAAIyT,EACZnT,EAAM,OAAQ9B,CAAI,CACpB,CAEA,SAAS6V,EAAarU,EAAmB,CACvC,MAAMxB,EAAOf,EAAQ,MAAM,OAAO,CAAC4S,EAAG3P,IAAMA,IAAMV,CAAG,EACrDM,EAAM,OAAQ9B,EAAK,OAASA,EAAO,MAAS,CAC9C,CAEA,SAAS8V,GAAkB,CACzB,MAAM9V,EAAO,CAAC,GAAGf,EAAQ,MAAO,UAAUA,EAAQ,MAAM,OAAS,CAAC,EAAE,EACpE6C,EAAM,OAAQ9B,CAAI,CACpB,CAIA,MAAM+V,EAAwD,CAAA,EAE9D,SAASC,GAAexU,EAAa,CACnC,OAAQgG,GAAY,CAAEuO,EAAavU,CAAG,EAAIgG,CAA+B,CAC3E,CAEA,SAASyO,EAAgBzU,EAAmB,CAC1CuU,EAAavU,CAAG,GAAG,MAAA,CACrB,CAEA,MAAM0U,EAAezW,EAAAA,SAAmB,IACtC,MAAM,QAAQ6C,EAAI,MAAM,YAAY,EAAIA,EAAI,MAAM,aAAe,CAAA,CAAC,EAGpE,SAAS6T,GAAe3U,EAAa4U,EAAuB,CAC1D,MAAMpW,EAAO,CAAC,GAAGkW,EAAa,KAAK,EACnC,KAAOlW,EAAK,QAAUwB,GAAKxB,EAAK,KAAK,EAAE,EACvCA,EAAKwB,CAAG,EAAI4U,EACZtU,EAAM,eAAgB9B,CAAI,CAC5B,CAEA,SAASqW,EAAkB7U,EAAmB,CAC5C,MAAMxB,EAAO,CAAC,GAAGkW,EAAa,KAAK,EAC/B1U,EAAMxB,EAAK,SAAQA,EAAKwB,CAAG,EAAI,IACnCM,EAAM,eAAgB9B,CAAI,CAC5B,CAEA,SAASsW,EAAoBzQ,EAAWrE,EAAmB,CACzD,MAAM+U,EAAQ1Q,EAAG,OACX2Q,EAAOD,GAAO,QAAQ,CAAC,EAC7B,GAAI,CAACC,EAAM,OAGX,MAAMC,EAAM,IAAI,MACVC,GAAY,IAAI,gBAAgBF,CAAI,EAC1CC,EAAI,OAAS,IAAM,CAEjB,GAAI,CAAE,MAAAE,GAAO,OAAAC,EAAA,EAAWH,EACxB,GAAIE,GAAQ,KAAOC,GAAS,IAAK,CAC/B,MAAMC,GAAQ,KAAK,IAAI,IAAMF,GAAO,IAAMC,EAAM,EAChDD,GAAQ,KAAK,MAAMA,GAAQE,EAAK,EAChCD,GAAS,KAAK,MAAMA,GAASC,EAAK,CACpC,CACA,MAAMC,GAAS,SAAS,cAAc,QAAQ,EAC9CA,GAAO,MAAQH,GACfG,GAAO,OAASF,GAChB,MAAMG,GAAMD,GAAO,WAAW,IAAI,EAC9BC,KACFA,GAAI,UAAUN,EAAK,EAAG,EAAGE,GAAOC,EAAM,EACtCT,GAAe3U,EAAKsV,GAAO,UAAU,aAAc,EAAG,CAAC,GAEzD,IAAI,gBAAgBJ,EAAS,CAC/B,EACAD,EAAI,QAAU,IAAM,IAAI,gBAAgBC,EAAS,EACjDD,EAAI,IAAMC,GACVH,EAAM,MAAQ,EAChB,CAEA,SAASS,GAAuB,CAC9B,MAAMhX,EAAO,CAAC,GAAGf,EAAQ,MAAO,UAAUA,EAAQ,MAAM,OAAS,CAAC,EAAE,EACpE6C,EAAM,OAAQ9B,CAAI,EAClB,MAAMiX,EAAO,CAAC,GAAGf,EAAa,MAAO,EAAE,EACvCpU,EAAM,eAAgBmV,CAAI,CAC5B,CAEA,SAASC,EAAkB1V,EAAmB,CAC5CM,EAAM,OAAQ7C,EAAQ,MAAM,OAAO,CAAC4S,EAAG3P,IAAMA,IAAMV,CAAG,CAAC,EACvDM,EAAM,eAAgBoU,EAAa,MAAM,OAAO,CAACrE,EAAG3P,IAAMA,IAAMV,CAAG,CAAC,CACtE,CAIA,MAAM2V,EAAoB/X,EAAAA,IAAmB,IAAI,EAC3CgY,EAAmBhY,EAAAA,IAAmB,IAAI,EAEhD,SAASiY,EAAkBxR,EAAerE,EAAmB,CACtDqE,EAAG,eACRsR,EAAkB,MAAQ3V,EAC1BqE,EAAG,aAAa,QAAQ,iCAAkC,OAAOrE,CAAG,CAAC,EACrEqE,EAAG,aAAa,cAAgB,OAClC,CAEA,SAASyR,EAAiBzR,EAAerE,EAAmB,CACtD2V,EAAkB,QAAU,OAChCtR,EAAG,eAAA,EACCA,EAAG,eAAcA,EAAG,aAAa,WAAa,QAClDuR,EAAiB,MAAQ5V,EAC3B,CAEA,SAAS+V,GAA0B,CACjCH,EAAiB,MAAQ,IAC3B,CAEA,SAASI,EAAa3R,EAAerE,EAAmB,CACtDqE,EAAG,eAAA,EACH,MAAM4R,EAAON,EAAkB,MAG/B,GAFAA,EAAkB,MAAQ,KAC1BC,EAAiB,MAAQ,KACrBK,IAAS,MAAQA,IAASjW,EAAK,OACnC,MAAMxB,EAAO,CAAC,GAAGf,EAAQ,KAAK,EACxB,CAAC0E,CAAK,EAAI3D,EAAK,OAAOyX,EAAM,CAAC,EAE7BC,GAASD,EAAOjW,EAAMA,EAAM,EAAIA,EACtCxB,EAAK,OAAO0X,GAAQ,EAAG/T,CAAK,EAC5B7B,EAAM,OAAQ9B,CAAI,CACpB,CAEA,SAAS2X,GAAwB,CAC/BR,EAAkB,MAAQ,KAC1BC,EAAiB,MAAQ,IAC3B,CAQA,MAAMQ,GAAWnY,EAAAA,SAAS,IACxBR,EAAQ,MAAM,KAAMyJ,GAAM,OAAOA,CAAC,EAAE,OAAO,YAAA,IAAkB,OAAO,CAAA,EAGtE,SAASmP,IAAoB,CACvBD,GAAS,MACX9V,EACE,OACA7C,EAAQ,MAAM,OAAQyJ,GAAM,OAAOA,CAAC,EAAE,KAAA,EAAO,YAAA,IAAkB,OAAO,CAAA,EAGxE5G,EAAM,OAAQ,CAAC,GAAG7C,EAAQ,MAAO,OAAO,CAAC,CAE7C,CAIA,MAAM6Y,GAAa1Y,EAAAA,IAAI,EAAK,EAGtB2Y,GAAiBtY,EAAAA,SAAS,IAAM,CAEpC,GADeyF,EAAO,KAAK,OAAS,OAElC,OAAOF,EAAc,OAAQnG,GAAMA,EAAE,WAAW,EAElD,MAAMmZ,EAAM,CAAC,OAAQ,WAAY,SAAU,OAAQ,SAAU,UAAW,QAAQ,EAChF,OAAOhT,EAAc,OAAQnG,GAAMmZ,EAAI,SAASnZ,EAAE,EAAE,CAAC,CACvD,CAAC,EAED,SAASoZ,GAAYxC,EAAuB,CAC1CqC,GAAW,MAAQ,GACnB5S,EAAO,iBAAiBmC,EAAM,QAASA,EAAM,UAAWoO,CAAO,CACjE,CAEA,SAASyC,IAAsB,CAC7BJ,GAAW,MAAQ,GACnB5S,EAAO,iBAAiBmC,EAAM,QAASA,EAAM,UAAW,SAAS,CACnE,CAIA,MAAM8Q,GAAmB1Y,EAAAA,SAAiB,IAAM,CAC9C,OAAQoB,EAAK,MAAA,CACX,IAAK,SAAU,MAAO,SACtB,IAAK,OAAQ,MAAO,OACpB,IAAK,QAAS,MAAO,QACrB,IAAK,OAAQ,MAAO,OACpB,QAAS,MAAO,MAAA,CAEpB,CAAC,EAED,SAASuX,GAAarZ,EAA4B,CAChD,GAAIA,IAAM,IAAMA,GAAK,KAAM,OAC3B,MAAMqD,EAAI,OAAOrD,CAAC,EAClB,OAAO,OAAO,SAASqD,CAAC,EAAIA,EAAI,MAClC,CAGA,MAAMiW,EAAY5Y,EAAAA,SAAiB,IAAM,OAAO6C,EAAI,MAAM,KAAO,CAAC,CAAC,EAC7DgW,EAAY7Y,EAAAA,SAAiB,IAAM,OAAO6C,EAAI,MAAM,KAAO,GAAG,CAAC,EAC/DiW,EAAa9Y,EAAAA,SAAiB,IAAM,OAAO6C,EAAI,MAAM,MAAQ,CAAC,CAAC,EAC/DkW,EAAqB/Y,EAAAA,SAAiB,IAAM4Y,EAAU,KAAK,EAE3DI,EAAYhZ,EAAAA,SAAiB,IAAM,OAAO6C,EAAI,MAAM,KAAO,CAAC,CAAC,EAI7DgD,EAAS7F,EAAAA,SAAS,IAAMyF,EAAO,KAAK,OAAS,MAAM,EACnDwT,GAAgBtZ,EAAAA,IAAI,EAAK,EAEzBuZ,GAAiBlZ,EAAAA,SACrB,IAAO,MAAM,QAAQ6C,EAAI,MAAM,cAAc,EAAIA,EAAI,MAAM,eAAiB,CAAA,CAAC,EAEzEsW,GAAcnZ,EAAAA,SAAiB,IAAM,OAAO6C,EAAI,MAAM,QAAU,CAAC,CAAC,EAClEuW,GAAmBpZ,EAAAA,SAAiB,IAAM6C,EAAI,MAAM,aAAe,EAAE,EACrEwW,GAAoBrZ,EAAAA,SAAiB,IAAM6C,EAAI,MAAM,cAAgB,EAAE,EACvEyW,GAAoBtZ,EAAAA,SAAiB,IAAM,CAC/C,MAAMV,EAAIuD,EAAI,MAAM,aACpB,OAA0BvD,GAAM,KAAO,OAAOA,CAAC,EAAI,EACrD,CAAC,EAGKia,GAAevZ,EAAAA,SAAS,IAC5BkZ,GAAe,MAAM,OAAS,GAC9BC,GAAY,MAAQ,GACpBG,GAAkB,QAAU,IAC3BzW,EAAI,MAAM,cAAgBA,EAAI,MAAM,aAAa,OAAS,GAC3D,OAAO,KAAKA,EAAI,MAAM,cAAgB,CAAA,CAAE,EAAE,OAAS,CAAA,EAG/C2W,GAAiBxZ,EAAAA,SAAS,IAAM,CACpC,IAAIyZ,EAAQ,aACZ,OAAIN,GAAY,MAAQ,IACtBM,GAAS,KAAKN,GAAY,KAAK,IAAIA,GAAY,QAAU,EAAI,KAAO,KAAK,KAEpEM,CACT,CAAC,EAED,SAASC,GAAoB3X,EAAmB,CAC9C,MAAM0C,EAAU,CAAC,GAAGyU,GAAe,KAAK,EAClCS,EAAMlV,EAAQ,QAAQ1C,CAAG,EACzB6X,EAAU/W,EAAI,MAAM,YAC1B,GAAIzB,EAAK,QAAU,WAAa,CAACwY,EAAS,CAExCvX,EAAM,iBAAkBsX,GAAO,EAAI,CAAA,EAAK,CAAC5X,CAAG,CAAC,EAC7C,MACF,CACI4X,GAAO,EACTlV,EAAQ,OAAOkV,EAAK,CAAC,EAErBlV,EAAQ,KAAK1C,CAAG,EAElBM,EAAM,iBAAkBoC,CAAO,CACjC,CAEA,SAASoV,GAAUva,EAAc,CAC/B+C,EAAM,SAAU,OAAO/C,CAAC,GAAK,CAAC,CAChC,CAEA,SAASwa,GAAexa,EAAiB,CACvC+C,EAAM,cAAe/C,CAAC,CACxB,CAEA,SAASya,GAAgBza,EAAiB,CACxC+C,EAAM,eAAgB/C,CAAC,CACzB,CAEA,SAAS0a,GAAgB1a,EAAc,CACrC,GAAIA,IAAM,IAAMA,IAAM,MAAQA,IAAM,OAAW,CAC7C+C,EAAM,eAAgB,MAAS,EAC/B,MACF,CACIjB,EAAK,QAAU,UAAYA,EAAK,QAAU,SAC5CiB,EAAM,eAAgB,OAAO/C,CAAC,CAAC,EAE/B+C,EAAM,eAAgB/C,CAAC,CAE3B,CAEA,SAAS2a,IAAuB,CAC9BhB,GAAc,MAAQ,EACxB,CAGA,MAAMiB,GAAmBla,EAAAA,SAAS,IAC3B6F,EAAO,MACLwP,EAAa,OAAO,WAAaA,EAAa,OAAO,OAAS,QAD3CA,EAAa,OAAO,OAAS,OAExD,EAGK8E,GAAiB,CAAC,OAAQ,OAAO,EAIjCC,GAAgBpa,EAAAA,SAAmB,IACvC,MAAM,QAAQ6C,EAAI,MAAM,IAAI,EAAIA,EAAI,MAAM,KAAO,CAAA,CAAC,EAGpD,SAASwX,GAAmBtY,EAAayT,EAAqB,CAC5D,MAAMjV,EAAO,CAAC,GAAG6Z,GAAc,KAAK,EACpC7Z,EAAKwB,CAAG,EAAIyT,EACZnT,EAAM,OAAQ9B,CAAI,CACpB,CAEA,SAAS+Z,GAAmBvY,EAAmB,CAC7C,MAAMxB,EAAO6Z,GAAc,MAAM,OAAO,CAAChI,EAAG3P,IAAMA,IAAMV,CAAG,EAC3DM,EAAM,OAAQ9B,EAAK,OAASA,EAAO,MAAS,CAC9C,CAEA,SAASga,IAAwB,CAC/B,MAAMha,EAAO,CAAC,GAAG6Z,GAAc,MAAO,QAAQA,GAAc,MAAM,OAAS,CAAC,EAAE,EAC9E/X,EAAM,OAAQ9B,CAAI,CACpB,CAMA,MAAMia,GAAexa,EAAAA,SAAmB,IAClC,MAAM,QAAQ6C,EAAI,MAAM,YAAY,GAAKA,EAAI,MAAM,aAAa,SAAWuX,GAAc,MAAM,OAC1FvX,EAAI,MAAM,aAEZuX,GAAc,MAAM,IAAI,CAAChI,EAAG3P,IAAMA,CAAC,CAC3C,EAEKgY,GAAqBza,EAAAA,SAAS,IAClCwa,GAAa,MAAM,IAAKE,GAAYN,GAAc,MAAMM,CAAO,GAAK,QAAQA,EAAU,CAAC,EAAE,CAAA,EAWrFC,GAAkBhb,EAAAA,IAAmB,IAAI,EACzCib,GAAkBjb,EAAAA,IAAmB,IAAI,EAE/C,SAASkb,GAAe9W,EAAiBC,EAAqB,CAC5D,GAAID,IAAYC,EAAO,OACvB,MAAM8W,EAAM,CAAC,GAAGN,GAAa,KAAK,EAC5B,CAACtW,CAAK,EAAI4W,EAAI,OAAO/W,EAAS,CAAC,EAE/BgX,EAAWhX,EAAUC,EAAQA,EAAQ,EAAIA,EAC/C8W,EAAI,OAAOC,EAAU,EAAG7W,CAAK,EAC7B7B,EAAM,eAAgByY,CAAG,CAC3B,CAIA,MAAME,GAAYhb,EAAAA,SAAmB,IACnC,MAAM,QAAQ6C,EAAI,MAAM,SAAS,EAAIA,EAAI,MAAM,UAAY,CAAA,CAAC,EAGxDoY,GAAajb,EAAAA,SAAmB,IACpC,MAAM,QAAQ6C,EAAI,MAAM,UAAU,EAAIA,EAAI,MAAM,WAAa,CAAA,CAAC,EAGhE,SAASqY,GAAgBnZ,EAAayT,EAAqB,CACzD,MAAMjV,EAAO,CAAC,GAAGya,GAAU,KAAK,EAChCza,EAAKwB,CAAG,EAAIyT,EACZnT,EAAM,YAAa9B,CAAI,CACzB,CAEA,SAAS4a,GAAiBpZ,EAAayT,EAAqB,CAC1D,MAAMjV,EAAO,CAAC,GAAG0a,GAAW,KAAK,EACjC1a,EAAKwB,CAAG,EAAIyT,EACZnT,EAAM,aAAc9B,CAAI,CAC1B,CAEA,SAAS6a,IAAqB,CAC5B,MAAMzY,EAAIqY,GAAU,MAAM,OAAS,EACnC3Y,EAAM,YAAa,CAAC,GAAG2Y,GAAU,MAAO,QAAQrY,CAAC,EAAE,CAAC,EACpDN,EAAM,aAAc,CAAC,GAAG4Y,GAAW,MAAO,cAActY,CAAC,EAAE,CAAC,CAC9D,CAIA,MAAM0Y,GAAerb,EAAAA,SAAiC,IACnD6C,EAAI,MAAM,cAAgB,OAAOA,EAAI,MAAM,cAAiB,SAAYA,EAAI,MAAM,aAAe,CAAA,CAAC,EAGrG,SAASyY,GAAeC,EAAiBC,EAAoC,CAC3E,MAAMC,EAAQ,CAAE,GAAGJ,GAAa,KAAA,EACFG,GAAa,KACzC,OAAOC,EAAMF,CAAO,EAEpBE,EAAMF,CAAO,EAAIC,EAEnBnZ,EAAM,eAAgB,OAAO,KAAKoZ,CAAK,EAAE,OAASA,EAAQ,MAAS,CACrE,CAEA,SAASC,GAAgB3Z,EAAmB,CAC1CM,EAAM,YAAa2Y,GAAU,MAAM,OAAO,CAAC5I,EAAG3P,IAAMA,IAAMV,CAAG,CAAC,EAC9DM,EAAM,aAAc4Y,GAAW,MAAM,OAAO,CAAC7I,EAAG3P,IAAMA,IAAMV,CAAG,CAAC,EAEhE,MAAM0Z,EAAQ,CAAE,GAAI5Y,EAAI,MAAM,cAAgB,CAAA,CAAC,EAC/C,OAAO4Y,EAAM1Z,CAAG,EAEhB,MAAM4Z,EAAoC,CAAA,EAC1C,SAAW,CAACnY,EAAGlE,CAAC,IAAK,OAAO,QAAQmc,CAAK,EAAG,CAC1C,MAAMG,GAAK,OAAOpY,CAAC,EACbqY,GAAOD,GAAK7Z,EAAM6Z,GAAK,EAAIA,GAC3BE,GAAQxc,EAAeyC,EAAOzC,EAAe,EAAKA,EACxDqc,EAAUE,EAAI,EAAIC,EACpB,CACAzZ,EAAM,eAAgBsZ,CAAS,CACjC,6BAIElV,EAAAA,mBA2oBM,MAAA,CA3oBD,MAAM,gBAAiB,sCAAD,IAAA,CAAA,EAAW,CAAA,MAAA,CAAA,EAAA,GACtCK,EAAAA,mBAkmBM,MAlmBNJ,GAkmBM,CAhmBJI,EAAAA,mBAuCS,SAvCTC,GAuCS,CAtCPD,EAAAA,mBAEO,OAFPI,GAEO,CADUmO,EAAA,qBAAf5O,EAAAA,mBAAmE,UAAA,OAArC,KAAM4O,EAAA,MAAa,KAAM,KAAK,IAAA,4CAG9DvO,EAAAA,mBAiBM,MAjBNU,GAiBM,CAhBJR,EAAAA,YAKE+U,GAAA,CAJA,MAAM,kBACL,cAAalZ,EAAA,MAAI,OAAK,GACvB,YAAY,iBACX,sBAAkB+D,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAExE,EAAK,QAAUwE,CAAM,EAAA,0BAE5CC,EAAAA,mBASM,MATNW,GASM,CARJT,EAAAA,YAKE+U,GAAA,CAJA,MAAM,eACL,cAAalU,EAAA,UACd,YAAY,WACX,sBAAoB4N,CAAA,0BAEvB7O,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAoC,OAAA,CAA9B,MAAM,eAAA,EAAgB,IAAC,EAAA,GAC7BA,EAAAA,mBAAmC,8BAA1BoT,GAAA,KAAgB,EAAA,CAAA,CAAA,KAI7BpT,EAAAA,mBAcM,MAdNkV,GAcM,CAbJhV,cAKEL,EAAAA,MAAAsV,EAAAA,QAAA,EAAA,CAJA,MAAM,iBACL,QAAS,KAAK,UAAU3G,EAAA,KAAY,EACpC,MAAOlU,EAAA,MACP,WAAQwF,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEkP,EAAWzP,EAAYO,CAAM,CAAA,EAAA,8BAE1CG,cAMEL,EAAAA,MAAAuV,EAAAA,YAAA,EAAA,CALA,KAAK,IACL,QAAQ,WACR,KAAK,KACL,MAAM,WACL,QAAOvG,CAAA,OAMd7O,EAAAA,mBA8VM,MA9VNqV,GA8VM,CA5V+D,CAAA,OAAA,WAAA,SAAA,OAAA,QAAA,MAAA,EAAA,SAAS/a,EAAA,KAAI,iBAAhFqF,EAAAA,mBAmBWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAlBTL,cAIEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAHA,MAAM,cACL,MAAOpE,EAAA,MAAI,aAAW,GACtB,UAAO+D,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAExE,EAAK,cAAgBiE,EAAYO,CAAM,CAAA,EAAA,oBAGnDC,EAAAA,mBAWM,MAXNsV,GAWM,CAVJxV,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAkD,MAAA,CAA7C,MAAM,yBAAA,EAA0B,UAAO,EAAA,GAC5CE,cAQEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAPC,MAAOpE,EAAA,MAAI,MACX,YAAaA,EAAA,MAAI,YACjB,cAAaA,EAAA,MAAI,WACjB,KAAM6V,GAAA,MACN,UAAWtX,EAAA,QAAI,YAAmB,OAClC,SAAQ,CAAA,CAAIyB,EAAA,MAAI,SACjB,SAAA,EAAA,sFAMezB,EAAA,QAAI,UACvBoF,EAAAA,YAAAC,EAAAA,mBAiDM,MAjDN4V,GAiDM,CAhDJzV,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAkD,MAAA,CAA7C,MAAM,yBAAA,EAA0B,UAAO,EAAA,IAE5CN,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBA8BMY,WAAA,KAAAC,EAAAA,WA7BiB9H,EAAA,MAAO,CAApB8c,EAAKva,mBADf0E,EAAAA,mBA8BM,MAAA,CA5BH,IAAK1E,EACN,wBAAM,mBAAkB,CACkB,iBAAA4V,EAAA,QAAqB5V,GAAO2V,EAAA,QAAsB3V,EAAkC,cAAA2V,EAAA,QAAsB3V,CAAA,IAIpJ,UAAU,OACT,YAAS8E,GAAE+Q,EAAkB/Q,EAAQ9E,CAAG,EACxC,WAAQ8E,GAAEgR,EAAiBhR,EAAQ9E,CAAG,EACtC,YAAW+V,EACX,OAAIjR,GAAEkR,EAAalR,EAAQ9E,CAAG,EAC9B,UAASmW,CAAA,iBAEVpR,EAAAA,mBAAgE,OAAA,CAA1D,MAAM,wBAAwB,cAAY,MAAA,EAAO,KAAE,EAAA,iBACzDA,EAAAA,mBAA2D,OAAA,CAArD,MAAM,0BAA0B,cAAY,MAAA,YAClDE,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,yBACL,MAAOqV,EACP,sBAAuBva,EAAG,CAAA,GAC1B,aAASoU,EAAapU,EAAKuE,EAAYO,CAAM,CAAA,CAAA,8CAEhDG,cAMEL,EAAAA,MAAAuV,EAAAA,YAAA,EAAA,CALA,KAAK,IACL,QAAQ,WACR,KAAK,KACL,MAAM,gBACL,QAAKrV,GAAEuP,EAAarU,CAAG,CAAA,sCAI5B+E,EAAAA,mBAaM,MAbNyV,GAaM,CAZJvV,cAMEL,EAAAA,MAAA6V,EAAAA,QAAA,EAAA,CALA,MAAM,aACN,QAAQ,SACR,KAAK,IACL,YAAU,OACT,QAAOnG,CAAA,GAEVrP,cAIEL,EAAAA,MAAA8V,EAAAA,UAAA,EAAA,CAHA,MAAM,yBACL,QAAStE,GAAA,MACT,WAAUC,EAAA,2BAOEhX,EAAA,QAAI,WACvBoF,EAAAA,UAAA,EAAAC,EAAAA,mBAGM,MAHNiW,GAGM,CAFJ9V,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAkD,MAAA,CAA7C,MAAM,yBAAA,EAA0B,UAAO,EAAA,GAC5CE,cAAmFL,EAAAA,MAAAgW,EAAAA,QAAA,EAAA,CAAxE,MAAO9Z,EAAA,MAAI,OAASgF,EAAA,UAAY,cAAahF,EAAA,MAAI,WAAY,SAAA,EAAA,qCAKvDzB,EAAA,QAAI,wBAAzBqF,EAAAA,mBAaWY,WAAA,CAAA,IAAA,GAAA,CAZTP,EAAAA,mBAOM,MAPN8V,GAOM,CANJ5V,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,YACN,KAAK,SACJ,MAAO,OAAO+R,EAAA,KAAS,EACvB,yBAAS3W,EAAK,MAAQsW,GAAarS,EAAYO,CAAM,CAAA,GAAA,CAAA,EAAA,sBAG1DC,EAAAA,mBAGM,MAHN+V,GAGM,CAFJjW,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAkD,MAAA,CAA7C,MAAM,yBAAA,EAA0B,UAAO,EAAA,GAC5CE,cAAkFL,EAAAA,MAAAmW,EAAAA,QAAA,EAAA,CAAvE,MAAOja,EAAA,MAAI,OAASgF,EAAA,UAAY,IAAKmR,EAAA,MAAY,MAAO,EAAG,YAAA,EAAA,kCAKrD5X,EAAA,QAAI,wBAAzBqF,EAAAA,mBAiCWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAhCTP,EAAAA,mBAmBM,MAnBNiW,GAmBM,CAlBJ/V,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,MACN,KAAK,SACJ,MAAO,OAAO2R,EAAA,KAAS,EACvB,yBAASvW,EAAK,MAAQsW,GAAarS,EAAYO,CAAM,CAAA,GAAA,CAAA,EAAA,oBAExDG,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,MACN,KAAK,SACJ,MAAO,OAAO4R,EAAA,KAAS,EACvB,yBAASxW,EAAK,MAAQsW,GAAarS,EAAYO,CAAM,CAAA,GAAA,GAAA,EAAA,oBAExDG,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,OACN,KAAK,SACJ,MAAO,OAAO6R,EAAA,KAAU,EACxB,yBAASzW,EAAK,OAASsW,GAAarS,EAAYO,CAAM,CAAA,GAAA,CAAA,EAAA,sBAG3DC,EAAAA,mBAWM,MAXNkW,GAWM,CAVJpW,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAkD,MAAA,CAA7C,MAAM,yBAAA,EAA0B,UAAO,EAAA,GAC5CE,cAQEL,EAAAA,MAAAsW,EAAAA,QAAA,EAAA,CAPC,MAAOpa,EAAA,MAAI,OAASgF,EAAA,UACpB,IAAK+Q,EAAA,MACL,IAAKC,EAAA,MACL,KAAMC,EAAA,MACN,MAAOC,EAAA,MACR,aAAA,GACA,SAAA,EAAA,uDAMe3X,EAAA,QAAI,qBAAzBqF,EAAAA,mBAwBWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAvBTP,EAAAA,mBAaM,MAbNoW,GAaM,CAZJlW,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,QACN,YAAY,uBACX,MAAOpE,EAAA,MAAI,KAAG,GACd,UAAO+D,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAExE,EAAK,MAAQiE,EAAYO,CAAM,CAAA,EAAA,oBAE3CG,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,gBACN,YAAY,OACX,MAAOpE,EAAA,MAAI,aAAW,GACtB,UAAO+D,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAExE,EAAK,cAAgBiE,EAAYO,CAAM,CAAA,EAAA,sBAGrDC,EAAAA,mBAQM,MARNqW,GAQM,CAPJvW,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAkD,MAAA,CAA7C,MAAM,yBAAA,EAA0B,UAAO,EAAA,GAC5CE,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJC,MAAOpE,EAAA,MAAI,OAASgF,EAAA,UACpB,YAAW,UAAYhF,EAAA,MAAI,KAAG,OAAA,IAC/B,YAAU,mBACV,SAAA,EAAA,0CAMezB,EAAA,QAAI,gBACvBoF,EAAAA,YAAAC,EAAAA,mBAmEM,MAnEN2W,GAmEM,CAlEJxW,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAwD,MAAA,CAAnD,MAAM,yBAAA,EAA0B,gBAAa,EAAA,IAClDN,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAuDMY,WAAA,KAAAC,EAAAA,WAtDiB9H,EAAA,MAAO,CAApB8c,EAAKva,mBADf0E,EAAAA,mBAuDM,MAAA,CArDH,IAAK1E,EACN,MAAM,wBAAA,GAEN+E,EAAAA,mBAkCM,MAlCNuW,GAkCM,CAhCI5G,EAAA,MAAa1U,CAAG,iBADxB0E,EAAAA,mBAKE,MAAA,OAHC,IAAKgQ,EAAA,MAAa1U,CAAG,EACtB,MAAM,wBACN,IAAI,EAAA,6BAEN0E,EAAAA,mBAGM,MAAA,OAHM,MAAM,8BAA+B,QAAKI,GAAE2P,EAAgBzU,CAAG,CAAA,qBACzE+E,EAAAA,mBAAyC,UAAA,CAAhC,KAAK,eAAe,KAAK,IAAA,WAClCA,EAAAA,mBAAsB,YAAhB,YAAS,EAAA,CAAA,WAEN2P,EAAA,MAAa1U,CAAG,GAA3ByE,EAAAA,YAAAC,EAAAA,mBAeM,MAfN6W,GAeM,CAdJtW,cAMEL,EAAAA,MAAAuV,EAAAA,YAAA,EAAA,CALA,KAAK,gBACL,QAAQ,WACR,KAAK,KACL,MAAM,eACL,QAAKrV,GAAE2P,EAAgBzU,CAAG,CAAA,sBAE7BiF,cAMEL,EAAAA,MAAAuV,EAAAA,YAAA,EAAA,CALA,KAAK,QACL,QAAQ,WACR,KAAK,KACL,MAAM,eACL,QAAKrV,GAAE+P,EAAkB7U,CAAG,CAAA,qDAGjC+E,EAAAA,mBAME,QAAA,YALC,IAAKyP,GAAexU,CAAG,EACxB,KAAK,OACL,OAAO,UACP,MAAA,CAAA,QAAA,MAAA,EACC,SAAM8E,GAAEgQ,EAAoBhQ,EAAQ9E,CAAG,CAAA,gBAG5C+E,EAAAA,mBAcM,MAdNyW,GAcM,CAbJvW,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,yBACL,MAAOqV,EACP,sBAAuBva,EAAG,CAAA,GAC1B,aAASoU,EAAapU,EAAKuE,EAAYO,CAAM,CAAA,CAAA,8CAEhDG,cAMEL,EAAAA,MAAAuV,EAAAA,YAAA,EAAA,CALA,KAAK,IACL,QAAQ,WACR,KAAK,KACL,MAAM,gBACL,QAAKrV,GAAE4Q,EAAkB1V,CAAG,CAAA,kCAInC+E,EAAAA,mBAQM,MARN0W,GAQM,CAPJxW,cAMEL,EAAAA,MAAA6V,EAAAA,QAAA,EAAA,CALA,MAAM,aACN,QAAQ,SACR,KAAK,IACL,YAAU,OACT,QAAOjF,CAAA,QAOKnW,EAAA,QAAI,0BAAzBqF,EAAAA,mBAoCWY,WAAA,CAAA,IAAA,GAAA,CAnCTP,EAAAA,mBA+BM,MA/BN2W,GA+BM,CA9BJ7W,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAyE,MAAA,CAApE,MAAM,yBAAA,EAA0B,iCAA8B,EAAA,IACnEN,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAmBMY,WAAA,KAAAC,EAAAA,WAlBkB8S,GAAA,MAAa,CAA3BlU,EAAMnE,mBADhB0E,EAAAA,mBAmBM,MAAA,CAjBH,IAAK1E,EACN,MAAM,kBAAA,GAEN+E,EAAAA,mBAA0D,OAA1D4W,GAA0DtW,EAAAA,gBAAjBrF,EAAG,CAAA,EAAA,CAAA,EAC5CiF,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,yBACL,MAAOf,EACP,oBAAqBnE,EAAG,CAAA,GACxB,aAASsY,GAAmBtY,EAAKuE,EAAYO,CAAM,CAAA,CAAA,8CAEtDG,cAMEL,EAAAA,MAAAuV,EAAAA,YAAA,EAAA,CALA,KAAK,IACL,QAAQ,WACR,KAAK,KACL,MAAM,cACL,QAAKrV,GAAEyT,GAAmBvY,CAAG,CAAA,gCAGlC+E,EAAAA,mBAQM,MARN6W,GAQM,CAPJ3W,cAMEL,EAAAA,MAAA6V,EAAAA,QAAA,EAAA,CALA,MAAM,WACN,QAAQ,SACR,KAAK,IACL,YAAU,OACT,QAAOjC,EAAA,qBAIdzT,EAAAA,mBAEM,MAAA,CAFD,MAAM,qBAAmB,CAC5BA,EAAAA,mBAA8F,MAAA,CAAzF,MAAM,yBAAA,EAA0B,qDAAmD,CAAA,aAKvE1F,EAAA,QAAI,0BAAzBqF,EAAAA,mBA8CWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CA7CTP,EAAAA,mBAyCM,MAzCN8W,GAyCM,CAxCJhX,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAgD,MAAA,CAA3C,MAAM,yBAAA,EAA0B,QAAK,EAAA,iBAC1CA,EAAAA,mBAGM,MAAA,CAHD,MAAM,2BAAyB,CAClCA,EAAAA,mBAAsD,OAAA,CAAhD,MAAM,8BAAA,EAA+B,MAAI,EAC/CA,EAAAA,mBAA4D,OAAA,CAAtD,MAAM,8BAAA,EAA+B,YAAU,CAAA,QAEvDN,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAyBMY,WAAA,KAAAC,EAAAA,WAxBe0T,GAAA,MAAS,CAApB5I,EAAGrQ,mBADb0E,EAAAA,mBAyBM,MAAA,CAvBH,IAAK1E,EACN,MAAM,wBAAA,GAENiF,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,2BACL,MAAO+T,GAAA,MAAUjZ,CAAG,EACpB,oBAAqBA,EAAG,CAAA,GACxB,aAASmZ,GAAgBnZ,EAAKuE,EAAYO,CAAM,CAAA,CAAA,4DAEnDC,EAAAA,mBAAwG,UAAA,CAA/F,KAAK,oBAAoB,KAAK,KAAK,MAAA,CAAA,cAAA,IAAA,MAAA,+BAAA,CAAA,YAC5CE,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,2BACL,MAAOgU,GAAA,MAAWlZ,CAAG,EACrB,0BAA2BA,EAAG,CAAA,GAC9B,aAASoZ,GAAiBpZ,EAAKuE,EAAYO,CAAM,CAAA,CAAA,8CAEpDG,cAMEL,EAAAA,MAAAuV,EAAAA,YAAA,EAAA,CALA,KAAK,IACL,QAAQ,WACR,KAAK,KACL,MAAM,cACL,QAAKrV,GAAE6U,GAAgB3Z,CAAG,CAAA,gCAG/B+E,EAAAA,mBAQM,MARN+W,GAQM,CAPJ7W,cAMEL,EAAAA,MAAA6V,EAAAA,QAAA,EAAA,CALA,MAAM,WACN,QAAQ,SACR,KAAK,IACL,YAAU,OACT,QAAOpB,EAAA,qBAIdtU,EAAAA,mBAEM,MAAA,CAFD,MAAM,qBAAmB,CAC5BA,EAAAA,mBAA8F,MAAA,CAAzF,MAAM,yBAAA,EAA0B,qDAAmD,CAAA,aAKvE1F,EAAA,QAAI,yBAAzBqF,EAAAA,mBAeWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAdTL,cAMEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CALA,MAAM,cACN,UAAA,GACA,YAAY,2DACX,MAAOpE,EAAA,MAAI,YAAU,GACrB,UAAO+D,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAExE,EAAK,aAAeiE,EAAYO,CAAM,CAAA,EAAA,oBAElDC,EAAAA,mBAMM,MANNgX,GAMM,CALJlX,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAkD,MAAA,CAA7C,MAAM,yBAAA,EAA0B,UAAO,EAAA,GAC5CA,EAAAA,mBAGM,MAHNiX,GAGM,CAFJjX,qBAA2C,KAAA,KAAAM,kBAApCvE,EAAA,MAAI,OAAK,eAAA,EAAA,CAAA,EACPA,EAAA,MAAI,0BAAb4D,EAAAA,mBAAiD,IAAAuX,GAAA5W,EAAAA,gBAArBvE,EAAA,MAAI,UAAU,EAAA,CAAA,qEAOxCzB,EAAA,QAAI,yBADZ6c,cAMEtX,EAAAA,MAAAM,EAAAA,OAAA,EAAA,QAJA,MAAM,cACL,MAAOpE,EAAA,MAAI,YAAU,GACtB,YAAY,+CACX,UAAO+D,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAExE,EAAK,aAAeiE,EAAYO,CAAM,CAAA,EAAA,mDAKpDC,EAAAA,mBAqBS,SArBToX,GAqBS,CAlBCrY,EAAA,OAAUzE,EAAA,QAAI,yBADtB6c,EAAAA,YAOEtX,QAAA6V,EAAAA,QAAA,EAAA,OALC,YAAWjD,GAAA,MAAY,eAAA,MACvB,MAAOC,GAAA,MACP,QAASP,GAAA,MAAa,UAAA,SACvB,KAAK,IACJ,QAAKrS,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEoS,GAAA,MAAa,CAAIA,GAAA,MAAA,uEAG3BjS,cAIEL,EAAAA,MAAAgW,EAAAA,QAAA,EAAA,CAHC,QAAO,CAAA,CAAI9Z,EAAA,MAAI,SAChB,MAAM,WACL,WAAQ+D,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAExE,EAAK,WAAaiE,EAAYO,CAAM,CAAA,EAAA,oCAGjDC,EAAAA,mBAAqC,MAAA,CAAhC,MAAM,uBAAA,EAAuB,KAAA,EAAA,GAElCE,cAA2FL,EAAAA,MAAA6V,EAAAA,QAAA,EAAA,CAAjF,MAAM,YAAY,YAAU,OAAO,QAAQ,QAAQ,KAAK,IAAK,QAAO5G,CAAA,GAC9E5O,cAAsFL,EAAAA,MAAA6V,EAAAA,QAAA,EAAA,CAA5E,MAAM,SAAS,YAAU,QAAQ,QAAQ,QAAQ,KAAK,IAAK,QAAO3G,CAAA,KAInEhQ,EAAA,OAAUoT,GAAA,OAAiB7X,EAAA,QAAI,WAA1CoF,YAAA,EAAAC,qBA4LM,MA5LN0X,GA4LM,CA3LJrX,EAAAA,mBAcM,MAdNsX,GAcM,eAbJtX,EAAAA,mBAGM,MAAA,CAHD,MAAM,yBAAuB,CAChCA,EAAAA,mBAAyC,UAAA,CAAhC,KAAK,eAAe,KAAK,IAAA,GAClCA,EAAAA,mBAAqE,OAAA,CAA/D,MAAM,wBAAA,EAAyB,2BAAyB,CAAA,OAEhEA,EAAAA,mBAQM,MARNuX,GAQM,CAPJrX,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,2BACN,KAAK,SACJ,MAAO,OAAOkS,GAAA,KAAW,EACzB,UAAOvS,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEgT,GAAUvT,EAAYO,CAAM,CAAA,EAAA,oBAExCD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAoD,OAAA,CAA9C,MAAM,4BAA2B,SAAM,EAAA,EAAA,KAIjDA,EAAAA,mBA2JM,MA3JNwX,GA2JM,CAzJYld,EAAA,QAAI,wBAApBqF,EAAAA,mBAmBWY,WAAA,CAAA,IAAA,GAAA,CAlBTL,cAIEL,EAAAA,MAAA8V,EAAAA,UAAA,EAAA,CAHA,MAAM,4BACL,QAAO,CAAA,CAAI5Z,EAAA,MAAI,YACf,4BAAUR,EAAK,cAAgBiE,EAAYO,CAAM,GAAK,MAAS,EAAA,sBAElEC,qBAA2E,MAA3EyX,GAA2EnX,kBAAhCvE,EAAA,MAAI,OAAK,UAAA,EAAA,CAAA,GACpD2D,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAWMY,WAAA,KAAAC,EAAAA,WAViB9H,EAAA,MAAO,CAApB8c,EAAKva,mBADf0E,EAAAA,mBAWM,MAAA,CATH,IAAK1E,EACN,wBAAM,qBAAoB,CAAA,aACFmX,SAAe,SAASnX,CAAG,EAAA,CAAA,CAAA,GAEnDiF,cAIEL,EAAAA,MAAA8V,EAAAA,UAAA,EAAA,CAHC,MAAOH,GAAG,UAAcva,EAAG,CAAA,GAC3B,QAASmX,GAAA,MAAe,SAASnX,CAAG,EACpC,WAAQ8E,GAAE6S,GAAoB3X,CAAG,CAAA,6DAMnBX,EAAA,QAAI,8BAAzBqF,EAAAA,mBAoBWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAnBTL,cAIEL,EAAAA,MAAA8V,EAAAA,UAAA,EAAA,CAHA,MAAM,4BACL,QAAO,CAAA,CAAI5Z,EAAA,MAAI,YACf,4BAAUR,EAAK,cAAgBiE,EAAYO,CAAM,GAAK,MAAS,EAAA,sBAElEC,qBAA2E,MAA3E0X,GAA2EpX,kBAAhCvE,EAAA,MAAI,OAAK,UAAA,EAAA,CAAA,GACpD2D,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAYMY,WAAA,KAAAC,EAAAA,WAXiB9H,EAAA,MAAO,CAApB8c,EAAKva,mBADf0E,EAAAA,mBAYM,MAAA,CAVH,IAAK1E,EACN,wBAAM,qBAAoB,CAAA,aACFmX,SAAe,SAASnX,CAAG,EAAA,CAAA,CAAA,iBAEnD+E,EAAAA,mBAAmG,UAAA,CAA1F,KAAK,eAAe,KAAK,KAAK,MAAA,CAAA,cAAA,IAAA,MAAA,+BAAA,CAAA,YACvCE,cAIEL,EAAAA,MAAA8V,EAAAA,UAAA,EAAA,CAHC,MAAOH,GAAG,UAAcva,EAAG,CAAA,GAC3B,QAASmX,GAAA,MAAe,SAASnX,CAAG,EACpC,WAAQ8E,GAAE6S,GAAoB3X,CAAG,CAAA,6DAMnBX,EAAA,QAAI,yBAAzBqF,EAAAA,mBAcWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAbTP,qBAA2E,MAA3E2X,GAA2ErX,kBAAhCvE,EAAA,MAAI,OAAK,UAAA,EAAA,CAAA,GACpD2D,YAAA,EAAAC,EAAAA,mBAWMY,WAAA,KAAAC,EAAAA,WAViB6S,GAAc,CAA3BmC,EAAKva,IADf+E,EAAAA,mBAWM,MAAA,CATH,IAAK/E,EACN,wBAAM,qBAAoB,CAAA,aACFmX,SAAe,SAASnX,CAAG,EAAA,CAAA,CAAA,GAEnDiF,cAIEL,EAAAA,MAAA8V,EAAAA,UAAA,EAAA,CAHC,MAAOH,EACP,QAASpD,GAAA,MAAe,SAASnX,CAAG,EACpC,WAAQ8E,GAAE6S,GAAoB3X,CAAG,CAAA,2DAMnBX,EAAA,gBAAmBA,EAAA,QAAI,0BAA5CqF,EAAAA,mBAYWY,EAAAA,SAAA,CAAA,IAAA,GAAA,eAXTP,EAAAA,mBAGM,MAAA,CAHD,MAAM,sBAAoB,CAC7BA,EAAAA,mBAAwC,UAAA,CAA/B,KAAK,cAAc,KAAK,IAAA,GACjCA,qBAAmD,YAA7C,wCAAsC,CAAA,OAE9CE,cAMEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CALA,MAAM,yBACN,UAAA,GACC,MAAOoS,GAAA,MACR,YAAY,oDACX,UAAOzS,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEkT,GAAgBzT,EAAYO,CAAM,CAAA,EAAA,0BAK3BzF,EAAA,QAAI,wBAAzBqF,EAAAA,mBASWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CARTP,qBAA2E,MAA3E4X,GAA2EtX,kBAAhCvE,EAAA,MAAI,OAAK,UAAA,EAAA,CAAA,EACpDmE,cAMEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CALA,MAAM,iBACN,KAAK,SACJ,MAAOqS,GAAA,MACR,YAAY,kCACX,UAAO1S,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEmT,GAAgB1T,EAAYO,CAAM,CAAA,EAAA,0BAK3BzF,EAAA,QAAI,0BAAzBqF,EAAAA,mBA0BWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAzBTT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAuE,MAAA,CAAlE,MAAM,4BAAA,EAA6B,4BAAyB,EAAA,IACjEN,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAmBMY,WAAA,KAAAC,EAAAA,WAlBsBmT,GAAA,MAAkB,CAApChB,EAAOkF,mBADjBlY,EAAAA,mBAmBM,MAAA,CAjBH,IAAKkY,EACN,wBAAM,gCAA+B,CACE,cAAAhE,GAAA,QAAoBgE,EAAwC,iBAAA/D,GAAA,QAAoB+D,GAAUhE,GAAA,QAAoBgE,CAAA,IAIrJ,UAAU,OACT,YAAS9X,GAAA,CAAE8T,SAAkBgE,EAAQ9X,EAAO,aAAc,cAAa,MAAA,EACvE,WAAQ+X,EAAAA,cAAA/X,GAAA,CAAUA,EAAO,aAAc,WAAU,OAAW+T,GAAA,MAAkB+D,CAAM,EAAA,CAAA,SAAA,CAAA,EACpF,OAAIC,EAAAA,cAAA/X,GAAA,CAAc8T,GAAA,OAAe,MAAUE,GAAeF,GAAA,MAAiBgE,CAAM,EAAGhE,GAAA,MAAe,KAASC,GAAA,MAAe,IAAA,EAAA,CAAA,SAAA,CAAA,EAC3H,UAAOhU,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAA,CAAE8T,GAAA,MAAe,KAASC,GAAA,MAAe,IAAA,EAAA,iBAEjD9T,EAAAA,mBAEO,OAAA,CAFD,MAAM,yBAAyB,cAAY,MAAA,GAC/CA,EAAAA,mBAA8C,UAAA,CAArC,KAAK,oBAAoB,KAAK,IAAA,SAEzCA,EAAAA,mBAA2D,OAA3D+X,GAA2DzX,EAAAA,gBAApBuX,EAAM,CAAA,EAAA,CAAA,EAC7C7X,EAAAA,mBAAuC,OAAvCgY,GAAuC1X,EAAAA,gBAAfqS,CAAK,EAAA,CAAA,CAAA,+BAE/B3S,EAAAA,mBAGM,MAAA,CAHD,MAAM,oBAAkB,CAC3BA,EAAAA,mBAAiC,UAAA,CAAxB,KAAK,OAAO,KAAK,IAAA,GAC1BA,qBAAmF,YAA7E,wEAAsE,CAAA,aAK3D1F,EAAA,QAAI,0BAAzBqF,EAAAA,mBA0BWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAzBTT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAwF,MAAA,CAAnF,MAAM,4BAAA,EAA6B,6CAA0C,EAAA,IAClFN,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAmBMY,WAAA,KAAAC,EAAAA,WAlBkB0T,GAAA,MAAS,CAAvB+D,EAAMhd,mBADhB0E,EAAAA,mBAmBM,MAAA,CAjBH,IAAK1E,EACN,MAAM,2BAAA,GAEN+E,EAAAA,mBAAyD,OAAzDkY,GAAyD5X,EAAAA,gBAAd2X,CAAI,EAAA,CAAA,gBAC/CjY,EAAAA,mBAAwC,UAAA,CAA/B,KAAK,cAAc,KAAK,IAAA,YACjCA,EAAAA,mBAWS,SAAA,CAVP,MAAM,8BACL,MAAOuU,GAAA,MAAatZ,CAAG,IAAM,OAAY,OAAOsZ,GAAA,MAAatZ,CAAG,CAAA,EAAA,GAChE,YAAQuZ,GAAevZ,EAAM8E,EAAO,OAA6B,MAAQ,OAAQA,EAAO,OAA6B,KAAK,EAAI,MAAS,CAAA,GAExID,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAA+C,SAAA,CAAvC,MAAM,EAAA,EAAG,wBAAqB,EAAA,IACtCN,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAIuBY,WAAA,KAAAC,EAAAA,WAHK2T,GAAA,MAAU,CAA5BgE,EAASC,oBADnBzY,EAAAA,mBAIuB,SAAA,CAFpB,IAAKyY,GACL,MAAO,OAAOA,EAAI,CAAA,oBACjBD,CAAO,EAAA,EAAAE,EAAA,0CAGfrY,EAAAA,mBAGM,MAAA,CAHD,MAAM,oBAAkB,CAC3BA,EAAAA,mBAAiC,UAAA,CAAxB,KAAK,OAAO,KAAK,IAAA,GAC1BA,qBAAoG,YAA9F,yFAAuF,CAAA,cAM/FN,EAAAA,YAAAC,EAAAA,mBAGM,MAHN2Y,GAGM,CAAA,GAAAxY,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,CAFJE,EAAAA,mBAAwC,UAAA,CAA/B,KAAK,cAAc,KAAK,IAAA,WACjCA,EAAAA,mBAAmD,YAA7C,yCAAsC,EAAA,CAAA,QAMlDA,EAAAA,mBAQM,MARNuY,GAQM,CAPJrY,cAMEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CALA,MAAM,sBACN,YAAU,YACT,MAAOmS,GAAA,MACR,YAAY,sCACX,UAAOxS,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEiT,GAAexT,EAAYO,CAAM,CAAA,EAAA,sBAI/CC,EAAAA,mBAEM,MAFNwY,GAEM,CADJtY,cAAkEL,EAAAA,MAAA6V,EAAAA,QAAA,EAAA,CAAxD,MAAM,OAAO,QAAQ,SAAU,QAAOvC,EAAA,sCAMpDnT,EAAAA,mBAoCQ,QAAA,CApCD,MAAK0B,EAAAA,eAAA,CAAC,eAAc,CAAA,UAAsB6P,GAAA,MAAU,CAAA,CAAA,GACzDvR,EAAAA,mBAMS,SAAA,CALP,MAAM,oBACN,MAAM,kBACL,QAAKF,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAgY,EAAAA,cAAA/X,GAAOwR,GAAA,MAAU,CAAIA,GAAA,MAAU,CAAA,MAAA,CAAA,EAAA,qBAErCvR,EAAAA,mBAAiC,UAAA,CAAxB,KAAK,OAAO,KAAK,IAAA,eAE5BA,EAAAA,mBAMS,SAAA,CALP,MAAM,oBACN,MAAM,oBACL,QAAO2R,EAAA,qBAER3R,EAAAA,mBAAkC,UAAA,CAAzB,KAAK,QAAQ,KAAK,IAAA,eAE7BA,EAAAA,mBAMS,SAAA,CALP,MAAM,oBACN,MAAM,YACL,QAAO8O,CAAA,qBAER9O,EAAAA,mBAAiC,UAAA,CAAxB,KAAK,OAAO,KAAK,IAAA,eAIjBuR,GAAA,qBAAX5R,EAAAA,mBAWM,MAAA,OAXiB,MAAM,eAAgB,sCAAD,IAAA,CAAA,EAAW,CAAA,MAAA,CAAA,EAAA,GACrDG,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAyD,MAAA,CAApD,MAAM,qBAAA,EAAsB,qBAAkB,EAAA,oBACnDL,EAAAA,mBAQSY,EAAAA,SAAA,KAAAC,EAAAA,WAPSgR,GAAA,MAATiH,kBADT9Y,EAAAA,mBAQS,SAAA,CANN,IAAK8Y,EAAM,GACZ,MAAM,qBACL,QAAK1Y,GAAE2R,GAAY+G,EAAM,EAAE,CAAA,GAE5BzY,EAAAA,mBAAwC,UAAA,CAA9B,KAAMyY,EAAM,KAAM,KAAK,IAAA,aACjCzY,EAAAA,mBAA8B,OAAA,KAAAM,EAAAA,gBAArBmY,EAAM,KAAK,EAAA,CAAA,CAAA,8bC9qC9B,MAAM3X,EAAQC,EAMRpC,EAASL,GAAA,EAEThF,EAAOJ,EAAAA,SAAS,IAAMyF,EAAO,KAAK,MAAMmC,EAAM,OAAO,CAAC,EACtD/E,EAAM7C,EAAAA,SACV,IAAMI,EAAK,OAAO,OAAOwH,EAAM,SAAS,GAAK,CAAA,CAAC,EAG1C4X,EAAaxf,EAAAA,SACjB,IACEyF,EAAO,UAAU,UAAYmC,EAAM,SACnCnC,EAAO,UAAU,YAAcmC,EAAM,SAAA,EAGnCyN,EAAerV,EAAAA,SAAS,IAAM,CAClC,MAAMuG,EAAI1D,EAAI,MACd,OAAI0D,EAAE,QAAU,WAAmBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,UAAU,EAC5E9L,EAAE,QAAU,SAAiBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,QAAQ,EACxE9L,EAAE,QAAU,SAAiBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,QAAQ,EACxE9L,EAAE,QAAU,cAAsBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,OAAO,EAC5E9L,EAAE,QAAU,UAAkBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,SAAS,EAC1E9L,EAAE,QAAU,OAAehB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,MAAM,EACpE9L,EAAE,QAAU,WAAmBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,UAAU,EAC5E9L,EAAE,QAAU,WAAmBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,UAAU,EAC5E9L,EAAE,QAAU,kBAA0BhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,cAAc,EACvF9L,EAAE,IAAYhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,KAAK,EACtD,MAAM,QAAQ9L,EAAE,IAAI,EAAUhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,QAAQ,EACzE9L,EAAE,OAAS,SAAiBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,QAAQ,EACvE9L,EAAE,OAAS,OAAehB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,MAAM,EACnE9L,EAAE,OAAS,UAAkBhB,EAAc,KAAM8M,GAAMA,EAAE,KAAO,SAAS,EACtE9M,EAAc,KAAM8M,GAAMA,EAAE,KAAO,MAAM,CAClD,CAAC,EAED,SAASoN,GAAe,CACtBha,EAAO,YAAYmC,EAAM,QAASA,EAAM,SAAS,CACnD,CAEA,SAASgO,EAAUxP,EAAiB,CAClCA,EAAG,gBAAA,EACHX,EAAO,eAAemC,EAAM,QAASA,EAAM,SAAS,CACtD,CAEA,SAASiO,EAAOzP,EAAiB,CAC/BA,EAAG,gBAAA,EACHX,EAAO,YAAYmC,EAAM,QAASA,EAAM,SAAS,CACnD,cAQU4X,EAAA,qBADRvB,EAAAA,YAIEyB,GAAA,OAFC,WAAU7X,EAAA,QACV,aAAYA,EAAA,SAAA,oDAGfpB,EAAAA,mBAiCM,MAAA,OA/BJ,MAAM,QACL,wBAAYgZ,EAAM,CAAA,MAAA,CAAA,CAAA,eAEnB3Y,EAAAA,mBAAsD,OAAA,CAAhD,MAAM,cAAc,cAAY,MAAA,EAAO,KAAE,EAAA,GAE/CA,EAAAA,mBAEO,OAFPJ,GAEO,CADU2O,EAAA,qBAAf5O,EAAAA,mBAAmE,UAAA,OAArC,KAAM4O,EAAA,MAAa,KAAM,KAAK,IAAA,4CAG9DvO,EAAAA,mBAYM,MAZNI,GAYM,CAXJJ,EAAAA,mBAKM,MALNK,GAKM,CAJDwY,kBAAAvY,EAAAA,gBAAAvE,EAAA,MAAI,OAASgF,EAAA,SAAS,EAAG,IAC5B,CAAA,EAAYhF,EAAA,MAAI,wBAAhB4D,EAAAA,mBAA+E,OAA/Ee,GAAgE,UAAQ,+BAC5D3E,EAAA,MAAI,yBAAhB4D,EAAAA,mBAA+D,OAA/DgB,GAA+C,WAAS,+BAC5C5E,EAAA,MAAI,oBAAhB4D,EAAAA,mBAAqD,OAArDuV,GAA0C,MAAI,iCAEhDlV,EAAAA,mBAIM,MAJNqV,GAIM,CAHJrV,EAAAA,mBAAmD,OAAnDsV,GAAmDhV,EAAAA,gBAAnBS,EAAA,SAAS,EAAA,CAAA,EACzCjB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAE,EAAAA,mBAAsC,OAAA,CAAhC,MAAM,iBAAA,EAAkB,IAAC,EAAA,GAC/BA,EAAAA,mBAAkJ,OAAA,KAAAM,EAAAA,gBAAzIT,EAAAA,SAAO,KAAK,OAAI,QAAe0O,SAAc,UAAYA,EAAA,MAAa,UAAaA,EAAA,OAAc,OAASxS,EAAA,MAAI,MAAI,QAAA,EAAA,CAAA,CAAA,KAI/HiE,EAAAA,mBAOM,MAAA,CAPD,MAAM,iBAAkB,oCAAD,IAAA,CAAA,EAAW,CAAA,MAAA,CAAA,EAAA,GACrCA,EAAAA,mBAES,SAAA,CAFD,MAAM,gBAAgB,MAAM,YAAa,QAAO8O,CAAA,mBACtD9O,EAAAA,mBAAiC,UAAA,CAAxB,KAAK,OAAO,KAAK,IAAA,eAE5BA,EAAAA,mBAES,SAAA,CAFD,MAAM,sCAAsC,MAAM,SAAU,QAAO+O,CAAA,mBACzE/O,EAAAA,mBAAkC,UAAA,CAAzB,KAAK,QAAQ,KAAK,IAAA,8QC5FnC,MAAMc,EAAQC,EAIRpC,EAASL,GAAA,EAEThF,EAAOJ,EAAAA,SAAS,IAAMyF,EAAO,KAAK,MAAMmC,EAAM,OAAO,CAAC,EACtD4X,EAAaxf,EAAAA,SACjB,IAAMyF,EAAO,UAAU,UAAYmC,EAAM,SAAWnC,EAAO,UAAU,YAAc,IAAA,EAQ/Ema,EAAa5f,EAAAA,SAAmB,CACpC,IAAK,IAAOI,EAAK,MAAQ,OAAO,KAAKA,EAAK,MAAM,MAAM,EAAI,CAAA,EAC1D,IAAM6D,GAAUwB,EAAO,qBAAqBmC,EAAM,QAAS3D,CAAK,CAAA,CACjE,EAGK4b,EAAkBlgB,EAAAA,IAAI,EAAK,EAEjC,SAASgB,GAAmB,CAC1B8E,EAAO,WAAWmC,EAAM,OAAO,CACjC,CAEA,SAASkY,EAAI1Z,EAAiB,CAC5BA,EAAG,gBAAA,EACHX,EAAO,cAAcmC,EAAM,OAAO,CACpC,CAEA,SAASiO,EAAOzP,EAAiB,CAC/BA,EAAG,gBAAA,EACC,EAAAX,EAAO,KAAK,MAAM,QAAU,IAChCA,EAAO,WAAWmC,EAAM,OAAO,CACjC,CAEA,SAASmY,EAAU1d,EAAkC,CACnDoD,EAAO,WAAWmC,EAAM,QAASvF,CAAK,CACxC,CAOA,SAAS2d,EAAe5Z,EAAqB,CACtCA,EAAG,cACH,MAAM,KAAKA,EAAG,aAAa,KAAK,EAAE,SAAS,+BAA+B,IAC/EA,EAAG,eAAA,EACHA,EAAG,aAAa,WAAa,OAC7ByZ,EAAgB,MAAQ,GAC1B,CAEA,SAASI,EAAgB7Z,EAAqB,CAExCA,EAAG,gBAAkBA,EAAG,WAAwB,MAAQ,GAC9D,CAEA,SAAS8Z,EAAW9Z,EAAqB,CACvCyZ,EAAgB,MAAQ,GACxB,MAAMze,EAAOgF,EAAG,cAAc,QAAQ,+BAA+B,EAChEhF,IACLgF,EAAG,eAAA,EACHX,EAAO,SAASrE,EAAMwG,EAAM,OAAO,EACrC,cAKUxH,EAAA,qBADRqG,EAAAA,mBAwEU,UAAA,OAtER,wBAAM,OAAM,eACmB+Y,EAAA,wBAAqCK,EAAA,mBAAqClZ,EAAAA,MAAAlB,CAAA,EAAO,KAAK,OAAI,MAAA,IAKxH,QAAO9E,CAAA,GAEMgG,QAAAlB,CAAA,EAAO,KAAK,OAAI,QAA9Be,EAAAA,YAAAC,EAAAA,mBA+BS,SA/BTC,GA+BS,CA9BPI,EAAAA,mBAcM,MAdNC,GAcM,CAbJD,qBAAyD,MAAzDI,GAA6B,0BAAQW,EAAA,QAAO,CAAA,EAAA,CAAA,EAC5Cb,EAAAA,YAKE+U,GAAA,CAJA,MAAM,cACL,cAAa3b,EAAA,MAAK,OAAK,GACxB,YAAY,gBACX,sBAAkBwG,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEkZ,EAAS,CAAA,MAAUlZ,EAAM,EAAA,0BAEhDG,EAAAA,YAKE+U,GAAA,CAJA,MAAM,aACL,cAAa3b,EAAA,MAAK,aAAW,GAC9B,YAAY,6CACX,sBAAkBwG,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEkZ,EAAS,CAAA,YAAgBlZ,EAAM,EAAA,4BAGxDC,EAAAA,mBAcM,MAAA,CAdD,MAAM,qBAAsB,oCAAD,IAAA,CAAA,EAAW,CAAA,MAAA,CAAA,EAAA,GACzCA,EAAAA,mBAGS,SAAA,CAHD,MAAM,eAAe,MAAM,iBAAkB,QAAOgZ,CAAA,mBAC1DhZ,EAAAA,mBAAiC,UAAA,CAAxB,KAAK,OAAO,KAAK,IAAA,WAC1BA,EAAAA,mBAAsB,YAAhB,YAAS,EAAA,CAAA,KAEjBA,EAAAA,mBAQS,SAAA,CAPP,MAAM,oCACL,SAAUH,EAAAA,MAAAlB,CAAA,EAAO,KAAK,MAAM,QAAM,EACnC,MAAM,cACL,QAAOoQ,CAAA,mBAER/O,EAAAA,mBAAkC,UAAA,CAAzB,KAAK,QAAQ,KAAK,IAAA,WAC3BA,EAAAA,mBAAmB,YAAb,SAAM,EAAA,CAAA,2CAKlBA,EAAAA,mBA4BM,MAAA,CA3BJ,MAAM,aACL,WAAUkZ,EACV,YAAWC,EACX,OAAMC,CAAA,GAEPlZ,cAgBeL,EAAAA,MAAAwZ,EAAA,EAAA,YAfJP,EAAA,2CAAAA,EAAU,MAAA/Y,GACnB,MAAM,iBACL,UAAW,IACZ,cAAY,cACZ,eAAa,eACb,aAAW,aACX,OAAO,cAAA,qBAGL,IAAiC,EADnCL,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAMEY,WAAA,KAAAC,EAAAA,WALsBsY,EAAA,MAAU,CAAxBvf,EAAM0B,mBADhBkc,EAAAA,YAMEmC,GAAA,CAJC,IAAK/f,EACL,WAAUwH,EAAA,QACV,YAAW9F,EACX,aAAY1B,CAAA,iFAINuf,EAAA,MAAW,SAAM,GAA5BpZ,EAAAA,UAAA,EAAAC,EAAAA,mBAGM,MAHNe,GAGM,CAAA,GAAAZ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAFJE,EAAAA,mBAAiC,UAAA,CAAxB,KAAK,OAAO,KAAK,IAAA,WAC1BA,EAAAA,mBAA0D,YAApD,gDAA6C,EAAA,CAAA,sMC5I3D,MAAMrB,EAASL,GAAA,EAQTib,EAAcrgB,EAAAA,SAAS,IAAMsgB,GAAAA,cAAc7a,EAAO,aAAa,CAAC,EAEhEI,EAAS7F,EAAAA,SAAS,IAAMyF,EAAO,KAAK,OAAS,MAAM,EAEnD8a,EAAmBvgB,EAAAA,SAAS,IAAM6F,EAAO,MAAQ,cAAgB,eAAe,EAChF2a,EAAkBxgB,EAAAA,SAAS,IAAM6F,EAAO,MAAQ,8BAAgC,8BAA8B,EAE9G4a,EAAqBnb,EAAAA,OAAqB,aAActF,EAAAA,SAAS,IAAM,EAAK,CAAC,EAC7E0gB,EAAgB1gB,WAAS,IAAMygB,EAAmB,OAAS,CAAChb,EAAO,KAAK,OAAO,MAAM,EAGrFkb,EAAa3gB,EAAAA,SAAiC,KAAO,CACzD,GAAGqgB,EAAY,MAAM,gBAAA,EACrB,EAGIO,EAAa5gB,EAAAA,SAAiC,KAAO,CACzD,GAAGqgB,EAAY,MAAM,YAAA,EACrB,EAEIQ,EAAY7gB,EAAAA,SAAS,KAAO,CAChC,aAAcqgB,EAAY,MAAM,UAAU,YAC1C,kBAAmBA,EAAY,MAAM,UAAU,WAC/C,eAAgBA,EAAY,MAAM,UAAU,QAC5C,cAAeA,EAAY,MAAM,UAAU,OAC3C,GAAIA,EAAY,MAAM,UAAU,WAAa,CAAE,mBAAoB,IAAO,CAAA,CAAC,EAC3E,8BAIA5Z,EAAAA,mBAoCM,MAAA,CApCD,MAAM,SAAU,uBAAOma,EAAA,KAAU,CAAA,GACpC9Z,EAAAA,mBAkCM,MAlCNga,aAkCM,CAlCD,MAAM,gBAAiB,MAAOH,EAAA,KAAA,EAAoBE,EAAA,KAAS,EAAA,CAErDR,EAAA,MAAY,UAAU,sDAD/B5Z,EAAAA,mBAmBS,SAAA,OAjBP,wBAAM,eAAc,CAAA,cACKE,EAAAA,SAAO,UAAU,OAAI,MAAA,CAAA,CAAA,EAC7C,QAAKC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAgY,EAAAA,cAAA/X,GAAOF,EAAAA,MAAAlB,CAAA,EAAO,aAAU,CAAA,MAAA,CAAA,EAAA,GAE9BuB,EAAAA,YAME+U,GAAA,CALA,MAAM,gBACL,cAAapV,EAAAA,MAAAlB,CAAA,EAAO,KAAK,MACzB,YAAa8a,EAAA,MACb,MAAOG,EAAA,MACP,sBAAkB9Z,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEF,EAAAA,MAAAlB,CAAA,EAAO,SAASoB,CAAM,EAAA,gDAE7CG,EAAAA,YAKE+U,GAAA,CAJA,MAAM,eACL,cAAapV,EAAAA,MAAAlB,CAAA,EAAO,KAAK,YACzB,YAAa+a,EAAA,MACb,sBAAkB5Z,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEF,EAAAA,MAAAlB,CAAA,EAAO,eAAeoB,CAAM,EAAA,6CAIrDC,EAAAA,mBAMM,MANNJ,GAMM,kBALJD,EAAAA,mBAIEY,EAAAA,SAAA,KAAAC,EAAAA,WAHmBX,WAAO,KAAK,MAAK,CAA5ByL,EAAGrQ,mBADbkc,EAAAA,YAIE8C,GAAA,CAFC,IAAKpa,EAAAA,MAAAlB,CAAA,EAAO,KAAK,MAAM1D,CAAG,EAAE,KAAI,IAASA,EACzC,WAAUA,CAAA,iCAID4E,QAAAlB,CAAA,EAAO,KAAK,OAAI,sBAA9BgB,EAAAA,mBAGS,SAAA,OAHkC,MAAM,mBAAoB,QAAKG,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEF,EAAAA,MAAAlB,CAAA,EAAO,QAAA,EAAO,mBACxFqB,EAAAA,mBAAiC,UAAA,CAAxB,KAAK,OAAO,KAAK,IAAA,WAC1BA,EAAAA,mBAAqB,YAAf,WAAQ,EAAA,CAAA,qgBChDtB,MAAMka,EAAgE,CACpE,CAAE,GAAI,UAAc,MAAO,UAAc,KAAM,MAAA,EAC/C,CAAE,GAAI,SAAc,MAAO,SAAc,KAAM,OAAA,EAC/C,CAAE,GAAI,aAAc,MAAO,aAAc,KAAM,cAAA,EAC/C,CAAE,GAAI,aAAc,MAAO,aAAc,KAAM,aAAA,EAC/C,CAAE,GAAI,WAAc,MAAO,WAAc,KAAM,MAAA,CAAO,EAGlDC,EAAgE,CACpE,CAAE,GAAI,UAAW,MAAO,UAAW,KAAM,MAAA,EACzC,CAAE,GAAI,QAAW,MAAO,QAAW,KAAM,YAAA,CAAa,EAGlDC,EAAkE,CACtE,CAAE,GAAI,SAAc,MAAO,SAAc,KAAM,QAAA,EAC/C,CAAE,GAAI,QAAc,MAAO,QAAc,KAAM,YAAA,EAC/C,CAAE,GAAI,aAAc,MAAO,aAAc,KAAM,cAAA,CAAe,EAG1DC,EAAqB,CACzB,CAAE,MAAO,mBAAoB,MAAO,QAAA,EACpC,CAAE,MAAO,iBAAoB,MAAO,MAAA,CAAO,EAEvCC,EAAkB,CACtB,CAAE,MAAO,cAAe,MAAO,aAAA,EAC/B,CAAE,MAAO,UAAe,MAAO,SAAA,CAAU,EAErCC,EAAiB,CACrB,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,QAAW,MAAO,OAAA,CAAQ,EAE/BC,EAAe,CACnB,CAAE,MAAO,OAAW,MAAO,MAAA,EAC3B,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,QAAW,MAAO,OAAA,CAAQ,EAE/BC,EAAqB,CACzB,CAAE,MAAO,SAAU,MAAO,QAAA,EAC1B,CAAE,MAAO,QAAU,MAAO,OAAA,CAAQ,EAE9BC,EAAiB,CACrB,CAAE,MAAO,SAAU,MAAO,EAAA,EAC1B,CAAE,MAAO,QAAU,MAAO,OAAA,EAC1B,CAAE,MAAO,MAAU,MAAO,KAAA,EAC1B,CAAE,MAAO,OAAU,MAAO,MAAA,CAAO,EAE7BC,EAAe,CACnB,CAAE,GAAI,OAAY,MAAO,OAAY,IAAKC,GAAAA,kBAAkB,IAAA,EAC5D,CAAE,GAAI,QAAY,MAAO,QAAY,IAAKA,GAAAA,kBAAkB,KAAA,EAC5D,CAAE,GAAI,WAAY,MAAO,WAAY,IAAKA,GAAAA,kBAAkB,QAAA,EAC5D,CAAE,GAAI,SAAY,MAAO,SAAY,IAAKA,GAAAA,kBAAkB,MAAA,CAAO,EAG/Djc,EAASL,GAAA,EACTS,EAAS7F,EAAAA,SAAS,IAAMyF,EAAO,KAAK,OAAS,MAAM,EAEnDrE,EAAOpB,EAAAA,SAAS,IAAMyF,EAAO,UAAU,IAAI,EAC3CrF,EAAOJ,EAAAA,SAAS,IAAMyF,EAAO,WAAY,EACzCkc,EAAQ3hB,EAAAA,SAA8B,IAAMyF,EAAO,eAAiB,CAAA,CAAE,EACtE/E,EAAYV,EAAAA,SAAS,IAAMyF,EAAO,UAAU,WAAa,EAAE,EAG3Dmc,EAAcjiB,EAAAA,IAAiB,SAAS,EACxCkiB,EAAcliB,EAAAA,IAAiB,SAAS,EACxCmiB,EAAeniB,EAAAA,IAAkB,QAAQ,EAG/CuI,QAAM9G,EAAOoC,GAAM,CACbA,IAAM,OAAQoe,EAAY,MAAQ,UAC7Bpe,IAAM,OAAQqe,EAAY,MAAQ,UAClCre,IAAM,UAASse,EAAa,MAAQ,SAC/C,CAAC,EAED,MAAMC,GAAQ/hB,EAAAA,SAAS,IAAMyF,EAAO,KAAK,KAAK,EACxCuc,EAAWhiB,EAAAA,SAAS,IAAMyF,EAAO,aAAa,EAIpD,SAASa,EAAYF,EAAsB,CACzC,MAAM,EAAIA,EAAG,OACb,OAAI,GAAK,MAAQ,OAAO,GAAM,UAAY,UAAW,EAAW,EAAU,MACtE,GAAK,MAAQ,OAAO,GAAM,UAAY,YAAa,EAAW,EAAU,QACrE,CACT,CAEA,SAASuS,GAAarZ,EAA4B,CAChD,GAAIA,IAAM,IAAMA,GAAK,KAAM,OAC3B,MAAMqD,EAAI,OAAOrD,CAAC,EAClB,OAAO,OAAO,SAASqD,CAAC,EAAIA,EAAI,MAClC,CAEA,SAASsf,EAAW1M,EAAaC,EAAkB,CACjD/P,EAAO,YAAYA,EAAO,UAAU,QAAS/E,EAAU,MAAO,CAAE,CAAC6U,CAAG,EAAGC,EAAO,CAChF,CAEA,SAASuK,EAAUxK,EAAaC,EAAkB,CAChD/P,EAAO,WAAWA,EAAO,UAAU,QAAS,CAAE,CAAC8P,CAAG,EAAGC,EAAO,CAC9D,CAEA,SAAS0M,EAAW3M,EAAaC,EAAkB,CACjD/P,EAAO,SAAS,CAAE,CAAC8P,CAAG,EAAGC,EAAc,CACzC,CAEA,SAAS2M,EAAkBC,EAA8B7M,EAAaC,EAAkB,CACtF/P,EAAO,gBAAgB2c,EAAK,CAAE,CAAC7M,CAAG,EAAGC,EAAO,CAC9C,CAEA,SAAS6M,EAAWC,EAAoD,CACtEJ,EAAW,SAAUI,CAAE,CACzB,CAEA,SAASC,EAAiBC,EAAmB,CAC3C,MAAMrjB,EAAIqjB,EAAI,KAAA,EACT,sBAAsB,KAAKrjB,CAAC,GACjCsG,EAAO,SAAS,CAAE,OAAQ,SAAU,UAAWtG,EAAG,CACpD,CAEA,MAAMsjB,EAAaziB,EAAAA,SAAS,IACtBoB,EAAK,QAAU,OAAe,OAC9BA,EAAK,QAAU,OAAe,OAC3B,OACR,EAEKshB,EAAgB1iB,EAAAA,SAAS,IACzBoB,EAAK,QAAU,OAAeqE,EAAO,KAAK,OAAS,gBACnDrE,EAAK,QAAU,OAAehB,EAAK,OAAO,MAAQ,GAC/CM,EAAU,KAClB,gBAIC8F,YAAA,EAAAC,qBA2WM,MA3WNC,GA2WM,CA1WJI,EAAAA,mBAGS,SAHTC,GAGS,CAFPD,EAAAA,mBAAgD,MAAhDI,GAAgDE,EAAAA,gBAAnBqb,EAAA,KAAU,EAAA,CAAA,EACvC3b,EAAAA,mBAAsD,MAAtDK,GAAsDC,EAAAA,gBAAtBsb,EAAA,KAAa,EAAA,CAAA,CAAA,GAI/BthB,EAAA,QAAI,sBAApBqF,EAAAA,mBAuLWY,WAAA,CAAA,IAAA,GAAA,CAtLTL,cAaaL,EAAAA,MAAAgc,EAAAA,UAAA,EAAA,CAZX,MAAM,cACL,MAAOf,EAAA,MACP,6BAAaA,EAAA,MAAetb,EAAYO,CAAM,GAAqB+a,EAAA,MAAA,qBAGlE,IAAsB,gBADxBnb,EAAAA,mBAOEY,EAAAA,SAAA,KAAAC,aANY0Z,EAAL4B,GADT5b,EAAAA,YAOEL,QAAAkc,EAAAA,KAAA,EAAA,CALC,IAAKD,EAAE,GACP,MAAOA,EAAE,MACT,MAAOA,EAAE,GACT,YAAWA,EAAE,KACd,KAAK,OAAA,kEAIT9b,EAAAA,mBA4JM,MA5JNU,GA4JM,CA3JYoa,EAAA,QAAW,yBAA3Bnb,EAAAA,mBAwCWY,WAAA,CAAA,IAAA,GAAA,CAvCTP,EAAAA,mBAoBM,MApBNW,GAoBM,CAnBJb,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAA0C,MAAA,CAArC,MAAM,YAAA,EAAa,eAAY,EAAA,GACpCA,EAAAA,mBAiBM,MAjBNkV,GAiBM,CAhBJlV,EAAAA,mBAOS,SAAA,CANP,MAAK0B,EAAAA,eAAA,CAAC,WAAU,CAAA,YACOwZ,EAAA,MAAS,cAAW,OAAA,CAAA,CAAA,EAC1C,uBAAOE,EAAU,cAAA,OAAA,EAAA,qBAElBpb,EAAAA,mBAAgC,UAAA,CAAvB,KAAK,MAAM,KAAK,IAAA,WACzBA,EAAAA,mBAAkB,YAAZ,QAAK,EAAA,CAAA,OAEbA,EAAAA,mBAOS,SAAA,CANP,MAAK0B,EAAAA,eAAA,CAAC,WAAU,CAAA,YACOwZ,EAAA,MAAS,cAAW,MAAA,CAAA,CAAA,EAC1C,uBAAOE,EAAU,cAAA,MAAA,EAAA,qBAElBpb,EAAAA,mBAAiC,UAAA,CAAxB,KAAK,OAAO,KAAK,IAAA,WAC1BA,EAAAA,mBAAiB,YAAX,OAAI,EAAA,CAAA,WAIhBE,cAKEL,EAAAA,MAAAsV,EAAAA,QAAA,EAAA,CAJA,MAAM,sBACL,QAAS,KAAK,UAAUkF,CAAkB,EAC1C,MAAOa,EAAA,MAAS,mBAChB,WAAQpb,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEqb,EAAU,qBAAuB5b,EAAYO,CAAM,CAAA,EAAA,8BAEhEG,cAKEL,EAAAA,MAAAsV,EAAAA,QAAA,EAAA,CAJA,MAAM,UACL,QAAS,KAAK,UAAUmF,CAAe,EACvC,MAAOY,EAAA,MAAS,QAChB,WAAQpb,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEqb,EAAU,UAAY5b,EAAYO,CAAM,CAAA,EAAA,8BAErDG,cAKEL,EAAAA,MAAAsV,EAAAA,QAAA,EAAA,CAJA,MAAM,gBACL,QAAS,KAAK,UAAUoF,CAAc,EACtC,MAAOW,EAAA,MAAS,aAChB,WAAQpb,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEqb,EAAU,eAAiB5b,EAAYO,CAAM,CAAA,EAAA,gEAI5C+a,EAAA,QAAW,wBAA3Bnb,EAAAA,mBAmBWY,WAAA,CAAA,IAAA,GAAA,CAlBTL,cAIEL,EAAAA,MAAAgW,EAAAA,QAAA,EAAA,CAHA,MAAM,cACL,QAASqF,EAAA,MAAS,OAAO,KACzB,WAAQpb,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEsb,EAAiB,SAAA,OAAmB7b,EAAYO,CAAM,CAAA,EAAA,sBAEnEG,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,mBACN,YAAY,mBACX,MAAO8a,GAAA,MAAM,QAAQ,iBAAe,GACpC,UAAOnb,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEsb,EAAiB,SAAA,kBAA8B7b,EAAYO,CAAM,GAAA,IAAA,EAAA,oBAE7EG,cAMEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CALA,MAAM,SACN,YAAY,QACZ,cAAY,wCACX,MAAO8a,GAAA,MAAM,QAAQ,QAAM,GAC3B,UAAOnb,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEsb,EAAiB,SAAA,SAAqB7b,EAAYO,CAAM,GAAA,IAAA,EAAA,sDAItD+a,EAAA,QAAW,4BAA3Bnb,EAAAA,mBAoCWY,WAAA,CAAA,IAAA,GAAA,CAnCTL,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,mBACN,YAAY,UACX,MAAO8a,GAAA,MAAM,YAAY,OAAK,GAC9B,UAAOnb,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEsb,EAAiB,aAAA,QAAwB7b,EAAYO,CAAM,GAAA,IAAA,EAAA,oBAEvEG,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,uBACN,YAAY,YACX,MAAO8a,GAAA,MAAM,YAAY,UAAQ,GACjC,UAAOnb,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEsb,EAAiB,aAAA,WAA2B7b,EAAYO,CAAM,GAAA,IAAA,EAAA,oBAE1EG,cAKEL,EAAAA,MAAAsV,EAAAA,QAAA,EAAA,CAJA,MAAM,aACL,QAAS,KAAK,UAAUqF,CAAY,EACpC,MAAOU,EAAA,MAAS,WAAW,UAC3B,WAAQpb,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEsb,EAAiB,aAAA,YAA4B7b,EAAYO,CAAM,CAAA,EAAA,8BAE5EG,cAKEL,EAAAA,MAAAsV,EAAAA,QAAA,EAAA,CAJA,MAAM,mBACL,QAAS,KAAK,UAAUsF,CAAkB,EAC1C,MAAOS,EAAA,MAAS,WAAW,gBAC3B,WAAQpb,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEsb,EAAiB,aAAA,kBAAkC7b,EAAYO,CAAM,CAAA,EAAA,8BAElFC,EAAAA,mBAUM,MAVNqV,GAUM,CATJrV,EAAAA,mBAA0E,MAA1EsV,GAAwB,YAAShV,EAAAA,gBAAG4a,EAAA,MAAS,WAAW,OAAO,EAAG,KAAE,CAAA,EACpEhb,cAOEL,EAAAA,MAAAsW,EAAAA,QAAA,EAAA,CANC,IAAK,EACL,IAAK,IACL,KAAM,EACN,MAAO+E,EAAA,MAAS,WAAW,QAC5B,aAAA,GACC,WAAQpb,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEsb,EAAiB,aAAA,UAA0B7b,EAAYO,CAAM,CAAA,EAAA,wDAK9D+a,EAAA,QAAW,4BAA3Bnb,EAAAA,mBAgCWY,WAAA,CAAA,IAAA,GAAA,CA/BTP,EAAAA,mBAgBM,MAhBNuV,GAgBM,CAfJzV,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAoC,MAAA,CAA/B,MAAM,YAAA,EAAa,SAAM,EAAA,GAC9BA,EAAAA,mBAaM,MAbNgc,GAaM,gBAZJrc,EAAAA,mBAWSY,EAAAA,SAAA,KAAAC,aAVQma,EAARsB,GADTjc,EAAAA,mBAWS,SAAA,CATN,IAAKic,EAAK,GACX,MAAKva,EAAAA,eAAA,CAAC,eAAc,CAAA,YACGwZ,EAAA,MAAS,SAAWe,EAAK,EAAA,CAAE,CAAA,EACjD,MAAKC,EAAAA,eAAA,CAAA,WAAgBD,EAAK,IAAG,EAC7B,MAAOA,EAAK,MACZ,QAAKlc,IAAEwb,EAAWU,EAAK,EAAE,CAAA,iBAE1Bjc,EAAAA,mBAAiC,OAAA,CAA3B,MAAM,kBAAA,EAAkB,KAAA,EAAA,GAC9BA,EAAAA,mBAA6B,OAAA,KAAAM,EAAAA,gBAApB2b,EAAK,KAAK,EAAA,CAAA,CAAA,mBAIzB/b,cAMEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CALA,MAAM,sBACN,YAAY,UACZ,cAAY,mDACX,MAAO+a,EAAA,MAAS,SAAM,SAAgBA,EAAA,MAAS,UAAS,GACxD,WAAQpb,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAE0b,EAAiBjc,EAAYO,CAAM,GAAA,EAAA,EAAA,oBAEhDG,cAMEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CALA,MAAM,cACN,YAAY,+BACZ,cAAY,kDACX,MAAO8a,GAAA,MAAM,YAAU,GACvB,2BAASG,EAAU,aAAe5b,EAAYO,CAAM,GAAK,MAAS,EAAA,sDAIvD+a,EAAA,QAAW,YACzBpb,EAAAA,YAAAC,EAAAA,mBAiBM,MAjBNiW,GAiBM,CAhBJ9V,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAE,EAAAA,mBAAwC,MAAA,CAAnC,MAAM,YAAA,EAAa,aAAU,EAAA,GAClCA,EAAAA,mBAOE,WAAA,CANA,MAAM,UACN,WAAW,QACX,KAAK,KACL,YAAY,2DACX,MAAOib,GAAA,MAAM,WAAS,GACtB,QAAKnb,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEqb,EAAU,YAAerb,EAAO,OAA+B,OAAS,MAAS,EAAA,4BAE3FC,EAAAA,mBAMI,IAAA,CAND,MAAM,eAAa,mBAAC,kDAErB,EAAAA,qBAAmC,YAA7B,wBAAsB,oBAAO,MACnC,EAAAA,qBAA0C,YAApC,+BAA6B,oBAAO,IAC1C,EAAAA,qBAAoB,YAAd,SAAO,oBAAO,uBACpB,EAAAA,qBAA2B,YAArB,UAAc,oBAAO,iBAC7B,CAAA,wCAKNA,EAAAA,mBAQS,SART+V,GAQS,CAPP7V,cAMEL,EAAAA,MAAA6V,EAAAA,QAAA,EAAA,CALA,MAAM,cACN,QAAQ,SACR,KAAK,IACL,YAAU,0BACT,QAAO7V,EAAAA,MAAAlB,CAAA,EAAO,UAAA,8BAMArE,EAAA,iBAAoByE,EAAA,qBAAzCY,EAAAA,mBA0DWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CAzDTL,cAaaL,EAAAA,MAAAgc,EAAAA,UAAA,EAAA,CAZX,MAAM,cACL,MAAOd,EAAA,MACP,+BAAaA,EAAA,MAAevb,EAAYO,CAAM,GAAqBgb,EAAA,MAAA,qBAGlE,IAAsB,gBADxBpb,EAAAA,mBAOEY,EAAAA,SAAA,KAAAC,aANY2Z,EAAL2B,GADT5b,EAAAA,YAOEL,QAAAkc,EAAAA,KAAA,EAAA,CALC,IAAKD,EAAE,GACP,MAAOA,EAAE,MACT,MAAOA,EAAE,GACT,YAAWA,EAAE,KACd,KAAK,OAAA,kEAIT9b,EAAAA,mBAyCM,MAzCNiW,GAyCM,CAxCY8E,EAAA,QAAW,yBAA3Bpb,EAAAA,mBA6BWY,WAAA,CAAA,IAAA,GAAA,CA5BTL,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,YACL,MAAO7G,EAAA,MAAK,KACb,cAAY,sCACX,UAAOwG,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEkZ,EAAS,OAASzZ,EAAYO,CAAM,CAAA,EAAA,oBAEhDG,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,QACL,MAAO7G,EAAA,MAAK,OAAK,GAClB,cAAY,sCACX,UAAOwG,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEkZ,EAAS,QAAUzZ,EAAYO,CAAM,CAAA,EAAA,oBAEjDG,cAIEL,EAAAA,MAAAgW,EAAAA,QAAA,EAAA,CAHA,MAAM,qBACL,QAAO,CAAGvc,EAAA,MAAK,UACf,4BAAU2f,EAAS,YAAczZ,EAAYO,CAAM,EAAI,OAAS,EAAA,EAAA,sBAEnEG,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,cACN,UAAA,GACC,MAAO7G,EAAA,MAAK,aAAW,GACvB,UAAOwG,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEkZ,EAAS,cAAgBzZ,EAAYO,CAAM,CAAA,EAAA,oBAEvDG,cAIEL,EAAAA,MAAAgW,EAAAA,QAAA,EAAA,CAHA,MAAM,2BACL,QAAO,CAAGvc,EAAA,MAAK,gBACf,4BAAU2f,EAAS,kBAAoBzZ,EAAYO,CAAM,EAAI,OAAS,EAAA,EAAA,wDAI3Dgb,EAAA,QAAW,uBACzB5D,cAMEtX,EAAAA,MAAAM,EAAAA,OAAA,EAAA,OALA,MAAM,YACN,YAAY,8BACZ,cAAY,2CACX,MAAO7G,EAAA,MAAK,WAAS,GACrB,2BAAS2f,EAAS,YAAczZ,EAAYO,CAAM,GAAK,MAAS,EAAA,wEAOzEJ,EAAAA,mBA4GWY,EAAAA,SAAA,CAAA,IAAA,GAAA,CA3GTL,cAaaL,EAAAA,MAAAgc,EAAAA,UAAA,EAAA,CAZX,MAAM,cACL,MAAOb,EAAA,MACP,+BAAaA,EAAA,MAAgBxb,EAAYO,CAAM,GAAsBib,EAAA,MAAA,qBAGpE,IAA8E,EADhFtb,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAOEY,EAAAA,SAAA,KAAAC,EAAAA,WANazB,EAAA,MAASqb,EAAW,UAAY0B,EAAE,KAAE,QAAA,EAAiB1B,EAA3D0B,kBADT3E,EAAAA,YAOEtX,EAAAA,MAAAkc,EAAAA,KAAA,EAAA,CALC,IAAKD,EAAE,GACP,MAAOA,EAAE,MACT,MAAOA,EAAE,GACT,YAAWA,EAAE,KACd,KAAK,OAAA,oEAIT9b,EAAAA,mBA2FM,MA3FNkW,GA2FM,CA1FY8E,EAAA,QAAY,wBAA5Brb,EAAAA,mBA6BWY,WAAA,CAAA,IAAA,GAAA,CA3BAxB,EAAA,iDADToY,EAAAA,YAKEtX,EAAAA,MAAA8V,EAAAA,UAAA,EAAA,OAHA,MAAM,gCACL,QAAO,CAAA,CAAIkF,EAAA,MAAM,KACjB,WAAQ/a,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEob,EAAU,OAAS3b,EAAYO,CAAM,CAAA,EAAA,uBAGzChB,EAAA,iDADToY,EAAAA,YAKEtX,EAAAA,MAAA8V,EAAAA,UAAA,EAAA,OAHA,MAAM,SACL,QAAO,CAAA,CAAIkF,EAAA,MAAM,OACjB,WAAQ/a,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEob,EAAU,SAAW3b,EAAYO,CAAM,CAAA,EAAA,uBAG3ChB,EAAA,iDADToY,EAAAA,YAKEtX,EAAAA,MAAA8V,EAAAA,UAAA,EAAA,OAHA,MAAM,WACL,UAAWkF,EAAA,MAAM,UAAQ,CAAA,CAAMA,EAAA,MAAM,SACrC,4BAAUM,EAAU,WAAa3b,EAAYO,CAAM,GAAK,MAAS,EAAA,wBAG3DhB,EAAA,OAAU8b,EAAA,MAAM,OAAI,wBAD7B1D,EAAAA,YAMEtX,EAAAA,MAAAsV,EAAAA,QAAA,EAAA,OAJA,MAAM,SACL,QAAS,KAAK,UAAUuF,CAAc,EACtC,MAAOG,EAAA,MAAM,QAAM,GACnB,4BAAUM,EAAU,SAAW3b,EAAYO,CAAM,GAAK,MAAS,EAAA,2DAIlEoc,aAAmGC,EAAA,OAAA,qBAAA,CAAlE,MAAOvB,EAAA,MAAQ,UAAYjhB,EAAA,MAAY,WAAAuhB,CAAA,+CAG1DH,EAAA,QAAY,uBAA5Brb,EAAAA,mBAsBWY,WAAA,CAAA,IAAA,GAAA,CArBTL,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,YACN,YAAY,sBACX,MAAO0a,EAAA,MAAM,WAAS,GACtB,2BAASM,EAAU,YAAc3b,EAAYO,CAAM,GAAK,MAAS,EAAA,oBAEpEG,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,WACN,YAAY,qBACX,MAAO0a,EAAA,MAAM,UAAQ,GACrB,2BAASM,EAAU,WAAa3b,EAAYO,CAAM,GAAK,MAAS,EAAA,oBAEnEG,cAKEL,EAAAA,MAAAM,EAAAA,OAAA,EAAA,CAJA,MAAM,aACN,YAAY,oBACX,MAAO0a,EAAA,MAAM,YAAU,GACvB,2BAASM,EAAU,aAAe3b,EAAYO,CAAM,GAAK,MAAS,EAAA,kCAErEC,EAAAA,mBAEI,IAAA,CAFD,MAAM,eAAa,mBAAC,cACV,EAAAA,qBAA+D,YAAzD,gCAAkD,CAAA,yCAIvDgb,EAAA,QAAY,4BAA5Brb,EAAAA,mBAkCWY,WAAA,CAAA,IAAA,GAAA,CAjCTL,cAIEL,EAAAA,MAAA8V,EAAAA,UAAA,EAAA,CAHA,MAAM,WACL,QAAO,CAAA,CAAIkF,EAAA,MAAM,SACjB,WAAQ/a,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAEob,EAAU,WAAa3b,EAAYO,CAAM,CAAA,EAAA,sBAG9C8a,EAAA,MAAM,OAAI,wBADlB1D,EAAAA,YAMEtX,QAAAM,EAAAA,OAAA,EAAA,OAJA,MAAM,aACN,KAAK,SACJ,MAAO0a,EAAA,MAAM,WAAS,GACtB,2BAASM,EAAU,YAActJ,GAAarS,EAAYO,CAAM,CAAA,CAAA,EAAA,iDAG3D8a,EAAA,MAAM,OAAI,wBADlB1D,EAAAA,YAMEtX,QAAAM,EAAAA,OAAA,EAAA,OAJA,MAAM,aACN,KAAK,SACJ,MAAO0a,EAAA,MAAM,WAAS,GACtB,2BAASM,EAAU,YAActJ,GAAarS,EAAYO,CAAM,CAAA,CAAA,EAAA,iDAG3D8a,EAAA,MAAM,OAAI,wBADlB1D,EAAAA,YAMEtX,QAAAM,EAAAA,OAAA,EAAA,OAJA,MAAM,MACN,KAAK,SACJ,MAAO0a,EAAA,MAAM,KAAG,GAChB,2BAASM,EAAU,MAAQtJ,GAAarS,EAAYO,CAAM,CAAA,CAAA,EAAA,iDAGrD8a,EAAA,MAAM,OAAI,wBADlB1D,EAAAA,YAMEtX,QAAAM,EAAAA,OAAA,EAAA,OAJA,MAAM,MACN,KAAK,SACJ,MAAO0a,EAAA,MAAM,KAAG,GAChB,2BAASM,EAAU,MAAQtJ,GAAarS,EAAYO,CAAM,CAAA,CAAA,EAAA,0YChgBvE,MAAMpB,EAASL,GAAA,EACT+d,EAAWxjB,EAAAA,IAAI,EAAI,EACnBkG,EAAS7F,EAAAA,SAAS,IAAMyF,EAAO,KAAK,OAAS,MAAM,8BAIvDgB,EAAAA,mBAyBM,MAAA,CAzBD,MAAK+B,EAAAA,eAAA,CAAC,WAAU,CAAA,2BAAA,CAAwC2a,EAAA,2BAAgCtd,EAAA,KAAA,CAAM,CAAA,CAAA,GACjGiB,EAAAA,mBAEQ,QAFRJ,GAEQ,CADNM,EAAAA,YAAgBoc,EAAA,CAAA,GAGlBtc,EAAAA,mBAWU,UAXVC,GAWU,CAVRD,EAAAA,mBAMS,SAAA,CALP,MAAM,wBACL,MAAOqc,EAAA,MAAQ,eAAA,eACf,QAAKvc,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEsc,EAAA,MAAQ,CAAIA,EAAA,MAAA,GAEpBrc,EAAAA,mBAA+D,UAAA,CAArD,KAAMqc,EAAA,MAAQ,aAAA,OAA2B,KAAM,EAAA,oBAE3Drc,EAAAA,mBAEM,MAFNU,GAEM,CADJR,EAAAA,YAAeqc,EAAA,CAAA,KAILxd,EAAA,mCAAdW,EAAAA,YAAAC,EAAAA,mBAMQ,QANRgB,GAMQ,CALNT,EAAAA,YAIkBsc,GAAA,KAAA,CAHL,qBAAkBC,EAAAA,QAC0BC,GADf,CACtCP,aAAqDC,oEAAbM,CAAS,CAAA,EAAA,OAAA,EAAA,CAAA,kMC7B3D,MAAM/d,EAASL,GAAA,EAETqe,EAAQ9jB,EAAAA,IAAI,EAAE,EACd+jB,EAAQ/jB,EAAAA,IAAmB,IAAI,EAE/BgkB,EAAa3jB,WAAS,IAAM,KAAK,UAAUyF,EAAO,SAAU,KAAM,CAAC,CAAC,EAE1EyC,QAAMyb,EAAarkB,GAAOmkB,EAAM,MAAQnkB,EAAI,CAAE,UAAW,GAAM,EAE/D,SAASskB,GAAc,CACrB,GAAI,CACF,MAAMC,EAAS,KAAK,MAAMJ,EAAM,KAAK,EACrC,GAAI,CAACI,GAAU,OAAOA,GAAW,SAC/B,MAAM,IAAI,MAAM,8BAA8B,EAEhDpe,EAAO,WAAWoe,CAAM,EACxBH,EAAM,MAAQ,IAChB,OAAShO,EAAK,CACZgO,EAAM,MAAShO,EAAc,OAC/B,CACF,CAEA,SAASoO,GAAc,CACrBL,EAAM,MAAQE,EAAW,MACzBD,EAAM,MAAQ,IAChB,eAIEld,YAAA,EAAAC,qBAUM,MAVNC,GAUM,CATJI,EAAAA,mBAOM,MAPNC,GAOM,CANJC,cAAoEL,EAAAA,MAAA6V,EAAAA,QAAA,EAAA,CAA1D,MAAM,QAAQ,QAAQ,UAAU,KAAK,IAAK,QAAOoH,CAAA,GAC3D5c,cAAqEL,EAAAA,MAAA6V,EAAAA,QAAA,EAAA,CAA3D,MAAM,UAAU,QAAQ,SAAS,KAAK,IAAK,QAAOsH,CAAA,GAChDJ,EAAA,qBAAZjd,EAAAA,mBAA2D,OAA3DS,GAA2DE,EAAAA,gBAAfsc,EAAA,KAAK,EAAA,CAAA,+BACjD9c,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAE,EAAAA,mBAEO,OAAA,CAFD,MAAM,kBAAiB,sDAE7B,EAAA,EAAA,oBAEFA,EAAAA,mBAAsE,WAAA,sCAAnD2c,EAAK,MAAA5c,GAAE,MAAM,iBAAiB,WAAW,OAAA,2BAAzC4c,EAAA,KAAK,CAAA,sWCtC5B,MAAMhe,EAASL,GAAA,EAYTJ,EAAWhF,EAAAA,SAAS,IAAMyF,EAAO,QAAQ,EACzCse,EAAU/jB,EAAAA,SAAS,IAAM6E,GAAAA,cAAcG,EAAS,KAAK,CAAC,EACtDgf,EAAahkB,EAAAA,SAAS,IAAM,KAAK,UAAUgF,EAAS,KAAK,CAAC,EAC1Dif,EAAYjkB,EAAAA,SAAS,IAAM,CAC/B,MAAMkkB,EAAM,OAAO,KAAKze,EAAO,KAAK,KAAK,EAAE,OAAS,EAChD,KAAK,UAAUA,EAAO,KAAK,KAAK,EAChC,OACJ,eAAQ,IAAI,2BAA4Bye,EAAK,YAAaze,EAAO,KAAK,MAAO,WAAYse,EAAQ,KAAK,EAC/FG,CACT,CAAC,EAEKC,EAAaxkB,EAAAA,IAAgC,IAAI,EAEvD,SAASykB,EAAShe,EAAiB,CACjC,MAAMie,EAAUje,EAAmB,OACnC+d,EAAW,MAAQE,GAAQ,QAAU,IACvC,eAIE7d,YAAA,EAAAC,qBAkCM,MAlCNC,GAkCM,CAjCJI,EAAAA,mBAuBM,MAvBNC,GAuBM,CAnBIgd,EAAA,qBADRtd,EAAAA,mBASE,iBAAA,CAPC,IAAKud,EAAA,OAAcC,EAAA,OAAS,IAC5B,OAAQD,EAAA,MACR,MAAOC,EAAA,MACR,OAAO,OACP,QAAQ,IACP,cAAatd,EAAAA,MAAAlB,CAAA,EAAO,KAAK,OAAI,OAAA,SAAA,SAC7B,cAAU2e,CAAA,8BAEb3d,EAAAA,mBASE,UAAA,CAPC,IAAKud,EAAA,OAAcC,EAAA,OAAS,IAC5B,OAAQD,EAAA,MACR,MAAOC,EAAA,MACR,OAAO,OACP,QAAQ,IACP,cAAatd,EAAAA,MAAAlB,CAAA,EAAO,KAAK,OAAI,OAAA,SAAA,SAC7B,cAAU2e,CAAA,iBAIftd,EAAAA,mBAOQ,QAPRU,GAOQ,aANNV,EAAAA,mBAGM,MAAA,CAHD,MAAM,sBAAoB,CAC7BA,EAAAA,mBAA2C,KAAA,CAAvC,MAAM,gBAAA,EAAiB,aAAW,EACtCA,EAAAA,mBAA+E,IAAA,CAA5E,MAAM,eAAA,EAAgB,oDAAkD,CAAA,OAElEqd,EAAA,OAAX3d,EAAAA,UAAA,EAAAC,EAAAA,mBAA4F,MAA5FgB,GAA4FL,EAAAA,gBAA5C,KAAK,UAAU+c,EAAA,MAAU,KAAA,CAAA,CAAA,EAAA,CAAA,kBACzE1d,qBAA4D,MAA5DuV,GAAmC,qBAAmB,EAAA,41BC1B5D,MAAMpU,EAAQC,EAgCRpI,EAAOqI,EAiCPwc,EAAyC,CAC7C,SAAU,WACV,QAAS,UACT,KAAM,aAAA,EAGFC,EAAc,IAAI,IAAY,OAAO,KAAKD,CAAc,CAAC,EAE/D,SAASE,EAAajF,EAAgD,CACpE,OAAI,OAAOA,GAAU,SACZ,CAAE,GAAIA,EAAO,MAAO+E,EAAe/E,CAAK,GAAKA,CAAA,EAE/C,CAAE,GAAIA,EAAM,GAAI,MAAOA,EAAM,KAAA,CACtC,CAEA,MAAMkF,EAAczkB,EAAAA,SAAS,IAAM4H,EAAM,KAAK,IAAI4c,CAAY,CAAC,EAEzDE,EAAe1kB,EAAAA,SAAS,IAC5BykB,EAAY,MAAM,OAAQ7B,GAAM,CAAC2B,EAAY,IAAI3B,EAAE,EAAE,CAAC,EAAE,IAAKA,GAAMA,EAAE,EAAE,CAAA,EAGnE+B,EAAa3kB,EAAAA,SAAS,IAAM,CAChC,MAAM4kB,EAAQhd,EAAM,KAAK,CAAC,EAC1B,OAAO,OAAOgd,GAAU,SAAWA,EAAQA,GAAO,IAAM,UAC1D,CAAC,EAEKC,EAASllB,EAAAA,IAAYglB,EAAW,KAAK,EAI3C,IAAIG,EAAoB,GAExB,MAAMzf,EAAQ9F,GAAkB,CAC9B,cAAeqI,EAAM,WACrB,QAAUmd,GAAU,CAGlBtlB,EAAK,QAASslB,CAAK,EAGnBtlB,EAAKslB,EAAM,KAAMA,CAAK,CACxB,CAAA,CACD,EAEDC,EAAAA,QAAQ7f,GAAkBE,CAAK,EAE/B,MAAM4f,EAAajlB,EAAAA,SAAS,IAAM4H,EAAM,UAAU,EAClDod,EAAAA,QAAQ,aAAcC,CAAU,EAIhC/c,EAAAA,MACE,IAAM7C,EAAM,SACX9E,GAAS,CACJukB,GACJrlB,EAAK,oBAAqBc,CAA2B,CACvD,EACA,CAAE,KAAM,EAAA,CAAK,EAGf2H,EAAAA,MACE,IAAMN,EAAM,WACXrH,GAAS,CACR,GAAI,CAACA,EAAM,OACX,MAAM2kB,EAAW,KAAK,UAAU3kB,CAAI,EAC9BkE,EAAU,KAAK,UAAUY,EAAM,QAAQ,EACzC6f,IAAazgB,IACjBqgB,EAAoB,GACpBzf,EAAM,WAAW9E,CAAI,EACrBukB,EAAoB,GACtB,EACA,CAAE,KAAM,EAAA,CAAK,EAKfK,EAAAA,UAAU,IAAM,CACTvd,EAAM,qBACTwd,wBAAA,EACAC,wBAAA,GAGEzd,EAAM,MACRvC,EAAM,QAAQuC,EAAM,IAAI,EAE1B,OAAO,iBAAiB,UAAW0d,CAAK,CAC1C,CAAC,EAGDpd,EAAAA,MACE,IAAMN,EAAM,KACXrH,GAAS,CACJA,GAAM8E,EAAM,QAAQ9E,CAAI,CAC9B,CAAA,EAGFglB,EAAAA,gBAAgB,IAAM,CACpB,OAAO,oBAAoB,UAAWD,CAAK,CAC7C,CAAC,EAID,SAASA,EAAMlf,EAAyB,CAEtC,GAAIA,EAAG,MAAQ,SAAU,CACvB,MAAM6R,EAAS7R,EAAG,OAMlB,GAJE6R,GAAQ,mBACRA,GAAQ,UAAY,SACpBA,GAAQ,UAAY,YACpBA,GAAQ,UAAY,SACR,CACXA,EAAuB,KAAA,EACxB,MACF,CACI5S,EAAM,UAAU,YAAc,MAChCA,EAAM,WAAWA,EAAM,UAAU,OAAO,EAE1C,MACF,EAEce,EAAG,SAAWA,EAAG,WAE3BA,EAAG,MAAQ,KAAO,CAACA,EAAG,UACxBA,EAAG,eAAA,EACHf,EAAM,KAAA,IACIe,EAAG,MAAQ,KAAOA,EAAG,UAAaA,EAAG,MAAQ,OACvDA,EAAG,eAAA,EACHf,EAAM,KAAA,GAEV,eAIEmB,YAAA,EAAAC,qBAgEM,MAhENC,GAgEM,CA/DJuc,EAAAA,WAAsBC,EAAA,OAAA,SAAA,CAAA,EAAA,OAAA,EAAA,EAEtBpc,EAAAA,mBAwCS,SAxCTC,GAwCS,CAvCPkc,EAAAA,WAKOC,oBALP,IAKO,CAJOrb,EAAA,uCAAZrB,EAAAA,YAAAC,EAAAA,mBAGM,MAHNS,GAGM,CAFJN,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAE,EAAAA,mBAAuC,MAAA,CAAlC,MAAM,mBAAA,EAAoB,KAAE,EAAA,GACjCA,EAAAA,mBAAoD,KAApDK,GAAoDC,EAAAA,gBAAlBS,EAAA,UAAU,EAAA,CAAA,CAAA,SAIhDf,EAAAA,mBAUM,MAVNU,GAUM,kBATJf,EAAAA,mBAQSY,EAAAA,SAAA,KAAAC,EAAAA,WAPKmd,EAAA,MAAL7B,kBADTnc,EAAAA,mBAQS,SAAA,CANN,IAAKmc,EAAE,GACR,wBAAM,aAAY,CAAA,YACKiC,UAAWjC,EAAE,EAAA,CAAE,CAAA,EACrC,QAAK/b,GAAEge,EAAA,MAASjC,EAAE,EAAA,EAEhBxb,EAAAA,gBAAAwb,EAAE,KAAK,EAAA,GAAAnb,EAAA,YAIdX,EAAAA,mBAmBM,MAnBNkV,GAmBM,CAlBJiH,aAiBOC,EAAA,OAAA,UAAA,CAjBe,MAAOvc,EAAAA,MAAAtB,CAAA,CAAA,EAA7B,IAiBO,CAhBL2B,cAOEL,EAAAA,MAAAuV,EAAAA,YAAA,EAAA,CANA,KAAK,0BACL,QAAQ,WACR,KAAK,KACL,MAAM,YACL,SAAQ,CAAGvV,EAAAA,MAAAtB,CAAA,EAAM,QACjB,QAAKuB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEF,EAAAA,MAAAtB,CAAA,EAAM,KAAA,EAAI,uBAEpB2B,cAOEL,EAAAA,MAAAuV,EAAAA,YAAA,EAAA,CANA,KAAK,kBACL,QAAQ,WACR,KAAK,KACL,MAAM,aACL,SAAQ,CAAGvV,EAAAA,MAAAtB,CAAA,EAAM,QACjB,QAAKuB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEF,EAAAA,MAAAtB,CAAA,EAAM,KAAA,EAAI,gCAM1ByB,EAAAA,mBAgBO,OAhBPqV,GAgBO,kBAfLnV,EAAAA,YAIcwe,GAAA,KAAA,CAHD,qBAAkBjC,EAAAA,QAC0BC,GADf,CACtCP,aAAqDC,oEAAbM,CAAS,CAAA,EAAA,OAAA,EAAA,CAAA,uBAFhCqB,EAAA,QAAM,UAAA,CAAA,GAKTA,EAAA,QAAM,yBAAxB5G,EAAAA,YAA0CwH,GAAA,CAAA,IAAA,CAAA,CAAA,+BAC3BZ,EAAA,QAAM,sBAArB5G,EAAAA,YAAoCyH,GAAA,CAAA,IAAA,CAAA,CAAA,gDACpCjf,EAAAA,mBAOMY,EAAAA,SAAA,KAAAC,EAAAA,WANUod,EAAA,MAAPiB,mCADTlf,EAAAA,mBAOM,MAAA,CAJH,IAAKkf,EACN,MAAM,mBAAA,GAEN1C,aAAmCC,EAAA,OAAtByC,EAAG,CAAG,MAAOhf,EAAAA,MAAAtB,CAAA,GAAK,OAAA,EAAA,CAAA,KAJvB,CAAAugB,EAAAA,MAAAf,EAAA,QAAWc,CAAG,CAAA,YAQ1B1C,aAAoCC,EAAA,OAAA,QAAA,CAAhB,MAAOvc,EAAAA,MAAAtB,CAAA,GAAK,OAAA,EAAA,CAAA","x_google_ignoreList":[4]}