@fragmentsx/render-react 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/hooks/fragment/useFragment.d.ts.map +1 -1
  2. package/dist/hooks/fragment/useFragmentManager.d.ts +1 -1
  3. package/dist/hooks/fragment/useFragmentManager.d.ts.map +1 -1
  4. package/dist/hooks/layer/index.d.ts +2 -0
  5. package/dist/hooks/layer/index.d.ts.map +1 -1
  6. package/dist/hooks/layer/useReadVariable.d.ts +1 -0
  7. package/dist/hooks/layer/useReadVariable.d.ts.map +1 -1
  8. package/dist/hooks/layer/useResolvedLayer.d.ts +14 -0
  9. package/dist/hooks/layer/useResolvedLayer.d.ts.map +1 -0
  10. package/dist/hooks/layer/useResolvedLayerVariables.d.ts +7 -0
  11. package/dist/hooks/layer/useResolvedLayerVariables.d.ts.map +1 -0
  12. package/dist/hooks/layer-styles/useLayerPaint.d.ts +8 -0
  13. package/dist/hooks/layer-styles/useLayerPaint.d.ts.map +1 -1
  14. package/dist/hooks/layer-styles/useLayerStyles/index.d.ts +1 -1
  15. package/dist/hooks/layer-styles/useLayerStyles/index.d.ts.map +1 -1
  16. package/dist/hooks/layer-styles/useLayerStyles/useImagePaint.d.ts +6 -0
  17. package/dist/hooks/layer-styles/useLayerStyles/useImagePaint.d.ts.map +1 -1
  18. package/dist/hooks/layer-styles/useLayerStyles/useLayerBackground.d.ts +4 -2
  19. package/dist/hooks/layer-styles/useLayerStyles/useLayerBackground.d.ts.map +1 -1
  20. package/dist/hooks/layer-styles/useLayerStyles/useLayerBorder.d.ts +16 -0
  21. package/dist/hooks/layer-styles/useLayerStyles/useLayerBorder.d.ts.map +1 -1
  22. package/dist/hooks/layer-styles/useLayerStyles/useLayerDisplay.d.ts +2 -0
  23. package/dist/hooks/layer-styles/useLayerStyles/useLayerDisplay.d.ts.map +1 -1
  24. package/dist/hooks/layer-styles/useLayerStyles/useLayerFlex.d.ts +4 -0
  25. package/dist/hooks/layer-styles/useLayerStyles/useLayerFlex.d.ts.map +1 -1
  26. package/dist/hooks/layer-styles/useLayerStyles/useLayerLayout.d.ts +10 -0
  27. package/dist/hooks/layer-styles/useLayerStyles/useLayerLayout.d.ts.map +1 -1
  28. package/dist/hooks/layer-styles/useLayerStyles/useLayerPosition.d.ts +36 -0
  29. package/dist/hooks/layer-styles/useLayerStyles/useLayerPosition.d.ts.map +1 -1
  30. package/dist/hooks/layer-styles/useLayerStyles/useLayerSize.d.ts +7 -0
  31. package/dist/hooks/layer-styles/useLayerStyles/useLayerSize.d.ts.map +1 -1
  32. package/dist/hooks/layer-styles/useLayerStyles/useLayerSizeValue.d.ts +9 -0
  33. package/dist/hooks/layer-styles/useLayerStyles/useLayerSizeValue.d.ts.map +1 -1
  34. package/dist/hooks/layer-styles/useLayerStyles/useLayerTextStyles.d.ts +4 -0
  35. package/dist/hooks/layer-styles/useLayerStyles/useLayerTextStyles.d.ts.map +1 -1
  36. package/dist/hooks/layer-styles/useLayerStyles/useOptionalSize.d.ts +2 -0
  37. package/dist/hooks/layer-styles/useLayerStyles/useOptionalSize.d.ts.map +1 -1
  38. package/dist/hooks/utils/useExtractProps.d.ts +16 -0
  39. package/dist/hooks/utils/useExtractProps.d.ts.map +1 -0
  40. package/dist/hooks/utils/useLayerInteractions.d.ts.map +1 -1
  41. package/dist/index.cjs.js +1457 -706
  42. package/dist/index.es.js +1460 -709
  43. package/dist/nodes/Area/Area.d.ts.map +1 -1
  44. package/dist/nodes/Area/hooks/useArea.d.ts +2 -7
  45. package/dist/nodes/Area/hooks/useArea.d.ts.map +1 -1
  46. package/dist/nodes/Area/hooks/useArea.test.d.ts +2 -0
  47. package/dist/nodes/Area/hooks/useArea.test.d.ts.map +1 -0
  48. package/dist/nodes/Area/hooks/useArea.types.d.ts +22 -0
  49. package/dist/nodes/Area/hooks/useArea.types.d.ts.map +1 -0
  50. package/dist/nodes/Area/hooks/useAsyncLoadArea.d.ts +15 -0
  51. package/dist/nodes/Area/hooks/useAsyncLoadArea.d.ts.map +1 -0
  52. package/dist/nodes/Area/hooks/useAsyncLoadArea.test.d.ts +2 -0
  53. package/dist/nodes/Area/hooks/useAsyncLoadArea.test.d.ts.map +1 -0
  54. package/dist/nodes/Area/index.d.ts +1 -0
  55. package/dist/nodes/Area/index.d.ts.map +1 -1
  56. package/dist/nodes/Collection/hooks/useCollection.d.ts +1 -1
  57. package/dist/nodes/Collection/hooks/useCollection.d.ts.map +1 -1
  58. package/dist/nodes/CollectionItem/CollectionItem.d.ts.map +1 -1
  59. package/dist/nodes/CollectionItem/hooks/useCollection.d.ts +1 -1
  60. package/dist/nodes/CssChunk/hooks/useCssChunk.d.ts.map +1 -1
  61. package/dist/nodes/Fragment/Fragment.d.ts.map +1 -1
  62. package/dist/nodes/Frame/hooks/useFrame.d.ts +1 -1
  63. package/dist/nodes/Instance/Instance.d.ts.map +1 -1
  64. package/dist/nodes/Instance/hooks/useInstance.d.ts +1 -1
  65. package/dist/nodes/Instance/hooks/useInstanceProps.d.ts.map +1 -1
  66. package/dist/nodes/Instance/test/array-linking.browser.test.d.ts +2 -0
  67. package/dist/nodes/Instance/test/array-linking.browser.test.d.ts.map +1 -0
  68. package/dist/nodes/Instance/test/cardDocuments.d.ts +39 -0
  69. package/dist/nodes/Instance/test/cardDocuments.d.ts.map +1 -0
  70. package/dist/nodes/Instance/test/collection-props.browser.test.d.ts +2 -0
  71. package/dist/nodes/Instance/test/collection-props.browser.test.d.ts.map +1 -0
  72. package/dist/nodes/Instance/test/collection-schema.browser.test.d.ts +2 -0
  73. package/dist/nodes/Instance/test/collection-schema.browser.test.d.ts.map +1 -0
  74. package/dist/nodes/Instance/test/props-basic.browser.test.d.ts +2 -0
  75. package/dist/nodes/Instance/test/props-basic.browser.test.d.ts.map +1 -0
  76. package/dist/nodes/Instance/test/props-drilling.browser.test.d.ts +2 -0
  77. package/dist/nodes/Instance/test/props-drilling.browser.test.d.ts.map +1 -0
  78. package/dist/nodes/Instance/test/props-dynamic.browser.test.d.ts +2 -0
  79. package/dist/nodes/Instance/test/props-dynamic.browser.test.d.ts.map +1 -0
  80. package/dist/nodes/Text/hooks/useTextAttributes.d.ts +1 -1
  81. package/dist/providers/AreaManager.d.ts +3 -0
  82. package/dist/providers/AreaManager.d.ts.map +1 -0
  83. package/dist/providers/Scope/index.d.ts.map +1 -1
  84. package/dist/providers/index.d.ts +1 -0
  85. package/dist/providers/index.d.ts.map +1 -1
  86. package/dist/utils/common/index.d.ts +0 -1
  87. package/dist/utils/common/index.d.ts.map +1 -1
  88. package/dist/utils/css/buildCssBlock.d.ts +6 -0
  89. package/dist/utils/css/buildCssBlock.d.ts.map +1 -0
  90. package/dist/utils/css/buildCssBlock.test.d.ts +2 -0
  91. package/dist/utils/css/buildCssBlock.test.d.ts.map +1 -0
  92. package/dist/utils/css/compareRules.d.ts +3 -0
  93. package/dist/utils/css/compareRules.d.ts.map +1 -0
  94. package/dist/utils/css/compareRules.test.d.ts +2 -0
  95. package/dist/utils/css/compareRules.test.d.ts.map +1 -0
  96. package/dist/utils/css/extractStyleSheet.d.ts +6 -0
  97. package/dist/utils/css/extractStyleSheet.d.ts.map +1 -0
  98. package/dist/utils/css/findGroups.d.ts +11 -0
  99. package/dist/utils/css/findGroups.d.ts.map +1 -0
  100. package/dist/utils/css/getAllChildren.d.ts +4 -0
  101. package/dist/utils/css/getAllChildren.d.ts.map +1 -0
  102. package/dist/utils/css/getAllChildren.test.d.ts +2 -0
  103. package/dist/utils/css/getAllChildren.test.d.ts.map +1 -0
  104. package/dist/utils/css/index.d.ts +12 -0
  105. package/dist/utils/css/index.d.ts.map +1 -0
  106. package/dist/utils/css/makeCss.d.ts +5 -0
  107. package/dist/utils/css/makeCss.d.ts.map +1 -0
  108. package/dist/utils/css/toCSS.d.ts +3 -0
  109. package/dist/utils/css/toCSS.d.ts.map +1 -0
  110. package/dist/utils/css/toCSS.test.d.ts +2 -0
  111. package/dist/utils/css/toCSS.test.d.ts.map +1 -0
  112. package/dist/utils/css/types.d.ts +5 -0
  113. package/dist/utils/css/types.d.ts.map +1 -0
  114. package/dist/utils/layer/cloneLayer.d.ts.map +1 -1
  115. package/dist/utils/variables/index.d.ts +0 -1
  116. package/dist/utils/variables/index.d.ts.map +1 -1
  117. package/package.json +5 -5
  118. package/dist/hooks/utils/useExpandedObjectProps.d.ts +0 -12
  119. package/dist/hooks/utils/useExpandedObjectProps.d.ts.map +0 -1
  120. package/dist/utils/common/loadFragmentManager.d.ts +0 -3
  121. package/dist/utils/common/loadFragmentManager.d.ts.map +0 -1
  122. package/dist/utils/variables/expandObjectProps.d.ts +0 -9
  123. package/dist/utils/variables/expandObjectProps.d.ts.map +0 -1
  124. package/dist/utils/variables/expandObjectProps.test.d.ts +0 -2
  125. package/dist/utils/variables/expandObjectProps.test.d.ts.map +0 -1
package/dist/index.cjs.js CHANGED
@@ -3,9 +3,10 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const react = require("react");
4
4
  const definition = require("@fragmentsx/definition");
5
5
  const jsxRuntime = require("react/jsx-runtime");
6
- const react$1 = require("@graph-state/react");
7
6
  const utils = require("@fragmentsx/utils");
8
7
  const core = require("@graph-state/core");
8
+ const react$1 = require("@graph-state/react");
9
+ const clientCore = require("@fragmentsx/client-core");
9
10
  const GlobalManagerContext = react.createContext(null);
10
11
  const GlobalManagerProvider = GlobalManagerContext.Provider;
11
12
  const FragmentContext = react.createContext({
@@ -24,35 +25,9 @@ const RenderTargetContext = react.createContext(
24
25
  definition.definition.renderTarget.document
25
26
  );
26
27
  const RenderTargetProvider = RenderTargetContext.Provider;
28
+ const AreaManagerContext = react.createContext(null);
29
+ const AreaManagerProvider = AreaManagerContext.Provider;
27
30
  const ScopeContext = react.createContext([]);
28
- const useGlobalManager = (globalManager) => {
29
- var _a, _b;
30
- const currentGlobalManager = react.useContext(GlobalManagerContext);
31
- const resultManager = globalManager ?? currentGlobalManager;
32
- const [fragmentsGraph] = react$1.useGraph(
33
- resultManager,
34
- (_a = resultManager == null ? void 0 : resultManager.$fragments) == null ? void 0 : _a.key
35
- );
36
- const queryFragmentManager = (id) => {
37
- var _a2, _b2;
38
- return (_b2 = (_a2 = resultManager == null ? void 0 : resultManager.$load) == null ? void 0 : _a2.loadFragment) == null ? void 0 : _b2.call(_a2, id);
39
- };
40
- const queryArea = (id) => {
41
- var _a2, _b2;
42
- return (_b2 = (_a2 = resultManager == null ? void 0 : resultManager.$load) == null ? void 0 : _a2.loadArea) == null ? void 0 : _b2.call(_a2, id);
43
- };
44
- const setRenderTarget = (value) => {
45
- resultManager == null ? void 0 : resultManager.setRenderTarget(value);
46
- };
47
- return {
48
- fragmentsGraph,
49
- manager: resultManager,
50
- queryFragmentManager,
51
- queryArea,
52
- getFragmentManager: ((_b = resultManager == null ? void 0 : resultManager.$fragments) == null ? void 0 : _b.getManager) ?? utils.noop,
53
- setRenderTarget
54
- };
55
- };
56
31
  const Scope = ({
57
32
  value,
58
33
  children,
@@ -60,9 +35,11 @@ const Scope = ({
60
35
  layerKey
61
36
  }) => {
62
37
  var _a, _b;
63
- const { manager: globalManager } = useGlobalManager();
64
38
  const currentScope = react.useContext(ScopeContext) ?? [];
65
- const nextScope = [...currentScope, value];
39
+ const nextScope = react.useMemo(
40
+ () => [...currentScope, value],
41
+ [currentScope, value]
42
+ );
66
43
  (_b = (_a = fragmentManager == null ? void 0 : fragmentManager.$scopes) == null ? void 0 : _a.registerScope) == null ? void 0 : _b.call(_a, layerKey, value);
67
44
  return /* @__PURE__ */ jsxRuntime.jsx(ScopeContext.Provider, { value: nextScope, children });
68
45
  };
@@ -73,191 +50,6 @@ const getOverrider = (manager, layerEntity) => {
73
50
  const layer = manager.resolve(layerEntity);
74
51
  return manager.resolve(getKey(layer == null ? void 0 : layer.overrideFrom) ?? layerEntity);
75
52
  };
76
- const getLayer = (manager, layer, options) => {
77
- if (!manager || !layer) return null;
78
- const layerKey = manager.keyOfEntity(layer);
79
- const layerData = manager.resolve(layerKey);
80
- const overrider = getOverrider(manager, layerKey);
81
- return definition.getNormalizeLayer(layerData, overrider, options == null ? void 0 : options.withFallback);
82
- };
83
- const getNormalizeLayer = (layerKey, manager, options) => {
84
- const layer = manager == null ? void 0 : manager.resolve(layerKey);
85
- const parsedLayer = getLayer(manager, layerKey, options);
86
- return {
87
- layerKey,
88
- rawLayer: layer,
89
- layer: parsedLayer
90
- };
91
- };
92
- const useNormalizeLayer = (layerKey, manager, options) => {
93
- const { manager: fragmentManager } = react.useContext(FragmentContext);
94
- const resultManager = manager ?? fragmentManager;
95
- if (!resultManager) {
96
- return {
97
- layerKey,
98
- rawLayer: null,
99
- layer: null
100
- };
101
- }
102
- return getNormalizeLayer(layerKey, resultManager, options);
103
- };
104
- const useNormalizeLayers = (layerKeys, manager, options) => {
105
- const { manager: fragmentManager } = react.useContext(FragmentContext);
106
- const resultManager = manager ?? fragmentManager;
107
- return layerKeys.map(
108
- (layerKey) => getNormalizeLayer(layerKey, resultManager, options)
109
- );
110
- };
111
- function useForceUpdate() {
112
- return react.useReducer(() => ({}), {});
113
- }
114
- const extractVariableValue = (input, variableId) => {
115
- if (utils.isObject(input)) {
116
- if (variableId in input) {
117
- return input[variableId];
118
- }
119
- for (let key in input) {
120
- if (input.hasOwnProperty(key)) {
121
- const result = extractVariableValue(input[key], variableId);
122
- if (result !== void 0) {
123
- return result;
124
- }
125
- }
126
- }
127
- }
128
- return void 0;
129
- };
130
- function deepMerge(a, b) {
131
- if (!utils.isObject(a) || !utils.isObject(b)) return a;
132
- const result = { ...b };
133
- for (const [key, value] of Object.entries(a)) {
134
- if (key in result && typeof result[key] === "object" && typeof value === "object") {
135
- result[key] = deepMerge(value, result[key]);
136
- } else {
137
- result[key] = value;
138
- }
139
- }
140
- return result;
141
- }
142
- const useReadVariable = (variableKey, customScopes) => {
143
- const contextScopes = react.useContext(ScopeContext);
144
- const scopes = customScopes ?? contextScopes;
145
- const unmountAbortController = react.useRef(new AbortController());
146
- const [dep, forceUpdate] = useForceUpdate();
147
- react.useEffect(
148
- () => () => {
149
- var _a;
150
- (_a = unmountAbortController.current) == null ? void 0 : _a.abort("unmount");
151
- },
152
- []
153
- );
154
- const extractVariableDefaultValue = (manager, variableEntity) => {
155
- const variableLayer = manager.resolve(variableEntity);
156
- if ((variableLayer == null ? void 0 : variableLayer.type) !== definition.definition.variableType.Object)
157
- return variableLayer == null ? void 0 : variableLayer.defaultValue;
158
- return Object.values((variableLayer == null ? void 0 : variableLayer.fields) ?? {}).reduce(
159
- (acc, fieldLink) => {
160
- var _a;
161
- if (!!fieldLink && definition.isVariableLink(fieldLink)) {
162
- const _id = (_a = core.entityOfKey(fieldLink)) == null ? void 0 : _a._id;
163
- if (_id) {
164
- acc[_id] = extractVariableDefaultValue(manager, fieldLink);
165
- }
166
- }
167
- return acc;
168
- },
169
- {}
170
- );
171
- };
172
- const resolveVariableLayer = (manager, variableLink, customProps) => {
173
- var _a, _b;
174
- const variableLayer = (_a = getNormalizeLayer(variableLink, manager)) == null ? void 0 : _a.layer;
175
- if (!variableLayer) return null;
176
- if ((variableLayer == null ? void 0 : variableLayer.type) === definition.definition.variableType.Array) {
177
- const definitionLayer = manager.resolve(variableLayer == null ? void 0 : variableLayer.definition);
178
- if (!((_b = variableLayer == null ? void 0 : variableLayer.defaultValue) == null ? void 0 : _b.length) || (definitionLayer == null ? void 0 : definitionLayer.type) !== definition.definition.variableType.Object)
179
- return variableLayer;
180
- const definitionDefaultValue = extractVariableDefaultValue(
181
- manager,
182
- definitionLayer
183
- );
184
- const customValue = customProps == null ? void 0 : customProps[variableLayer == null ? void 0 : variableLayer._id];
185
- return {
186
- ...variableLayer,
187
- defaultValue: (variableLayer == null ? void 0 : variableLayer.defaultValue).map((item, index) => {
188
- const customItemValue = Array.isArray(customValue) ? customValue.at(index) : null;
189
- return deepMerge(
190
- customItemValue ? { ...item, ...customItemValue } : item,
191
- definitionDefaultValue
192
- );
193
- })
194
- };
195
- }
196
- return variableLayer;
197
- };
198
- const readVariable = (variableKey2) => {
199
- var _a, _b, _c, _d, _e;
200
- const variableId = (_a = core.entityOfKey(variableKey2)) == null ? void 0 : _a._id;
201
- if (!definition.isVariableLink(variableKey2)) {
202
- return {
203
- value: null,
204
- layer: null
205
- };
206
- }
207
- let instanceScope = scopes.findLast(
208
- (scope) => {
209
- var _a2;
210
- return (scope == null ? void 0 : scope.type) === definition.definition.scopeTypes.InstanceScope && !!((_a2 = scope.documentManager) == null ? void 0 : _a2.resolve(variableKey2));
211
- }
212
- );
213
- if (!instanceScope) {
214
- instanceScope = scopes.find(
215
- (scope) => (scope == null ? void 0 : scope.type) === definition.definition.scopeTypes.InstanceScope
216
- );
217
- }
218
- const variableLayer = resolveVariableLayer(
219
- instanceScope == null ? void 0 : instanceScope.documentManager,
220
- variableKey2
221
- );
222
- (_c = instanceScope == null ? void 0 : instanceScope.documentManager) == null ? void 0 : _c.subscribe(variableKey2, forceUpdate, {
223
- signal: (_b = unmountAbortController.current) == null ? void 0 : _b.signal
224
- });
225
- let instanceProp = (_d = instanceScope == null ? void 0 : instanceScope.props) == null ? void 0 : _d[variableId];
226
- if (Array.isArray(instanceProp)) {
227
- instanceProp = instanceProp.map(
228
- (rawProp, index) => {
229
- var _a2;
230
- return deepMerge(rawProp, (_a2 = variableLayer == null ? void 0 : variableLayer.defaultValue) == null ? void 0 : _a2.at(index));
231
- }
232
- );
233
- }
234
- const lastCollectionItem = scopes.findLast(
235
- (scope) => (scope == null ? void 0 : scope.type) === definition.definition.scopeTypes.CollectionItemScope
236
- );
237
- resolveVariableLayer(
238
- lastCollectionItem == null ? void 0 : lastCollectionItem.manager,
239
- lastCollectionItem == null ? void 0 : lastCollectionItem.sourceDefinition,
240
- lastCollectionItem == null ? void 0 : lastCollectionItem.value
241
- );
242
- const collectionItemProp = utils.isPrimitive(lastCollectionItem == null ? void 0 : lastCollectionItem.value) && ((_e = core.entityOfKey(lastCollectionItem == null ? void 0 : lastCollectionItem.sourceDefinition)) == null ? void 0 : _e._id) === variableId ? lastCollectionItem == null ? void 0 : lastCollectionItem.value : extractVariableValue(lastCollectionItem == null ? void 0 : lastCollectionItem.value, variableId);
243
- const currentValue = variableKey2 === instanceProp ? null : collectionItemProp ?? instanceProp ?? null;
244
- const required = (variableLayer == null ? void 0 : variableLayer.required) ?? false;
245
- const defaultValue = (variableLayer == null ? void 0 : variableLayer.defaultValue) ?? null;
246
- const resultValue = required ? currentValue : currentValue ?? collectionItemProp ?? defaultValue;
247
- if (definition.isVariableLink(resultValue)) {
248
- return readVariable(resultValue);
249
- }
250
- return {
251
- value: resultValue,
252
- layer: variableLayer
253
- };
254
- };
255
- const result = readVariable(variableKey);
256
- return {
257
- ...result,
258
- readVariable
259
- };
260
- };
261
53
  const getParent = (manager, layerKey) => {
262
54
  const layer = manager.resolve(layerKey);
263
55
  return manager.resolve(getKey(layer == null ? void 0 : layer.parent) ?? null);
@@ -433,6 +225,9 @@ const cloneLayer = (manager, layer, externalProps = {}) => {
433
225
  layerGraph,
434
226
  (key, value, history) => {
435
227
  const isRoot = history.length <= 2;
228
+ if ((value == null ? void 0 : value._type) === definition.definition.nodes.Instance && key === "props") {
229
+ return utils.cleanGraph(value);
230
+ }
436
231
  if (!!value && n(value) && !IGNORE_TYPES.includes(value._type)) {
437
232
  const nextId = utils.generateId();
438
233
  const parentFromValue = utils.getKey(value.parent);
@@ -669,6 +464,41 @@ const moveChildren = (manager, targetKey, to, index) => {
669
464
  spliceChildren(manager, targetParent, targetKey);
670
465
  }
671
466
  };
467
+ const getLayer = (manager, layer, options) => {
468
+ if (!manager || !layer) return null;
469
+ const layerKey = manager.keyOfEntity(layer);
470
+ const layerData = manager.resolve(layerKey);
471
+ const overrider = getOverrider(manager, layerKey);
472
+ return definition.getNormalizeLayer(layerData, overrider, options == null ? void 0 : options.withFallback);
473
+ };
474
+ const getNormalizeLayer = (layerKey, manager, options) => {
475
+ const layer = manager == null ? void 0 : manager.resolve(layerKey);
476
+ const parsedLayer = getLayer(manager, layerKey, options);
477
+ return {
478
+ layerKey,
479
+ rawLayer: layer,
480
+ layer: parsedLayer
481
+ };
482
+ };
483
+ const useNormalizeLayer = (layerKey, manager, options) => {
484
+ const { manager: fragmentManager } = react.useContext(FragmentContext);
485
+ const resultManager = manager ?? fragmentManager;
486
+ if (!resultManager) {
487
+ return {
488
+ layerKey,
489
+ rawLayer: null,
490
+ layer: null
491
+ };
492
+ }
493
+ return getNormalizeLayer(layerKey, resultManager, options);
494
+ };
495
+ const useNormalizeLayers = (layerKeys, manager, options) => {
496
+ const { manager: fragmentManager } = react.useContext(FragmentContext);
497
+ const resultManager = manager ?? fragmentManager;
498
+ return layerKeys.map(
499
+ (layerKey) => getNormalizeLayer(layerKey, resultManager, options)
500
+ );
501
+ };
672
502
  const calcBackground = (manager, layerKey) => {
673
503
  manager.resolve(layerKey);
674
504
  const { layer } = getNormalizeLayer(layerKey, manager);
@@ -804,111 +634,15 @@ const toCssCustomProperties = (props) => {
804
634
  {}
805
635
  );
806
636
  };
807
- const resolveFieldVar = (field, manager) => {
808
- if (utils.isObject(field) && (field == null ? void 0 : field._id)) {
809
- return field;
810
- }
811
- if (definition.isVariableLink(field) && manager) {
812
- return manager.resolve(field);
637
+ const declareFragmentProperty = (manager, property, fragmentLink = manager.$fragment.root) => {
638
+ const propertyLayer = createLayer(property);
639
+ if (propertyLayer && "type" in propertyLayer) {
640
+ manager.mutate(manager.keyOfEntity(fragmentLink), {
641
+ properties: [propertyLayer]
642
+ });
643
+ return manager.keyOfEntity(propertyLayer);
813
644
  }
814
- return void 0;
815
- };
816
- const toVariableLink = (field) => {
817
- if (definition.isVariableLink(field)) {
818
- return field;
819
- }
820
- if (utils.isObject(field) && (field == null ? void 0 : field._type) && (field == null ? void 0 : field._id)) {
821
- return core.keyOfEntity(field);
822
- }
823
- return void 0;
824
- };
825
- const expandConcreteValue = (objectVar, valueObj, childManager, result) => {
826
- const fields = utils.cleanGraph(objectVar.fields);
827
- for (const [fieldName, childField] of Object.entries(fields)) {
828
- if (!(fieldName in valueObj)) continue;
829
- const childFieldVar = resolveFieldVar(childField, childManager);
830
- if (!(childFieldVar == null ? void 0 : childFieldVar._id)) continue;
831
- const fieldValue = valueObj[fieldName];
832
- if (childFieldVar.type === definition.definition.variableType.Object && childFieldVar.fields && utils.isObject(fieldValue)) {
833
- expandConcreteValue(
834
- childFieldVar,
835
- fieldValue,
836
- childManager,
837
- result
838
- );
839
- continue;
840
- }
841
- result[childFieldVar._id] = fieldValue;
842
- }
843
- };
844
- const expandVariableValue = (childObjectVar, parentObjectVar, childManager, resolveManager, result) => {
845
- const childFields = utils.cleanGraph(childObjectVar.fields);
846
- const parentFields = utils.cleanGraph(parentObjectVar.fields);
847
- for (const [fieldName, childField] of Object.entries(childFields)) {
848
- const parentField = parentFields[fieldName];
849
- if (!parentField) continue;
850
- const childFieldVar = resolveFieldVar(childField, childManager);
851
- if (!(childFieldVar == null ? void 0 : childFieldVar._id)) continue;
852
- const parentFieldVar = resolveFieldVar(parentField, resolveManager);
853
- if (childFieldVar.type === definition.definition.variableType.Object && childFieldVar.fields && (parentFieldVar == null ? void 0 : parentFieldVar.type) === definition.definition.variableType.Object && (parentFieldVar == null ? void 0 : parentFieldVar.fields)) {
854
- expandVariableValue(
855
- childFieldVar,
856
- parentFieldVar,
857
- childManager,
858
- resolveManager,
859
- result
860
- );
861
- continue;
862
- }
863
- const parentFieldLink = toVariableLink(parentField);
864
- if (parentFieldLink) {
865
- result[childFieldVar._id] = parentFieldLink;
866
- }
867
- }
868
- };
869
- const expandObjectProps = (props, childManager, parentManager) => {
870
- if (!childManager) return props;
871
- const resolveManager = parentManager ?? childManager;
872
- const result = {};
873
- for (const [propKey, propValue] of Object.entries(props)) {
874
- const childVarKey = `Variable:${propKey}`;
875
- const childVar = childManager.resolve(childVarKey);
876
- if ((childVar == null ? void 0 : childVar.type) === definition.definition.variableType.Object && (childVar == null ? void 0 : childVar.fields)) {
877
- if (definition.isVariableLink(propValue)) {
878
- const parentVar = resolveManager.resolve(propValue);
879
- if ((parentVar == null ? void 0 : parentVar.type) === definition.definition.variableType.Object && (parentVar == null ? void 0 : parentVar.fields)) {
880
- expandVariableValue(
881
- childVar,
882
- parentVar,
883
- childManager,
884
- resolveManager,
885
- result
886
- );
887
- continue;
888
- }
889
- } else if (utils.isObject(propValue)) {
890
- expandConcreteValue(
891
- childVar,
892
- propValue,
893
- childManager,
894
- result
895
- );
896
- continue;
897
- }
898
- }
899
- result[propKey] = propValue;
900
- }
901
- return result;
902
- };
903
- const declareFragmentProperty = (manager, property, fragmentLink = manager.$fragment.root) => {
904
- const propertyLayer = createLayer(property);
905
- if (propertyLayer && "type" in propertyLayer) {
906
- manager.mutate(manager.keyOfEntity(fragmentLink), {
907
- properties: [propertyLayer]
908
- });
909
- return manager.keyOfEntity(propertyLayer);
910
- }
911
- return null;
645
+ return null;
912
646
  };
913
647
  const getStylesheetKey = (fragmentKey) => {
914
648
  const isLink2 = core.isLinkKey(fragmentKey);
@@ -951,22 +685,6 @@ function getHydratedData(id) {
951
685
  return null;
952
686
  }
953
687
  }
954
- const loadFragmentManager = async (globalManager, fragmentId) => {
955
- var _a, _b;
956
- const { document: document2, linkedFragments } = await ((_b = (_a = globalManager == null ? void 0 : globalManager.$fetch) == null ? void 0 : _a.queryFragment) == null ? void 0 : _b.call(_a, fragmentId));
957
- if (fragmentId && document2) {
958
- if (linkedFragments) {
959
- linkedFragments.forEach(({ id, document: document22 }) => {
960
- globalManager == null ? void 0 : globalManager.$fragments.createFragmentManager(id, document22);
961
- });
962
- }
963
- return globalManager == null ? void 0 : globalManager.$fragments.createFragmentManager(
964
- fragmentId,
965
- document2
966
- );
967
- }
968
- return null;
969
- };
970
688
  const createSuspenseResource = (key, valueOrPromise, cache) => {
971
689
  if (cache.has(key)) return cache.get(key);
972
690
  if (!(valueOrPromise instanceof Promise)) {
@@ -1122,6 +840,472 @@ const layerFieldSetter = (manager, layerKey, fieldKey, currentValue) => (value,
1122
840
  );
1123
841
  }
1124
842
  };
843
+ const EMPTY_RESOLVED$1 = {
844
+ layerKey: null,
845
+ rawLayer: null,
846
+ layer: null,
847
+ isOverride: false
848
+ };
849
+ const useResolvedLayer = (layerKey, options) => {
850
+ const { manager } = react.useContext(FragmentContext);
851
+ const resultManager = (options == null ? void 0 : options.manager) ?? manager;
852
+ const key = core.keyOfEntity(layerKey);
853
+ react$1.useGraph(resultManager, key);
854
+ if (!resultManager || !key) {
855
+ return EMPTY_RESOLVED$1;
856
+ }
857
+ const rawLayer = resultManager.resolve(key);
858
+ const overrider = getOverrider(resultManager, key);
859
+ const layer = definition.getNormalizeLayer(rawLayer, overrider, options == null ? void 0 : options.withFallback);
860
+ let isOverride = false;
861
+ if (!(options == null ? void 0 : options.skipOverrideCheck)) {
862
+ isOverride = !isPartOfPrimary(resultManager, key);
863
+ }
864
+ return { layerKey: key, rawLayer, layer, isOverride };
865
+ };
866
+ function useForceUpdate() {
867
+ return react.useReducer(() => ({}), {});
868
+ }
869
+ const EMPTY_RESOLVED = {
870
+ values: {},
871
+ cssVariableValues: {},
872
+ rawValues: {}
873
+ };
874
+ const extractVariableValue$1 = (input, variableId) => {
875
+ if (utils.isObject(input)) {
876
+ if (variableId in input) return input[variableId];
877
+ for (const key in input) {
878
+ if (input.hasOwnProperty(key)) {
879
+ const result = extractVariableValue$1(input[key], variableId);
880
+ if (result !== void 0) return result;
881
+ }
882
+ }
883
+ }
884
+ return void 0;
885
+ };
886
+ function deepMerge$1(a, b) {
887
+ if (!utils.isObject(a) || !utils.isObject(b)) return a;
888
+ const result = { ...b };
889
+ for (const [key, value] of Object.entries(a)) {
890
+ if (key in result && typeof result[key] === "object" && typeof value === "object") {
891
+ result[key] = deepMerge$1(value, result[key]);
892
+ } else {
893
+ result[key] = value;
894
+ }
895
+ }
896
+ return result;
897
+ }
898
+ const useResolvedLayerVariables = (layer, rawLayer, customScopes) => {
899
+ var _a;
900
+ const contextScopes = react.useContext(ScopeContext);
901
+ const scopes = customScopes ?? contextScopes;
902
+ const subscriptions = react.useRef([]);
903
+ const [dep, forceUpdate] = useForceUpdate();
904
+ react.useEffect(() => {
905
+ const controller = new AbortController();
906
+ let ready = false;
907
+ const update = () => {
908
+ if (!ready) return;
909
+ forceUpdate();
910
+ };
911
+ for (const { manager, key } of subscriptions.current) {
912
+ manager.subscribe(key, update, { signal: controller.signal });
913
+ }
914
+ ready = true;
915
+ return () => controller.abort();
916
+ });
917
+ if (!layer) {
918
+ subscriptions.current = [];
919
+ return EMPTY_RESOLVED;
920
+ }
921
+ const values = {};
922
+ const cssVariableValues = {};
923
+ const rawValues = {};
924
+ const readVariable = (variableKey) => {
925
+ var _a2, _b, _c;
926
+ const variableId = (_a2 = core.entityOfKey(variableKey)) == null ? void 0 : _a2._id;
927
+ if (!definition.isVariableLink(variableKey)) {
928
+ return { value: null, layer: null };
929
+ }
930
+ let instanceScope = scopes.findLast(
931
+ (scope) => {
932
+ var _a3;
933
+ return (scope == null ? void 0 : scope.type) === definition.definition.scopeTypes.InstanceScope && !!((_a3 = scope.documentManager) == null ? void 0 : _a3.resolve(variableKey));
934
+ }
935
+ );
936
+ if (!instanceScope) {
937
+ instanceScope = scopes.find(
938
+ (scope) => (scope == null ? void 0 : scope.type) === definition.definition.scopeTypes.InstanceScope
939
+ );
940
+ }
941
+ const resolveVariableLayer = (manager, variableLink, customProps) => {
942
+ var _a3, _b2;
943
+ const variableLayer2 = (_a3 = getNormalizeLayer(variableLink, manager)) == null ? void 0 : _a3.layer;
944
+ if (!variableLayer2) return null;
945
+ if ((variableLayer2 == null ? void 0 : variableLayer2.type) === definition.definition.variableType.Array) {
946
+ const definitionLayer = manager.resolve(variableLayer2 == null ? void 0 : variableLayer2.definition);
947
+ if (!((_b2 = variableLayer2 == null ? void 0 : variableLayer2.defaultValue) == null ? void 0 : _b2.length) || (definitionLayer == null ? void 0 : definitionLayer.type) !== definition.definition.variableType.Object)
948
+ return variableLayer2;
949
+ const extractVariableDefaultValue = (mgr, varEntity) => {
950
+ const varLayer = mgr.resolve(varEntity);
951
+ if ((varLayer == null ? void 0 : varLayer.type) !== definition.definition.variableType.Object)
952
+ return varLayer == null ? void 0 : varLayer.defaultValue;
953
+ return Object.values((varLayer == null ? void 0 : varLayer.fields) ?? {}).reduce(
954
+ (acc, fieldLink) => {
955
+ var _a4;
956
+ if (!!fieldLink && definition.isVariableLink(fieldLink)) {
957
+ const _id = (_a4 = core.entityOfKey(fieldLink)) == null ? void 0 : _a4._id;
958
+ if (_id) acc[_id] = extractVariableDefaultValue(mgr, fieldLink);
959
+ }
960
+ return acc;
961
+ },
962
+ {}
963
+ );
964
+ };
965
+ const definitionDefaultValue = extractVariableDefaultValue(
966
+ manager,
967
+ definitionLayer
968
+ );
969
+ const customValue = customProps == null ? void 0 : customProps[variableLayer2 == null ? void 0 : variableLayer2._id];
970
+ return {
971
+ ...variableLayer2,
972
+ defaultValue: variableLayer2.defaultValue.map(
973
+ (item, index) => {
974
+ const customItemValue = Array.isArray(customValue) ? customValue.at(index) : null;
975
+ return deepMerge$1(
976
+ customItemValue ? { ...item, ...customItemValue } : item,
977
+ definitionDefaultValue
978
+ );
979
+ }
980
+ )
981
+ };
982
+ }
983
+ return variableLayer2;
984
+ };
985
+ const variableLayer = resolveVariableLayer(
986
+ instanceScope == null ? void 0 : instanceScope.documentManager,
987
+ variableKey
988
+ );
989
+ if ((instanceScope == null ? void 0 : instanceScope.documentManager) && variableKey) {
990
+ subscriptions.current.push({
991
+ manager: instanceScope.documentManager,
992
+ key: variableKey
993
+ });
994
+ }
995
+ let instanceProp = variableId ? (_b = instanceScope == null ? void 0 : instanceScope.props) == null ? void 0 : _b[variableId] : void 0;
996
+ if (Array.isArray(instanceProp)) {
997
+ instanceProp = instanceProp.map(
998
+ (rawProp, index) => {
999
+ var _a3;
1000
+ return deepMerge$1(rawProp, (_a3 = variableLayer == null ? void 0 : variableLayer.defaultValue) == null ? void 0 : _a3.at(index));
1001
+ }
1002
+ );
1003
+ }
1004
+ const lastCollectionItem = scopes.findLast(
1005
+ (scope) => (scope == null ? void 0 : scope.type) === definition.definition.scopeTypes.CollectionItemScope
1006
+ );
1007
+ resolveVariableLayer(
1008
+ lastCollectionItem == null ? void 0 : lastCollectionItem.manager,
1009
+ lastCollectionItem == null ? void 0 : lastCollectionItem.sourceDefinition,
1010
+ lastCollectionItem == null ? void 0 : lastCollectionItem.value
1011
+ );
1012
+ const collectionItemProp = utils.isPrimitive(lastCollectionItem == null ? void 0 : lastCollectionItem.value) && ((_c = core.entityOfKey(lastCollectionItem == null ? void 0 : lastCollectionItem.sourceDefinition)) == null ? void 0 : _c._id) === variableId ? lastCollectionItem == null ? void 0 : lastCollectionItem.value : extractVariableValue$1(lastCollectionItem == null ? void 0 : lastCollectionItem.value, variableId);
1013
+ const currentValue = variableKey === instanceProp ? null : collectionItemProp ?? instanceProp ?? null;
1014
+ const required = (variableLayer == null ? void 0 : variableLayer.required) ?? false;
1015
+ const defaultValue = (variableLayer == null ? void 0 : variableLayer.defaultValue) ?? null;
1016
+ const resultValue = required ? currentValue : currentValue ?? collectionItemProp ?? defaultValue;
1017
+ if (definition.isVariableLink(resultValue)) {
1018
+ return readVariable(resultValue);
1019
+ }
1020
+ return { value: resultValue, layer: variableLayer };
1021
+ };
1022
+ const resolveField = (fieldPath, value, raw) => {
1023
+ var _a2;
1024
+ rawValues[fieldPath] = raw;
1025
+ if (definition.isVariableLink(value)) {
1026
+ const resolved = readVariable(value);
1027
+ values[fieldPath] = resolved.value ?? value;
1028
+ const variableId = (_a2 = core.entityOfKey(value)) == null ? void 0 : _a2._id;
1029
+ cssVariableValues[fieldPath] = `var(--${variableId}, ${transformCssValue(
1030
+ resolved.value ?? value
1031
+ )})`;
1032
+ } else {
1033
+ values[fieldPath] = value;
1034
+ cssVariableValues[fieldPath] = transformCssValue(value);
1035
+ }
1036
+ };
1037
+ subscriptions.current = [];
1038
+ for (const [field, value] of Object.entries(layer)) {
1039
+ resolveField(field, value, rawLayer == null ? void 0 : rawLayer[field]);
1040
+ if (utils.isObject(value) && !definition.isVariableLink(value)) {
1041
+ for (const [nestedField, nestedValue] of Object.entries(
1042
+ value
1043
+ )) {
1044
+ resolveField(
1045
+ `${field}.${nestedField}`,
1046
+ nestedValue,
1047
+ (_a = rawLayer == null ? void 0 : rawLayer[field]) == null ? void 0 : _a[nestedField]
1048
+ );
1049
+ }
1050
+ }
1051
+ }
1052
+ return { values, cssVariableValues, rawValues };
1053
+ };
1054
+ const useRenderTarget = () => {
1055
+ const renderTarget = react.useContext(RenderTargetContext);
1056
+ return {
1057
+ renderTarget,
1058
+ isCanvas: renderTarget === definition.definition.renderTarget.canvas,
1059
+ isDocument: renderTarget === definition.definition.renderTarget.document
1060
+ };
1061
+ };
1062
+ const useReadVariables = (variableKeys) => {
1063
+ const filterKeys = variableKeys.filter(definition.isVariableLink);
1064
+ const { manager: fragmentManager } = react.useContext(FragmentContext);
1065
+ const { props, innerManager, layerKey } = react.useContext(InstanceContext);
1066
+ const resultManager = innerManager ?? fragmentManager;
1067
+ const variableLayers = react$1.useGraphStack(
1068
+ !!filterKeys.length ? resultManager : null,
1069
+ filterKeys,
1070
+ {
1071
+ selector: (graph) => graph ? utils.pick(graph, "defaultValue", "required") : graph
1072
+ }
1073
+ );
1074
+ return variableLayers.map((layer) => {
1075
+ const { _id: propertyId } = layer ?? {};
1076
+ const currentValue = (props == null ? void 0 : props[propertyId]) ?? null;
1077
+ const required = (layer == null ? void 0 : layer.required) ?? false;
1078
+ const defaultValue = (layer == null ? void 0 : layer.defaultValue) ?? null;
1079
+ const resultValue = required ? currentValue : currentValue ?? defaultValue;
1080
+ return {
1081
+ value: resultValue,
1082
+ layer
1083
+ };
1084
+ });
1085
+ };
1086
+ const extractVariableValue = (input, variableId) => {
1087
+ if (utils.isObject(input)) {
1088
+ if (variableId in input) {
1089
+ return input[variableId];
1090
+ }
1091
+ for (let key in input) {
1092
+ if (input.hasOwnProperty(key)) {
1093
+ const result = extractVariableValue(input[key], variableId);
1094
+ if (result !== void 0) {
1095
+ return result;
1096
+ }
1097
+ }
1098
+ }
1099
+ }
1100
+ return void 0;
1101
+ };
1102
+ function deepMerge(a, b) {
1103
+ if (!utils.isObject(a) || !utils.isObject(b)) return a;
1104
+ const result = { ...b };
1105
+ for (const [key, value] of Object.entries(a)) {
1106
+ if (key in result && typeof result[key] === "object" && typeof value === "object") {
1107
+ result[key] = deepMerge(value, result[key]);
1108
+ } else {
1109
+ result[key] = value;
1110
+ }
1111
+ }
1112
+ return result;
1113
+ }
1114
+ const useReadVariable = (variableKey, customScopes) => {
1115
+ const contextScopes = react.useContext(ScopeContext);
1116
+ const scopes = customScopes ?? contextScopes;
1117
+ const subscriptions = react.useRef([]);
1118
+ const [dep, forceUpdate] = useForceUpdate();
1119
+ react.useEffect(() => {
1120
+ const controller = new AbortController();
1121
+ let ready = false;
1122
+ const update = () => {
1123
+ if (!ready) return;
1124
+ forceUpdate();
1125
+ };
1126
+ for (const { manager, key } of subscriptions.current) {
1127
+ manager.subscribe(key, update, { signal: controller.signal });
1128
+ }
1129
+ ready = true;
1130
+ return () => controller.abort();
1131
+ });
1132
+ const extractVariableDefaultValue = (manager, variableEntity) => {
1133
+ const variableLayer = manager.resolve(variableEntity);
1134
+ if ((variableLayer == null ? void 0 : variableLayer.type) !== definition.definition.variableType.Object)
1135
+ return variableLayer == null ? void 0 : variableLayer.defaultValue;
1136
+ return Object.values((variableLayer == null ? void 0 : variableLayer.fields) ?? {}).reduce(
1137
+ (acc, fieldLink) => {
1138
+ var _a;
1139
+ if (!!fieldLink && definition.isVariableLink(fieldLink)) {
1140
+ const _id = (_a = core.entityOfKey(fieldLink)) == null ? void 0 : _a._id;
1141
+ if (_id) {
1142
+ acc[_id] = extractVariableDefaultValue(manager, fieldLink);
1143
+ }
1144
+ }
1145
+ return acc;
1146
+ },
1147
+ {}
1148
+ );
1149
+ };
1150
+ const resolveVariableLayer = (manager, variableLink, customProps) => {
1151
+ var _a, _b;
1152
+ const variableLayer = (_a = getNormalizeLayer(variableLink, manager)) == null ? void 0 : _a.layer;
1153
+ if (!variableLayer) return null;
1154
+ if ((variableLayer == null ? void 0 : variableLayer.type) === definition.definition.variableType.Array) {
1155
+ const definitionLayer = manager.resolve(variableLayer == null ? void 0 : variableLayer.definition);
1156
+ if (!((_b = variableLayer == null ? void 0 : variableLayer.defaultValue) == null ? void 0 : _b.length) || (definitionLayer == null ? void 0 : definitionLayer.type) !== definition.definition.variableType.Object)
1157
+ return variableLayer;
1158
+ const definitionDefaultValue = extractVariableDefaultValue(
1159
+ manager,
1160
+ definitionLayer
1161
+ );
1162
+ const customValue = customProps == null ? void 0 : customProps[variableLayer == null ? void 0 : variableLayer._id];
1163
+ return {
1164
+ ...variableLayer,
1165
+ defaultValue: (variableLayer == null ? void 0 : variableLayer.defaultValue).map((item, index) => {
1166
+ const customItemValue = Array.isArray(customValue) ? customValue.at(index) : null;
1167
+ return deepMerge(
1168
+ customItemValue ? { ...item, ...customItemValue } : item,
1169
+ definitionDefaultValue
1170
+ );
1171
+ })
1172
+ };
1173
+ }
1174
+ return variableLayer;
1175
+ };
1176
+ const readVariable = (variableKey2) => {
1177
+ var _a, _b, _c;
1178
+ const variableId = (_a = core.entityOfKey(variableKey2)) == null ? void 0 : _a._id;
1179
+ if (!definition.isVariableLink(variableKey2)) {
1180
+ return {
1181
+ value: null,
1182
+ layer: null
1183
+ };
1184
+ }
1185
+ let instanceScope = scopes.findLast(
1186
+ (scope) => {
1187
+ var _a2;
1188
+ return (scope == null ? void 0 : scope.type) === definition.definition.scopeTypes.InstanceScope && !!((_a2 = scope.documentManager) == null ? void 0 : _a2.resolve(variableKey2));
1189
+ }
1190
+ );
1191
+ if (!instanceScope) {
1192
+ instanceScope = scopes.find(
1193
+ (scope) => (scope == null ? void 0 : scope.type) === definition.definition.scopeTypes.InstanceScope
1194
+ );
1195
+ }
1196
+ const variableLayer = resolveVariableLayer(
1197
+ instanceScope == null ? void 0 : instanceScope.documentManager,
1198
+ variableKey2
1199
+ );
1200
+ if ((instanceScope == null ? void 0 : instanceScope.documentManager) && variableKey2) {
1201
+ subscriptions.current.push({
1202
+ manager: instanceScope.documentManager,
1203
+ key: variableKey2
1204
+ });
1205
+ }
1206
+ let instanceProp = (_b = instanceScope == null ? void 0 : instanceScope.props) == null ? void 0 : _b[variableId];
1207
+ if (Array.isArray(instanceProp)) {
1208
+ instanceProp = instanceProp.map(
1209
+ (rawProp, index) => {
1210
+ var _a2;
1211
+ return deepMerge(rawProp, (_a2 = variableLayer == null ? void 0 : variableLayer.defaultValue) == null ? void 0 : _a2.at(index));
1212
+ }
1213
+ );
1214
+ }
1215
+ const lastCollectionItem = scopes.findLast(
1216
+ (scope) => (scope == null ? void 0 : scope.type) === definition.definition.scopeTypes.CollectionItemScope
1217
+ );
1218
+ resolveVariableLayer(
1219
+ lastCollectionItem == null ? void 0 : lastCollectionItem.manager,
1220
+ lastCollectionItem == null ? void 0 : lastCollectionItem.sourceDefinition,
1221
+ lastCollectionItem == null ? void 0 : lastCollectionItem.value
1222
+ );
1223
+ const collectionItemProp = utils.isPrimitive(lastCollectionItem == null ? void 0 : lastCollectionItem.value) && ((_c = core.entityOfKey(lastCollectionItem == null ? void 0 : lastCollectionItem.sourceDefinition)) == null ? void 0 : _c._id) === variableId ? lastCollectionItem == null ? void 0 : lastCollectionItem.value : extractVariableValue(lastCollectionItem == null ? void 0 : lastCollectionItem.value, variableId);
1224
+ const currentValue = variableKey2 === instanceProp ? null : collectionItemProp ?? instanceProp ?? null;
1225
+ const required = (variableLayer == null ? void 0 : variableLayer.required) ?? false;
1226
+ const defaultValue = (variableLayer == null ? void 0 : variableLayer.defaultValue) ?? null;
1227
+ const resultValue = required ? currentValue : currentValue ?? collectionItemProp ?? defaultValue;
1228
+ if (definition.isVariableLink(resultValue)) {
1229
+ return readVariable(resultValue);
1230
+ }
1231
+ return {
1232
+ value: resultValue,
1233
+ layer: variableLayer
1234
+ };
1235
+ };
1236
+ subscriptions.current = [];
1237
+ const result = readVariable(variableKey);
1238
+ return {
1239
+ ...result,
1240
+ readVariable,
1241
+ _dep: dep
1242
+ };
1243
+ };
1244
+ const useLayersValue = (layerKeys, fieldKey, options) => {
1245
+ const { manager: fragmentManager } = react.useContext(FragmentContext);
1246
+ const resultManager = (options == null ? void 0 : options.manager) ?? fragmentManager;
1247
+ if (!resultManager) {
1248
+ return [];
1249
+ }
1250
+ const keys = (layerKeys == null ? void 0 : layerKeys.map(core.keyOfEntity)) ?? [];
1251
+ react$1.useGraphStack(resultManager, keys, {
1252
+ // selector: (data) => (data ? pick(data, fieldKey) : data),
1253
+ });
1254
+ const normalizeLayers = useNormalizeLayers(keys, resultManager, options);
1255
+ const { readVariable } = useReadVariable(null, options == null ? void 0 : options.scopes);
1256
+ return normalizeLayers.map((normalizedLayer) => {
1257
+ var _a, _b;
1258
+ const rawValue = utils.get(normalizedLayer.rawLayer, fieldKey);
1259
+ const layerValue = utils.get(normalizedLayer.layer, fieldKey);
1260
+ const variableValue = (_a = readVariable(layerValue)) == null ? void 0 : _a.value;
1261
+ const currentValue = variableValue ?? layerValue;
1262
+ const isInherit = isInheritField(
1263
+ resultManager,
1264
+ normalizedLayer.layerKey,
1265
+ fieldKey
1266
+ );
1267
+ const isOverride = !isInherit && !isPartOfPrimary(resultManager, normalizedLayer.layerKey);
1268
+ const setter = layerFieldSetter(
1269
+ resultManager,
1270
+ normalizedLayer.layerKey,
1271
+ fieldKey,
1272
+ currentValue
1273
+ );
1274
+ const resetOverride = () => {
1275
+ resultManager.mutate(
1276
+ normalizedLayer.layerKey,
1277
+ (prev) => {
1278
+ const r = utils.omit(prev, fieldKey);
1279
+ return r;
1280
+ },
1281
+ { replace: true }
1282
+ );
1283
+ };
1284
+ const restore = (fallbackValue) => {
1285
+ var _a2, _b2, _c;
1286
+ const tempValue = ((_c = (_b2 = resultManager.resolve((_a2 = resultManager == null ? void 0 : resultManager.$fragment) == null ? void 0 : _a2.temp)) == null ? void 0 : _b2[normalizedLayer.layerKey]) == null ? void 0 : _c[fieldKey]) ?? fallbackValue;
1287
+ return tempValue;
1288
+ };
1289
+ const updateValue = (value, options2) => {
1290
+ setter(value, options2);
1291
+ };
1292
+ const isVariable = definition.isVariableLink(rawValue ?? layerValue);
1293
+ const variableId = isVariable ? (_b = core.entityOfKey(layerValue)) == null ? void 0 : _b._id : null;
1294
+ return [
1295
+ currentValue,
1296
+ updateValue,
1297
+ {
1298
+ isOverride,
1299
+ resetOverride,
1300
+ isVariable,
1301
+ cssVariableValue: isVariable ? `var(--${variableId}, ${transformCssValue(currentValue)})` : transformCssValue(currentValue),
1302
+ rawValue,
1303
+ restore,
1304
+ ...resultManager.entityOfKey(normalizedLayer.layerKey)
1305
+ }
1306
+ ];
1307
+ });
1308
+ };
1125
1309
  const useLayerValue = (layerKey, fieldKey, options) => {
1126
1310
  var _a;
1127
1311
  const { manager: fragmentManager } = react.useContext(FragmentContext);
@@ -1182,12 +1366,107 @@ const useLayerValue = (layerKey, fieldKey, options) => {
1182
1366
  }
1183
1367
  ];
1184
1368
  };
1369
+ const useLayerChildren = (layerKey, customManager) => {
1370
+ const { manager: fragmentManager } = react.useContext(FragmentContext);
1371
+ const [layerData] = react$1.useGraph(customManager ?? fragmentManager, layerKey, {
1372
+ selector: (data) => utils.pick(data, "children")
1373
+ });
1374
+ return (layerData == null ? void 0 : layerData.children) ?? [];
1375
+ };
1376
+ const useLayerScopes = (fragmentManager, layerKey) => {
1377
+ var _a, _b, _c, _d;
1378
+ if (!fragmentManager || !layerKey) return [];
1379
+ const layerParents = getAllParents(fragmentManager, layerKey);
1380
+ const resultScopes = [(_b = (_a = fragmentManager == null ? void 0 : fragmentManager.$scopes) == null ? void 0 : _a.scopes) == null ? void 0 : _b.get(void 0)];
1381
+ layerParents.forEach((parent) => {
1382
+ var _a2, _b2, _c2, _d2;
1383
+ const parentLink = core.keyOfEntity(parent);
1384
+ if ((_b2 = (_a2 = fragmentManager == null ? void 0 : fragmentManager.$scopes) == null ? void 0 : _a2.scopes) == null ? void 0 : _b2.has(parentLink)) {
1385
+ resultScopes.push((_d2 = (_c2 = fragmentManager == null ? void 0 : fragmentManager.$scopes) == null ? void 0 : _c2.scopes) == null ? void 0 : _d2.get(parentLink));
1386
+ }
1387
+ });
1388
+ const areaScope = (_d = (_c = fragmentManager == null ? void 0 : fragmentManager.$scopes) == null ? void 0 : _c.scopes) == null ? void 0 : _d.get("Area");
1389
+ if (areaScope) {
1390
+ resultScopes.push(areaScope);
1391
+ }
1392
+ return resultScopes;
1393
+ };
1394
+ const useLayerLink = (layerKey) => {
1395
+ const { manager: fragmentManager } = react.useContext(FragmentContext);
1396
+ const [link] = useLayerValue(layerKey, "link", fragmentManager);
1397
+ const [href] = useLayerValue(link, "href", fragmentManager);
1398
+ const [isNewTab] = useLayerValue(link, "isNewTab", fragmentManager);
1399
+ const isLink2 = utils.isValue(href) && typeof href === "string" && !!(href == null ? void 0 : href.length);
1400
+ const linkTarget = isNewTab ? "_blank" : "";
1401
+ const linkProps = react.useMemo(() => {
1402
+ if (isLink2) {
1403
+ return {
1404
+ target: linkTarget,
1405
+ href
1406
+ };
1407
+ }
1408
+ return {};
1409
+ }, [linkTarget, href, isLink2]);
1410
+ return {
1411
+ isLink: isLink2,
1412
+ linkHref: href,
1413
+ linkTarget,
1414
+ linkProps
1415
+ };
1416
+ };
1417
+ const useLayerVariableValue = (layerKey, fieldKey, manager) => {
1418
+ const { manager: fragmentManager } = react.useContext(FragmentContext);
1419
+ const resultManager = manager ?? fragmentManager;
1420
+ const [layerValue, updateValue, layerInfo] = useLayerValue(
1421
+ layerKey,
1422
+ fieldKey,
1423
+ resultManager
1424
+ );
1425
+ const { value: instanceValue } = useReadVariable(
1426
+ (layerInfo == null ? void 0 : layerInfo.isVariable) ? layerValue : null
1427
+ );
1428
+ return [
1429
+ (layerInfo == null ? void 0 : layerInfo.isVariable) ? instanceValue : layerValue,
1430
+ updateValue,
1431
+ {
1432
+ ...layerInfo,
1433
+ rawValue: layerValue
1434
+ }
1435
+ ];
1436
+ };
1437
+ const useLayerLinearGradient = (linearGradientLink) => {
1438
+ const [stops] = useLayerValue(linearGradientLink, "stops");
1439
+ const [angle] = useLayerValue(linearGradientLink, "angle");
1440
+ const stopsValue = useLayersValue(stops, "value");
1441
+ const stopsPosition = useLayersValue(stops, "position");
1442
+ const stopValues = react.useMemo(
1443
+ () => (stops == null ? void 0 : stops.flatMap((stop, index) => {
1444
+ var _a, _b, _c;
1445
+ return [
1446
+ (_b = (_a = stopsValue == null ? void 0 : stopsValue.at(index)) == null ? void 0 : _a.at(2)) == null ? void 0 : _b.cssVariableValue,
1447
+ (_c = stopsPosition == null ? void 0 : stopsPosition.at(index)) == null ? void 0 : _c.at(0)
1448
+ ];
1449
+ })) ?? [],
1450
+ [stops, stopsValue, stopsPosition]
1451
+ );
1452
+ return react.useMemo(
1453
+ () => ({
1454
+ "background-image": calcLinearGradient(angle, stopValues)
1455
+ }),
1456
+ [angle, stopValues]
1457
+ );
1458
+ };
1185
1459
  const processOptionalSize = (value, type) => {
1186
1460
  if (value === -1) return "";
1187
1461
  if (type === definition.definition.sizing.Fixed) return utils.toPx(value);
1188
1462
  if (type === definition.definition.sizing.Relative) return `${value}%`;
1189
1463
  return "";
1190
1464
  };
1465
+ const calcOptionalSize = (type, vars) => {
1466
+ const value = vars.values[type];
1467
+ const valueType = vars.values[`${type}Type`];
1468
+ return processOptionalSize(value, valueType);
1469
+ };
1191
1470
  const useOptionalSize = (type, layerKey) => {
1192
1471
  const { manager: fragmentManager } = react.useContext(FragmentContext);
1193
1472
  const [value] = useLayerValue(layerKey, type, fragmentManager);
@@ -1197,6 +1476,14 @@ const useOptionalSize = (type, layerKey) => {
1197
1476
  [valueType, value]
1198
1477
  );
1199
1478
  };
1479
+ const calcLayerSize = (vars) => {
1480
+ return {
1481
+ minWidth: calcOptionalSize("minWidth", vars),
1482
+ minHeight: calcOptionalSize("minHeight", vars),
1483
+ maxWidth: calcOptionalSize("maxWidth", vars),
1484
+ maxHeight: calcOptionalSize("maxHeight", vars)
1485
+ };
1486
+ };
1200
1487
  const useLayerSize = (layerKey) => {
1201
1488
  const { manager } = react.useContext(FragmentContext);
1202
1489
  const minWidth = useOptionalSize("minWidth", layerKey);
@@ -1208,19 +1495,34 @@ const useLayerSize = (layerKey) => {
1208
1495
  // height: heightCalc(heightValue),
1209
1496
  minWidth,
1210
1497
  minHeight,
1211
- maxWidth,
1212
- maxHeight
1213
- };
1214
- };
1215
- const useRenderTarget = () => {
1216
- const renderTarget = react.useContext(RenderTargetContext);
1217
- return {
1218
- renderTarget,
1219
- isCanvas: renderTarget === definition.definition.renderTarget.canvas,
1220
- isDocument: renderTarget === definition.definition.renderTarget.document
1498
+ maxWidth,
1499
+ maxHeight
1221
1500
  };
1222
1501
  };
1223
1502
  const autoSizes = [definition.definition.sizing.Hug];
1503
+ const calcLayerSizeValue = (resolved, vars, sizeType, parentResolved, instanceVars, context) => {
1504
+ const { isDocument, isTopLevel: isTop, instanceLayerKey } = context;
1505
+ const isPartOfInstance = !!instanceLayerKey;
1506
+ const layerNode = resolved.rawLayer;
1507
+ const instanceType = instanceVars.values[`${sizeType}Type`];
1508
+ const valueType = vars.values[`${sizeType}Type`];
1509
+ const growType = sizeType === "width" ? "horizontalGrow" : "verticalGrow";
1510
+ return (value) => {
1511
+ var _a;
1512
+ if (isTop && isDocument && ((_a = parentResolved.layer) == null ? void 0 : _a[growType]) === definition.definition.fragmentGrowingMode.fill) {
1513
+ return "100%";
1514
+ }
1515
+ if (isTop && isPartOfInstance && !autoSizes.includes(instanceType)) {
1516
+ return "100%";
1517
+ }
1518
+ if (autoSizes.includes(valueType)) {
1519
+ return (layerNode == null ? void 0 : layerNode._type) === definition.definition.nodes.Instance ? "auto" : "fit-content";
1520
+ }
1521
+ if (valueType === definition.definition.sizing.Relative) return `${value}%`;
1522
+ if (valueType === definition.definition.sizing.Fill) return `100%`;
1523
+ return utils.toPx(value);
1524
+ };
1525
+ };
1224
1526
  const useLayerSizeValue = (layerKey, sizeType) => {
1225
1527
  const { manager: fragmentManager } = react.useContext(FragmentContext);
1226
1528
  const { layerKey: instanceLayerKey } = react.useContext(InstanceContext$1);
@@ -1275,6 +1577,65 @@ const useLayerSizeValue = (layerKey, sizeType) => {
1275
1577
  ]
1276
1578
  );
1277
1579
  };
1580
+ const calcLayerPosition = (resolved, vars, parentResolved, instanceResolved, instanceVars, context) => {
1581
+ const { isDocument, isTopLevel: isTop, instanceLayerKey } = context;
1582
+ const width = vars.values.width;
1583
+ const height = vars.values.height;
1584
+ const widthCalc = calcLayerSizeValue(
1585
+ resolved,
1586
+ vars,
1587
+ "width",
1588
+ parentResolved,
1589
+ instanceVars,
1590
+ context
1591
+ );
1592
+ const heightCalc = calcLayerSizeValue(
1593
+ resolved,
1594
+ vars,
1595
+ "height",
1596
+ parentResolved,
1597
+ instanceVars,
1598
+ context
1599
+ );
1600
+ const position = vars.values.position;
1601
+ const centerAnchorX = vars.values.centerAnchorX;
1602
+ const centerAnchorY = vars.values.centerAnchorY;
1603
+ const top = vars.values.top;
1604
+ const left = vars.values.left;
1605
+ const right = vars.values.right;
1606
+ const bottom = vars.values.bottom;
1607
+ const skipPosition = isTop && isDocument || !!instanceLayerKey && isTop;
1608
+ if (isTop && !skipPosition) {
1609
+ return {
1610
+ position: definition.definition.positionType.absolute,
1611
+ top: utils.toPx(top),
1612
+ left: utils.toPx(left),
1613
+ width,
1614
+ height
1615
+ };
1616
+ }
1617
+ if (position === definition.definition.positionType.relative || skipPosition) {
1618
+ return {
1619
+ position: definition.definition.positionType.relative,
1620
+ width: widthCalc(width),
1621
+ height: heightCalc(height)
1622
+ };
1623
+ }
1624
+ const hasConstrainX = utils.isFiniteNumber(left) && utils.isFiniteNumber(right);
1625
+ const hasConstrainY = utils.isFiniteNumber(top) && utils.isFiniteNumber(bottom);
1626
+ const hasAnyConstrainX = utils.isFiniteNumber(left) || utils.isFiniteNumber(right);
1627
+ const hasAnyConstrainY = utils.isFiniteNumber(top) || utils.isFiniteNumber(bottom);
1628
+ return {
1629
+ position,
1630
+ left: utils.isFiniteNumber(left) ? utils.toPx(left) : !utils.isFiniteNumber(right) ? `${centerAnchorX * 100}%` : null,
1631
+ top: utils.isFiniteNumber(top) ? utils.toPx(top) : !utils.isFiniteNumber(bottom) ? `${centerAnchorY * 100}%` : null,
1632
+ right: utils.isFiniteNumber(right) ? utils.toPx(right) : null,
1633
+ bottom: utils.isFiniteNumber(bottom) ? utils.toPx(bottom) : null,
1634
+ width: hasConstrainX ? null : widthCalc(width),
1635
+ height: hasConstrainY ? null : heightCalc(height),
1636
+ transform: !hasAnyConstrainX || !hasAnyConstrainY ? `translate3d(${!hasAnyConstrainX ? "-50%" : 0}, ${!hasAnyConstrainY ? "-50%" : 0}, 0px)` : null
1637
+ };
1638
+ };
1278
1639
  const useLayerPosition = (layerKey) => {
1279
1640
  const { layerKey: instanceLayerKey } = react.useContext(InstanceContext$1);
1280
1641
  const { manager: fragmentManager } = react.useContext(FragmentContext);
@@ -1323,6 +1684,14 @@ const useLayerPosition = (layerKey) => {
1323
1684
  transform: !hasAnyConstrainX || !hasAnyConstrainY ? `translate3d(${!hasAnyConstrainX ? "-50%" : 0}, ${!hasAnyConstrainY ? "-50%" : 0}, 0px)` : null
1324
1685
  };
1325
1686
  };
1687
+ const calcImagePaint = (imageVars) => {
1688
+ var _a, _b;
1689
+ return {
1690
+ background: imageVars.cssVariableValues.src,
1691
+ backgroundRepeat: "no-repeat",
1692
+ backgroundSize: (_b = (_a = imageVars.values.scale) == null ? void 0 : _a.toLowerCase) == null ? void 0 : _b.call(_a)
1693
+ };
1694
+ };
1326
1695
  const useImagePaint = (imageLinkKey) => {
1327
1696
  var _a;
1328
1697
  const { manager: fragmentManager } = react.useContext(FragmentContext);
@@ -1334,184 +1703,24 @@ const useImagePaint = (imageLinkKey) => {
1334
1703
  backgroundSize: (_a = scale == null ? void 0 : scale.toLowerCase) == null ? void 0 : _a.call(scale)
1335
1704
  };
1336
1705
  };
1337
- const useReadVariables = (variableKeys) => {
1338
- const filterKeys = variableKeys.filter(definition.isVariableLink);
1339
- const { manager: fragmentManager } = react.useContext(FragmentContext);
1340
- const { props, innerManager, layerKey } = react.useContext(InstanceContext);
1341
- const resultManager = innerManager ?? fragmentManager;
1342
- const variableLayers = react$1.useGraphStack(
1343
- !!filterKeys.length ? resultManager : null,
1344
- filterKeys,
1345
- {
1346
- selector: (graph) => graph ? utils.pick(graph, "defaultValue", "required") : graph
1347
- }
1348
- );
1349
- return variableLayers.map((layer) => {
1350
- const { _id: propertyId } = layer ?? {};
1351
- const currentValue = (props == null ? void 0 : props[propertyId]) ?? null;
1352
- const required = (layer == null ? void 0 : layer.required) ?? false;
1353
- const defaultValue = (layer == null ? void 0 : layer.defaultValue) ?? null;
1354
- const resultValue = required ? currentValue : currentValue ?? defaultValue;
1706
+ const calcLayerBackground = (paintVars, imageVars, imageSizeVars, linearGradient) => {
1707
+ const fillType = paintVars.values.type;
1708
+ const cssSolidFill = paintVars.cssVariableValues.solid;
1709
+ const cssImageSize = imageSizeVars.cssVariableValues.imageSize;
1710
+ if (fillType === definition.definition.paintMode.Solid) {
1711
+ return { background: cssSolidFill };
1712
+ }
1713
+ if (fillType === definition.definition.paintMode.Image) {
1714
+ const image = calcImagePaint(imageVars);
1355
1715
  return {
1356
- value: resultValue,
1357
- layer
1716
+ ...image,
1717
+ backgroundSize: cssImageSize ?? image.backgroundSize
1358
1718
  };
1359
- });
1360
- };
1361
- const useLayersValue = (layerKeys, fieldKey, options) => {
1362
- const { manager: fragmentManager } = react.useContext(FragmentContext);
1363
- const resultManager = (options == null ? void 0 : options.manager) ?? fragmentManager;
1364
- if (!resultManager) {
1365
- return [];
1366
1719
  }
1367
- const keys = (layerKeys == null ? void 0 : layerKeys.map(core.keyOfEntity)) ?? [];
1368
- react$1.useGraphStack(resultManager, keys, {
1369
- // selector: (data) => (data ? pick(data, fieldKey) : data),
1370
- });
1371
- const normalizeLayers = useNormalizeLayers(keys, resultManager, options);
1372
- const { readVariable } = useReadVariable(null, options == null ? void 0 : options.scopes);
1373
- return normalizeLayers.map((normalizedLayer) => {
1374
- var _a, _b;
1375
- const rawValue = utils.get(normalizedLayer.rawLayer, fieldKey);
1376
- const layerValue = utils.get(normalizedLayer.layer, fieldKey);
1377
- const variableValue = (_a = readVariable(layerValue)) == null ? void 0 : _a.value;
1378
- const currentValue = variableValue ?? layerValue;
1379
- const isInherit = isInheritField(
1380
- resultManager,
1381
- normalizedLayer.layerKey,
1382
- fieldKey
1383
- );
1384
- const isOverride = !isInherit && !isPartOfPrimary(resultManager, normalizedLayer.layerKey);
1385
- const setter = layerFieldSetter(
1386
- resultManager,
1387
- normalizedLayer.layerKey,
1388
- fieldKey,
1389
- currentValue
1390
- );
1391
- const resetOverride = () => {
1392
- resultManager.mutate(
1393
- normalizedLayer.layerKey,
1394
- (prev) => {
1395
- const r = utils.omit(prev, fieldKey);
1396
- return r;
1397
- },
1398
- { replace: true }
1399
- );
1400
- };
1401
- const restore = (fallbackValue) => {
1402
- var _a2, _b2, _c;
1403
- const tempValue = ((_c = (_b2 = resultManager.resolve((_a2 = resultManager == null ? void 0 : resultManager.$fragment) == null ? void 0 : _a2.temp)) == null ? void 0 : _b2[normalizedLayer.layerKey]) == null ? void 0 : _c[fieldKey]) ?? fallbackValue;
1404
- return tempValue;
1405
- };
1406
- const updateValue = (value, options2) => {
1407
- setter(value, options2);
1408
- };
1409
- const isVariable = definition.isVariableLink(rawValue ?? layerValue);
1410
- const variableId = isVariable ? (_b = core.entityOfKey(layerValue)) == null ? void 0 : _b._id : null;
1411
- return [
1412
- currentValue,
1413
- updateValue,
1414
- {
1415
- isOverride,
1416
- resetOverride,
1417
- isVariable,
1418
- cssVariableValue: isVariable ? `var(--${variableId}, ${transformCssValue(currentValue)})` : transformCssValue(currentValue),
1419
- rawValue,
1420
- restore,
1421
- ...resultManager.entityOfKey(normalizedLayer.layerKey)
1422
- }
1423
- ];
1424
- });
1425
- };
1426
- const useLayerChildren = (layerKey, customManager) => {
1427
- const { manager: fragmentManager } = react.useContext(FragmentContext);
1428
- const [layerData] = react$1.useGraph(customManager ?? fragmentManager, layerKey, {
1429
- selector: (data) => utils.pick(data, "children")
1430
- });
1431
- return (layerData == null ? void 0 : layerData.children) ?? [];
1432
- };
1433
- const useLayerScopes = (fragmentManager, layerKey) => {
1434
- var _a, _b, _c, _d;
1435
- if (!fragmentManager || !layerKey) return [];
1436
- const layerParents = getAllParents(fragmentManager, layerKey);
1437
- const resultScopes = [(_b = (_a = fragmentManager == null ? void 0 : fragmentManager.$scopes) == null ? void 0 : _a.scopes) == null ? void 0 : _b.get(void 0)];
1438
- layerParents.forEach((parent) => {
1439
- var _a2, _b2, _c2, _d2;
1440
- const parentLink = core.keyOfEntity(parent);
1441
- if ((_b2 = (_a2 = fragmentManager == null ? void 0 : fragmentManager.$scopes) == null ? void 0 : _a2.scopes) == null ? void 0 : _b2.has(parentLink)) {
1442
- resultScopes.push((_d2 = (_c2 = fragmentManager == null ? void 0 : fragmentManager.$scopes) == null ? void 0 : _c2.scopes) == null ? void 0 : _d2.get(parentLink));
1443
- }
1444
- });
1445
- const areaScope = (_d = (_c = fragmentManager == null ? void 0 : fragmentManager.$scopes) == null ? void 0 : _c.scopes) == null ? void 0 : _d.get("Area");
1446
- if (areaScope) {
1447
- resultScopes.push(areaScope);
1720
+ if (fillType === definition.definition.paintMode.LinearGradient) {
1721
+ return linearGradient;
1448
1722
  }
1449
- return resultScopes;
1450
- };
1451
- const useLayerLink = (layerKey) => {
1452
- const { manager: fragmentManager } = react.useContext(FragmentContext);
1453
- const [link] = useLayerValue(layerKey, "link", fragmentManager);
1454
- const [href] = useLayerValue(link, "href", fragmentManager);
1455
- const [isNewTab] = useLayerValue(link, "isNewTab", fragmentManager);
1456
- const isLink2 = utils.isValue(href) && typeof href === "string" && !!(href == null ? void 0 : href.length);
1457
- const linkTarget = isNewTab ? "_blank" : "";
1458
- const linkProps = react.useMemo(() => {
1459
- if (isLink2) {
1460
- return {
1461
- target: linkTarget,
1462
- href
1463
- };
1464
- }
1465
- return {};
1466
- }, [linkTarget, href, isLink2]);
1467
- return {
1468
- isLink: isLink2,
1469
- linkHref: href,
1470
- linkTarget,
1471
- linkProps
1472
- };
1473
- };
1474
- const useLayerVariableValue = (layerKey, fieldKey, manager) => {
1475
- const { manager: fragmentManager } = react.useContext(FragmentContext);
1476
- const resultManager = manager ?? fragmentManager;
1477
- const [layerValue, updateValue, layerInfo] = useLayerValue(
1478
- layerKey,
1479
- fieldKey,
1480
- resultManager
1481
- );
1482
- const { value: instanceValue } = useReadVariable(
1483
- (layerInfo == null ? void 0 : layerInfo.isVariable) ? layerValue : null
1484
- );
1485
- return [
1486
- (layerInfo == null ? void 0 : layerInfo.isVariable) ? instanceValue : layerValue,
1487
- updateValue,
1488
- {
1489
- ...layerInfo,
1490
- rawValue: layerValue
1491
- }
1492
- ];
1493
- };
1494
- const useLayerLinearGradient = (linearGradientLink) => {
1495
- const [stops] = useLayerValue(linearGradientLink, "stops");
1496
- const [angle] = useLayerValue(linearGradientLink, "angle");
1497
- const stopsValue = useLayersValue(stops, "value");
1498
- const stopsPosition = useLayersValue(stops, "position");
1499
- const stopValues = react.useMemo(
1500
- () => (stops == null ? void 0 : stops.flatMap((stop, index) => {
1501
- var _a, _b, _c;
1502
- return [
1503
- (_b = (_a = stopsValue == null ? void 0 : stopsValue.at(index)) == null ? void 0 : _a.at(2)) == null ? void 0 : _b.cssVariableValue,
1504
- (_c = stopsPosition == null ? void 0 : stopsPosition.at(index)) == null ? void 0 : _c.at(0)
1505
- ];
1506
- })) ?? [],
1507
- [stops, stopsValue, stopsPosition]
1508
- );
1509
- return react.useMemo(
1510
- () => ({
1511
- "background-image": calcLinearGradient(angle, stopValues)
1512
- }),
1513
- [angle, stopValues]
1514
- );
1723
+ return { background: null };
1515
1724
  };
1516
1725
  const useLayerBackground = (layerKey) => {
1517
1726
  const { manager: fragmentManager } = react.useContext(FragmentContext);
@@ -1558,6 +1767,12 @@ const useLayerBackground = (layerKey) => {
1558
1767
  linearGradient
1559
1768
  ]);
1560
1769
  };
1770
+ const calcLayerDisplay = (vars) => {
1771
+ const layerModeValue = vars.values.layerMode;
1772
+ const visible = vars.values.visible;
1773
+ if (!visible) return "none";
1774
+ return layerModeValue === definition.definition.layerMode.flex ? "flex" : null;
1775
+ };
1561
1776
  const useLayerDisplay = (layerKey) => {
1562
1777
  const { manager } = react.useContext(FragmentContext);
1563
1778
  const [layerModeValue] = useLayerValue(layerKey, "layerMode", manager);
@@ -1569,6 +1784,15 @@ const useLayerDisplay = (layerKey) => {
1569
1784
  return layerModeValue === definition.definition.layerMode.flex ? "flex" : null;
1570
1785
  }, [layerModeValue, visible]);
1571
1786
  };
1787
+ const calcLayerPaint = (paintVars) => {
1788
+ return {
1789
+ type: paintVars.values.type,
1790
+ solid: paintVars.values.solid,
1791
+ solidCssValue: paintVars.cssVariableValues.solid,
1792
+ image: paintVars.values.image,
1793
+ linearGradientLink: paintVars.values.linearGradient
1794
+ };
1795
+ };
1572
1796
  const useLayerPaint = (paintLinkKey) => {
1573
1797
  const [type] = useLayerValue(paintLinkKey, "type");
1574
1798
  const [solid, , solidInfo] = useLayerValue(paintLinkKey, "solid");
@@ -1582,6 +1806,36 @@ const useLayerPaint = (paintLinkKey) => {
1582
1806
  linearGradientLink
1583
1807
  };
1584
1808
  };
1809
+ const calcLayerBorder = (borderVars, borderPaintVars, borderLinearGradient, paintVars, linearGradient) => {
1810
+ const type = borderVars.values.type;
1811
+ const width = borderVars.values.width;
1812
+ const borderPaint = calcLayerPaint(borderPaintVars);
1813
+ const paint = calcLayerPaint(paintVars);
1814
+ if (type === definition.definition.borderType.None) {
1815
+ return { border: null };
1816
+ }
1817
+ if (borderPaint.type === definition.definition.paintMode.LinearGradient) {
1818
+ let background = `linear-gradient(${paint.solid}, ${paint.solid}) padding-box, ${borderLinearGradient == null ? void 0 : borderLinearGradient["background-image"]} border-box`;
1819
+ if (paint.type === definition.definition.paintMode.LinearGradient) {
1820
+ background = `${linearGradient == null ? void 0 : linearGradient["background-image"]} padding-box, ${borderLinearGradient == null ? void 0 : borderLinearGradient["background-image"]} border-box`;
1821
+ }
1822
+ if (paint.type === definition.definition.paintMode.None) {
1823
+ background = `linear-gradient(transparent, transparent) padding-box, ${borderLinearGradient == null ? void 0 : borderLinearGradient["background-image"]} border-box`;
1824
+ }
1825
+ return {
1826
+ ...calcBorderSides(
1827
+ type,
1828
+ width,
1829
+ borderPaint.type === definition.definition.paintMode.Solid ? borderPaint.solid : "transparent"
1830
+ ),
1831
+ background
1832
+ };
1833
+ }
1834
+ if (borderPaint.type === definition.definition.paintMode.Solid) {
1835
+ return calcBorderSides(type, width, borderPaint.solidCssValue);
1836
+ }
1837
+ return { border: null };
1838
+ };
1585
1839
  const useLayerBorder = (layerKey) => {
1586
1840
  var _a, _b;
1587
1841
  const [borderLinkKey] = useLayerValue(layerKey, "border");
@@ -1622,6 +1876,28 @@ const useLayerBorder = (layerKey) => {
1622
1876
  }
1623
1877
  return { border: null };
1624
1878
  };
1879
+ const calcLayerLayout = (vars) => {
1880
+ const layerModeValue = vars.values.layerMode;
1881
+ const layerWrap = vars.values.layerWrap;
1882
+ const layerDistribute = vars.values.layerDistribute;
1883
+ const layerDirectionValue = vars.values.layerDirection;
1884
+ const layerAlign = vars.values.layerAlign;
1885
+ const padding = vars.values.padding;
1886
+ const gap = vars.values.layerGap;
1887
+ const isFlex = layerModeValue === definition.definition.layerMode.flex;
1888
+ const baseFlow = layerDirectionValue === definition.definition.layerDirection.vertical ? "column" : "row";
1889
+ const wrap = isFlex ? layerWrap ? "wrap" : null : null;
1890
+ const flexFlow = [baseFlow, wrap].filter(Boolean).join(" ");
1891
+ return {
1892
+ display: isFlex ? "flex" : null,
1893
+ gap: utils.toPx(gap),
1894
+ flexWrap: isFlex ? layerWrap ? "wrap" : null : null,
1895
+ justifyContent: isFlex ? layerDistribute : null,
1896
+ flexFlow,
1897
+ alignItems: isFlex ? layerAlign : null,
1898
+ padding: isFlex ? padding : null
1899
+ };
1900
+ };
1625
1901
  const useLayerLayout = (layerKey) => {
1626
1902
  const { manager: fragmentManager } = react.useContext(FragmentContext);
1627
1903
  const [layerModeValue] = useLayerValue(
@@ -1657,6 +1933,15 @@ const useLayerLayout = (layerKey) => {
1657
1933
  padding: isFlex ? padding : null
1658
1934
  };
1659
1935
  };
1936
+ const calcLayerTextStyles = (vars) => {
1937
+ const attributes = vars.values.attributes;
1938
+ const color = vars.values["attributes.color"];
1939
+ const cleanAttributes = utils.omit(attributes, "_id", "_type");
1940
+ return {
1941
+ ...cleanAttributes,
1942
+ color
1943
+ };
1944
+ };
1660
1945
  const useLayerTextStyles = (layerKey) => {
1661
1946
  const { manager: fragmentManager } = react.useContext(FragmentContext);
1662
1947
  const [attributes] = useLayerValue(layerKey, "attributes", fragmentManager);
@@ -1667,6 +1952,15 @@ const useLayerTextStyles = (layerKey) => {
1667
1952
  color
1668
1953
  };
1669
1954
  };
1955
+ const calcLayerFlex = (vars, parentVars) => {
1956
+ const widthType = vars.values.widthType;
1957
+ const heightType = vars.values.heightType;
1958
+ const layerDirectionValue = parentVars.values.layerDirection;
1959
+ const type = layerDirectionValue === definition.definition.layerDirection.horizontal ? widthType : heightType;
1960
+ return {
1961
+ flex: type === definition.definition.sizing.Fill ? "1 0 0" : "0 0 auto"
1962
+ };
1963
+ };
1670
1964
  const useLayerFlex = (layerKey) => {
1671
1965
  const { manager } = react.useContext(FragmentContext);
1672
1966
  const [widthType] = useLayerValue(layerKey, "widthType", manager);
@@ -1682,48 +1976,121 @@ const useLayerFlex = (layerKey) => {
1682
1976
  flex: type === definition.definition.sizing.Fill ? "1 0 0" : "0 0 auto"
1683
1977
  };
1684
1978
  };
1979
+ const SKIP_OVERRIDE = { skipOverrideCheck: true };
1685
1980
  const useLayerStyles = (layerKey) => {
1686
1981
  try {
1687
- if (!layerKey) {
1688
- throw new Error("Empty layer key");
1689
- }
1982
+ if (!layerKey) throw new Error("Empty layer key");
1690
1983
  const { manager: fragmentManager } = react.useContext(FragmentContext);
1691
- const [opacity] = useLayerValue(layerKey, "opacity", fragmentManager);
1692
- const layerSize = useLayerSize(layerKey);
1693
- const position = useLayerPosition(layerKey);
1694
- const layerFlex = useLayerFlex(layerKey);
1695
- const display = useLayerDisplay(layerKey);
1696
- const background = useLayerBackground(layerKey);
1697
- const border = useLayerBorder(layerKey);
1698
- const layout = useLayerLayout(layerKey);
1699
- const [zIndex] = useLayerValue(layerKey, "zIndex", fragmentManager);
1700
- const [rotate] = useLayerValue(layerKey, "rotate", fragmentManager);
1701
- const [borderRadius, , { rawValue: rawBorderRadius }] = useLayerValue(
1702
- layerKey,
1703
- "borderRadius",
1704
- fragmentManager
1984
+ const { layerKey: instanceLayerKey } = react.useContext(InstanceContext$1);
1985
+ const { isDocument } = useRenderTarget();
1986
+ const resolved = useResolvedLayer(layerKey);
1987
+ const vars = useResolvedLayerVariables(resolved.layer, resolved.rawLayer);
1988
+ const paintResolved = useResolvedLayer(vars.values.paint, SKIP_OVERRIDE);
1989
+ const paintVars = useResolvedLayerVariables(
1990
+ paintResolved.layer,
1991
+ paintResolved.rawLayer
1992
+ );
1993
+ const borderResolved = useResolvedLayer(vars.values.border, SKIP_OVERRIDE);
1994
+ const borderVars = useResolvedLayerVariables(
1995
+ borderResolved.layer,
1996
+ borderResolved.rawLayer
1997
+ );
1998
+ const borderPaintResolved = useResolvedLayer(
1999
+ borderVars.values.paint,
2000
+ SKIP_OVERRIDE
2001
+ );
2002
+ const borderPaintVars = useResolvedLayerVariables(
2003
+ borderPaintResolved.layer,
2004
+ borderPaintResolved.rawLayer
2005
+ );
2006
+ const imageResolved = useResolvedLayer(
2007
+ paintVars.values.image,
2008
+ SKIP_OVERRIDE
2009
+ );
2010
+ const imageVars = useResolvedLayerVariables(
2011
+ imageResolved.layer,
2012
+ imageResolved.rawLayer
2013
+ );
2014
+ const imageSizeLayerKey = definition.isVariableLink(paintVars.rawValues.image) ? paintVars.rawValues.image : layerKey;
2015
+ const imageSizeResolved = useResolvedLayer(
2016
+ imageSizeLayerKey,
2017
+ SKIP_OVERRIDE
2018
+ );
2019
+ const imageSizeVars = useResolvedLayerVariables(
2020
+ imageSizeResolved.layer,
2021
+ imageSizeResolved.rawLayer
2022
+ );
2023
+ const parentLayerKey = core.keyOfEntity(
2024
+ getParent(fragmentManager, layerKey)
2025
+ );
2026
+ const parentResolved = useResolvedLayer(
2027
+ parentLayerKey,
2028
+ SKIP_OVERRIDE
2029
+ );
2030
+ const parentVars = useResolvedLayerVariables(
2031
+ parentResolved.layer,
2032
+ parentResolved.rawLayer
2033
+ );
2034
+ const instanceResolved = useResolvedLayer(
2035
+ instanceLayerKey,
2036
+ SKIP_OVERRIDE
2037
+ );
2038
+ const instanceVars = useResolvedLayerVariables(
2039
+ instanceResolved.layer,
2040
+ instanceResolved.rawLayer
2041
+ );
2042
+ const paint = calcLayerPaint(paintVars);
2043
+ const borderPaint = calcLayerPaint(borderPaintVars);
2044
+ const linearGradient = useLayerLinearGradient(paint.linearGradientLink);
2045
+ const borderLinearGradient = useLayerLinearGradient(
2046
+ borderPaint.linearGradientLink
2047
+ );
2048
+ const context = {
2049
+ isDocument,
2050
+ isTopLevel: isTopLevel(fragmentManager, layerKey),
2051
+ instanceLayerKey
2052
+ };
2053
+ const layerSize = calcLayerSize(vars);
2054
+ const position = calcLayerPosition(
2055
+ resolved,
2056
+ vars,
2057
+ parentResolved,
2058
+ instanceResolved,
2059
+ instanceVars,
2060
+ context
2061
+ );
2062
+ const background = calcLayerBackground(
2063
+ paintVars,
2064
+ imageVars,
2065
+ imageSizeVars,
2066
+ linearGradient
2067
+ );
2068
+ const display = calcLayerDisplay(vars);
2069
+ const border = calcLayerBorder(
2070
+ borderVars,
2071
+ borderPaintVars,
2072
+ borderLinearGradient,
2073
+ paintVars,
2074
+ linearGradient
1705
2075
  );
1706
- const [whiteSpace] = useLayerValue(layerKey, "whiteSpace", fragmentManager);
1707
- const textStyles = useLayerTextStyles(layerKey);
1708
- const [overflow] = useLayerValue(layerKey, "overflow", fragmentManager);
2076
+ const layout = calcLayerLayout(vars);
2077
+ const textStyles = calcLayerTextStyles(vars);
2078
+ const layerFlex = calcLayerFlex(vars, parentVars);
1709
2079
  return {
1710
- // ...(props ?? {}),
1711
2080
  ...background,
1712
2081
  ...border,
1713
2082
  ...position,
1714
- opacity,
1715
- overflow,
1716
- rotate: utils.isValue(rotate) ? `${rotate}deg` : null,
1717
- "border-radius": utils.isValue(rawBorderRadius) ? borderRadius : null,
1718
- "white-space": whiteSpace,
1719
- "z-index": zIndex !== -1 ? zIndex : null,
2083
+ opacity: vars.values.opacity,
2084
+ overflow: vars.values.overflow,
2085
+ rotate: utils.isValue(vars.values.rotate) ? `${vars.values.rotate}deg` : null,
2086
+ "border-radius": utils.isValue(vars.rawValues.borderRadius) ? vars.values.borderRadius : null,
2087
+ "white-space": vars.values.whiteSpace,
2088
+ "z-index": vars.values.zIndex !== -1 ? vars.values.zIndex : null,
1720
2089
  ...layout,
1721
2090
  ...layerSize,
1722
2091
  ...textStyles,
1723
2092
  ...layerFlex,
1724
2093
  display
1725
- // "user-select": "none",
1726
- // ...cssOverride,
1727
2094
  };
1728
2095
  } catch (e) {
1729
2096
  return {};
@@ -1828,6 +2195,34 @@ const useStyleSheet = (manager) => {
1828
2195
  unmount: ((_b = manager == null ? void 0 : manager.$styleSheet) == null ? void 0 : _b.unmount) ?? utils.noop
1829
2196
  };
1830
2197
  };
2198
+ const useGlobalManager = (globalManager) => {
2199
+ var _a, _b;
2200
+ const currentGlobalManager = react.useContext(GlobalManagerContext);
2201
+ const resultManager = globalManager ?? currentGlobalManager;
2202
+ const [fragmentsGraph] = react$1.useGraph(
2203
+ resultManager,
2204
+ (_a = resultManager == null ? void 0 : resultManager.$fragments) == null ? void 0 : _a.key
2205
+ );
2206
+ const queryFragmentManager = (id) => {
2207
+ var _a2, _b2;
2208
+ return (_b2 = (_a2 = resultManager == null ? void 0 : resultManager.$load) == null ? void 0 : _a2.loadFragment) == null ? void 0 : _b2.call(_a2, id);
2209
+ };
2210
+ const queryArea = (id) => {
2211
+ var _a2, _b2;
2212
+ return (_b2 = (_a2 = resultManager == null ? void 0 : resultManager.$load) == null ? void 0 : _a2.loadArea) == null ? void 0 : _b2.call(_a2, id);
2213
+ };
2214
+ const setRenderTarget = (value) => {
2215
+ resultManager == null ? void 0 : resultManager.setRenderTarget(value);
2216
+ };
2217
+ return {
2218
+ fragmentsGraph,
2219
+ manager: resultManager,
2220
+ queryFragmentManager,
2221
+ queryArea,
2222
+ getFragmentManager: ((_b = resultManager == null ? void 0 : resultManager.$fragments) == null ? void 0 : _b.getManager) ?? utils.noop,
2223
+ setRenderTarget
2224
+ };
2225
+ };
1831
2226
  const useLayerInteractions = (layerKey, options) => {
1832
2227
  const pause = (options == null ? void 0 : options.pauseInteractions) ?? false;
1833
2228
  const { manager: globalManager } = useGlobalManager();
@@ -1852,12 +2247,14 @@ const useLayerInteractions = (layerKey, options) => {
1852
2247
  });
1853
2248
  const fireEvent = react.useCallback(
1854
2249
  (eventLink) => {
1855
- var _a, _b, _c, _d, _e, _f, _g;
2250
+ var _a, _b, _c, _d, _e, _f, _g, _h;
1856
2251
  const eventType = (_a = core.entityOfKey(eventLink)) == null ? void 0 : _a._type;
1857
2252
  const eventValue = (_b = getNormalizeLayer(eventLink, fragmentManager)) == null ? void 0 : _b.layer;
2253
+ console.log(scopes, eventLink, eventType, eventValue);
1858
2254
  if (eventType === definition.definition.nodes.GoalEvent && (eventValue == null ? void 0 : eventValue.goalId)) {
1859
2255
  if (!areaScope) return null;
1860
- (_d = (_c = globalManager == null ? void 0 : globalManager.$metrics) == null ? void 0 : _c.reachGoal) == null ? void 0 : _d.call(_c, {
2256
+ console.log((_c = globalManager == null ? void 0 : globalManager.$metrics) == null ? void 0 : _c.reachGoal);
2257
+ (_e = (_d = globalManager == null ? void 0 : globalManager.$metrics) == null ? void 0 : _d.reachGoal) == null ? void 0 : _e.call(_d, {
1861
2258
  goalId: eventValue == null ? void 0 : eventValue.goalId,
1862
2259
  ...utils.pick(areaScope, "variantId", "campaignId", "areaId")
1863
2260
  });
@@ -1865,10 +2262,10 @@ const useLayerInteractions = (layerKey, options) => {
1865
2262
  if (eventType === definition.definition.nodes.MutateEvent) {
1866
2263
  const target = eventValue == null ? void 0 : eventValue.target;
1867
2264
  const targetLayer = getNormalizeLayer(target, fragmentManager);
1868
- const value = (eventValue == null ? void 0 : eventValue.value) ?? ((_e = targetLayer == null ? void 0 : targetLayer.layer) == null ? void 0 : _e.defaultValue);
2265
+ const value = (eventValue == null ? void 0 : eventValue.value) ?? ((_f = targetLayer == null ? void 0 : targetLayer.layer) == null ? void 0 : _f.defaultValue);
1869
2266
  if (definition.isVariableLink(target) && utils.isValue(value)) {
1870
- const targetId = (_f = core.entityOfKey(target)) == null ? void 0 : _f._id;
1871
- (_g = instanceScope == null ? void 0 : instanceScope.onChangeProps) == null ? void 0 : _g.call(instanceScope, targetId, value);
2267
+ const targetId = (_g = core.entityOfKey(target)) == null ? void 0 : _g._id;
2268
+ (_h = instanceScope == null ? void 0 : instanceScope.onChangeProps) == null ? void 0 : _h.call(instanceScope, targetId, value);
1872
2269
  }
1873
2270
  }
1874
2271
  },
@@ -2075,52 +2472,249 @@ const useCollection = (layerKey, options) => {
2075
2472
  ...frame
2076
2473
  };
2077
2474
  };
2078
- const collectLeafFieldKeys = (objectVar, manager, keys) => {
2079
- if (!(objectVar == null ? void 0 : objectVar.fields)) return;
2080
- const fields = utils.cleanGraph(objectVar.fields);
2081
- for (const fieldValue of Object.values(fields)) {
2082
- let fieldVar;
2083
- let fieldKey;
2084
- if (definition.isVariableLink(fieldValue)) {
2085
- fieldKey = fieldValue;
2086
- fieldVar = manager.resolve(fieldKey);
2087
- } else if (utils.isObject(fieldValue) && (fieldValue == null ? void 0 : fieldValue._type) && (fieldValue == null ? void 0 : fieldValue._id)) {
2088
- fieldKey = core.keyOfEntity(fieldValue);
2089
- fieldVar = fieldValue;
2090
- }
2475
+ const resolveFieldRef = (field, manager) => {
2476
+ if (definition.isVariableLink(field)) {
2477
+ return manager.resolve(field);
2478
+ }
2479
+ if (utils.isObject(field) && (field == null ? void 0 : field._id)) {
2480
+ return field;
2481
+ }
2482
+ return void 0;
2483
+ };
2484
+ const fieldRefToKey = (field) => {
2485
+ if (definition.isVariableLink(field)) {
2486
+ return field;
2487
+ }
2488
+ if (utils.isObject(field) && (field == null ? void 0 : field._type) && (field == null ? void 0 : field._id)) {
2489
+ return core.keyOfEntity(field);
2490
+ }
2491
+ return void 0;
2492
+ };
2493
+ const collectLeafKeys = (defVar, manager, keys) => {
2494
+ if (!(defVar == null ? void 0 : defVar.fields)) return;
2495
+ const fields = utils.cleanGraph(defVar.fields);
2496
+ for (const fieldRef of Object.values(fields)) {
2497
+ const fieldVar = resolveFieldRef(fieldRef, manager);
2498
+ const fieldKey = fieldRefToKey(fieldRef);
2091
2499
  if (!fieldVar || !fieldKey) continue;
2092
2500
  if (fieldVar.type === definition.definition.variableType.Object && fieldVar.fields) {
2093
- collectLeafFieldKeys(fieldVar, manager, keys);
2501
+ collectLeafKeys(fieldVar, manager, keys);
2094
2502
  } else {
2095
2503
  keys.push(fieldKey);
2096
2504
  }
2097
2505
  }
2098
2506
  };
2099
- const useExpandedObjectProps = (props, manager, parentManager, definitions) => {
2100
- const objectFieldKeys = react.useMemo(() => {
2507
+ const flattenObjectFields = (defVar, valueObj, manager, result) => {
2508
+ if (!(defVar == null ? void 0 : defVar.fields)) return;
2509
+ const fields = utils.cleanGraph(defVar.fields);
2510
+ for (const [fieldName, fieldRef] of Object.entries(fields)) {
2511
+ const fieldVar = resolveFieldRef(fieldRef, manager);
2512
+ if (!(fieldVar == null ? void 0 : fieldVar._id)) continue;
2513
+ const fieldValue = valueObj[fieldName] ?? valueObj[fieldVar._id];
2514
+ if (fieldValue === void 0) continue;
2515
+ if (fieldVar.type === definition.definition.variableType.Object && fieldVar.fields && utils.isObject(fieldValue)) {
2516
+ flattenObjectFields(
2517
+ fieldVar,
2518
+ fieldValue,
2519
+ manager,
2520
+ result
2521
+ );
2522
+ } else {
2523
+ result[fieldVar._id] = fieldValue;
2524
+ }
2525
+ }
2526
+ };
2527
+ const buildFieldIdMapping = (childDef, parentDef, childManager, parentManager) => {
2528
+ const mapping = {};
2529
+ if (!(childDef == null ? void 0 : childDef.fields) || !(parentDef == null ? void 0 : parentDef.fields)) return mapping;
2530
+ const childFields = utils.cleanGraph(childDef.fields);
2531
+ const parentFields = utils.cleanGraph(parentDef.fields);
2532
+ for (const [fieldName, childFieldRef] of Object.entries(childFields)) {
2533
+ const parentFieldRef = parentFields[fieldName];
2534
+ if (!parentFieldRef) continue;
2535
+ const childFieldVar = resolveFieldRef(childFieldRef, childManager);
2536
+ if (!(childFieldVar == null ? void 0 : childFieldVar._id)) continue;
2537
+ const parentFieldVar = resolveFieldRef(parentFieldRef, parentManager);
2538
+ if (!(parentFieldVar == null ? void 0 : parentFieldVar._id)) continue;
2539
+ if (childFieldVar.type === definition.definition.variableType.Object && childFieldVar.fields && (parentFieldVar == null ? void 0 : parentFieldVar.type) === definition.definition.variableType.Object && (parentFieldVar == null ? void 0 : parentFieldVar.fields)) {
2540
+ Object.assign(
2541
+ mapping,
2542
+ buildFieldIdMapping(
2543
+ childFieldVar,
2544
+ parentFieldVar,
2545
+ childManager,
2546
+ parentManager
2547
+ )
2548
+ );
2549
+ continue;
2550
+ }
2551
+ mapping[parentFieldVar._id] = childFieldVar._id;
2552
+ }
2553
+ return mapping;
2554
+ };
2555
+ const resolveArrayItems = (items, manager) => {
2556
+ const result = [];
2557
+ for (const item of items) {
2558
+ if (definition.isLink(item)) {
2559
+ const resolved = manager.resolve(item);
2560
+ if (!resolved) continue;
2561
+ const payload = utils.isObject(resolved.value) ? resolved.value : resolved;
2562
+ if (utils.isObject(payload)) {
2563
+ result.push(utils.cleanGraph(payload));
2564
+ }
2565
+ } else if (utils.isObject(item)) {
2566
+ const payload = utils.isObject(item.value) ? item.value : item;
2567
+ result.push(utils.cleanGraph(payload));
2568
+ }
2569
+ }
2570
+ return result;
2571
+ };
2572
+ const remapArrayItems = (items, mapping) => {
2573
+ return items.map((item) => {
2574
+ const remapped = {};
2575
+ for (const [key, value] of Object.entries(item)) {
2576
+ const newKey = mapping[key] ?? key;
2577
+ remapped[newKey] = value;
2578
+ }
2579
+ return remapped;
2580
+ });
2581
+ };
2582
+ const useExtractProps = (props, manager, parentManager, definitions) => {
2583
+ const { readVariable, _dep } = useReadVariable();
2584
+ const leafKeys = react.useMemo(() => {
2101
2585
  if (!manager || !(definitions == null ? void 0 : definitions.length)) return [];
2102
2586
  const keys = [];
2103
2587
  for (const defKey of definitions) {
2104
2588
  const defVar = manager.resolve(defKey);
2105
- if ((defVar == null ? void 0 : defVar.type) === definition.definition.variableType.Object && (defVar == null ? void 0 : defVar.fields)) {
2106
- collectLeafFieldKeys(defVar, manager, keys);
2589
+ if (!defVar) continue;
2590
+ if (defVar.type === definition.definition.variableType.Object && defVar.fields) {
2591
+ collectLeafKeys(defVar, manager, keys);
2592
+ } else if (defVar.type === definition.definition.variableType.Array && defVar.definition) {
2593
+ const arrDef = resolveFieldRef(defVar.definition, manager);
2594
+ if ((arrDef == null ? void 0 : arrDef.type) === definition.definition.variableType.Object && (arrDef == null ? void 0 : arrDef.fields)) {
2595
+ collectLeafKeys(arrDef, manager, keys);
2596
+ }
2107
2597
  }
2108
2598
  }
2109
2599
  return keys;
2110
2600
  }, [definitions, manager]);
2111
- const fieldVarLayers = react$1.useGraphStack(
2112
- objectFieldKeys.length ? manager : null,
2113
- objectFieldKeys
2601
+ const leafLayers = react$1.useGraphStack(leafKeys.length ? manager : null, leafKeys);
2602
+ const arrayItemKeys = react.useMemo(() => {
2603
+ var _a;
2604
+ if (!manager || !(definitions == null ? void 0 : definitions.length)) return [];
2605
+ const resolveManager = parentManager ?? manager;
2606
+ if (!resolveManager) return [];
2607
+ const keys = [];
2608
+ for (const defKey of definitions) {
2609
+ const defVar = manager.resolve(defKey);
2610
+ if (!(defVar == null ? void 0 : defVar._id)) continue;
2611
+ if (defVar.type !== definition.definition.variableType.Array || !defVar.definition)
2612
+ continue;
2613
+ const propValue = props[defVar._id];
2614
+ if (!definition.isVariableLink(propValue)) continue;
2615
+ const parentVar = resolveManager.resolve(propValue);
2616
+ if ((parentVar == null ? void 0 : parentVar.type) !== definition.definition.variableType.Array) continue;
2617
+ const items = parentVar.defaultValue;
2618
+ if (!Array.isArray(items)) continue;
2619
+ for (const item of items) {
2620
+ if (definition.isLink(item)) {
2621
+ keys.push(item);
2622
+ const resolved = resolveManager.resolve(item);
2623
+ if ((resolved == null ? void 0 : resolved.value) && utils.isObject(resolved.value) && ((_a = resolved.value) == null ? void 0 : _a._type)) {
2624
+ const valueKey = core.keyOfEntity(resolved.value);
2625
+ if (valueKey) keys.push(valueKey);
2626
+ }
2627
+ }
2628
+ }
2629
+ }
2630
+ return keys;
2631
+ }, [definitions, manager, parentManager, props, _dep]);
2632
+ const arrayItemLayers = react$1.useGraphStack(
2633
+ arrayItemKeys.length ? parentManager ?? manager : null,
2634
+ arrayItemKeys
2114
2635
  );
2115
2636
  return react.useMemo(() => {
2637
+ if (!manager || !(definitions == null ? void 0 : definitions.length)) return props;
2638
+ const resolveManager = parentManager ?? manager;
2116
2639
  const base = {};
2117
- for (const layer of fieldVarLayers) {
2640
+ for (const layer of leafLayers) {
2118
2641
  if ((layer == null ? void 0 : layer._id) && (layer == null ? void 0 : layer.defaultValue) != null) {
2119
2642
  base[layer._id] = layer.defaultValue;
2120
2643
  }
2121
2644
  }
2122
- return { ...base, ...expandObjectProps(props, manager, parentManager) };
2123
- }, [fieldVarLayers, props, manager, parentManager]);
2645
+ const expanded = {};
2646
+ const handledPropKeys = /* @__PURE__ */ new Set();
2647
+ for (const defKey of definitions) {
2648
+ const defVar = manager.resolve(defKey);
2649
+ if (!(defVar == null ? void 0 : defVar._id)) continue;
2650
+ const propValue = props[defVar._id];
2651
+ handledPropKeys.add(defVar._id);
2652
+ if (propValue === void 0) continue;
2653
+ if (defVar.type === definition.definition.variableType.Object && defVar.fields) {
2654
+ if (utils.isObject(propValue)) {
2655
+ flattenObjectFields(
2656
+ defVar,
2657
+ propValue,
2658
+ manager,
2659
+ expanded
2660
+ );
2661
+ continue;
2662
+ }
2663
+ expanded[defVar._id] = propValue;
2664
+ continue;
2665
+ }
2666
+ if (defVar.type === definition.definition.variableType.Array && defVar.definition) {
2667
+ if (definition.isVariableLink(propValue) && resolveManager) {
2668
+ const parentVar = resolveManager.resolve(propValue);
2669
+ if ((parentVar == null ? void 0 : parentVar.type) === definition.definition.variableType.Array && (parentVar == null ? void 0 : parentVar.definition)) {
2670
+ const { value: resolvedArray } = readVariable(propValue);
2671
+ if (Array.isArray(resolvedArray)) {
2672
+ const concreteItems = resolveArrayItems(
2673
+ resolvedArray,
2674
+ resolveManager
2675
+ );
2676
+ const childDef = resolveFieldRef(defVar.definition, manager);
2677
+ const parentDef = resolveFieldRef(
2678
+ parentVar.definition,
2679
+ resolveManager
2680
+ );
2681
+ if ((childDef == null ? void 0 : childDef.type) === definition.definition.variableType.Object && (childDef == null ? void 0 : childDef.fields) && (parentDef == null ? void 0 : parentDef.type) === definition.definition.variableType.Object && (parentDef == null ? void 0 : parentDef.fields)) {
2682
+ const mapping = buildFieldIdMapping(
2683
+ childDef,
2684
+ parentDef,
2685
+ manager,
2686
+ resolveManager
2687
+ );
2688
+ expanded[defVar._id] = remapArrayItems(concreteItems, mapping);
2689
+ } else {
2690
+ expanded[defVar._id] = concreteItems;
2691
+ }
2692
+ continue;
2693
+ }
2694
+ }
2695
+ expanded[defVar._id] = propValue;
2696
+ continue;
2697
+ }
2698
+ expanded[defVar._id] = propValue;
2699
+ continue;
2700
+ }
2701
+ expanded[defVar._id] = propValue;
2702
+ }
2703
+ for (const [key, value] of Object.entries(props)) {
2704
+ if (!handledPropKeys.has(key) && !(key in expanded)) {
2705
+ expanded[key] = value;
2706
+ }
2707
+ }
2708
+ return { ...base, ...expanded };
2709
+ }, [
2710
+ leafLayers,
2711
+ arrayItemLayers,
2712
+ props,
2713
+ manager,
2714
+ parentManager,
2715
+ definitions,
2716
+ _dep
2717
+ ]);
2124
2718
  };
2125
2719
  const CollectionItem = ({
2126
2720
  layer,
@@ -2134,9 +2728,7 @@ const CollectionItem = ({
2134
2728
  core.keyOfEntity(layer);
2135
2729
  const definitionId = ((_a = core.entityOfKey(sourceDefinition)) == null ? void 0 : _a._id) ?? "";
2136
2730
  const value = layer.value ?? layer;
2137
- const inputProps = utils.isObject(value) ? {
2138
- ...value
2139
- } : {
2731
+ const inputProps = {
2140
2732
  [definitionId]: value
2141
2733
  };
2142
2734
  const props = utils.cleanGraph(inputProps);
@@ -2144,7 +2736,7 @@ const CollectionItem = ({
2144
2736
  () => sourceDefinition ? [sourceDefinition] : [],
2145
2737
  [sourceDefinition]
2146
2738
  );
2147
- const expandedProps = useExpandedObjectProps(props, manager, void 0, definitions);
2739
+ const expandedProps = useExtractProps(props, manager, void 0, definitions);
2148
2740
  const cssVars = react.useMemo(
2149
2741
  () => toCssCustomProperties(expandedProps),
2150
2742
  [expandedProps]
@@ -2282,24 +2874,18 @@ const Frame = ({
2282
2874
  }
2283
2875
  );
2284
2876
  };
2285
- const useIsomorphicEffect = (callback, deps) => {
2286
- react.useEffect(callback, deps);
2287
- if (!utils.isBrowser) {
2288
- callback();
2289
- }
2290
- };
2291
2877
  const useCssChunk = (linkKey) => {
2292
2878
  const { manager } = react.useContext(FragmentContext);
2293
2879
  const [chunkId] = useLayerValue(linkKey, "chunkId", { manager });
2294
2880
  const [enabled] = useLayerValue(linkKey, "enabled", { manager });
2295
- const styleSheet = useStyleSheet(manager);
2296
- const reset = react.useRef(utils.noop);
2297
- useIsomorphicEffect(() => {
2298
- if (enabled && chunkId) {
2299
- reset.current = styleSheet.addCssChunk(chunkId);
2300
- }
2301
- return reset.current;
2302
- }, [enabled]);
2881
+ const { addCssChunk } = useStyleSheet(manager);
2882
+ react.useEffect(() => {
2883
+ if (!enabled || !chunkId) return;
2884
+ const cleanup = addCssChunk(chunkId);
2885
+ return () => {
2886
+ cleanup();
2887
+ };
2888
+ }, [enabled, chunkId, addCssChunk]);
2303
2889
  };
2304
2890
  const CssChunk = ({ linkKey }) => {
2305
2891
  useCssChunk(linkKey);
@@ -2313,23 +2899,18 @@ const useFragmentManager = (fragmentId, inputGlobalManager) => {
2313
2899
  getFragmentManager,
2314
2900
  queryFragmentManager
2315
2901
  } = useGlobalManager(inputGlobalManager);
2316
- const [loading, setLoading] = react.useState(false);
2317
2902
  const manager = getFragmentManager(fragmentId);
2903
+ const loading = !!fragmentId && !manager;
2318
2904
  react.useEffect(() => {
2319
- (async () => {
2320
- if (fragmentsGraph && !getFragmentManager(fragmentId) && !!fragmentId) {
2321
- setLoading(true);
2322
- await queryFragmentManager(fragmentId);
2323
- setLoading(false);
2324
- }
2325
- })();
2905
+ if (fragmentsGraph && !getFragmentManager(fragmentId) && !!fragmentId) {
2906
+ queryFragmentManager(fragmentId);
2907
+ }
2326
2908
  }, [fragmentId, fragmentsGraph]);
2327
2909
  return {
2328
2910
  loading,
2329
2911
  manager,
2330
2912
  fragmentLayerKey: (_a = manager == null ? void 0 : manager.$fragment) == null ? void 0 : _a.root,
2331
2913
  queryFragmentManager
2332
- // loadFragmentManager,
2333
2914
  };
2334
2915
  };
2335
2916
  const useFragmentChildren = (fragmentId) => {
@@ -2387,7 +2968,7 @@ const useFragment = (fragmentId, globalManager) => {
2387
2968
  const { properties: definitions } = useFragmentProperties(fragmentId);
2388
2969
  const scopes = react.useContext(ScopeContext);
2389
2970
  !(scopes == null ? void 0 : scopes.length);
2390
- const { addLayerStyle, addCssChunk, mount, unmount } = useStyleSheet(
2971
+ const { addLayerStyle, mount, unmount } = useStyleSheet(
2391
2972
  fragmentContext.manager
2392
2973
  );
2393
2974
  if (fragmentContext.manager) {
@@ -2422,35 +3003,26 @@ const useFragment = (fragmentId, globalManager) => {
2422
3003
  definitions
2423
3004
  };
2424
3005
  };
2425
- const FragmentInternal = ({
2426
- fragmentId,
2427
- globalManager,
2428
- pauseInteractions,
2429
- collectStyle,
2430
- FrameElement = Frame
2431
- }) => {
2432
- const {
2433
- children,
2434
- fragmentContext,
2435
- hash,
2436
- chunkLinks,
2437
- isResize,
2438
- isTopFragment,
2439
- definitions,
2440
- layerKey
2441
- } = useFragment(fragmentId);
2442
- if (!fragmentContext.manager) return null;
2443
- return (
2444
- // <Scope
2445
- // fragmentManager={fragmentContext.manager}
2446
- // layerKey={layerKey}
2447
- // value={{
2448
- // type: definition.scopeTypes.FragmentScope,
2449
- // manager: fragmentContext.manager,
2450
- // definitions,
2451
- // }}
2452
- // >
2453
- /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-key": layerKey, className: hash, children: [
3006
+ const FragmentInternal = react.memo(
3007
+ ({
3008
+ fragmentId,
3009
+ globalManager,
3010
+ pauseInteractions,
3011
+ collectStyle,
3012
+ FrameElement = Frame
3013
+ }) => {
3014
+ const {
3015
+ children,
3016
+ fragmentContext,
3017
+ hash,
3018
+ chunkLinks,
3019
+ isResize,
3020
+ isTopFragment,
3021
+ definitions,
3022
+ layerKey
3023
+ } = useFragment(fragmentId);
3024
+ if (!fragmentContext.manager) return null;
3025
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-key": layerKey, className: hash, children: [
2454
3026
  chunkLinks.map((linkKey) => /* @__PURE__ */ jsxRuntime.jsx(CssChunk, { linkKey })),
2455
3027
  children.map((childLink) => {
2456
3028
  var _a;
@@ -2468,21 +3040,51 @@ const FragmentInternal = ({
2468
3040
  childLink
2469
3041
  );
2470
3042
  })
2471
- ] })
2472
- );
2473
- };
3043
+ ] });
3044
+ }
3045
+ );
2474
3046
  const Fragment = (props) => {
2475
3047
  const currentGlobalManager = react.useContext(GlobalManagerContext);
2476
3048
  const { manager: resultGlobalManager } = useGlobalManager(
2477
3049
  props.globalManager
2478
3050
  );
2479
3051
  const { manager } = useFragmentManager(props.fragmentId, resultGlobalManager);
2480
- const Base = /* @__PURE__ */ jsxRuntime.jsx(FragmentContext.Provider, { value: { manager }, children: /* @__PURE__ */ jsxRuntime.jsx(FragmentInternal, { ...props }) });
3052
+ const fragmentContextValue = react.useMemo(() => ({ manager }), [manager]);
3053
+ const Base = /* @__PURE__ */ jsxRuntime.jsx(FragmentContext.Provider, { value: fragmentContextValue, children: /* @__PURE__ */ jsxRuntime.jsx(FragmentInternal, { ...props }) });
2481
3054
  if (!currentGlobalManager) {
2482
3055
  return /* @__PURE__ */ jsxRuntime.jsx(GlobalManagerProvider, { value: resultGlobalManager, children: Base });
2483
3056
  }
2484
3057
  return Base;
2485
3058
  };
3059
+ const resolveObjectToConcreteValue = (objectVar, manager, readVariable) => {
3060
+ const fields = utils.cleanGraph(objectVar.fields);
3061
+ const result = {};
3062
+ for (const [fieldName, fieldRef] of Object.entries(fields)) {
3063
+ let fieldVar;
3064
+ let fieldKey;
3065
+ if (definition.isVariableLink(fieldRef)) {
3066
+ fieldKey = fieldRef;
3067
+ fieldVar = manager == null ? void 0 : manager.resolve(fieldKey);
3068
+ } else if (utils.isObject(fieldRef) && (fieldRef == null ? void 0 : fieldRef._id)) {
3069
+ fieldKey = core.keyOfEntity(fieldRef);
3070
+ fieldVar = fieldRef;
3071
+ }
3072
+ if (!fieldVar || !fieldKey) continue;
3073
+ if (fieldVar.type === definition.definition.variableType.Object && fieldVar.fields) {
3074
+ result[fieldName] = resolveObjectToConcreteValue(
3075
+ fieldVar,
3076
+ manager,
3077
+ readVariable
3078
+ );
3079
+ } else {
3080
+ const { value } = readVariable(fieldKey);
3081
+ if (value != null) {
3082
+ result[fieldName] = value;
3083
+ }
3084
+ }
3085
+ }
3086
+ return result;
3087
+ };
2486
3088
  const useInstanceProps = (instanceProps) => {
2487
3089
  const isTopInstance = !(instanceProps == null ? void 0 : instanceProps.layerKey);
2488
3090
  const { manager: loadedManager } = useFragmentManager(
@@ -2501,13 +3103,39 @@ const useInstanceProps = (instanceProps) => {
2501
3103
  };
2502
3104
  }
2503
3105
  const extractProps = utils.cleanGraph(inputProps);
3106
+ const { readVariable } = useReadVariable();
3107
+ let resolvedProps = extractProps;
3108
+ if (!isTopInstance) {
3109
+ resolvedProps = {};
3110
+ for (const [key, value] of Object.entries(extractProps)) {
3111
+ if (!definition.isVariableLink(value)) {
3112
+ resolvedProps[key] = value;
3113
+ continue;
3114
+ }
3115
+ const varLayer = fragmentManager == null ? void 0 : fragmentManager.resolve(value);
3116
+ if ((varLayer == null ? void 0 : varLayer.type) === definition.definition.variableType.Array) {
3117
+ resolvedProps[key] = value;
3118
+ continue;
3119
+ }
3120
+ if ((varLayer == null ? void 0 : varLayer.type) === definition.definition.variableType.Object && (varLayer == null ? void 0 : varLayer.fields)) {
3121
+ resolvedProps[key] = resolveObjectToConcreteValue(
3122
+ varLayer,
3123
+ fragmentManager,
3124
+ readVariable
3125
+ );
3126
+ continue;
3127
+ }
3128
+ const { value: resolved } = readVariable(value);
3129
+ resolvedProps[key] = resolved;
3130
+ }
3131
+ }
2504
3132
  react.useEffect(() => {
2505
3133
  if (utils.isValue(instanceProps == null ? void 0 : instanceProps.props)) {
2506
3134
  setLocalProps(instanceProps.props);
2507
3135
  }
2508
3136
  }, [instanceProps == null ? void 0 : instanceProps.props]);
2509
3137
  return {
2510
- props: extractProps,
3138
+ props: resolvedProps,
2511
3139
  onChangeProps: (variableId, value) => {
2512
3140
  var _a;
2513
3141
  setLocalProps((prev) => ({ ...prev, [variableId]: value }));
@@ -2584,7 +3212,7 @@ const InstanceInitial = ({
2584
3212
  ...instanceProps,
2585
3213
  pauseInteractions
2586
3214
  });
2587
- const expandedProps = useExpandedObjectProps(
3215
+ const expandedProps = useExtractProps(
2588
3216
  props,
2589
3217
  innerManager,
2590
3218
  parentManager,
@@ -2595,49 +3223,56 @@ const InstanceInitial = ({
2595
3223
  [expandedProps]
2596
3224
  );
2597
3225
  useSuspenseLoadFragment(globalManager, fragmentId, !ssr);
3226
+ const scopeValue = react.useMemo(
3227
+ () => ({
3228
+ type: definition.definition.scopeTypes.InstanceScope,
3229
+ props: expandedProps,
3230
+ definitions,
3231
+ fragmentId,
3232
+ documentManager: innerManager,
3233
+ layerKey: instanceProps.layerKey,
3234
+ onChangeProps
3235
+ }),
3236
+ [
3237
+ expandedProps,
3238
+ definitions,
3239
+ fragmentId,
3240
+ innerManager,
3241
+ instanceProps.layerKey,
3242
+ onChangeProps
3243
+ ]
3244
+ );
3245
+ const instanceContextValue = react.useMemo(
3246
+ () => ({
3247
+ layerKey: instanceProps.layerKey,
3248
+ definitions,
3249
+ innerManager,
3250
+ parentManager,
3251
+ props: expandedProps
3252
+ }),
3253
+ [
3254
+ instanceProps.layerKey,
3255
+ definitions,
3256
+ innerManager,
3257
+ parentManager,
3258
+ expandedProps
3259
+ ]
3260
+ );
2598
3261
  return /* @__PURE__ */ jsxRuntime.jsx(
2599
3262
  Scope,
2600
3263
  {
2601
3264
  fragmentManager: innerManager,
2602
3265
  layerKey: instanceProps.layerKey,
2603
- value: {
2604
- type: definition.definition.scopeTypes.InstanceScope,
2605
- props: expandedProps,
2606
- definitions,
2607
- fragmentId,
2608
- documentManager: innerManager,
2609
- layerKey: instanceProps.layerKey,
2610
- onChangeProps
2611
- },
2612
- children: /* @__PURE__ */ jsxRuntime.jsx(
2613
- InstanceContext$1.Provider,
3266
+ value: scopeValue,
3267
+ children: /* @__PURE__ */ jsxRuntime.jsx(InstanceContext$1.Provider, { value: instanceContextValue, children: parentManager ? /* @__PURE__ */ jsxRuntime.jsx(
3268
+ Tag,
2614
3269
  {
2615
- value: {
2616
- layerKey: instanceProps.layerKey,
2617
- definitions,
2618
- innerManager,
2619
- parentManager,
2620
- props: expandedProps
2621
- },
2622
- children: parentManager ? /* @__PURE__ */ jsxRuntime.jsx(
2623
- Tag,
2624
- {
2625
- className: classnames,
2626
- "data-key": instanceProps.layerKey,
2627
- style: { ...style, ...cssVars },
2628
- ...link.linkProps,
2629
- ...events,
2630
- children: /* @__PURE__ */ jsxRuntime.jsx(
2631
- Fragment,
2632
- {
2633
- fragmentId,
2634
- globalManager,
2635
- FrameElement,
2636
- pauseInteractions
2637
- }
2638
- )
2639
- }
2640
- ) : /* @__PURE__ */ jsxRuntime.jsx(Tag, { style: { ...style, ...cssVars }, ...link.linkProps, children: /* @__PURE__ */ jsxRuntime.jsx(
3270
+ className: classnames,
3271
+ "data-key": instanceProps.layerKey,
3272
+ style: { ...style, ...cssVars },
3273
+ ...link.linkProps,
3274
+ ...events,
3275
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2641
3276
  Fragment,
2642
3277
  {
2643
3278
  fragmentId,
@@ -2645,9 +3280,17 @@ const InstanceInitial = ({
2645
3280
  FrameElement,
2646
3281
  pauseInteractions
2647
3282
  }
2648
- ) })
3283
+ )
2649
3284
  }
2650
- )
3285
+ ) : /* @__PURE__ */ jsxRuntime.jsx(Tag, { style: { ...style, ...cssVars }, ...link.linkProps, children: /* @__PURE__ */ jsxRuntime.jsx(
3286
+ Fragment,
3287
+ {
3288
+ fragmentId,
3289
+ globalManager,
3290
+ FrameElement,
3291
+ pauseInteractions
3292
+ }
3293
+ ) }) })
2651
3294
  }
2652
3295
  );
2653
3296
  };
@@ -2666,47 +3309,153 @@ const Instance = (props) => {
2666
3309
  }
2667
3310
  ) });
2668
3311
  };
2669
- const useArea = (options) => {
2670
- var _a;
2671
- const { manager: resultGlobalManager } = useGlobalManager(
3312
+ const IDLE_STATE = {
3313
+ data: null,
3314
+ fetching: false,
3315
+ error: null
3316
+ };
3317
+ const useAsyncLoadArea = (globalManager, areaCode, skip) => {
3318
+ const [state, setState] = react.useState(IDLE_STATE);
3319
+ const areaCodeRef = react.useRef(areaCode);
3320
+ if (areaCodeRef.current !== areaCode) {
3321
+ areaCodeRef.current = areaCode;
3322
+ setState(IDLE_STATE);
3323
+ }
3324
+ react.useEffect(() => {
3325
+ var _a, _b;
3326
+ if (skip || !globalManager || !areaCode) return;
3327
+ const cache = getSuspenseCache(globalManager);
3328
+ const cacheKey = `area:${areaCode}`;
3329
+ if (cache.has(cacheKey)) {
3330
+ try {
3331
+ const cached = cache.get(cacheKey).read();
3332
+ setState({ data: cached, fetching: false, error: null });
3333
+ return;
3334
+ } catch (e) {
3335
+ if (!(e instanceof Promise)) {
3336
+ setState({ data: null, fetching: false, error: e });
3337
+ return;
3338
+ }
3339
+ }
3340
+ }
3341
+ const valueOrPromise = cache.has(cacheKey) ? void 0 : (_b = (_a = globalManager.$load) == null ? void 0 : _a.loadArea) == null ? void 0 : _b.call(_a, areaCode);
3342
+ if (valueOrPromise != null && !(valueOrPromise instanceof Promise)) {
3343
+ createSuspenseResource(cacheKey, valueOrPromise, cache);
3344
+ setState({ data: valueOrPromise, fetching: false, error: null });
3345
+ return;
3346
+ }
3347
+ if (valueOrPromise instanceof Promise) {
3348
+ createSuspenseResource(cacheKey, valueOrPromise, cache);
3349
+ }
3350
+ setState({ data: null, fetching: true, error: null });
3351
+ let cancelled = false;
3352
+ const resource = cache.get(cacheKey);
3353
+ if (!resource) return;
3354
+ try {
3355
+ const data = resource.read();
3356
+ if (!cancelled) {
3357
+ setState({ data, fetching: false, error: null });
3358
+ }
3359
+ } catch (e) {
3360
+ if (e instanceof Promise) {
3361
+ e.then(() => {
3362
+ if (cancelled) return;
3363
+ try {
3364
+ const data = resource.read();
3365
+ setState({ data, fetching: false, error: null });
3366
+ } catch (err) {
3367
+ if (!cancelled) {
3368
+ setState({ data: null, fetching: false, error: err });
3369
+ }
3370
+ }
3371
+ });
3372
+ } else if (!cancelled) {
3373
+ setState({ data: null, fetching: false, error: e });
3374
+ }
3375
+ }
3376
+ return () => {
3377
+ cancelled = true;
3378
+ };
3379
+ }, [skip, globalManager, areaCode]);
3380
+ if (skip) return IDLE_STATE;
3381
+ return state;
3382
+ };
3383
+ const resolveSuspense = (options) => {
3384
+ if ((options == null ? void 0 : options.suspense) !== void 0) return options.suspense;
3385
+ if ((options == null ? void 0 : options.ssr) !== void 0) return options.ssr;
3386
+ return false;
3387
+ };
3388
+ const useArea = (areaCode, options) => {
3389
+ const { manager: globalManager } = useGlobalManager(
2672
3390
  options == null ? void 0 : options.globalManager
2673
3391
  );
2674
- const ssr = ((_a = options == null ? void 0 : options.options) == null ? void 0 : _a.ssr) ?? true;
2675
- const areaData = useSuspenseLoadArea(
2676
- resultGlobalManager,
2677
- options.areaCode,
2678
- !(isBrowser || ssr)
3392
+ const suspense = resolveSuspense(options);
3393
+ const skip = !globalManager || !(isBrowser || suspense);
3394
+ const suspenseData = useSuspenseLoadArea(
3395
+ globalManager,
3396
+ areaCode,
3397
+ !suspense || skip
3398
+ );
3399
+ const asyncState = useAsyncLoadArea(
3400
+ globalManager,
3401
+ areaCode,
3402
+ suspense || skip
3403
+ );
3404
+ if (skip) {
3405
+ return { data: null, fetching: false, error: null };
3406
+ }
3407
+ if (suspense) {
3408
+ return {
3409
+ data: suspenseData ?? null,
3410
+ fetching: false,
3411
+ error: null
3412
+ };
3413
+ }
3414
+ const throwOnError = (options == null ? void 0 : options.throwOnError) ?? true;
3415
+ if (throwOnError && asyncState.error) {
3416
+ throw asyncState.error;
3417
+ }
3418
+ return asyncState;
3419
+ };
3420
+ const AreaInitial = (areaProps) => {
3421
+ const { data: areaData } = useArea(areaProps.areaCode, {
3422
+ suspense: true,
3423
+ globalManager: areaProps.globalManager
3424
+ });
3425
+ const { manager: globalManager } = useGlobalManager(
3426
+ areaProps.globalManager
2679
3427
  );
2680
3428
  const { manager: fragmentManager } = useFragmentManager(
2681
3429
  areaData == null ? void 0 : areaData.fragmentId,
2682
- resultGlobalManager
3430
+ globalManager
2683
3431
  );
2684
3432
  const resultProps = react.useMemo(
2685
- () => ({ ...(areaData == null ? void 0 : areaData.props) ?? {}, ...(options == null ? void 0 : options.props) ?? {} }),
2686
- [areaData, options]
3433
+ () => ({ ...(areaData == null ? void 0 : areaData.props) ?? {}, ...(areaProps == null ? void 0 : areaProps.props) ?? {} }),
3434
+ [areaData, areaProps]
2687
3435
  );
2688
- return {
2689
- ...areaData,
2690
- fragmentManager,
2691
- props: resultProps,
2692
- globalManager: resultGlobalManager
2693
- };
2694
- };
2695
- const AreaInitial = (areaProps) => {
2696
- const areaData = useArea(areaProps);
2697
3436
  if (!areaData) return null;
2698
- return /* @__PURE__ */ jsxRuntime.jsx(
3437
+ const areaManager = react.useMemo(
3438
+ () => clientCore.createAreaManager({
3439
+ areaId: areaData.areaId,
3440
+ campaignId: areaData.campaignId,
3441
+ variantId: areaData.variantId,
3442
+ areaProperties: areaData.areaProperties
3443
+ }),
3444
+ [areaData.areaId]
3445
+ );
3446
+ return /* @__PURE__ */ jsxRuntime.jsx(AreaManagerProvider, { value: areaManager, children: /* @__PURE__ */ jsxRuntime.jsx(
2699
3447
  Scope,
2700
3448
  {
2701
- fragmentManager: areaData.fragmentManager,
3449
+ fragmentManager,
2702
3450
  layerKey: "Area",
2703
3451
  value: {
2704
3452
  type: definition.definition.scopeTypes.AreaScope,
3453
+ areaManager,
2705
3454
  ...areaData ?? {}
2706
3455
  },
2707
- children: /* @__PURE__ */ jsxRuntime.jsx(Instance, { fragmentId: areaData.fragmentId, props: areaData == null ? void 0 : areaData.props })
3456
+ children: /* @__PURE__ */ jsxRuntime.jsx(Instance, { fragmentId: areaData.fragmentId, props: resultProps })
2708
3457
  }
2709
- );
3458
+ ) });
2710
3459
  };
2711
3460
  const Area = (props) => {
2712
3461
  return "globalManager" in props ? /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntime.jsx(GlobalManagerProvider, { value: props.globalManager, children: /* @__PURE__ */ jsxRuntime.jsx(AreaInitial, { ...props }) }) }) : /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntime.jsx(AreaInitial, { ...props }) });
@@ -2732,6 +3481,8 @@ const useLayerCssOverride = (layerKey) => {
2732
3481
  return utils.isValue(cssOverride) ? cssStringToJsObject(cssOverride) : {};
2733
3482
  };
2734
3483
  exports.Area = Area;
3484
+ exports.AreaManagerContext = AreaManagerContext;
3485
+ exports.AreaManagerProvider = AreaManagerProvider;
2735
3486
  exports.Collection = Collection;
2736
3487
  exports.CssChunk = CssChunk;
2737
3488
  exports.CustomRender = CustomRender;
@@ -2762,7 +3513,6 @@ exports.createSuspenseResource = createSuspenseResource;
2762
3513
  exports.declareFragmentProperty = declareFragmentProperty;
2763
3514
  exports.defaultCustomRender = defaultCustomRender;
2764
3515
  exports.duplicateLayer = duplicateLayer;
2765
- exports.expandObjectProps = expandObjectProps;
2766
3516
  exports.findBreakpoint = findBreakpoint;
2767
3517
  exports.getAllParents = getAllParents;
2768
3518
  exports.getHydratedData = getHydratedData;
@@ -2784,7 +3534,6 @@ exports.isRootLayer = isRootLayer;
2784
3534
  exports.isTopLevel = isTopLevel;
2785
3535
  exports.isVariableLink = isVariableLink;
2786
3536
  exports.layerFieldSetter = layerFieldSetter;
2787
- exports.loadFragmentManager = loadFragmentManager;
2788
3537
  exports.makeSnapshot = makeSnapshot;
2789
3538
  exports.moveChildren = moveChildren;
2790
3539
  exports.nodeWalker = nodeWalker;
@@ -2828,6 +3577,8 @@ exports.useOptionalSize = useOptionalSize;
2828
3577
  exports.useReadVariable = useReadVariable;
2829
3578
  exports.useReadVariables = useReadVariables;
2830
3579
  exports.useRenderTarget = useRenderTarget;
3580
+ exports.useResolvedLayer = useResolvedLayer;
3581
+ exports.useResolvedLayerVariables = useResolvedLayerVariables;
2831
3582
  exports.useTextAttributes = useTextAttributes;
2832
3583
  exports.useTextContent = useTextContent;
2833
3584
  exports.useTextHighlight = useTextHighlight;