larkup 0.1.28 → 0.1.29

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 (214) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +5 -5
  3. package/.next/diagnostics/route-bundle-stats.json +25 -25
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/next-minimal-server.js.nft.json +1 -1
  6. package/.next/next-server.js.nft.json +1 -1
  7. package/.next/prerender-manifest.json +3 -3
  8. package/.next/required-server-files.js +4 -4
  9. package/.next/required-server-files.json +4 -4
  10. package/.next/server/app/_global-error/page/build-manifest.json +2 -2
  11. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  12. package/.next/server/app/_global-error.html +1 -1
  13. package/.next/server/app/_global-error.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  18. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/server/app/_not-found/page/build-manifest.json +2 -2
  20. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  21. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/_not-found.html +1 -1
  23. package/.next/server/app/_not-found.rsc +16 -16
  24. package/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
  25. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  26. package/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  27. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  28. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  29. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  30. package/.next/server/app/analytics/page/build-manifest.json +2 -2
  31. package/.next/server/app/analytics/page.js.nft.json +1 -1
  32. package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/analytics.html +1 -1
  34. package/.next/server/app/analytics.rsc +17 -17
  35. package/.next/server/app/analytics.segments/_full.segment.rsc +17 -17
  36. package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
  37. package/.next/server/app/analytics.segments/_index.segment.rsc +11 -11
  38. package/.next/server/app/analytics.segments/_tree.segment.rsc +1 -1
  39. package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +3 -3
  40. package/.next/server/app/analytics.segments/analytics.segment.rsc +3 -3
  41. package/.next/server/app/api/analytics/route.js.nft.json +1 -1
  42. package/.next/server/app/api/chat/route.js +8 -9
  43. package/.next/server/app/api/chat/route.js.nft.json +1 -1
  44. package/.next/server/app/api/chat/status/route.js.nft.json +1 -1
  45. package/.next/server/app/api/chat/suggestions/route.js.nft.json +1 -1
  46. package/.next/server/app/api/config/route.js.nft.json +1 -1
  47. package/.next/server/app/api/config/test/route.js.nft.json +1 -1
  48. package/.next/server/app/api/config/test-embedding/route.js.nft.json +1 -1
  49. package/.next/server/app/api/config/test-llm/route.js.nft.json +1 -1
  50. package/.next/server/app/api/config/test-provider/route.js.nft.json +1 -1
  51. package/.next/server/app/api/config/verify/route.js.nft.json +1 -1
  52. package/.next/server/app/api/connections/route.js.nft.json +1 -1
  53. package/.next/server/app/api/connections/webhook/route.js.nft.json +1 -1
  54. package/.next/server/app/api/demo/route.js.nft.json +1 -1
  55. package/.next/server/app/api/deploy/cloud-project/route.js.nft.json +1 -1
  56. package/.next/server/app/api/deploy/ssh/route.js.nft.json +1 -1
  57. package/.next/server/app/api/deployment/blob-setup/route.js.nft.json +1 -1
  58. package/.next/server/app/api/deployment/config/route.js.nft.json +1 -1
  59. package/.next/server/app/api/describe-image/route.js.nft.json +1 -1
  60. package/.next/server/app/api/doc-editor/edit/route.js.nft.json +1 -1
  61. package/.next/server/app/api/doc-editor/export/route.js.nft.json +1 -1
  62. package/.next/server/app/api/doc-editor/extract-text/route.js.nft.json +1 -1
  63. package/.next/server/app/api/doc-editor/parse/route.js.nft.json +1 -1
  64. package/.next/server/app/api/doc-editor/restore/route.js.nft.json +1 -1
  65. package/.next/server/app/api/document/sign/route.js.nft.json +1 -1
  66. package/.next/server/app/api/documents/route.js.nft.json +1 -1
  67. package/.next/server/app/api/firecrawl/local/route.js.nft.json +1 -1
  68. package/.next/server/app/api/index/route.js.nft.json +1 -1
  69. package/.next/server/app/api/integrations/notion/callback/route.js.nft.json +1 -1
  70. package/.next/server/app/api/integrations/notion/route.js.nft.json +1 -1
  71. package/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -1
  72. package/.next/server/app/api/jobs/route.js.nft.json +1 -1
  73. package/.next/server/app/api/marketplace/[toolId]/route.js +1 -1
  74. package/.next/server/app/api/marketplace/[toolId]/route.js.nft.json +1 -1
  75. package/.next/server/app/api/marketplace/route.js +1 -1
  76. package/.next/server/app/api/marketplace/route.js.nft.json +1 -1
  77. package/.next/server/app/api/media/[id]/route.js.nft.json +1 -1
  78. package/.next/server/app/api/media/process/route.js +2 -2
  79. package/.next/server/app/api/media/process/route.js.nft.json +1 -1
  80. package/.next/server/app/api/media/route.js +1 -1
  81. package/.next/server/app/api/media/route.js.nft.json +1 -1
  82. package/.next/server/app/api/media/stream/route.js.nft.json +1 -1
  83. package/.next/server/app/api/models/route.js.nft.json +1 -1
  84. package/.next/server/app/api/parse-file/route.js.nft.json +1 -1
  85. package/.next/server/app/api/proxy/verify/route.js.nft.json +1 -1
  86. package/.next/server/app/api/sandbox/route.js.nft.json +1 -1
  87. package/.next/server/app/api/search/bing/route.js.nft.json +1 -1
  88. package/.next/server/app/api/search/brave/route.js.nft.json +1 -1
  89. package/.next/server/app/api/search/exa/route.js.nft.json +1 -1
  90. package/.next/server/app/api/search/google/route.js.nft.json +1 -1
  91. package/.next/server/app/api/search/route.js.nft.json +1 -1
  92. package/.next/server/app/api/search/tavily/route.js.nft.json +1 -1
  93. package/.next/server/app/api/search/verify/route.js.nft.json +1 -1
  94. package/.next/server/app/api/server/agent/route.js.nft.json +1 -1
  95. package/.next/server/app/api/server/download/route.js.nft.json +1 -1
  96. package/.next/server/app/api/server/generate/route.js.nft.json +1 -1
  97. package/.next/server/app/api/server/local/route.js.nft.json +1 -1
  98. package/.next/server/app/api/servers/route.js.nft.json +1 -1
  99. package/.next/server/app/api/tabular/query/route.js.nft.json +1 -1
  100. package/.next/server/app/api/tabular/route.js.nft.json +1 -1
  101. package/.next/server/app/api/upload-file/route.js.nft.json +1 -1
  102. package/.next/server/app/api/uploads/[...slug]/route.js.nft.json +1 -1
  103. package/.next/server/app/api/vector-stores/install/route.js.nft.json +1 -1
  104. package/.next/server/app/api/vector-stores/status/route.js.nft.json +1 -1
  105. package/.next/server/app/chat/page/build-manifest.json +2 -2
  106. package/.next/server/app/chat/page.js.nft.json +1 -1
  107. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  108. package/.next/server/app/chat.html +1 -1
  109. package/.next/server/app/chat.rsc +17 -17
  110. package/.next/server/app/chat.segments/_full.segment.rsc +17 -17
  111. package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
  112. package/.next/server/app/chat.segments/_index.segment.rsc +11 -11
  113. package/.next/server/app/chat.segments/_tree.segment.rsc +1 -1
  114. package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +3 -3
  115. package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
  116. package/.next/server/app/data/page/build-manifest.json +2 -2
  117. package/.next/server/app/data/page.js.nft.json +1 -1
  118. package/.next/server/app/data/page_client-reference-manifest.js +1 -1
  119. package/.next/server/app/data.html +1 -1
  120. package/.next/server/app/data.rsc +17 -17
  121. package/.next/server/app/data.segments/_full.segment.rsc +17 -17
  122. package/.next/server/app/data.segments/_head.segment.rsc +4 -4
  123. package/.next/server/app/data.segments/_index.segment.rsc +11 -11
  124. package/.next/server/app/data.segments/_tree.segment.rsc +1 -1
  125. package/.next/server/app/data.segments/data/__PAGE__.segment.rsc +3 -3
  126. package/.next/server/app/data.segments/data.segment.rsc +3 -3
  127. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  128. package/.next/server/app/index.html +1 -1
  129. package/.next/server/app/index.rsc +16 -16
  130. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  131. package/.next/server/app/index.segments/_full.segment.rsc +16 -16
  132. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  133. package/.next/server/app/index.segments/_index.segment.rsc +11 -11
  134. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  135. package/.next/server/app/page/build-manifest.json +2 -2
  136. package/.next/server/app/page.js.nft.json +1 -1
  137. package/.next/server/app/page_client-reference-manifest.js +1 -1
  138. package/.next/server/app/settings/page/build-manifest.json +2 -2
  139. package/.next/server/app/settings/page/server-reference-manifest.json +3 -3
  140. package/.next/server/app/settings/page.js.nft.json +1 -1
  141. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  142. package/.next/server/app/settings.html +1 -1
  143. package/.next/server/app/settings.rsc +18 -18
  144. package/.next/server/app/settings.segments/_full.segment.rsc +18 -18
  145. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  146. package/.next/server/app/settings.segments/_index.segment.rsc +11 -11
  147. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  148. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  149. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  150. package/.next/server/chunks/[root-of-the-server]__0c80bj0._.js +3 -0
  151. package/.next/server/chunks/{[root-of-the-server]__1m7m2x7._.js → [root-of-the-server]__0drkoru._.js} +2 -2
  152. package/.next/server/chunks/{[root-of-the-server]__0vnm6_8._.js → [root-of-the-server]__0kmh740._.js} +6 -6
  153. package/.next/server/chunks/{[root-of-the-server]__0ou70-v._.js → [root-of-the-server]__0nfenje._.js} +1 -1
  154. package/.next/server/chunks/[root-of-the-server]__0omd-x0._.js +3 -0
  155. package/.next/server/chunks/{[root-of-the-server]__1s1zui-._.js → [root-of-the-server]__10v5qsi._.js} +1 -1
  156. package/.next/server/chunks/[root-of-the-server]__1idgvjh._.js +172 -0
  157. package/.next/server/chunks/[root-of-the-server]__1ip05r1._.js +1 -1
  158. package/.next/server/chunks/[root-of-the-server]__1jc54o2._.js +3 -0
  159. package/.next/server/chunks/{[root-of-the-server]__0748x7h._.js → [root-of-the-server]__1lhls88._.js} +1 -1
  160. package/.next/server/chunks/{[root-of-the-server]__0g_q-44._.js → [root-of-the-server]__1wy6wes._.js} +2 -2
  161. package/.next/server/chunks/{packages_1f4dx4h._.js → packages_1ggqion._.js} +2 -2
  162. package/.next/server/chunks/packages_marketplace_src_125_g2p._.js +1 -1
  163. package/.next/server/chunks/{packages_vector-stores_src_064-9ay._.js → packages_vector-stores_src_1fib7u-._.js} +2 -2
  164. package/.next/server/chunks/ssr/_169pdlf._.js +2 -2
  165. package/.next/server/chunks/ssr/_1hetwwu._.js +2 -2
  166. package/.next/server/chunks/ssr/_1iff9ia._.js +1 -1
  167. package/.next/server/chunks/ssr/_1yqlx1m._.js +1 -1
  168. package/.next/server/chunks/ssr/apps_web_lib_pdf-images_ts_13-l5wa._.js +1 -1
  169. package/.next/server/middleware-build-manifest.js +5 -5
  170. package/.next/server/pages/404.html +1 -1
  171. package/.next/server/pages/500.html +1 -1
  172. package/.next/server/server-reference-manifest.js +1 -1
  173. package/.next/server/server-reference-manifest.json +4 -4
  174. package/.next/static/chunks/{13hmtkhrbm4t3.js → 01qmngac69n9j.js} +1 -1
  175. package/.next/static/chunks/{3bpr59xr-_rv7.js → 0ge3nirnmx_np.js} +1 -1
  176. package/.next/static/chunks/{0k405nomf6s4e.js → 102b8vinedggz.js} +6 -6
  177. package/.next/static/chunks/{2jqjx4-rh414_.js → 13kyiy7q3of41.js} +1 -1
  178. package/.next/static/chunks/{1fz_0-qb5r5wd.js → 1dykihoo_1ae5.js} +1 -1
  179. package/.next/static/chunks/{0rgt7-bqxonef.js → 1sh7d5tt49x8b.js} +2 -2
  180. package/.next/static/chunks/{1-afr-snks55m.js → 1z4nte07k3dt6.js} +1 -1
  181. package/.next/static/chunks/2ib3e0xrrdait.js +1 -0
  182. package/.next/static/chunks/{turbopack-2gu-fmc6o5wkn.js → turbopack-2qt7vn_ocj4ao.js} +1 -1
  183. package/CHANGELOG.md +10 -0
  184. package/app/api/describe-image/route.ts +12 -4
  185. package/components/data/media-panel.tsx +34 -2
  186. package/components/data/upload-panel.tsx +2 -1
  187. package/components/settings/marketplace-section.tsx +14 -2
  188. package/lib/pdf-images.ts +20 -5
  189. package/package.json +5 -5
  190. package/.next/server/chunks/[root-of-the-server]__00r1kgp._.js +0 -143
  191. package/.next/server/chunks/[root-of-the-server]__064gb96._.js +0 -3
  192. package/.next/server/chunks/_0ce9vcg._.js +0 -32
  193. package/.next/static/chunks/00z1f-adeq1lg.js +0 -1
  194. package/archive/redesign-v2/app/configure/page.tsx +0 -53
  195. package/archive/redesign-v2/app/demo/page.tsx +0 -15
  196. package/archive/redesign-v2/app/server/page.tsx +0 -22
  197. package/archive/redesign-v2/app/simple/chat/page.tsx +0 -17
  198. package/archive/redesign-v2/app/simple/docs/page.tsx +0 -21
  199. package/archive/redesign-v2/app/simple/settings/page.tsx +0 -1104
  200. package/archive/redesign-v2/app-routes/configure/page.tsx +0 -53
  201. package/archive/redesign-v2/app-routes/demo/page.tsx +0 -15
  202. package/archive/redesign-v2/app-routes/server/page.tsx +0 -22
  203. package/archive/redesign-v2/app-routes/simple/chat/page.tsx +0 -17
  204. package/archive/redesign-v2/app-routes/simple/docs/page.tsx +0 -21
  205. package/archive/redesign-v2/app-routes/simple/layout.tsx +0 -9
  206. package/archive/redesign-v2/app-routes/simple/settings/page.tsx +0 -1104
  207. package/archive/redesign-v2/components/app-sidebar.tsx +0 -188
  208. package/archive/redesign-v2/components/app-topnav.tsx +0 -195
  209. package/archive/redesign-v2/components/global-settings.tsx +0 -288
  210. package/archive/redesign-v2/components/simple/simple-sidebar.tsx +0 -171
  211. package/archive/redesign-v2/components/simple/simple-topnav.tsx +0 -175
  212. /package/.next/static/{bDwMIFYSTVBKUJkJJx77o → W6QdudzTPo_OVPpNt29f7}/_buildManifest.js +0 -0
  213. /package/.next/static/{bDwMIFYSTVBKUJkJJx77o → W6QdudzTPo_OVPpNt29f7}/_clientMiddlewareManifest.js +0 -0
  214. /package/.next/static/{bDwMIFYSTVBKUJkJJx77o → W6QdudzTPo_OVPpNt29f7}/_ssgManifest.js +0 -0
@@ -1,171 +0,0 @@
1
- "use client";
2
-
3
- import Link from "next/link";
4
- import { usePathname } from "next/navigation";
5
- import {
6
- MessageCircle,
7
- FileStack,
8
- SlidersHorizontal,
9
- type LucideIcon,
10
- } from "lucide-react";
11
- import { cn } from "@/lib/utils";
12
- import {
13
- Tooltip,
14
- TooltipContent,
15
- TooltipProvider,
16
- TooltipTrigger,
17
- } from "@/components/ui/tooltip";
18
- import {
19
- useThemeCustomizer,
20
- type PanelBgVariant,
21
- } from "@/components/theme-customizer-provider";
22
- import { ThemeSwitcher } from "@/components/theme-switcher";
23
-
24
- const NAV_BG_COLORS: Record<PanelBgVariant, string | undefined> = {
25
- "panel-default": undefined,
26
- "panel-white": "#FFFFFF",
27
- "panel-fafafa": "#F4F4F4",
28
- "panel-warm": "#F7F1EA",
29
- "panel-soft": "#FBFAF8",
30
- "panel-silver": "#F8F8F8",
31
- "panel-stone": "#F5F5F2",
32
- };
33
-
34
- interface NavItem {
35
- id: string;
36
- label: string;
37
- href: string;
38
- icon: LucideIcon;
39
- description: string;
40
- }
41
-
42
- const SIMPLE_NAV: NavItem[] = [
43
- {
44
- id: "chat",
45
- label: "Chat",
46
- href: "/simple/chat",
47
- icon: MessageCircle,
48
- description: "Chat with your knowledge base using AI.",
49
- },
50
- {
51
- id: "docs",
52
- label: "Docs",
53
- href: "/simple/docs",
54
- icon: FileStack,
55
- description: "Upload, paste, or manage your documents.",
56
- },
57
- {
58
- id: "settings",
59
- label: "Settings",
60
- href: "/simple/settings",
61
- icon: SlidersHorizontal,
62
- description: "Configure provider, API keys, and advanced settings.",
63
- },
64
- ];
65
-
66
- export function SimpleSidebar() {
67
- const pathname = usePathname();
68
- const { pageStyle, navBg } = useThemeCustomizer();
69
-
70
- const navColor = navBg ? NAV_BG_COLORS[navBg] : undefined;
71
- const navStyle = navColor ? { backgroundColor: navColor } : undefined;
72
-
73
- return (
74
- <TooltipProvider delay={150}>
75
- <aside
76
- className={cn(
77
- "sticky top-0 hidden h-screen w-[84px] shrink-0 flex-col items-center gap-1 self-start py-3 md:flex",
78
- !navColor ? "bg-background" : "",
79
- pageStyle === "fused" ? "border-r border-border" : "",
80
- )}
81
- style={navStyle}
82
- >
83
- {/* Brand */}
84
- <Tooltip>
85
- <TooltipTrigger
86
- render={
87
- <Link
88
- href="/simple/chat"
89
- aria-label="larkup home"
90
- className="mb-2 flex size-11 items-center justify-center rounded-xl bg-primary text-primary-foreground shadow-sm transition-transform hover:scale-105"
91
- />
92
- }
93
- >
94
- <img src={"/logo9.png"} className="size-6.5" alt="logo" />
95
- </TooltipTrigger>
96
- <TooltipContent side="right" sideOffset={10}>
97
- Larkup
98
- </TooltipContent>
99
- </Tooltip>
100
-
101
- {/* Navigation */}
102
- <nav className="flex flex-1 flex-col items-center gap-2.5">
103
- {SIMPLE_NAV.map((item) => {
104
- const Icon = item.icon;
105
- const active = pathname?.startsWith(item.href);
106
-
107
- return (
108
- <Tooltip key={item.id}>
109
- <TooltipTrigger
110
- render={
111
- <Link
112
- href={item.href}
113
- aria-current={active ? "page" : undefined}
114
- className="group relative flex w-16 flex-col items-center gap-0.5 rounded-2xl py-1 outline-none focus-visible:ring-2 focus-visible:ring-ring"
115
- />
116
- }
117
- >
118
- {/* Active accent bar */}
119
- <span
120
- className={cn(
121
- "absolute left-0 top-1/2 h-6 w-1 -translate-y-1/2 rounded-r-full bg-primary transition-opacity",
122
- active ? "opacity-100" : "opacity-0",
123
- )}
124
- />
125
- <span
126
- className={cn(
127
- "relative flex size-9 items-center justify-center rounded-xl transition-colors",
128
- active
129
- ? "bg-white border text-primary"
130
- : "text-foreground/70 group-hover:bg-white/90 group-hover:text-foreground",
131
- )}
132
- >
133
- <Icon
134
- className="size-[19px]"
135
- strokeWidth={active ? 2.25 : 2}
136
- />
137
- </span>
138
- <span
139
- className={cn(
140
- "text-[10px] leading-none tracking-tight",
141
- active
142
- ? "font-semibold text-primary"
143
- : "text-muted-foreground",
144
- )}
145
- >
146
- {item.label}
147
- </span>
148
- </TooltipTrigger>
149
- <TooltipContent
150
- side="right"
151
- sideOffset={10}
152
- className="max-w-56"
153
- >
154
- <div className="flex flex-col gap-0.5">
155
- <span className="font-medium">{item.label}</span>
156
- <span className="text-[11px] leading-snug opacity-80">
157
- {item.description}
158
- </span>
159
- </div>
160
- </TooltipContent>
161
- </Tooltip>
162
- );
163
- })}
164
- </nav>
165
-
166
- {/* Footer */}
167
- <ThemeSwitcher floating={false} />
168
- </aside>
169
- </TooltipProvider>
170
- );
171
- }
@@ -1,175 +0,0 @@
1
- "use client";
2
-
3
- import Link from "next/link";
4
- import { usePathname } from "next/navigation";
5
- import { cn } from "@/lib/utils";
6
- import {
7
- Tooltip,
8
- TooltipContent,
9
- TooltipProvider,
10
- TooltipTrigger,
11
- } from "@/components/ui/tooltip";
12
- import { useWorkspace } from "@/components/workspace/workspace-provider";
13
- import { ThemeSwitcher } from "@/components/theme-switcher";
14
- import { useThemeCustomizer, type PanelBgVariant } from "@/components/theme-customizer-provider";
15
- import { MessageCircle, FileStack, SlidersHorizontal, type LucideIcon } from "lucide-react";
16
-
17
- const NAV_BG_COLORS: Record<PanelBgVariant, string | undefined> = {
18
- "panel-default": undefined,
19
- "panel-white": "#FFFFFF",
20
- "panel-fafafa": "#F4F4F4",
21
- "panel-warm": "#F7F1EA",
22
- "panel-soft": "#FBFAF8",
23
- "panel-silver": "#F8F8F8",
24
- "panel-stone": "#F5F5F2",
25
- };
26
-
27
- interface NavItem {
28
- id: string;
29
- label: string;
30
- href: string;
31
- icon: LucideIcon;
32
- description: string;
33
- }
34
-
35
- const SIMPLE_NAV: NavItem[] = [
36
- {
37
- id: "chat",
38
- label: "Chat",
39
- href: "/simple/chat",
40
- icon: MessageCircle,
41
- description: "Chat with your knowledge base using AI.",
42
- },
43
- {
44
- id: "docs",
45
- label: "Docs",
46
- href: "/simple/docs",
47
- icon: FileStack,
48
- description: "Upload, paste, or manage your documents.",
49
- },
50
- {
51
- id: "settings",
52
- label: "Settings",
53
- href: "/simple/settings",
54
- icon: SlidersHorizontal,
55
- description: "Configure provider, API keys, and advanced settings.",
56
- },
57
- ];
58
-
59
- export function SimpleTopNav() {
60
- const pathname = usePathname();
61
- const { username } = useWorkspace();
62
- const { navBg } = useThemeCustomizer();
63
-
64
- const navColor = navBg ? NAV_BG_COLORS[navBg] : undefined;
65
- const navStyle = navColor ? { backgroundColor: navColor } : undefined;
66
-
67
- return (
68
- <TooltipProvider delay={150}>
69
- <header
70
- className={cn(
71
- "sticky top-0 z-50 flex h-16 shrink-0 items-center gap-4 border-b border-border px-4 md:px-6",
72
- !navColor ? "bg-white" : "",
73
- )}
74
- style={navStyle}
75
- >
76
- {/* Brand */}
77
- <Link
78
- href="/simple/chat"
79
- aria-label="larkup home"
80
- className="flex size-10 shrink-0 items-center justify-center rounded-xl bg-primary text-primary-foreground shadow-sm transition-transform hover:scale-105"
81
- >
82
- <img src={"/logo9.png"} className="size-5" alt="logo" />
83
- </Link>
84
- <span className="font-semibold tracking-tight hidden sm:inline-block">
85
- Larkup
86
- </span>
87
-
88
- {/* Navigation */}
89
- <nav className="flex flex-1 h-full items-end pb-0 gap-2 md:gap-4 ml-4">
90
- {SIMPLE_NAV.map((item, index) => {
91
- const Icon = item.icon;
92
- const active = pathname?.startsWith(item.href);
93
-
94
- return (
95
- <Tooltip key={item.id}>
96
- <TooltipTrigger
97
- render={
98
- <Link
99
- href={item.href}
100
- aria-current={active ? "page" : undefined}
101
- className={cn(
102
- "group relative flex items-center gap-2 h-10 px-3 rounded-md transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring",
103
- active ? "bg-muted/0" : "hover:bg-muted/30",
104
- )}
105
- />
106
- }
107
- >
108
- <div className="flex items-center">
109
- <span
110
- className={cn(
111
- "flex size-9 items-center justify-center rounded-lg transition-colors",
112
- active
113
- ? "text-primary"
114
- : "text-muted-foreground group-hover:text-foreground",
115
- )}
116
- >
117
- <Icon
118
- className="size-[18px]"
119
- strokeWidth={active ? 2.25 : 2}
120
- />
121
- </span>
122
- <span
123
- className={cn(
124
- "hidden md:block text-[13px] tracking-tight",
125
- active
126
- ? "font-semibold text-primary"
127
- : "text-muted-foreground group-hover:text-foreground",
128
- )}
129
- >
130
- {item.label}
131
- </span>
132
- {/* active accent bar (bottom) */}
133
- <span
134
- className={cn(
135
- "absolute bottom-0 left-0 h-0.5 w-full bg-primary transition-opacity",
136
- active
137
- ? "opacity-100"
138
- : "opacity-0 group-hover:opacity-100",
139
- )}
140
- />
141
- </div>
142
- </TooltipTrigger>
143
- <TooltipContent
144
- side="bottom"
145
- sideOffset={10}
146
- className="max-w-56"
147
- >
148
- <div className="flex flex-col gap-0.5">
149
- <span className="font-medium">
150
- {item.label}
151
- </span>
152
- <span className="text-[11px] leading-snug opacity-80">
153
- {item.description}
154
- </span>
155
- </div>
156
- </TooltipContent>
157
- </Tooltip>
158
- );
159
- })}
160
- </nav>
161
-
162
- {/* Right side: Workspace & Theme Customizer */}
163
- <div className="flex items-center gap-3">
164
- {username && (
165
- <span className="hidden text-sm text-muted-foreground md:block">
166
- Hi,{" "}
167
- <span className="font-medium text-foreground">{username}</span>
168
- </span>
169
- )}
170
- <ThemeSwitcher floating={false} />
171
- </div>
172
- </header>
173
- </TooltipProvider>
174
- );
175
- }