@xeonr/console-shell 0.4.1 → 0.5.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/CommandPalette.d.ts +3 -2
- package/dist/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette.js +78 -10
- package/dist/CommandPalette.js.map +1 -1
- package/dist/ConsoleProvider.d.ts +39 -4
- package/dist/ConsoleProvider.d.ts.map +1 -1
- package/dist/ConsoleProvider.js +19 -3
- package/dist/ConsoleProvider.js.map +1 -1
- package/dist/ConsoleShell.d.ts +63 -3
- package/dist/ConsoleShell.d.ts.map +1 -1
- package/dist/ConsoleShell.js +142 -8
- package/dist/ConsoleShell.js.map +1 -1
- package/dist/ContextRow.d.ts +2 -0
- package/dist/ContextRow.d.ts.map +1 -0
- package/dist/ContextRow.js +235 -0
- package/dist/ContextRow.js.map +1 -0
- package/dist/Gate.d.ts +25 -0
- package/dist/Gate.d.ts.map +1 -0
- package/dist/Gate.js +38 -0
- package/dist/Gate.js.map +1 -0
- package/dist/ScopeCard.d.ts +4 -0
- package/dist/ScopeCard.d.ts.map +1 -0
- package/dist/ScopeCard.js +228 -0
- package/dist/ScopeCard.js.map +1 -0
- package/dist/ScopeRail.d.ts.map +1 -1
- package/dist/ScopeRail.js +43 -2
- package/dist/ScopeRail.js.map +1 -1
- package/dist/SectionSidebar.d.ts +6 -4
- package/dist/SectionSidebar.d.ts.map +1 -1
- package/dist/SectionSidebar.js +68 -19
- package/dist/SectionSidebar.js.map +1 -1
- package/dist/TopBar.d.ts.map +1 -1
- package/dist/TopBar.js +16 -2
- package/dist/TopBar.js.map +1 -1
- package/dist/context.d.ts +82 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +65 -0
- package/dist/context.js.map +1 -0
- package/dist/crumb.d.ts +9 -0
- package/dist/crumb.d.ts.map +1 -1
- package/dist/crumb.js +20 -2
- package/dist/crumb.js.map +1 -1
- package/dist/crumbs.d.ts +19 -0
- package/dist/crumbs.d.ts.map +1 -0
- package/dist/crumbs.js +43 -0
- package/dist/crumbs.js.map +1 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/links.d.ts +5 -4
- package/dist/links.d.ts.map +1 -1
- package/dist/links.js +5 -15
- package/dist/links.js.map +1 -1
- package/dist/nav.d.ts +66 -4
- package/dist/nav.d.ts.map +1 -1
- package/dist/nav.js +99 -2
- package/dist/nav.js.map +1 -1
- package/dist/origin.d.ts +2 -0
- package/dist/origin.d.ts.map +1 -0
- package/dist/origin.js +14 -0
- package/dist/origin.js.map +1 -0
- package/dist/place.d.ts +26 -0
- package/dist/place.d.ts.map +1 -0
- package/dist/place.js +53 -0
- package/dist/place.js.map +1 -0
- package/dist/scope.d.ts +35 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +42 -0
- package/dist/scope.js.map +1 -0
- package/dist/screen.d.ts +38 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +79 -0
- package/dist/screen.js.map +1 -0
- package/dist/shellConfig.d.ts +50 -0
- package/dist/shellConfig.d.ts.map +1 -0
- package/dist/shellConfig.js +24 -0
- package/dist/shellConfig.js.map +1 -0
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -4
- package/dist/TeamCard.d.ts +0 -5
- package/dist/TeamCard.d.ts.map +0 -1
- package/dist/TeamCard.js +0 -152
- package/dist/TeamCard.js.map +0 -1
package/dist/ConsoleShell.js
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
3
|
import styled, { css } from "styled-components";
|
|
4
4
|
import { Skeleton, v } from "@xeonr/platform-ui";
|
|
5
5
|
import { useConsoleMaybe } from "./ConsoleProvider.js";
|
|
6
|
+
import { itemTarget, resolveActive } from "./nav.js";
|
|
7
|
+
import { deriveCrumbs } from "./crumbs.js";
|
|
8
|
+
import { scopeHref } from "./scope.js";
|
|
9
|
+
import { joinPath, pickSearch, swapTeamBase, withCarry } from "./place.js";
|
|
10
|
+
import { useLocation } from "react-router-dom";
|
|
6
11
|
import { ScopeRail } from "./ScopeRail.js";
|
|
7
12
|
import { SectionSidebar } from "./SectionSidebar.js";
|
|
8
13
|
import { TopBar } from "./TopBar.js";
|
|
9
14
|
import { CommandPalette } from "./CommandPalette.js";
|
|
10
15
|
import { Launcher } from "./Launcher.js";
|
|
11
16
|
import { AccountMenu } from "./AccountMenu.js";
|
|
17
|
+
import { ShellConfigProvider } from "./shellConfig.js";
|
|
18
|
+
import { ScreenProvider } from "./screen.js";
|
|
19
|
+
import { currentContext, sectionPathOf } from "./context.js";
|
|
12
20
|
import { CrumbProvider } from "./crumb.js";
|
|
13
21
|
// The whole integration contract for a product console:
|
|
14
22
|
//
|
|
@@ -64,6 +72,49 @@ const Page = styled.main `
|
|
|
64
72
|
margin: 0 auto;
|
|
65
73
|
`}
|
|
66
74
|
`;
|
|
75
|
+
// A product's full-width strip under the top bar (lantern's scope bar), sticky
|
|
76
|
+
// with it, outside the page's padding. Empty for everyone else.
|
|
77
|
+
const Toolbar = styled.div `
|
|
78
|
+
position: sticky; top: 52px;
|
|
79
|
+
z-index: calc(${v.zNav} - 3);
|
|
80
|
+
background: ${v.bg};
|
|
81
|
+
border-bottom: 1px solid ${v.line};
|
|
82
|
+
`;
|
|
83
|
+
// A right-hand aside the product fills (trellis's AI sessions). On a phone it
|
|
84
|
+
// overlays everything, the drawer included.
|
|
85
|
+
const Dock = styled.aside `
|
|
86
|
+
width: 520px; flex: none;
|
|
87
|
+
border-left: 1px solid ${v.line};
|
|
88
|
+
background: ${v.sidebar};
|
|
89
|
+
display: flex; flex-direction: column;
|
|
90
|
+
min-height: 0;
|
|
91
|
+
@media (max-width: 900px) {
|
|
92
|
+
position: fixed; top: 2px; right: 0; bottom: 0;
|
|
93
|
+
width: min(520px, 100vw);
|
|
94
|
+
z-index: calc(${v.zNav} + 2);
|
|
95
|
+
box-shadow: ${v.elev};
|
|
96
|
+
}
|
|
97
|
+
`;
|
|
98
|
+
function useNarrow() {
|
|
99
|
+
const q = "(max-width: 900px)";
|
|
100
|
+
const [narrow, setNarrow] = useState(() => typeof window !== "undefined" && window.matchMedia(q).matches);
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
const m = window.matchMedia(q);
|
|
103
|
+
const on = () => setNarrow(m.matches);
|
|
104
|
+
m.addEventListener("change", on);
|
|
105
|
+
return () => m.removeEventListener("change", on);
|
|
106
|
+
}, []);
|
|
107
|
+
return narrow;
|
|
108
|
+
}
|
|
109
|
+
function readChoice(key) {
|
|
110
|
+
try {
|
|
111
|
+
const v = localStorage.getItem(key);
|
|
112
|
+
return v === "collapsed" ? true : v === "expanded" ? false : undefined;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
67
118
|
const MobileScrim = styled.div `
|
|
68
119
|
position: fixed; inset: 0;
|
|
69
120
|
z-index: calc(${v.zNav} - 1);
|
|
@@ -76,19 +127,45 @@ const SkeletonFrame = styled.div `
|
|
|
76
127
|
> div:nth-child(2) { width: 224px; border-right: 1px solid ${v.line}; background: ${v.sidebar}; padding: 12px 10px; display: flex; flex-direction: column; gap: 8px; }
|
|
77
128
|
> div:last-child { flex: 1; padding: 20px 24px; display: flex; flex-direction: column; gap: 12px; }
|
|
78
129
|
`;
|
|
79
|
-
export function ConsoleShell({ productLabel, base, sections, crumbs, searchPlaceholder, authOrigin = "https://auth.xeonr.io", docsHref, wide, fill, onEnableProduct, account: accountConfig, children, }) {
|
|
130
|
+
export function ConsoleShell({ productLabel, base, sections, crumbs, searchPlaceholder, authOrigin = "https://auth.xeonr.io", docsHref, wide, fill, onEnableProduct, account: accountConfig, scope = "team", scopes, can, organisation, roleLabel, context, activeSection, onContextChange, carryQuery, baseFor, onScopeChange, sidebar = "expanded", counts, docsLabel, toolbar, dock, children, }) {
|
|
80
131
|
const c = useConsoleMaybe();
|
|
132
|
+
const { pathname, search } = useLocation();
|
|
133
|
+
const carried = pickSearch(search, carryQuery ?? []);
|
|
134
|
+
const narrow = useNarrow();
|
|
135
|
+
// The toggle is remembered per product, and separately for workspace
|
|
136
|
+
// screens when the default is "auto", so collapsing a workspace does not
|
|
137
|
+
// collapse every settings page.
|
|
138
|
+
const collapseKey = `xnr:sidebar:${c?.product ?? ""}${sidebar === "auto" && fill ? ":fill" : ""}`;
|
|
139
|
+
const [choice, setChoice] = useState(() => readChoice(collapseKey));
|
|
140
|
+
useEffect(() => setChoice(readChoice(collapseKey)), [collapseKey]);
|
|
141
|
+
const collapsed = !narrow && (choice ?? (sidebar === "collapsed" || (sidebar === "auto" && !!fill)));
|
|
142
|
+
const toggleCollapse = useCallback(() => {
|
|
143
|
+
const next = !collapsed;
|
|
144
|
+
setChoice(next);
|
|
145
|
+
try {
|
|
146
|
+
localStorage.setItem(collapseKey, next ? "collapsed" : "expanded");
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
/* private mode: the toggle still works for this page */
|
|
150
|
+
}
|
|
151
|
+
}, [collapsed, collapseKey]);
|
|
81
152
|
const [side, setSide] = useState(false);
|
|
82
153
|
const [palette, setPalette] = useState(false);
|
|
83
154
|
const [launcher, setLauncher] = useState(false);
|
|
84
155
|
const [account, setAccount] = useState(false);
|
|
85
156
|
const closeAccount = useCallback(() => setAccount(false), []);
|
|
157
|
+
const toggleRef = useRef(toggleCollapse);
|
|
158
|
+
toggleRef.current = toggleCollapse;
|
|
86
159
|
useEffect(() => {
|
|
87
160
|
const on = (e) => {
|
|
88
161
|
if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
|
|
89
162
|
e.preventDefault();
|
|
90
163
|
setPalette((p) => !p);
|
|
91
164
|
}
|
|
165
|
+
if ((e.metaKey || e.ctrlKey) && e.key === "\\") {
|
|
166
|
+
e.preventDefault();
|
|
167
|
+
toggleRef.current();
|
|
168
|
+
}
|
|
92
169
|
};
|
|
93
170
|
window.addEventListener("keydown", on);
|
|
94
171
|
return () => window.removeEventListener("keydown", on);
|
|
@@ -96,11 +173,68 @@ export function ConsoleShell({ productLabel, base, sections, crumbs, searchPlace
|
|
|
96
173
|
if (!c) {
|
|
97
174
|
return (_jsxs(_Fragment, { children: [_jsx(Stripe, {}), _jsxs(SkeletonFrame, { "aria-busy": "true", "aria-label": "Loading console", children: [_jsx("div", {}), _jsxs("div", { children: [_jsx(Skeleton, { "$h": "56px", "$r": "12px" }), Array.from({ length: 6 }).map((_, i) => _jsx(Skeleton, { "$h": "34px", "$r": "8px" }, i))] }), _jsxs("div", { children: [_jsx(Skeleton, { "$h": "28px", "$w": "260px" }), _jsx(Skeleton, { "$h": "160px", "$r": "14px" }), _jsx(Skeleton, { "$h": "320px", "$r": "14px" })] })] })] }));
|
|
98
175
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
176
|
+
return (_jsx(CrumbProvider, { children: (published) => (_jsx(ScreenProvider, { children: (screen) => {
|
|
177
|
+
const effScope = screen.scope ?? scope;
|
|
178
|
+
// The one answer to "which section is current": a screen's
|
|
179
|
+
// useActiveSection, else the layout's activeSection, else the URL.
|
|
180
|
+
const active = resolveActive(sections, pathname, base, screen.section ?? activeSection);
|
|
181
|
+
const current = context ? currentContext(context, screen.context) : { state: "none" };
|
|
182
|
+
const sectionPath = context ? sectionPathOf(sections, active, current.state === "item" ? current.item : undefined) : undefined;
|
|
183
|
+
const config = {
|
|
184
|
+
scope: effScope,
|
|
185
|
+
scopes: scopes ?? {},
|
|
186
|
+
can,
|
|
187
|
+
organisation,
|
|
188
|
+
roleLabel,
|
|
189
|
+
productLabel,
|
|
190
|
+
authOrigin,
|
|
191
|
+
context,
|
|
192
|
+
currentContext: current,
|
|
193
|
+
sectionPath,
|
|
194
|
+
onContextChange,
|
|
195
|
+
screenTeam: screen.team,
|
|
196
|
+
carried,
|
|
197
|
+
onScopeChange,
|
|
198
|
+
collapsed,
|
|
199
|
+
counts,
|
|
200
|
+
closeDrawer: () => setSide(false),
|
|
201
|
+
placeFor: (team) => {
|
|
202
|
+
// Keep the section under the other team. With a context the
|
|
203
|
+
// context belongs to the old team, so land on the team's root
|
|
204
|
+
// and hand the product the section to map itself.
|
|
205
|
+
const ownPath = active && active.to === undefined && active.href === undefined ? active.path : undefined;
|
|
206
|
+
const newBase = context
|
|
207
|
+
? scopes?.team
|
|
208
|
+
? scopeHref(scopes.team, team)
|
|
209
|
+
: undefined
|
|
210
|
+
: (baseFor?.(team) ?? swapTeamBase(base, c.activeTeam?.slug, team.slug));
|
|
211
|
+
const suggested = newBase === undefined ? "" : withCarry(context ? newBase : joinPath(newBase, ownPath), carried);
|
|
212
|
+
return { sectionKey: active?.key, sectionPath: context ? sectionPath : ownPath, search: carried, suggested };
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
// The trail starts with the scope — the page's team, the person, or
|
|
216
|
+
// the organisation, never a team the page does not have — and is
|
|
217
|
+
// derived from the same sources that light the sidebar.
|
|
218
|
+
const pageTeamName = screen.team === null ? undefined : typeof screen.team === "string" ? (c.teams.find((t) => t.slug === screen.team)?.name ?? screen.team) : screen.team ? (screen.team.name ?? screen.team.slug) : c.pageTeam ? c.pageTeam.name || c.pageTeam.slug : undefined;
|
|
219
|
+
const scopeCrumb = effScope === "personal"
|
|
220
|
+
? { label: "Personal", ...(c.homeRoot ? { href: `${c.homeRoot}/activity` } : {}) }
|
|
221
|
+
: effScope === "organisation"
|
|
222
|
+
? { label: organisation?.name ?? scopes?.organisation?.label ?? "Organisation", ...(c.homeRoot ? { href: c.homeRoot } : {}) }
|
|
223
|
+
: pageTeamName
|
|
224
|
+
? { label: pageTeamName, ...(c.product !== "home" && c.homeHref !== "/" ? { href: c.homeHref } : {}) }
|
|
225
|
+
: undefined;
|
|
226
|
+
const scopeEntry = scopes?.[effScope];
|
|
227
|
+
const productCrumb = { label: productLabel, href: scopeEntry ? scopeHref(scopeEntry, c.activeTeam) : base || "/" };
|
|
228
|
+
const contextCrumb = current.state === "item" && current.item.href ? { label: current.item.label, href: current.item.href } : undefined;
|
|
229
|
+
const sectionCrumb = active && active.crumb !== null
|
|
230
|
+
? {
|
|
231
|
+
label: active.crumb ?? active.label,
|
|
232
|
+
href: itemTarget(active, base).href,
|
|
233
|
+
index: active.path === "" && active.to === undefined && active.href === undefined,
|
|
234
|
+
}
|
|
235
|
+
: undefined;
|
|
236
|
+
const allCrumbs = deriveCrumbs({ scope: scopeCrumb, product: productCrumb, context: contextCrumb, section: sectionCrumb, layout: crumbs, published }).map((x) => x.href ? { ...x, href: withCarry(x.href, carried) } : x);
|
|
237
|
+
return (_jsxs(ShellConfigProvider, { value: config, children: [_jsx(Stripe, {}), _jsxs(Frame, { children: [_jsx(ScopeRail, { onOpenLauncher: () => setLauncher(true), onOpenAccount: () => setAccount((a) => !a) }), _jsx(SectionSidebar, { open: side, base: base, groups: sections, activeKey: active?.key, docsHref: docsHref, docsLabel: docsLabel, onToggleCollapse: toggleCollapse, onNavigate: () => setSide(false) }), side ? _jsx(MobileScrim, { onClick: () => setSide(false) }) : null, _jsxs(Main, { "$fill": fill, children: [_jsx(TopBar, { crumbs: allCrumbs, searchPlaceholder: searchPlaceholder ?? `Search ${productLabel.toLowerCase()}, teams, products…`, onBurger: () => setSide((s) => !s), onSearch: () => setPalette(true), notifications: c.invitations.length, onNotifications: () => setAccount(true) }), toolbar ? _jsx(Toolbar, { children: toolbar }) : null, _jsx(Page, { "$wide": wide, "$fill": fill, children: children })] }), dock ? _jsx(Dock, { "aria-label": "Dock", children: dock }) : null] }), palette ? _jsx(CommandPalette, { onClose: () => setPalette(false), base: base, groups: sections, productLabel: productLabel, activeKey: active?.key }) : null, launcher ? _jsx(Launcher, { onClose: () => setLauncher(false), authOrigin: authOrigin, onEnable: onEnableProduct }) : null, account ? _jsx(AccountMenu, { onClose: closeAccount, authOrigin: authOrigin, config: accountConfig }) : null] }));
|
|
238
|
+
} })) }));
|
|
105
239
|
}
|
|
106
240
|
//# sourceMappingURL=ConsoleShell.js.map
|
package/dist/ConsoleShell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsoleShell.js","sourceRoot":"","sources":["../src/ConsoleShell.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConsoleShell.js","sourceRoot":"","sources":["../src/ConsoleShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextRow.d.ts","sourceRoot":"","sources":["../src/ContextRow.tsx"],"names":[],"mappings":"AAgJA,wBAAgB,UAAU,gCAmMzB"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import styled from "styled-components";
|
|
4
|
+
import { useNavigate } from "react-router-dom";
|
|
5
|
+
import { Icon, Popover, v } from "@xeonr/platform-ui";
|
|
6
|
+
import { useConsole } from "./ConsoleProvider.js";
|
|
7
|
+
import { contextHref, filterItems, orderItems, pushRecent } from "./context.js";
|
|
8
|
+
import { withCarry } from "./place.js";
|
|
9
|
+
import { isSameOrigin } from "./origin.js";
|
|
10
|
+
import { satisfies } from "./scope.js";
|
|
11
|
+
import { useShellConfig } from "./shellConfig.js";
|
|
12
|
+
// The second context, as one 34px row attached under the scope card: a kicker,
|
|
13
|
+
// the current item, a chevron. It is text, never the brand fill — the only
|
|
14
|
+
// filled row in the sidebar is the page you are on — so "the scope I am in"
|
|
15
|
+
// and "the page I am on" cannot look alike. Fourteen projects or forty
|
|
16
|
+
// applications cost this one row; the list lives in the popover.
|
|
17
|
+
const Row = styled.button `
|
|
18
|
+
width: 100%;
|
|
19
|
+
height: 34px;
|
|
20
|
+
display: flex; align-items: center; gap: 8px;
|
|
21
|
+
padding: 0 10px;
|
|
22
|
+
margin-top: -1px;
|
|
23
|
+
border: 1px solid ${v.line2};
|
|
24
|
+
border-radius: 0 0 ${v.rCard} ${v.rCard};
|
|
25
|
+
background: ${v.surface2};
|
|
26
|
+
color: ${v.text};
|
|
27
|
+
text-align: left;
|
|
28
|
+
cursor: pointer;
|
|
29
|
+
&:hover { border-color: ${v.brand55}; }
|
|
30
|
+
&:focus-visible { outline: none; box-shadow: ${v.ring}; }
|
|
31
|
+
`;
|
|
32
|
+
const CompactRow = styled.button `
|
|
33
|
+
width: 40px; height: 30px;
|
|
34
|
+
margin: 6px auto 0;
|
|
35
|
+
display: grid; place-items: center;
|
|
36
|
+
border-radius: ${v.rCtl};
|
|
37
|
+
border: 1px dashed ${v.line2};
|
|
38
|
+
background: transparent;
|
|
39
|
+
color: ${v.text};
|
|
40
|
+
font-size: 10px; font-weight: 700;
|
|
41
|
+
cursor: pointer;
|
|
42
|
+
&:hover { border-color: ${v.brand55}; }
|
|
43
|
+
`;
|
|
44
|
+
const Kicker = styled.span `
|
|
45
|
+
font-size: 9.5px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase;
|
|
46
|
+
color: ${v.faint}; flex: none;
|
|
47
|
+
`;
|
|
48
|
+
const Name = styled.span `
|
|
49
|
+
flex: 1 1 auto; min-width: 0;
|
|
50
|
+
font-size: 12.5px; font-weight: 600;
|
|
51
|
+
color: ${(p) => (p.$muted ? v.muted : v.text)};
|
|
52
|
+
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
|
|
53
|
+
`;
|
|
54
|
+
const Skeleton = styled.span `
|
|
55
|
+
flex: 1 1 auto; height: 10px; border-radius: 4px; background: ${v.hover};
|
|
56
|
+
`;
|
|
57
|
+
const Chev = styled.span `color: ${v.faint}; flex: none; display: grid;`;
|
|
58
|
+
const Search = styled.input `
|
|
59
|
+
margin: 8px 8px 4px;
|
|
60
|
+
height: 30px;
|
|
61
|
+
padding: 0 10px;
|
|
62
|
+
border-radius: ${v.rCtl};
|
|
63
|
+
border: 1px solid ${v.fieldLine};
|
|
64
|
+
background: ${v.field};
|
|
65
|
+
color: ${v.text};
|
|
66
|
+
font: inherit; font-size: 12.5px;
|
|
67
|
+
&:focus { outline: none; border-color: ${v.brand55}; }
|
|
68
|
+
`;
|
|
69
|
+
const List = styled.div `
|
|
70
|
+
padding: 4px 6px 6px;
|
|
71
|
+
display: flex; flex-direction: column; gap: 1px;
|
|
72
|
+
overflow-y: auto;
|
|
73
|
+
max-height: 320px;
|
|
74
|
+
`;
|
|
75
|
+
const Label = styled.div `
|
|
76
|
+
font-size: 10.5px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase;
|
|
77
|
+
color: ${v.faint}; padding: 8px 8px 4px;
|
|
78
|
+
`;
|
|
79
|
+
const Option = styled.button `
|
|
80
|
+
display: flex; align-items: center; gap: 10px;
|
|
81
|
+
width: 100%; text-align: left;
|
|
82
|
+
padding: 7px 8px;
|
|
83
|
+
border-radius: ${v.rCtl};
|
|
84
|
+
border: 0;
|
|
85
|
+
font: inherit; font-size: 13px;
|
|
86
|
+
color: ${v.text};
|
|
87
|
+
background: ${(p) => (p.$on ? v.brand12 : p.$hot ? v.hover : "transparent")};
|
|
88
|
+
cursor: pointer;
|
|
89
|
+
&:disabled { opacity: 0.55; cursor: default; }
|
|
90
|
+
.txt { display: flex; flex-direction: column; min-width: 0; flex: 1 1 auto; }
|
|
91
|
+
.txt b { font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
92
|
+
.txt span { font-size: 11px; color: ${v.faint}; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
93
|
+
small { margin-left: auto; color: ${v.faint}; font-size: 11px; font-variant-numeric: tabular-nums; }
|
|
94
|
+
`;
|
|
95
|
+
const Foot = styled.div `
|
|
96
|
+
border-top: 1px solid ${v.line};
|
|
97
|
+
padding: 6px;
|
|
98
|
+
display: flex; flex-direction: column; gap: 1px;
|
|
99
|
+
`;
|
|
100
|
+
const FootItem = styled.button `
|
|
101
|
+
display: flex; align-items: center; gap: 10px;
|
|
102
|
+
width: 100%; text-align: left;
|
|
103
|
+
padding: 7px 8px;
|
|
104
|
+
border: 0; border-radius: ${v.rCtl};
|
|
105
|
+
background: transparent;
|
|
106
|
+
font: inherit; font-size: 13px;
|
|
107
|
+
color: ${v.muted};
|
|
108
|
+
cursor: pointer;
|
|
109
|
+
&:hover { background: ${v.hover}; color: ${v.text}; }
|
|
110
|
+
svg { width: 16px; font-size: 13px; }
|
|
111
|
+
`;
|
|
112
|
+
const Empty = styled.div `font-size: 12px; color: ${v.faint}; padding: 8px 10px;`;
|
|
113
|
+
function readRecent(key) {
|
|
114
|
+
try {
|
|
115
|
+
const raw = localStorage.getItem(key);
|
|
116
|
+
const v = raw ? JSON.parse(raw) : [];
|
|
117
|
+
return Array.isArray(v) ? v.filter((x) => typeof x === "string") : [];
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function writeRecent(key, ids) {
|
|
124
|
+
try {
|
|
125
|
+
localStorage.setItem(key, JSON.stringify(ids));
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
/* private mode: Recent is a convenience */
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export function ContextRow() {
|
|
132
|
+
const c = useConsole();
|
|
133
|
+
const cfg = useShellConfig();
|
|
134
|
+
const navigate = useNavigate();
|
|
135
|
+
const ctx = cfg.context;
|
|
136
|
+
const current = cfg.currentContext;
|
|
137
|
+
const ref = useRef(null);
|
|
138
|
+
const closedAt = useRef(0);
|
|
139
|
+
const [anchor, setAnchor] = useState(null);
|
|
140
|
+
const [q, setQ] = useState("");
|
|
141
|
+
const [remote, setRemote] = useState(null);
|
|
142
|
+
const [hot, setHot] = useState(0);
|
|
143
|
+
const recentKey = `xnr:ctx-recent:${c.product}:${ctx.kind}`;
|
|
144
|
+
const [recent, setRecent] = useState(() => readRecent(recentKey));
|
|
145
|
+
const close = useCallback(() => {
|
|
146
|
+
closedAt.current = Date.now();
|
|
147
|
+
setAnchor(null);
|
|
148
|
+
setQ("");
|
|
149
|
+
setRemote(null);
|
|
150
|
+
}, []);
|
|
151
|
+
const toggle = () => {
|
|
152
|
+
if (anchor || Date.now() - closedAt.current < 250)
|
|
153
|
+
return;
|
|
154
|
+
if (ref.current)
|
|
155
|
+
setAnchor(ref.current.getBoundingClientRect());
|
|
156
|
+
};
|
|
157
|
+
// An async directory (auth's applications) searches as you type.
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
if (!anchor || !ctx.search || !q.trim()) {
|
|
160
|
+
setRemote(null);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
let live = true;
|
|
164
|
+
const t = window.setTimeout(() => {
|
|
165
|
+
void ctx.search(q.trim()).then((r) => live && setRemote(r)).catch(() => live && setRemote([]));
|
|
166
|
+
}, 180);
|
|
167
|
+
return () => {
|
|
168
|
+
live = false;
|
|
169
|
+
window.clearTimeout(t);
|
|
170
|
+
};
|
|
171
|
+
}, [anchor, q, ctx.search]);
|
|
172
|
+
const searchable = ctx.items.length > 6 || !!ctx.search;
|
|
173
|
+
const currentId = current.state === "item" ? current.item.id : null;
|
|
174
|
+
const sections = useMemo(() => {
|
|
175
|
+
if (q.trim())
|
|
176
|
+
return { pinned: [], recent: [], all: remote ?? filterItems(ctx.items, q) };
|
|
177
|
+
return orderItems(ctx.items, ctx.pinned, recent);
|
|
178
|
+
}, [q, remote, ctx.items, ctx.pinned, recent]);
|
|
179
|
+
const flat = [...sections.pinned, ...sections.recent, ...sections.all];
|
|
180
|
+
const pick = (item) => {
|
|
181
|
+
if (item.disabled)
|
|
182
|
+
return;
|
|
183
|
+
const next = pushRecent(recent, item.id);
|
|
184
|
+
setRecent(next);
|
|
185
|
+
writeRecent(recentKey, next);
|
|
186
|
+
const href = withCarry(ctx.hrefFor ? ctx.hrefFor(item, { sectionPath: cfg.sectionPath }) : contextHref(item, cfg.sectionPath), cfg.carried);
|
|
187
|
+
close();
|
|
188
|
+
cfg.closeDrawer();
|
|
189
|
+
cfg.onContextChange?.(item, href);
|
|
190
|
+
if (isSameOrigin(href))
|
|
191
|
+
navigate(href);
|
|
192
|
+
else
|
|
193
|
+
window.location.assign(href);
|
|
194
|
+
};
|
|
195
|
+
const follow = (href) => {
|
|
196
|
+
close();
|
|
197
|
+
cfg.closeDrawer();
|
|
198
|
+
if (isSameOrigin(href))
|
|
199
|
+
navigate(href);
|
|
200
|
+
else
|
|
201
|
+
window.location.assign(href);
|
|
202
|
+
};
|
|
203
|
+
const team = c.pageTeam ?? c.activeTeam;
|
|
204
|
+
const showAll = ctx.all && satisfies(ctx.all.requires, team, c.me, cfg.can);
|
|
205
|
+
const showCreate = ctx.create && satisfies(ctx.create.requires, team, c.me, cfg.can);
|
|
206
|
+
const listId = `ctx-${ctx.kind}-list`;
|
|
207
|
+
const option = (item, idx) => (_jsxs(Option, { id: `${listId}-${item.id}`, type: "button", role: "option", "aria-selected": item.id === currentId, "$on": item.id === currentId, "$hot": idx === hot, disabled: item.disabled, title: item.disabled ? item.disabledReason : undefined, onMouseEnter: () => setHot(idx), onClick: () => pick(item), children: [_jsxs("span", { className: "txt", children: [_jsx("b", { children: item.label }), item.sub ? _jsx("span", { children: item.sub }) : null] }), item.count !== undefined ? _jsx("small", { children: item.count }) : null] }, item.id));
|
|
208
|
+
let n = 0;
|
|
209
|
+
const block = (label, items) => items.length ? (_jsxs("div", { role: "group", "aria-label": label, children: [_jsx(Label, { children: label }), items.map((i) => option(i, n++))] }, label)) : null;
|
|
210
|
+
return (_jsxs(_Fragment, { children: [cfg.collapsed ? (_jsx(CompactRow, { ref: ref, type: "button", role: "combobox", "aria-haspopup": "listbox", "aria-expanded": !!anchor, "aria-label": `${ctx.label}: ${current.state === "item" ? current.item.label : "none chosen"}`, title: `${ctx.label} · ${current.state === "item" ? current.item.label : "none chosen"}`, onClick: toggle, children: current.state === "item" ? current.item.label.slice(0, 2).toUpperCase() : "…" })) : (_jsxs(Row, { ref: ref, type: "button", role: "combobox", "aria-haspopup": "listbox", "aria-expanded": !!anchor, "aria-controls": anchor ? listId : undefined, "aria-label": `${ctx.label}: ${current.state === "item" ? current.item.label : current.state === "pending" ? "loading" : "none chosen"}`, onClick: toggle, children: [_jsx(Kicker, { children: ctx.label }), current.state === "pending" ? _jsx(Skeleton, { "aria-hidden": true }) : _jsx(Name, { "$muted": current.state === "none", children: current.state === "item" ? current.item.label : `Choose a ${ctx.label.toLowerCase()}` }), _jsx(Chev, { children: _jsx(Icon, { name: "chevron-down", size: 12 }) })] })), anchor ? (_jsxs(Popover, { sheet: true, anchor: anchor, onClose: close, label: `Switch ${ctx.label.toLowerCase()}`, width: Math.max(anchor.width, 260), children: [searchable ? (_jsx(Search, { autoFocus: true, value: q, placeholder: `Find a ${ctx.label.toLowerCase()}…`, "aria-controls": listId, "aria-activedescendant": flat[hot] ? `${listId}-${flat[hot].id}` : undefined, onChange: (e) => {
|
|
211
|
+
setQ(e.target.value);
|
|
212
|
+
setHot(0);
|
|
213
|
+
}, onKeyDown: (e) => {
|
|
214
|
+
if (e.key === "ArrowDown") {
|
|
215
|
+
e.preventDefault();
|
|
216
|
+
setHot((h) => Math.min(h + 1, flat.length - 1));
|
|
217
|
+
}
|
|
218
|
+
else if (e.key === "ArrowUp") {
|
|
219
|
+
e.preventDefault();
|
|
220
|
+
setHot((h) => Math.max(h - 1, 0));
|
|
221
|
+
}
|
|
222
|
+
else if (e.key === "Enter" && flat[hot]) {
|
|
223
|
+
e.preventDefault();
|
|
224
|
+
pick(flat[hot]);
|
|
225
|
+
}
|
|
226
|
+
} })) : null, _jsxs(List, { id: listId, role: "listbox", "aria-label": ctx.plural, children: [flat.length === 0 ? _jsx(Empty, { children: q ? `No ${ctx.plural} match.` : `No ${ctx.plural} yet.` }) : null, block("Pinned", sections.pinned), block("Recent", sections.recent), block(q ? "Results" : sections.pinned.length || sections.recent.length ? `All (${ctx.items.length})` : ctx.plural, sections.all)] }), showAll || showCreate ? (_jsxs(Foot, { children: [showAll ? (_jsxs(FootItem, { type: "button", onClick: () => follow(ctx.all.href), children: [_jsx(Icon, { name: "list" }), " ", ctx.all.label] })) : null, showCreate ? (_jsxs(FootItem, { type: "button", onClick: () => {
|
|
227
|
+
if (ctx.create.onClick) {
|
|
228
|
+
close();
|
|
229
|
+
ctx.create.onClick();
|
|
230
|
+
}
|
|
231
|
+
else if (ctx.create.href)
|
|
232
|
+
follow(ctx.create.href);
|
|
233
|
+
}, children: [_jsx(Icon, { name: "add" }), " ", ctx.create.label] })) : null] })) : null] })) : null] }));
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=ContextRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextRow.js","sourceRoot":"","sources":["../src/ContextRow.tsx"],"names":[],"mappings":"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"}
|
package/dist/Gate.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { Requires } from "./nav.ts";
|
|
3
|
+
export declare function Gate({ requires, section, what, manageHref, children }: {
|
|
4
|
+
requires: Requires;
|
|
5
|
+
/** the section to keep lit (its NavItem key) */
|
|
6
|
+
section?: string | undefined;
|
|
7
|
+
/** what the page is, for the message: "API tokens" */
|
|
8
|
+
what: string;
|
|
9
|
+
/** where the role is granted; default the console home's members page */
|
|
10
|
+
manageHref?: string | undefined;
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
13
|
+
/**
|
|
14
|
+
* The common entity screen in one place: publishes its crumb (a name, never
|
|
15
|
+
* an id), keeps its section lit, and lays out header, strip and body.
|
|
16
|
+
*/
|
|
17
|
+
export declare function EntityScreen({ crumb, crumbHref, section, header, tabs, children }: {
|
|
18
|
+
crumb: ReactNode | undefined;
|
|
19
|
+
crumbHref?: string | undefined;
|
|
20
|
+
section?: string | undefined;
|
|
21
|
+
header: ReactNode;
|
|
22
|
+
tabs?: ReactNode | undefined;
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
}): import("react").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=Gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gate.d.ts","sourceRoot":"","sources":["../src/Gate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAazC,wBAAgB,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;IACtE,QAAQ,EAAE,QAAQ,CAAC;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAeA;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAClF,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAUA"}
|
package/dist/Gate.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Forbidden } from "@xeonr/platform-ui";
|
|
3
|
+
import { useConsole } from "./ConsoleProvider.js";
|
|
4
|
+
import { useShellConfig } from "./shellConfig.js";
|
|
5
|
+
import { useActiveSection } from "./screen.js";
|
|
6
|
+
import { useCrumb } from "./crumb.js";
|
|
7
|
+
import { satisfies } from "./scope.js";
|
|
8
|
+
// The route half of `requires`: the sidebar hides an item the caller may not
|
|
9
|
+
// use, and this keeps a deep link to it honest — the section stays lit and the
|
|
10
|
+
// page says which role it needs, instead of a silent redirect or a form the
|
|
11
|
+
// API will refuse. Same predicate as the sidebar (ConsoleShell `can`).
|
|
12
|
+
function roleWords(requires) {
|
|
13
|
+
if (requires === "org:admin")
|
|
14
|
+
return "an organisation administrator";
|
|
15
|
+
if (requires === "team:owner")
|
|
16
|
+
return "owner";
|
|
17
|
+
return requires;
|
|
18
|
+
}
|
|
19
|
+
export function Gate({ requires, section, what, manageHref, children }) {
|
|
20
|
+
const c = useConsole();
|
|
21
|
+
const cfg = useShellConfig();
|
|
22
|
+
const team = c.pageTeam ?? c.activeTeam;
|
|
23
|
+
const ok = satisfies(requires, team, c.me, cfg.can);
|
|
24
|
+
useActiveSection(ok ? undefined : section);
|
|
25
|
+
if (ok)
|
|
26
|
+
return _jsx(_Fragment, { children: children });
|
|
27
|
+
return (_jsx(Forbidden, { what: what, role: roleWords(requires), team: team?.name || team?.slug, manageHref: manageHref ?? (c.homeHref !== "/" ? `${c.homeHref}/members` : undefined) }));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The common entity screen in one place: publishes its crumb (a name, never
|
|
31
|
+
* an id), keeps its section lit, and lays out header, strip and body.
|
|
32
|
+
*/
|
|
33
|
+
export function EntityScreen({ crumb, crumbHref, section, header, tabs, children }) {
|
|
34
|
+
useCrumb(crumb, crumbHref);
|
|
35
|
+
useActiveSection(section);
|
|
36
|
+
return (_jsxs(_Fragment, { children: [header, tabs, _jsx("div", { style: { marginTop: 16 }, children: children })] }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=Gate.js.map
|
package/dist/Gate.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gate.js","sourceRoot":"","sources":["../src/Gate.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAc,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,6EAA6E;AAC7E,+EAA+E;AAC/E,4EAA4E;AAC5E,uEAAuE;AAEvE,SAAS,SAAS,CAAC,QAAkB;IACnC,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO,+BAA+B,CAAC;IACrE,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,OAAO,CAAC;IAC9C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EASnE;IACC,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC;IACxC,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACpD,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,EAAE;QAAE,OAAO,4BAAG,QAAQ,GAAI,CAAC;IAC/B,OAAO,CACL,KAAC,SAAS,IACR,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,EACzB,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAC9B,UAAU,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GACpF,CACH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAO/E;IACC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC3B,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,CACL,8BACG,MAAM,EACN,IAAI,EACL,cAAK,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAG,QAAQ,GAAO,IAC9C,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeCard.d.ts","sourceRoot":"","sources":["../src/ScopeCard.tsx"],"names":[],"mappings":"AAkIA,wBAAgB,SAAS,gCAiMxB;AAED,mFAAmF;AACnF,eAAO,MAAM,QAAQ,kBAAY,CAAC"}
|