@webiny/website-builder-sdk 0.0.0-unstable.6f45466a1d → 0.0.0-unstable.7be00a75a9

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.
Files changed (175) hide show
  1. package/BindingsApi.js +29 -36
  2. package/BindingsApi.js.map +1 -1
  3. package/BindingsProcessor.js +34 -43
  4. package/BindingsProcessor.js.map +1 -1
  5. package/BindingsProcessor.test.js +82 -78
  6. package/BindingsProcessor.test.js.map +1 -1
  7. package/BindingsResolver.js +92 -122
  8. package/BindingsResolver.js.map +1 -1
  9. package/BindingsResolver.test.js +399 -363
  10. package/BindingsResolver.test.js.map +1 -1
  11. package/ComponentInputTraverser.js +28 -49
  12. package/ComponentInputTraverser.js.map +1 -1
  13. package/ComponentManifestToAstConverter.js +20 -21
  14. package/ComponentManifestToAstConverter.js.map +1 -1
  15. package/ComponentRegistry.js +33 -22
  16. package/ComponentRegistry.js.map +1 -1
  17. package/ComponentResolver.js +25 -29
  18. package/ComponentResolver.js.map +1 -1
  19. package/ConstraintEvaluator.d.ts +36 -0
  20. package/ConstraintEvaluator.js +288 -0
  21. package/ConstraintEvaluator.js.map +1 -0
  22. package/ConstraintEvaluator.test.d.ts +1 -0
  23. package/ConstraintEvaluator.test.js +1634 -0
  24. package/ConstraintEvaluator.test.js.map +1 -0
  25. package/ContentSdk.d.ts +3 -3
  26. package/ContentSdk.js +83 -90
  27. package/ContentSdk.js.map +1 -1
  28. package/DocumentStore.js +47 -59
  29. package/DocumentStore.js.map +1 -1
  30. package/DocumentStoreManager.js +17 -16
  31. package/DocumentStoreManager.js.map +1 -1
  32. package/EditingSdk.d.ts +2 -2
  33. package/EditingSdk.js +87 -121
  34. package/EditingSdk.js.map +1 -1
  35. package/ElementFactory.d.ts +2 -3
  36. package/ElementFactory.js +125 -164
  37. package/ElementFactory.js.map +1 -1
  38. package/ElementFactory.test.d.ts +1 -0
  39. package/ElementFactory.test.js +251 -0
  40. package/ElementFactory.test.js.map +1 -0
  41. package/Environment.js +18 -19
  42. package/Environment.js.map +1 -1
  43. package/FunctionConverter.js +8 -7
  44. package/FunctionConverter.js.map +1 -1
  45. package/HashObject.js +11 -12
  46. package/HashObject.js.map +1 -1
  47. package/HotkeyManager.js +41 -48
  48. package/HotkeyManager.js.map +1 -1
  49. package/IBindingsUpdater.js +0 -3
  50. package/IRedirects.js +0 -3
  51. package/InheritanceProcessor.js +99 -139
  52. package/InheritanceProcessor.js.map +1 -1
  53. package/InheritanceProcessor.test.js +178 -179
  54. package/InheritanceProcessor.test.js.map +1 -1
  55. package/InheritedValueResolver.js +15 -20
  56. package/InheritedValueResolver.js.map +1 -1
  57. package/InputBindingsProcessor.js +187 -289
  58. package/InputBindingsProcessor.js.map +1 -1
  59. package/InputsBindingsProcessor.test.js +334 -314
  60. package/InputsBindingsProcessor.test.js.map +1 -1
  61. package/InputsUpdater.d.ts +1 -1
  62. package/InputsUpdater.js +23 -26
  63. package/InputsUpdater.js.map +1 -1
  64. package/LiveSdk.d.ts +2 -2
  65. package/LiveSdk.js +12 -13
  66. package/LiveSdk.js.map +1 -1
  67. package/Logger.js +9 -8
  68. package/Logger.js.map +1 -1
  69. package/MouseTracker.js +77 -83
  70. package/MouseTracker.js.map +1 -1
  71. package/NullSdk.d.ts +4 -3
  72. package/NullSdk.js +22 -14
  73. package/NullSdk.js.map +1 -1
  74. package/PreviewDocument.js +27 -30
  75. package/PreviewDocument.js.map +1 -1
  76. package/PreviewSdk.d.ts +2 -2
  77. package/PreviewSdk.js +16 -17
  78. package/PreviewSdk.js.map +1 -1
  79. package/PreviewViewport.js +51 -63
  80. package/PreviewViewport.js.map +1 -1
  81. package/ResizeObserver.js +24 -31
  82. package/ResizeObserver.js.map +1 -1
  83. package/StylesBindingsProcessor.js +40 -79
  84. package/StylesBindingsProcessor.js.map +1 -1
  85. package/StylesUpdater.d.ts +1 -1
  86. package/StylesUpdater.js +20 -25
  87. package/StylesUpdater.js.map +1 -1
  88. package/Theme.js +29 -25
  89. package/Theme.js.map +1 -1
  90. package/ViewportManager.js +89 -101
  91. package/ViewportManager.js.map +1 -1
  92. package/constants.d.ts +1 -0
  93. package/constants.js +7 -5
  94. package/constants.js.map +1 -1
  95. package/createElement.js +5 -6
  96. package/createElement.js.map +1 -1
  97. package/createInput.js +85 -143
  98. package/createInput.js.map +1 -1
  99. package/createTheme.js +2 -3
  100. package/createTheme.js.map +1 -1
  101. package/dataProviders/ApiClient.js +40 -49
  102. package/dataProviders/ApiClient.js.map +1 -1
  103. package/dataProviders/DefaultDataProvider.d.ts +2 -2
  104. package/dataProviders/DefaultDataProvider.js +55 -44
  105. package/dataProviders/DefaultDataProvider.js.map +1 -1
  106. package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -1
  107. package/dataProviders/GET_PAGE_BY_ID.js +3 -1
  108. package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
  109. package/dataProviders/GET_PAGE_BY_PATH.d.ts +1 -1
  110. package/dataProviders/GET_PAGE_BY_PATH.js +3 -1
  111. package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
  112. package/dataProviders/LIST_PUBLISHED_PAGES.d.ts +1 -1
  113. package/dataProviders/LIST_PUBLISHED_PAGES.js +16 -5
  114. package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
  115. package/dataProviders/NullDataProvider.d.ts +12 -4
  116. package/dataProviders/NullDataProvider.js +21 -13
  117. package/dataProviders/NullDataProvider.js.map +1 -1
  118. package/dataProviders/RedirectsProvider.js +24 -27
  119. package/dataProviders/RedirectsProvider.js.map +1 -1
  120. package/defaultBreakpoints.js +23 -22
  121. package/defaultBreakpoints.js.map +1 -1
  122. package/documentOperations/$addElementReferenceToParent.d.ts +1 -1
  123. package/documentOperations/$addElementReferenceToParent.js +30 -26
  124. package/documentOperations/$addElementReferenceToParent.js.map +1 -1
  125. package/documentOperations/AddElement.js +8 -7
  126. package/documentOperations/AddElement.js.map +1 -1
  127. package/documentOperations/AddToParent.d.ts +2 -2
  128. package/documentOperations/AddToParent.js +14 -13
  129. package/documentOperations/AddToParent.js.map +1 -1
  130. package/documentOperations/IDocumentOperation.js +0 -3
  131. package/documentOperations/RemoveElement.js +10 -7
  132. package/documentOperations/RemoveElement.js.map +1 -1
  133. package/documentOperations/SetGlobalInputBinding.js +23 -22
  134. package/documentOperations/SetGlobalInputBinding.js.map +1 -1
  135. package/documentOperations/SetGlobalStyleBinding.js +23 -23
  136. package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
  137. package/documentOperations/SetInputBindingOverride.js +30 -29
  138. package/documentOperations/SetInputBindingOverride.js.map +1 -1
  139. package/documentOperations/SetStyleBindingOverride.js +30 -31
  140. package/documentOperations/SetStyleBindingOverride.js.map +1 -1
  141. package/documentOperations/index.js +9 -8
  142. package/documentOperations/index.js.map +1 -1
  143. package/findMatchingAstNode.js +11 -13
  144. package/findMatchingAstNode.js.map +1 -1
  145. package/generateElementId.js +2 -2
  146. package/generateElementId.js.map +1 -1
  147. package/headersProvider.js +4 -3
  148. package/headersProvider.js.map +1 -1
  149. package/index.d.ts +1 -0
  150. package/index.js +1 -2
  151. package/jsonPatch.js +5 -9
  152. package/jsonPatch.js.map +1 -1
  153. package/messages.js +12 -11
  154. package/messages.js.map +1 -1
  155. package/messenger/MessageOrigin.js +12 -11
  156. package/messenger/MessageOrigin.js.map +1 -1
  157. package/messenger/Messenger.js +58 -71
  158. package/messenger/Messenger.js.map +1 -1
  159. package/messenger/index.js +0 -2
  160. package/package.json +16 -16
  161. package/registerComponentGroup.js +5 -6
  162. package/registerComponentGroup.js.map +1 -1
  163. package/types/ShorthandCssProperties.js +0 -3
  164. package/types/WebsiteBuilderTheme.d.ts +7 -0
  165. package/types/WebsiteBuilderTheme.js +0 -3
  166. package/types.d.ts +173 -11
  167. package/types.js +0 -3
  168. package/IBindingsUpdater.js.map +0 -1
  169. package/IRedirects.js.map +0 -1
  170. package/documentOperations/IDocumentOperation.js.map +0 -1
  171. package/index.js.map +0 -1
  172. package/messenger/index.js.map +0 -1
  173. package/types/ShorthandCssProperties.js.map +0 -1
  174. package/types/WebsiteBuilderTheme.js.map +0 -1
  175. package/types.js.map +0 -1
@@ -0,0 +1,288 @@
1
+ class ConstraintBlockError extends Error {
2
+ constructor(message){
3
+ super(message);
4
+ }
5
+ }
6
+ function block(message) {
7
+ throw new ConstraintBlockError(message);
8
+ }
9
+ function buildSlotPattern(slot) {
10
+ const match = slot.match(/\/(\d+)\//);
11
+ if (!match) return;
12
+ return new RegExp("^" + slot.replace(/\/\d+\//, "/\\d+/") + "$");
13
+ }
14
+ function findChildPosition(element, document) {
15
+ if (!element.parent?.id || !element.parent.slot) return;
16
+ const inputs = document.bindings[element.parent.id]?.inputs;
17
+ if (!inputs) return;
18
+ const slotName = element.parent.slot;
19
+ if (!/\/\d+\//.test(slotName)) {
20
+ const directBinding = inputs[slotName];
21
+ if (directBinding && Array.isArray(directBinding.static)) {
22
+ const index = directBinding.static.indexOf(element.id);
23
+ if (-1 !== index) return {
24
+ index,
25
+ count: directBinding.static.length
26
+ };
27
+ }
28
+ }
29
+ const pattern = buildSlotPattern(slotName);
30
+ if (!pattern) return;
31
+ const siblingKeys = [];
32
+ for(const key in inputs)if (pattern.test(key)) {
33
+ const m = key.match(/\/(\d+)\//);
34
+ if (m) siblingKeys.push({
35
+ key,
36
+ idx: parseInt(m[1], 10)
37
+ });
38
+ }
39
+ siblingKeys.sort((a, b)=>a.idx - b.idx);
40
+ const position = siblingKeys.findIndex(({ key })=>{
41
+ const val = inputs[key]?.static;
42
+ if (Array.isArray(val)) return val.includes(element.id);
43
+ return val === element.id;
44
+ });
45
+ if (-1 === position) return;
46
+ return {
47
+ index: position,
48
+ count: siblingKeys.length
49
+ };
50
+ }
51
+ function buildElementContext(element, components, document) {
52
+ const manifest = components[element.component.name];
53
+ if (!manifest) return;
54
+ return {
55
+ name: element.component.name,
56
+ tags: manifest.tags ?? [],
57
+ getParent () {
58
+ if (!element.parent?.id) return;
59
+ const parentEl = document.elements[element.parent.id];
60
+ if (!parentEl) return;
61
+ return buildElementContext(parentEl, components, document);
62
+ },
63
+ childIndex () {
64
+ const pos = findChildPosition(element, document);
65
+ return pos ? pos.index : -1;
66
+ },
67
+ childCount () {
68
+ const pos = findChildPosition(element, document);
69
+ return pos ? pos.count : -1;
70
+ },
71
+ isLastChild () {
72
+ const pos = findChildPosition(element, document);
73
+ return void 0 !== pos && pos.index === pos.count - 1;
74
+ },
75
+ isFirstChild () {
76
+ const pos = findChildPosition(element, document);
77
+ return void 0 !== pos && 0 === pos.index;
78
+ }
79
+ };
80
+ }
81
+ function buildAncestors(parentElement, components, document) {
82
+ const ancestors = [];
83
+ let current = parentElement;
84
+ while(current){
85
+ const manifest = components[current.component.name];
86
+ if (manifest) ancestors.push({
87
+ element: current,
88
+ manifest
89
+ });
90
+ if (current.parent?.id) current = document.elements[current.parent.id];
91
+ else break;
92
+ }
93
+ return ancestors;
94
+ }
95
+ function countInstances(document, componentName) {
96
+ let count = 0;
97
+ for(const id in document.elements)if (document.elements[id].component.name === componentName) count++;
98
+ return count;
99
+ }
100
+ function hasDescendantWithTag(document, components, elementId, tag) {
101
+ for(const id in document.elements){
102
+ const el = document.elements[id];
103
+ if (id === elementId) continue;
104
+ let current = el.parent?.id ? document.elements[el.parent.id] : void 0;
105
+ let isDescendant = false;
106
+ while(current){
107
+ if (current.id === elementId) {
108
+ isDescendant = true;
109
+ break;
110
+ }
111
+ current = current.parent?.id ? document.elements[current.parent.id] : void 0;
112
+ }
113
+ if (!isDescendant) continue;
114
+ const elManifest = components[el.component.name];
115
+ if (elManifest?.tags?.includes(tag)) return true;
116
+ }
117
+ return false;
118
+ }
119
+ function evaluateConstraints(params) {
120
+ const { componentName, parentId, slot, document, components } = params;
121
+ const componentManifest = components[componentName];
122
+ if (!componentManifest) return {
123
+ allowed: true
124
+ };
125
+ const parentElement = document.elements[parentId];
126
+ if (!parentElement) return {
127
+ allowed: true
128
+ };
129
+ const parentCtx = buildElementContext(parentElement, components, document);
130
+ if (!parentCtx) return {
131
+ allowed: true
132
+ };
133
+ const ancestors = buildAncestors(parentElement, components, document);
134
+ const parentInputs = document.bindings[parentElement.id]?.inputs ?? {};
135
+ const ctx = {
136
+ component: {
137
+ name: componentManifest.name,
138
+ tags: componentManifest.tags ?? [],
139
+ getParent: ()=>parentCtx,
140
+ childIndex: ()=>-1,
141
+ childCount: ()=>-1,
142
+ isLastChild: ()=>false,
143
+ isFirstChild: ()=>false
144
+ },
145
+ parent: parentCtx,
146
+ slot,
147
+ isChildOf: (name)=>parentElement.component.name === name,
148
+ isDescendantOf: (name)=>ancestors.some((a)=>a.manifest.name === name),
149
+ getAncestor: (name)=>{
150
+ const found = ancestors.find((a)=>a.manifest.name === name);
151
+ return found ? buildElementContext(found.element, components, document) : void 0;
152
+ },
153
+ hasTag: (tag)=>componentManifest.tags?.includes(tag) ?? false,
154
+ slotChildCount: ()=>{
155
+ const items = parentInputs[slot]?.static;
156
+ return Array.isArray(items) ? items.length : 0;
157
+ },
158
+ countInstances: (name)=>countInstances(document, name),
159
+ hasDescendantWithTag: ()=>false,
160
+ getAncestorInputs: ()=>void 0,
161
+ getElementInputs: ()=>({}),
162
+ log: (...args)=>console.log(...args),
163
+ block: block
164
+ };
165
+ const runConstraint = (constraint, fallbackMessage)=>{
166
+ try {
167
+ constraint(ctx);
168
+ } catch (err) {
169
+ if (err instanceof ConstraintBlockError) return {
170
+ message: err.message
171
+ };
172
+ return {
173
+ message: err instanceof Error && err.message ? err.message : fallbackMessage
174
+ };
175
+ }
176
+ };
177
+ if (componentManifest.constraints) for (const constraint of componentManifest.constraints){
178
+ const violation = runConstraint(constraint, `Cannot place ${componentManifest.label} here.`);
179
+ if (violation) return {
180
+ allowed: false,
181
+ violation
182
+ };
183
+ }
184
+ for (const ancestor of ancestors)if (ancestor.manifest.descendantConstraints) for (const constraint of ancestor.manifest.descendantConstraints){
185
+ const violation = runConstraint(constraint, `Cannot place ${componentName} inside ${ancestor.manifest.label}.`);
186
+ if (violation) return {
187
+ allowed: false,
188
+ violation
189
+ };
190
+ }
191
+ return {
192
+ allowed: true
193
+ };
194
+ }
195
+ function evaluateDeleteConstraint(params) {
196
+ const { elementId, document, components } = params;
197
+ const element = document.elements[elementId];
198
+ if (!element) return {
199
+ allowed: true
200
+ };
201
+ const manifest = components[element.component.name];
202
+ if (!manifest) return {
203
+ allowed: true
204
+ };
205
+ const { canDelete } = manifest;
206
+ if (void 0 === canDelete || true === canDelete) return {
207
+ allowed: true
208
+ };
209
+ if (false === canDelete) return {
210
+ allowed: false,
211
+ violation: {
212
+ message: `${manifest.label} cannot be deleted.`
213
+ }
214
+ };
215
+ const parentElement = element.parent?.id ? document.elements[element.parent.id] : void 0;
216
+ const parentCtx = parentElement ? buildElementContext(parentElement, components, document) : void 0;
217
+ const ancestors = parentElement ? buildAncestors(parentElement, components, document) : [];
218
+ const parentInputs = parentElement ? document.bindings[parentElement.id]?.inputs ?? {} : {};
219
+ const slot = element.parent?.slot ?? "";
220
+ const elementCtx = buildElementContext(element, components, document);
221
+ const ctx = {
222
+ component: elementCtx,
223
+ parent: parentCtx ?? {
224
+ name: "",
225
+ tags: [],
226
+ getParent: ()=>void 0,
227
+ childIndex: ()=>-1,
228
+ childCount: ()=>-1,
229
+ isLastChild: ()=>false,
230
+ isFirstChild: ()=>false
231
+ },
232
+ slot,
233
+ isChildOf: (name)=>parentElement?.component.name === name,
234
+ isDescendantOf: (name)=>ancestors.some((a)=>a.manifest.name === name),
235
+ getAncestor: (name)=>{
236
+ const found = ancestors.find((a)=>a.manifest.name === name);
237
+ return found ? buildElementContext(found.element, components, document) : void 0;
238
+ },
239
+ hasTag: (tag)=>manifest.tags?.includes(tag) ?? false,
240
+ slotChildCount: ()=>{
241
+ const items = parentInputs[slot]?.static;
242
+ return Array.isArray(items) ? items.length : 0;
243
+ },
244
+ countInstances: (name)=>countInstances(document, name),
245
+ hasDescendantWithTag: (tag)=>hasDescendantWithTag(document, components, element.id, tag),
246
+ getAncestorInputs: (name)=>{
247
+ const found = ancestors.find((a)=>a.manifest.name === name);
248
+ if (!found) return;
249
+ const bindings = document.bindings[found.element.id]?.inputs ?? {};
250
+ return Object.fromEntries(Object.entries(bindings).map(([k, v])=>[
251
+ k,
252
+ v?.static
253
+ ]));
254
+ },
255
+ getElementInputs: ()=>{
256
+ const bindings = document.bindings[element.id]?.inputs ?? {};
257
+ return Object.fromEntries(Object.entries(bindings).map(([k, v])=>[
258
+ k,
259
+ v?.static
260
+ ]));
261
+ },
262
+ log: (...args)=>console.log(...args),
263
+ block: block
264
+ };
265
+ const fallbackMessage = `${manifest.label} cannot be deleted.`;
266
+ try {
267
+ canDelete(ctx);
268
+ } catch (err) {
269
+ if (err instanceof ConstraintBlockError) return {
270
+ allowed: false,
271
+ violation: {
272
+ message: err.message
273
+ }
274
+ };
275
+ return {
276
+ allowed: false,
277
+ violation: {
278
+ message: err instanceof Error && err.message ? err.message : fallbackMessage
279
+ }
280
+ };
281
+ }
282
+ return {
283
+ allowed: true
284
+ };
285
+ }
286
+ export { buildAncestors, buildElementContext, evaluateConstraints, evaluateDeleteConstraint };
287
+
288
+ //# sourceMappingURL=ConstraintEvaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConstraintEvaluator.js","sources":["../src/ConstraintEvaluator.ts"],"sourcesContent":["import type {\n ComponentManifest,\n ComponentConstraint,\n ConstraintContext,\n ConstraintElementContext,\n Document,\n DocumentElement\n} from \"~/types.js\";\n\nclass ConstraintBlockError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n\nfunction block(message: string): never {\n throw new ConstraintBlockError(message);\n}\n\nexport type ConstraintViolation = {\n message: string;\n};\n\nexport type ConstraintResult = {\n allowed: boolean;\n violation?: ConstraintViolation;\n};\n\nexport interface EvaluateConstraintsParams {\n /** The component being placed */\n componentName: string;\n /** Target parent element ID */\n parentId: string;\n /** Target slot */\n slot: string;\n /** The document */\n document: Document;\n /** All registered component manifests */\n components: Record<string, ComponentManifest>;\n}\n\n/**\n * Build a regex pattern from a slot path, replacing the numeric index with \\d+.\n * E.g., \"steps/2/step\" → /^steps\\/\\d+\\/step$/\n * Returns undefined if the slot has no index segment.\n */\nfunction buildSlotPattern(slot: string): RegExp | undefined {\n const match = slot.match(/\\/(\\d+)\\//);\n if (!match) {\n return undefined;\n }\n return new RegExp(\"^\" + slot.replace(/\\/\\d+\\//, \"/\\\\d+/\") + \"$\");\n}\n\n/**\n * Find the actual index and sibling count for an element in its parent's bindings.\n * Instead of trusting element.parent.slot (which may be stale after reordering),\n * we scan the parent's binding keys to find which slot holds this element's ID.\n * Returns { index, count } or undefined if not in a list slot.\n */\nfunction findChildPosition(\n element: DocumentElement,\n document: Document\n): { index: number; count: number } | undefined {\n if (!element.parent?.id || !element.parent.slot) {\n return undefined;\n }\n\n const inputs = document.bindings[element.parent.id]?.inputs;\n if (!inputs) {\n return undefined;\n }\n\n // Try direct list slot format: binding key = slot name, static = array of IDs.\n // Only when the slot path itself is NOT an indexed sub-key (e.g., \"steps\", not \"steps/0/step\").\n const slotName = element.parent.slot;\n if (!/\\/\\d+\\//.test(slotName)) {\n const directBinding = inputs[slotName];\n if (directBinding && Array.isArray(directBinding.static)) {\n const index = directBinding.static.indexOf(element.id);\n if (index !== -1) {\n return { index, count: directBinding.static.length };\n }\n }\n }\n\n // Fall back to indexed sub-key format: steps/0/step, steps/1/step, etc.\n const pattern = buildSlotPattern(slotName);\n if (!pattern) {\n return undefined;\n }\n\n const siblingKeys: { key: string; idx: number }[] = [];\n for (const key in inputs) {\n if (pattern.test(key)) {\n const m = key.match(/\\/(\\d+)\\//);\n if (m) {\n siblingKeys.push({ key, idx: parseInt(m[1], 10) });\n }\n }\n }\n siblingKeys.sort((a, b) => a.idx - b.idx);\n\n const position = siblingKeys.findIndex(({ key }) => {\n const val = inputs[key]?.static;\n if (Array.isArray(val)) {\n return val.includes(element.id);\n }\n return val === element.id;\n });\n\n if (position === -1) {\n return undefined;\n }\n\n return { index: position, count: siblingKeys.length };\n}\n\nexport function buildElementContext(\n element: DocumentElement,\n components: Record<string, ComponentManifest>,\n document: Document\n): ConstraintElementContext | undefined {\n const manifest = components[element.component.name];\n if (!manifest) {\n return undefined;\n }\n\n return {\n name: element.component.name,\n tags: manifest.tags ?? [],\n getParent() {\n if (!element.parent?.id) {\n return undefined;\n }\n const parentEl = document.elements[element.parent.id];\n if (!parentEl) {\n return undefined;\n }\n return buildElementContext(parentEl, components, document);\n },\n childIndex() {\n const pos = findChildPosition(element, document);\n return pos ? pos.index : -1;\n },\n childCount() {\n const pos = findChildPosition(element, document);\n return pos ? pos.count : -1;\n },\n isLastChild() {\n const pos = findChildPosition(element, document);\n return pos !== undefined && pos.index === pos.count - 1;\n },\n isFirstChild() {\n const pos = findChildPosition(element, document);\n return pos !== undefined && pos.index === 0;\n }\n };\n}\n\nexport interface InternalAncestor {\n element: DocumentElement;\n manifest: ComponentManifest;\n}\n\nexport function buildAncestors(\n parentElement: DocumentElement,\n components: Record<string, ComponentManifest>,\n document: Document\n): InternalAncestor[] {\n const ancestors: InternalAncestor[] = [];\n let current: DocumentElement | undefined = parentElement;\n\n while (current) {\n const manifest = components[current.component.name];\n if (manifest) {\n ancestors.push({ element: current, manifest });\n }\n\n if (current.parent?.id) {\n current = document.elements[current.parent.id];\n } else {\n break;\n }\n }\n\n return ancestors;\n}\n\nfunction countInstances(document: Document, componentName: string): number {\n let count = 0;\n for (const id in document.elements) {\n if (document.elements[id].component.name === componentName) {\n count++;\n }\n }\n return count;\n}\n\nfunction hasDescendantWithTag(\n document: Document,\n components: Record<string, ComponentManifest>,\n elementId: string,\n tag: string\n): boolean {\n for (const id in document.elements) {\n const el = document.elements[id];\n if (id === elementId) {\n continue;\n }\n // Walk up parent chain to see if elementId is an ancestor.\n let current = el.parent?.id ? document.elements[el.parent.id] : undefined;\n let isDescendant = false;\n while (current) {\n if (current.id === elementId) {\n isDescendant = true;\n break;\n }\n current = current.parent?.id ? document.elements[current.parent.id] : undefined;\n }\n if (!isDescendant) {\n continue;\n }\n const elManifest = components[el.component.name];\n if (elManifest?.tags?.includes(tag)) {\n return true;\n }\n }\n return false;\n}\n\nexport function evaluateConstraints(params: EvaluateConstraintsParams): ConstraintResult {\n const { componentName, parentId, slot, document, components } = params;\n\n const componentManifest = components[componentName];\n if (!componentManifest) {\n return { allowed: true };\n }\n\n const parentElement = document.elements[parentId];\n if (!parentElement) {\n return { allowed: true };\n }\n\n const parentCtx = buildElementContext(parentElement, components, document);\n if (!parentCtx) {\n return { allowed: true };\n }\n\n const ancestors = buildAncestors(parentElement, components, document);\n\n const parentInputs = document.bindings[parentElement.id]?.inputs ?? {};\n\n const ctx: ConstraintContext = {\n component: {\n name: componentManifest.name,\n tags: componentManifest.tags ?? [],\n // During placement, the element doesn't exist yet — position is unknown.\n getParent: () => parentCtx,\n childIndex: () => -1,\n childCount: () => -1,\n isLastChild: () => false,\n isFirstChild: () => false\n },\n parent: parentCtx,\n slot,\n isChildOf: (name: string) => parentElement.component.name === name,\n isDescendantOf: (name: string) => ancestors.some(a => a.manifest.name === name),\n getAncestor: (name: string) => {\n const found = ancestors.find(a => a.manifest.name === name);\n return found ? buildElementContext(found.element, components, document) : undefined;\n },\n hasTag: (tag: string) => componentManifest.tags?.includes(tag) ?? false,\n slotChildCount: () => {\n const items = parentInputs[slot]?.static;\n return Array.isArray(items) ? items.length : 0;\n },\n countInstances: (name: string) => countInstances(document, name),\n // Element doesn't exist yet during placement — no descendants or inputs to check.\n hasDescendantWithTag: () => false,\n getAncestorInputs: () => undefined,\n getElementInputs: () => ({}),\n log: (...args: any[]) => console.log(...args),\n block\n };\n\n const runConstraint = (\n constraint: ComponentConstraint,\n fallbackMessage: string\n ): ConstraintViolation | undefined => {\n try {\n constraint(ctx);\n } catch (err) {\n if (err instanceof ConstraintBlockError) {\n return { message: err.message };\n }\n return {\n message: err instanceof Error && err.message ? err.message : fallbackMessage\n };\n }\n return undefined;\n };\n\n // Evaluate the placed component's own constraints.\n if (componentManifest.constraints) {\n for (const constraint of componentManifest.constraints) {\n const violation = runConstraint(\n constraint,\n `Cannot place ${componentManifest.label} here.`\n );\n if (violation) {\n return { allowed: false, violation };\n }\n }\n }\n\n // Evaluate descendantConstraints from all ancestors (including direct parent).\n for (const ancestor of ancestors) {\n if (ancestor.manifest.descendantConstraints) {\n for (const constraint of ancestor.manifest.descendantConstraints) {\n const violation = runConstraint(\n constraint,\n `Cannot place ${componentName} inside ${ancestor.manifest.label}.`\n );\n if (violation) {\n return { allowed: false, violation };\n }\n }\n }\n }\n\n return { allowed: true };\n}\n\nexport interface EvaluateDeleteConstraintParams {\n /** The element being deleted */\n elementId: string;\n /** The document */\n document: Document;\n /** All registered component manifests */\n components: Record<string, ComponentManifest>;\n}\n\nexport function evaluateDeleteConstraint(params: EvaluateDeleteConstraintParams): ConstraintResult {\n const { elementId, document, components } = params;\n\n const element = document.elements[elementId];\n if (!element) {\n return { allowed: true };\n }\n\n const manifest = components[element.component.name];\n if (!manifest) {\n return { allowed: true };\n }\n\n const { canDelete } = manifest;\n\n // undefined or true → allowed\n if (canDelete === undefined || canDelete === true) {\n return { allowed: true };\n }\n\n // false → blocked\n if (canDelete === false) {\n return {\n allowed: false,\n violation: {\n message: `${manifest.label} cannot be deleted.`\n }\n };\n }\n\n // ComponentConstraint → evaluate dynamically\n const parentElement = element.parent?.id ? document.elements[element.parent.id] : undefined;\n const parentCtx = parentElement\n ? buildElementContext(parentElement, components, document)\n : undefined;\n\n const ancestors = parentElement ? buildAncestors(parentElement, components, document) : [];\n\n const parentInputs = parentElement ? (document.bindings[parentElement.id]?.inputs ?? {}) : {};\n\n const slot = element.parent?.slot ?? \"\";\n\n const elementCtx = buildElementContext(element, components, document)!;\n\n const ctx: ConstraintContext = {\n component: elementCtx,\n parent: parentCtx ?? {\n name: \"\",\n tags: [],\n getParent: () => undefined,\n childIndex: () => -1,\n childCount: () => -1,\n isLastChild: () => false,\n isFirstChild: () => false\n },\n slot,\n isChildOf: (name: string) => parentElement?.component.name === name,\n isDescendantOf: (name: string) => ancestors.some(a => a.manifest.name === name),\n getAncestor: (name: string) => {\n const found = ancestors.find(a => a.manifest.name === name);\n return found ? buildElementContext(found.element, components, document) : undefined;\n },\n hasTag: (tag: string) => manifest.tags?.includes(tag) ?? false,\n slotChildCount: () => {\n const items = parentInputs[slot]?.static;\n return Array.isArray(items) ? items.length : 0;\n },\n countInstances: (name: string) => countInstances(document, name),\n hasDescendantWithTag: (tag: string) =>\n hasDescendantWithTag(document, components, element.id, tag),\n getAncestorInputs: (name: string) => {\n const found = ancestors.find(a => a.manifest.name === name);\n if (!found) {\n return undefined;\n }\n const bindings = document.bindings[found.element.id]?.inputs ?? {};\n return Object.fromEntries(\n Object.entries(bindings).map(([k, v]) => [k, (v as any)?.static])\n );\n },\n getElementInputs: () => {\n const bindings = document.bindings[element.id]?.inputs ?? {};\n return Object.fromEntries(\n Object.entries(bindings).map(([k, v]) => [k, (v as any)?.static])\n );\n },\n log: (...args: any[]) => console.log(...args),\n block\n };\n\n const fallbackMessage = `${manifest.label} cannot be deleted.`;\n try {\n canDelete(ctx);\n } catch (err) {\n if (err instanceof ConstraintBlockError) {\n return { allowed: false, violation: { message: err.message } };\n }\n return {\n allowed: false,\n violation: {\n message: err instanceof Error && err.message ? err.message : fallbackMessage\n }\n };\n }\n\n return { allowed: true };\n}\n"],"names":["ConstraintBlockError","Error","message","block","buildSlotPattern","slot","match","RegExp","findChildPosition","element","document","inputs","slotName","directBinding","Array","index","pattern","siblingKeys","key","m","parseInt","a","b","position","val","buildElementContext","components","manifest","parentEl","pos","undefined","buildAncestors","parentElement","ancestors","current","countInstances","componentName","count","id","hasDescendantWithTag","elementId","tag","el","isDescendant","elManifest","evaluateConstraints","params","parentId","componentManifest","parentCtx","parentInputs","ctx","name","found","items","args","console","runConstraint","constraint","fallbackMessage","err","violation","ancestor","evaluateDeleteConstraint","canDelete","elementCtx","bindings","Object","k","v"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};