@meetelise/studio-components 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/componentSchema.json +3 -0
- package/dist/components/Accordion.d.ts +3 -2
- package/dist/components/Accordion.d.ts.map +1 -1
- package/dist/components/Accordion.js +2 -2
- package/dist/components/Accordion.js.map +1 -1
- package/dist/components/AddressBlock.d.ts +3 -2
- package/dist/components/AddressBlock.d.ts.map +1 -1
- package/dist/components/AddressBlock.js +2 -2
- package/dist/components/AddressBlock.js.map +1 -1
- package/dist/components/AmenityList.d.ts +3 -2
- package/dist/components/AmenityList.d.ts.map +1 -1
- package/dist/components/AmenityList.js +4 -4
- package/dist/components/AmenityList.js.map +1 -1
- package/dist/components/Badge.d.ts +3 -2
- package/dist/components/Badge.d.ts.map +1 -1
- package/dist/components/Badge.js +2 -2
- package/dist/components/Badge.js.map +1 -1
- package/dist/components/Button.d.ts +3 -2
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Button.js +2 -2
- package/dist/components/Button.js.map +1 -1
- package/dist/components/CTABanner.d.ts +3 -2
- package/dist/components/CTABanner.d.ts.map +1 -1
- package/dist/components/CTABanner.js +2 -2
- package/dist/components/CTABanner.js.map +1 -1
- package/dist/components/ContactForm.d.ts +3 -2
- package/dist/components/ContactForm.d.ts.map +1 -1
- package/dist/components/ContactForm.js +3 -3
- package/dist/components/ContactForm.js.map +1 -1
- package/dist/components/Container.d.ts +3 -2
- package/dist/components/Container.d.ts.map +1 -1
- package/dist/components/Container.js +2 -2
- package/dist/components/Container.js.map +1 -1
- package/dist/components/Divider.d.ts +3 -2
- package/dist/components/Divider.d.ts.map +1 -1
- package/dist/components/Divider.js +3 -3
- package/dist/components/Divider.js.map +1 -1
- package/dist/components/FeatureCard.d.ts +3 -2
- package/dist/components/FeatureCard.d.ts.map +1 -1
- package/dist/components/FeatureCard.js +2 -2
- package/dist/components/FeatureCard.js.map +1 -1
- package/dist/components/Footer.d.ts +3 -3
- package/dist/components/Footer.d.ts.map +1 -1
- package/dist/components/Footer.js +2 -2
- package/dist/components/Footer.js.map +1 -1
- package/dist/components/Gallery.d.ts +3 -2
- package/dist/components/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery.js +3 -3
- package/dist/components/Gallery.js.map +1 -1
- package/dist/components/Grid.d.ts +3 -2
- package/dist/components/Grid.d.ts.map +1 -1
- package/dist/components/Grid.js +2 -2
- package/dist/components/Grid.js.map +1 -1
- package/dist/components/Icon.d.ts +3 -2
- package/dist/components/Icon.d.ts.map +1 -1
- package/dist/components/Icon.js +2 -2
- package/dist/components/Icon.js.map +1 -1
- package/dist/components/Image.d.ts +3 -2
- package/dist/components/Image.d.ts.map +1 -1
- package/dist/components/Image.js +2 -2
- package/dist/components/Image.js.map +1 -1
- package/dist/components/Link.d.ts +3 -2
- package/dist/components/Link.d.ts.map +1 -1
- package/dist/components/Link.js +2 -2
- package/dist/components/Link.js.map +1 -1
- package/dist/components/LocationsDirectory.d.ts +3 -2
- package/dist/components/LocationsDirectory.d.ts.map +1 -1
- package/dist/components/LocationsDirectory.js +5 -5
- package/dist/components/LocationsDirectory.js.map +1 -1
- package/dist/components/MapEmbed.d.ts +3 -2
- package/dist/components/MapEmbed.d.ts.map +1 -1
- package/dist/components/MapEmbed.js +2 -2
- package/dist/components/MapEmbed.js.map +1 -1
- package/dist/components/Modal.d.ts +3 -2
- package/dist/components/Modal.d.ts.map +1 -1
- package/dist/components/Modal.js +2 -2
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/Nav.d.ts +3 -3
- package/dist/components/Nav.d.ts.map +1 -1
- package/dist/components/Nav.js +2 -2
- package/dist/components/Nav.js.map +1 -1
- package/dist/components/PropertyCard.d.ts +3 -2
- package/dist/components/PropertyCard.d.ts.map +1 -1
- package/dist/components/PropertyCard.js +2 -2
- package/dist/components/PropertyCard.js.map +1 -1
- package/dist/components/PropertyGrid.d.ts +3 -2
- package/dist/components/PropertyGrid.d.ts.map +1 -1
- package/dist/components/PropertyGrid.js +2 -2
- package/dist/components/PropertyGrid.js.map +1 -1
- package/dist/components/Repeat.d.ts.map +1 -1
- package/dist/components/Repeat.js +10 -1
- package/dist/components/Repeat.js.map +1 -1
- package/dist/components/ScheduleTour.d.ts +3 -2
- package/dist/components/ScheduleTour.d.ts.map +1 -1
- package/dist/components/ScheduleTour.js +4 -4
- package/dist/components/ScheduleTour.js.map +1 -1
- package/dist/components/ScrollReveal.d.ts +3 -2
- package/dist/components/ScrollReveal.d.ts.map +1 -1
- package/dist/components/ScrollReveal.js +2 -2
- package/dist/components/ScrollReveal.js.map +1 -1
- package/dist/components/Section.d.ts +3 -2
- package/dist/components/Section.d.ts.map +1 -1
- package/dist/components/Section.js +2 -2
- package/dist/components/Section.js.map +1 -1
- package/dist/components/Stack.d.ts +3 -2
- package/dist/components/Stack.d.ts.map +1 -1
- package/dist/components/Stack.js +2 -2
- package/dist/components/Stack.js.map +1 -1
- package/dist/components/Stat.d.ts +3 -2
- package/dist/components/Stat.d.ts.map +1 -1
- package/dist/components/Stat.js +2 -2
- package/dist/components/Stat.js.map +1 -1
- package/dist/components/Testimonial.d.ts +3 -2
- package/dist/components/Testimonial.d.ts.map +1 -1
- package/dist/components/Testimonial.js +2 -2
- package/dist/components/Testimonial.js.map +1 -1
- package/dist/components/Text.d.ts +3 -2
- package/dist/components/Text.d.ts.map +1 -1
- package/dist/components/Text.js +2 -2
- package/dist/components/Text.js.map +1 -1
- package/dist/components/ThemeProvider.d.ts +3 -3
- package/dist/components/ThemeProvider.d.ts.map +1 -1
- package/dist/components/ThemeProvider.js +3 -18
- package/dist/components/ThemeProvider.js.map +1 -1
- package/dist/components/VideoHero.d.ts +3 -2
- package/dist/components/VideoHero.d.ts.map +1 -1
- package/dist/components/VideoHero.js +2 -2
- package/dist/components/VideoHero.js.map +1 -1
- package/dist/components/VideoPlayer.d.ts +3 -2
- package/dist/components/VideoPlayer.d.ts.map +1 -1
- package/dist/components/VideoPlayer.js +2 -2
- package/dist/components/VideoPlayer.js.map +1 -1
- package/dist/components/VirtualTourEmbed.d.ts +3 -2
- package/dist/components/VirtualTourEmbed.d.ts.map +1 -1
- package/dist/components/VirtualTourEmbed.js +2 -2
- package/dist/components/VirtualTourEmbed.js.map +1 -1
- package/dist/components/browser/ComponentBrowser.d.ts +2 -1
- package/dist/components/browser/ComponentBrowser.d.ts.map +1 -1
- package/dist/components/browser/ComponentBrowser.js +8 -8
- package/dist/components/browser/ComponentBrowser.js.map +1 -1
- package/dist/components/browser/ComponentShowcase.d.ts +3 -2
- package/dist/components/browser/ComponentShowcase.d.ts.map +1 -1
- package/dist/components/browser/ComponentShowcase.js +2 -2
- package/dist/components/browser/ComponentShowcase.js.map +1 -1
- package/dist/components/units/FloorplanExplorer.d.ts +3 -2
- package/dist/components/units/FloorplanExplorer.d.ts.map +1 -1
- package/dist/components/units/FloorplanExplorer.js +5 -5
- package/dist/components/units/FloorplanExplorer.js.map +1 -1
- package/dist/components/units/UnitExplorer.d.ts +3 -2
- package/dist/components/units/UnitExplorer.d.ts.map +1 -1
- package/dist/components/units/UnitExplorer.js +3 -3
- package/dist/components/units/UnitExplorer.js.map +1 -1
- package/dist/components/units/UnitPage.d.ts +3 -2
- package/dist/components/units/UnitPage.d.ts.map +1 -1
- package/dist/components/units/UnitPage.js +5 -5
- package/dist/components/units/UnitPage.js.map +1 -1
- package/dist/index.d.ts +4 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -14
- package/dist/index.js.map +1 -1
- package/dist/renderer.d.ts +6 -2
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +18 -8
- package/dist/renderer.js.map +1 -1
- package/dist/schema/componentSchema.js +3 -3
- package/dist/schema/componentSchema.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/nodeIdentity.d.ts +49 -0
- package/dist/utils/nodeIdentity.d.ts.map +1 -0
- package/dist/utils/nodeIdentity.js +275 -0
- package/dist/utils/nodeIdentity.js.map +1 -0
- package/dist/utils/resolveConfig.d.ts +5 -0
- package/dist/utils/resolveConfig.d.ts.map +1 -1
- package/dist/utils/resolveConfig.js +92 -37
- package/dist/utils/resolveConfig.js.map +1 -1
- package/dist/utils/themeTokens.d.ts +15 -0
- package/dist/utils/themeTokens.d.ts.map +1 -0
- package/dist/utils/themeTokens.js +34 -0
- package/dist/utils/themeTokens.js.map +1 -0
- package/package.json +17 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
export const RENDERED_NODE_PATH_KEY = "renderedIdPath";
|
|
2
|
+
function isPlainObject(value) {
|
|
3
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function isNodeLike(value) {
|
|
6
|
+
return isPlainObject(value) && typeof value.type === "string";
|
|
7
|
+
}
|
|
8
|
+
function encodePart(value) {
|
|
9
|
+
return encodeURIComponent(value);
|
|
10
|
+
}
|
|
11
|
+
function decodePart(value) {
|
|
12
|
+
return decodeURIComponent(value);
|
|
13
|
+
}
|
|
14
|
+
export function normalizeAuthoredNodePath(path) {
|
|
15
|
+
return path.map((part) => encodePart(String(part))).join("/");
|
|
16
|
+
}
|
|
17
|
+
// cyrb53-style 53-bit string hash: deterministic, dependency-free, low collision rate.
|
|
18
|
+
function hashString(input) {
|
|
19
|
+
let h1 = 0xdeadbeef ^ input.length;
|
|
20
|
+
let h2 = 0x41c6ce57 ^ input.length;
|
|
21
|
+
for (let i = 0; i < input.length; i++) {
|
|
22
|
+
const ch = input.charCodeAt(i);
|
|
23
|
+
h1 = Math.imul(h1 ^ ch, 2654435761);
|
|
24
|
+
h2 = Math.imul(h2 ^ ch, 1597334677);
|
|
25
|
+
}
|
|
26
|
+
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
|
|
27
|
+
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
|
|
28
|
+
return `${(h2 >>> 0).toString(36)}${(h1 >>> 0).toString(36)}`;
|
|
29
|
+
}
|
|
30
|
+
export function pathHashAuthoredId(path) {
|
|
31
|
+
return `n_${hashString(normalizeAuthoredNodePath(path))}`;
|
|
32
|
+
}
|
|
33
|
+
export function renderedNodePathForAuthoredId(authoredId) {
|
|
34
|
+
return [{ authoredId }];
|
|
35
|
+
}
|
|
36
|
+
export function getRenderedNodeAuthoredId(path) {
|
|
37
|
+
return path?.[0]?.authoredId;
|
|
38
|
+
}
|
|
39
|
+
export function appendRenderedNodePathSegments(path, segments) {
|
|
40
|
+
if (segments.length === 0)
|
|
41
|
+
return path;
|
|
42
|
+
return [...path, ...segments];
|
|
43
|
+
}
|
|
44
|
+
export function isRenderedNodePath(value) {
|
|
45
|
+
return (Array.isArray(value) &&
|
|
46
|
+
value.length > 0 &&
|
|
47
|
+
isPlainObject(value[0]) &&
|
|
48
|
+
typeof value[0].authoredId === "string");
|
|
49
|
+
}
|
|
50
|
+
export function getRenderedNodePath(node) {
|
|
51
|
+
if (!isPlainObject(node))
|
|
52
|
+
return undefined;
|
|
53
|
+
const path = node[RENDERED_NODE_PATH_KEY];
|
|
54
|
+
if (isRenderedNodePath(path))
|
|
55
|
+
return path;
|
|
56
|
+
return typeof node.id === "string" && node.id ? renderedNodePathForAuthoredId(node.id) : undefined;
|
|
57
|
+
}
|
|
58
|
+
export function renderedNodeIdFromPath(path) {
|
|
59
|
+
return path ? serializeRenderedNodePath(path) : undefined;
|
|
60
|
+
}
|
|
61
|
+
export function renderedNodeIdForNode(node) {
|
|
62
|
+
return renderedNodeIdFromPath(getRenderedNodePath(node));
|
|
63
|
+
}
|
|
64
|
+
function serializeSegment(segment) {
|
|
65
|
+
if ("authoredId" in segment)
|
|
66
|
+
return `a:${encodePart(segment.authoredId)}`;
|
|
67
|
+
if ("symbol" in segment) {
|
|
68
|
+
return `s:${encodePart(segment.symbol)}:${encodePart(segment.instanceId)}`;
|
|
69
|
+
}
|
|
70
|
+
if ("repeat" in segment) {
|
|
71
|
+
return [
|
|
72
|
+
"r",
|
|
73
|
+
encodePart(segment.repeat),
|
|
74
|
+
String(segment.index),
|
|
75
|
+
encodePart(segment.buildingId ?? ""),
|
|
76
|
+
].join(":");
|
|
77
|
+
}
|
|
78
|
+
if ("buildingSlice" in segment) {
|
|
79
|
+
return [
|
|
80
|
+
"b",
|
|
81
|
+
encodePart(segment.buildingSlice),
|
|
82
|
+
String(segment.index),
|
|
83
|
+
encodePart(segment.buildingId),
|
|
84
|
+
].join(":");
|
|
85
|
+
}
|
|
86
|
+
if ("runtimeRepeat" in segment) {
|
|
87
|
+
return [
|
|
88
|
+
"rr",
|
|
89
|
+
encodePart(segment.runtimeRepeat),
|
|
90
|
+
String(segment.index),
|
|
91
|
+
encodePart(segment.key),
|
|
92
|
+
].join(":");
|
|
93
|
+
}
|
|
94
|
+
return `x:${encodePart(segment.synthetic)}`;
|
|
95
|
+
}
|
|
96
|
+
export function serializeRenderedNodePath(path) {
|
|
97
|
+
return path.map(serializeSegment).join("|");
|
|
98
|
+
}
|
|
99
|
+
export function parseRenderedNodePath(serialized) {
|
|
100
|
+
const parts = serialized.split("|").filter(Boolean);
|
|
101
|
+
if (parts.length === 0)
|
|
102
|
+
return undefined;
|
|
103
|
+
const segments = [];
|
|
104
|
+
for (const part of parts) {
|
|
105
|
+
const [kind, one = "", two = "", three = ""] = part.split(":");
|
|
106
|
+
if (kind === "a") {
|
|
107
|
+
segments.push({ authoredId: decodePart(one) });
|
|
108
|
+
}
|
|
109
|
+
else if (kind === "s") {
|
|
110
|
+
segments.push({ symbol: decodePart(one), instanceId: decodePart(two) });
|
|
111
|
+
}
|
|
112
|
+
else if (kind === "r") {
|
|
113
|
+
const buildingId = decodePart(three);
|
|
114
|
+
segments.push({
|
|
115
|
+
repeat: decodePart(one),
|
|
116
|
+
index: Number(two),
|
|
117
|
+
...(buildingId ? { buildingId } : {}),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
else if (kind === "b") {
|
|
121
|
+
segments.push({
|
|
122
|
+
buildingSlice: decodePart(one),
|
|
123
|
+
index: Number(two),
|
|
124
|
+
buildingId: decodePart(three),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
else if (kind === "rr") {
|
|
128
|
+
segments.push({ runtimeRepeat: decodePart(one), index: Number(two), key: decodePart(three) });
|
|
129
|
+
}
|
|
130
|
+
else if (kind === "x") {
|
|
131
|
+
segments.push({ synthetic: decodePart(one) });
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return isRenderedNodePath(segments) ? segments : undefined;
|
|
138
|
+
}
|
|
139
|
+
export function getAuthoredIdFromSerializedRenderedNodeId(serialized) {
|
|
140
|
+
return getRenderedNodeAuthoredId(parseRenderedNodePath(serialized));
|
|
141
|
+
}
|
|
142
|
+
export function withRenderedNodePath(node, path) {
|
|
143
|
+
return { ...node, [RENDERED_NODE_PATH_KEY]: path };
|
|
144
|
+
}
|
|
145
|
+
export function withRenderedNodePathSegments(node, segments) {
|
|
146
|
+
const path = getRenderedNodePath(node);
|
|
147
|
+
return path ? withRenderedNodePath(node, appendRenderedNodePathSegments(path, segments)) : node;
|
|
148
|
+
}
|
|
149
|
+
export function appendRenderedNodePathSegmentsDeep(value, segments) {
|
|
150
|
+
if (segments.length === 0)
|
|
151
|
+
return value;
|
|
152
|
+
if (Array.isArray(value)) {
|
|
153
|
+
return value.map((item) => appendRenderedNodePathSegmentsDeep(item, segments));
|
|
154
|
+
}
|
|
155
|
+
if (!isPlainObject(value))
|
|
156
|
+
return value;
|
|
157
|
+
const result = {};
|
|
158
|
+
for (const [key, child] of Object.entries(value)) {
|
|
159
|
+
result[key] = appendRenderedNodePathSegmentsDeep(child, segments);
|
|
160
|
+
}
|
|
161
|
+
return isNodeLike(value) ? withRenderedNodePathSegments(result, segments) : result;
|
|
162
|
+
}
|
|
163
|
+
function reserveAuthoredId(desiredId, path, seen) {
|
|
164
|
+
let candidate = desiredId;
|
|
165
|
+
let index = 1;
|
|
166
|
+
while (seen.has(candidate)) {
|
|
167
|
+
candidate = `${pathHashAuthoredId([...path, "duplicate", index])}_${index}`;
|
|
168
|
+
index += 1;
|
|
169
|
+
}
|
|
170
|
+
seen.add(candidate);
|
|
171
|
+
return candidate;
|
|
172
|
+
}
|
|
173
|
+
function cloneNodeWithAuthoredIds(node, path, seen) {
|
|
174
|
+
const desiredId = typeof node.id === "string" && node.id ? node.id : pathHashAuthoredId(path);
|
|
175
|
+
const id = reserveAuthoredId(desiredId, path, seen);
|
|
176
|
+
const result = {
|
|
177
|
+
...node,
|
|
178
|
+
id,
|
|
179
|
+
[RENDERED_NODE_PATH_KEY]: renderedNodePathForAuthoredId(id),
|
|
180
|
+
};
|
|
181
|
+
if (Array.isArray(node.children)) {
|
|
182
|
+
result.children = node.children.map((child, index) => clonePotentialNode(child, [...path, "children", index], seen));
|
|
183
|
+
}
|
|
184
|
+
if ("template" in node) {
|
|
185
|
+
result.template = clonePotentialNode(node.template, [...path, "template"], seen);
|
|
186
|
+
}
|
|
187
|
+
if ("emptyState" in node) {
|
|
188
|
+
result.emptyState = clonePotentialNode(node.emptyState, [...path, "emptyState"], seen);
|
|
189
|
+
}
|
|
190
|
+
if (isPlainObject(node.slots)) {
|
|
191
|
+
const slots = {};
|
|
192
|
+
for (const [slotName, slotValue] of Object.entries(node.slots)) {
|
|
193
|
+
slots[slotName] = clonePotentialNode(slotValue, [...path, "slots", slotName], seen);
|
|
194
|
+
}
|
|
195
|
+
result.slots = slots;
|
|
196
|
+
}
|
|
197
|
+
if (isPlainObject(node.props)) {
|
|
198
|
+
const props = clonePotentialNode(node.props, [...path, "props"], seen);
|
|
199
|
+
if (props !== node.props)
|
|
200
|
+
result.props = props;
|
|
201
|
+
}
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
function clonePotentialNode(value, path, seen) {
|
|
205
|
+
if (isNodeLike(value)) {
|
|
206
|
+
return cloneNodeWithAuthoredIds(value, path, seen);
|
|
207
|
+
}
|
|
208
|
+
if (Array.isArray(value)) {
|
|
209
|
+
let changed = false;
|
|
210
|
+
const next = value.map((item, index) => {
|
|
211
|
+
const cloned = clonePotentialNode(item, [...path, index], seen);
|
|
212
|
+
changed ||= cloned !== item;
|
|
213
|
+
return cloned;
|
|
214
|
+
});
|
|
215
|
+
return changed ? next : value;
|
|
216
|
+
}
|
|
217
|
+
if (isPlainObject(value)) {
|
|
218
|
+
let changed = false;
|
|
219
|
+
const result = {};
|
|
220
|
+
for (const [key, child] of Object.entries(value)) {
|
|
221
|
+
const cloned = clonePotentialNode(child, [...path, key], seen);
|
|
222
|
+
changed ||= cloned !== child;
|
|
223
|
+
result[key] = cloned;
|
|
224
|
+
}
|
|
225
|
+
return changed ? result : value;
|
|
226
|
+
}
|
|
227
|
+
return value;
|
|
228
|
+
}
|
|
229
|
+
export function withAuthoredNodeIds(rawSiteJson) {
|
|
230
|
+
const seen = new Set();
|
|
231
|
+
const result = { ...rawSiteJson };
|
|
232
|
+
if (Array.isArray(rawSiteJson.pages)) {
|
|
233
|
+
result.pages = rawSiteJson.pages.map((page, index) => {
|
|
234
|
+
if (!isPlainObject(page))
|
|
235
|
+
return page;
|
|
236
|
+
const nextPage = { ...page };
|
|
237
|
+
if ("tree" in page) {
|
|
238
|
+
nextPage.tree = clonePotentialNode(page.tree, ["pages", index, "tree"], seen);
|
|
239
|
+
}
|
|
240
|
+
return nextPage;
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
if (isPlainObject(rawSiteJson.layouts)) {
|
|
244
|
+
const layouts = {};
|
|
245
|
+
for (const [layoutName, layoutDef] of Object.entries(rawSiteJson.layouts)) {
|
|
246
|
+
if (!isPlainObject(layoutDef)) {
|
|
247
|
+
layouts[layoutName] = layoutDef;
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const nextLayout = { ...layoutDef };
|
|
251
|
+
if ("tree" in layoutDef) {
|
|
252
|
+
nextLayout.tree = clonePotentialNode(layoutDef.tree, ["layouts", layoutName, "tree"], seen);
|
|
253
|
+
}
|
|
254
|
+
layouts[layoutName] = nextLayout;
|
|
255
|
+
}
|
|
256
|
+
result.layouts = layouts;
|
|
257
|
+
}
|
|
258
|
+
if (isPlainObject(rawSiteJson.symbols)) {
|
|
259
|
+
const symbols = {};
|
|
260
|
+
for (const [symbolName, symbolDef] of Object.entries(rawSiteJson.symbols)) {
|
|
261
|
+
if (!isPlainObject(symbolDef)) {
|
|
262
|
+
symbols[symbolName] = symbolDef;
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
const nextSymbol = { ...symbolDef };
|
|
266
|
+
if ("tree" in symbolDef) {
|
|
267
|
+
nextSymbol.tree = clonePotentialNode(symbolDef.tree, ["symbols", symbolName, "tree"], seen);
|
|
268
|
+
}
|
|
269
|
+
symbols[symbolName] = nextSymbol;
|
|
270
|
+
}
|
|
271
|
+
result.symbols = symbols;
|
|
272
|
+
}
|
|
273
|
+
return result;
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=nodeIdentity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeIdentity.js","sourceRoot":"","sources":["../../src/utils/nodeIdentity.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,11 @@ export interface ResolveOptions {
|
|
|
28
28
|
assetCdnBase: string;
|
|
29
29
|
buildingIds: number[];
|
|
30
30
|
preserveKeys?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Editor/preview-only identity substrate. Default stays off so existing
|
|
33
|
+
* compiler/consumer output remains byte-identical.
|
|
34
|
+
*/
|
|
35
|
+
includeIdentity?: boolean;
|
|
31
36
|
}
|
|
32
37
|
/**
|
|
33
38
|
* A reusable named subtree. `tree` is a template that may contain
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveConfig.d.ts","sourceRoot":"","sources":["../../src/utils/resolveConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"resolveConfig.d.ts","sourceRoot":"","sources":["../../src/utils/resolveConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
* interpolates {{variable}} tokens, resolves asset URLs, and expands
|
|
12
12
|
* BuildingSlice / building_template directives.
|
|
13
13
|
*/
|
|
14
|
+
import { appendRenderedNodePathSegments, getRenderedNodePath, renderedNodePathForAuthoredId, withAuthoredNodeIds, withRenderedNodePath, } from "./nodeIdentity";
|
|
15
|
+
import { tokenToCssVarReference } from "./themeTokens";
|
|
14
16
|
// Resolution order from most-specific to least-specific
|
|
15
17
|
const RESOLUTION_ORDER = ["building", "site", "org", "template", "global"];
|
|
16
18
|
// Authoring-only keys stripped from resolved output; `theme` stays (consumed by
|
|
@@ -100,6 +102,38 @@ function buildAssetScopes(siteId, orgId, templateId, buildingId) {
|
|
|
100
102
|
scopes.push("assets/global/");
|
|
101
103
|
return scopes;
|
|
102
104
|
}
|
|
105
|
+
function authoredIdOf(node) {
|
|
106
|
+
return typeof node["id"] === "string" && node["id"] ? node["id"] : undefined;
|
|
107
|
+
}
|
|
108
|
+
function renderedPathForNode(node, ctx) {
|
|
109
|
+
if (!ctx.identityEnabled)
|
|
110
|
+
return undefined;
|
|
111
|
+
const basePath = getRenderedNodePath(node);
|
|
112
|
+
if (!basePath)
|
|
113
|
+
return undefined;
|
|
114
|
+
return appendRenderedNodePathSegments(basePath, ctx.renderedSegments);
|
|
115
|
+
}
|
|
116
|
+
function applyRenderedContext(source, result, ctx) {
|
|
117
|
+
const path = renderedPathForNode(source, ctx);
|
|
118
|
+
return path ? withRenderedNodePath(result, path) : result;
|
|
119
|
+
}
|
|
120
|
+
function syntheticNodeFromSource(source, type, props, children, ctx, synthetic) {
|
|
121
|
+
const id = authoredIdOf(source);
|
|
122
|
+
const result = { type, props, children };
|
|
123
|
+
if (id) {
|
|
124
|
+
result["id"] = id;
|
|
125
|
+
}
|
|
126
|
+
if (id && ctx.identityEnabled) {
|
|
127
|
+
const path = appendRenderedNodePathSegments(renderedNodePathForAuthoredId(id), [...ctx.renderedSegments, { synthetic }]);
|
|
128
|
+
return withRenderedNodePath(result, path);
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
function withRenderedSegment(ctx, segment) {
|
|
133
|
+
if (!ctx.identityEnabled)
|
|
134
|
+
return ctx;
|
|
135
|
+
return { ...ctx, renderedSegments: [...ctx.renderedSegments, segment] };
|
|
136
|
+
}
|
|
103
137
|
function substituteNode(node, ctx) {
|
|
104
138
|
if (typeof node === "string") {
|
|
105
139
|
return interpolate(node, ctx.varsMap);
|
|
@@ -146,12 +180,18 @@ function substituteNode(node, ctx) {
|
|
|
146
180
|
}
|
|
147
181
|
return resolved;
|
|
148
182
|
}
|
|
183
|
+
if (ctx.resolveTokenBindings && keys.length === 1 && keys[0] === "$token") {
|
|
184
|
+
const tokenName = obj["$token"];
|
|
185
|
+
return typeof tokenName === "string" ? tokenToCssVarReference(tokenName) : "";
|
|
186
|
+
}
|
|
149
187
|
// Regular dict — recurse into values
|
|
150
188
|
const result = {};
|
|
151
189
|
for (const [k, v] of Object.entries(obj)) {
|
|
152
190
|
result[k] = substituteNode(v, ctx);
|
|
153
191
|
}
|
|
154
|
-
return
|
|
192
|
+
return typeof obj["type"] === "string"
|
|
193
|
+
? applyRenderedContext(obj, result, ctx)
|
|
194
|
+
: result;
|
|
155
195
|
}
|
|
156
196
|
// int, float, bool, null — pass through
|
|
157
197
|
return node;
|
|
@@ -174,16 +214,18 @@ function expandBuildingSlice(node, ctx) {
|
|
|
174
214
|
const template = node["template"];
|
|
175
215
|
const props = node["props"] ?? {};
|
|
176
216
|
if (typeof template !== "object" || template === null || Array.isArray(template)) {
|
|
177
|
-
return
|
|
217
|
+
return syntheticNodeFromSource(node, "Grid", props, [], ctx, "BuildingSlice");
|
|
178
218
|
}
|
|
179
219
|
const children = [];
|
|
180
|
-
for (const bid of ctx.buildingIds) {
|
|
220
|
+
for (const [index, bid] of ctx.buildingIds.entries()) {
|
|
181
221
|
const buildingBlob = ctx.buildingBlobCache[bid] ?? {};
|
|
182
222
|
const buildingBlobs = { ...ctx.commonBlobs, building: buildingBlob };
|
|
183
223
|
const baseCtx = {
|
|
184
224
|
assetManifest: ctx.assetManifest,
|
|
185
225
|
assetCdnBase: ctx.assetCdnBase,
|
|
186
226
|
preserveKeys: ctx.preserveKeys,
|
|
227
|
+
identityEnabled: ctx.identityEnabled,
|
|
228
|
+
resolveTokenBindings: ctx.resolveTokenBindings,
|
|
187
229
|
buildingIds: ctx.buildingIds,
|
|
188
230
|
buildingBlobCache: ctx.buildingBlobCache,
|
|
189
231
|
commonBlobs: ctx.commonBlobs,
|
|
@@ -195,14 +237,19 @@ function expandBuildingSlice(node, ctx) {
|
|
|
195
237
|
symbolBudget: ctx.symbolBudget,
|
|
196
238
|
datasets: ctx.datasets,
|
|
197
239
|
rawTheme: ctx.rawTheme,
|
|
240
|
+
renderedSegments: ctx.renderedSegments,
|
|
198
241
|
};
|
|
199
242
|
// Route the template root through substituteNode so a root-level directive
|
|
200
243
|
// (Symbol/BuildingSlice/$content/$key) is dispatched, not left raw per-building.
|
|
201
|
-
const perBuildingCtx = makeCtx(buildingBlobs, baseCtx, bid)
|
|
244
|
+
const perBuildingCtx = withRenderedSegment(makeCtx(buildingBlobs, baseCtx, bid), {
|
|
245
|
+
buildingSlice: authoredIdOf(node) ?? "unknown",
|
|
246
|
+
index,
|
|
247
|
+
buildingId: String(bid),
|
|
248
|
+
});
|
|
202
249
|
const resolved = substituteNode(template, perBuildingCtx);
|
|
203
250
|
children.push(resolved);
|
|
204
251
|
}
|
|
205
|
-
return
|
|
252
|
+
return syntheticNodeFromSource(node, "Grid", props, children, ctx, "BuildingSlice");
|
|
206
253
|
}
|
|
207
254
|
/** The non-empty `theme.modes[modeKey]` override map, or null. */
|
|
208
255
|
function readBuildingMode(rawTheme, modeKey) {
|
|
@@ -243,11 +290,12 @@ function expandRepeat(node, ctx) {
|
|
|
243
290
|
// No buildings → render the emptyState (in the current scope) or an empty group.
|
|
244
291
|
if (ctx.buildingIds.length === 0) {
|
|
245
292
|
const emptyState = node["emptyState"];
|
|
246
|
-
const
|
|
247
|
-
|
|
293
|
+
const emptyCtx = withRenderedSegment(ctx, { synthetic: "Repeat.emptyState" });
|
|
294
|
+
const emptyChildren = emptyState != null ? [substituteNode(emptyState, emptyCtx)] : [];
|
|
295
|
+
return syntheticNodeFromSource(node, "Fragment", {}, emptyChildren, ctx, "Repeat.emptyState");
|
|
248
296
|
}
|
|
249
297
|
const perBuilding = [];
|
|
250
|
-
for (const bid of ctx.buildingIds) {
|
|
298
|
+
for (const [index, bid] of ctx.buildingIds.entries()) {
|
|
251
299
|
// Bound fan-out (shared Symbol budget): nested compile Repeats over the same dataset
|
|
252
300
|
// are N^D nodes, which the depth-less expansion can't otherwise stop before OOM.
|
|
253
301
|
ctx.symbolBudget.count += 1;
|
|
@@ -260,6 +308,8 @@ function expandRepeat(node, ctx) {
|
|
|
260
308
|
assetManifest: ctx.assetManifest,
|
|
261
309
|
assetCdnBase: ctx.assetCdnBase,
|
|
262
310
|
preserveKeys: ctx.preserveKeys,
|
|
311
|
+
identityEnabled: ctx.identityEnabled,
|
|
312
|
+
resolveTokenBindings: ctx.resolveTokenBindings,
|
|
263
313
|
buildingIds: ctx.buildingIds,
|
|
264
314
|
buildingBlobCache: ctx.buildingBlobCache,
|
|
265
315
|
commonBlobs: ctx.commonBlobs,
|
|
@@ -271,32 +321,25 @@ function expandRepeat(node, ctx) {
|
|
|
271
321
|
symbolBudget: ctx.symbolBudget,
|
|
272
322
|
datasets: ctx.datasets,
|
|
273
323
|
rawTheme: ctx.rawTheme,
|
|
324
|
+
renderedSegments: ctx.renderedSegments,
|
|
274
325
|
};
|
|
275
|
-
const perBuildingCtx = makeCtx(buildingBlobs, baseCtx, bid);
|
|
326
|
+
const perBuildingCtx = withRenderedSegment(makeCtx(buildingBlobs, baseCtx, bid), { repeat: String(datasetName), index, buildingId: String(bid) });
|
|
276
327
|
const resolvedChildren = children.map((child) => substituteNode(child, perBuildingCtx));
|
|
277
328
|
// Per-building data scope (D8). `as` lets a future runtime Repeat address the record.
|
|
278
329
|
const providerProps = { propertyId: String(bid) };
|
|
279
330
|
if (as != null)
|
|
280
331
|
providerProps["as"] = as;
|
|
281
|
-
let wrapped =
|
|
282
|
-
type: "DataProvider",
|
|
283
|
-
props: providerProps,
|
|
284
|
-
children: resolvedChildren,
|
|
285
|
-
};
|
|
332
|
+
let wrapped = syntheticNodeFromSource(node, "DataProvider", providerProps, resolvedChildren, perBuildingCtx, "Repeat.DataProvider");
|
|
286
333
|
// Overlay the building's theme mode, if any. assembleTheme strips `modes` from the
|
|
287
334
|
// resolved theme, so feed it to ThemeScope via props.
|
|
288
335
|
const modeKey = `building:${bid}`;
|
|
289
336
|
const modeOverrides = readBuildingMode(ctx.rawTheme, modeKey);
|
|
290
337
|
if (modeOverrides) {
|
|
291
|
-
wrapped = {
|
|
292
|
-
type: "ThemeScope",
|
|
293
|
-
props: { theme: { modes: { [modeKey]: modeOverrides } }, modeKey },
|
|
294
|
-
children: [wrapped],
|
|
295
|
-
};
|
|
338
|
+
wrapped = syntheticNodeFromSource(node, "ThemeScope", { theme: { modes: { [modeKey]: modeOverrides } }, modeKey }, [wrapped], perBuildingCtx, "Repeat.ThemeScope");
|
|
296
339
|
}
|
|
297
340
|
perBuilding.push(wrapped);
|
|
298
341
|
}
|
|
299
|
-
return
|
|
342
|
+
return syntheticNodeFromSource(node, "Fragment", {}, perBuilding, ctx, "Repeat");
|
|
300
343
|
}
|
|
301
344
|
/**
|
|
302
345
|
* Runtime `Repeat`: does NOT fan out. Resolves the child subtree ONCE as a template (leaving
|
|
@@ -315,16 +358,20 @@ function emitRuntimeRepeat(node, dataset, ctx) {
|
|
|
315
358
|
// A single child is the template; multiple children are wrapped in a Fragment so each record renders all of them.
|
|
316
359
|
const template = resolvedChildren.length === 1
|
|
317
360
|
? resolvedChildren[0]
|
|
318
|
-
:
|
|
361
|
+
: syntheticNodeFromSource(node, "Fragment", {}, resolvedChildren, ctx, "Repeat.template");
|
|
319
362
|
// Inline the dataset def (resolving any $content/{{var}} in a filter; {$data} stays intact) so the
|
|
320
363
|
// emitted Repeat is self-contained — the top-level `datasets` map is stripped from the output.
|
|
321
364
|
const resolvedDataset = substituteNode(dataset, ctx);
|
|
322
365
|
const props = { dataset: resolvedDataset, as, template };
|
|
323
366
|
const emptyState = node["emptyState"];
|
|
324
367
|
if (emptyState != null) {
|
|
325
|
-
props["emptyState"] = substituteNode(emptyState, ctx);
|
|
368
|
+
props["emptyState"] = substituteNode(emptyState, withRenderedSegment(ctx, { synthetic: "Repeat.emptyState" }));
|
|
326
369
|
}
|
|
327
|
-
|
|
370
|
+
const result = { type: "Repeat", props };
|
|
371
|
+
const id = authoredIdOf(node);
|
|
372
|
+
if (id)
|
|
373
|
+
result["id"] = id;
|
|
374
|
+
return applyRenderedContext(node, result, ctx);
|
|
328
375
|
}
|
|
329
376
|
function isSingleKeyBinding(node, key) {
|
|
330
377
|
return (typeof node === "object" &&
|
|
@@ -472,7 +519,7 @@ function expandSymbol(node, ctx) {
|
|
|
472
519
|
throw new Error(`Symbol "${ref}" left a Slot after expansion (named slots must be filled; anonymous Slots are layout-only)`);
|
|
473
520
|
}
|
|
474
521
|
// Resolve in the instance scope; bump depth so a nested Symbol stays bounded.
|
|
475
|
-
const childCtx = { ...ctx, symbolDepth: ctx.symbolDepth + 1 };
|
|
522
|
+
const childCtx = withRenderedSegment({ ...ctx, symbolDepth: ctx.symbolDepth + 1 }, { symbol: ref, instanceId: authoredIdOf(node) ?? "unknown" });
|
|
476
523
|
return substituteNode(rootNode, childCtx);
|
|
477
524
|
}
|
|
478
525
|
function replaceSlot(node, pageTree) {
|
|
@@ -566,7 +613,8 @@ export function assembleTheme(rawTheme, buildingId) {
|
|
|
566
613
|
// Main resolver
|
|
567
614
|
// ---------------------------------------------------------------------------
|
|
568
615
|
export function resolveConfig(options) {
|
|
569
|
-
const { rawSiteJson, contentBlobs, assetManifest, assetCdnBase, buildingIds, preserveKeys = false, } = options;
|
|
616
|
+
const { rawSiteJson, contentBlobs, assetManifest, assetCdnBase, buildingIds, preserveKeys = false, includeIdentity = false, } = options;
|
|
617
|
+
const authoredSiteJson = includeIdentity ? withAuthoredNodeIds(rawSiteJson) : rawSiteJson;
|
|
570
618
|
// Pre-fetch all building blobs from the content blobs input
|
|
571
619
|
const buildingBlobCache = {};
|
|
572
620
|
for (const bid of buildingIds) {
|
|
@@ -590,22 +638,24 @@ export function resolveConfig(options) {
|
|
|
590
638
|
// Extract site context from rawSiteJson for asset scope resolution
|
|
591
639
|
// (orgId/templateId are not in site.json — they come from DynamoDB in production.
|
|
592
640
|
// For client-side preview, we pass them via contentBlobs keys or infer from context.)
|
|
593
|
-
const siteId =
|
|
594
|
-
const orgId =
|
|
595
|
-
const templateId =
|
|
641
|
+
const siteId = authoredSiteJson.siteId;
|
|
642
|
+
const orgId = authoredSiteJson._orgId;
|
|
643
|
+
const templateId = authoredSiteJson._templateId;
|
|
596
644
|
// Normalize a non-object `symbols` to {} so an invalid value can't crash on index.
|
|
597
|
-
const symbols = isPlainObject(
|
|
598
|
-
?
|
|
645
|
+
const symbols = isPlainObject(authoredSiteJson.symbols)
|
|
646
|
+
? authoredSiteJson.symbols
|
|
599
647
|
: {};
|
|
600
648
|
// Same normalization for `datasets` (consumed by the compile-time Repeat expansion).
|
|
601
|
-
const datasets = isPlainObject(
|
|
602
|
-
?
|
|
649
|
+
const datasets = isPlainObject(authoredSiteJson.datasets)
|
|
650
|
+
? authoredSiteJson.datasets
|
|
603
651
|
: {};
|
|
604
|
-
const rawTheme = isPlainObject(
|
|
652
|
+
const rawTheme = isPlainObject(authoredSiteJson.theme) ? authoredSiteJson.theme : undefined;
|
|
605
653
|
const baseCtx = {
|
|
606
654
|
assetManifest,
|
|
607
655
|
assetCdnBase,
|
|
608
656
|
preserveKeys,
|
|
657
|
+
identityEnabled: includeIdentity,
|
|
658
|
+
resolveTokenBindings: true,
|
|
609
659
|
buildingIds,
|
|
610
660
|
buildingBlobCache,
|
|
611
661
|
commonBlobs,
|
|
@@ -618,22 +668,27 @@ export function resolveConfig(options) {
|
|
|
618
668
|
symbolBudget: { count: 0 },
|
|
619
669
|
datasets,
|
|
620
670
|
rawTheme,
|
|
671
|
+
renderedSegments: [],
|
|
621
672
|
};
|
|
622
673
|
// Resolve top-level fields without building scope. `symbols`/`datasets` are excluded:
|
|
623
674
|
// they're consumed only at their use sites and stripped from output; walking them here
|
|
624
675
|
// would resolve nested bindings out of context.
|
|
625
|
-
const rawLayouts =
|
|
676
|
+
const rawLayouts = authoredSiteJson.layouts ?? {};
|
|
626
677
|
const siteMinusPages = {};
|
|
627
|
-
for (const [k, v] of Object.entries(
|
|
628
|
-
if (k !== "pages" && k !== "layouts" && k !== "symbols" && k !== "datasets") {
|
|
678
|
+
for (const [k, v] of Object.entries(authoredSiteJson)) {
|
|
679
|
+
if (k !== "pages" && k !== "layouts" && k !== "symbols" && k !== "datasets" && k !== "theme") {
|
|
629
680
|
siteMinusPages[k] = v;
|
|
630
681
|
}
|
|
631
682
|
}
|
|
632
683
|
const resolvedBase = substituteTree(siteMinusPages, siteBlobs, baseCtx, null);
|
|
684
|
+
if ("theme" in authoredSiteJson) {
|
|
685
|
+
const resolvedTheme = substituteTree({ theme: authoredSiteJson.theme }, siteBlobs, { ...baseCtx, resolveTokenBindings: false }, null);
|
|
686
|
+
resolvedBase["theme"] = resolvedTheme["theme"];
|
|
687
|
+
}
|
|
633
688
|
// Resolve building slugs
|
|
634
689
|
const buildingSlugs = resolveBuildingSlugs(buildingIds, buildingBlobCache, commonBlobs);
|
|
635
690
|
// Resolve each page
|
|
636
|
-
const rawPages =
|
|
691
|
+
const rawPages = authoredSiteJson.pages ?? [];
|
|
637
692
|
const resolvedPages = [];
|
|
638
693
|
for (const page of rawPages) {
|
|
639
694
|
if (page.building_template) {
|