+
setText(event.currentTarget.value)}
value={text}
/>
-
+
{understood && (
diff --git a/app/frontend/src/components/SearchPalette.tsx b/app/frontend/src/components/SearchPalette.tsx
index 9017ddb..cc8ce16 100644
--- a/app/frontend/src/components/SearchPalette.tsx
+++ b/app/frontend/src/components/SearchPalette.tsx
@@ -2,7 +2,7 @@ import { useEffect, useState } from 'react';
import { useNavigate } from 'react-router';
import { CommandPalette, errorMessage, isAbortError, type CommandItem } from '@project-graphite/ui';
import { isAdmin, useAuth } from '../auth';
-import { enabledFeatures } from '../features';
+import { enabledApps } from '../apps';
import { searchableAreas } from '../navigation';
import { itemHref, itemKindName, useSpaces, type Tag } from '../spaces';
import { useAction } from '../useAction';
@@ -78,7 +78,7 @@ export function SearchPalette({ onClose }: { onClose: () => void }) {
...(spaces.data ?? [])
.filter((space) => matches(space.name))
.map((space) => ({ group: 'Spaces', href: `/spaces/${space.id}`, id: `space-${space.id}`, label: space.name })),
- ...searchableAreas(enabledFeatures(user?.features), isAdmin(user))
+ ...searchableAreas(enabledApps(user?.features), isAdmin(user))
.filter((area) => matches(area.label) || (area.hint && matches(area.hint)))
.map((area) => ({ group: 'Go to', hint: area.hint, href: area.href, id: `page-${area.href}`, label: area.label })),
];
diff --git a/app/frontend/src/components/Shell.tsx b/app/frontend/src/components/Shell.tsx
index f16b8c6..06e42f5 100644
--- a/app/frontend/src/components/Shell.tsx
+++ b/app/frontend/src/components/Shell.tsx
@@ -14,7 +14,7 @@ import { onOutage } from '../api';
import { watchChanges } from '../changes';
import { useAuth } from '../auth';
import { InboxContext } from '../inbox';
-import { enabledFeatures } from '../features';
+import { enabledApps } from '../apps';
import { AreaContext, areaOf, phoneTabBar, sidebarSections } from '../navigation';
import { SpacesContext, type Space } from '../spaces';
import { useAction } from '../useAction';
@@ -76,6 +76,7 @@ function ShellFrame({ inbox, spaces }: { inbox: Resource<{ unread: number }>; sp
const areaContext = useMemo(() => ({ setArea }), []);
const active = areaOverride ?? areaOf(pathname);
const signedIn = Boolean(auth.user);
+ const apps = enabledApps(auth.user?.features);
const openSearch = useCallback(() => signedIn && setSearching(true), [signedIn]);
useCommandShortcut(openSearch);
@@ -126,13 +127,13 @@ function ShellFrame({ inbox, spaces }: { inbox: Resource<{ unread: number }>; sp
footer={auth.user && }
label="Areas"
loading={!auth.user || spaces.loading}
- sections={sidebarSections(active, spaces.data, enabledFeatures(auth.user?.features))}
+ sections={sidebarSections(active, spaces.data, apps)}
/>
)
}
tabs={
auth.user
- ? phoneTabBar(active)
+ ? phoneTabBar(active, apps)
: [
{ href: '/', label: 'Home', icon: 'home', active: pathname === '/' },
{ href: '/login', label: 'Sign in', icon: 'user', active: pathname === '/login', loading: !auth.ready },
diff --git a/app/frontend/src/components/SpendingFrame.tsx b/app/frontend/src/components/SpendingFrame.tsx
index 688a30f..d1447a8 100644
--- a/app/frontend/src/components/SpendingFrame.tsx
+++ b/app/frontend/src/components/SpendingFrame.tsx
@@ -69,7 +69,7 @@ export function SpendingFrame({
]}
name="spending"
/>
- {editable &&