@logickernel/bridge 0.9.8 → 0.9.9

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.
@@ -445,14 +445,14 @@ function SidebarTrigger({
445
445
  "data-slot": "sidebar-trigger",
446
446
  variant: "ghost",
447
447
  size: "icon",
448
- className: cn("size-7", className),
448
+ className: cn(className, "size-7"),
449
449
  onClick: (event) => {
450
450
  onClick?.(event);
451
451
  toggleSidebar();
452
452
  },
453
453
  ...props,
454
454
  children: [
455
- /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.PanelLeftIcon, {}),
455
+ /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.MenuIcon, {}),
456
456
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
457
457
  ]
458
458
  }
@@ -484,12 +484,11 @@ function SidebarRail({ className, ...props }) {
484
484
  }
485
485
  function SidebarInset({ className, ...props }) {
486
486
  return /* @__PURE__ */ jsxRuntime.jsx(
487
- "main",
487
+ "div",
488
488
  {
489
489
  "data-slot": "sidebar-inset",
490
490
  className: cn(
491
491
  "bg-background relative flex w-full flex-1 flex-col",
492
- "px-4",
493
492
  "md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",
494
493
  className
495
494
  ),
@@ -757,6 +756,7 @@ function getIconComponent(icon) {
757
756
  }
758
757
  function NavMain({ items }) {
759
758
  const pathname = navigation.usePathname();
759
+ const { isMobile, setOpenMobile } = useSidebar();
760
760
  if (typeof window !== "undefined" && process.env.NODE_ENV === "development") {
761
761
  console.log("[NavMain] Received items:", {
762
762
  itemsCount: items.length,
@@ -856,7 +856,18 @@ function NavMain({ items }) {
856
856
  ]
857
857
  }
858
858
  ) }),
859
- /* @__PURE__ */ jsxRuntime.jsx(CollapsibleContent2, { children: /* @__PURE__ */ jsxRuntime.jsx(SidebarMenuSub, { children: item.items?.map((subItem) => /* @__PURE__ */ jsxRuntime.jsx(SidebarMenuSubItem, { children: /* @__PURE__ */ jsxRuntime.jsx(SidebarMenuSubButton, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { href: subItem.url, children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: subItem.title }) }) }) }, subItem.title)) }) })
859
+ /* @__PURE__ */ jsxRuntime.jsx(CollapsibleContent2, { children: /* @__PURE__ */ jsxRuntime.jsx(SidebarMenuSub, { children: item.items?.map((subItem) => /* @__PURE__ */ jsxRuntime.jsx(SidebarMenuSubItem, { children: /* @__PURE__ */ jsxRuntime.jsx(SidebarMenuSubButton, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
860
+ Link__default.default,
861
+ {
862
+ href: subItem.url,
863
+ onClick: () => {
864
+ if (isMobile) {
865
+ setOpenMobile(false);
866
+ }
867
+ },
868
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: subItem.title })
869
+ }
870
+ ) }) }, subItem.title)) }) })
860
871
  ] })
861
872
  },
862
873
  item.title
@@ -868,10 +879,21 @@ function NavMain({ items }) {
868
879
  asChild: true,
869
880
  tooltip: item.title,
870
881
  isActive,
871
- children: /* @__PURE__ */ jsxRuntime.jsxs(Link__default.default, { href: item.url, children: [
872
- item.icon && /* @__PURE__ */ jsxRuntime.jsx(item.icon, {}),
873
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.title })
874
- ] })
882
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
883
+ Link__default.default,
884
+ {
885
+ href: item.url,
886
+ onClick: () => {
887
+ if (isMobile) {
888
+ setOpenMobile(false);
889
+ }
890
+ },
891
+ children: [
892
+ item.icon && /* @__PURE__ */ jsxRuntime.jsx(item.icon, {}),
893
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.title })
894
+ ]
895
+ }
896
+ )
875
897
  }
876
898
  ) }, item.title);
877
899
  }) })
@@ -1109,11 +1131,19 @@ function TeamSwitcher({
1109
1131
  const isAppOrgRoute = pathname.startsWith("/app/") && pathSegments.length > 2 && pathSegments[2] !== "user";
1110
1132
  const pathOrgId = isAppOrgRoute ? pathSegments[2] : null;
1111
1133
  const currentOrgId = organizationId || (pathOrgId && teams.some((team) => team.id === pathOrgId) ? pathOrgId : null);
1112
- const activeTeam = currentOrgId ? teams.find((team) => team.id === currentOrgId) : null;
1113
1134
  const handleTeamChange = (teamId) => {
1135
+ if (isMobile && sidebar?.setOpenMobile) {
1136
+ sidebar.setOpenMobile(false);
1137
+ }
1114
1138
  router.push(`/app/${teamId}/home`);
1115
1139
  router.refresh();
1116
1140
  };
1141
+ const handleManageOrganizations = () => {
1142
+ if (isMobile && sidebar?.setOpenMobile) {
1143
+ sidebar.setOpenMobile(false);
1144
+ }
1145
+ router.push("/app/user/organizations");
1146
+ };
1117
1147
  const teamsWithLogo = teams.map((org) => {
1118
1148
  const logoIcon = org.logo ? getIconComponent(org.logo) : LucideIcons.GalleryVerticalEnd;
1119
1149
  return {
@@ -1123,6 +1153,7 @@ function TeamSwitcher({
1123
1153
  plan: org.plan || "Member"
1124
1154
  };
1125
1155
  });
1156
+ const activeTeamWithLogo = currentOrgId ? teamsWithLogo.find((team) => team.id === currentOrgId) : null;
1126
1157
  if (teamsWithLogo.length === 0) {
1127
1158
  return /* @__PURE__ */ jsxRuntime.jsx(SidebarMenu, { children: /* @__PURE__ */ jsxRuntime.jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(SidebarMenuButton, { size: "lg", className: "cursor-default", children: [
1128
1159
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-muted flex aspect-square size-8 items-center justify-center rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.GalleryVerticalEnd, { className: "size-4 text-muted-foreground" }) }),
@@ -1132,70 +1163,6 @@ function TeamSwitcher({
1132
1163
  ] })
1133
1164
  ] }) }) });
1134
1165
  }
1135
- if (!activeTeam) {
1136
- return /* @__PURE__ */ jsxRuntime.jsx(SidebarMenu, { children: /* @__PURE__ */ jsxRuntime.jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenu, { children: [
1137
- /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
1138
- SidebarMenuButton,
1139
- {
1140
- size: "lg",
1141
- className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground",
1142
- children: [
1143
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-muted flex aspect-square size-8 items-center justify-center rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.GalleryVerticalEnd, { className: "size-4 text-muted-foreground" }) }),
1144
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
1145
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-medium", children: "Organizations" }),
1146
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "truncate text-xs text-muted-foreground", children: [
1147
- teamsWithLogo.length,
1148
- " available"
1149
- ] })
1150
- ] }),
1151
- /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.ChevronsUpDown, { className: "ml-auto" })
1152
- ]
1153
- }
1154
- ) }),
1155
- /* @__PURE__ */ jsxRuntime.jsxs(
1156
- DropdownMenuContent,
1157
- {
1158
- className: "w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg",
1159
- align: "start",
1160
- side: isMobile ? "bottom" : "right",
1161
- sideOffset: 4,
1162
- children: [
1163
- /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuLabel, { className: "text-muted-foreground text-xs", children: "Select an organization" }),
1164
- teamsWithLogo.map((team) => /* @__PURE__ */ jsxRuntime.jsxs(
1165
- DropdownMenuItem,
1166
- {
1167
- onClick: () => handleTeamChange(team.id),
1168
- className: "gap-2 p-2",
1169
- children: [
1170
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-6 items-center justify-center rounded-md border", children: /* @__PURE__ */ jsxRuntime.jsx(team.logo, { className: "size-3.5 shrink-0" }) }),
1171
- team.name
1172
- ]
1173
- },
1174
- team.id
1175
- )),
1176
- /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuSeparator, {}),
1177
- /* @__PURE__ */ jsxRuntime.jsxs(
1178
- DropdownMenuItem,
1179
- {
1180
- className: "gap-2 p-2",
1181
- onClick: () => router.push("/app/user/organizations"),
1182
- children: [
1183
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-6 items-center justify-center rounded-md border bg-transparent", children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.GalleryVerticalEnd, { className: "size-4" }) }),
1184
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground font-medium", children: "Manage organizations" })
1185
- ]
1186
- }
1187
- )
1188
- ]
1189
- }
1190
- )
1191
- ] }) }) });
1192
- }
1193
- const activeTeamWithLogo = teamsWithLogo.find(
1194
- (team) => team.id === currentOrgId
1195
- );
1196
- if (!activeTeamWithLogo) {
1197
- return null;
1198
- }
1199
1166
  return /* @__PURE__ */ jsxRuntime.jsx(SidebarMenu, { children: /* @__PURE__ */ jsxRuntime.jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenu, { children: [
1200
1167
  /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
1201
1168
  SidebarMenuButton,
@@ -1203,10 +1170,18 @@ function TeamSwitcher({
1203
1170
  size: "lg",
1204
1171
  className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground",
1205
1172
  children: [
1206
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(activeTeamWithLogo.logo, { className: "size-4" }) }),
1207
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
1208
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-medium", children: activeTeamWithLogo.name }),
1209
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs", children: activeTeamWithLogo.plan })
1173
+ activeTeamWithLogo ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1174
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(activeTeamWithLogo.logo, { className: "size-4" }) }),
1175
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid flex-1 text-left text-sm leading-tight", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-medium", children: activeTeamWithLogo.name }) })
1176
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1177
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-muted flex aspect-square size-8 items-center justify-center rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.GalleryVerticalEnd, { className: "size-4 text-muted-foreground" }) }),
1178
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
1179
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-medium", children: "Organizations" }),
1180
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "truncate text-xs text-muted-foreground", children: [
1181
+ teamsWithLogo.length,
1182
+ " available"
1183
+ ] })
1184
+ ] })
1210
1185
  ] }),
1211
1186
  /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.ChevronsUpDown, { className: "ml-auto" })
1212
1187
  ]
@@ -1220,7 +1195,7 @@ function TeamSwitcher({
1220
1195
  side: isMobile ? "bottom" : "right",
1221
1196
  sideOffset: 4,
1222
1197
  children: [
1223
- /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuLabel, { className: "text-muted-foreground text-xs", children: "Organizations" }),
1198
+ /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuLabel, { className: "text-muted-foreground text-xs", children: activeTeamWithLogo ? "Organizations" : "Select an organization" }),
1224
1199
  teamsWithLogo.map((team) => /* @__PURE__ */ jsxRuntime.jsxs(
1225
1200
  DropdownMenuItem,
1226
1201
  {
@@ -1239,7 +1214,7 @@ function TeamSwitcher({
1239
1214
  DropdownMenuItem,
1240
1215
  {
1241
1216
  className: "gap-2 p-2",
1242
- onClick: () => router.push("/app/user/organizations"),
1217
+ onClick: handleManageOrganizations,
1243
1218
  children: [
1244
1219
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-6 items-center justify-center rounded-md border bg-transparent", children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.GalleryVerticalEnd, { className: "size-4" }) }),
1245
1220
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground font-medium", children: "Manage organizations" })
@@ -1267,16 +1242,12 @@ function useNavigation({
1267
1242
  enabled,
1268
1243
  organizationId,
1269
1244
  apiBaseUrl,
1270
- willFetch: enabled && !!organizationId
1245
+ willFetch: enabled
1271
1246
  });
1272
1247
  }
1273
- if (!enabled || !organizationId) {
1248
+ if (!enabled) {
1274
1249
  if (typeof window !== "undefined" && process.env.NODE_ENV === "development") {
1275
- console.log("[useNavigation] Skipping fetch:", {
1276
- reason: !enabled ? "disabled" : "no organizationId",
1277
- enabled,
1278
- organizationId
1279
- });
1250
+ console.log("[useNavigation] Skipping fetch: disabled");
1280
1251
  }
1281
1252
  setItems([]);
1282
1253
  setOrganizations([]);
@@ -1284,7 +1255,7 @@ function useNavigation({
1284
1255
  return;
1285
1256
  }
1286
1257
  const fetchNavigation = async () => {
1287
- const url = `${apiBaseUrl}/navigation/${organizationId}`;
1258
+ const url = organizationId ? `${apiBaseUrl}/navigation/${organizationId}` : `${apiBaseUrl}/navigation`;
1288
1259
  if (typeof window !== "undefined" && process.env.NODE_ENV === "development") {
1289
1260
  console.log("[useNavigation] Fetching navigation:", url);
1290
1261
  }
@@ -1312,7 +1283,8 @@ function useNavigation({
1312
1283
  console.log("[useNavigation] Navigation data received:", {
1313
1284
  itemsCount: data.items?.length || 0,
1314
1285
  organizationsCount: data.organizations?.length || 0,
1315
- hasUser: !!data.user
1286
+ hasUser: !!data.user,
1287
+ organizationId: data.organizationId
1316
1288
  });
1317
1289
  }
1318
1290
  setItems(data.items || []);
@@ -1464,6 +1436,22 @@ function AppSidebar({
1464
1436
  /* @__PURE__ */ jsxRuntime.jsx(SidebarRail, {})
1465
1437
  ] });
1466
1438
  }
1439
+ function AppHeader() {
1440
+ const { isMobile } = useSidebar();
1441
+ if (!isMobile) {
1442
+ return null;
1443
+ }
1444
+ return /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "p-2 relative flex items-center justify-center", children: [
1445
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarTrigger, { className: "absolute left-2" }),
1446
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-sans text-xl", children: "Random Truffle" })
1447
+ ] });
1448
+ }
1449
+ function SidebarContent2({ children }) {
1450
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1451
+ /* @__PURE__ */ jsxRuntime.jsx(AppHeader, {}),
1452
+ /* @__PURE__ */ jsxRuntime.jsx("main", { className: "px-4 py-2 md:py-4", children })
1453
+ ] });
1454
+ }
1467
1455
  function AppLayout({
1468
1456
  user,
1469
1457
  organizationId,
@@ -1479,10 +1467,7 @@ function AppLayout({
1479
1467
  apiBaseUrl
1480
1468
  }
1481
1469
  ),
1482
- /* @__PURE__ */ jsxRuntime.jsxs(SidebarInset, { children: [
1483
- /* @__PURE__ */ jsxRuntime.jsx(SidebarTrigger, {}),
1484
- children
1485
- ] })
1470
+ /* @__PURE__ */ jsxRuntime.jsx(SidebarInset, { children: /* @__PURE__ */ jsxRuntime.jsx(SidebarContent2, { children }) })
1486
1471
  ] });
1487
1472
  }
1488
1473