@webiny/website-builder-sdk 6.0.0 → 6.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BindingsResolver.js +1 -4
- package/BindingsResolver.js.map +1 -1
- package/ComponentRegistry.js +30 -0
- package/ComponentRegistry.js.map +1 -1
- package/ConstraintEvaluator.d.ts +36 -0
- package/ConstraintEvaluator.js +395 -0
- package/ConstraintEvaluator.js.map +1 -0
- package/ConstraintEvaluator.test.d.ts +1 -0
- package/ConstraintEvaluator.test.js +1456 -0
- package/ConstraintEvaluator.test.js.map +1 -0
- package/ElementFactory.d.ts +2 -3
- package/ElementFactory.js +21 -12
- package/ElementFactory.js.map +1 -1
- package/ElementFactory.test.d.ts +1 -0
- package/ElementFactory.test.js +280 -0
- package/ElementFactory.test.js.map +1 -0
- package/InputBindingsProcessor.js +24 -6
- package/InputBindingsProcessor.js.map +1 -1
- package/InputsBindingsProcessor.test.js +1 -0
- package/InputsBindingsProcessor.test.js.map +1 -1
- package/documentOperations/$addElementReferenceToParent.d.ts +1 -1
- package/documentOperations/$addElementReferenceToParent.js +9 -2
- package/documentOperations/$addElementReferenceToParent.js.map +1 -1
- package/documentOperations/AddToParent.d.ts +2 -2
- package/documentOperations/AddToParent.js.map +1 -1
- package/documentOperations/RemoveElement.js +9 -0
- package/documentOperations/RemoveElement.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/messenger/Messenger.js +1 -3
- package/messenger/Messenger.js.map +1 -1
- package/package.json +8 -8
- package/types.d.ts +120 -7
- package/types.js.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","it","expect","evaluateConstraints","evaluateDeleteConstraint","makeElement","id","componentName","parent","type","component","name","makeManifest","overrides","label","inputs","tags","makeDocument","elements","bindings","elementMap","el","state","version","properties","metadata","extensions","doc","components","Container","Button","result","parentId","slot","document","allowed","toBe","violation","toBeUndefined","TabPanel","constraints","ctx","block","toBeDefined","message","Tabs","root","section","Page","Section","ProductPrice","isDescendantOf","inner","ProductBox","child1","child2","children","static","Grid","Cell","slotChildCount","hero","Hero","countInstances","Widget","child","leftColumn","rightColumn","TwoColumn","leftResult","rightResult","Error","isChildOf","FunnelField","hasTag","ancestor","getAncestor","undefined","hero1","hero2","capturedComponent","toEqual","grandparentName","grandparent","getParent","parentResult","capturedIndex","capturedCount","childIndex","childCount","step","capturedIsLast","capturedIsFirst","FunnelBuilder","Step","isLastChild","isFirstChild","step0","step1","step2","steps","list","captured","comps","index","count","isFirst","isLast","descendantConstraints","TextField","container","page","elementId","canDelete","GridColumn","funnel","step3","Funnel","capturedCtx"],"sources":["ConstraintEvaluator.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { evaluateConstraints, evaluateDeleteConstraint } from \"./ConstraintEvaluator.js\";\nimport type { ComponentManifest, Document, DocumentElement, ConstraintContext } from \"~/types.js\";\n\nfunction makeElement(\n id: string,\n componentName: string,\n parent?: { id: string; slot: string }\n): DocumentElement {\n return {\n type: \"Webiny/Element\",\n id,\n component: { name: componentName },\n parent\n };\n}\n\nfunction makeManifest(name: string, overrides?: Partial<ComponentManifest>): ComponentManifest {\n return { name, label: name, inputs: [], tags: [], ...overrides };\n}\n\nfunction makeDocument(elements: DocumentElement[], bindings: Document[\"bindings\"] = {}): Document {\n const elementMap: Record<string, DocumentElement> = {};\n for (const el of elements) {\n elementMap[el.id] = el;\n }\n return {\n id: \"doc-1\",\n state: {},\n version: 1,\n properties: {},\n metadata: {},\n extensions: {},\n bindings,\n elements: elementMap\n };\n}\n\ndescribe(\"evaluateConstraints\", () => {\n it(\"should allow placement when there are no constraints\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n Button: makeManifest(\"Button\")\n };\n\n const result = evaluateConstraints({\n componentName: \"Button\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(true);\n expect(result.violation).toBeUndefined();\n });\n\n it(\"should block when component's parent constraint fails\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n TabPanel: makeManifest(\"TabPanel\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (ctx.parent.name !== \"Tabs\") {\n return ctx.block(\"TabPanel must be inside Tabs\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"TabPanel\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(false);\n expect(result.violation).toBeDefined();\n expect(result.violation!.message).toBe(\"TabPanel must be inside Tabs\");\n });\n\n it(\"should allow when parent constraint passes\", () => {\n const parent = makeElement(\"parent-1\", \"Tabs\");\n const doc = makeDocument([parent]);\n const components: Record<string, ComponentManifest> = {\n Tabs: makeManifest(\"Tabs\"),\n TabPanel: makeManifest(\"TabPanel\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (ctx.parent.name !== \"Tabs\") {\n return ctx.block(\"TabPanel must be inside Tabs\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"TabPanel\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(true);\n expect(result.violation).toBeUndefined();\n });\n\n it(\"should block when ancestor constraint fails\", () => {\n const root = makeElement(\"root\", \"Page\");\n const section = makeElement(\"section-1\", \"Section\", { id: \"root\", slot: \"children\" });\n const doc = makeDocument([root, section]);\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Section: makeManifest(\"Section\"),\n ProductPrice: makeManifest(\"ProductPrice\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!ctx.isDescendantOf(\"ProductBox\")) {\n return ctx.block(\"ProductPrice must be inside a ProductBox\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"ProductPrice\",\n parentId: \"section-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"ProductPrice must be inside a ProductBox\");\n });\n\n it(\"should allow when grandparent matches ancestor constraint\", () => {\n const root = makeElement(\"root\", \"ProductBox\");\n const inner = makeElement(\"inner-1\", \"Container\", { id: \"root\", slot: \"children\" });\n const doc = makeDocument([root, inner]);\n const components: Record<string, ComponentManifest> = {\n ProductBox: makeManifest(\"ProductBox\"),\n Container: makeManifest(\"Container\"),\n ProductPrice: makeManifest(\"ProductPrice\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!ctx.isDescendantOf(\"ProductBox\")) {\n return ctx.block(\"ProductPrice must be inside a ProductBox\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"ProductPrice\",\n parentId: \"inner-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(true);\n });\n\n it(\"should block via slot children limit constraint using slotChildCount\", () => {\n const parent = makeElement(\"parent-1\", \"Grid\");\n const child1 = makeElement(\"child-1\", \"Cell\", { id: \"parent-1\", slot: \"children\" });\n const child2 = makeElement(\"child-2\", \"Cell\", { id: \"parent-1\", slot: \"children\" });\n const doc = makeDocument([parent, child1, child2], {\n \"parent-1\": {\n inputs: {\n children: {\n id: \"inp-1\",\n type: \"slot\",\n static: [\"child-1\", \"child-2\"]\n }\n }\n }\n });\n\n const components: Record<string, ComponentManifest> = {\n Grid: makeManifest(\"Grid\"),\n Cell: makeManifest(\"Cell\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!(ctx.slotChildCount() < 2)) {\n return ctx.block(\"Maximum 2 children allowed\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Cell\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"Maximum 2 children allowed\");\n });\n\n it(\"should block via countInstances when max instances reached\", () => {\n const root = makeElement(\"root\", \"Page\");\n const hero = makeElement(\"hero-1\", \"Hero\", { id: \"root\", slot: \"children\" });\n const doc = makeDocument([root, hero]);\n\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Hero: makeManifest(\"Hero\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!(ctx.countInstances(\"Hero\") < 1)) {\n return ctx.block(\"Only one Hero per page\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Hero\",\n parentId: \"root\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"Only one Hero per page\");\n });\n\n it(\"should not evaluate parent's constraints against the placed component\", () => {\n const parent = makeElement(\"parent-1\", \"Tabs\");\n const doc = makeDocument([parent]);\n\n const components: Record<string, ComponentManifest> = {\n Tabs: makeManifest(\"Tabs\", {\n constraints: [\n (ctx: ConstraintContext) => ctx.block(\"This should not run for children\")\n ]\n }),\n Button: makeManifest(\"Button\")\n };\n\n // Parent's constraints should not affect children being dropped into it\n const result = evaluateConstraints({\n componentName: \"Button\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n\n it(\"should short-circuit on the first failed constraint\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n () => {},\n (ctx: ConstraintContext) => ctx.block(\"Always fails\"),\n (ctx: ConstraintContext) => ctx.block(\"Also fails\")\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"Always fails\");\n });\n\n it(\"should allow placement when component manifest is not found\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\")\n };\n\n const result = evaluateConstraints({\n componentName: \"Unknown\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(true);\n });\n\n it(\"should allow placement when parent element is not found\", () => {\n const doc = makeDocument([]);\n\n const components: Record<string, ComponentManifest> = {\n Button: makeManifest(\"Button\")\n };\n\n const result = evaluateConstraints({\n componentName: \"Button\",\n parentId: \"nonexistent\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(true);\n });\n\n it(\"should handle multi-slot parent constraint checking specific slot\", () => {\n const parent = makeElement(\"parent-1\", \"TwoColumn\");\n const child = makeElement(\"child-1\", \"Widget\", {\n id: \"parent-1\",\n slot: \"leftColumn\"\n });\n const doc = makeDocument([parent, child], {\n \"parent-1\": {\n inputs: {\n leftColumn: {\n id: \"inp-left\",\n type: \"slot\",\n static: [\"child-1\"]\n },\n rightColumn: {\n id: \"inp-right\",\n type: \"slot\",\n static: []\n }\n }\n }\n });\n\n const components: Record<string, ComponentManifest> = {\n TwoColumn: makeManifest(\"TwoColumn\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!(ctx.slotChildCount() < 1)) {\n return ctx.block(\"Slot is full\");\n }\n }\n ]\n })\n };\n\n // leftColumn is full\n const leftResult = evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"parent-1\",\n slot: \"leftColumn\",\n document: doc,\n components\n });\n expect(leftResult.allowed).toBe(false);\n\n // rightColumn is empty\n const rightResult = evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"parent-1\",\n slot: \"rightColumn\",\n document: doc,\n components\n });\n expect(rightResult.allowed).toBe(true);\n });\n\n it(\"should provide a default message when constraint has no message\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [(ctx: ConstraintContext) => ctx.block(\"Blocked\")]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.violation!.message).toBe(\"Blocked\");\n });\n\n it(\"should use thrown error message as the violation message\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n throw new Error(`Widget cannot be placed inside ${ctx.parent.name}`);\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"Widget cannot be placed inside Container\");\n });\n\n it(\"should fall back to static message when a non-Error is thrown\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n () => {\n throw \"not an error object\";\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"Cannot place Widget here.\");\n });\n\n it(\"should fall back to default message when a non-Error is thrown and no static message\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n () => {\n throw null;\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"Cannot place Widget here.\");\n });\n\n describe(\"ctx.isChildOf\", () => {\n it(\"should return true when direct parent matches\", () => {\n const parent = makeElement(\"parent-1\", \"Tabs\");\n const doc = makeDocument([parent]);\n const components: Record<string, ComponentManifest> = {\n Tabs: makeManifest(\"Tabs\"),\n TabPanel: makeManifest(\"TabPanel\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!ctx.isChildOf(\"Tabs\")) {\n return ctx.block(\"TabPanel must be a direct child of Tabs\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"TabPanel\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n\n it(\"should return false when direct parent does not match\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n TabPanel: makeManifest(\"TabPanel\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!ctx.isChildOf(\"Tabs\")) {\n return ctx.block(\"TabPanel must be a direct child of Tabs\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"TabPanel\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n });\n });\n\n describe(\"ctx.isDescendantOf\", () => {\n it(\"should return true when direct parent matches\", () => {\n const parent = makeElement(\"parent-1\", \"ProductBox\");\n const doc = makeDocument([parent]);\n const components: Record<string, ComponentManifest> = {\n ProductBox: makeManifest(\"ProductBox\"),\n ProductPrice: makeManifest(\"ProductPrice\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!ctx.isDescendantOf(\"ProductBox\")) {\n return ctx.block(\"Blocked\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"ProductPrice\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n\n it(\"should return true when grandparent matches\", () => {\n const root = makeElement(\"root\", \"ProductBox\");\n const inner = makeElement(\"inner\", \"Container\", { id: \"root\", slot: \"children\" });\n const doc = makeDocument([root, inner]);\n const components: Record<string, ComponentManifest> = {\n ProductBox: makeManifest(\"ProductBox\"),\n Container: makeManifest(\"Container\"),\n ProductPrice: makeManifest(\"ProductPrice\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!ctx.isDescendantOf(\"ProductBox\")) {\n return ctx.block(\"Blocked\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"ProductPrice\",\n parentId: \"inner\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n\n it(\"should return false when no ancestor matches\", () => {\n const root = makeElement(\"root\", \"Page\");\n const inner = makeElement(\"inner\", \"Section\", { id: \"root\", slot: \"children\" });\n const doc = makeDocument([root, inner]);\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Section: makeManifest(\"Section\"),\n ProductPrice: makeManifest(\"ProductPrice\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!ctx.isDescendantOf(\"ProductBox\")) {\n return ctx.block(\"Blocked\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"ProductPrice\",\n parentId: \"inner\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n });\n });\n\n describe(\"ctx.slotChildCount\", () => {\n it(\"should return the number of children in the target slot\", () => {\n const parent = makeElement(\"parent-1\", \"Grid\");\n const doc = makeDocument([parent], {\n \"parent-1\": {\n inputs: {\n children: {\n id: \"inp-1\",\n type: \"slot\",\n static: [\"child-1\", \"child-2\", \"child-3\"]\n }\n }\n }\n });\n\n const components: Record<string, ComponentManifest> = {\n Grid: makeManifest(\"Grid\"),\n Cell: makeManifest(\"Cell\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!(ctx.slotChildCount() < 3)) {\n return ctx.block(\"Max 3 children\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Cell\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n });\n\n it(\"should return 0 when slot has no bindings\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!(ctx.slotChildCount() < 5)) {\n return ctx.block(\"Blocked\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n });\n\n describe(\"ctx.hasTag\", () => {\n it(\"should return true when the placed component has the tag\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n FunnelField: makeManifest(\"FunnelField\", {\n tags: [\"funnel-field\", \"input\"],\n constraints: [\n (ctx: ConstraintContext) => {\n if (ctx.hasTag(\"funnel-field\")) {\n return ctx.block(\"Funnel fields not allowed here\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"FunnelField\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n });\n\n it(\"should return false when the placed component does not have the tag\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n Button: makeManifest(\"Button\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (ctx.hasTag(\"funnel-field\")) {\n return ctx.block(\"Blocked\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Button\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n });\n\n describe(\"ctx.getAncestor\", () => {\n it(\"should return the matching ancestor element context\", () => {\n const root = makeElement(\"root\", \"ProductBox\");\n const inner = makeElement(\"inner\", \"Container\", { id: \"root\", slot: \"children\" });\n const doc = makeDocument([root, inner]);\n const components: Record<string, ComponentManifest> = {\n ProductBox: makeManifest(\"ProductBox\", { tags: [\"product\"] }),\n Container: makeManifest(\"Container\"),\n ProductPrice: makeManifest(\"ProductPrice\", {\n constraints: [\n (ctx: ConstraintContext) => {\n const ancestor = ctx.getAncestor(\"ProductBox\");\n if (!(ancestor !== undefined && ancestor.name === \"ProductBox\")) {\n return ctx.block(\"Blocked\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"ProductPrice\",\n parentId: \"inner\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n\n it(\"should return undefined when no ancestor matches\", () => {\n const root = makeElement(\"root\", \"Page\");\n const doc = makeDocument([root]);\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (ctx.getAncestor(\"ProductBox\") === undefined) {\n return ctx.block(\"Blocked\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"root\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n });\n });\n\n describe(\"ctx.countInstances\", () => {\n it(\"should count instances of a component in the document\", () => {\n const root = makeElement(\"root\", \"Page\");\n const hero1 = makeElement(\"hero-1\", \"Hero\", { id: \"root\", slot: \"children\" });\n const hero2 = makeElement(\"hero-2\", \"Hero\", { id: \"root\", slot: \"children\" });\n const doc = makeDocument([root, hero1, hero2]);\n\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Hero: makeManifest(\"Hero\", {\n constraints: [\n (ctx: ConstraintContext) => {\n if (!(ctx.countInstances(\"Hero\") < 2)) {\n return ctx.block(\"Max 2 Heroes\");\n }\n }\n ]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Hero\",\n parentId: \"root\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n });\n });\n\n describe(\"ctx.component\", () => {\n it(\"should expose the placed component's name and tags\", () => {\n const parent = makeElement(\"parent-1\", \"Container\");\n const doc = makeDocument([parent]);\n\n let capturedComponent: { name: string; tags: string[] } | undefined;\n const components: Record<string, ComponentManifest> = {\n Container: makeManifest(\"Container\"),\n Widget: makeManifest(\"Widget\", {\n tags: [\"interactive\", \"form\"],\n constraints: [\n (ctx: ConstraintContext) => {\n capturedComponent = ctx.component;\n }\n ]\n })\n };\n\n evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(capturedComponent).toBeDefined();\n expect(capturedComponent!.name).toBe(\"Widget\");\n expect(capturedComponent!.tags).toEqual([\"interactive\", \"form\"]);\n });\n });\n\n describe(\"parent.getParent\", () => {\n it(\"should return the grandparent element context\", () => {\n const root = makeElement(\"root\", \"Page\");\n const section = makeElement(\"section\", \"Section\", { id: \"root\", slot: \"children\" });\n const doc = makeDocument([root, section]);\n\n let grandparentName: string | undefined;\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Section: makeManifest(\"Section\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n const grandparent = ctx.parent.getParent();\n grandparentName = grandparent?.name;\n }\n ]\n })\n };\n\n evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"section\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(grandparentName).toBe(\"Page\");\n });\n\n it(\"should return undefined for root element\", () => {\n const root = makeElement(\"root\", \"Page\");\n const doc = makeDocument([root]);\n\n let parentResult: unknown = \"not-called\";\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n parentResult = ctx.parent.getParent();\n }\n ]\n })\n };\n\n evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"root\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(parentResult).toBeUndefined();\n });\n });\n\n describe(\"parent.childIndex / childCount / isFirstChild / isLastChild\", () => {\n it(\"should return -1 for elements not in a list slot\", () => {\n const root = makeElement(\"root\", \"Page\");\n const doc = makeDocument([root]);\n\n let capturedIndex: number | undefined;\n let capturedCount: number | undefined;\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n capturedIndex = ctx.parent.childIndex();\n capturedCount = ctx.parent.childCount();\n }\n ]\n })\n };\n\n evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"root\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(capturedIndex).toBe(-1);\n expect(capturedCount).toBe(-1);\n });\n\n it(\"should parse child index from list slot path\", () => {\n const root = makeElement(\"root\", \"FunnelBuilder\");\n const step = makeElement(\"step-1\", \"Step\", { id: \"root\", slot: \"steps/2/step\" });\n const doc = makeDocument([root, step], {\n root: {\n inputs: {\n \"steps/0/step\": { id: \"s0\", type: \"slot\", static: [\"step-0\"] },\n \"steps/1/step\": { id: \"s1\", type: \"slot\", static: [\"step-other\"] },\n \"steps/2/step\": { id: \"s2\", type: \"slot\", static: [\"step-1\"] }\n }\n }\n });\n\n let capturedIndex: number | undefined;\n let capturedCount: number | undefined;\n let capturedIsLast: boolean | undefined;\n let capturedIsFirst: boolean | undefined;\n const components: Record<string, ComponentManifest> = {\n FunnelBuilder: makeManifest(\"FunnelBuilder\"),\n Step: makeManifest(\"Step\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n capturedIndex = ctx.parent.childIndex();\n capturedCount = ctx.parent.childCount();\n capturedIsLast = ctx.parent.isLastChild();\n capturedIsFirst = ctx.parent.isFirstChild();\n }\n ]\n })\n };\n\n evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"step-1\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(capturedIndex).toBe(2);\n expect(capturedCount).toBe(3);\n expect(capturedIsLast).toBe(true);\n expect(capturedIsFirst).toBe(false);\n });\n\n it(\"should identify the first child correctly\", () => {\n const root = makeElement(\"root\", \"FunnelBuilder\");\n const step = makeElement(\"step-0\", \"Step\", { id: \"root\", slot: \"steps/0/step\" });\n const doc = makeDocument([root, step], {\n root: {\n inputs: {\n \"steps/0/step\": { id: \"s0\", type: \"slot\", static: [\"step-0\"] },\n \"steps/1/step\": { id: \"s1\", type: \"slot\", static: [\"step-1\"] }\n }\n }\n });\n\n let capturedIsFirst: boolean | undefined;\n let capturedIsLast: boolean | undefined;\n const components: Record<string, ComponentManifest> = {\n FunnelBuilder: makeManifest(\"FunnelBuilder\"),\n Step: makeManifest(\"Step\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n capturedIsFirst = ctx.parent.isFirstChild();\n capturedIsLast = ctx.parent.isLastChild();\n }\n ]\n })\n };\n\n evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"step-0\",\n slot: \"children\",\n document: doc,\n components\n });\n\n expect(capturedIsFirst).toBe(true);\n expect(capturedIsLast).toBe(false);\n });\n\n it(\"should resolve position from bindings even when element.parent.slot is stale\", () => {\n const root = makeElement(\"root\", \"FunnelBuilder\");\n // Element says slot \"steps/1/step\" but bindings put it at steps/3/step\n const step = makeElement(\"step-final\", \"Step\", {\n id: \"root\",\n slot: \"steps/1/step\"\n });\n const doc = makeDocument([root, step], {\n root: {\n inputs: {\n \"steps/0/step\": { id: \"s0\", type: \"slot\", static: \"step-0\" },\n \"steps/1/step\": { id: \"s1\", type: \"slot\", static: \"step-1\" },\n \"steps/2/step\": { id: \"s2\", type: \"slot\", static: \"step-2\" },\n \"steps/3/step\": { id: \"s3\", type: \"slot\", static: \"step-final\" }\n }\n }\n });\n\n let capturedIndex: number | undefined;\n let capturedIsLast: boolean | undefined;\n const components: Record<string, ComponentManifest> = {\n FunnelBuilder: makeManifest(\"FunnelBuilder\"),\n Step: makeManifest(\"Step\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n capturedIndex = ctx.parent.childIndex();\n capturedIsLast = ctx.parent.isLastChild();\n }\n ]\n })\n };\n\n evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"step-final\",\n slot: \"children\",\n document: doc,\n components\n });\n\n // Should find actual position (index 3, last) not stale slot (index 1)\n expect(capturedIndex).toBe(3);\n expect(capturedIsLast).toBe(true);\n });\n\n it(\"should resolve position from direct list slot binding (static is an array of IDs)\", () => {\n const root = makeElement(\"root\", \"FunnelBuilder\");\n const step0 = makeElement(\"step-0\", \"Step\", { id: \"root\", slot: \"steps\" });\n const step1 = makeElement(\"step-1\", \"Step\", { id: \"root\", slot: \"steps\" });\n const step2 = makeElement(\"step-2\", \"Step\", { id: \"root\", slot: \"steps\" });\n const doc = makeDocument([root, step0, step1, step2], {\n root: {\n inputs: {\n steps: {\n id: \"s\",\n type: \"slot\",\n list: true,\n static: [\"step-0\", \"step-1\", \"step-2\"]\n }\n }\n }\n });\n\n let captured: Record<string, any> = {};\n const comps: Record<string, ComponentManifest> = {\n FunnelBuilder: makeManifest(\"FunnelBuilder\"),\n Step: makeManifest(\"Step\"),\n Widget: makeManifest(\"Widget\", {\n constraints: [\n (ctx: ConstraintContext) => {\n captured = {\n index: ctx.parent.childIndex(),\n count: ctx.parent.childCount(),\n isFirst: ctx.parent.isFirstChild(),\n isLast: ctx.parent.isLastChild()\n };\n }\n ]\n })\n };\n\n // Place into first step\n evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"step-0\",\n slot: \"children\",\n document: doc,\n components: comps\n });\n expect(captured.index).toBe(0);\n expect(captured.count).toBe(3);\n expect(captured.isFirst).toBe(true);\n expect(captured.isLast).toBe(false);\n\n // Place into middle step\n evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"step-1\",\n slot: \"children\",\n document: doc,\n components: comps\n });\n expect(captured.index).toBe(1);\n expect(captured.count).toBe(3);\n expect(captured.isFirst).toBe(false);\n expect(captured.isLast).toBe(false);\n\n // Place into last step\n evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"step-2\",\n slot: \"children\",\n document: doc,\n components: comps\n });\n expect(captured.index).toBe(2);\n expect(captured.count).toBe(3);\n expect(captured.isFirst).toBe(false);\n expect(captured.isLast).toBe(true);\n });\n });\n\n describe(\"descendantConstraints\", () => {\n it(\"should block a direct child via parent's descendantConstraints\", () => {\n const parent = makeElement(\"parent-1\", \"Step\");\n const doc = makeDocument([parent]);\n const components: Record<string, ComponentManifest> = {\n Step: makeManifest(\"Step\", {\n descendantConstraints: [\n (ctx: ConstraintContext) => {\n if (ctx.hasTag(\"funnel-field\")) {\n return ctx.block(\"No funnel fields allowed\");\n }\n }\n ]\n }),\n TextField: makeManifest(\"TextField\", { tags: [\"funnel-field\"] })\n };\n\n const result = evaluateConstraints({\n componentName: \"TextField\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"No funnel fields allowed\");\n });\n\n it(\"should block a nested descendant via ancestor's descendantConstraints\", () => {\n const step = makeElement(\"step-1\", \"Step\");\n const container = makeElement(\"container-1\", \"Container\", {\n id: \"step-1\",\n slot: \"children\"\n });\n const doc = makeDocument([step, container]);\n const components: Record<string, ComponentManifest> = {\n Step: makeManifest(\"Step\", {\n descendantConstraints: [\n (ctx: ConstraintContext) => {\n if (ctx.hasTag(\"funnel-field\")) {\n return ctx.block(\"No funnel fields in this step\");\n }\n }\n ]\n }),\n Container: makeManifest(\"Container\"),\n TextField: makeManifest(\"TextField\", { tags: [\"funnel-field\"] })\n };\n\n // TextField dropped into Container, which is inside Step\n const result = evaluateConstraints({\n componentName: \"TextField\",\n parentId: \"container-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"No funnel fields in this step\");\n });\n\n it(\"should allow when descendantConstraints pass\", () => {\n const step = makeElement(\"step-1\", \"Step\");\n const doc = makeDocument([step]);\n const components: Record<string, ComponentManifest> = {\n Step: makeManifest(\"Step\", {\n descendantConstraints: [\n (ctx: ConstraintContext) => {\n if (ctx.hasTag(\"funnel-field\")) {\n return ctx.block(\"Blocked\");\n }\n }\n ]\n }),\n Button: makeManifest(\"Button\")\n };\n\n const result = evaluateConstraints({\n componentName: \"Button\",\n parentId: \"step-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n\n it(\"should not run parent's descendantConstraints for unrelated ancestors\", () => {\n const page = makeElement(\"page\", \"Page\");\n const step = makeElement(\"step-1\", \"Step\", { id: \"page\", slot: \"children\" });\n const doc = makeDocument([page, step]);\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\", {\n descendantConstraints: [\n (ctx: ConstraintContext) => ctx.block(\"Page blocks everything\")\n ]\n }),\n Step: makeManifest(\"Step\"),\n Button: makeManifest(\"Button\")\n };\n\n // Button into Step — Page's descendantConstraints should still fire\n const result = evaluateConstraints({\n componentName: \"Button\",\n parentId: \"step-1\",\n slot: \"children\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"Page blocks everything\");\n });\n\n it(\"should evaluate component constraints before descendantConstraints\", () => {\n const parent = makeElement(\"parent-1\", \"Step\");\n const doc = makeDocument([parent]);\n const components: Record<string, ComponentManifest> = {\n Step: makeManifest(\"Step\", {\n descendantConstraints: [\n (ctx: ConstraintContext) => ctx.block(\"descendant constraint\")\n ]\n }),\n Widget: makeManifest(\"Widget\", {\n constraints: [(ctx: ConstraintContext) => ctx.block(\"component constraint\")]\n })\n };\n\n const result = evaluateConstraints({\n componentName: \"Widget\",\n parentId: \"parent-1\",\n slot: \"children\",\n document: doc,\n components\n });\n // Component's own constraints should short-circuit first\n expect(result.violation!.message).toBe(\"component constraint\");\n });\n });\n});\n\ndescribe(\"evaluateDeleteConstraint\", () => {\n it(\"should allow when canDelete is undefined\", () => {\n const el = makeElement(\"el-1\", \"Widget\", { id: \"root\", slot: \"children\" });\n const root = makeElement(\"root\", \"Page\");\n const doc = makeDocument([root, el]);\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Widget: makeManifest(\"Widget\")\n };\n\n const result = evaluateDeleteConstraint({\n elementId: \"el-1\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n\n it(\"should allow when canDelete is true\", () => {\n const el = makeElement(\"el-1\", \"Widget\", { id: \"root\", slot: \"children\" });\n const root = makeElement(\"root\", \"Page\");\n const doc = makeDocument([root, el]);\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Widget: makeManifest(\"Widget\", { canDelete: true })\n };\n\n const result = evaluateDeleteConstraint({\n elementId: \"el-1\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n\n it(\"should block when canDelete is false\", () => {\n const el = makeElement(\"el-1\", \"GridColumn\", { id: \"root\", slot: \"children\" });\n const root = makeElement(\"root\", \"Grid\");\n const doc = makeDocument([root, el]);\n const components: Record<string, ComponentManifest> = {\n Grid: makeManifest(\"Grid\"),\n GridColumn: makeManifest(\"GridColumn\", { canDelete: false })\n };\n\n const result = evaluateDeleteConstraint({\n elementId: \"el-1\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"GridColumn cannot be deleted.\");\n });\n\n it(\"should allow when canDelete check returns true\", () => {\n const funnel = makeElement(\"funnel\", \"Funnel\");\n const step1 = makeElement(\"step-1\", \"Step\", { id: \"funnel\", slot: \"steps/0/step\" });\n const step2 = makeElement(\"step-2\", \"Step\", { id: \"funnel\", slot: \"steps/1/step\" });\n const step3 = makeElement(\"step-3\", \"Step\", { id: \"funnel\", slot: \"steps/2/step\" });\n const doc = makeDocument([funnel, step1, step2, step3], {\n funnel: {\n inputs: {\n \"steps/0/step\": { id: \"s0\", type: \"slot\", static: \"step-1\" },\n \"steps/1/step\": { id: \"s1\", type: \"slot\", static: \"step-2\" },\n \"steps/2/step\": { id: \"s2\", type: \"slot\", static: \"step-3\" }\n }\n }\n });\n const components: Record<string, ComponentManifest> = {\n Funnel: makeManifest(\"Funnel\"),\n Step: makeManifest(\"Step\", {\n canDelete: (ctx: ConstraintContext) => {\n if (!(ctx.countInstances(\"Step\") > 2)) {\n return ctx.block(\"Blocked\");\n }\n }\n })\n };\n\n const result = evaluateDeleteConstraint({\n elementId: \"step-2\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n\n it(\"should block when canDelete check returns false\", () => {\n const funnel = makeElement(\"funnel\", \"Funnel\");\n const step1 = makeElement(\"step-1\", \"Step\", { id: \"funnel\", slot: \"steps/0/step\" });\n const step2 = makeElement(\"step-2\", \"Step\", { id: \"funnel\", slot: \"steps/1/step\" });\n const doc = makeDocument([funnel, step1, step2], {\n funnel: {\n inputs: {\n \"steps/0/step\": { id: \"s0\", type: \"slot\", static: \"step-1\" },\n \"steps/1/step\": { id: \"s1\", type: \"slot\", static: \"step-2\" }\n }\n }\n });\n const components: Record<string, ComponentManifest> = {\n Funnel: makeManifest(\"Funnel\"),\n Step: makeManifest(\"Step\", {\n canDelete: (ctx: ConstraintContext) => {\n if (!(ctx.countInstances(\"Step\") > 2)) {\n return ctx.block(\"Need at least 2 steps\");\n }\n }\n })\n };\n\n const result = evaluateDeleteConstraint({\n elementId: \"step-1\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"Need at least 2 steps\");\n });\n\n it(\"should use thrown error message as violation message\", () => {\n const root = makeElement(\"root\", \"Page\");\n const el = makeElement(\"el-1\", \"Widget\", { id: \"root\", slot: \"children\" });\n const doc = makeDocument([root, el]);\n const components: Record<string, ComponentManifest> = {\n Page: makeManifest(\"Page\"),\n Widget: makeManifest(\"Widget\", {\n canDelete: () => {\n throw new Error(\"Cannot delete this widget right now\");\n }\n })\n };\n\n const result = evaluateDeleteConstraint({\n elementId: \"el-1\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(false);\n expect(result.violation!.message).toBe(\"Cannot delete this widget right now\");\n });\n\n it(\"should provide correct context to the check function\", () => {\n const root = makeElement(\"root\", \"Funnel\");\n const step = makeElement(\"step-1\", \"Step\", { id: \"root\", slot: \"steps/0/step\" });\n const doc = makeDocument([root, step], {\n root: {\n inputs: {\n \"steps/0/step\": { id: \"s0\", type: \"slot\", static: \"step-1\" },\n \"steps/1/step\": { id: \"s1\", type: \"slot\", static: \"step-2\" }\n }\n }\n });\n\n let capturedCtx: ConstraintContext | undefined;\n const components: Record<string, ComponentManifest> = {\n Funnel: makeManifest(\"Funnel\"),\n Step: makeManifest(\"Step\", {\n tags: [\"funnel-step\"],\n canDelete: (ctx: ConstraintContext) => {\n capturedCtx = ctx;\n }\n })\n };\n\n evaluateDeleteConstraint({\n elementId: \"step-1\",\n document: doc,\n components\n });\n\n expect(capturedCtx).toBeDefined();\n expect(capturedCtx!.component.name).toBe(\"Step\");\n expect(capturedCtx!.component.tags).toEqual([\"funnel-step\"]);\n expect(capturedCtx!.parent.name).toBe(\"Funnel\");\n expect(capturedCtx!.slot).toBe(\"steps/0/step\");\n expect(capturedCtx!.isChildOf(\"Funnel\")).toBe(true);\n expect(capturedCtx!.hasTag(\"funnel-step\")).toBe(true);\n });\n\n it(\"should allow when element is not found\", () => {\n const doc = makeDocument([]);\n const components: Record<string, ComponentManifest> = {};\n\n const result = evaluateDeleteConstraint({\n elementId: \"nonexistent\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n\n it(\"should allow when manifest is not found\", () => {\n const el = makeElement(\"el-1\", \"Unknown\");\n const doc = makeDocument([el]);\n const components: Record<string, ComponentManifest> = {};\n\n const result = evaluateDeleteConstraint({\n elementId: \"el-1\",\n document: doc,\n components\n });\n expect(result.allowed).toBe(true);\n });\n});\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,EAAEC,MAAM,QAAQ,QAAQ;AAC7C,SAASC,mBAAmB,EAAEC,wBAAwB;AAGtD,SAASC,WAAWA,CAChBC,EAAU,EACVC,aAAqB,EACrBC,MAAqC,EACtB;EACf,OAAO;IACHC,IAAI,EAAE,gBAAgB;IACtBH,EAAE;IACFI,SAAS,EAAE;MAAEC,IAAI,EAAEJ;IAAc,CAAC;IAClCC;EACJ,CAAC;AACL;AAEA,SAASI,YAAYA,CAACD,IAAY,EAAEE,SAAsC,EAAqB;EAC3F,OAAO;IAAEF,IAAI;IAAEG,KAAK,EAAEH,IAAI;IAAEI,MAAM,EAAE,EAAE;IAAEC,IAAI,EAAE,EAAE;IAAE,GAAGH;EAAU,CAAC;AACpE;AAEA,SAASI,YAAYA,CAACC,QAA2B,EAAEC,QAA8B,GAAG,CAAC,CAAC,EAAY;EAC9F,MAAMC,UAA2C,GAAG,CAAC,CAAC;EACtD,KAAK,MAAMC,EAAE,IAAIH,QAAQ,EAAE;IACvBE,UAAU,CAACC,EAAE,CAACf,EAAE,CAAC,GAAGe,EAAE;EAC1B;EACA,OAAO;IACHf,EAAE,EAAE,OAAO;IACXgB,KAAK,EAAE,CAAC,CAAC;IACTC,OAAO,EAAE,CAAC;IACVC,UAAU,EAAE,CAAC,CAAC;IACdC,QAAQ,EAAE,CAAC,CAAC;IACZC,UAAU,EAAE,CAAC,CAAC;IACdP,QAAQ;IACRD,QAAQ,EAAEE;EACd,CAAC;AACL;AAEApB,QAAQ,CAAC,qBAAqB,EAAE,MAAM;EAClCC,EAAE,CAAC,sDAAsD,EAAE,MAAM;IAC7D,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;IACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;IAClC,MAAMoB,UAA6C,GAAG;MAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;MACpCkB,MAAM,EAAElB,YAAY,CAAC,QAAQ;IACjC,CAAC;IAED,MAAMmB,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,QAAQ;MACvByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACjClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAC,CAACC,aAAa,CAAC,CAAC;EAC5C,CAAC,CAAC;EAEFrC,EAAE,CAAC,uDAAuD,EAAE,MAAM;IAC9D,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;IACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;IAClC,MAAMoB,UAA6C,GAAG;MAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;MACpC2B,QAAQ,EAAE3B,YAAY,CAAC,UAAU,EAAE;QAC/B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;UACxB,IAAIA,GAAG,CAACjC,MAAM,CAACG,IAAI,KAAK,MAAM,EAAE;YAC5B,OAAO8B,GAAG,CAACC,KAAK,CAAC,8BAA8B,CAAC;UACpD;QACJ,CAAC;MAET,CAAC;IACL,CAAC;IAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,UAAU;MACzByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAC,CAACM,WAAW,CAAC,CAAC;IACtCzC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,8BAA8B,CAAC;EAC1E,CAAC,CAAC;EAEFnC,EAAE,CAAC,4CAA4C,EAAE,MAAM;IACnD,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;IAC9C,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;IAClC,MAAMoB,UAA6C,GAAG;MAClDiB,IAAI,EAAEjC,YAAY,CAAC,MAAM,CAAC;MAC1B2B,QAAQ,EAAE3B,YAAY,CAAC,UAAU,EAAE;QAC/B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;UACxB,IAAIA,GAAG,CAACjC,MAAM,CAACG,IAAI,KAAK,MAAM,EAAE;YAC5B,OAAO8B,GAAG,CAACC,KAAK,CAAC,8BAA8B,CAAC;UACpD;QACJ,CAAC;MAET,CAAC;IACL,CAAC;IAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,UAAU;MACzByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACjClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAC,CAACC,aAAa,CAAC,CAAC;EAC5C,CAAC,CAAC;EAEFrC,EAAE,CAAC,6CAA6C,EAAE,MAAM;IACpD,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IACxC,MAAM0C,OAAO,GAAG1C,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE;MAAEC,EAAE,EAAE,MAAM;MAAE2B,IAAI,EAAE;IAAW,CAAC,CAAC;IACrF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEC,OAAO,CAAC,CAAC;IACzC,MAAMnB,UAA6C,GAAG;MAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;MAC1BqC,OAAO,EAAErC,YAAY,CAAC,SAAS,CAAC;MAChCsC,YAAY,EAAEtC,YAAY,CAAC,cAAc,EAAE;QACvC4B,WAAW,EAAE,CACRC,GAAsB,IAAK;UACxB,IAAI,CAACA,GAAG,CAACU,cAAc,CAAC,YAAY,CAAC,EAAE;YACnC,OAAOV,GAAG,CAACC,KAAK,CAAC,0CAA0C,CAAC;UAChE;QACJ,CAAC;MAET,CAAC;IACL,CAAC;IAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,cAAc;MAC7ByB,QAAQ,EAAE,WAAW;MACrBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,0CAA0C,CAAC;EACtF,CAAC,CAAC;EAEFnC,EAAE,CAAC,2DAA2D,EAAE,MAAM;IAClE,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9C,MAAM+C,KAAK,GAAG/C,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE;MAAEC,EAAE,EAAE,MAAM;MAAE2B,IAAI,EAAE;IAAW,CAAC,CAAC;IACnF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEM,KAAK,CAAC,CAAC;IACvC,MAAMxB,UAA6C,GAAG;MAClDyB,UAAU,EAAEzC,YAAY,CAAC,YAAY,CAAC;MACtCiB,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;MACpCsC,YAAY,EAAEtC,YAAY,CAAC,cAAc,EAAE;QACvC4B,WAAW,EAAE,CACRC,GAAsB,IAAK;UACxB,IAAI,CAACA,GAAG,CAACU,cAAc,CAAC,YAAY,CAAC,EAAE;YACnC,OAAOV,GAAG,CAACC,KAAK,CAAC,0CAA0C,CAAC;UAChE;QACJ,CAAC;MAET,CAAC;IACL,CAAC;IAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,cAAc;MAC7ByB,QAAQ,EAAE,SAAS;MACnBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;EAEFnC,EAAE,CAAC,sEAAsE,EAAE,MAAM;IAC7E,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;IAC9C,MAAMiD,MAAM,GAAGjD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE;MAAEC,EAAE,EAAE,UAAU;MAAE2B,IAAI,EAAE;IAAW,CAAC,CAAC;IACnF,MAAMsB,MAAM,GAAGlD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE;MAAEC,EAAE,EAAE,UAAU;MAAE2B,IAAI,EAAE;IAAW,CAAC,CAAC;IACnF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,EAAE8C,MAAM,EAAEC,MAAM,CAAC,EAAE;MAC/C,UAAU,EAAE;QACRxC,MAAM,EAAE;UACJyC,QAAQ,EAAE;YACNlD,EAAE,EAAE,OAAO;YACXG,IAAI,EAAE,MAAM;YACZgD,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS;UACjC;QACJ;MACJ;IACJ,CAAC,CAAC;IAEF,MAAM7B,UAA6C,GAAG;MAClD8B,IAAI,EAAE9C,YAAY,CAAC,MAAM,CAAC;MAC1B+C,IAAI,EAAE/C,YAAY,CAAC,MAAM,EAAE;QACvB4B,WAAW,EAAE,CACRC,GAAsB,IAAK;UACxB,IAAI,EAAEA,GAAG,CAACmB,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;YAC7B,OAAOnB,GAAG,CAACC,KAAK,CAAC,4BAA4B,CAAC;UAClD;QACJ,CAAC;MAET,CAAC;IACL,CAAC;IAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,MAAM;MACrByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,4BAA4B,CAAC;EACxE,CAAC,CAAC;EAEFnC,EAAE,CAAC,4DAA4D,EAAE,MAAM;IACnE,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IACxC,MAAMwD,IAAI,GAAGxD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;MAAEC,EAAE,EAAE,MAAM;MAAE2B,IAAI,EAAE;IAAW,CAAC,CAAC;IAC5E,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEe,IAAI,CAAC,CAAC;IAEtC,MAAMjC,UAA6C,GAAG;MAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;MAC1BkD,IAAI,EAAElD,YAAY,CAAC,MAAM,EAAE;QACvB4B,WAAW,EAAE,CACRC,GAAsB,IAAK;UACxB,IAAI,EAAEA,GAAG,CAACsB,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;YACnC,OAAOtB,GAAG,CAACC,KAAK,CAAC,wBAAwB,CAAC;UAC9C;QACJ,CAAC;MAET,CAAC;IACL,CAAC;IAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,MAAM;MACrByB,QAAQ,EAAE,MAAM;MAChBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,wBAAwB,CAAC;EACpE,CAAC,CAAC;EAEFnC,EAAE,CAAC,uEAAuE,EAAE,MAAM;IAC9E,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;IAC9C,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;IAElC,MAAMoB,UAA6C,GAAG;MAClDiB,IAAI,EAAEjC,YAAY,CAAC,MAAM,EAAE;QACvB4B,WAAW,EAAE,CACRC,GAAsB,IAAKA,GAAG,CAACC,KAAK,CAAC,kCAAkC,CAAC;MAEjF,CAAC,CAAC;MACFZ,MAAM,EAAElB,YAAY,CAAC,QAAQ;IACjC,CAAC;;IAED;IACA,MAAMmB,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,QAAQ;MACvByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;EAEFnC,EAAE,CAAC,qDAAqD,EAAE,MAAM;IAC5D,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;IACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;IAElC,MAAMoB,UAA6C,GAAG;MAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;MACpCoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;QAC3B4B,WAAW,EAAE,CACT,MAAM,CAAC,CAAC,EACPC,GAAsB,IAAKA,GAAG,CAACC,KAAK,CAAC,cAAc,CAAC,EACpDD,GAAsB,IAAKA,GAAG,CAACC,KAAK,CAAC,YAAY,CAAC;MAE3D,CAAC;IACL,CAAC;IAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,QAAQ;MACvByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,cAAc,CAAC;EAC1D,CAAC,CAAC;EAEFnC,EAAE,CAAC,6DAA6D,EAAE,MAAM;IACpE,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;IACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;IAElC,MAAMoB,UAA6C,GAAG;MAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW;IACvC,CAAC;IAED,MAAMmB,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,SAAS;MACxByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;EAEFnC,EAAE,CAAC,yDAAyD,EAAE,MAAM;IAChE,MAAM0B,GAAG,GAAGV,YAAY,CAAC,EAAE,CAAC;IAE5B,MAAMW,UAA6C,GAAG;MAClDE,MAAM,EAAElB,YAAY,CAAC,QAAQ;IACjC,CAAC;IAED,MAAMmB,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,QAAQ;MACvByB,QAAQ,EAAE,aAAa;MACvBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;EAEFnC,EAAE,CAAC,mEAAmE,EAAE,MAAM;IAC1E,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;IACnD,MAAM4D,KAAK,GAAG5D,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE;MAC3CC,EAAE,EAAE,UAAU;MACd2B,IAAI,EAAE;IACV,CAAC,CAAC;IACF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,EAAEyD,KAAK,CAAC,EAAE;MACtC,UAAU,EAAE;QACRlD,MAAM,EAAE;UACJmD,UAAU,EAAE;YACR5D,EAAE,EAAE,UAAU;YACdG,IAAI,EAAE,MAAM;YACZgD,MAAM,EAAE,CAAC,SAAS;UACtB,CAAC;UACDU,WAAW,EAAE;YACT7D,EAAE,EAAE,WAAW;YACfG,IAAI,EAAE,MAAM;YACZgD,MAAM,EAAE;UACZ;QACJ;MACJ;IACJ,CAAC,CAAC;IAEF,MAAM7B,UAA6C,GAAG;MAClDwC,SAAS,EAAExD,YAAY,CAAC,WAAW,CAAC;MACpCoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;QAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;UACxB,IAAI,EAAEA,GAAG,CAACmB,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;YAC7B,OAAOnB,GAAG,CAACC,KAAK,CAAC,cAAc,CAAC;UACpC;QACJ,CAAC;MAET,CAAC;IACL,CAAC;;IAED;IACA,MAAM2B,UAAU,GAAGlE,mBAAmB,CAAC;MACnCI,aAAa,EAAE,QAAQ;MACvByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,YAAY;MAClBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAACmE,UAAU,CAAClC,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;;IAEtC;IACA,MAAMkC,WAAW,GAAGnE,mBAAmB,CAAC;MACpCI,aAAa,EAAE,QAAQ;MACvByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,aAAa;MACnBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAACoE,WAAW,CAACnC,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EAC1C,CAAC,CAAC;EAEFnC,EAAE,CAAC,iEAAiE,EAAE,MAAM;IACxE,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;IACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;IAElC,MAAMoB,UAA6C,GAAG;MAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;MACpCoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;QAC3B4B,WAAW,EAAE,CAAEC,GAAsB,IAAKA,GAAG,CAACC,KAAK,CAAC,SAAS,CAAC;MAClE,CAAC;IACL,CAAC;IAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,QAAQ;MACvByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,SAAS,CAAC;EACrD,CAAC,CAAC;EAEFnC,EAAE,CAAC,0DAA0D,EAAE,MAAM;IACjE,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;IACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;IAElC,MAAMoB,UAA6C,GAAG;MAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;MACpCoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;QAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;UACxB,MAAM,IAAI8B,KAAK,CAAC,kCAAkC9B,GAAG,CAACjC,MAAM,CAACG,IAAI,EAAE,CAAC;QACxE,CAAC;MAET,CAAC;IACL,CAAC;IAED,MAAMoB,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,QAAQ;MACvByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,0CAA0C,CAAC;EACtF,CAAC,CAAC;EAEFnC,EAAE,CAAC,+DAA+D,EAAE,MAAM;IACtE,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;IACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;IAElC,MAAMoB,UAA6C,GAAG;MAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;MACpCoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;QAC3B4B,WAAW,EAAE,CACT,MAAM;UACF,MAAM,qBAAqB;QAC/B,CAAC;MAET,CAAC;IACL,CAAC;IAED,MAAMT,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,QAAQ;MACvByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,2BAA2B,CAAC;EACvE,CAAC,CAAC;EAEFnC,EAAE,CAAC,sFAAsF,EAAE,MAAM;IAC7F,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;IACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;IAElC,MAAMoB,UAA6C,GAAG;MAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;MACpCoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;QAC3B4B,WAAW,EAAE,CACT,MAAM;UACF,MAAM,IAAI;QACd,CAAC;MAET,CAAC;IACL,CAAC;IAED,MAAMT,MAAM,GAAG5B,mBAAmB,CAAC;MAC/BI,aAAa,EAAE,QAAQ;MACvByB,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,2BAA2B,CAAC;EACvE,CAAC,CAAC;EAEFpC,QAAQ,CAAC,eAAe,EAAE,MAAM;IAC5BC,EAAE,CAAC,+CAA+C,EAAE,MAAM;MACtD,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;MAC9C,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;MAClC,MAAMoB,UAA6C,GAAG;QAClDiB,IAAI,EAAEjC,YAAY,CAAC,MAAM,CAAC;QAC1B2B,QAAQ,EAAE3B,YAAY,CAAC,UAAU,EAAE;UAC/B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAI,CAACA,GAAG,CAAC+B,SAAS,CAAC,MAAM,CAAC,EAAE;cACxB,OAAO/B,GAAG,CAACC,KAAK,CAAC,yCAAyC,CAAC;YAC/D;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,UAAU;QACzByB,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEFnC,EAAE,CAAC,uDAAuD,EAAE,MAAM;MAC9D,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;MACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;MAClC,MAAMoB,UAA6C,GAAG;QAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;QACpC2B,QAAQ,EAAE3B,YAAY,CAAC,UAAU,EAAE;UAC/B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAI,CAACA,GAAG,CAAC+B,SAAS,CAAC,MAAM,CAAC,EAAE;cACxB,OAAO/B,GAAG,CAACC,KAAK,CAAC,yCAAyC,CAAC;YAC/D;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,UAAU;QACzByB,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IACtC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFpC,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACjCC,EAAE,CAAC,+CAA+C,EAAE,MAAM;MACtD,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC;MACpD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;MAClC,MAAMoB,UAA6C,GAAG;QAClDyB,UAAU,EAAEzC,YAAY,CAAC,YAAY,CAAC;QACtCsC,YAAY,EAAEtC,YAAY,CAAC,cAAc,EAAE;UACvC4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAI,CAACA,GAAG,CAACU,cAAc,CAAC,YAAY,CAAC,EAAE;cACnC,OAAOV,GAAG,CAACC,KAAK,CAAC,SAAS,CAAC;YAC/B;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,cAAc;QAC7ByB,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEFnC,EAAE,CAAC,6CAA6C,EAAE,MAAM;MACpD,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC;MAC9C,MAAM+C,KAAK,GAAG/C,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAW,CAAC,CAAC;MACjF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEM,KAAK,CAAC,CAAC;MACvC,MAAMxB,UAA6C,GAAG;QAClDyB,UAAU,EAAEzC,YAAY,CAAC,YAAY,CAAC;QACtCiB,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;QACpCsC,YAAY,EAAEtC,YAAY,CAAC,cAAc,EAAE;UACvC4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAI,CAACA,GAAG,CAACU,cAAc,CAAC,YAAY,CAAC,EAAE;cACnC,OAAOV,GAAG,CAACC,KAAK,CAAC,SAAS,CAAC;YAC/B;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,cAAc;QAC7ByB,QAAQ,EAAE,OAAO;QACjBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEFnC,EAAE,CAAC,8CAA8C,EAAE,MAAM;MACrD,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;MACxC,MAAM+C,KAAK,GAAG/C,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAW,CAAC,CAAC;MAC/E,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEM,KAAK,CAAC,CAAC;MACvC,MAAMxB,UAA6C,GAAG;QAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;QAC1BqC,OAAO,EAAErC,YAAY,CAAC,SAAS,CAAC;QAChCsC,YAAY,EAAEtC,YAAY,CAAC,cAAc,EAAE;UACvC4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAI,CAACA,GAAG,CAACU,cAAc,CAAC,YAAY,CAAC,EAAE;cACnC,OAAOV,GAAG,CAACC,KAAK,CAAC,SAAS,CAAC;YAC/B;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,cAAc;QAC7ByB,QAAQ,EAAE,OAAO;QACjBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IACtC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFpC,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACjCC,EAAE,CAAC,yDAAyD,EAAE,MAAM;MAChE,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;MAC9C,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,EAAE;QAC/B,UAAU,EAAE;UACRO,MAAM,EAAE;YACJyC,QAAQ,EAAE;cACNlD,EAAE,EAAE,OAAO;cACXG,IAAI,EAAE,MAAM;cACZgD,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS;YAC5C;UACJ;QACJ;MACJ,CAAC,CAAC;MAEF,MAAM7B,UAA6C,GAAG;QAClD8B,IAAI,EAAE9C,YAAY,CAAC,MAAM,CAAC;QAC1B+C,IAAI,EAAE/C,YAAY,CAAC,MAAM,EAAE;UACvB4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAI,EAAEA,GAAG,CAACmB,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;cAC7B,OAAOnB,GAAG,CAACC,KAAK,CAAC,gBAAgB,CAAC;YACtC;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,MAAM;QACrByB,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IACtC,CAAC,CAAC;IAEFnC,EAAE,CAAC,2CAA2C,EAAE,MAAM;MAClD,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;MACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;MAElC,MAAMoB,UAA6C,GAAG;QAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;QACpCoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAI,EAAEA,GAAG,CAACmB,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;cAC7B,OAAOnB,GAAG,CAACC,KAAK,CAAC,SAAS,CAAC;YAC/B;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFpC,QAAQ,CAAC,YAAY,EAAE,MAAM;IACzBC,EAAE,CAAC,0DAA0D,EAAE,MAAM;MACjE,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;MACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;MAClC,MAAMoB,UAA6C,GAAG;QAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;QACpC6D,WAAW,EAAE7D,YAAY,CAAC,aAAa,EAAE;UACrCI,IAAI,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC;UAC/BwB,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAIA,GAAG,CAACiC,MAAM,CAAC,cAAc,CAAC,EAAE;cAC5B,OAAOjC,GAAG,CAACC,KAAK,CAAC,gCAAgC,CAAC;YACtD;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,aAAa;QAC5ByB,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IACtC,CAAC,CAAC;IAEFnC,EAAE,CAAC,qEAAqE,EAAE,MAAM;MAC5E,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;MACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;MAClC,MAAMoB,UAA6C,GAAG;QAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;QACpCkB,MAAM,EAAElB,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAIA,GAAG,CAACiC,MAAM,CAAC,cAAc,CAAC,EAAE;cAC5B,OAAOjC,GAAG,CAACC,KAAK,CAAC,SAAS,CAAC;YAC/B;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFpC,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IAC9BC,EAAE,CAAC,qDAAqD,EAAE,MAAM;MAC5D,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC;MAC9C,MAAM+C,KAAK,GAAG/C,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAW,CAAC,CAAC;MACjF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEM,KAAK,CAAC,CAAC;MACvC,MAAMxB,UAA6C,GAAG;QAClDyB,UAAU,EAAEzC,YAAY,CAAC,YAAY,EAAE;UAAEI,IAAI,EAAE,CAAC,SAAS;QAAE,CAAC,CAAC;QAC7Da,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;QACpCsC,YAAY,EAAEtC,YAAY,CAAC,cAAc,EAAE;UACvC4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,MAAMkC,QAAQ,GAAGlC,GAAG,CAACmC,WAAW,CAAC,YAAY,CAAC;YAC9C,IAAI,EAAED,QAAQ,KAAKE,SAAS,IAAIF,QAAQ,CAAChE,IAAI,KAAK,YAAY,CAAC,EAAE;cAC7D,OAAO8B,GAAG,CAACC,KAAK,CAAC,SAAS,CAAC;YAC/B;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,cAAc;QAC7ByB,QAAQ,EAAE,OAAO;QACjBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEFnC,EAAE,CAAC,kDAAkD,EAAE,MAAM;MACzD,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;MACxC,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,CAAC,CAAC;MAChC,MAAMlB,UAA6C,GAAG;QAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;QAC1BoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAIA,GAAG,CAACmC,WAAW,CAAC,YAAY,CAAC,KAAKC,SAAS,EAAE;cAC7C,OAAOpC,GAAG,CAACC,KAAK,CAAC,SAAS,CAAC;YAC/B;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,MAAM;QAChBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IACtC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFpC,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACjCC,EAAE,CAAC,uDAAuD,EAAE,MAAM;MAC9D,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;MACxC,MAAMyE,KAAK,GAAGzE,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAW,CAAC,CAAC;MAC7E,MAAM8C,KAAK,GAAG1E,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAW,CAAC,CAAC;MAC7E,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEgC,KAAK,EAAEC,KAAK,CAAC,CAAC;MAE9C,MAAMnD,UAA6C,GAAG;QAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;QAC1BkD,IAAI,EAAElD,YAAY,CAAC,MAAM,EAAE;UACvB4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,IAAI,EAAEA,GAAG,CAACsB,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;cACnC,OAAOtB,GAAG,CAACC,KAAK,CAAC,cAAc,CAAC;YACpC;UACJ,CAAC;QAET,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,MAAM;QACrByB,QAAQ,EAAE,MAAM;QAChBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IACtC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFpC,QAAQ,CAAC,eAAe,EAAE,MAAM;IAC5BC,EAAE,CAAC,oDAAoD,EAAE,MAAM;MAC3D,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC;MACnD,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;MAElC,IAAIwE,iBAA+D;MACnE,MAAMpD,UAA6C,GAAG;QAClDC,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;QACpCoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3BI,IAAI,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC;UAC7BwB,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxBuC,iBAAiB,GAAGvC,GAAG,CAAC/B,SAAS;UACrC,CAAC;QAET,CAAC;MACL,CAAC;MAEDP,mBAAmB,CAAC;QAChBI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MAEF1B,MAAM,CAAC8E,iBAAiB,CAAC,CAACrC,WAAW,CAAC,CAAC;MACvCzC,MAAM,CAAC8E,iBAAiB,CAAErE,IAAI,CAAC,CAACyB,IAAI,CAAC,QAAQ,CAAC;MAC9ClC,MAAM,CAAC8E,iBAAiB,CAAEhE,IAAI,CAAC,CAACiE,OAAO,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC,CAAC;EAEFjF,QAAQ,CAAC,kBAAkB,EAAE,MAAM;IAC/BC,EAAE,CAAC,+CAA+C,EAAE,MAAM;MACtD,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;MACxC,MAAM0C,OAAO,GAAG1C,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAW,CAAC,CAAC;MACnF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEC,OAAO,CAAC,CAAC;MAEzC,IAAImC,eAAmC;MACvC,MAAMtD,UAA6C,GAAG;QAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;QAC1BqC,OAAO,EAAErC,YAAY,CAAC,SAAS,CAAC;QAChCoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB,MAAM0C,WAAW,GAAG1C,GAAG,CAACjC,MAAM,CAAC4E,SAAS,CAAC,CAAC;YAC1CF,eAAe,GAAGC,WAAW,EAAExE,IAAI;UACvC,CAAC;QAET,CAAC;MACL,CAAC;MAEDR,mBAAmB,CAAC;QAChBI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,SAAS;QACnBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MAEF1B,MAAM,CAACgF,eAAe,CAAC,CAAC9C,IAAI,CAAC,MAAM,CAAC;IACxC,CAAC,CAAC;IAEFnC,EAAE,CAAC,0CAA0C,EAAE,MAAM;MACjD,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;MACxC,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,CAAC,CAAC;MAEhC,IAAIuC,YAAqB,GAAG,YAAY;MACxC,MAAMzD,UAA6C,GAAG;QAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;QAC1BoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB4C,YAAY,GAAG5C,GAAG,CAACjC,MAAM,CAAC4E,SAAS,CAAC,CAAC;UACzC,CAAC;QAET,CAAC;MACL,CAAC;MAEDjF,mBAAmB,CAAC;QAChBI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,MAAM;QAChBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MAEF1B,MAAM,CAACmF,YAAY,CAAC,CAAC/C,aAAa,CAAC,CAAC;IACxC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFtC,QAAQ,CAAC,6DAA6D,EAAE,MAAM;IAC1EC,EAAE,CAAC,kDAAkD,EAAE,MAAM;MACzD,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;MACxC,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,CAAC,CAAC;MAEhC,IAAIwC,aAAiC;MACrC,IAAIC,aAAiC;MACrC,MAAM3D,UAA6C,GAAG;QAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;QAC1BoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB6C,aAAa,GAAG7C,GAAG,CAACjC,MAAM,CAACgF,UAAU,CAAC,CAAC;YACvCD,aAAa,GAAG9C,GAAG,CAACjC,MAAM,CAACiF,UAAU,CAAC,CAAC;UAC3C,CAAC;QAET,CAAC;MACL,CAAC;MAEDtF,mBAAmB,CAAC;QAChBI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,MAAM;QAChBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MAEF1B,MAAM,CAACoF,aAAa,CAAC,CAAClD,IAAI,CAAC,CAAC,CAAC,CAAC;MAC9BlC,MAAM,CAACqF,aAAa,CAAC,CAACnD,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC;IAEFnC,EAAE,CAAC,8CAA8C,EAAE,MAAM;MACrD,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC;MACjD,MAAMqF,IAAI,GAAGrF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAe,CAAC,CAAC;MAChF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAE4C,IAAI,CAAC,EAAE;QACnC5C,IAAI,EAAE;UACF/B,MAAM,EAAE;YACJ,cAAc,EAAE;cAAET,EAAE,EAAE,IAAI;cAAEG,IAAI,EAAE,MAAM;cAAEgD,MAAM,EAAE,CAAC,QAAQ;YAAE,CAAC;YAC9D,cAAc,EAAE;cAAEnD,EAAE,EAAE,IAAI;cAAEG,IAAI,EAAE,MAAM;cAAEgD,MAAM,EAAE,CAAC,YAAY;YAAE,CAAC;YAClE,cAAc,EAAE;cAAEnD,EAAE,EAAE,IAAI;cAAEG,IAAI,EAAE,MAAM;cAAEgD,MAAM,EAAE,CAAC,QAAQ;YAAE;UACjE;QACJ;MACJ,CAAC,CAAC;MAEF,IAAI6B,aAAiC;MACrC,IAAIC,aAAiC;MACrC,IAAII,cAAmC;MACvC,IAAIC,eAAoC;MACxC,MAAMhE,UAA6C,GAAG;QAClDiE,aAAa,EAAEjF,YAAY,CAAC,eAAe,CAAC;QAC5CkF,IAAI,EAAElF,YAAY,CAAC,MAAM,CAAC;QAC1BoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB6C,aAAa,GAAG7C,GAAG,CAACjC,MAAM,CAACgF,UAAU,CAAC,CAAC;YACvCD,aAAa,GAAG9C,GAAG,CAACjC,MAAM,CAACiF,UAAU,CAAC,CAAC;YACvCE,cAAc,GAAGlD,GAAG,CAACjC,MAAM,CAACuF,WAAW,CAAC,CAAC;YACzCH,eAAe,GAAGnD,GAAG,CAACjC,MAAM,CAACwF,YAAY,CAAC,CAAC;UAC/C,CAAC;QAET,CAAC;MACL,CAAC;MAED7F,mBAAmB,CAAC;QAChBI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,QAAQ;QAClBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MAEF1B,MAAM,CAACoF,aAAa,CAAC,CAAClD,IAAI,CAAC,CAAC,CAAC;MAC7BlC,MAAM,CAACqF,aAAa,CAAC,CAACnD,IAAI,CAAC,CAAC,CAAC;MAC7BlC,MAAM,CAACyF,cAAc,CAAC,CAACvD,IAAI,CAAC,IAAI,CAAC;MACjClC,MAAM,CAAC0F,eAAe,CAAC,CAACxD,IAAI,CAAC,KAAK,CAAC;IACvC,CAAC,CAAC;IAEFnC,EAAE,CAAC,2CAA2C,EAAE,MAAM;MAClD,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC;MACjD,MAAMqF,IAAI,GAAGrF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAe,CAAC,CAAC;MAChF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAE4C,IAAI,CAAC,EAAE;QACnC5C,IAAI,EAAE;UACF/B,MAAM,EAAE;YACJ,cAAc,EAAE;cAAET,EAAE,EAAE,IAAI;cAAEG,IAAI,EAAE,MAAM;cAAEgD,MAAM,EAAE,CAAC,QAAQ;YAAE,CAAC;YAC9D,cAAc,EAAE;cAAEnD,EAAE,EAAE,IAAI;cAAEG,IAAI,EAAE,MAAM;cAAEgD,MAAM,EAAE,CAAC,QAAQ;YAAE;UACjE;QACJ;MACJ,CAAC,CAAC;MAEF,IAAImC,eAAoC;MACxC,IAAID,cAAmC;MACvC,MAAM/D,UAA6C,GAAG;QAClDiE,aAAa,EAAEjF,YAAY,CAAC,eAAe,CAAC;QAC5CkF,IAAI,EAAElF,YAAY,CAAC,MAAM,CAAC;QAC1BoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxBmD,eAAe,GAAGnD,GAAG,CAACjC,MAAM,CAACwF,YAAY,CAAC,CAAC;YAC3CL,cAAc,GAAGlD,GAAG,CAACjC,MAAM,CAACuF,WAAW,CAAC,CAAC;UAC7C,CAAC;QAET,CAAC;MACL,CAAC;MAED5F,mBAAmB,CAAC;QAChBI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,QAAQ;QAClBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MAEF1B,MAAM,CAAC0F,eAAe,CAAC,CAACxD,IAAI,CAAC,IAAI,CAAC;MAClClC,MAAM,CAACyF,cAAc,CAAC,CAACvD,IAAI,CAAC,KAAK,CAAC;IACtC,CAAC,CAAC;IAEFnC,EAAE,CAAC,8EAA8E,EAAE,MAAM;MACrF,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC;MACjD;MACA,MAAMqF,IAAI,GAAGrF,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE;QAC3CC,EAAE,EAAE,MAAM;QACV2B,IAAI,EAAE;MACV,CAAC,CAAC;MACF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAE4C,IAAI,CAAC,EAAE;QACnC5C,IAAI,EAAE;UACF/B,MAAM,EAAE;YACJ,cAAc,EAAE;cAAET,EAAE,EAAE,IAAI;cAAEG,IAAI,EAAE,MAAM;cAAEgD,MAAM,EAAE;YAAS,CAAC;YAC5D,cAAc,EAAE;cAAEnD,EAAE,EAAE,IAAI;cAAEG,IAAI,EAAE,MAAM;cAAEgD,MAAM,EAAE;YAAS,CAAC;YAC5D,cAAc,EAAE;cAAEnD,EAAE,EAAE,IAAI;cAAEG,IAAI,EAAE,MAAM;cAAEgD,MAAM,EAAE;YAAS,CAAC;YAC5D,cAAc,EAAE;cAAEnD,EAAE,EAAE,IAAI;cAAEG,IAAI,EAAE,MAAM;cAAEgD,MAAM,EAAE;YAAa;UACnE;QACJ;MACJ,CAAC,CAAC;MAEF,IAAI6B,aAAiC;MACrC,IAAIK,cAAmC;MACvC,MAAM/D,UAA6C,GAAG;QAClDiE,aAAa,EAAEjF,YAAY,CAAC,eAAe,CAAC;QAC5CkF,IAAI,EAAElF,YAAY,CAAC,MAAM,CAAC;QAC1BoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB6C,aAAa,GAAG7C,GAAG,CAACjC,MAAM,CAACgF,UAAU,CAAC,CAAC;YACvCG,cAAc,GAAGlD,GAAG,CAACjC,MAAM,CAACuF,WAAW,CAAC,CAAC;UAC7C,CAAC;QAET,CAAC;MACL,CAAC;MAED5F,mBAAmB,CAAC;QAChBI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,YAAY;QACtBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;;MAEF;MACA1B,MAAM,CAACoF,aAAa,CAAC,CAAClD,IAAI,CAAC,CAAC,CAAC;MAC7BlC,MAAM,CAACyF,cAAc,CAAC,CAACvD,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEFnC,EAAE,CAAC,mFAAmF,EAAE,MAAM;MAC1F,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC;MACjD,MAAM4F,KAAK,GAAG5F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAQ,CAAC,CAAC;MAC1E,MAAMiE,KAAK,GAAG7F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAQ,CAAC,CAAC;MAC1E,MAAMkE,KAAK,GAAG9F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAQ,CAAC,CAAC;MAC1E,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEmD,KAAK,EAAEC,KAAK,EAAEC,KAAK,CAAC,EAAE;QAClDrD,IAAI,EAAE;UACF/B,MAAM,EAAE;YACJqF,KAAK,EAAE;cACH9F,EAAE,EAAE,GAAG;cACPG,IAAI,EAAE,MAAM;cACZ4F,IAAI,EAAE,IAAI;cACV5C,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ;YACzC;UACJ;QACJ;MACJ,CAAC,CAAC;MAEF,IAAI6C,QAA6B,GAAG,CAAC,CAAC;MACtC,MAAMC,KAAwC,GAAG;QAC7CV,aAAa,EAAEjF,YAAY,CAAC,eAAe,CAAC;QAC5CkF,IAAI,EAAElF,YAAY,CAAC,MAAM,CAAC;QAC1BoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CACRC,GAAsB,IAAK;YACxB6D,QAAQ,GAAG;cACPE,KAAK,EAAE/D,GAAG,CAACjC,MAAM,CAACgF,UAAU,CAAC,CAAC;cAC9BiB,KAAK,EAAEhE,GAAG,CAACjC,MAAM,CAACiF,UAAU,CAAC,CAAC;cAC9BiB,OAAO,EAAEjE,GAAG,CAACjC,MAAM,CAACwF,YAAY,CAAC,CAAC;cAClCW,MAAM,EAAElE,GAAG,CAACjC,MAAM,CAACuF,WAAW,CAAC;YACnC,CAAC;UACL,CAAC;QAET,CAAC;MACL,CAAC;;MAED;MACA5F,mBAAmB,CAAC;QAChBI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,QAAQ;QAClBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC,UAAU,EAAE2E;MAChB,CAAC,CAAC;MACFrG,MAAM,CAACoG,QAAQ,CAACE,KAAK,CAAC,CAACpE,IAAI,CAAC,CAAC,CAAC;MAC9BlC,MAAM,CAACoG,QAAQ,CAACG,KAAK,CAAC,CAACrE,IAAI,CAAC,CAAC,CAAC;MAC9BlC,MAAM,CAACoG,QAAQ,CAACI,OAAO,CAAC,CAACtE,IAAI,CAAC,IAAI,CAAC;MACnClC,MAAM,CAACoG,QAAQ,CAACK,MAAM,CAAC,CAACvE,IAAI,CAAC,KAAK,CAAC;;MAEnC;MACAjC,mBAAmB,CAAC;QAChBI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,QAAQ;QAClBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC,UAAU,EAAE2E;MAChB,CAAC,CAAC;MACFrG,MAAM,CAACoG,QAAQ,CAACE,KAAK,CAAC,CAACpE,IAAI,CAAC,CAAC,CAAC;MAC9BlC,MAAM,CAACoG,QAAQ,CAACG,KAAK,CAAC,CAACrE,IAAI,CAAC,CAAC,CAAC;MAC9BlC,MAAM,CAACoG,QAAQ,CAACI,OAAO,CAAC,CAACtE,IAAI,CAAC,KAAK,CAAC;MACpClC,MAAM,CAACoG,QAAQ,CAACK,MAAM,CAAC,CAACvE,IAAI,CAAC,KAAK,CAAC;;MAEnC;MACAjC,mBAAmB,CAAC;QAChBI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,QAAQ;QAClBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC,UAAU,EAAE2E;MAChB,CAAC,CAAC;MACFrG,MAAM,CAACoG,QAAQ,CAACE,KAAK,CAAC,CAACpE,IAAI,CAAC,CAAC,CAAC;MAC9BlC,MAAM,CAACoG,QAAQ,CAACG,KAAK,CAAC,CAACrE,IAAI,CAAC,CAAC,CAAC;MAC9BlC,MAAM,CAACoG,QAAQ,CAACI,OAAO,CAAC,CAACtE,IAAI,CAAC,KAAK,CAAC;MACpClC,MAAM,CAACoG,QAAQ,CAACK,MAAM,CAAC,CAACvE,IAAI,CAAC,IAAI,CAAC;IACtC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFpC,QAAQ,CAAC,uBAAuB,EAAE,MAAM;IACpCC,EAAE,CAAC,gEAAgE,EAAE,MAAM;MACvE,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;MAC9C,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;MAClC,MAAMoB,UAA6C,GAAG;QAClDkE,IAAI,EAAElF,YAAY,CAAC,MAAM,EAAE;UACvBgG,qBAAqB,EAAE,CAClBnE,GAAsB,IAAK;YACxB,IAAIA,GAAG,CAACiC,MAAM,CAAC,cAAc,CAAC,EAAE;cAC5B,OAAOjC,GAAG,CAACC,KAAK,CAAC,0BAA0B,CAAC;YAChD;UACJ,CAAC;QAET,CAAC,CAAC;QACFmE,SAAS,EAAEjG,YAAY,CAAC,WAAW,EAAE;UAAEI,IAAI,EAAE,CAAC,cAAc;QAAE,CAAC;MACnE,CAAC;MAED,MAAMe,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,WAAW;QAC1ByB,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;MAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,0BAA0B,CAAC;IACtE,CAAC,CAAC;IAEFnC,EAAE,CAAC,uEAAuE,EAAE,MAAM;MAC9E,MAAMyF,IAAI,GAAGrF,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;MAC1C,MAAMyG,SAAS,GAAGzG,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE;QACtDC,EAAE,EAAE,QAAQ;QACZ2B,IAAI,EAAE;MACV,CAAC,CAAC;MACF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAACyE,IAAI,EAAEoB,SAAS,CAAC,CAAC;MAC3C,MAAMlF,UAA6C,GAAG;QAClDkE,IAAI,EAAElF,YAAY,CAAC,MAAM,EAAE;UACvBgG,qBAAqB,EAAE,CAClBnE,GAAsB,IAAK;YACxB,IAAIA,GAAG,CAACiC,MAAM,CAAC,cAAc,CAAC,EAAE;cAC5B,OAAOjC,GAAG,CAACC,KAAK,CAAC,+BAA+B,CAAC;YACrD;UACJ,CAAC;QAET,CAAC,CAAC;QACFb,SAAS,EAAEjB,YAAY,CAAC,WAAW,CAAC;QACpCiG,SAAS,EAAEjG,YAAY,CAAC,WAAW,EAAE;UAAEI,IAAI,EAAE,CAAC,cAAc;QAAE,CAAC;MACnE,CAAC;;MAED;MACA,MAAMe,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,WAAW;QAC1ByB,QAAQ,EAAE,aAAa;QACvBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;MAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,+BAA+B,CAAC;IAC3E,CAAC,CAAC;IAEFnC,EAAE,CAAC,8CAA8C,EAAE,MAAM;MACrD,MAAMyF,IAAI,GAAGrF,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;MAC1C,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACyE,IAAI,CAAC,CAAC;MAChC,MAAM9D,UAA6C,GAAG;QAClDkE,IAAI,EAAElF,YAAY,CAAC,MAAM,EAAE;UACvBgG,qBAAqB,EAAE,CAClBnE,GAAsB,IAAK;YACxB,IAAIA,GAAG,CAACiC,MAAM,CAAC,cAAc,CAAC,EAAE;cAC5B,OAAOjC,GAAG,CAACC,KAAK,CAAC,SAAS,CAAC;YAC/B;UACJ,CAAC;QAET,CAAC,CAAC;QACFZ,MAAM,EAAElB,YAAY,CAAC,QAAQ;MACjC,CAAC;MAED,MAAMmB,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,QAAQ;QAClBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEFnC,EAAE,CAAC,uEAAuE,EAAE,MAAM;MAC9E,MAAM8G,IAAI,GAAG1G,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;MACxC,MAAMqF,IAAI,GAAGrF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;QAAEC,EAAE,EAAE,MAAM;QAAE2B,IAAI,EAAE;MAAW,CAAC,CAAC;MAC5E,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC8F,IAAI,EAAErB,IAAI,CAAC,CAAC;MACtC,MAAM9D,UAA6C,GAAG;QAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,EAAE;UACvBgG,qBAAqB,EAAE,CAClBnE,GAAsB,IAAKA,GAAG,CAACC,KAAK,CAAC,wBAAwB,CAAC;QAEvE,CAAC,CAAC;QACFoD,IAAI,EAAElF,YAAY,CAAC,MAAM,CAAC;QAC1BkB,MAAM,EAAElB,YAAY,CAAC,QAAQ;MACjC,CAAC;;MAED;MACA,MAAMmB,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,QAAQ;QAClBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;MAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,wBAAwB,CAAC;IACpE,CAAC,CAAC;IAEFnC,EAAE,CAAC,oEAAoE,EAAE,MAAM;MAC3E,MAAMO,MAAM,GAAGH,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;MAC9C,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACT,MAAM,CAAC,CAAC;MAClC,MAAMoB,UAA6C,GAAG;QAClDkE,IAAI,EAAElF,YAAY,CAAC,MAAM,EAAE;UACvBgG,qBAAqB,EAAE,CAClBnE,GAAsB,IAAKA,GAAG,CAACC,KAAK,CAAC,uBAAuB,CAAC;QAEtE,CAAC,CAAC;QACFsB,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;UAC3B4B,WAAW,EAAE,CAAEC,GAAsB,IAAKA,GAAG,CAACC,KAAK,CAAC,sBAAsB,CAAC;QAC/E,CAAC;MACL,CAAC;MAED,MAAMX,MAAM,GAAG5B,mBAAmB,CAAC;QAC/BI,aAAa,EAAE,QAAQ;QACvByB,QAAQ,EAAE,UAAU;QACpBC,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAEP,GAAG;QACbC;MACJ,CAAC,CAAC;MACF;MACA1B,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,sBAAsB,CAAC;IAClE,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC,CAAC;AAEFpC,QAAQ,CAAC,0BAA0B,EAAE,MAAM;EACvCC,EAAE,CAAC,0CAA0C,EAAE,MAAM;IACjD,MAAMoB,EAAE,GAAGhB,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE;MAAEC,EAAE,EAAE,MAAM;MAAE2B,IAAI,EAAE;IAAW,CAAC,CAAC;IAC1E,MAAMa,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IACxC,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEzB,EAAE,CAAC,CAAC;IACpC,MAAMO,UAA6C,GAAG;MAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;MAC1BoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ;IACjC,CAAC;IAED,MAAMmB,MAAM,GAAG3B,wBAAwB,CAAC;MACpC4G,SAAS,EAAE,MAAM;MACjB9E,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;EAEFnC,EAAE,CAAC,qCAAqC,EAAE,MAAM;IAC5C,MAAMoB,EAAE,GAAGhB,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE;MAAEC,EAAE,EAAE,MAAM;MAAE2B,IAAI,EAAE;IAAW,CAAC,CAAC;IAC1E,MAAMa,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IACxC,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEzB,EAAE,CAAC,CAAC;IACpC,MAAMO,UAA6C,GAAG;MAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;MAC1BoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;QAAEqG,SAAS,EAAE;MAAK,CAAC;IACtD,CAAC;IAED,MAAMlF,MAAM,GAAG3B,wBAAwB,CAAC;MACpC4G,SAAS,EAAE,MAAM;MACjB9E,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;EAEFnC,EAAE,CAAC,sCAAsC,EAAE,MAAM;IAC7C,MAAMoB,EAAE,GAAGhB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE;MAAEC,EAAE,EAAE,MAAM;MAAE2B,IAAI,EAAE;IAAW,CAAC,CAAC;IAC9E,MAAMa,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IACxC,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEzB,EAAE,CAAC,CAAC;IACpC,MAAMO,UAA6C,GAAG;MAClD8B,IAAI,EAAE9C,YAAY,CAAC,MAAM,CAAC;MAC1BsG,UAAU,EAAEtG,YAAY,CAAC,YAAY,EAAE;QAAEqG,SAAS,EAAE;MAAM,CAAC;IAC/D,CAAC;IAED,MAAMlF,MAAM,GAAG3B,wBAAwB,CAAC;MACpC4G,SAAS,EAAE,MAAM;MACjB9E,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,+BAA+B,CAAC;EAC3E,CAAC,CAAC;EAEFnC,EAAE,CAAC,gDAAgD,EAAE,MAAM;IACvD,MAAMkH,MAAM,GAAG9G,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC9C,MAAM6F,KAAK,GAAG7F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;MAAEC,EAAE,EAAE,QAAQ;MAAE2B,IAAI,EAAE;IAAe,CAAC,CAAC;IACnF,MAAMkE,KAAK,GAAG9F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;MAAEC,EAAE,EAAE,QAAQ;MAAE2B,IAAI,EAAE;IAAe,CAAC,CAAC;IACnF,MAAMmF,KAAK,GAAG/G,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;MAAEC,EAAE,EAAE,QAAQ;MAAE2B,IAAI,EAAE;IAAe,CAAC,CAAC;IACnF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAACkG,MAAM,EAAEjB,KAAK,EAAEC,KAAK,EAAEiB,KAAK,CAAC,EAAE;MACpDD,MAAM,EAAE;QACJpG,MAAM,EAAE;UACJ,cAAc,EAAE;YAAET,EAAE,EAAE,IAAI;YAAEG,IAAI,EAAE,MAAM;YAAEgD,MAAM,EAAE;UAAS,CAAC;UAC5D,cAAc,EAAE;YAAEnD,EAAE,EAAE,IAAI;YAAEG,IAAI,EAAE,MAAM;YAAEgD,MAAM,EAAE;UAAS,CAAC;UAC5D,cAAc,EAAE;YAAEnD,EAAE,EAAE,IAAI;YAAEG,IAAI,EAAE,MAAM;YAAEgD,MAAM,EAAE;UAAS;QAC/D;MACJ;IACJ,CAAC,CAAC;IACF,MAAM7B,UAA6C,GAAG;MAClDyF,MAAM,EAAEzG,YAAY,CAAC,QAAQ,CAAC;MAC9BkF,IAAI,EAAElF,YAAY,CAAC,MAAM,EAAE;QACvBqG,SAAS,EAAGxE,GAAsB,IAAK;UACnC,IAAI,EAAEA,GAAG,CAACsB,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;YACnC,OAAOtB,GAAG,CAACC,KAAK,CAAC,SAAS,CAAC;UAC/B;QACJ;MACJ,CAAC;IACL,CAAC;IAED,MAAMX,MAAM,GAAG3B,wBAAwB,CAAC;MACpC4G,SAAS,EAAE,QAAQ;MACnB9E,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;EAEFnC,EAAE,CAAC,iDAAiD,EAAE,MAAM;IACxD,MAAMkH,MAAM,GAAG9G,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC9C,MAAM6F,KAAK,GAAG7F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;MAAEC,EAAE,EAAE,QAAQ;MAAE2B,IAAI,EAAE;IAAe,CAAC,CAAC;IACnF,MAAMkE,KAAK,GAAG9F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;MAAEC,EAAE,EAAE,QAAQ;MAAE2B,IAAI,EAAE;IAAe,CAAC,CAAC;IACnF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAACkG,MAAM,EAAEjB,KAAK,EAAEC,KAAK,CAAC,EAAE;MAC7CgB,MAAM,EAAE;QACJpG,MAAM,EAAE;UACJ,cAAc,EAAE;YAAET,EAAE,EAAE,IAAI;YAAEG,IAAI,EAAE,MAAM;YAAEgD,MAAM,EAAE;UAAS,CAAC;UAC5D,cAAc,EAAE;YAAEnD,EAAE,EAAE,IAAI;YAAEG,IAAI,EAAE,MAAM;YAAEgD,MAAM,EAAE;UAAS;QAC/D;MACJ;IACJ,CAAC,CAAC;IACF,MAAM7B,UAA6C,GAAG;MAClDyF,MAAM,EAAEzG,YAAY,CAAC,QAAQ,CAAC;MAC9BkF,IAAI,EAAElF,YAAY,CAAC,MAAM,EAAE;QACvBqG,SAAS,EAAGxE,GAAsB,IAAK;UACnC,IAAI,EAAEA,GAAG,CAACsB,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;YACnC,OAAOtB,GAAG,CAACC,KAAK,CAAC,uBAAuB,CAAC;UAC7C;QACJ;MACJ,CAAC;IACL,CAAC;IAED,MAAMX,MAAM,GAAG3B,wBAAwB,CAAC;MACpC4G,SAAS,EAAE,QAAQ;MACnB9E,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,uBAAuB,CAAC;EACnE,CAAC,CAAC;EAEFnC,EAAE,CAAC,sDAAsD,EAAE,MAAM;IAC7D,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IACxC,MAAMgB,EAAE,GAAGhB,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE;MAAEC,EAAE,EAAE,MAAM;MAAE2B,IAAI,EAAE;IAAW,CAAC,CAAC;IAC1E,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAEzB,EAAE,CAAC,CAAC;IACpC,MAAMO,UAA6C,GAAG;MAClDoB,IAAI,EAAEpC,YAAY,CAAC,MAAM,CAAC;MAC1BoD,MAAM,EAAEpD,YAAY,CAAC,QAAQ,EAAE;QAC3BqG,SAAS,EAAEA,CAAA,KAAM;UACb,MAAM,IAAI1C,KAAK,CAAC,qCAAqC,CAAC;QAC1D;MACJ,CAAC;IACL,CAAC;IAED,MAAMxC,MAAM,GAAG3B,wBAAwB,CAAC;MACpC4G,SAAS,EAAE,MAAM;MACjB9E,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;IAClClC,MAAM,CAAC6B,MAAM,CAACM,SAAS,CAAEO,OAAO,CAAC,CAACR,IAAI,CAAC,qCAAqC,CAAC;EACjF,CAAC,CAAC;EAEFnC,EAAE,CAAC,sDAAsD,EAAE,MAAM;IAC7D,MAAM6C,IAAI,GAAGzC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1C,MAAMqF,IAAI,GAAGrF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;MAAEC,EAAE,EAAE,MAAM;MAAE2B,IAAI,EAAE;IAAe,CAAC,CAAC;IAChF,MAAMN,GAAG,GAAGV,YAAY,CAAC,CAAC6B,IAAI,EAAE4C,IAAI,CAAC,EAAE;MACnC5C,IAAI,EAAE;QACF/B,MAAM,EAAE;UACJ,cAAc,EAAE;YAAET,EAAE,EAAE,IAAI;YAAEG,IAAI,EAAE,MAAM;YAAEgD,MAAM,EAAE;UAAS,CAAC;UAC5D,cAAc,EAAE;YAAEnD,EAAE,EAAE,IAAI;YAAEG,IAAI,EAAE,MAAM;YAAEgD,MAAM,EAAE;UAAS;QAC/D;MACJ;IACJ,CAAC,CAAC;IAEF,IAAI6D,WAA0C;IAC9C,MAAM1F,UAA6C,GAAG;MAClDyF,MAAM,EAAEzG,YAAY,CAAC,QAAQ,CAAC;MAC9BkF,IAAI,EAAElF,YAAY,CAAC,MAAM,EAAE;QACvBI,IAAI,EAAE,CAAC,aAAa,CAAC;QACrBiG,SAAS,EAAGxE,GAAsB,IAAK;UACnC6E,WAAW,GAAG7E,GAAG;QACrB;MACJ,CAAC;IACL,CAAC;IAEDrC,wBAAwB,CAAC;MACrB4G,SAAS,EAAE,QAAQ;MACnB9E,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IAEF1B,MAAM,CAACoH,WAAW,CAAC,CAAC3E,WAAW,CAAC,CAAC;IACjCzC,MAAM,CAACoH,WAAW,CAAE5G,SAAS,CAACC,IAAI,CAAC,CAACyB,IAAI,CAAC,MAAM,CAAC;IAChDlC,MAAM,CAACoH,WAAW,CAAE5G,SAAS,CAACM,IAAI,CAAC,CAACiE,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;IAC5D/E,MAAM,CAACoH,WAAW,CAAE9G,MAAM,CAACG,IAAI,CAAC,CAACyB,IAAI,CAAC,QAAQ,CAAC;IAC/ClC,MAAM,CAACoH,WAAW,CAAErF,IAAI,CAAC,CAACG,IAAI,CAAC,cAAc,CAAC;IAC9ClC,MAAM,CAACoH,WAAW,CAAE9C,SAAS,CAAC,QAAQ,CAAC,CAAC,CAACpC,IAAI,CAAC,IAAI,CAAC;IACnDlC,MAAM,CAACoH,WAAW,CAAE5C,MAAM,CAAC,aAAa,CAAC,CAAC,CAACtC,IAAI,CAAC,IAAI,CAAC;EACzD,CAAC,CAAC;EAEFnC,EAAE,CAAC,wCAAwC,EAAE,MAAM;IAC/C,MAAM0B,GAAG,GAAGV,YAAY,CAAC,EAAE,CAAC;IAC5B,MAAMW,UAA6C,GAAG,CAAC,CAAC;IAExD,MAAMG,MAAM,GAAG3B,wBAAwB,CAAC;MACpC4G,SAAS,EAAE,aAAa;MACxB9E,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;EAEFnC,EAAE,CAAC,yCAAyC,EAAE,MAAM;IAChD,MAAMoB,EAAE,GAAGhB,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC;IACzC,MAAMsB,GAAG,GAAGV,YAAY,CAAC,CAACI,EAAE,CAAC,CAAC;IAC9B,MAAMO,UAA6C,GAAG,CAAC,CAAC;IAExD,MAAMG,MAAM,GAAG3B,wBAAwB,CAAC;MACpC4G,SAAS,EAAE,MAAM;MACjB9E,QAAQ,EAAEP,GAAG;MACbC;IACJ,CAAC,CAAC;IACF1B,MAAM,CAAC6B,MAAM,CAACI,OAAO,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrC,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
|
package/ElementFactory.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export interface ElementFactoryCreateElementParams {
|
|
|
5
5
|
componentName: string;
|
|
6
6
|
parentId: string;
|
|
7
7
|
slot: string;
|
|
8
|
-
index
|
|
8
|
+
index?: number;
|
|
9
9
|
bindings?: {
|
|
10
10
|
inputs?: Record<string, any>;
|
|
11
11
|
styles?: Record<string, any>;
|
|
@@ -34,7 +34,7 @@ interface GenerateOperationsParams {
|
|
|
34
34
|
}
|
|
35
35
|
type ElementFactoryOperations = {
|
|
36
36
|
addElement: (element: DocumentElement) => IDocumentOperation;
|
|
37
|
-
addToParent: (element: DocumentElement, index
|
|
37
|
+
addToParent: (element: DocumentElement, index?: number) => IDocumentOperation;
|
|
38
38
|
setInputBinding: (elementId: string, bindingPath: string, binding: InputValueBinding) => IDocumentOperation;
|
|
39
39
|
setStyleBinding: (elementId: string, bindingPath: string, binding: StyleValueBinding) => IDocumentOperation;
|
|
40
40
|
};
|
|
@@ -48,7 +48,6 @@ export declare class ElementFactory {
|
|
|
48
48
|
generateOperations({ element, inputsAst, bindings, operations }: GenerateOperationsParams): IDocumentOperation[];
|
|
49
49
|
private generateOperationsFromBindings;
|
|
50
50
|
private getComponentManifest;
|
|
51
|
-
private extractIndex;
|
|
52
51
|
private createElement;
|
|
53
52
|
}
|
|
54
53
|
export {};
|
package/ElementFactory.js
CHANGED
|
@@ -113,19 +113,32 @@ export class ElementFactory {
|
|
|
113
113
|
const factory = new ElementFactory(this.components);
|
|
114
114
|
const newElement = factory.createElementFromComponent({
|
|
115
115
|
componentName: value.params.component,
|
|
116
|
-
index
|
|
116
|
+
// undefined index = append to end of the slot array
|
|
117
|
+
index: isList ? undefined : 0,
|
|
117
118
|
slot: path,
|
|
118
119
|
parentId: elementId,
|
|
119
120
|
bindings: value.params
|
|
120
121
|
});
|
|
121
122
|
const newElementId = newElement.element.id;
|
|
122
|
-
ops.push(...newElement.operations
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
123
|
+
ops.push(...newElement.operations);
|
|
124
|
+
if (isList) {
|
|
125
|
+
// For list slots, AddToParent already manages the static array.
|
|
126
|
+
// We only set metadata here.
|
|
127
|
+
ops.push(operations.setInputBinding(elementId, path, {
|
|
128
|
+
id: generateElementId(),
|
|
129
|
+
type: node.type,
|
|
130
|
+
translatable: node.input.translatable,
|
|
131
|
+
list: node.list
|
|
132
|
+
}));
|
|
133
|
+
} else {
|
|
134
|
+
ops.push(operations.setInputBinding(elementId, path, {
|
|
135
|
+
id: generateElementId(),
|
|
136
|
+
static: newElementId,
|
|
137
|
+
type: node.type,
|
|
138
|
+
translatable: node.input.translatable,
|
|
139
|
+
list: node.list
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
129
142
|
} else if (isObject && isList) {
|
|
130
143
|
return;
|
|
131
144
|
} else {
|
|
@@ -154,10 +167,6 @@ export class ElementFactory {
|
|
|
154
167
|
}
|
|
155
168
|
return manifest;
|
|
156
169
|
}
|
|
157
|
-
extractIndex(path) {
|
|
158
|
-
const match = path.match(/\/(\d+)\//);
|
|
159
|
-
return match ? parseInt(match[1], 10) : 0;
|
|
160
|
-
}
|
|
161
170
|
createElement(componentName, parentId, slot) {
|
|
162
171
|
const element = {
|
|
163
172
|
type: "Webiny/Element",
|
package/ElementFactory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["generateElementId","DocumentOperations","ComponentManifestToAstConverter","ComponentInputTraverser","defaultStyles","display","flexDirection","withDefaultStyles","styles","defaultOperations","addElement","element","AddElement","addToParent","index","AddToParent","setInputBinding","elementId","bindingPath","binding","SetGlobalInputBinding","setStyleBinding","SetGlobalStyleBinding","ElementFactory","constructor","components","createElementFromComponent","componentName","parentId","slot","bindings","componentManifest","inputsAst","createElement","documentOps","push","generateOperations","inputs","defaults","overrides","operations","ops","generateOperationsFromBindings","id","ignoreDefaultValues","breakpoint","Object","entries","SetInputBindingOverride","SetStyleBindingOverride","inputData","traverser","traverse","node","path","value","isCreateElement","action","isList","list","isObject","type","factory","newElement","params","component","extractIndex","newElementId","static","translatable","input","undefined","defaultValue","key","getComponentManifest","manifest","Error","match","parseInt","parent","name","convert"],"sources":["ElementFactory.ts"],"sourcesContent":["import { generateElementId } from \"./generateElementId.js\";\nimport type {\n DocumentElement,\n ComponentManifest,\n InputValueBinding,\n StyleValueBinding,\n CssProperties\n} from \"~/types.js\";\nimport { type IDocumentOperation, DocumentOperations } from \"./documentOperations/index.js\";\nimport {\n ComponentManifestToAstConverter,\n type InputAstNode\n} from \"./ComponentManifestToAstConverter.js\";\nimport { ComponentInputTraverser } from \"./ComponentInputTraverser.js\";\n\nconst defaultStyles = {\n display: \"flex\",\n flexDirection: \"column\"\n};\n\nconst withDefaultStyles = (styles: CssProperties) => {\n return { ...defaultStyles, ...styles };\n};\n\nexport interface ElementFactoryCreateElementParams {\n componentName: string;\n parentId: string;\n slot: string;\n index: number;\n bindings?: {\n inputs?: Record<string, any>;\n styles?: Record<string, any>;\n overrides?: {\n [breakpoint: string]: {\n inputs?: Record<string, any>;\n styles?: Record<string, any>;\n };\n };\n };\n}\n\ninterface GenerateOperationsParams {\n element: DocumentElement;\n inputsAst: InputAstNode[];\n operations: ElementFactoryOperations;\n bindings: {\n inputs: Record<string, any>;\n styles: Record<string, any>;\n overrides: {\n [breakpoint: string]: {\n inputs?: Record<string, any>;\n styles?: Record<string, any>;\n };\n };\n };\n}\n\ninterface GenerateOperationsFromBindingsParams {\n elementId: string;\n inputsAst: InputAstNode[];\n bindings: {\n inputs: Record<string, any>;\n styles: Record<string, any>;\n };\n operations: ElementFactoryOperations;\n ignoreDefaultValues: boolean;\n}\n\ntype ElementFactoryOperations = {\n addElement: (element: DocumentElement) => IDocumentOperation;\n addToParent: (element: DocumentElement, index: number) => IDocumentOperation;\n setInputBinding: (\n elementId: string,\n bindingPath: string,\n binding: InputValueBinding\n ) => IDocumentOperation;\n setStyleBinding: (\n elementId: string,\n bindingPath: string,\n binding: StyleValueBinding\n ) => IDocumentOperation;\n};\n\nconst defaultOperations: ElementFactoryOperations = {\n addElement: (element: DocumentElement) => {\n return new DocumentOperations.AddElement(element);\n },\n addToParent: (element: DocumentElement, index: number) => {\n return new DocumentOperations.AddToParent(element, index);\n },\n setInputBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetGlobalInputBinding(elementId, bindingPath, binding);\n },\n setStyleBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetGlobalStyleBinding(elementId, bindingPath, binding);\n }\n};\n\nexport class ElementFactory {\n constructor(private components: Record<string, ComponentManifest>) {}\n\n public createElementFromComponent({\n componentName,\n parentId,\n slot,\n index,\n bindings\n }: ElementFactoryCreateElementParams) {\n const { element, componentManifest, inputsAst } = this.createElement(\n componentName,\n parentId,\n slot\n );\n\n const documentOps: IDocumentOperation[] = [\n defaultOperations.addElement(element),\n defaultOperations.addToParent(element, index)\n ];\n\n documentOps.push(\n ...this.generateOperations({\n element,\n inputsAst,\n bindings: {\n inputs: bindings?.inputs ?? componentManifest.defaults?.inputs ?? {},\n styles: withDefaultStyles(\n bindings?.styles ?? componentManifest.defaults?.styles ?? {}\n ),\n overrides: bindings?.overrides ?? {}\n },\n operations: defaultOperations\n })\n );\n\n return { element, operations: documentOps };\n }\n\n public generateOperations({\n element,\n inputsAst,\n bindings,\n operations\n }: GenerateOperationsParams): IDocumentOperation[] {\n const ops = this.generateOperationsFromBindings({\n elementId: element.id,\n inputsAst,\n bindings,\n operations,\n ignoreDefaultValues: false\n });\n\n if (bindings.overrides) {\n for (const [breakpoint, overrides] of Object.entries(bindings.overrides)) {\n ops.push(\n ...this.generateOperationsFromBindings({\n elementId: element.id,\n inputsAst,\n bindings: {\n inputs: overrides.inputs ?? {},\n styles: overrides.styles ?? {}\n },\n operations: {\n ...operations,\n setInputBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetInputBindingOverride(\n elementId,\n bindingPath,\n binding,\n breakpoint\n );\n },\n setStyleBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetStyleBindingOverride(\n elementId,\n bindingPath,\n binding,\n breakpoint\n );\n }\n },\n ignoreDefaultValues: true\n })\n );\n }\n }\n\n return ops;\n }\n\n private generateOperationsFromBindings({\n elementId,\n inputsAst,\n bindings,\n operations,\n ignoreDefaultValues\n }: GenerateOperationsFromBindingsParams): IDocumentOperation[] {\n const inputData = bindings.inputs;\n const traverser = new ComponentInputTraverser(inputsAst);\n\n const ops: IDocumentOperation[] = [];\n\n traverser.traverse(inputData, (node, path, value) => {\n const isCreateElement = value?.action === \"CreateElement\";\n const isList = node.list;\n const isObject = node.type === \"object\";\n\n if (isCreateElement) {\n const factory = new ElementFactory(this.components);\n const newElement = factory.createElementFromComponent({\n componentName: value.params.component,\n index: isList ? this.extractIndex(path) : 0,\n slot: path,\n parentId: elementId,\n bindings: value.params\n });\n\n const newElementId = newElement.element.id;\n\n ops.push(\n ...newElement.operations,\n operations.setInputBinding(elementId, path, {\n id: generateElementId(),\n static: node.list ? [newElementId] : newElementId,\n type: node.type,\n translatable: node.input.translatable,\n list: node.list\n })\n );\n } else if (isObject && isList) {\n return;\n } else {\n ops.push(\n operations.setInputBinding(elementId, path, {\n id: generateElementId(),\n static: ignoreDefaultValues\n ? undefined\n : (value ?? node.input.defaultValue),\n type: node.type,\n list: node.list,\n translatable: node.input.translatable\n })\n );\n }\n });\n\n // Process styles\n for (const key in bindings.styles) {\n ops.push(\n operations.setStyleBinding(elementId, key, {\n static: bindings.styles[key]\n })\n );\n }\n\n return ops;\n }\n\n private getComponentManifest(componentName: string): ComponentManifest {\n const manifest = this.components[componentName];\n if (!manifest) {\n throw new Error(`Component \"${componentName}\" not registered.`);\n }\n\n return manifest;\n }\n\n private extractIndex(path: string): number {\n const match = path.match(/\\/(\\d+)\\//);\n return match ? parseInt(match[1], 10) : 0;\n }\n\n private createElement(componentName: string, parentId: string, slot: string) {\n const element: DocumentElement = {\n type: \"Webiny/Element\",\n id: generateElementId(),\n parent: { id: parentId, slot },\n component: { name: componentName }\n };\n\n const componentManifest = this.getComponentManifest(componentName);\n const inputsAst = ComponentManifestToAstConverter.convert(componentManifest.inputs ?? []);\n\n return {\n element,\n inputsAst,\n componentManifest\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["generateElementId","DocumentOperations","ComponentManifestToAstConverter","ComponentInputTraverser","defaultStyles","display","flexDirection","withDefaultStyles","styles","defaultOperations","addElement","element","AddElement","addToParent","index","AddToParent","setInputBinding","elementId","bindingPath","binding","SetGlobalInputBinding","setStyleBinding","SetGlobalStyleBinding","ElementFactory","constructor","components","createElementFromComponent","componentName","parentId","slot","bindings","componentManifest","inputsAst","createElement","documentOps","push","generateOperations","inputs","defaults","overrides","operations","ops","generateOperationsFromBindings","id","ignoreDefaultValues","breakpoint","Object","entries","SetInputBindingOverride","SetStyleBindingOverride","inputData","traverser","traverse","node","path","value","isCreateElement","action","isList","list","isObject","type","factory","newElement","params","component","undefined","newElementId","translatable","input","static","defaultValue","key","getComponentManifest","manifest","Error","parent","name","convert"],"sources":["ElementFactory.ts"],"sourcesContent":["import { generateElementId } from \"./generateElementId.js\";\nimport type {\n DocumentElement,\n ComponentManifest,\n InputValueBinding,\n StyleValueBinding,\n CssProperties\n} from \"~/types.js\";\nimport { type IDocumentOperation, DocumentOperations } from \"./documentOperations/index.js\";\nimport {\n ComponentManifestToAstConverter,\n type InputAstNode\n} from \"./ComponentManifestToAstConverter.js\";\nimport { ComponentInputTraverser } from \"./ComponentInputTraverser.js\";\n\nconst defaultStyles = {\n display: \"flex\",\n flexDirection: \"column\"\n};\n\nconst withDefaultStyles = (styles: CssProperties) => {\n return { ...defaultStyles, ...styles };\n};\n\nexport interface ElementFactoryCreateElementParams {\n componentName: string;\n parentId: string;\n slot: string;\n index?: number;\n bindings?: {\n inputs?: Record<string, any>;\n styles?: Record<string, any>;\n overrides?: {\n [breakpoint: string]: {\n inputs?: Record<string, any>;\n styles?: Record<string, any>;\n };\n };\n };\n}\n\ninterface GenerateOperationsParams {\n element: DocumentElement;\n inputsAst: InputAstNode[];\n operations: ElementFactoryOperations;\n bindings: {\n inputs: Record<string, any>;\n styles: Record<string, any>;\n overrides: {\n [breakpoint: string]: {\n inputs?: Record<string, any>;\n styles?: Record<string, any>;\n };\n };\n };\n}\n\ninterface GenerateOperationsFromBindingsParams {\n elementId: string;\n inputsAst: InputAstNode[];\n bindings: {\n inputs: Record<string, any>;\n styles: Record<string, any>;\n };\n operations: ElementFactoryOperations;\n ignoreDefaultValues: boolean;\n}\n\ntype ElementFactoryOperations = {\n addElement: (element: DocumentElement) => IDocumentOperation;\n addToParent: (element: DocumentElement, index?: number) => IDocumentOperation;\n setInputBinding: (\n elementId: string,\n bindingPath: string,\n binding: InputValueBinding\n ) => IDocumentOperation;\n setStyleBinding: (\n elementId: string,\n bindingPath: string,\n binding: StyleValueBinding\n ) => IDocumentOperation;\n};\n\nconst defaultOperations: ElementFactoryOperations = {\n addElement: (element: DocumentElement) => {\n return new DocumentOperations.AddElement(element);\n },\n addToParent: (element: DocumentElement, index?: number) => {\n return new DocumentOperations.AddToParent(element, index);\n },\n setInputBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetGlobalInputBinding(elementId, bindingPath, binding);\n },\n setStyleBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetGlobalStyleBinding(elementId, bindingPath, binding);\n }\n};\n\nexport class ElementFactory {\n constructor(private components: Record<string, ComponentManifest>) {}\n\n public createElementFromComponent({\n componentName,\n parentId,\n slot,\n index,\n bindings\n }: ElementFactoryCreateElementParams) {\n const { element, componentManifest, inputsAst } = this.createElement(\n componentName,\n parentId,\n slot\n );\n\n const documentOps: IDocumentOperation[] = [\n defaultOperations.addElement(element),\n defaultOperations.addToParent(element, index)\n ];\n\n documentOps.push(\n ...this.generateOperations({\n element,\n inputsAst,\n bindings: {\n inputs: bindings?.inputs ?? componentManifest.defaults?.inputs ?? {},\n styles: withDefaultStyles(\n bindings?.styles ?? componentManifest.defaults?.styles ?? {}\n ),\n overrides: bindings?.overrides ?? {}\n },\n operations: defaultOperations\n })\n );\n\n return { element, operations: documentOps };\n }\n\n public generateOperations({\n element,\n inputsAst,\n bindings,\n operations\n }: GenerateOperationsParams): IDocumentOperation[] {\n const ops = this.generateOperationsFromBindings({\n elementId: element.id,\n inputsAst,\n bindings,\n operations,\n ignoreDefaultValues: false\n });\n\n if (bindings.overrides) {\n for (const [breakpoint, overrides] of Object.entries(bindings.overrides)) {\n ops.push(\n ...this.generateOperationsFromBindings({\n elementId: element.id,\n inputsAst,\n bindings: {\n inputs: overrides.inputs ?? {},\n styles: overrides.styles ?? {}\n },\n operations: {\n ...operations,\n setInputBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetInputBindingOverride(\n elementId,\n bindingPath,\n binding,\n breakpoint\n );\n },\n setStyleBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetStyleBindingOverride(\n elementId,\n bindingPath,\n binding,\n breakpoint\n );\n }\n },\n ignoreDefaultValues: true\n })\n );\n }\n }\n\n return ops;\n }\n\n private generateOperationsFromBindings({\n elementId,\n inputsAst,\n bindings,\n operations,\n ignoreDefaultValues\n }: GenerateOperationsFromBindingsParams): IDocumentOperation[] {\n const inputData = bindings.inputs;\n const traverser = new ComponentInputTraverser(inputsAst);\n\n const ops: IDocumentOperation[] = [];\n\n traverser.traverse(inputData, (node, path, value) => {\n const isCreateElement = value?.action === \"CreateElement\";\n const isList = node.list;\n const isObject = node.type === \"object\";\n\n if (isCreateElement) {\n const factory = new ElementFactory(this.components);\n const newElement = factory.createElementFromComponent({\n componentName: value.params.component,\n // undefined index = append to end of the slot array\n index: isList ? undefined : 0,\n slot: path,\n parentId: elementId,\n bindings: value.params\n });\n\n const newElementId = newElement.element.id;\n\n ops.push(...newElement.operations);\n\n if (isList) {\n // For list slots, AddToParent already manages the static array.\n // We only set metadata here.\n ops.push(\n operations.setInputBinding(elementId, path, {\n id: generateElementId(),\n type: node.type,\n translatable: node.input.translatable,\n list: node.list\n })\n );\n } else {\n ops.push(\n operations.setInputBinding(elementId, path, {\n id: generateElementId(),\n static: newElementId,\n type: node.type,\n translatable: node.input.translatable,\n list: node.list\n })\n );\n }\n } else if (isObject && isList) {\n return;\n } else {\n ops.push(\n operations.setInputBinding(elementId, path, {\n id: generateElementId(),\n static: ignoreDefaultValues\n ? undefined\n : (value ?? node.input.defaultValue),\n type: node.type,\n list: node.list,\n translatable: node.input.translatable\n })\n );\n }\n });\n\n // Process styles\n for (const key in bindings.styles) {\n ops.push(\n operations.setStyleBinding(elementId, key, {\n static: bindings.styles[key]\n })\n );\n }\n\n return ops;\n }\n\n private getComponentManifest(componentName: string): ComponentManifest {\n const manifest = this.components[componentName];\n if (!manifest) {\n throw new Error(`Component \"${componentName}\" not registered.`);\n }\n\n return manifest;\n }\n\n private createElement(componentName: string, parentId: string, slot: string) {\n const element: DocumentElement = {\n type: \"Webiny/Element\",\n id: generateElementId(),\n parent: { id: parentId, slot },\n component: { name: componentName }\n };\n\n const componentManifest = this.getComponentManifest(componentName);\n const inputsAst = ComponentManifestToAstConverter.convert(componentManifest.inputs ?? []);\n\n return {\n element,\n inputsAst,\n componentManifest\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|