@create-flow/common-ui 0.3.6 → 0.3.7

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/index.cjs CHANGED
@@ -3,12 +3,6 @@
3
3
 
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var react = require('react');
6
- var Link = require('next/link');
7
- var navigation = require('next/navigation');
8
-
9
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
-
11
- var Link__default = /*#__PURE__*/_interopDefault(Link);
12
6
 
13
7
  // src/components/Hello.tsx
14
8
  function Hello() {
@@ -136,9 +130,11 @@ function Sidebar({
136
130
  const [isUserMenuOpen, setIsUserMenuOpen] = react.useState(false);
137
131
  const [fetchedUser, setFetchedUser] = react.useState(null);
138
132
  const [isLoading, setIsLoading] = react.useState(!userProp);
139
- const pathname = navigation.usePathname();
140
- const router = navigation.useRouter();
133
+ const [pathname, setPathname] = react.useState(typeof window !== "undefined" ? window.location.pathname : "/");
141
134
  const menuRef = react.useRef(null);
135
+ react.useEffect(() => {
136
+ setPathname(window.location.pathname);
137
+ }, []);
142
138
  react.useEffect(() => {
143
139
  if (userProp) return;
144
140
  let cancelled = false;
@@ -186,8 +182,7 @@ function Sidebar({
186
182
  if (onLogout) {
187
183
  onLogout();
188
184
  } else {
189
- router.push(logoutRedirectTo);
190
- router.refresh();
185
+ window.location.href = logoutRedirectTo;
191
186
  }
192
187
  }
193
188
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -216,7 +211,7 @@ function Sidebar({
216
211
  /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "flex-1 overflow-y-auto py-2 px-2 space-y-0.5", children: navItems.map(({ href, label, icon: Icon, exact }) => {
217
212
  const active = isActive(href, exact ?? false);
218
213
  return /* @__PURE__ */ jsxRuntime.jsxs(
219
- Link__default.default,
214
+ "a",
220
215
  {
221
216
  href,
222
217
  title: isCollapsed ? label : void 0,
@@ -246,7 +241,7 @@ function Sidebar({
246
241
  ] }),
247
242
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-1", children: [
248
243
  /* @__PURE__ */ jsxRuntime.jsxs(
249
- Link__default.default,
244
+ "a",
250
245
  {
251
246
  href: profileHref,
252
247
  onClick: () => setIsUserMenuOpen(false),
@@ -258,7 +253,7 @@ function Sidebar({
258
253
  }
259
254
  ),
260
255
  /* @__PURE__ */ jsxRuntime.jsxs(
261
- Link__default.default,
256
+ "a",
262
257
  {
263
258
  href: settingsHref,
264
259
  onClick: () => setIsUserMenuOpen(false),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Hello.tsx","../src/utils/authApi.ts","../src/components/Sidebar.tsx"],"names":["jsx","jsxs","useState","usePathname","useRouter","useRef","useEffect","Link","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["export function Hello() {\n return <div>Hello world</div>;\n}\n","const DEFAULT_AUTH_HOST = (() => {\n if (typeof process !== \"undefined\" && process.env?.NEXT_PUBLIC_AUTH_API_HOST) {\n const envHost = process.env.NEXT_PUBLIC_AUTH_API_HOST.trim();\n if (envHost.length > 0) return envHost;\n }\n return \"https://auth.create-flow.ai\";\n})();\n\nconst DEFAULT_APP_ID =\n typeof process !== \"undefined\"\n ? process.env?.NEXT_PUBLIC_AUTH_APP_ID?.trim() ?? \"\"\n : \"\";\n\nfunction normalizeHost(host?: string) {\n const value = (host ?? DEFAULT_AUTH_HOST).trim();\n if (!value) throw new Error(\"Auth host is not configured\");\n if (/^https?:\\/\\//i.test(value)) return value.replace(/\\/+$/g, \"\");\n return `https://${value}`.replace(/\\/+$/g, \"\");\n}\n\nfunction buildAuthUrl(\n path: string,\n host?: string,\n query?: Record<string, string | undefined>\n) {\n const normalizedHost = normalizeHost(host);\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n const url = new URL(normalizedPath, normalizedHost);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, value);\n }\n }\n }\n\n return url;\n}\n\nasync function fetchWithCredentials(url: URL, init: RequestInit = {}) {\n const response = await fetch(url.toString(), {\n credentials: \"include\",\n cache: \"no-store\",\n ...init,\n });\n let data: any = null;\n try {\n data = await response.json();\n } catch {\n // Ignore JSON parse errors\n }\n return { response, data };\n}\n\nexport async function getAuthJson(\n path: string,\n host?: string,\n query?: Record<string, string | undefined>\n) {\n const url = buildAuthUrl(path, host, query);\n return fetchWithCredentials(url, { method: \"GET\" });\n}\n\nexport function getResolvedAppId(appId?: string) {\n return (appId ?? DEFAULT_APP_ID).trim();\n}\n","\"use client\";\n\nimport { useState, useRef, useEffect, type ComponentType } from \"react\";\nimport Link from \"next/link\";\nimport { usePathname, useRouter } from \"next/navigation\";\n\nimport { getResolvedAppId, getAuthJson } from \"../utils/authApi\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type UserType = \"guest\" | \"regular\";\n\nexport interface AuthUser {\n id: string;\n name?: string | null;\n email?: string | null;\n image?: string | null;\n type: UserType;\n appId: string;\n isGuest: boolean;\n}\n\nexport interface NavItem {\n href: string;\n label: string;\n icon: ComponentType<{ className?: string }>;\n exact?: boolean;\n}\n\nexport interface SidebarProps {\n user?: AuthUser;\n appId?: string;\n authHost?: string;\n navItems?: NavItem[];\n title?: string;\n logoutRedirectTo?: string;\n profileHref?: string;\n settingsHref?: string;\n onLogout?: () => void;\n}\n\n// ── Icons ─────────────────────────────────────────────────────────────────────\n\nfunction HomeIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\n <path d=\"M9 22V12h6v10\" />\n </svg>\n );\n}\n\nfunction FolderIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 19a2 2 0 01-2 2H4a2 2 0 01-2-2V5a2 2 0 012-2h5l2 3h9a2 2 0 012 2z\" />\n </svg>\n );\n}\n\nfunction UserIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 20c0-4 3.6-7 8-7s8 3 8 7\" />\n </svg>\n );\n}\n\nfunction SettingsIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z\" />\n </svg>\n );\n}\n\nfunction LogOutIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\" />\n <polyline points=\"16,17 21,12 16,7\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n </svg>\n );\n}\n\nfunction ChevronLeftIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n );\n}\n\nfunction ChevronsUpDownIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7 15l5 5 5-5M7 9l5-5 5 5\" />\n </svg>\n );\n}\n\n// ── Default nav items ─────────────────────────────────────────────────────────\n\nconst defaultNavItems: NavItem[] = [\n { href: \"/dashboard\", label: \"Dashboard\", icon: HomeIcon, exact: true },\n { href: \"/dashboard/projects\", label: \"Projects\", icon: FolderIcon, exact: false },\n { href: \"/dashboard/settings\", label: \"Settings\", icon: SettingsIcon, exact: false },\n];\n\n// ── Avatar ────────────────────────────────────────────────────────────────────\n\nconst AVATAR_COLORS = [\n \"bg-violet-600\",\n \"bg-indigo-600\",\n \"bg-sky-600\",\n \"bg-emerald-600\",\n \"bg-amber-600\",\n \"bg-rose-600\",\n];\n\nfunction getAvatarColor(name: string): string {\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = name.charCodeAt(i) + ((hash << 5) - hash);\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .filter(Boolean)\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n}\n\n// ── Sidebar ───────────────────────────────────────────────────────────────────\n\nexport function Sidebar({\n user: userProp,\n appId,\n authHost,\n navItems = defaultNavItems,\n title = \"Workspace\",\n logoutRedirectTo = \"/\",\n profileHref = \"/profile\",\n settingsHref = \"/settings\",\n onLogout,\n}: SidebarProps) {\n const [isCollapsed, setIsCollapsed] = useState(false);\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const [fetchedUser, setFetchedUser] = useState<AuthUser | null>(null);\n const [isLoading, setIsLoading] = useState(!userProp);\n const pathname = usePathname();\n const router = useRouter();\n const menuRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (userProp) return;\n\n let cancelled = false;\n\n async function fetchSession() {\n try {\n const { response, data } = await getAuthJson(\"api/auth/session\", authHost);\n if (!cancelled && response.ok && data?.user) {\n setFetchedUser(data.user);\n }\n } catch (err) {\n console.error(\"Failed to fetch session:\", err);\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n }\n\n fetchSession();\n return () => { cancelled = true; };\n }, [authHost, userProp]);\n\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setIsUserMenuOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const user = userProp || fetchedUser;\n\n if (isLoading || !user) return null;\n\n const displayName = user.name || user.email?.split(\"@\")[0] || \"User\";\n const initials = getInitials(displayName);\n const avatarColor = getAvatarColor(displayName);\n\n function isActive(href: string, exact: boolean) {\n return exact ? pathname === href : pathname.startsWith(href);\n }\n\n async function handleLogout() {\n const resolvedAppId = getResolvedAppId(appId);\n\n try {\n await getAuthJson(\"api/auth/logout\", authHost, resolvedAppId ? { appId: resolvedAppId } : undefined);\n } catch (err) {\n console.error(\"Logout error:\", err);\n }\n\n if (onLogout) {\n onLogout();\n } else {\n router.push(logoutRedirectTo);\n router.refresh();\n }\n }\n\n return (\n <aside\n className={\n \"relative flex flex-col h-screen bg-white border-r border-zinc-200 transition-all duration-200 ease-in-out flex-shrink-0 \" +\n (isCollapsed ? \"w-[60px]\" : \"w-[220px]\")\n }\n >\n {/* ── Header ─────────────────────────────────────────────────────────── */}\n <div\n className={\n \"flex items-center h-14 px-3 flex-shrink-0 border-b border-zinc-200 \" +\n (isCollapsed ? \"justify-center\" : \"justify-between\")\n }\n >\n {!isCollapsed && (\n <span className=\"text-sm font-semibold text-zinc-900 tracking-tight truncate select-none\">\n {title}\n </span>\n )}\n <button\n onClick={() => setIsCollapsed((c) => !c)}\n title={isCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className=\"p-1.5 rounded-md text-zinc-400 hover:text-zinc-700 hover:bg-zinc-100 transition-colors flex-shrink-0\"\n >\n {isCollapsed ? (\n <ChevronRightIcon className=\"w-4 h-4\" />\n ) : (\n <ChevronLeftIcon className=\"w-4 h-4\" />\n )}\n </button>\n </div>\n\n {/* ── Nav ────────────────────────────────────────────────────────────── */}\n <nav className=\"flex-1 overflow-y-auto py-2 px-2 space-y-0.5\">\n {navItems.map(({ href, label, icon: Icon, exact }) => {\n const active = isActive(href, exact ?? false);\n return (\n <Link\n key={href}\n href={href}\n title={isCollapsed ? label : undefined}\n className={\n \"flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-sm transition-colors \" +\n (isCollapsed ? \"justify-center \" : \"\") +\n (active\n ? \"bg-zinc-100 text-zinc-900 font-medium\"\n : \"text-zinc-500 hover:bg-zinc-50 hover:text-zinc-900\")\n }\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n {!isCollapsed && <span className=\"truncate\">{label}</span>}\n </Link>\n );\n })}\n </nav>\n\n {/* ── User area ──────────────────────────────────────────────────────── */}\n <div\n ref={menuRef}\n className=\"relative flex-shrink-0 p-2 border-t border-zinc-200\"\n >\n {/* Dropdown menu */}\n {isUserMenuOpen && (\n <div\n className={\n \"absolute bottom-full mb-1 z-50 bg-white border border-zinc-200 rounded-xl shadow-lg shadow-zinc-200/50 overflow-hidden \" +\n (isCollapsed ? \"left-full ml-2 w-52\" : \"left-2 right-2\")\n }\n >\n {/* User info */}\n <div className=\"px-3.5 py-3 border-b border-zinc-100\">\n <p className=\"text-sm font-medium text-zinc-900 truncate\">\n {displayName}\n </p>\n {user.email && (\n <p className=\"text-xs text-zinc-500 truncate mt-0.5\">\n {user.email}\n </p>\n )}\n </div>\n {/* Menu items */}\n <div className=\"p-1\">\n <Link\n href={profileHref}\n onClick={() => setIsUserMenuOpen(false)}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors\"\n >\n <UserIcon className=\"w-4 h-4 text-zinc-400\" />\n Profile\n </Link>\n <Link\n href={settingsHref}\n onClick={() => setIsUserMenuOpen(false)}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors\"\n >\n <SettingsIcon className=\"w-4 h-4 text-zinc-400\" />\n Settings\n </Link>\n <button\n onClick={handleLogout}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors text-left\"\n >\n <LogOutIcon className=\"w-4 h-4 text-zinc-400\" />\n Log out\n </button>\n </div>\n </div>\n )}\n\n {/* User trigger button */}\n <button\n onClick={() => setIsUserMenuOpen((o) => !o)}\n title={isCollapsed ? displayName : undefined}\n className={\n \"w-full flex items-center gap-2.5 p-2 rounded-lg hover:bg-zinc-50 transition-colors text-left \" +\n (isCollapsed ? \"justify-center\" : \"\")\n }\n >\n <div\n className={\"w-7 h-7 rounded-full flex items-center justify-center flex-shrink-0 \" + avatarColor}\n >\n <span className=\"text-xs font-semibold text-white leading-none\">\n {initials}\n </span>\n </div>\n {!isCollapsed && (\n <>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-zinc-900 truncate leading-tight\">\n {displayName}\n </p>\n </div>\n <ChevronsUpDownIcon className=\"w-3.5 h-3.5 text-zinc-400 flex-shrink-0\" />\n </>\n )}\n </button>\n </div>\n </aside>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Hello.tsx","../src/utils/authApi.ts","../src/components/Sidebar.tsx"],"names":["jsx","jsxs","useState","useRef","useEffect","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["export function Hello() {\n return <div>Hello world</div>;\n}\n","const DEFAULT_AUTH_HOST = (() => {\n if (typeof process !== \"undefined\" && process.env?.NEXT_PUBLIC_AUTH_API_HOST) {\n const envHost = process.env.NEXT_PUBLIC_AUTH_API_HOST.trim();\n if (envHost.length > 0) return envHost;\n }\n return \"https://auth.create-flow.ai\";\n})();\n\nconst DEFAULT_APP_ID =\n typeof process !== \"undefined\"\n ? process.env?.NEXT_PUBLIC_AUTH_APP_ID?.trim() ?? \"\"\n : \"\";\n\nfunction normalizeHost(host?: string) {\n const value = (host ?? DEFAULT_AUTH_HOST).trim();\n if (!value) throw new Error(\"Auth host is not configured\");\n if (/^https?:\\/\\//i.test(value)) return value.replace(/\\/+$/g, \"\");\n return `https://${value}`.replace(/\\/+$/g, \"\");\n}\n\nfunction buildAuthUrl(\n path: string,\n host?: string,\n query?: Record<string, string | undefined>\n) {\n const normalizedHost = normalizeHost(host);\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n const url = new URL(normalizedPath, normalizedHost);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, value);\n }\n }\n }\n\n return url;\n}\n\nasync function fetchWithCredentials(url: URL, init: RequestInit = {}) {\n const response = await fetch(url.toString(), {\n credentials: \"include\",\n cache: \"no-store\",\n ...init,\n });\n let data: any = null;\n try {\n data = await response.json();\n } catch {\n // Ignore JSON parse errors\n }\n return { response, data };\n}\n\nexport async function getAuthJson(\n path: string,\n host?: string,\n query?: Record<string, string | undefined>\n) {\n const url = buildAuthUrl(path, host, query);\n return fetchWithCredentials(url, { method: \"GET\" });\n}\n\nexport function getResolvedAppId(appId?: string) {\n return (appId ?? DEFAULT_APP_ID).trim();\n}\n","\"use client\";\n\nimport { useState, useRef, useEffect, useCallback, type ComponentType } from \"react\";\n\nimport { getResolvedAppId, getAuthJson } from \"../utils/authApi\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type UserType = \"guest\" | \"regular\";\n\nexport interface AuthUser {\n id: string;\n name?: string | null;\n email?: string | null;\n image?: string | null;\n type: UserType;\n appId: string;\n isGuest: boolean;\n}\n\nexport interface NavItem {\n href: string;\n label: string;\n icon: ComponentType<{ className?: string }>;\n exact?: boolean;\n}\n\nexport interface SidebarProps {\n user?: AuthUser;\n appId?: string;\n authHost?: string;\n navItems?: NavItem[];\n title?: string;\n logoutRedirectTo?: string;\n profileHref?: string;\n settingsHref?: string;\n onLogout?: () => void;\n}\n\n// ── Icons ─────────────────────────────────────────────────────────────────────\n\nfunction HomeIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\n <path d=\"M9 22V12h6v10\" />\n </svg>\n );\n}\n\nfunction FolderIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 19a2 2 0 01-2 2H4a2 2 0 01-2-2V5a2 2 0 012-2h5l2 3h9a2 2 0 012 2z\" />\n </svg>\n );\n}\n\nfunction UserIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 20c0-4 3.6-7 8-7s8 3 8 7\" />\n </svg>\n );\n}\n\nfunction SettingsIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z\" />\n </svg>\n );\n}\n\nfunction LogOutIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\" />\n <polyline points=\"16,17 21,12 16,7\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n </svg>\n );\n}\n\nfunction ChevronLeftIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n );\n}\n\nfunction ChevronsUpDownIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7 15l5 5 5-5M7 9l5-5 5 5\" />\n </svg>\n );\n}\n\n// ── Default nav items ─────────────────────────────────────────────────────────\n\nconst defaultNavItems: NavItem[] = [\n { href: \"/dashboard\", label: \"Dashboard\", icon: HomeIcon, exact: true },\n { href: \"/dashboard/projects\", label: \"Projects\", icon: FolderIcon, exact: false },\n { href: \"/dashboard/settings\", label: \"Settings\", icon: SettingsIcon, exact: false },\n];\n\n// ── Avatar ────────────────────────────────────────────────────────────────────\n\nconst AVATAR_COLORS = [\n \"bg-violet-600\",\n \"bg-indigo-600\",\n \"bg-sky-600\",\n \"bg-emerald-600\",\n \"bg-amber-600\",\n \"bg-rose-600\",\n];\n\nfunction getAvatarColor(name: string): string {\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = name.charCodeAt(i) + ((hash << 5) - hash);\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .filter(Boolean)\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n}\n\n// ── Sidebar ───────────────────────────────────────────────────────────────────\n\nexport function Sidebar({\n user: userProp,\n appId,\n authHost,\n navItems = defaultNavItems,\n title = \"Workspace\",\n logoutRedirectTo = \"/\",\n profileHref = \"/profile\",\n settingsHref = \"/settings\",\n onLogout,\n}: SidebarProps) {\n const [isCollapsed, setIsCollapsed] = useState(false);\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const [fetchedUser, setFetchedUser] = useState<AuthUser | null>(null);\n const [isLoading, setIsLoading] = useState(!userProp);\n const [pathname, setPathname] = useState(typeof window !== \"undefined\" ? window.location.pathname : \"/\");\n const menuRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setPathname(window.location.pathname);\n }, []);\n\n useEffect(() => {\n if (userProp) return;\n\n let cancelled = false;\n\n async function fetchSession() {\n try {\n const { response, data } = await getAuthJson(\"api/auth/session\", authHost);\n if (!cancelled && response.ok && data?.user) {\n setFetchedUser(data.user);\n }\n } catch (err) {\n console.error(\"Failed to fetch session:\", err);\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n }\n\n fetchSession();\n return () => { cancelled = true; };\n }, [authHost, userProp]);\n\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setIsUserMenuOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const user = userProp || fetchedUser;\n\n if (isLoading || !user) return null;\n\n const displayName = user.name || user.email?.split(\"@\")[0] || \"User\";\n const initials = getInitials(displayName);\n const avatarColor = getAvatarColor(displayName);\n\n function isActive(href: string, exact: boolean) {\n return exact ? pathname === href : pathname.startsWith(href);\n }\n\n async function handleLogout() {\n const resolvedAppId = getResolvedAppId(appId);\n\n try {\n await getAuthJson(\"api/auth/logout\", authHost, resolvedAppId ? { appId: resolvedAppId } : undefined);\n } catch (err) {\n console.error(\"Logout error:\", err);\n }\n\n if (onLogout) {\n onLogout();\n } else {\n window.location.href = logoutRedirectTo;\n }\n }\n\n return (\n <aside\n className={\n \"relative flex flex-col h-screen bg-white border-r border-zinc-200 transition-all duration-200 ease-in-out flex-shrink-0 \" +\n (isCollapsed ? \"w-[60px]\" : \"w-[220px]\")\n }\n >\n {/* ── Header ─────────────────────────────────────────────────────────── */}\n <div\n className={\n \"flex items-center h-14 px-3 flex-shrink-0 border-b border-zinc-200 \" +\n (isCollapsed ? \"justify-center\" : \"justify-between\")\n }\n >\n {!isCollapsed && (\n <span className=\"text-sm font-semibold text-zinc-900 tracking-tight truncate select-none\">\n {title}\n </span>\n )}\n <button\n onClick={() => setIsCollapsed((c) => !c)}\n title={isCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className=\"p-1.5 rounded-md text-zinc-400 hover:text-zinc-700 hover:bg-zinc-100 transition-colors flex-shrink-0\"\n >\n {isCollapsed ? (\n <ChevronRightIcon className=\"w-4 h-4\" />\n ) : (\n <ChevronLeftIcon className=\"w-4 h-4\" />\n )}\n </button>\n </div>\n\n {/* ── Nav ────────────────────────────────────────────────────────────── */}\n <nav className=\"flex-1 overflow-y-auto py-2 px-2 space-y-0.5\">\n {navItems.map(({ href, label, icon: Icon, exact }) => {\n const active = isActive(href, exact ?? false);\n return (\n <a\n key={href}\n href={href}\n title={isCollapsed ? label : undefined}\n className={\n \"flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-sm transition-colors \" +\n (isCollapsed ? \"justify-center \" : \"\") +\n (active\n ? \"bg-zinc-100 text-zinc-900 font-medium\"\n : \"text-zinc-500 hover:bg-zinc-50 hover:text-zinc-900\")\n }\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n {!isCollapsed && <span className=\"truncate\">{label}</span>}\n </a>\n );\n })}\n </nav>\n\n {/* ── User area ──────────────────────────────────────────────────────── */}\n <div\n ref={menuRef}\n className=\"relative flex-shrink-0 p-2 border-t border-zinc-200\"\n >\n {/* Dropdown menu */}\n {isUserMenuOpen && (\n <div\n className={\n \"absolute bottom-full mb-1 z-50 bg-white border border-zinc-200 rounded-xl shadow-lg shadow-zinc-200/50 overflow-hidden \" +\n (isCollapsed ? \"left-full ml-2 w-52\" : \"left-2 right-2\")\n }\n >\n {/* User info */}\n <div className=\"px-3.5 py-3 border-b border-zinc-100\">\n <p className=\"text-sm font-medium text-zinc-900 truncate\">\n {displayName}\n </p>\n {user.email && (\n <p className=\"text-xs text-zinc-500 truncate mt-0.5\">\n {user.email}\n </p>\n )}\n </div>\n {/* Menu items */}\n <div className=\"p-1\">\n <a\n href={profileHref}\n onClick={() => setIsUserMenuOpen(false)}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors\"\n >\n <UserIcon className=\"w-4 h-4 text-zinc-400\" />\n Profile\n </a>\n <a\n href={settingsHref}\n onClick={() => setIsUserMenuOpen(false)}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors\"\n >\n <SettingsIcon className=\"w-4 h-4 text-zinc-400\" />\n Settings\n </a>\n <button\n onClick={handleLogout}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors text-left\"\n >\n <LogOutIcon className=\"w-4 h-4 text-zinc-400\" />\n Log out\n </button>\n </div>\n </div>\n )}\n\n {/* User trigger button */}\n <button\n onClick={() => setIsUserMenuOpen((o) => !o)}\n title={isCollapsed ? displayName : undefined}\n className={\n \"w-full flex items-center gap-2.5 p-2 rounded-lg hover:bg-zinc-50 transition-colors text-left \" +\n (isCollapsed ? \"justify-center\" : \"\")\n }\n >\n <div\n className={\"w-7 h-7 rounded-full flex items-center justify-center flex-shrink-0 \" + avatarColor}\n >\n <span className=\"text-xs font-semibold text-white leading-none\">\n {initials}\n </span>\n </div>\n {!isCollapsed && (\n <>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-zinc-900 truncate leading-tight\">\n {displayName}\n </p>\n </div>\n <ChevronsUpDownIcon className=\"w-3.5 h-3.5 text-zinc-400 flex-shrink-0\" />\n </>\n )}\n </button>\n </div>\n </aside>\n );\n}\n"]}
package/dist/index.css ADDED
@@ -0,0 +1 @@
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder, textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.absolute{position:absolute}.relative{position:relative}.bottom-full{bottom:100%}.left-2{left:.5rem}.left-full{left:100%}.right-2{right:.5rem}.z-50{z-index:50}.mb-1{margin-bottom:.25rem}.ml-2{margin-left:.5rem}.mt-0\.5{margin-top:.125rem}.flex{display:flex}.h-14{height:3.5rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-7{height:1.75rem}.h-screen{height:100vh}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-52{width:13rem}.w-7{width:1.75rem}.w-\[220px\]{width:220px}.w-\[60px\]{width:60px}.w-full{width:100%}.min-w-0{min-width:0}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2\.5{gap:.625rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.125rem*var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity,1))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity,1))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity,1))}.bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity,1))}.bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.text-left{text-align:left}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-none{line-height:1}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity,1))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -4px rgba(0,0,0,0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow-zinc-200\/50{--tw-shadow-color:rgba(228,228,231,0.5);--tw-shadow:var(--tw-shadow-colored)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.hover\:bg-zinc-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.hover\:text-zinc-700:hover{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity,1))}.hover\:text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}
package/dist/index.js CHANGED
@@ -1,8 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { useState, useRef, useEffect } from 'react';
4
- import Link from 'next/link';
5
- import { usePathname, useRouter } from 'next/navigation';
6
4
 
7
5
  // src/components/Hello.tsx
8
6
  function Hello() {
@@ -130,9 +128,11 @@ function Sidebar({
130
128
  const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);
131
129
  const [fetchedUser, setFetchedUser] = useState(null);
132
130
  const [isLoading, setIsLoading] = useState(!userProp);
133
- const pathname = usePathname();
134
- const router = useRouter();
131
+ const [pathname, setPathname] = useState(typeof window !== "undefined" ? window.location.pathname : "/");
135
132
  const menuRef = useRef(null);
133
+ useEffect(() => {
134
+ setPathname(window.location.pathname);
135
+ }, []);
136
136
  useEffect(() => {
137
137
  if (userProp) return;
138
138
  let cancelled = false;
@@ -180,8 +180,7 @@ function Sidebar({
180
180
  if (onLogout) {
181
181
  onLogout();
182
182
  } else {
183
- router.push(logoutRedirectTo);
184
- router.refresh();
183
+ window.location.href = logoutRedirectTo;
185
184
  }
186
185
  }
187
186
  return /* @__PURE__ */ jsxs(
@@ -210,7 +209,7 @@ function Sidebar({
210
209
  /* @__PURE__ */ jsx("nav", { className: "flex-1 overflow-y-auto py-2 px-2 space-y-0.5", children: navItems.map(({ href, label, icon: Icon, exact }) => {
211
210
  const active = isActive(href, exact ?? false);
212
211
  return /* @__PURE__ */ jsxs(
213
- Link,
212
+ "a",
214
213
  {
215
214
  href,
216
215
  title: isCollapsed ? label : void 0,
@@ -240,7 +239,7 @@ function Sidebar({
240
239
  ] }),
241
240
  /* @__PURE__ */ jsxs("div", { className: "p-1", children: [
242
241
  /* @__PURE__ */ jsxs(
243
- Link,
242
+ "a",
244
243
  {
245
244
  href: profileHref,
246
245
  onClick: () => setIsUserMenuOpen(false),
@@ -252,7 +251,7 @@ function Sidebar({
252
251
  }
253
252
  ),
254
253
  /* @__PURE__ */ jsxs(
255
- Link,
254
+ "a",
256
255
  {
257
256
  href: settingsHref,
258
257
  onClick: () => setIsUserMenuOpen(false),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Hello.tsx","../src/utils/authApi.ts","../src/components/Sidebar.tsx"],"names":["jsx"],"mappings":"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","file":"index.js","sourcesContent":["export function Hello() {\n return <div>Hello world</div>;\n}\n","const DEFAULT_AUTH_HOST = (() => {\n if (typeof process !== \"undefined\" && process.env?.NEXT_PUBLIC_AUTH_API_HOST) {\n const envHost = process.env.NEXT_PUBLIC_AUTH_API_HOST.trim();\n if (envHost.length > 0) return envHost;\n }\n return \"https://auth.create-flow.ai\";\n})();\n\nconst DEFAULT_APP_ID =\n typeof process !== \"undefined\"\n ? process.env?.NEXT_PUBLIC_AUTH_APP_ID?.trim() ?? \"\"\n : \"\";\n\nfunction normalizeHost(host?: string) {\n const value = (host ?? DEFAULT_AUTH_HOST).trim();\n if (!value) throw new Error(\"Auth host is not configured\");\n if (/^https?:\\/\\//i.test(value)) return value.replace(/\\/+$/g, \"\");\n return `https://${value}`.replace(/\\/+$/g, \"\");\n}\n\nfunction buildAuthUrl(\n path: string,\n host?: string,\n query?: Record<string, string | undefined>\n) {\n const normalizedHost = normalizeHost(host);\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n const url = new URL(normalizedPath, normalizedHost);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, value);\n }\n }\n }\n\n return url;\n}\n\nasync function fetchWithCredentials(url: URL, init: RequestInit = {}) {\n const response = await fetch(url.toString(), {\n credentials: \"include\",\n cache: \"no-store\",\n ...init,\n });\n let data: any = null;\n try {\n data = await response.json();\n } catch {\n // Ignore JSON parse errors\n }\n return { response, data };\n}\n\nexport async function getAuthJson(\n path: string,\n host?: string,\n query?: Record<string, string | undefined>\n) {\n const url = buildAuthUrl(path, host, query);\n return fetchWithCredentials(url, { method: \"GET\" });\n}\n\nexport function getResolvedAppId(appId?: string) {\n return (appId ?? DEFAULT_APP_ID).trim();\n}\n","\"use client\";\n\nimport { useState, useRef, useEffect, type ComponentType } from \"react\";\nimport Link from \"next/link\";\nimport { usePathname, useRouter } from \"next/navigation\";\n\nimport { getResolvedAppId, getAuthJson } from \"../utils/authApi\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type UserType = \"guest\" | \"regular\";\n\nexport interface AuthUser {\n id: string;\n name?: string | null;\n email?: string | null;\n image?: string | null;\n type: UserType;\n appId: string;\n isGuest: boolean;\n}\n\nexport interface NavItem {\n href: string;\n label: string;\n icon: ComponentType<{ className?: string }>;\n exact?: boolean;\n}\n\nexport interface SidebarProps {\n user?: AuthUser;\n appId?: string;\n authHost?: string;\n navItems?: NavItem[];\n title?: string;\n logoutRedirectTo?: string;\n profileHref?: string;\n settingsHref?: string;\n onLogout?: () => void;\n}\n\n// ── Icons ─────────────────────────────────────────────────────────────────────\n\nfunction HomeIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\n <path d=\"M9 22V12h6v10\" />\n </svg>\n );\n}\n\nfunction FolderIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 19a2 2 0 01-2 2H4a2 2 0 01-2-2V5a2 2 0 012-2h5l2 3h9a2 2 0 012 2z\" />\n </svg>\n );\n}\n\nfunction UserIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 20c0-4 3.6-7 8-7s8 3 8 7\" />\n </svg>\n );\n}\n\nfunction SettingsIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z\" />\n </svg>\n );\n}\n\nfunction LogOutIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\" />\n <polyline points=\"16,17 21,12 16,7\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n </svg>\n );\n}\n\nfunction ChevronLeftIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n );\n}\n\nfunction ChevronsUpDownIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7 15l5 5 5-5M7 9l5-5 5 5\" />\n </svg>\n );\n}\n\n// ── Default nav items ─────────────────────────────────────────────────────────\n\nconst defaultNavItems: NavItem[] = [\n { href: \"/dashboard\", label: \"Dashboard\", icon: HomeIcon, exact: true },\n { href: \"/dashboard/projects\", label: \"Projects\", icon: FolderIcon, exact: false },\n { href: \"/dashboard/settings\", label: \"Settings\", icon: SettingsIcon, exact: false },\n];\n\n// ── Avatar ────────────────────────────────────────────────────────────────────\n\nconst AVATAR_COLORS = [\n \"bg-violet-600\",\n \"bg-indigo-600\",\n \"bg-sky-600\",\n \"bg-emerald-600\",\n \"bg-amber-600\",\n \"bg-rose-600\",\n];\n\nfunction getAvatarColor(name: string): string {\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = name.charCodeAt(i) + ((hash << 5) - hash);\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .filter(Boolean)\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n}\n\n// ── Sidebar ───────────────────────────────────────────────────────────────────\n\nexport function Sidebar({\n user: userProp,\n appId,\n authHost,\n navItems = defaultNavItems,\n title = \"Workspace\",\n logoutRedirectTo = \"/\",\n profileHref = \"/profile\",\n settingsHref = \"/settings\",\n onLogout,\n}: SidebarProps) {\n const [isCollapsed, setIsCollapsed] = useState(false);\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const [fetchedUser, setFetchedUser] = useState<AuthUser | null>(null);\n const [isLoading, setIsLoading] = useState(!userProp);\n const pathname = usePathname();\n const router = useRouter();\n const menuRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (userProp) return;\n\n let cancelled = false;\n\n async function fetchSession() {\n try {\n const { response, data } = await getAuthJson(\"api/auth/session\", authHost);\n if (!cancelled && response.ok && data?.user) {\n setFetchedUser(data.user);\n }\n } catch (err) {\n console.error(\"Failed to fetch session:\", err);\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n }\n\n fetchSession();\n return () => { cancelled = true; };\n }, [authHost, userProp]);\n\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setIsUserMenuOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const user = userProp || fetchedUser;\n\n if (isLoading || !user) return null;\n\n const displayName = user.name || user.email?.split(\"@\")[0] || \"User\";\n const initials = getInitials(displayName);\n const avatarColor = getAvatarColor(displayName);\n\n function isActive(href: string, exact: boolean) {\n return exact ? pathname === href : pathname.startsWith(href);\n }\n\n async function handleLogout() {\n const resolvedAppId = getResolvedAppId(appId);\n\n try {\n await getAuthJson(\"api/auth/logout\", authHost, resolvedAppId ? { appId: resolvedAppId } : undefined);\n } catch (err) {\n console.error(\"Logout error:\", err);\n }\n\n if (onLogout) {\n onLogout();\n } else {\n router.push(logoutRedirectTo);\n router.refresh();\n }\n }\n\n return (\n <aside\n className={\n \"relative flex flex-col h-screen bg-white border-r border-zinc-200 transition-all duration-200 ease-in-out flex-shrink-0 \" +\n (isCollapsed ? \"w-[60px]\" : \"w-[220px]\")\n }\n >\n {/* ── Header ─────────────────────────────────────────────────────────── */}\n <div\n className={\n \"flex items-center h-14 px-3 flex-shrink-0 border-b border-zinc-200 \" +\n (isCollapsed ? \"justify-center\" : \"justify-between\")\n }\n >\n {!isCollapsed && (\n <span className=\"text-sm font-semibold text-zinc-900 tracking-tight truncate select-none\">\n {title}\n </span>\n )}\n <button\n onClick={() => setIsCollapsed((c) => !c)}\n title={isCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className=\"p-1.5 rounded-md text-zinc-400 hover:text-zinc-700 hover:bg-zinc-100 transition-colors flex-shrink-0\"\n >\n {isCollapsed ? (\n <ChevronRightIcon className=\"w-4 h-4\" />\n ) : (\n <ChevronLeftIcon className=\"w-4 h-4\" />\n )}\n </button>\n </div>\n\n {/* ── Nav ────────────────────────────────────────────────────────────── */}\n <nav className=\"flex-1 overflow-y-auto py-2 px-2 space-y-0.5\">\n {navItems.map(({ href, label, icon: Icon, exact }) => {\n const active = isActive(href, exact ?? false);\n return (\n <Link\n key={href}\n href={href}\n title={isCollapsed ? label : undefined}\n className={\n \"flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-sm transition-colors \" +\n (isCollapsed ? \"justify-center \" : \"\") +\n (active\n ? \"bg-zinc-100 text-zinc-900 font-medium\"\n : \"text-zinc-500 hover:bg-zinc-50 hover:text-zinc-900\")\n }\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n {!isCollapsed && <span className=\"truncate\">{label}</span>}\n </Link>\n );\n })}\n </nav>\n\n {/* ── User area ──────────────────────────────────────────────────────── */}\n <div\n ref={menuRef}\n className=\"relative flex-shrink-0 p-2 border-t border-zinc-200\"\n >\n {/* Dropdown menu */}\n {isUserMenuOpen && (\n <div\n className={\n \"absolute bottom-full mb-1 z-50 bg-white border border-zinc-200 rounded-xl shadow-lg shadow-zinc-200/50 overflow-hidden \" +\n (isCollapsed ? \"left-full ml-2 w-52\" : \"left-2 right-2\")\n }\n >\n {/* User info */}\n <div className=\"px-3.5 py-3 border-b border-zinc-100\">\n <p className=\"text-sm font-medium text-zinc-900 truncate\">\n {displayName}\n </p>\n {user.email && (\n <p className=\"text-xs text-zinc-500 truncate mt-0.5\">\n {user.email}\n </p>\n )}\n </div>\n {/* Menu items */}\n <div className=\"p-1\">\n <Link\n href={profileHref}\n onClick={() => setIsUserMenuOpen(false)}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors\"\n >\n <UserIcon className=\"w-4 h-4 text-zinc-400\" />\n Profile\n </Link>\n <Link\n href={settingsHref}\n onClick={() => setIsUserMenuOpen(false)}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors\"\n >\n <SettingsIcon className=\"w-4 h-4 text-zinc-400\" />\n Settings\n </Link>\n <button\n onClick={handleLogout}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors text-left\"\n >\n <LogOutIcon className=\"w-4 h-4 text-zinc-400\" />\n Log out\n </button>\n </div>\n </div>\n )}\n\n {/* User trigger button */}\n <button\n onClick={() => setIsUserMenuOpen((o) => !o)}\n title={isCollapsed ? displayName : undefined}\n className={\n \"w-full flex items-center gap-2.5 p-2 rounded-lg hover:bg-zinc-50 transition-colors text-left \" +\n (isCollapsed ? \"justify-center\" : \"\")\n }\n >\n <div\n className={\"w-7 h-7 rounded-full flex items-center justify-center flex-shrink-0 \" + avatarColor}\n >\n <span className=\"text-xs font-semibold text-white leading-none\">\n {initials}\n </span>\n </div>\n {!isCollapsed && (\n <>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-zinc-900 truncate leading-tight\">\n {displayName}\n </p>\n </div>\n <ChevronsUpDownIcon className=\"w-3.5 h-3.5 text-zinc-400 flex-shrink-0\" />\n </>\n )}\n </button>\n </div>\n </aside>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Hello.tsx","../src/utils/authApi.ts","../src/components/Sidebar.tsx"],"names":["jsx"],"mappings":"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","file":"index.js","sourcesContent":["export function Hello() {\n return <div>Hello world</div>;\n}\n","const DEFAULT_AUTH_HOST = (() => {\n if (typeof process !== \"undefined\" && process.env?.NEXT_PUBLIC_AUTH_API_HOST) {\n const envHost = process.env.NEXT_PUBLIC_AUTH_API_HOST.trim();\n if (envHost.length > 0) return envHost;\n }\n return \"https://auth.create-flow.ai\";\n})();\n\nconst DEFAULT_APP_ID =\n typeof process !== \"undefined\"\n ? process.env?.NEXT_PUBLIC_AUTH_APP_ID?.trim() ?? \"\"\n : \"\";\n\nfunction normalizeHost(host?: string) {\n const value = (host ?? DEFAULT_AUTH_HOST).trim();\n if (!value) throw new Error(\"Auth host is not configured\");\n if (/^https?:\\/\\//i.test(value)) return value.replace(/\\/+$/g, \"\");\n return `https://${value}`.replace(/\\/+$/g, \"\");\n}\n\nfunction buildAuthUrl(\n path: string,\n host?: string,\n query?: Record<string, string | undefined>\n) {\n const normalizedHost = normalizeHost(host);\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n const url = new URL(normalizedPath, normalizedHost);\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, value);\n }\n }\n }\n\n return url;\n}\n\nasync function fetchWithCredentials(url: URL, init: RequestInit = {}) {\n const response = await fetch(url.toString(), {\n credentials: \"include\",\n cache: \"no-store\",\n ...init,\n });\n let data: any = null;\n try {\n data = await response.json();\n } catch {\n // Ignore JSON parse errors\n }\n return { response, data };\n}\n\nexport async function getAuthJson(\n path: string,\n host?: string,\n query?: Record<string, string | undefined>\n) {\n const url = buildAuthUrl(path, host, query);\n return fetchWithCredentials(url, { method: \"GET\" });\n}\n\nexport function getResolvedAppId(appId?: string) {\n return (appId ?? DEFAULT_APP_ID).trim();\n}\n","\"use client\";\n\nimport { useState, useRef, useEffect, useCallback, type ComponentType } from \"react\";\n\nimport { getResolvedAppId, getAuthJson } from \"../utils/authApi\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type UserType = \"guest\" | \"regular\";\n\nexport interface AuthUser {\n id: string;\n name?: string | null;\n email?: string | null;\n image?: string | null;\n type: UserType;\n appId: string;\n isGuest: boolean;\n}\n\nexport interface NavItem {\n href: string;\n label: string;\n icon: ComponentType<{ className?: string }>;\n exact?: boolean;\n}\n\nexport interface SidebarProps {\n user?: AuthUser;\n appId?: string;\n authHost?: string;\n navItems?: NavItem[];\n title?: string;\n logoutRedirectTo?: string;\n profileHref?: string;\n settingsHref?: string;\n onLogout?: () => void;\n}\n\n// ── Icons ─────────────────────────────────────────────────────────────────────\n\nfunction HomeIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\n <path d=\"M9 22V12h6v10\" />\n </svg>\n );\n}\n\nfunction FolderIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 19a2 2 0 01-2 2H4a2 2 0 01-2-2V5a2 2 0 012-2h5l2 3h9a2 2 0 012 2z\" />\n </svg>\n );\n}\n\nfunction UserIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 20c0-4 3.6-7 8-7s8 3 8 7\" />\n </svg>\n );\n}\n\nfunction SettingsIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z\" />\n </svg>\n );\n}\n\nfunction LogOutIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\" />\n <polyline points=\"16,17 21,12 16,7\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n </svg>\n );\n}\n\nfunction ChevronLeftIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n );\n}\n\nfunction ChevronsUpDownIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7 15l5 5 5-5M7 9l5-5 5 5\" />\n </svg>\n );\n}\n\n// ── Default nav items ─────────────────────────────────────────────────────────\n\nconst defaultNavItems: NavItem[] = [\n { href: \"/dashboard\", label: \"Dashboard\", icon: HomeIcon, exact: true },\n { href: \"/dashboard/projects\", label: \"Projects\", icon: FolderIcon, exact: false },\n { href: \"/dashboard/settings\", label: \"Settings\", icon: SettingsIcon, exact: false },\n];\n\n// ── Avatar ────────────────────────────────────────────────────────────────────\n\nconst AVATAR_COLORS = [\n \"bg-violet-600\",\n \"bg-indigo-600\",\n \"bg-sky-600\",\n \"bg-emerald-600\",\n \"bg-amber-600\",\n \"bg-rose-600\",\n];\n\nfunction getAvatarColor(name: string): string {\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = name.charCodeAt(i) + ((hash << 5) - hash);\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .filter(Boolean)\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n}\n\n// ── Sidebar ───────────────────────────────────────────────────────────────────\n\nexport function Sidebar({\n user: userProp,\n appId,\n authHost,\n navItems = defaultNavItems,\n title = \"Workspace\",\n logoutRedirectTo = \"/\",\n profileHref = \"/profile\",\n settingsHref = \"/settings\",\n onLogout,\n}: SidebarProps) {\n const [isCollapsed, setIsCollapsed] = useState(false);\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const [fetchedUser, setFetchedUser] = useState<AuthUser | null>(null);\n const [isLoading, setIsLoading] = useState(!userProp);\n const [pathname, setPathname] = useState(typeof window !== \"undefined\" ? window.location.pathname : \"/\");\n const menuRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setPathname(window.location.pathname);\n }, []);\n\n useEffect(() => {\n if (userProp) return;\n\n let cancelled = false;\n\n async function fetchSession() {\n try {\n const { response, data } = await getAuthJson(\"api/auth/session\", authHost);\n if (!cancelled && response.ok && data?.user) {\n setFetchedUser(data.user);\n }\n } catch (err) {\n console.error(\"Failed to fetch session:\", err);\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n }\n\n fetchSession();\n return () => { cancelled = true; };\n }, [authHost, userProp]);\n\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setIsUserMenuOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const user = userProp || fetchedUser;\n\n if (isLoading || !user) return null;\n\n const displayName = user.name || user.email?.split(\"@\")[0] || \"User\";\n const initials = getInitials(displayName);\n const avatarColor = getAvatarColor(displayName);\n\n function isActive(href: string, exact: boolean) {\n return exact ? pathname === href : pathname.startsWith(href);\n }\n\n async function handleLogout() {\n const resolvedAppId = getResolvedAppId(appId);\n\n try {\n await getAuthJson(\"api/auth/logout\", authHost, resolvedAppId ? { appId: resolvedAppId } : undefined);\n } catch (err) {\n console.error(\"Logout error:\", err);\n }\n\n if (onLogout) {\n onLogout();\n } else {\n window.location.href = logoutRedirectTo;\n }\n }\n\n return (\n <aside\n className={\n \"relative flex flex-col h-screen bg-white border-r border-zinc-200 transition-all duration-200 ease-in-out flex-shrink-0 \" +\n (isCollapsed ? \"w-[60px]\" : \"w-[220px]\")\n }\n >\n {/* ── Header ─────────────────────────────────────────────────────────── */}\n <div\n className={\n \"flex items-center h-14 px-3 flex-shrink-0 border-b border-zinc-200 \" +\n (isCollapsed ? \"justify-center\" : \"justify-between\")\n }\n >\n {!isCollapsed && (\n <span className=\"text-sm font-semibold text-zinc-900 tracking-tight truncate select-none\">\n {title}\n </span>\n )}\n <button\n onClick={() => setIsCollapsed((c) => !c)}\n title={isCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className=\"p-1.5 rounded-md text-zinc-400 hover:text-zinc-700 hover:bg-zinc-100 transition-colors flex-shrink-0\"\n >\n {isCollapsed ? (\n <ChevronRightIcon className=\"w-4 h-4\" />\n ) : (\n <ChevronLeftIcon className=\"w-4 h-4\" />\n )}\n </button>\n </div>\n\n {/* ── Nav ────────────────────────────────────────────────────────────── */}\n <nav className=\"flex-1 overflow-y-auto py-2 px-2 space-y-0.5\">\n {navItems.map(({ href, label, icon: Icon, exact }) => {\n const active = isActive(href, exact ?? false);\n return (\n <a\n key={href}\n href={href}\n title={isCollapsed ? label : undefined}\n className={\n \"flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-sm transition-colors \" +\n (isCollapsed ? \"justify-center \" : \"\") +\n (active\n ? \"bg-zinc-100 text-zinc-900 font-medium\"\n : \"text-zinc-500 hover:bg-zinc-50 hover:text-zinc-900\")\n }\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n {!isCollapsed && <span className=\"truncate\">{label}</span>}\n </a>\n );\n })}\n </nav>\n\n {/* ── User area ──────────────────────────────────────────────────────── */}\n <div\n ref={menuRef}\n className=\"relative flex-shrink-0 p-2 border-t border-zinc-200\"\n >\n {/* Dropdown menu */}\n {isUserMenuOpen && (\n <div\n className={\n \"absolute bottom-full mb-1 z-50 bg-white border border-zinc-200 rounded-xl shadow-lg shadow-zinc-200/50 overflow-hidden \" +\n (isCollapsed ? \"left-full ml-2 w-52\" : \"left-2 right-2\")\n }\n >\n {/* User info */}\n <div className=\"px-3.5 py-3 border-b border-zinc-100\">\n <p className=\"text-sm font-medium text-zinc-900 truncate\">\n {displayName}\n </p>\n {user.email && (\n <p className=\"text-xs text-zinc-500 truncate mt-0.5\">\n {user.email}\n </p>\n )}\n </div>\n {/* Menu items */}\n <div className=\"p-1\">\n <a\n href={profileHref}\n onClick={() => setIsUserMenuOpen(false)}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors\"\n >\n <UserIcon className=\"w-4 h-4 text-zinc-400\" />\n Profile\n </a>\n <a\n href={settingsHref}\n onClick={() => setIsUserMenuOpen(false)}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors\"\n >\n <SettingsIcon className=\"w-4 h-4 text-zinc-400\" />\n Settings\n </a>\n <button\n onClick={handleLogout}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-sm text-zinc-700 hover:bg-zinc-50 rounded-lg transition-colors text-left\"\n >\n <LogOutIcon className=\"w-4 h-4 text-zinc-400\" />\n Log out\n </button>\n </div>\n </div>\n )}\n\n {/* User trigger button */}\n <button\n onClick={() => setIsUserMenuOpen((o) => !o)}\n title={isCollapsed ? displayName : undefined}\n className={\n \"w-full flex items-center gap-2.5 p-2 rounded-lg hover:bg-zinc-50 transition-colors text-left \" +\n (isCollapsed ? \"justify-center\" : \"\")\n }\n >\n <div\n className={\"w-7 h-7 rounded-full flex items-center justify-center flex-shrink-0 \" + avatarColor}\n >\n <span className=\"text-xs font-semibold text-white leading-none\">\n {initials}\n </span>\n </div>\n {!isCollapsed && (\n <>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-zinc-900 truncate leading-tight\">\n {displayName}\n </p>\n </div>\n <ChevronsUpDownIcon className=\"w-3.5 h-3.5 text-zinc-400 flex-shrink-0\" />\n </>\n )}\n </button>\n </div>\n </aside>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@create-flow/common-ui",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "Shared UI components for Flow apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -11,7 +11,8 @@
11
11
  "types": "./dist/index.d.ts",
12
12
  "import": "./dist/index.js",
13
13
  "require": "./dist/index.cjs"
14
- }
14
+ },
15
+ "./styles": "./dist/index.css"
15
16
  },
16
17
  "files": [
17
18
  "dist"
@@ -21,7 +22,8 @@
21
22
  },
22
23
  "sideEffects": false,
23
24
  "scripts": {
24
- "build": "tsup",
25
+ "build": "tsup && bun run build:css",
26
+ "build:css": "tailwindcss -i ./src/index.css -o ./dist/index.css --minify",
25
27
  "lint": "eslint src",
26
28
  "prepublishOnly": "bun run build",
27
29
  "publish:dry": "npm pack --dry-run",
@@ -33,7 +35,6 @@
33
35
  "publish:major": "bun run version:major && bun publish"
34
36
  },
35
37
  "peerDependencies": {
36
- "next": ">=14",
37
38
  "react": ">=18",
38
39
  "react-dom": ">=18"
39
40
  },
@@ -45,6 +46,7 @@
45
46
  "typescript-eslint": "^8",
46
47
  "react": "19.2.3",
47
48
  "react-dom": "19.2.3",
49
+ "tailwindcss": "^3.3.5",
48
50
  "tsup": "^8",
49
51
  "typescript": "^5"
50
52
  }