@kelpie/ui 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/KelpieApp.d.ts.map +1 -1
- package/dist/app/KelpieApp.js +16 -1
- package/dist/app/KelpieApp.js.map +1 -1
- package/dist/components/Shell.d.ts.map +1 -1
- package/dist/components/Shell.js +3 -16
- package/dist/components/Shell.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/pages/account/AccountLayout.d.ts.map +1 -1
- package/dist/pages/account/AccountLayout.js +15 -7
- package/dist/pages/account/AccountLayout.js.map +1 -1
- package/dist/registry/context.d.ts +1 -2
- package/dist/registry/context.d.ts.map +1 -1
- package/dist/registry/context.js +0 -3
- package/dist/registry/context.js.map +1 -1
- package/dist/registry/contributions.d.ts +1 -12
- package/dist/registry/contributions.d.ts.map +1 -1
- package/dist/registry/contributions.js +0 -7
- package/dist/registry/contributions.js.map +1 -1
- package/dist/registry/registry.d.ts +1 -3
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +0 -6
- package/dist/registry/registry.js.map +1 -1
- package/dist/registry/visibleNav.d.ts +3 -0
- package/dist/registry/visibleNav.d.ts.map +1 -0
- package/dist/registry/visibleNav.js +27 -0
- package/dist/registry/visibleNav.js.map +1 -0
- package/package.json +2 -2
- package/src/app/KelpieApp.tsx +26 -1
- package/src/components/Shell.tsx +3 -22
- package/src/index.ts +1 -4
- package/src/pages/account/AccountLayout.tsx +20 -9
- package/src/registry/context.ts +0 -5
- package/src/registry/contributions.ts +1 -20
- package/src/registry/registry.ts +0 -11
- package/src/registry/visibleNav.ts +38 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KelpieApp.d.ts","sourceRoot":"","sources":["../../src/app/KelpieApp.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KelpieApp.d.ts","sourceRoot":"","sources":["../../src/app/KelpieApp.tsx"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAG3D;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAA;IACjC,wEAAwE;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,wBAAgB,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAUpF"}
|
package/dist/app/KelpieApp.js
CHANGED
|
@@ -52,8 +52,23 @@ import { SessionGate } from './SessionGate.js';
|
|
|
52
52
|
export function KelpieApp({ extensions, baseUrl }) {
|
|
53
53
|
return (_jsx(ApiProvider, { baseUrl: baseUrl, children: _jsx(UiExtensionProvider, { extensions: extensions, children: _jsx(BrowserRouter, { children: _jsx(AppRoutes, {}) }) }) }));
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* A module route under `account/` renders inside `AccountLayout`, everything
|
|
57
|
+
* else directly under the shell.
|
|
58
|
+
*
|
|
59
|
+
* The prefix is the whole rule, and it is what makes `nav.account` mean
|
|
60
|
+
* anything: a module contributing a tab there needs its page to keep the tab
|
|
61
|
+
* strip, and a route mounted as a sibling of `account` would lose it the moment
|
|
62
|
+
* the tab was clicked. Core's own account pages are nested for the same reason.
|
|
63
|
+
*/
|
|
64
|
+
const ACCOUNT_PREFIX = 'account/';
|
|
65
|
+
function isAccountRoute(route) {
|
|
66
|
+
return route.path.startsWith(ACCOUNT_PREFIX);
|
|
67
|
+
}
|
|
55
68
|
function AppRoutes() {
|
|
56
69
|
const moduleRoutes = useModuleRoutes();
|
|
57
|
-
|
|
70
|
+
const accountRoutes = moduleRoutes.filter(isAccountRoute);
|
|
71
|
+
const shellRoutes = moduleRoutes.filter((route) => !isAccountRoute(route));
|
|
72
|
+
return (_jsxs(Routes, { children: [_jsx(Route, { path: "/login", element: _jsx(SignInPage, {}) }), _jsx(Route, { path: "/signup", element: _jsx(SignUpPage, {}) }), _jsx(Route, { path: "/forgot-password", element: _jsx(ForgotPasswordPage, {}) }), _jsx(Route, { path: "/reset-password", element: _jsx(ResetPasswordPage, {}) }), _jsx(Route, { path: "/join", element: _jsx(JoinPage, {}) }), _jsx(Route, { path: "/onboarding/workspace", element: _jsx(WorkspaceStepPage, {}) }), _jsxs(Route, { element: _jsx(SessionGate, {}), children: [_jsx(Route, { path: "/onboarding/invites", element: _jsx(InvitesStepPage, {}) }), _jsx(Route, { path: "/onboarding/handbook", element: _jsx(HandbookStepPage, {}) }), _jsxs(Route, { element: _jsx(Shell, {}), children: [_jsx(Route, { index: true, element: _jsx(Navigate, { to: "/dashboard", replace: true }) }), _jsx(Route, { path: "dashboard", element: _jsx(DashboardPage, {}) }), _jsx(Route, { path: "search", element: _jsx(SearchPage, {}) }), _jsx(Route, { path: "people", element: _jsx(PeoplePage, {}) }), _jsx(Route, { path: "people/:id", element: _jsx(PersonDetail, {}) }), _jsx(Route, { path: "hiring", element: _jsx(HiringPage, {}) }), _jsx(Route, { path: "hiring/:id", element: _jsx(RoleDetail, {}) }), _jsx(Route, { path: "companies", element: _jsx(CompaniesPage, {}) }), _jsx(Route, { path: "companies/:id", element: _jsx(CompanyDetail, {}) }), _jsx(Route, { path: "deals", element: _jsx(DealsPage, {}) }), _jsx(Route, { path: "deals/settings", element: _jsx(DealStageSettingsPage, {}) }), _jsx(Route, { path: "deals/:id", element: _jsx(DealDetail, {}) }), _jsx(Route, { path: "opportunities", element: _jsx(OpportunitiesPage, {}) }), _jsx(Route, { path: "opportunities/settings", element: _jsx(OpportunityStageSettingsPage, {}) }), _jsx(Route, { path: "opportunities/:id", element: _jsx(OpportunityDetail, {}) }), _jsx(Route, { path: "fundraising", element: _jsx(FundraisingPage, {}) }), _jsx(Route, { path: "fundraising/settings", element: _jsx(RaiseStageSettingsPage, {}) }), _jsx(Route, { path: "fundraising/:id", element: _jsx(RaiseDetail, {}) }), _jsx(Route, { path: "partnerships", element: _jsx(PartnershipsPage, {}) }), _jsx(Route, { path: "partnerships/settings", element: _jsx(PartnershipStageSettingsPage, {}) }), _jsx(Route, { path: "partnerships/:id", element: _jsx(PartnershipDetail, {}) }), _jsx(Route, { path: "planning", element: _jsx(PlanningPage, {}) }), _jsx(Route, { path: "decisions", element: _jsx(DecisionsPage, {}) }), _jsx(Route, { path: "forms", element: _jsx(FormsPage, {}) }), _jsx(Route, { path: "forms/:id", element: _jsx(FormDetail, {}) }), _jsx(Route, { path: "handbook", element: _jsx(HandbookLayout, {}) }), _jsx(Route, { path: "handbook/:pageId", element: _jsx(HandbookLayout, {}) }), _jsx(Route, { path: "admin/workspace", element: _jsx(WorkspaceSettingsPage, {}) }), _jsx(Route, { path: "admin/team", element: _jsx(TeamPage, {}) }), _jsx(Route, { path: "admin/data", element: _jsx(DataPage, {}) }), _jsx(Route, { path: "admin/mcp", element: _jsx(McpPage, {}) }), _jsx(Route, { path: "admin/webhooks", element: _jsx(WebhooksPage, {}) }), _jsx(Route, { path: "admin/modules", element: _jsx(ModulesPage, {}) }), _jsxs(Route, { path: "account", element: _jsx(AccountLayout, {}), children: [_jsx(Route, { index: true, element: _jsx(Navigate, { to: "/account/profile", replace: true }) }), _jsx(Route, { path: "profile", element: _jsx(ProfilePage, {}) }), _jsx(Route, { path: "security", element: _jsx(SecurityPage, {}) }), _jsx(Route, { path: "preferences", element: _jsx(PreferencesPage, {}) }), accountRoutes.map((route) => (_jsx(Route, { path: route.path.slice(ACCOUNT_PREFIX.length), element: route.element }, route.path)))] }), shellRoutes.map((route) => (_jsx(Route, { path: route.path, element: route.element }, route.path))), _jsx(Route, { path: "*", element: _jsx(NotFoundPage, {}) })] })] })] }));
|
|
58
73
|
}
|
|
59
74
|
//# sourceMappingURL=KelpieApp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KelpieApp.js","sourceRoot":"","sources":["../../src/app/KelpieApp.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"KelpieApp.js","sourceRoot":"","sources":["../../src/app/KelpieApp.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shell.d.ts","sourceRoot":"","sources":["../../src/components/Shell.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Shell.d.ts","sourceRoot":"","sources":["../../src/components/Shell.tsx"],"names":[],"mappings":"AAyEA,wBAAgB,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CA+MzC"}
|
package/dist/components/Shell.js
CHANGED
|
@@ -2,11 +2,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { NavLink, Outlet, useLocation, useNavigate } from 'react-router';
|
|
4
4
|
import { useAccount, useTheme } from '../api/resources/account.js';
|
|
5
|
-
import { useModuleSettings } from '../api/resources/moduleSettings.js';
|
|
6
5
|
import { useLogOut } from '../api/resources/session.js';
|
|
7
6
|
import { initialsOf } from '../lib/names.js';
|
|
8
7
|
import { useNavItems } from '../registry/context.js';
|
|
9
|
-
import {
|
|
8
|
+
import { useVisibleNavItems } from '../registry/visibleNav.js';
|
|
10
9
|
import { ErrorBoundary } from './ErrorBoundary.js';
|
|
11
10
|
/**
|
|
12
11
|
* Sidebar, header, and the outlet every page renders into.
|
|
@@ -45,15 +44,6 @@ const CORE_NAV = [
|
|
|
45
44
|
* presentation only, so it stays here rather than becoming a second slot.
|
|
46
45
|
*/
|
|
47
46
|
const TOP_LEVEL_NAV_IDS = new Set(['dashboard', 'handbook', 'planning', 'decisions']);
|
|
48
|
-
/**
|
|
49
|
-
* A nav item whose id does not match its module id. Everything else looks
|
|
50
|
-
* itself up directly, which is what keeps a toggleable module's own nav entry
|
|
51
|
-
* working with no change here when one is added later.
|
|
52
|
-
*/
|
|
53
|
-
const NAV_ID_TO_MODULE_ID = {
|
|
54
|
-
fundraising: 'raises',
|
|
55
|
-
data: 'import-export',
|
|
56
|
-
};
|
|
57
47
|
function linkClass({ isActive }) {
|
|
58
48
|
return [
|
|
59
49
|
'block rounded-md px-2 py-1 text-[13px] transition-colors duration-100',
|
|
@@ -79,9 +69,6 @@ export function Shell() {
|
|
|
79
69
|
const logOut = useLogOut();
|
|
80
70
|
const moduleNav = useNavItems('primary');
|
|
81
71
|
const moduleAdminNav = useNavItems('admin');
|
|
82
|
-
const { settings } = useModuleSettings();
|
|
83
|
-
const disabledModuleIds = new Set(settings.filter((setting) => !setting.enabled).map((setting) => setting.moduleId));
|
|
84
|
-
const isModuleHidden = (navId) => disabledModuleIds.has(NAV_ID_TO_MODULE_ID[navId] ?? navId);
|
|
85
72
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
86
73
|
// The same preference the account page writes, so this button and that page
|
|
87
74
|
// cannot disagree about which theme the account is on.
|
|
@@ -109,10 +96,10 @@ export function Shell() {
|
|
|
109
96
|
document.removeEventListener('keydown', onKeyDown);
|
|
110
97
|
};
|
|
111
98
|
}, [menuOpen]);
|
|
112
|
-
const navItems =
|
|
99
|
+
const navItems = useVisibleNavItems(CORE_NAV, moduleNav);
|
|
113
100
|
const topLevelItems = navItems.filter((item) => TOP_LEVEL_NAV_IDS.has(item.id));
|
|
114
101
|
const crmItems = navItems.filter((item) => !TOP_LEVEL_NAV_IDS.has(item.id));
|
|
115
|
-
const adminItems =
|
|
102
|
+
const adminItems = useVisibleNavItems(CORE_ADMIN_NAV, moduleAdminNav);
|
|
116
103
|
return (_jsxs("div", { className: "flex min-h-screen bg-surface", children: [_jsxs("aside", { className: "flex w-[200px] shrink-0 flex-col border-r border-sidebar-border bg-sidebar", children: [_jsx("div", { className: "px-3 py-4", children: _jsx(NavLink, { to: "/dashboard", className: "group block px-2", children: _jsx("div", { className: "text-[15px] font-semibold tracking-tight text-sidebar-ink transition-opacity group-hover:opacity-80", children: "Kelpie" }) }) }), _jsxs("nav", { className: "flex flex-1 flex-col gap-5 overflow-y-auto px-2 pb-4", children: [_jsx("div", { className: "flex flex-col gap-0.5", children: topLevelItems.map((item) => (_jsx(NavLink, { to: item.to, className: linkClass, children: item.label }, item.id))) }), _jsxs("div", { children: [_jsx("div", { className: "mb-1 px-2 text-[11px] text-sidebar-muted", children: "CRM" }), _jsx("div", { className: "flex flex-col gap-0.5", children: crmItems.map((item) => (_jsx(NavLink, { to: item.to, className: linkClass, children: item.label }, item.id))) })] }), _jsxs("div", { children: [_jsx("div", { className: "mb-1 px-2 text-[11px] text-sidebar-muted", children: "Admin" }), _jsx("div", { className: "flex flex-col gap-0.5", children: adminItems.map((item) => (_jsx(NavLink, { to: item.to, className: linkClass, children: item.label }, item.id))) })] })] })] }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsxs("header", { className: "flex h-11 items-center gap-3 border-b border-border px-5", children: [_jsx("form", { className: "flex-1", onSubmit: (event) => {
|
|
117
104
|
event.preventDefault();
|
|
118
105
|
const term = query.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shell.js","sourceRoot":"","sources":["../../src/components/Shell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAExE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Shell.js","sourceRoot":"","sources":["../../src/components/Shell.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -78,13 +78,13 @@ export { DUE_BUCKETS, addDays, byDateThenTitle, dueBucketFor, isOpen, monthBound
|
|
|
78
78
|
export type { DueBucketId, PlanAttention as PlanAttentionSummary } from './lib/plan.ts';
|
|
79
79
|
export { applyTheme, getStoredTheme, resolveTheme, setStoredTheme, watchSystemTheme } from './lib/theme.ts';
|
|
80
80
|
export type { ThemePreference } from './lib/theme.ts';
|
|
81
|
-
export { EXTENSIBLE_RECORD_TYPES,
|
|
82
|
-
export type { DashboardCard, ExtensibleRecordType,
|
|
81
|
+
export { EXTENSIBLE_RECORD_TYPES, NAV_SLOTS } from './registry/contributions.ts';
|
|
82
|
+
export type { DashboardCard, ExtensibleRecordType, NavItem, NavSlot, RecordContext, RecordSidebarCard, RecordTab, RouteContribution, } from './registry/contributions.ts';
|
|
83
83
|
export { defineOverridable } from './registry/overridable.ts';
|
|
84
84
|
export type { Overridable } from './registry/overridable.ts';
|
|
85
85
|
export { NO_UI_MODULES, UiModuleError, inSlotOrder, registerUiModules } from './registry/registry.ts';
|
|
86
86
|
export type { UiExtensions, UiModule, UiModuleContext } from './registry/registry.ts';
|
|
87
|
-
export { useDashboardCards,
|
|
87
|
+
export { useDashboardCards, useModuleRoutes, useNavItems, useOverridable, useRecordSidebarCards, useRecordTabs, useUiExtensions, } from './registry/context.ts';
|
|
88
88
|
export { UiExtensionProvider } from './registry/UiExtensionProvider.tsx';
|
|
89
89
|
export type { UiExtensionProviderProps } from './registry/UiExtensionProvider.tsx';
|
|
90
90
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -47,9 +47,9 @@ export { InvitesStepPage } from './pages/onboarding/InvitesStepPage.js';
|
|
|
47
47
|
export { WorkspaceStepPage } from './pages/onboarding/WorkspaceStepPage.js';
|
|
48
48
|
export { DUE_BUCKETS, addDays, byDateThenTitle, dueBucketFor, isOpen, monthBounds, nextOpenByTarget, nextOpenPlanItem, planAttention, planStatusTone, toIsoDay, todayIso, } from './lib/plan.js';
|
|
49
49
|
export { applyTheme, getStoredTheme, resolveTheme, setStoredTheme, watchSystemTheme } from './lib/theme.js';
|
|
50
|
-
export { EXTENSIBLE_RECORD_TYPES,
|
|
50
|
+
export { EXTENSIBLE_RECORD_TYPES, NAV_SLOTS } from './registry/contributions.js';
|
|
51
51
|
export { defineOverridable } from './registry/overridable.js';
|
|
52
52
|
export { NO_UI_MODULES, UiModuleError, inSlotOrder, registerUiModules } from './registry/registry.js';
|
|
53
|
-
export { useDashboardCards,
|
|
53
|
+
export { useDashboardCards, useModuleRoutes, useNavItems, useOverridable, useRecordSidebarCards, useRecordTabs, useUiExtensions, } from './registry/context.js';
|
|
54
54
|
export { UiExtensionProvider } from './registry/UiExtensionProvider.js';
|
|
55
55
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAqB,CAAA;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAuB,CAAA;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAWvD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EACL,eAAe,EACf,eAAe,EACf,SAAS,EACT,SAAS,EACT,eAAe,GAChB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,uBAAuB,EACvB,UAAU,EACV,SAAS,GACV,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAGpD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAuB,CAAA;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA4B,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAiC,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA+B,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA+B,CAAA;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AAExD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA8B,CAAA;AAE1D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,+BAAgC,CAAA;AAEpF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA4B,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA6B,CAAA;AAErF,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AAExD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,+BAAgC,CAAA;AAEzE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAwB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA+B,CAAA;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAsC,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA+B,CAAA;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA2B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA2B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA2B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAwB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAA0B,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAqC,CAAA;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA2B,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAoC,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAyC,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAwC,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAA0C,CAAA;AAE5E,OAAO,EACL,WAAW,EACX,OAAO,EACP,eAAe,EACf,YAAY,EACZ,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,QAAQ,EACR,QAAQ,GACT,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAG3G,OAAO,EAAE,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAqB,CAAA;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAuB,CAAA;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAWvD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EACL,eAAe,EACf,eAAe,EACf,SAAS,EACT,SAAS,EACT,eAAe,GAChB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,uBAAuB,EACvB,UAAU,EACV,SAAS,GACV,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAGpD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAuB,CAAA;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA4B,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAiC,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA+B,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA+B,CAAA;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AAExD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA8B,CAAA;AAE1D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,+BAAgC,CAAA;AAEpF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA4B,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA6B,CAAA;AAErF,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AAExD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,+BAAgC,CAAA;AAEzE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAwB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA+B,CAAA;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAsC,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA+B,CAAA;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA2B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA2B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA2B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAwB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAA0B,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAqC,CAAA;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA2B,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAoC,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA6B,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAyC,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAwC,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAA0C,CAAA;AAE5E,OAAO,EACL,WAAW,EACX,OAAO,EACP,eAAe,EACf,YAAY,EACZ,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,QAAQ,EACR,QAAQ,GACT,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAG3G,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAYhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAGrG,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAoC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountLayout.d.ts","sourceRoot":"","sources":["../../../src/pages/account/AccountLayout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AccountLayout.d.ts","sourceRoot":"","sources":["../../../src/pages/account/AccountLayout.tsx"],"names":[],"mappings":"AAiCA,wBAAgB,aAAa,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAejD"}
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { NavLink, Outlet } from 'react-router';
|
|
3
|
+
import { useNavItems } from '../../registry/context.js';
|
|
4
|
+
import { useVisibleNavItems } from '../../registry/visibleNav.js';
|
|
3
5
|
/**
|
|
4
6
|
* Tabs across the account's own settings, from the mockup's `AccountNav`.
|
|
5
7
|
*
|
|
6
|
-
* Three of its five tabs are
|
|
7
|
-
*
|
|
8
|
+
* Three of its five tabs are core's. The rest come from `nav.account`, which is
|
|
9
|
+
* where a module's own account page announces itself: a module route mounts as
|
|
10
|
+
* a sibling of `/account` rather than a child of it, so without this the page
|
|
11
|
+
* would render with no tab strip and nothing anywhere pointing at it.
|
|
12
|
+
*
|
|
13
|
+
* Core numbers itself in hundreds, the same convention the shell's sidebar
|
|
14
|
+
* uses, so a module can land between two core tabs without core renumbering.
|
|
8
15
|
*/
|
|
9
|
-
const
|
|
10
|
-
{ to: '/account/profile', label: 'Profile' },
|
|
11
|
-
{ to: '/account/security', label: 'Security' },
|
|
12
|
-
{ to: '/account/preferences', label: 'Preferences' },
|
|
16
|
+
const CORE_TABS = [
|
|
17
|
+
{ id: 'profile', to: '/account/profile', label: 'Profile', order: 100 },
|
|
18
|
+
{ id: 'security', to: '/account/security', label: 'Security', order: 200 },
|
|
19
|
+
{ id: 'preferences', to: '/account/preferences', label: 'Preferences', order: 300 },
|
|
13
20
|
];
|
|
14
21
|
function tabClass({ isActive }) {
|
|
15
22
|
return [
|
|
@@ -20,6 +27,7 @@ function tabClass({ isActive }) {
|
|
|
20
27
|
].join(' ');
|
|
21
28
|
}
|
|
22
29
|
export function AccountLayout() {
|
|
23
|
-
|
|
30
|
+
const tabs = useVisibleNavItems(CORE_TABS, useNavItems('account'));
|
|
31
|
+
return (_jsxs("div", { className: "animate-fade-in mx-auto max-w-4xl", children: [_jsx("nav", { className: "mb-6 flex flex-wrap gap-1 border-b border-border pb-3", children: tabs.map((tab) => (_jsx(NavLink, { to: tab.to, className: tabClass, children: tab.label }, tab.id))) }), _jsx(Outlet, {})] }));
|
|
24
32
|
}
|
|
25
33
|
//# sourceMappingURL=AccountLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountLayout.js","sourceRoot":"","sources":["../../../src/pages/account/AccountLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"AccountLayout.js","sourceRoot":"","sources":["../../../src/pages/account/AccountLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE;;;;;;;;;;GAUG;AAEH,MAAM,SAAS,GAAuB;IACpC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;IACvE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;IAC1E,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE;CACpF,CAAA;AAED,SAAS,QAAQ,CAAC,EAAE,QAAQ,EAAyB;IACnD,OAAO;QACL,kEAAkE;QAClE,QAAQ;YACN,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,gDAAgD;KACrD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACb,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAA;IAElE,OAAO,CACL,eAAK,SAAS,EAAC,mCAAmC,aAChD,cAAK,SAAS,EAAC,uDAAuD,YACnE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,KAAC,OAAO,IAAc,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,YAClD,GAAG,CAAC,KAAK,IADE,GAAG,CAAC,EAAE,CAEV,CACX,CAAC,GACE,EACN,KAAC,MAAM,KAAG,IACN,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ComponentType } from 'react';
|
|
2
|
-
import type { DashboardCard, ExtensibleRecordType,
|
|
2
|
+
import type { DashboardCard, ExtensibleRecordType, NavItem, NavSlot, RecordSidebarCard, RecordTab, RouteContribution } from './contributions.ts';
|
|
3
3
|
import type { Overridable } from './overridable.ts';
|
|
4
4
|
import type { UiExtensions } from './registry.ts';
|
|
5
5
|
/**
|
|
@@ -22,7 +22,6 @@ export declare function useModuleRoutes(): readonly RouteContribution[];
|
|
|
22
22
|
export declare function useRecordTabs(objectType: ExtensibleRecordType): readonly RecordTab[];
|
|
23
23
|
export declare function useRecordSidebarCards(objectType: ExtensibleRecordType): readonly RecordSidebarCard[];
|
|
24
24
|
export declare function useDashboardCards(): readonly DashboardCard[];
|
|
25
|
-
export declare function useIntegrationProviders(): readonly IntegrationProvider[];
|
|
26
25
|
/**
|
|
27
26
|
* The component to render for an overridable: a module's replacement, or core's
|
|
28
27
|
* own. Core calls this instead of rendering its component directly.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/registry/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/registry/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,uCAA6C,CAAA;AAE5E,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAE7D;AAED,wEAAwE;AACxE,wBAAgB,eAAe,IAAI,SAAS,iBAAiB,EAAE,CAE9D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,SAAS,EAAE,CAEpF;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,iBAAiB,EAAE,CAEpG;AAED,wBAAgB,iBAAiB,IAAI,SAAS,aAAa,EAAE,CAE5D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAErF"}
|
package/dist/registry/context.js
CHANGED
|
@@ -32,9 +32,6 @@ export function useRecordSidebarCards(objectType) {
|
|
|
32
32
|
export function useDashboardCards() {
|
|
33
33
|
return useUiExtensions().dashboardCards();
|
|
34
34
|
}
|
|
35
|
-
export function useIntegrationProviders() {
|
|
36
|
-
return useUiExtensions().integrationProviders();
|
|
37
|
-
}
|
|
38
35
|
/**
|
|
39
36
|
* The component to render for an overridable: a module's replacement, or core's
|
|
40
37
|
* own. Core calls this instead of rendering its component directly.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/registry/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/registry/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAajD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG7C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAe,aAAa,CAAC,CAAA;AAE5E,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAA;AACvC,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,eAAe,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AACzC,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,eAAe;IAC7B,OAAO,eAAe,EAAE,CAAC,MAAM,EAAE,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAgC;IAC5D,OAAO,eAAe,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAgC;IACpE,OAAO,eAAe,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAe,EAAE,CAAC,cAAc,EAAE,CAAA;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAQ,KAAyB;IAC7D,OAAO,eAAe,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ExtensibleRecordType } from '@kelpie/schemas';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
3
|
/**
|
|
4
4
|
* What a UI module may add to the shell, per the slot table in `modules.md`.
|
|
5
5
|
*
|
|
@@ -57,15 +57,4 @@ export interface DashboardCard {
|
|
|
57
57
|
readonly order?: number;
|
|
58
58
|
readonly render: () => ReactNode;
|
|
59
59
|
}
|
|
60
|
-
export declare const INTEGRATION_CATEGORIES: readonly ['messaging', 'identity', 'enrichment', 'email', 'calendar'];
|
|
61
|
-
export type IntegrationCategory = (typeof INTEGRATION_CATEGORIES)[number];
|
|
62
|
-
/** A catalog entry on the admin integrations page. Core owns the page and the connection lifecycle. */
|
|
63
|
-
export interface IntegrationProvider {
|
|
64
|
-
readonly id: string;
|
|
65
|
-
readonly name: string;
|
|
66
|
-
readonly category: IntegrationCategory;
|
|
67
|
-
readonly description: string;
|
|
68
|
-
/** Rendered on the provider's own settings panel once connected. */
|
|
69
|
-
readonly settings?: ComponentType<Record<string, never>>;
|
|
70
|
-
}
|
|
71
60
|
//# sourceMappingURL=contributions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contributions.d.ts","sourceRoot":"","sources":["../../src/registry/contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"contributions.d.ts","sourceRoot":"","sources":["../../src/registry/contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC;;;;;GAKG;AAEH,eAAO,MAAM,SAAS,YAAI,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAEjE,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAC1B;AAED,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAC5B;AAED;;;;;;;;GAQG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,YAAY,EAAE,oBAAoB,EAAE,CAAA;AAEpC,uGAAuG;AACvG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAA;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,SAAS,CAAA;CACvD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,SAAS,CAAA;CACvD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAA;CACjC"}
|
|
@@ -15,11 +15,4 @@ export const NAV_SLOTS = ['primary', 'admin', 'account'];
|
|
|
15
15
|
* should not have to follow an import to learn what a record type is.
|
|
16
16
|
*/
|
|
17
17
|
export { EXTENSIBLE_RECORD_TYPES } from '@kelpie/schemas';
|
|
18
|
-
export const INTEGRATION_CATEGORIES = [
|
|
19
|
-
'messaging',
|
|
20
|
-
'identity',
|
|
21
|
-
'enrichment',
|
|
22
|
-
'email',
|
|
23
|
-
'calendar',
|
|
24
|
-
];
|
|
25
18
|
//# sourceMappingURL=contributions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contributions.js","sourceRoot":"","sources":["../../src/registry/contributions.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAuBjE;;;;;;;;GAQG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA
|
|
1
|
+
{"version":3,"file":"contributions.js","sourceRoot":"","sources":["../../src/registry/contributions.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAuBjE;;;;;;;;GAQG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ComponentType } from 'react';
|
|
2
|
-
import type { DashboardCard, ExtensibleRecordType,
|
|
2
|
+
import type { DashboardCard, ExtensibleRecordType, NavItem, NavSlot, RecordSidebarCard, RecordTab, RouteContribution } from './contributions.ts';
|
|
3
3
|
import type { Overridable } from './overridable.ts';
|
|
4
4
|
/**
|
|
5
5
|
* The build-time UI extension registry from `modules.md`.
|
|
@@ -19,7 +19,6 @@ export interface UiModuleContext {
|
|
|
19
19
|
recordTab(objectType: ExtensibleRecordType, tab: RecordTab): void;
|
|
20
20
|
recordSidebarCard(objectType: ExtensibleRecordType, card: RecordSidebarCard): void;
|
|
21
21
|
dashboardCard(card: DashboardCard): void;
|
|
22
|
-
integrationProvider(provider: IntegrationProvider): void;
|
|
23
22
|
/** Replaces a core component. Prefer a slot; see `modules.md`. */
|
|
24
23
|
override<Props>(token: Overridable<Props>, component: ComponentType<Props>): void;
|
|
25
24
|
}
|
|
@@ -34,7 +33,6 @@ export interface UiExtensions {
|
|
|
34
33
|
recordTabs(objectType: ExtensibleRecordType): readonly RecordTab[];
|
|
35
34
|
recordSidebarCards(objectType: ExtensibleRecordType): readonly RecordSidebarCard[];
|
|
36
35
|
dashboardCards(): readonly DashboardCard[];
|
|
37
|
-
integrationProviders(): readonly IntegrationProvider[];
|
|
38
36
|
componentFor<Props>(token: Overridable<Props>): ComponentType<Props>;
|
|
39
37
|
}
|
|
40
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAA;AAElE;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACvC,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACrC,SAAS,CAAC,UAAU,EAAE,oBAAoB,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAAA;IACjE,iBAAiB,CAAC,UAAU,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAClF,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAA;IACxC,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;CAClF;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;CACzC;AAED,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAAA;IAC3C,MAAM,IAAI,SAAS,iBAAiB,EAAE,CAAA;IACtC,UAAU,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,SAAS,EAAE,CAAA;IAClE,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,iBAAiB,EAAE,CAAA;IAClF,cAAc,IAAI,SAAS,aAAa,EAAE,CAAA;IAC1C,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;CACrE;AAKD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAEpG;AAWD,gHAAgH;AAChH,qBAAa,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAmED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,GAAG,YAAY,CA8B5E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,YAAoC,CAAA"}
|
|
@@ -55,10 +55,6 @@ function createModuleContext(module, accumulator, taken) {
|
|
|
55
55
|
claim(taken, module.id, 'dashboard.cards', card.id);
|
|
56
56
|
accumulator.dashboardCards.push(card);
|
|
57
57
|
},
|
|
58
|
-
integrationProvider(provider) {
|
|
59
|
-
claim(taken, module.id, 'admin.integrations.catalog', provider.id);
|
|
60
|
-
accumulator.integrationProviders.push(provider);
|
|
61
|
-
},
|
|
62
58
|
override(token, component) {
|
|
63
59
|
if (accumulator.overrides.has(token.key)) {
|
|
64
60
|
throw new UiModuleError(`module "${module.id}" overrides "${token.key}", which another module already replaced`);
|
|
@@ -79,7 +75,6 @@ export function registerUiModules(modules) {
|
|
|
79
75
|
recordTabs: new Map(),
|
|
80
76
|
recordSidebarCards: new Map(),
|
|
81
77
|
dashboardCards: [],
|
|
82
|
-
integrationProviders: [],
|
|
83
78
|
overrides: createOverrideStore(),
|
|
84
79
|
};
|
|
85
80
|
const taken = new Set();
|
|
@@ -97,7 +92,6 @@ export function registerUiModules(modules) {
|
|
|
97
92
|
recordTabs: (objectType) => inSlotOrder(accumulator.recordTabs.get(objectType) ?? []),
|
|
98
93
|
recordSidebarCards: (objectType) => inSlotOrder(accumulator.recordSidebarCards.get(objectType) ?? []),
|
|
99
94
|
dashboardCards: () => inSlotOrder(accumulator.dashboardCards),
|
|
100
|
-
integrationProviders: () => accumulator.integrationProviders,
|
|
101
95
|
componentFor: (token) => accumulator.overrides.get(token),
|
|
102
96
|
};
|
|
103
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibleNav.d.ts","sourceRoot":"","sources":["../../src/registry/visibleNav.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAwBjD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,OAAO,EAAE,EAC7B,WAAW,EAAE,SAAS,OAAO,EAAE,GAC9B,SAAS,OAAO,EAAE,CASpB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useModuleSettings } from '../api/resources/moduleSettings.js';
|
|
2
|
+
import { inSlotOrder } from './registry.js';
|
|
3
|
+
/**
|
|
4
|
+
* Core's nav items merged with a slot's module contributions, ordered, with the
|
|
5
|
+
* entries belonging to a disabled module removed.
|
|
6
|
+
*
|
|
7
|
+
* One hook rather than the rule written out at each nav surface. The shell's
|
|
8
|
+
* sidebar and the account tab strip both render a slot, and a workspace that
|
|
9
|
+
* switched a module off should stop seeing it in both. Two copies of this
|
|
10
|
+
* filter is exactly the sort of pair that drifts, and the symptom is a tab that
|
|
11
|
+
* survives its module being disabled and leads to a page answering 403.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* A nav item whose id does not match its module id. Everything else looks itself
|
|
15
|
+
* up directly, which is what keeps a toggleable module's own nav entry working
|
|
16
|
+
* with no change here when one is added later.
|
|
17
|
+
*/
|
|
18
|
+
const NAV_ID_TO_MODULE_ID = {
|
|
19
|
+
fundraising: 'raises',
|
|
20
|
+
data: 'import-export',
|
|
21
|
+
};
|
|
22
|
+
export function useVisibleNavItems(coreItems, moduleItems) {
|
|
23
|
+
const { settings } = useModuleSettings();
|
|
24
|
+
const disabledModuleIds = new Set(settings.filter((setting) => !setting.enabled).map((setting) => setting.moduleId));
|
|
25
|
+
return inSlotOrder([...coreItems, ...moduleItems]).filter((item) => !disabledModuleIds.has(NAV_ID_TO_MODULE_ID[item.id] ?? item.id));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=visibleNav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibleNav.js","sourceRoot":"","sources":["../../src/registry/visibleNav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,mBAAmB,GAAqC;IAC5D,WAAW,EAAE,QAAQ;IACrB,IAAI,EAAE,eAAe;CACtB,CAAA;AAED,MAAM,UAAU,kBAAkB,CAChC,SAA6B,EAC7B,WAA+B;IAE/B,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,EAAE,CAAA;IACxC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAClF,CAAA;IAED,OAAO,WAAW,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CACvD,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAC1E,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kelpie/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "React UI for Kelpie: components, pages, API client, and the extension registry an assembly composes modules through.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"kelpie",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@dnd-kit/core": "^6.3.1",
|
|
49
49
|
"@dnd-kit/sortable": "^10.0.0",
|
|
50
50
|
"@dnd-kit/utilities": "^3.2.2",
|
|
51
|
-
"@kelpie/schemas": "^0.
|
|
51
|
+
"@kelpie/schemas": "^0.4.0",
|
|
52
52
|
"@tanstack/react-query": "^5.101.4",
|
|
53
53
|
"react-markdown": "^10.1.0",
|
|
54
54
|
"react-router": "^8.3.0",
|
package/src/app/KelpieApp.tsx
CHANGED
|
@@ -47,6 +47,7 @@ import { HandbookStepPage } from '../pages/onboarding/HandbookStepPage.tsx'
|
|
|
47
47
|
import { InvitesStepPage } from '../pages/onboarding/InvitesStepPage.tsx'
|
|
48
48
|
import { WorkspaceStepPage } from '../pages/onboarding/WorkspaceStepPage.tsx'
|
|
49
49
|
import { UiExtensionProvider } from '../registry/UiExtensionProvider.tsx'
|
|
50
|
+
import type { RouteContribution } from '../registry/contributions.ts'
|
|
50
51
|
import { useModuleRoutes } from '../registry/context.ts'
|
|
51
52
|
import type { UiExtensions } from '../registry/registry.ts'
|
|
52
53
|
import { SessionGate } from './SessionGate.tsx'
|
|
@@ -80,8 +81,25 @@ export function KelpieApp({ extensions, baseUrl }: KelpieAppProps): React.JSX.El
|
|
|
80
81
|
)
|
|
81
82
|
}
|
|
82
83
|
|
|
84
|
+
/**
|
|
85
|
+
* A module route under `account/` renders inside `AccountLayout`, everything
|
|
86
|
+
* else directly under the shell.
|
|
87
|
+
*
|
|
88
|
+
* The prefix is the whole rule, and it is what makes `nav.account` mean
|
|
89
|
+
* anything: a module contributing a tab there needs its page to keep the tab
|
|
90
|
+
* strip, and a route mounted as a sibling of `account` would lose it the moment
|
|
91
|
+
* the tab was clicked. Core's own account pages are nested for the same reason.
|
|
92
|
+
*/
|
|
93
|
+
const ACCOUNT_PREFIX = 'account/'
|
|
94
|
+
|
|
95
|
+
function isAccountRoute(route: RouteContribution): boolean {
|
|
96
|
+
return route.path.startsWith(ACCOUNT_PREFIX)
|
|
97
|
+
}
|
|
98
|
+
|
|
83
99
|
function AppRoutes(): React.JSX.Element {
|
|
84
100
|
const moduleRoutes = useModuleRoutes()
|
|
101
|
+
const accountRoutes = moduleRoutes.filter(isAccountRoute)
|
|
102
|
+
const shellRoutes = moduleRoutes.filter((route) => !isAccountRoute(route))
|
|
85
103
|
|
|
86
104
|
return (
|
|
87
105
|
<Routes>
|
|
@@ -146,8 +164,15 @@ function AppRoutes(): React.JSX.Element {
|
|
|
146
164
|
<Route path="profile" element={<ProfilePage />} />
|
|
147
165
|
<Route path="security" element={<SecurityPage />} />
|
|
148
166
|
<Route path="preferences" element={<PreferencesPage />} />
|
|
167
|
+
{accountRoutes.map((route) => (
|
|
168
|
+
<Route
|
|
169
|
+
key={route.path}
|
|
170
|
+
path={route.path.slice(ACCOUNT_PREFIX.length)}
|
|
171
|
+
element={route.element}
|
|
172
|
+
/>
|
|
173
|
+
))}
|
|
149
174
|
</Route>
|
|
150
|
-
{
|
|
175
|
+
{shellRoutes.map((route) => (
|
|
151
176
|
<Route key={route.path} path={route.path} element={route.element} />
|
|
152
177
|
))}
|
|
153
178
|
{/* Last so every named route above wins first. Nested here rather than
|
package/src/components/Shell.tsx
CHANGED
|
@@ -2,13 +2,12 @@ import { useEffect, useRef, useState } from 'react'
|
|
|
2
2
|
import { NavLink, Outlet, useLocation, useNavigate } from 'react-router'
|
|
3
3
|
|
|
4
4
|
import { useAccount, useTheme } from '../api/resources/account.ts'
|
|
5
|
-
import { useModuleSettings } from '../api/resources/moduleSettings.ts'
|
|
6
5
|
import { useLogOut } from '../api/resources/session.ts'
|
|
7
6
|
import { initialsOf } from '../lib/names.ts'
|
|
8
7
|
import type { ThemePreference } from '../lib/theme.ts'
|
|
9
8
|
import { useNavItems } from '../registry/context.ts'
|
|
10
9
|
import type { NavItem } from '../registry/contributions.ts'
|
|
11
|
-
import {
|
|
10
|
+
import { useVisibleNavItems } from '../registry/visibleNav.ts'
|
|
12
11
|
import { ErrorBoundary } from './ErrorBoundary.tsx'
|
|
13
12
|
|
|
14
13
|
/**
|
|
@@ -51,16 +50,6 @@ const CORE_NAV: readonly NavItem[] = [
|
|
|
51
50
|
*/
|
|
52
51
|
const TOP_LEVEL_NAV_IDS: ReadonlySet<string> = new Set(['dashboard', 'handbook', 'planning', 'decisions'])
|
|
53
52
|
|
|
54
|
-
/**
|
|
55
|
-
* A nav item whose id does not match its module id. Everything else looks
|
|
56
|
-
* itself up directly, which is what keeps a toggleable module's own nav entry
|
|
57
|
-
* working with no change here when one is added later.
|
|
58
|
-
*/
|
|
59
|
-
const NAV_ID_TO_MODULE_ID: Readonly<Record<string, string>> = {
|
|
60
|
-
fundraising: 'raises',
|
|
61
|
-
data: 'import-export',
|
|
62
|
-
}
|
|
63
|
-
|
|
64
53
|
function linkClass({ isActive }: { isActive: boolean }): string {
|
|
65
54
|
return [
|
|
66
55
|
'block rounded-md px-2 py-1 text-[13px] transition-colors duration-100',
|
|
@@ -89,12 +78,6 @@ export function Shell(): React.JSX.Element {
|
|
|
89
78
|
const logOut = useLogOut()
|
|
90
79
|
const moduleNav = useNavItems('primary')
|
|
91
80
|
const moduleAdminNav = useNavItems('admin')
|
|
92
|
-
const { settings } = useModuleSettings()
|
|
93
|
-
const disabledModuleIds = new Set(
|
|
94
|
-
settings.filter((setting) => !setting.enabled).map((setting) => setting.moduleId),
|
|
95
|
-
)
|
|
96
|
-
const isModuleHidden = (navId: string): boolean =>
|
|
97
|
-
disabledModuleIds.has(NAV_ID_TO_MODULE_ID[navId] ?? navId)
|
|
98
81
|
const [menuOpen, setMenuOpen] = useState(false)
|
|
99
82
|
// The same preference the account page writes, so this button and that page
|
|
100
83
|
// cannot disagree about which theme the account is on.
|
|
@@ -128,12 +111,10 @@ export function Shell(): React.JSX.Element {
|
|
|
128
111
|
}
|
|
129
112
|
}, [menuOpen])
|
|
130
113
|
|
|
131
|
-
const navItems =
|
|
114
|
+
const navItems = useVisibleNavItems(CORE_NAV, moduleNav)
|
|
132
115
|
const topLevelItems = navItems.filter((item) => TOP_LEVEL_NAV_IDS.has(item.id))
|
|
133
116
|
const crmItems = navItems.filter((item) => !TOP_LEVEL_NAV_IDS.has(item.id))
|
|
134
|
-
const adminItems =
|
|
135
|
-
(item) => !isModuleHidden(item.id),
|
|
136
|
-
)
|
|
117
|
+
const adminItems = useVisibleNavItems(CORE_ADMIN_NAV, moduleAdminNav)
|
|
137
118
|
|
|
138
119
|
return (
|
|
139
120
|
<div className="flex min-h-screen bg-surface">
|
package/src/index.ts
CHANGED
|
@@ -155,12 +155,10 @@ export type { DueBucketId, PlanAttention as PlanAttentionSummary } from './lib/p
|
|
|
155
155
|
export { applyTheme, getStoredTheme, resolveTheme, setStoredTheme, watchSystemTheme } from './lib/theme.ts'
|
|
156
156
|
export type { ThemePreference } from './lib/theme.ts'
|
|
157
157
|
|
|
158
|
-
export { EXTENSIBLE_RECORD_TYPES,
|
|
158
|
+
export { EXTENSIBLE_RECORD_TYPES, NAV_SLOTS } from './registry/contributions.ts'
|
|
159
159
|
export type {
|
|
160
160
|
DashboardCard,
|
|
161
161
|
ExtensibleRecordType,
|
|
162
|
-
IntegrationCategory,
|
|
163
|
-
IntegrationProvider,
|
|
164
162
|
NavItem,
|
|
165
163
|
NavSlot,
|
|
166
164
|
RecordContext,
|
|
@@ -177,7 +175,6 @@ export type { UiExtensions, UiModule, UiModuleContext } from './registry/registr
|
|
|
177
175
|
|
|
178
176
|
export {
|
|
179
177
|
useDashboardCards,
|
|
180
|
-
useIntegrationProviders,
|
|
181
178
|
useModuleRoutes,
|
|
182
179
|
useNavItems,
|
|
183
180
|
useOverridable,
|
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
import { NavLink, Outlet } from 'react-router'
|
|
2
2
|
|
|
3
|
+
import type { NavItem } from '../../registry/contributions.ts'
|
|
4
|
+
import { useNavItems } from '../../registry/context.ts'
|
|
5
|
+
import { useVisibleNavItems } from '../../registry/visibleNav.ts'
|
|
6
|
+
|
|
3
7
|
/**
|
|
4
8
|
* Tabs across the account's own settings, from the mockup's `AccountNav`.
|
|
5
9
|
*
|
|
6
|
-
* Three of its five tabs are
|
|
7
|
-
*
|
|
10
|
+
* Three of its five tabs are core's. The rest come from `nav.account`, which is
|
|
11
|
+
* where a module's own account page announces itself: a module route mounts as
|
|
12
|
+
* a sibling of `/account` rather than a child of it, so without this the page
|
|
13
|
+
* would render with no tab strip and nothing anywhere pointing at it.
|
|
14
|
+
*
|
|
15
|
+
* Core numbers itself in hundreds, the same convention the shell's sidebar
|
|
16
|
+
* uses, so a module can land between two core tabs without core renumbering.
|
|
8
17
|
*/
|
|
9
18
|
|
|
10
|
-
const
|
|
11
|
-
{ to: '/account/profile', label: 'Profile' },
|
|
12
|
-
{ to: '/account/security', label: 'Security' },
|
|
13
|
-
{ to: '/account/preferences', label: 'Preferences' },
|
|
14
|
-
]
|
|
19
|
+
const CORE_TABS: readonly NavItem[] = [
|
|
20
|
+
{ id: 'profile', to: '/account/profile', label: 'Profile', order: 100 },
|
|
21
|
+
{ id: 'security', to: '/account/security', label: 'Security', order: 200 },
|
|
22
|
+
{ id: 'preferences', to: '/account/preferences', label: 'Preferences', order: 300 },
|
|
23
|
+
]
|
|
15
24
|
|
|
16
25
|
function tabClass({ isActive }: { isActive: boolean }): string {
|
|
17
26
|
return [
|
|
@@ -23,11 +32,13 @@ function tabClass({ isActive }: { isActive: boolean }): string {
|
|
|
23
32
|
}
|
|
24
33
|
|
|
25
34
|
export function AccountLayout(): React.JSX.Element {
|
|
35
|
+
const tabs = useVisibleNavItems(CORE_TABS, useNavItems('account'))
|
|
36
|
+
|
|
26
37
|
return (
|
|
27
38
|
<div className="animate-fade-in mx-auto max-w-4xl">
|
|
28
39
|
<nav className="mb-6 flex flex-wrap gap-1 border-b border-border pb-3">
|
|
29
|
-
{
|
|
30
|
-
<NavLink key={tab.
|
|
40
|
+
{tabs.map((tab) => (
|
|
41
|
+
<NavLink key={tab.id} to={tab.to} className={tabClass}>
|
|
31
42
|
{tab.label}
|
|
32
43
|
</NavLink>
|
|
33
44
|
))}
|
package/src/registry/context.ts
CHANGED
|
@@ -4,7 +4,6 @@ import type { ComponentType } from 'react'
|
|
|
4
4
|
import type {
|
|
5
5
|
DashboardCard,
|
|
6
6
|
ExtensibleRecordType,
|
|
7
|
-
IntegrationProvider,
|
|
8
7
|
NavItem,
|
|
9
8
|
NavSlot,
|
|
10
9
|
RecordSidebarCard,
|
|
@@ -54,10 +53,6 @@ export function useDashboardCards(): readonly DashboardCard[] {
|
|
|
54
53
|
return useUiExtensions().dashboardCards()
|
|
55
54
|
}
|
|
56
55
|
|
|
57
|
-
export function useIntegrationProviders(): readonly IntegrationProvider[] {
|
|
58
|
-
return useUiExtensions().integrationProviders()
|
|
59
|
-
}
|
|
60
|
-
|
|
61
56
|
/**
|
|
62
57
|
* The component to render for an overridable: a module's replacement, or core's
|
|
63
58
|
* own. Core calls this instead of rendering its component directly.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ExtensibleRecordType } from '@kelpie/schemas'
|
|
2
|
-
import type {
|
|
2
|
+
import type { ReactNode } from 'react'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* What a UI module may add to the shell, per the slot table in `modules.md`.
|
|
@@ -68,22 +68,3 @@ export interface DashboardCard {
|
|
|
68
68
|
readonly render: () => ReactNode
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
export const INTEGRATION_CATEGORIES = [
|
|
72
|
-
'messaging',
|
|
73
|
-
'identity',
|
|
74
|
-
'enrichment',
|
|
75
|
-
'email',
|
|
76
|
-
'calendar',
|
|
77
|
-
] as const
|
|
78
|
-
|
|
79
|
-
export type IntegrationCategory = (typeof INTEGRATION_CATEGORIES)[number]
|
|
80
|
-
|
|
81
|
-
/** A catalog entry on the admin integrations page. Core owns the page and the connection lifecycle. */
|
|
82
|
-
export interface IntegrationProvider {
|
|
83
|
-
readonly id: string
|
|
84
|
-
readonly name: string
|
|
85
|
-
readonly category: IntegrationCategory
|
|
86
|
-
readonly description: string
|
|
87
|
-
/** Rendered on the provider's own settings panel once connected. */
|
|
88
|
-
readonly settings?: ComponentType<Record<string, never>>
|
|
89
|
-
}
|
package/src/registry/registry.ts
CHANGED
|
@@ -3,7 +3,6 @@ import type { ComponentType } from 'react'
|
|
|
3
3
|
import type {
|
|
4
4
|
DashboardCard,
|
|
5
5
|
ExtensibleRecordType,
|
|
6
|
-
IntegrationProvider,
|
|
7
6
|
NavItem,
|
|
8
7
|
NavSlot,
|
|
9
8
|
RecordSidebarCard,
|
|
@@ -32,7 +31,6 @@ export interface UiModuleContext {
|
|
|
32
31
|
recordTab(objectType: ExtensibleRecordType, tab: RecordTab): void
|
|
33
32
|
recordSidebarCard(objectType: ExtensibleRecordType, card: RecordSidebarCard): void
|
|
34
33
|
dashboardCard(card: DashboardCard): void
|
|
35
|
-
integrationProvider(provider: IntegrationProvider): void
|
|
36
34
|
/** Replaces a core component. Prefer a slot; see `modules.md`. */
|
|
37
35
|
override<Props>(token: Overridable<Props>, component: ComponentType<Props>): void
|
|
38
36
|
}
|
|
@@ -49,7 +47,6 @@ export interface UiExtensions {
|
|
|
49
47
|
recordTabs(objectType: ExtensibleRecordType): readonly RecordTab[]
|
|
50
48
|
recordSidebarCards(objectType: ExtensibleRecordType): readonly RecordSidebarCard[]
|
|
51
49
|
dashboardCards(): readonly DashboardCard[]
|
|
52
|
-
integrationProviders(): readonly IntegrationProvider[]
|
|
53
50
|
componentFor<Props>(token: Overridable<Props>): ComponentType<Props>
|
|
54
51
|
}
|
|
55
52
|
|
|
@@ -73,7 +70,6 @@ interface Accumulator {
|
|
|
73
70
|
readonly recordTabs: Map<ExtensibleRecordType, RecordTab[]>
|
|
74
71
|
readonly recordSidebarCards: Map<ExtensibleRecordType, RecordSidebarCard[]>
|
|
75
72
|
readonly dashboardCards: DashboardCard[]
|
|
76
|
-
readonly integrationProviders: IntegrationProvider[]
|
|
77
73
|
readonly overrides: OverrideStore
|
|
78
74
|
}
|
|
79
75
|
|
|
@@ -138,11 +134,6 @@ function createModuleContext(
|
|
|
138
134
|
accumulator.dashboardCards.push(card)
|
|
139
135
|
},
|
|
140
136
|
|
|
141
|
-
integrationProvider(provider) {
|
|
142
|
-
claim(taken, module.id, 'admin.integrations.catalog', provider.id)
|
|
143
|
-
accumulator.integrationProviders.push(provider)
|
|
144
|
-
},
|
|
145
|
-
|
|
146
137
|
override(token, component) {
|
|
147
138
|
if (accumulator.overrides.has(token.key)) {
|
|
148
139
|
throw new UiModuleError(
|
|
@@ -167,7 +158,6 @@ export function registerUiModules(modules: readonly UiModule[]): UiExtensions {
|
|
|
167
158
|
recordTabs: new Map(),
|
|
168
159
|
recordSidebarCards: new Map(),
|
|
169
160
|
dashboardCards: [],
|
|
170
|
-
integrationProviders: [],
|
|
171
161
|
overrides: createOverrideStore(),
|
|
172
162
|
}
|
|
173
163
|
const taken = new Set<string>()
|
|
@@ -189,7 +179,6 @@ export function registerUiModules(modules: readonly UiModule[]): UiExtensions {
|
|
|
189
179
|
recordSidebarCards: (objectType) =>
|
|
190
180
|
inSlotOrder(accumulator.recordSidebarCards.get(objectType) ?? []),
|
|
191
181
|
dashboardCards: () => inSlotOrder(accumulator.dashboardCards),
|
|
192
|
-
integrationProviders: () => accumulator.integrationProviders,
|
|
193
182
|
componentFor: (token) => accumulator.overrides.get(token),
|
|
194
183
|
}
|
|
195
184
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { useModuleSettings } from '../api/resources/moduleSettings.ts'
|
|
2
|
+
import type { NavItem } from './contributions.ts'
|
|
3
|
+
import { inSlotOrder } from './registry.ts'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Core's nav items merged with a slot's module contributions, ordered, with the
|
|
7
|
+
* entries belonging to a disabled module removed.
|
|
8
|
+
*
|
|
9
|
+
* One hook rather than the rule written out at each nav surface. The shell's
|
|
10
|
+
* sidebar and the account tab strip both render a slot, and a workspace that
|
|
11
|
+
* switched a module off should stop seeing it in both. Two copies of this
|
|
12
|
+
* filter is exactly the sort of pair that drifts, and the symptom is a tab that
|
|
13
|
+
* survives its module being disabled and leads to a page answering 403.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* A nav item whose id does not match its module id. Everything else looks itself
|
|
18
|
+
* up directly, which is what keeps a toggleable module's own nav entry working
|
|
19
|
+
* with no change here when one is added later.
|
|
20
|
+
*/
|
|
21
|
+
const NAV_ID_TO_MODULE_ID: Readonly<Record<string, string>> = {
|
|
22
|
+
fundraising: 'raises',
|
|
23
|
+
data: 'import-export',
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function useVisibleNavItems(
|
|
27
|
+
coreItems: readonly NavItem[],
|
|
28
|
+
moduleItems: readonly NavItem[],
|
|
29
|
+
): readonly NavItem[] {
|
|
30
|
+
const { settings } = useModuleSettings()
|
|
31
|
+
const disabledModuleIds = new Set(
|
|
32
|
+
settings.filter((setting) => !setting.enabled).map((setting) => setting.moduleId),
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
return inSlotOrder([...coreItems, ...moduleItems]).filter(
|
|
36
|
+
(item) => !disabledModuleIds.has(NAV_ID_TO_MODULE_ID[item.id] ?? item.id),
|
|
37
|
+
)
|
|
38
|
+
}
|