@bettercms-ai/kit 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/lossy.d.ts +12 -4
- package/dist/adapters/lossy.js +19 -8
- package/dist/adapters/lossy.js.map +1 -1
- package/dist/adapters/prod-types.d.ts +46 -14
- package/dist/adapters/prod-types.js +37 -35
- package/dist/adapters/prod-types.js.map +1 -1
- package/dist/adapters/schema.d.ts +39 -0
- package/dist/adapters/schema.js +281 -82
- package/dist/adapters/schema.js.map +1 -1
- package/dist/context.d.ts +39 -0
- package/dist/context.js +40 -1
- package/dist/context.js.map +1 -1
- package/dist/controls/form-picker-register.d.ts +7 -1
- package/dist/controls/form-picker-register.js +1 -5
- package/dist/controls/form-picker-register.js.map +1 -1
- package/dist/controls/icon.d.ts +1 -1
- package/dist/controls/icon.js +1 -1
- package/dist/controls/icon.js.map +1 -1
- package/dist/controls/link.d.ts +11 -4
- package/dist/controls/link.js +120 -202
- package/dist/controls/link.js.map +1 -1
- package/dist/controls/location.js +3 -8
- package/dist/controls/location.js.map +1 -1
- package/dist/controls/media.d.ts +0 -14
- package/dist/controls/media.js +52 -95
- package/dist/controls/media.js.map +1 -1
- package/dist/controls/reference-services.d.ts +23 -2
- package/dist/controls/reference.d.ts +2 -2
- package/dist/controls/reference.js +79 -28
- package/dist/controls/reference.js.map +1 -1
- package/dist/controls/rich-text/article-shell.d.ts +145 -0
- package/dist/controls/rich-text/article-shell.js +514 -0
- package/dist/controls/rich-text/article-shell.js.map +1 -0
- package/dist/controls/rich-text/author.d.ts +25 -0
- package/dist/controls/rich-text/author.js +107 -0
- package/dist/controls/rich-text/author.js.map +1 -0
- package/dist/controls/rich-text/blocks.d.ts +19 -2
- package/dist/controls/rich-text/blocks.js +275 -638
- package/dist/controls/rich-text/blocks.js.map +1 -1
- package/dist/controls/rich-text/button.d.ts +23 -0
- package/dist/controls/rich-text/button.js +81 -0
- package/dist/controls/rich-text/button.js.map +1 -0
- package/dist/controls/rich-text/catalog.d.ts +2 -5
- package/dist/controls/rich-text/catalog.js +121 -7
- package/dist/controls/rich-text/catalog.js.map +1 -1
- package/dist/controls/rich-text/checklist.d.ts +24 -0
- package/dist/controls/rich-text/checklist.js +115 -0
- package/dist/controls/rich-text/checklist.js.map +1 -0
- package/dist/controls/rich-text/codec.d.ts +15 -1
- package/dist/controls/rich-text/codec.js +11 -1
- package/dist/controls/rich-text/codec.js.map +1 -1
- package/dist/controls/rich-text/columns.d.ts +41 -0
- package/dist/controls/rich-text/columns.js +181 -0
- package/dist/controls/rich-text/columns.js.map +1 -0
- package/dist/controls/rich-text/control.js +1 -0
- package/dist/controls/rich-text/control.js.map +1 -1
- package/dist/controls/rich-text/dom.d.ts +84 -4
- package/dist/controls/rich-text/dom.js +171 -10
- package/dist/controls/rich-text/dom.js.map +1 -1
- package/dist/controls/rich-text/editor.d.ts +4 -2
- package/dist/controls/rich-text/editor.js +199 -26
- package/dist/controls/rich-text/editor.js.map +1 -1
- package/dist/controls/rich-text/embed.d.ts +28 -0
- package/dist/controls/rich-text/embed.js +210 -0
- package/dist/controls/rich-text/embed.js.map +1 -0
- package/dist/controls/rich-text/footnote.d.ts +41 -0
- package/dist/controls/rich-text/footnote.js +185 -0
- package/dist/controls/rich-text/footnote.js.map +1 -0
- package/dist/controls/rich-text/gallery.d.ts +28 -0
- package/dist/controls/rich-text/gallery.js +167 -0
- package/dist/controls/rich-text/gallery.js.map +1 -0
- package/dist/controls/rich-text/link-form.d.ts +13 -1
- package/dist/controls/rich-text/link-form.js +41 -7
- package/dist/controls/rich-text/link-form.js.map +1 -1
- package/dist/controls/rich-text/ops.js +6 -0
- package/dist/controls/rich-text/ops.js.map +1 -1
- package/dist/controls/rich-text/related.d.ts +49 -0
- package/dist/controls/rich-text/related.js +233 -0
- package/dist/controls/rich-text/related.js.map +1 -0
- package/dist/controls/rich-text/toc.d.ts +47 -0
- package/dist/controls/rich-text/toc.js +160 -0
- package/dist/controls/rich-text/toc.js.map +1 -0
- package/dist/controls/slot-register.d.ts +6 -1
- package/dist/controls/slot-register.js +1 -4
- package/dist/controls/slot-register.js.map +1 -1
- package/dist/core/core.d.ts +11 -3
- package/dist/core/core.js +24 -6
- package/dist/core/core.js.map +1 -1
- package/dist/core/facets.d.ts +16 -0
- package/dist/core/facets.js +17 -1
- package/dist/core/facets.js.map +1 -1
- package/dist/core/index.js +2 -2
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/ledgers/exclusions.v1.js +141 -0
- package/dist/ledgers/exclusions.v1.js.map +1 -0
- package/dist/library/coverage.d.ts +13 -1
- package/dist/library/coverage.js +12 -1
- package/dist/library/coverage.js.map +1 -1
- package/dist/library/kit-catalog.json +156 -153
- package/dist/schema/types.d.ts +17 -0
- package/dist/schema/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/testing/coverage-extras.d.ts +8 -0
- package/dist/testing/coverage-extras.js +44 -0
- package/dist/testing/coverage-extras.js.map +1 -0
- package/dist/testing/exclusions.d.ts +30 -0
- package/dist/testing/exclusions.js +13 -0
- package/dist/testing/exclusions.js.map +1 -0
- package/dist/ui/autocomplete.d.ts +29 -1
- package/dist/ui/autocomplete.js +102 -47
- package/dist/ui/autocomplete.js.map +1 -1
- package/dist/ui/button.js +3 -5
- package/dist/ui/button.js.map +1 -1
- package/dist/ui/index.js +2 -2
- package/dist/ui/overlay.d.ts +4 -1
- package/dist/ui/overlay.js +2 -1
- package/dist/ui/overlay.js.map +1 -1
- package/dist/ui/toast.js +1 -1
- package/package.json +8 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../src/adapters/schema.ts"],"sourcesContent":["/**\n * SCHEMA ADAPTERS — the production schema language ↔ the V2 schema language (TypeSchema).\n *\n * toTypeSchema(model) prod content model {fields, fieldsets} → TypeSchema\n * propsToTypeSchema(component) prod component props (ComponentPropDef[]) → TypeSchema\n * fromTypeSchema(v2, \"fields\") TypeSchema → prod content model, plus every V2 feature prod cannot hold\n * fromTypeSchema(v2, \"props\") TypeSchema → prod component props, likewise\n * planFromProd / planToProd one field's stored prod value ↔ its V2 value, by the plan a read hands back\n * (ToTypeSchemaOptions.plans) or `leafValuePlan` builds for a leaf field\n *\n * The read side takes BOTH prod dialects: the old shapes (group / repeater, array zones, showIf eq / neq / in / isSet)\n * and the F1 keys (object, openMode, advanced, helpMore, recommendedMax, config.scale, ui.layout rows / chips /\n * gallery, ui.preview.fallback, fieldset collapsible / columns / layout, notEmpty / empty), and the F1.x keys landed on\n * origin/dev 81f385ff3 (validation parity, option meta, the V2 chrome keys and types, reference / video / array / longtext\n * props, prop group keys and nesting, the V2 icon vocabulary, localized). What V2 cannot show is reported through\n * `onLoss`, never dropped silently.\n *\n * The write side returns `{ schema, lossy, catalog }`: `toTypeSchema(fromTypeSchema(v2, t).schema)` equals `v2` minus\n * exactly the `lossy` and `catalog` paths. `lossy` is what prod drops; `catalog` is metadata the dock never stores, set\n * by the host at seeding time (block icon, category, kind, variants…). Storage stays prod's; value shapes go through\n * ./values.\n */\nimport type { Condition, FieldGroup, FieldSchema, Fieldset as V2Fieldset, Option, PreviewConfig, ScaleSchema, ScaleValue, TypeSchema } from \"../schema/types\";\nimport { CATALOG, FEATURES, isHostConfigKey, type CatalogFeature, type CatalogItem, type LossyFeature, type LossyItem } from \"./lossy\";\nimport { dockIconOf, tablerIconOf } from \"./icons\";\nimport { slotChildrenFromStored, slotChildrenToStored } from \"../controls/slot-services\";\nimport { isDataTableProp, tableConfigFromOptions, tableOptionsFromConfig } from \"../controls/table/prod\";\nimport {\n type ArrayItemSettings,\n COMPONENT_PREVIEW_FALLBACK_MAX,\n COMPONENT_PREVIEW_KEY_MAX,\n CONTROL_TYPES,\n FIELD_HELP_MAX,\n FIELDSET_DESCRIPTION_MAX,\n FIELDSET_NAME_MAX,\n FIELDSETS_MAX,\n HELP_MORE_MAX,\n ITEM_LABEL_MAX,\n ITEM_NAME_RE,\n ITEM_TITLE_MAX,\n LOCK_REASON_MAX,\n MAX_FIELD_DEPTH,\n NUMBER_UNIT_MAX,\n OPTION_DESCRIPTION_MAX,\n PATTERN_MAX,\n PATTERN_MESSAGE_MAX,\n PREVIEW_FALLBACK_MAX,\n PROP_GROUP_DESCRIPTION_MAX,\n PROP_GROUP_LABEL_MAX,\n PROP_GROUP_ORDER_MAX,\n PROP_HELP_MAX,\n PROP_PLACEHOLDER_MAX,\n PROP_TAB_ID_MAX,\n PROP_TAB_MAX,\n RATING_DEFAULT_MAX,\n RATING_MAX,\n RATING_MAX_STOPS,\n SCALE_CSS_MAX,\n SCALE_LABEL_MAX,\n SCALE_PRESETS_MAX,\n SCALE_STEPS_MAX,\n SCALE_TITLE_MAX,\n SCALE_TOKEN_VALUE_MAX,\n SYNCED_FROM_MAX,\n TAB_MAX,\n TAB_NAME_MAX,\n TAGS_ITEMS_MAX,\n UI_CONTROLS,\n UI_PLACEHOLDER_MAX,\n UI_ROWS_MAX,\n type ChoiceOption,\n type ComponentCategory,\n type DockIconName,\n type ComponentPropDef,\n type ComponentSubField,\n type ContentModelField,\n type FieldConfig,\n type Fieldset,\n type FieldUi,\n type NumberScale,\n type OpenMode,\n type ProdComponent,\n type ProdContentModel,\n type PropGroup,\n type PropTab,\n type PropUi,\n type SelectOption,\n type ShowIf,\n type ShowIfRule,\n type UiControl,\n type ComponentPreview,\n type UiPreview,\n} from \"./prod-types\";\nimport {\n buttonFromProd,\n buttonToProd,\n datetimeFromProd,\n datetimeToProd,\n imageFromProd,\n imageToProd,\n isCropRect,\n linkFromProd,\n linkToProd,\n listFromProd,\n listToProd,\n ratingFromProd,\n ratingToProd,\n referenceFromProd,\n referenceToProd,\n scaleFromProd,\n scaleToProd,\n videoFromProd,\n videoToProd,\n typedRowsFromProd,\n typedRowsToProd,\n zoneListFromProd,\n zoneListToProd,\n type ListItemType,\n type RatingScale,\n type V2ButtonValue,\n type V2ImageValue,\n type V2LinkValue,\n type V2VideoValue,\n} from \"./values\";\n\nexport type { CatalogItem, LossyItem } from \"./lossy\";\nexport type AdapterTarget = \"fields\" | \"props\";\nexport interface FromTypeSchemaResult<S> {\n schema: S;\n /**\n * fields lane: the kind:'block' models a modular field's config.blockSlugs names, one per item type (created before\n * the model that uses them). Empty in the props lane.\n */\n blockModels: ProdContentModel[];\n lossy: LossyItem[];\n catalog: CatalogItem[];\n}\nexport interface ToTypeSchemaOptions {\n /** Prod features V2 cannot show (a neq condition, a table layout, a component slot…), reported as they are dropped. */\n onLoss?: (item: { path: string; feature: string; reason: string }) => void;\n /** The block models a modular field's blockSlugs name: each item type's fields are read from its model. */\n blockModels?: ProdContentModel[];\n /**\n * Filled with each top-level field's value plan (field name → plan): how its stored prod value crosses to the V2 value\n * and back, through `planFromProd` / `planToProd`. The same plan this read used for the field's initialValue.\n */\n plans?: Map<string, ValuePlan>;\n}\n\ntype Obj = Record<string, unknown>;\nconst isObj = (v: unknown): v is Obj => !!v && typeof v === \"object\" && !Array.isArray(v);\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (Array.isArray(a) || Array.isArray(b)) return Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.every((x, i) => deepEqual(x, b[i]));\n if (!isObj(a) || !isObj(b)) return false;\n const keys = new Set([...Object.keys(a), ...Object.keys(b)].filter((k) => a[k] !== undefined || b[k] !== undefined));\n return [...keys].every((k) => deepEqual(a[k], b[k]));\n}\n\n/* ── naming conventions shared by both directions ────────────────────── */\nconst singular = (t: string) => (t.endsWith(\"ies\") ? `${t.slice(0, -3)}y` : t.endsWith(\"s\") && !t.endsWith(\"ss\") ? t.slice(0, -1) : t);\nconst kebab = (s: string) =>\n s\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"schema\";\nconst camel = (s: string) => s.replace(/-([a-z0-9])/g, (_, c: string) => c.toUpperCase());\n/** The slug a V2 schema name is stored under (a component's, when the host seeds a /kit block): `textBlock` → `text-block`. */\nexport const schemaSlugOf = kebab;\nconst capitalize = (s: string) => s.charAt(0).toUpperCase() + s.slice(1);\nconst ZONE_NAMES: ReadonlySet<string> = new Set(typeof Intl.supportedValuesOf === \"function\" ? [...Intl.supportedValuesOf(\"timeZone\"), \"UTC\"] : [\"UTC\"]);\n/** An IANA zone name (isTimeZoneName): ICU's canonical list, or a current name Intl itself accepts (Asia/Kolkata). */\nconst isZone = (z: string) => {\n if (ZONE_NAMES.has(z)) return true;\n if (!/^[A-Za-z]+(?:\\/[A-Za-z0-9_+-]+)+$/.test(z)) return false;\n try {\n new Intl.DateTimeFormat(\"en\", { timeZone: z });\n return true;\n } catch {\n return false;\n }\n};\n\n/** The item type of a single-type array, as both directions name it when prod has no name for it. */\nconst conventionItem = (fieldName: string, fieldTitle: string, itemLabel?: string) => ({\n name: singular(fieldName),\n title: itemLabel ?? singular(fieldTitle),\n});\n\n/** A condition's value as the sibling's type reads it (prod stores rule values as strings). */\nfunction coerceRuleValue(siblingType: string | undefined, s: string): unknown {\n if (siblingType === \"boolean\") return s === \"true\" ? true : s === \"false\" ? false : s;\n if ((siblingType === \"number\" || siblingType === \"rating\") && s.trim() !== \"\" && Number.isFinite(Number(s))) return Number(s);\n return s;\n}\n\n/* ── type tables ─────────────────────────────────────────────────────── */\n/** V2 primitive types → the same-valued prod field type (fields lane). */\nconst FIELD_TYPE: Partial<Record<FieldSchema[\"type\"], ContentModelField[\"type\"]>> = {\n string: \"text\", text: \"longtext\", richtext: \"richtext\", number: \"number\", rating: \"rating\", boolean: \"boolean\", slug: \"slug\",\n email: \"email\", date: \"date\", datetime: \"datetime\", color: \"color\", select: \"select\", multiselect: \"multiselect\", tags: \"tags\",\n image: \"image\", file: \"file\", icon: \"icon\", link: \"link\", button: \"button\", reference: \"reference\", json: \"json\", geopoint: \"location\",\n // DESIGN §8.3 prefers a link, but only a text field enforces a URL's pattern and length: text + config.inputType \"url\"\n url: \"text\", code: \"code\", video: \"video\",\n};\n/** V2 primitive types → prop types. */\nconst PROP_TYPE: Partial<Record<FieldSchema[\"type\"], ComponentPropDef[\"type\"]>> = {\n string: \"text\", text: \"longtext\", video: \"video\", richtext: \"richtext\", number: \"number\", rating: \"rating\", boolean: \"boolean\", slug: \"slug\",\n email: \"email\", date: \"date\", datetime: \"datetime\", color: \"color\", select: \"select\", multiselect: \"multiselect\", tags: \"tags\",\n image: \"image\", file: \"file\", icon: \"icon\", link: \"link\", button: \"button\", json: \"json\", geopoint: \"location\", url: \"url\", code: \"code\",\n};\n/** Field types whose `config` the backend parses strictly (unknown keys stripped or refused). */\nconst STRICT_CONFIG: ReadonlySet<string> = new Set([\n \"array\", \"reference\", \"multi-reference\", \"multiReference\", \"date\", \"datetime\", \"component-ref\", \"modular\", \"sections\", \"tags\", \"rating\", \"code\", \"video\",\n \"table\", \"slot\",\n]);\n/** V2 list item types → prod `config.itemType` (ARRAY_ITEM_TYPES); a V2 `text` item reads back as `string`. */\nconst PRIM_ITEM: Partial<Record<FieldSchema[\"type\"], ListItemType>> = {\n string: \"text\", text: \"text\", number: \"number\", date: \"date\", image: \"image\", link: \"link\", richtext: \"richtext\",\n};\nconst ENTRY_TARGET = (t: string) => ![\"page\", \"form\", \"shopify\", \"collection\"].includes(t);\n/** The non-entry targets a prop reference stores in config.targets (backend reference-target-config.ts REF_TARGET_KINDS). */\nconst REF_TARGET_KINDS: readonly string[] = [\"page\", \"form\", \"collection\"];\n/**\n * A prop reference whose only target is Shopify (backend reference-target-config.ts UNSUPPORTED_TARGETS refuses it by\n * name) is stored as locked text holding the id (a list of them: a list of text), so the value stays the plain gid\n * string V2 holds. This lock reason is the marker the read side turns back into V2's reference (allowed deviation\n * \"shopify reference\").\n */\nexport const SHOPIFY_REF_LOCK = \"A Shopify product id. No Shopify integration backs a reference in BetterCMS yet, so the id is kept as it is.\";\nconst shopifyOnly = (r: FieldSchema[\"reference\"]) => !!r?.to?.length && r.to.every((t) => t === \"shopify\");\n/** backend REFERENCE_FILTER_MAX; parameters ($x) and the parent document (^) are refused there (reference_filter_invalid). */\nconst REFERENCE_FILTER_MAX = 500;\nconst filterKept = (f: unknown): f is string => typeof f === \"string\" && f.trim() !== \"\" && f.length <= REFERENCE_FILTER_MAX && !/[$^]/.test(f);\n/** The old rating: a number with ui.control \"rating\" and these bounds read back as no `numeric` (read side only). */\nconst RATING_CONFIG = { min: 0, max: 5, step: 0.5 } as const;\n/**\n * A V2 rating sets no step and holds any number on its scale (a 4.8 average). Prod's unset step is 1, which refuses\n * 4.8 (rating_value_invalid), so a rating with no step is written with step 0.1 (≤ RATING_MAX_STOPS stops on a 1–10\n * scale) and that step reads back as none; a prod rating with no step reads back as its real step, 1.\n */\nconst V2_RATING_STEP = 0.1;\n/**\n * V2 block-picker category (KitCategory, and the core examples' own) → the nearest prod ComponentCategory. A category\n * with no row has no prod twin; the server defaults the component to \"custom\".\n */\nexport const CATEGORY_TO_PROD: Readonly<Record<string, ComponentCategory>> = {\n \"Navigation & chrome\": \"navbar\",\n Heroes: \"hero\",\n \"Features & storytelling\": \"content\",\n \"Social proof\": \"social-proof\",\n \"Media & galleries\": \"content\",\n Commerce: \"conversion\",\n \"Pricing & plans\": \"conversion\",\n \"Conversion & forms\": \"conversion\",\n \"Listings & feeds\": \"content\",\n \"Long-form & docs\": \"content\",\n \"Company & people\": \"content\",\n \"Events & places\": \"content\",\n \"Data & interactive\": \"section\",\n Navigation: \"navbar\",\n Hero: \"hero\",\n Content: \"content\",\n Layout: \"section\",\n};\n/** The field types a kind:'block' model may hold (backend block-model-mapping.ts FIELD_PRIMITIVE). */\nconst BLOCK_FIELD_TYPES: ReadonlySet<string> = new Set([\n \"text\", \"longtext\", \"richtext\", \"image\", \"link\", \"slug\", \"email\", \"phone\", \"color\", \"select\", \"number\", \"rating\", \"date\", \"datetime\", \"boolean\",\n]);\n/** A slot prop's config.minItems / maxItems cap (SLOT_ITEMS_CAP, componentPropDefSchema). */\nconst SLOT_ITEMS_CAP = 50;\n/** A table prop's rows and an array prop's items: their config.minItems / maxItems cap (LIST_ITEMS_CAP). */\nconst LIST_ITEMS_CAP = 500;\n/** backend slotAllowIssues: a slot's config.allow holds 1–50 block names of 1–64 characters, no repeats. */\nconst SLOT_ALLOW_MAX = 50;\nconst SLOT_ALLOW_NAME_MAX = 64;\n/** Backend dock-vocabulary.ts SLIDER_MAX_STOPS: a slider's (max − min) / step. */\nconst SLIDER_MAX_STOPS = 1000;\n/**\n * The field types prod's unique flag accepts (uniqueFlagRules): a comparable scalar (UNIQUE_FIELD_TYPES, no two entries\n * share it; a reference only to one model) or a list (UNIQUE_ITEMS_FIELD_TYPES, no item repeats).\n */\nconst UNIQUE_TYPES: ReadonlySet<string> = new Set([\n \"text\", \"longtext\", \"slug\", \"email\", \"phone\", \"link\", \"number\", \"select\", \"reference\", \"date\",\n \"array\", \"multiselect\", \"tags\", \"multi-reference\",\n]);\n/** Prop types whose value is a list (UNIQUE_LIST_PROP_TYPES), and the sub-field types a table row compares (UNIQUE_ROW_PROP_TYPES). */\nconst UNIQUE_LIST_PROPS: ReadonlySet<string> = new Set([\"multiselect\", \"tags\", \"multi-reference\", \"table\", \"array\"]);\nconst UNIQUE_ROW_PROPS: ReadonlySet<string> = new Set([\"text\", \"url\", \"slug\", \"email\", \"phone\", \"number\", \"select\", \"date\"]);\n/** Types measured by minLength / maxLength (fields: LENGTH_FIELD_TYPES; props: LENGTH_TWIN), and those that take a pattern. */\nconst LENGTH_FIELDS: ReadonlySet<string> = new Set([\"text\", \"longtext\", \"richtext\", \"document\"]);\nconst LENGTH_PROPS: ReadonlySet<string> = new Set([\"text\", \"url\", \"longtext\", \"richtext\"]);\nconst PATTERN_TYPES: ReadonlySet<string> = new Set([\"text\", \"longtext\", \"url\"]);\n/**\n * Leaf types whose value is an object a dotted preview path may read into (previewPathProblem OBJECT_VALUE_TYPES), and the\n * keys an image or video value holds (LEAF_VALUE_KEYS). V2 reads `image.alt`; prod stores the key as `altText`.\n */\nconst OBJECT_VALUE_TYPES: ReadonlySet<string> = new Set([\"image\", \"link\", \"button\", \"file\", \"video\", \"location\", \"json\", \"code\", \"reference\", \"multi-reference\"]);\nconst LEAF_VALUE_KEYS: Readonly<Record<string, readonly string[]>> = {\n image: [\"id\", \"url\", \"name\", \"altText\", \"width\", \"height\", \"focal\", \"crop\"],\n video: [\"url\", \"poster\", \"autoplay\", \"loop\", \"transcript\"],\n};\nconst IMAGE_PATH_KEY: Readonly<Record<string, string>> = { alt: \"altText\" };\n/** The keys of a data table's value a preview path may end on (previewPathProblem `<table>.caption` / `.notes`). */\nconst TABLE_PATH_KEYS: readonly string[] = [\"caption\", \"notes\"];\n\n/* ══════════════════════════════════════════════════════════════════════\n * V2 → prod\n * ══════════════════════════════════════════════════════════════════════ */\n\ninterface Ctx {\n lane: AdapterTarget;\n lossy: LossyItem[];\n catalog: CatalogItem[];\n /** fields lane: kept tab ids, kept fieldset ids → their tab, dropped tab ids → why. */\n tabs: Set<string>;\n droppedTabs: Map<string, LossyFeature>;\n sets: Map<string, string | undefined>;\n /** props lane: fieldsets usable as prop groups, and per sibling list the ones already defined on a prop there. */\n propSets: Map<string, V2Fieldset>;\n definedGroups: WeakMap<FieldSchema[], Set<string>>;\n /** props lane: each V2 fieldset's index (the prop group's `order` when groupOrder). */\n propOrder: Map<string, number>;\n /** props lane: the V2 fieldsets order differs from where each is first used, so every group carries its `order`. */\n groupOrder: boolean;\n /** props lane: each top-level field's tab (a definition the first time an id is met) and what its tab lost. */\n propTabs: Map<FieldSchema, { tab?: PropTab; loss?: LossyFeature }>;\n definedTabs: Set<string>;\n /** props lane: every stored tab id (a nested field names one as ui.tab { id }), and the ones no top-level prop sits in (component.tabs). */\n keptTabs: Set<string>;\n declaredTabs: PropTab[];\n /** fields lane: block slug → the block model a modular item type is stored as. */\n blockModels: Map<string, ProdContentModel>;\n}\nconst lose = (ctx: Ctx, path: string, feature: LossyFeature) => ctx.lossy.push({ path, feature, reason: FEATURES[feature].reason });\nconst cat = (ctx: Ctx, path: string, feature: CatalogFeature) => ctx.catalog.push({ path, feature, reason: CATALOG[feature] });\n\n/** One converted field, lane-neutral; `emit*` places each key where its lane keeps it. */\ninterface Node {\n key: string;\n label: string;\n type: string;\n /** props lane: null = V2 gave this field no description, so no help on purpose (absent would get the platform's auto-help) */\n helpText?: string | null;\n required?: boolean;\n unique?: boolean;\n defaultValue?: unknown;\n options?: SelectOption[];\n config: FieldConfig;\n children?: Node[];\n /** fields lane array: children are the repeatable zone. */\n zoned?: boolean;\n /** props lane polymorphic list: config.itemTypes, each item type's fields converted */\n itemTypes?: { name: string; label: string; children: Node[]; icon?: DockIconName; preview?: UiPreview }[];\n /** props lane slot: config.slotSettings, each setting converted */\n slotSettings?: Node[];\n ui: PropUi;\n openMode?: OpenMode;\n showIf?: ShowIf;\n readOnly?: true | \"developer\";\n lockReason?: string;\n localized?: boolean;\n helpMore?: string;\n advanced?: boolean;\n recommendedMax?: number;\n placeholder?: string;\n fieldsetId?: string;\n archived?: true;\n}\n\n/** Keys every type keeps, including a field degraded to json. */\nconst COMMON_KEYS: ReadonlySet<string> = new Set([\n \"name\", \"title\", \"type\", \"description\", \"helpMore\", \"initialValue\", \"validation\", \"fieldset\", \"group\", \"hidden\", \"readOnly\",\n \"access\", \"lockReason\", \"advanced\", \"localized\", \"ai\", \"placeholder\", \"archived\",\n]);\n\ntype Shape =\n /** `shopify`: a reference to Shopify alone, stored as locked text (SHOPIFY_REF_LOCK) */\n | { kind: \"leaf\"; type: string; shopify?: true }\n | { kind: \"object\"; type: string }\n | { kind: \"zones\"; type: string; item: FieldSchema }\n | { kind: \"itemType\"; type: \"array\"; item: FieldSchema; itemType: ListItemType; shopify?: true }\n | { kind: \"refs\"; type: \"multi-reference\"; item: FieldSchema }\n /** fields lane: several object item types, each its own block model */\n | { kind: \"modular\"; type: \"modular\"; items: FieldSchema[] }\n /** props lane: several object item types, a `table` with config.mode \"types\" and config.itemTypes */\n | { kind: \"types\"; type: \"table\"; items: FieldSchema[] }\n /** props lane: a slot prop or sub-field at any depth (config.multiple), its children component instances (C1/C2) */\n | { kind: \"slot\"; type: \"slot\" }\n | { kind: \"json\"; type: \"json\"; feature: LossyFeature };\n\n/** Where a prop sub-field sits that the backend judges by its parent: a table's rows, a polymorphic list's item type, or a slot's per-child settings. */\ntype Nest = \"rows\" | \"item\" | \"setting\" | undefined;\n/** Types a slot setting may not be (backend slotSettingsHardening, and a model slot's SLOT_SETTINGS_NESTING: leaf fields only). */\nconst SETTING_NESTING_TYPES: ReadonlySet<string> = new Set([\"object\", \"group\", \"array\", \"table\", \"slot\", \"form\", \"modular\"]);\n/** backend slotSettingsHardening: at most this many per-child settings. */\nconst SLOT_SETTINGS_MAX = 20;\n/** backend ITEM_TYPE_NAME (what a row's `_type` holds), and an item type label's cap. */\nconst ITEM_TYPE_NAME = /^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;\nconst ITEM_TYPE_LABEL_MAX = 120;\n\nfunction shapeOf(f: FieldSchema, lv: number, ctx: Ctx, top: boolean, nest?: Nest): Shape {\n const shape = shapeOfField(f, lv, ctx, top);\n // a data table and a polymorphic list sit at any depth: in an object, a list's rows or an item type (B1/B2)\n if (nest === \"setting\" && SETTING_NESTING_TYPES.has(shape.type)) return { kind: \"json\", type: \"json\", feature: \"slotSettings\" };\n return shape;\n}\n\n/** backend content.ts keyRuleProblem: keys a resolver would misread (KEY_RESERVED), and a key's format (KEY_FORMAT). */\nconst MODEL_RESERVED_KEYS: ReadonlySet<string> = new Set([\"derived\", \"layout\", \"page\"]);\n/** The key a model field is stored under: a reserved or malformed V2 name, renamed. */\nfunction modelKeyOf(name: string): string {\n let k = name.replace(/^_+/, \"\").replace(/[^A-Za-z0-9_-]/g, \"\");\n if (!/^[A-Za-z]/.test(k)) k = `f${k}`;\n return MODEL_RESERVED_KEYS.has(k) ? `${k}Field` : k;\n}\n\n/** A slot's V2 allow list as the backend keeps it: 1–50 distinct block names of 1–64 characters (slotAllowIssues). */\nconst slotAllowOk = (allow: unknown): allow is string[] =>\n Array.isArray(allow) && allow.length >= 1 && allow.length <= SLOT_ALLOW_MAX && new Set(allow).size === allow.length &&\n allow.every((n) => typeof n === \"string\" && n === n.trim() && n.length >= 1 && n.length <= SLOT_ALLOW_NAME_MAX);\n\nfunction shapeOfField(f: FieldSchema, lv: number, ctx: Ctx, top: boolean): Shape {\n const props = ctx.lane === \"props\";\n const deep = lv >= MAX_FIELD_DEPTH;\n const of = Array.isArray(f.of) ? f.of : undefined;\n /** a prop reference names a content model or a page / form / collection target (refTargetNamed): with none it is stored as json */\n const noEntry = (r: FieldSchema[\"reference\"]) => props && !(r?.to ?? []).some((t) => ENTRY_TARGET(t) || REF_TARGET_KINDS.includes(t));\n switch (f.type) {\n case \"object\":\n return deep ? { kind: \"json\", type: \"json\", feature: \"depth>10\" } : { kind: \"object\", type: \"object\" };\n case \"array\": {\n if (of && of.length > 1 && of.every((i) => i.type === \"object\")) {\n if (!props) return { kind: \"modular\", type: \"modular\", items: of };\n return deep ? { kind: \"json\", type: \"json\", feature: \"depth>10\" } : { kind: \"types\", type: \"table\", items: of };\n }\n if (!of || of.length !== 1) return { kind: \"json\", type: \"json\", feature: of ? \"type:polymorphic-array\" : \"type:slot\" };\n const item = of[0];\n if (item.type === \"object\") return deep ? { kind: \"json\", type: \"json\", feature: \"depth>10\" } : { kind: \"zones\", type: props ? \"table\" : \"array\", item };\n if (item.type === \"reference\" && shopifyOnly(item.reference)) return { kind: \"itemType\", type: \"array\", item, itemType: \"text\", shopify: true };\n if (item.type === \"reference\")\n return noEntry(item.reference) ? { kind: \"json\", type: \"json\", feature: \"reference target\" } : { kind: \"refs\", type: \"multi-reference\", item };\n const prim = PRIM_ITEM[item.type];\n if (prim) return { kind: \"itemType\", type: \"array\", item, itemType: prim };\n return { kind: \"json\", type: \"json\", feature: \"type:primitive-array\" };\n }\n case \"slot\":\n // a slot prop sits at any depth: in an object, a list's rows or an item type (C1/C2). A model's slot field names the\n // kind:'block' models its children may be (config.blockSlugs, required), so one with no allow list has no home\n if (!props && !slotAllowOk((f.of as { allow?: unknown } | undefined)?.allow)) return { kind: \"json\", type: \"json\", feature: \"type:slot\" };\n return { kind: \"slot\", type: \"slot\" };\n case \"table\":\n // ONE TableValue: a `table` prop with config.mode \"data\" (BE prop-fields isDataTable), or a model's `table` field\n return { kind: \"leaf\", type: \"table\" };\n case \"reference\":\n if (props && top && f.reference?.to?.length === 1 && f.reference.to[0] === \"form\" && !f.reference.filter) return { kind: \"leaf\", type: \"form\" };\n if (shopifyOnly(f.reference)) return { kind: \"leaf\", type: \"text\", shopify: true };\n return noEntry(f.reference) ? { kind: \"json\", type: \"json\", feature: \"reference target\" } : { kind: \"leaf\", type: \"reference\" };\n default: {\n const t = props ? PROP_TYPE[f.type] : FIELD_TYPE[f.type];\n return t ? { kind: \"leaf\", type: t } : { kind: \"json\", type: \"json\", feature: \"unsupported key\" };\n }\n }\n}\n\nconst trunc = (ctx: Ctx, at: string, s: string, max: number, feature: LossyFeature) => {\n if (s.length <= max) return s;\n lose(ctx, at, feature);\n return s.slice(0, max);\n};\n\nfunction convertField(f: FieldSchema, at: string, lv: number, ctx: Ctx, siblings: FieldSchema[], top: boolean, inTable = false, inItem = false, inSetting = false): Node {\n const props = ctx.lane === \"props\";\n const shape = shapeOf(f, lv, ctx, top, inTable ? \"rows\" : inItem ? \"item\" : inSetting ? \"setting\" : undefined);\n const node: Node = { key: f.name, label: f.title, type: shape.type, config: {}, ui: {} };\n // a key is the value's address: a second sibling of the same name gets its own\n const twins = siblings.slice(0, Math.max(0, siblings.indexOf(f))).filter((s) => s.name === f.name).length;\n if (twins) {\n node.key = `${f.name}_${twins + 1}`;\n lose(ctx, `${at}/name`, \"duplicate name\");\n } else if (!props && modelKeyOf(f.name) !== f.name) {\n // ponytail: the renamed key is not checked against its siblings; a V2 sibling already named `layoutField` collides\n node.key = modelKeyOf(f.name);\n lose(ctx, `${at}/name`, \"reserved name\");\n }\n const nesting = shape.kind === \"object\" || shape.kind === \"zones\" || shape.kind === \"types\";\n /** a list of items (objects, block models, item types, scalars or entries): ui.itemLabel names one item */\n const listy = shape.kind === \"zones\" || shape.kind === \"modular\" || shape.kind === \"types\" || shape.kind === \"itemType\" || shape.kind === \"refs\";\n const looseConfig = props || !STRICT_CONFIG.has(shape.type);\n if (shape.kind === \"json\") lose(ctx, `${at}/type`, shape.feature);\n const shopify = (shape.kind === \"leaf\" || shape.kind === \"itemType\") && shape.shopify === true;\n if (shopify) {\n // what the dock loses is the picker: the reference reads back as V2's, locked (a V2 field already read-only loses nothing)\n if (f.readOnly !== true) lose(ctx, `${at}/readOnly`, \"shopify reference\");\n node.readOnly = true;\n node.lockReason = SHOPIFY_REF_LOCK;\n }\n if (!props && f.type === \"url\") node.config.inputType = \"url\";\n if (shape.type === \"datetime\" && !props) node.config.includeTime = true;\n if (shape.kind === \"leaf\" && shape.type === \"table\") node.config.mode = \"data\";\n if (shape.kind === \"types\") node.config.mode = \"types\";\n // a model's slot is always a list (its config is strict: no `multiple`)\n if (shape.kind === \"slot\" && props) node.config.multiple = true;\n if (listy) {\n // the noun wins (it is what the dock's add button and crumbs say); with none, a prop list keeps the item title here,\n // when the convention (the field title's singular) would not read it back. A model's list keeps the title as its own\n // ui.itemTitle (itemIdentity) instead, so it never reads back as a noun V2 did not set (facet table row 18)\n const label =\n f.itemNoun !== undefined\n ? capitalize(f.itemNoun)\n : props && shape.kind === \"zones\" && shape.item.title !== conventionItem(f.name, f.title).title\n ? shape.item.title\n : undefined;\n if (label !== undefined && label.length <= ITEM_LABEL_MAX) node.ui.itemLabel = label;\n }\n // the enforced developer lock: only schema managers change it, and the lock says why\n const devLock = f.access?.edit === \"schema.manage\" && !!f.lockReason;\n\n for (const k of Object.keys(f) as (keyof FieldSchema)[]) {\n const v = f[k];\n if (v === undefined) continue;\n const p = `${at}/${k}`;\n if (shape.kind === \"json\" && !COMMON_KEYS.has(k)) {\n lose(ctx, p, shape.feature);\n continue;\n }\n // the Shopify lock holds readOnly and lockReason (the marker the read side restores the reference from)\n if (shopify && (k === \"reference\" || k === \"readOnly\")) continue;\n if (shopify && (k === \"access\" || k === \"lockReason\")) {\n lose(ctx, p, \"shopify reference\");\n continue;\n }\n switch (k) {\n case \"name\":\n case \"title\":\n case \"type\":\n break;\n case \"description\":\n node.helpText = trunc(ctx, p, f.description!, props ? PROP_HELP_MAX : FIELD_HELP_MAX, \"help>limit\");\n break;\n case \"helpMore\":\n node.helpMore = trunc(ctx, p, f.helpMore!, HELP_MORE_MAX, \"help>limit\");\n break;\n case \"placeholder\":\n if (props) node.placeholder = trunc(ctx, p, f.placeholder!, PROP_PLACEHOLDER_MAX, \"help>limit\");\n else if (looseConfig) node.placeholder = f.placeholder;\n // a strict config has no room for one: the field's ui.placeholder holds it\n else node.ui.placeholder = trunc(ctx, p, f.placeholder!, UI_PLACEHOLDER_MAX, \"help>limit\");\n break;\n case \"initialValue\":\n // a definition holds no reference default (reference_in_definition): the host seeds it into the placement\n // nor a slot's children: they name V2 block types, which become component instances when the host seeds them\n if (props && (shape.type === \"reference\" || shape.type === \"multi-reference\" || shape.kind === \"slot\")) cat(ctx, p, \"seeded instance\");\n else node.defaultValue = defaultToProd(f, shape, f.initialValue, p, ctx, lv, top);\n break;\n case \"validation\":\n validationToProd(f, shape, node, p, ctx, inTable, top);\n break;\n case \"options\":\n optionsToProd(f, shape, node, p, ctx);\n break;\n case \"layout\":\n layoutToProd(f, shape, node, p, ctx);\n break;\n case \"fields\":\n if (shape.kind === \"object\") node.children = f.fields!.map((c, i) => convertField(c, `${p}/${i}`, lv + 1, ctx, f.fields!, false));\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"of\":\n ofToProd(f, shape, node, p, lv, ctx);\n break;\n case \"openMode\":\n // a compound opens or holds rows; a code prop's editor may open in a dialog (backend OPEN_MODE_PROP_TYPES)\n if (nesting || (props && shape.type === \"code\")) node.openMode = f.openMode;\n else lose(ctx, p, \"openMode\");\n break;\n case \"preview\":\n if (shape.kind === \"object\") node.ui.preview = previewToProd(f.preview!, f.fields ?? [], p, ctx);\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"fieldset\":\n case \"group\":\n break; // placement is decided below, with both keys in view\n case \"hidden\":\n if (typeof f.hidden === \"boolean\") node.ui.hidden = f.hidden;\n else {\n const showIf = conditionToShowIf(f.hidden!, p, siblings, ctx, props && top);\n if (showIf) node.showIf = showIf;\n }\n break;\n case \"readOnly\":\n // a developer lock already holds readOnly (\"developer\"); a plain flag cannot sit beside it\n if (f.readOnly === true && !devLock) node.readOnly = true;\n else lose(ctx, p, \"access\");\n break;\n case \"access\": {\n const access: NonNullable<FieldUi[\"access\"]> = {};\n for (const [ak, av] of Object.entries(f.access!)) {\n if (av === undefined) continue;\n if (ak === \"view\" && av === \"schema.view\") access.view = av;\n else if (ak === \"edit\" && av === \"schema.manage\") access.edit = av;\n else lose(ctx, `${p}/${ak}`, \"access\");\n }\n if (Object.keys(access).length) node.ui.access = access;\n if (devLock) node.readOnly = \"developer\";\n break;\n }\n case \"lockReason\":\n node.lockReason = trunc(ctx, p, f.lockReason!, LOCK_REASON_MAX, \"help>limit\");\n break;\n case \"localized\":\n node.localized = f.localized;\n break;\n case \"archived\":\n if (f.archived) node.archived = true;\n break;\n case \"advanced\":\n node.advanced = f.advanced;\n break;\n case \"ai\":\n cat(ctx, p, \"ai\");\n break;\n case \"reference\":\n if (shape.kind === \"leaf\" && shape.type === \"reference\") referenceToConfig(f.reference!, node, p, ctx);\n else if (shape.type !== \"form\") lose(ctx, p, \"unsupported key\");\n break;\n case \"numeric\":\n numericToProd(f, node, p, ctx);\n break;\n case \"scale\":\n if (shape.type === \"number\") scaleToConfig(f.scale!, node, p, ctx);\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"icon\": {\n const dock = shape.kind === \"object\" || shape.kind === \"modular\" || shape.kind === \"types\" ? dockIconOf(f.icon) : undefined;\n if (dock) node.ui.icon = dock;\n else lose(ctx, p, \"icon\");\n break;\n }\n case \"rows\":\n if ((shape.type === \"text\" || shape.type === \"longtext\") && isWhole(f.rows, 1, UI_ROWS_MAX)) node.ui.rows = f.rows;\n else lose(ctx, p, \"rows\");\n break;\n case \"synced\": {\n const from = f.synced!.from;\n const ok = typeof from === \"string\" && from === from.trim() && from.length >= 1 && from.length <= SYNCED_FROM_MAX && Object.keys(f.synced!).every((x) => x === \"from\");\n if (ok) node.ui.synced = { from };\n else lose(ctx, p, \"synced\");\n break;\n }\n case \"slotSettings\":\n if (shape.kind === \"slot\") slotSettingsToProd(f.slotSettings!, node, p, lv, ctx);\n else lose(ctx, p, \"slotSettings\");\n break;\n case \"itemNoun\":\n // what the read side derives: the item label in lower case\n if (!listy || node.ui.itemLabel?.toLowerCase() !== f.itemNoun) lose(ctx, p, \"itemNoun\");\n break;\n case \"arrayLayout\":\n if (shape.kind === \"zones\" || shape.kind === \"modular\" || shape.kind === \"types\") node.ui.layout = f.arrayLayout;\n // a list of scalars or entries has no grid: its tiles are a gallery (V2 arrayLayout \"grid\" on a multi-reference)\n else if ((shape.kind === \"itemType\" || shape.kind === \"refs\") && f.arrayLayout === \"grid\") node.ui.layout = \"gallery\";\n else lose(ctx, p, \"layout\");\n break;\n case \"valueShape\":\n if (shape.type === \"link\" || shape.type === \"image\" || shape.type === \"button\") node.ui.valueShape = f.valueShape;\n else lose(ctx, p, \"valueShape\");\n break;\n case \"linkHref\":\n if (typeof f.linkHref === \"string\" && f.linkHref) node.config.linkHref = f.linkHref;\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"svgOnly\":\n if (shape.type === \"image\" && f.svgOnly === true) node.config.media = \"icon\";\n else if (f.svgOnly !== false) lose(ctx, p, \"unsupported key\");\n break;\n case \"timezone\":\n if (shape.type === \"date\" || shape.type === \"datetime\") {\n const tz = f.timezone;\n const zone = typeof tz === \"boolean\" || tz === \"site\" ? tz : typeof tz === \"string\" && tz.startsWith(\"fixed:\") && isZone(tz.slice(6)) ? tz.slice(6) : undefined;\n if (zone !== undefined) node.config.timezone = zone;\n else lose(ctx, p, \"timezone\");\n } else lose(ctx, p, \"unsupported key\");\n break;\n case \"language\":\n if (shape.type === \"code\" && typeof f.language === \"string\") node.config.language = f.language;\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"languages\":\n if (shape.type === \"code\" && Array.isArray(f.languages) && f.languages.every((l) => typeof l === \"string\")) node.config.languages = [...f.languages];\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"table\":\n if (shape.kind === \"leaf\" && shape.type === \"table\") Object.assign(node.config, tableConfigFromOptions(f.table));\n else lose(ctx, p, \"type:table\");\n break;\n default:\n lose(ctx, p, \"unsupported key\");\n }\n }\n // a prop or sub-field V2 describes nowhere carries no help on purpose: null, not absent (absent = the platform's auto-help)\n if (props && f.description === undefined) node.helpText = null;\n // the item title kept as ui.itemLabel reads back as the noun too: the one the engine falls back to with none\n if (f.itemNoun === undefined && shape.kind === \"zones\" && node.ui.itemLabel !== undefined) cat(ctx, `${at}/itemNoun`, \"itemNoun (derived)\");\n placeInSet(f, node, at, ctx, top, siblings);\n if (f.type === \"rating\" && node.type === \"rating\" && f.numeric?.step === undefined) {\n const lo = typeof node.config.min === \"number\" ? node.config.min : 0;\n const hi = typeof node.config.max === \"number\" ? node.config.max : RATING_DEFAULT_MAX;\n const stops = (hi - lo) / V2_RATING_STEP;\n if (Math.abs(stops - Math.round(stops)) < 1e-9 && Math.round(stops) <= RATING_MAX_STOPS) node.config.step = V2_RATING_STEP;\n }\n if (node.ui.control === \"slider\" && !sliderOk(node.config)) {\n delete node.ui.control;\n lose(ctx, `${at}/layout`, \"layout\");\n }\n return node;\n}\n\nconst isWhole = (n: unknown, lo = 0, hi = Infinity): n is number => typeof n === \"number\" && Number.isInteger(n) && n >= lo && n <= hi;\nconst compiles = (re: string) => {\n try {\n new RegExp(re);\n return true;\n } catch {\n return false;\n }\n};\n\nconst ratingIsDefault = (c: FieldConfig) => c.min === RATING_CONFIG.min && c.max === RATING_CONFIG.max && c.step === RATING_CONFIG.step;\n\n/** Backend controlHardening: a slider spans min < max; a set step is > 0 with at most SLIDER_MAX_STOPS stops. */\nfunction sliderOk({ min, max, step }: FieldConfig) {\n if (!(typeof min === \"number\" && typeof max === \"number\" && min < max)) return false;\n return step === undefined || (typeof step === \"number\" && step > 0 && (max - min) / step <= SLIDER_MAX_STOPS);\n}\n\n/** Where a field sits: its tab (fields lane) or prop group (props lane). */\nfunction placeInSet(f: FieldSchema, node: Node, at: string, ctx: Ctx, top: boolean, siblings: FieldSchema[]) {\n if (ctx.lane === \"props\") {\n if (!top) {\n // a nested field names its tab as { id } (V2 ignores it there, so does the dock): kept when the tab is stored\n if (f.group !== undefined) {\n if (ctx.keptTabs.has(f.group)) node.ui.tab = { id: f.group };\n else lose(ctx, `${at}/group`, \"group (nested)\");\n }\n } else {\n const t = ctx.propTabs.get(f);\n if (t?.loss) lose(ctx, `${at}/group`, t.loss);\n // a tab is defined once, on the first top-level prop in it: later props carry its id only\n if (t?.tab) node.ui.tab = ctx.definedTabs.has(t.tab.id) ? { id: t.tab.id } : (ctx.definedTabs.add(t.tab.id), t.tab);\n }\n if (f.fieldset === undefined) return;\n const set = ctx.propSets.get(f.fieldset);\n if (!set) return lose(ctx, `${at}/fieldset`, \"fieldset collision\");\n // prop groups are defined among siblings (propGroupIssues runs per level): the first member at each level defines it\n let defined = ctx.definedGroups.get(siblings);\n if (!defined) ctx.definedGroups.set(siblings, (defined = new Set()));\n if (defined.has(set.name)) node.ui.group = { id: set.name };\n else {\n defined.add(set.name);\n node.ui.group = propGroupOf(set, ctx);\n }\n return;\n }\n const set = f.fieldset !== undefined && ctx.sets.has(f.fieldset) ? f.fieldset : undefined;\n if (f.fieldset !== undefined && !set) lose(ctx, `${at}/fieldset`, \"fieldset collision\");\n if (!top) {\n if (f.group !== undefined) lose(ctx, `${at}/group`, \"group (nested)\");\n if (set) node.fieldsetId = set;\n return;\n }\n const tab = set ? ctx.sets.get(set) : undefined;\n if (f.group !== undefined && !ctx.tabs.has(f.group)) lose(ctx, `${at}/group`, ctx.droppedTabs.get(f.group) ?? \"unsupported key\");\n else if (set && tab !== f.group) lose(ctx, `${at}/group`, \"fieldset spans groups\");\n node.fieldsetId = set ?? (f.group !== undefined && ctx.tabs.has(f.group) ? f.group : undefined);\n}\n\n/** A V2 fieldset as the inline prop group its first member defines (what propSetsFor found unstorable is named there). */\nfunction propGroupOf(s: V2Fieldset, ctx: Ctx): PropGroup {\n const g: PropGroup = { id: s.name, label: s.title.slice(0, PROP_GROUP_LABEL_MAX), kind: \"group\" };\n if (s.collapsed !== undefined) g.collapsed = s.collapsed;\n if (groupDescriptionOk(s.description)) g.description = s.description;\n if (s.columns !== undefined) g.columns = s.columns;\n if (s.collapsible !== undefined) g.collapsible = s.collapsible;\n if (s.layout !== undefined) g.layout = s.layout;\n if (ctx.groupOrder) g.order = Math.min(PROP_GROUP_ORDER_MAX, (ctx.propOrder.get(s.name) ?? 0));\n return g;\n}\nconst groupDescriptionOk = (d: string | undefined): d is string => typeof d === \"string\" && d === d.trim() && d.length >= 1 && d.length <= PROP_GROUP_DESCRIPTION_MAX;\n\n/** The zone a datetime field fixes, if any (what lets a stored instant read back with its [Zone]). */\nconst fixedZone = (f: FieldSchema) => (typeof f.timezone === \"string\" && f.timezone.startsWith(\"fixed:\") ? f.timezone.slice(6) : undefined);\n\n/**\n * A field default: forward through the value adapters, then read back the way toTypeSchema will; every leaf that does\n * not come back is named (so the lossy list matches what the read side really returns). Objects and list rows go\n * through their child fields' adapters too.\n */\nfunction defaultToProd(f: FieldSchema, shape: Shape, v: unknown, at: string, ctx: Ctx, lv: number, top: boolean): unknown {\n const plan = writePlan(f, shape, lv, ctx, top);\n const out = planToProd(plan, v);\n for (const d of diffPaths(v, planFromProd(plan, out))) lose(ctx, `${at}${d}`, \"default value\");\n return out;\n}\n\n/** How a value of one field crosses to prod and back: per-type adapters, recursing through objects and list rows. */\nexport type ValuePlan = VPlan;\ntype VPlan =\n | { k: \"link\" | \"button\" | \"image\" | \"form\" | \"ref\" | \"refs\" | \"number\" | \"video\" | \"as-is\" }\n | { k: \"datetime\"; zone?: string }\n /** a date: passes as stored; only an unreadable stored shape is named */\n | { k: \"date\" }\n /** a list of one primitive (config.itemType): each item through its type's adapter */\n | { k: \"list\"; item: ListItemType }\n /** a number with a V2 scale: a number, a token string or a custom { value, unit } */\n | { k: \"scale\"; scale: ScaleSchema }\n | { k: \"rating\"; scale: RatingScale }\n /** `zoned`: a group, stored as the non-repeatable zone of its array (`{ nonRepeatable: {...} }`) */\n | { k: \"object\"; zoned?: boolean; fields: Map<string, VPlan> }\n | { k: \"rows\"; zoned: boolean; fields: Map<string, VPlan> }\n /** modular rows: V2 {_key, _type, ...fields} ↔ prod {__id, __type (block slug), data}; item type name → its fields' plans */\n | { k: \"modular\"; types: Map<string, Map<string, VPlan>> }\n /** a model's slot: inline children {_key, _type, _settings?, ...values} both sides; `_type` is the V2 block name ↔ its block model slug */\n | { k: \"blocks\" }\n /** a polymorphic list prop (table, config.mode \"types\"): rows {_key, _type, ...fields} as V2 has them; item type name → its fields' plans */\n | { k: \"types\"; types: Map<string, Map<string, VPlan>> }\n /**\n * a component slot as SlotField edits it (set by the host, never by a read): V2 children `{ _key, _type, _settings?,\n * ...values }` (controls/slot-services.ts slotChildrenFromStored / ToStored); `child` gives a child's own plans by its\n * `_type` (the component id), so its values cross per the CHILD's definition; a type with none passes as it is\n */\n | {\n k: \"slot\";\n multiple?: boolean;\n child?: (type: string) => Map<string, VPlan> | undefined;\n /**\n * a child's section family, by its `_type` (set by the host): a read gives each child the `_variant` its component\n * is (`current`); a write stores no `_variant` (the backend refuses one) but the member placing it in `_type`\n */\n family?: (type: string) => { current?: string; member: (variant: string) => string | undefined } | undefined;\n };\nconst AS_IS: VPlan = { k: \"as-is\" };\n\n/** The write side's plan, from the V2 field and the shape it is stored as. */\nfunction writePlan(f: FieldSchema, shape: Shape, lv: number, ctx: Ctx, top: boolean): VPlan {\n const kids = (fields: FieldSchema[], nest?: Nest) =>\n new Map(fields.map((c) => [c.name, writePlan(c, shapeOf(c, lv + 1, ctx, false, nest), lv + 1, ctx, false)] as const));\n switch (shape.kind) {\n case \"json\":\n return AS_IS;\n case \"itemType\":\n return shape.itemType === \"image\" || shape.itemType === \"link\" ? { k: \"list\", item: shape.itemType } : AS_IS;\n case \"object\":\n return { k: \"object\", fields: kids(f.fields ?? []) };\n case \"zones\":\n return { k: \"rows\", zoned: ctx.lane === \"fields\", fields: kids(shape.item.fields ?? [], ctx.lane === \"props\" ? \"rows\" : undefined) };\n case \"types\":\n return { k: \"types\", types: new Map(shape.items.map((i) => [i.name, kids(i.fields ?? [], \"item\")] as const)) };\n case \"slot\":\n return ctx.lane === \"fields\" ? { k: \"blocks\" } : AS_IS;\n case \"modular\": {\n // an item type's fields are top-level fields of its own block model\n const top1 = (fields: FieldSchema[]) => new Map(fields.map((c) => [c.name, writePlan(c, shapeOf(c, 1, ctx, false), 1, ctx, false)] as const));\n return { k: \"modular\", types: new Map(shape.items.map((i) => [i.name, top1(i.fields ?? [])] as const)) };\n }\n case \"refs\":\n return { k: \"refs\" };\n case \"leaf\":\n // a Shopify reference is the gid string both sides\n if (shape.shopify) return AS_IS;\n if (f.type === \"link\" || f.type === \"url\") return { k: \"link\" };\n if (f.type === \"button\" || f.type === \"image\") return { k: f.type };\n if (f.type === \"datetime\") return { k: \"datetime\", zone: fixedZone(f) };\n if (f.type === \"reference\") return { k: top && shape.type === \"form\" ? \"form\" : \"ref\" };\n return leafPlan(f, shape.type);\n }\n}\n\n/** The plan of a leaf whose value needs its own adapter but no link / reference handling (both directions agree). */\nfunction leafPlan(f: FieldSchema, prodType: string): VPlan {\n if (f.type === \"video\") return { k: \"video\" };\n if (f.type === \"rating\") return { k: \"rating\", scale: { min: f.numeric?.min, max: f.numeric?.max, step: f.numeric?.step ?? V2_RATING_STEP } };\n if (f.type === \"number\" && f.scale) return { k: \"scale\", scale: f.scale };\n return prodType === \"number\" ? { k: \"number\" } : AS_IS;\n}\n\n/**\n * The read side's plan, from the V2 field read back (`zoned`: lists read from an array's repeatable zone and groups\n * read from its non-repeatable zone; `modular`: lists read from a modular field, whose item fields live in their block\n * models and pass as stored).\n */\nfunction readPlan(\n f: FieldSchema,\n prodType: string,\n zoned: WeakSet<FieldSchema>,\n modular: WeakSet<FieldSchema>,\n types?: WeakSet<FieldSchema>,\n slots?: WeakMap<FieldSchema, boolean>,\n blocks?: WeakSet<FieldSchema>,\n): VPlan {\n const kids = (fields: FieldSchema[]) => new Map(fields.map((c) => [c.name, readPlan(c, \"\", zoned, modular, types, slots, blocks)] as const));\n switch (f.type) {\n case \"link\":\n case \"url\":\n return { k: \"link\" };\n case \"button\":\n case \"image\":\n return { k: f.type };\n case \"datetime\":\n return { k: \"datetime\", zone: fixedZone(f) };\n case \"date\":\n return { k: \"date\" };\n case \"reference\":\n // a Shopify reference read back from its locked text is the gid string both sides\n if (shopifyOnly(f.reference)) return AS_IS;\n return { k: prodType === \"form\" ? \"form\" : \"ref\" };\n case \"object\":\n return { k: \"object\", ...(zoned.has(f) ? { zoned: true } : {}), fields: kids(f.fields ?? []) };\n case \"slot\":\n // a slot prop at any depth (C1/C2): its children as SlotField edits them; the host gives `child` (each child's plans)\n if (blocks?.has(f)) return { k: \"blocks\" };\n return slots?.has(f) ? { k: \"slot\", multiple: slots.get(f) } : AS_IS;\n case \"array\": {\n if (modular.has(f)) return { k: \"modular\", types: new Map((Array.isArray(f.of) ? f.of : []).map((i) => [i.name, kids(i.fields ?? [])] as const)) };\n if (types?.has(f)) return { k: \"types\", types: new Map((Array.isArray(f.of) ? f.of : []).map((i) => [i.name, kids(i.fields ?? [])] as const)) };\n const item = Array.isArray(f.of) && f.of.length === 1 ? f.of[0] : undefined;\n if (item?.type === \"object\") return { k: \"rows\", zoned: zoned.has(f), fields: kids(item.fields ?? []) };\n if (item?.type === \"image\" || item?.type === \"link\") return { k: \"list\", item: item.type };\n return item?.type === \"reference\" && !shopifyOnly(item.reference) ? { k: \"refs\" } : AS_IS;\n }\n default:\n return leafPlan(f, prodType);\n }\n}\n\n/**\n * The plan for ONE leaf field read from prod type `prodType` (a link, an image, a reference…), for a host that edits a\n * single field's value outside a whole read (the dock's legacy controls). Objects and lists need the read's own plan\n * (`ToTypeSchemaOptions.plans`), which knows which lists are zoned or modular.\n */\nexport function leafValuePlan(f: FieldSchema, prodType: string): ValuePlan {\n return readPlan(f, prodType, new WeakSet(), new WeakSet());\n}\n\n/**\n * A V2 value → what prod stores. `lost` (optional) collects every V2 key prod cannot keep, as a path under the value\n * (\"cta/style\", \"(value)\" for the value itself): a caller that finds any must refuse the write and name them.\n */\nexport function planToProd(plan: ValuePlan, v: unknown, lost?: string[], at = \"\"): unknown {\n if (v === undefined) return undefined;\n const take = <T,>(r: { value: T; lost: string[] }) => {\n if (lost) for (const l of r.lost) lost.push(at ? `${at}/${l}` : l);\n return r.value;\n };\n const under = (k: string | number) => (at ? `${at}/${k}` : String(k));\n switch (plan.k) {\n case \"link\":\n return take(linkToProd(v as V2LinkValue));\n case \"button\":\n return take(buttonToProd(v as V2ButtonValue));\n case \"image\":\n return take(imageToProd(v as V2ImageValue));\n case \"datetime\":\n return take(datetimeToProd(v as string, { zone: plan.zone }));\n case \"form\":\n return take(referenceToProd(v as string, { to: \"form\" }));\n case \"ref\":\n case \"refs\":\n return take(referenceToProd(v as string | string[]));\n case \"number\":\n if (typeof v === \"number\" || v === null) return v;\n lost?.push(at || \"(value)\");\n return undefined;\n case \"video\":\n return take(videoToProd(v as V2VideoValue));\n case \"list\":\n return take(listToProd(v as unknown[], plan.item));\n case \"scale\":\n return take(scaleToProd(v as ScaleValue, plan.scale));\n case \"rating\":\n return take(ratingToProd(v as number, plan.scale));\n case \"object\": {\n const out = mapKeys(v, plan.fields, (p, x, k) => planToProd(p, x, lost, under(k)));\n return plan.zoned && isObj(out) ? { nonRepeatable: out } : out;\n }\n case \"rows\": {\n if (!Array.isArray(v)) return v;\n const rows = v.map((row, i) => mapKeys(row, plan.fields, (p, x, k) => planToProd(p, x, lost, `${under(i)}/${k}`)));\n return plan.zoned ? zoneListToProd(rows) : rows;\n }\n case \"modular\":\n if (!Array.isArray(v)) return v;\n return v.map((row, i) => {\n if (!isObj(row) || typeof row._type !== \"string\") return row;\n const { _key, _type, ...rest } = row;\n const fields = plan.types.get(_type);\n // __id is required (the reorder identity): a row with no _key gets one, which reads back as a new _key\n return {\n __id: typeof _key === \"string\" && _key ? _key : `${kebab(_type)}-${i + 1}`,\n __type: kebab(_type),\n data: fields ? mapKeys(rest, fields, (p, x, k) => planToProd(p, x, lost, `${under(i)}/${k}`)) : rest,\n };\n });\n case \"blocks\":\n return Array.isArray(v) ? v.map((c) => (isObj(c) && typeof c._type === \"string\" ? { ...c, _type: kebab(c._type) } : c)) : v;\n case \"slot\": {\n const kids = (type: string) => plan.child?.(type);\n return slotChildrenToStored(\n plan.family ? childVariantsToTypes(v, plan.family) : v,\n plan.multiple !== false,\n (type, values, i) => {\n const fields = kids(type);\n return fields ? (mapKeys(values, fields, (p, x, k) => planToProd(p, x, lost, `${under(i)}/${k}`)) as Obj) : values;\n },\n (rel) => lost?.push(under(rel)),\n );\n }\n case \"types\":\n return take(\n typedRowsToProd(v, (row, i) => {\n const fields = plan.types.get(row._type);\n return fields ? (mapKeys(row, fields, (p, x, k) => planToProd(p, x, lost, `${under(i)}/${k}`)) as Obj) : row;\n }),\n );\n default:\n return v;\n }\n}\n\n/** The keys the kit reads back from a stored image object (imageFromProd) and writes again (imageToProd). */\nconst IMAGE_KIT_KEYS: ReadonlySet<string> = new Set([\"url\", \"id\", \"name\", \"altText\", \"focal\"]);\n\n/**\n * Every key of a stored image the kit cannot hand back. A crop rect is read back as it is (imageFromProd), and an older\n * `{ src, alt }` value reads as its url and alt text, so neither is a loss (QA item 3); a malformed crop, or a key the\n * kit does not model, is.\n */\nfunction imageStoredLoss(v: unknown, rel: string, loss: (rel: string, reason: string) => void) {\n if (!isObj(v)) return;\n const legacy = typeof v.url !== \"string\" && typeof v.src === \"string\";\n for (const [k, x] of Object.entries(v)) {\n if (IMAGE_KIT_KEYS.has(k) || x === undefined) continue;\n if (legacy && k === \"src\") continue;\n if (k === \"alt\" && typeof x === \"string\" && v.altText === undefined) continue;\n if (k === \"crop\") {\n if (x != null && !isCropRect(x)) loss(`${rel}/crop`, \"A saved crop the kit can't read; editing the image would drop it.\");\n } else loss(`${rel}/${k}`, `The image's saved \"${k}\" is not kept by the kit; editing the image would drop it.`);\n }\n}\n\nconst datedLossReason = (v: unknown) =>\n isObj(v) && (\"date\" in v || \"time\" in v || \"timezone\" in v)\n ? \"A stored date-time in the older {date,time,timezone} form; the kit can't read it, so editing it would replace it.\"\n : \"A stored date/time that is not an ISO string can't be read by the kit; editing it would replace it.\";\n\n/** A stored prod value → the V2 value. `loss(rel, reason)`: what the prod value carries that the V2 value cannot (rel is\n * under the value, \"/0/modelSlug\"); a caller that hears any must not write the value back through V2. */\nexport function planFromProd(plan: ValuePlan, v: unknown, loss?: (rel: string, reason: string) => void, rel = \"\"): unknown {\n if (v === undefined) return undefined;\n switch (plan.k) {\n case \"link\":\n return linkFromProd(v);\n case \"button\":\n return buttonFromProd(v);\n case \"image\":\n if (loss) imageStoredLoss(v, rel, loss);\n return imageFromProd(v);\n case \"datetime\":\n case \"date\":\n // an older stored shape ({date, time, timezone}) reads as empty: the next pick would silently replace it\n if (loss && v !== null && typeof v !== \"string\") loss(rel || \"(value)\", datedLossReason(v));\n return plan.k === \"date\" ? v : datetimeFromProd(v, { zone: plan.zone });\n case \"video\":\n return videoFromProd(v);\n case \"list\":\n if (loss && plan.item === \"image\" && Array.isArray(v)) v.forEach((x, i) => imageStoredLoss(x, `${rel}/${i}`, loss));\n return listFromProd(v, plan.item);\n case \"scale\":\n return scaleFromProd(v);\n case \"rating\":\n return ratingFromProd(v, plan.scale);\n case \"form\":\n return referenceFromProd(v);\n case \"ref\":\n case \"refs\":\n if (loss) for (const [i, x] of (Array.isArray(v) ? v : [v]).entries())\n if (isObj(x) && x.modelSlug !== undefined) loss(`${rel}${Array.isArray(v) ? `/${i}` : \"\"}/modelSlug`, \"A V2 reference stores the target id; the polymorphic modelSlug is dropped.\");\n // a stored value the kit cannot read (a { kind, id } target reads back tagged, values.ts) would read as empty and drop on save\n else if (isObj(x) && referenceFromProd(x) === null) loss(`${rel}${Array.isArray(v) ? `/${i}` : \"\"}` || \"(value)\", \"A stored reference the kit can't read; editing it would drop it.\");\n return referenceFromProd(v);\n case \"object\": {\n // a group's children sit under `nonRepeatable`; a value with no such key holds them inline (the server wraps it)\n const env = plan.zoned && isObj(v) && \"nonRepeatable\" in v ? v : undefined;\n if (env && loss)\n for (const k of Object.keys(env)) if (k !== \"nonRepeatable\" && env[k] !== undefined) loss(`${rel}/${k}`, `The group's saved \"${k}\" is not one of its fields; editing the group would drop it.`);\n const at = env ? `${rel}/nonRepeatable` : rel;\n return mapKeys(env ? (isObj(env.nonRepeatable) ? env.nonRepeatable : {}) : v, plan.fields, (p, x, k) => planFromProd(p, x, loss, `${at}/${k}`));\n }\n case \"rows\": {\n const rows = plan.zoned ? zoneListFromProd(v) : v;\n return Array.isArray(rows) ? rows.map((row, i) => mapKeys(row, plan.fields, (p, x, k) => planFromProd(p, x, loss, `${rel}/${i}/${k}`))) : rows;\n }\n case \"modular\":\n return Array.isArray(v)\n ? v.map((row, i) => {\n if (!isObj(row) || typeof row.__type !== \"string\") return row;\n const data = isObj(row.data) ? row.data : {};\n const fields = plan.types.get(camel(row.__type));\n const back = fields ? (mapKeys(data, fields, (p, x, k) => planFromProd(p, x, loss, `${rel}/${i}/${k}`)) as Obj) : data;\n return { _key: row.__id, _type: camel(row.__type), ...back };\n })\n : v;\n case \"blocks\":\n return Array.isArray(v) ? v.map((c) => (isObj(c) && typeof c._type === \"string\" ? { ...c, _type: camel(c._type) } : c)) : v;\n case \"slot\":\n return slotChildrenFromStored(\n v,\n (type, values, i) => {\n const fields = plan.child?.(type);\n const read = fields ? (mapKeys(values, fields, (p, x, k) => planFromProd(p, x, loss, `${rel}/${i}/${k}`)) as Obj) : values;\n const variant = plan.family?.(type)?.current;\n return variant === undefined ? read : { ...read, _variant: variant };\n },\n (i, reason) => loss?.(`${rel}/${i}`, reason),\n );\n case \"types\":\n return typedRowsFromProd(v, (row, i) => {\n const fields = plan.types.get(row._type);\n if (!fields) {\n loss?.(`${rel}/${i}/_type`, `A stored row of item type \"${row._type}\", which this list no longer declares; editing the list would drop it.`);\n return row;\n }\n return mapKeys(row, fields, (p, x, k) => planFromProd(p, x, loss, `${rel}/${i}/${k}`)) as Obj;\n });\n default:\n return v;\n }\n}\n\n/** Each key of an object value through its child field's plan; keys with no field ride along as they are. */\nfunction mapKeys(v: unknown, fields: Map<string, VPlan>, fn: (plan: VPlan, x: unknown, key: string) => unknown): unknown {\n if (!isObj(v)) return v;\n const out: Obj = {};\n for (const [k, x] of Object.entries(v)) {\n const plan = fields.get(k);\n const y = plan ? fn(plan, x, k) : x;\n if (y !== undefined) out[k] = y;\n }\n return out;\n}\n\n/** Every leaf (a JSON pointer under the value, \"\" for the value itself) where `a` and `b` differ; undefined = absent. */\nfunction diffPaths(a: unknown, b: unknown, path = \"\", out: string[] = []): string[] {\n if (deepEqual(a, b)) return out;\n if ((isObj(a) || a === undefined) && (isObj(b) || b === undefined) && (a !== undefined || b !== undefined)) {\n const A = (a ?? {}) as Obj;\n const B = (b ?? {}) as Obj;\n for (const k of new Set([...Object.keys(A), ...Object.keys(B)])) diffPaths(A[k], B[k], `${path}/${k}`, out);\n } else if (Array.isArray(a) && Array.isArray(b)) {\n for (let i = 0; i < Math.max(a.length, b.length); i++) diffPaths(a[i], b[i], `${path}/${i}`, out);\n } else out.push(path);\n return out;\n}\n\nfunction validationToProd(f: FieldSchema, shape: Shape, node: Node, at: string, ctx: Ctx, inTable: boolean, top: boolean) {\n const props = ctx.lane === \"props\";\n const val = f.validation!;\n const t = shape.type;\n const leaf = shape.kind === \"leaf\";\n const lengthy = leaf && (props ? LENGTH_PROPS : LENGTH_FIELDS).has(t);\n const patterned = leaf && (props ? PATTERN_TYPES : LENGTH_FIELDS).has(t) && t !== \"richtext\" && t !== \"document\";\n const patternOk = patterned && typeof val.pattern === \"string\" && val.pattern.length <= PATTERN_MAX && compiles(val.pattern);\n /** the pair each key bounds, so a min over its max is named rather than refused at save */\n const pairs: [string, string, string, string, LossyFeature][] = [];\n const set = (key: string, n: number, feature: LossyFeature, lo: string, hi: string) => {\n node.config[key] = n;\n if (!pairs.some((x) => x[0] === lo)) pairs.push([lo, hi, `${at}/min`, `${at}/max`, feature]);\n };\n for (const k of Object.keys(val) as (keyof typeof val)[]) {\n const v = val[k];\n if (v === undefined) continue;\n const p = `${at}/${k}`;\n if (shape.kind === \"json\" && k !== \"required\" && k !== \"recommendedMax\") {\n lose(ctx, p, shape.feature);\n continue;\n }\n switch (k) {\n case \"required\":\n node.required = val.required;\n break;\n case \"min\":\n case \"max\": {\n const n = v as number;\n const lo = k === \"min\";\n if (lengthy) {\n if (isWhole(n)) set(lo ? \"minLength\" : \"maxLength\", n, \"validation.length\", \"minLength\", \"maxLength\");\n else lose(ctx, p, \"validation.length\");\n } else if (t === \"number\") {\n // V2 validation.min / max are the error bounds; config.min / max stay the input's range (numeric)\n const b = ((node.config.validation as { min?: number; max?: number } | undefined) ??= {});\n b[k] = n;\n } else if (t === \"rating\") lose(ctx, p, \"rating bounds\");\n else if (shape.kind === \"zones\" || shape.kind === \"modular\" || shape.kind === \"types\" || shape.kind === \"slot\" || shape.kind === \"itemType\") {\n // a prop's own config.minItems / maxItems: a slot's within SLOT_ITEMS_CAP, a table's rows or an array's items LIST_ITEMS_CAP\n const cap = shape.kind === \"slot\" ? SLOT_ITEMS_CAP : LIST_ITEMS_CAP;\n const ok = (props && top) || shape.kind === \"slot\" ? isWhole(n, lo ? 0 : 1, cap) : isWhole(n);\n if (ok) set(lo ? \"minItems\" : \"maxItems\", n, \"validation.items\", \"minItems\", \"maxItems\");\n else lose(ctx, p, \"validation.items\");\n } else if (shape.kind === \"refs\" || t === \"multiselect\" || t === \"tags\") {\n const ok = t === \"tags\" ? isWhole(n, lo ? 0 : 1, TAGS_ITEMS_MAX) : isWhole(n);\n if (ok) set(k, n, \"validation.items\", \"min\", \"max\");\n else lose(ctx, p, \"validation.items\");\n } else lose(ctx, p, \"validation.length\");\n break;\n }\n case \"recommendedMax\":\n if (isWhole(v, 1)) node.recommendedMax = v as number;\n else lose(ctx, p, \"validation.recommendedMax\");\n break;\n case \"pattern\":\n if (patternOk) node.config.pattern = v as string;\n else lose(ctx, p, \"validation.pattern\");\n break;\n case \"patternMessage\":\n if (patternOk && typeof v === \"string\" && v.trim() !== \"\" && v.length <= PATTERN_MESSAGE_MAX) node.config.patternMessage = v;\n else lose(ctx, p, \"validation.patternMessage\");\n break;\n case \"unique\": {\n if (val.unique === false) node.unique = false;\n // a polymorphic list's items are told apart by _key (unique_prop_scope)\n else if (shape.kind === \"types\") lose(ctx, p, \"validation.unique\");\n else if (props) {\n // a placement holds its own value: only a list's items, or a table's rows, have a set to be unique in\n if (UNIQUE_LIST_PROPS.has(t) || (inTable && UNIQUE_ROW_PROPS.has(t))) node.unique = true;\n else cat(ctx, p, \"not applicable (props)\");\n } else {\n const polymorphic = t === \"reference\" && (f.reference?.to ?? []).filter(ENTRY_TARGET).length > 1;\n if (UNIQUE_TYPES.has(t) && !polymorphic) node.unique = true;\n else lose(ctx, p, \"validation.unique\");\n }\n break;\n }\n default:\n lose(ctx, p, \"unsupported key\");\n }\n }\n const b = node.config.validation as { min?: number; max?: number } | undefined;\n if (b && b.min !== undefined && b.max !== undefined && b.min > b.max) {\n delete node.config.validation;\n lose(ctx, `${at}/min`, \"validation.items\");\n lose(ctx, `${at}/max`, \"validation.items\");\n }\n for (const [lo, hi, pLo, pHi, feature] of pairs) {\n const a = node.config[lo];\n const z = node.config[hi];\n if (typeof a === \"number\" && typeof z === \"number\" && a > z) {\n delete node.config[lo];\n delete node.config[hi];\n lose(ctx, pLo, feature);\n lose(ctx, pHi, feature);\n }\n }\n}\n\nfunction optionsToProd(f: FieldSchema, shape: Shape, node: Node, at: string, ctx: Ctx) {\n if (shape.type !== \"select\" && shape.type !== \"multiselect\" && shape.type !== \"tags\") return lose(ctx, at, \"unsupported key\");\n const opts = f.options!;\n // option icons are all or none per list: one that is not a dock name drops the list's icons\n const icons = opts.map((o) => (o.icon === undefined ? undefined : dockIconOf(o.icon)));\n const allIcons = opts.every((o, i) => o.icon === undefined || icons[i] !== undefined);\n node.options = opts.map((o: Option, i) => {\n const out: ChoiceOption = { label: o.label, value: o.value };\n if (o.icon !== undefined) {\n if (allIcons) out.icon = icons[i];\n else lose(ctx, `${at}/${i}/icon`, \"option icon\");\n }\n const d = o.description;\n if (d !== undefined) {\n if (typeof d === \"string\" && d.trim() !== \"\" && !/[\\r\\n]/.test(d) && d.length <= OPTION_DESCRIPTION_MAX) out.description = d;\n else lose(ctx, `${at}/${i}/description`, \"option description\");\n }\n for (const k of Object.keys(o)) if (![\"value\", \"label\", \"icon\", \"description\"].includes(k)) lose(ctx, `${at}/${i}/${k}`, \"unsupported key\");\n return out;\n });\n}\n\n/** V2 layouts → prod ui.control (a leaf's control) or ui.layout (a list's rows); dock-vocabulary.ts controlHardening rules. */\nfunction layoutToProd(f: FieldSchema, shape: Shape, node: Node, at: string, ctx: Ctx) {\n const l = f.layout!;\n const t = shape.type;\n const n = f.options?.length ?? 0;\n if (l === \"segmented\" && t === \"select\") {\n if (n >= 2 && n <= 4) node.ui.control = \"segmented\";\n else if (n >= 5) {\n // V2's D46 rule (choice.tsx fitsSegmented): a segmented select that does not fit draws the dropdown, which is\n // what a select with no control draws: nothing drawn is lost (CATALOG \"segmented fallback\")\n cat(ctx, at, \"segmented fallback\");\n } else lose(ctx, at, \"layout\");\n } else if (l === \"slider\" && t === \"number\" && f.type === \"number\") node.ui.control = \"slider\";\n else if ((UI_CONTROLS as readonly string[]).includes(l) && l !== \"segmented\" && l !== \"slider\" && CONTROL_TYPES[l as UiControl]?.includes(t)) node.ui.control = l as UiControl;\n else if (l === \"list\" && (shape.kind === \"zones\" || shape.kind === \"itemType\" || shape.kind === \"modular\" || shape.kind === \"types\" || shape.kind === \"refs\") && f.arrayLayout === undefined) node.ui.layout = \"rows\";\n else lose(ctx, at, \"layout\");\n}\n\n/** The prod type a V2 field is stored as, for a preview path reading into it (no loss is reported). */\nfunction storedType(f: FieldSchema, ctx: Ctx): string {\n const quiet: Ctx = { ...ctx, lossy: [], catalog: [] };\n return shapeOf(f, 1, quiet, false).type;\n}\n/** The V2 fields a preview path segment may name below `f` (an object's fields, a list's item fields), or null for a leaf. */\nfunction previewKids(f: FieldSchema): FieldSchema[] | null {\n if (f.type === \"object\") return f.fields ?? [];\n if (f.type === \"array\" && Array.isArray(f.of) && f.of.length === 1 && f.of[0].type === \"object\") return f.of[0].fields ?? [];\n return null;\n}\n\n/**\n * A V2 preview path → the path prod stores (previewPathProblem): the first segment a child, each later one a child of the\n * node before it, or a key of an object-valued leaf (`image.alt` is stored `image.altText`). undefined: no prod form.\n */\nfunction previewPathToProd(path: string, children: FieldSchema[], ctx: Ctx): string | undefined {\n const segs = path.split(\".\");\n let node = children.find((c) => c.name === segs[0]);\n if (!node) return undefined;\n const out = [segs[0]];\n for (let i = 1; i < segs.length; i++) {\n const kids = previewKids(node);\n if (kids) {\n const next = kids.find((c) => c.name === segs[i]);\n if (!next) return undefined;\n out.push(segs[i]);\n node = next;\n continue;\n }\n // a data table's value reads by its caption or notes (previewPathProblem), the last segment\n if (node.type === \"table\") return TABLE_PATH_KEYS.includes(segs[i]) && i === segs.length - 1 ? [...out, segs[i]].join(\".\") : undefined;\n const type = storedType(node, ctx);\n if (!OBJECT_VALUE_TYPES.has(type)) return undefined;\n const key = type === \"image\" ? (IMAGE_PATH_KEY[segs[i]] ?? segs[i]) : segs[i];\n if (LEAF_VALUE_KEYS[type] && !LEAF_VALUE_KEYS[type].includes(key)) return undefined;\n return [...out, key, ...segs.slice(i + 1)].join(\".\");\n }\n return out.join(\".\");\n}\n\nfunction previewToProd(pv: PreviewConfig, children: FieldSchema[], at: string, ctx: Ctx): UiPreview {\n const out: UiPreview = {};\n for (const k of Object.keys(pv) as (keyof PreviewConfig)[]) {\n const v = pv[k];\n if (v === undefined) continue;\n if (k === \"title\" || k === \"subtitle\" || k === \"media\") {\n const stored = previewPathToProd(v, children, ctx);\n if (stored !== undefined) out[k] = stored;\n else lose(ctx, `${at}/${k}`, \"preview path\");\n } else if (k === \"fallback\") {\n const t = v.trim();\n if (t && t === v && t.length <= PREVIEW_FALLBACK_MAX) out.fallback = v;\n else lose(ctx, `${at}/${k}`, \"help>limit\");\n } else if (k === \"icon\") {\n const dock = dockIconOf(v);\n if (dock) out.icon = dock;\n else lose(ctx, `${at}/${k}`, \"preview icon\");\n } else lose(ctx, `${at}/${k}`, \"unsupported key\");\n }\n return out;\n}\n\n/**\n * A V2 dotted document preview path (`slides.0.heading`, `default.heading`) the backend keeps (componentPreviewRefusals\n * previewPathOfProps): its head a top-level prop, an index segment stepping into an item of a list, the rest a path\n * previewPathToProd stores unchanged (a renamed key, `image.alt` → `altText`, has no stored form here).\n */\nfunction documentPreviewPathOk(path: string, keys: ReadonlySet<string>, fields: FieldSchema[], ctx: Ctx): boolean {\n const segs = path.split(\".\");\n if (segs.length < 2 || !keys.has(segs[0])) return false;\n const head = fields.find((f) => f.name === segs[0]);\n if (!head) return false;\n const polyOf = (f: FieldSchema) => (f.type === \"array\" && Array.isArray(f.of) && f.of.length > 1 && f.of.every((o) => o.type === \"object\") ? f.of : undefined);\n let node: FieldSchema = head;\n const kept = [segs[0]];\n let poly = false;\n for (let i = 1; i < segs.length; i++) {\n const seg = segs[i];\n if (/^\\d+$/.test(seg) && (node.type === \"array\" || node.type === \"multiselect\" || node.type === \"tags\")) continue;\n // a polymorphic list's item reads by any of its item types' fields (`gallery.0.image`: the image type's)\n const types = polyOf(node);\n const kids = types ? types.flatMap((o) => o.fields ?? []) : previewKids(node);\n if (!kids) {\n // a leaf: the rest are keys of its value (`table.caption`), judged with the path\n kept.push(...segs.slice(i));\n break;\n }\n const next = kids.find((c) => c.name === seg);\n if (!next) return false;\n if (types) poly = true;\n kept.push(seg);\n node = next;\n }\n if (poly) return true;\n const clean = kept.join(\".\");\n return previewPathToProd(clean, fields, ctx) === clean;\n}\n\n/**\n * A V2 schema's document-level preview → component.preview (BE componentPreviewSchema): `title` / `subtitle` / `media`\n * kept when they name a top-level prop key or a dotted path into one (else preview_key_unknown; a catalog note: the row\n * reads the first text),\n * `fallback` trimmed and at most COMPONENT_PREVIEW_FALLBACK_MAX, `icon` a dock icon.\n */\nfunction componentPreviewToProd(pv: PreviewConfig, keys: ReadonlySet<string>, fields: FieldSchema[], at: string, ctx: Ctx): ComponentPreview {\n const out: ComponentPreview = {};\n for (const k of Object.keys(pv) as (keyof PreviewConfig)[]) {\n const v = pv[k];\n if (v === undefined) continue;\n if (k === \"title\" || k === \"subtitle\" || k === \"media\") {\n if ((keys.has(v) || documentPreviewPathOk(v, keys, fields, ctx)) && v.length <= COMPONENT_PREVIEW_KEY_MAX) out[k] = v;\n else cat(ctx, `${at}/${k}`, \"document preview path\");\n } else if (k === \"fallback\") {\n const t = v.trim();\n if (t && t === v && t.length <= COMPONENT_PREVIEW_FALLBACK_MAX) out.fallback = v;\n else lose(ctx, `${at}/${k}`, \"help>limit\");\n } else if (k === \"icon\") {\n const dock = dockIconOf(v);\n if (dock) out.icon = dock;\n else lose(ctx, `${at}/${k}`, \"preview icon\");\n } else lose(ctx, `${at}/${k}`, \"unsupported key\");\n }\n return out;\n}\n\n/** A list item's name and title: the convention, else ui.itemName / ui.itemTitle (chromeUiProblems). */\nfunction itemIdentity(item: FieldSchema, conv: { name: string; title: string }, node: Node, ip: string, ctx: Ctx) {\n if (item.name !== conv.name) {\n if (ITEM_NAME_RE.test(item.name)) node.ui.itemName = item.name;\n else lose(ctx, `${ip}/name`, \"item identity\");\n }\n if (item.title !== conv.title) {\n const t = item.title;\n if (t === t.trim() && t.length >= 1 && t.length <= ITEM_TITLE_MAX) node.ui.itemTitle = t;\n else lose(ctx, `${ip}/title`, \"item identity\");\n }\n}\n\nfunction ofToProd(f: FieldSchema, shape: Shape, node: Node, at: string, lv: number, ctx: Ctx) {\n if (shape.kind === \"json\" || shape.kind === \"leaf\" || shape.kind === \"object\") return lose(ctx, at, \"unsupported key\");\n if (shape.kind === \"modular\") {\n // each item type is a kind:'block' model (returned in blockModels); the modular field stores its slug\n node.config.blockSlugs = shape.items.map((i) => kebab(i.name));\n shape.items.forEach((item, i) => blockModelFor(item, `${at}/${i}`, ctx, node));\n return;\n }\n if (shape.kind === \"types\") return itemTypesToProd(shape.items, node, at, lv, ctx);\n if (shape.kind === \"slot\") {\n // V2 names block types: config.allow keeps the names as written (backend slotAllowIssues); the dock resolves them to\n // the project's components (kitProps resolveSlotAllow). config.componentIds stays the host's resolved id list.\n const of = f.of as { type?: string; allow?: string[] };\n for (const k of Object.keys(of) as (keyof typeof of)[]) {\n if (of[k] === undefined) continue;\n if (k === \"allow\" && ctx.lane === \"fields\") {\n // a model's slot names kind:'block' models by slug (config.blockSlugs); a name kebab-case does not read back is named\n node.config.blockSlugs = of.allow!.map(kebab);\n of.allow!.forEach((n, i) => camel(kebab(n)) !== n && lose(ctx, `${at}/allow/${i}`, \"type name\"));\n } else if (k === \"allow\") {\n if (slotAllowOk(of.allow)) node.config.allow = [...of.allow];\n else cat(ctx, `${at}/allow`, \"slot allow\");\n } else if (k !== \"type\" || of.type !== \"block\") lose(ctx, `${at}/${k}`, \"unsupported key\");\n }\n return;\n }\n const item = shape.item;\n const ip = `${at}/0`;\n if (shape.kind === \"zones\") {\n const fields = item.fields ?? [];\n node.zoned = true;\n // a prop table's sub-fields compare per row (unique), so they know they sit in one\n node.children = fields.map((c, i) => convertField(c, `${ip}/fields/${i}`, lv + 1, ctx, fields, false, ctx.lane === \"props\"));\n itemIdentity(item, conventionItem(f.name, f.title, node.ui.itemLabel), node, ip, ctx);\n for (const k of Object.keys(item) as (keyof FieldSchema)[]) {\n const v = item[k];\n if (v === undefined) continue;\n const p = `${ip}/${k}`;\n if (k === \"type\" || k === \"fields\" || k === \"name\" || k === \"title\") continue;\n if (k === \"preview\") node.ui.preview = previewToProd(item.preview!, fields, p, ctx);\n else if (k === \"icon\") {\n const dock = f.icon === undefined ? dockIconOf(item.icon) : undefined;\n if (dock) node.ui.icon = dock;\n else lose(ctx, p, \"item icon\");\n } else if (k === \"openMode\") cat(ctx, p, \"item openMode\");\n else lose(ctx, p, \"item identity\");\n }\n return;\n }\n // a primitive or reference item: prod keeps its type (and a reference's targets), its name and title, and a list of\n // scalars its item's own settings (config.item, backend arrayItemSettingsSchema)\n if (shape.kind === \"itemType\") node.config.itemType = shape.itemType;\n itemIdentity(item, conventionItem(f.name, f.title), node, ip, ctx);\n const settings: ArrayItemSettings = {};\n // a prop keeps a scalar list's item settings (config.item); a model's primitive list refuses them (array_config_key_unknown)\n const scalars = shape.kind === \"itemType\" && !shape.shopify && ctx.lane === \"props\";\n for (const k of Object.keys(item) as (keyof FieldSchema)[]) {\n const v = item[k];\n if (v === undefined) continue;\n const p = `${ip}/${k}`;\n if (k === \"name\" || k === \"title\") continue;\n if (k === \"type\") {\n if (shape.kind === \"itemType\" && shape.shopify) continue;\n if (shape.kind === \"itemType\" && item.type === \"text\") lose(ctx, p, \"item settings\");\n } else if (k === \"reference\" && shape.kind === \"refs\") referenceToConfig(item.reference!, node, p, ctx);\n else if (k === \"reference\" && shape.kind === \"itemType\" && shape.shopify) continue;\n else if (scalars && k === \"description\" && typeof v === \"string\" && v.trim() === v && v.length >= 1 && v.length <= PROP_HELP_MAX) settings.helpText = v;\n else if (scalars && k === \"localized\" && typeof v === \"boolean\") settings.localized = v;\n else if (scalars && k === \"validation\") itemValidationToProd(item, shape.itemType, settings, p, ctx);\n else lose(ctx, p, \"item settings\");\n }\n if (nonEmpty(settings)) node.config.item = settings;\n}\n\n/** A scalar list item's V2 validation → config.item: required, a text / rich text item's length, a text item's pattern. */\nfunction itemValidationToProd(item: FieldSchema, itemType: ListItemType, out: ArrayItemSettings, at: string, ctx: Ctx) {\n const val = item.validation!;\n const lengthy = itemType === \"text\" || itemType === \"richtext\";\n for (const k of Object.keys(val) as (keyof typeof val)[]) {\n const v = val[k];\n if (v === undefined) continue;\n if (k === \"required\" && typeof v === \"boolean\") out.required = v;\n else if ((k === \"min\" || k === \"max\") && lengthy && isWhole(v)) out[k === \"min\" ? \"minLength\" : \"maxLength\"] = v as number;\n else if (k === \"pattern\" && itemType === \"text\" && typeof v === \"string\" && v.length <= PATTERN_MAX && compiles(v)) out.pattern = v;\n else if (k === \"patternMessage\" && typeof v === \"string\" && v.trim() !== \"\" && v.length <= PATTERN_MESSAGE_MAX) out.patternMessage = v;\n else lose(ctx, `${at}/${k}`, \"item settings\");\n }\n if (out.minLength !== undefined && out.maxLength !== undefined && out.minLength > out.maxLength) {\n delete out.minLength;\n delete out.maxLength;\n lose(ctx, `${at}/min`, \"item settings\");\n }\n if (out.patternMessage !== undefined && out.pattern === undefined) {\n delete out.patternMessage;\n lose(ctx, `${at}/patternMessage`, \"item settings\");\n }\n}\n\n/** A slot's per-child settings → config.slotSettings: leaf sub-fields, at most SLOT_SETTINGS_MAX (slotSettingsHardening). */\nfunction slotSettingsToProd(settings: FieldSchema[], node: Node, at: string, lv: number, ctx: Ctx) {\n const kept = settings.slice(0, SLOT_SETTINGS_MAX);\n if (settings.length > SLOT_SETTINGS_MAX) settings.slice(SLOT_SETTINGS_MAX).forEach((_, i) => lose(ctx, `${at}/${SLOT_SETTINGS_MAX + i}`, \"slotSettings\"));\n node.slotSettings = kept.map((c, i) => convertField(c, `${at}/${i}`, lv + 1, ctx, kept, false, false, false, true));\n}\n\n/**\n * A polymorphic list's item types → config.itemTypes `{ name, label, fields }`: the name is what a row's `_type` holds,\n * the title its label, its icon and row preview `icon` / `preview` (paths over its own fields). One prod cannot name is\n * not stored, which moves the ones after it up a place, so the whole list is named.\n */\nfunction itemTypesToProd(items: FieldSchema[], node: Node, at: string, lv: number, ctx: Ctx) {\n const names = new Set<string>();\n node.itemTypes = [];\n let dropped = false;\n items.forEach((item, i) => {\n const ip = `${at}/${i}`;\n const fields = item.fields ?? [];\n const why: LossyFeature | undefined = !ITEM_TYPE_NAME.test(item.name) || !fields.length ? \"item identity\" : names.has(item.name) ? \"duplicate name\" : undefined;\n if (why) {\n lose(ctx, ip, why);\n dropped = true;\n return;\n }\n names.add(item.name);\n const label = trunc(ctx, `${ip}/title`, item.title, ITEM_TYPE_LABEL_MAX, \"item identity\");\n const children = fields.map((c, j) => convertField(c, `${ip}/fields/${j}`, lv + 1, ctx, fields, false, false, true));\n const type: NonNullable<Node[\"itemTypes\"]>[number] = { name: item.name, label, children };\n for (const k of Object.keys(item) as (keyof FieldSchema)[]) {\n if (item[k] === undefined || k === \"name\" || k === \"title\" || k === \"type\" || k === \"fields\") continue;\n const p = `${ip}/${k}`;\n if (k === \"preview\") {\n const preview = previewToProd(item.preview!, fields, p, ctx);\n if (nonEmpty(preview)) type.preview = preview;\n } else if (k === \"icon\") {\n const dock = dockIconOf(item.icon);\n if (dock) type.icon = dock;\n else lose(ctx, p, \"item icon\");\n } else if (k === \"openMode\") cat(ctx, p, \"item openMode\");\n else lose(ctx, p, \"item identity\");\n }\n node.itemTypes!.push(type);\n });\n if (dropped && node.itemTypes.length < items.length && node.itemTypes.length) lose(ctx, at, \"item identity\");\n}\n\n/**\n * A modular item type → the kind:'block' model its rows are stored against: the item title is the model name, its fields\n * the model's top-level fields. A block model holds only fields a block primitive renders; any other is not stored. The\n * item's icon and preview are how its rows read in THIS field: the field's ui.blocks, by slug.\n */\nfunction blockModelFor(item: FieldSchema, at: string, ctx: Ctx, list: Node) {\n const start = ctx.lossy.length;\n const startCat = ctx.catalog.length;\n const slug = kebab(item.name);\n // its own model: no tabs or sections of the model that uses it\n const sub: Ctx = { ...ctx, tabs: new Set(), droppedTabs: new Map(), sets: new Map() };\n const fields = item.fields ?? [];\n const kept: ContentModelField[] = [];\n const chrome: { icon?: DockIconName; preview?: UiPreview } = {};\n for (const k of Object.keys(item) as (keyof FieldSchema)[]) {\n const p = `${at}/${k}`;\n if (item[k] === undefined || k === \"type\" || k === \"title\") continue;\n if (k === \"name\") {\n if (camel(slug) !== item.name) lose(ctx, p, \"item identity\");\n } else if (k === \"fields\") {\n let dropped = false;\n let shifted = false;\n fields.forEach((c, j) => {\n const fp = `${p}/${j}`;\n const mark = ctx.lossy.length;\n const markCat = ctx.catalog.length;\n const node = convertField(c, fp, 1, sub, fields, false);\n if (BLOCK_FIELD_TYPES.has(node.type)) {\n kept.push(emitField(node));\n // a field left out before this one shifts it up a place: the list is not kept in its positions\n if (dropped && !shifted) {\n shifted = true;\n lose(ctx, p, \"block model field\");\n }\n return;\n }\n // the whole field is gone: one item names it\n ctx.lossy.length = mark;\n ctx.catalog.length = markCat;\n dropped = true;\n lose(ctx, fp, \"block model field\");\n });\n } else if (k === \"openMode\") cat(ctx, p, \"item openMode\");\n else if (k === \"icon\") {\n const dock = dockIconOf(item.icon);\n if (dock) chrome.icon = dock;\n else lose(ctx, p, \"item icon\");\n } else if (k === \"preview\") chrome.preview = previewToProd(item.preview!, fields, p, ctx);\n else lose(ctx, p, \"item identity\");\n }\n const model: ProdContentModel = { name: item.title, slug, kind: \"block\", fields: kept };\n const prev = ctx.blockModels.get(slug);\n const keep = () => {\n if (!nonEmpty(chrome) || list.ui.blocks?.[slug]) return;\n list.ui.blocks = { ...list.ui.blocks, [slug]: chrome };\n };\n if (!prev) {\n ctx.blockModels.set(slug, model);\n return keep();\n }\n if (deepEqual(prev, model)) return keep();\n // a second item type with this slug and other fields: the slug names the first one's model\n ctx.lossy.length = start;\n ctx.catalog.length = startCat;\n lose(ctx, at, \"duplicate name\");\n}\n\n/**\n * A reference's targets: entry models → contentModelId / polymorphic + allowedModelSlugs; page, form and collection →\n * config.targets and the filter → config.filter (backend refTargetKeys, both lanes). Read back, entry models come first,\n * then the targets.\n */\nfunction referenceToConfig(ref: NonNullable<FieldSchema[\"reference\"]>, node: Node, at: string, ctx: Ctx) {\n const to = ref.to ?? [];\n const entries = to.filter(ENTRY_TARGET);\n // page, form and collection targets and the filter are kept in both lanes (backend reference-targets.ts, a4ce1ae95)\n const targets = to.filter((t) => REF_TARGET_KINDS.includes(t));\n const kept = entries.length + targets.length;\n // only a shopify target is not kept; the kept ones shift position, so a partial loss is reported on the whole list\n if (kept < to.length) lose(ctx, kept || !to.length ? `${at}/to` : at, \"shopify reference\");\n else if (to.join() !== [...entries, ...targets].join()) lose(ctx, `${at}/to`, \"reference order\");\n if (entries.length === 1) node.config.contentModelId = entries[0];\n else if (entries.length > 1) Object.assign(node.config, { polymorphic: true, allowedModelSlugs: entries });\n if (targets.length) node.config.targets = targets as NonNullable<FieldConfig[\"targets\"]>;\n if (ref.filter !== undefined) {\n if (filterKept(ref.filter)) node.config.filter = ref.filter;\n else lose(ctx, `${at}/filter`, \"reference filter\");\n }\n for (const k of Object.keys(ref)) if (k !== \"to\" && k !== \"filter\") lose(ctx, `${at}/${k}`, \"unsupported key\");\n}\n\nfunction numericToProd(f: FieldSchema, node: Node, at: string, ctx: Ctx) {\n if (f.type !== \"number\" && f.type !== \"rating\") return lose(ctx, at, \"unsupported key\");\n const n = f.numeric!;\n // ratingConfigSchema: min ≥ 0, max a whole 1–10, step > 0, min < max, at most RATING_MAX_STOPS whole steps\n const lo = n.min ?? 0;\n const hi = n.max ?? 5;\n const st = n.step ?? (f.type === \"rating\" ? V2_RATING_STEP : 1);\n const stops = (hi - lo) / st;\n const ratingOk =\n (n.min === undefined || (Number.isFinite(n.min) && n.min >= 0)) &&\n (n.max === undefined || isWhole(n.max, 1, RATING_MAX)) &&\n (n.step === undefined || (Number.isFinite(n.step) && n.step > 0)) &&\n lo < hi &&\n Math.abs(stops - Math.round(stops)) < 1e-9 &&\n Math.round(stops) <= RATING_MAX_STOPS;\n for (const k of Object.keys(n) as (keyof typeof n)[]) {\n const v = n[k];\n if (v === undefined) continue;\n const p = `${at}/${k}`;\n if (k === \"unit\") {\n const u = v as string;\n if (f.type === \"number\" && typeof u === \"string\" && u.trim() !== \"\" && u.length <= NUMBER_UNIT_MAX) node.config.unit = u;\n else lose(ctx, p, \"numeric unit\");\n } else if (k === \"min\" || k === \"max\" || k === \"step\") {\n if (f.type === \"number\") node.config[k] = v as number;\n else if (ratingOk) node.config[k] = v as number;\n else lose(ctx, p, \"rating bounds\");\n } else lose(ctx, p, \"unsupported key\");\n }\n}\n\nconst SCALE_UNIT_SET: ReadonlySet<string> = new Set([\"px\", \"%\", \"rem\", \"em\", \"vw\", \"vh\"]);\nconst unitsOk = (u: unknown) => Array.isArray(u) && u.length >= 1 && u.every((x) => SCALE_UNIT_SET.has(x));\nconst boundOk = (b: unknown) => b === undefined || (typeof b === \"number\" && Number.isFinite(b)) || (isObj(b) && Object.entries(b).every(([k, x]) => SCALE_UNIT_SET.has(k) && typeof x === \"number\"));\nconst textOk = (s: unknown, max: number) => typeof s === \"string\" && s.length >= 1 && s.length <= max;\n\n/** A V2 scale → config.scale (numberScaleSchema): steps, units, presets and the custom escape hatch, each held to its rules. */\nfunction scaleToConfig(s: ScaleSchema, node: Node, at: string, ctx: Ctx) {\n const steps = s.steps;\n let outSteps: NumberScale[\"steps\"];\n if (Array.isArray(steps)) {\n const ok =\n steps.length >= 1 &&\n steps.length <= SCALE_STEPS_MAX &&\n new Set(steps.map((x) => x.value)).size === steps.length &&\n steps.every(\n (x) =>\n typeof x.value === \"string\" && x.value === x.value.trim() && textOk(x.value, SCALE_TOKEN_VALUE_MAX) && textOk(x.label, SCALE_LABEL_MAX) &&\n (x.title === undefined || textOk(x.title, SCALE_TITLE_MAX)) && (x.css === undefined || textOk(x.css, SCALE_CSS_MAX)) &&\n (x.px === undefined || (typeof x.px === \"number\" && Number.isFinite(x.px))) &&\n Object.keys(x).every((k) => [\"value\", \"label\", \"title\", \"px\", \"css\"].includes(k)),\n );\n if (!ok) return lose(ctx, at, \"scale rules\");\n outSteps = steps.map((x) => ({ ...x }));\n } else {\n if (!(steps.min < steps.max) || (steps.step !== undefined && !(steps.step > 0))) return lose(ctx, at, \"scale rules\");\n outSteps = { min: steps.min, max: steps.max, ...(steps.step !== undefined ? { step: steps.step } : {}) };\n }\n const out: NumberScale = { steps: outSteps };\n const tokens = Array.isArray(steps) ? new Set(steps.map((x) => x.value)) : undefined;\n const c = s.allowCustom;\n const customOk =\n c === undefined ||\n typeof c === \"boolean\" ||\n (typeof c === \"object\" && c !== null && boundOk(c.min) && boundOk(c.max) && (c.units === undefined || unitsOk(c.units)) && (c.step === undefined || c.step > 0) &&\n Object.keys(c).every((x) => [\"min\", \"max\", \"units\", \"step\"].includes(x)));\n for (const k of Object.keys(s) as (keyof ScaleSchema)[]) {\n const v = s[k];\n if (v === undefined || k === \"steps\") continue;\n const p = `${at}/${k}`;\n if (k === \"units\") {\n if (unitsOk(v)) out.units = [...(v as NonNullable<ScaleSchema[\"units\"]>)];\n else lose(ctx, p, \"scale rules\");\n } else if (k === \"defaultUnit\") {\n if (SCALE_UNIT_SET.has(v as string)) out.defaultUnit = s.defaultUnit;\n else lose(ctx, p, \"scale rules\");\n } else if (k === \"allowCustom\") {\n if (customOk) out.allowCustom = typeof c === \"boolean\" ? c : JSON.parse(JSON.stringify(c));\n else lose(ctx, p, \"scale rules\");\n } else if (k === \"presets\") {\n const presets = s.presets!;\n const ok =\n presets.length <= SCALE_PRESETS_MAX &&\n presets.every((x) => {\n if (x.label !== undefined && !textOk(x.label, SCALE_LABEL_MAX)) return false;\n if (Object.keys(x).some((y) => y !== \"label\" && y !== \"value\")) return false;\n const pv = x.value;\n if (typeof pv === \"number\") return Number.isFinite(pv);\n if (typeof pv === \"string\") return textOk(pv, SCALE_TOKEN_VALUE_MAX) && !!tokens?.has(pv);\n return isObj(pv) && typeof pv.value === \"number\" && SCALE_UNIT_SET.has(pv.unit) && Object.keys(pv).length === 2 && customOk && !!s.allowCustom;\n });\n if (ok) out.presets = presets.map((x) => ({ ...(x.label !== undefined ? { label: x.label } : {}), value: typeof x.value === \"object\" ? { ...x.value } : x.value }));\n else lose(ctx, p, \"scale rules\");\n } else lose(ctx, p, \"unsupported key\");\n }\n node.config.scale = out;\n}\n\n/** V2 operator → prod showIf op (the legacy `equals` / `notEmpty` forms read as is / is one of / has a value). */\nconst SHOW_IF_OP: Record<NonNullable<Condition[\"op\"]>, ShowIfRule[\"op\"]> = { is: \"eq\", isNot: \"neq\", in: \"in\", notIn: \"notIn\", empty: \"empty\", notEmpty: \"notEmpty\", gt: \"gt\", lt: \"lt\" };\nconst VALUELESS = new Set<ShowIfRule[\"op\"]>([\"empty\", \"notEmpty\", \"isSet\"]);\n\nfunction conditionToShowIf(h: Condition, at: string, siblings: FieldSchema[], ctx: Ctx, variantOk: boolean): ShowIf | undefined {\n const rules: ShowIfRule[] = [];\n for (const [i, r] of [h, ...(h.also ?? [])].entries()) {\n const rule = conditionRule(r, i === 0, siblings, variantOk);\n if (!rule) return void lose(ctx, at, \"condition\");\n rules.push(rule);\n }\n if (h.match !== undefined && h.match !== \"all\" && h.match !== \"any\") return void lose(ctx, at, \"condition\");\n return { match: h.match ?? \"all\", rules };\n}\n\n/** One V2 rule as a prod rule, or null when prod cannot hold it (a scope, a non-sibling, a value showIf cannot test). */\nfunction conditionRule(r: Condition, head: boolean, siblings: FieldSchema[], variantOk: boolean): ShowIfRule | null {\n // a condition names a sibling; the block's `_variant` is one only for a top-level prop (BLOCK_VARIANT_FIELD).\n // ponytail: prod resolves a rule at the nearest level that declares its field, so a `scope` is not carried.\n const variant = variantOk && r.field === \"_variant\";\n if (!r.field || r.scope !== undefined || (!variant && !siblings.some((s) => s.name === r.field))) return null;\n const allowed = head ? [\"field\", \"equals\", \"notEmpty\", \"op\", \"value\", \"also\", \"match\"] : [\"field\", \"equals\", \"notEmpty\", \"op\", \"value\"];\n if (Object.keys(r).some((k) => !allowed.includes(k) && (r as unknown as Obj)[k] !== undefined)) return null;\n const forms = [r.op !== undefined, r.equals !== undefined, r.notEmpty !== undefined].filter(Boolean).length;\n if (forms !== 1) return null;\n if (r.notEmpty !== undefined) return r.notEmpty === true ? { field: r.field, op: \"notEmpty\" } : null;\n const target = r.op !== undefined ? r.value : r.equals;\n const op: ShowIfRule[\"op\"] = r.op !== undefined ? SHOW_IF_OP[r.op] : Array.isArray(target) ? \"in\" : \"eq\";\n if (!op) return null;\n if (VALUELESS.has(op)) return r.value === undefined ? { field: r.field, op } : null;\n const sibType = variant ? undefined : siblings.find((s) => s.name === r.field)?.type;\n if (op === \"gt\" || op === \"lt\") return typeof target === \"number\" && Number.isFinite(target) ? { field: r.field, op, value: String(target) } : null;\n const list = Array.isArray(target) ? target : [target];\n const strs: string[] = [];\n for (const v of list) {\n if (![\"string\", \"number\", \"boolean\"].includes(typeof v)) return null;\n const s = String(v);\n if (coerceRuleValue(sibType, s) !== v) return null;\n strs.push(s);\n }\n if (op === \"in\" || op === \"notIn\") return { field: r.field, op, value: strs };\n return Array.isArray(target) ? (strs.length ? { field: r.field, op: op === \"eq\" ? \"in\" : \"notIn\", value: strs } : null) : { field: r.field, op, value: strs[0] };\n}\n\n/* ── emit per lane ───────────────────────────────────────────────────── */\nconst nonEmpty = <T extends object>(o: T) => (Object.keys(o).length ? o : undefined);\nfunction common(n: Node): Obj {\n const out: Obj = { key: n.key, label: n.label, type: n.type };\n const keys: (keyof Node)[] = [\"helpText\", \"required\", \"defaultValue\", \"showIf\", \"helpMore\", \"advanced\", \"recommendedMax\", \"openMode\", \"localized\", \"archived\"];\n for (const k of keys) if (n[k] !== undefined) out[k] = n[k];\n return out;\n}\n\nfunction emitField(n: Node): ContentModelField {\n const out = common(n) as unknown as ContentModelField;\n if (n.unique !== undefined) out.unique = n.unique;\n if (n.readOnly !== undefined) out.readOnly = n.readOnly;\n if (n.lockReason !== undefined) out.lockReason = n.lockReason;\n if (n.fieldsetId !== undefined) out.fieldsetId = n.fieldsetId;\n const config: FieldConfig = { ...n.config };\n if (n.placeholder !== undefined) config.placeholder = n.placeholder;\n if (n.type === \"select\" && n.options) out.options = n.options;\n if ((n.type === \"multiselect\" || n.type === \"tags\") && n.options) config.options = n.options;\n if (n.type === \"object\") out.fields = (n.children ?? []).map(emitField);\n if (n.slotSettings) config.slotSettings = n.slotSettings.map(emitField);\n if (n.zoned) {\n const { minItems, maxItems, ...rest } = config;\n out.config = {\n ...rest,\n zones: { repeatable: { fields: (n.children ?? []).map(emitField), ...(minItems !== undefined ? { minItems } : {}), ...(maxItems !== undefined ? { maxItems } : {}) } },\n };\n } else if (nonEmpty(config)) out.config = config;\n const ui = nonEmpty(n.ui);\n if (ui) out.ui = ui as FieldUi;\n return out;\n}\n\nfunction emitProp(n: Node): ComponentPropDef {\n const out = common(n) as unknown as ComponentPropDef;\n if (n.unique !== undefined) out.unique = n.unique;\n if (n.readOnly !== undefined) out.readOnly = n.readOnly;\n if (n.lockReason !== undefined) out.lockReason = n.lockReason;\n if (n.placeholder !== undefined) out.placeholder = n.placeholder;\n const config: Obj = { ...n.config };\n if (n.options) config.options = n.options;\n if (n.children) config.fields = n.children.map(emitSubField);\n if (n.itemTypes) config.itemTypes = emitItemTypes(n.itemTypes);\n if (n.slotSettings) config.slotSettings = n.slotSettings.map(emitSubField);\n if (nonEmpty(config)) out.config = config as ComponentPropDef[\"config\"];\n const ui = nonEmpty(n.ui);\n if (ui) out.ui = ui;\n return out;\n}\n\nfunction emitSubField(n: Node): ComponentSubField {\n const out = common(n) as unknown as ComponentSubField;\n if (n.unique !== undefined) out.unique = n.unique;\n if (n.readOnly !== undefined) out.readOnly = n.readOnly;\n if (n.lockReason !== undefined) out.lockReason = n.lockReason;\n if (n.placeholder !== undefined) out.placeholder = n.placeholder;\n if (n.options) out.options = n.options;\n if (n.children) out.fields = n.children.map(emitSubField);\n const config: Obj = { ...n.config };\n if (n.itemTypes) config.itemTypes = emitItemTypes(n.itemTypes);\n if (n.slotSettings) config.slotSettings = n.slotSettings.map(emitSubField);\n if (nonEmpty(config)) out.config = config as ComponentSubField[\"config\"];\n const ui = nonEmpty(n.ui);\n if (ui) out.ui = ui;\n return out;\n}\n\n/** A polymorphic list's item types as the backend stores them: `{ name, label, fields }` (typesTableHardening). */\nconst emitItemTypes = (types: NonNullable<Node[\"itemTypes\"]>) =>\n types.map((t) => ({ name: t.name, label: t.label, fields: t.children.map(emitSubField), ...(t.icon ? { icon: t.icon } : {}), ...(t.preview ? { preview: t.preview } : {}) }));\n\n/* ── document level ──────────────────────────────────────────────────── */\nexport function fromTypeSchema(v2: TypeSchema, target: \"fields\"): FromTypeSchemaResult<ProdContentModel>;\nexport function fromTypeSchema(v2: TypeSchema, target: \"props\"): FromTypeSchemaResult<ProdComponent>;\nexport function fromTypeSchema(v2: TypeSchema, target: AdapterTarget): FromTypeSchemaResult<ProdContentModel | ProdComponent> {\n const ctx: Ctx = {\n lane: target, lossy: [], catalog: [], tabs: new Set(), droppedTabs: new Map(), sets: new Map(), propSets: new Map(), definedGroups: new WeakMap(),\n propOrder: new Map(), groupOrder: false, propTabs: new Map(), definedTabs: new Set(), keptTabs: new Set(), declaredTabs: [], blockModels: new Map(),\n };\n const props = target === \"props\";\n const slug = kebab(v2.name);\n const category = v2.category !== undefined ? CATEGORY_TO_PROD[v2.category] : undefined;\n const fieldsets: Fieldset[] = [];\n\n for (const k of Object.keys(v2) as (keyof TypeSchema)[]) {\n if (v2[k] === undefined) continue;\n const p = `/${k}`;\n switch (k) {\n case \"name\":\n if (camel(slug) !== v2.name) lose(ctx, p, \"type name\");\n break;\n case \"title\":\n case \"description\":\n case \"fields\":\n case \"fieldsets\":\n case \"groups\":\n break;\n case \"kind\":\n if (props && v2.kind !== \"block\") cat(ctx, p, v2.kind === \"global\" ? \"kind:global\" : \"kind:entry (props)\");\n else if (!props && v2.kind !== \"entry\") cat(ctx, p, v2.kind === \"global\" ? \"kind:global\" : v2.kind === \"page\" ? \"kind:page\" : v2.kind === \"block\" ? \"kind:block (fields)\" : \"kind:object\");\n break;\n case \"icon\":\n // a component stores it (component.icon, a dock icon); a model has none\n if (!props || !dockIconOf(v2.icon)) cat(ctx, p, \"block icon\");\n break;\n case \"preview\":\n // a component stores it (component.preview), read once its props are known; a model has no place for it\n if (!props) cat(ctx, p, \"document preview\");\n break;\n case \"variants\":\n cat(ctx, p, \"variants\");\n break;\n case \"category\":\n // the read side names a prod category back as itself, capitalised\n if (!props || !category || capitalize(category) !== v2.category) cat(ctx, p, \"category\");\n break;\n case \"placement\":\n cat(ctx, p, \"block placement\");\n break;\n case \"initialValue\":\n cat(ctx, p, \"seeded instance\");\n break;\n default:\n lose(ctx, p, \"unsupported key\");\n }\n }\n\n if (props) {\n propTabsFor(v2, ctx);\n propSetsFor(v2, ctx);\n } else fieldsetsFor(v2, ctx, fieldsets);\n\n const nodes = v2.fields.map((f, i) => convertField(f, `/fields/${i}`, 1, ctx, v2.fields, true));\n if (props) {\n const component: ProdComponent = { name: v2.title, slug, props: nodes.map(emitProp) };\n if (v2.description !== undefined) component.description = v2.description;\n if (category) component.category = category;\n const icon = v2.icon === undefined ? undefined : dockIconOf(v2.icon);\n if (icon) component.icon = icon;\n if (v2.preview !== undefined) {\n const preview = componentPreviewToProd(v2.preview, new Set(component.props.map((x) => x.key)), v2.fields, \"/preview\", ctx);\n if (Object.keys(preview).length) component.preview = preview;\n }\n if (ctx.declaredTabs.length) component.tabs = ctx.declaredTabs.map((t) => ({ ...t }));\n return { schema: component, blockModels: [], lossy: ctx.lossy, catalog: ctx.catalog };\n }\n const model: ProdContentModel = { name: v2.title, slug, fields: nodes.map(emitField) };\n if (v2.description !== undefined) model.description = v2.description;\n // a prod block model may hold only fields a block primitive renders: a V2 section's fields are a model\n model.kind = \"model\";\n if (fieldsets.length) model.fieldsets = fieldsets;\n return { schema: model, blockModels: [...ctx.blockModels.values()], lossy: ctx.lossy, catalog: ctx.catalog };\n}\n\n/** Fields lane: V2 groups → `kind: \"tab\"` fieldsets, V2 fieldsets → `kind: \"group\"` fieldsets in the tab their members share. */\nfunction fieldsetsFor(v2: TypeSchema, ctx: Ctx, out: Fieldset[]) {\n // the backend's tab_name rule compares the STORED name (cut to TAB_NAME_MAX), trimmed, in any case\n const names = new Set<string>();\n let firstDrop: LossyFeature | undefined;\n let shifted = false;\n (v2.groups ?? []).forEach((g: FieldGroup, i) => {\n const p = `/groups/${i}`;\n const stored = g.title.slice(0, TAB_NAME_MAX);\n const folded = stored.trim().toLowerCase();\n const drop = (why: LossyFeature) => {\n if (!ctx.tabs.has(g.name) && !ctx.droppedTabs.has(g.name)) ctx.droppedTabs.set(g.name, why);\n firstDrop ??= why;\n lose(ctx, p, why);\n };\n if (ctx.tabs.has(g.name) || names.has(folded)) return drop(\"group name collision\");\n if (out.length >= TAB_MAX) return drop(\"groups>3\");\n names.add(folded);\n const tab: Fieldset = { id: g.name, name: stored, kind: \"tab\" };\n if (g.title.length > TAB_NAME_MAX) lose(ctx, `${p}/title`, \"group name>40\");\n if (g.icon !== undefined) {\n const dock = dockIconOf(g.icon);\n if (dock) tab.icon = dock;\n else lose(ctx, `${p}/icon`, \"group icon\");\n }\n if (i === 0 ? g.default !== true : g.default !== undefined) lose(ctx, `${p}/default`, \"group default\");\n for (const k of Object.keys(g)) if (![\"name\", \"title\", \"icon\", \"default\"].includes(k) && (g as unknown as Obj)[k] !== undefined) lose(ctx, `${p}/${k}`, \"unsupported key\");\n ctx.tabs.add(g.name);\n out.push(tab);\n // a dropped group before this one shifts it up a place: the list as a whole is not kept in its positions\n if (firstDrop && !shifted) {\n shifted = true;\n lose(ctx, \"/groups\", firstDrop);\n }\n });\n (v2.fieldsets ?? []).forEach((fs: V2Fieldset, i) => {\n const p = `/fieldsets/${i}`;\n if (ctx.tabs.has(fs.name) || ctx.droppedTabs.has(fs.name) || ctx.sets.has(fs.name) || out.length >= FIELDSETS_MAX) return lose(ctx, p, \"fieldset collision\");\n // the tab most top-level members sit in (\"no tab\" counts as one)\n const tally = new Map<string | undefined, number>();\n for (const f of v2.fields) if (f.fieldset === fs.name) tally.set(f.group, (tally.get(f.group) ?? 0) + 1);\n const best = [...tally.entries()].sort((a, b) => b[1] - a[1])[0]?.[0];\n const tab = best !== undefined && ctx.tabs.has(best) ? best : undefined;\n const set: Fieldset = { id: fs.name, name: fs.title.slice(0, FIELDSET_NAME_MAX), kind: \"group\" };\n if (fs.title.length > FIELDSET_NAME_MAX) lose(ctx, `${p}/title`, \"fieldset name>limit\");\n if (tab) set.tab = tab;\n for (const k of Object.keys(fs) as (keyof V2Fieldset)[]) {\n const v = fs[k];\n if (v === undefined || k === \"name\" || k === \"title\") continue;\n if (k === \"description\") {\n if ((v as string).length <= FIELDSET_DESCRIPTION_MAX) set.description = v as string;\n else lose(ctx, `${p}/${k}`, \"help>limit\");\n } else if (k === \"collapsed\" || k === \"collapsible\" || k === \"columns\" || k === \"layout\") (set as unknown as Obj)[k] = v;\n else lose(ctx, `${p}/${k}`, \"unsupported key\");\n }\n ctx.sets.set(fs.name, tab);\n out.push(set);\n });\n}\n\n/**\n * Props lane: V2 groups → each top-level prop's `ui.tab`, defined on the first prop in it (label, icon, and `order` when\n * the V2 order differs from where each tab is first used). A field with no group sits in the V2 default group; a group\n * not stored puts its fields in the default tab; a fieldset's top-level members share the tab most of them sit in\n * (prop_group_split_tabs). No groups → no tab anywhere, so a component without tabs stores as before.\n */\nfunction propTabsFor(v2: TypeSchema, ctx: Ctx) {\n const groups = v2.groups ?? [];\n const kept: { g: FieldGroup; i: number; tab: PropTab }[] = [];\n const dropped = new Map<string, LossyFeature>();\n const labels = new Set<string>();\n groups.forEach((g, i) => {\n const p = `/groups/${i}`;\n const drop = (why: LossyFeature) => {\n if (!kept.some((k) => k.g.name === g.name) && !dropped.has(g.name)) dropped.set(g.name, why);\n lose(ctx, p, why);\n };\n const label = g.title.slice(0, TAB_NAME_MAX).trim();\n const folded = label.toLowerCase();\n if (kept.some((k) => k.g.name === g.name) || labels.has(folded)) return drop(\"group name collision\");\n if (kept.length >= PROP_TAB_MAX || g.name.length < 1 || g.name.length > PROP_TAB_ID_MAX) return drop(\"prop tab limit\");\n // a tab is defined with its label: a blank title has none to store\n if (!label) return drop(\"group title\");\n labels.add(folded);\n const tab: PropTab = { id: g.name, label };\n if (label !== g.title.trim()) lose(ctx, `${p}/title`, \"group name>40\");\n else if (label !== g.title) lose(ctx, `${p}/title`, \"group title\");\n if (g.icon !== undefined) {\n const dock = dockIconOf(g.icon);\n if (dock) tab.icon = dock;\n else lose(ctx, `${p}/icon`, \"group icon\");\n }\n if (i === 0 ? g.default !== true : g.default !== undefined) lose(ctx, `${p}/default`, \"group default\");\n for (const k of Object.keys(g)) if (![\"name\", \"title\", \"icon\", \"default\"].includes(k) && (g as unknown as Obj)[k] !== undefined) lose(ctx, `${p}/${k}`, \"unsupported key\");\n kept.push({ g, i, tab });\n });\n // where each top-level field sits: its group, else the V2 default group; a group not stored → the default tab\n const isKept = (name: string | undefined) => name !== undefined && kept.some((k) => k.g.name === name);\n const v2Default = (groups.find((g) => g.default) ?? groups[0])?.name;\n const fallback = isKept(v2Default) ? v2Default : kept[0]?.g.name;\n const place = new Map<FieldSchema, { tab?: string; loss?: LossyFeature }>();\n for (const f of v2.fields) {\n const want = f.group ?? v2Default;\n if (isKept(want)) place.set(f, { tab: want });\n else if (f.group !== undefined || want !== undefined) place.set(f, { tab: fallback, loss: dropped.get(want!) ?? \"unsupported key\" });\n }\n if (!kept.length) {\n for (const [f, t] of place) if (f.group !== undefined) ctx.propTabs.set(f, { loss: t.loss });\n return;\n }\n // a fieldset's top-level members share the tab most of them sit in (ties: the first met)\n const tally = new Map<string, Map<string | undefined, number>>();\n for (const f of v2.fields) {\n if (f.fieldset === undefined) continue;\n const t = tally.get(f.fieldset) ?? new Map<string | undefined, number>();\n t.set(place.get(f)?.tab, (t.get(place.get(f)?.tab) ?? 0) + 1);\n tally.set(f.fieldset, t);\n }\n for (const f of v2.fields) {\n const counts = f.fieldset !== undefined ? tally.get(f.fieldset) : undefined;\n if (!counts) continue;\n const best = [...counts.entries()].sort((a, b) => b[1] - a[1])[0][0];\n const cur = place.get(f);\n if (cur?.tab !== best) place.set(f, { tab: best, loss: cur?.loss ?? \"fieldset spans groups\" });\n }\n // a kept group no top-level field sits in has no prop to be defined on\n const firstUse: string[] = [];\n for (const f of v2.fields) {\n const t = place.get(f)?.tab;\n if (t !== undefined && !firstUse.includes(t)) firstUse.push(t);\n }\n const used = kept.filter((k) => firstUse.includes(k.g.name));\n // a kept group no top-level field sits in is declared on the component (component.tabs): V2 hides it, so does the dock\n const unused = kept.filter((k) => !firstUse.includes(k.g.name));\n for (const k of kept) ctx.keptTabs.add(k.g.name);\n // a group left out before a stored one moves it up a place: the list as a whole is not kept in its positions\n const firstGap = groups.findIndex((g) => !kept.some((k) => k.g === g));\n if (firstGap >= 0 && kept.some((k) => k.i > firstGap)) {\n const g = groups[firstGap];\n lose(ctx, \"/groups\", dropped.get(g.name) ?? \"unsupported key\");\n }\n // the read side lists the props' tabs (first use), then the declared ones: an `order` on each tab when that is not V2's\n const ordered = unused.length > 0 || used.some((k, i) => k.g.name !== firstUse[i]);\n kept.forEach((k, i) => {\n if (ordered) k.tab.order = Math.min(PROP_GROUP_ORDER_MAX, i);\n });\n ctx.declaredTabs = unused.map((k) => k.tab);\n for (const [f, t] of place) {\n const k = used.find((u) => u.g.name === t.tab);\n if (k) ctx.propTabs.set(f, { tab: k.tab, loss: t.loss });\n else if (t.loss) ctx.propTabs.set(f, { loss: t.loss });\n }\n}\n\n/**\n * Props lane: a V2 fieldset is an inline ui.group, defined on the first prop (at each level, sub-fields too) that uses\n * it. A fieldset no prop uses has nothing to be defined on; when the V2 order differs from where each group is first\n * met (depth first, a prop before its sub-fields: how propsToTypeSchema meets them), every group carries its `order`.\n */\nfunction propSetsFor(v2: TypeSchema, ctx: Ctx) {\n const sets = v2.fieldsets ?? [];\n const named = new Set(sets.map((s) => s.name));\n const firstSeen: string[] = [];\n const undeclared: string[] = [];\n const visit = (fields: FieldSchema[], lv: number) => {\n for (const f of fields) {\n if (f.fieldset !== undefined && !firstSeen.includes(f.fieldset)) {\n firstSeen.push(f.fieldset);\n if (!named.has(f.fieldset)) undeclared.push(f.fieldset);\n }\n if (lv >= MAX_FIELD_DEPTH) continue;\n const kids = previewKids(f);\n if (kids) visit(kids, lv + 1);\n }\n };\n visit(v2.fields, 1);\n // V2 arrange (field-list.tsx) draws a fieldset no schema declares as one titled by its name: it is that group here\n const derived: V2Fieldset[] = undeclared.map((name) => ({ name, title: name }));\n const declaredUsed = sets.filter((s) => firstSeen.includes(s.name)).length;\n derived.forEach((s, j) => {\n ctx.propSets.set(s.name, s);\n ctx.propOrder.set(s.name, sets.length + j);\n cat(ctx, `/fieldsets/${declaredUsed + j}`, \"fieldset (derived)\");\n });\n if (!sets.length && !derived.length) return;\n const used = [...sets, ...derived].filter((s) => firstSeen.includes(s.name));\n ctx.groupOrder = used.some((s, i) => s.name !== firstSeen[i]);\n let gap = false;\n sets.forEach((s, i) => {\n ctx.propSets.set(s.name, s);\n ctx.propOrder.set(s.name, i);\n if (!firstSeen.includes(s.name)) {\n gap = true;\n return lose(ctx, `/fieldsets/${i}`, \"fieldset (props)\");\n }\n // a fieldset left out before this one moves it up a place\n if (gap) {\n gap = false;\n lose(ctx, \"/fieldsets\", \"fieldset (props)\");\n }\n for (const k of Object.keys(s) as (keyof V2Fieldset)[]) {\n const v = s[k];\n if (v === undefined || k === \"name\" || k === \"collapsed\" || k === \"columns\" || k === \"collapsible\" || k === \"layout\") continue;\n if (k === \"title\") {\n if (s.title.length > PROP_GROUP_LABEL_MAX) lose(ctx, `/fieldsets/${i}/title`, \"fieldset name>limit\");\n } else if (k === \"description\") {\n if (!groupDescriptionOk(s.description)) lose(ctx, `/fieldsets/${i}/description`, \"help>limit\");\n } else lose(ctx, `/fieldsets/${i}/${k}`, \"unsupported key\");\n }\n });\n}\n\n/* ══════════════════════════════════════════════════════════════════════\n * prod → V2\n * ══════════════════════════════════════════════════════════════════════ */\n\ninterface ReadCtx {\n onLoss: (path: string, feature: string, reason: string) => void;\n /** fields lane: fieldset id → its fieldset. */\n sets: Map<string, Fieldset>;\n /** V2 lists read from an array's repeatable zone (stored as `{ repeatable: [...] }`) and groups read from its\n * non-repeatable zone alone (stored as `{ nonRepeatable: {...} }`). */\n zoned: WeakSet<FieldSchema>;\n /** V2 lists read from a modular field: their rows are stored as `{ __id, __type, data }`. */\n modular: WeakSet<FieldSchema>;\n /** V2 lists read from a polymorphic list prop (table, config.mode \"types\"): rows `{ _key, _type, ...fields }`. */\n types: WeakSet<FieldSchema>;\n /** slot props read (any depth), each with its config.multiple */\n slots: WeakMap<FieldSchema, boolean>;\n /** model slot fields read back: their children cross through the \"blocks\" plan */\n blocks: WeakSet<FieldSchema>;\n /** block slug → the block model a modular field's item type is read from. */\n blockModels: Map<string, ProdContentModel>;\n /** ToTypeSchemaOptions.plans */\n plans?: Map<string, ValuePlan>;\n}\n\n/** A prod field, prop or sub-field read into one lane-neutral shape. */\ninterface ProdNode {\n key: string;\n label: string;\n type: string;\n /** null: no help on purpose (reads as no description) */\n helpText?: string | null;\n required?: boolean;\n unique?: boolean;\n defaultValue?: unknown;\n options?: SelectOption[];\n config: FieldConfig;\n fields?: ProdNode[];\n /** array zones (fields lane) */\n zones?: { nonRepeatable?: ProdNode[]; repeatable?: { fields: ProdNode[]; minItems?: number; maxItems?: number } };\n ui: PropUi;\n openMode?: OpenMode;\n showIf?: ShowIf;\n readOnly?: true | \"developer\";\n lockReason?: string;\n helpMore?: string;\n advanced?: boolean;\n recommendedMax?: number;\n placeholder?: string;\n fieldsetId?: string;\n placement?: string;\n searchable?: boolean;\n localized?: boolean;\n /** Schema V2 B1: the field is archived (its values stay stored; forms leave it out). */\n archived?: boolean;\n}\n\nfunction readField(f: ContentModelField): ProdNode {\n const cfg: FieldConfig = { ...(f.config ?? {}) };\n const n: ProdNode = { ...(f as Obj), config: cfg, ui: { ...(f.ui ?? {}) } } as ProdNode;\n if (typeof cfg.placeholder === \"string\") {\n n.placeholder = cfg.placeholder;\n delete cfg.placeholder;\n }\n // a strict config's field keeps its placeholder in ui\n if (n.placeholder === undefined && typeof n.ui.placeholder === \"string\") n.placeholder = n.ui.placeholder;\n delete n.ui.placeholder;\n if ((f.type === \"multiselect\" || f.type === \"tags\") && cfg.options) {\n n.options = cfg.options;\n delete cfg.options;\n }\n n.fields = f.fields?.map(readField);\n // a list of object rows written as `config.fields` (no zones): its row fields, read as a legacy repeater's\n if (f.type === \"array\" && !cfg.zones && Array.isArray(cfg.fields)) {\n n.fields = [...(n.fields ?? []), ...(cfg.fields as ContentModelField[]).map(readField)];\n delete cfg.fields;\n }\n if (cfg.zones) {\n const z = cfg.zones;\n n.zones = {\n ...(z.nonRepeatable ? { nonRepeatable: z.nonRepeatable.map(readField) } : {}),\n ...(z.repeatable ? { repeatable: { ...z.repeatable, fields: z.repeatable.fields.map(readField) } } : {}),\n };\n delete cfg.zones;\n }\n return n;\n}\n\nfunction readProp(p: ComponentPropDef | ComponentSubField): ProdNode {\n const { config, fields, options, ...rest } = p as ComponentSubField & { config?: Obj };\n const cfg: FieldConfig = { ...(config ?? {}) };\n const n: ProdNode = { ...(rest as Obj), config: cfg, ui: { ...((p.ui as PropUi | undefined) ?? {}) } } as ProdNode;\n const opts = (cfg.options as SelectOption[] | undefined) ?? options;\n if (opts) n.options = opts;\n delete cfg.options;\n const kids = (cfg.fields as ComponentSubField[] | undefined) ?? fields;\n if (kids) n.fields = kids.map(readProp);\n delete cfg.fields;\n return n;\n}\n\n/** A stored choice → the V2 option: a dock icon reads back as the kit's Tabler name, the description as itself. */\nconst optionsFromProd = (opts: SelectOption[]): Option[] =>\n opts.map((o) => {\n if (typeof o === \"string\") return { value: o, label: o };\n const out: Option = { value: o.value, label: o.label };\n if (typeof o.icon === \"string\") out.icon = tablerIconOf(o.icon);\n if (typeof o.description === \"string\") out.description = o.description;\n return out;\n });\n\nfunction scaleFromConfig(s: NumberScale, at: string, ctx: ReadCtx): ScaleSchema {\n const steps = s.steps;\n const out: ScaleSchema = !Array.isArray(steps)\n ? { steps: { min: steps.min, max: steps.max, ...(steps.step !== undefined ? { step: steps.step } : {}) } }\n : steps.some((x) => typeof x.value === \"string\")\n ? { steps: (steps as Array<{ value: string; label: string }>).map((x) => ({ ...x })) }\n : (ctx.onLoss(`${at}/steps`, \"scale steps\", \"Numeric step lists read back as token steps named by their number.\"),\n { steps: (steps as Array<{ value: number; label?: string }>).map((x) => ({ value: String(x.value), label: x.label ?? String(x.value), px: x.value })) });\n if (s.units) out.units = s.units;\n if (s.defaultUnit) out.defaultUnit = s.defaultUnit;\n if (s.allowCustom !== undefined) out.allowCustom = isObj(s.allowCustom) ? JSON.parse(JSON.stringify(s.allowCustom)) : s.allowCustom;\n if (s.presets) out.presets = s.presets.map((p) => ({ ...(p.label !== undefined ? { label: p.label } : {}), value: typeof p.value === \"object\" ? { ...p.value } : p.value }));\n return out;\n}\n\n/**\n * Slot children with each `_variant` written as the family member that places it (`_type`): the variant the child's\n * component already is drops, another member swaps in. A variant no member places stays, and the write names it lost.\n */\nfunction childVariantsToTypes(v: unknown, family: NonNullable<Extract<VPlan, { k: \"slot\" }>[\"family\"]>): unknown {\n if (!Array.isArray(v)) return v;\n return v.map((c) => {\n if (!isObj(c) || typeof c._variant !== \"string\") return c;\n const own = family(typeof c._type === \"string\" ? c._type : \"\");\n const { _variant: _gone, ...rest } = c;\n // 🔴 The variant the child's own component IS keeps that component. Looked up by variant id it could come back as\n // ANOTHER member (two rows of one family sharing a slug tail: a workspace row and its project copy), and an edit\n // to any sibling row then rewrote this child's `_type` to a component nobody picked.\n if (own?.current === c._variant) return rest;\n const member = own?.member(c._variant);\n if (!member) return c;\n return { ...rest, _type: member };\n });\n}\n\n/** The prod children a preview path segment may name below a node (an object's, a list's rows'), or null for a leaf. */\nconst readKids = (n: ProdNode): ProdNode[] | null =>\n n.zones ? [...(n.zones.nonRepeatable ?? []), ...(n.zones.repeatable?.fields ?? [])] : n.fields && [\"object\", \"group\", \"repeater\", \"table\", \"array\"].includes(n.type) ? n.fields : null;\n\n/** A stored preview path → the V2 path: `image.altText` reads as `image.alt`, the rest as it is. */\nfunction previewPathFromProd(path: string, children: ProdNode[]): string {\n const segs = path.split(\".\");\n let node = children.find((c) => c.key === segs[0]);\n for (let i = 1; node && i < segs.length; i++) {\n const kids = readKids(node);\n if (kids) {\n node = kids.find((c) => c.key === segs[i]);\n continue;\n }\n if (node.type === \"image\") {\n const back = Object.entries(IMAGE_PATH_KEY).find(([, stored]) => stored === segs[i])?.[0];\n if (back) segs[i] = back;\n }\n break;\n }\n return segs.join(\".\");\n}\n\nfunction previewFromProd(pv: UiPreview, children: ProdNode[]): PreviewConfig {\n const out: PreviewConfig = { ...pv };\n for (const k of [\"title\", \"subtitle\", \"media\"] as const) if (typeof pv[k] === \"string\") out[k] = previewPathFromProd(pv[k], children);\n if (typeof pv.icon === \"string\") out.icon = tablerIconOf(pv.icon);\n return out;\n}\n\nfunction showIfToCondition(s: ShowIf, siblings: ProdNode[], at: string, ctx: ReadCtx): Condition | undefined {\n const conds: Condition[] = [];\n for (const r of s.rules) {\n const c = showIfRuleToCondition(r, siblings);\n if (!c) return void ctx.onLoss(at, \"condition\", `V2 conditions have no \"${r.op}\" with this value; the field always shows.`);\n conds.push(c);\n }\n if (!conds.length) return undefined;\n const [head, ...also] = conds;\n return { ...head, ...(also.length ? { also } : {}), ...(s.match === \"any\" && conds.length > 1 ? { match: \"any\" as const } : {}) };\n}\n\n/** One prod rule as a V2 rule: eq / in / isSet keep V2's legacy forms, the rest name their `op`. */\nfunction showIfRuleToCondition(r: ShowIfRule, siblings: ProdNode[]): Condition | undefined {\n const sib = siblings.find((x) => x.key === r.field);\n const t = sib?.type === \"number\" ? \"number\" : sib?.type;\n const read = (v: string) => coerceRuleValue(t, v);\n const list = (Array.isArray(r.value) ? r.value : [r.value ?? \"\"]).map(read);\n switch (r.op) {\n case \"eq\":\n return Array.isArray(r.value) ? { field: r.field, equals: r.value.map(read) } : { field: r.field, equals: read(r.value ?? \"\") };\n case \"in\":\n return { field: r.field, equals: list };\n case \"isSet\":\n case \"notEmpty\":\n return { field: r.field, notEmpty: true };\n case \"empty\":\n return { field: r.field, op: \"empty\" };\n case \"neq\":\n return { field: r.field, op: \"isNot\", value: Array.isArray(r.value) ? list : read(r.value ?? \"\") };\n case \"notIn\":\n return { field: r.field, op: \"notIn\", value: list };\n case \"gt\":\n case \"lt\": {\n const n = Number(r.value);\n return typeof r.value === \"string\" && r.value.trim() !== \"\" && Number.isFinite(n) ? { field: r.field, op: r.op, value: n } : undefined;\n }\n default:\n return undefined;\n }\n}\n\nfunction v2Type(n: ProdNode, at: string, ctx: ReadCtx): FieldSchema[\"type\"] {\n switch (n.type) {\n case \"text\":\n return n.config.inputType === \"url\" ? \"url\" : \"string\";\n case \"longtext\":\n return \"text\";\n case \"document\":\n ctx.onLoss(`${at}/type`, \"document\", \"A document (article body) reads as rich text.\");\n return \"richtext\";\n case \"phone\":\n ctx.onLoss(`${at}/type`, \"phone\", \"V2 has no phone type; it reads as a string.\");\n return \"string\";\n case \"location\":\n return \"geopoint\";\n case \"number\":\n return n.ui.control === \"rating\" ? \"rating\" : \"number\";\n case \"select\":\n // the old schema editor's multi-choice select (config.multiSelect) stores a string[] like a multiselect\n return n.config.multiSelect === true ? \"multiselect\" : \"select\";\n case \"multiselect\":\n // V2 multiselect never writes allowCustom; free entry is tags, whose options are its suggestions\n return n.config.allowCustom === true ? \"tags\" : \"multiselect\";\n case \"group\":\n case \"object\":\n return \"object\";\n case \"repeater\":\n case \"table\":\n case \"array\":\n case \"multi-reference\":\n case \"multiReference\":\n case \"modular\":\n return \"array\";\n case \"form\":\n return \"reference\";\n case \"component-ref\":\n case \"sections\":\n case \"slot\":\n ctx.onLoss(`${at}/type`, n.type, \"This prod type stores component or block instances V2 cannot edit; it reads as json.\");\n return \"json\";\n default:\n return n.type as FieldSchema[\"type\"];\n }\n}\n\nfunction readToV2(n: ProdNode, at: string, siblings: ProdNode[], ctx: ReadCtx, top: boolean, lane: AdapterTarget): FieldSchema {\n /** a data table holds one TableValue: the V2 `table` field, not a list of rows. A prop says so (config.mode \"data\");\n * a field's table is always one (BE tableFieldSchema: `mode` is optional there and can only be \"data\") */\n const dataTable = isDataTableProp(n) || (lane === \"fields\" && n.type === \"table\");\n /** a slot prop: component instances, read as the V2 slot (its children `{ _key, _type, _settings?, ...props }`) */\n const slotProp = lane === \"props\" && n.type === \"slot\";\n /** a model slot field: inline children of the kind:'block' models config.blockSlugs names */\n const blockSlot = lane === \"fields\" && n.type === \"slot\";\n const type = dataTable ? \"table\" : slotProp || blockSlot ? \"slot\" : v2Type(n, at, ctx);\n const f: FieldSchema = { name: n.key, title: n.label, type };\n const cfg = n.config;\n const val: NonNullable<FieldSchema[\"validation\"]> = {};\n const loss = (k: string, feature: string, reason: string) => ctx.onLoss(`${at}/${k}`, feature, reason);\n\n if (typeof n.helpText === \"string\") f.description = n.helpText;\n if (n.helpMore !== undefined) f.helpMore = n.helpMore;\n if (n.placeholder !== undefined) f.placeholder = n.placeholder;\n if (n.required !== undefined) val.required = n.required;\n if (n.unique !== undefined) val.unique = n.unique;\n if (n.recommendedMax !== undefined) val.recommendedMax = n.recommendedMax;\n if (n.advanced !== undefined) f.advanced = n.advanced;\n if (n.openMode !== undefined) f.openMode = n.openMode;\n if (n.readOnly === true) f.readOnly = true;\n if (n.archived === true) f.archived = true;\n // ui.access is the V2 access as stored; a developer lock with none (older rows) reads as edit: schema.manage\n if (n.ui.access) f.access = { ...n.ui.access };\n else if (n.readOnly === \"developer\") f.access = { edit: \"schema.manage\" };\n if (n.lockReason !== undefined) f.lockReason = n.lockReason;\n // locked text holding a Shopify id reads back as V2's Shopify reference, still locked (the lock reason is the marker)\n const shopify = n.readOnly === true && n.lockReason === SHOPIFY_REF_LOCK && (n.type === \"text\" || (n.type === \"array\" && n.config.itemType === \"text\"));\n if (shopify) {\n delete f.lockReason;\n if (n.type === \"text\") {\n f.type = \"reference\";\n f.reference = { to: [\"shopify\"] };\n }\n }\n if (n.localized !== undefined) f.localized = n.localized;\n if (n.ui.hidden !== undefined) f.hidden = n.ui.hidden;\n if (n.ui.rows !== undefined) f.rows = n.ui.rows;\n if (n.ui.synced !== undefined) f.synced = { ...n.ui.synced };\n if (n.ui.valueShape !== undefined) f.valueShape = n.ui.valueShape;\n if (n.showIf) {\n const c = showIfToCondition(n.showIf, siblings, `${at}/showIf`, ctx);\n if (c) f.hidden = c;\n }\n if (n.placement !== undefined) loss(\"placement\", \"placement\", \"V2 has no editor placement; the field renders in the form.\");\n if (n.searchable === false) loss(\"searchable\", \"searchable\", \"V2 has no search-index flag.\");\n if (n.ui.collapsed !== undefined) loss(\"ui/collapsed\", \"ui.collapsed\", \"V2 fields have no start-collapsed flag.\");\n if (n.ui.reorderable !== undefined) loss(\"ui/reorderable\", \"ui.reorderable\", \"V2 lists are always reorderable.\");\n if (n.ui.input !== undefined) loss(\"ui/input\", \"ui.input\", \"Custom dock inputs are a dock feature V2 has no key for.\");\n\n // the tab and the section\n if (n.fieldsetId !== undefined) {\n const set = ctx.sets.get(n.fieldsetId);\n if (set?.kind === \"tab\") {\n if (top) f.group = set.id;\n else loss(\"fieldsetId\", \"fieldset\", \"Only top-level V2 fields sit in a tab; this nested field's tab is dropped.\");\n } else if (set) {\n f.fieldset = set.id;\n if (top && set.tab !== undefined) f.group = set.tab;\n } else loss(\"fieldsetId\", \"fieldset\", `No fieldset \"${n.fieldsetId}\" exists on this model; the membership is dropped.`);\n }\n if (lane === \"props\" && n.ui.group) f.fieldset = n.ui.group.id;\n // a nested prop names its tab as { id } (V2's nested `group`, which the engine ignores there)\n if (lane === \"props\" && n.ui.tab) f.group = n.ui.tab.id;\n for (const k of [\"target\", \"stale\", \"origin\"] as const)\n if ((n as unknown as Obj)[k] !== undefined)\n loss(k, k, k === \"target\" ? \"A prop's target (where it writes in the component) is binding, not schema: V2 has no key for it, so the host keeps it.\" : `V2 has no \"${k}\" key.`);\n\n // per type; what a branch reads is marked used, and every prod config / ui key left unread is reported\n const used = new Set<string>([\"placeholder\", \"zones\", \"options\", \"fields\"]);\n const usedUi = new Set<string>([\"collapsed\", \"reorderable\", \"input\", \"access\", \"hidden\", \"rows\", \"synced\", \"valueShape\"]);\n const use = (...k: string[]) => k.forEach((x) => used.add(x));\n const useUi = (...k: string[]) => k.forEach((x) => usedUi.add(x));\n if (lane === \"props\") useUi(\"group\");\n if (lane === \"props\") useUi(\"tab\");\n if ([\"text\", \"longtext\", \"url\", \"richtext\", \"document\"].includes(n.type)) {\n use(\"minLength\", \"maxLength\", \"pattern\", \"patternMessage\", \"inputType\");\n if (typeof cfg.minLength === \"number\") val.min = cfg.minLength;\n if (typeof cfg.maxLength === \"number\") val.max = cfg.maxLength;\n if (typeof cfg.pattern === \"string\") val.pattern = cfg.pattern;\n if (typeof cfg.patternMessage === \"string\") val.patternMessage = cfg.patternMessage;\n }\n if (type === \"number\" || type === \"rating\") {\n const numeric: NonNullable<FieldSchema[\"numeric\"]> = {};\n for (const k of [\"min\", \"max\", \"step\"] as const) if (typeof cfg[k] === \"number\") numeric[k] = cfg[k] as number;\n if (n.type === \"rating\") {\n if (numeric.step === V2_RATING_STEP) delete numeric.step;\n else if (numeric.step === undefined) numeric.step = 1;\n }\n // the old rating (a number with ui.control \"rating\") drops bounds equal to its default\n const ratingDefault = type === \"rating\" && n.type === \"number\" && ratingIsDefault(numeric);\n if (typeof cfg.unit === \"string\") numeric.unit = cfg.unit;\n if (Object.keys(numeric).length && !ratingDefault) f.numeric = numeric;\n // the error bounds (V2 validation.min / max)\n const bounds = cfg.validation;\n if (isObj(bounds)) for (const k of [\"min\", \"max\"] as const) if (typeof bounds[k] === \"number\") val[k] = bounds[k];\n if (cfg.scale) f.scale = scaleFromConfig(cfg.scale, `${at}/config/scale`, ctx);\n if (n.ui.control === \"slider\") f.layout = \"slider\";\n use(\"min\", \"max\", \"step\", \"scale\", \"unit\", \"validation\");\n if (n.ui.control === \"slider\" || n.ui.control === \"rating\") useUi(\"control\");\n }\n // the V2 control layouts: segmented on a select, the rest on the types CONTROL_TYPES lists\n const control = n.ui.control;\n if (control !== undefined && control !== \"slider\" && control !== \"rating\" && (control === \"segmented\" ? type === \"select\" : CONTROL_TYPES[control]?.includes(type))) {\n f.layout = control;\n useUi(\"control\");\n }\n if (n.type === \"select\") use(\"multiSelect\");\n // an inline-SVG icon (the import's `media: \"icon\"`, and an agent's): the image control takes SVGs only\n if (n.type === \"image\") {\n use(\"media\");\n if (cfg.media === \"icon\") f.svgOnly = true;\n }\n // a link label's partner, named by the owner's answer (the editable plan's `link-pair`): `linkLabelHref` reads it first\n if (typeof cfg.linkHref === \"string\" && cfg.linkHref) f.linkHref = cfg.linkHref;\n use(\"linkHref\");\n if ((type === \"select\" || type === \"multiselect\" || type === \"tags\") && n.options) f.options = optionsFromProd(n.options);\n if (type === \"multiselect\" || type === \"tags\") {\n if (typeof cfg.min === \"number\") val.min = cfg.min;\n if (typeof cfg.max === \"number\") val.max = cfg.max;\n use(\"min\", \"max\", \"allowCustom\");\n }\n if (n.type === \"code\") {\n if (typeof cfg.language === \"string\") f.language = cfg.language;\n else if (cfg.language !== undefined) loss(\"config/language\", \"code language\", \"The field's language is not a string; it is dropped.\");\n if (Array.isArray(cfg.languages) && cfg.languages.every((l) => typeof l === \"string\")) f.languages = [...cfg.languages];\n else if (cfg.languages !== undefined) loss(\"config/languages\", \"code language\", \"The field's languages are not a list of names; they are dropped.\");\n use(\"language\", \"languages\");\n }\n if (n.type === \"tags\" && cfg.allowCustom === false) loss(\"config/allowCustom\", \"tags closed\", \"V2 tags always take free entry; a closed tags list reads as open tags.\");\n if (type === \"date\" || type === \"datetime\") use(\"timezone\", \"includeTime\");\n if ((type === \"date\" || type === \"datetime\") && typeof cfg.timezone === \"string\") f.timezone = cfg.timezone === \"site\" ? \"site\" : `fixed:${cfg.timezone}`;\n if ((type === \"date\" || type === \"datetime\") && typeof cfg.timezone === \"boolean\") f.timezone = cfg.timezone;\n if (n.type === \"reference\" || n.type === \"multi-reference\" || n.type === \"multiReference\") use(\"contentModelId\", \"polymorphic\", \"allowedModelSlugs\", \"targets\", \"filter\");\n if (n.type === \"reference\") {\n const ref = referenceFromConfig(cfg);\n if (ref) f.reference = ref;\n }\n if (n.type === \"form\") f.reference = { to: [\"form\"] };\n if (n.type === \"object\" || n.type === \"group\") {\n f.fields = (n.fields ?? []).map((c, i) => readToV2(c, `${at}/fields/${i}`, n.fields ?? [], ctx, false, lane));\n if (n.ui.preview) f.preview = previewFromProd(n.ui.preview, n.fields ?? []);\n if (n.ui.icon) f.icon = tablerIconOf(n.ui.icon);\n useUi(\"preview\", \"icon\");\n }\n if (n.type === \"array\" && n.zones?.nonRepeatable) {\n const nr = n.zones.nonRepeatable;\n const fields = nr.map((c, i) => readToV2(c, `${at}/config/zones/nonRepeatable/${i}`, nr, ctx, false, lane));\n if (n.zones.repeatable) {\n // a zone pair stores {nonRepeatable, repeatable}: V2 edits it as an object of that shape\n const kids: FieldSchema[] = [{ name: \"nonRepeatable\", title: n.label, type: \"object\", fields }, listOf(n, n.zones.repeatable.fields, \"repeatable\", `${at}/config/zones/repeatable`, ctx, lane)];\n ctx.onLoss(`${at}/config/zones`, \"zone envelope\", \"A zone pair reads as an object with nonRepeatable and repeatable children, matching its stored {nonRepeatable, repeatable} value.\");\n Object.assign(f, { type: \"object\", fields: kids });\n } else {\n // a group stores {nonRepeatable: {...}}: V2 edits the children as a plain object, wrapped again on write (the plan)\n Object.assign(f, { type: \"object\", fields });\n ctx.zoned.add(f);\n }\n } else if (slotProp) {\n // the resolved ids when the host set them, else the V2 block names as written (config.allow)\n const ids = Array.isArray(cfg.componentIds) ? cfg.componentIds.filter((x): x is string => typeof x === \"string\") : [];\n const names = Array.isArray(cfg.allow) ? cfg.allow.filter((x): x is string => typeof x === \"string\") : [];\n f.of = ids.length ? { type: \"block\", allow: ids } : names.length ? { type: \"block\", allow: names } : { type: \"block\" };\n ctx.slots.set(f, cfg.multiple === true);\n const settings = Array.isArray(cfg.slotSettings) ? (cfg.slotSettings as ComponentSubField[]).map(readProp) : [];\n if (settings.length) f.slotSettings = settings.map((c, k) => readToV2(c, `${at}/config/slotSettings/${k}`, settings, ctx, false, lane));\n // a single slot holds one instance: V2 has no single slot, so it reads as a slot of at most one\n if (cfg.multiple !== true) {\n val.max = 1;\n loss(\"config/multiple\", \"slot single\", \"A single slot holds one component instance; V2 reads it as a slot of at most one block.\");\n } else {\n if (typeof cfg.minItems === \"number\") val.min = cfg.minItems;\n if (typeof cfg.maxItems === \"number\") val.max = cfg.maxItems;\n }\n use(\"multiple\", \"componentIds\", \"allow\", \"minItems\", \"maxItems\", \"slotSettings\");\n } else if (blockSlot) {\n // config.blockSlugs read back as the V2 block names (camelCase, like a modular item type's)\n const slugs = Array.isArray(cfg.blockSlugs) ? cfg.blockSlugs.filter((x): x is string => typeof x === \"string\") : [];\n f.of = slugs.length ? { type: \"block\", allow: slugs.map(camel) } : { type: \"block\" };\n ctx.blocks.add(f);\n const settings = Array.isArray(cfg.slotSettings) ? (cfg.slotSettings as ContentModelField[]).map(readField) : [];\n if (settings.length) f.slotSettings = settings.map((c, k) => readToV2(c, `${at}/config/slotSettings/${k}`, settings, ctx, false, lane));\n if (typeof cfg.minItems === \"number\") val.min = cfg.minItems;\n if (typeof cfg.maxItems === \"number\") val.max = cfg.maxItems;\n use(\"blockSlugs\", \"minItems\", \"maxItems\", \"slotSettings\");\n } else if (lane === \"props\" && n.type === \"table\" && cfg.mode === \"types\") {\n // a polymorphic list: each item type `{ name, label?, fields, icon?, preview? }` is a V2 object item type\n const types = (Array.isArray(cfg.itemTypes) ? cfg.itemTypes : []) as NonNullable<ComponentPropDef[\"config\"]>[\"itemTypes\"] & {};\n f.of = types.map((t, j) => {\n const kids = (t.fields ?? []).map(readProp);\n const item: FieldSchema = { name: t.name, title: t.label ?? t.name, type: \"object\", fields: kids.map((c, k) => readToV2(c, `${at}/config/itemTypes/${j}/fields/${k}`, kids, ctx, false, lane)) };\n if (t.icon) item.icon = tablerIconOf(t.icon);\n if (t.preview) item.preview = previewFromProd(t.preview, kids);\n return item;\n });\n ctx.types.add(f);\n if (n.ui.itemLabel !== undefined) f.itemNoun = n.ui.itemLabel.toLowerCase();\n if (n.ui.icon) f.icon = tablerIconOf(n.ui.icon);\n const l = n.ui.layout;\n if (l === \"grid\" || l === \"list\") f.arrayLayout = l;\n else if (l === \"rows\") f.layout = \"list\";\n else if (l) loss(\"ui/layout\", \"ui.layout\", `V2 has no \"${l}\" layout for a list of item types.`);\n if (typeof cfg.minItems === \"number\") val.min = cfg.minItems;\n if (typeof cfg.maxItems === \"number\") val.max = cfg.maxItems;\n use(\"mode\", \"itemTypes\", \"minItems\", \"maxItems\");\n useUi(\"itemLabel\", \"icon\", \"layout\");\n } else if (dataTable) {\n f.table = tableOptionsFromConfig(cfg);\n use(\"mode\", \"columnTypes\", \"lockColumns\", \"requireCaption\", \"allowGroups\", \"allowFootnotes\", \"allowNote\", \"minRows\", \"maxRows\", \"maxColumns\", \"settings\", \"jsonLd\");\n } else if ((n.type === \"array\" && (n.zones?.repeatable || (!n.zones && !cfg.itemType && n.fields?.length))) || n.type === \"repeater\" || n.type === \"table\") {\n const kids = n.zones?.repeatable?.fields ?? n.fields ?? [];\n const list = listOf(n, kids, n.key, at, ctx, lane);\n useUi(\"preview\", \"icon\", \"itemLabel\", \"layout\", \"itemName\", \"itemTitle\");\n if (n.zones?.repeatable) ctx.zoned.add(f);\n f.of = list.of;\n if (list.itemNoun !== undefined) f.itemNoun = list.itemNoun;\n if (list.arrayLayout) f.arrayLayout = list.arrayLayout;\n if (list.layout) f.layout = list.layout;\n const r = n.zones?.repeatable ?? (n.type === \"table\" ? { minItems: cfg.minItems, maxItems: cfg.maxItems } : undefined);\n if (typeof r?.minItems === \"number\") val.min = r.minItems;\n if (typeof r?.maxItems === \"number\") val.max = r.maxItems;\n if (n.type === \"table\") use(\"minItems\", \"maxItems\");\n } else if (n.type === \"array\" && cfg.itemType) {\n f.of = [shopify ? { ...itemOf(n), type: \"reference\", reference: { to: [\"shopify\"] } } : { ...itemOf(n), type: cfg.itemType === \"text\" ? \"string\" : cfg.itemType, ...itemSettingsFromProd(cfg.item) }];\n leafListChrome(n, f, loss, \"a list of scalars\");\n if (typeof cfg.minItems === \"number\") val.min = cfg.minItems;\n if (typeof cfg.maxItems === \"number\") val.max = cfg.maxItems;\n use(\"itemType\", \"minItems\", \"maxItems\", \"item\");\n useUi(\"layout\", \"itemLabel\", \"itemName\", \"itemTitle\");\n } else if (n.type === \"modular\") {\n // each item type is a block model: its title and fields are read from that model (a stub when it was not passed)\n const slugs = (cfg.blockSlugs as string[] | undefined) ?? [];\n f.of = slugs.map((s, j) => {\n const bm = ctx.blockModels.get(s);\n // how a row of this block type reads in this field (ui.blocks, by slug)\n const chrome = n.ui.blocks?.[s];\n const kids = bm ? bm.fields.map(readField) : [];\n const item: FieldSchema = bm\n ? { name: camel(s), title: bm.name, type: \"object\" as const, fields: kids.map((c, k) => readToV2(c, `${at}/of/${j}/fields/${k}`, kids, ctx, false, lane)) }\n : { name: camel(s), title: camel(s), type: \"object\" as const, fields: [] };\n if (chrome?.icon) item.icon = tablerIconOf(chrome.icon);\n if (chrome?.preview) item.preview = previewFromProd(chrome.preview, kids);\n return item;\n });\n const missing = slugs.filter((s) => !ctx.blockModels.has(s));\n if (missing.length)\n ctx.onLoss(`${at}/config/blockSlugs`, \"block models\", `Each item type is its own block model; ${missing.join(\", \")} was not passed, so its fields read as none.`);\n ctx.modular.add(f);\n if (n.ui.itemLabel) f.itemNoun = n.ui.itemLabel.toLowerCase();\n if (n.ui.icon) f.icon = tablerIconOf(n.ui.icon);\n const l = n.ui.layout;\n if (l === \"grid\" || l === \"list\") f.arrayLayout = l;\n else if (l === \"rows\") f.layout = \"list\";\n else if (l) loss(\"ui/layout\", \"ui.layout\", `V2 has no \"${l}\" layout for a list of blocks.`);\n if (typeof cfg.minItems === \"number\") val.min = cfg.minItems;\n if (typeof cfg.maxItems === \"number\") val.max = cfg.maxItems;\n use(\"blockSlugs\", \"minItems\", \"maxItems\");\n useUi(\"itemLabel\", \"icon\", \"layout\", \"blocks\");\n } else if (n.type === \"multi-reference\" || n.type === \"multiReference\") {\n const ref = referenceFromConfig(cfg);\n f.of = [{ ...itemOf(n), type: \"reference\", ...(ref ? { reference: ref } : {}) }];\n leafListChrome(n, f, loss, \"a list of entries\");\n if (typeof cfg.min === \"number\") val.min = cfg.min;\n if (typeof cfg.max === \"number\") val.max = cfg.max;\n use(\"min\", \"max\");\n useUi(\"layout\", \"itemLabel\", \"itemName\", \"itemTitle\");\n }\n if (n.type === \"array\" && n.zones?.nonRepeatable && n.zones.repeatable) useUi(\"preview\", \"icon\", \"itemLabel\", \"layout\"); // read by listOf\n for (const [k, x] of Object.entries(cfg)) {\n if (x === undefined || used.has(k)) continue;\n // a key the host reads from the stored prop (CATALOG \"host config\"): named, as a catalog item, not a loss\n if (isHostConfigKey(n.type, k) || isHostConfigKey(type, k)) loss(`config/${k}`, \"host config\", CATALOG[\"host config\"]);\n else loss(`config/${k}`, \"config\", `V2 has no \"${k}\" setting on a ${type} field.`);\n }\n for (const [k, x] of Object.entries(n.ui)) if (x !== undefined && !usedUi.has(k)) loss(`ui/${k}`, `ui.${k}`, `V2 has no ui.${k} on a ${type} field.`);\n if (n.defaultValue !== undefined || (top && ctx.plans)) {\n const plan = readPlan(f, n.type, ctx.zoned, ctx.modular, ctx.types, ctx.slots, ctx.blocks);\n if (top) ctx.plans?.set(f.name, plan);\n if (n.defaultValue !== undefined) f.initialValue = planFromProd(plan, n.defaultValue, (rel, reason) => loss(`defaultValue${rel}`, \"stored value\", reason));\n }\n if (Object.keys(val).length) f.validation = val;\n return f;\n}\n\n/** config.item → the V2 item field's description, localized flag and validation (in V2's key order). */\nfunction itemSettingsFromProd(item: unknown): Partial<FieldSchema> {\n if (!isObj(item)) return {};\n const s = item as ArrayItemSettings;\n const out: Partial<FieldSchema> = {};\n const val: NonNullable<FieldSchema[\"validation\"]> = {};\n if (s.required !== undefined) val.required = s.required;\n if (s.minLength !== undefined) val.min = s.minLength;\n if (s.maxLength !== undefined) val.max = s.maxLength;\n if (s.pattern !== undefined) val.pattern = s.pattern;\n if (s.patternMessage !== undefined) val.patternMessage = s.patternMessage;\n if (Object.keys(val).length) out.validation = val;\n if (s.localized !== undefined) out.localized = s.localized;\n if (s.helpText !== undefined) out.description = s.helpText;\n return out;\n}\n\n/** A reference config → the V2 `reference`: entry models first, then config.targets; config.filter as written. */\nfunction referenceFromConfig(cfg: FieldConfig): FieldSchema[\"reference\"] | undefined {\n const entries = cfg.polymorphic ? (cfg.allowedModelSlugs ?? []) : cfg.contentModelId ? [cfg.contentModelId] : [];\n const targets: string[] = Array.isArray(cfg.targets) ? cfg.targets.filter((t) => typeof t === \"string\") : [];\n const to = [...entries, ...targets];\n if (!to.length && typeof cfg.filter !== \"string\") return undefined;\n return { to, ...(typeof cfg.filter === \"string\" ? { filter: cfg.filter } : {}) };\n}\n\n/** A list of scalars or entries: its item's name and title (ui.itemName / ui.itemTitle, else the convention). */\nconst itemOf = (n: ProdNode) => {\n const conv = conventionItem(n.key, n.label);\n return { name: n.ui.itemName ?? conv.name, title: n.ui.itemTitle ?? conv.title };\n};\n\n/** A list of scalars or entries: the noun (ui.itemLabel) and its layout (rows → list, gallery → grid tiles). */\nfunction leafListChrome(n: ProdNode, f: FieldSchema, loss: (k: string, feature: string, reason: string) => void, what: string) {\n if (n.ui.itemLabel !== undefined) f.itemNoun = n.ui.itemLabel.toLowerCase();\n const l = n.ui.layout;\n if (l === \"rows\") f.layout = \"list\";\n else if (l === \"gallery\") f.arrayLayout = \"grid\";\n else if (l) loss(\"ui/layout\", \"ui.layout\", `V2 has no \"${l}\" layout for ${what}.`);\n}\n\n/** A list of object rows (zones.repeatable, legacy repeater, prop table) → the V2 array's single item type. */\nfunction listOf(n: ProdNode, kids: ProdNode[], name: string, at: string, ctx: ReadCtx, lane: AdapterTarget) {\n const conv = conventionItem(name, n.label, n.ui.itemLabel);\n const item: FieldSchema = {\n name: n.ui.itemName ?? conv.name,\n title: n.ui.itemTitle ?? conv.title,\n type: \"object\",\n fields: kids.map((c, i) => readToV2(c, `${at}/fields/${i}`, kids, ctx, false, lane)),\n };\n if (n.ui.preview) item.preview = previewFromProd(n.ui.preview, kids);\n if (n.ui.icon) item.icon = tablerIconOf(n.ui.icon);\n const out: { name: string; title: string; type: \"array\"; of: FieldSchema[]; itemNoun?: string; arrayLayout?: \"list\" | \"grid\"; layout?: FieldSchema[\"layout\"] } = {\n name,\n title: n.label,\n type: \"array\",\n of: [item],\n };\n // the noun is stored as ui.itemLabel; with none, the engine already falls back to the item title\n if (n.ui.itemLabel !== undefined) out.itemNoun = n.ui.itemLabel.toLowerCase();\n const l = n.ui.layout;\n if (l === \"grid\" || l === \"list\") out.arrayLayout = l;\n else if (l === \"rows\") out.layout = \"list\";\n else if (l) ctx.onLoss(`${at}/ui/layout`, \"ui.layout\", `V2 has no \"${l}\" layout for rows.`);\n return out;\n}\n\n/** A prod content model (both dialects) → TypeSchema. */\nexport function toTypeSchema(model: ProdContentModel, opts: ToTypeSchemaOptions = {}): TypeSchema {\n const ctx: ReadCtx = {\n onLoss: (path, feature, reason) => opts.onLoss?.({ path, feature, reason }),\n sets: new Map(),\n zoned: new WeakSet(),\n modular: new WeakSet(),\n types: new WeakSet(),\n slots: new WeakMap(),\n blocks: new WeakSet(),\n blockModels: new Map((opts.blockModels ?? []).map((m) => [m.slug, m] as const)),\n plans: opts.plans,\n };\n const sets = model.fieldsets ?? [];\n const groups: FieldGroup[] = [];\n const fieldsets: V2Fieldset[] = [];\n sets.forEach((s, i) => {\n ctx.sets.set(s.id, s);\n if (s.kind === \"tab\") {\n const g: FieldGroup = { name: s.id, title: s.name };\n if (s.icon) g.icon = tablerIconOf(s.icon);\n if (groups.length === 0) g.default = true;\n groups.push(g);\n return;\n }\n const fs: V2Fieldset = { name: s.id, title: s.name };\n if (s.description !== undefined) fs.description = s.description;\n for (const k of [\"collapsed\", \"collapsible\", \"columns\", \"layout\"] as const) if (s[k] !== undefined) (fs as unknown as Obj)[k] = s[k];\n if (s.kind === \"row\") ctx.onLoss(`/fieldsets/${i}/kind`, \"fieldset row\", \"V2 has no row fieldset; it reads as a section.\");\n if (s.icon !== undefined) ctx.onLoss(`/fieldsets/${i}/icon`, \"fieldset icon\", \"V2 sections have no icon.\");\n fieldsets.push(fs);\n });\n const nodes = model.fields.map(readField);\n const out: TypeSchema = {\n name: camel(model.slug),\n title: model.name,\n kind: model.kind === \"block\" ? \"block\" : \"entry\",\n fields: nodes.map((n, i) => readToV2(n, `/fields/${i}`, nodes, ctx, true, \"fields\")),\n };\n if (model.description !== undefined) out.description = model.description;\n if (fieldsets.length) out.fieldsets = fieldsets;\n if (groups.length) out.groups = groups;\n return out;\n}\n\n/** A prod component's props → TypeSchema (kind \"block\"); prop groups read back as fieldsets. */\nexport function propsToTypeSchema(component: ProdComponent, opts: ToTypeSchemaOptions = {}): TypeSchema {\n const ctx: ReadCtx = {\n onLoss: (path, feature, reason) => opts.onLoss?.({ path, feature, reason }),\n sets: new Map(),\n zoned: new WeakSet(),\n modular: new WeakSet(),\n types: new WeakSet(),\n slots: new WeakMap(),\n blocks: new WeakSet(),\n blockModels: new Map((opts.blockModels ?? []).map((m) => [m.slug, m] as const)),\n plans: opts.plans,\n };\n const nodes = component.props.map(readProp);\n // prop groups as V2 fieldsets, met depth first (a prop, then its sub-fields: groups nest), sorted by `order` when set\n const fieldsets: V2Fieldset[] = [];\n const order = new Map<string, number>();\n const visit = (list: ProdNode[], at: string) =>\n list.forEach((n, i) => {\n const g = n.ui.group;\n if (g && !fieldsets.some((s) => s.name === g.id)) {\n const fs: V2Fieldset = { name: g.id, title: g.label ?? g.id };\n if (g.description !== undefined) fs.description = g.description;\n if (g.collapsed !== undefined) fs.collapsed = g.collapsed;\n if (g.columns !== undefined) fs.columns = g.columns;\n if (g.collapsible !== undefined) fs.collapsible = g.collapsible;\n if (g.layout !== undefined) fs.layout = g.layout;\n if (typeof g.order === \"number\") order.set(g.id, g.order);\n if (g.kind === \"row\") ctx.onLoss(`${at}/${i}/ui/group/kind`, \"fieldset row\", \"V2 has no row fieldset; it reads as a section.\");\n if (g.icon !== undefined) ctx.onLoss(`${at}/${i}/ui/group/icon`, \"fieldset icon\", \"V2 sections have no icon.\");\n fieldsets.push(fs);\n }\n if (n.fields) visit(n.fields, `${at}/${i}/fields`);\n });\n visit(nodes, \"/fields\");\n if (order.size) {\n const at = new Map(fieldsets.map((s, i) => [s.name, i] as const));\n fieldsets.sort((a, b) => (order.get(a.name) ?? at.get(a.name)!) - (order.get(b.name) ?? at.get(b.name)!));\n }\n // top-level prop tabs as V2 groups: the first prop with an id defines it, then the declared tabs no prop sits in\n // (component.tabs), sorted by `order` (else first appearance)\n const groups: FieldGroup[] = [];\n const tabOrder = new Map<string, number>();\n for (const t of [...nodes.map((n) => n.ui.tab), ...(component.tabs ?? [])]) {\n if (!t || groups.some((g) => g.name === t.id)) continue;\n const g: FieldGroup = { name: t.id, title: t.label ?? t.id };\n if (t.icon) g.icon = tablerIconOf(t.icon);\n if (typeof t.order === \"number\") tabOrder.set(t.id, t.order);\n groups.push(g);\n }\n if (tabOrder.size) {\n const at = new Map(groups.map((g, i) => [g.name, i] as const));\n groups.sort((a, b) => (tabOrder.get(a.name) ?? at.get(a.name)!) - (tabOrder.get(b.name) ?? at.get(b.name)!));\n }\n if (groups.length) groups[0].default = true;\n const out: TypeSchema = {\n name: camel(component.slug),\n title: component.name,\n kind: \"block\",\n fields: nodes.map((n, i) => readToV2(n, `/fields/${i}`, nodes, ctx, true, \"props\")),\n };\n if (component.description !== undefined && component.description !== null) out.description = component.description;\n if (component.category !== undefined && component.category !== \"custom\") out.category = capitalize(component.category);\n if (component.icon) out.icon = tablerIconOf(component.icon);\n // component.preview names top-level prop keys, so it reads as V2's document preview against the props themselves\n if (component.preview) out.preview = previewFromProd(component.preview, nodes);\n if (fieldsets.length) out.fieldsets = fieldsets;\n if (groups.length) out.groups = groups;\n return out;\n}\n\n"],"mappings":";;;;;;;AAsJA,IAAM,SAAS,MAAyB,CAAC,CAAC,KAAK,OAAO,MAAM,YAAY,CAAC,MAAM,QAAQ,CAAC;AACxF,SAAS,UAAU,GAAY,GAAqB;CAClD,IAAI,MAAM,GAAG,OAAO;CACpB,IAAI,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,GAAG,OAAO,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,UAAU,GAAG,EAAE,EAAE,CAAC;CACtJ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO;CAEnC,OAAO,CAAC,GAAG,IADM,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,OAAO,KAAA,KAAa,EAAE,OAAO,KAAA,CAAS,CACvG,CAAI,CAAC,CAAC,OAAO,MAAM,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;AACrD;AAGA,IAAM,YAAY,MAAe,EAAE,SAAS,KAAK,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,KAAK,CAAC,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,GAAG,EAAE,IAAI;AACpI,IAAM,SAAS,MACb,EACG,QAAQ,sBAAsB,OAAO,CAAC,CACtC,YAAY,CAAC,CACb,QAAQ,gBAAgB,GAAG,CAAC,CAC5B,QAAQ,YAAY,EAAE,KAAK;AAChC,IAAM,SAAS,MAAc,EAAE,QAAQ,iBAAiB,GAAG,MAAc,EAAE,YAAY,CAAC;;AAExF,IAAa,eAAe;AAC5B,IAAM,cAAc,MAAc,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,MAAM,CAAC;AACvE,IAAM,aAAkC,IAAI,IAAI,OAAO,KAAK,sBAAsB,aAAa,CAAC,GAAG,KAAK,kBAAkB,UAAU,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC;;AAEvJ,IAAM,UAAU,MAAc;CAC5B,IAAI,WAAW,IAAI,CAAC,GAAG,OAAO;CAC9B,IAAI,CAAC,oCAAoC,KAAK,CAAC,GAAG,OAAO;CACzD,IAAI;EACF,IAAI,KAAK,eAAe,MAAM,EAAE,UAAU,EAAE,CAAC;EAC7C,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;;AAGA,IAAM,kBAAkB,WAAmB,YAAoB,eAAwB;CACrF,MAAM,SAAS,SAAS;CACxB,OAAO,aAAa,SAAS,UAAU;AACzC;;AAGA,SAAS,gBAAgB,aAAiC,GAAoB;CAC5E,IAAI,gBAAgB,WAAW,OAAO,MAAM,SAAS,OAAO,MAAM,UAAU,QAAQ;CACpF,KAAK,gBAAgB,YAAY,gBAAgB,aAAa,EAAE,KAAK,MAAM,MAAM,OAAO,SAAS,OAAO,CAAC,CAAC,GAAG,OAAO,OAAO,CAAC;CAC5H,OAAO;AACT;;AAIA,IAAM,aAA8E;CAClF,QAAQ;CAAQ,MAAM;CAAY,UAAU;CAAY,QAAQ;CAAU,QAAQ;CAAU,SAAS;CAAW,MAAM;CACtH,OAAO;CAAS,MAAM;CAAQ,UAAU;CAAY,OAAO;CAAS,QAAQ;CAAU,aAAa;CAAe,MAAM;CACxH,OAAO;CAAS,MAAM;CAAQ,MAAM;CAAQ,MAAM;CAAQ,QAAQ;CAAU,WAAW;CAAa,MAAM;CAAQ,UAAU;CAE5H,KAAK;CAAQ,MAAM;CAAQ,OAAO;AACpC;;AAEA,IAAM,YAA4E;CAChF,QAAQ;CAAQ,MAAM;CAAY,OAAO;CAAS,UAAU;CAAY,QAAQ;CAAU,QAAQ;CAAU,SAAS;CAAW,MAAM;CACtI,OAAO;CAAS,MAAM;CAAQ,UAAU;CAAY,OAAO;CAAS,QAAQ;CAAU,aAAa;CAAe,MAAM;CACxH,OAAO;CAAS,MAAM;CAAQ,MAAM;CAAQ,MAAM;CAAQ,QAAQ;CAAU,MAAM;CAAQ,UAAU;CAAY,KAAK;CAAO,MAAM;AACpI;;AAEA,IAAM,gCAAqC,IAAI,IAAI;CACjD;CAAS;CAAa;CAAmB;CAAkB;CAAQ;CAAY;CAAiB;CAAW;CAAY;CAAQ;CAAU;CAAQ;CACjJ;CAAS;AACX,CAAC;;AAED,IAAM,YAAgE;CACpE,QAAQ;CAAQ,MAAM;CAAQ,QAAQ;CAAU,MAAM;CAAQ,OAAO;CAAS,MAAM;CAAQ,UAAU;AACxG;AACA,IAAM,gBAAgB,MAAc,CAAC;CAAC;CAAQ;CAAQ;CAAW;AAAY,CAAC,CAAC,SAAS,CAAC;;AAEzF,IAAM,mBAAsC;CAAC;CAAQ;CAAQ;AAAY;;;;;;;AAOzE,IAAa,mBAAmB;AAChC,IAAM,eAAe,MAAgC,CAAC,CAAC,GAAG,IAAI,UAAU,EAAE,GAAG,OAAO,MAAM,MAAM,SAAS;;AAEzG,IAAM,uBAAuB;AAC7B,IAAM,cAAc,MAA4B,OAAO,MAAM,YAAY,EAAE,KAAK,MAAM,MAAM,EAAE,UAAU,wBAAwB,CAAC,OAAO,KAAK,CAAC;;AAE9I,IAAM,gBAAgB;CAAE,KAAK;CAAG,KAAK;CAAG,MAAM;AAAI;;;;;;AAMlD,IAAM,iBAAiB;;;;;AAKvB,IAAa,mBAAgE;CAC3E,uBAAuB;CACvB,QAAQ;CACR,2BAA2B;CAC3B,gBAAgB;CAChB,qBAAqB;CACrB,UAAU;CACV,mBAAmB;CACnB,sBAAsB;CACtB,oBAAoB;CACpB,oBAAoB;CACpB,oBAAoB;CACpB,mBAAmB;CACnB,sBAAsB;CACtB,YAAY;CACZ,MAAM;CACN,SAAS;CACT,QAAQ;AACV;;AAEA,IAAM,oCAAyC,IAAI,IAAI;CACrD;CAAQ;CAAY;CAAY;CAAS;CAAQ;CAAQ;CAAS;CAAS;CAAS;CAAU;CAAU;CAAU;CAAQ;CAAY;AACxI,CAAC;;AAED,IAAM,iBAAiB;;AAEvB,IAAM,iBAAiB;;AAEvB,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;;AAE5B,IAAM,mBAAmB;;;;;AAKzB,IAAM,+BAAoC,IAAI,IAAI;CAChD;CAAQ;CAAY;CAAQ;CAAS;CAAS;CAAQ;CAAU;CAAU;CAAa;CACvF;CAAS;CAAe;CAAQ;AAClC,CAAC;;AAED,IAAM,oCAAyC,IAAI,IAAI;CAAC;CAAe;CAAQ;CAAmB;CAAS;AAAO,CAAC;AACnH,IAAM,mCAAwC,IAAI,IAAI;CAAC;CAAQ;CAAO;CAAQ;CAAS;CAAS;CAAU;CAAU;AAAM,CAAC;;AAE3H,IAAM,gCAAqC,IAAI,IAAI;CAAC;CAAQ;CAAY;CAAY;AAAU,CAAC;AAC/F,IAAM,+BAAoC,IAAI,IAAI;CAAC;CAAQ;CAAO;CAAY;AAAU,CAAC;AACzF,IAAM,gCAAqC,IAAI,IAAI;CAAC;CAAQ;CAAY;AAAK,CAAC;;;;;AAK9E,IAAM,qCAA0C,IAAI,IAAI;CAAC;CAAS;CAAQ;CAAU;CAAQ;CAAS;CAAY;CAAQ;CAAQ;CAAa;AAAiB,CAAC;AAChK,IAAM,kBAA+D;CACnE,OAAO;EAAC;EAAM;EAAO;EAAQ;EAAW;EAAS;EAAU;EAAS;CAAM;CAC1E,OAAO;EAAC;EAAO;EAAU;EAAY;EAAQ;CAAY;AAC3D;AACA,IAAM,iBAAmD,EAAE,KAAK,UAAU;;AAE1E,IAAM,kBAAqC,CAAC,WAAW,OAAO;AA8B9D,IAAM,QAAQ,KAAU,MAAc,YAA0B,IAAI,MAAM,KAAK;CAAE;CAAM;CAAS,QAAQ,SAAS,QAAQ,CAAC;AAAO,CAAC;AAClI,IAAM,OAAO,KAAU,MAAc,YAA4B,IAAI,QAAQ,KAAK;CAAE;CAAM;CAAS,QAAQ,QAAQ;AAAS,CAAC;;AAoC7H,IAAM,8BAAmC,IAAI,IAAI;CAC/C;CAAQ;CAAS;CAAQ;CAAe;CAAY;CAAgB;CAAc;CAAY;CAAS;CAAU;CACjH;CAAU;CAAc;CAAY;CAAa;CAAM;CAAe;AACxE,CAAC;;AAoBD,IAAM,wCAA6C,IAAI,IAAI;CAAC;CAAU;CAAS;CAAS;CAAS;CAAQ;CAAQ;AAAS,CAAC;;AAE3H,IAAM,oBAAoB;;AAE1B,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAE5B,SAAS,QAAQ,GAAgB,IAAY,KAAU,KAAc,MAAoB;CACvF,MAAM,QAAQ,aAAa,GAAG,IAAI,KAAK,GAAG;CAE1C,IAAI,SAAS,aAAa,sBAAsB,IAAI,MAAM,IAAI,GAAG,OAAO;EAAE,MAAM;EAAQ,MAAM;EAAQ,SAAS;CAAe;CAC9H,OAAO;AACT;;AAGA,IAAM,sCAA2C,IAAI,IAAI;CAAC;CAAW;CAAU;AAAM,CAAC;;AAEtF,SAAS,WAAW,MAAsB;CACxC,IAAI,IAAI,KAAK,QAAQ,OAAO,EAAE,CAAC,CAAC,QAAQ,mBAAmB,EAAE;CAC7D,IAAI,CAAC,YAAY,KAAK,CAAC,GAAG,IAAI,IAAI;CAClC,OAAO,oBAAoB,IAAI,CAAC,IAAI,GAAG,EAAE,SAAS;AACpD;;AAGA,IAAM,eAAe,UACnB,MAAM,QAAQ,KAAK,KAAK,MAAM,UAAU,KAAK,MAAM,UAAU,kBAAkB,IAAI,IAAI,KAAK,CAAC,CAAC,SAAS,MAAM,UAC7G,MAAM,OAAO,MAAM,OAAO,MAAM,YAAY,MAAM,EAAE,KAAK,KAAK,EAAE,UAAU,KAAK,EAAE,UAAU,mBAAmB;AAEhH,SAAS,aAAa,GAAgB,IAAY,KAAU,KAAqB;CAC/E,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,OAAO,MAAA;CACb,MAAM,KAAK,MAAM,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,KAAA;;CAExC,MAAM,WAAW,MAAgC,SAAS,EAAE,GAAG,MAAM,CAAC,EAAA,CAAG,MAAM,MAAM,aAAa,CAAC,KAAK,iBAAiB,SAAS,CAAC,CAAC;CACpI,QAAQ,EAAE,MAAV;EACE,KAAK,UACH,OAAO,OAAO;GAAE,MAAM;GAAQ,MAAM;GAAQ,SAAS;EAAW,IAAI;GAAE,MAAM;GAAU,MAAM;EAAS;EACvG,KAAK,SAAS;GACZ,IAAI,MAAM,GAAG,SAAS,KAAK,GAAG,OAAO,MAAM,EAAE,SAAS,QAAQ,GAAG;IAC/D,IAAI,CAAC,OAAO,OAAO;KAAE,MAAM;KAAW,MAAM;KAAW,OAAO;IAAG;IACjE,OAAO,OAAO;KAAE,MAAM;KAAQ,MAAM;KAAQ,SAAS;IAAW,IAAI;KAAE,MAAM;KAAS,MAAM;KAAS,OAAO;IAAG;GAChH;GACA,IAAI,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO;IAAE,MAAM;IAAQ,MAAM;IAAQ,SAAS,KAAK,2BAA2B;GAAY;GACtH,MAAM,OAAO,GAAG;GAChB,IAAI,KAAK,SAAS,UAAU,OAAO,OAAO;IAAE,MAAM;IAAQ,MAAM;IAAQ,SAAS;GAAW,IAAI;IAAE,MAAM;IAAS,MAAM,QAAQ,UAAU;IAAS;GAAK;GACvJ,IAAI,KAAK,SAAS,eAAe,YAAY,KAAK,SAAS,GAAG,OAAO;IAAE,MAAM;IAAY,MAAM;IAAS;IAAM,UAAU;IAAQ,SAAS;GAAK;GAC9I,IAAI,KAAK,SAAS,aAChB,OAAO,QAAQ,KAAK,SAAS,IAAI;IAAE,MAAM;IAAQ,MAAM;IAAQ,SAAS;GAAmB,IAAI;IAAE,MAAM;IAAQ,MAAM;IAAmB;GAAK;GAC/I,MAAM,OAAO,UAAU,KAAK;GAC5B,IAAI,MAAM,OAAO;IAAE,MAAM;IAAY,MAAM;IAAS;IAAM,UAAU;GAAK;GACzE,OAAO;IAAE,MAAM;IAAQ,MAAM;IAAQ,SAAS;GAAuB;EACvE;EACA,KAAK;GAGH,IAAI,CAAC,SAAS,CAAC,YAAa,EAAE,IAAwC,KAAK,GAAG,OAAO;IAAE,MAAM;IAAQ,MAAM;IAAQ,SAAS;GAAY;GACxI,OAAO;IAAE,MAAM;IAAQ,MAAM;GAAO;EACtC,KAAK,SAEH,OAAO;GAAE,MAAM;GAAQ,MAAM;EAAQ;EACvC,KAAK;GACH,IAAI,SAAS,OAAO,EAAE,WAAW,IAAI,WAAW,KAAK,EAAE,UAAU,GAAG,OAAO,UAAU,CAAC,EAAE,UAAU,QAAQ,OAAO;IAAE,MAAM;IAAQ,MAAM;GAAO;GAC9I,IAAI,YAAY,EAAE,SAAS,GAAG,OAAO;IAAE,MAAM;IAAQ,MAAM;IAAQ,SAAS;GAAK;GACjF,OAAO,QAAQ,EAAE,SAAS,IAAI;IAAE,MAAM;IAAQ,MAAM;IAAQ,SAAS;GAAmB,IAAI;IAAE,MAAM;IAAQ,MAAM;GAAY;EAChI,SAAS;GACP,MAAM,IAAI,QAAQ,UAAU,EAAE,QAAQ,WAAW,EAAE;GACnD,OAAO,IAAI;IAAE,MAAM;IAAQ,MAAM;GAAE,IAAI;IAAE,MAAM;IAAQ,MAAM;IAAQ,SAAS;GAAkB;EAClG;CACF;AACF;AAEA,IAAM,SAAS,KAAU,IAAY,GAAW,KAAa,YAA0B;CACrF,IAAI,EAAE,UAAU,KAAK,OAAO;CAC5B,KAAK,KAAK,IAAI,OAAO;CACrB,OAAO,EAAE,MAAM,GAAG,GAAG;AACvB;AAEA,SAAS,aAAa,GAAgB,IAAY,IAAY,KAAU,UAAyB,KAAc,UAAU,OAAO,SAAS,OAAO,YAAY,OAAa;CACvK,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,QAAQ,QAAQ,GAAG,IAAI,KAAK,KAAK,UAAU,SAAS,SAAS,SAAS,YAAY,YAAY,KAAA,CAAS;CAC7G,MAAM,OAAa;EAAE,KAAK,EAAE;EAAM,OAAO,EAAE;EAAO,MAAM,MAAM;EAAM,QAAQ,CAAC;EAAG,IAAI,CAAC;CAAE;CAEvF,MAAM,QAAQ,SAAS,MAAM,GAAG,KAAK,IAAI,GAAG,SAAS,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;CACnG,IAAI,OAAO;EACT,KAAK,MAAM,GAAG,EAAE,KAAK,GAAG,QAAQ;EAChC,KAAK,KAAK,GAAG,GAAG,QAAQ,gBAAgB;CAC1C,OAAO,IAAI,CAAC,SAAS,WAAW,EAAE,IAAI,MAAM,EAAE,MAAM;EAElD,KAAK,MAAM,WAAW,EAAE,IAAI;EAC5B,KAAK,KAAK,GAAG,GAAG,QAAQ,eAAe;CACzC;CACA,MAAM,UAAU,MAAM,SAAS,YAAY,MAAM,SAAS,WAAW,MAAM,SAAS;;CAEpF,MAAM,QAAQ,MAAM,SAAS,WAAW,MAAM,SAAS,aAAa,MAAM,SAAS,WAAW,MAAM,SAAS,cAAc,MAAM,SAAS;CAC1I,MAAM,cAAc,SAAS,CAAC,cAAc,IAAI,MAAM,IAAI;CAC1D,IAAI,MAAM,SAAS,QAAQ,KAAK,KAAK,GAAG,GAAG,QAAQ,MAAM,OAAO;CAChE,MAAM,WAAW,MAAM,SAAS,UAAU,MAAM,SAAS,eAAe,MAAM,YAAY;CAC1F,IAAI,SAAS;EAEX,IAAI,EAAE,aAAa,MAAM,KAAK,KAAK,GAAG,GAAG,YAAY,mBAAmB;EACxE,KAAK,WAAW;EAChB,KAAK,aAAa;CACpB;CACA,IAAI,CAAC,SAAS,EAAE,SAAS,OAAO,KAAK,OAAO,YAAY;CACxD,IAAI,MAAM,SAAS,cAAc,CAAC,OAAO,KAAK,OAAO,cAAc;CACnE,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,SAAS,KAAK,OAAO,OAAO;CACxE,IAAI,MAAM,SAAS,SAAS,KAAK,OAAO,OAAO;CAE/C,IAAI,MAAM,SAAS,UAAU,OAAO,KAAK,OAAO,WAAW;CAC3D,IAAI,OAAO;EAIT,MAAM,QACJ,EAAE,aAAa,KAAA,IACX,WAAW,EAAE,QAAQ,IACrB,SAAS,MAAM,SAAS,WAAW,MAAM,KAAK,UAAU,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QACtF,MAAM,KAAK,QACX,KAAA;EACR,IAAI,UAAU,KAAA,KAAa,MAAM,UAAA,IAA0B,KAAK,GAAG,YAAY;CACjF;CAEA,MAAM,UAAU,EAAE,QAAQ,SAAS,mBAAmB,CAAC,CAAC,EAAE;CAE1D,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,GAA4B;EAEvD,IADU,EAAE,OACF,KAAA,GAAW;EACrB,MAAM,IAAI,GAAG,GAAG,GAAG;EACnB,IAAI,MAAM,SAAS,UAAU,CAAC,YAAY,IAAI,CAAC,GAAG;GAChD,KAAK,KAAK,GAAG,MAAM,OAAO;GAC1B;EACF;EAEA,IAAI,YAAY,MAAM,eAAe,MAAM,aAAa;EACxD,IAAI,YAAY,MAAM,YAAY,MAAM,eAAe;GACrD,KAAK,KAAK,GAAG,mBAAmB;GAChC;EACF;EACA,QAAQ,GAAR;GACE,KAAK;GACL,KAAK;GACL,KAAK,QACH;GACF,KAAK;IACH,KAAK,WAAW,MAAM,KAAK,GAAG,EAAE,aAAc,QAAA,MAAA,KAAwC,YAAY;IAClG;GACF,KAAK;IACH,KAAK,WAAW,MAAM,KAAK,GAAG,EAAE,UAAW,eAAe,YAAY;IACtE;GACF,KAAK;IACH,IAAI,OAAO,KAAK,cAAc,MAAM,KAAK,GAAG,EAAE,aAAA,KAAoC,YAAY;SACzF,IAAI,aAAa,KAAK,cAAc,EAAE;SAEtC,KAAK,GAAG,cAAc,MAAM,KAAK,GAAG,EAAE,aAAA,KAAkC,YAAY;IACzF;GACF,KAAK;IAGH,IAAI,UAAU,MAAM,SAAS,eAAe,MAAM,SAAS,qBAAqB,MAAM,SAAS,SAAS,IAAI,KAAK,GAAG,iBAAiB;SAChI,KAAK,eAAe,cAAc,GAAG,OAAO,EAAE,cAAc,GAAG,KAAK,IAAI,GAAG;IAChF;GACF,KAAK;IACH,iBAAiB,GAAG,OAAO,MAAM,GAAG,KAAK,SAAS,GAAG;IACrD;GACF,KAAK;IACH,cAAc,GAAG,OAAO,MAAM,GAAG,GAAG;IACpC;GACF,KAAK;IACH,aAAa,GAAG,OAAO,MAAM,GAAG,GAAG;IACnC;GACF,KAAK;IACH,IAAI,MAAM,SAAS,UAAU,KAAK,WAAW,EAAE,OAAQ,KAAK,GAAG,MAAM,aAAa,GAAG,GAAG,EAAE,GAAG,KAAK,KAAK,GAAG,KAAK,EAAE,QAAS,KAAK,CAAC;SAC3H,KAAK,KAAK,GAAG,iBAAiB;IACnC;GACF,KAAK;IACH,SAAS,GAAG,OAAO,MAAM,GAAG,IAAI,GAAG;IACnC;GACF,KAAK;IAEH,IAAI,WAAY,SAAS,MAAM,SAAS,QAAS,KAAK,WAAW,EAAE;SAC9D,KAAK,KAAK,GAAG,UAAU;IAC5B;GACF,KAAK;IACH,IAAI,MAAM,SAAS,UAAU,KAAK,GAAG,UAAU,cAAc,EAAE,SAAU,EAAE,UAAU,CAAC,GAAG,GAAG,GAAG;SAC1F,KAAK,KAAK,GAAG,iBAAiB;IACnC;GACF,KAAK;GACL,KAAK,SACH;GACF,KAAK;IACH,IAAI,OAAO,EAAE,WAAW,WAAW,KAAK,GAAG,SAAS,EAAE;SACjD;KACH,MAAM,SAAS,kBAAkB,EAAE,QAAS,GAAG,UAAU,KAAK,SAAS,GAAG;KAC1E,IAAI,QAAQ,KAAK,SAAS;IAC5B;IACA;GACF,KAAK;IAEH,IAAI,EAAE,aAAa,QAAQ,CAAC,SAAS,KAAK,WAAW;SAChD,KAAK,KAAK,GAAG,QAAQ;IAC1B;GACF,KAAK,UAAU;IACb,MAAM,SAAyC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,OAAO,OAAO,QAAQ,EAAE,MAAO,GAAG;KAChD,IAAI,OAAO,KAAA,GAAW;KACtB,IAAI,OAAO,UAAU,OAAO,eAAe,OAAO,OAAO;UACpD,IAAI,OAAO,UAAU,OAAO,iBAAiB,OAAO,OAAO;UAC3D,KAAK,KAAK,GAAG,EAAE,GAAG,MAAM,QAAQ;IACvC;IACA,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC,QAAQ,KAAK,GAAG,SAAS;IACjD,IAAI,SAAS,KAAK,WAAW;IAC7B;GACF;GACA,KAAK;IACH,KAAK,aAAa,MAAM,KAAK,GAAG,EAAE,YAAA,KAA8B,YAAY;IAC5E;GACF,KAAK;IACH,KAAK,YAAY,EAAE;IACnB;GACF,KAAK;IACH,IAAI,EAAE,UAAU,KAAK,WAAW;IAChC;GACF,KAAK;IACH,KAAK,WAAW,EAAE;IAClB;GACF,KAAK;IACH,IAAI,KAAK,GAAG,IAAI;IAChB;GACF,KAAK;IACH,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,aAAa,kBAAkB,EAAE,WAAY,MAAM,GAAG,GAAG;SAChG,IAAI,MAAM,SAAS,QAAQ,KAAK,KAAK,GAAG,iBAAiB;IAC9D;GACF,KAAK;IACH,cAAc,GAAG,MAAM,GAAG,GAAG;IAC7B;GACF,KAAK;IACH,IAAI,MAAM,SAAS,UAAU,cAAc,EAAE,OAAQ,MAAM,GAAG,GAAG;SAC5D,KAAK,KAAK,GAAG,iBAAiB;IACnC;GACF,KAAK,QAAQ;IACX,MAAM,OAAO,MAAM,SAAS,YAAY,MAAM,SAAS,aAAa,MAAM,SAAS,UAAU,WAAW,EAAE,IAAI,IAAI,KAAA;IAClH,IAAI,MAAM,KAAK,GAAG,OAAO;SACpB,KAAK,KAAK,GAAG,MAAM;IACxB;GACF;GACA,KAAK;IACH,KAAK,MAAM,SAAS,UAAU,MAAM,SAAS,eAAe,QAAQ,EAAE,MAAM,GAAA,EAAc,GAAG,KAAK,GAAG,OAAO,EAAE;SACzG,KAAK,KAAK,GAAG,MAAM;IACxB;GACF,KAAK,UAAU;IACb,MAAM,OAAO,EAAE,OAAQ;IAEvB,IADW,OAAO,SAAS,YAAY,SAAS,KAAK,KAAK,KAAK,KAAK,UAAU,KAAK,KAAK,UAAA,MAA6B,OAAO,KAAK,EAAE,MAAO,CAAC,CAAC,OAAO,MAAM,MAAM,MAAM,GAC7J,KAAK,GAAG,SAAS,EAAE,KAAK;SAC3B,KAAK,KAAK,GAAG,QAAQ;IAC1B;GACF;GACA,KAAK;IACH,IAAI,MAAM,SAAS,QAAQ,mBAAmB,EAAE,cAAe,MAAM,GAAG,IAAI,GAAG;SAC1E,KAAK,KAAK,GAAG,cAAc;IAChC;GACF,KAAK;IAEH,IAAI,CAAC,SAAS,KAAK,GAAG,WAAW,YAAY,MAAM,EAAE,UAAU,KAAK,KAAK,GAAG,UAAU;IACtF;GACF,KAAK;IACH,IAAI,MAAM,SAAS,WAAW,MAAM,SAAS,aAAa,MAAM,SAAS,SAAS,KAAK,GAAG,SAAS,EAAE;SAEhG,KAAK,MAAM,SAAS,cAAc,MAAM,SAAS,WAAW,EAAE,gBAAgB,QAAQ,KAAK,GAAG,SAAS;SACvG,KAAK,KAAK,GAAG,QAAQ;IAC1B;GACF,KAAK;IACH,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,WAAW,MAAM,SAAS,UAAU,KAAK,GAAG,aAAa,EAAE;SAClG,KAAK,KAAK,GAAG,YAAY;IAC9B;GACF,KAAK;IACH,IAAI,OAAO,EAAE,aAAa,YAAY,EAAE,UAAU,KAAK,OAAO,WAAW,EAAE;SACtE,KAAK,KAAK,GAAG,iBAAiB;IACnC;GACF,KAAK;IACH,IAAI,MAAM,SAAS,WAAW,EAAE,YAAY,MAAM,KAAK,OAAO,QAAQ;SACjE,IAAI,EAAE,YAAY,OAAO,KAAK,KAAK,GAAG,iBAAiB;IAC5D;GACF,KAAK;IACH,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,YAAY;KACtD,MAAM,KAAK,EAAE;KACb,MAAM,OAAO,OAAO,OAAO,aAAa,OAAO,SAAS,KAAK,OAAO,OAAO,YAAY,GAAG,WAAW,QAAQ,KAAK,OAAO,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,KAAA;KACtJ,IAAI,SAAS,KAAA,GAAW,KAAK,OAAO,WAAW;UAC1C,KAAK,KAAK,GAAG,UAAU;IAC9B,OAAO,KAAK,KAAK,GAAG,iBAAiB;IACrC;GACF,KAAK;IACH,IAAI,MAAM,SAAS,UAAU,OAAO,EAAE,aAAa,UAAU,KAAK,OAAO,WAAW,EAAE;SACjF,KAAK,KAAK,GAAG,iBAAiB;IACnC;GACF,KAAK;IACH,IAAI,MAAM,SAAS,UAAU,MAAM,QAAQ,EAAE,SAAS,KAAK,EAAE,UAAU,OAAO,MAAM,OAAO,MAAM,QAAQ,GAAG,KAAK,OAAO,YAAY,CAAC,GAAG,EAAE,SAAS;SAC9I,KAAK,KAAK,GAAG,iBAAiB;IACnC;GACF,KAAK;IACH,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,SAAS,OAAO,OAAO,KAAK,QAAQ,uBAAuB,EAAE,KAAK,CAAC;SAC1G,KAAK,KAAK,GAAG,YAAY;IAC9B;GACF,SACE,KAAK,KAAK,GAAG,iBAAiB;EAClC;CACF;CAEA,IAAI,SAAS,EAAE,gBAAgB,KAAA,GAAW,KAAK,WAAW;CAE1D,IAAI,EAAE,aAAa,KAAA,KAAa,MAAM,SAAS,WAAW,KAAK,GAAG,cAAc,KAAA,GAAW,IAAI,KAAK,GAAG,GAAG,YAAY,oBAAoB;CAC1I,WAAW,GAAG,MAAM,IAAI,KAAK,KAAK,QAAQ;CAC1C,IAAI,EAAE,SAAS,YAAY,KAAK,SAAS,YAAY,EAAE,SAAS,SAAS,KAAA,GAAW;EAClF,MAAM,KAAK,OAAO,KAAK,OAAO,QAAQ,WAAW,KAAK,OAAO,MAAM;EAEnE,MAAM,UADK,OAAO,KAAK,OAAO,QAAQ,WAAW,KAAK,OAAO,MAAA,KACzC,MAAM;EAC1B,IAAI,KAAK,IAAI,QAAQ,KAAK,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,MAAM,KAAK,KAAA,KAAuB,KAAK,OAAO,OAAO;CAC9G;CACA,IAAI,KAAK,GAAG,YAAY,YAAY,CAAC,SAAS,KAAK,MAAM,GAAG;EAC1D,OAAO,KAAK,GAAG;EACf,KAAK,KAAK,GAAG,GAAG,UAAU,QAAQ;CACpC;CACA,OAAO;AACT;AAEA,IAAM,WAAW,GAAY,KAAK,GAAG,KAAK,aAA0B,OAAO,MAAM,YAAY,OAAO,UAAU,CAAC,KAAK,KAAK,MAAM,KAAK;AACpI,IAAM,YAAY,OAAe;CAC/B,IAAI;EACF,IAAI,OAAO,EAAE;EACb,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;AAEA,IAAM,mBAAmB,MAAmB,EAAE,QAAQ,cAAc,OAAO,EAAE,QAAQ,cAAc,OAAO,EAAE,SAAS,cAAc;;AAGnI,SAAS,SAAS,EAAE,KAAK,KAAK,QAAqB;CACjD,IAAI,EAAE,OAAO,QAAQ,YAAY,OAAO,QAAQ,YAAY,MAAM,MAAM,OAAO;CAC/E,OAAO,SAAS,KAAA,KAAc,OAAO,SAAS,YAAY,OAAO,MAAM,MAAM,OAAO,QAAQ;AAC9F;;AAGA,SAAS,WAAW,GAAgB,MAAY,IAAY,KAAU,KAAc,UAAyB;CAC3G,IAAI,IAAI,SAAS,SAAS;EACxB,IAAI,CAAC,KAEC;OAAA,EAAE,UAAU,KAAA,GAAW;IACzB,IAAI,IAAI,SAAS,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM;SACtD,KAAK,KAAK,GAAG,GAAG,SAAS,gBAAgB;GAChD;SACK;GACL,MAAM,IAAI,IAAI,SAAS,IAAI,CAAC;GAC5B,IAAI,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,SAAS,EAAE,IAAI;GAE5C,IAAI,GAAG,KAAK,KAAK,GAAG,MAAM,IAAI,YAAY,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,YAAY,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;EACjH;EACA,IAAI,EAAE,aAAa,KAAA,GAAW;EAC9B,MAAM,MAAM,IAAI,SAAS,IAAI,EAAE,QAAQ;EACvC,IAAI,CAAC,KAAK,OAAO,KAAK,KAAK,GAAG,GAAG,YAAY,oBAAoB;EAEjE,IAAI,UAAU,IAAI,cAAc,IAAI,QAAQ;EAC5C,IAAI,CAAC,SAAS,IAAI,cAAc,IAAI,UAAW,0BAAU,IAAI,IAAI,CAAE;EACnE,IAAI,QAAQ,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,QAAQ,EAAE,IAAI,IAAI,KAAK;OACrD;GACH,QAAQ,IAAI,IAAI,IAAI;GACpB,KAAK,GAAG,QAAQ,YAAY,KAAK,GAAG;EACtC;EACA;CACF;CACA,MAAM,MAAM,EAAE,aAAa,KAAA,KAAa,IAAI,KAAK,IAAI,EAAE,QAAQ,IAAI,EAAE,WAAW,KAAA;CAChF,IAAI,EAAE,aAAa,KAAA,KAAa,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG,YAAY,oBAAoB;CACtF,IAAI,CAAC,KAAK;EACR,IAAI,EAAE,UAAU,KAAA,GAAW,KAAK,KAAK,GAAG,GAAG,SAAS,gBAAgB;EACpE,IAAI,KAAK,KAAK,aAAa;EAC3B;CACF;CACA,MAAM,MAAM,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI,KAAA;CACtC,IAAI,EAAE,UAAU,KAAA,KAAa,CAAC,IAAI,KAAK,IAAI,EAAE,KAAK,GAAG,KAAK,KAAK,GAAG,GAAG,SAAS,IAAI,YAAY,IAAI,EAAE,KAAK,KAAK,iBAAiB;MAC1H,IAAI,OAAO,QAAQ,EAAE,OAAO,KAAK,KAAK,GAAG,GAAG,SAAS,uBAAuB;CACjF,KAAK,aAAa,QAAQ,EAAE,UAAU,KAAA,KAAa,IAAI,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,QAAQ,KAAA;AACvF;;AAGA,SAAS,YAAY,GAAe,KAAqB;CACvD,MAAM,IAAe;EAAE,IAAI,EAAE;EAAM,OAAO,EAAE,MAAM,MAAM,GAAA,EAAuB;EAAG,MAAM;CAAQ;CAChG,IAAI,EAAE,cAAc,KAAA,GAAW,EAAE,YAAY,EAAE;CAC/C,IAAI,mBAAmB,EAAE,WAAW,GAAG,EAAE,cAAc,EAAE;CACzD,IAAI,EAAE,YAAY,KAAA,GAAW,EAAE,UAAU,EAAE;CAC3C,IAAI,EAAE,gBAAgB,KAAA,GAAW,EAAE,cAAc,EAAE;CACnD,IAAI,EAAE,WAAW,KAAA,GAAW,EAAE,SAAS,EAAE;CACzC,IAAI,IAAI,YAAY,EAAE,QAAQ,KAAK,IAAA,IAA2B,IAAI,UAAU,IAAI,EAAE,IAAI,KAAK,CAAE;CAC7F,OAAO;AACT;AACA,IAAM,sBAAsB,MAAuC,OAAO,MAAM,YAAY,MAAM,EAAE,KAAK,KAAK,EAAE,UAAU,KAAK,EAAE,UAAA;;AAGjI,IAAM,aAAa,MAAoB,OAAO,EAAE,aAAa,YAAY,EAAE,SAAS,WAAW,QAAQ,IAAI,EAAE,SAAS,MAAM,CAAC,IAAI,KAAA;;;;;;AAOjI,SAAS,cAAc,GAAgB,OAAc,GAAY,IAAY,KAAU,IAAY,KAAuB;CACxH,MAAM,OAAO,UAAU,GAAG,OAAO,IAAI,KAAK,GAAG;CAC7C,MAAM,MAAM,WAAW,MAAM,CAAC;CAC9B,KAAK,MAAM,KAAK,UAAU,GAAG,aAAa,MAAM,GAAG,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,eAAe;CAC7F,OAAO;AACT;AAsCA,IAAM,QAAe,EAAE,GAAG,QAAQ;;AAGlC,SAAS,UAAU,GAAgB,OAAc,IAAY,KAAU,KAAqB;CAC1F,MAAM,QAAQ,QAAuB,SACnC,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,EAAE,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,GAAG,KAAK,KAAK,CAAC,CAAU,CAAC;CACtH,QAAQ,MAAM,MAAd;EACE,KAAK,QACH,OAAO;EACT,KAAK,YACH,OAAO,MAAM,aAAa,WAAW,MAAM,aAAa,SAAS;GAAE,GAAG;GAAQ,MAAM,MAAM;EAAS,IAAI;EACzG,KAAK,UACH,OAAO;GAAE,GAAG;GAAU,QAAQ,KAAK,EAAE,UAAU,CAAC,CAAC;EAAE;EACrD,KAAK,SACH,OAAO;GAAE,GAAG;GAAQ,OAAO,IAAI,SAAS;GAAU,QAAQ,KAAK,MAAM,KAAK,UAAU,CAAC,GAAG,IAAI,SAAS,UAAU,SAAS,KAAA,CAAS;EAAE;EACrI,KAAK,SACH,OAAO;GAAE,GAAG;GAAS,OAAO,IAAI,IAAI,MAAM,MAAM,KAAK,MAAM,CAAC,EAAE,MAAM,KAAK,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,CAAU,CAAC;EAAE;EAC/G,KAAK,QACH,OAAO,IAAI,SAAS,WAAW,EAAE,GAAG,SAAS,IAAI;EACnD,KAAK,WAAW;GAEd,MAAM,QAAQ,WAA0B,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,EAAE,MAAM,UAAU,GAAG,QAAQ,GAAG,GAAG,KAAK,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC,CAAU,CAAC;GAC5I,OAAO;IAAE,GAAG;IAAW,OAAO,IAAI,IAAI,MAAM,MAAM,KAAK,MAAM,CAAC,EAAE,MAAM,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAU,CAAC;GAAE;EACzG;EACA,KAAK,QACH,OAAO,EAAE,GAAG,OAAO;EACrB,KAAK;GAEH,IAAI,MAAM,SAAS,OAAO;GAC1B,IAAI,EAAE,SAAS,UAAU,EAAE,SAAS,OAAO,OAAO,EAAE,GAAG,OAAO;GAC9D,IAAI,EAAE,SAAS,YAAY,EAAE,SAAS,SAAS,OAAO,EAAE,GAAG,EAAE,KAAK;GAClE,IAAI,EAAE,SAAS,YAAY,OAAO;IAAE,GAAG;IAAY,MAAM,UAAU,CAAC;GAAE;GACtE,IAAI,EAAE,SAAS,aAAa,OAAO,EAAE,GAAG,OAAO,MAAM,SAAS,SAAS,SAAS,MAAM;GACtF,OAAO,SAAS,GAAG,MAAM,IAAI;CACjC;AACF;;AAGA,SAAS,SAAS,GAAgB,UAAyB;CACzD,IAAI,EAAE,SAAS,SAAS,OAAO,EAAE,GAAG,QAAQ;CAC5C,IAAI,EAAE,SAAS,UAAU,OAAO;EAAE,GAAG;EAAU,OAAO;GAAE,KAAK,EAAE,SAAS;GAAK,KAAK,EAAE,SAAS;GAAK,MAAM,EAAE,SAAS,QAAQ;EAAe;CAAE;CAC5I,IAAI,EAAE,SAAS,YAAY,EAAE,OAAO,OAAO;EAAE,GAAG;EAAS,OAAO,EAAE;CAAM;CACxE,OAAO,aAAa,WAAW,EAAE,GAAG,SAAS,IAAI;AACnD;;;;;;AAOA,SAAS,SACP,GACA,UACA,OACA,SACA,OACA,OACA,QACO;CACP,MAAM,QAAQ,WAA0B,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,EAAE,MAAM,SAAS,GAAG,IAAI,OAAO,SAAS,OAAO,OAAO,MAAM,CAAC,CAAU,CAAC;CAC3I,QAAQ,EAAE,MAAV;EACE,KAAK;EACL,KAAK,OACH,OAAO,EAAE,GAAG,OAAO;EACrB,KAAK;EACL,KAAK,SACH,OAAO,EAAE,GAAG,EAAE,KAAK;EACrB,KAAK,YACH,OAAO;GAAE,GAAG;GAAY,MAAM,UAAU,CAAC;EAAE;EAC7C,KAAK,QACH,OAAO,EAAE,GAAG,OAAO;EACrB,KAAK;GAEH,IAAI,YAAY,EAAE,SAAS,GAAG,OAAO;GACrC,OAAO,EAAE,GAAG,aAAa,SAAS,SAAS,MAAM;EACnD,KAAK,UACH,OAAO;GAAE,GAAG;GAAU,GAAI,MAAM,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;GAAI,QAAQ,KAAK,EAAE,UAAU,CAAC,CAAC;EAAE;EAC/F,KAAK;GAEH,IAAI,QAAQ,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS;GACzC,OAAO,OAAO,IAAI,CAAC,IAAI;IAAE,GAAG;IAAQ,UAAU,MAAM,IAAI,CAAC;GAAE,IAAI;EACjE,KAAK,SAAS;GACZ,IAAI,QAAQ,IAAI,CAAC,GAAG,OAAO;IAAE,GAAG;IAAW,OAAO,IAAI,KAAK,MAAM,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,EAAA,CAAG,KAAK,MAAM,CAAC,EAAE,MAAM,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAU,CAAC;GAAE;GACjJ,IAAI,OAAO,IAAI,CAAC,GAAG,OAAO;IAAE,GAAG;IAAS,OAAO,IAAI,KAAK,MAAM,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,EAAA,CAAG,KAAK,MAAM,CAAC,EAAE,MAAM,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAU,CAAC;GAAE;GAC9I,MAAM,OAAO,MAAM,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,WAAW,IAAI,EAAE,GAAG,KAAK,KAAA;GAClE,IAAI,MAAM,SAAS,UAAU,OAAO;IAAE,GAAG;IAAQ,OAAO,MAAM,IAAI,CAAC;IAAG,QAAQ,KAAK,KAAK,UAAU,CAAC,CAAC;GAAE;GACtG,IAAI,MAAM,SAAS,WAAW,MAAM,SAAS,QAAQ,OAAO;IAAE,GAAG;IAAQ,MAAM,KAAK;GAAK;GACzF,OAAO,MAAM,SAAS,eAAe,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,GAAG,OAAO,IAAI;EACtF;EACA,SACE,OAAO,SAAS,GAAG,QAAQ;CAC/B;AACF;;;;;;AAOA,SAAgB,cAAc,GAAgB,UAA6B;CACzE,OAAO,SAAS,GAAG,0BAAU,IAAI,QAAQ,mBAAG,IAAI,QAAQ,CAAC;AAC3D;;;;;AAMA,SAAgB,WAAW,MAAiB,GAAY,MAAiB,KAAK,IAAa;CACzF,IAAI,MAAM,KAAA,GAAW,OAAO,KAAA;CAC5B,MAAM,QAAY,MAAoC;EACpD,IAAI,MAAM,KAAK,MAAM,KAAK,EAAE,MAAM,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC;EACjE,OAAO,EAAE;CACX;CACA,MAAM,SAAS,MAAwB,KAAK,GAAG,GAAG,GAAG,MAAM,OAAO,CAAC;CACnE,QAAQ,KAAK,GAAb;EACE,KAAK,QACH,OAAO,KAAK,WAAW,CAAgB,CAAC;EAC1C,KAAK,UACH,OAAO,KAAK,aAAa,CAAkB,CAAC;EAC9C,KAAK,SACH,OAAO,KAAK,YAAY,CAAiB,CAAC;EAC5C,KAAK,YACH,OAAO,KAAK,eAAe,GAAa,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC;EAC9D,KAAK,QACH,OAAO,KAAK,gBAAgB,GAAa,EAAE,IAAI,OAAO,CAAC,CAAC;EAC1D,KAAK;EACL,KAAK,QACH,OAAO,KAAK,gBAAgB,CAAsB,CAAC;EACrD,KAAK;GACH,IAAI,OAAO,MAAM,YAAY,MAAM,MAAM,OAAO;GAChD,MAAM,KAAK,MAAM,SAAS;GAC1B;EACF,KAAK,SACH,OAAO,KAAK,YAAY,CAAiB,CAAC;EAC5C,KAAK,QACH,OAAO,KAAK,WAAW,GAAgB,KAAK,IAAI,CAAC;EACnD,KAAK,SACH,OAAO,KAAK,YAAY,GAAiB,KAAK,KAAK,CAAC;EACtD,KAAK,UACH,OAAO,KAAK,aAAa,GAAa,KAAK,KAAK,CAAC;EACnD,KAAK,UAAU;GACb,MAAM,MAAM,QAAQ,GAAG,KAAK,SAAS,GAAG,GAAG,MAAM,WAAW,GAAG,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC;GACjF,OAAO,KAAK,SAAS,MAAM,GAAG,IAAI,EAAE,eAAe,IAAI,IAAI;EAC7D;EACA,KAAK,QAAQ;GACX,IAAI,CAAC,MAAM,QAAQ,CAAC,GAAG,OAAO;GAC9B,MAAM,OAAO,EAAE,KAAK,KAAK,MAAM,QAAQ,KAAK,KAAK,SAAS,GAAG,GAAG,MAAM,WAAW,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;GACjH,OAAO,KAAK,QAAQ,eAAe,IAAI,IAAI;EAC7C;EACA,KAAK;GACH,IAAI,CAAC,MAAM,QAAQ,CAAC,GAAG,OAAO;GAC9B,OAAO,EAAE,KAAK,KAAK,MAAM;IACvB,IAAI,CAAC,MAAM,GAAG,KAAK,OAAO,IAAI,UAAU,UAAU,OAAO;IACzD,MAAM,EAAE,MAAM,OAAO,GAAG,SAAS;IACjC,MAAM,SAAS,KAAK,MAAM,IAAI,KAAK;IAEnC,OAAO;KACL,MAAM,OAAO,SAAS,YAAY,OAAO,OAAO,GAAG,MAAM,KAAK,EAAE,GAAG,IAAI;KACvE,QAAQ,MAAM,KAAK;KACnB,MAAM,SAAS,QAAQ,MAAM,SAAS,GAAG,GAAG,MAAM,WAAW,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI;IAClG;GACF,CAAC;EACH,KAAK,UACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,MAAO,MAAM,CAAC,KAAK,OAAO,EAAE,UAAU,WAAW;GAAE,GAAG;GAAG,OAAO,MAAM,EAAE,KAAK;EAAE,IAAI,CAAE,IAAI;EAC5H,KAAK,QAAQ;GACX,MAAM,QAAQ,SAAiB,KAAK,QAAQ,IAAI;GAChD,OAAO,qBACL,KAAK,SAAS,qBAAqB,GAAG,KAAK,MAAM,IAAI,GACrD,KAAK,aAAa,QACjB,MAAM,QAAQ,MAAM;IACnB,MAAM,SAAS,KAAK,IAAI;IACxB,OAAO,SAAU,QAAQ,QAAQ,SAAS,GAAG,GAAG,MAAM,WAAW,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,IAAY;GAC9G,IACC,QAAQ,MAAM,KAAK,MAAM,GAAG,CAAC,CAChC;EACF;EACA,KAAK,SACH,OAAO,KACL,gBAAgB,IAAI,KAAK,MAAM;GAC7B,MAAM,SAAS,KAAK,MAAM,IAAI,IAAI,KAAK;GACvC,OAAO,SAAU,QAAQ,KAAK,SAAS,GAAG,GAAG,MAAM,WAAW,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,IAAY;EAC3G,CAAC,CACH;EACF,SACE,OAAO;CACX;AACF;;AAGA,IAAM,iCAAsC,IAAI,IAAI;CAAC;CAAO;CAAM;CAAQ;CAAW;AAAO,CAAC;;;;;;AAO7F,SAAS,gBAAgB,GAAY,KAAa,MAA6C;CAC7F,IAAI,CAAC,MAAM,CAAC,GAAG;CACf,MAAM,SAAS,OAAO,EAAE,QAAQ,YAAY,OAAO,EAAE,QAAQ;CAC7D,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAC,GAAG;EACtC,IAAI,eAAe,IAAI,CAAC,KAAK,MAAM,KAAA,GAAW;EAC9C,IAAI,UAAU,MAAM,OAAO;EAC3B,IAAI,MAAM,SAAS,OAAO,MAAM,YAAY,EAAE,YAAY,KAAA,GAAW;EACrE,IAAI,MAAM,QACJ;OAAA,KAAK,QAAQ,CAAC,WAAW,CAAC,GAAG,KAAK,GAAG,IAAI,QAAQ,mEAAmE;EAAA,OACnH,KAAK,GAAG,IAAI,GAAG,KAAK,sBAAsB,EAAE,2DAA2D;CAChH;AACF;AAEA,IAAM,mBAAmB,MACvB,MAAM,CAAC,MAAM,UAAU,KAAK,UAAU,KAAK,cAAc,KACrD,sHACA;;;AAIN,SAAgB,aAAa,MAAiB,GAAY,MAA8C,MAAM,IAAa;CACzH,IAAI,MAAM,KAAA,GAAW,OAAO,KAAA;CAC5B,QAAQ,KAAK,GAAb;EACE,KAAK,QACH,OAAO,aAAa,CAAC;EACvB,KAAK,UACH,OAAO,eAAe,CAAC;EACzB,KAAK;GACH,IAAI,MAAM,gBAAgB,GAAG,KAAK,IAAI;GACtC,OAAO,cAAc,CAAC;EACxB,KAAK;EACL,KAAK;GAEH,IAAI,QAAQ,MAAM,QAAQ,OAAO,MAAM,UAAU,KAAK,OAAO,WAAW,gBAAgB,CAAC,CAAC;GAC1F,OAAO,KAAK,MAAM,SAAS,IAAI,iBAAiB,GAAG,EAAE,MAAM,KAAK,KAAK,CAAC;EACxE,KAAK,SACH,OAAO,cAAc,CAAC;EACxB,KAAK;GACH,IAAI,QAAQ,KAAK,SAAS,WAAW,MAAM,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,gBAAgB,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC;GAClH,OAAO,aAAa,GAAG,KAAK,IAAI;EAClC,KAAK,SACH,OAAO,cAAc,CAAC;EACxB,KAAK,UACH,OAAO,eAAe,GAAG,KAAK,KAAK;EACrC,KAAK,QACH,OAAO,kBAAkB,CAAC;EAC5B,KAAK;EACL,KAAK;GACH,IAAI,MAAW;SAAA,MAAM,CAAC,GAAG,OAAO,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,EAAA,CAAG,QAAQ,GAClE,IAAI,MAAM,CAAC,KAAK,EAAE,cAAc,KAAA,GAAW,KAAK,GAAG,MAAM,MAAM,QAAQ,CAAC,IAAI,IAAI,MAAM,GAAG,aAAa,4EAA4E;SAE7K,IAAI,MAAM,CAAC,KAAK,kBAAkB,CAAC,MAAM,MAAM,KAAK,GAAG,MAAM,MAAM,QAAQ,CAAC,IAAI,IAAI,MAAM,QAAQ,WAAW,kEAAkE;GAAA;GACtL,OAAO,kBAAkB,CAAC;EAC5B,KAAK,UAAU;GAEb,MAAM,MAAM,KAAK,SAAS,MAAM,CAAC,KAAK,mBAAmB,IAAI,IAAI,KAAA;GACjE,IAAI,OAAO,MACJ;SAAA,MAAM,KAAK,OAAO,KAAK,GAAG,GAAG,IAAI,MAAM,mBAAmB,IAAI,OAAO,KAAA,GAAW,KAAK,GAAG,IAAI,GAAG,KAAK,sBAAsB,EAAE,6DAA6D;GAAA;GAChM,MAAM,KAAK,MAAM,GAAG,IAAI,kBAAkB;GAC1C,OAAO,QAAQ,MAAO,MAAM,IAAI,aAAa,IAAI,IAAI,gBAAgB,CAAC,IAAK,GAAG,KAAK,SAAS,GAAG,GAAG,MAAM,aAAa,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;EAChJ;EACA,KAAK,QAAQ;GACX,MAAM,OAAO,KAAK,QAAQ,iBAAiB,CAAC,IAAI;GAChD,OAAO,MAAM,QAAQ,IAAI,IAAI,KAAK,KAAK,KAAK,MAAM,QAAQ,KAAK,KAAK,SAAS,GAAG,GAAG,MAAM,aAAa,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI;EAC5I;EACA,KAAK,WACH,OAAO,MAAM,QAAQ,CAAC,IAClB,EAAE,KAAK,KAAK,MAAM;GAChB,IAAI,CAAC,MAAM,GAAG,KAAK,OAAO,IAAI,WAAW,UAAU,OAAO;GAC1D,MAAM,OAAO,MAAM,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC;GAC3C,MAAM,SAAS,KAAK,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC;GAC/C,MAAM,OAAO,SAAU,QAAQ,MAAM,SAAS,GAAG,GAAG,MAAM,aAAa,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,IAAY;GAClH,OAAO;IAAE,MAAM,IAAI;IAAM,OAAO,MAAM,IAAI,MAAM;IAAG,GAAG;GAAK;EAC7D,CAAC,IACD;EACN,KAAK,UACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,MAAO,MAAM,CAAC,KAAK,OAAO,EAAE,UAAU,WAAW;GAAE,GAAG;GAAG,OAAO,MAAM,EAAE,KAAK;EAAE,IAAI,CAAE,IAAI;EAC5H,KAAK,QACH,OAAO,uBACL,IACC,MAAM,QAAQ,MAAM;GACnB,MAAM,SAAS,KAAK,QAAQ,IAAI;GAChC,MAAM,OAAO,SAAU,QAAQ,QAAQ,SAAS,GAAG,GAAG,MAAM,aAAa,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,IAAY;GACpH,MAAM,UAAU,KAAK,SAAS,IAAI,CAAC,EAAE;GACrC,OAAO,YAAY,KAAA,IAAY,OAAO;IAAE,GAAG;IAAM,UAAU;GAAQ;EACrE,IACC,GAAG,WAAW,OAAO,GAAG,IAAI,GAAG,KAAK,MAAM,CAC7C;EACF,KAAK,SACH,OAAO,kBAAkB,IAAI,KAAK,MAAM;GACtC,MAAM,SAAS,KAAK,MAAM,IAAI,IAAI,KAAK;GACvC,IAAI,CAAC,QAAQ;IACX,OAAO,GAAG,IAAI,GAAG,EAAE,SAAS,8BAA8B,IAAI,MAAM,uEAAuE;IAC3I,OAAO;GACT;GACA,OAAO,QAAQ,KAAK,SAAS,GAAG,GAAG,MAAM,aAAa,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC;EACvF,CAAC;EACH,SACE,OAAO;CACX;AACF;;AAGA,SAAS,QAAQ,GAAY,QAA4B,IAAgE;CACvH,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO;CACtB,MAAM,MAAW,CAAC;CAClB,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAC,GAAG;EACtC,MAAM,OAAO,OAAO,IAAI,CAAC;EACzB,MAAM,IAAI,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI;EAClC,IAAI,MAAM,KAAA,GAAW,IAAI,KAAK;CAChC;CACA,OAAO;AACT;;AAGA,SAAS,UAAU,GAAY,GAAY,OAAO,IAAI,MAAgB,CAAC,GAAa;CAClF,IAAI,UAAU,GAAG,CAAC,GAAG,OAAO;CAC5B,KAAK,MAAM,CAAC,KAAK,MAAM,KAAA,OAAe,MAAM,CAAC,KAAK,MAAM,KAAA,OAAe,MAAM,KAAA,KAAa,MAAM,KAAA,IAAY;EAC1G,MAAM,IAAK,KAAK,CAAC;EACjB,MAAM,IAAK,KAAK,CAAC;EACjB,KAAK,MAAM,qBAAK,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG;CAC5G,OAAO,IAAI,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,GAC5C,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG;MAC3F,IAAI,KAAK,IAAI;CACpB,OAAO;AACT;AAEA,SAAS,iBAAiB,GAAgB,OAAc,MAAY,IAAY,KAAU,SAAkB,KAAc;CACxH,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,EAAE;CACd,MAAM,IAAI,MAAM;CAChB,MAAM,OAAO,MAAM,SAAS;CAC5B,MAAM,UAAU,SAAS,QAAQ,eAAe,cAAA,CAAe,IAAI,CAAC;CAEpE,MAAM,YADY,SAAS,QAAQ,gBAAgB,cAAA,CAAe,IAAI,CAAC,KAAK,MAAM,cAAc,MAAM,cACvE,OAAO,IAAI,YAAY,YAAY,IAAI,QAAQ,UAAA,OAAyB,SAAS,IAAI,OAAO;;CAE3H,MAAM,QAA0D,CAAC;CACjE,MAAM,OAAO,KAAa,GAAW,SAAuB,IAAY,OAAe;EACrF,KAAK,OAAO,OAAO;EACnB,IAAI,CAAC,MAAM,MAAM,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,KAAK;GAAC;GAAI;GAAI,GAAG,GAAG;GAAO,GAAG,GAAG;GAAO;EAAO,CAAC;CAC7F;CACA,KAAK,MAAM,KAAK,OAAO,KAAK,GAAG,GAA2B;EACxD,MAAM,IAAI,IAAI;EACd,IAAI,MAAM,KAAA,GAAW;EACrB,MAAM,IAAI,GAAG,GAAG,GAAG;EACnB,IAAI,MAAM,SAAS,UAAU,MAAM,cAAc,MAAM,kBAAkB;GACvE,KAAK,KAAK,GAAG,MAAM,OAAO;GAC1B;EACF;EACA,QAAQ,GAAR;GACE,KAAK;IACH,KAAK,WAAW,IAAI;IACpB;GACF,KAAK;GACL,KAAK,OAAO;IACV,MAAM,IAAI;IACV,MAAM,KAAK,MAAM;IACjB,IAAI,SAAS;KACX,IAAI,QAAQ,CAAC,GAAG,IAAI,KAAK,cAAc,aAAa,GAAG,qBAAqB,aAAa,WAAW;UAC/F,KAAK,KAAK,GAAG,mBAAmB;IACvC,OAAO,IAAI,MAAM,UAAU;KAEzB,MAAM,IAAK,KAAM,OAAO,eAA8D,CAAC;KACvF,EAAE,KAAK;IACT,OAAO,IAAI,MAAM,UAAU,KAAK,KAAK,GAAG,eAAe;SAClD,IAAI,MAAM,SAAS,WAAW,MAAM,SAAS,aAAa,MAAM,SAAS,WAAW,MAAM,SAAS,UAAU,MAAM,SAAS,YAAY;KAE3I,MAAM,MAAM,MAAM,SAAS,SAAS,iBAAiB;KAErD,IADY,SAAS,OAAQ,MAAM,SAAS,SAAS,QAAQ,GAAG,KAAK,IAAI,GAAG,GAAG,IAAI,QAAQ,CAAC,GACpF,IAAI,KAAK,aAAa,YAAY,GAAG,oBAAoB,YAAY,UAAU;UAClF,KAAK,KAAK,GAAG,kBAAkB;IACtC,OAAO,IAAI,MAAM,SAAS,UAAU,MAAM,iBAAiB,MAAM,QAAQ;KAEvE,IADW,MAAM,SAAS,QAAQ,GAAG,KAAK,IAAI,GAAA,GAAiB,IAAI,QAAQ,CAAC,GACpE,IAAI,GAAG,GAAG,oBAAoB,OAAO,KAAK;UAC7C,KAAK,KAAK,GAAG,kBAAkB;IACtC,OAAO,KAAK,KAAK,GAAG,mBAAmB;IACvC;GACF;GACA,KAAK;IACH,IAAI,QAAQ,GAAG,CAAC,GAAG,KAAK,iBAAiB;SACpC,KAAK,KAAK,GAAG,2BAA2B;IAC7C;GACF,KAAK;IACH,IAAI,WAAW,KAAK,OAAO,UAAU;SAChC,KAAK,KAAK,GAAG,oBAAoB;IACtC;GACF,KAAK;IACH,IAAI,aAAa,OAAO,MAAM,YAAY,EAAE,KAAK,MAAM,MAAM,EAAE,UAAA,KAA+B,KAAK,OAAO,iBAAiB;SACtH,KAAK,KAAK,GAAG,2BAA2B;IAC7C;GACF,KAAK;IACH,IAAI,IAAI,WAAW,OAAO,KAAK,SAAS;SAEnC,IAAI,MAAM,SAAS,SAAS,KAAK,KAAK,GAAG,mBAAmB;SAC5D,IAAI,OAAO;KAEd,IAAI,kBAAkB,IAAI,CAAC,KAAM,WAAW,iBAAiB,IAAI,CAAC,GAAI,KAAK,SAAS;UAC/E,IAAI,KAAK,GAAG,wBAAwB;IAC3C,OAAO;KACL,MAAM,cAAc,MAAM,gBAAgB,EAAE,WAAW,MAAM,CAAC,EAAA,CAAG,OAAO,YAAY,CAAC,CAAC,SAAS;KAC/F,IAAI,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;UAClD,KAAK,KAAK,GAAG,mBAAmB;IACvC;IACA;GAEF,SACE,KAAK,KAAK,GAAG,iBAAiB;EAClC;CACF;CACA,MAAM,IAAI,KAAK,OAAO;CACtB,IAAI,KAAK,EAAE,QAAQ,KAAA,KAAa,EAAE,QAAQ,KAAA,KAAa,EAAE,MAAM,EAAE,KAAK;EACpE,OAAO,KAAK,OAAO;EACnB,KAAK,KAAK,GAAG,GAAG,OAAO,kBAAkB;EACzC,KAAK,KAAK,GAAG,GAAG,OAAO,kBAAkB;CAC3C;CACA,KAAK,MAAM,CAAC,IAAI,IAAI,KAAK,KAAK,YAAY,OAAO;EAC/C,MAAM,IAAI,KAAK,OAAO;EACtB,MAAM,IAAI,KAAK,OAAO;EACtB,IAAI,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,IAAI,GAAG;GAC3D,OAAO,KAAK,OAAO;GACnB,OAAO,KAAK,OAAO;GACnB,KAAK,KAAK,KAAK,OAAO;GACtB,KAAK,KAAK,KAAK,OAAO;EACxB;CACF;AACF;AAEA,SAAS,cAAc,GAAgB,OAAc,MAAY,IAAY,KAAU;CACrF,IAAI,MAAM,SAAS,YAAY,MAAM,SAAS,iBAAiB,MAAM,SAAS,QAAQ,OAAO,KAAK,KAAK,IAAI,iBAAiB;CAC5H,MAAM,OAAO,EAAE;CAEf,MAAM,QAAQ,KAAK,KAAK,MAAO,EAAE,SAAS,KAAA,IAAY,KAAA,IAAY,WAAW,EAAE,IAAI,CAAE;CACrF,MAAM,WAAW,KAAK,OAAO,GAAG,MAAM,EAAE,SAAS,KAAA,KAAa,MAAM,OAAO,KAAA,CAAS;CACpF,KAAK,UAAU,KAAK,KAAK,GAAW,MAAM;EACxC,MAAM,MAAoB;GAAE,OAAO,EAAE;GAAO,OAAO,EAAE;EAAM;EAC3D,IAAI,EAAE,SAAS,KAAA,GAAW;GACxB,IAAI,UAAU,IAAI,OAAO,MAAM;QAC1B,KAAK,KAAK,GAAG,GAAG,GAAG,EAAE,QAAQ,aAAa;EACjD;EACA,MAAM,IAAI,EAAE;EACZ,IAAI,MAAM,KAAA,GAAW;GACnB,IAAI,OAAO,MAAM,YAAY,EAAE,KAAK,MAAM,MAAM,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,UAAA,KAAkC,IAAI,cAAc;QACtH,KAAK,KAAK,GAAG,GAAG,GAAG,EAAE,eAAe,oBAAoB;EAC/D;EACA,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,GAAG,IAAI,CAAC;GAAC;GAAS;GAAS;GAAQ;EAAa,CAAC,CAAC,SAAS,CAAC,GAAG,KAAK,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,iBAAiB;EAC1I,OAAO;CACT,CAAC;AACH;;AAGA,SAAS,aAAa,GAAgB,OAAc,MAAY,IAAY,KAAU;CACpF,MAAM,IAAI,EAAE;CACZ,MAAM,IAAI,MAAM;CAChB,MAAM,IAAI,EAAE,SAAS,UAAU;CAC/B,IAAI,MAAM,eAAe,MAAM,UAAU;EACvC,IAAI,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,UAAU;OACnC,IAAI,KAAK,GAGZ,IAAI,KAAK,IAAI,oBAAoB;OAC5B,KAAK,KAAK,IAAI,QAAQ;CAC/B,OAAO,IAAI,MAAM,YAAY,MAAM,YAAY,EAAE,SAAS,UAAU,KAAK,GAAG,UAAU;MACjF,IAAK,YAAkC,SAAS,CAAC,KAAK,MAAM,eAAe,MAAM,YAAY,cAAc,EAAe,EAAE,SAAS,CAAC,GAAG,KAAK,GAAG,UAAU;MAC3J,IAAI,MAAM,WAAW,MAAM,SAAS,WAAW,MAAM,SAAS,cAAc,MAAM,SAAS,aAAa,MAAM,SAAS,WAAW,MAAM,SAAS,WAAW,EAAE,gBAAgB,KAAA,GAAW,KAAK,GAAG,SAAS;MAC1M,KAAK,KAAK,IAAI,QAAQ;AAC7B;;AAGA,SAAS,WAAW,GAAgB,KAAkB;CAEpD,OAAO,QAAQ,GAAG,GAAG;EADA,GAAG;EAAK,OAAO,CAAC;EAAG,SAAS,CAAC;CAC7B,GAAO,KAAK,CAAC,CAAC;AACrC;;AAEA,SAAS,YAAY,GAAsC;CACzD,IAAI,EAAE,SAAS,UAAU,OAAO,EAAE,UAAU,CAAC;CAC7C,IAAI,EAAE,SAAS,WAAW,MAAM,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,WAAW,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,UAAU,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC;CAC3H,OAAO;AACT;;;;;AAMA,SAAS,kBAAkB,MAAc,UAAyB,KAA8B;CAC9F,MAAM,OAAO,KAAK,MAAM,GAAG;CAC3B,IAAI,OAAO,SAAS,MAAM,MAAM,EAAE,SAAS,KAAK,EAAE;CAClD,IAAI,CAAC,MAAM,OAAO,KAAA;CAClB,MAAM,MAAM,CAAC,KAAK,EAAE;CACpB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACpC,MAAM,OAAO,YAAY,IAAI;EAC7B,IAAI,MAAM;GACR,MAAM,OAAO,KAAK,MAAM,MAAM,EAAE,SAAS,KAAK,EAAE;GAChD,IAAI,CAAC,MAAM,OAAO,KAAA;GAClB,IAAI,KAAK,KAAK,EAAE;GAChB,OAAO;GACP;EACF;EAEA,IAAI,KAAK,SAAS,SAAS,OAAO,gBAAgB,SAAS,KAAK,EAAE,KAAK,MAAM,KAAK,SAAS,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,KAAA;EAC7H,MAAM,OAAO,WAAW,MAAM,GAAG;EACjC,IAAI,CAAC,mBAAmB,IAAI,IAAI,GAAG,OAAO,KAAA;EAC1C,MAAM,MAAM,SAAS,UAAW,eAAe,KAAK,OAAO,KAAK,KAAM,KAAK;EAC3E,IAAI,gBAAgB,SAAS,CAAC,gBAAgB,KAAK,CAAC,SAAS,GAAG,GAAG,OAAO,KAAA;EAC1E,OAAO;GAAC,GAAG;GAAK;GAAK,GAAG,KAAK,MAAM,IAAI,CAAC;EAAC,CAAC,CAAC,KAAK,GAAG;CACrD;CACA,OAAO,IAAI,KAAK,GAAG;AACrB;AAEA,SAAS,cAAc,IAAmB,UAAyB,IAAY,KAAqB;CAClG,MAAM,MAAiB,CAAC;CACxB,KAAK,MAAM,KAAK,OAAO,KAAK,EAAE,GAA8B;EAC1D,MAAM,IAAI,GAAG;EACb,IAAI,MAAM,KAAA,GAAW;EACrB,IAAI,MAAM,WAAW,MAAM,cAAc,MAAM,SAAS;GACtD,MAAM,SAAS,kBAAkB,GAAG,UAAU,GAAG;GACjD,IAAI,WAAW,KAAA,GAAW,IAAI,KAAK;QAC9B,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,cAAc;EAC7C,OAAO,IAAI,MAAM,YAAY;GAC3B,MAAM,IAAI,EAAE,KAAK;GACjB,IAAI,KAAK,MAAM,KAAK,EAAE,UAAA,IAAgC,IAAI,WAAW;QAChE,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,YAAY;EAC3C,OAAO,IAAI,MAAM,QAAQ;GACvB,MAAM,OAAO,WAAW,CAAC;GACzB,IAAI,MAAM,IAAI,OAAO;QAChB,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,cAAc;EAC7C,OAAO,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,iBAAiB;CAClD;CACA,OAAO;AACT;;;;;;AAOA,SAAS,sBAAsB,MAAc,MAA2B,QAAuB,KAAmB;CAChH,MAAM,OAAO,KAAK,MAAM,GAAG;CAC3B,IAAI,KAAK,SAAS,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE,GAAG,OAAO;CAClD,MAAM,OAAO,OAAO,MAAM,MAAM,EAAE,SAAS,KAAK,EAAE;CAClD,IAAI,CAAC,MAAM,OAAO;CAClB,MAAM,UAAU,MAAoB,EAAE,SAAS,WAAW,MAAM,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,SAAS,KAAK,EAAE,GAAG,OAAO,MAAM,EAAE,SAAS,QAAQ,IAAI,EAAE,KAAK,KAAA;CACpJ,IAAI,OAAoB;CACxB,MAAM,OAAO,CAAC,KAAK,EAAE;CACrB,IAAI,OAAO;CACX,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACpC,MAAM,MAAM,KAAK;EACjB,IAAI,QAAQ,KAAK,GAAG,MAAM,KAAK,SAAS,WAAW,KAAK,SAAS,iBAAiB,KAAK,SAAS,SAAS;EAEzG,MAAM,QAAQ,OAAO,IAAI;EACzB,MAAM,OAAO,QAAQ,MAAM,SAAS,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,YAAY,IAAI;EAC5E,IAAI,CAAC,MAAM;GAET,KAAK,KAAK,GAAG,KAAK,MAAM,CAAC,CAAC;GAC1B;EACF;EACA,MAAM,OAAO,KAAK,MAAM,MAAM,EAAE,SAAS,GAAG;EAC5C,IAAI,CAAC,MAAM,OAAO;EAClB,IAAI,OAAO,OAAO;EAClB,KAAK,KAAK,GAAG;EACb,OAAO;CACT;CACA,IAAI,MAAM,OAAO;CACjB,MAAM,QAAQ,KAAK,KAAK,GAAG;CAC3B,OAAO,kBAAkB,OAAO,QAAQ,GAAG,MAAM;AACnD;;;;;;;AAQA,SAAS,uBAAuB,IAAmB,MAA2B,QAAuB,IAAY,KAA4B;CAC3I,MAAM,MAAwB,CAAC;CAC/B,KAAK,MAAM,KAAK,OAAO,KAAK,EAAE,GAA8B;EAC1D,MAAM,IAAI,GAAG;EACb,IAAI,MAAM,KAAA,GAAW;EACrB,IAAI,MAAM,WAAW,MAAM,cAAc,MAAM,SAAS;GACtD,KAAK,KAAK,IAAI,CAAC,KAAK,sBAAsB,GAAG,MAAM,QAAQ,GAAG,MAAM,EAAE,UAAA,IAAqC,IAAI,KAAK;QAC/G,IAAI,KAAK,GAAG,GAAG,GAAG,KAAK,uBAAuB;EACrD,OAAO,IAAI,MAAM,YAAY;GAC3B,MAAM,IAAI,EAAE,KAAK;GACjB,IAAI,KAAK,MAAM,KAAK,EAAE,UAAA,KAA0C,IAAI,WAAW;QAC1E,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,YAAY;EAC3C,OAAO,IAAI,MAAM,QAAQ;GACvB,MAAM,OAAO,WAAW,CAAC;GACzB,IAAI,MAAM,IAAI,OAAO;QAChB,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,cAAc;EAC7C,OAAO,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,iBAAiB;CAClD;CACA,OAAO;AACT;;AAGA,SAAS,aAAa,MAAmB,MAAuC,MAAY,IAAY,KAAU;CAChH,IAAI,KAAK,SAAS,KAAK,MAAM;EAC3B,IAAI,aAAa,KAAK,KAAK,IAAI,GAAG,KAAK,GAAG,WAAW,KAAK;OACrD,KAAK,KAAK,GAAG,GAAG,QAAQ,eAAe;CAC9C;CACA,IAAI,KAAK,UAAU,KAAK,OAAO;EAC7B,MAAM,IAAI,KAAK;EACf,IAAI,MAAM,EAAE,KAAK,KAAK,EAAE,UAAU,KAAK,EAAE,UAAA,IAA0B,KAAK,GAAG,YAAY;OAClF,KAAK,KAAK,GAAG,GAAG,SAAS,eAAe;CAC/C;AACF;AAEA,SAAS,SAAS,GAAgB,OAAc,MAAY,IAAY,IAAY,KAAU;CAC5F,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,UAAU,MAAM,SAAS,UAAU,OAAO,KAAK,KAAK,IAAI,iBAAiB;CACrH,IAAI,MAAM,SAAS,WAAW;EAE5B,KAAK,OAAO,aAAa,MAAM,MAAM,KAAK,MAAM,MAAM,EAAE,IAAI,CAAC;EAC7D,MAAM,MAAM,SAAS,MAAM,MAAM,cAAc,MAAM,GAAG,GAAG,GAAG,KAAK,KAAK,IAAI,CAAC;EAC7E;CACF;CACA,IAAI,MAAM,SAAS,SAAS,OAAO,gBAAgB,MAAM,OAAO,MAAM,IAAI,IAAI,GAAG;CACjF,IAAI,MAAM,SAAS,QAAQ;EAGzB,MAAM,KAAK,EAAE;EACb,KAAK,MAAM,KAAK,OAAO,KAAK,EAAE,GAA0B;GACtD,IAAI,GAAG,OAAO,KAAA,GAAW;GACzB,IAAI,MAAM,WAAW,IAAI,SAAS,UAAU;IAE1C,KAAK,OAAO,aAAa,GAAG,MAAO,IAAI,KAAK;IAC5C,GAAG,MAAO,SAAS,GAAG,MAAM,MAAM,MAAM,CAAC,CAAC,MAAM,KAAK,KAAK,KAAK,GAAG,GAAG,SAAS,KAAK,WAAW,CAAC;GACjG,OAAO,IAAI,MAAM,SAAS;IACxB,IAAI,YAAY,GAAG,KAAK,GAAG,KAAK,OAAO,QAAQ,CAAC,GAAG,GAAG,KAAK;SACtD,IAAI,KAAK,GAAG,GAAG,SAAS,YAAY;GAC3C,OAAO,IAAI,MAAM,UAAU,GAAG,SAAS,SAAS,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,iBAAiB;EAC3F;EACA;CACF;CACA,MAAM,OAAO,MAAM;CACnB,MAAM,KAAK,GAAG,GAAG;CACjB,IAAI,MAAM,SAAS,SAAS;EAC1B,MAAM,SAAS,KAAK,UAAU,CAAC;EAC/B,KAAK,QAAQ;EAEb,KAAK,WAAW,OAAO,KAAK,GAAG,MAAM,aAAa,GAAG,GAAG,GAAG,UAAU,KAAK,KAAK,GAAG,KAAK,QAAQ,OAAO,IAAI,SAAS,OAAO,CAAC;EAC3H,aAAa,MAAM,eAAe,EAAE,MAAM,EAAE,OAAO,KAAK,GAAG,SAAS,GAAG,MAAM,IAAI,GAAG;EACpF,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,GAA4B;GAE1D,IADU,KAAK,OACL,KAAA,GAAW;GACrB,MAAM,IAAI,GAAG,GAAG,GAAG;GACnB,IAAI,MAAM,UAAU,MAAM,YAAY,MAAM,UAAU,MAAM,SAAS;GACrE,IAAI,MAAM,WAAW,KAAK,GAAG,UAAU,cAAc,KAAK,SAAU,QAAQ,GAAG,GAAG;QAC7E,IAAI,MAAM,QAAQ;IACrB,MAAM,OAAO,EAAE,SAAS,KAAA,IAAY,WAAW,KAAK,IAAI,IAAI,KAAA;IAC5D,IAAI,MAAM,KAAK,GAAG,OAAO;SACpB,KAAK,KAAK,GAAG,WAAW;GAC/B,OAAO,IAAI,MAAM,YAAY,IAAI,KAAK,GAAG,eAAe;QACnD,KAAK,KAAK,GAAG,eAAe;EACnC;EACA;CACF;CAGA,IAAI,MAAM,SAAS,YAAY,KAAK,OAAO,WAAW,MAAM;CAC5D,aAAa,MAAM,eAAe,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,IAAI,GAAG;CACjE,MAAM,WAA8B,CAAC;CAErC,MAAM,UAAU,MAAM,SAAS,cAAc,CAAC,MAAM,WAAW,IAAI,SAAS;CAC5E,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,GAA4B;EAC1D,MAAM,IAAI,KAAK;EACf,IAAI,MAAM,KAAA,GAAW;EACrB,MAAM,IAAI,GAAG,GAAG,GAAG;EACnB,IAAI,MAAM,UAAU,MAAM,SAAS;EACnC,IAAI,MAAM,QAAQ;GAChB,IAAI,MAAM,SAAS,cAAc,MAAM,SAAS;GAChD,IAAI,MAAM,SAAS,cAAc,KAAK,SAAS,QAAQ,KAAK,KAAK,GAAG,eAAe;EACrF,OAAO,IAAI,MAAM,eAAe,MAAM,SAAS,QAAQ,kBAAkB,KAAK,WAAY,MAAM,GAAG,GAAG;OACjG,IAAI,MAAM,eAAe,MAAM,SAAS,cAAc,MAAM,SAAS;OACrE,IAAI,WAAW,MAAM,iBAAiB,OAAO,MAAM,YAAY,EAAE,KAAK,MAAM,KAAK,EAAE,UAAU,KAAK,EAAE,UAAA,KAAyB,SAAS,WAAW;OACjJ,IAAI,WAAW,MAAM,eAAe,OAAO,MAAM,WAAW,SAAS,YAAY;OACjF,IAAI,WAAW,MAAM,cAAc,qBAAqB,MAAM,MAAM,UAAU,UAAU,GAAG,GAAG;OAC9F,KAAK,KAAK,GAAG,eAAe;CACnC;CACA,IAAI,SAAS,QAAQ,GAAG,KAAK,OAAO,OAAO;AAC7C;;AAGA,SAAS,qBAAqB,MAAmB,UAAwB,KAAwB,IAAY,KAAU;CACrH,MAAM,MAAM,KAAK;CACjB,MAAM,UAAU,aAAa,UAAU,aAAa;CACpD,KAAK,MAAM,KAAK,OAAO,KAAK,GAAG,GAA2B;EACxD,MAAM,IAAI,IAAI;EACd,IAAI,MAAM,KAAA,GAAW;EACrB,IAAI,MAAM,cAAc,OAAO,MAAM,WAAW,IAAI,WAAW;OAC1D,KAAK,MAAM,SAAS,MAAM,UAAU,WAAW,QAAQ,CAAC,GAAG,IAAI,MAAM,QAAQ,cAAc,eAAe;OAC1G,IAAI,MAAM,aAAa,aAAa,UAAU,OAAO,MAAM,YAAY,EAAE,UAAA,OAAyB,SAAS,CAAC,GAAG,IAAI,UAAU;OAC7H,IAAI,MAAM,oBAAoB,OAAO,MAAM,YAAY,EAAE,KAAK,MAAM,MAAM,EAAE,UAAA,KAA+B,IAAI,iBAAiB;OAChI,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,eAAe;CAC9C;CACA,IAAI,IAAI,cAAc,KAAA,KAAa,IAAI,cAAc,KAAA,KAAa,IAAI,YAAY,IAAI,WAAW;EAC/F,OAAO,IAAI;EACX,OAAO,IAAI;EACX,KAAK,KAAK,GAAG,GAAG,OAAO,eAAe;CACxC;CACA,IAAI,IAAI,mBAAmB,KAAA,KAAa,IAAI,YAAY,KAAA,GAAW;EACjE,OAAO,IAAI;EACX,KAAK,KAAK,GAAG,GAAG,kBAAkB,eAAe;CACnD;AACF;;AAGA,SAAS,mBAAmB,UAAyB,MAAY,IAAY,IAAY,KAAU;CACjG,MAAM,OAAO,SAAS,MAAM,GAAG,iBAAiB;CAChD,IAAI,SAAS,SAAS,mBAAmB,SAAS,MAAM,iBAAiB,CAAC,CAAC,SAAS,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,GAAG,oBAAoB,KAAK,cAAc,CAAC;CACxJ,KAAK,eAAe,KAAK,KAAK,GAAG,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,GAAG,KAAK,MAAM,OAAO,OAAO,OAAO,IAAI,CAAC;AACpH;;;;;;AAOA,SAAS,gBAAgB,OAAsB,MAAY,IAAY,IAAY,KAAU;CAC3F,MAAM,wBAAQ,IAAI,IAAY;CAC9B,KAAK,YAAY,CAAC;CAClB,IAAI,UAAU;CACd,MAAM,SAAS,MAAM,MAAM;EACzB,MAAM,KAAK,GAAG,GAAG,GAAG;EACpB,MAAM,SAAS,KAAK,UAAU,CAAC;EAC/B,MAAM,MAAgC,CAAC,eAAe,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,SAAS,kBAAkB,MAAM,IAAI,KAAK,IAAI,IAAI,mBAAmB,KAAA;EACtJ,IAAI,KAAK;GACP,KAAK,KAAK,IAAI,GAAG;GACjB,UAAU;GACV;EACF;EACA,MAAM,IAAI,KAAK,IAAI;EACnB,MAAM,QAAQ,MAAM,KAAK,GAAG,GAAG,SAAS,KAAK,OAAO,qBAAqB,eAAe;EACxF,MAAM,WAAW,OAAO,KAAK,GAAG,MAAM,aAAa,GAAG,GAAG,GAAG,UAAU,KAAK,KAAK,GAAG,KAAK,QAAQ,OAAO,OAAO,IAAI,CAAC;EACnH,MAAM,OAA+C;GAAE,MAAM,KAAK;GAAM;GAAO;EAAS;EACxF,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,GAA4B;GAC1D,IAAI,KAAK,OAAO,KAAA,KAAa,MAAM,UAAU,MAAM,WAAW,MAAM,UAAU,MAAM,UAAU;GAC9F,MAAM,IAAI,GAAG,GAAG,GAAG;GACnB,IAAI,MAAM,WAAW;IACnB,MAAM,UAAU,cAAc,KAAK,SAAU,QAAQ,GAAG,GAAG;IAC3D,IAAI,SAAS,OAAO,GAAG,KAAK,UAAU;GACxC,OAAO,IAAI,MAAM,QAAQ;IACvB,MAAM,OAAO,WAAW,KAAK,IAAI;IACjC,IAAI,MAAM,KAAK,OAAO;SACjB,KAAK,KAAK,GAAG,WAAW;GAC/B,OAAO,IAAI,MAAM,YAAY,IAAI,KAAK,GAAG,eAAe;QACnD,KAAK,KAAK,GAAG,eAAe;EACnC;EACA,KAAK,UAAW,KAAK,IAAI;CAC3B,CAAC;CACD,IAAI,WAAW,KAAK,UAAU,SAAS,MAAM,UAAU,KAAK,UAAU,QAAQ,KAAK,KAAK,IAAI,eAAe;AAC7G;;;;;;AAOA,SAAS,cAAc,MAAmB,IAAY,KAAU,MAAY;CAC1E,MAAM,QAAQ,IAAI,MAAM;CACxB,MAAM,WAAW,IAAI,QAAQ;CAC7B,MAAM,OAAO,MAAM,KAAK,IAAI;CAE5B,MAAM,MAAW;EAAE,GAAG;EAAK,sBAAM,IAAI,IAAI;EAAG,6BAAa,IAAI,IAAI;EAAG,sBAAM,IAAI,IAAI;CAAE;CACpF,MAAM,SAAS,KAAK,UAAU,CAAC;CAC/B,MAAM,OAA4B,CAAC;CACnC,MAAM,SAAuD,CAAC;CAC9D,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,GAA4B;EAC1D,MAAM,IAAI,GAAG,GAAG,GAAG;EACnB,IAAI,KAAK,OAAO,KAAA,KAAa,MAAM,UAAU,MAAM,SAAS;EAC5D,IAAI,MAAM,QACJ;OAAA,MAAM,IAAI,MAAM,KAAK,MAAM,KAAK,KAAK,GAAG,eAAe;EAAA,OACtD,IAAI,MAAM,UAAU;GACzB,IAAI,UAAU;GACd,IAAI,UAAU;GACd,OAAO,SAAS,GAAG,MAAM;IACvB,MAAM,KAAK,GAAG,EAAE,GAAG;IACnB,MAAM,OAAO,IAAI,MAAM;IACvB,MAAM,UAAU,IAAI,QAAQ;IAC5B,MAAM,OAAO,aAAa,GAAG,IAAI,GAAG,KAAK,QAAQ,KAAK;IACtD,IAAI,kBAAkB,IAAI,KAAK,IAAI,GAAG;KACpC,KAAK,KAAK,UAAU,IAAI,CAAC;KAEzB,IAAI,WAAW,CAAC,SAAS;MACvB,UAAU;MACV,KAAK,KAAK,GAAG,mBAAmB;KAClC;KACA;IACF;IAEA,IAAI,MAAM,SAAS;IACnB,IAAI,QAAQ,SAAS;IACrB,UAAU;IACV,KAAK,KAAK,IAAI,mBAAmB;GACnC,CAAC;EACH,OAAO,IAAI,MAAM,YAAY,IAAI,KAAK,GAAG,eAAe;OACnD,IAAI,MAAM,QAAQ;GACrB,MAAM,OAAO,WAAW,KAAK,IAAI;GACjC,IAAI,MAAM,OAAO,OAAO;QACnB,KAAK,KAAK,GAAG,WAAW;EAC/B,OAAO,IAAI,MAAM,WAAW,OAAO,UAAU,cAAc,KAAK,SAAU,QAAQ,GAAG,GAAG;OACnF,KAAK,KAAK,GAAG,eAAe;CACnC;CACA,MAAM,QAA0B;EAAE,MAAM,KAAK;EAAO;EAAM,MAAM;EAAS,QAAQ;CAAK;CACtF,MAAM,OAAO,IAAI,YAAY,IAAI,IAAI;CACrC,MAAM,aAAa;EACjB,IAAI,CAAC,SAAS,MAAM,KAAK,KAAK,GAAG,SAAS,OAAO;EACjD,KAAK,GAAG,SAAS;GAAE,GAAG,KAAK,GAAG;IAAS,OAAO;EAAO;CACvD;CACA,IAAI,CAAC,MAAM;EACT,IAAI,YAAY,IAAI,MAAM,KAAK;EAC/B,OAAO,KAAK;CACd;CACA,IAAI,UAAU,MAAM,KAAK,GAAG,OAAO,KAAK;CAExC,IAAI,MAAM,SAAS;CACnB,IAAI,QAAQ,SAAS;CACrB,KAAK,KAAK,IAAI,gBAAgB;AAChC;;;;;;AAOA,SAAS,kBAAkB,KAA4C,MAAY,IAAY,KAAU;CACvG,MAAM,KAAK,IAAI,MAAM,CAAC;CACtB,MAAM,UAAU,GAAG,OAAO,YAAY;CAEtC,MAAM,UAAU,GAAG,QAAQ,MAAM,iBAAiB,SAAS,CAAC,CAAC;CAC7D,MAAM,OAAO,QAAQ,SAAS,QAAQ;CAEtC,IAAI,OAAO,GAAG,QAAQ,KAAK,KAAK,QAAQ,CAAC,GAAG,SAAS,GAAG,GAAG,OAAO,IAAI,mBAAmB;MACpF,IAAI,GAAG,KAAK,MAAM,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAK,GAAG,GAAG,MAAM,iBAAiB;CAC/F,IAAI,QAAQ,WAAW,GAAG,KAAK,OAAO,iBAAiB,QAAQ;MAC1D,IAAI,QAAQ,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ;EAAE,aAAa;EAAM,mBAAmB;CAAQ,CAAC;CACzG,IAAI,QAAQ,QAAQ,KAAK,OAAO,UAAU;CAC1C,IAAI,IAAI,WAAW,KAAA,GAAW;EAC5B,IAAI,WAAW,IAAI,MAAM,GAAG,KAAK,OAAO,SAAS,IAAI;OAChD,KAAK,KAAK,GAAG,GAAG,UAAU,kBAAkB;CACnD;CACA,KAAK,MAAM,KAAK,OAAO,KAAK,GAAG,GAAG,IAAI,MAAM,QAAQ,MAAM,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,KAAK,iBAAiB;AAC/G;AAEA,SAAS,cAAc,GAAgB,MAAY,IAAY,KAAU;CACvE,IAAI,EAAE,SAAS,YAAY,EAAE,SAAS,UAAU,OAAO,KAAK,KAAK,IAAI,iBAAiB;CACtF,MAAM,IAAI,EAAE;CAEZ,MAAM,KAAK,EAAE,OAAO;CACpB,MAAM,KAAK,EAAE,OAAO;CACpB,MAAM,KAAK,EAAE,SAAS,EAAE,SAAS,WAAW,iBAAiB;CAC7D,MAAM,SAAS,KAAK,MAAM;CAC1B,MAAM,YACH,EAAE,QAAQ,KAAA,KAAc,OAAO,SAAS,EAAE,GAAG,KAAK,EAAE,OAAO,OAC3D,EAAE,QAAQ,KAAA,KAAa,QAAQ,EAAE,KAAK,GAAA,EAAa,OACnD,EAAE,SAAS,KAAA,KAAc,OAAO,SAAS,EAAE,IAAI,KAAK,EAAE,OAAO,MAC9D,KAAK,MACL,KAAK,IAAI,QAAQ,KAAK,MAAM,KAAK,CAAC,IAAI,QACtC,KAAK,MAAM,KAAK,KAAA;CAClB,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,GAAyB;EACpD,MAAM,IAAI,EAAE;EACZ,IAAI,MAAM,KAAA,GAAW;EACrB,MAAM,IAAI,GAAG,GAAG,GAAG;EACnB,IAAI,MAAM,QAAQ;GAChB,MAAM,IAAI;GACV,IAAI,EAAE,SAAS,YAAY,OAAO,MAAM,YAAY,EAAE,KAAK,MAAM,MAAM,EAAE,UAAA,IAA2B,KAAK,OAAO,OAAO;QAClH,KAAK,KAAK,GAAG,cAAc;EAClC,OAAO,IAAI,MAAM,SAAS,MAAM,SAAS,MAAM,QAAQ;GACrD,IAAI,EAAE,SAAS,UAAU,KAAK,OAAO,KAAK;QACrC,IAAI,UAAU,KAAK,OAAO,KAAK;QAC/B,KAAK,KAAK,GAAG,eAAe;EACnC,OAAO,KAAK,KAAK,GAAG,iBAAiB;CACvC;AACF;AAEA,IAAM,iCAAsC,IAAI,IAAI;CAAC;CAAM;CAAK;CAAO;CAAM;CAAM;AAAI,CAAC;AACxF,IAAM,WAAW,MAAe,MAAM,QAAQ,CAAC,KAAK,EAAE,UAAU,KAAK,EAAE,OAAO,MAAM,eAAe,IAAI,CAAC,CAAC;AACzG,IAAM,WAAW,MAAe,MAAM,KAAA,KAAc,OAAO,MAAM,YAAY,OAAO,SAAS,CAAC,KAAO,MAAM,CAAC,KAAK,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,OAAO,eAAe,IAAI,CAAC,KAAK,OAAO,MAAM,QAAQ;AACnM,IAAM,UAAU,GAAY,QAAgB,OAAO,MAAM,YAAY,EAAE,UAAU,KAAK,EAAE,UAAU;;AAGlG,SAAS,cAAc,GAAgB,MAAY,IAAY,KAAU;CACvE,MAAM,QAAQ,EAAE;CAChB,IAAI;CACJ,IAAI,MAAM,QAAQ,KAAK,GAAG;EAYxB,IAAI,EAVF,MAAM,UAAU,KAChB,MAAM,UAAA,MACN,IAAI,IAAI,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,MAAM,UAClD,MAAM,OACH,MACC,OAAO,EAAE,UAAU,YAAY,EAAE,UAAU,EAAE,MAAM,KAAK,KAAK,OAAO,EAAE,OAAA,EAA4B,KAAK,OAAO,EAAE,OAAA,EAAsB,MACrI,EAAE,UAAU,KAAA,KAAa,OAAO,EAAE,OAAA,EAAsB,OAAO,EAAE,QAAQ,KAAA,KAAa,OAAO,EAAE,KAAA,EAAkB,OACjH,EAAE,OAAO,KAAA,KAAc,OAAO,EAAE,OAAO,YAAY,OAAO,SAAS,EAAE,EAAE,MACxE,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM;GAAC;GAAS;GAAS;GAAS;GAAM;EAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CACpF,IACO,OAAO,KAAK,KAAK,IAAI,aAAa;EAC3C,WAAW,MAAM,KAAK,OAAO,EAAE,GAAG,EAAE,EAAE;CACxC,OAAO;EACL,IAAI,EAAE,MAAM,MAAM,MAAM,QAAS,MAAM,SAAS,KAAA,KAAa,EAAE,MAAM,OAAO,IAAK,OAAO,KAAK,KAAK,IAAI,aAAa;EACnH,WAAW;GAAE,KAAK,MAAM;GAAK,KAAK,MAAM;GAAK,GAAI,MAAM,SAAS,KAAA,IAAY,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;EAAG;CACzG;CACA,MAAM,MAAmB,EAAE,OAAO,SAAS;CAC3C,MAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,IAAI,IAAI,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,IAAI,KAAA;CAC3E,MAAM,IAAI,EAAE;CACZ,MAAM,WACJ,MAAM,KAAA,KACN,OAAO,MAAM,aACZ,OAAO,MAAM,YAAY,MAAM,QAAQ,QAAQ,EAAE,GAAG,KAAK,QAAQ,EAAE,GAAG,MAAM,EAAE,UAAU,KAAA,KAAa,QAAQ,EAAE,KAAK,OAAO,EAAE,SAAS,KAAA,KAAa,EAAE,OAAO,MAC3J,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM;EAAC;EAAO;EAAO;EAAS;CAAM,CAAC,CAAC,SAAS,CAAC,CAAC;CAC3E,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,GAA4B;EACvD,MAAM,IAAI,EAAE;EACZ,IAAI,MAAM,KAAA,KAAa,MAAM,SAAS;EACtC,MAAM,IAAI,GAAG,GAAG,GAAG;EACnB,IAAI,MAAM,SAAS;GACjB,IAAI,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAI,CAAuC;QACnE,KAAK,KAAK,GAAG,aAAa;EACjC,OAAO,IAAI,MAAM,eAAe;GAC9B,IAAI,eAAe,IAAI,CAAW,GAAG,IAAI,cAAc,EAAE;QACpD,KAAK,KAAK,GAAG,aAAa;EACjC,OAAO,IAAI,MAAM,eAAe;GAC9B,IAAI,UAAU,IAAI,cAAc,OAAO,MAAM,YAAY,IAAI,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC;QACpF,KAAK,KAAK,GAAG,aAAa;EACjC,OAAO,IAAI,MAAM,WAAW;GAC1B,MAAM,UAAU,EAAE;GAWlB,IATE,QAAQ,UAAA,MACR,QAAQ,OAAO,MAAM;IACnB,IAAI,EAAE,UAAU,KAAA,KAAa,CAAC,OAAO,EAAE,OAAA,EAAsB,GAAG,OAAO;IACvE,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,MAAM,MAAM,WAAW,MAAM,OAAO,GAAG,OAAO;IACvE,MAAM,KAAK,EAAE;IACb,IAAI,OAAO,OAAO,UAAU,OAAO,OAAO,SAAS,EAAE;IACrD,IAAI,OAAO,OAAO,UAAU,OAAO,OAAO,IAAA,EAAyB,KAAK,CAAC,CAAC,QAAQ,IAAI,EAAE;IACxF,OAAO,MAAM,EAAE,KAAK,OAAO,GAAG,UAAU,YAAY,eAAe,IAAI,GAAG,IAAI,KAAK,OAAO,KAAK,EAAE,CAAC,CAAC,WAAW,KAAK,YAAY,CAAC,CAAC,EAAE;GACrI,CAAC,GACK,IAAI,UAAU,QAAQ,KAAK,OAAO;IAAE,GAAI,EAAE,UAAU,KAAA,IAAY,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;IAAI,OAAO,OAAO,EAAE,UAAU,WAAW,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE;GAAM,EAAE;QAC7J,KAAK,KAAK,GAAG,aAAa;EACjC,OAAO,KAAK,KAAK,GAAG,iBAAiB;CACvC;CACA,KAAK,OAAO,QAAQ;AACtB;;AAGA,IAAM,aAAqE;CAAE,IAAI;CAAM,OAAO;CAAO,IAAI;CAAM,OAAO;CAAS,OAAO;CAAS,UAAU;CAAY,IAAI;CAAM,IAAI;AAAK;AACxL,IAAM,4BAAY,IAAI,IAAsB;CAAC;CAAS;CAAY;AAAO,CAAC;AAE1E,SAAS,kBAAkB,GAAc,IAAY,UAAyB,KAAU,WAAwC;CAC9H,MAAM,QAAsB,CAAC;CAC7B,KAAK,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,GAAI,EAAE,QAAQ,CAAC,CAAE,CAAC,CAAC,QAAQ,GAAG;EACrD,MAAM,OAAO,cAAc,GAAG,MAAM,GAAG,UAAU,SAAS;EAC1D,IAAI,CAAC,MAAM,OAAO,KAAK,KAAK,KAAK,IAAI,WAAW;EAChD,MAAM,KAAK,IAAI;CACjB;CACA,IAAI,EAAE,UAAU,KAAA,KAAa,EAAE,UAAU,SAAS,EAAE,UAAU,OAAO,OAAO,KAAK,KAAK,KAAK,IAAI,WAAW;CAC1G,OAAO;EAAE,OAAO,EAAE,SAAS;EAAO;CAAM;AAC1C;;AAGA,SAAS,cAAc,GAAc,MAAe,UAAyB,WAAuC;CAGlH,MAAM,UAAU,aAAa,EAAE,UAAU;CACzC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,KAAA,KAAc,CAAC,WAAW,CAAC,SAAS,MAAM,MAAM,EAAE,SAAS,EAAE,KAAK,GAAI,OAAO;CACzG,MAAM,UAAU,OAAO;EAAC;EAAS;EAAU;EAAY;EAAM;EAAS;EAAQ;CAAO,IAAI;EAAC;EAAS;EAAU;EAAY;EAAM;CAAO;CACtI,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,SAAS,CAAC,KAAM,EAAqB,OAAO,KAAA,CAAS,GAAG,OAAO;CAEvG,IADc;EAAC,EAAE,OAAO,KAAA;EAAW,EAAE,WAAW,KAAA;EAAW,EAAE,aAAa,KAAA;CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,WACvF,GAAG,OAAO;CACxB,IAAI,EAAE,aAAa,KAAA,GAAW,OAAO,EAAE,aAAa,OAAO;EAAE,OAAO,EAAE;EAAO,IAAI;CAAW,IAAI;CAChG,MAAM,SAAS,EAAE,OAAO,KAAA,IAAY,EAAE,QAAQ,EAAE;CAChD,MAAM,KAAuB,EAAE,OAAO,KAAA,IAAY,WAAW,EAAE,MAAM,MAAM,QAAQ,MAAM,IAAI,OAAO;CACpG,IAAI,CAAC,IAAI,OAAO;CAChB,IAAI,UAAU,IAAI,EAAE,GAAG,OAAO,EAAE,UAAU,KAAA,IAAY;EAAE,OAAO,EAAE;EAAO;CAAG,IAAI;CAC/E,MAAM,UAAU,UAAU,KAAA,IAAY,SAAS,MAAM,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE;CAChF,IAAI,OAAO,QAAQ,OAAO,MAAM,OAAO,OAAO,WAAW,YAAY,OAAO,SAAS,MAAM,IAAI;EAAE,OAAO,EAAE;EAAO;EAAI,OAAO,OAAO,MAAM;CAAE,IAAI;CAC/I,MAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;CACrD,MAAM,OAAiB,CAAC;CACxB,KAAK,MAAM,KAAK,MAAM;EACpB,IAAI,CAAC;GAAC;GAAU;GAAU;EAAS,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,OAAO;EAChE,MAAM,IAAI,OAAO,CAAC;EAClB,IAAI,gBAAgB,SAAS,CAAC,MAAM,GAAG,OAAO;EAC9C,KAAK,KAAK,CAAC;CACb;CACA,IAAI,OAAO,QAAQ,OAAO,SAAS,OAAO;EAAE,OAAO,EAAE;EAAO;EAAI,OAAO;CAAK;CAC5E,OAAO,MAAM,QAAQ,MAAM,IAAK,KAAK,SAAS;EAAE,OAAO,EAAE;EAAO,IAAI,OAAO,OAAO,OAAO;EAAS,OAAO;CAAK,IAAI,OAAQ;EAAE,OAAO,EAAE;EAAO;EAAI,OAAO,KAAK;CAAG;AACjK;AAGA,IAAM,YAA8B,MAAU,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,KAAA;AAC1E,SAAS,OAAO,GAAc;CAC5B,MAAM,MAAW;EAAE,KAAK,EAAE;EAAK,OAAO,EAAE;EAAO,MAAM,EAAE;CAAK;CAE5D,KAAK,MAAM,KAAK;EADc;EAAY;EAAY;EAAgB;EAAU;EAAY;EAAY;EAAkB;EAAY;EAAa;CACnI,GAAM,IAAI,EAAE,OAAO,KAAA,GAAW,IAAI,KAAK,EAAE;CACzD,OAAO;AACT;AAEA,SAAS,UAAU,GAA4B;CAC7C,MAAM,MAAM,OAAO,CAAC;CACpB,IAAI,EAAE,WAAW,KAAA,GAAW,IAAI,SAAS,EAAE;CAC3C,IAAI,EAAE,aAAa,KAAA,GAAW,IAAI,WAAW,EAAE;CAC/C,IAAI,EAAE,eAAe,KAAA,GAAW,IAAI,aAAa,EAAE;CACnD,IAAI,EAAE,eAAe,KAAA,GAAW,IAAI,aAAa,EAAE;CACnD,MAAM,SAAsB,EAAE,GAAG,EAAE,OAAO;CAC1C,IAAI,EAAE,gBAAgB,KAAA,GAAW,OAAO,cAAc,EAAE;CACxD,IAAI,EAAE,SAAS,YAAY,EAAE,SAAS,IAAI,UAAU,EAAE;CACtD,KAAK,EAAE,SAAS,iBAAiB,EAAE,SAAS,WAAW,EAAE,SAAS,OAAO,UAAU,EAAE;CACrF,IAAI,EAAE,SAAS,UAAU,IAAI,UAAU,EAAE,YAAY,CAAC,EAAA,CAAG,IAAI,SAAS;CACtE,IAAI,EAAE,cAAc,OAAO,eAAe,EAAE,aAAa,IAAI,SAAS;CACtE,IAAI,EAAE,OAAO;EACX,MAAM,EAAE,UAAU,UAAU,GAAG,SAAS;EACxC,IAAI,SAAS;GACX,GAAG;GACH,OAAO,EAAE,YAAY;IAAE,SAAS,EAAE,YAAY,CAAC,EAAA,CAAG,IAAI,SAAS;IAAG,GAAI,aAAa,KAAA,IAAY,EAAE,SAAS,IAAI,CAAC;IAAI,GAAI,aAAa,KAAA,IAAY,EAAE,SAAS,IAAI,CAAC;GAAG,EAAE;EACvK;CACF,OAAO,IAAI,SAAS,MAAM,GAAG,IAAI,SAAS;CAC1C,MAAM,KAAK,SAAS,EAAE,EAAE;CACxB,IAAI,IAAI,IAAI,KAAK;CACjB,OAAO;AACT;AAEA,SAAS,SAAS,GAA2B;CAC3C,MAAM,MAAM,OAAO,CAAC;CACpB,IAAI,EAAE,WAAW,KAAA,GAAW,IAAI,SAAS,EAAE;CAC3C,IAAI,EAAE,aAAa,KAAA,GAAW,IAAI,WAAW,EAAE;CAC/C,IAAI,EAAE,eAAe,KAAA,GAAW,IAAI,aAAa,EAAE;CACnD,IAAI,EAAE,gBAAgB,KAAA,GAAW,IAAI,cAAc,EAAE;CACrD,MAAM,SAAc,EAAE,GAAG,EAAE,OAAO;CAClC,IAAI,EAAE,SAAS,OAAO,UAAU,EAAE;CAClC,IAAI,EAAE,UAAU,OAAO,SAAS,EAAE,SAAS,IAAI,YAAY;CAC3D,IAAI,EAAE,WAAW,OAAO,YAAY,cAAc,EAAE,SAAS;CAC7D,IAAI,EAAE,cAAc,OAAO,eAAe,EAAE,aAAa,IAAI,YAAY;CACzE,IAAI,SAAS,MAAM,GAAG,IAAI,SAAS;CACnC,MAAM,KAAK,SAAS,EAAE,EAAE;CACxB,IAAI,IAAI,IAAI,KAAK;CACjB,OAAO;AACT;AAEA,SAAS,aAAa,GAA4B;CAChD,MAAM,MAAM,OAAO,CAAC;CACpB,IAAI,EAAE,WAAW,KAAA,GAAW,IAAI,SAAS,EAAE;CAC3C,IAAI,EAAE,aAAa,KAAA,GAAW,IAAI,WAAW,EAAE;CAC/C,IAAI,EAAE,eAAe,KAAA,GAAW,IAAI,aAAa,EAAE;CACnD,IAAI,EAAE,gBAAgB,KAAA,GAAW,IAAI,cAAc,EAAE;CACrD,IAAI,EAAE,SAAS,IAAI,UAAU,EAAE;CAC/B,IAAI,EAAE,UAAU,IAAI,SAAS,EAAE,SAAS,IAAI,YAAY;CACxD,MAAM,SAAc,EAAE,GAAG,EAAE,OAAO;CAClC,IAAI,EAAE,WAAW,OAAO,YAAY,cAAc,EAAE,SAAS;CAC7D,IAAI,EAAE,cAAc,OAAO,eAAe,EAAE,aAAa,IAAI,YAAY;CACzE,IAAI,SAAS,MAAM,GAAG,IAAI,SAAS;CACnC,MAAM,KAAK,SAAS,EAAE,EAAE;CACxB,IAAI,IAAI,IAAI,KAAK;CACjB,OAAO;AACT;;AAGA,IAAM,iBAAiB,UACrB,MAAM,KAAK,OAAO;CAAE,MAAM,EAAE;CAAM,OAAO,EAAE;CAAO,QAAQ,EAAE,SAAS,IAAI,YAAY;CAAG,GAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAAI,GAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAG,EAAE;AAK9K,SAAgB,eAAe,IAAgB,QAA+E;CAC5H,MAAM,MAAW;EACf,MAAM;EAAQ,OAAO,CAAC;EAAG,SAAS,CAAC;EAAG,sBAAM,IAAI,IAAI;EAAG,6BAAa,IAAI,IAAI;EAAG,sBAAM,IAAI,IAAI;EAAG,0BAAU,IAAI,IAAI;EAAG,+BAAe,IAAI,QAAQ;EAChJ,2BAAW,IAAI,IAAI;EAAG,YAAY;EAAO,0BAAU,IAAI,IAAI;EAAG,6BAAa,IAAI,IAAI;EAAG,0BAAU,IAAI,IAAI;EAAG,cAAc,CAAC;EAAG,6BAAa,IAAI,IAAI;CACpJ;CACA,MAAM,QAAQ,WAAW;CACzB,MAAM,OAAO,MAAM,GAAG,IAAI;CAC1B,MAAM,WAAW,GAAG,aAAa,KAAA,IAAY,iBAAiB,GAAG,YAAY,KAAA;CAC7E,MAAM,YAAwB,CAAC;CAE/B,KAAK,MAAM,KAAK,OAAO,KAAK,EAAE,GAA2B;EACvD,IAAI,GAAG,OAAO,KAAA,GAAW;EACzB,MAAM,IAAI,IAAI;EACd,QAAQ,GAAR;GACE,KAAK;IACH,IAAI,MAAM,IAAI,MAAM,GAAG,MAAM,KAAK,KAAK,GAAG,WAAW;IACrD;GACF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,UACH;GACF,KAAK;IACH,IAAI,SAAS,GAAG,SAAS,SAAS,IAAI,KAAK,GAAG,GAAG,SAAS,WAAW,gBAAgB,oBAAoB;SACpG,IAAI,CAAC,SAAS,GAAG,SAAS,SAAS,IAAI,KAAK,GAAG,GAAG,SAAS,WAAW,gBAAgB,GAAG,SAAS,SAAS,cAAc,GAAG,SAAS,UAAU,wBAAwB,aAAa;IACzL;GACF,KAAK;IAEH,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG,YAAY;IAC5D;GACF,KAAK;IAEH,IAAI,CAAC,OAAO,IAAI,KAAK,GAAG,kBAAkB;IAC1C;GACF,KAAK;IACH,IAAI,KAAK,GAAG,UAAU;IACtB;GACF,KAAK;IAEH,IAAI,CAAC,SAAS,CAAC,YAAY,WAAW,QAAQ,MAAM,GAAG,UAAU,IAAI,KAAK,GAAG,UAAU;IACvF;GACF,KAAK;IACH,IAAI,KAAK,GAAG,iBAAiB;IAC7B;GACF,KAAK;IACH,IAAI,KAAK,GAAG,iBAAiB;IAC7B;GACF,SACE,KAAK,KAAK,GAAG,iBAAiB;EAClC;CACF;CAEA,IAAI,OAAO;EACT,YAAY,IAAI,GAAG;EACnB,YAAY,IAAI,GAAG;CACrB,OAAO,aAAa,IAAI,KAAK,SAAS;CAEtC,MAAM,QAAQ,GAAG,OAAO,KAAK,GAAG,MAAM,aAAa,GAAG,WAAW,KAAK,GAAG,KAAK,GAAG,QAAQ,IAAI,CAAC;CAC9F,IAAI,OAAO;EACT,MAAM,YAA2B;GAAE,MAAM,GAAG;GAAO;GAAM,OAAO,MAAM,IAAI,QAAQ;EAAE;EACpF,IAAI,GAAG,gBAAgB,KAAA,GAAW,UAAU,cAAc,GAAG;EAC7D,IAAI,UAAU,UAAU,WAAW;EACnC,MAAM,OAAO,GAAG,SAAS,KAAA,IAAY,KAAA,IAAY,WAAW,GAAG,IAAI;EACnE,IAAI,MAAM,UAAU,OAAO;EAC3B,IAAI,GAAG,YAAY,KAAA,GAAW;GAC5B,MAAM,UAAU,uBAAuB,GAAG,SAAS,IAAI,IAAI,UAAU,MAAM,KAAK,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,QAAQ,YAAY,GAAG;GACzH,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,QAAQ,UAAU,UAAU;EACvD;EACA,IAAI,IAAI,aAAa,QAAQ,UAAU,OAAO,IAAI,aAAa,KAAK,OAAO,EAAE,GAAG,EAAE,EAAE;EACpF,OAAO;GAAE,QAAQ;GAAW,aAAa,CAAC;GAAG,OAAO,IAAI;GAAO,SAAS,IAAI;EAAQ;CACtF;CACA,MAAM,QAA0B;EAAE,MAAM,GAAG;EAAO;EAAM,QAAQ,MAAM,IAAI,SAAS;CAAE;CACrF,IAAI,GAAG,gBAAgB,KAAA,GAAW,MAAM,cAAc,GAAG;CAEzD,MAAM,OAAO;CACb,IAAI,UAAU,QAAQ,MAAM,YAAY;CACxC,OAAO;EAAE,QAAQ;EAAO,aAAa,CAAC,GAAG,IAAI,YAAY,OAAO,CAAC;EAAG,OAAO,IAAI;EAAO,SAAS,IAAI;CAAQ;AAC7G;;AAGA,SAAS,aAAa,IAAgB,KAAU,KAAiB;CAE/D,MAAM,wBAAQ,IAAI,IAAY;CAC9B,IAAI;CACJ,IAAI,UAAU;CACd,CAAC,GAAG,UAAU,CAAC,EAAA,CAAG,SAAS,GAAe,MAAM;EAC9C,MAAM,IAAI,WAAW;EACrB,MAAM,SAAS,EAAE,MAAM,MAAM,GAAA,EAAe;EAC5C,MAAM,SAAS,OAAO,KAAK,CAAC,CAAC,YAAY;EACzC,MAAM,QAAQ,QAAsB;GAClC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,YAAY,IAAI,EAAE,IAAI,GAAG,IAAI,YAAY,IAAI,EAAE,MAAM,GAAG;GAC1F,cAAc;GACd,KAAK,KAAK,GAAG,GAAG;EAClB;EACA,IAAI,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,MAAM,GAAG,OAAO,KAAK,sBAAsB;EACjF,IAAI,IAAI,UAAA,GAAmB,OAAO,KAAK,UAAU;EACjD,MAAM,IAAI,MAAM;EAChB,MAAM,MAAgB;GAAE,IAAI,EAAE;GAAM,MAAM;GAAQ,MAAM;EAAM;EAC9D,IAAI,EAAE,MAAM,SAAA,IAAuB,KAAK,KAAK,GAAG,EAAE,SAAS,eAAe;EAC1E,IAAI,EAAE,SAAS,KAAA,GAAW;GACxB,MAAM,OAAO,WAAW,EAAE,IAAI;GAC9B,IAAI,MAAM,IAAI,OAAO;QAChB,KAAK,KAAK,GAAG,EAAE,QAAQ,YAAY;EAC1C;EACA,IAAI,MAAM,IAAI,EAAE,YAAY,OAAO,EAAE,YAAY,KAAA,GAAW,KAAK,KAAK,GAAG,EAAE,WAAW,eAAe;EACrG,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,GAAG,IAAI,CAAC;GAAC;GAAQ;GAAS;GAAQ;EAAS,CAAC,CAAC,SAAS,CAAC,KAAM,EAAqB,OAAO,KAAA,GAAW,KAAK,KAAK,GAAG,EAAE,GAAG,KAAK,iBAAiB;EACzK,IAAI,KAAK,IAAI,EAAE,IAAI;EACnB,IAAI,KAAK,GAAG;EAEZ,IAAI,aAAa,CAAC,SAAS;GACzB,UAAU;GACV,KAAK,KAAK,WAAW,SAAS;EAChC;CACF,CAAC;CACD,CAAC,GAAG,aAAa,CAAC,EAAA,CAAG,SAAS,IAAgB,MAAM;EAClD,MAAM,IAAI,cAAc;EACxB,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,YAAY,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,UAAA,IAAyB,OAAO,KAAK,KAAK,GAAG,oBAAoB;EAE3J,MAAM,wBAAQ,IAAI,IAAgC;EAClD,KAAK,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE,aAAa,GAAG,MAAM,MAAM,IAAI,EAAE,QAAQ,MAAM,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC;EACvG,MAAM,OAAO,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG;EACnE,MAAM,MAAM,SAAS,KAAA,KAAa,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAA;EAC9D,MAAM,MAAgB;GAAE,IAAI,GAAG;GAAM,MAAM,GAAG,MAAM,MAAM,GAAA,EAAoB;GAAG,MAAM;EAAQ;EAC/F,IAAI,GAAG,MAAM,SAAA,IAA4B,KAAK,KAAK,GAAG,EAAE,SAAS,qBAAqB;EACtF,IAAI,KAAK,IAAI,MAAM;EACnB,KAAK,MAAM,KAAK,OAAO,KAAK,EAAE,GAA2B;GACvD,MAAM,IAAI,GAAG;GACb,IAAI,MAAM,KAAA,KAAa,MAAM,UAAU,MAAM,SAAS;GACtD,IAAI,MAAM,eAAe;IACvB,IAAK,EAAa,UAAA,KAAoC,IAAI,cAAc;SACnE,KAAK,KAAK,GAAG,EAAE,GAAG,KAAK,YAAY;GAC1C,OAAO,IAAI,MAAM,eAAe,MAAM,iBAAiB,MAAM,aAAa,MAAM,UAAU,IAAwB,KAAK;QAClH,KAAK,KAAK,GAAG,EAAE,GAAG,KAAK,iBAAiB;EAC/C;EACA,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG;EACzB,IAAI,KAAK,GAAG;CACd,CAAC;AACH;;;;;;;AAQA,SAAS,YAAY,IAAgB,KAAU;CAC7C,MAAM,SAAS,GAAG,UAAU,CAAC;CAC7B,MAAM,OAAqD,CAAC;CAC5D,MAAM,0BAAU,IAAI,IAA0B;CAC9C,MAAM,yBAAS,IAAI,IAAY;CAC/B,OAAO,SAAS,GAAG,MAAM;EACvB,MAAM,IAAI,WAAW;EACrB,MAAM,QAAQ,QAAsB;GAClC,IAAI,CAAC,KAAK,MAAM,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,IAAI,GAAG,QAAQ,IAAI,EAAE,MAAM,GAAG;GAC3F,KAAK,KAAK,GAAG,GAAG;EAClB;EACA,MAAM,QAAQ,EAAE,MAAM,MAAM,GAAA,EAAe,CAAC,CAAC,KAAK;EAClD,MAAM,SAAS,MAAM,YAAY;EACjC,IAAI,KAAK,MAAM,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,KAAK,OAAO,IAAI,MAAM,GAAG,OAAO,KAAK,sBAAsB;EACnG,IAAI,KAAK,UAAA,KAA0B,EAAE,KAAK,SAAS,KAAK,EAAE,KAAK,SAAA,IAA0B,OAAO,KAAK,gBAAgB;EAErH,IAAI,CAAC,OAAO,OAAO,KAAK,aAAa;EACrC,OAAO,IAAI,MAAM;EACjB,MAAM,MAAe;GAAE,IAAI,EAAE;GAAM;EAAM;EACzC,IAAI,UAAU,EAAE,MAAM,KAAK,GAAG,KAAK,KAAK,GAAG,EAAE,SAAS,eAAe;OAChE,IAAI,UAAU,EAAE,OAAO,KAAK,KAAK,GAAG,EAAE,SAAS,aAAa;EACjE,IAAI,EAAE,SAAS,KAAA,GAAW;GACxB,MAAM,OAAO,WAAW,EAAE,IAAI;GAC9B,IAAI,MAAM,IAAI,OAAO;QAChB,KAAK,KAAK,GAAG,EAAE,QAAQ,YAAY;EAC1C;EACA,IAAI,MAAM,IAAI,EAAE,YAAY,OAAO,EAAE,YAAY,KAAA,GAAW,KAAK,KAAK,GAAG,EAAE,WAAW,eAAe;EACrG,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,GAAG,IAAI,CAAC;GAAC;GAAQ;GAAS;GAAQ;EAAS,CAAC,CAAC,SAAS,CAAC,KAAM,EAAqB,OAAO,KAAA,GAAW,KAAK,KAAK,GAAG,EAAE,GAAG,KAAK,iBAAiB;EACzK,KAAK,KAAK;GAAE;GAAG;GAAG;EAAI,CAAC;CACzB,CAAC;CAED,MAAM,UAAU,SAA6B,SAAS,KAAA,KAAa,KAAK,MAAM,MAAM,EAAE,EAAE,SAAS,IAAI;CACrG,MAAM,aAAa,OAAO,MAAM,MAAM,EAAE,OAAO,KAAK,OAAO,GAAA,EAAK;CAChE,MAAM,WAAW,OAAO,SAAS,IAAI,YAAY,KAAK,EAAE,EAAE,EAAE;CAC5D,MAAM,wBAAQ,IAAI,IAAwD;CAC1E,KAAK,MAAM,KAAK,GAAG,QAAQ;EACzB,MAAM,OAAO,EAAE,SAAS;EACxB,IAAI,OAAO,IAAI,GAAG,MAAM,IAAI,GAAG,EAAE,KAAK,KAAK,CAAC;OACvC,IAAI,EAAE,UAAU,KAAA,KAAa,SAAS,KAAA,GAAW,MAAM,IAAI,GAAG;GAAE,KAAK;GAAU,MAAM,QAAQ,IAAI,IAAK,KAAK;EAAkB,CAAC;CACrI;CACA,IAAI,CAAC,KAAK,QAAQ;EAChB,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,IAAI,EAAE,UAAU,KAAA,GAAW,IAAI,SAAS,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC;EAC3F;CACF;CAEA,MAAM,wBAAQ,IAAI,IAA6C;CAC/D,KAAK,MAAM,KAAK,GAAG,QAAQ;EACzB,IAAI,EAAE,aAAa,KAAA,GAAW;EAC9B,MAAM,IAAI,MAAM,IAAI,EAAE,QAAQ,qBAAK,IAAI,IAAgC;EACvE,EAAE,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC;EAC5D,MAAM,IAAI,EAAE,UAAU,CAAC;CACzB;CACA,KAAK,MAAM,KAAK,GAAG,QAAQ;EACzB,MAAM,SAAS,EAAE,aAAa,KAAA,IAAY,MAAM,IAAI,EAAE,QAAQ,IAAI,KAAA;EAClE,IAAI,CAAC,QAAQ;EACb,MAAM,OAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;EAClE,MAAM,MAAM,MAAM,IAAI,CAAC;EACvB,IAAI,KAAK,QAAQ,MAAM,MAAM,IAAI,GAAG;GAAE,KAAK;GAAM,MAAM,KAAK,QAAQ;EAAwB,CAAC;CAC/F;CAEA,MAAM,WAAqB,CAAC;CAC5B,KAAK,MAAM,KAAK,GAAG,QAAQ;EACzB,MAAM,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE;EACxB,IAAI,MAAM,KAAA,KAAa,CAAC,SAAS,SAAS,CAAC,GAAG,SAAS,KAAK,CAAC;CAC/D;CACA,MAAM,OAAO,KAAK,QAAQ,MAAM,SAAS,SAAS,EAAE,EAAE,IAAI,CAAC;CAE3D,MAAM,SAAS,KAAK,QAAQ,MAAM,CAAC,SAAS,SAAS,EAAE,EAAE,IAAI,CAAC;CAC9D,KAAK,MAAM,KAAK,MAAM,IAAI,SAAS,IAAI,EAAE,EAAE,IAAI;CAE/C,MAAM,WAAW,OAAO,WAAW,MAAM,CAAC,KAAK,MAAM,MAAM,EAAE,MAAM,CAAC,CAAC;CACrE,IAAI,YAAY,KAAK,KAAK,MAAM,MAAM,EAAE,IAAI,QAAQ,GAAG;EACrD,MAAM,IAAI,OAAO;EACjB,KAAK,KAAK,WAAW,QAAQ,IAAI,EAAE,IAAI,KAAK,iBAAiB;CAC/D;CAEA,MAAM,UAAU,OAAO,SAAS,KAAK,KAAK,MAAM,GAAG,MAAM,EAAE,EAAE,SAAS,SAAS,EAAE;CACjF,KAAK,SAAS,GAAG,MAAM;EACrB,IAAI,SAAS,EAAE,IAAI,QAAQ,KAAK,IAAA,IAA0B,CAAC;CAC7D,CAAC;CACD,IAAI,eAAe,OAAO,KAAK,MAAM,EAAE,GAAG;CAC1C,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO;EAC1B,MAAM,IAAI,KAAK,MAAM,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG;EAC7C,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG;GAAE,KAAK,EAAE;GAAK,MAAM,EAAE;EAAK,CAAC;OAClD,IAAI,EAAE,MAAM,IAAI,SAAS,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC;CACvD;AACF;;;;;;AAOA,SAAS,YAAY,IAAgB,KAAU;CAC7C,MAAM,OAAO,GAAG,aAAa,CAAC;CAC9B,MAAM,QAAQ,IAAI,IAAI,KAAK,KAAK,MAAM,EAAE,IAAI,CAAC;CAC7C,MAAM,YAAsB,CAAC;CAC7B,MAAM,aAAuB,CAAC;CAC9B,MAAM,SAAS,QAAuB,OAAe;EACnD,KAAK,MAAM,KAAK,QAAQ;GACtB,IAAI,EAAE,aAAa,KAAA,KAAa,CAAC,UAAU,SAAS,EAAE,QAAQ,GAAG;IAC/D,UAAU,KAAK,EAAE,QAAQ;IACzB,IAAI,CAAC,MAAM,IAAI,EAAE,QAAQ,GAAG,WAAW,KAAK,EAAE,QAAQ;GACxD;GACA,IAAI,MAAA,IAAuB;GAC3B,MAAM,OAAO,YAAY,CAAC;GAC1B,IAAI,MAAM,MAAM,MAAM,KAAK,CAAC;EAC9B;CACF;CACA,MAAM,GAAG,QAAQ,CAAC;CAElB,MAAM,UAAwB,WAAW,KAAK,UAAU;EAAE;EAAM,OAAO;CAAK,EAAE;CAC9E,MAAM,eAAe,KAAK,QAAQ,MAAM,UAAU,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;CACpE,QAAQ,SAAS,GAAG,MAAM;EACxB,IAAI,SAAS,IAAI,EAAE,MAAM,CAAC;EAC1B,IAAI,UAAU,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;EACzC,IAAI,KAAK,cAAc,eAAe,KAAK,oBAAoB;CACjE,CAAC;CACD,IAAI,CAAC,KAAK,UAAU,CAAC,QAAQ,QAAQ;CAErC,IAAI,aADS,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,QAAQ,MAAM,UAAU,SAAS,EAAE,IAAI,CACzD,CAAA,CAAK,MAAM,GAAG,MAAM,EAAE,SAAS,UAAU,EAAE;CAC5D,IAAI,MAAM;CACV,KAAK,SAAS,GAAG,MAAM;EACrB,IAAI,SAAS,IAAI,EAAE,MAAM,CAAC;EAC1B,IAAI,UAAU,IAAI,EAAE,MAAM,CAAC;EAC3B,IAAI,CAAC,UAAU,SAAS,EAAE,IAAI,GAAG;GAC/B,MAAM;GACN,OAAO,KAAK,KAAK,cAAc,KAAK,kBAAkB;EACxD;EAEA,IAAI,KAAK;GACP,MAAM;GACN,KAAK,KAAK,cAAc,kBAAkB;EAC5C;EACA,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC,GAA2B;GAEtD,IADU,EAAE,OACF,KAAA,KAAa,MAAM,UAAU,MAAM,eAAe,MAAM,aAAa,MAAM,iBAAiB,MAAM,UAAU;GACtH,IAAI,MAAM,SACJ;QAAA,EAAE,MAAM,SAAA,IAA+B,KAAK,KAAK,cAAc,EAAE,SAAS,qBAAqB;GAAA,OAC9F,IAAI,MAAM,eACX;QAAA,CAAC,mBAAmB,EAAE,WAAW,GAAG,KAAK,KAAK,cAAc,EAAE,eAAe,YAAY;GAAA,OACxF,KAAK,KAAK,cAAc,EAAE,GAAG,KAAK,iBAAiB;EAC5D;CACF,CAAC;AACH;AA2DA,SAAS,UAAU,GAAgC;CACjD,MAAM,MAAmB,EAAE,GAAI,EAAE,UAAU,CAAC,EAAG;CAC/C,MAAM,IAAc;EAAE,GAAI;EAAW,QAAQ;EAAK,IAAI,EAAE,GAAI,EAAE,MAAM,CAAC,EAAG;CAAE;CAC1E,IAAI,OAAO,IAAI,gBAAgB,UAAU;EACvC,EAAE,cAAc,IAAI;EACpB,OAAO,IAAI;CACb;CAEA,IAAI,EAAE,gBAAgB,KAAA,KAAa,OAAO,EAAE,GAAG,gBAAgB,UAAU,EAAE,cAAc,EAAE,GAAG;CAC9F,OAAO,EAAE,GAAG;CACZ,KAAK,EAAE,SAAS,iBAAiB,EAAE,SAAS,WAAW,IAAI,SAAS;EAClE,EAAE,UAAU,IAAI;EAChB,OAAO,IAAI;CACb;CACA,EAAE,SAAS,EAAE,QAAQ,IAAI,SAAS;CAElC,IAAI,EAAE,SAAS,WAAW,CAAC,IAAI,SAAS,MAAM,QAAQ,IAAI,MAAM,GAAG;EACjE,EAAE,SAAS,CAAC,GAAI,EAAE,UAAU,CAAC,GAAI,GAAI,IAAI,OAA+B,IAAI,SAAS,CAAC;EACtF,OAAO,IAAI;CACb;CACA,IAAI,IAAI,OAAO;EACb,MAAM,IAAI,IAAI;EACd,EAAE,QAAQ;GACR,GAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,IAAI,SAAS,EAAE,IAAI,CAAC;GAC3E,GAAI,EAAE,aAAa,EAAE,YAAY;IAAE,GAAG,EAAE;IAAY,QAAQ,EAAE,WAAW,OAAO,IAAI,SAAS;GAAE,EAAE,IAAI,CAAC;EACxG;EACA,OAAO,IAAI;CACb;CACA,OAAO;AACT;AAEA,SAAS,SAAS,GAAmD;CACnE,MAAM,EAAE,QAAQ,QAAQ,SAAS,GAAG,SAAS;CAC7C,MAAM,MAAmB,EAAE,GAAI,UAAU,CAAC,EAAG;CAC7C,MAAM,IAAc;EAAE,GAAI;EAAc,QAAQ;EAAK,IAAI,EAAE,GAAK,EAAE,MAA6B,CAAC,EAAG;CAAE;CACrG,MAAM,OAAQ,IAAI,WAA0C;CAC5D,IAAI,MAAM,EAAE,UAAU;CACtB,OAAO,IAAI;CACX,MAAM,OAAQ,IAAI,UAA8C;CAChE,IAAI,MAAM,EAAE,SAAS,KAAK,IAAI,QAAQ;CACtC,OAAO,IAAI;CACX,OAAO;AACT;;AAGA,IAAM,mBAAmB,SACvB,KAAK,KAAK,MAAM;CACd,IAAI,OAAO,MAAM,UAAU,OAAO;EAAE,OAAO;EAAG,OAAO;CAAE;CACvD,MAAM,MAAc;EAAE,OAAO,EAAE;EAAO,OAAO,EAAE;CAAM;CACrD,IAAI,OAAO,EAAE,SAAS,UAAU,IAAI,OAAO,aAAa,EAAE,IAAI;CAC9D,IAAI,OAAO,EAAE,gBAAgB,UAAU,IAAI,cAAc,EAAE;CAC3D,OAAO;AACT,CAAC;AAEH,SAAS,gBAAgB,GAAgB,IAAY,KAA2B;CAC9E,MAAM,QAAQ,EAAE;CAChB,MAAM,MAAmB,CAAC,MAAM,QAAQ,KAAK,IACzC,EAAE,OAAO;EAAE,KAAK,MAAM;EAAK,KAAK,MAAM;EAAK,GAAI,MAAM,SAAS,KAAA,IAAY,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;CAAG,EAAE,IACvG,MAAM,MAAM,MAAM,OAAO,EAAE,UAAU,QAAQ,IAC3C,EAAE,OAAQ,MAAkD,KAAK,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAClF,IAAI,OAAO,GAAG,GAAG,SAAS,eAAe,oEAAoE,GAC9G,EAAE,OAAQ,MAAmD,KAAK,OAAO;EAAE,OAAO,OAAO,EAAE,KAAK;EAAG,OAAO,EAAE,SAAS,OAAO,EAAE,KAAK;EAAG,IAAI,EAAE;CAAM,EAAE,EAAE;CAC5J,IAAI,EAAE,OAAO,IAAI,QAAQ,EAAE;CAC3B,IAAI,EAAE,aAAa,IAAI,cAAc,EAAE;CACvC,IAAI,EAAE,gBAAgB,KAAA,GAAW,IAAI,cAAc,MAAM,EAAE,WAAW,IAAI,KAAK,MAAM,KAAK,UAAU,EAAE,WAAW,CAAC,IAAI,EAAE;CACxH,IAAI,EAAE,SAAS,IAAI,UAAU,EAAE,QAAQ,KAAK,OAAO;EAAE,GAAI,EAAE,UAAU,KAAA,IAAY,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;EAAI,OAAO,OAAO,EAAE,UAAU,WAAW,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE;CAAM,EAAE;CAC3K,OAAO;AACT;;;;;AAMA,SAAS,qBAAqB,GAAY,QAAuE;CAC/G,IAAI,CAAC,MAAM,QAAQ,CAAC,GAAG,OAAO;CAC9B,OAAO,EAAE,KAAK,MAAM;EAClB,IAAI,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,aAAa,UAAU,OAAO;EACxD,MAAM,MAAM,OAAO,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ,EAAE;EAC7D,MAAM,EAAE,UAAU,OAAO,GAAG,SAAS;EAIrC,IAAI,KAAK,YAAY,EAAE,UAAU,OAAO;EACxC,MAAM,SAAS,KAAK,OAAO,EAAE,QAAQ;EACrC,IAAI,CAAC,QAAQ,OAAO;EACpB,OAAO;GAAE,GAAG;GAAM,OAAO;EAAO;CAClC,CAAC;AACH;;AAGA,IAAM,YAAY,MAChB,EAAE,QAAQ,CAAC,GAAI,EAAE,MAAM,iBAAiB,CAAC,GAAI,GAAI,EAAE,MAAM,YAAY,UAAU,CAAC,CAAE,IAAI,EAAE,UAAU;CAAC;CAAU;CAAS;CAAY;CAAS;AAAO,CAAC,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,SAAS;;AAGpL,SAAS,oBAAoB,MAAc,UAA8B;CACvE,MAAM,OAAO,KAAK,MAAM,GAAG;CAC3B,IAAI,OAAO,SAAS,MAAM,MAAM,EAAE,QAAQ,KAAK,EAAE;CACjD,KAAK,IAAI,IAAI,GAAG,QAAQ,IAAI,KAAK,QAAQ,KAAK;EAC5C,MAAM,OAAO,SAAS,IAAI;EAC1B,IAAI,MAAM;GACR,OAAO,KAAK,MAAM,MAAM,EAAE,QAAQ,KAAK,EAAE;GACzC;EACF;EACA,IAAI,KAAK,SAAS,SAAS;GACzB,MAAM,OAAO,OAAO,QAAQ,cAAc,CAAC,CAAC,MAAM,GAAG,YAAY,WAAW,KAAK,EAAE,CAAC,GAAG;GACvF,IAAI,MAAM,KAAK,KAAK;EACtB;EACA;CACF;CACA,OAAO,KAAK,KAAK,GAAG;AACtB;AAEA,SAAS,gBAAgB,IAAe,UAAqC;CAC3E,MAAM,MAAqB,EAAE,GAAG,GAAG;CACnC,KAAK,MAAM,KAAK;EAAC;EAAS;EAAY;CAAO,GAAY,IAAI,OAAO,GAAG,OAAO,UAAU,IAAI,KAAK,oBAAoB,GAAG,IAAI,QAAQ;CACpI,IAAI,OAAO,GAAG,SAAS,UAAU,IAAI,OAAO,aAAa,GAAG,IAAI;CAChE,OAAO;AACT;AAEA,SAAS,kBAAkB,GAAW,UAAsB,IAAY,KAAqC;CAC3G,MAAM,QAAqB,CAAC;CAC5B,KAAK,MAAM,KAAK,EAAE,OAAO;EACvB,MAAM,IAAI,sBAAsB,GAAG,QAAQ;EAC3C,IAAI,CAAC,GAAG,OAAO,KAAK,IAAI,OAAO,IAAI,aAAa,0BAA0B,EAAE,GAAG,2CAA2C;EAC1H,MAAM,KAAK,CAAC;CACd;CACA,IAAI,CAAC,MAAM,QAAQ,OAAO,KAAA;CAC1B,MAAM,CAAC,MAAM,GAAG,QAAQ;CACxB,OAAO;EAAE,GAAG;EAAM,GAAI,KAAK,SAAS,EAAE,KAAK,IAAI,CAAC;EAAI,GAAI,EAAE,UAAU,SAAS,MAAM,SAAS,IAAI,EAAE,OAAO,MAAe,IAAI,CAAC;CAAG;AAClI;;AAGA,SAAS,sBAAsB,GAAe,UAA6C;CACzF,MAAM,MAAM,SAAS,MAAM,MAAM,EAAE,QAAQ,EAAE,KAAK;CAClD,MAAM,IAAI,KAAK,SAAS,WAAW,WAAW,KAAK;CACnD,MAAM,QAAQ,MAAc,gBAAgB,GAAG,CAAC;CAChD,MAAM,QAAQ,MAAM,QAAQ,EAAE,KAAK,IAAI,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAA,CAAG,IAAI,IAAI;CAC1E,QAAQ,EAAE,IAAV;EACE,KAAK,MACH,OAAO,MAAM,QAAQ,EAAE,KAAK,IAAI;GAAE,OAAO,EAAE;GAAO,QAAQ,EAAE,MAAM,IAAI,IAAI;EAAE,IAAI;GAAE,OAAO,EAAE;GAAO,QAAQ,KAAK,EAAE,SAAS,EAAE;EAAE;EAChI,KAAK,MACH,OAAO;GAAE,OAAO,EAAE;GAAO,QAAQ;EAAK;EACxC,KAAK;EACL,KAAK,YACH,OAAO;GAAE,OAAO,EAAE;GAAO,UAAU;EAAK;EAC1C,KAAK,SACH,OAAO;GAAE,OAAO,EAAE;GAAO,IAAI;EAAQ;EACvC,KAAK,OACH,OAAO;GAAE,OAAO,EAAE;GAAO,IAAI;GAAS,OAAO,MAAM,QAAQ,EAAE,KAAK,IAAI,OAAO,KAAK,EAAE,SAAS,EAAE;EAAE;EACnG,KAAK,SACH,OAAO;GAAE,OAAO,EAAE;GAAO,IAAI;GAAS,OAAO;EAAK;EACpD,KAAK;EACL,KAAK,MAAM;GACT,MAAM,IAAI,OAAO,EAAE,KAAK;GACxB,OAAO,OAAO,EAAE,UAAU,YAAY,EAAE,MAAM,KAAK,MAAM,MAAM,OAAO,SAAS,CAAC,IAAI;IAAE,OAAO,EAAE;IAAO,IAAI,EAAE;IAAI,OAAO;GAAE,IAAI,KAAA;EAC/H;EACA,SACE;CACJ;AACF;AAEA,SAAS,OAAO,GAAa,IAAY,KAAmC;CAC1E,QAAQ,EAAE,MAAV;EACE,KAAK,QACH,OAAO,EAAE,OAAO,cAAc,QAAQ,QAAQ;EAChD,KAAK,YACH,OAAO;EACT,KAAK;GACH,IAAI,OAAO,GAAG,GAAG,QAAQ,YAAY,+CAA+C;GACpF,OAAO;EACT,KAAK;GACH,IAAI,OAAO,GAAG,GAAG,QAAQ,SAAS,6CAA6C;GAC/E,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,UACH,OAAO,EAAE,GAAG,YAAY,WAAW,WAAW;EAChD,KAAK,UAEH,OAAO,EAAE,OAAO,gBAAgB,OAAO,gBAAgB;EACzD,KAAK,eAEH,OAAO,EAAE,OAAO,gBAAgB,OAAO,SAAS;EAClD,KAAK;EACL,KAAK,UACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,WACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;GACH,IAAI,OAAO,GAAG,GAAG,QAAQ,EAAE,MAAM,sFAAsF;GACvH,OAAO;EACT,SACE,OAAO,EAAE;CACb;AACF;AAEA,SAAS,SAAS,GAAa,IAAY,UAAsB,KAAc,KAAc,MAAkC;;;CAG7H,MAAM,YAAY,gBAAgB,CAAC,KAAM,SAAS,YAAY,EAAE,SAAS;;CAEzE,MAAM,WAAW,SAAS,WAAW,EAAE,SAAS;;CAEhD,MAAM,YAAY,SAAS,YAAY,EAAE,SAAS;CAClD,MAAM,OAAO,YAAY,UAAU,YAAY,YAAY,SAAS,OAAO,GAAG,IAAI,GAAG;CACrF,MAAM,IAAiB;EAAE,MAAM,EAAE;EAAK,OAAO,EAAE;EAAO;CAAK;CAC3D,MAAM,MAAM,EAAE;CACd,MAAM,MAA8C,CAAC;CACrD,MAAM,QAAQ,GAAW,SAAiB,WAAmB,IAAI,OAAO,GAAG,GAAG,GAAG,KAAK,SAAS,MAAM;CAErG,IAAI,OAAO,EAAE,aAAa,UAAU,EAAE,cAAc,EAAE;CACtD,IAAI,EAAE,aAAa,KAAA,GAAW,EAAE,WAAW,EAAE;CAC7C,IAAI,EAAE,gBAAgB,KAAA,GAAW,EAAE,cAAc,EAAE;CACnD,IAAI,EAAE,aAAa,KAAA,GAAW,IAAI,WAAW,EAAE;CAC/C,IAAI,EAAE,WAAW,KAAA,GAAW,IAAI,SAAS,EAAE;CAC3C,IAAI,EAAE,mBAAmB,KAAA,GAAW,IAAI,iBAAiB,EAAE;CAC3D,IAAI,EAAE,aAAa,KAAA,GAAW,EAAE,WAAW,EAAE;CAC7C,IAAI,EAAE,aAAa,KAAA,GAAW,EAAE,WAAW,EAAE;CAC7C,IAAI,EAAE,aAAa,MAAM,EAAE,WAAW;CACtC,IAAI,EAAE,aAAa,MAAM,EAAE,WAAW;CAEtC,IAAI,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO;MACxC,IAAI,EAAE,aAAa,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB;CACxE,IAAI,EAAE,eAAe,KAAA,GAAW,EAAE,aAAa,EAAE;CAEjD,MAAM,UAAU,EAAE,aAAa,QAAQ,EAAE,eAAA,mHAAoC,EAAE,SAAS,UAAW,EAAE,SAAS,WAAW,EAAE,OAAO,aAAa;CAC/I,IAAI,SAAS;EACX,OAAO,EAAE;EACT,IAAI,EAAE,SAAS,QAAQ;GACrB,EAAE,OAAO;GACT,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE;EAClC;CACF;CACA,IAAI,EAAE,cAAc,KAAA,GAAW,EAAE,YAAY,EAAE;CAC/C,IAAI,EAAE,GAAG,WAAW,KAAA,GAAW,EAAE,SAAS,EAAE,GAAG;CAC/C,IAAI,EAAE,GAAG,SAAS,KAAA,GAAW,EAAE,OAAO,EAAE,GAAG;CAC3C,IAAI,EAAE,GAAG,WAAW,KAAA,GAAW,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO;CAC3D,IAAI,EAAE,GAAG,eAAe,KAAA,GAAW,EAAE,aAAa,EAAE,GAAG;CACvD,IAAI,EAAE,QAAQ;EACZ,MAAM,IAAI,kBAAkB,EAAE,QAAQ,UAAU,GAAG,GAAG,UAAU,GAAG;EACnE,IAAI,GAAG,EAAE,SAAS;CACpB;CACA,IAAI,EAAE,cAAc,KAAA,GAAW,KAAK,aAAa,aAAa,4DAA4D;CAC1H,IAAI,EAAE,eAAe,OAAO,KAAK,cAAc,cAAc,8BAA8B;CAC3F,IAAI,EAAE,GAAG,cAAc,KAAA,GAAW,KAAK,gBAAgB,gBAAgB,yCAAyC;CAChH,IAAI,EAAE,GAAG,gBAAgB,KAAA,GAAW,KAAK,kBAAkB,kBAAkB,kCAAkC;CAC/G,IAAI,EAAE,GAAG,UAAU,KAAA,GAAW,KAAK,YAAY,YAAY,0DAA0D;CAGrH,IAAI,EAAE,eAAe,KAAA,GAAW;EAC9B,MAAM,MAAM,IAAI,KAAK,IAAI,EAAE,UAAU;EACrC,IAAI,KAAK,SAAS,OAAO;GACvB,IAAI,KAAK,EAAE,QAAQ,IAAI;QAClB,KAAK,cAAc,YAAY,4EAA4E;EAClH,OAAO,IAAI,KAAK;GACd,EAAE,WAAW,IAAI;GACjB,IAAI,OAAO,IAAI,QAAQ,KAAA,GAAW,EAAE,QAAQ,IAAI;EAClD,OAAO,KAAK,cAAc,YAAY,gBAAgB,EAAE,WAAW,mDAAmD;CACxH;CACA,IAAI,SAAS,WAAW,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM;CAE5D,IAAI,SAAS,WAAW,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;CACrD,KAAK,MAAM,KAAK;EAAC;EAAU;EAAS;CAAQ,GAC1C,IAAK,EAAqB,OAAO,KAAA,GAC/B,KAAK,GAAG,GAAG,MAAM,WAAW,2HAA2H,cAAc,EAAE,OAAO;CAGlL,MAAM,uBAAO,IAAI,IAAY;EAAC;EAAe;EAAS;EAAW;CAAQ,CAAC;CAC1E,MAAM,yBAAS,IAAI,IAAY;EAAC;EAAa;EAAe;EAAS;EAAU;EAAU;EAAQ;EAAU;CAAY,CAAC;CACxH,MAAM,OAAO,GAAG,MAAgB,EAAE,SAAS,MAAM,KAAK,IAAI,CAAC,CAAC;CAC5D,MAAM,SAAS,GAAG,MAAgB,EAAE,SAAS,MAAM,OAAO,IAAI,CAAC,CAAC;CAChE,IAAI,SAAS,SAAS,MAAM,OAAO;CACnC,IAAI,SAAS,SAAS,MAAM,KAAK;CACjC,IAAI;EAAC;EAAQ;EAAY;EAAO;EAAY;CAAU,CAAC,CAAC,SAAS,EAAE,IAAI,GAAG;EACxE,IAAI,aAAa,aAAa,WAAW,kBAAkB,WAAW;EACtE,IAAI,OAAO,IAAI,cAAc,UAAU,IAAI,MAAM,IAAI;EACrD,IAAI,OAAO,IAAI,cAAc,UAAU,IAAI,MAAM,IAAI;EACrD,IAAI,OAAO,IAAI,YAAY,UAAU,IAAI,UAAU,IAAI;EACvD,IAAI,OAAO,IAAI,mBAAmB,UAAU,IAAI,iBAAiB,IAAI;CACvE;CACA,IAAI,SAAS,YAAY,SAAS,UAAU;EAC1C,MAAM,UAA+C,CAAC;EACtD,KAAK,MAAM,KAAK;GAAC;GAAO;GAAO;EAAM,GAAY,IAAI,OAAO,IAAI,OAAO,UAAU,QAAQ,KAAK,IAAI;EAClG,IAAI,EAAE,SAAS,UAAU;GACvB,IAAI,QAAQ,SAAS,gBAAgB,OAAO,QAAQ;QAC/C,IAAI,QAAQ,SAAS,KAAA,GAAW,QAAQ,OAAO;EACtD;EAEA,MAAM,gBAAgB,SAAS,YAAY,EAAE,SAAS,YAAY,gBAAgB,OAAO;EACzF,IAAI,OAAO,IAAI,SAAS,UAAU,QAAQ,OAAO,IAAI;EACrD,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,UAAU,CAAC,eAAe,EAAE,UAAU;EAE/D,MAAM,SAAS,IAAI;EACnB,IAAI,MAAM,MAAM,GAAQ;QAAA,MAAM,KAAK,CAAC,OAAO,KAAK,GAAY,IAAI,OAAO,OAAO,OAAO,UAAU,IAAI,KAAK,OAAO;EAAA;EAC/G,IAAI,IAAI,OAAO,EAAE,QAAQ,gBAAgB,IAAI,OAAO,GAAG,GAAG,gBAAgB,GAAG;EAC7E,IAAI,EAAE,GAAG,YAAY,UAAU,EAAE,SAAS;EAC1C,IAAI,OAAO,OAAO,QAAQ,SAAS,QAAQ,YAAY;EACvD,IAAI,EAAE,GAAG,YAAY,YAAY,EAAE,GAAG,YAAY,UAAU,MAAM,SAAS;CAC7E;CAEA,MAAM,UAAU,EAAE,GAAG;CACrB,IAAI,YAAY,KAAA,KAAa,YAAY,YAAY,YAAY,aAAa,YAAY,cAAc,SAAS,WAAW,cAAc,QAAQ,EAAE,SAAS,IAAI,IAAI;EACnK,EAAE,SAAS;EACX,MAAM,SAAS;CACjB;CACA,IAAI,EAAE,SAAS,UAAU,IAAI,aAAa;CAE1C,IAAI,EAAE,SAAS,SAAS;EACtB,IAAI,OAAO;EACX,IAAI,IAAI,UAAU,QAAQ,EAAE,UAAU;CACxC;CAEA,IAAI,OAAO,IAAI,aAAa,YAAY,IAAI,UAAU,EAAE,WAAW,IAAI;CACvE,IAAI,UAAU;CACd,KAAK,SAAS,YAAY,SAAS,iBAAiB,SAAS,WAAW,EAAE,SAAS,EAAE,UAAU,gBAAgB,EAAE,OAAO;CACxH,IAAI,SAAS,iBAAiB,SAAS,QAAQ;EAC7C,IAAI,OAAO,IAAI,QAAQ,UAAU,IAAI,MAAM,IAAI;EAC/C,IAAI,OAAO,IAAI,QAAQ,UAAU,IAAI,MAAM,IAAI;EAC/C,IAAI,OAAO,OAAO,aAAa;CACjC;CACA,IAAI,EAAE,SAAS,QAAQ;EACrB,IAAI,OAAO,IAAI,aAAa,UAAU,EAAE,WAAW,IAAI;OAClD,IAAI,IAAI,aAAa,KAAA,GAAW,KAAK,mBAAmB,iBAAiB,sDAAsD;EACpI,IAAI,MAAM,QAAQ,IAAI,SAAS,KAAK,IAAI,UAAU,OAAO,MAAM,OAAO,MAAM,QAAQ,GAAG,EAAE,YAAY,CAAC,GAAG,IAAI,SAAS;OACjH,IAAI,IAAI,cAAc,KAAA,GAAW,KAAK,oBAAoB,iBAAiB,kEAAkE;EAClJ,IAAI,YAAY,WAAW;CAC7B;CACA,IAAI,EAAE,SAAS,UAAU,IAAI,gBAAgB,OAAO,KAAK,sBAAsB,eAAe,wEAAwE;CACtK,IAAI,SAAS,UAAU,SAAS,YAAY,IAAI,YAAY,aAAa;CACzE,KAAK,SAAS,UAAU,SAAS,eAAe,OAAO,IAAI,aAAa,UAAU,EAAE,WAAW,IAAI,aAAa,SAAS,SAAS,SAAS,IAAI;CAC/I,KAAK,SAAS,UAAU,SAAS,eAAe,OAAO,IAAI,aAAa,WAAW,EAAE,WAAW,IAAI;CACpG,IAAI,EAAE,SAAS,eAAe,EAAE,SAAS,qBAAqB,EAAE,SAAS,kBAAkB,IAAI,kBAAkB,eAAe,qBAAqB,WAAW,QAAQ;CACxK,IAAI,EAAE,SAAS,aAAa;EAC1B,MAAM,MAAM,oBAAoB,GAAG;EACnC,IAAI,KAAK,EAAE,YAAY;CACzB;CACA,IAAI,EAAE,SAAS,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE;CACpD,IAAI,EAAE,SAAS,YAAY,EAAE,SAAS,SAAS;EAC7C,EAAE,UAAU,EAAE,UAAU,CAAC,EAAA,CAAG,KAAK,GAAG,MAAM,SAAS,GAAG,GAAG,GAAG,UAAU,KAAK,EAAE,UAAU,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC;EAC5G,IAAI,EAAE,GAAG,SAAS,EAAE,UAAU,gBAAgB,EAAE,GAAG,SAAS,EAAE,UAAU,CAAC,CAAC;EAC1E,IAAI,EAAE,GAAG,MAAM,EAAE,OAAO,aAAa,EAAE,GAAG,IAAI;EAC9C,MAAM,WAAW,MAAM;CACzB;CACA,IAAI,EAAE,SAAS,WAAW,EAAE,OAAO,eAAe;EAChD,MAAM,KAAK,EAAE,MAAM;EACnB,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,SAAS,GAAG,GAAG,GAAG,8BAA8B,KAAK,IAAI,KAAK,OAAO,IAAI,CAAC;EAC1G,IAAI,EAAE,MAAM,YAAY;GAEtB,MAAM,OAAsB,CAAC;IAAE,MAAM;IAAiB,OAAO,EAAE;IAAO,MAAM;IAAU;GAAO,GAAG,OAAO,GAAG,EAAE,MAAM,WAAW,QAAQ,cAAc,GAAG,GAAG,2BAA2B,KAAK,IAAI,CAAC;GAC9L,IAAI,OAAO,GAAG,GAAG,gBAAgB,iBAAiB,mIAAmI;GACrL,OAAO,OAAO,GAAG;IAAE,MAAM;IAAU,QAAQ;GAAK,CAAC;EACnD,OAAO;GAEL,OAAO,OAAO,GAAG;IAAE,MAAM;IAAU;GAAO,CAAC;GAC3C,IAAI,MAAM,IAAI,CAAC;EACjB;CACF,OAAO,IAAI,UAAU;EAEnB,MAAM,MAAM,MAAM,QAAQ,IAAI,YAAY,IAAI,IAAI,aAAa,QAAQ,MAAmB,OAAO,MAAM,QAAQ,IAAI,CAAC;EACpH,MAAM,QAAQ,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,MAAM,QAAQ,MAAmB,OAAO,MAAM,QAAQ,IAAI,CAAC;EACxG,EAAE,KAAK,IAAI,SAAS;GAAE,MAAM;GAAS,OAAO;EAAI,IAAI,MAAM,SAAS;GAAE,MAAM;GAAS,OAAO;EAAM,IAAI,EAAE,MAAM,QAAQ;EACrH,IAAI,MAAM,IAAI,GAAG,IAAI,aAAa,IAAI;EACtC,MAAM,WAAW,MAAM,QAAQ,IAAI,YAAY,IAAK,IAAI,aAAqC,IAAI,QAAQ,IAAI,CAAC;EAC9G,IAAI,SAAS,QAAQ,EAAE,eAAe,SAAS,KAAK,GAAG,MAAM,SAAS,GAAG,GAAG,GAAG,uBAAuB,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC;EAEtI,IAAI,IAAI,aAAa,MAAM;GACzB,IAAI,MAAM;GACV,KAAK,mBAAmB,eAAe,yFAAyF;EAClI,OAAO;GACL,IAAI,OAAO,IAAI,aAAa,UAAU,IAAI,MAAM,IAAI;GACpD,IAAI,OAAO,IAAI,aAAa,UAAU,IAAI,MAAM,IAAI;EACtD;EACA,IAAI,YAAY,gBAAgB,SAAS,YAAY,YAAY,cAAc;CACjF,OAAO,IAAI,WAAW;EAEpB,MAAM,QAAQ,MAAM,QAAQ,IAAI,UAAU,IAAI,IAAI,WAAW,QAAQ,MAAmB,OAAO,MAAM,QAAQ,IAAI,CAAC;EAClH,EAAE,KAAK,MAAM,SAAS;GAAE,MAAM;GAAS,OAAO,MAAM,IAAI,KAAK;EAAE,IAAI,EAAE,MAAM,QAAQ;EACnF,IAAI,OAAO,IAAI,CAAC;EAChB,MAAM,WAAW,MAAM,QAAQ,IAAI,YAAY,IAAK,IAAI,aAAqC,IAAI,SAAS,IAAI,CAAC;EAC/G,IAAI,SAAS,QAAQ,EAAE,eAAe,SAAS,KAAK,GAAG,MAAM,SAAS,GAAG,GAAG,GAAG,uBAAuB,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC;EACtI,IAAI,OAAO,IAAI,aAAa,UAAU,IAAI,MAAM,IAAI;EACpD,IAAI,OAAO,IAAI,aAAa,UAAU,IAAI,MAAM,IAAI;EACpD,IAAI,cAAc,YAAY,YAAY,cAAc;CAC1D,OAAO,IAAI,SAAS,WAAW,EAAE,SAAS,WAAW,IAAI,SAAS,SAAS;EAGzE,EAAE,MADa,MAAM,QAAQ,IAAI,SAAS,IAAI,IAAI,YAAY,CAAC,EAAA,CAClD,KAAK,GAAG,MAAM;GACzB,MAAM,QAAQ,EAAE,UAAU,CAAC,EAAA,CAAG,IAAI,QAAQ;GAC1C,MAAM,OAAoB;IAAE,MAAM,EAAE;IAAM,OAAO,EAAE,SAAS,EAAE;IAAM,MAAM;IAAU,QAAQ,KAAK,KAAK,GAAG,MAAM,SAAS,GAAG,GAAG,GAAG,oBAAoB,EAAE,UAAU,KAAK,MAAM,KAAK,OAAO,IAAI,CAAC;GAAE;GAC/L,IAAI,EAAE,MAAM,KAAK,OAAO,aAAa,EAAE,IAAI;GAC3C,IAAI,EAAE,SAAS,KAAK,UAAU,gBAAgB,EAAE,SAAS,IAAI;GAC7D,OAAO;EACT,CAAC;EACD,IAAI,MAAM,IAAI,CAAC;EACf,IAAI,EAAE,GAAG,cAAc,KAAA,GAAW,EAAE,WAAW,EAAE,GAAG,UAAU,YAAY;EAC1E,IAAI,EAAE,GAAG,MAAM,EAAE,OAAO,aAAa,EAAE,GAAG,IAAI;EAC9C,MAAM,IAAI,EAAE,GAAG;EACf,IAAI,MAAM,UAAU,MAAM,QAAQ,EAAE,cAAc;OAC7C,IAAI,MAAM,QAAQ,EAAE,SAAS;OAC7B,IAAI,GAAG,KAAK,aAAa,aAAa,cAAc,EAAE,mCAAmC;EAC9F,IAAI,OAAO,IAAI,aAAa,UAAU,IAAI,MAAM,IAAI;EACpD,IAAI,OAAO,IAAI,aAAa,UAAU,IAAI,MAAM,IAAI;EACpD,IAAI,QAAQ,aAAa,YAAY,UAAU;EAC/C,MAAM,aAAa,QAAQ,QAAQ;CACrC,OAAO,IAAI,WAAW;EACpB,EAAE,QAAQ,uBAAuB,GAAG;EACpC,IAAI,QAAQ,eAAe,eAAe,kBAAkB,eAAe,kBAAkB,aAAa,WAAW,WAAW,cAAc,YAAY,QAAQ;CACpK,OAAO,IAAK,EAAE,SAAS,YAAY,EAAE,OAAO,cAAe,CAAC,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,QAAQ,WAAa,EAAE,SAAS,cAAc,EAAE,SAAS,SAAS;EAE1J,MAAM,OAAO,OAAO,GADP,EAAE,OAAO,YAAY,UAAU,EAAE,UAAU,CAAC,GAC5B,EAAE,KAAK,IAAI,KAAK,IAAI;EACjD,MAAM,WAAW,QAAQ,aAAa,UAAU,YAAY,WAAW;EACvE,IAAI,EAAE,OAAO,YAAY,IAAI,MAAM,IAAI,CAAC;EACxC,EAAE,KAAK,KAAK;EACZ,IAAI,KAAK,aAAa,KAAA,GAAW,EAAE,WAAW,KAAK;EACnD,IAAI,KAAK,aAAa,EAAE,cAAc,KAAK;EAC3C,IAAI,KAAK,QAAQ,EAAE,SAAS,KAAK;EACjC,MAAM,IAAI,EAAE,OAAO,eAAe,EAAE,SAAS,UAAU;GAAE,UAAU,IAAI;GAAU,UAAU,IAAI;EAAS,IAAI,KAAA;EAC5G,IAAI,OAAO,GAAG,aAAa,UAAU,IAAI,MAAM,EAAE;EACjD,IAAI,OAAO,GAAG,aAAa,UAAU,IAAI,MAAM,EAAE;EACjD,IAAI,EAAE,SAAS,SAAS,IAAI,YAAY,UAAU;CACpD,OAAO,IAAI,EAAE,SAAS,WAAW,IAAI,UAAU;EAC7C,EAAE,KAAK,CAAC,UAAU;GAAE,GAAG,OAAO,CAAC;GAAG,MAAM;GAAa,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;EAAE,IAAI;GAAE,GAAG,OAAO,CAAC;GAAG,MAAM,IAAI,aAAa,SAAS,WAAW,IAAI;GAAU,GAAG,qBAAqB,IAAI,IAAI;EAAE,CAAC;EACpM,eAAe,GAAG,GAAG,MAAM,mBAAmB;EAC9C,IAAI,OAAO,IAAI,aAAa,UAAU,IAAI,MAAM,IAAI;EACpD,IAAI,OAAO,IAAI,aAAa,UAAU,IAAI,MAAM,IAAI;EACpD,IAAI,YAAY,YAAY,YAAY,MAAM;EAC9C,MAAM,UAAU,aAAa,YAAY,WAAW;CACtD,OAAO,IAAI,EAAE,SAAS,WAAW;EAE/B,MAAM,QAAS,IAAI,cAAuC,CAAC;EAC3D,EAAE,KAAK,MAAM,KAAK,GAAG,MAAM;GACzB,MAAM,KAAK,IAAI,YAAY,IAAI,CAAC;GAEhC,MAAM,SAAS,EAAE,GAAG,SAAS;GAC7B,MAAM,OAAO,KAAK,GAAG,OAAO,IAAI,SAAS,IAAI,CAAC;GAC9C,MAAM,OAAoB,KACtB;IAAE,MAAM,MAAM,CAAC;IAAG,OAAO,GAAG;IAAM,MAAM;IAAmB,QAAQ,KAAK,KAAK,GAAG,MAAM,SAAS,GAAG,GAAG,GAAG,MAAM,EAAE,UAAU,KAAK,MAAM,KAAK,OAAO,IAAI,CAAC;GAAE,IACxJ;IAAE,MAAM,MAAM,CAAC;IAAG,OAAO,MAAM,CAAC;IAAG,MAAM;IAAmB,QAAQ,CAAC;GAAE;GAC3E,IAAI,QAAQ,MAAM,KAAK,OAAO,aAAa,OAAO,IAAI;GACtD,IAAI,QAAQ,SAAS,KAAK,UAAU,gBAAgB,OAAO,SAAS,IAAI;GACxE,OAAO;EACT,CAAC;EACD,MAAM,UAAU,MAAM,QAAQ,MAAM,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC;EAC3D,IAAI,QAAQ,QACV,IAAI,OAAO,GAAG,GAAG,qBAAqB,gBAAgB,0CAA0C,QAAQ,KAAK,IAAI,EAAE,6CAA6C;EAClK,IAAI,QAAQ,IAAI,CAAC;EACjB,IAAI,EAAE,GAAG,WAAW,EAAE,WAAW,EAAE,GAAG,UAAU,YAAY;EAC5D,IAAI,EAAE,GAAG,MAAM,EAAE,OAAO,aAAa,EAAE,GAAG,IAAI;EAC9C,MAAM,IAAI,EAAE,GAAG;EACf,IAAI,MAAM,UAAU,MAAM,QAAQ,EAAE,cAAc;OAC7C,IAAI,MAAM,QAAQ,EAAE,SAAS;OAC7B,IAAI,GAAG,KAAK,aAAa,aAAa,cAAc,EAAE,+BAA+B;EAC1F,IAAI,OAAO,IAAI,aAAa,UAAU,IAAI,MAAM,IAAI;EACpD,IAAI,OAAO,IAAI,aAAa,UAAU,IAAI,MAAM,IAAI;EACpD,IAAI,cAAc,YAAY,UAAU;EACxC,MAAM,aAAa,QAAQ,UAAU,QAAQ;CAC/C,OAAO,IAAI,EAAE,SAAS,qBAAqB,EAAE,SAAS,kBAAkB;EACtE,MAAM,MAAM,oBAAoB,GAAG;EACnC,EAAE,KAAK,CAAC;GAAE,GAAG,OAAO,CAAC;GAAG,MAAM;GAAa,GAAI,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC;EAAG,CAAC;EAC/E,eAAe,GAAG,GAAG,MAAM,mBAAmB;EAC9C,IAAI,OAAO,IAAI,QAAQ,UAAU,IAAI,MAAM,IAAI;EAC/C,IAAI,OAAO,IAAI,QAAQ,UAAU,IAAI,MAAM,IAAI;EAC/C,IAAI,OAAO,KAAK;EAChB,MAAM,UAAU,aAAa,YAAY,WAAW;CACtD;CACA,IAAI,EAAE,SAAS,WAAW,EAAE,OAAO,iBAAiB,EAAE,MAAM,YAAY,MAAM,WAAW,QAAQ,aAAa,QAAQ;CACtH,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,GAAG,GAAG;EACxC,IAAI,MAAM,KAAA,KAAa,KAAK,IAAI,CAAC,GAAG;EAEpC,IAAI,gBAAgB,EAAE,MAAM,CAAC,KAAK,gBAAgB,MAAM,CAAC,GAAG,KAAK,UAAU,KAAK,eAAe,QAAQ,cAAc;OAChH,KAAK,UAAU,KAAK,UAAU,cAAc,EAAE,iBAAiB,KAAK,QAAQ;CACnF;CACA,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,EAAE,EAAE,GAAG,IAAI,MAAM,KAAA,KAAa,CAAC,OAAO,IAAI,CAAC,GAAG,KAAK,MAAM,KAAK,MAAM,KAAK,gBAAgB,EAAE,QAAQ,KAAK,QAAQ;CACpJ,IAAI,EAAE,iBAAiB,KAAA,KAAc,OAAO,IAAI,OAAQ;EACtD,MAAM,OAAO,SAAS,GAAG,EAAE,MAAM,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM;EACzF,IAAI,KAAK,IAAI,OAAO,IAAI,EAAE,MAAM,IAAI;EACpC,IAAI,EAAE,iBAAiB,KAAA,GAAW,EAAE,eAAe,aAAa,MAAM,EAAE,eAAe,KAAK,WAAW,KAAK,eAAe,OAAO,gBAAgB,MAAM,CAAC;CAC3J;CACA,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,aAAa;CAC5C,OAAO;AACT;;AAGA,SAAS,qBAAqB,MAAqC;CACjE,IAAI,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC;CAC1B,MAAM,IAAI;CACV,MAAM,MAA4B,CAAC;CACnC,MAAM,MAA8C,CAAC;CACrD,IAAI,EAAE,aAAa,KAAA,GAAW,IAAI,WAAW,EAAE;CAC/C,IAAI,EAAE,cAAc,KAAA,GAAW,IAAI,MAAM,EAAE;CAC3C,IAAI,EAAE,cAAc,KAAA,GAAW,IAAI,MAAM,EAAE;CAC3C,IAAI,EAAE,YAAY,KAAA,GAAW,IAAI,UAAU,EAAE;CAC7C,IAAI,EAAE,mBAAmB,KAAA,GAAW,IAAI,iBAAiB,EAAE;CAC3D,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,QAAQ,IAAI,aAAa;CAC9C,IAAI,EAAE,cAAc,KAAA,GAAW,IAAI,YAAY,EAAE;CACjD,IAAI,EAAE,aAAa,KAAA,GAAW,IAAI,cAAc,EAAE;CAClD,OAAO;AACT;;AAGA,SAAS,oBAAoB,KAAwD;CACnF,MAAM,UAAU,IAAI,cAAe,IAAI,qBAAqB,CAAC,IAAK,IAAI,iBAAiB,CAAC,IAAI,cAAc,IAAI,CAAC;CAC/G,MAAM,UAAoB,MAAM,QAAQ,IAAI,OAAO,IAAI,IAAI,QAAQ,QAAQ,MAAM,OAAO,MAAM,QAAQ,IAAI,CAAC;CAC3G,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,OAAO;CAClC,IAAI,CAAC,GAAG,UAAU,OAAO,IAAI,WAAW,UAAU,OAAO,KAAA;CACzD,OAAO;EAAE;EAAI,GAAI,OAAO,IAAI,WAAW,WAAW,EAAE,QAAQ,IAAI,OAAO,IAAI,CAAC;CAAG;AACjF;;AAGA,IAAM,UAAU,MAAgB;CAC9B,MAAM,OAAO,eAAe,EAAE,KAAK,EAAE,KAAK;CAC1C,OAAO;EAAE,MAAM,EAAE,GAAG,YAAY,KAAK;EAAM,OAAO,EAAE,GAAG,aAAa,KAAK;CAAM;AACjF;;AAGA,SAAS,eAAe,GAAa,GAAgB,MAA4D,MAAc;CAC7H,IAAI,EAAE,GAAG,cAAc,KAAA,GAAW,EAAE,WAAW,EAAE,GAAG,UAAU,YAAY;CAC1E,MAAM,IAAI,EAAE,GAAG;CACf,IAAI,MAAM,QAAQ,EAAE,SAAS;MACxB,IAAI,MAAM,WAAW,EAAE,cAAc;MACrC,IAAI,GAAG,KAAK,aAAa,aAAa,cAAc,EAAE,eAAe,KAAK,EAAE;AACnF;;AAGA,SAAS,OAAO,GAAa,MAAkB,MAAc,IAAY,KAAc,MAAqB;CAC1G,MAAM,OAAO,eAAe,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS;CACzD,MAAM,OAAoB;EACxB,MAAM,EAAE,GAAG,YAAY,KAAK;EAC5B,OAAO,EAAE,GAAG,aAAa,KAAK;EAC9B,MAAM;EACN,QAAQ,KAAK,KAAK,GAAG,MAAM,SAAS,GAAG,GAAG,GAAG,UAAU,KAAK,MAAM,KAAK,OAAO,IAAI,CAAC;CACrF;CACA,IAAI,EAAE,GAAG,SAAS,KAAK,UAAU,gBAAgB,EAAE,GAAG,SAAS,IAAI;CACnE,IAAI,EAAE,GAAG,MAAM,KAAK,OAAO,aAAa,EAAE,GAAG,IAAI;CACjD,MAAM,MAA2J;EAC/J;EACA,OAAO,EAAE;EACT,MAAM;EACN,IAAI,CAAC,IAAI;CACX;CAEA,IAAI,EAAE,GAAG,cAAc,KAAA,GAAW,IAAI,WAAW,EAAE,GAAG,UAAU,YAAY;CAC5E,MAAM,IAAI,EAAE,GAAG;CACf,IAAI,MAAM,UAAU,MAAM,QAAQ,IAAI,cAAc;MAC/C,IAAI,MAAM,QAAQ,IAAI,SAAS;MAC/B,IAAI,GAAG,IAAI,OAAO,GAAG,GAAG,aAAa,aAAa,cAAc,EAAE,mBAAmB;CAC1F,OAAO;AACT;;AAGA,SAAgB,aAAa,OAAyB,OAA4B,CAAC,GAAe;CAChG,MAAM,MAAe;EACnB,SAAS,MAAM,SAAS,WAAW,KAAK,SAAS;GAAE;GAAM;GAAS;EAAO,CAAC;EAC1E,sBAAM,IAAI,IAAI;EACd,uBAAO,IAAI,QAAQ;EACnB,yBAAS,IAAI,QAAQ;EACrB,uBAAO,IAAI,QAAQ;EACnB,uBAAO,IAAI,QAAQ;EACnB,wBAAQ,IAAI,QAAQ;EACpB,aAAa,IAAI,KAAK,KAAK,eAAe,CAAC,EAAA,CAAG,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,CAAU,CAAC;EAC9E,OAAO,KAAK;CACd;CACA,MAAM,OAAO,MAAM,aAAa,CAAC;CACjC,MAAM,SAAuB,CAAC;CAC9B,MAAM,YAA0B,CAAC;CACjC,KAAK,SAAS,GAAG,MAAM;EACrB,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC;EACpB,IAAI,EAAE,SAAS,OAAO;GACpB,MAAM,IAAgB;IAAE,MAAM,EAAE;IAAI,OAAO,EAAE;GAAK;GAClD,IAAI,EAAE,MAAM,EAAE,OAAO,aAAa,EAAE,IAAI;GACxC,IAAI,OAAO,WAAW,GAAG,EAAE,UAAU;GACrC,OAAO,KAAK,CAAC;GACb;EACF;EACA,MAAM,KAAiB;GAAE,MAAM,EAAE;GAAI,OAAO,EAAE;EAAK;EACnD,IAAI,EAAE,gBAAgB,KAAA,GAAW,GAAG,cAAc,EAAE;EACpD,KAAK,MAAM,KAAK;GAAC;GAAa;GAAe;GAAW;EAAQ,GAAY,IAAI,EAAE,OAAO,KAAA,GAAW,GAAuB,KAAK,EAAE;EAClI,IAAI,EAAE,SAAS,OAAO,IAAI,OAAO,cAAc,EAAE,QAAQ,gBAAgB,gDAAgD;EACzH,IAAI,EAAE,SAAS,KAAA,GAAW,IAAI,OAAO,cAAc,EAAE,QAAQ,iBAAiB,2BAA2B;EACzG,UAAU,KAAK,EAAE;CACnB,CAAC;CACD,MAAM,QAAQ,MAAM,OAAO,IAAI,SAAS;CACxC,MAAM,MAAkB;EACtB,MAAM,MAAM,MAAM,IAAI;EACtB,OAAO,MAAM;EACb,MAAM,MAAM,SAAS,UAAU,UAAU;EACzC,QAAQ,MAAM,KAAK,GAAG,MAAM,SAAS,GAAG,WAAW,KAAK,OAAO,KAAK,MAAM,QAAQ,CAAC;CACrF;CACA,IAAI,MAAM,gBAAgB,KAAA,GAAW,IAAI,cAAc,MAAM;CAC7D,IAAI,UAAU,QAAQ,IAAI,YAAY;CACtC,IAAI,OAAO,QAAQ,IAAI,SAAS;CAChC,OAAO;AACT;;AAGA,SAAgB,kBAAkB,WAA0B,OAA4B,CAAC,GAAe;CACtG,MAAM,MAAe;EACnB,SAAS,MAAM,SAAS,WAAW,KAAK,SAAS;GAAE;GAAM;GAAS;EAAO,CAAC;EAC1E,sBAAM,IAAI,IAAI;EACd,uBAAO,IAAI,QAAQ;EACnB,yBAAS,IAAI,QAAQ;EACrB,uBAAO,IAAI,QAAQ;EACnB,uBAAO,IAAI,QAAQ;EACnB,wBAAQ,IAAI,QAAQ;EACpB,aAAa,IAAI,KAAK,KAAK,eAAe,CAAC,EAAA,CAAG,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,CAAU,CAAC;EAC9E,OAAO,KAAK;CACd;CACA,MAAM,QAAQ,UAAU,MAAM,IAAI,QAAQ;CAE1C,MAAM,YAA0B,CAAC;CACjC,MAAM,wBAAQ,IAAI,IAAoB;CACtC,MAAM,SAAS,MAAkB,OAC/B,KAAK,SAAS,GAAG,MAAM;EACrB,MAAM,IAAI,EAAE,GAAG;EACf,IAAI,KAAK,CAAC,UAAU,MAAM,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG;GAChD,MAAM,KAAiB;IAAE,MAAM,EAAE;IAAI,OAAO,EAAE,SAAS,EAAE;GAAG;GAC5D,IAAI,EAAE,gBAAgB,KAAA,GAAW,GAAG,cAAc,EAAE;GACpD,IAAI,EAAE,cAAc,KAAA,GAAW,GAAG,YAAY,EAAE;GAChD,IAAI,EAAE,YAAY,KAAA,GAAW,GAAG,UAAU,EAAE;GAC5C,IAAI,EAAE,gBAAgB,KAAA,GAAW,GAAG,cAAc,EAAE;GACpD,IAAI,EAAE,WAAW,KAAA,GAAW,GAAG,SAAS,EAAE;GAC1C,IAAI,OAAO,EAAE,UAAU,UAAU,MAAM,IAAI,EAAE,IAAI,EAAE,KAAK;GACxD,IAAI,EAAE,SAAS,OAAO,IAAI,OAAO,GAAG,GAAG,GAAG,EAAE,iBAAiB,gBAAgB,gDAAgD;GAC7H,IAAI,EAAE,SAAS,KAAA,GAAW,IAAI,OAAO,GAAG,GAAG,GAAG,EAAE,iBAAiB,iBAAiB,2BAA2B;GAC7G,UAAU,KAAK,EAAE;EACnB;EACA,IAAI,EAAE,QAAQ,MAAM,EAAE,QAAQ,GAAG,GAAG,GAAG,EAAE,QAAQ;CACnD,CAAC;CACH,MAAM,OAAO,SAAS;CACtB,IAAI,MAAM,MAAM;EACd,MAAM,KAAK,IAAI,IAAI,UAAU,KAAK,GAAG,MAAM,CAAC,EAAE,MAAM,CAAC,CAAU,CAAC;EAChE,UAAU,MAAM,GAAG,OAAO,MAAM,IAAI,EAAE,IAAI,KAAK,GAAG,IAAI,EAAE,IAAI,MAAO,MAAM,IAAI,EAAE,IAAI,KAAK,GAAG,IAAI,EAAE,IAAI,EAAG;CAC1G;CAGA,MAAM,SAAuB,CAAC;CAC9B,MAAM,2BAAW,IAAI,IAAoB;CACzC,KAAK,MAAM,KAAK,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,GAAG,GAAG,GAAG,GAAI,UAAU,QAAQ,CAAC,CAAE,GAAG;EAC1E,IAAI,CAAC,KAAK,OAAO,MAAM,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG;EAC/C,MAAM,IAAgB;GAAE,MAAM,EAAE;GAAI,OAAO,EAAE,SAAS,EAAE;EAAG;EAC3D,IAAI,EAAE,MAAM,EAAE,OAAO,aAAa,EAAE,IAAI;EACxC,IAAI,OAAO,EAAE,UAAU,UAAU,SAAS,IAAI,EAAE,IAAI,EAAE,KAAK;EAC3D,OAAO,KAAK,CAAC;CACf;CACA,IAAI,SAAS,MAAM;EACjB,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,EAAE,MAAM,CAAC,CAAU,CAAC;EAC7D,OAAO,MAAM,GAAG,OAAO,SAAS,IAAI,EAAE,IAAI,KAAK,GAAG,IAAI,EAAE,IAAI,MAAO,SAAS,IAAI,EAAE,IAAI,KAAK,GAAG,IAAI,EAAE,IAAI,EAAG;CAC7G;CACA,IAAI,OAAO,QAAQ,OAAO,EAAE,CAAC,UAAU;CACvC,MAAM,MAAkB;EACtB,MAAM,MAAM,UAAU,IAAI;EAC1B,OAAO,UAAU;EACjB,MAAM;EACN,QAAQ,MAAM,KAAK,GAAG,MAAM,SAAS,GAAG,WAAW,KAAK,OAAO,KAAK,MAAM,OAAO,CAAC;CACpF;CACA,IAAI,UAAU,gBAAgB,KAAA,KAAa,UAAU,gBAAgB,MAAM,IAAI,cAAc,UAAU;CACvG,IAAI,UAAU,aAAa,KAAA,KAAa,UAAU,aAAa,UAAU,IAAI,WAAW,WAAW,UAAU,QAAQ;CACrH,IAAI,UAAU,MAAM,IAAI,OAAO,aAAa,UAAU,IAAI;CAE1D,IAAI,UAAU,SAAS,IAAI,UAAU,gBAAgB,UAAU,SAAS,KAAK;CAC7E,IAAI,UAAU,QAAQ,IAAI,YAAY;CACtC,IAAI,OAAO,QAAQ,IAAI,SAAS;CAChC,OAAO;AACT"}
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../src/adapters/schema.ts"],"sourcesContent":["/**\n * SCHEMA ADAPTERS — the production schema language ↔ the V2 schema language (TypeSchema).\n *\n * toTypeSchema(model) prod content model {fields, fieldsets} → TypeSchema\n * propsToTypeSchema(component) prod component props (ComponentPropDef[]) → TypeSchema\n * fromTypeSchema(v2, \"fields\") TypeSchema → prod content model, plus every V2 feature prod cannot hold\n * fromTypeSchema(v2, \"props\") TypeSchema → prod component props, likewise\n * planFromProd / planToProd one field's stored prod value ↔ its V2 value, by the plan a read hands back\n * (ToTypeSchemaOptions.plans) or `leafValuePlan` builds for a leaf field\n *\n * The read side takes BOTH prod dialects: the old shapes (group / repeater, array zones, showIf eq / neq / in / isSet)\n * and the F1 keys (object, openMode, advanced, helpMore, recommendedMax, config.scale, ui.layout rows / chips /\n * gallery, ui.preview.fallback, fieldset collapsible / columns / layout, notEmpty / empty), and the F1.x keys landed on\n * origin/dev 81f385ff3 (validation parity, option meta, the V2 chrome keys and types, reference / video / array / longtext\n * props, prop group keys and nesting, the V2 icon vocabulary, localized). What V2 cannot show is reported through\n * `onLoss`, never dropped silently.\n *\n * The write side returns `{ schema, lossy, catalog }`: `toTypeSchema(fromTypeSchema(v2, t).schema)` equals `v2` minus\n * exactly the `lossy` and `catalog` paths. `lossy` is what prod drops; `catalog` is metadata the dock never stores, set\n * by the host at seeding time (block icon, category, kind, variants…). Storage stays prod's; value shapes go through\n * ./values.\n */\nimport type { Condition, FieldGroup, FieldSchema, Fieldset as V2Fieldset, Option, PreviewConfig, ScaleSchema, ScaleValue, TypeSchema } from \"../schema/types\";\nimport { CATALOG, FEATURES, isHostConfigKey, type CatalogFeature, type CatalogItem, type LossyFeature, type LossyItem } from \"./lossy\";\nimport { dockIconOf, tablerIconOf } from \"./icons\";\nimport { BLOCK_FIELD_TYPES_RENDERABLE_NOW, KIT_CATEGORIES, SEGMENTED_MAX, SEGMENTED_MIN, type KitCategory, type V2Placement, type V2Shape, isReservedKey, KEY_FORMAT, normaliseRichTextFeatures, PRIMITIVE_ARRAY_RULE, RICHTEXT_FEATURES, type RichTextFeature } from \"@bettercms-ai/types\";\nimport { slotChildrenFromStored, slotChildrenToStored } from \"../controls/slot-services\";\nimport { isDataTableProp, tableConfigFromOptions, tableOptionsFromConfig } from \"../controls/table/prod\";\nimport {\n type ArrayItemSettings,\n COMPONENT_PREVIEW_FALLBACK_MAX,\n COMPONENT_PREVIEW_KEY_MAX,\n CONTROL_TYPES,\n FIELD_HELP_MAX,\n FIELDSET_DESCRIPTION_MAX,\n FIELDSET_NAME_MAX,\n FIELDSETS_MAX,\n HELP_MORE_MAX,\n ITEM_LABEL_MAX,\n ITEM_NAME_RE,\n ITEM_TITLE_MAX,\n LOCK_REASON_MAX,\n MAX_FIELD_DEPTH,\n NUMBER_UNIT_MAX,\n OPTION_DESCRIPTION_MAX,\n PATTERN_MAX,\n PATTERN_MESSAGE_MAX,\n PREVIEW_FALLBACK_MAX,\n PROP_GROUP_DESCRIPTION_MAX,\n PROP_GROUP_LABEL_MAX,\n PROP_GROUP_ORDER_MAX,\n PROP_HELP_MAX,\n PROP_PLACEHOLDER_MAX,\n PROP_TAB_ID_MAX,\n PROP_TAB_MAX,\n RATING_DEFAULT_MAX,\n RATING_MAX,\n RATING_MAX_STOPS,\n SCALE_CSS_MAX,\n SCALE_LABEL_MAX,\n SCALE_PRESETS_MAX,\n SCALE_STEPS_MAX,\n SCALE_TITLE_MAX,\n SCALE_TOKEN_VALUE_MAX,\n SYNCED_FROM_MAX,\n TAB_MAX,\n TAB_NAME_MAX,\n TAGS_ITEMS_MAX,\n UI_CONTROLS,\n UI_PLACEHOLDER_MAX,\n UI_ROWS_MAX,\n type ChoiceOption,\n type ComponentCategory,\n type DockIconName,\n type ComponentPropDef,\n type ComponentSubField,\n type ContentModelField,\n type FieldConfig,\n type Fieldset,\n type FieldUi,\n type NumberScale,\n type OpenMode,\n type ProdComponent,\n type ProdContentModel,\n type PropGroup,\n type PropTab,\n type PropUi,\n type SelectOption,\n type ShowIf,\n type ShowIfRule,\n type UiControl,\n type ComponentPreview,\n type UiPreview,\n} from \"./prod-types\";\nimport {\n buttonFromProd,\n buttonToProd,\n datetimeFromProd,\n datetimeToProd,\n imageFromProd,\n imageToProd,\n isCropRect,\n linkFromProd,\n linkToProd,\n listFromProd,\n listToProd,\n ratingFromProd,\n ratingToProd,\n referenceFromProd,\n referenceToProd,\n scaleFromProd,\n scaleToProd,\n videoFromProd,\n videoToProd,\n typedRowsFromProd,\n typedRowsToProd,\n zoneListFromProd,\n zoneListToProd,\n type ListItemType,\n type RatingScale,\n type V2ButtonValue,\n type V2ImageValue,\n type V2LinkValue,\n type V2VideoValue,\n} from \"./values\";\n\nexport type { CatalogItem, LossyItem } from \"./lossy\";\nexport type AdapterTarget = \"fields\" | \"props\";\nexport interface FromTypeSchemaResult<S> {\n schema: S;\n /**\n * fields lane: the kind:'block' models a modular field's config.blockSlugs names, one per item type (created before\n * the model that uses them). Empty in the props lane.\n */\n blockModels: ProdContentModel[];\n lossy: LossyItem[];\n catalog: CatalogItem[];\n}\nexport interface ToTypeSchemaOptions {\n /** Prod features V2 cannot show (a neq condition, a table layout, a component slot…), reported as they are dropped. */\n onLoss?: (item: { path: string; feature: string; reason: string }) => void;\n /** The block models a modular field's blockSlugs name: each item type's fields are read from its model. */\n blockModels?: ProdContentModel[];\n /**\n * Filled with each top-level field's value plan (field name → plan): how its stored prod value crosses to the V2 value\n * and back, through `planFromProd` / `planToProd`. The same plan this read used for the field's initialValue.\n */\n plans?: Map<string, ValuePlan>;\n}\n\ntype Obj = Record<string, unknown>;\nconst isObj = (v: unknown): v is Obj => !!v && typeof v === \"object\" && !Array.isArray(v);\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (Array.isArray(a) || Array.isArray(b)) return Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.every((x, i) => deepEqual(x, b[i]));\n if (!isObj(a) || !isObj(b)) return false;\n const keys = new Set([...Object.keys(a), ...Object.keys(b)].filter((k) => a[k] !== undefined || b[k] !== undefined));\n return [...keys].every((k) => deepEqual(a[k], b[k]));\n}\n\n/* ── naming conventions shared by both directions ────────────────────── */\nconst singular = (t: string) => (t.endsWith(\"ies\") ? `${t.slice(0, -3)}y` : t.endsWith(\"s\") && !t.endsWith(\"ss\") ? t.slice(0, -1) : t);\nconst kebab = (s: string) =>\n s\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"schema\";\nconst camel = (s: string) => s.replace(/-([a-z0-9])/g, (_, c: string) => c.toUpperCase());\n/** The slug a V2 schema name is stored under (a component's, when the host seeds a /kit block): `textBlock` → `text-block`. */\nexport const schemaSlugOf = kebab;\nconst capitalize = (s: string) => s.charAt(0).toUpperCase() + s.slice(1);\nconst ZONE_NAMES: ReadonlySet<string> = new Set(typeof Intl.supportedValuesOf === \"function\" ? [...Intl.supportedValuesOf(\"timeZone\"), \"UTC\"] : [\"UTC\"]);\n/** An IANA zone name (isTimeZoneName): ICU's canonical list, or a current name Intl itself accepts (Asia/Kolkata). */\nconst isZone = (z: string) => {\n if (ZONE_NAMES.has(z)) return true;\n if (!/^[A-Za-z]+(?:\\/[A-Za-z0-9_+-]+)+$/.test(z)) return false;\n try {\n new Intl.DateTimeFormat(\"en\", { timeZone: z });\n return true;\n } catch {\n return false;\n }\n};\n\n/** The item type of a single-type array, as both directions name it when prod has no name for it. */\nconst conventionItem = (fieldName: string, fieldTitle: string, itemLabel?: string) => ({\n name: singular(fieldName),\n title: itemLabel ?? singular(fieldTitle),\n});\n\n/** A condition's value as the sibling's type reads it (prod stores rule values as strings). */\nfunction coerceRuleValue(siblingType: string | undefined, s: string): unknown {\n if (siblingType === \"boolean\") return s === \"true\" ? true : s === \"false\" ? false : s;\n if ((siblingType === \"number\" || siblingType === \"rating\") && s.trim() !== \"\" && Number.isFinite(Number(s))) return Number(s);\n return s;\n}\n\n/* ── type tables ─────────────────────────────────────────────────────── */\n/** V2 primitive types → the same-valued prod field type (fields lane). */\nconst FIELD_TYPE: Partial<Record<FieldSchema[\"type\"], ContentModelField[\"type\"]>> = {\n string: \"text\", text: \"longtext\", richtext: \"richtext\", number: \"number\", rating: \"rating\", boolean: \"boolean\", slug: \"slug\",\n email: \"email\", date: \"date\", datetime: \"datetime\", color: \"color\", select: \"select\", multiselect: \"multiselect\", tags: \"tags\",\n image: \"image\", file: \"file\", icon: \"icon\", link: \"link\", button: \"button\", reference: \"reference\", json: \"json\", geopoint: \"location\",\n // DESIGN §8.3 prefers a link, but only a text field enforces a URL's pattern and length: text + config.inputType \"url\"\n url: \"text\", code: \"code\", video: \"video\",\n};\n/** V2 primitive types → prop types. */\nconst PROP_TYPE: Partial<Record<FieldSchema[\"type\"], ComponentPropDef[\"type\"]>> = {\n string: \"text\", text: \"longtext\", video: \"video\", richtext: \"richtext\", number: \"number\", rating: \"rating\", boolean: \"boolean\", slug: \"slug\",\n email: \"email\", date: \"date\", datetime: \"datetime\", color: \"color\", select: \"select\", multiselect: \"multiselect\", tags: \"tags\",\n image: \"image\", file: \"file\", icon: \"icon\", link: \"link\", button: \"button\", json: \"json\", geopoint: \"location\", url: \"url\", code: \"code\",\n};\n/** Field types whose `config` the backend parses strictly (unknown keys stripped or refused). */\nconst STRICT_CONFIG: ReadonlySet<string> = new Set([\n \"array\", \"reference\", \"multi-reference\", \"multiReference\", \"date\", \"datetime\", \"component-ref\", \"modular\", \"sections\", \"tags\", \"rating\", \"code\", \"video\",\n \"table\", \"slot\",\n]);\n/** V2 list item types → prod `config.itemType` (ARRAY_ITEM_TYPES); a V2 `text` item reads back as `string`. */\nconst PRIM_ITEM: Partial<Record<FieldSchema[\"type\"], ListItemType>> = {\n string: \"text\", text: \"text\", number: \"number\", date: \"date\", image: \"image\", link: \"link\", richtext: \"richtext\",\n};\nconst ENTRY_TARGET = (t: string) => ![\"page\", \"form\", \"shopify\", \"collection\"].includes(t);\n/** The non-entry targets a prop reference stores in config.targets (backend reference-target-config.ts REF_TARGET_KINDS). */\nconst REF_TARGET_KINDS: readonly string[] = [\"page\", \"form\", \"collection\"];\n/**\n * A prop reference whose only target is Shopify (backend reference-target-config.ts UNSUPPORTED_TARGETS refuses it by\n * name) is stored as locked text holding the id (a list of them: a list of text), so the value stays the plain gid\n * string V2 holds. This lock reason is the marker the read side turns back into V2's reference (allowed deviation\n * \"shopify reference\").\n */\nexport const SHOPIFY_REF_LOCK = \"A Shopify product id. No Shopify integration backs a reference in BetterCMS yet, so the id is kept as it is.\";\nconst shopifyOnly = (r: FieldSchema[\"reference\"]) => !!r?.to?.length && r.to.every((t) => t === \"shopify\");\n/** backend REFERENCE_FILTER_MAX; parameters ($x) and the parent document (^) are refused there (reference_filter_invalid). */\nconst REFERENCE_FILTER_MAX = 500;\nconst filterKept = (f: unknown): f is string => typeof f === \"string\" && f.trim() !== \"\" && f.length <= REFERENCE_FILTER_MAX && !/[$^]/.test(f);\n/** The old rating: a number with ui.control \"rating\" and these bounds read back as no `numeric` (read side only). */\nconst RATING_CONFIG = { min: 0, max: 5, step: 0.5 } as const;\n/**\n * A V2 rating sets no step and holds any number on its scale (a 4.8 average). Prod's unset step is 1, which refuses\n * 4.8 (rating_value_invalid), so a rating with no step is written with step 0.1 (≤ RATING_MAX_STOPS stops on a 1–10\n * scale) and that step reads back as none; a prod rating with no step reads back as its real step, 1.\n */\nconst V2_RATING_STEP = 0.1;\n/**\n * V2 block-picker category (KitCategory, and the core examples' own) → the nearest prod ComponentCategory. A category\n * with no row has no prod twin; the server defaults the component to \"custom\".\n */\nexport const CATEGORY_TO_PROD: Readonly<Record<string, ComponentCategory>> = {\n \"Navigation & chrome\": \"navbar\",\n Heroes: \"hero\",\n \"Features & storytelling\": \"content\",\n \"Social proof\": \"social-proof\",\n \"Media & galleries\": \"content\",\n Commerce: \"conversion\",\n \"Pricing & plans\": \"conversion\",\n \"Conversion & forms\": \"conversion\",\n \"Listings & feeds\": \"content\",\n \"Long-form & docs\": \"content\",\n \"Company & people\": \"content\",\n \"Events & places\": \"content\",\n \"Data & interactive\": \"section\",\n Navigation: \"navbar\",\n Hero: \"hero\",\n Content: \"content\",\n Layout: \"section\",\n};\n/** The field types a kind:'block' model holds today: the ones a block primitive renders (types, staged to G7). */\nconst BLOCK_FIELD_TYPES: ReadonlySet<string> = new Set(BLOCK_FIELD_TYPES_RENDERABLE_NOW);\n/** What a block row's cell may hold, and a primitive list's items (backend block-model-mapping.ts CELL_FIELD_TYPES, LIST_ITEM_TYPES). */\n/** The block-variant select's key on a model (c2ee279dd: a top-level select, only beside v2.variants). */\nconst BLOCK_VARIANT_KEY = \"_variant\";\nconst BLOCK_CELL_TYPES: ReadonlySet<string> = new Set([\"text\", \"longtext\", \"richtext\", \"image\", \"link\", \"slug\", \"email\", \"phone\", \"color\", \"select\", \"number\", \"rating\", \"date\", \"datetime\", \"boolean\"]);\nconst BLOCK_LIST_ITEM_TYPES: ReadonlySet<string> = new Set([\"text\", \"number\", \"date\"]);\n/**\n * Whether a block model may hold this stored field (backend findUnmappableFields / containerProblem): its type has a\n * primitive, and an object or array has rows of cells (an array no non-repeating fields), or lists text, numbers or dates.\n */\nfunction blockRenders(f: ContentModelField): boolean {\n if (!BLOCK_FIELD_TYPES.has(f.type)) return false;\n if (f.type !== \"object\" && f.type !== \"array\") return true;\n const zones = (f.config as { zones?: { nonRepeatable?: ContentModelField[]; repeatable?: { fields?: ContentModelField[] } } } | undefined)?.zones;\n if (f.type === \"array\" && zones?.nonRepeatable?.length) return false;\n const row = f.type === \"object\" ? ((f as { fields?: ContentModelField[] }).fields ?? []) : zones ? (zones.repeatable?.fields ?? []) : null;\n if (row === null) return BLOCK_LIST_ITEM_TYPES.has(String((f.config as { itemType?: unknown } | undefined)?.itemType));\n return row.length > 0 && row.every((c) => BLOCK_CELL_TYPES.has(c.type));\n}\n/** A slot prop's config.minItems / maxItems cap (SLOT_ITEMS_CAP, componentPropDefSchema). */\nconst SLOT_ITEMS_CAP = 50;\n/** A table prop's rows and an array prop's items: their config.minItems / maxItems cap (LIST_ITEMS_CAP). */\nconst LIST_ITEMS_CAP = 500;\n/** backend slotAllowIssues: a slot's config.allow holds 1–50 block names of 1–64 characters, no repeats. */\nconst SLOT_ALLOW_MAX = 50;\nconst SLOT_ALLOW_NAME_MAX = 64;\n/** Backend dock-vocabulary.ts SLIDER_MAX_STOPS: a slider's (max − min) / step. */\nconst SLIDER_MAX_STOPS = 1000;\n/**\n * The field types prod's unique flag accepts (uniqueFlagRules): a comparable scalar (UNIQUE_FIELD_TYPES, no two entries\n * share it; a reference only to one model) or a list (UNIQUE_ITEMS_FIELD_TYPES, no item repeats).\n */\nconst UNIQUE_TYPES: ReadonlySet<string> = new Set([\n \"text\", \"longtext\", \"slug\", \"email\", \"phone\", \"link\", \"number\", \"select\", \"reference\", \"date\",\n \"array\", \"multiselect\", \"tags\", \"multi-reference\",\n]);\n/** Prop types whose value is a list (UNIQUE_LIST_PROP_TYPES), and the sub-field types a table row compares (UNIQUE_ROW_PROP_TYPES). */\nconst UNIQUE_LIST_PROPS: ReadonlySet<string> = new Set([\"multiselect\", \"tags\", \"multi-reference\", \"table\", \"array\"]);\nconst UNIQUE_ROW_PROPS: ReadonlySet<string> = new Set([\"text\", \"url\", \"slug\", \"email\", \"phone\", \"number\", \"select\", \"date\"]);\n/** Types measured by minLength / maxLength (fields: LENGTH_FIELD_TYPES; props: LENGTH_TWIN), and those that take a pattern. */\nconst LENGTH_FIELDS: ReadonlySet<string> = new Set([\"text\", \"longtext\", \"richtext\", \"document\"]);\nconst LENGTH_PROPS: ReadonlySet<string> = new Set([\"text\", \"url\", \"longtext\", \"richtext\"]);\nconst PATTERN_TYPES: ReadonlySet<string> = new Set([\"text\", \"longtext\", \"url\"]);\n/**\n * Leaf types whose value is an object a dotted preview path may read into (previewPathProblem OBJECT_VALUE_TYPES), and the\n * keys an image or video value holds (LEAF_VALUE_KEYS). V2 reads `image.alt`; prod stores the key as `altText`.\n */\nconst OBJECT_VALUE_TYPES: ReadonlySet<string> = new Set([\"image\", \"link\", \"button\", \"file\", \"video\", \"location\", \"json\", \"code\", \"reference\", \"multi-reference\"]);\nconst LEAF_VALUE_KEYS: Readonly<Record<string, readonly string[]>> = {\n image: [\"id\", \"url\", \"name\", \"altText\", \"width\", \"height\", \"focal\", \"crop\"],\n video: [\"url\", \"poster\", \"autoplay\", \"loop\", \"transcript\"],\n};\nconst IMAGE_PATH_KEY: Readonly<Record<string, string>> = { alt: \"altText\" };\n/** The keys of a data table's value a preview path may end on (previewPathProblem `<table>.caption` / `.notes`). */\nconst TABLE_PATH_KEYS: readonly string[] = [\"caption\", \"notes\"];\n\n/* ══════════════════════════════════════════════════════════════════════\n * V2 → prod\n * ══════════════════════════════════════════════════════════════════════ */\n\ninterface Ctx {\n lane: AdapterTarget;\n /** fields lane: the fieldsets fields name but the schema does not declare, stored as sections (as the props lane does) */\n derivedSets?: Fieldset[];\n /** fields lane: the model stores V2's block variants (the `_variant` select + v2.variants), so a top-level rule may name `_variant` */\n variants?: boolean;\n lossy: LossyItem[];\n catalog: CatalogItem[];\n /** fields lane: kept tab ids, kept fieldset ids → their tab, dropped tab ids → why. */\n tabs: Set<string>;\n droppedTabs: Map<string, LossyFeature>;\n sets: Map<string, string | undefined>;\n /** props lane: fieldsets usable as prop groups, and per sibling list the ones already defined on a prop there. */\n propSets: Map<string, V2Fieldset>;\n definedGroups: WeakMap<FieldSchema[], Set<string>>;\n /** props lane: each V2 fieldset's index (the prop group's `order` when groupOrder). */\n propOrder: Map<string, number>;\n /** props lane: the V2 fieldsets order differs from where each is first used, so every group carries its `order`. */\n groupOrder: boolean;\n /** props lane: each top-level field's tab (a definition the first time an id is met) and what its tab lost. */\n propTabs: Map<FieldSchema, { tab?: PropTab; loss?: LossyFeature }>;\n definedTabs: Set<string>;\n /** props lane: every stored tab id (a nested field names one as ui.tab { id }), and the ones no top-level prop sits in (component.tabs). */\n keptTabs: Set<string>;\n declaredTabs: PropTab[];\n /** fields lane: block slug → the block model a modular item type is stored as. */\n blockModels: Map<string, ProdContentModel>;\n}\nconst lose = (ctx: Ctx, path: string, feature: LossyFeature) => ctx.lossy.push({ path, feature, reason: FEATURES[feature].reason });\nconst cat = (ctx: Ctx, path: string, feature: CatalogFeature) => ctx.catalog.push({ path, feature, reason: CATALOG[feature] });\n\n/** One converted field, lane-neutral; `emit*` places each key where its lane keeps it. */\ninterface Node {\n key: string;\n label: string;\n type: string;\n /** props lane: null = V2 gave this field no description, so no help on purpose (absent would get the platform's auto-help) */\n helpText?: string | null;\n required?: boolean;\n unique?: boolean;\n defaultValue?: unknown;\n options?: SelectOption[];\n config: FieldConfig;\n children?: Node[];\n /** fields lane array: children are the repeatable zone. */\n zoned?: boolean;\n /** props lane polymorphic list: config.itemTypes, each item type's fields converted */\n itemTypes?: { name: string; label: string; children: Node[]; icon?: DockIconName; preview?: UiPreview }[];\n /** props lane slot: config.slotSettings, each setting converted */\n slotSettings?: Node[];\n ui: PropUi;\n openMode?: OpenMode;\n showIf?: ShowIf;\n readOnly?: true | \"developer\";\n lockReason?: string;\n localized?: boolean;\n helpMore?: string;\n advanced?: boolean;\n ai?: boolean;\n recommendedMax?: number;\n placeholder?: string;\n fieldsetId?: string;\n archived?: true;\n}\n\n/** Keys every type keeps, including a field degraded to json. */\nconst COMMON_KEYS: ReadonlySet<string> = new Set([\n \"name\", \"title\", \"type\", \"description\", \"helpMore\", \"initialValue\", \"validation\", \"fieldset\", \"group\", \"hidden\", \"readOnly\",\n \"access\", \"lockReason\", \"advanced\", \"localized\", \"ai\", \"placeholder\", \"archived\",\n]);\n\ntype Shape =\n /** `shopify`: a reference to Shopify alone, stored as locked text (SHOPIFY_REF_LOCK) */\n | { kind: \"leaf\"; type: string; shopify?: true }\n | { kind: \"object\"; type: string }\n | { kind: \"zones\"; type: string; item: FieldSchema }\n | { kind: \"itemType\"; type: \"array\"; item: FieldSchema; itemType: ListItemType; shopify?: true }\n | { kind: \"refs\"; type: \"multi-reference\"; item: FieldSchema }\n /** fields lane: several object item types, each its own block model */\n | { kind: \"modular\"; type: \"modular\"; items: FieldSchema[] }\n /** props lane: several object item types, a `table` with config.mode \"types\" and config.itemTypes */\n | { kind: \"types\"; type: \"table\"; items: FieldSchema[] }\n /** props lane: a slot prop or sub-field at any depth (config.multiple), its children component instances (C1/C2) */\n | { kind: \"slot\"; type: \"slot\" }\n | { kind: \"json\"; type: \"json\"; feature: LossyFeature };\n\n/** Where a prop sub-field sits that the backend judges by its parent: a table's rows, a polymorphic list's item type, or a slot's per-child settings. */\ntype Nest = \"rows\" | \"item\" | \"setting\" | undefined;\n/** Types a slot setting may not be (backend slotSettingsHardening, and a model slot's SLOT_SETTINGS_NESTING: leaf fields only). */\nconst SETTING_NESTING_TYPES: ReadonlySet<string> = new Set([\"object\", \"group\", \"array\", \"table\", \"slot\", \"form\", \"modular\"]);\n/** backend slotSettingsHardening: at most this many per-child settings. */\nconst SLOT_SETTINGS_MAX = 20;\n/** backend ITEM_TYPE_NAME (what a row's `_type` holds), and an item type label's cap. */\nconst ITEM_TYPE_NAME = /^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;\nconst ITEM_TYPE_LABEL_MAX = 120;\n\nfunction shapeOf(f: FieldSchema, lv: number, ctx: Ctx, top: boolean, nest?: Nest): Shape {\n const shape = shapeOfField(f, lv, ctx, top);\n // a data table and a polymorphic list sit at any depth: in an object, a list's rows or an item type (B1/B2)\n if (nest === \"setting\" && SETTING_NESTING_TYPES.has(shape.type)) return { kind: \"json\", type: \"json\", feature: \"slotSettings\" };\n return shape;\n}\n\n/**\n * The key a model field is stored under: a V2 name the API refuses (types' isReservedKey, the API lane: `derived`,\n * `layout`, `page`, a forbidden key or a leading `_`; or one off KEY_FORMAT), renamed. V2 authoring follows the API\n * lane, so `id` is a field key like any other (only the derive lane, which mints keys, reserves it).\n */\n/** The address-prefix keys a model may hold below its top level (019141ffc): they are no address there. */\nconst NESTED_OK_KEYS: ReadonlySet<string> = new Set([\"layout\", \"page\"]);\nfunction modelKeyOf(name: string, nested = false): string {\n if (KEY_FORMAT.test(name) && (!isReservedKey(name) || (nested && NESTED_OK_KEYS.has(name)))) return name;\n let k = name.replace(/^_+/, \"\").replace(/[^A-Za-z0-9_-]/g, \"\");\n if (!/^[A-Za-z]/.test(k)) k = `f${k}`;\n return isReservedKey(k) ? `${k}Field` : k;\n}\n\n/** The config keys a model's primitive list holds (types' PRIMITIVE_ARRAY_RULE). */\nconst MODEL_LIST_KEYS: ReadonlySet<string> = new Set(PRIMITIVE_ARRAY_RULE.configKeys);\n\n/** A slot's V2 allow list as the backend keeps it: 1–50 distinct block names of 1–64 characters (slotAllowIssues). */\nconst slotAllowOk = (allow: unknown): allow is string[] =>\n Array.isArray(allow) && allow.length >= 1 && allow.length <= SLOT_ALLOW_MAX && new Set(allow).size === allow.length &&\n allow.every((n) => typeof n === \"string\" && n === n.trim() && n.length >= 1 && n.length <= SLOT_ALLOW_NAME_MAX);\n\nfunction shapeOfField(f: FieldSchema, lv: number, ctx: Ctx, top: boolean): Shape {\n const props = ctx.lane === \"props\";\n const deep = lv >= MAX_FIELD_DEPTH;\n const of = Array.isArray(f.of) ? f.of : undefined;\n /** a prop reference names a content model or a page / form / collection target (refTargetNamed): with none it is stored as json */\n const noEntry = (r: FieldSchema[\"reference\"]) => props && !(r?.to ?? []).some((t) => ENTRY_TARGET(t) || REF_TARGET_KINDS.includes(t));\n switch (f.type) {\n case \"object\":\n return deep ? { kind: \"json\", type: \"json\", feature: \"depth>10\" } : { kind: \"object\", type: \"object\" };\n case \"array\": {\n if (of && of.length > 1 && of.every((i) => i.type === \"object\")) {\n if (!props) return { kind: \"modular\", type: \"modular\", items: of };\n return deep ? { kind: \"json\", type: \"json\", feature: \"depth>10\" } : { kind: \"types\", type: \"table\", items: of };\n }\n if (!of || of.length !== 1) return { kind: \"json\", type: \"json\", feature: of ? \"type:polymorphic-array\" : \"type:slot\" };\n const item = of[0];\n if (item.type === \"object\") return deep ? { kind: \"json\", type: \"json\", feature: \"depth>10\" } : { kind: \"zones\", type: props ? \"table\" : \"array\", item };\n if (item.type === \"reference\" && shopifyOnly(item.reference)) return { kind: \"itemType\", type: \"array\", item, itemType: \"text\", shopify: true };\n if (item.type === \"reference\")\n return noEntry(item.reference) ? { kind: \"json\", type: \"json\", feature: \"reference target\" } : { kind: \"refs\", type: \"multi-reference\", item };\n const prim = PRIM_ITEM[item.type];\n if (prim) return { kind: \"itemType\", type: \"array\", item, itemType: prim };\n return { kind: \"json\", type: \"json\", feature: \"type:primitive-array\" };\n }\n case \"slot\":\n // a slot prop sits at any depth: in an object, a list's rows or an item type (C1/C2). A model's slot field names the\n // kind:'block' models its children may be (config.blockSlugs, required), so one with no allow list has no home\n if (!props && !slotAllowOk((f.of as { allow?: unknown } | undefined)?.allow)) return { kind: \"json\", type: \"json\", feature: \"type:slot\" };\n return { kind: \"slot\", type: \"slot\" };\n case \"table\":\n // ONE TableValue: a `table` prop with config.mode \"data\" (BE prop-fields isDataTable), or a model's `table` field\n return { kind: \"leaf\", type: \"table\" };\n case \"reference\":\n if (props && top && f.reference?.to?.length === 1 && f.reference.to[0] === \"form\" && !f.reference.filter) return { kind: \"leaf\", type: \"form\" };\n if (shopifyOnly(f.reference)) return { kind: \"leaf\", type: \"text\", shopify: true };\n return noEntry(f.reference) ? { kind: \"json\", type: \"json\", feature: \"reference target\" } : { kind: \"leaf\", type: \"reference\" };\n default: {\n const t = props ? PROP_TYPE[f.type] : FIELD_TYPE[f.type];\n return t ? { kind: \"leaf\", type: t } : { kind: \"json\", type: \"json\", feature: \"unsupported key\" };\n }\n }\n}\n\nconst trunc = (ctx: Ctx, at: string, s: string, max: number, feature: LossyFeature) => {\n if (s.length <= max) return s;\n lose(ctx, at, feature);\n return s.slice(0, max);\n};\n\n/** The prod field types that store a rich text and its features (config.features). */\nconst RICH_TYPES: ReadonlySet<string> = new Set([\"richtext\", \"document\"]);\n/** Every feature, canonical: RICHTEXT_FEATURES through normaliseRichTextFeatures, so no alias is ever in it. */\nconst ALL_RICH_FEATURES: readonly RichTextFeature[] = normaliseRichTextFeatures(RICHTEXT_FEATURES).features;\n/**\n * A rich text's features through types normaliseRichTextFeatures (its aliases expand there: `headings` is h1–h6), distinct,\n * in the order given. `named`: something was not carried (a name outside RICHTEXT_FEATURES, a repeat, a non-list).\n */\n/** A content model's id, as the backend's config.references rule reads one. */\nconst MODEL_ID = /^[A-Za-z0-9_-]{1,64}$/;\n/** A rich text's references: posts and authors, each a model id; `named` when anything else was there. */\nfunction richRefs(v: unknown): { kept?: { posts?: string; authors?: string }; named: boolean } {\n if (!v || typeof v !== \"object\" || Array.isArray(v)) return { named: true };\n const r = v as Record<string, unknown>;\n const kept: { posts?: string; authors?: string } = {};\n for (const k of [\"posts\", \"authors\"] as const) if (typeof r[k] === \"string\" && MODEL_ID.test(r[k] as string)) kept[k] = r[k] as string;\n const named = Object.keys(r).some((k) => (k !== \"posts\" && k !== \"authors\") || (r[k] !== undefined && kept[k as \"posts\" | \"authors\"] === undefined));\n return { kept: Object.keys(kept).length ? kept : undefined, named };\n}\n\nfunction richFeatures(v: unknown): { kept: RichTextFeature[]; named: boolean } {\n const names = Array.isArray(v) ? v.filter((x): x is string => typeof x === \"string\") : [];\n const { features, unknown } = normaliseRichTextFeatures(names);\n const kept = [...new Set(features)];\n return { kept, named: !Array.isArray(v) || names.length !== v.length || new Set(names).size !== names.length || unknown.length > 0 };\n}\n\nfunction convertField(f: FieldSchema, at: string, lv: number, ctx: Ctx, siblings: FieldSchema[], top: boolean, inTable = false, inItem = false, inSetting = false): Node {\n const props = ctx.lane === \"props\";\n const shape = shapeOf(f, lv, ctx, top, inTable ? \"rows\" : inItem ? \"item\" : inSetting ? \"setting\" : undefined);\n const node: Node = { key: f.name, label: f.title, type: shape.type, config: {}, ui: {} };\n // a key is the value's address: a second sibling of the same name gets its own\n const twins = siblings.slice(0, Math.max(0, siblings.indexOf(f))).filter((s) => s.name === f.name).length;\n if (twins) {\n node.key = `${f.name}_${twins + 1}`;\n lose(ctx, `${at}/name`, \"duplicate name\");\n } else if (!props && modelKeyOf(f.name, lv > 1) !== f.name) {\n // ponytail: the renamed key is not checked against its siblings; a V2 sibling already named `layoutField` collides\n node.key = modelKeyOf(f.name, lv > 1);\n lose(ctx, `${at}/name`, \"reserved name\");\n }\n const nesting = shape.kind === \"object\" || shape.kind === \"zones\" || shape.kind === \"types\";\n /** a list of items (objects, block models, item types, scalars or entries): ui.itemLabel names one item */\n const listy = shape.kind === \"zones\" || shape.kind === \"modular\" || shape.kind === \"types\" || shape.kind === \"itemType\" || shape.kind === \"refs\";\n const looseConfig = props || !STRICT_CONFIG.has(shape.type);\n if (shape.kind === \"json\") lose(ctx, `${at}/type`, shape.feature);\n const shopify = (shape.kind === \"leaf\" || shape.kind === \"itemType\") && shape.shopify === true;\n if (shopify) {\n // what the dock loses is the picker: the reference reads back as V2's, locked (a V2 field already read-only loses nothing)\n if (f.readOnly !== true) lose(ctx, `${at}/readOnly`, \"shopify reference\");\n node.readOnly = true;\n node.lockReason = SHOPIFY_REF_LOCK;\n }\n if (!props && f.type === \"url\") node.config.inputType = \"url\";\n if (shape.type === \"datetime\" && !props) node.config.includeTime = true;\n if (shape.kind === \"leaf\" && shape.type === \"table\") node.config.mode = \"data\";\n if (shape.kind === \"types\") node.config.mode = \"types\";\n // a model's slot is always a list (its config is strict: no `multiple`)\n if (shape.kind === \"slot\" && props) node.config.multiple = true;\n if (listy) {\n // the noun wins (it is what the dock's add button and crumbs say); with none, a prop list keeps the item title here,\n // when the convention (the field title's singular) would not read it back. A model's list keeps the title as its own\n // ui.itemTitle (itemIdentity) instead, so it never reads back as a noun V2 did not set (facet table row 18)\n const label =\n f.itemNoun !== undefined\n ? capitalize(f.itemNoun)\n : props && shape.kind === \"zones\" && shape.item.title !== conventionItem(f.name, f.title).title\n ? shape.item.title\n : undefined;\n if (label !== undefined && label.length <= ITEM_LABEL_MAX) node.ui.itemLabel = label;\n }\n // the enforced developer lock: only schema managers change it, and the lock says why\n const devLock = f.access?.edit === \"schema.manage\" && !!f.lockReason;\n\n for (const k of Object.keys(f) as (keyof FieldSchema)[]) {\n const v = f[k];\n if (v === undefined) continue;\n const p = `${at}/${k}`;\n if (shape.kind === \"json\" && !COMMON_KEYS.has(k)) {\n lose(ctx, p, shape.feature);\n continue;\n }\n // the Shopify lock holds readOnly and lockReason (the marker the read side restores the reference from)\n if (shopify && (k === \"reference\" || k === \"readOnly\")) continue;\n if (shopify && (k === \"access\" || k === \"lockReason\")) {\n lose(ctx, p, \"shopify reference\");\n continue;\n }\n switch (k) {\n case \"name\":\n case \"title\":\n case \"type\":\n break;\n case \"description\":\n node.helpText = trunc(ctx, p, f.description!, props ? PROP_HELP_MAX : FIELD_HELP_MAX, \"help>limit\");\n break;\n case \"helpMore\":\n node.helpMore = trunc(ctx, p, f.helpMore!, HELP_MORE_MAX, \"help>limit\");\n break;\n case \"placeholder\":\n if (props) node.placeholder = trunc(ctx, p, f.placeholder!, PROP_PLACEHOLDER_MAX, \"help>limit\");\n else if (looseConfig) node.placeholder = f.placeholder;\n // a strict config has no room for one: the field's ui.placeholder holds it\n else node.ui.placeholder = trunc(ctx, p, f.placeholder!, UI_PLACEHOLDER_MAX, \"help>limit\");\n break;\n case \"initialValue\":\n // a definition holds no reference default (reference_in_definition): the host seeds it into the placement\n // nor a slot's children: they name V2 block types, which become component instances when the host seeds them\n if (props && (shape.type === \"reference\" || shape.type === \"multi-reference\" || shape.kind === \"slot\")) cat(ctx, p, \"seeded instance\");\n else node.defaultValue = defaultToProd(f, shape, f.initialValue, p, ctx, lv, top);\n break;\n case \"validation\":\n validationToProd(f, shape, node, p, ctx, inTable, top);\n break;\n case \"options\":\n optionsToProd(f, shape, node, p, ctx);\n break;\n case \"layout\":\n layoutToProd(f, shape, node, p, ctx);\n break;\n case \"fields\":\n if (shape.kind === \"object\") node.children = f.fields!.map((c, i) => convertField(c, `${p}/${i}`, lv + 1, ctx, f.fields!, false));\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"of\":\n ofToProd(f, shape, node, p, lv, ctx);\n break;\n case \"openMode\":\n // a compound opens or holds rows; a code prop's editor may open in a dialog (backend OPEN_MODE_PROP_TYPES)\n if (nesting || (props && shape.type === \"code\")) node.openMode = f.openMode;\n else lose(ctx, p, \"openMode\");\n break;\n case \"preview\":\n if (shape.kind === \"object\") node.ui.preview = previewToProd(f.preview!, f.fields ?? [], p, ctx);\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"fieldset\":\n case \"group\":\n break; // placement is decided below, with both keys in view\n case \"hidden\":\n if (typeof f.hidden === \"boolean\") node.ui.hidden = f.hidden;\n else {\n // a top-level rule may name the block's `_variant`: a prop's (the placement's variant), and a model's when it holds\n // the `_variant` select (fa75e9279)\n const showIf = conditionToShowIf(f.hidden!, p, siblings, ctx, top && (props || !!ctx.variants));\n if (showIf) node.showIf = showIf;\n }\n break;\n case \"readOnly\":\n // a developer lock already holds readOnly (\"developer\"); a plain flag cannot sit beside it\n if (f.readOnly === true && !devLock) node.readOnly = true;\n else lose(ctx, p, \"access\");\n break;\n case \"access\": {\n const access: NonNullable<FieldUi[\"access\"]> = {};\n for (const [ak, av] of Object.entries(f.access!)) {\n if (av === undefined) continue;\n if (ak === \"view\" && av === \"schema.view\") access.view = av;\n else if (ak === \"edit\" && av === \"schema.manage\") access.edit = av;\n else lose(ctx, `${p}/${ak}`, \"access\");\n }\n if (Object.keys(access).length) node.ui.access = access;\n if (devLock) node.readOnly = \"developer\";\n break;\n }\n case \"lockReason\":\n node.lockReason = trunc(ctx, p, f.lockReason!, LOCK_REASON_MAX, \"help>limit\");\n break;\n case \"localized\":\n node.localized = f.localized;\n break;\n case \"archived\":\n if (f.archived) node.archived = true;\n break;\n case \"advanced\":\n node.advanced = f.advanced;\n break;\n case \"ai\":\n // the AI-assist sparkle (A3): a field's and a prop's, at any depth\n node.ai = f.ai;\n break;\n case \"reference\":\n if (shape.kind === \"leaf\" && shape.type === \"reference\") referenceToConfig(f.reference!, node, p, ctx);\n else if (shape.type !== \"form\") lose(ctx, p, \"unsupported key\");\n break;\n case \"numeric\":\n numericToProd(f, node, p, ctx);\n break;\n case \"scale\":\n if (shape.type === \"number\") scaleToConfig(f.scale!, node, p, ctx);\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"icon\": {\n const dock = shape.kind === \"object\" || shape.kind === \"modular\" || shape.kind === \"types\" ? dockIconOf(f.icon) : undefined;\n if (dock) node.ui.icon = dock;\n else lose(ctx, p, \"icon\");\n break;\n }\n case \"rows\":\n if ((shape.type === \"text\" || shape.type === \"longtext\") && isWhole(f.rows, 1, UI_ROWS_MAX)) node.ui.rows = f.rows;\n else lose(ctx, p, \"rows\");\n break;\n case \"synced\": {\n const from = f.synced!.from;\n const ok = typeof from === \"string\" && from === from.trim() && from.length >= 1 && from.length <= SYNCED_FROM_MAX && Object.keys(f.synced!).every((x) => x === \"from\");\n if (ok) node.ui.synced = { from };\n else lose(ctx, p, \"synced\");\n break;\n }\n case \"slotSettings\":\n if (shape.kind === \"slot\") slotSettingsToProd(f.slotSettings!, node, p, lv, ctx);\n else lose(ctx, p, \"slotSettings\");\n break;\n case \"itemNoun\":\n // what the read side derives: the item label in lower case\n if (!listy || node.ui.itemLabel?.toLowerCase() !== f.itemNoun) lose(ctx, p, \"itemNoun\");\n break;\n case \"arrayLayout\":\n if (shape.kind === \"zones\" || shape.kind === \"modular\" || shape.kind === \"types\") node.ui.layout = f.arrayLayout;\n // a list of scalars or entries has no grid: its tiles are a gallery (V2 arrayLayout \"grid\" on a multi-reference)\n else if ((shape.kind === \"itemType\" || shape.kind === \"refs\") && f.arrayLayout === \"grid\") node.ui.layout = \"gallery\";\n else lose(ctx, p, \"layout\");\n break;\n case \"valueShape\":\n if (shape.type === \"link\" || shape.type === \"image\" || shape.type === \"button\") node.ui.valueShape = f.valueShape;\n else lose(ctx, p, \"valueShape\");\n break;\n case \"linkHref\":\n if (typeof f.linkHref === \"string\" && f.linkHref) node.config.linkHref = f.linkHref;\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"svgOnly\":\n if (shape.type === \"image\" && f.svgOnly === true) node.config.media = \"icon\";\n else if (f.svgOnly !== false) lose(ctx, p, \"unsupported key\");\n break;\n case \"timezone\":\n if (shape.type === \"date\" || shape.type === \"datetime\") {\n const tz = f.timezone;\n const zone = typeof tz === \"boolean\" || tz === \"site\" ? tz : typeof tz === \"string\" && tz.startsWith(\"fixed:\") && isZone(tz.slice(6)) ? tz.slice(6) : undefined;\n if (zone !== undefined) node.config.timezone = zone;\n else lose(ctx, p, \"timezone\");\n } else lose(ctx, p, \"unsupported key\");\n break;\n case \"language\":\n if (shape.type === \"code\" && typeof f.language === \"string\") node.config.language = f.language;\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"languages\":\n if (shape.type === \"code\" && Array.isArray(f.languages) && f.languages.every((l) => typeof l === \"string\")) node.config.languages = [...f.languages];\n else lose(ctx, p, \"unsupported key\");\n break;\n case \"table\":\n if (shape.kind === \"leaf\" && shape.type === \"table\") Object.assign(node.config, tableConfigFromOptions(f.table));\n else lose(ctx, p, \"type:table\");\n break;\n case \"references\":\n if (!RICH_TYPES.has(shape.type)) lose(ctx, p, \"unsupported key\");\n else {\n const { kept, named } = richRefs(f.references);\n if (named) lose(ctx, p, \"richtext references\");\n if (kept) node.config.references = kept;\n }\n break;\n case \"features\":\n if (!RICH_TYPES.has(shape.type)) lose(ctx, p, \"unsupported key\");\n else {\n const { kept, named } = richFeatures(f.features);\n if (named) lose(ctx, p, \"richtext features\");\n node.config.features = kept;\n }\n break;\n default:\n lose(ctx, p, \"unsupported key\");\n }\n }\n // a prop or sub-field V2 describes nowhere carries no help on purpose: null, not absent (absent = the platform's auto-help)\n if (props && f.description === undefined) node.helpText = null;\n // V2's rich text offers every feature: a field that names none is stored with the full set (facets.ts \"richtext features\")\n if (RICH_TYPES.has(shape.type) && shape.kind === \"leaf\" && f.features === undefined) node.config.features = [...ALL_RICH_FEATURES];\n // the item title kept as ui.itemLabel reads back as the noun too: the one the engine falls back to with none\n if (f.itemNoun === undefined && shape.kind === \"zones\" && node.ui.itemLabel !== undefined) cat(ctx, `${at}/itemNoun`, \"itemNoun (derived)\");\n placeInSet(f, node, at, ctx, top, siblings);\n if (f.type === \"rating\" && node.type === \"rating\" && f.numeric?.step === undefined) {\n const lo = typeof node.config.min === \"number\" ? node.config.min : 0;\n const hi = typeof node.config.max === \"number\" ? node.config.max : RATING_DEFAULT_MAX;\n const stops = (hi - lo) / V2_RATING_STEP;\n if (Math.abs(stops - Math.round(stops)) < 1e-9 && Math.round(stops) <= RATING_MAX_STOPS) node.config.step = V2_RATING_STEP;\n }\n if (node.ui.control === \"slider\" && !sliderOk(node.config)) {\n delete node.ui.control;\n lose(ctx, `${at}/layout`, \"layout\");\n }\n return node;\n}\n\nconst isWhole = (n: unknown, lo = 0, hi = Infinity): n is number => typeof n === \"number\" && Number.isInteger(n) && n >= lo && n <= hi;\nconst compiles = (re: string) => {\n try {\n new RegExp(re);\n return true;\n } catch {\n return false;\n }\n};\n\nconst ratingIsDefault = (c: FieldConfig) => c.min === RATING_CONFIG.min && c.max === RATING_CONFIG.max && c.step === RATING_CONFIG.step;\n\n/** Backend controlHardening: a slider spans min < max; a set step is > 0 with at most SLIDER_MAX_STOPS stops. */\nfunction sliderOk({ min, max, step }: FieldConfig) {\n if (!(typeof min === \"number\" && typeof max === \"number\" && min < max)) return false;\n return step === undefined || (typeof step === \"number\" && step > 0 && (max - min) / step <= SLIDER_MAX_STOPS);\n}\n\n/** Where a field sits: its tab (fields lane) or prop group (props lane). */\nfunction placeInSet(f: FieldSchema, node: Node, at: string, ctx: Ctx, top: boolean, siblings: FieldSchema[]) {\n if (ctx.lane === \"props\") {\n if (!top) {\n // a nested field names its tab as { id } (V2 ignores it there, so does the dock): kept when the tab is stored\n if (f.group !== undefined) {\n if (ctx.keptTabs.has(f.group)) node.ui.tab = { id: f.group };\n else lose(ctx, `${at}/group`, \"group (nested)\");\n }\n } else {\n const t = ctx.propTabs.get(f);\n if (t?.loss) lose(ctx, `${at}/group`, t.loss);\n // a tab is defined once, on the first top-level prop in it: later props carry its id only\n if (t?.tab) node.ui.tab = ctx.definedTabs.has(t.tab.id) ? { id: t.tab.id } : (ctx.definedTabs.add(t.tab.id), t.tab);\n }\n if (f.fieldset === undefined) return;\n const set = ctx.propSets.get(f.fieldset);\n if (!set) return lose(ctx, `${at}/fieldset`, \"fieldset collision\");\n // prop groups are defined among siblings (propGroupIssues runs per level): the first member at each level defines it\n let defined = ctx.definedGroups.get(siblings);\n if (!defined) ctx.definedGroups.set(siblings, (defined = new Set()));\n if (defined.has(set.name)) node.ui.group = { id: set.name };\n else {\n defined.add(set.name);\n node.ui.group = propGroupOf(set, ctx);\n }\n return;\n }\n // a fieldset no group or declared fieldset has: V2 draws it as a section titled by its name (engine/field-list.tsx\n // arrange), so it is stored as that section and the read side declares it (CATALOG \"fieldset (derived)\")\n if (f.fieldset !== undefined && !ctx.sets.has(f.fieldset) && !ctx.tabs.has(f.fieldset) && !ctx.droppedTabs.has(f.fieldset) && f.fieldset.length <= FIELDSET_NAME_MAX) {\n const derived = (ctx.derivedSets ??= []);\n if (derived.length + ctx.sets.size + ctx.tabs.size < FIELDSETS_MAX) {\n derived.push({ id: f.fieldset, name: f.fieldset, kind: \"group\" });\n ctx.sets.set(f.fieldset, undefined);\n }\n }\n const set = f.fieldset !== undefined && ctx.sets.has(f.fieldset) ? f.fieldset : undefined;\n if (f.fieldset !== undefined && !set) lose(ctx, `${at}/fieldset`, \"fieldset collision\");\n if (!top) {\n // a nested field names its tab as ui.tab { id } (V2 ignores it there, so does the dock): kept when the tab is stored (019141ffc)\n if (f.group !== undefined) {\n if (ctx.tabs.has(f.group)) node.ui.tab = { id: f.group };\n else lose(ctx, `${at}/group`, \"group (nested)\");\n }\n if (set) node.fieldsetId = set;\n return;\n }\n const tab = set ? ctx.sets.get(set) : undefined;\n if (f.group !== undefined && !ctx.tabs.has(f.group)) lose(ctx, `${at}/group`, ctx.droppedTabs.get(f.group) ?? \"unsupported key\");\n else if (set && tab !== f.group) lose(ctx, `${at}/group`, \"fieldset spans groups\");\n node.fieldsetId = set ?? (f.group !== undefined && ctx.tabs.has(f.group) ? f.group : undefined);\n}\n\n/** A V2 fieldset as the inline prop group its first member defines (what propSetsFor found unstorable is named there). */\nfunction propGroupOf(s: V2Fieldset, ctx: Ctx): PropGroup {\n const g: PropGroup = { id: s.name, label: s.title.slice(0, PROP_GROUP_LABEL_MAX), kind: \"group\" };\n if (s.collapsed !== undefined) g.collapsed = s.collapsed;\n if (groupDescriptionOk(s.description)) g.description = s.description;\n if (s.columns !== undefined) g.columns = s.columns;\n if (s.collapsible !== undefined) g.collapsible = s.collapsible;\n if (s.layout !== undefined) g.layout = s.layout;\n if (ctx.groupOrder) g.order = Math.min(PROP_GROUP_ORDER_MAX, (ctx.propOrder.get(s.name) ?? 0));\n return g;\n}\nconst groupDescriptionOk = (d: string | undefined): d is string => typeof d === \"string\" && d === d.trim() && d.length >= 1 && d.length <= PROP_GROUP_DESCRIPTION_MAX;\n\n/** The zone a datetime field fixes, if any (what lets a stored instant read back with its [Zone]). */\nconst fixedZone = (f: FieldSchema) => (typeof f.timezone === \"string\" && f.timezone.startsWith(\"fixed:\") ? f.timezone.slice(6) : undefined);\n\n/**\n * A field default: forward through the value adapters, then read back the way toTypeSchema will; every leaf that does\n * not come back is named (so the lossy list matches what the read side really returns). Objects and list rows go\n * through their child fields' adapters too.\n */\nfunction defaultToProd(f: FieldSchema, shape: Shape, v: unknown, at: string, ctx: Ctx, lv: number, top: boolean): unknown {\n const plan = writePlan(f, shape, lv, ctx, top);\n const out = planToProd(plan, v);\n for (const d of diffPaths(v, planFromProd(plan, out))) lose(ctx, `${at}${d}`, \"default value\");\n return out;\n}\n\n/** How a value of one field crosses to prod and back: per-type adapters, recursing through objects and list rows. */\nexport type ValuePlan = VPlan;\ntype VPlan =\n | { k: \"link\" | \"button\" | \"image\" | \"form\" | \"ref\" | \"refs\" | \"number\" | \"video\" | \"as-is\" }\n | { k: \"datetime\"; zone?: string }\n /** a date: passes as stored; only an unreadable stored shape is named */\n | { k: \"date\" }\n /** a list of one primitive (config.itemType): each item through its type's adapter */\n | { k: \"list\"; item: ListItemType }\n /** a number with a V2 scale: a number, a token string or a custom { value, unit } */\n | { k: \"scale\"; scale: ScaleSchema }\n | { k: \"rating\"; scale: RatingScale }\n /** `zoned`: a group, stored as the non-repeatable zone of its array (`{ nonRepeatable: {...} }`) */\n | { k: \"object\"; zoned?: boolean; fields: Map<string, VPlan> }\n | { k: \"rows\"; zoned: boolean; fields: Map<string, VPlan> }\n /** modular rows: V2 {_key, _type, ...fields} ↔ prod {__id, __type (block slug), data}; item type name → its fields' plans */\n | { k: \"modular\"; types: Map<string, Map<string, VPlan>> }\n /** a model's slot: inline children {_key, _type, _settings?, ...values} both sides; `_type` is the V2 block name ↔ its block model slug */\n | { k: \"blocks\" }\n /** a polymorphic list prop (table, config.mode \"types\"): rows {_key, _type, ...fields} as V2 has them; item type name → its fields' plans */\n | { k: \"types\"; types: Map<string, Map<string, VPlan>> }\n /**\n * a component slot as SlotField edits it (set by the host, never by a read): V2 children `{ _key, _type, _settings?,\n * ...values }` (controls/slot-services.ts slotChildrenFromStored / ToStored); `child` gives a child's own plans by its\n * `_type` (the component id), so its values cross per the CHILD's definition; a type with none passes as it is\n */\n | {\n k: \"slot\";\n multiple?: boolean;\n child?: (type: string) => Map<string, VPlan> | undefined;\n /**\n * a child's section family, by its `_type` (set by the host): a read gives each child the `_variant` its component\n * is (`current`); a write stores no `_variant` (the backend refuses one) but the member placing it in `_type`\n */\n family?: (type: string) => { current?: string; member: (variant: string) => string | undefined } | undefined;\n };\nconst AS_IS: VPlan = { k: \"as-is\" };\n\n/** The write side's plan, from the V2 field and the shape it is stored as. */\nfunction writePlan(f: FieldSchema, shape: Shape, lv: number, ctx: Ctx, top: boolean): VPlan {\n const kids = (fields: FieldSchema[], nest?: Nest) =>\n new Map(fields.map((c) => [c.name, writePlan(c, shapeOf(c, lv + 1, ctx, false, nest), lv + 1, ctx, false)] as const));\n switch (shape.kind) {\n case \"json\":\n return AS_IS;\n case \"itemType\":\n return shape.itemType === \"image\" || shape.itemType === \"link\" ? { k: \"list\", item: shape.itemType } : AS_IS;\n case \"object\":\n return { k: \"object\", fields: kids(f.fields ?? []) };\n case \"zones\":\n return { k: \"rows\", zoned: ctx.lane === \"fields\", fields: kids(shape.item.fields ?? [], ctx.lane === \"props\" ? \"rows\" : undefined) };\n case \"types\":\n return { k: \"types\", types: new Map(shape.items.map((i) => [i.name, kids(i.fields ?? [], \"item\")] as const)) };\n case \"slot\":\n return ctx.lane === \"fields\" ? { k: \"blocks\" } : AS_IS;\n case \"modular\": {\n // an item type's fields are top-level fields of its own block model\n const top1 = (fields: FieldSchema[]) => new Map(fields.map((c) => [c.name, writePlan(c, shapeOf(c, 1, ctx, false), 1, ctx, false)] as const));\n return { k: \"modular\", types: new Map(shape.items.map((i) => [i.name, top1(i.fields ?? [])] as const)) };\n }\n case \"refs\":\n return { k: \"refs\" };\n case \"leaf\":\n // a Shopify reference is the gid string both sides\n if (shape.shopify) return AS_IS;\n if (f.type === \"link\" || f.type === \"url\") return { k: \"link\" };\n if (f.type === \"button\" || f.type === \"image\") return { k: f.type };\n if (f.type === \"datetime\") return { k: \"datetime\", zone: fixedZone(f) };\n if (f.type === \"reference\") return { k: top && shape.type === \"form\" ? \"form\" : \"ref\" };\n return leafPlan(f, shape.type);\n }\n}\n\n/** The plan of a leaf whose value needs its own adapter but no link / reference handling (both directions agree). */\nfunction leafPlan(f: FieldSchema, prodType: string): VPlan {\n if (f.type === \"video\") return { k: \"video\" };\n if (f.type === \"rating\") return { k: \"rating\", scale: { min: f.numeric?.min, max: f.numeric?.max, step: f.numeric?.step ?? V2_RATING_STEP } };\n if (f.type === \"number\" && f.scale) return { k: \"scale\", scale: f.scale };\n return prodType === \"number\" ? { k: \"number\" } : AS_IS;\n}\n\n/**\n * The read side's plan, from the V2 field read back (`zoned`: lists read from an array's repeatable zone and groups\n * read from its non-repeatable zone; `modular`: lists read from a modular field, whose item fields live in their block\n * models and pass as stored).\n */\nfunction readPlan(\n f: FieldSchema,\n prodType: string,\n zoned: WeakSet<FieldSchema>,\n modular: WeakSet<FieldSchema>,\n types?: WeakSet<FieldSchema>,\n slots?: WeakMap<FieldSchema, boolean>,\n blocks?: WeakSet<FieldSchema>,\n): VPlan {\n const kids = (fields: FieldSchema[]) => new Map(fields.map((c) => [c.name, readPlan(c, \"\", zoned, modular, types, slots, blocks)] as const));\n switch (f.type) {\n case \"link\":\n case \"url\":\n return { k: \"link\" };\n case \"button\":\n case \"image\":\n return { k: f.type };\n case \"datetime\":\n return { k: \"datetime\", zone: fixedZone(f) };\n case \"date\":\n return { k: \"date\" };\n case \"reference\":\n // a Shopify reference read back from its locked text is the gid string both sides\n if (shopifyOnly(f.reference)) return AS_IS;\n return { k: prodType === \"form\" ? \"form\" : \"ref\" };\n case \"object\":\n return { k: \"object\", ...(zoned.has(f) ? { zoned: true } : {}), fields: kids(f.fields ?? []) };\n case \"slot\":\n // a slot prop at any depth (C1/C2): its children as SlotField edits them; the host gives `child` (each child's plans)\n if (blocks?.has(f)) return { k: \"blocks\" };\n return slots?.has(f) ? { k: \"slot\", multiple: slots.get(f) } : AS_IS;\n case \"array\": {\n if (modular.has(f)) return { k: \"modular\", types: new Map((Array.isArray(f.of) ? f.of : []).map((i) => [i.name, kids(i.fields ?? [])] as const)) };\n if (types?.has(f)) return { k: \"types\", types: new Map((Array.isArray(f.of) ? f.of : []).map((i) => [i.name, kids(i.fields ?? [])] as const)) };\n const item = Array.isArray(f.of) && f.of.length === 1 ? f.of[0] : undefined;\n if (item?.type === \"object\") return { k: \"rows\", zoned: zoned.has(f), fields: kids(item.fields ?? []) };\n if (item?.type === \"image\" || item?.type === \"link\") return { k: \"list\", item: item.type };\n return item?.type === \"reference\" && !shopifyOnly(item.reference) ? { k: \"refs\" } : AS_IS;\n }\n default:\n return leafPlan(f, prodType);\n }\n}\n\n/**\n * The plan for ONE leaf field read from prod type `prodType` (a link, an image, a reference…), for a host that edits a\n * single field's value outside a whole read (the dock's legacy controls). Objects and lists need the read's own plan\n * (`ToTypeSchemaOptions.plans`), which knows which lists are zoned or modular.\n */\nexport function leafValuePlan(f: FieldSchema, prodType: string): ValuePlan {\n return readPlan(f, prodType, new WeakSet(), new WeakSet());\n}\n\n/**\n * A V2 value → what prod stores. `lost` (optional) collects every V2 key prod cannot keep, as a path under the value\n * (\"cta/style\", \"(value)\" for the value itself): a caller that finds any must refuse the write and name them.\n */\nexport function planToProd(plan: ValuePlan, v: unknown, lost?: string[], at = \"\"): unknown {\n if (v === undefined) return undefined;\n const take = <T,>(r: { value: T; lost: string[] }) => {\n if (lost) for (const l of r.lost) lost.push(at ? `${at}/${l}` : l);\n return r.value;\n };\n const under = (k: string | number) => (at ? `${at}/${k}` : String(k));\n switch (plan.k) {\n case \"link\":\n return take(linkToProd(v as V2LinkValue));\n case \"button\":\n return take(buttonToProd(v as V2ButtonValue));\n case \"image\":\n return take(imageToProd(v as V2ImageValue));\n case \"datetime\":\n return take(datetimeToProd(v as string, { zone: plan.zone }));\n case \"form\":\n return take(referenceToProd(v as string, { to: \"form\" }));\n case \"ref\":\n case \"refs\":\n return take(referenceToProd(v as string | string[]));\n case \"number\":\n if (typeof v === \"number\" || v === null) return v;\n lost?.push(at || \"(value)\");\n return undefined;\n case \"video\":\n return take(videoToProd(v as V2VideoValue));\n case \"list\":\n return take(listToProd(v as unknown[], plan.item));\n case \"scale\":\n return take(scaleToProd(v as ScaleValue, plan.scale));\n case \"rating\":\n return take(ratingToProd(v as number, plan.scale));\n case \"object\": {\n const out = mapKeys(v, plan.fields, (p, x, k) => planToProd(p, x, lost, under(k)));\n return plan.zoned && isObj(out) ? { nonRepeatable: out } : out;\n }\n case \"rows\": {\n if (!Array.isArray(v)) return v;\n const rows = v.map((row, i) => mapKeys(row, plan.fields, (p, x, k) => planToProd(p, x, lost, `${under(i)}/${k}`)));\n return plan.zoned ? zoneListToProd(rows) : rows;\n }\n case \"modular\":\n if (!Array.isArray(v)) return v;\n return v.map((row, i) => {\n if (!isObj(row) || typeof row._type !== \"string\") return row;\n const { _key, _type, ...rest } = row;\n const fields = plan.types.get(_type);\n // __id is required (the reorder identity): a row with no _key gets one, which reads back as a new _key\n return {\n __id: typeof _key === \"string\" && _key ? _key : `${kebab(_type)}-${i + 1}`,\n __type: kebab(_type),\n data: fields ? mapKeys(rest, fields, (p, x, k) => planToProd(p, x, lost, `${under(i)}/${k}`)) : rest,\n };\n });\n case \"blocks\":\n return Array.isArray(v) ? v.map((c) => (isObj(c) && typeof c._type === \"string\" ? { ...c, _type: kebab(c._type) } : c)) : v;\n case \"slot\": {\n const kids = (type: string) => plan.child?.(type);\n return slotChildrenToStored(\n plan.family ? childVariantsToTypes(v, plan.family) : v,\n plan.multiple !== false,\n (type, values, i) => {\n const fields = kids(type);\n return fields ? (mapKeys(values, fields, (p, x, k) => planToProd(p, x, lost, `${under(i)}/${k}`)) as Obj) : values;\n },\n (rel) => lost?.push(under(rel)),\n );\n }\n case \"types\":\n return take(\n typedRowsToProd(v, (row, i) => {\n const fields = plan.types.get(row._type);\n return fields ? (mapKeys(row, fields, (p, x, k) => planToProd(p, x, lost, `${under(i)}/${k}`)) as Obj) : row;\n }),\n );\n default:\n return v;\n }\n}\n\n/** The keys the kit reads back from a stored image object (imageFromProd) and writes again (imageToProd). */\nconst IMAGE_KIT_KEYS: ReadonlySet<string> = new Set([\"url\", \"id\", \"name\", \"altText\", \"focal\"]);\n\n/**\n * Every key of a stored image the kit cannot hand back. A crop rect is read back as it is (imageFromProd), and an older\n * `{ src, alt }` value reads as its url and alt text, so neither is a loss (QA item 3); a malformed crop, or a key the\n * kit does not model, is.\n */\nfunction imageStoredLoss(v: unknown, rel: string, loss: (rel: string, reason: string) => void) {\n if (!isObj(v)) return;\n const legacy = typeof v.url !== \"string\" && typeof v.src === \"string\";\n for (const [k, x] of Object.entries(v)) {\n if (IMAGE_KIT_KEYS.has(k) || x === undefined) continue;\n if (legacy && k === \"src\") continue;\n if (k === \"alt\" && typeof x === \"string\" && v.altText === undefined) continue;\n if (k === \"crop\") {\n if (x != null && !isCropRect(x)) loss(`${rel}/crop`, \"A saved crop the kit can't read; editing the image would drop it.\");\n } else loss(`${rel}/${k}`, `The image's saved \"${k}\" is not kept by the kit; editing the image would drop it.`);\n }\n}\n\nconst datedLossReason = (v: unknown) =>\n isObj(v) && (\"date\" in v || \"time\" in v || \"timezone\" in v)\n ? \"A stored date-time in the older {date,time,timezone} form; the kit can't read it, so editing it would replace it.\"\n : \"A stored date/time that is not an ISO string can't be read by the kit; editing it would replace it.\";\n\n/** A stored prod value → the V2 value. `loss(rel, reason)`: what the prod value carries that the V2 value cannot (rel is\n * under the value, \"/0/modelSlug\"); a caller that hears any must not write the value back through V2. */\nexport function planFromProd(plan: ValuePlan, v: unknown, loss?: (rel: string, reason: string) => void, rel = \"\"): unknown {\n if (v === undefined) return undefined;\n switch (plan.k) {\n case \"link\":\n return linkFromProd(v);\n case \"button\":\n return buttonFromProd(v);\n case \"image\":\n if (loss) imageStoredLoss(v, rel, loss);\n return imageFromProd(v);\n case \"datetime\":\n case \"date\":\n // an older stored shape ({date, time, timezone}) reads as empty: the next pick would silently replace it\n if (loss && v !== null && typeof v !== \"string\") loss(rel || \"(value)\", datedLossReason(v));\n return plan.k === \"date\" ? v : datetimeFromProd(v, { zone: plan.zone });\n case \"video\":\n return videoFromProd(v);\n case \"list\":\n if (loss && plan.item === \"image\" && Array.isArray(v)) v.forEach((x, i) => imageStoredLoss(x, `${rel}/${i}`, loss));\n return listFromProd(v, plan.item);\n case \"scale\":\n return scaleFromProd(v);\n case \"rating\":\n return ratingFromProd(v, plan.scale);\n case \"form\":\n return referenceFromProd(v);\n case \"ref\":\n case \"refs\":\n if (loss) for (const [i, x] of (Array.isArray(v) ? v : [v]).entries())\n if (isObj(x) && x.modelSlug !== undefined) loss(`${rel}${Array.isArray(v) ? `/${i}` : \"\"}/modelSlug`, \"A V2 reference stores the target id; the polymorphic modelSlug is dropped.\");\n // a stored value the kit cannot read (a { kind, id } target reads back tagged, values.ts) would read as empty and drop on save\n else if (isObj(x) && referenceFromProd(x) === null) loss(`${rel}${Array.isArray(v) ? `/${i}` : \"\"}` || \"(value)\", \"A stored reference the kit can't read; editing it would drop it.\");\n return referenceFromProd(v);\n case \"object\": {\n // a group's children sit under `nonRepeatable`; a value with no such key holds them inline (the server wraps it)\n const env = plan.zoned && isObj(v) && \"nonRepeatable\" in v ? v : undefined;\n if (env && loss)\n for (const k of Object.keys(env)) if (k !== \"nonRepeatable\" && env[k] !== undefined) loss(`${rel}/${k}`, `The group's saved \"${k}\" is not one of its fields; editing the group would drop it.`);\n const at = env ? `${rel}/nonRepeatable` : rel;\n return mapKeys(env ? (isObj(env.nonRepeatable) ? env.nonRepeatable : {}) : v, plan.fields, (p, x, k) => planFromProd(p, x, loss, `${at}/${k}`));\n }\n case \"rows\": {\n const rows = plan.zoned ? zoneListFromProd(v) : v;\n return Array.isArray(rows) ? rows.map((row, i) => mapKeys(row, plan.fields, (p, x, k) => planFromProd(p, x, loss, `${rel}/${i}/${k}`))) : rows;\n }\n case \"modular\":\n return Array.isArray(v)\n ? v.map((row, i) => {\n if (!isObj(row) || typeof row.__type !== \"string\") return row;\n const data = isObj(row.data) ? row.data : {};\n const fields = plan.types.get(camel(row.__type));\n const back = fields ? (mapKeys(data, fields, (p, x, k) => planFromProd(p, x, loss, `${rel}/${i}/${k}`)) as Obj) : data;\n return { _key: row.__id, _type: camel(row.__type), ...back };\n })\n : v;\n case \"blocks\":\n return Array.isArray(v) ? v.map((c) => (isObj(c) && typeof c._type === \"string\" ? { ...c, _type: camel(c._type) } : c)) : v;\n case \"slot\":\n return slotChildrenFromStored(\n v,\n (type, values, i) => {\n const fields = plan.child?.(type);\n const read = fields ? (mapKeys(values, fields, (p, x, k) => planFromProd(p, x, loss, `${rel}/${i}/${k}`)) as Obj) : values;\n const variant = plan.family?.(type)?.current;\n return variant === undefined ? read : { ...read, _variant: variant };\n },\n (i, reason) => loss?.(`${rel}/${i}`, reason),\n );\n case \"types\":\n return typedRowsFromProd(v, (row, i) => {\n const fields = plan.types.get(row._type);\n if (!fields) {\n loss?.(`${rel}/${i}/_type`, `A stored row of item type \"${row._type}\", which this list no longer declares; editing the list would drop it.`);\n return row;\n }\n return mapKeys(row, fields, (p, x, k) => planFromProd(p, x, loss, `${rel}/${i}/${k}`)) as Obj;\n });\n default:\n return v;\n }\n}\n\n/** Each key of an object value through its child field's plan; keys with no field ride along as they are. */\nfunction mapKeys(v: unknown, fields: Map<string, VPlan>, fn: (plan: VPlan, x: unknown, key: string) => unknown): unknown {\n if (!isObj(v)) return v;\n const out: Obj = {};\n for (const [k, x] of Object.entries(v)) {\n const plan = fields.get(k);\n const y = plan ? fn(plan, x, k) : x;\n if (y !== undefined) out[k] = y;\n }\n return out;\n}\n\n/** Every leaf (a JSON pointer under the value, \"\" for the value itself) where `a` and `b` differ; undefined = absent. */\nfunction diffPaths(a: unknown, b: unknown, path = \"\", out: string[] = []): string[] {\n if (deepEqual(a, b)) return out;\n if ((isObj(a) || a === undefined) && (isObj(b) || b === undefined) && (a !== undefined || b !== undefined)) {\n const A = (a ?? {}) as Obj;\n const B = (b ?? {}) as Obj;\n for (const k of new Set([...Object.keys(A), ...Object.keys(B)])) diffPaths(A[k], B[k], `${path}/${k}`, out);\n } else if (Array.isArray(a) && Array.isArray(b)) {\n for (let i = 0; i < Math.max(a.length, b.length); i++) diffPaths(a[i], b[i], `${path}/${i}`, out);\n } else out.push(path);\n return out;\n}\n\nfunction validationToProd(f: FieldSchema, shape: Shape, node: Node, at: string, ctx: Ctx, inTable: boolean, top: boolean) {\n const props = ctx.lane === \"props\";\n const val = f.validation!;\n const t = shape.type;\n const leaf = shape.kind === \"leaf\";\n const lengthy = leaf && (props ? LENGTH_PROPS : LENGTH_FIELDS).has(t);\n const patterned = leaf && (props ? PATTERN_TYPES : LENGTH_FIELDS).has(t) && t !== \"richtext\" && t !== \"document\";\n const patternOk = patterned && typeof val.pattern === \"string\" && val.pattern.length <= PATTERN_MAX && compiles(val.pattern);\n /** the pair each key bounds, so a min over its max is named rather than refused at save */\n const pairs: [string, string, string, string, LossyFeature][] = [];\n const set = (key: string, n: number, feature: LossyFeature, lo: string, hi: string) => {\n node.config[key] = n;\n if (!pairs.some((x) => x[0] === lo)) pairs.push([lo, hi, `${at}/min`, `${at}/max`, feature]);\n };\n for (const k of Object.keys(val) as (keyof typeof val)[]) {\n const v = val[k];\n if (v === undefined) continue;\n const p = `${at}/${k}`;\n if (shape.kind === \"json\" && k !== \"required\" && k !== \"recommendedMax\") {\n lose(ctx, p, shape.feature);\n continue;\n }\n switch (k) {\n case \"required\":\n node.required = val.required;\n break;\n case \"min\":\n case \"max\": {\n const n = v as number;\n const lo = k === \"min\";\n if (lengthy) {\n if (isWhole(n)) set(lo ? \"minLength\" : \"maxLength\", n, \"validation.length\", \"minLength\", \"maxLength\");\n else lose(ctx, p, \"validation.length\");\n } else if (t === \"number\") {\n // V2 validation.min / max are the error bounds; config.min / max stay the input's range (numeric)\n const b = ((node.config.validation as { min?: number; max?: number } | undefined) ??= {});\n b[k] = n;\n } else if (t === \"rating\") lose(ctx, p, \"rating bounds\");\n else if (shape.kind === \"zones\" || shape.kind === \"modular\" || shape.kind === \"types\" || shape.kind === \"slot\" || shape.kind === \"itemType\") {\n // a prop's own config.minItems / maxItems: a slot's within SLOT_ITEMS_CAP, a table's rows or an array's items LIST_ITEMS_CAP\n const cap = shape.kind === \"slot\" ? SLOT_ITEMS_CAP : LIST_ITEMS_CAP;\n const ok = (props && top) || shape.kind === \"slot\" ? isWhole(n, lo ? 0 : 1, cap) : isWhole(n);\n if (ok) set(lo ? \"minItems\" : \"maxItems\", n, \"validation.items\", \"minItems\", \"maxItems\");\n else lose(ctx, p, \"validation.items\");\n } else if (shape.kind === \"refs\" || t === \"multiselect\" || t === \"tags\") {\n const ok = t === \"tags\" ? isWhole(n, lo ? 0 : 1, TAGS_ITEMS_MAX) : isWhole(n);\n if (ok) set(k, n, \"validation.items\", \"min\", \"max\");\n else lose(ctx, p, \"validation.items\");\n } else lose(ctx, p, \"validation.length\");\n break;\n }\n case \"recommendedMax\":\n if (isWhole(v, 1)) node.recommendedMax = v as number;\n else lose(ctx, p, \"validation.recommendedMax\");\n break;\n case \"pattern\":\n if (patternOk) node.config.pattern = v as string;\n else lose(ctx, p, \"validation.pattern\");\n break;\n case \"patternMessage\":\n if (patternOk && typeof v === \"string\" && v.trim() !== \"\" && v.length <= PATTERN_MESSAGE_MAX) node.config.patternMessage = v;\n else lose(ctx, p, \"validation.patternMessage\");\n break;\n case \"unique\": {\n if (val.unique === false) node.unique = false;\n // a polymorphic list's items are told apart by _key (unique_prop_scope)\n else if (shape.kind === \"types\") lose(ctx, p, \"validation.unique\");\n else if (props) {\n // a placement holds its own value: only a list's items, or a table's rows, have a set to be unique in\n if (UNIQUE_LIST_PROPS.has(t) || (inTable && UNIQUE_ROW_PROPS.has(t))) node.unique = true;\n else cat(ctx, p, \"not applicable (props)\");\n } else {\n const polymorphic = t === \"reference\" && (f.reference?.to ?? []).filter(ENTRY_TARGET).length > 1;\n if (UNIQUE_TYPES.has(t) && !polymorphic) node.unique = true;\n else lose(ctx, p, \"validation.unique\");\n }\n break;\n }\n default:\n lose(ctx, p, \"unsupported key\");\n }\n }\n const b = node.config.validation as { min?: number; max?: number } | undefined;\n if (b && b.min !== undefined && b.max !== undefined && b.min > b.max) {\n delete node.config.validation;\n lose(ctx, `${at}/min`, \"validation.items\");\n lose(ctx, `${at}/max`, \"validation.items\");\n }\n for (const [lo, hi, pLo, pHi, feature] of pairs) {\n const a = node.config[lo];\n const z = node.config[hi];\n if (typeof a === \"number\" && typeof z === \"number\" && a > z) {\n delete node.config[lo];\n delete node.config[hi];\n lose(ctx, pLo, feature);\n lose(ctx, pHi, feature);\n }\n }\n}\n\nfunction optionsToProd(f: FieldSchema, shape: Shape, node: Node, at: string, ctx: Ctx) {\n if (shape.type !== \"select\" && shape.type !== \"multiselect\" && shape.type !== \"tags\") return lose(ctx, at, \"unsupported key\");\n const opts = f.options!;\n // option icons are all or none per list: one that is not a dock name drops the list's icons\n const icons = opts.map((o) => (o.icon === undefined ? undefined : dockIconOf(o.icon)));\n const allIcons = opts.every((o, i) => o.icon === undefined || icons[i] !== undefined);\n node.options = opts.map((o: Option, i) => {\n const out: ChoiceOption = { label: o.label, value: o.value };\n if (o.icon !== undefined) {\n if (allIcons) out.icon = icons[i];\n else lose(ctx, `${at}/${i}/icon`, \"option icon\");\n }\n const d = o.description;\n if (d !== undefined) {\n if (typeof d === \"string\" && d.trim() !== \"\" && !/[\\r\\n]/.test(d) && d.length <= OPTION_DESCRIPTION_MAX) out.description = d;\n else lose(ctx, `${at}/${i}/description`, \"option description\");\n }\n for (const k of Object.keys(o)) if (![\"value\", \"label\", \"icon\", \"description\"].includes(k)) lose(ctx, `${at}/${i}/${k}`, \"unsupported key\");\n return out;\n });\n}\n\n/** V2 layouts → prod ui.control (a leaf's control) or ui.layout (a list's rows); dock-vocabulary.ts controlHardening rules. */\nfunction layoutToProd(f: FieldSchema, shape: Shape, node: Node, at: string, ctx: Ctx) {\n const l = f.layout!;\n const t = shape.type;\n const n = f.options?.length ?? 0;\n if (l === \"segmented\" && t === \"select\") {\n // A3: control_segmented holds SEGMENTED_MIN..SEGMENTED_MAX options; the dock still draws the dropdown when they don't fit\n if (n >= SEGMENTED_MIN && n <= SEGMENTED_MAX) node.ui.control = \"segmented\";\n else if (n > SEGMENTED_MAX) {\n // V2's D46 rule (choice.tsx fitsSegmented): a segmented select that does not fit draws the dropdown, which is\n // what a select with no control draws: nothing drawn is lost (CATALOG \"segmented fallback\")\n cat(ctx, at, \"segmented fallback\");\n } else lose(ctx, at, \"layout\");\n } else if (l === \"slider\" && t === \"number\" && f.type === \"number\") node.ui.control = \"slider\";\n else if ((UI_CONTROLS as readonly string[]).includes(l) && l !== \"segmented\" && l !== \"slider\" && CONTROL_TYPES[l as UiControl]?.includes(t)) node.ui.control = l as UiControl;\n else if (l === \"list\" && (shape.kind === \"zones\" || shape.kind === \"itemType\" || shape.kind === \"modular\" || shape.kind === \"types\" || shape.kind === \"refs\") && f.arrayLayout === undefined) node.ui.layout = \"rows\";\n else lose(ctx, at, \"layout\");\n}\n\n/** The prod type a V2 field is stored as, for a preview path reading into it (no loss is reported). */\nfunction storedType(f: FieldSchema, ctx: Ctx): string {\n const quiet: Ctx = { ...ctx, lossy: [], catalog: [] };\n return shapeOf(f, 1, quiet, false).type;\n}\n/** The V2 fields a preview path segment may name below `f` (an object's fields, a list's item fields), or null for a leaf. */\nfunction previewKids(f: FieldSchema): FieldSchema[] | null {\n if (f.type === \"object\") return f.fields ?? [];\n if (f.type === \"array\" && Array.isArray(f.of) && f.of.length === 1 && f.of[0].type === \"object\") return f.of[0].fields ?? [];\n return null;\n}\n\n/**\n * A V2 preview path → the path prod stores (previewPathProblem): the first segment a child, each later one a child of the\n * node before it, or a key of an object-valued leaf (`image.alt` is stored `image.altText`). undefined: no prod form.\n */\nfunction previewPathToProd(path: string, children: FieldSchema[], ctx: Ctx): string | undefined {\n const segs = path.split(\".\");\n let node = children.find((c) => c.name === segs[0]);\n if (!node) return undefined;\n const out = [segs[0]];\n for (let i = 1; i < segs.length; i++) {\n const kids = previewKids(node);\n if (kids) {\n const next = kids.find((c) => c.name === segs[i]);\n if (!next) return undefined;\n out.push(segs[i]);\n node = next;\n continue;\n }\n // a data table's value reads by its caption or notes (previewPathProblem), the last segment\n if (node.type === \"table\") return TABLE_PATH_KEYS.includes(segs[i]) && i === segs.length - 1 ? [...out, segs[i]].join(\".\") : undefined;\n const type = storedType(node, ctx);\n if (!OBJECT_VALUE_TYPES.has(type)) return undefined;\n const key = type === \"image\" ? (IMAGE_PATH_KEY[segs[i]] ?? segs[i]) : segs[i];\n if (LEAF_VALUE_KEYS[type] && !LEAF_VALUE_KEYS[type].includes(key)) return undefined;\n return [...out, key, ...segs.slice(i + 1)].join(\".\");\n }\n return out.join(\".\");\n}\n\nfunction previewToProd(pv: PreviewConfig, children: FieldSchema[], at: string, ctx: Ctx): UiPreview {\n const out: UiPreview = {};\n for (const k of Object.keys(pv) as (keyof PreviewConfig)[]) {\n const v = pv[k];\n if (v === undefined) continue;\n if (k === \"title\" || k === \"subtitle\" || k === \"media\") {\n const stored = previewPathToProd(v, children, ctx);\n if (stored !== undefined) out[k] = stored;\n else lose(ctx, `${at}/${k}`, \"preview path\");\n } else if (k === \"fallback\") {\n const t = v.trim();\n if (t && t === v && t.length <= PREVIEW_FALLBACK_MAX) out.fallback = v;\n else lose(ctx, `${at}/${k}`, \"help>limit\");\n } else if (k === \"icon\") {\n const dock = dockIconOf(v);\n if (dock) out.icon = dock;\n else lose(ctx, `${at}/${k}`, \"preview icon\");\n } else lose(ctx, `${at}/${k}`, \"unsupported key\");\n }\n return out;\n}\n\n/**\n * A V2 dotted document preview path (`slides.0.heading`, `default.heading`) the backend keeps (componentPreviewRefusals\n * previewPathOfProps): its head a top-level prop, an index segment stepping into an item of a list, the rest a path\n * previewPathToProd stores unchanged (a renamed key, `image.alt` → `altText`, has no stored form here).\n */\nfunction documentPreviewPathOk(path: string, keys: ReadonlySet<string>, fields: FieldSchema[], ctx: Ctx): boolean {\n const segs = path.split(\".\");\n if (segs.length < 2 || !keys.has(segs[0])) return false;\n const head = fields.find((f) => f.name === segs[0]);\n if (!head) return false;\n const polyOf = (f: FieldSchema) => (f.type === \"array\" && Array.isArray(f.of) && f.of.length > 1 && f.of.every((o) => o.type === \"object\") ? f.of : undefined);\n let node: FieldSchema = head;\n const kept = [segs[0]];\n let poly = false;\n for (let i = 1; i < segs.length; i++) {\n const seg = segs[i];\n if (/^\\d+$/.test(seg) && (node.type === \"array\" || node.type === \"multiselect\" || node.type === \"tags\")) continue;\n // a polymorphic list's item reads by any of its item types' fields (`gallery.0.image`: the image type's)\n const types = polyOf(node);\n const kids = types ? types.flatMap((o) => o.fields ?? []) : previewKids(node);\n if (!kids) {\n // a leaf: the rest are keys of its value (`table.caption`), judged with the path\n kept.push(...segs.slice(i));\n break;\n }\n const next = kids.find((c) => c.name === seg);\n if (!next) return false;\n if (types) poly = true;\n kept.push(seg);\n node = next;\n }\n // a polymorphic list's item reads by its item types' fields; the fields lane's modular field resolves the path through its\n // block models (c2ee279dd)\n if (poly) return true;\n const clean = kept.join(\".\");\n return previewPathToProd(clean, fields, ctx) === clean;\n}\n\n/**\n * A V2 schema's document-level preview → component.preview (BE componentPreviewSchema): `title` / `subtitle` / `media`\n * kept when they name a top-level prop key or a dotted path into one (else preview_key_unknown; a catalog note: the row\n * reads the first text),\n * `fallback` trimmed and at most COMPONENT_PREVIEW_FALLBACK_MAX, `icon` a dock icon.\n */\nfunction componentPreviewToProd(pv: PreviewConfig, keys: ReadonlySet<string>, fields: FieldSchema[], at: string, ctx: Ctx): ComponentPreview {\n const out: ComponentPreview = {};\n for (const k of Object.keys(pv) as (keyof PreviewConfig)[]) {\n const v = pv[k];\n if (v === undefined) continue;\n if (k === \"title\" || k === \"subtitle\" || k === \"media\") {\n if ((keys.has(v) || documentPreviewPathOk(v, keys, fields, ctx)) && v.length <= COMPONENT_PREVIEW_KEY_MAX) out[k] = v;\n else cat(ctx, `${at}/${k}`, \"document preview path\");\n } else if (k === \"fallback\") {\n const t = v.trim();\n if (t && t === v && t.length <= COMPONENT_PREVIEW_FALLBACK_MAX) out.fallback = v;\n else lose(ctx, `${at}/${k}`, \"help>limit\");\n } else if (k === \"icon\") {\n const dock = dockIconOf(v);\n if (dock) out.icon = dock;\n else lose(ctx, `${at}/${k}`, \"preview icon\");\n } else lose(ctx, `${at}/${k}`, \"unsupported key\");\n }\n return out;\n}\n\n/** A list item's name and title: the convention, else ui.itemName / ui.itemTitle (chromeUiProblems). */\nfunction itemIdentity(item: FieldSchema, conv: { name: string; title: string }, node: Node, ip: string, ctx: Ctx) {\n if (item.name !== conv.name) {\n if (ITEM_NAME_RE.test(item.name)) node.ui.itemName = item.name;\n else lose(ctx, `${ip}/name`, \"item identity\");\n }\n if (item.title !== conv.title) {\n const t = item.title;\n if (t === t.trim() && t.length >= 1 && t.length <= ITEM_TITLE_MAX) node.ui.itemTitle = t;\n else lose(ctx, `${ip}/title`, \"item identity\");\n }\n}\n\nfunction ofToProd(f: FieldSchema, shape: Shape, node: Node, at: string, lv: number, ctx: Ctx) {\n if (shape.kind === \"json\" || shape.kind === \"leaf\" || shape.kind === \"object\") return lose(ctx, at, \"unsupported key\");\n if (shape.kind === \"modular\") {\n // each item type is a kind:'block' model (returned in blockModels); the modular field stores its slug\n node.config.blockSlugs = shape.items.map((i) => kebab(i.name));\n shape.items.forEach((item, i) => blockModelFor(item, `${at}/${i}`, ctx, node));\n return;\n }\n if (shape.kind === \"types\") return itemTypesToProd(shape.items, node, at, lv, ctx);\n if (shape.kind === \"slot\") {\n // V2 names block types: config.allow keeps the names as written (backend slotAllowIssues); the dock resolves them to\n // the project's components (kitProps resolveSlotAllow). config.componentIds stays the host's resolved id list.\n const of = f.of as { type?: string; allow?: string[] };\n for (const k of Object.keys(of) as (keyof typeof of)[]) {\n if (of[k] === undefined) continue;\n if (k === \"allow\" && ctx.lane === \"fields\") {\n // a model's slot names kind:'block' models by slug (config.blockSlugs); a name kebab-case does not read back is named\n node.config.blockSlugs = of.allow!.map(kebab);\n of.allow!.forEach((n, i) => camel(kebab(n)) !== n && lose(ctx, `${at}/allow/${i}`, \"type name\"));\n } else if (k === \"allow\") {\n if (slotAllowOk(of.allow)) node.config.allow = [...of.allow];\n else cat(ctx, `${at}/allow`, \"slot allow\");\n } else if (k !== \"type\" || of.type !== \"block\") lose(ctx, `${at}/${k}`, \"unsupported key\");\n }\n return;\n }\n const item = shape.item;\n const ip = `${at}/0`;\n if (shape.kind === \"zones\") {\n const fields = item.fields ?? [];\n node.zoned = true;\n // a prop table's sub-fields compare per row (unique), so they know they sit in one\n node.children = fields.map((c, i) => convertField(c, `${ip}/fields/${i}`, lv + 1, ctx, fields, false, ctx.lane === \"props\"));\n itemIdentity(item, conventionItem(f.name, f.title, node.ui.itemLabel), node, ip, ctx);\n for (const k of Object.keys(item) as (keyof FieldSchema)[]) {\n const v = item[k];\n if (v === undefined) continue;\n const p = `${ip}/${k}`;\n if (k === \"type\" || k === \"fields\" || k === \"name\" || k === \"title\") continue;\n if (k === \"preview\") node.ui.preview = previewToProd(item.preview!, fields, p, ctx);\n else if (k === \"icon\") {\n const dock = f.icon === undefined ? dockIconOf(item.icon) : undefined;\n if (dock) node.ui.icon = dock;\n else lose(ctx, p, \"item icon\");\n } else if (k === \"openMode\") cat(ctx, p, \"item openMode\");\n else lose(ctx, p, \"item identity\");\n }\n return;\n }\n // a primitive or reference item: prod keeps its type (and a reference's targets), its name and title, and a list of\n // scalars its item's own settings (config.item, backend arrayItemSettingsSchema)\n if (shape.kind === \"itemType\") node.config.itemType = shape.itemType;\n itemIdentity(item, conventionItem(f.name, f.title), node, ip, ctx);\n const settings: ArrayItemSettings = {};\n // a prop keeps a scalar list's item settings (config.item); a model's primitive list holds only types'\n // PRIMITIVE_ARRAY_RULE.configKeys, so there they are named (array_config_key_unknown)\n const scalars = shape.kind === \"itemType\" && !shape.shopify && (ctx.lane === \"props\" || MODEL_LIST_KEYS.has(\"item\"));\n for (const k of Object.keys(item) as (keyof FieldSchema)[]) {\n const v = item[k];\n if (v === undefined) continue;\n const p = `${ip}/${k}`;\n if (k === \"name\" || k === \"title\") continue;\n if (k === \"type\") {\n if (shape.kind === \"itemType\" && shape.shopify) continue;\n if (shape.kind === \"itemType\" && item.type === \"text\") lose(ctx, p, \"item settings\");\n } else if (k === \"reference\" && shape.kind === \"refs\") referenceToConfig(item.reference!, node, p, ctx);\n else if (k === \"reference\" && shape.kind === \"itemType\" && shape.shopify) continue;\n else if (scalars && k === \"description\" && typeof v === \"string\" && v.trim() === v && v.length >= 1 && v.length <= PROP_HELP_MAX) settings.helpText = v;\n else if (scalars && k === \"localized\" && typeof v === \"boolean\") settings.localized = v;\n else if (scalars && k === \"validation\") itemValidationToProd(item, shape.itemType, settings, p, ctx);\n else lose(ctx, p, \"item settings\");\n }\n if (nonEmpty(settings)) node.config.item = settings;\n}\n\n/** A scalar list item's V2 validation → config.item: required, a text / rich text item's length, a text item's pattern. */\nfunction itemValidationToProd(item: FieldSchema, itemType: ListItemType, out: ArrayItemSettings, at: string, ctx: Ctx) {\n const val = item.validation!;\n const lengthy = itemType === \"text\" || itemType === \"richtext\";\n for (const k of Object.keys(val) as (keyof typeof val)[]) {\n const v = val[k];\n if (v === undefined) continue;\n if (k === \"required\" && typeof v === \"boolean\") out.required = v;\n else if ((k === \"min\" || k === \"max\") && lengthy && isWhole(v)) out[k === \"min\" ? \"minLength\" : \"maxLength\"] = v as number;\n else if (k === \"pattern\" && itemType === \"text\" && typeof v === \"string\" && v.length <= PATTERN_MAX && compiles(v)) out.pattern = v;\n else if (k === \"patternMessage\" && typeof v === \"string\" && v.trim() !== \"\" && v.length <= PATTERN_MESSAGE_MAX) out.patternMessage = v;\n else lose(ctx, `${at}/${k}`, \"item settings\");\n }\n if (out.minLength !== undefined && out.maxLength !== undefined && out.minLength > out.maxLength) {\n delete out.minLength;\n delete out.maxLength;\n lose(ctx, `${at}/min`, \"item settings\");\n }\n if (out.patternMessage !== undefined && out.pattern === undefined) {\n delete out.patternMessage;\n lose(ctx, `${at}/patternMessage`, \"item settings\");\n }\n}\n\n/** A slot's per-child settings → config.slotSettings: leaf sub-fields, at most SLOT_SETTINGS_MAX (slotSettingsHardening). */\nfunction slotSettingsToProd(settings: FieldSchema[], node: Node, at: string, lv: number, ctx: Ctx) {\n const kept = settings.slice(0, SLOT_SETTINGS_MAX);\n if (settings.length > SLOT_SETTINGS_MAX) settings.slice(SLOT_SETTINGS_MAX).forEach((_, i) => lose(ctx, `${at}/${SLOT_SETTINGS_MAX + i}`, \"slotSettings\"));\n node.slotSettings = kept.map((c, i) => convertField(c, `${at}/${i}`, lv + 1, ctx, kept, false, false, false, true));\n}\n\n/**\n * A polymorphic list's item types → config.itemTypes `{ name, label, fields }`: the name is what a row's `_type` holds,\n * the title its label, its icon and row preview `icon` / `preview` (paths over its own fields). One prod cannot name is\n * not stored, which moves the ones after it up a place, so the whole list is named.\n */\nfunction itemTypesToProd(items: FieldSchema[], node: Node, at: string, lv: number, ctx: Ctx) {\n const names = new Set<string>();\n node.itemTypes = [];\n let dropped = false;\n items.forEach((item, i) => {\n const ip = `${at}/${i}`;\n const fields = item.fields ?? [];\n const why: LossyFeature | undefined = !ITEM_TYPE_NAME.test(item.name) || !fields.length ? \"item identity\" : names.has(item.name) ? \"duplicate name\" : undefined;\n if (why) {\n lose(ctx, ip, why);\n dropped = true;\n return;\n }\n names.add(item.name);\n const label = trunc(ctx, `${ip}/title`, item.title, ITEM_TYPE_LABEL_MAX, \"item identity\");\n const children = fields.map((c, j) => convertField(c, `${ip}/fields/${j}`, lv + 1, ctx, fields, false, false, true));\n const type: NonNullable<Node[\"itemTypes\"]>[number] = { name: item.name, label, children };\n for (const k of Object.keys(item) as (keyof FieldSchema)[]) {\n if (item[k] === undefined || k === \"name\" || k === \"title\" || k === \"type\" || k === \"fields\") continue;\n const p = `${ip}/${k}`;\n if (k === \"preview\") {\n const preview = previewToProd(item.preview!, fields, p, ctx);\n if (nonEmpty(preview)) type.preview = preview;\n } else if (k === \"icon\") {\n const dock = dockIconOf(item.icon);\n if (dock) type.icon = dock;\n else lose(ctx, p, \"item icon\");\n } else if (k === \"openMode\") cat(ctx, p, \"item openMode\");\n else lose(ctx, p, \"item identity\");\n }\n node.itemTypes!.push(type);\n });\n if (dropped && node.itemTypes.length < items.length && node.itemTypes.length) lose(ctx, at, \"item identity\");\n}\n\n/**\n * A modular item type → the kind:'block' model its rows are stored against: the item title is the model name, its fields\n * the model's top-level fields. A block model holds only fields a block primitive renders; any other is not stored. The\n * item's icon and preview are how its rows read in THIS field: the field's ui.blocks, by slug.\n */\nfunction blockModelFor(item: FieldSchema, at: string, ctx: Ctx, list: Node) {\n const start = ctx.lossy.length;\n const startCat = ctx.catalog.length;\n const slug = kebab(item.name);\n // its own model: no tabs or sections of the model that uses it\n const sub: Ctx = { ...ctx, tabs: new Set(), droppedTabs: new Map(), sets: new Map() };\n const fields = item.fields ?? [];\n const kept: ContentModelField[] = [];\n const chrome: { icon?: DockIconName; preview?: UiPreview; openMode?: OpenMode } = {};\n for (const k of Object.keys(item) as (keyof FieldSchema)[]) {\n const p = `${at}/${k}`;\n if (item[k] === undefined || k === \"type\" || k === \"title\") continue;\n if (k === \"name\") {\n if (camel(slug) !== item.name) lose(ctx, p, \"item identity\");\n } else if (k === \"fields\") {\n fields.forEach((c, j) => kept.push(emitField(convertField(c, `${p}/${j}`, 1, sub, fields, false))));\n } else if (k === \"openMode\") chrome.openMode = item.openMode;\n else if (k === \"icon\") {\n const dock = dockIconOf(item.icon);\n if (dock) chrome.icon = dock;\n else lose(ctx, p, \"item icon\");\n } else if (k === \"preview\") chrome.preview = previewToProd(item.preview!, fields, p, ctx);\n else lose(ctx, p, \"item identity\");\n }\n // a block model holds only fields a block primitive renders; any other is a model whose v2.shape is \"block\", which a\n // modular field may name too (019141ffc)\n const model: ProdContentModel = kept.every(blockRenders)\n ? { name: item.title, slug, kind: \"block\", fields: kept }\n : { name: item.title, slug, kind: \"model\", fields: kept, v2: { shape: \"block\" } };\n const prev = ctx.blockModels.get(slug);\n const keep = () => {\n if (!nonEmpty(chrome) || list.ui.blocks?.[slug]) return;\n list.ui.blocks = { ...list.ui.blocks, [slug]: chrome };\n };\n if (!prev) {\n ctx.blockModels.set(slug, model);\n return keep();\n }\n if (deepEqual(prev, model)) return keep();\n // a second item type with this slug and other fields: the slug names the first one's model\n ctx.lossy.length = start;\n ctx.catalog.length = startCat;\n lose(ctx, at, \"duplicate name\");\n}\n\n/**\n * A reference's targets: entry models → contentModelId / polymorphic + allowedModelSlugs; page, form and collection →\n * config.targets and the filter → config.filter (backend refTargetKeys, both lanes). Read back, entry models come first,\n * then the targets.\n */\nfunction referenceToConfig(ref: NonNullable<FieldSchema[\"reference\"]>, node: Node, at: string, ctx: Ctx) {\n const to = ref.to ?? [];\n const entries = to.filter(ENTRY_TARGET);\n // page, form and collection targets and the filter are kept in both lanes (backend reference-targets.ts, a4ce1ae95)\n const targets = to.filter((t) => REF_TARGET_KINDS.includes(t));\n const kept = entries.length + targets.length;\n // only a shopify target is not kept; the kept ones shift position, so a partial loss is reported on the whole list\n if (kept < to.length) lose(ctx, kept || !to.length ? `${at}/to` : at, \"shopify reference\");\n else if (to.join() !== [...entries, ...targets].join()) lose(ctx, `${at}/to`, \"reference order\");\n if (entries.length === 1) node.config.contentModelId = entries[0];\n else if (entries.length > 1) Object.assign(node.config, { polymorphic: true, allowedModelSlugs: entries });\n if (targets.length) node.config.targets = targets as NonNullable<FieldConfig[\"targets\"]>;\n if (ref.filter !== undefined) {\n if (filterKept(ref.filter)) node.config.filter = ref.filter;\n else lose(ctx, `${at}/filter`, \"reference filter\");\n }\n for (const k of Object.keys(ref)) if (k !== \"to\" && k !== \"filter\") lose(ctx, `${at}/${k}`, \"unsupported key\");\n}\n\nfunction numericToProd(f: FieldSchema, node: Node, at: string, ctx: Ctx) {\n if (f.type !== \"number\" && f.type !== \"rating\") return lose(ctx, at, \"unsupported key\");\n const n = f.numeric!;\n // ratingConfigSchema: min ≥ 0, max a whole 1–10, step > 0, min < max, at most RATING_MAX_STOPS whole steps\n const lo = n.min ?? 0;\n const hi = n.max ?? 5;\n const st = n.step ?? (f.type === \"rating\" ? V2_RATING_STEP : 1);\n const stops = (hi - lo) / st;\n const ratingOk =\n (n.min === undefined || (Number.isFinite(n.min) && n.min >= 0)) &&\n (n.max === undefined || isWhole(n.max, 1, RATING_MAX)) &&\n (n.step === undefined || (Number.isFinite(n.step) && n.step > 0)) &&\n lo < hi &&\n Math.abs(stops - Math.round(stops)) < 1e-9 &&\n Math.round(stops) <= RATING_MAX_STOPS;\n for (const k of Object.keys(n) as (keyof typeof n)[]) {\n const v = n[k];\n if (v === undefined) continue;\n const p = `${at}/${k}`;\n if (k === \"unit\") {\n const u = v as string;\n if (f.type === \"number\" && typeof u === \"string\" && u.trim() !== \"\" && u.length <= NUMBER_UNIT_MAX) node.config.unit = u;\n else lose(ctx, p, \"numeric unit\");\n } else if (k === \"min\" || k === \"max\" || k === \"step\") {\n if (f.type === \"number\") node.config[k] = v as number;\n else if (ratingOk) node.config[k] = v as number;\n else lose(ctx, p, \"rating bounds\");\n } else lose(ctx, p, \"unsupported key\");\n }\n}\n\nconst SCALE_UNIT_SET: ReadonlySet<string> = new Set([\"px\", \"%\", \"rem\", \"em\", \"vw\", \"vh\"]);\nconst unitsOk = (u: unknown) => Array.isArray(u) && u.length >= 1 && u.every((x) => SCALE_UNIT_SET.has(x));\nconst boundOk = (b: unknown) => b === undefined || (typeof b === \"number\" && Number.isFinite(b)) || (isObj(b) && Object.entries(b).every(([k, x]) => SCALE_UNIT_SET.has(k) && typeof x === \"number\"));\nconst textOk = (s: unknown, max: number) => typeof s === \"string\" && s.length >= 1 && s.length <= max;\n\n/** A V2 scale → config.scale (numberScaleSchema): steps, units, presets and the custom escape hatch, each held to its rules. */\nfunction scaleToConfig(s: ScaleSchema, node: Node, at: string, ctx: Ctx) {\n const steps = s.steps;\n let outSteps: NumberScale[\"steps\"];\n if (Array.isArray(steps)) {\n const ok =\n steps.length >= 1 &&\n steps.length <= SCALE_STEPS_MAX &&\n new Set(steps.map((x) => x.value)).size === steps.length &&\n steps.every(\n (x) =>\n typeof x.value === \"string\" && x.value === x.value.trim() && textOk(x.value, SCALE_TOKEN_VALUE_MAX) && textOk(x.label, SCALE_LABEL_MAX) &&\n (x.title === undefined || textOk(x.title, SCALE_TITLE_MAX)) && (x.css === undefined || textOk(x.css, SCALE_CSS_MAX)) &&\n (x.px === undefined || (typeof x.px === \"number\" && Number.isFinite(x.px))) &&\n Object.keys(x).every((k) => [\"value\", \"label\", \"title\", \"px\", \"css\"].includes(k)),\n );\n if (!ok) return lose(ctx, at, \"scale rules\");\n outSteps = steps.map((x) => ({ ...x }));\n } else {\n if (!(steps.min < steps.max) || (steps.step !== undefined && !(steps.step > 0))) return lose(ctx, at, \"scale rules\");\n outSteps = { min: steps.min, max: steps.max, ...(steps.step !== undefined ? { step: steps.step } : {}) };\n }\n const out: NumberScale = { steps: outSteps };\n const tokens = Array.isArray(steps) ? new Set(steps.map((x) => x.value)) : undefined;\n const c = s.allowCustom;\n const customOk =\n c === undefined ||\n typeof c === \"boolean\" ||\n (typeof c === \"object\" && c !== null && boundOk(c.min) && boundOk(c.max) && (c.units === undefined || unitsOk(c.units)) && (c.step === undefined || c.step > 0) &&\n Object.keys(c).every((x) => [\"min\", \"max\", \"units\", \"step\"].includes(x)));\n for (const k of Object.keys(s) as (keyof ScaleSchema)[]) {\n const v = s[k];\n if (v === undefined || k === \"steps\") continue;\n const p = `${at}/${k}`;\n if (k === \"units\") {\n if (unitsOk(v)) out.units = [...(v as NonNullable<ScaleSchema[\"units\"]>)];\n else lose(ctx, p, \"scale rules\");\n } else if (k === \"defaultUnit\") {\n if (SCALE_UNIT_SET.has(v as string)) out.defaultUnit = s.defaultUnit;\n else lose(ctx, p, \"scale rules\");\n } else if (k === \"allowCustom\") {\n if (customOk) out.allowCustom = typeof c === \"boolean\" ? c : JSON.parse(JSON.stringify(c));\n else lose(ctx, p, \"scale rules\");\n } else if (k === \"presets\") {\n const presets = s.presets!;\n const ok =\n presets.length <= SCALE_PRESETS_MAX &&\n presets.every((x) => {\n if (x.label !== undefined && !textOk(x.label, SCALE_LABEL_MAX)) return false;\n if (Object.keys(x).some((y) => y !== \"label\" && y !== \"value\")) return false;\n const pv = x.value;\n if (typeof pv === \"number\") return Number.isFinite(pv);\n if (typeof pv === \"string\") return textOk(pv, SCALE_TOKEN_VALUE_MAX) && !!tokens?.has(pv);\n return isObj(pv) && typeof pv.value === \"number\" && SCALE_UNIT_SET.has(pv.unit) && Object.keys(pv).length === 2 && customOk && !!s.allowCustom;\n });\n if (ok) out.presets = presets.map((x) => ({ ...(x.label !== undefined ? { label: x.label } : {}), value: typeof x.value === \"object\" ? { ...x.value } : x.value }));\n else lose(ctx, p, \"scale rules\");\n } else lose(ctx, p, \"unsupported key\");\n }\n node.config.scale = out;\n}\n\n/** V2 operator → prod showIf op (the legacy `equals` / `notEmpty` forms read as is / is one of / has a value). */\nconst SHOW_IF_OP: Record<NonNullable<Condition[\"op\"]>, ShowIfRule[\"op\"]> = { is: \"eq\", isNot: \"neq\", in: \"in\", notIn: \"notIn\", empty: \"empty\", notEmpty: \"notEmpty\", gt: \"gt\", lt: \"lt\" };\nconst VALUELESS = new Set<ShowIfRule[\"op\"]>([\"empty\", \"notEmpty\", \"isSet\"]);\n\nfunction conditionToShowIf(h: Condition, at: string, siblings: FieldSchema[], ctx: Ctx, variantOk: boolean): ShowIf | undefined {\n const rules: ShowIfRule[] = [];\n for (const [i, r] of [h, ...(h.also ?? [])].entries()) {\n const rule = conditionRule(r, i === 0, siblings, variantOk);\n if (!rule) return void lose(ctx, at, \"condition\");\n rules.push(rule);\n }\n if (h.match !== undefined && h.match !== \"all\" && h.match !== \"any\") return void lose(ctx, at, \"condition\");\n return { match: h.match ?? \"all\", rules };\n}\n\n/** One V2 rule as a prod rule, or null when prod cannot hold it (a scope, a non-sibling, a value showIf cannot test). */\nfunction conditionRule(r: Condition, head: boolean, siblings: FieldSchema[], variantOk: boolean): ShowIfRule | null {\n // a condition names a sibling; the block's `_variant` is one only for a top-level prop (BLOCK_VARIANT_FIELD).\n // a scoped rule (A3: parent | root) names a field past the siblings, so its value is read untyped\n const variant = variantOk && r.field === \"_variant\";\n if (!r.field || (r.scope === undefined && !variant && !siblings.some((s) => s.name === r.field))) return null;\n const allowed = head ? [\"field\", \"equals\", \"notEmpty\", \"op\", \"value\", \"scope\", \"also\", \"match\"] : [\"field\", \"equals\", \"notEmpty\", \"op\", \"value\", \"scope\"];\n if (Object.keys(r).some((k) => !allowed.includes(k) && (r as unknown as Obj)[k] !== undefined)) return null;\n const forms = [r.op !== undefined, r.equals !== undefined, r.notEmpty !== undefined].filter(Boolean).length;\n if (forms !== 1) return null;\n const scope = r.scope ? { scope: r.scope } : {};\n if (r.notEmpty !== undefined) return r.notEmpty === true ? { field: r.field, op: \"notEmpty\", ...scope } : null;\n const target = r.op !== undefined ? r.value : r.equals;\n const op: ShowIfRule[\"op\"] = r.op !== undefined ? SHOW_IF_OP[r.op] : Array.isArray(target) ? \"in\" : \"eq\";\n if (!op) return null;\n if (VALUELESS.has(op)) return r.value === undefined ? { field: r.field, op, ...scope } : null;\n const sibType = variant || r.scope ? undefined : siblings.find((s) => s.name === r.field)?.type;\n if (op === \"gt\" || op === \"lt\") return typeof target === \"number\" && Number.isFinite(target) ? { field: r.field, op, value: String(target), ...scope } : null;\n const list = Array.isArray(target) ? target : [target];\n const strs: string[] = [];\n for (const v of list) {\n if (![\"string\", \"number\", \"boolean\"].includes(typeof v)) return null;\n const s = String(v);\n if (coerceRuleValue(sibType, s) !== v) return null;\n strs.push(s);\n }\n if (op === \"in\" || op === \"notIn\") return { field: r.field, op, value: strs, ...scope };\n return Array.isArray(target) ? (strs.length ? { field: r.field, op: op === \"eq\" ? \"in\" : \"notIn\", value: strs, ...scope } : null) : { field: r.field, op, value: strs[0], ...scope };\n}\n\n/* ── emit per lane ───────────────────────────────────────────────────── */\nconst nonEmpty = <T extends object>(o: T) => (Object.keys(o).length ? o : undefined);\nfunction common(n: Node): Obj {\n const out: Obj = { key: n.key, label: n.label, type: n.type };\n const keys: (keyof Node)[] = [\"helpText\", \"required\", \"defaultValue\", \"showIf\", \"helpMore\", \"advanced\", \"ai\", \"recommendedMax\", \"openMode\", \"localized\", \"archived\"];\n for (const k of keys) if (n[k] !== undefined) out[k] = n[k];\n return out;\n}\n\nfunction emitField(n: Node): ContentModelField {\n const out = common(n) as unknown as ContentModelField;\n if (n.unique !== undefined) out.unique = n.unique;\n if (n.readOnly !== undefined) out.readOnly = n.readOnly;\n if (n.lockReason !== undefined) out.lockReason = n.lockReason;\n if (n.fieldsetId !== undefined) out.fieldsetId = n.fieldsetId;\n const config: FieldConfig = { ...n.config };\n if (n.placeholder !== undefined) config.placeholder = n.placeholder;\n if (n.type === \"select\" && n.options) out.options = n.options;\n if ((n.type === \"multiselect\" || n.type === \"tags\") && n.options) config.options = n.options;\n if (n.type === \"object\") out.fields = (n.children ?? []).map(emitField);\n if (n.slotSettings) config.slotSettings = n.slotSettings.map(emitField);\n if (n.zoned) {\n const { minItems, maxItems, ...rest } = config;\n out.config = {\n ...rest,\n zones: { repeatable: { fields: (n.children ?? []).map(emitField), ...(minItems !== undefined ? { minItems } : {}), ...(maxItems !== undefined ? { maxItems } : {}) } },\n };\n } else if (nonEmpty(config)) out.config = config;\n const ui = nonEmpty(n.ui);\n if (ui) out.ui = ui as FieldUi;\n return out;\n}\n\nfunction emitProp(n: Node): ComponentPropDef {\n const out = common(n) as unknown as ComponentPropDef;\n if (n.unique !== undefined) out.unique = n.unique;\n if (n.readOnly !== undefined) out.readOnly = n.readOnly;\n if (n.lockReason !== undefined) out.lockReason = n.lockReason;\n if (n.placeholder !== undefined) out.placeholder = n.placeholder;\n const config: Obj = { ...n.config };\n if (n.options) config.options = n.options;\n if (n.children) config.fields = n.children.map(emitSubField);\n if (n.itemTypes) config.itemTypes = emitItemTypes(n.itemTypes);\n if (n.slotSettings) config.slotSettings = n.slotSettings.map(emitSubField);\n if (nonEmpty(config)) out.config = config as ComponentPropDef[\"config\"];\n const ui = nonEmpty(n.ui);\n if (ui) out.ui = ui;\n return out;\n}\n\nfunction emitSubField(n: Node): ComponentSubField {\n const out = common(n) as unknown as ComponentSubField;\n if (n.unique !== undefined) out.unique = n.unique;\n if (n.readOnly !== undefined) out.readOnly = n.readOnly;\n if (n.lockReason !== undefined) out.lockReason = n.lockReason;\n if (n.placeholder !== undefined) out.placeholder = n.placeholder;\n if (n.options) out.options = n.options;\n if (n.children) out.fields = n.children.map(emitSubField);\n const config: Obj = { ...n.config };\n if (n.itemTypes) config.itemTypes = emitItemTypes(n.itemTypes);\n if (n.slotSettings) config.slotSettings = n.slotSettings.map(emitSubField);\n if (nonEmpty(config)) out.config = config as ComponentSubField[\"config\"];\n const ui = nonEmpty(n.ui);\n if (ui) out.ui = ui;\n return out;\n}\n\n/** A polymorphic list's item types as the backend stores them: `{ name, label, fields }` (typesTableHardening). */\nconst emitItemTypes = (types: NonNullable<Node[\"itemTypes\"]>) =>\n types.map((t) => ({ name: t.name, label: t.label, fields: t.children.map(emitSubField), ...(t.icon ? { icon: t.icon } : {}), ...(t.preview ? { preview: t.preview } : {}) }));\n\n/* ── document level ──────────────────────────────────────────────────── */\nexport function fromTypeSchema(v2: TypeSchema, target: \"fields\"): FromTypeSchemaResult<ProdContentModel>;\nexport function fromTypeSchema(v2: TypeSchema, target: \"props\"): FromTypeSchemaResult<ProdComponent>;\nexport function fromTypeSchema(v2: TypeSchema, target: AdapterTarget): FromTypeSchemaResult<ProdContentModel | ProdComponent> {\n const ctx: Ctx = {\n lane: target, lossy: [], catalog: [], tabs: new Set(), droppedTabs: new Map(), sets: new Map(), propSets: new Map(), definedGroups: new WeakMap(),\n propOrder: new Map(), groupOrder: false, propTabs: new Map(), definedTabs: new Set(), keptTabs: new Set(), declaredTabs: [], blockModels: new Map(),\n };\n const props = target === \"props\";\n // fields lane: V2's block variants are the model's `_variant` select + v2.variants (c2ee279dd); a component's are its\n // variant group (component_variant_groups), which the host writes\n if (!props && v2.variants?.length) ctx.variants = true;\n const slug = kebab(v2.name);\n // the kit catalogue's own category is stored verbatim (A3: components.category takes CATEGORY_ORDER, content_models.v2.category)\n const kitCategory = (KIT_CATEGORIES as readonly string[]).includes(v2.category ?? \"\") ? (v2.category as KitCategory) : undefined;\n const category = kitCategory ?? (v2.category !== undefined ? CATEGORY_TO_PROD[v2.category] : undefined);\n const fieldsets: Fieldset[] = [];\n // the `v2` block (A3): what V2 says that has no native key\n const block: { shape?: V2Shape; placement?: V2Placement; category?: KitCategory } = {};\n\n for (const k of Object.keys(v2) as (keyof TypeSchema)[]) {\n if (v2[k] === undefined) continue;\n const p = `/${k}`;\n switch (k) {\n case \"name\":\n if (camel(slug) !== v2.name) lose(ctx, p, \"type name\");\n break;\n case \"title\":\n case \"description\":\n case \"fields\":\n case \"fieldsets\":\n case \"groups\":\n break;\n case \"kind\":\n // a component is a block by default, a model an entry; any other kind is v2.shape (a block model: below)\n if (props ? v2.kind !== \"block\" : v2.kind !== \"entry\") block.shape = v2.kind;\n break;\n case \"icon\":\n // a component stores it (component.icon), a model too (content_models.icon): both a dock icon, so only an icon\n // with no dock name is lost\n if (!dockIconOf(v2.icon)) cat(ctx, p, \"block icon\");\n break;\n case \"preview\":\n // a component stores it (component.preview), a model too (listPreview, A3): read once the fields are known\n break;\n case \"variants\":\n if (!ctx.variants) cat(ctx, p, \"variants\");\n break;\n case \"category\":\n if (kitCategory) {\n if (!props) block.category = kitCategory;\n } else if (!props || !category || capitalize(category) !== v2.category) cat(ctx, p, \"category\"); // a library id reads back capitalised\n break;\n case \"placement\":\n block.placement = v2.placement;\n break;\n case \"initialValue\":\n cat(ctx, p, \"seeded instance\");\n break;\n default:\n lose(ctx, p, \"unsupported key\");\n }\n }\n\n if (props) {\n propTabsFor(v2, ctx);\n propSetsFor(v2, ctx);\n } else fieldsetsFor(v2, ctx, fieldsets);\n\n const nodes = v2.fields.map((f, i) => convertField(f, `/fields/${i}`, 1, ctx, v2.fields, true));\n if (props) {\n const component: ProdComponent = { name: v2.title, slug, props: nodes.map(emitProp) };\n if (v2.description !== undefined) component.description = v2.description;\n if (category) component.category = category;\n if (nonEmpty(block)) component.v2 = { ...block };\n const icon = v2.icon === undefined ? undefined : dockIconOf(v2.icon);\n if (icon) component.icon = icon;\n if (v2.preview !== undefined) {\n const preview = componentPreviewToProd(v2.preview, new Set(component.props.map((x) => x.key)), v2.fields, \"/preview\", ctx);\n if (Object.keys(preview).length) component.preview = preview;\n }\n if (ctx.declaredTabs.length) component.tabs = ctx.declaredTabs.map((t) => ({ ...t }));\n return { schema: component, blockModels: [], lossy: ctx.lossy, catalog: ctx.catalog };\n }\n const model: ProdContentModel = { name: v2.title, slug, fields: nodes.map(emitField) };\n if (v2.description !== undefined) model.description = v2.description;\n const modelIcon = v2.icon === undefined ? undefined : dockIconOf(v2.icon);\n if (modelIcon) model.icon = modelIcon;\n // a V2 section is a block model when a block primitive renders every field (backend findUnmappableFields); else a\n // model whose v2.shape \"block\" still says it is a section (c2ee279dd), which the read side recovers\n model.kind = block.shape === \"block\" && model.fields.every(blockRenders) ? \"block\" : \"model\";\n if (ctx.variants) {\n const variants = v2.variants!;\n model.fields.unshift({ key: BLOCK_VARIANT_KEY, label: \"Variant\", type: \"select\", required: false, options: variants.map((v) => ({ label: v.name, value: v.id })) } as ContentModelField);\n model.v2 = { ...block, variants: Object.fromEntries(variants.map((v) => [v.id, v.description !== undefined ? { description: v.description } : {}])) };\n } else if (nonEmpty(block)) model.v2 = { ...block };\n if (v2.preview !== undefined) {\n const preview = componentPreviewToProd(v2.preview, new Set(model.fields.map((x) => x.key)), v2.fields, \"/preview\", ctx);\n if (Object.keys(preview).length) model.listPreview = preview;\n }\n if (ctx.derivedSets) {\n // named where the read side declares it, after the declared sections (as the props lane does)\n const declared = fieldsets.filter((x) => x.kind !== \"tab\").length;\n ctx.derivedSets.forEach((_, i) => cat(ctx, `/fieldsets/${declared + i}`, \"fieldset (derived)\"));\n fieldsets.push(...ctx.derivedSets);\n }\n if (fieldsets.length) model.fieldsets = fieldsets;\n return { schema: model, blockModels: [...ctx.blockModels.values()], lossy: ctx.lossy, catalog: ctx.catalog };\n}\n\n/** Fields lane: V2 groups → `kind: \"tab\"` fieldsets, V2 fieldsets → `kind: \"group\"` fieldsets in the tab their members share. */\nfunction fieldsetsFor(v2: TypeSchema, ctx: Ctx, out: Fieldset[]) {\n // the backend's tab_name rule compares the STORED name (cut to TAB_NAME_MAX), trimmed, in any case\n const names = new Set<string>();\n let firstDrop: LossyFeature | undefined;\n let shifted = false;\n (v2.groups ?? []).forEach((g: FieldGroup, i) => {\n const p = `/groups/${i}`;\n const stored = g.title.slice(0, TAB_NAME_MAX);\n const folded = stored.trim().toLowerCase();\n const drop = (why: LossyFeature) => {\n if (!ctx.tabs.has(g.name) && !ctx.droppedTabs.has(g.name)) ctx.droppedTabs.set(g.name, why);\n firstDrop ??= why;\n lose(ctx, p, why);\n };\n if (ctx.tabs.has(g.name) || names.has(folded)) return drop(\"group name collision\");\n if (out.length >= TAB_MAX) return drop(\"groups>3\");\n names.add(folded);\n const tab: Fieldset = { id: g.name, name: stored, kind: \"tab\" };\n if (g.title.length > TAB_NAME_MAX) lose(ctx, `${p}/title`, \"group name>40\");\n if (g.icon !== undefined) {\n const dock = dockIconOf(g.icon);\n if (dock) tab.icon = dock;\n else lose(ctx, `${p}/icon`, \"group icon\");\n }\n if (i === 0 ? g.default !== true : g.default !== undefined) lose(ctx, `${p}/default`, \"group default\");\n for (const k of Object.keys(g)) if (![\"name\", \"title\", \"icon\", \"default\"].includes(k) && (g as unknown as Obj)[k] !== undefined) lose(ctx, `${p}/${k}`, \"unsupported key\");\n ctx.tabs.add(g.name);\n out.push(tab);\n // a dropped group before this one shifts it up a place: the list as a whole is not kept in its positions\n if (firstDrop && !shifted) {\n shifted = true;\n lose(ctx, \"/groups\", firstDrop);\n }\n });\n (v2.fieldsets ?? []).forEach((fs: V2Fieldset, i) => {\n const p = `/fieldsets/${i}`;\n if (ctx.tabs.has(fs.name) || ctx.droppedTabs.has(fs.name) || ctx.sets.has(fs.name) || out.length >= FIELDSETS_MAX) return lose(ctx, p, \"fieldset collision\");\n // the tab most top-level members sit in (\"no tab\" counts as one)\n const tally = new Map<string | undefined, number>();\n for (const f of v2.fields) if (f.fieldset === fs.name) tally.set(f.group, (tally.get(f.group) ?? 0) + 1);\n const best = [...tally.entries()].sort((a, b) => b[1] - a[1])[0]?.[0];\n const tab = best !== undefined && ctx.tabs.has(best) ? best : undefined;\n const set: Fieldset = { id: fs.name, name: fs.title.slice(0, FIELDSET_NAME_MAX), kind: \"group\" };\n if (fs.title.length > FIELDSET_NAME_MAX) lose(ctx, `${p}/title`, \"fieldset name>limit\");\n if (tab) set.tab = tab;\n for (const k of Object.keys(fs) as (keyof V2Fieldset)[]) {\n const v = fs[k];\n if (v === undefined || k === \"name\" || k === \"title\") continue;\n if (k === \"description\") {\n if ((v as string).length <= FIELDSET_DESCRIPTION_MAX) set.description = v as string;\n else lose(ctx, `${p}/${k}`, \"help>limit\");\n } else if (k === \"collapsed\" || k === \"collapsible\" || k === \"columns\" || k === \"layout\") (set as unknown as Obj)[k] = v;\n else lose(ctx, `${p}/${k}`, \"unsupported key\");\n }\n ctx.sets.set(fs.name, tab);\n out.push(set);\n });\n}\n\n/**\n * Props lane: V2 groups → each top-level prop's `ui.tab`, defined on the first prop in it (label, icon, and `order` when\n * the V2 order differs from where each tab is first used). A field with no group sits in the V2 default group; a group\n * not stored puts its fields in the default tab; a fieldset's top-level members share the tab most of them sit in\n * (prop_group_split_tabs). No groups → no tab anywhere, so a component without tabs stores as before.\n */\nfunction propTabsFor(v2: TypeSchema, ctx: Ctx) {\n const groups = v2.groups ?? [];\n const kept: { g: FieldGroup; i: number; tab: PropTab }[] = [];\n const dropped = new Map<string, LossyFeature>();\n const labels = new Set<string>();\n groups.forEach((g, i) => {\n const p = `/groups/${i}`;\n const drop = (why: LossyFeature) => {\n if (!kept.some((k) => k.g.name === g.name) && !dropped.has(g.name)) dropped.set(g.name, why);\n lose(ctx, p, why);\n };\n const label = g.title.slice(0, TAB_NAME_MAX).trim();\n const folded = label.toLowerCase();\n if (kept.some((k) => k.g.name === g.name) || labels.has(folded)) return drop(\"group name collision\");\n if (kept.length >= PROP_TAB_MAX || g.name.length < 1 || g.name.length > PROP_TAB_ID_MAX) return drop(\"prop tab limit\");\n // a tab is defined with its label: a blank title has none to store\n if (!label) return drop(\"group title\");\n labels.add(folded);\n const tab: PropTab = { id: g.name, label };\n if (label !== g.title.trim()) lose(ctx, `${p}/title`, \"group name>40\");\n else if (label !== g.title) lose(ctx, `${p}/title`, \"group title\");\n if (g.icon !== undefined) {\n const dock = dockIconOf(g.icon);\n if (dock) tab.icon = dock;\n else lose(ctx, `${p}/icon`, \"group icon\");\n }\n if (i === 0 ? g.default !== true : g.default !== undefined) lose(ctx, `${p}/default`, \"group default\");\n for (const k of Object.keys(g)) if (![\"name\", \"title\", \"icon\", \"default\"].includes(k) && (g as unknown as Obj)[k] !== undefined) lose(ctx, `${p}/${k}`, \"unsupported key\");\n kept.push({ g, i, tab });\n });\n // where each top-level field sits: its group, else the V2 default group; a group not stored → the default tab\n const isKept = (name: string | undefined) => name !== undefined && kept.some((k) => k.g.name === name);\n const v2Default = (groups.find((g) => g.default) ?? groups[0])?.name;\n const fallback = isKept(v2Default) ? v2Default : kept[0]?.g.name;\n const place = new Map<FieldSchema, { tab?: string; loss?: LossyFeature }>();\n for (const f of v2.fields) {\n const want = f.group ?? v2Default;\n if (isKept(want)) place.set(f, { tab: want });\n else if (f.group !== undefined || want !== undefined) place.set(f, { tab: fallback, loss: dropped.get(want!) ?? \"unsupported key\" });\n }\n if (!kept.length) {\n for (const [f, t] of place) if (f.group !== undefined) ctx.propTabs.set(f, { loss: t.loss });\n return;\n }\n // a fieldset's top-level members share the tab most of them sit in (ties: the first met)\n const tally = new Map<string, Map<string | undefined, number>>();\n for (const f of v2.fields) {\n if (f.fieldset === undefined) continue;\n const t = tally.get(f.fieldset) ?? new Map<string | undefined, number>();\n t.set(place.get(f)?.tab, (t.get(place.get(f)?.tab) ?? 0) + 1);\n tally.set(f.fieldset, t);\n }\n for (const f of v2.fields) {\n const counts = f.fieldset !== undefined ? tally.get(f.fieldset) : undefined;\n if (!counts) continue;\n const best = [...counts.entries()].sort((a, b) => b[1] - a[1])[0][0];\n const cur = place.get(f);\n if (cur?.tab !== best) place.set(f, { tab: best, loss: cur?.loss ?? \"fieldset spans groups\" });\n }\n // a kept group no top-level field sits in has no prop to be defined on\n const firstUse: string[] = [];\n for (const f of v2.fields) {\n const t = place.get(f)?.tab;\n if (t !== undefined && !firstUse.includes(t)) firstUse.push(t);\n }\n const used = kept.filter((k) => firstUse.includes(k.g.name));\n // a kept group no top-level field sits in is declared on the component (component.tabs): V2 hides it, so does the dock\n const unused = kept.filter((k) => !firstUse.includes(k.g.name));\n for (const k of kept) ctx.keptTabs.add(k.g.name);\n // a group left out before a stored one moves it up a place: the list as a whole is not kept in its positions\n const firstGap = groups.findIndex((g) => !kept.some((k) => k.g === g));\n if (firstGap >= 0 && kept.some((k) => k.i > firstGap)) {\n const g = groups[firstGap];\n lose(ctx, \"/groups\", dropped.get(g.name) ?? \"unsupported key\");\n }\n // the read side lists the props' tabs (first use), then the declared ones: an `order` on each tab when that is not V2's\n const ordered = unused.length > 0 || used.some((k, i) => k.g.name !== firstUse[i]);\n kept.forEach((k, i) => {\n if (ordered) k.tab.order = Math.min(PROP_GROUP_ORDER_MAX, i);\n });\n ctx.declaredTabs = unused.map((k) => k.tab);\n for (const [f, t] of place) {\n const k = used.find((u) => u.g.name === t.tab);\n if (k) ctx.propTabs.set(f, { tab: k.tab, loss: t.loss });\n else if (t.loss) ctx.propTabs.set(f, { loss: t.loss });\n }\n}\n\n/**\n * Props lane: a V2 fieldset is an inline ui.group, defined on the first prop (at each level, sub-fields too) that uses\n * it. A fieldset no prop uses has nothing to be defined on; when the V2 order differs from where each group is first\n * met (depth first, a prop before its sub-fields: how propsToTypeSchema meets them), every group carries its `order`.\n */\nfunction propSetsFor(v2: TypeSchema, ctx: Ctx) {\n const sets = v2.fieldsets ?? [];\n const named = new Set(sets.map((s) => s.name));\n const firstSeen: string[] = [];\n const undeclared: string[] = [];\n const visit = (fields: FieldSchema[], lv: number) => {\n for (const f of fields) {\n if (f.fieldset !== undefined && !firstSeen.includes(f.fieldset)) {\n firstSeen.push(f.fieldset);\n if (!named.has(f.fieldset)) undeclared.push(f.fieldset);\n }\n if (lv >= MAX_FIELD_DEPTH) continue;\n const kids = previewKids(f);\n if (kids) visit(kids, lv + 1);\n }\n };\n visit(v2.fields, 1);\n // V2 arrange (field-list.tsx) draws a fieldset no schema declares as one titled by its name: it is that group here\n const derived: V2Fieldset[] = undeclared.map((name) => ({ name, title: name }));\n const declaredUsed = sets.filter((s) => firstSeen.includes(s.name)).length;\n derived.forEach((s, j) => {\n ctx.propSets.set(s.name, s);\n ctx.propOrder.set(s.name, sets.length + j);\n cat(ctx, `/fieldsets/${declaredUsed + j}`, \"fieldset (derived)\");\n });\n if (!sets.length && !derived.length) return;\n const used = [...sets, ...derived].filter((s) => firstSeen.includes(s.name));\n ctx.groupOrder = used.some((s, i) => s.name !== firstSeen[i]);\n let gap = false;\n sets.forEach((s, i) => {\n ctx.propSets.set(s.name, s);\n ctx.propOrder.set(s.name, i);\n if (!firstSeen.includes(s.name)) {\n gap = true;\n return lose(ctx, `/fieldsets/${i}`, \"fieldset (props)\");\n }\n // a fieldset left out before this one moves it up a place\n if (gap) {\n gap = false;\n lose(ctx, \"/fieldsets\", \"fieldset (props)\");\n }\n for (const k of Object.keys(s) as (keyof V2Fieldset)[]) {\n const v = s[k];\n if (v === undefined || k === \"name\" || k === \"collapsed\" || k === \"columns\" || k === \"collapsible\" || k === \"layout\") continue;\n if (k === \"title\") {\n if (s.title.length > PROP_GROUP_LABEL_MAX) lose(ctx, `/fieldsets/${i}/title`, \"fieldset name>limit\");\n } else if (k === \"description\") {\n if (!groupDescriptionOk(s.description)) lose(ctx, `/fieldsets/${i}/description`, \"help>limit\");\n } else lose(ctx, `/fieldsets/${i}/${k}`, \"unsupported key\");\n }\n });\n}\n\n/* ══════════════════════════════════════════════════════════════════════\n * prod → V2\n * ══════════════════════════════════════════════════════════════════════ */\n\ninterface ReadCtx {\n onLoss: (path: string, feature: string, reason: string) => void;\n /** fields lane: fieldset id → its fieldset. */\n sets: Map<string, Fieldset>;\n /** V2 lists read from an array's repeatable zone (stored as `{ repeatable: [...] }`) and groups read from its\n * non-repeatable zone alone (stored as `{ nonRepeatable: {...} }`). */\n zoned: WeakSet<FieldSchema>;\n /** V2 lists read from a modular field: their rows are stored as `{ __id, __type, data }`. */\n modular: WeakSet<FieldSchema>;\n /** V2 lists read from a polymorphic list prop (table, config.mode \"types\"): rows `{ _key, _type, ...fields }`. */\n types: WeakSet<FieldSchema>;\n /** slot props read (any depth), each with its config.multiple */\n slots: WeakMap<FieldSchema, boolean>;\n /** model slot fields read back: their children cross through the \"blocks\" plan */\n blocks: WeakSet<FieldSchema>;\n /** block slug → the block model a modular field's item type is read from. */\n blockModels: Map<string, ProdContentModel>;\n /** ToTypeSchemaOptions.plans */\n plans?: Map<string, ValuePlan>;\n}\n\n/** A prod field, prop or sub-field read into one lane-neutral shape. */\ninterface ProdNode {\n key: string;\n label: string;\n type: string;\n /** null: no help on purpose (reads as no description) */\n helpText?: string | null;\n required?: boolean;\n unique?: boolean;\n defaultValue?: unknown;\n options?: SelectOption[];\n config: FieldConfig;\n fields?: ProdNode[];\n /** array zones (fields lane) */\n zones?: { nonRepeatable?: ProdNode[]; repeatable?: { fields: ProdNode[]; minItems?: number; maxItems?: number } };\n ui: PropUi;\n openMode?: OpenMode;\n showIf?: ShowIf;\n readOnly?: true | \"developer\";\n lockReason?: string;\n helpMore?: string;\n advanced?: boolean;\n ai?: boolean;\n recommendedMax?: number;\n placeholder?: string;\n fieldsetId?: string;\n placement?: string;\n searchable?: boolean;\n localized?: boolean;\n /** Schema V2 B1: the field is archived (its values stay stored; forms leave it out). */\n archived?: boolean;\n}\n\nfunction readField(f: ContentModelField): ProdNode {\n const cfg: FieldConfig = { ...(f.config ?? {}) };\n const n: ProdNode = { ...(f as Obj), config: cfg, ui: { ...(f.ui ?? {}) } } as ProdNode;\n if (typeof cfg.placeholder === \"string\") {\n n.placeholder = cfg.placeholder;\n delete cfg.placeholder;\n }\n // a strict config's field keeps its placeholder in ui\n if (n.placeholder === undefined && typeof n.ui.placeholder === \"string\") n.placeholder = n.ui.placeholder;\n delete n.ui.placeholder;\n if ((f.type === \"multiselect\" || f.type === \"tags\") && cfg.options) {\n n.options = cfg.options;\n delete cfg.options;\n }\n n.fields = f.fields?.map(readField);\n // a list of object rows written as `config.fields` (no zones): its row fields, read as a legacy repeater's\n if (f.type === \"array\" && !cfg.zones && Array.isArray(cfg.fields)) {\n n.fields = [...(n.fields ?? []), ...(cfg.fields as ContentModelField[]).map(readField)];\n delete cfg.fields;\n }\n if (cfg.zones) {\n const z = cfg.zones;\n n.zones = {\n ...(z.nonRepeatable ? { nonRepeatable: z.nonRepeatable.map(readField) } : {}),\n ...(z.repeatable ? { repeatable: { ...z.repeatable, fields: z.repeatable.fields.map(readField) } } : {}),\n };\n delete cfg.zones;\n }\n return n;\n}\n\nfunction readProp(p: ComponentPropDef | ComponentSubField): ProdNode {\n const { config, fields, options, ...rest } = p as ComponentSubField & { config?: Obj };\n const cfg: FieldConfig = { ...(config ?? {}) };\n const n: ProdNode = { ...(rest as Obj), config: cfg, ui: { ...((p.ui as PropUi | undefined) ?? {}) } } as ProdNode;\n const opts = (cfg.options as SelectOption[] | undefined) ?? options;\n if (opts) n.options = opts;\n delete cfg.options;\n const kids = (cfg.fields as ComponentSubField[] | undefined) ?? fields;\n if (kids) n.fields = kids.map(readProp);\n delete cfg.fields;\n return n;\n}\n\n/** A stored choice → the V2 option: a dock icon reads back as the kit's Tabler name, the description as itself. */\nconst optionsFromProd = (opts: SelectOption[]): Option[] =>\n opts.map((o) => {\n if (typeof o === \"string\") return { value: o, label: o };\n const out: Option = { value: o.value, label: o.label };\n if (typeof o.icon === \"string\") out.icon = tablerIconOf(o.icon);\n if (typeof o.description === \"string\") out.description = o.description;\n return out;\n });\n\nfunction scaleFromConfig(s: NumberScale, at: string, ctx: ReadCtx): ScaleSchema {\n const steps = s.steps;\n const out: ScaleSchema = !Array.isArray(steps)\n ? { steps: { min: steps.min, max: steps.max, ...(steps.step !== undefined ? { step: steps.step } : {}) } }\n : steps.some((x) => typeof x.value === \"string\")\n ? { steps: (steps as Array<{ value: string; label: string }>).map((x) => ({ ...x })) }\n : (ctx.onLoss(`${at}/steps`, \"scale steps\", \"Numeric step lists read back as token steps named by their number.\"),\n { steps: (steps as Array<{ value: number; label?: string }>).map((x) => ({ value: String(x.value), label: x.label ?? String(x.value), px: x.value })) });\n if (s.units) out.units = s.units;\n if (s.defaultUnit) out.defaultUnit = s.defaultUnit;\n if (s.allowCustom !== undefined) out.allowCustom = isObj(s.allowCustom) ? JSON.parse(JSON.stringify(s.allowCustom)) : s.allowCustom;\n if (s.presets) out.presets = s.presets.map((p) => ({ ...(p.label !== undefined ? { label: p.label } : {}), value: typeof p.value === \"object\" ? { ...p.value } : p.value }));\n return out;\n}\n\n/**\n * Slot children with each `_variant` written as the family member that places it (`_type`): the variant the child's\n * component already is drops, another member swaps in. A variant no member places stays, and the write names it lost.\n */\nfunction childVariantsToTypes(v: unknown, family: NonNullable<Extract<VPlan, { k: \"slot\" }>[\"family\"]>): unknown {\n if (!Array.isArray(v)) return v;\n return v.map((c) => {\n if (!isObj(c) || typeof c._variant !== \"string\") return c;\n const own = family(typeof c._type === \"string\" ? c._type : \"\");\n const { _variant: _gone, ...rest } = c;\n // 🔴 The variant the child's own component IS keeps that component. Looked up by variant id it could come back as\n // ANOTHER member (two rows of one family sharing a slug tail: a workspace row and its project copy), and an edit\n // to any sibling row then rewrote this child's `_type` to a component nobody picked.\n if (own?.current === c._variant) return rest;\n const member = own?.member(c._variant);\n if (!member) return c;\n return { ...rest, _type: member };\n });\n}\n\n/** The prod children a preview path segment may name below a node (an object's, a list's rows'), or null for a leaf. */\nconst readKids = (n: ProdNode): ProdNode[] | null =>\n n.zones ? [...(n.zones.nonRepeatable ?? []), ...(n.zones.repeatable?.fields ?? [])] : n.fields && [\"object\", \"group\", \"repeater\", \"table\", \"array\"].includes(n.type) ? n.fields : null;\n\n/** A stored preview path → the V2 path: `image.altText` reads as `image.alt`, the rest as it is. */\nfunction previewPathFromProd(path: string, children: ProdNode[]): string {\n const segs = path.split(\".\");\n let node = children.find((c) => c.key === segs[0]);\n for (let i = 1; node && i < segs.length; i++) {\n const kids = readKids(node);\n if (kids) {\n node = kids.find((c) => c.key === segs[i]);\n continue;\n }\n if (node.type === \"image\") {\n const back = Object.entries(IMAGE_PATH_KEY).find(([, stored]) => stored === segs[i])?.[0];\n if (back) segs[i] = back;\n }\n break;\n }\n return segs.join(\".\");\n}\n\nfunction previewFromProd(pv: UiPreview, children: ProdNode[]): PreviewConfig {\n const out: PreviewConfig = { ...pv };\n for (const k of [\"title\", \"subtitle\", \"media\"] as const) if (typeof pv[k] === \"string\") out[k] = previewPathFromProd(pv[k], children);\n if (typeof pv.icon === \"string\") out.icon = tablerIconOf(pv.icon);\n return out;\n}\n\nfunction showIfToCondition(s: ShowIf, siblings: ProdNode[], at: string, ctx: ReadCtx): Condition | undefined {\n const conds: Condition[] = [];\n for (const r of s.rules) {\n const c = showIfRuleToCondition(r, r.scope ? [] : siblings);\n if (!c) return void ctx.onLoss(at, \"condition\", `V2 conditions have no \"${r.op}\" with this value; the field always shows.`);\n conds.push(r.scope ? { ...c, scope: r.scope } : c);\n }\n if (!conds.length) return undefined;\n const [head, ...also] = conds;\n return { ...head, ...(also.length ? { also } : {}), ...(s.match === \"any\" && conds.length > 1 ? { match: \"any\" as const } : {}) };\n}\n\n/** One prod rule as a V2 rule: eq / in / isSet keep V2's legacy forms, the rest name their `op`. */\nfunction showIfRuleToCondition(r: ShowIfRule, siblings: ProdNode[]): Condition | undefined {\n const sib = siblings.find((x) => x.key === r.field);\n const t = sib?.type === \"number\" ? \"number\" : sib?.type;\n const read = (v: string) => coerceRuleValue(t, v);\n const list = (Array.isArray(r.value) ? r.value : [r.value ?? \"\"]).map(read);\n switch (r.op) {\n case \"eq\":\n return Array.isArray(r.value) ? { field: r.field, equals: r.value.map(read) } : { field: r.field, equals: read(r.value ?? \"\") };\n case \"in\":\n return { field: r.field, equals: list };\n case \"isSet\":\n case \"notEmpty\":\n return { field: r.field, notEmpty: true };\n case \"empty\":\n return { field: r.field, op: \"empty\" };\n case \"neq\":\n return { field: r.field, op: \"isNot\", value: Array.isArray(r.value) ? list : read(r.value ?? \"\") };\n case \"notIn\":\n return { field: r.field, op: \"notIn\", value: list };\n case \"gt\":\n case \"lt\": {\n const n = Number(r.value);\n return typeof r.value === \"string\" && r.value.trim() !== \"\" && Number.isFinite(n) ? { field: r.field, op: r.op, value: n } : undefined;\n }\n default:\n return undefined;\n }\n}\n\nfunction v2Type(n: ProdNode, at: string, ctx: ReadCtx): FieldSchema[\"type\"] {\n switch (n.type) {\n case \"text\":\n return n.config.inputType === \"url\" ? \"url\" : \"string\";\n case \"longtext\":\n return \"text\";\n case \"document\":\n ctx.onLoss(`${at}/type`, \"document\", \"A document (article body) reads as rich text.\");\n return \"richtext\";\n case \"phone\":\n ctx.onLoss(`${at}/type`, \"phone\", \"V2 has no phone type; it reads as a string.\");\n return \"string\";\n case \"location\":\n return \"geopoint\";\n case \"number\":\n return n.ui.control === \"rating\" ? \"rating\" : \"number\";\n case \"select\":\n // the old schema editor's multi-choice select (config.multiSelect) stores a string[] like a multiselect\n return n.config.multiSelect === true ? \"multiselect\" : \"select\";\n case \"multiselect\":\n // V2 multiselect never writes allowCustom; free entry is tags, whose options are its suggestions\n return n.config.allowCustom === true ? \"tags\" : \"multiselect\";\n case \"group\":\n case \"object\":\n return \"object\";\n case \"repeater\":\n case \"table\":\n case \"array\":\n case \"multi-reference\":\n case \"multiReference\":\n case \"modular\":\n return \"array\";\n case \"form\":\n return \"reference\";\n case \"component-ref\":\n case \"sections\":\n case \"slot\":\n ctx.onLoss(`${at}/type`, n.type, \"This prod type stores component or block instances V2 cannot edit; it reads as json.\");\n return \"json\";\n default:\n return n.type as FieldSchema[\"type\"];\n }\n}\n\nfunction readToV2(n: ProdNode, at: string, siblings: ProdNode[], ctx: ReadCtx, top: boolean, lane: AdapterTarget): FieldSchema {\n /** a data table holds one TableValue: the V2 `table` field, not a list of rows. A prop says so (config.mode \"data\");\n * a field's table is always one (BE tableFieldSchema: `mode` is optional there and can only be \"data\") */\n const dataTable = isDataTableProp(n) || (lane === \"fields\" && n.type === \"table\");\n /** a slot prop: component instances, read as the V2 slot (its children `{ _key, _type, _settings?, ...props }`) */\n const slotProp = lane === \"props\" && n.type === \"slot\";\n /** a model slot field: inline children of the kind:'block' models config.blockSlugs names */\n const blockSlot = lane === \"fields\" && n.type === \"slot\";\n const type = dataTable ? \"table\" : slotProp || blockSlot ? \"slot\" : v2Type(n, at, ctx);\n const f: FieldSchema = { name: n.key, title: n.label, type };\n const cfg = n.config;\n const val: NonNullable<FieldSchema[\"validation\"]> = {};\n const loss = (k: string, feature: string, reason: string) => ctx.onLoss(`${at}/${k}`, feature, reason);\n\n if (typeof n.helpText === \"string\") f.description = n.helpText;\n if (n.helpMore !== undefined) f.helpMore = n.helpMore;\n if (n.placeholder !== undefined) f.placeholder = n.placeholder;\n if (n.required !== undefined) val.required = n.required;\n if (n.unique !== undefined) val.unique = n.unique;\n if (n.recommendedMax !== undefined) val.recommendedMax = n.recommendedMax;\n if (n.advanced !== undefined) f.advanced = n.advanced;\n if (n.ai !== undefined) f.ai = n.ai;\n if (n.openMode !== undefined) f.openMode = n.openMode;\n if (n.readOnly === true) f.readOnly = true;\n if (n.archived === true) f.archived = true;\n // ui.access is the V2 access as stored; a developer lock with none (older rows) reads as edit: schema.manage\n if (n.ui.access) f.access = { ...n.ui.access };\n else if (n.readOnly === \"developer\") f.access = { edit: \"schema.manage\" };\n if (n.lockReason !== undefined) f.lockReason = n.lockReason;\n // locked text holding a Shopify id reads back as V2's Shopify reference, still locked (the lock reason is the marker)\n const shopify = n.readOnly === true && n.lockReason === SHOPIFY_REF_LOCK && (n.type === \"text\" || (n.type === \"array\" && n.config.itemType === \"text\"));\n if (shopify) {\n delete f.lockReason;\n if (n.type === \"text\") {\n f.type = \"reference\";\n f.reference = { to: [\"shopify\"] };\n }\n }\n if (n.localized !== undefined) f.localized = n.localized;\n if (n.ui.hidden !== undefined) f.hidden = n.ui.hidden;\n if (n.ui.rows !== undefined) f.rows = n.ui.rows;\n if (n.ui.synced !== undefined) f.synced = { ...n.ui.synced };\n if (n.ui.valueShape !== undefined) f.valueShape = n.ui.valueShape;\n if (n.showIf) {\n const c = showIfToCondition(n.showIf, siblings, `${at}/showIf`, ctx);\n if (c) f.hidden = c;\n }\n if (n.placement !== undefined) loss(\"placement\", \"placement\", \"V2 has no editor placement; the field renders in the form.\");\n if (n.searchable === false) loss(\"searchable\", \"searchable\", \"V2 has no search-index flag.\");\n if (n.ui.collapsed !== undefined) loss(\"ui/collapsed\", \"ui.collapsed\", \"V2 fields have no start-collapsed flag.\");\n if (n.ui.reorderable !== undefined) loss(\"ui/reorderable\", \"ui.reorderable\", \"V2 lists are always reorderable.\");\n if (n.ui.input !== undefined) loss(\"ui/input\", \"ui.input\", \"Custom dock inputs are a dock feature V2 has no key for.\");\n\n // the tab and the section\n if (n.fieldsetId !== undefined) {\n const set = ctx.sets.get(n.fieldsetId);\n if (set?.kind === \"tab\") {\n if (top) f.group = set.id;\n else loss(\"fieldsetId\", \"fieldset\", \"Only top-level V2 fields sit in a tab; this nested field's tab is dropped.\");\n } else if (set) {\n f.fieldset = set.id;\n if (top && set.tab !== undefined) f.group = set.tab;\n } else loss(\"fieldsetId\", \"fieldset\", `No fieldset \"${n.fieldsetId}\" exists on this model; the membership is dropped.`);\n }\n if (lane === \"props\" && n.ui.group) f.fieldset = n.ui.group.id;\n // a nested prop or field names its tab as { id } (V2's nested `group`, which the engine ignores there)\n if ((lane === \"props\" || !top) && n.ui.tab) f.group = n.ui.tab.id;\n for (const k of [\"target\", \"stale\", \"origin\"] as const)\n if ((n as unknown as Obj)[k] !== undefined)\n loss(k, k, k === \"target\" ? \"A prop's target (where it writes in the component) is binding, not schema: V2 has no key for it, so the host keeps it.\" : `V2 has no \"${k}\" key.`);\n\n // per type; what a branch reads is marked used, and every prod config / ui key left unread is reported\n const used = new Set<string>([\"placeholder\", \"zones\", \"options\", \"fields\"]);\n const usedUi = new Set<string>([\"collapsed\", \"reorderable\", \"input\", \"access\", \"hidden\", \"rows\", \"synced\", \"valueShape\"]);\n const use = (...k: string[]) => k.forEach((x) => used.add(x));\n const useUi = (...k: string[]) => k.forEach((x) => usedUi.add(x));\n if (!top && lane === \"fields\") useUi(\"tab\");\n if (lane === \"props\") useUi(\"group\");\n if (lane === \"props\") useUi(\"tab\");\n if (RICH_TYPES.has(n.type) && cfg.references !== undefined) {\n use(\"references\");\n const { kept, named } = richRefs(cfg.references);\n if (named) loss(\"config/references\", \"richtext references\", FEATURES[\"richtext references\"].reason);\n if (kept) f.references = kept;\n }\n if (RICH_TYPES.has(n.type) && cfg.features !== undefined) {\n use(\"features\");\n const { kept, named } = richFeatures(cfg.features);\n if (named) loss(\"config/features\", \"richtext features\", FEATURES[\"richtext features\"].reason);\n // every feature is V2's absent list (V2's rich text offers them all); a narrower set reads back as stored\n if (kept.length < ALL_RICH_FEATURES.length) f.features = kept;\n }\n if ([\"text\", \"longtext\", \"url\", \"richtext\", \"document\"].includes(n.type)) {\n use(\"minLength\", \"maxLength\", \"pattern\", \"patternMessage\", \"inputType\");\n if (typeof cfg.minLength === \"number\") val.min = cfg.minLength;\n if (typeof cfg.maxLength === \"number\") val.max = cfg.maxLength;\n if (typeof cfg.pattern === \"string\") val.pattern = cfg.pattern;\n if (typeof cfg.patternMessage === \"string\") val.patternMessage = cfg.patternMessage;\n }\n if (type === \"number\" || type === \"rating\") {\n const numeric: NonNullable<FieldSchema[\"numeric\"]> = {};\n for (const k of [\"min\", \"max\", \"step\"] as const) if (typeof cfg[k] === \"number\") numeric[k] = cfg[k] as number;\n if (n.type === \"rating\") {\n if (numeric.step === V2_RATING_STEP) delete numeric.step;\n else if (numeric.step === undefined) numeric.step = 1;\n }\n // the old rating (a number with ui.control \"rating\") drops bounds equal to its default\n const ratingDefault = type === \"rating\" && n.type === \"number\" && ratingIsDefault(numeric);\n if (typeof cfg.unit === \"string\") numeric.unit = cfg.unit;\n if (Object.keys(numeric).length && !ratingDefault) f.numeric = numeric;\n // the error bounds (V2 validation.min / max)\n const bounds = cfg.validation;\n if (isObj(bounds)) for (const k of [\"min\", \"max\"] as const) if (typeof bounds[k] === \"number\") val[k] = bounds[k];\n if (cfg.scale) f.scale = scaleFromConfig(cfg.scale, `${at}/config/scale`, ctx);\n if (n.ui.control === \"slider\") f.layout = \"slider\";\n use(\"min\", \"max\", \"step\", \"scale\", \"unit\", \"validation\");\n if (n.ui.control === \"slider\" || n.ui.control === \"rating\") useUi(\"control\");\n }\n // the V2 control layouts: segmented on a select, the rest on the types CONTROL_TYPES lists\n const control = n.ui.control;\n if (control !== undefined && control !== \"slider\" && control !== \"rating\" && (control === \"segmented\" ? type === \"select\" : CONTROL_TYPES[control]?.includes(type))) {\n f.layout = control;\n useUi(\"control\");\n }\n if (n.type === \"select\") use(\"multiSelect\");\n // an inline-SVG icon (the import's `media: \"icon\"`, and an agent's): the image control takes SVGs only\n if (n.type === \"image\") {\n use(\"media\");\n if (cfg.media === \"icon\") f.svgOnly = true;\n }\n // a link label's partner, named by the owner's answer (the editable plan's `link-pair`): `linkLabelHref` reads it first\n if (typeof cfg.linkHref === \"string\" && cfg.linkHref) f.linkHref = cfg.linkHref;\n use(\"linkHref\");\n if ((type === \"select\" || type === \"multiselect\" || type === \"tags\") && n.options) f.options = optionsFromProd(n.options);\n if (type === \"multiselect\" || type === \"tags\") {\n if (typeof cfg.min === \"number\") val.min = cfg.min;\n if (typeof cfg.max === \"number\") val.max = cfg.max;\n use(\"min\", \"max\", \"allowCustom\");\n }\n if (n.type === \"code\") {\n if (typeof cfg.language === \"string\") f.language = cfg.language;\n else if (cfg.language !== undefined) loss(\"config/language\", \"code language\", \"The field's language is not a string; it is dropped.\");\n if (Array.isArray(cfg.languages) && cfg.languages.every((l) => typeof l === \"string\")) f.languages = [...cfg.languages];\n else if (cfg.languages !== undefined) loss(\"config/languages\", \"code language\", \"The field's languages are not a list of names; they are dropped.\");\n use(\"language\", \"languages\");\n }\n if (n.type === \"tags\" && cfg.allowCustom === false) loss(\"config/allowCustom\", \"tags closed\", \"V2 tags always take free entry; a closed tags list reads as open tags.\");\n if (type === \"date\" || type === \"datetime\") use(\"timezone\", \"includeTime\");\n if ((type === \"date\" || type === \"datetime\") && typeof cfg.timezone === \"string\") f.timezone = cfg.timezone === \"site\" ? \"site\" : `fixed:${cfg.timezone}`;\n if ((type === \"date\" || type === \"datetime\") && typeof cfg.timezone === \"boolean\") f.timezone = cfg.timezone;\n if (n.type === \"reference\" || n.type === \"multi-reference\" || n.type === \"multiReference\") use(\"contentModelId\", \"polymorphic\", \"allowedModelSlugs\", \"targets\", \"filter\");\n if (n.type === \"reference\") {\n const ref = referenceFromConfig(cfg);\n if (ref) f.reference = ref;\n }\n if (n.type === \"form\") f.reference = { to: [\"form\"] };\n if (n.type === \"object\" || n.type === \"group\") {\n f.fields = (n.fields ?? []).map((c, i) => readToV2(c, `${at}/fields/${i}`, n.fields ?? [], ctx, false, lane));\n if (n.ui.preview) f.preview = previewFromProd(n.ui.preview, n.fields ?? []);\n if (n.ui.icon) f.icon = tablerIconOf(n.ui.icon);\n useUi(\"preview\", \"icon\");\n }\n if (n.type === \"array\" && n.zones?.nonRepeatable) {\n const nr = n.zones.nonRepeatable;\n const fields = nr.map((c, i) => readToV2(c, `${at}/config/zones/nonRepeatable/${i}`, nr, ctx, false, lane));\n if (n.zones.repeatable) {\n // a zone pair stores {nonRepeatable, repeatable}: V2 edits it as an object of that shape\n const kids: FieldSchema[] = [{ name: \"nonRepeatable\", title: n.label, type: \"object\", fields }, listOf(n, n.zones.repeatable.fields, \"repeatable\", `${at}/config/zones/repeatable`, ctx, lane)];\n ctx.onLoss(`${at}/config/zones`, \"zone envelope\", \"A zone pair reads as an object with nonRepeatable and repeatable children, matching its stored {nonRepeatable, repeatable} value.\");\n Object.assign(f, { type: \"object\", fields: kids });\n } else {\n // a group stores {nonRepeatable: {...}}: V2 edits the children as a plain object, wrapped again on write (the plan)\n Object.assign(f, { type: \"object\", fields });\n ctx.zoned.add(f);\n }\n } else if (slotProp) {\n // the resolved ids when the host set them, else the V2 block names as written (config.allow)\n const ids = Array.isArray(cfg.componentIds) ? cfg.componentIds.filter((x): x is string => typeof x === \"string\") : [];\n const names = Array.isArray(cfg.allow) ? cfg.allow.filter((x): x is string => typeof x === \"string\") : [];\n f.of = ids.length ? { type: \"block\", allow: ids } : names.length ? { type: \"block\", allow: names } : { type: \"block\" };\n ctx.slots.set(f, cfg.multiple === true);\n const settings = Array.isArray(cfg.slotSettings) ? (cfg.slotSettings as ComponentSubField[]).map(readProp) : [];\n if (settings.length) f.slotSettings = settings.map((c, k) => readToV2(c, `${at}/config/slotSettings/${k}`, settings, ctx, false, lane));\n // a single slot holds one instance: V2 has no single slot, so it reads as a slot of at most one\n if (cfg.multiple !== true) {\n val.max = 1;\n loss(\"config/multiple\", \"slot single\", \"A single slot holds one component instance; V2 reads it as a slot of at most one block.\");\n } else {\n if (typeof cfg.minItems === \"number\") val.min = cfg.minItems;\n if (typeof cfg.maxItems === \"number\") val.max = cfg.maxItems;\n }\n use(\"multiple\", \"componentIds\", \"allow\", \"minItems\", \"maxItems\", \"slotSettings\");\n } else if (blockSlot) {\n // config.blockSlugs read back as the V2 block names (camelCase, like a modular item type's)\n const slugs = Array.isArray(cfg.blockSlugs) ? cfg.blockSlugs.filter((x): x is string => typeof x === \"string\") : [];\n f.of = slugs.length ? { type: \"block\", allow: slugs.map(camel) } : { type: \"block\" };\n ctx.blocks.add(f);\n const settings = Array.isArray(cfg.slotSettings) ? (cfg.slotSettings as ContentModelField[]).map(readField) : [];\n if (settings.length) f.slotSettings = settings.map((c, k) => readToV2(c, `${at}/config/slotSettings/${k}`, settings, ctx, false, lane));\n if (typeof cfg.minItems === \"number\") val.min = cfg.minItems;\n if (typeof cfg.maxItems === \"number\") val.max = cfg.maxItems;\n use(\"blockSlugs\", \"minItems\", \"maxItems\", \"slotSettings\");\n } else if (lane === \"props\" && n.type === \"table\" && cfg.mode === \"types\") {\n // a polymorphic list: each item type `{ name, label?, fields, icon?, preview? }` is a V2 object item type\n const types = (Array.isArray(cfg.itemTypes) ? cfg.itemTypes : []) as NonNullable<ComponentPropDef[\"config\"]>[\"itemTypes\"] & {};\n f.of = types.map((t, j) => {\n const kids = (t.fields ?? []).map(readProp);\n const item: FieldSchema = { name: t.name, title: t.label ?? t.name, type: \"object\", fields: kids.map((c, k) => readToV2(c, `${at}/config/itemTypes/${j}/fields/${k}`, kids, ctx, false, lane)) };\n if (t.icon) item.icon = tablerIconOf(t.icon);\n if (t.preview) item.preview = previewFromProd(t.preview, kids);\n return item;\n });\n ctx.types.add(f);\n if (n.ui.itemLabel !== undefined) f.itemNoun = n.ui.itemLabel.toLowerCase();\n if (n.ui.icon) f.icon = tablerIconOf(n.ui.icon);\n const l = n.ui.layout;\n if (l === \"grid\" || l === \"list\") f.arrayLayout = l;\n else if (l === \"rows\") f.layout = \"list\";\n else if (l) loss(\"ui/layout\", \"ui.layout\", `V2 has no \"${l}\" layout for a list of item types.`);\n if (typeof cfg.minItems === \"number\") val.min = cfg.minItems;\n if (typeof cfg.maxItems === \"number\") val.max = cfg.maxItems;\n use(\"mode\", \"itemTypes\", \"minItems\", \"maxItems\");\n useUi(\"itemLabel\", \"icon\", \"layout\");\n } else if (dataTable) {\n f.table = tableOptionsFromConfig(cfg);\n use(\"mode\", \"columnTypes\", \"lockColumns\", \"requireCaption\", \"allowGroups\", \"allowFootnotes\", \"allowNote\", \"minRows\", \"maxRows\", \"maxColumns\", \"settings\", \"jsonLd\");\n } else if ((n.type === \"array\" && (n.zones?.repeatable || (!n.zones && !cfg.itemType && n.fields?.length))) || n.type === \"repeater\" || n.type === \"table\") {\n const kids = n.zones?.repeatable?.fields ?? n.fields ?? [];\n const list = listOf(n, kids, n.key, at, ctx, lane);\n useUi(\"preview\", \"icon\", \"itemLabel\", \"layout\", \"itemName\", \"itemTitle\");\n if (n.zones?.repeatable) ctx.zoned.add(f);\n f.of = list.of;\n if (list.itemNoun !== undefined) f.itemNoun = list.itemNoun;\n if (list.arrayLayout) f.arrayLayout = list.arrayLayout;\n if (list.layout) f.layout = list.layout;\n const r = n.zones?.repeatable ?? (n.type === \"table\" ? { minItems: cfg.minItems, maxItems: cfg.maxItems } : undefined);\n if (typeof r?.minItems === \"number\") val.min = r.minItems;\n if (typeof r?.maxItems === \"number\") val.max = r.maxItems;\n if (n.type === \"table\") use(\"minItems\", \"maxItems\");\n } else if (n.type === \"array\" && cfg.itemType) {\n f.of = [shopify ? { ...itemOf(n), type: \"reference\", reference: { to: [\"shopify\"] } } : { ...itemOf(n), type: cfg.itemType === \"text\" ? \"string\" : cfg.itemType, ...itemSettingsFromProd(cfg.item) }];\n leafListChrome(n, f, loss, \"a list of scalars\");\n if (typeof cfg.minItems === \"number\") val.min = cfg.minItems;\n if (typeof cfg.maxItems === \"number\") val.max = cfg.maxItems;\n use(\"itemType\", \"minItems\", \"maxItems\", \"item\");\n useUi(\"layout\", \"itemLabel\", \"itemName\", \"itemTitle\");\n } else if (n.type === \"modular\") {\n // each item type is a block model: its title and fields are read from that model (a stub when it was not passed)\n const slugs = (cfg.blockSlugs as string[] | undefined) ?? [];\n f.of = slugs.map((s, j) => {\n const bm = ctx.blockModels.get(s);\n // how a row of this block type reads in this field (ui.blocks, by slug)\n const chrome = n.ui.blocks?.[s];\n const kids = bm ? bm.fields.map(readField) : [];\n const item: FieldSchema = bm\n ? { name: camel(s), title: bm.name, type: \"object\" as const, fields: kids.map((c, k) => readToV2(c, `${at}/of/${j}/fields/${k}`, kids, ctx, false, lane)) }\n : { name: camel(s), title: camel(s), type: \"object\" as const, fields: [] };\n if (chrome?.icon) item.icon = tablerIconOf(chrome.icon);\n if (chrome?.preview) item.preview = previewFromProd(chrome.preview, kids);\n if (chrome?.openMode) item.openMode = chrome.openMode;\n return item;\n });\n const missing = slugs.filter((s) => !ctx.blockModels.has(s));\n if (missing.length)\n ctx.onLoss(`${at}/config/blockSlugs`, \"block models\", `Each item type is its own block model; ${missing.join(\", \")} was not passed, so its fields read as none.`);\n ctx.modular.add(f);\n if (n.ui.itemLabel) f.itemNoun = n.ui.itemLabel.toLowerCase();\n if (n.ui.icon) f.icon = tablerIconOf(n.ui.icon);\n const l = n.ui.layout;\n if (l === \"grid\" || l === \"list\") f.arrayLayout = l;\n else if (l === \"rows\") f.layout = \"list\";\n else if (l) loss(\"ui/layout\", \"ui.layout\", `V2 has no \"${l}\" layout for a list of blocks.`);\n if (typeof cfg.minItems === \"number\") val.min = cfg.minItems;\n if (typeof cfg.maxItems === \"number\") val.max = cfg.maxItems;\n use(\"blockSlugs\", \"minItems\", \"maxItems\");\n useUi(\"itemLabel\", \"icon\", \"layout\", \"blocks\");\n } else if (n.type === \"multi-reference\" || n.type === \"multiReference\") {\n const ref = referenceFromConfig(cfg);\n f.of = [{ ...itemOf(n), type: \"reference\", ...(ref ? { reference: ref } : {}) }];\n leafListChrome(n, f, loss, \"a list of entries\");\n if (typeof cfg.min === \"number\") val.min = cfg.min;\n if (typeof cfg.max === \"number\") val.max = cfg.max;\n use(\"min\", \"max\");\n useUi(\"layout\", \"itemLabel\", \"itemName\", \"itemTitle\");\n }\n if (n.type === \"array\" && n.zones?.nonRepeatable && n.zones.repeatable) useUi(\"preview\", \"icon\", \"itemLabel\", \"layout\"); // read by listOf\n for (const [k, x] of Object.entries(cfg)) {\n if (x === undefined || used.has(k)) continue;\n // a key the host reads from the stored prop (CATALOG \"host config\"): named, as a catalog item, not a loss\n if (isHostConfigKey(n.type, k) || isHostConfigKey(type, k)) loss(`config/${k}`, \"host config\", CATALOG[\"host config\"]);\n else loss(`config/${k}`, \"config\", `V2 has no \"${k}\" setting on a ${type} field.`);\n }\n for (const [k, x] of Object.entries(n.ui)) if (x !== undefined && !usedUi.has(k)) loss(`ui/${k}`, `ui.${k}`, `V2 has no ui.${k} on a ${type} field.`);\n if (n.defaultValue !== undefined || (top && ctx.plans)) {\n const plan = readPlan(f, n.type, ctx.zoned, ctx.modular, ctx.types, ctx.slots, ctx.blocks);\n if (top) ctx.plans?.set(f.name, plan);\n if (n.defaultValue !== undefined) f.initialValue = planFromProd(plan, n.defaultValue, (rel, reason) => loss(`defaultValue${rel}`, \"stored value\", reason));\n }\n if (Object.keys(val).length) f.validation = val;\n return f;\n}\n\n/** config.item → the V2 item field's description, localized flag and validation (in V2's key order). */\nfunction itemSettingsFromProd(item: unknown): Partial<FieldSchema> {\n if (!isObj(item)) return {};\n const s = item as ArrayItemSettings;\n const out: Partial<FieldSchema> = {};\n const val: NonNullable<FieldSchema[\"validation\"]> = {};\n if (s.required !== undefined) val.required = s.required;\n if (s.minLength !== undefined) val.min = s.minLength;\n if (s.maxLength !== undefined) val.max = s.maxLength;\n if (s.pattern !== undefined) val.pattern = s.pattern;\n if (s.patternMessage !== undefined) val.patternMessage = s.patternMessage;\n if (Object.keys(val).length) out.validation = val;\n if (s.localized !== undefined) out.localized = s.localized;\n if (s.helpText !== undefined) out.description = s.helpText;\n return out;\n}\n\n/** A reference config → the V2 `reference`: entry models first, then config.targets; config.filter as written. */\nfunction referenceFromConfig(cfg: FieldConfig): FieldSchema[\"reference\"] | undefined {\n const entries = cfg.polymorphic ? (cfg.allowedModelSlugs ?? []) : cfg.contentModelId ? [cfg.contentModelId] : [];\n const targets: string[] = Array.isArray(cfg.targets) ? cfg.targets.filter((t) => typeof t === \"string\") : [];\n const to = [...entries, ...targets];\n if (!to.length && typeof cfg.filter !== \"string\") return undefined;\n return { to, ...(typeof cfg.filter === \"string\" ? { filter: cfg.filter } : {}) };\n}\n\n/** A list of scalars or entries: its item's name and title (ui.itemName / ui.itemTitle, else the convention). */\nconst itemOf = (n: ProdNode) => {\n const conv = conventionItem(n.key, n.label);\n return { name: n.ui.itemName ?? conv.name, title: n.ui.itemTitle ?? conv.title };\n};\n\n/** A list of scalars or entries: the noun (ui.itemLabel) and its layout (rows → list, gallery → grid tiles). */\nfunction leafListChrome(n: ProdNode, f: FieldSchema, loss: (k: string, feature: string, reason: string) => void, what: string) {\n if (n.ui.itemLabel !== undefined) f.itemNoun = n.ui.itemLabel.toLowerCase();\n const l = n.ui.layout;\n if (l === \"rows\") f.layout = \"list\";\n else if (l === \"gallery\") f.arrayLayout = \"grid\";\n else if (l) loss(\"ui/layout\", \"ui.layout\", `V2 has no \"${l}\" layout for ${what}.`);\n}\n\n/** A list of object rows (zones.repeatable, legacy repeater, prop table) → the V2 array's single item type. */\nfunction listOf(n: ProdNode, kids: ProdNode[], name: string, at: string, ctx: ReadCtx, lane: AdapterTarget) {\n const conv = conventionItem(name, n.label, n.ui.itemLabel);\n const item: FieldSchema = {\n name: n.ui.itemName ?? conv.name,\n title: n.ui.itemTitle ?? conv.title,\n type: \"object\",\n fields: kids.map((c, i) => readToV2(c, `${at}/fields/${i}`, kids, ctx, false, lane)),\n };\n if (n.ui.preview) item.preview = previewFromProd(n.ui.preview, kids);\n if (n.ui.icon) item.icon = tablerIconOf(n.ui.icon);\n const out: { name: string; title: string; type: \"array\"; of: FieldSchema[]; itemNoun?: string; arrayLayout?: \"list\" | \"grid\"; layout?: FieldSchema[\"layout\"] } = {\n name,\n title: n.label,\n type: \"array\",\n of: [item],\n };\n // the noun is stored as ui.itemLabel; with none, the engine already falls back to the item title\n if (n.ui.itemLabel !== undefined) out.itemNoun = n.ui.itemLabel.toLowerCase();\n const l = n.ui.layout;\n if (l === \"grid\" || l === \"list\") out.arrayLayout = l;\n else if (l === \"rows\") out.layout = \"list\";\n else if (l) ctx.onLoss(`${at}/ui/layout`, \"ui.layout\", `V2 has no \"${l}\" layout for rows.`);\n return out;\n}\n\n/** A prod content model (both dialects) → TypeSchema. */\nexport function toTypeSchema(model: ProdContentModel, opts: ToTypeSchemaOptions = {}): TypeSchema {\n const ctx: ReadCtx = {\n onLoss: (path, feature, reason) => opts.onLoss?.({ path, feature, reason }),\n sets: new Map(),\n zoned: new WeakSet(),\n modular: new WeakSet(),\n types: new WeakSet(),\n slots: new WeakMap(),\n blocks: new WeakSet(),\n blockModels: new Map((opts.blockModels ?? []).map((m) => [m.slug, m] as const)),\n plans: opts.plans,\n };\n const sets = model.fieldsets ?? [];\n const groups: FieldGroup[] = [];\n const fieldsets: V2Fieldset[] = [];\n sets.forEach((s, i) => {\n ctx.sets.set(s.id, s);\n if (s.kind === \"tab\") {\n const g: FieldGroup = { name: s.id, title: s.name };\n if (s.icon) g.icon = tablerIconOf(s.icon);\n if (groups.length === 0) g.default = true;\n groups.push(g);\n return;\n }\n const fs: V2Fieldset = { name: s.id, title: s.name };\n if (s.description !== undefined) fs.description = s.description;\n for (const k of [\"collapsed\", \"collapsible\", \"columns\", \"layout\"] as const) if (s[k] !== undefined) (fs as unknown as Obj)[k] = s[k];\n if (s.kind === \"row\") ctx.onLoss(`/fieldsets/${i}/kind`, \"fieldset row\", \"V2 has no row fieldset; it reads as a section.\");\n if (s.icon !== undefined) ctx.onLoss(`/fieldsets/${i}/icon`, \"fieldset icon\", \"V2 sections have no icon.\");\n fieldsets.push(fs);\n });\n // the `_variant` select of a model with v2.variants is V2's block variants, not a field\n const variantField = model.v2?.variants ? model.fields.find((f) => f.key === BLOCK_VARIANT_KEY && f.type === \"select\") : undefined;\n const nodes = model.fields.filter((f) => f !== variantField).map(readField);\n const out: TypeSchema = {\n name: camel(model.slug),\n title: model.name,\n kind: model.kind === \"block\" ? \"block\" : model.v2?.shape ?? \"entry\",\n fields: nodes.map((n, i) => readToV2(n, `/fields/${i}`, nodes, ctx, true, \"fields\")),\n };\n if (model.v2?.placement) out.placement = model.v2.placement;\n if (variantField) {\n const meta = model.v2!.variants!;\n out.variants = ((variantField as { options?: { label: string; value: string }[] }).options ?? []).map((o) => ({\n id: o.value,\n name: o.label,\n ...(meta[o.value]?.description !== undefined ? { description: meta[o.value]!.description } : {}),\n }));\n }\n // listPreview names top-level field keys (or dotted paths into them), as a component preview names props\n if (model.listPreview) out.preview = previewFromProd(model.listPreview, nodes);\n if (model.v2?.category) out.category = model.v2.category;\n if (model.description !== undefined) out.description = model.description;\n if (model.icon) out.icon = tablerIconOf(model.icon);\n if (fieldsets.length) out.fieldsets = fieldsets;\n if (groups.length) out.groups = groups;\n return out;\n}\n\n/** A prod component's props → TypeSchema (kind \"block\"); prop groups read back as fieldsets. */\nexport function propsToTypeSchema(component: ProdComponent, opts: ToTypeSchemaOptions = {}): TypeSchema {\n const ctx: ReadCtx = {\n onLoss: (path, feature, reason) => opts.onLoss?.({ path, feature, reason }),\n sets: new Map(),\n zoned: new WeakSet(),\n modular: new WeakSet(),\n types: new WeakSet(),\n slots: new WeakMap(),\n blocks: new WeakSet(),\n blockModels: new Map((opts.blockModels ?? []).map((m) => [m.slug, m] as const)),\n plans: opts.plans,\n };\n const nodes = component.props.map(readProp);\n // prop groups as V2 fieldsets, met depth first (a prop, then its sub-fields: groups nest), sorted by `order` when set\n const fieldsets: V2Fieldset[] = [];\n const order = new Map<string, number>();\n const visit = (list: ProdNode[], at: string) =>\n list.forEach((n, i) => {\n const g = n.ui.group;\n if (g && !fieldsets.some((s) => s.name === g.id)) {\n const fs: V2Fieldset = { name: g.id, title: g.label ?? g.id };\n if (g.description !== undefined) fs.description = g.description;\n if (g.collapsed !== undefined) fs.collapsed = g.collapsed;\n if (g.columns !== undefined) fs.columns = g.columns;\n if (g.collapsible !== undefined) fs.collapsible = g.collapsible;\n if (g.layout !== undefined) fs.layout = g.layout;\n if (typeof g.order === \"number\") order.set(g.id, g.order);\n if (g.kind === \"row\") ctx.onLoss(`${at}/${i}/ui/group/kind`, \"fieldset row\", \"V2 has no row fieldset; it reads as a section.\");\n if (g.icon !== undefined) ctx.onLoss(`${at}/${i}/ui/group/icon`, \"fieldset icon\", \"V2 sections have no icon.\");\n fieldsets.push(fs);\n }\n if (n.fields) visit(n.fields, `${at}/${i}/fields`);\n });\n visit(nodes, \"/fields\");\n if (order.size) {\n const at = new Map(fieldsets.map((s, i) => [s.name, i] as const));\n fieldsets.sort((a, b) => (order.get(a.name) ?? at.get(a.name)!) - (order.get(b.name) ?? at.get(b.name)!));\n }\n // top-level prop tabs as V2 groups: the first prop with an id defines it, then the declared tabs no prop sits in\n // (component.tabs), sorted by `order` (else first appearance)\n const groups: FieldGroup[] = [];\n const tabOrder = new Map<string, number>();\n for (const t of [...nodes.map((n) => n.ui.tab), ...(component.tabs ?? [])]) {\n if (!t || groups.some((g) => g.name === t.id)) continue;\n const g: FieldGroup = { name: t.id, title: t.label ?? t.id };\n if (t.icon) g.icon = tablerIconOf(t.icon);\n if (typeof t.order === \"number\") tabOrder.set(t.id, t.order);\n groups.push(g);\n }\n if (tabOrder.size) {\n const at = new Map(groups.map((g, i) => [g.name, i] as const));\n groups.sort((a, b) => (tabOrder.get(a.name) ?? at.get(a.name)!) - (tabOrder.get(b.name) ?? at.get(b.name)!));\n }\n if (groups.length) groups[0].default = true;\n const out: TypeSchema = {\n name: camel(component.slug),\n title: component.name,\n kind: component.v2?.shape ?? \"block\",\n fields: nodes.map((n, i) => readToV2(n, `/fields/${i}`, nodes, ctx, true, \"props\")),\n };\n if (component.v2?.placement) out.placement = component.v2.placement;\n if (component.description !== undefined && component.description !== null) out.description = component.description;\n if (component.category !== undefined && component.category !== \"custom\")\n out.category = (KIT_CATEGORIES as readonly string[]).includes(component.category) ? component.category : capitalize(component.category);\n if (component.icon) out.icon = tablerIconOf(component.icon);\n // component.preview names top-level prop keys, so it reads as V2's document preview against the props themselves\n if (component.preview) out.preview = previewFromProd(component.preview, nodes);\n if (fieldsets.length) out.fieldsets = fieldsets;\n if (groups.length) out.groups = groups;\n return out;\n}\n\n\n/* ── a block's variants on the component side ─────────────────────────── */\n\n/** A V2 variant id a member slug can carry, so the read takes it back verbatim (the component slug rule). */\nconst VARIANT_ID_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n\n/**\n * V2's block variants as prod stores them for components (a kit block made a section): one component per variant, all\n * one family (`sectionType` = the block's title, name = the variant's), and a variant group (component_variant_groups)\n * whose `v2.variants` lists the members in order with their description. Pure: the host creates the members, then the\n * group with the ids it got back (`variantGroupV2`). A block without variants, or with an id no slug can carry, is the\n * one component `fromTypeSchema(v2, \"props\")` makes, its variants named as catalog.\n */\nexport interface VariantFamilyPlan {\n members: ProdComponent[];\n /** null: no family (one component) */\n group: { name: string; slug: string; variants: { member: string; description?: string }[] } | null;\n lossy: LossyItem[];\n catalog: CatalogItem[];\n}\n\nexport function variantFamilyFromTypeSchema(v2: TypeSchema): VariantFamilyPlan {\n const base = fromTypeSchema(v2, \"props\");\n const variants = v2.variants ?? [];\n if (!variants.length || !variants.every((v) => VARIANT_ID_RE.test(v.id))) return { members: [base.schema], group: null, lossy: base.lossy, catalog: base.catalog };\n const slug = base.schema.slug;\n return {\n members: variants.map((v) => ({ ...base.schema, name: v.name, slug: `${slug}-${v.id}`, sectionType: v2.title })),\n group: { name: v2.title, slug, variants: variants.map((v) => ({ member: `${slug}-${v.id}`, ...(v.description !== undefined ? { description: v.description } : {}) })) },\n lossy: base.lossy,\n // the variants are the family now, not a catalog note\n catalog: base.catalog.filter((c) => c.feature !== \"variants\"),\n };\n}\n\n/** The group's `v2` (component_variant_groups.v2, variantGroupV2Schema) once the members exist: `idOf` maps a member slug to its id. */\nexport function variantGroupV2(group: NonNullable<VariantFamilyPlan[\"group\"]>, idOf: (memberSlug: string) => string) {\n return { variants: group.variants.map((v) => ({ componentId: idOf(v.member), ...(v.description !== undefined ? { description: v.description } : {}) })) };\n}\n\n/**\n * A family read back as one V2 block: the first member's props, the family's name and title, and its variants from the\n * group's members in `v2.variants` order (the id after the group slug, the member's name, the meta's description).\n */\nexport function variantFamilyToTypeSchema(\n members: ProdComponent[],\n group: { slug: string; variants: { description?: string }[] },\n opts: ToTypeSchemaOptions = {},\n): TypeSchema {\n const out = propsToTypeSchema(members[0]!, opts);\n out.name = camel(group.slug);\n if (members[0]!.sectionType) out.title = members[0]!.sectionType;\n out.variants = members.map((m, i) => ({\n id: m.slug.slice(group.slug.length + 1),\n name: m.name,\n ...(group.variants[i]?.description !== undefined ? { description: group.variants[i]!.description } : {}),\n }));\n return out;\n}\n"],"mappings":"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"}
|