camox 0.47.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/core/createApp.d.ts +19 -6
  2. package/dist/core/createApp.js +7 -2
  3. package/dist/core/createBlock.js +54 -43
  4. package/dist/core/createCollection.d.ts +25 -7
  5. package/dist/core/createCollection.js +28 -9
  6. package/dist/core/createLayout.d.ts +98 -71
  7. package/dist/core/createLayout.js +10 -16
  8. package/dist/core/derivedRoutes.js +1 -1
  9. package/dist/core/editing/BlockEditingRuntime.d.ts +3 -2
  10. package/dist/core/editing/CompleteBlockEditingRuntime.js +2 -1
  11. package/dist/core/editing/createEditableBlock.d.ts +59 -19
  12. package/dist/core/editing/createEditableBlock.js +162 -151
  13. package/dist/core/editing/useLatestRecord.js +7 -7
  14. package/dist/core/layoutContext.d.ts +55 -0
  15. package/dist/core/layoutContext.js +66 -0
  16. package/dist/core/lib/contentType.d.ts +91 -4
  17. package/dist/core/lib/contentType.js +84 -7
  18. package/dist/core/lib/recordScope.js +19 -17
  19. package/dist/core/lib/reference.d.ts +6 -2
  20. package/dist/core/recordItem.js +55 -2
  21. package/dist/core/requestContext.d.ts +18 -0
  22. package/dist/core/structuredData.d.ts +126 -0
  23. package/dist/core/structuredData.js +40 -0
  24. package/dist/features/canvas/canvasCamera.js +1 -1
  25. package/dist/features/canvas/sidebar/CanvasInspector.js +1 -1
  26. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +1 -1
  27. package/dist/features/content/ContentAssets.js +84 -88
  28. package/dist/features/content/ContentCollection.js +13 -7
  29. package/dist/features/content/collection-form.js +6 -2
  30. package/dist/features/content/components/MissingFromLocale.js +1 -1
  31. package/dist/features/og/pageImage.js +89 -0
  32. package/dist/features/page/CuratedPageContent.js +45 -32
  33. package/dist/features/page/DerivedPageContent.js +49 -22
  34. package/dist/features/page/SharedLayoutContent.js +26 -22
  35. package/dist/features/preview/CamoxPreview.js +41 -27
  36. package/dist/features/preview/EditablePageExperience.js +17 -9
  37. package/dist/features/preview/components/AddBlockSheet.js +1 -0
  38. package/dist/features/preview/components/BlockActionsPopover.js +19 -41
  39. package/dist/features/preview/components/FieldToolbar.js +1 -1
  40. package/dist/features/preview/components/MobilePreviewDrawer.js +6 -9
  41. package/dist/features/preview/components/PageInfo.js +244 -264
  42. package/dist/features/preview/components/PageTree.js +63 -53
  43. package/dist/features/preview/components/PreviewPanel.js +10 -64
  44. package/dist/features/preview/components/PreviewToolbar.js +1 -1
  45. package/dist/features/preview/components/RecordCard.js +50 -34
  46. package/dist/features/preview/components/RecordCombobox.js +12 -5
  47. package/dist/features/preview/components/ReferenceFieldEditor.js +4 -2
  48. package/dist/features/preview/components/ReferenceListFieldEditor.js +24 -19
  49. package/dist/features/preview/components/RepeatableItemsList.js +62 -46
  50. package/dist/features/preview/components/SelectionEditor.js +3 -2
  51. package/dist/features/preview/components/useFieldWriter.js +2 -4
  52. package/dist/features/preview/components/useRecordView.js +2 -2
  53. package/dist/features/preview/entityName.js +11 -0
  54. package/dist/features/preview/pageRecord.js +17 -18
  55. package/dist/features/preview/previewConstants.js +2 -8
  56. package/dist/features/preview/usePreviewViewportActions.js +1 -1
  57. package/dist/features/provider/AuthenticatedCamoxProvider.js +1 -1
  58. package/dist/features/provider/components/CommandPalette.js +2 -5
  59. package/dist/features/provider/signInShortcut.js +1 -2
  60. package/dist/features/provider/useAdminShortcuts.js +47 -53
  61. package/dist/features/routes/pageRuntime.d.ts +17 -2
  62. package/dist/features/routes/pageRuntime.js +61 -57
  63. package/dist/features/runtime/RuntimeChrome.js +1 -1
  64. package/dist/features/runtime/breadcrumbs.js +68 -0
  65. package/dist/features/runtime/livePages.js +3 -2
  66. package/dist/features/runtime/pageGraph.js +92 -0
  67. package/dist/features/runtime/projectLogo.js +110 -0
  68. package/dist/features/runtime/publicCache.js +83 -0
  69. package/dist/features/runtime/runtime.d.ts +24 -9
  70. package/dist/features/runtime/runtime.js +447 -130
  71. package/dist/features/runtime/runtimeRoutes.d.ts +1 -0
  72. package/dist/features/runtime/runtimeRoutes.js +1 -0
  73. package/dist/features/runtime/structuredData.js +213 -0
  74. package/dist/features/runtime/worker.d.ts +5 -1
  75. package/dist/features/runtime/worker.js +20 -3
  76. package/dist/features/settings/AnalyticsSettings.js +622 -0
  77. package/dist/features/settings/CamoxSettings.js +95 -0
  78. package/dist/features/settings/FaviconSettings.js +254 -0
  79. package/dist/features/settings/ProjectNameSettings.js +145 -0
  80. package/dist/features/settings/SettingsPart.js +73 -0
  81. package/dist/features/settings/SocialProfilesSettings.js +245 -0
  82. package/dist/features/settings/useProjectMutation.js +61 -0
  83. package/dist/features/studio/components/ChatSidebar.js +5 -5
  84. package/dist/features/studio/components/DraftsControl.js +136 -131
  85. package/dist/features/studio/components/LocalePicker.js +178 -174
  86. package/dist/features/studio/components/Navbar.js +107 -66
  87. package/dist/features/studio/components/ProjectMenu.js +85 -110
  88. package/dist/features/studio/components/ReviewDraftSheet.js +1046 -990
  89. package/dist/features/studio/components/ThreadMessages.js +2 -2
  90. package/dist/features/studio/components/UserButton.js +1 -1
  91. package/dist/features/studio/routes.js +3 -1
  92. package/dist/features/studio/showInCanvas.js +129 -0
  93. package/dist/features/vite/blockBoilerplate.js +3 -2
  94. package/dist/features/vite/definitionsSync.js +4 -5
  95. package/dist/features/vite/layoutGeneration.js +3 -2
  96. package/dist/features/vite/runtimeDev.js +32 -17
  97. package/dist/features/vite/staticAssetHeaders.js +52 -0
  98. package/dist/features/vite/vite.d.ts +1 -1
  99. package/dist/features/vite/vite.js +17 -4
  100. package/dist/lib/api-client-server.d.ts +1 -1
  101. package/dist/lib/api-client.d.ts +2 -1
  102. package/dist/lib/draft-scope.d.ts +1 -0
  103. package/dist/lib/locale-path.d.ts +3 -11
  104. package/dist/lib/locale-path.js +3 -27
  105. package/dist/lib/queries.d.ts +4 -0
  106. package/dist/lib/queries.js +8 -1
  107. package/dist/lib/shortcuts.js +29 -0
  108. package/dist/lib/studio-reads.d.ts +1 -0
  109. package/dist/lib/studio-reads.js +3 -1
  110. package/dist/lib/utils.js +1 -104
  111. package/dist/package.js +1 -1
  112. package/dist/studio.css +1 -1
  113. package/package.json +6 -4
  114. package/skills/camox/references/block-definitions.md +105 -25
  115. package/skills/camox/references/layout-definitions.md +53 -17
  116. package/skills/camox/references/routed-layouts.md +17 -14
  117. package/dist/features/studio/components/FaviconDialog.js +0 -318
@@ -4,7 +4,7 @@ import { Link as Link$1, useNavigate } from "../../navigation/navigation.js";
4
4
  import { cn } from "../../../lib/utils.js";
5
5
  import { usePageDestinations } from "../../../hooks/use-page-destinations.js";
6
6
  import { useLocalePath, useLocalizedPath } from "../../../lib/view-locale.js";
7
- import { STUDIO_BASE_PATH, STUDIO_CONTENT_PATH } from "../routes.js";
7
+ import { STUDIO_BASE_PATH, STUDIO_CONTENT_PATH, STUDIO_SETTINGS_PATH } from "../routes.js";
8
8
  import { studioStore } from "../studioStore.js";
9
9
  import { UserButton } from "./UserButton.js";
10
10
  import { DraftPicker, PendingChanges } from "./DraftsControl.js";
@@ -21,6 +21,7 @@ import { Database, Globe } from "lucide-react";
21
21
  const links = [{
22
22
  to: "/",
23
23
  title: "Website",
24
+ isWebsite: true,
24
25
  children: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Globe, {}), "Website"] }),
25
26
  icon: "Globe",
26
27
  aliases: ["Website"]
@@ -41,14 +42,16 @@ const getNavbarLinks = () => links;
41
42
  * locale since, a Studio location stays, while a page, whose path may differ there, goes home.
42
43
  */
43
44
  function navbarHref(link, last, locale, localized) {
44
- if (link !== links[0] || !last) return localized(link.to);
45
+ if (!link.isWebsite || !last) return localized(link.to);
45
46
  if (last.locale === locale) return `${localized(last.path)}${last.search}${last.hash}`;
46
47
  if (last.path.startsWith(`${"/camox"}/`)) return localized(last.path);
47
48
  return localized(link.to);
48
49
  }
49
- const isContentNavbarPath = (pathname) => pathname === "/camox/content" || pathname.startsWith(`${"/camox/content"}/`);
50
+ /** Whether `pathname` is in the studio section at `sectionPath`. */
51
+ const isInSection = (sectionPath, pathname) => pathname === sectionPath || pathname.startsWith(`${sectionPath}/`);
52
+ const isSettingsNavbarPath = (pathname) => isInSection(STUDIO_SETTINGS_PATH, pathname);
50
53
  const Navbar = (t0) => {
51
- const $ = c(19);
54
+ const $ = c(26);
52
55
  const { isWebsite: t1, recordPage } = t0;
53
56
  const isWebsite = t1 === void 0 ? false : t1;
54
57
  const pages = usePageDestinations();
@@ -57,86 +60,104 @@ const Navbar = (t0) => {
57
60
  const { locale } = useViewLocale();
58
61
  const last = useSelector(studioStore, _temp);
59
62
  let t2;
63
+ if ($[0] !== pathname) {
64
+ t2 = isSettingsNavbarPath(pathname);
65
+ $[0] = pathname;
66
+ $[1] = t2;
67
+ } else t2 = $[1];
68
+ const isSettings = t2;
60
69
  let t3;
61
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
62
- t2 = /* @__PURE__ */ jsx(ProjectMenu, {});
63
- t3 = /* @__PURE__ */ jsx(DraftPicker, {});
64
- $[0] = t2;
65
- $[1] = t3;
66
- } else {
67
- t2 = $[0];
68
- t3 = $[1];
69
- }
70
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
71
+ t3 = /* @__PURE__ */ jsx(ProjectMenu, {});
72
+ $[2] = t3;
73
+ } else t3 = $[2];
70
74
  let t4;
71
- if ($[2] !== recordPage) {
72
- t4 = /* @__PURE__ */ jsxs("div", {
75
+ if ($[3] !== isSettings) {
76
+ t4 = /* @__PURE__ */ jsx(DraftPicker, { disabled: isSettings });
77
+ $[3] = isSettings;
78
+ $[4] = t4;
79
+ } else t4 = $[4];
80
+ let t5;
81
+ if ($[5] !== isSettings || $[6] !== recordPage) {
82
+ t5 = /* @__PURE__ */ jsx(LocalePicker, {
83
+ recordPage,
84
+ disabled: isSettings
85
+ });
86
+ $[5] = isSettings;
87
+ $[6] = recordPage;
88
+ $[7] = t5;
89
+ } else t5 = $[7];
90
+ let t6;
91
+ if ($[8] !== t4 || $[9] !== t5) {
92
+ t6 = /* @__PURE__ */ jsxs("div", {
73
93
  className: "flex items-center gap-1",
74
94
  children: [
75
- t2,
76
95
  t3,
77
- /* @__PURE__ */ jsx(LocalePicker, { recordPage })
96
+ t4,
97
+ t5
78
98
  ]
79
99
  });
80
- $[2] = recordPage;
81
- $[3] = t4;
82
- } else t4 = $[3];
83
- let t5;
84
- if ($[4] !== isWebsite || $[5] !== last || $[6] !== locale || $[7] !== localized || $[8] !== pages || $[9] !== pathname) {
85
- t5 = getNavbarLinks().map((link, index) => {
86
- const isWebsiteActive = index === 0 && (isWebsite || pages?.some((page) => page.fullPath === pathname));
87
- const isContentActive = link.to === "/camox/content" && isContentNavbarPath(pathname);
100
+ $[8] = t4;
101
+ $[9] = t5;
102
+ $[10] = t6;
103
+ } else t6 = $[10];
104
+ let t7;
105
+ if ($[11] !== isWebsite || $[12] !== last || $[13] !== locale || $[14] !== localized || $[15] !== pages || $[16] !== pathname) {
106
+ t7 = getNavbarLinks().map((link) => {
107
+ const isActive = link.isWebsite ? isWebsite || !!pages?.some((page) => page.fullPath === pathname) : isInSection(link.to, pathname);
88
108
  return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link$1, {
89
109
  to: navbarHref(link, last, locale.tag, localized),
90
- className: cn(buttonVariants({ variant: "ghost" }), isWebsiteActive || isContentActive ? "bg-muted text-foreground dark:bg-muted/50" : "text-muted-foreground hover:text-muted-foreground"),
110
+ "aria-current": isActive ? "page" : void 0,
111
+ className: cn(buttonVariants({ variant: "ghost" }), isActive ? "bg-muted text-foreground dark:bg-muted/50" : "text-muted-foreground hover:text-muted-foreground"),
91
112
  activeProps: { className: "bg-muted text-foreground! dark:bg-muted/50" },
92
113
  children: link.children
93
114
  }) }, link.to);
94
115
  });
95
- $[4] = isWebsite;
96
- $[5] = last;
97
- $[6] = locale;
98
- $[7] = localized;
99
- $[8] = pages;
100
- $[9] = pathname;
101
- $[10] = t5;
102
- } else t5 = $[10];
103
- let t6;
104
- if ($[11] !== t5) {
105
- t6 = /* @__PURE__ */ jsx("ul", {
116
+ $[11] = isWebsite;
117
+ $[12] = last;
118
+ $[13] = locale;
119
+ $[14] = localized;
120
+ $[15] = pages;
121
+ $[16] = pathname;
122
+ $[17] = t7;
123
+ } else t7 = $[17];
124
+ let t8;
125
+ if ($[18] !== t7) {
126
+ t8 = /* @__PURE__ */ jsx("ul", {
106
127
  className: "flex items-center gap-1",
107
- children: t5
128
+ children: t7
108
129
  });
109
- $[11] = t5;
110
- $[12] = t6;
111
- } else t6 = $[12];
112
- let t7;
113
- if ($[13] !== t4 || $[14] !== t6) {
114
- t7 = /* @__PURE__ */ jsxs("div", {
130
+ $[18] = t7;
131
+ $[19] = t8;
132
+ } else t8 = $[19];
133
+ let t9;
134
+ if ($[20] !== t6 || $[21] !== t8) {
135
+ t9 = /* @__PURE__ */ jsxs("div", {
115
136
  className: "flex flex-row gap-2",
116
- children: [t4, t6]
137
+ children: [t6, t8]
117
138
  });
118
- $[13] = t4;
119
- $[14] = t6;
120
- $[15] = t7;
121
- } else t7 = $[15];
122
- let t8;
123
- if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
124
- t8 = /* @__PURE__ */ jsxs("div", {
139
+ $[20] = t6;
140
+ $[21] = t8;
141
+ $[22] = t9;
142
+ } else t9 = $[22];
143
+ let t10;
144
+ if ($[23] === Symbol.for("react.memo_cache_sentinel")) {
145
+ t10 = /* @__PURE__ */ jsxs("div", {
125
146
  className: "flex items-center gap-2",
126
147
  children: [/* @__PURE__ */ jsx(PendingChanges, {}), /* @__PURE__ */ jsx(UserButton, {})]
127
148
  });
128
- $[16] = t8;
129
- } else t8 = $[16];
130
- let t9;
131
- if ($[17] !== t7) {
132
- t9 = /* @__PURE__ */ jsxs("nav", {
149
+ $[23] = t10;
150
+ } else t10 = $[23];
151
+ let t11;
152
+ if ($[24] !== t9) {
153
+ t11 = /* @__PURE__ */ jsxs("nav", {
133
154
  className: "bg-background relative flex items-center justify-between gap-4 border-b-2 px-2 py-2",
134
- children: [t7, t8]
155
+ children: [t9, t10]
135
156
  });
136
- $[17] = t7;
137
- $[18] = t9;
138
- } else t9 = $[18];
139
- return t9;
157
+ $[24] = t9;
158
+ $[25] = t11;
159
+ } else t11 = $[25];
160
+ return t11;
140
161
  };
141
162
  function useNavbarActions() {
142
163
  const $ = c(5);
@@ -156,10 +177,27 @@ function useNavbarActions() {
156
177
  const last = studioStore.getSnapshot().context.websiteLocation;
157
178
  navigate({ to: navbarHref(link, last, locale.tag, localized) });
158
179
  },
159
- shortcut: { key: String(index + 1) },
180
+ shortcut: `${index + 1}`,
160
181
  icon: link.icon,
161
182
  aliases: link.aliases
162
183
  }));
184
+ actions.push({
185
+ id: `navigate-to-${STUDIO_SETTINGS_PATH}`,
186
+ label: "Go to Settings",
187
+ groupLabel: "Navigation",
188
+ checkIfAvailable: _temp3,
189
+ execute: () => void navigate({ to: localized(STUDIO_SETTINGS_PATH) }),
190
+ shortcut: `${actions.length + 1}`,
191
+ icon: "Settings",
192
+ aliases: [
193
+ "Settings",
194
+ "Project settings",
195
+ "Project name",
196
+ "Favicon",
197
+ "Social profiles",
198
+ "Analytics"
199
+ ]
200
+ });
163
201
  actionsStore.send({
164
202
  type: "registerManyActions",
165
203
  actions
@@ -167,7 +205,7 @@ function useNavbarActions() {
167
205
  return () => {
168
206
  actionsStore.send({
169
207
  type: "unregisterManyActions",
170
- ids: actions.map(_temp3)
208
+ ids: actions.map(_temp4)
171
209
  });
172
210
  };
173
211
  };
@@ -187,9 +225,12 @@ function useNavbarActions() {
187
225
  }
188
226
  React.useEffect(t0, t1);
189
227
  }
190
- function _temp3(a) {
228
+ function _temp4(a) {
191
229
  return a.id;
192
230
  }
231
+ function _temp3() {
232
+ return true;
233
+ }
193
234
  function _temp2() {
194
235
  return true;
195
236
  }
@@ -198,4 +239,4 @@ function _temp(state) {
198
239
  }
199
240
 
200
241
  //#endregion
201
- export { Navbar, getNavbarLinks, isContentNavbarPath, useNavbarActions };
242
+ export { Navbar, getNavbarLinks, useNavbarActions };
@@ -2,14 +2,15 @@ import { AuthContext } from "../../../lib/auth.js";
2
2
  import { getApiUrl } from "../../../lib/api-client.js";
3
3
  import { Link as Link$1 } from "../../navigation/navigation.js";
4
4
  import { reads, useReadQuery } from "../../../lib/studio-reads.js";
5
+ import { useLocalizedPath } from "../../../lib/view-locale.js";
6
+ import { STUDIO_SETTINGS_PATH } from "../routes.js";
5
7
  import { buildFaviconUrl } from "../../routes/pageRuntime.js";
6
8
  import { version } from "../../../package.js";
7
- import { FaviconDialog } from "./FaviconDialog.js";
8
9
  import { c } from "react/compiler-runtime";
9
10
  import * as React from "react";
10
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
11
12
  import { Button } from "@camox/ui/button";
12
- import { ChevronDown, ImageIcon, Info, Settings, Users } from "lucide-react";
13
+ import { ChevronDown, Info, Settings, Users } from "lucide-react";
13
14
  import { Skeleton } from "@camox/ui/skeleton";
14
15
  import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@camox/ui/dropdown-menu";
15
16
 
@@ -48,7 +49,7 @@ const Favicon = (t0) => {
48
49
  return t4;
49
50
  };
50
51
  const ProjectMenu = () => {
51
- const $ = c(53);
52
+ const $ = c(48);
52
53
  const authCtx = React.useContext(AuthContext);
53
54
  let t0;
54
55
  if ($[0] !== authCtx.projectUuid) {
@@ -57,7 +58,7 @@ const ProjectMenu = () => {
57
58
  $[1] = t0;
58
59
  } else t0 = $[1];
59
60
  const { data: project } = useReadQuery(t0);
60
- const [isFaviconDialogOpen, setIsFaviconDialogOpen] = React.useState(false);
61
+ const localized = useLocalizedPath();
61
62
  if (!project) {
62
63
  let t1;
63
64
  if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
@@ -116,137 +117,130 @@ const ProjectMenu = () => {
116
117
  $[12] = t4;
117
118
  $[13] = t6;
118
119
  } else t6 = $[13];
119
- const t7 = authCtx ? `${authCtx.authenticationUrl}/${project.organizationSlug}/${project.slug}/overview` : "#";
120
- let t8;
121
- if ($[14] !== t7) {
122
- t8 = /* @__PURE__ */ jsx("a", {
123
- href: t7,
124
- target: "_blank",
125
- rel: "noopener noreferrer"
126
- });
127
- $[14] = t7;
128
- $[15] = t8;
129
- } else t8 = $[15];
120
+ let t7;
121
+ if ($[14] !== localized) {
122
+ t7 = localized(STUDIO_SETTINGS_PATH);
123
+ $[14] = localized;
124
+ $[15] = t7;
125
+ } else t7 = $[15];
126
+ const t8 = t7;
130
127
  let t9;
131
- if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
132
- t9 = /* @__PURE__ */ jsx(Settings, {});
133
- $[16] = t9;
134
- } else t9 = $[16];
128
+ if ($[16] !== t8) {
129
+ t9 = /* @__PURE__ */ jsx(Link$1, { to: t8 });
130
+ $[16] = t8;
131
+ $[17] = t9;
132
+ } else t9 = $[17];
135
133
  let t10;
136
- if ($[17] !== t8) {
137
- t10 = /* @__PURE__ */ jsxs(DropdownMenuItem, {
138
- render: t8,
139
- children: [t9, "Project settings"]
140
- });
141
- $[17] = t8;
134
+ if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
135
+ t10 = /* @__PURE__ */ jsx(Settings, {});
142
136
  $[18] = t10;
143
137
  } else t10 = $[18];
144
138
  let t11;
145
- let t12;
146
- if ($[19] === Symbol.for("react.memo_cache_sentinel")) {
139
+ if ($[19] !== t9) {
147
140
  t11 = /* @__PURE__ */ jsxs(DropdownMenuItem, {
148
- onClick: () => setIsFaviconDialogOpen(true),
149
- children: [/* @__PURE__ */ jsx(ImageIcon, {}), "Set favicon…"]
141
+ render: t9,
142
+ children: [t10, "Settings"]
150
143
  });
144
+ $[19] = t9;
145
+ $[20] = t11;
146
+ } else t11 = $[20];
147
+ let t12;
148
+ if ($[21] === Symbol.for("react.memo_cache_sentinel")) {
151
149
  t12 = /* @__PURE__ */ jsx(DropdownMenuSeparator, {});
152
- $[19] = t11;
153
- $[20] = t12;
154
- } else {
155
- t11 = $[19];
156
- t12 = $[20];
157
- }
150
+ $[21] = t12;
151
+ } else t12 = $[21];
158
152
  let t13;
159
- if ($[21] !== project.organizationSlug) {
153
+ if ($[22] !== project.organizationSlug) {
160
154
  t13 = /* @__PURE__ */ jsx(DropdownMenuLabel, {
161
155
  className: "text-muted-foreground text-xs font-normal",
162
156
  children: project.organizationSlug
163
157
  });
164
- $[21] = project.organizationSlug;
165
- $[22] = t13;
166
- } else t13 = $[22];
158
+ $[22] = project.organizationSlug;
159
+ $[23] = t13;
160
+ } else t13 = $[23];
167
161
  const t14 = authCtx ? `${authCtx.authenticationUrl}/${project.organizationSlug}/members` : "#";
168
162
  let t15;
169
- if ($[23] !== t14) {
163
+ if ($[24] !== t14) {
170
164
  t15 = /* @__PURE__ */ jsx("a", {
171
165
  href: t14,
172
166
  target: "_blank",
173
167
  rel: "noopener noreferrer"
174
168
  });
175
- $[23] = t14;
176
- $[24] = t15;
177
- } else t15 = $[24];
169
+ $[24] = t14;
170
+ $[25] = t15;
171
+ } else t15 = $[25];
178
172
  let t16;
179
- if ($[25] === Symbol.for("react.memo_cache_sentinel")) {
173
+ if ($[26] === Symbol.for("react.memo_cache_sentinel")) {
180
174
  t16 = /* @__PURE__ */ jsx(Users, {});
181
- $[25] = t16;
182
- } else t16 = $[25];
175
+ $[26] = t16;
176
+ } else t16 = $[26];
183
177
  let t17;
184
- if ($[26] !== t15) {
178
+ if ($[27] !== t15) {
185
179
  t17 = /* @__PURE__ */ jsxs(DropdownMenuItem, {
186
180
  render: t15,
187
181
  children: [t16, "Team members"]
188
182
  });
189
- $[26] = t15;
190
- $[27] = t17;
191
- } else t17 = $[27];
183
+ $[27] = t15;
184
+ $[28] = t17;
185
+ } else t17 = $[28];
192
186
  const t18 = authCtx ? `${authCtx.authenticationUrl}/${project.organizationSlug}/settings` : "#";
193
187
  let t19;
194
- if ($[28] !== t18) {
188
+ if ($[29] !== t18) {
195
189
  t19 = /* @__PURE__ */ jsx("a", {
196
190
  href: t18,
197
191
  target: "_blank",
198
192
  rel: "noopener noreferrer"
199
193
  });
200
- $[28] = t18;
201
- $[29] = t19;
202
- } else t19 = $[29];
194
+ $[29] = t18;
195
+ $[30] = t19;
196
+ } else t19 = $[30];
203
197
  let t20;
204
- if ($[30] === Symbol.for("react.memo_cache_sentinel")) {
198
+ if ($[31] === Symbol.for("react.memo_cache_sentinel")) {
205
199
  t20 = /* @__PURE__ */ jsx(Settings, { className: "h-4 w-4" });
206
- $[30] = t20;
207
- } else t20 = $[30];
200
+ $[31] = t20;
201
+ } else t20 = $[31];
208
202
  let t21;
209
- if ($[31] !== t19) {
203
+ if ($[32] !== t19) {
210
204
  t21 = /* @__PURE__ */ jsxs(DropdownMenuItem, {
211
205
  render: t19,
212
206
  children: [t20, "Team settings"]
213
207
  });
214
- $[31] = t19;
215
- $[32] = t21;
216
- } else t21 = $[32];
208
+ $[32] = t19;
209
+ $[33] = t21;
210
+ } else t21 = $[33];
217
211
  let t22;
218
- if ($[33] !== t13 || $[34] !== t17 || $[35] !== t21) {
212
+ if ($[34] !== t13 || $[35] !== t17 || $[36] !== t21) {
219
213
  t22 = /* @__PURE__ */ jsxs(DropdownMenuGroup, { children: [
220
214
  t13,
221
215
  t17,
222
216
  t21
223
217
  ] });
224
- $[33] = t13;
225
- $[34] = t17;
226
- $[35] = t21;
227
- $[36] = t22;
228
- } else t22 = $[36];
218
+ $[34] = t13;
219
+ $[35] = t17;
220
+ $[36] = t21;
221
+ $[37] = t22;
222
+ } else t22 = $[37];
229
223
  let t23;
230
- if ($[37] === Symbol.for("react.memo_cache_sentinel")) {
224
+ if ($[38] === Symbol.for("react.memo_cache_sentinel")) {
231
225
  t23 = /* @__PURE__ */ jsx(DropdownMenuSeparator, {});
232
- $[37] = t23;
233
- } else t23 = $[37];
226
+ $[38] = t23;
227
+ } else t23 = $[38];
234
228
  let t24;
235
229
  let t25;
236
- if ($[38] === Symbol.for("react.memo_cache_sentinel")) {
230
+ if ($[39] === Symbol.for("react.memo_cache_sentinel")) {
237
231
  t24 = /* @__PURE__ */ jsx(Link$1, {
238
- to: "https://camox.dev",
232
+ to: "https://camox.ai",
239
233
  target: "_blank"
240
234
  });
241
235
  t25 = /* @__PURE__ */ jsx(Info, { className: "h-4 w-4" });
242
- $[38] = t24;
243
- $[39] = t25;
236
+ $[39] = t24;
237
+ $[40] = t25;
244
238
  } else {
245
- t24 = $[38];
246
- t25 = $[39];
239
+ t24 = $[39];
240
+ t25 = $[40];
247
241
  }
248
242
  let t26;
249
- if ($[40] === Symbol.for("react.memo_cache_sentinel")) {
243
+ if ($[41] === Symbol.for("react.memo_cache_sentinel")) {
250
244
  t26 = /* @__PURE__ */ jsxs(DropdownMenuItem, {
251
245
  render: t24,
252
246
  children: [
@@ -258,16 +252,15 @@ const ProjectMenu = () => {
258
252
  })
259
253
  ]
260
254
  });
261
- $[40] = t26;
262
- } else t26 = $[40];
255
+ $[41] = t26;
256
+ } else t26 = $[41];
263
257
  let t27;
264
- if ($[41] !== t10 || $[42] !== t22) {
258
+ if ($[42] !== t11 || $[43] !== t22) {
265
259
  t27 = /* @__PURE__ */ jsxs(DropdownMenuContent, {
266
260
  className: "w-72",
267
261
  align: "start",
268
262
  side: "bottom",
269
263
  children: [
270
- t10,
271
264
  t11,
272
265
  t12,
273
266
  t22,
@@ -275,36 +268,18 @@ const ProjectMenu = () => {
275
268
  t26
276
269
  ]
277
270
  });
278
- $[41] = t10;
279
- $[42] = t22;
280
- $[43] = t27;
281
- } else t27 = $[43];
271
+ $[42] = t11;
272
+ $[43] = t22;
273
+ $[44] = t27;
274
+ } else t27 = $[44];
282
275
  let t28;
283
- if ($[44] !== t27 || $[45] !== t6) {
276
+ if ($[45] !== t27 || $[46] !== t6) {
284
277
  t28 = /* @__PURE__ */ jsxs(DropdownMenu, { children: [t6, t27] });
285
- $[44] = t27;
286
- $[45] = t6;
287
- $[46] = t28;
288
- } else t28 = $[46];
289
- let t29;
290
- if ($[47] !== isFaviconDialogOpen || $[48] !== project) {
291
- t29 = /* @__PURE__ */ jsx(FaviconDialog, {
292
- project,
293
- open: isFaviconDialogOpen,
294
- onOpenChange: setIsFaviconDialogOpen
295
- });
296
- $[47] = isFaviconDialogOpen;
297
- $[48] = project;
298
- $[49] = t29;
299
- } else t29 = $[49];
300
- let t30;
301
- if ($[50] !== t28 || $[51] !== t29) {
302
- t30 = /* @__PURE__ */ jsxs(Fragment, { children: [t28, t29] });
303
- $[50] = t28;
304
- $[51] = t29;
305
- $[52] = t30;
306
- } else t30 = $[52];
307
- return t30;
278
+ $[45] = t27;
279
+ $[46] = t6;
280
+ $[47] = t28;
281
+ } else t28 = $[47];
282
+ return t28;
308
283
  };
309
284
 
310
285
  //#endregion