camox 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/components/AddBlockControlBar.d.ts.map +1 -1
- package/dist/core/components/AddBlockControlBar.js +51 -117
- package/dist/core/components/lexical/InlineLexicalEditor.js +1 -1
- package/dist/core/components/lexical/SidebarLexicalEditor.js +1 -1
- package/dist/core/createApp.d.ts +314 -44
- package/dist/core/createApp.d.ts.map +1 -1
- package/dist/core/createBlock.d.ts +160 -22
- package/dist/core/createBlock.d.ts.map +1 -1
- package/dist/core/createBlock.js +467 -579
- package/dist/features/content/components/AssetCard.js +1 -1
- package/dist/features/preview/CamoxPreview.d.ts.map +1 -1
- package/dist/features/preview/CamoxPreview.js +12 -16
- package/dist/features/preview/components/AddBlockSheet.d.ts.map +1 -1
- package/dist/features/preview/components/AddBlockSheet.js +1 -2
- package/dist/features/preview/components/AssetLightbox.d.ts.map +1 -1
- package/dist/features/preview/components/AssetLightbox.js +13 -15
- package/dist/features/preview/components/BlockActionsPopover.d.ts.map +1 -1
- package/dist/features/preview/components/BlockActionsPopover.js +19 -22
- package/dist/features/preview/components/CreatePageSheet.d.ts.map +1 -1
- package/dist/features/preview/components/CreatePageSheet.js +10 -4
- package/dist/features/preview/components/EditPageSheet.d.ts +1 -1
- package/dist/features/preview/components/EditPageSheet.d.ts.map +1 -1
- package/dist/features/preview/components/EditPageSheet.js +20 -17
- package/dist/features/preview/components/FieldOverlayStyles.d.ts +2 -0
- package/dist/features/preview/components/FieldOverlayStyles.d.ts.map +1 -0
- package/dist/features/preview/components/FieldOverlayStyles.js +15 -0
- package/dist/features/preview/components/Frame.d.ts +20 -0
- package/dist/features/preview/components/Frame.d.ts.map +1 -0
- package/dist/features/preview/components/Frame.js +162 -0
- package/dist/features/preview/components/LinkFieldEditor.d.ts.map +1 -1
- package/dist/features/preview/components/LinkFieldEditor.js +11 -12
- package/dist/features/preview/components/OverlayTracker.js +1 -1
- package/dist/features/preview/components/PageContentSheet.d.ts.map +1 -1
- package/dist/features/preview/components/PageContentSheet.js +3 -3
- package/dist/features/preview/components/PageLocationFieldset.d.ts.map +1 -1
- package/dist/features/preview/components/PageLocationFieldset.js +9 -11
- package/dist/features/preview/components/PagePicker.d.ts.map +1 -1
- package/dist/features/preview/components/PagePicker.js +15 -15
- package/dist/features/preview/components/PageTree.d.ts.map +1 -1
- package/dist/features/preview/components/PageTree.js +215 -203
- package/dist/features/preview/components/PreviewPanel.d.ts.map +1 -1
- package/dist/features/preview/components/PreviewPanel.js +21 -15
- package/dist/features/preview/components/PreviewSideSheet.d.ts.map +1 -1
- package/dist/features/preview/components/PreviewSideSheet.js +42 -26
- package/dist/features/preview/components/PreviewToolbar.d.ts.map +1 -1
- package/dist/features/preview/components/PreviewToolbar.js +191 -171
- package/dist/features/preview/components/RepeatableItemsList.d.ts.map +1 -1
- package/dist/features/preview/components/RepeatableItemsList.js +4 -5
- package/dist/features/preview/components/TextFormatToolbar.d.ts.map +1 -1
- package/dist/features/preview/components/TextFormatToolbar.js +5 -6
- package/dist/features/preview/components/UnlinkAssetButton.d.ts.map +1 -1
- package/dist/features/preview/components/UnlinkAssetButton.js +70 -91
- package/dist/features/preview/studio-overlays.css?inline.js +4 -0
- package/dist/features/provider/components/CamoxAppContext.d.ts +314 -44
- package/dist/features/provider/components/CamoxAppContext.d.ts.map +1 -1
- package/dist/features/provider/components/CommandPalette.d.ts.map +1 -1
- package/dist/features/provider/components/CommandPalette.js +22 -14
- package/dist/features/studio/CamoxStudio.d.ts +2 -3
- package/dist/features/studio/CamoxStudio.d.ts.map +1 -1
- package/dist/features/studio/components/EnvironmentMenu.d.ts.map +1 -1
- package/dist/features/studio/components/EnvironmentMenu.js +39 -35
- package/dist/features/studio/components/Navbar.js +2 -2
- package/dist/features/studio/components/ProjectMenu.d.ts.map +1 -1
- package/dist/features/studio/components/ProjectMenu.js +143 -129
- package/dist/features/studio/components/UserButton.d.ts.map +1 -1
- package/dist/features/studio/components/UserButton.js +8 -9
- package/dist/features/vite/definitionsSync.d.ts.map +1 -1
- package/dist/features/vite/definitionsSync.js +24 -2
- package/dist/features/vite/vite.d.ts +2 -0
- package/dist/features/vite/vite.d.ts.map +1 -1
- package/dist/features/vite/vite.js +27 -31
- package/dist/lib/api-client.d.ts +17 -17
- package/dist/lib/queries.d.ts +7 -7
- package/dist/studio.css +1 -1
- package/package.json +5 -6
- package/skills/camox-block/SKILL.md +55 -28
- package/dist/features/preview/overlayConstants.d.ts +0 -19
- package/dist/features/preview/overlayConstants.d.ts.map +0 -1
- package/dist/features/preview/overlayConstants.js +0 -21
|
@@ -7,18 +7,11 @@ import { readFileSync } from "node:fs";
|
|
|
7
7
|
import { homedir } from "node:os";
|
|
8
8
|
import { dirname, join, resolve } from "node:path";
|
|
9
9
|
import { fileURLToPath } from "node:url";
|
|
10
|
+
import { createServer } from "vite";
|
|
10
11
|
//#region src/features/vite/vite.ts
|
|
11
12
|
var sdkRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../../..");
|
|
12
13
|
var VIRTUAL_STUDIO_CSS = "virtual:camox-studio-css";
|
|
13
14
|
var RESOLVED_VIRTUAL_STUDIO_CSS = "\0" + VIRTUAL_STUDIO_CSS;
|
|
14
|
-
/**
|
|
15
|
-
* use-sync-external-store is CJS-only and causes issues in ESM environments.
|
|
16
|
-
* Since all Camox apps use React 19+, we can redirect imports to React's built-in
|
|
17
|
-
* useSyncExternalStore instead. This handles all subpaths (e.g. /shim, /shim/index.js).
|
|
18
|
-
*/
|
|
19
|
-
var USE_SYNC_EXTERNAL_STORE_RE = /^use-sync-external-store(\/|$)/;
|
|
20
|
-
var RESOLVED_USE_SYNC_SHIM = "\0use-sync-external-store-shim";
|
|
21
|
-
var USE_SYNC_SHIM_CODE = `export { useSyncExternalStore } from "react";\n`;
|
|
22
15
|
var PRODUCTION_API_URL = "https://api.camox.ai";
|
|
23
16
|
/** Authentication URL to use for Camox authentication (production Camox web app) */
|
|
24
17
|
var DEFAULT_AUTHENTICATION_URL = "https://camox.ai";
|
|
@@ -39,6 +32,7 @@ function camox(options) {
|
|
|
39
32
|
const apiUrl = options._internal?.apiUrl ?? PRODUCTION_API_URL;
|
|
40
33
|
const authenticationUrl = options._internal?.authenticationUrl ?? DEFAULT_AUTHENTICATION_URL;
|
|
41
34
|
const enableTanstackDevtools = options._internal?.enableTanstackDevtools ?? false;
|
|
35
|
+
const disableCodeGen = options._internal?.disableCodeGen ?? false;
|
|
42
36
|
let isBuild = false;
|
|
43
37
|
let resolvedConfig;
|
|
44
38
|
let environmentName;
|
|
@@ -46,10 +40,8 @@ function camox(options) {
|
|
|
46
40
|
name: "camox",
|
|
47
41
|
resolveId(id) {
|
|
48
42
|
if (id === VIRTUAL_STUDIO_CSS) return RESOLVED_VIRTUAL_STUDIO_CSS;
|
|
49
|
-
if (USE_SYNC_EXTERNAL_STORE_RE.test(id)) return RESOLVED_USE_SYNC_SHIM;
|
|
50
43
|
},
|
|
51
44
|
load(id) {
|
|
52
|
-
if (id === RESOLVED_USE_SYNC_SHIM) return USE_SYNC_SHIM_CODE;
|
|
53
45
|
if (id !== RESOLVED_VIRTUAL_STUDIO_CSS) return;
|
|
54
46
|
const cssPath = resolve(sdkRoot, "dist/studio.css");
|
|
55
47
|
if (isBuild) {
|
|
@@ -76,31 +68,36 @@ function camox(options) {
|
|
|
76
68
|
configResolved(config) {
|
|
77
69
|
resolvedConfig = config;
|
|
78
70
|
const routesDir = resolve(config.root, "src/routes");
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
71
|
+
if (!disableCodeGen) {
|
|
72
|
+
generateAppFile(config.root);
|
|
73
|
+
generateRouteFiles({
|
|
74
|
+
routesDir,
|
|
75
|
+
authenticationUrl,
|
|
76
|
+
apiUrl,
|
|
77
|
+
projectSlug: options.projectSlug,
|
|
78
|
+
environmentName
|
|
79
|
+
});
|
|
80
|
+
generateSkillFiles(config.root);
|
|
81
|
+
}
|
|
82
|
+
if (disableCodeGen) config.logger.warn("⚠️ Code generation is disabled (_internal.disableCodeGen). This option is only meant for momentary debugging — do not deploy or commit your app with it enabled.", { timestamp: true });
|
|
88
83
|
const mode = config.command === "serve" ? "Running" : "Building";
|
|
89
84
|
config.logger.info(`${mode} Camox app (environment: ${environmentName})`, { timestamp: true });
|
|
90
85
|
},
|
|
91
86
|
configureServer(server) {
|
|
92
87
|
const routesDir = resolve(server.config.root, "src/routes");
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
88
|
+
if (!disableCodeGen) {
|
|
89
|
+
watchAppFile(server, server.config.root);
|
|
90
|
+
watchRouteFiles({
|
|
91
|
+
server,
|
|
92
|
+
routesDir,
|
|
93
|
+
authenticationUrl,
|
|
94
|
+
apiUrl,
|
|
95
|
+
projectSlug: options.projectSlug,
|
|
96
|
+
environmentName
|
|
97
|
+
});
|
|
98
|
+
watchSkillFiles(server, server.config.root);
|
|
99
|
+
watchNewBlockFiles(server);
|
|
100
|
+
}
|
|
104
101
|
server.httpServer?.once("listening", () => {
|
|
105
102
|
syncDefinitions(server, {
|
|
106
103
|
projectSlug: options.projectSlug,
|
|
@@ -112,7 +109,6 @@ function camox(options) {
|
|
|
112
109
|
},
|
|
113
110
|
async closeBundle() {
|
|
114
111
|
if (!isBuild) return;
|
|
115
|
-
const { createServer } = await import("vite");
|
|
116
112
|
const camoxAppPath = "./src/camox/app.ts";
|
|
117
113
|
const tempServer = await createServer({
|
|
118
114
|
configFile: false,
|
package/dist/lib/api-client.d.ts
CHANGED
|
@@ -66,10 +66,10 @@ export declare function getOrpc(): {
|
|
|
66
66
|
name: string;
|
|
67
67
|
id: number;
|
|
68
68
|
slug: string;
|
|
69
|
-
syncSecret: string;
|
|
70
|
-
createdAt: number;
|
|
71
69
|
organizationId: string;
|
|
70
|
+
createdAt: number;
|
|
72
71
|
updatedAt: number;
|
|
72
|
+
syncSecret: string;
|
|
73
73
|
}, Error> & import('@orpc/tanstack-query').GeneralUtils<{
|
|
74
74
|
name: string;
|
|
75
75
|
organizationId: string;
|
|
@@ -81,10 +81,10 @@ export declare function getOrpc(): {
|
|
|
81
81
|
name: string;
|
|
82
82
|
id: number;
|
|
83
83
|
slug: string;
|
|
84
|
-
syncSecret: string;
|
|
85
|
-
createdAt: number;
|
|
86
84
|
organizationId: string;
|
|
85
|
+
createdAt: number;
|
|
87
86
|
updatedAt: number;
|
|
87
|
+
syncSecret: string;
|
|
88
88
|
}, Error> & import('@orpc/tanstack-query').GeneralUtils<{
|
|
89
89
|
name: string;
|
|
90
90
|
id: number;
|
|
@@ -95,10 +95,10 @@ export declare function getOrpc(): {
|
|
|
95
95
|
name: string;
|
|
96
96
|
id: number;
|
|
97
97
|
slug: string;
|
|
98
|
-
syncSecret: string;
|
|
99
|
-
createdAt: number;
|
|
100
98
|
organizationId: string;
|
|
99
|
+
createdAt: number;
|
|
101
100
|
updatedAt: number;
|
|
101
|
+
syncSecret: string;
|
|
102
102
|
} | undefined, Error> & import('@orpc/tanstack-query').GeneralUtils<{
|
|
103
103
|
id: number;
|
|
104
104
|
}>;
|
|
@@ -299,10 +299,10 @@ export declare function getOrpc(): {
|
|
|
299
299
|
updatedAt: number;
|
|
300
300
|
projectId: number;
|
|
301
301
|
environmentId: number;
|
|
302
|
+
layoutId: number;
|
|
302
303
|
pathSegment: string;
|
|
303
304
|
fullPath: string;
|
|
304
305
|
parentPageId: number | null;
|
|
305
|
-
layoutId: number;
|
|
306
306
|
metaTitle: string | null;
|
|
307
307
|
metaDescription: string | null;
|
|
308
308
|
aiSeoEnabled: boolean | null;
|
|
@@ -325,10 +325,10 @@ export declare function getOrpc(): {
|
|
|
325
325
|
updatedAt: number;
|
|
326
326
|
projectId: number;
|
|
327
327
|
environmentId: number;
|
|
328
|
+
layoutId: number;
|
|
328
329
|
pathSegment: string;
|
|
329
330
|
fullPath: string;
|
|
330
331
|
parentPageId: number | null;
|
|
331
|
-
layoutId: number;
|
|
332
332
|
metaTitle: string | null;
|
|
333
333
|
metaDescription: string | null;
|
|
334
334
|
aiSeoEnabled: boolean | null;
|
|
@@ -345,10 +345,10 @@ export declare function getOrpc(): {
|
|
|
345
345
|
updatedAt: number;
|
|
346
346
|
projectId: number;
|
|
347
347
|
environmentId: number;
|
|
348
|
+
layoutId: number;
|
|
348
349
|
pathSegment: string;
|
|
349
350
|
fullPath: string;
|
|
350
351
|
parentPageId: number | null;
|
|
351
|
-
layoutId: number;
|
|
352
352
|
metaTitle: string | null;
|
|
353
353
|
metaDescription: string | null;
|
|
354
354
|
aiSeoEnabled: boolean | null;
|
|
@@ -364,10 +364,10 @@ export declare function getOrpc(): {
|
|
|
364
364
|
updatedAt: number;
|
|
365
365
|
projectId: number;
|
|
366
366
|
environmentId: number;
|
|
367
|
+
layoutId: number;
|
|
367
368
|
pathSegment: string;
|
|
368
369
|
fullPath: string;
|
|
369
370
|
parentPageId: number | null;
|
|
370
|
-
layoutId: number;
|
|
371
371
|
metaTitle: string | null;
|
|
372
372
|
metaDescription: string | null;
|
|
373
373
|
aiSeoEnabled: boolean | null;
|
|
@@ -384,10 +384,10 @@ export declare function getOrpc(): {
|
|
|
384
384
|
updatedAt: number;
|
|
385
385
|
projectId: number;
|
|
386
386
|
environmentId: number;
|
|
387
|
+
layoutId: number;
|
|
387
388
|
pathSegment: string;
|
|
388
389
|
fullPath: string;
|
|
389
390
|
parentPageId: number | null;
|
|
390
|
-
layoutId: number;
|
|
391
391
|
metaTitle: string | null;
|
|
392
392
|
metaDescription: string | null;
|
|
393
393
|
aiSeoEnabled: boolean | null;
|
|
@@ -404,10 +404,10 @@ export declare function getOrpc(): {
|
|
|
404
404
|
updatedAt: number;
|
|
405
405
|
projectId: number;
|
|
406
406
|
environmentId: number;
|
|
407
|
+
layoutId: number;
|
|
407
408
|
pathSegment: string;
|
|
408
409
|
fullPath: string;
|
|
409
410
|
parentPageId: number | null;
|
|
410
|
-
layoutId: number;
|
|
411
411
|
metaTitle: string | null;
|
|
412
412
|
metaDescription: string | null;
|
|
413
413
|
aiSeoEnabled: boolean | null;
|
|
@@ -424,10 +424,10 @@ export declare function getOrpc(): {
|
|
|
424
424
|
updatedAt: number;
|
|
425
425
|
projectId: number;
|
|
426
426
|
environmentId: number;
|
|
427
|
+
layoutId: number;
|
|
427
428
|
pathSegment: string;
|
|
428
429
|
fullPath: string;
|
|
429
430
|
parentPageId: number | null;
|
|
430
|
-
layoutId: number;
|
|
431
431
|
metaTitle: string | null;
|
|
432
432
|
metaDescription: string | null;
|
|
433
433
|
aiSeoEnabled: boolean | null;
|
|
@@ -720,12 +720,12 @@ export declare function getOrpc(): {
|
|
|
720
720
|
}[];
|
|
721
721
|
}, {
|
|
722
722
|
id: number;
|
|
723
|
+
description: string | null;
|
|
723
724
|
createdAt: number;
|
|
724
725
|
updatedAt: number;
|
|
725
726
|
projectId: number;
|
|
726
727
|
environmentId: number;
|
|
727
728
|
layoutId: string;
|
|
728
|
-
description: string | null;
|
|
729
729
|
}[], Error> & import('@orpc/tanstack-query').GeneralUtils<{
|
|
730
730
|
projectSlug: string;
|
|
731
731
|
syncSecret: string;
|
|
@@ -1100,11 +1100,11 @@ export declare function getOrpc(): {
|
|
|
1100
1100
|
title: string;
|
|
1101
1101
|
id: number;
|
|
1102
1102
|
blockId: string;
|
|
1103
|
+
description: string;
|
|
1103
1104
|
createdAt: number;
|
|
1104
1105
|
updatedAt: number;
|
|
1105
1106
|
projectId: number;
|
|
1106
1107
|
environmentId: number;
|
|
1107
|
-
description: string;
|
|
1108
1108
|
contentSchema: unknown;
|
|
1109
1109
|
settingsSchema: unknown;
|
|
1110
1110
|
defaultContent: unknown;
|
|
@@ -1142,11 +1142,11 @@ export declare function getOrpc(): {
|
|
|
1142
1142
|
title: string;
|
|
1143
1143
|
id: number;
|
|
1144
1144
|
blockId: string;
|
|
1145
|
+
description: string;
|
|
1145
1146
|
createdAt: number;
|
|
1146
1147
|
updatedAt: number;
|
|
1147
1148
|
projectId: number;
|
|
1148
1149
|
environmentId: number;
|
|
1149
|
-
description: string;
|
|
1150
1150
|
contentSchema: unknown;
|
|
1151
1151
|
settingsSchema: unknown;
|
|
1152
1152
|
defaultContent: unknown;
|
|
@@ -1157,11 +1157,11 @@ export declare function getOrpc(): {
|
|
|
1157
1157
|
title: string;
|
|
1158
1158
|
id: number;
|
|
1159
1159
|
blockId: string;
|
|
1160
|
+
description: string;
|
|
1160
1161
|
createdAt: number;
|
|
1161
1162
|
updatedAt: number;
|
|
1162
1163
|
projectId: number;
|
|
1163
1164
|
environmentId: number;
|
|
1164
|
-
description: string;
|
|
1165
1165
|
contentSchema: unknown;
|
|
1166
1166
|
settingsSchema: unknown;
|
|
1167
1167
|
defaultContent: unknown;
|
package/dist/lib/queries.d.ts
CHANGED
|
@@ -595,10 +595,10 @@ export declare const pageMutations: {
|
|
|
595
595
|
updatedAt: number;
|
|
596
596
|
projectId: number;
|
|
597
597
|
environmentId: number;
|
|
598
|
+
layoutId: number;
|
|
598
599
|
pathSegment: string;
|
|
599
600
|
fullPath: string;
|
|
600
601
|
parentPageId: number | null;
|
|
601
|
-
layoutId: number;
|
|
602
602
|
metaTitle: string | null;
|
|
603
603
|
metaDescription: string | null;
|
|
604
604
|
aiSeoEnabled: boolean | null;
|
|
@@ -613,10 +613,10 @@ export declare const pageMutations: {
|
|
|
613
613
|
updatedAt: number;
|
|
614
614
|
projectId: number;
|
|
615
615
|
environmentId: number;
|
|
616
|
+
layoutId: number;
|
|
616
617
|
pathSegment: string;
|
|
617
618
|
fullPath: string;
|
|
618
619
|
parentPageId: number | null;
|
|
619
|
-
layoutId: number;
|
|
620
620
|
metaTitle: string | null;
|
|
621
621
|
metaDescription: string | null;
|
|
622
622
|
aiSeoEnabled: boolean | null;
|
|
@@ -631,10 +631,10 @@ export declare const pageMutations: {
|
|
|
631
631
|
updatedAt: number;
|
|
632
632
|
projectId: number;
|
|
633
633
|
environmentId: number;
|
|
634
|
+
layoutId: number;
|
|
634
635
|
pathSegment: string;
|
|
635
636
|
fullPath: string;
|
|
636
637
|
parentPageId: number | null;
|
|
637
|
-
layoutId: number;
|
|
638
638
|
metaTitle: string | null;
|
|
639
639
|
metaDescription: string | null;
|
|
640
640
|
aiSeoEnabled: boolean | null;
|
|
@@ -648,10 +648,10 @@ export declare const pageMutations: {
|
|
|
648
648
|
updatedAt: number;
|
|
649
649
|
projectId: number;
|
|
650
650
|
environmentId: number;
|
|
651
|
+
layoutId: number;
|
|
651
652
|
pathSegment: string;
|
|
652
653
|
fullPath: string;
|
|
653
654
|
parentPageId: number | null;
|
|
654
|
-
layoutId: number;
|
|
655
655
|
metaTitle: string | null;
|
|
656
656
|
metaDescription: string | null;
|
|
657
657
|
aiSeoEnabled: boolean | null;
|
|
@@ -665,10 +665,10 @@ export declare const pageMutations: {
|
|
|
665
665
|
updatedAt: number;
|
|
666
666
|
projectId: number;
|
|
667
667
|
environmentId: number;
|
|
668
|
+
layoutId: number;
|
|
668
669
|
pathSegment: string;
|
|
669
670
|
fullPath: string;
|
|
670
671
|
parentPageId: number | null;
|
|
671
|
-
layoutId: number;
|
|
672
672
|
metaTitle: string | null;
|
|
673
673
|
metaDescription: string | null;
|
|
674
674
|
aiSeoEnabled: boolean | null;
|
|
@@ -682,10 +682,10 @@ export declare const pageMutations: {
|
|
|
682
682
|
updatedAt: number;
|
|
683
683
|
projectId: number;
|
|
684
684
|
environmentId: number;
|
|
685
|
+
layoutId: number;
|
|
685
686
|
pathSegment: string;
|
|
686
687
|
fullPath: string;
|
|
687
688
|
parentPageId: number | null;
|
|
688
|
-
layoutId: number;
|
|
689
689
|
metaTitle: string | null;
|
|
690
690
|
metaDescription: string | null;
|
|
691
691
|
aiSeoEnabled: boolean | null;
|
|
@@ -699,10 +699,10 @@ export declare const pageMutations: {
|
|
|
699
699
|
updatedAt: number;
|
|
700
700
|
projectId: number;
|
|
701
701
|
environmentId: number;
|
|
702
|
+
layoutId: number;
|
|
702
703
|
pathSegment: string;
|
|
703
704
|
fullPath: string;
|
|
704
705
|
parentPageId: number | null;
|
|
705
|
-
layoutId: number;
|
|
706
706
|
metaTitle: string | null;
|
|
707
707
|
metaDescription: string | null;
|
|
708
708
|
aiSeoEnabled: boolean | null;
|