@webiny/website-builder-sdk 0.0.0-unstable.e53eceafb5 → 0.0.0-unstable.e6f0dc8ca7
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/BindingsApi.d.ts +4 -4
- package/BindingsApi.js +3 -3
- package/BindingsApi.js.map +1 -1
- package/BindingsProcessor.d.ts +1 -1
- package/BindingsProcessor.js.map +1 -1
- package/BindingsProcessor.test.js +2 -1
- package/BindingsProcessor.test.js.map +1 -1
- package/BindingsResolver.d.ts +2 -2
- package/BindingsResolver.js +3 -6
- package/BindingsResolver.js.map +1 -1
- package/BindingsResolver.test.js +4 -3
- package/BindingsResolver.test.js.map +1 -1
- package/ComponentInputTraverser.d.ts +1 -1
- package/ComponentInputTraverser.js.map +1 -1
- package/ComponentManifestToAstConverter.d.ts +1 -1
- package/ComponentManifestToAstConverter.js.map +1 -1
- package/ComponentRegistry.js +30 -0
- package/ComponentRegistry.js.map +1 -1
- package/ComponentResolver.d.ts +2 -2
- package/ComponentResolver.js +3 -3
- package/ComponentResolver.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/ContentSdk.d.ts +13 -7
- package/ContentSdk.js +26 -10
- package/ContentSdk.js.map +1 -1
- package/DocumentStore.d.ts +3 -3
- package/DocumentStore.js +1 -1
- package/DocumentStore.js.map +1 -1
- package/DocumentStoreManager.d.ts +2 -2
- package/DocumentStoreManager.js +1 -1
- package/DocumentStoreManager.js.map +1 -1
- package/EditingSdk.d.ts +4 -4
- package/EditingSdk.js +12 -15
- package/EditingSdk.js.map +1 -1
- package/ElementFactory.d.ts +5 -6
- package/ElementFactory.js +25 -16
- 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/HashObject.js +14 -0
- package/HashObject.js.map +1 -1
- package/HotkeyManager.js +1 -1
- package/HotkeyManager.js.map +1 -1
- package/IBindingsUpdater.d.ts +2 -2
- package/IBindingsUpdater.js.map +1 -1
- package/IRedirects.d.ts +5 -0
- package/IRedirects.js +3 -0
- package/IRedirects.js.map +1 -0
- package/InheritanceProcessor.d.ts +4 -4
- package/InheritanceProcessor.js.map +1 -1
- package/InheritanceProcessor.test.js +2 -1
- package/InheritanceProcessor.test.js.map +1 -1
- package/InheritedValueResolver.d.ts +1 -1
- package/InheritedValueResolver.js.map +1 -1
- package/InputBindingsProcessor.d.ts +4 -4
- package/InputBindingsProcessor.js +29 -11
- package/InputBindingsProcessor.js.map +1 -1
- package/InputsBindingsProcessor.test.js +4 -2
- package/InputsBindingsProcessor.test.js.map +1 -1
- package/InputsUpdater.d.ts +5 -5
- package/InputsUpdater.js +2 -2
- package/InputsUpdater.js.map +1 -1
- package/LiveSdk.d.ts +2 -2
- package/LiveSdk.js +1 -1
- package/LiveSdk.js.map +1 -1
- package/Logger.d.ts +2 -1
- package/Logger.js +7 -4
- package/Logger.js.map +1 -1
- package/NullSdk.d.ts +5 -3
- package/NullSdk.js +10 -0
- package/NullSdk.js.map +1 -1
- package/PreviewDocument.js +1 -1
- package/PreviewDocument.js.map +1 -1
- package/PreviewSdk.d.ts +2 -2
- package/PreviewSdk.js +3 -3
- package/PreviewSdk.js.map +1 -1
- package/PreviewViewport.d.ts +1 -2
- package/PreviewViewport.js +1 -21
- package/PreviewViewport.js.map +1 -1
- package/README.md +10 -2
- package/StylesBindingsProcessor.d.ts +2 -2
- package/StylesBindingsProcessor.js +4 -4
- package/StylesBindingsProcessor.js.map +1 -1
- package/StylesUpdater.d.ts +4 -4
- package/StylesUpdater.js +2 -2
- package/StylesUpdater.js.map +1 -1
- package/Theme.d.ts +1 -1
- package/Theme.js +6 -11
- package/Theme.js.map +1 -1
- package/ViewportManager.d.ts +3 -1
- package/ViewportManager.js +8 -1
- package/ViewportManager.js.map +1 -1
- package/constants.d.ts +1 -0
- package/constants.js +2 -1
- package/constants.js.map +1 -1
- package/createElement.d.ts +1 -1
- package/createElement.js.map +1 -1
- package/createInput.d.ts +124 -16
- package/createInput.js +33 -1
- package/createInput.js.map +1 -1
- package/createTheme.d.ts +2 -1
- package/createTheme.js.map +1 -1
- package/dataProviders/ApiClient.d.ts +6 -1
- package/dataProviders/ApiClient.js +19 -8
- package/dataProviders/ApiClient.js.map +1 -1
- package/dataProviders/DefaultDataProvider.d.ts +4 -3
- package/dataProviders/DefaultDataProvider.js +32 -6
- package/dataProviders/DefaultDataProvider.js.map +1 -1
- package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -1
- package/dataProviders/GET_PAGE_BY_ID.js +2 -0
- package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
- package/dataProviders/GET_PAGE_BY_PATH.d.ts +1 -1
- package/dataProviders/GET_PAGE_BY_PATH.js +2 -0
- package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
- package/dataProviders/LIST_PUBLISHED_PAGES.d.ts +1 -1
- package/dataProviders/LIST_PUBLISHED_PAGES.js +15 -4
- package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
- package/dataProviders/NullDataProvider.d.ts +13 -4
- package/dataProviders/NullDataProvider.js +11 -1
- package/dataProviders/NullDataProvider.js.map +1 -1
- package/dataProviders/RedirectsProvider.d.ts +11 -0
- package/dataProviders/RedirectsProvider.js +32 -0
- package/dataProviders/RedirectsProvider.js.map +1 -0
- package/defaultBreakpoints.d.ts +1 -1
- package/defaultBreakpoints.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/AddElement.d.ts +1 -1
- package/documentOperations/AddElement.js.map +1 -1
- package/documentOperations/AddToParent.d.ts +3 -3
- package/documentOperations/AddToParent.js.map +1 -1
- package/documentOperations/RemoveElement.d.ts +1 -1
- package/documentOperations/RemoveElement.js +9 -0
- package/documentOperations/RemoveElement.js.map +1 -1
- package/documentOperations/SetGlobalInputBinding.d.ts +1 -1
- package/documentOperations/SetGlobalInputBinding.js.map +1 -1
- package/documentOperations/SetGlobalStyleBinding.d.ts +1 -1
- package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
- package/documentOperations/SetInputBindingOverride.d.ts +1 -1
- package/documentOperations/SetInputBindingOverride.js.map +1 -1
- package/documentOperations/SetStyleBindingOverride.d.ts +1 -1
- package/documentOperations/SetStyleBindingOverride.js.map +1 -1
- package/documentOperations/index.d.ts +8 -8
- package/documentOperations/index.js +7 -7
- package/documentOperations/index.js.map +1 -1
- package/findMatchingAstNode.d.ts +1 -1
- package/findMatchingAstNode.js.map +1 -1
- package/generateElementId.d.ts +1 -1
- package/generateElementId.js +0 -1
- package/generateElementId.js.map +1 -1
- package/index.d.ts +3 -3
- package/index.js +2 -3
- package/index.js.map +1 -1
- package/jsonPatch.d.ts +1 -1
- package/messenger/Messenger.js +6 -6
- package/messenger/Messenger.js.map +1 -1
- package/package.json +14 -20
- package/registerComponentGroup.d.ts +1 -1
- package/registerComponentGroup.js +1 -1
- package/registerComponentGroup.js.map +1 -1
- package/types/WebsiteBuilderTheme.d.ts +52 -42
- package/types/WebsiteBuilderTheme.js.map +1 -1
- package/types.d.ts +207 -20
- package/types.js.map +1 -1
- package/lexical/createDefaultLexicalTheme.d.ts +0 -2
- package/lexical/createDefaultLexicalTheme.js +0 -84
- package/lexical/createDefaultLexicalTheme.js.map +0 -1
- package/lexical/createLexicalTheme.d.ts +0 -2
- package/lexical/createLexicalTheme.js +0 -7
- package/lexical/createLexicalTheme.js.map +0 -1
- package/lexical/deepMerge.d.ts +0 -1
- package/lexical/deepMerge.js +0 -23
- package/lexical/deepMerge.js.map +0 -1
- package/types/LexicalEditorTheme.d.ts +0 -2
- package/types/LexicalEditorTheme.js +0 -3
- package/types/LexicalEditorTheme.js.map +0 -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":"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","ignoreList":[]}
|
package/ContentSdk.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { Component, IContentSdk, PublicPage, ResolvedComponent } from "./types";
|
|
1
|
+
import type { Component, IContentSdk, ListPagesOptions, ListPagesResult, PublicPage, PublicRedirect, ResolvedComponent } from "./types.js";
|
|
2
2
|
import { LiveSdk } from "./LiveSdk.js";
|
|
3
3
|
import { EditingSdk } from "./EditingSdk.js";
|
|
4
|
-
import type
|
|
4
|
+
import { type ResolveElementParams } from "./ComponentResolver.js";
|
|
5
5
|
import type { WebsiteBuilderThemeInput } from "./types/WebsiteBuilderTheme.js";
|
|
6
|
+
import type { IRedirects } from "./IRedirects.js";
|
|
6
7
|
export type ApiConfig = {
|
|
7
8
|
apiKey: string;
|
|
8
9
|
apiHost: string;
|
|
@@ -12,22 +13,27 @@ export type ContentSDKConfig = ApiConfig & {
|
|
|
12
13
|
preview?: boolean;
|
|
13
14
|
theme?: WebsiteBuilderThemeInput;
|
|
14
15
|
};
|
|
15
|
-
declare class InternalContentSdk implements IContentSdk {
|
|
16
|
+
declare class InternalContentSdk implements IContentSdk, IRedirects {
|
|
16
17
|
private activeSdk;
|
|
17
18
|
private editingSdk;
|
|
18
|
-
|
|
19
|
+
private redirectsProvider;
|
|
20
|
+
constructor(redirectsProvider: IRedirects, liveSdk: LiveSdk, editingSdk?: EditingSdk);
|
|
19
21
|
getEditingSdk(): EditingSdk | undefined;
|
|
20
22
|
getPage(path: string): Promise<PublicPage | null>;
|
|
21
|
-
listPages(): Promise<
|
|
23
|
+
listPages(options?: ListPagesOptions): Promise<ListPagesResult>;
|
|
24
|
+
getAllRedirects(): Promise<Map<string, PublicRedirect>>;
|
|
25
|
+
getRedirectByPath(path: string): Promise<PublicRedirect | undefined>;
|
|
22
26
|
}
|
|
23
|
-
export declare class ContentSdk implements IContentSdk {
|
|
27
|
+
export declare class ContentSdk implements IContentSdk, IRedirects {
|
|
24
28
|
protected sdk?: InternalContentSdk;
|
|
25
29
|
private isPreview;
|
|
26
30
|
private lastConfig;
|
|
27
31
|
init(config: ContentSDKConfig, afterInit?: () => void): void;
|
|
28
32
|
getEditingSdk(): EditingSdk | undefined;
|
|
29
33
|
getPage(path: string): Promise<PublicPage | null>;
|
|
30
|
-
listPages(): Promise<
|
|
34
|
+
listPages(options?: ListPagesOptions): Promise<ListPagesResult>;
|
|
35
|
+
getAllRedirects(): Promise<Map<string, PublicRedirect>>;
|
|
36
|
+
getRedirectByPath(path: string): Promise<PublicRedirect | undefined>;
|
|
31
37
|
registerComponent(blueprint: Component): void;
|
|
32
38
|
resolveElement(params: ResolveElementParams): ResolvedComponent[] | null;
|
|
33
39
|
isEditing(): boolean;
|
package/ContentSdk.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { environment } from "./Environment.js";
|
|
2
2
|
import { LiveSdk } from "./LiveSdk.js";
|
|
3
3
|
import { EditingSdk } from "./EditingSdk.js";
|
|
4
|
-
import { ComponentResolver } from "./ComponentResolver";
|
|
4
|
+
import { ComponentResolver } from "./ComponentResolver.js";
|
|
5
5
|
import { PreviewSdk } from "./PreviewSdk.js";
|
|
6
|
-
import { componentRegistry } from "./ComponentRegistry";
|
|
7
|
-
import { ApiClient } from "./dataProviders/ApiClient";
|
|
8
|
-
import { DefaultDataProvider } from "./dataProviders/DefaultDataProvider";
|
|
6
|
+
import { componentRegistry } from "./ComponentRegistry.js";
|
|
7
|
+
import { ApiClient } from "./dataProviders/ApiClient.js";
|
|
8
|
+
import { DefaultDataProvider } from "./dataProviders/DefaultDataProvider.js";
|
|
9
9
|
import { Theme } from "./Theme.js";
|
|
10
10
|
import { viewportManager } from "./ViewportManager.js";
|
|
11
|
+
import { RedirectsProvider } from "./dataProviders/RedirectsProvider.js";
|
|
11
12
|
class InternalContentSdk {
|
|
12
|
-
constructor(liveSdk, editingSdk) {
|
|
13
|
+
constructor(redirectsProvider, liveSdk, editingSdk) {
|
|
14
|
+
this.redirectsProvider = redirectsProvider;
|
|
13
15
|
this.activeSdk = editingSdk ?? liveSdk;
|
|
14
16
|
this.editingSdk = editingSdk;
|
|
15
17
|
}
|
|
@@ -19,8 +21,14 @@ class InternalContentSdk {
|
|
|
19
21
|
async getPage(path) {
|
|
20
22
|
return this.activeSdk.getPage(path);
|
|
21
23
|
}
|
|
22
|
-
listPages() {
|
|
23
|
-
return this.activeSdk.listPages();
|
|
24
|
+
listPages(options) {
|
|
25
|
+
return this.activeSdk.listPages(options);
|
|
26
|
+
}
|
|
27
|
+
getAllRedirects() {
|
|
28
|
+
return this.redirectsProvider.getAllRedirects();
|
|
29
|
+
}
|
|
30
|
+
getRedirectByPath(path) {
|
|
31
|
+
return this.redirectsProvider.getRedirectByPath(path);
|
|
24
32
|
}
|
|
25
33
|
}
|
|
26
34
|
export class ContentSdk {
|
|
@@ -48,7 +56,7 @@ export class ContentSdk {
|
|
|
48
56
|
if (environment.isEditing()) {
|
|
49
57
|
editingSdk = new EditingSdk(liveSdk, theme);
|
|
50
58
|
}
|
|
51
|
-
this.sdk = new InternalContentSdk(liveSdk, editingSdk);
|
|
59
|
+
this.sdk = new InternalContentSdk(new RedirectsProvider(apiClient), liveSdk, editingSdk);
|
|
52
60
|
if (typeof afterInit === "function") {
|
|
53
61
|
afterInit();
|
|
54
62
|
}
|
|
@@ -61,9 +69,17 @@ export class ContentSdk {
|
|
|
61
69
|
this.assertInitialized();
|
|
62
70
|
return this.sdk.getPage(path);
|
|
63
71
|
}
|
|
64
|
-
listPages() {
|
|
72
|
+
listPages(options) {
|
|
73
|
+
this.assertInitialized();
|
|
74
|
+
return this.sdk.listPages(options);
|
|
75
|
+
}
|
|
76
|
+
async getAllRedirects() {
|
|
77
|
+
this.assertInitialized();
|
|
78
|
+
return this.sdk.getAllRedirects();
|
|
79
|
+
}
|
|
80
|
+
getRedirectByPath(path) {
|
|
65
81
|
this.assertInitialized();
|
|
66
|
-
return this.sdk.
|
|
82
|
+
return this.sdk.getRedirectByPath(path);
|
|
67
83
|
}
|
|
68
84
|
registerComponent(blueprint) {
|
|
69
85
|
this.assertInitialized();
|
package/ContentSdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["environment","LiveSdk","EditingSdk","ComponentResolver","PreviewSdk","componentRegistry","ApiClient","DefaultDataProvider","Theme","viewportManager","InternalContentSdk","constructor","liveSdk","editingSdk","activeSdk","getEditingSdk","getPage","path","listPages","ContentSdk","isPreview","init","config","afterInit","configHash","JSON","stringify","lastConfig","apiClient","apiHost","apiKey","apiTenant","dataProvider","preview","isEditing","theme","from","isClient","setBreakpoints","breakpoints","sdk","assertInitialized","registerComponent","blueprint","register","resolveElement","params","resolve","isPreviewing","Error","contentSdk"],"sources":["ContentSdk.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"names":["environment","LiveSdk","EditingSdk","ComponentResolver","PreviewSdk","componentRegistry","ApiClient","DefaultDataProvider","Theme","viewportManager","RedirectsProvider","InternalContentSdk","constructor","redirectsProvider","liveSdk","editingSdk","activeSdk","getEditingSdk","getPage","path","listPages","options","getAllRedirects","getRedirectByPath","ContentSdk","isPreview","init","config","afterInit","configHash","JSON","stringify","lastConfig","apiClient","apiHost","apiKey","apiTenant","dataProvider","preview","isEditing","theme","from","isClient","setBreakpoints","breakpoints","sdk","assertInitialized","registerComponent","blueprint","register","resolveElement","params","resolve","isPreviewing","Error","contentSdk"],"sources":["ContentSdk.ts"],"sourcesContent":["import type {\n Component,\n IContentSdk,\n ListPagesOptions,\n ListPagesResult,\n PublicPage,\n PublicRedirect,\n ResolvedComponent\n} from \"~/types.js\";\nimport { environment } from \"./Environment.js\";\nimport { LiveSdk } from \"./LiveSdk.js\";\nimport { EditingSdk } from \"./EditingSdk.js\";\nimport { ComponentResolver, type ResolveElementParams } from \"~/ComponentResolver.js\";\nimport { PreviewSdk } from \"./PreviewSdk.js\";\nimport { componentRegistry } from \"~/ComponentRegistry.js\";\nimport { ApiClient } from \"~/dataProviders/ApiClient.js\";\nimport { DefaultDataProvider } from \"~/dataProviders/DefaultDataProvider.js\";\nimport type { WebsiteBuilderThemeInput } from \"./types/WebsiteBuilderTheme.js\";\nimport { Theme } from \"./Theme.js\";\nimport { viewportManager } from \"./ViewportManager.js\";\nimport type { IRedirects } from \"~/IRedirects.js\";\nimport { RedirectsProvider } from \"~/dataProviders/RedirectsProvider.js\";\n\nexport type ApiConfig = {\n apiKey: string;\n apiHost: string;\n apiTenant: string;\n};\n\nexport type ContentSDKConfig = ApiConfig & {\n preview?: boolean;\n theme?: WebsiteBuilderThemeInput;\n};\n\nclass InternalContentSdk implements IContentSdk, IRedirects {\n private activeSdk: IContentSdk;\n private editingSdk: EditingSdk | undefined;\n private redirectsProvider: IRedirects;\n\n constructor(redirectsProvider: IRedirects, liveSdk: LiveSdk, editingSdk?: EditingSdk) {\n this.redirectsProvider = redirectsProvider;\n this.activeSdk = editingSdk ?? liveSdk;\n this.editingSdk = editingSdk;\n }\n\n getEditingSdk() {\n return this.editingSdk;\n }\n\n async getPage(path: string): Promise<PublicPage | null> {\n return this.activeSdk.getPage(path);\n }\n\n listPages(options?: ListPagesOptions): Promise<ListPagesResult> {\n return this.activeSdk.listPages(options);\n }\n\n getAllRedirects(): Promise<Map<string, PublicRedirect>> {\n return this.redirectsProvider.getAllRedirects();\n }\n\n getRedirectByPath(path: string): Promise<PublicRedirect | undefined> {\n return this.redirectsProvider.getRedirectByPath(path);\n }\n}\n\nexport class ContentSdk implements IContentSdk, IRedirects {\n protected sdk?: InternalContentSdk;\n private isPreview = false;\n private lastConfig: any;\n\n public init(config: ContentSDKConfig, afterInit?: () => void): void {\n const configHash = JSON.stringify(config);\n if (this.lastConfig && this.lastConfig === configHash) {\n return;\n }\n\n this.lastConfig = configHash;\n const apiClient = new ApiClient(config.apiHost, config.apiKey, config.apiTenant);\n\n const dataProvider = new DefaultDataProvider({ apiClient });\n\n let liveSdk: IContentSdk = new LiveSdk(dataProvider);\n\n if (config.preview && !environment.isEditing()) {\n this.isPreview = true;\n liveSdk = new PreviewSdk(dataProvider, liveSdk);\n }\n\n const theme = Theme.from(config.theme ?? {});\n\n if (environment.isClient()) {\n viewportManager.setBreakpoints(theme.breakpoints);\n }\n\n let editingSdk;\n if (environment.isEditing()) {\n editingSdk = new EditingSdk(liveSdk, theme);\n }\n\n this.sdk = new InternalContentSdk(\n new RedirectsProvider(apiClient),\n liveSdk as LiveSdk,\n editingSdk\n );\n\n if (typeof afterInit === \"function\") {\n afterInit();\n }\n }\n\n public getEditingSdk() {\n this.assertInitialized();\n return this.sdk.getEditingSdk();\n }\n\n public getPage(path: string) {\n this.assertInitialized();\n return this.sdk.getPage(path);\n }\n\n public listPages(options?: ListPagesOptions) {\n this.assertInitialized();\n return this.sdk.listPages(options);\n }\n\n public async getAllRedirects() {\n this.assertInitialized();\n return this.sdk.getAllRedirects();\n }\n\n getRedirectByPath(path: string): Promise<PublicRedirect | undefined> {\n this.assertInitialized();\n return this.sdk.getRedirectByPath(path);\n }\n\n registerComponent(blueprint: Component): void {\n this.assertInitialized();\n componentRegistry.register(blueprint);\n }\n\n resolveElement(params: ResolveElementParams): ResolvedComponent[] | null {\n this.assertInitialized();\n return new ComponentResolver(componentRegistry).resolve(params);\n }\n\n isEditing() {\n return environment.isEditing();\n }\n\n isPreviewing() {\n return this.isPreview;\n }\n\n private assertInitialized(): asserts this is this & {\n sdk: IContentSdk;\n } {\n if (!this.sdk) {\n throw new Error(`ContentSdk has not been initialized!`);\n }\n }\n}\n\nexport const contentSdk = new ContentSdk();\n"],"mappings":"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","ignoreList":[]}
|
package/DocumentStore.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type JsonPatchOperation } from "./jsonPatch";
|
|
2
|
-
import type { Document } from "./types";
|
|
1
|
+
import { type JsonPatchOperation } from "./jsonPatch.js";
|
|
2
|
+
import type { Document } from "./types.js";
|
|
3
3
|
export declare class DocumentStore<TDocument extends Document = Document> {
|
|
4
4
|
private document;
|
|
5
5
|
private documentReady;
|
|
@@ -8,7 +8,7 @@ export declare class DocumentStore<TDocument extends Document = Document> {
|
|
|
8
8
|
setDocument(doc: TDocument): void;
|
|
9
9
|
updateDocument(cb: (document: TDocument) => void): void;
|
|
10
10
|
getDocument(): TDocument | null;
|
|
11
|
-
getElement(id: string): import("
|
|
11
|
+
getElement(id: string): import("~/types.js").DocumentElement | null;
|
|
12
12
|
updateElement(id: string, patch: Partial<any>): void;
|
|
13
13
|
applyPatch(patch: JsonPatchOperation[]): void;
|
|
14
14
|
waitForDocument(): Promise<TDocument>;
|
package/DocumentStore.js
CHANGED
package/DocumentStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["jsonPatch","makeAutoObservable","runInAction","observable","DocumentStore","document","documentReady","readyResolvers","constructor","setDocument","doc","Object","assign","forEach","fn","updateDocument","cb","getDocument","getElement","id","elements","updateElement","patch","current","applyPatch","waitForDocument","Promise","resolve","push"],"sources":["DocumentStore.ts"],"sourcesContent":["import { jsonPatch, type JsonPatchOperation } from \"~/jsonPatch\";\nimport type { Document } from \"~/types\";\nimport { makeAutoObservable, runInAction, observable } from \"mobx\";\n\nexport class DocumentStore<TDocument extends Document = Document> {\n private document: TDocument | null = null;\n private documentReady = false;\n private readyResolvers: (() => void)[] = [];\n\n constructor() {\n makeAutoObservable(this);\n }\n\n setDocument(doc: TDocument) {\n runInAction(() => {\n if (this.document) {\n Object.assign(this.document, doc);\n } else {\n this.document = observable(doc);\n }\n this.documentReady = true;\n this.readyResolvers.forEach(fn => fn());\n this.readyResolvers = [];\n });\n }\n\n updateDocument(cb: (document: TDocument) => void) {\n runInAction(() => {\n if (this.document) {\n cb(this.document);\n }\n });\n }\n\n getDocument() {\n return this.document;\n }\n\n getElement(id: string) {\n if (!this.document) {\n return null;\n }\n\n return this.document.elements[id];\n }\n\n updateElement(id: string, patch: Partial<any>) {\n if (!this.document) {\n return;\n }\n\n const current = this.document.elements[id];\n if (current) {\n this.document.elements[id] = { ...current, ...patch };\n }\n }\n\n applyPatch(patch: JsonPatchOperation[]) {\n runInAction(() => {\n jsonPatch.applyPatch(this.document!, patch, false, true);\n });\n }\n\n async waitForDocument(): Promise<TDocument> {\n if (this.documentReady) {\n return this.document as TDocument;\n }\n\n return new Promise(resolve => {\n this.readyResolvers.push(() => {\n resolve(this.document as TDocument);\n });\n });\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,kBAAkB,EAAEC,WAAW,EAAEC,UAAU,QAAQ,MAAM;AAElE,OAAO,MAAMC,aAAa,CAAwC;EACtDC,QAAQ,GAAqB,IAAI;EACjCC,aAAa,GAAG,KAAK;EACrBC,cAAc,GAAmB,EAAE;EAE3CC,WAAWA,CAAA,EAAG;IACVP,kBAAkB,CAAC,IAAI,CAAC;EAC5B;EAEAQ,WAAWA,CAACC,GAAc,EAAE;IACxBR,WAAW,CAAC,MAAM;MACd,IAAI,IAAI,CAACG,QAAQ,EAAE;QACfM,MAAM,CAACC,MAAM,CAAC,IAAI,CAACP,QAAQ,EAAEK,GAAG,CAAC;MACrC,CAAC,MAAM;QACH,IAAI,CAACL,QAAQ,GAAGF,UAAU,CAACO,GAAG,CAAC;MACnC;MACA,IAAI,CAACJ,aAAa,GAAG,IAAI;MACzB,IAAI,CAACC,cAAc,CAACM,OAAO,CAACC,EAAE,IAAIA,EAAE,CAAC,CAAC,CAAC;MACvC,IAAI,CAACP,cAAc,GAAG,EAAE;IAC5B,CAAC,CAAC;EACN;EAEAQ,cAAcA,CAACC,EAAiC,EAAE;IAC9Cd,WAAW,CAAC,MAAM;MACd,IAAI,IAAI,CAACG,QAAQ,EAAE;QACfW,EAAE,CAAC,IAAI,CAACX,QAAQ,CAAC;MACrB;IACJ,CAAC,CAAC;EACN;EAEAY,WAAWA,CAAA,EAAG;IACV,OAAO,IAAI,CAACZ,QAAQ;EACxB;EAEAa,UAAUA,CAACC,EAAU,EAAE;IACnB,IAAI,CAAC,IAAI,CAACd,QAAQ,EAAE;MAChB,OAAO,IAAI;IACf;IAEA,OAAO,IAAI,CAACA,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC;EACrC;EAEAE,aAAaA,CAACF,EAAU,EAAEG,KAAmB,EAAE;IAC3C,IAAI,CAAC,IAAI,CAACjB,QAAQ,EAAE;MAChB;IACJ;IAEA,MAAMkB,OAAO,GAAG,IAAI,CAAClB,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC;IAC1C,IAAII,OAAO,EAAE;MACT,IAAI,CAAClB,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC,GAAG;QAAE,GAAGI,OAAO;QAAE,GAAGD;MAAM,CAAC;IACzD;EACJ;EAEAE,UAAUA,CAACF,KAA2B,EAAE;IACpCpB,WAAW,CAAC,MAAM;MACdF,SAAS,CAACwB,UAAU,CAAC,IAAI,CAACnB,QAAQ,EAAGiB,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;IAC5D,CAAC,CAAC;EACN;EAEA,MAAMG,eAAeA,CAAA,EAAuB;IACxC,IAAI,IAAI,CAACnB,aAAa,EAAE;MACpB,OAAO,IAAI,CAACD,QAAQ;IACxB;IAEA,OAAO,IAAIqB,OAAO,CAACC,OAAO,IAAI;MAC1B,IAAI,CAACpB,cAAc,CAACqB,IAAI,CAAC,MAAM;QAC3BD,OAAO,CAAC,IAAI,CAACtB,QAAqB,CAAC;MACvC,CAAC,CAAC;IACN,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["jsonPatch","makeAutoObservable","runInAction","observable","DocumentStore","document","documentReady","readyResolvers","constructor","setDocument","doc","Object","assign","forEach","fn","updateDocument","cb","getDocument","getElement","id","elements","updateElement","patch","current","applyPatch","waitForDocument","Promise","resolve","push"],"sources":["DocumentStore.ts"],"sourcesContent":["import { jsonPatch, type JsonPatchOperation } from \"~/jsonPatch.js\";\nimport type { Document } from \"~/types.js\";\nimport { makeAutoObservable, runInAction, observable } from \"mobx\";\n\nexport class DocumentStore<TDocument extends Document = Document> {\n private document: TDocument | null = null;\n private documentReady = false;\n private readyResolvers: (() => void)[] = [];\n\n constructor() {\n makeAutoObservable(this);\n }\n\n setDocument(doc: TDocument) {\n runInAction(() => {\n if (this.document) {\n Object.assign(this.document, doc);\n } else {\n this.document = observable(doc);\n }\n this.documentReady = true;\n this.readyResolvers.forEach(fn => fn());\n this.readyResolvers = [];\n });\n }\n\n updateDocument(cb: (document: TDocument) => void) {\n runInAction(() => {\n if (this.document) {\n cb(this.document);\n }\n });\n }\n\n getDocument() {\n return this.document;\n }\n\n getElement(id: string) {\n if (!this.document) {\n return null;\n }\n\n return this.document.elements[id];\n }\n\n updateElement(id: string, patch: Partial<any>) {\n if (!this.document) {\n return;\n }\n\n const current = this.document.elements[id];\n if (current) {\n this.document.elements[id] = { ...current, ...patch };\n }\n }\n\n applyPatch(patch: JsonPatchOperation[]) {\n runInAction(() => {\n jsonPatch.applyPatch(this.document!, patch, false, true);\n });\n }\n\n async waitForDocument(): Promise<TDocument> {\n if (this.documentReady) {\n return this.document as TDocument;\n }\n\n return new Promise(resolve => {\n this.readyResolvers.push(() => {\n resolve(this.document as TDocument);\n });\n });\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,kBAAkB,EAAEC,WAAW,EAAEC,UAAU,QAAQ,MAAM;AAElE,OAAO,MAAMC,aAAa,CAAwC;EACtDC,QAAQ,GAAqB,IAAI;EACjCC,aAAa,GAAG,KAAK;EACrBC,cAAc,GAAmB,EAAE;EAE3CC,WAAWA,CAAA,EAAG;IACVP,kBAAkB,CAAC,IAAI,CAAC;EAC5B;EAEAQ,WAAWA,CAACC,GAAc,EAAE;IACxBR,WAAW,CAAC,MAAM;MACd,IAAI,IAAI,CAACG,QAAQ,EAAE;QACfM,MAAM,CAACC,MAAM,CAAC,IAAI,CAACP,QAAQ,EAAEK,GAAG,CAAC;MACrC,CAAC,MAAM;QACH,IAAI,CAACL,QAAQ,GAAGF,UAAU,CAACO,GAAG,CAAC;MACnC;MACA,IAAI,CAACJ,aAAa,GAAG,IAAI;MACzB,IAAI,CAACC,cAAc,CAACM,OAAO,CAACC,EAAE,IAAIA,EAAE,CAAC,CAAC,CAAC;MACvC,IAAI,CAACP,cAAc,GAAG,EAAE;IAC5B,CAAC,CAAC;EACN;EAEAQ,cAAcA,CAACC,EAAiC,EAAE;IAC9Cd,WAAW,CAAC,MAAM;MACd,IAAI,IAAI,CAACG,QAAQ,EAAE;QACfW,EAAE,CAAC,IAAI,CAACX,QAAQ,CAAC;MACrB;IACJ,CAAC,CAAC;EACN;EAEAY,WAAWA,CAAA,EAAG;IACV,OAAO,IAAI,CAACZ,QAAQ;EACxB;EAEAa,UAAUA,CAACC,EAAU,EAAE;IACnB,IAAI,CAAC,IAAI,CAACd,QAAQ,EAAE;MAChB,OAAO,IAAI;IACf;IAEA,OAAO,IAAI,CAACA,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC;EACrC;EAEAE,aAAaA,CAACF,EAAU,EAAEG,KAAmB,EAAE;IAC3C,IAAI,CAAC,IAAI,CAACjB,QAAQ,EAAE;MAChB;IACJ;IAEA,MAAMkB,OAAO,GAAG,IAAI,CAAClB,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC;IAC1C,IAAII,OAAO,EAAE;MACT,IAAI,CAAClB,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC,GAAG;QAAE,GAAGI,OAAO;QAAE,GAAGD;MAAM,CAAC;IACzD;EACJ;EAEAE,UAAUA,CAACF,KAA2B,EAAE;IACpCpB,WAAW,CAAC,MAAM;MACdF,SAAS,CAACwB,UAAU,CAAC,IAAI,CAACnB,QAAQ,EAAGiB,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;IAC5D,CAAC,CAAC;EACN;EAEA,MAAMG,eAAeA,CAAA,EAAuB;IACxC,IAAI,IAAI,CAACnB,aAAa,EAAE;MACpB,OAAO,IAAI,CAACD,QAAQ;IACxB;IAEA,OAAO,IAAIqB,OAAO,CAACC,OAAO,IAAI;MAC1B,IAAI,CAACpB,cAAc,CAACqB,IAAI,CAAC,MAAM;QAC3BD,OAAO,CAAC,IAAI,CAACtB,QAAqB,CAAC;MACvC,CAAC,CAAC;IACN,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Document } from "./types";
|
|
2
|
-
import { DocumentStore } from "./DocumentStore";
|
|
1
|
+
import type { Document } from "./types.js";
|
|
2
|
+
import { DocumentStore } from "./DocumentStore.js";
|
|
3
3
|
declare class DocumentStoreManager {
|
|
4
4
|
private stores;
|
|
5
5
|
getStores(): Map<string, DocumentStore<Document>>;
|
package/DocumentStoreManager.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DocumentStore","DocumentStoreManager","stores","Map","getStores","getStore","id","has","set","get","removeStore","delete","hasStore","documentStoreManager"],"sources":["DocumentStoreManager.ts"],"sourcesContent":["import type { Document } from \"./types\";\nimport { DocumentStore } from \"./DocumentStore\";\n\nclass DocumentStoreManager {\n private stores = new Map<string, DocumentStore>();\n\n getStores() {\n return this.stores;\n }\n\n getStore<TDocument extends Document>(id: string): DocumentStore<TDocument> {\n if (!this.stores.has(id)) {\n this.stores.set(id, new DocumentStore<TDocument>());\n }\n return this.stores.get(id)! as DocumentStore<TDocument>;\n }\n\n removeStore(id: string) {\n this.stores.delete(id);\n }\n\n hasStore(id: string): boolean {\n return this.stores.has(id);\n }\n}\n\nexport const documentStoreManager = new DocumentStoreManager();\n"],"mappings":"AACA,SAASA,aAAa;AAEtB,MAAMC,oBAAoB,CAAC;EACfC,MAAM,GAAG,IAAIC,GAAG,CAAwB,CAAC;EAEjDC,SAASA,CAAA,EAAG;IACR,OAAO,IAAI,CAACF,MAAM;EACtB;EAEAG,QAAQA,CAA6BC,EAAU,EAA4B;IACvE,IAAI,CAAC,IAAI,CAACJ,MAAM,CAACK,GAAG,CAACD,EAAE,CAAC,EAAE;MACtB,IAAI,CAACJ,MAAM,CAACM,GAAG,CAACF,EAAE,EAAE,IAAIN,aAAa,CAAY,CAAC,CAAC;IACvD;IACA,OAAO,IAAI,CAACE,MAAM,CAACO,GAAG,CAACH,EAAE,CAAC;EAC9B;EAEAI,WAAWA,CAACJ,EAAU,EAAE;IACpB,IAAI,CAACJ,MAAM,CAACS,MAAM,CAACL,EAAE,CAAC;EAC1B;EAEAM,QAAQA,CAACN,EAAU,EAAW;IAC1B,OAAO,IAAI,CAACJ,MAAM,CAACK,GAAG,CAACD,EAAE,CAAC;EAC9B;AACJ;AAEA,OAAO,MAAMO,oBAAoB,GAAG,IAAIZ,oBAAoB,CAAC,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["DocumentStore","DocumentStoreManager","stores","Map","getStores","getStore","id","has","set","get","removeStore","delete","hasStore","documentStoreManager"],"sources":["DocumentStoreManager.ts"],"sourcesContent":["import type { Document } from \"./types.js\";\nimport { DocumentStore } from \"./DocumentStore.js\";\n\nclass DocumentStoreManager {\n private stores = new Map<string, DocumentStore>();\n\n getStores() {\n return this.stores;\n }\n\n getStore<TDocument extends Document>(id: string): DocumentStore<TDocument> {\n if (!this.stores.has(id)) {\n this.stores.set(id, new DocumentStore<TDocument>());\n }\n return this.stores.get(id)! as DocumentStore<TDocument>;\n }\n\n removeStore(id: string) {\n this.stores.delete(id);\n }\n\n hasStore(id: string): boolean {\n return this.stores.has(id);\n }\n}\n\nexport const documentStoreManager = new DocumentStoreManager();\n"],"mappings":"AACA,SAASA,aAAa;AAEtB,MAAMC,oBAAoB,CAAC;EACfC,MAAM,GAAG,IAAIC,GAAG,CAAwB,CAAC;EAEjDC,SAASA,CAAA,EAAG;IACR,OAAO,IAAI,CAACF,MAAM;EACtB;EAEAG,QAAQA,CAA6BC,EAAU,EAA4B;IACvE,IAAI,CAAC,IAAI,CAACJ,MAAM,CAACK,GAAG,CAACD,EAAE,CAAC,EAAE;MACtB,IAAI,CAACJ,MAAM,CAACM,GAAG,CAACF,EAAE,EAAE,IAAIN,aAAa,CAAY,CAAC,CAAC;IACvD;IACA,OAAO,IAAI,CAACE,MAAM,CAACO,GAAG,CAACH,EAAE,CAAC;EAC9B;EAEAI,WAAWA,CAACJ,EAAU,EAAE;IACpB,IAAI,CAACJ,MAAM,CAACS,MAAM,CAACL,EAAE,CAAC;EAC1B;EAEAM,QAAQA,CAACN,EAAU,EAAW;IAC1B,OAAO,IAAI,CAACJ,MAAM,CAACK,GAAG,CAACD,EAAE,CAAC;EAC9B;AACJ;AAEA,OAAO,MAAMO,oBAAoB,GAAG,IAAIZ,oBAAoB,CAAC,CAAC","ignoreList":[]}
|
package/EditingSdk.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ComponentGroup, IContentSdk, PublicPage } from "./types.js";
|
|
2
|
-
import { Messenger } from "./messenger";
|
|
3
|
-
import type { WebsiteBuilderTheme } from "./types/WebsiteBuilderTheme";
|
|
1
|
+
import type { ComponentGroup, IContentSdk, ListPagesOptions, ListPagesResult, PublicPage } from "./types.js";
|
|
2
|
+
import { Messenger } from "./messenger/index.js";
|
|
3
|
+
import type { WebsiteBuilderTheme } from "./types/WebsiteBuilderTheme.js";
|
|
4
4
|
export declare class EditingSdk implements IContentSdk {
|
|
5
5
|
readonly messenger: Messenger;
|
|
6
6
|
private positionReportingEnabled;
|
|
@@ -11,7 +11,7 @@ export declare class EditingSdk implements IContentSdk {
|
|
|
11
11
|
private lastBoxesHash;
|
|
12
12
|
constructor(liveSdk: IContentSdk, theme: WebsiteBuilderTheme);
|
|
13
13
|
getPage(path: string): Promise<PublicPage | null>;
|
|
14
|
-
listPages(): Promise<
|
|
14
|
+
listPages(options?: ListPagesOptions): Promise<ListPagesResult>;
|
|
15
15
|
registerComponentGroup(group: ComponentGroup): void;
|
|
16
16
|
private getReferrerOrigin;
|
|
17
17
|
private setupListeners;
|
package/EditingSdk.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { Messenger, MessageOrigin } from "./messenger";
|
|
4
|
-
import { logger } from "./Logger";
|
|
5
|
-
import { PreviewViewport } from "./PreviewViewport";
|
|
6
|
-
import { viewportManager } from "./ViewportManager";
|
|
7
|
-
import { componentRegistry } from "./ComponentRegistry";
|
|
8
|
-
import { functionConverter } from "./FunctionConverter";
|
|
9
|
-
import { documentStoreManager } from "./DocumentStoreManager";
|
|
3
|
+
import { Messenger, MessageOrigin } from "./messenger/index.js";
|
|
4
|
+
import { logger } from "./Logger.js";
|
|
5
|
+
import { PreviewViewport } from "./PreviewViewport.js";
|
|
6
|
+
import { viewportManager } from "./ViewportManager.js";
|
|
7
|
+
import { componentRegistry } from "./ComponentRegistry.js";
|
|
8
|
+
import { functionConverter } from "./FunctionConverter.js";
|
|
9
|
+
import { documentStoreManager } from "./DocumentStoreManager.js";
|
|
10
10
|
import { PreviewDocument } from "./PreviewDocument.js";
|
|
11
|
-
import { hashObject } from "./HashObject";
|
|
11
|
+
import { hashObject } from "./HashObject.js";
|
|
12
12
|
export class EditingSdk {
|
|
13
13
|
positionReportingEnabled = false;
|
|
14
14
|
previewViewport = null;
|
|
@@ -42,8 +42,8 @@ export class EditingSdk {
|
|
|
42
42
|
await this.documentStore.waitForDocument();
|
|
43
43
|
return this.documentStore.getDocument();
|
|
44
44
|
}
|
|
45
|
-
async listPages() {
|
|
46
|
-
return this.liveSdk.listPages();
|
|
45
|
+
async listPages(options) {
|
|
46
|
+
return this.liveSdk.listPages(options);
|
|
47
47
|
}
|
|
48
48
|
registerComponentGroup(group) {
|
|
49
49
|
this.messenger.send("preview.componentGroup.register", {
|
|
@@ -76,9 +76,6 @@ export class EditingSdk {
|
|
|
76
76
|
this.messenger.on("document.patch", patch => {
|
|
77
77
|
this.documentStore.applyPatch(patch);
|
|
78
78
|
});
|
|
79
|
-
this.messenger.on("preview.scroll", data => {
|
|
80
|
-
window.scrollBy(data.deltaX, data.deltaY);
|
|
81
|
-
});
|
|
82
79
|
}
|
|
83
80
|
initPositionReporting() {
|
|
84
81
|
if (this.positionReportingEnabled) {
|
|
@@ -111,7 +108,7 @@ export class EditingSdk {
|
|
|
111
108
|
logger.warn("No messenger or preview viewport. Skipping position reporting.");
|
|
112
109
|
return;
|
|
113
110
|
}
|
|
114
|
-
const newBoxes = this.previewViewport.
|
|
111
|
+
const newBoxes = this.previewViewport.getBoxes();
|
|
115
112
|
const hash = hashObject.hash(newBoxes);
|
|
116
113
|
if (hash === this.lastBoxesHash) {
|
|
117
114
|
return;
|
|
@@ -119,7 +116,7 @@ export class EditingSdk {
|
|
|
119
116
|
this.lastBoxesHash = hash;
|
|
120
117
|
// Send positions to the editor
|
|
121
118
|
this.messenger.send("preview.viewport", {
|
|
122
|
-
boxes: this.previewViewport.
|
|
119
|
+
boxes: this.previewViewport.getBoxes(),
|
|
123
120
|
viewport: this.previewViewport.getViewport()
|
|
124
121
|
});
|
|
125
122
|
}
|