pagiera 0.2.0-alpha.33

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 (192) hide show
  1. package/README.md +528 -0
  2. package/dist/adapters.d.ts +89 -0
  3. package/dist/adapters.d.ts.map +1 -0
  4. package/dist/adapters.js +2 -0
  5. package/dist/adapters.js.map +1 -0
  6. package/dist/client.d.ts +22 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +33 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/data.js +210 -0
  11. package/dist/data.js.map +7 -0
  12. package/dist/document.d.ts +63 -0
  13. package/dist/document.d.ts.map +1 -0
  14. package/dist/document.js +25 -0
  15. package/dist/document.js.map +1 -0
  16. package/dist/editor.d.ts +14 -0
  17. package/dist/editor.d.ts.map +1 -0
  18. package/dist/editor.js +59 -0
  19. package/dist/editor.js.map +1 -0
  20. package/dist/full-editor.d.ts +53 -0
  21. package/dist/full-editor.js +11117 -0
  22. package/dist/full-editor.js.map +7 -0
  23. package/dist/full.css +3498 -0
  24. package/dist/index.d.ts +8 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +7 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/internal/app/api/ai-design/route.d.ts +3 -0
  29. package/dist/internal/app/api/ai-design/route.d.ts.map +1 -0
  30. package/dist/internal/app/api/ai-design/route.js +165 -0
  31. package/dist/internal/app/api/ai-design/route.js.map +1 -0
  32. package/dist/internal/app/p/editor/ai-panel.d.ts +27 -0
  33. package/dist/internal/app/p/editor/ai-panel.d.ts.map +1 -0
  34. package/dist/internal/app/p/editor/ai-panel.js +77 -0
  35. package/dist/internal/app/p/editor/ai-panel.js.map +1 -0
  36. package/dist/internal/app/p/editor/data-modal.d.ts +26 -0
  37. package/dist/internal/app/p/editor/data-modal.d.ts.map +1 -0
  38. package/dist/internal/app/p/editor/data-modal.js +94 -0
  39. package/dist/internal/app/p/editor/data-modal.js.map +1 -0
  40. package/dist/internal/app/p/editor/data-panel.d.ts +18 -0
  41. package/dist/internal/app/p/editor/data-panel.d.ts.map +1 -0
  42. package/dist/internal/app/p/editor/data-panel.js +45 -0
  43. package/dist/internal/app/p/editor/data-panel.js.map +1 -0
  44. package/dist/internal/app/p/editor/editor.d.ts +51 -0
  45. package/dist/internal/app/p/editor/editor.d.ts.map +1 -0
  46. package/dist/internal/app/p/editor/editor.js +1551 -0
  47. package/dist/internal/app/p/editor/editor.js.map +1 -0
  48. package/dist/internal/app/p/editor/fields.d.ts +111 -0
  49. package/dist/internal/app/p/editor/fields.d.ts.map +1 -0
  50. package/dist/internal/app/p/editor/fields.js +141 -0
  51. package/dist/internal/app/p/editor/fields.js.map +1 -0
  52. package/dist/internal/app/p/editor/inspector.d.ts +38 -0
  53. package/dist/internal/app/p/editor/inspector.d.ts.map +1 -0
  54. package/dist/internal/app/p/editor/inspector.js +336 -0
  55. package/dist/internal/app/p/editor/inspector.js.map +1 -0
  56. package/dist/internal/app/p/editor/library.d.ts +18 -0
  57. package/dist/internal/app/p/editor/library.d.ts.map +1 -0
  58. package/dist/internal/app/p/editor/library.js +61 -0
  59. package/dist/internal/app/p/editor/library.js.map +1 -0
  60. package/dist/internal/app/p/editor/parts.d.ts +75 -0
  61. package/dist/internal/app/p/editor/parts.d.ts.map +1 -0
  62. package/dist/internal/app/p/editor/parts.js +261 -0
  63. package/dist/internal/app/p/editor/parts.js.map +1 -0
  64. package/dist/internal/app/p/editor/templates-panel.d.ts +6 -0
  65. package/dist/internal/app/p/editor/templates-panel.d.ts.map +1 -0
  66. package/dist/internal/app/p/editor/templates-panel.js +12 -0
  67. package/dist/internal/app/p/editor/templates-panel.js.map +1 -0
  68. package/dist/internal/app/p/editor/use-canvas-view.d.ts +24 -0
  69. package/dist/internal/app/p/editor/use-canvas-view.d.ts.map +1 -0
  70. package/dist/internal/app/p/editor/use-canvas-view.js +242 -0
  71. package/dist/internal/app/p/editor/use-canvas-view.js.map +1 -0
  72. package/dist/internal/app/p/editor/use-editor.d.ts +48 -0
  73. package/dist/internal/app/p/editor/use-editor.d.ts.map +1 -0
  74. package/dist/internal/app/p/editor/use-editor.js +224 -0
  75. package/dist/internal/app/p/editor/use-editor.js.map +1 -0
  76. package/dist/internal/app/p/editor/variables-panel.d.ts +8 -0
  77. package/dist/internal/app/p/editor/variables-panel.d.ts.map +1 -0
  78. package/dist/internal/app/p/editor/variables-panel.js +52 -0
  79. package/dist/internal/app/p/editor/variables-panel.js.map +1 -0
  80. package/dist/internal/components/ui/select.d.ts +12 -0
  81. package/dist/internal/components/ui/select.d.ts.map +1 -0
  82. package/dist/internal/components/ui/select.js +32 -0
  83. package/dist/internal/components/ui/select.js.map +1 -0
  84. package/dist/internal/drizzle/index.d.ts +6 -0
  85. package/dist/internal/drizzle/index.d.ts.map +1 -0
  86. package/dist/internal/drizzle/index.js +20 -0
  87. package/dist/internal/drizzle/index.js.map +1 -0
  88. package/dist/internal/drizzle/schema.d.ts +405 -0
  89. package/dist/internal/drizzle/schema.d.ts.map +1 -0
  90. package/dist/internal/drizzle/schema.js +70 -0
  91. package/dist/internal/drizzle/schema.js.map +1 -0
  92. package/dist/internal/lib/data/context.d.ts +8 -0
  93. package/dist/internal/lib/data/context.d.ts.map +1 -0
  94. package/dist/internal/lib/data/context.js +17 -0
  95. package/dist/internal/lib/data/context.js.map +1 -0
  96. package/dist/internal/lib/data/source.d.ts +54 -0
  97. package/dist/internal/lib/data/source.d.ts.map +1 -0
  98. package/dist/internal/lib/data/source.js +229 -0
  99. package/dist/internal/lib/data/source.js.map +1 -0
  100. package/dist/internal/lib/editor/ai-types.d.ts +44 -0
  101. package/dist/internal/lib/editor/ai-types.d.ts.map +1 -0
  102. package/dist/internal/lib/editor/ai-types.js +2 -0
  103. package/dist/internal/lib/editor/ai-types.js.map +1 -0
  104. package/dist/internal/lib/editor/arrange.d.ts +12 -0
  105. package/dist/internal/lib/editor/arrange.d.ts.map +1 -0
  106. package/dist/internal/lib/editor/arrange.js +72 -0
  107. package/dist/internal/lib/editor/arrange.js.map +1 -0
  108. package/dist/internal/lib/editor/cascade.d.ts +39 -0
  109. package/dist/internal/lib/editor/cascade.d.ts.map +1 -0
  110. package/dist/internal/lib/editor/cascade.js +86 -0
  111. package/dist/internal/lib/editor/cascade.js.map +1 -0
  112. package/dist/internal/lib/editor/icon.d.ts +6 -0
  113. package/dist/internal/lib/editor/icon.d.ts.map +1 -0
  114. package/dist/internal/lib/editor/icon.js +13 -0
  115. package/dist/internal/lib/editor/icon.js.map +1 -0
  116. package/dist/internal/lib/editor/presets.d.ts +10 -0
  117. package/dist/internal/lib/editor/presets.d.ts.map +1 -0
  118. package/dist/internal/lib/editor/presets.js +83 -0
  119. package/dist/internal/lib/editor/presets.js.map +1 -0
  120. package/dist/internal/lib/editor/showcase.d.ts +14 -0
  121. package/dist/internal/lib/editor/showcase.d.ts.map +1 -0
  122. package/dist/internal/lib/editor/showcase.js +219 -0
  123. package/dist/internal/lib/editor/showcase.js.map +1 -0
  124. package/dist/internal/lib/editor/site-templates.d.ts +4 -0
  125. package/dist/internal/lib/editor/site-templates.d.ts.map +1 -0
  126. package/dist/internal/lib/editor/site-templates.js +156 -0
  127. package/dist/internal/lib/editor/site-templates.js.map +1 -0
  128. package/dist/internal/lib/editor/snap.d.ts +34 -0
  129. package/dist/internal/lib/editor/snap.d.ts.map +1 -0
  130. package/dist/internal/lib/editor/snap.js +70 -0
  131. package/dist/internal/lib/editor/snap.js.map +1 -0
  132. package/dist/internal/lib/editor/style.d.ts +53 -0
  133. package/dist/internal/lib/editor/style.d.ts.map +1 -0
  134. package/dist/internal/lib/editor/style.js +313 -0
  135. package/dist/internal/lib/editor/style.js.map +1 -0
  136. package/dist/internal/lib/editor/tree.d.ts +72 -0
  137. package/dist/internal/lib/editor/tree.d.ts.map +1 -0
  138. package/dist/internal/lib/editor/tree.js +301 -0
  139. package/dist/internal/lib/editor/tree.js.map +1 -0
  140. package/dist/internal/lib/editor/types.d.ts +273 -0
  141. package/dist/internal/lib/editor/types.d.ts.map +1 -0
  142. package/dist/internal/lib/editor/types.js +411 -0
  143. package/dist/internal/lib/editor/types.js.map +1 -0
  144. package/dist/internal/lib/editor/validate.d.ts +20 -0
  145. package/dist/internal/lib/editor/validate.d.ts.map +1 -0
  146. package/dist/internal/lib/editor/validate.js +467 -0
  147. package/dist/internal/lib/editor/validate.js.map +1 -0
  148. package/dist/internal/lib/pages.d.ts +83 -0
  149. package/dist/internal/lib/pages.d.ts.map +1 -0
  150. package/dist/internal/lib/pages.js +294 -0
  151. package/dist/internal/lib/pages.js.map +1 -0
  152. package/dist/internal/lib/render/bind.d.ts +18 -0
  153. package/dist/internal/lib/render/bind.d.ts.map +1 -0
  154. package/dist/internal/lib/render/bind.js +28 -0
  155. package/dist/internal/lib/render/bind.js.map +1 -0
  156. package/dist/internal/lib/render/css.d.ts +31 -0
  157. package/dist/internal/lib/render/css.d.ts.map +1 -0
  158. package/dist/internal/lib/render/css.js +239 -0
  159. package/dist/internal/lib/render/css.js.map +1 -0
  160. package/dist/internal/lib/render/load-data.d.ts +15 -0
  161. package/dist/internal/lib/render/load-data.d.ts.map +1 -0
  162. package/dist/internal/lib/render/load-data.js +39 -0
  163. package/dist/internal/lib/render/load-data.js.map +1 -0
  164. package/dist/internal/lib/render/page-render.d.ts +17 -0
  165. package/dist/internal/lib/render/page-render.d.ts.map +1 -0
  166. package/dist/internal/lib/render/page-render.js +117 -0
  167. package/dist/internal/lib/render/page-render.js.map +1 -0
  168. package/dist/internal/lib/utils.d.ts +3 -0
  169. package/dist/internal/lib/utils.d.ts.map +1 -0
  170. package/dist/internal/lib/utils.js +6 -0
  171. package/dist/internal/lib/utils.js.map +1 -0
  172. package/dist/manrope-data.d.ts +3 -0
  173. package/dist/manrope-data.d.ts.map +1 -0
  174. package/dist/manrope-data.js +3 -0
  175. package/dist/manrope-data.js.map +1 -0
  176. package/dist/page.d.ts +9 -0
  177. package/dist/page.d.ts.map +1 -0
  178. package/dist/page.js +148 -0
  179. package/dist/page.js.map +1 -0
  180. package/dist/provider.d.ts +14 -0
  181. package/dist/provider.d.ts.map +1 -0
  182. package/dist/provider.js +45 -0
  183. package/dist/provider.js.map +1 -0
  184. package/dist/runtime.d.ts +8 -0
  185. package/dist/runtime.js +717 -0
  186. package/dist/runtime.js.map +7 -0
  187. package/dist/server.d.ts +31 -0
  188. package/dist/server.js +2267 -0
  189. package/dist/server.js.map +7 -0
  190. package/dist/styles.css +300 -0
  191. package/package.json +94 -0
  192. package/thumbnail.png +0 -0
@@ -0,0 +1,467 @@
1
+ import { BASE_STYLE, DATA_SOURCE_NOT_FOUND_BEHAVIORS, HTTP_METHODS, DEFAULT_BREAKPOINTS, DEFAULT_ROOT_STYLE, ELEMENT_TYPES, STYLE_KEYS, } from "./types";
2
+ export const MAX_ELEMENTS = 2000;
3
+ const MAX_CONTENT = 10000;
4
+ const MAX_SHORT_STRING = 200;
5
+ const MAX_URL = 2048;
6
+ const COORD_LIMIT = 100000;
7
+ const ELEMENT_TYPE_SET = new Set(ELEMENT_TYPES);
8
+ export class InvalidElementsError extends Error {
9
+ }
10
+ /* ------------------------------------------------------------------ scalars */
11
+ function num(value, fallback, min, max) {
12
+ const n = typeof value === "number" ? value : Number(value);
13
+ if (!Number.isFinite(n))
14
+ return fallback;
15
+ return Math.min(max, Math.max(min, n));
16
+ }
17
+ /** Older AI/preset builds wrote CSS scale multipliers (1.03) while the editor
18
+ * stores percentages (103). Normalize those documents as they are loaded. */
19
+ function scalePercent(value, fallback) {
20
+ const parsed = typeof value === "number" ? value : Number(value);
21
+ if (!Number.isFinite(parsed))
22
+ return fallback;
23
+ const normalized = parsed > 0 && parsed <= 5 ? parsed * 100 : parsed;
24
+ return Math.min(500, Math.max(1, normalized));
25
+ }
26
+ function str(value, max) {
27
+ if (typeof value !== "string")
28
+ return undefined;
29
+ return value.length > max ? value.slice(0, max) : value;
30
+ }
31
+ function oneOf(value, allowed, fallback) {
32
+ return typeof value === "string" && allowed.includes(value)
33
+ ? value
34
+ : fallback;
35
+ }
36
+ /**
37
+ * Colours, gradients, shadows and font stacks are written into a stylesheet on
38
+ * the published page, so a value carrying `;` or `}` could close the rule and
39
+ * inject arbitrary CSS. Strip the characters that can escape a declaration.
40
+ */
41
+ function cssValue(value, fallback) {
42
+ const raw = str(value, MAX_SHORT_STRING);
43
+ if (raw === undefined)
44
+ return fallback;
45
+ const cleaned = raw.replace(/[;{}<>\\]/g, "").replace(/@import/gi, "");
46
+ return cleaned.trim();
47
+ }
48
+ /**
49
+ * Only http(s) and data: images are allowed through. Anything else — most
50
+ * importantly `javascript:` — is dropped rather than rendered into an href.
51
+ */
52
+ function safeUrl(value) {
53
+ const raw = str(value, MAX_URL);
54
+ if (!raw)
55
+ return undefined;
56
+ const trimmed = raw.trim();
57
+ if (trimmed === "")
58
+ return "";
59
+ // Relative links stay relative; they cannot carry a scheme.
60
+ if (trimmed.startsWith("/") || trimmed.startsWith("#"))
61
+ return trimmed;
62
+ if (/^https?:\/\//i.test(trimmed))
63
+ return trimmed;
64
+ if (/^data:image\//i.test(trimmed))
65
+ return trimmed;
66
+ return undefined;
67
+ }
68
+ /** Safe for interpolation into `url("…")`. */
69
+ function imageUrl(value) {
70
+ const raw = safeUrl(value);
71
+ if (!raw)
72
+ return "";
73
+ return /["'()\\]/.test(raw) ? "" : raw;
74
+ }
75
+ /**
76
+ * A binding is a dotted field path such as `author.name`. Restricting the
77
+ * alphabet keeps it a lookup and nothing more.
78
+ */
79
+ function bindingPath(value) {
80
+ const raw = str(value, MAX_SHORT_STRING)?.trim();
81
+ if (!raw)
82
+ return undefined;
83
+ return /^[A-Za-z0-9_$][A-Za-z0-9_$.-]*$/.test(raw) ? raw : undefined;
84
+ }
85
+ /* -------------------------------------------------------------------- style */
86
+ function parseStyle(input, base) {
87
+ const raw = (input && typeof input === "object" ? input : {});
88
+ return {
89
+ x: num(raw.x, base.x, -COORD_LIMIT, COORD_LIMIT),
90
+ y: num(raw.y, base.y, -COORD_LIMIT, COORD_LIMIT),
91
+ constraintX: oneOf(raw.constraintX, ["start", "center", "end", "stretch"], base.constraintX),
92
+ constraintY: oneOf(raw.constraintY, ["start", "center", "end", "stretch"], base.constraintY),
93
+ w: num(raw.w, base.w, 1, COORD_LIMIT),
94
+ h: num(raw.h, base.h, 1, COORD_LIMIT),
95
+ widthMode: oneOf(raw.widthMode, ["fixed", "fill", "auto"], base.widthMode),
96
+ heightMode: oneOf(raw.heightMode, ["fixed", "fill", "auto"], base.heightMode),
97
+ layout: oneOf(raw.layout, ["absolute", "stack"], base.layout),
98
+ direction: oneOf(raw.direction, ["row", "column"], base.direction),
99
+ gap: num(raw.gap, base.gap, 0, 999),
100
+ padT: num(raw.padT, base.padT, 0, 9999),
101
+ padR: num(raw.padR, base.padR, 0, 9999),
102
+ padB: num(raw.padB, base.padB, 0, 9999),
103
+ padL: num(raw.padL, base.padL, 0, 9999),
104
+ justify: oneOf(raw.justify, ["start", "center", "end", "between"], base.justify),
105
+ align: oneOf(raw.align, ["start", "center", "end", "stretch"], base.align),
106
+ wrap: raw.wrap === true,
107
+ columns: num(raw.columns, base.columns, 1, 12),
108
+ bg: cssValue(raw.bg, base.bg),
109
+ gradient: cssValue(raw.gradient, base.gradient),
110
+ color: cssValue(raw.color, base.color),
111
+ radius: num(raw.radius, base.radius, 0, 9999),
112
+ opacity: num(raw.opacity, base.opacity, 0, 100),
113
+ borderW: num(raw.borderW, base.borderW, 0, 999),
114
+ borderC: cssValue(raw.borderC, base.borderC),
115
+ borderStyle: oneOf(raw.borderStyle, ["solid", "dashed", "dotted"], base.borderStyle),
116
+ shadow: cssValue(raw.shadow, base.shadow),
117
+ rotate: num(raw.rotate, base.rotate, -360, 360),
118
+ fontFamily: cssValue(raw.fontFamily, base.fontFamily),
119
+ fontSize: num(raw.fontSize, base.fontSize, 1, 999),
120
+ fontWeight: cssValue(raw.fontWeight, base.fontWeight),
121
+ lineHeight: num(raw.lineHeight, base.lineHeight, 0.5, 10),
122
+ letterSpacing: num(raw.letterSpacing, base.letterSpacing, -50, 50),
123
+ textAlign: oneOf(raw.textAlign, ["left", "center", "right", "justify"], base.textAlign),
124
+ textTransform: oneOf(raw.textTransform, ["none", "uppercase", "lowercase", "capitalize"], base.textTransform),
125
+ overflow: oneOf(raw.overflow, ["visible", "hidden", "auto", "scroll"], base.overflow),
126
+ position: oneOf(raw.position, ["static", "sticky"], base.position),
127
+ stickyOffset: num(raw.stickyOffset, base.stickyOffset, -9999, 9999),
128
+ bgImage: raw.bgImage === undefined ? base.bgImage : imageUrl(raw.bgImage),
129
+ bgSize: oneOf(raw.bgSize, ["cover", "contain", "auto"], base.bgSize),
130
+ bgPosition: cssValue(raw.bgPosition, base.bgPosition),
131
+ blur: num(raw.blur, base.blur, 0, 200),
132
+ backdropBlur: num(raw.backdropBlur, base.backdropBlur, 0, 200),
133
+ blendMode: oneOf(raw.blendMode, ["normal", "multiply", "screen", "overlay", "darken", "lighten", "difference", "luminosity"], base.blendMode),
134
+ scale: scalePercent(raw.scale, base.scale),
135
+ aspectRatio: /^\d{1,3}\/\d{1,3}$/.test(String(raw.aspectRatio ?? ""))
136
+ ? String(raw.aspectRatio)
137
+ : raw.aspectRatio === undefined
138
+ ? base.aspectRatio
139
+ : "",
140
+ entrance: oneOf(raw.entrance, ["none", "fade", "up", "down", "left", "right", "zoom"], base.entrance),
141
+ entranceDuration: num(raw.entranceDuration, base.entranceDuration, 50, 5000),
142
+ entranceDelay: num(raw.entranceDelay, base.entranceDelay, 0, 5000),
143
+ entranceCurve: oneOf(raw.entranceCurve, ["ease", "spring"], base.entranceCurve),
144
+ entranceBezier: cssValue(raw.entranceBezier, base.entranceBezier),
145
+ springStiffness: num(raw.springStiffness, base.springStiffness, 1, 1000),
146
+ springDamping: num(raw.springDamping, base.springDamping, 1, 100),
147
+ cursor: oneOf(raw.cursor, ["auto", "default", "pointer", "text", "grab", "zoom-in", "none"], base.cursor),
148
+ hidden: raw.hidden === true,
149
+ };
150
+ }
151
+ /** Keeps only the keys the caller actually set, so the cascade stays intact. */
152
+ function parsePartialStyle(input, base) {
153
+ if (!input || typeof input !== "object")
154
+ return {};
155
+ const raw = input;
156
+ const full = parseStyle(raw, base);
157
+ const partial = {};
158
+ for (const key of STYLE_KEYS) {
159
+ if (raw[key] !== undefined) {
160
+ // `as never` narrows the union assignment that TS cannot follow
161
+ // across a generic key.
162
+ partial[key] = full[key];
163
+ }
164
+ }
165
+ return partial;
166
+ }
167
+ /* ----------------------------------------------------------------- elements */
168
+ /**
169
+ * Server Actions are reachable by direct POST, so anything arriving from the
170
+ * client is untrusted. This narrows an unknown payload to a well-formed
171
+ * element list: unknown keys are dropped, numbers clamped, unsafe URLs
172
+ * removed, and orphaned or cyclic `parentId` links severed.
173
+ */
174
+ export function parseElements(input,
175
+ /** Whichever breakpoint holds the shared values; it owns `base`, so it can
176
+ * never also carry an override. */
177
+ baseBreakpointId = "desktop") {
178
+ if (!Array.isArray(input)) {
179
+ throw new InvalidElementsError("elements must be an array");
180
+ }
181
+ if (input.length > MAX_ELEMENTS) {
182
+ throw new InvalidElementsError(`a page cannot hold more than ${MAX_ELEMENTS} elements`);
183
+ }
184
+ const seen = new Set();
185
+ const parsed = [];
186
+ for (const raw of input) {
187
+ if (!raw || typeof raw !== "object")
188
+ continue;
189
+ const el = upgradeLegacy(raw);
190
+ const id = str(el.id, MAX_SHORT_STRING);
191
+ if (!id || seen.has(id))
192
+ continue;
193
+ if (typeof el.type !== "string" || !ELEMENT_TYPE_SET.has(el.type))
194
+ continue;
195
+ seen.add(id);
196
+ const base = parseStyle(el.base, BASE_STYLE);
197
+ const overrides = {};
198
+ if (el.overrides && typeof el.overrides === "object") {
199
+ for (const [key, value] of Object.entries(el.overrides)) {
200
+ if (!/^[a-zA-Z0-9_-]{1,60}$/.test(key))
201
+ continue;
202
+ if (key === baseBreakpointId)
203
+ continue;
204
+ const partial = parsePartialStyle(value, base);
205
+ if (Object.keys(partial).length > 0) {
206
+ overrides[key] = partial;
207
+ }
208
+ }
209
+ }
210
+ const hover = parsePartialStyle(el.hover, base);
211
+ const press = parsePartialStyle(el.press, base);
212
+ parsed.push({
213
+ id,
214
+ type: el.type,
215
+ name: str(el.name, MAX_SHORT_STRING),
216
+ parentId: str(el.parentId, MAX_SHORT_STRING),
217
+ z: num(el.z, 0, 0, MAX_ELEMENTS),
218
+ locked: el.locked === true ? true : undefined,
219
+ componentRole: el.componentRole === "master" || el.componentRole === "instance"
220
+ ? el.componentRole
221
+ : undefined,
222
+ componentId: str(el.componentId, MAX_SHORT_STRING),
223
+ componentSourceId: str(el.componentSourceId, MAX_SHORT_STRING),
224
+ variant: str(el.variant, MAX_SHORT_STRING),
225
+ styleBindings: el.styleBindings && typeof el.styleBindings === "object"
226
+ ? Object.fromEntries(Object.entries(el.styleBindings).flatMap(([key, value]) => STYLE_KEYS.includes(key) &&
227
+ typeof value === "string"
228
+ ? [[key, value.slice(0, MAX_SHORT_STRING)]]
229
+ : []))
230
+ : undefined,
231
+ content: str(el.content, MAX_CONTENT),
232
+ code: str(el.code, MAX_CONTENT),
233
+ src: safeUrl(el.src),
234
+ alt: str(el.alt, MAX_SHORT_STRING),
235
+ objectFit: oneOf(el.objectFit, ["cover", "contain", "fill", "none"], "cover"),
236
+ iconName: oneOf(el.iconName, ["star", "heart", "arrow-right", "check", "menu", "search"], "star"),
237
+ href: safeUrl(el.href),
238
+ sourceId: str(el.sourceId, MAX_SHORT_STRING),
239
+ binding: bindingPath(el.binding),
240
+ target: oneOf(el.target, ["_self", "_blank"], "_self"),
241
+ interaction: el.interaction && typeof el.interaction === "object"
242
+ ? (() => {
243
+ const interaction = el.interaction;
244
+ const action = oneOf(interaction.action, ["navigate", "scroll-to", "toggle-layer", "show-layer", "hide-layer"], "navigate");
245
+ const value = action !== "navigate"
246
+ ? str(interaction.value, MAX_SHORT_STRING)?.replace(/[^a-zA-Z0-9_-]/g, "")
247
+ : safeUrl(interaction.value);
248
+ return value
249
+ ? {
250
+ trigger: "click",
251
+ action,
252
+ value,
253
+ target: oneOf(interaction.target, ["_self", "_blank"], "_self"),
254
+ }
255
+ : undefined;
256
+ })()
257
+ : undefined,
258
+ base,
259
+ overrides: Object.keys(overrides).length > 0 ? overrides : undefined,
260
+ hover: Object.keys(hover).length > 0 ? hover : undefined,
261
+ press: Object.keys(press).length > 0 ? press : undefined,
262
+ loop: el.loop && typeof el.loop === "object"
263
+ ? {
264
+ type: oneOf(el.loop.type, ["pulse", "float", "spin"], "pulse"),
265
+ duration: num(el.loop.duration, 1600, 100, 20000),
266
+ }
267
+ : undefined,
268
+ draggable: el.draggable === true ? true : undefined,
269
+ });
270
+ }
271
+ return severBrokenParents(parsed);
272
+ }
273
+ /**
274
+ * Documents saved before styles moved into `base` stored every style field on
275
+ * the element itself. Lift them so old pages keep working.
276
+ */
277
+ function upgradeLegacy(raw) {
278
+ if (raw.base !== undefined)
279
+ return raw;
280
+ const legacy = raw;
281
+ return {
282
+ ...legacy,
283
+ base: {
284
+ x: legacy.x,
285
+ y: legacy.y,
286
+ w: legacy.w,
287
+ h: legacy.h,
288
+ heightMode: legacy.autoHeight === true ? "auto" : "fixed",
289
+ bg: legacy.bg,
290
+ color: legacy.color,
291
+ radius: legacy.radius,
292
+ opacity: legacy.opacity,
293
+ borderW: legacy.borderW,
294
+ borderC: legacy.borderC,
295
+ fontSize: legacy.fontSize,
296
+ fontWeight: legacy.fontWeight,
297
+ hidden: legacy.hidden,
298
+ },
299
+ };
300
+ }
301
+ /**
302
+ * Drops `parentId` values that point at a missing element or that would form a
303
+ * cycle, so rendering can never recurse forever.
304
+ */
305
+ function severBrokenParents(elements) {
306
+ const byId = new Map(elements.map((el) => [el.id, el]));
307
+ return elements.map((el) => {
308
+ if (!el.parentId)
309
+ return el;
310
+ if (el.parentId === el.id || !byId.has(el.parentId)) {
311
+ return { ...el, parentId: undefined };
312
+ }
313
+ const visited = new Set([el.id]);
314
+ let cursor = byId.get(el.parentId);
315
+ while (cursor) {
316
+ if (visited.has(cursor.id))
317
+ return { ...el, parentId: undefined };
318
+ visited.add(cursor.id);
319
+ cursor = cursor.parentId ? byId.get(cursor.parentId) : undefined;
320
+ }
321
+ return el;
322
+ });
323
+ }
324
+ /* --------------------------------------------------------------- root style */
325
+ export function parseRootStyle(input) {
326
+ const raw = (input && typeof input === "object" ? input : {});
327
+ const base = DEFAULT_ROOT_STYLE;
328
+ const breakpoints = Array.isArray(raw.breakpoints)
329
+ ? raw.breakpoints
330
+ .slice(0, 12)
331
+ .flatMap((item) => {
332
+ if (!item || typeof item !== "object")
333
+ return [];
334
+ const value = item;
335
+ const id = str(value.id, 60)?.replace(/[^a-zA-Z0-9_-]/g, "");
336
+ const name = str(value.name, 40)?.trim();
337
+ if (!id || !name)
338
+ return [];
339
+ return [{ id, name, width: num(value.width, 1280, 240, 4000) }];
340
+ })
341
+ : undefined;
342
+ const variables = Array.isArray(raw.variables)
343
+ ? raw.variables.slice(0, 100).reduce((result, item) => {
344
+ if (!item || typeof item !== "object")
345
+ return result;
346
+ const variable = item;
347
+ const id = str(variable.id, 60);
348
+ const name = str(variable.name, 60)?.trim();
349
+ if (!id || !name)
350
+ return result;
351
+ if (variable.type === "color" && typeof variable.value === "string")
352
+ result.push({ id, name, type: "color", value: cssValue(variable.value, "#000000") });
353
+ if (variable.type === "number" && Number.isFinite(Number(variable.value)))
354
+ result.push({ id, name, type: "number", value: Number(variable.value) });
355
+ return result;
356
+ }, [])
357
+ : undefined;
358
+ const customFonts = Array.isArray(raw.customFonts)
359
+ ? raw.customFonts.slice(0, 20).flatMap((item) => {
360
+ if (!item || typeof item !== "object")
361
+ return [];
362
+ const font = item;
363
+ const id = str(font.id, 60);
364
+ const name = str(font.name, 80)?.trim();
365
+ const url = safeUrl(font.url);
366
+ if (!id || !name || !url || (!/^https?:\/\//i.test(url) && !url.startsWith("/")))
367
+ return [];
368
+ return [{ id, name, url, weight: num(font.weight, 400, 100, 900), style: oneOf(font.style, ["normal", "italic"], "normal") }];
369
+ })
370
+ : undefined;
371
+ return {
372
+ documentMode: oneOf(raw.documentMode, ["page", "component"], base.documentMode),
373
+ maxWidth: num(raw.maxWidth, base.maxWidth, 1, 4000),
374
+ canvasHeight: num(raw.canvasHeight, base.canvasHeight, 1, 12000),
375
+ fullWidth: raw.fullWidth === true,
376
+ bg: cssValue(raw.bg, base.bg),
377
+ layout: oneOf(raw.layout, ["absolute", "stack"], base.layout),
378
+ direction: oneOf(raw.direction, ["row", "column"], base.direction),
379
+ gap: num(raw.gap, base.gap, 0, 999),
380
+ padT: num(raw.padT, base.padT, 0, 9999),
381
+ padR: num(raw.padR, base.padR, 0, 9999),
382
+ padB: num(raw.padB, base.padB, 0, 9999),
383
+ padL: num(raw.padL, base.padL, 0, 9999),
384
+ align: oneOf(raw.align, ["start", "center", "end", "stretch"], base.align),
385
+ fontFamily: cssValue(raw.fontFamily, base.fontFamily),
386
+ // A page may define any set of artboards, so the stored list is kept as
387
+ // it comes; only an empty one falls back to the defaults.
388
+ breakpoints: breakpoints?.length ? breakpoints : undefined,
389
+ // The main breakpoint is whichever one holds the shared values. It has
390
+ // to name a breakpoint that exists, or resolution would find nothing.
391
+ baseBreakpointId: (breakpoints ?? DEFAULT_BREAKPOINTS).some((item) => item.id === raw.baseBreakpointId)
392
+ ? raw.baseBreakpointId
393
+ : undefined,
394
+ variables,
395
+ customFonts,
396
+ };
397
+ }
398
+ /**
399
+ * Query params and headers. Values keep their `{{…}}` tokens; encoding and
400
+ * header-injection checks happen at request time in `buildRequest`.
401
+ */
402
+ function parsePairs(input) {
403
+ if (!Array.isArray(input))
404
+ return [];
405
+ const out = [];
406
+ for (const raw of input.slice(0, 25)) {
407
+ if (!raw || typeof raw !== "object")
408
+ continue;
409
+ const row = raw;
410
+ const key = str(row.key, 120)?.trim();
411
+ if (!key)
412
+ continue;
413
+ out.push({ key, value: str(row.value, 500)?.trim() ?? "" });
414
+ }
415
+ return out;
416
+ }
417
+ /** Narrows an untrusted payload to the page's data-source list. */
418
+ export function parseDataSources(input) {
419
+ if (!Array.isArray(input))
420
+ return [];
421
+ const seen = new Set();
422
+ const out = [];
423
+ for (const raw of input.slice(0, 20)) {
424
+ if (!raw || typeof raw !== "object")
425
+ continue;
426
+ const row = raw;
427
+ const id = str(row.id, MAX_SHORT_STRING);
428
+ if (!id || seen.has(id))
429
+ continue;
430
+ seen.add(id);
431
+ // The URL is only checked for shape here; `assertFetchableUrl` does the
432
+ // network-safety check at request time, where it cannot be bypassed.
433
+ out.push({
434
+ id,
435
+ name: str(row.name, 120)?.trim() || "Untitled source",
436
+ url: str(row.url, MAX_URL)?.trim() ?? "",
437
+ path: bindingPath(row.path) ?? "",
438
+ method: oneOf(row.method, HTTP_METHODS, "GET"),
439
+ body: str(row.body, 20000)?.trim() ?? "",
440
+ params: parsePairs(row.params),
441
+ headers: parsePairs(row.headers),
442
+ onNotFound: oneOf(row.onNotFound, DATA_SOURCE_NOT_FOUND_BEHAVIORS, "empty"),
443
+ });
444
+ }
445
+ return out;
446
+ }
447
+ const STATIC_PATH_SEGMENT_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
448
+ const PARAM_PATH_SEGMENT_RE = /^:[a-z][a-z0-9_]*$/;
449
+ export function parseSlug(input) {
450
+ const raw = str(input, 200)?.trim().toLowerCase().replace(/^\/+|\/+$/g, "");
451
+ if (!raw)
452
+ return null;
453
+ const segments = raw.split("/").map((segment) => segment.startsWith(":")
454
+ ? segment
455
+ : segment.replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, ""));
456
+ if (segments.some((segment) => !STATIC_PATH_SEGMENT_RE.test(segment) && !PARAM_PATH_SEGMENT_RE.test(segment)))
457
+ return null;
458
+ const names = segments.filter((segment) => segment.startsWith(":")).map((segment) => segment.slice(1));
459
+ if (new Set(names).size !== names.length)
460
+ return null;
461
+ return segments.join("/");
462
+ }
463
+ export function parseName(input) {
464
+ const raw = str(input, 120)?.trim();
465
+ return raw && raw.length > 0 ? raw : null;
466
+ }
467
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../src/internal/lib/editor/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,+BAA+B,EAE/B,YAAY,EAIZ,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EAIb,UAAU,GAEb,MAAM,SAAS,CAAC;AAEjB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,WAAW,GAAG,KAAM,CAAC;AAC3B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB,MAAM,WAAW,GAAG,MAAO,CAAC;AAE5B,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;AAErE,MAAM,OAAO,oBAAqB,SAAQ,KAAK;CAAG;AAElD,gFAAgF;AAEhF,SAAS,GAAG,CAAC,KAAc,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW;IACnE,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;6EAC6E;AAC7E,SAAS,YAAY,CAAC,KAAc,EAAE,QAAgB;IAClD,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IACrE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,GAAG,CAAC,KAAc,EAAE,GAAW;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5D,CAAC;AAED,SAAS,KAAK,CACV,KAAc,EACd,OAAqB,EACrB,QAAW;IAEX,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,OAA6B,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC9E,CAAC,CAAE,KAAW;QACd,CAAC,CAAC,QAAQ,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,KAAc,EAAE,QAAgB;IAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACzC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,KAAc;IAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC9B,4DAA4D;IAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACvE,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAClD,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACnD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,8CAA8C;AAC9C,SAAS,QAAQ,CAAC,KAAc;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAc;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,OAAO,iCAAiC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC;AAED,gFAAgF;AAEhF,SAAS,UAAU,CAAC,KAAc,EAAE,IAAkB;IAClD,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAG3D,CAAC;IAEF,OAAO;QACH,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;QAChD,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;QAChD,WAAW,EAAE,KAAK,CACd,GAAG,CAAC,WAAW,EACf,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,EACrC,IAAI,CAAC,WAAW,CACnB;QACD,WAAW,EAAE,KAAK,CACd,GAAG,CAAC,WAAW,EACf,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,EACrC,IAAI,CAAC,WAAW,CACnB;QACD,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;QACrC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;QACrC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QAC1E,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;QAE7E,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;QAC7D,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QAClE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;QACnC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;QACvC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;QACvC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;QACvC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;QACvC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC;QAChF,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;QAC1E,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI;QACvB,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAE9C,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAC7B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC/C,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;QACtC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC;QAC7C,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC;QAC/C,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC;QAC/C,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;QAC5C,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC;QACpF,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACzC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;QAE/C,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;QACrD,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC;QAClD,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;QACrD,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC;QACzD,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QAClE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QACvF,aAAa,EAAE,KAAK,CAChB,GAAG,CAAC,aAAa,EACjB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,EAChD,IAAI,CAAC,aAAa,CACrB;QAED,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC9F,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC3E,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QACnE,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;QACzE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAU,EAAE,IAAI,CAAC,MAAM,CAAC;QAC7E,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;QACrD,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;QACtC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC;QAC9D,SAAS,EAAE,KAAK,CACZ,GAAG,CAAC,SAAS,EACb,CAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAC,YAAY,EAAC,YAAY,CAAU,EAC9F,IAAI,CAAC,SAAS,CACjB;QACD,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;QAC1C,WAAW,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;YACzB,CAAC,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS;gBAC7B,CAAC,CAAC,IAAI,CAAC,WAAW;gBAClB,CAAC,CAAC,EAAE;QAEV,QAAQ,EAAE,KAAK,CACX,GAAG,CAAC,QAAQ,EACZ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAU,EAChE,IAAI,CAAC,QAAQ,CAChB;QACD,gBAAgB,EAAE,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC;QAC5E,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC;QAClE,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;QAC/E,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC;QACjE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,IAAI,CAAC;QACxE,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,GAAG,CAAC;QACjE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;QAEzG,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,IAAI;KAC9B,CAAC;AACN,CAAC;AAED,gFAAgF;AAChF,SAAS,iBAAiB,CACtB,KAAc,EACd,IAAkB;IAElB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAEnC,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACzB,gEAAgE;YAChE,wBAAwB;YACxB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAU,CAAC;QACtC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CACzB,KAAc;AACd;oCACoC;AACpC,gBAAgB,GAAG,SAAS;IAE5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,oBAAoB,CAAC,2BAA2B,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,oBAAoB,CAC1B,gCAAgC,YAAY,WAAW,CAC1D,CAAC;IACN,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,EAAE,GAAG,aAAa,CAAC,GAA8B,CAAC,CAAC;QAEzD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAClC,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,SAAS;QAC5E,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEb,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE7C,MAAM,SAAS,GAA+B,EAAE,CAAC;QACjD,IAAI,EAAE,CAAC,SAAS,IAAI,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CACrC,EAAE,CAAC,SAAoC,CAC1C,EAAE,CAAC;gBACA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACjD,IAAI,GAAG,KAAK,gBAAgB;oBAAE,SAAS;gBACvC,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC/C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,SAAS,CAAC,GAAiB,CAAC,GAAG,OAAO,CAAC;gBAC3C,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEhD,MAAM,CAAC,IAAI,CAAC;YACR,EAAE;YACF,IAAI,EAAE,EAAE,CAAC,IAAmB;YAC5B,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC;YACpC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC;YAC5C,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC;YAChC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC7C,aAAa,EACT,EAAE,CAAC,aAAa,KAAK,QAAQ,IAAI,EAAE,CAAC,aAAa,KAAK,UAAU;gBAC5D,CAAC,CAAC,EAAE,CAAC,aAAa;gBAClB,CAAC,CAAC,SAAS;YACnB,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC;YAClD,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;YAC9D,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC;YAC1C,aAAa,EACT,EAAE,CAAC,aAAa,IAAI,OAAO,EAAE,CAAC,aAAa,KAAK,QAAQ;gBACpD,CAAC,CAAC,MAAM,CAAC,WAAW,CACd,MAAM,CAAC,OAAO,CACV,EAAE,CAAC,aAAwC,CAC9C,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CACvB,UAAU,CAAC,QAAQ,CAAC,GAAe,CAAC;oBACpC,OAAO,KAAK,KAAK,QAAQ;oBACrB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;oBAC3C,CAAC,CAAC,EAAE,CACX,CACJ;gBACH,CAAC,CAAC,SAAS;YAEnB,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC;YAC/B,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC;YACpB,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,CAAC;YAClC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAU,EAAE,OAAO,CAAC;YACtF,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAU,EAAE,MAAM,CAAC;YAC1G,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC;YACtB,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC;YAC5C,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC;YAChC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAU,EAAE,OAAO,CAAC;YAC/D,WAAW,EACP,EAAE,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,QAAQ;gBAChD,CAAC,CAAC,CAAC,GAAG,EAAE;oBACF,MAAM,WAAW,GAAG,EAAE,CAAC,WAAsC,CAAC;oBAC9D,MAAM,MAAM,GAAG,KAAK,CAChB,WAAW,CAAC,MAAM,EAClB,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,CAAU,EAC9E,UAAU,CACb,CAAC;oBACF,MAAM,KAAK,GACP,MAAM,KAAK,UAAU;wBACjB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;wBAC1E,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBACrC,OAAO,KAAK;wBACR,CAAC,CAAC;4BACI,OAAO,EAAE,OAAgB;4BACzB,MAAM;4BACN,KAAK;4BACL,MAAM,EAAE,KAAK,CACT,WAAW,CAAC,MAAM,EAClB,CAAC,OAAO,EAAE,QAAQ,CAAU,EAC5B,OAAO,CACV;yBACJ;wBACH,CAAC,CAAC,SAAS,CAAC;gBACpB,CAAC,CAAC,EAAE;gBACN,CAAC,CAAC,SAAS;YAEnB,IAAI;YACJ,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACpE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACxD,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACxD,IAAI,EACA,EAAE,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ;gBAClC,CAAC,CAAC;oBACI,IAAI,EAAE,KAAK,CAAE,EAAE,CAAC,IAAgC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC;oBAC3F,QAAQ,EAAE,GAAG,CAAE,EAAE,CAAC,IAAgC,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC;iBACjF;gBACH,CAAC,CAAC,SAAS;YACnB,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SACtD,CAAC,CAAC;IACP,CAAC;IAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,GAA4B;IAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAEvC,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,OAAO;QACH,GAAG,MAAM;QACT,IAAI,EAAE;YACF,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,UAAU,EAAE,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YACzD,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;SACxB;KACJ,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,QAAyB;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAExD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC,EAAE,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC5B,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QAC1C,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,MAAM,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAE,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvB,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAED,gFAAgF;AAEhF,MAAM,UAAU,cAAc,CAAC,KAAc;IACzC,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAG3D,CAAC;IACF,MAAM,IAAI,GAAG,kBAAkB,CAAC;IAChC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAC9C,CAAC,CAAC,GAAG,CAAC,WAAW;aACV,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACd,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,IAA+B,CAAC;YAC9C,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC;QACR,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,SAAS,GAA2B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAClE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAsC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YACrF,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC;YACrD,MAAM,QAAQ,GAAG,IAA+B,CAAC;YACjD,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;gBAAE,OAAO,MAAM,CAAC;YAChC,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;gBAC/D,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YACzF,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACrE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7E,OAAO,MAAM,CAAC;QAClB,CAAC,EAAE,EAAE,CAAC;QACR,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,WAAW,GAA6B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACxE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,IAA+B,CAAC;YAC7C,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC5F,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClI,CAAC,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACH,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;QAC/E,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC;QACnD,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC;QAChE,SAAS,EAAE,GAAG,CAAC,SAAS,KAAK,IAAI;QACjC,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;QAC7D,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QAClE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;QACnC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;QACvC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;QACvC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;QACvC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;QACvC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;QAC1E,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;QACrD,wEAAwE;QACxE,0DAA0D;QAC1D,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC1D,uEAAuE;QACvE,sEAAsE;QACtE,gBAAgB,EAAE,CAAC,WAAW,IAAI,mBAAmB,CAAC,CAAC,IAAI,CACvD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,gBAAgB,CAC7C;YACG,CAAC,CAAE,GAAG,CAAC,gBAA2B;YAClC,CAAC,CAAC,SAAS;QACf,SAAS;QACT,WAAW;KACd,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,KAAc;IAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,GAAG,GAAG,GAA8B,CAAC;QAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAiB,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,GAAG,GAAG,GAA8B,CAAC;QAC3C,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACzC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEb,wEAAwE;QACxE,qEAAqE;QACrE,GAAG,CAAC,IAAI,CAAC;YACL,EAAE;YACF,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,iBAAiB;YACrD,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;YACxC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;YACjC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;YAC9C,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;YACzC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;YAChC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,+BAA+B,EAAE,OAAO,CAAC;SAC9E,CAAC,CAAC;IACP,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AAC5D,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEnD,MAAM,UAAU,SAAS,CAAC,KAAc;IACpC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5C,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QACnB,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CACpE,CAAC;IACF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3H,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvG,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACtD,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACpC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACpC,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { type Page } from "@/drizzle/schema";
2
+ import { type CanvasElement, type DataSource, type RootStyle } from "@/lib/editor/types";
3
+ import type { SiteTemplatePage } from "@/lib/editor/showcase";
4
+ export declare const DEFAULT_SITE_SLUG = "default";
5
+ export declare const DEFAULT_PAGE_SLUG = "home";
6
+ export type PageSummary = {
7
+ id: string;
8
+ name: string;
9
+ slug: string;
10
+ publishedAt: Date | null;
11
+ updatedAt: Date;
12
+ };
13
+ export declare function listPages(): Promise<PageSummary[]>;
14
+ /**
15
+ * Every page's element tree, for the cross-page component library. Kept
16
+ * separate from `listPages` because it pulls the whole document and only the
17
+ * library needs that.
18
+ */
19
+ export declare function listPageDocuments(): Promise<{
20
+ id: string;
21
+ name: string;
22
+ elements: CanvasElement[];
23
+ }[]>;
24
+ export declare function getPage(pageId: string): Promise<Page | undefined>;
25
+ /** The published snapshot for a public URL, or undefined when unpublished. */
26
+ export declare function getPublishedPage(slug: string): Promise<{
27
+ name: string;
28
+ elements: CanvasElement[];
29
+ rootStyle: RootStyle;
30
+ dataSources: DataSource[];
31
+ publishedAt: Date | null;
32
+ } | undefined>;
33
+ export declare function listPublishedSlugs(): Promise<{
34
+ slug: string;
35
+ }[]>;
36
+ /**
37
+ * Returns the page the editor opens by default, creating it on first run so a
38
+ * fresh clone has something to edit.
39
+ */
40
+ export declare function getOrCreateDefaultPage(): Promise<Page>;
41
+ export type SaveResult = {
42
+ status: "saved";
43
+ version: number;
44
+ }
45
+ /** Another writer advanced the page; carries the winning state. */
46
+ | {
47
+ status: "conflict";
48
+ version: number;
49
+ elements: CanvasElement[];
50
+ rootStyle: RootStyle;
51
+ dataSources: DataSource[];
52
+ };
53
+ export declare function savePageDocument(pageId: string, elements: CanvasElement[], rootStyle: RootStyle, dataSources: DataSource[], expectedVersion: number): Promise<SaveResult>;
54
+ /** Copies the current draft into the published columns. */
55
+ export declare function publishPage(pageId: string): Promise<{
56
+ slug: string;
57
+ publishedAt: Date | null;
58
+ }>;
59
+ export declare function unpublishPage(pageId: string): Promise<void>;
60
+ export declare function createPage(name: string, slug: string): Promise<string>;
61
+ /** Atomically replaces the current site's pages with a complete template. */
62
+ export declare function installTemplatePages(templatePages: SiteTemplatePage[]): Promise<string | undefined>;
63
+ export declare function duplicatePage(pageId: string, name: string, slug: string): Promise<string | undefined>;
64
+ export declare function renamePage(pageId: string, name: string, slug: string): Promise<string | undefined>;
65
+ /** Refuses to delete the last page, so the editor always has something to open. */
66
+ export declare function deletePage(pageId: string): Promise<{
67
+ deleted: false;
68
+ reason: "not-found";
69
+ fallbackId?: undefined;
70
+ } | {
71
+ deleted: false;
72
+ reason: "home-required";
73
+ fallbackId?: undefined;
74
+ } | {
75
+ deleted: false;
76
+ reason: "last-page";
77
+ fallbackId?: undefined;
78
+ } | {
79
+ deleted: true;
80
+ fallbackId: string;
81
+ reason?: undefined;
82
+ }>;
83
+ //# sourceMappingURL=pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../src/internal/lib/pages.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,EAA+B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,UAAU,EAEf,KAAK,SAAS,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAKxC,MAAM,MAAM,WAAW,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;CACnB,CAAC;AAwBF,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAaxD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB;;;;KAOtC;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAOvE;AAED,8EAA8E;AAC9E,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM;;;;;;eA4BlD;AAED,wBAAsB,kBAAkB;;KAMvC;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B5D;AAID,MAAM,MAAM,UAAU,GAChB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACtC,mEAAmE;GACjE;IACI,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC7B,CAAC;AAER,wBAAsB,gBAAgB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,UAAU,EAAE,EACzB,eAAe,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAyCrB;AAED,2DAA2D;AAC3D,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM;;;GAa/C;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,iBAUjD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAe1D;AAED,6EAA6E;AAC7E,wBAAsB,oBAAoB,CAAC,aAAa,EAAE,gBAAgB,EAAE,+BAqB3E;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,+BAiB7E;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,+BAS1E;AAED,mFAAmF;AACnF,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;GAsB9C"}