@xeonr/console-shell 0.4.2 → 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.
Files changed (85) hide show
  1. package/dist/CommandPalette.d.ts +3 -2
  2. package/dist/CommandPalette.d.ts.map +1 -1
  3. package/dist/CommandPalette.js +78 -10
  4. package/dist/CommandPalette.js.map +1 -1
  5. package/dist/ConsoleProvider.d.ts +39 -4
  6. package/dist/ConsoleProvider.d.ts.map +1 -1
  7. package/dist/ConsoleProvider.js +19 -3
  8. package/dist/ConsoleProvider.js.map +1 -1
  9. package/dist/ConsoleShell.d.ts +63 -3
  10. package/dist/ConsoleShell.d.ts.map +1 -1
  11. package/dist/ConsoleShell.js +142 -8
  12. package/dist/ConsoleShell.js.map +1 -1
  13. package/dist/ContextRow.d.ts +2 -0
  14. package/dist/ContextRow.d.ts.map +1 -0
  15. package/dist/ContextRow.js +235 -0
  16. package/dist/ContextRow.js.map +1 -0
  17. package/dist/Gate.d.ts +25 -0
  18. package/dist/Gate.d.ts.map +1 -0
  19. package/dist/Gate.js +38 -0
  20. package/dist/Gate.js.map +1 -0
  21. package/dist/ScopeCard.d.ts +4 -0
  22. package/dist/ScopeCard.d.ts.map +1 -0
  23. package/dist/ScopeCard.js +228 -0
  24. package/dist/ScopeCard.js.map +1 -0
  25. package/dist/ScopeRail.d.ts.map +1 -1
  26. package/dist/ScopeRail.js +42 -1
  27. package/dist/ScopeRail.js.map +1 -1
  28. package/dist/SectionSidebar.d.ts +6 -4
  29. package/dist/SectionSidebar.d.ts.map +1 -1
  30. package/dist/SectionSidebar.js +68 -23
  31. package/dist/SectionSidebar.js.map +1 -1
  32. package/dist/TopBar.d.ts.map +1 -1
  33. package/dist/TopBar.js +16 -2
  34. package/dist/TopBar.js.map +1 -1
  35. package/dist/context.d.ts +82 -0
  36. package/dist/context.d.ts.map +1 -0
  37. package/dist/context.js +65 -0
  38. package/dist/context.js.map +1 -0
  39. package/dist/crumb.d.ts +9 -0
  40. package/dist/crumb.d.ts.map +1 -1
  41. package/dist/crumb.js +20 -2
  42. package/dist/crumb.js.map +1 -1
  43. package/dist/crumbs.d.ts +19 -0
  44. package/dist/crumbs.d.ts.map +1 -0
  45. package/dist/crumbs.js +43 -0
  46. package/dist/crumbs.js.map +1 -0
  47. package/dist/index.d.ts +10 -2
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +10 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/links.d.ts +5 -4
  52. package/dist/links.d.ts.map +1 -1
  53. package/dist/links.js +5 -15
  54. package/dist/links.js.map +1 -1
  55. package/dist/nav.d.ts +66 -4
  56. package/dist/nav.d.ts.map +1 -1
  57. package/dist/nav.js +99 -2
  58. package/dist/nav.js.map +1 -1
  59. package/dist/origin.d.ts +2 -0
  60. package/dist/origin.d.ts.map +1 -0
  61. package/dist/origin.js +14 -0
  62. package/dist/origin.js.map +1 -0
  63. package/dist/place.d.ts +26 -0
  64. package/dist/place.d.ts.map +1 -0
  65. package/dist/place.js +53 -0
  66. package/dist/place.js.map +1 -0
  67. package/dist/scope.d.ts +35 -0
  68. package/dist/scope.d.ts.map +1 -0
  69. package/dist/scope.js +42 -0
  70. package/dist/scope.js.map +1 -0
  71. package/dist/screen.d.ts +38 -0
  72. package/dist/screen.d.ts.map +1 -0
  73. package/dist/screen.js +79 -0
  74. package/dist/screen.js.map +1 -0
  75. package/dist/shellConfig.d.ts +50 -0
  76. package/dist/shellConfig.d.ts.map +1 -0
  77. package/dist/shellConfig.js +24 -0
  78. package/dist/shellConfig.js.map +1 -0
  79. package/dist/types.d.ts +3 -1
  80. package/dist/types.d.ts.map +1 -1
  81. package/package.json +6 -4
  82. package/dist/TeamCard.d.ts +0 -5
  83. package/dist/TeamCard.d.ts.map +0 -1
  84. package/dist/TeamCard.js +0 -152
  85. package/dist/TeamCard.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TopBar.js","sourceRoot":"","sources":["../src/TopBar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TopBar.js","sourceRoot":"","sources":["../src/TopBar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import type { NavGroup, NavItem, Requires } from "./nav.ts";
2
+ export interface ContextItem {
3
+ id: string;
4
+ label: string;
5
+ /** a muted second line in the popover (a slug, an owner) */
6
+ sub?: string | undefined;
7
+ icon?: string | undefined;
8
+ avatarUrl?: string | undefined;
9
+ count?: number | string | undefined;
10
+ /** the context's root route, e.g. "/upl-im" or "/platform/01J8K…" */
11
+ href: string;
12
+ disabled?: boolean | undefined;
13
+ disabledReason?: string | undefined;
14
+ }
15
+ export interface NavContext {
16
+ /** "namespace" | "project" | "application" | … — keys Recent in storage */
17
+ kind: string;
18
+ /** the row's kicker and the empty state's noun: "Namespace" */
19
+ label: string;
20
+ /** "namespaces", for "All namespaces" and the search placeholder */
21
+ plural: string;
22
+ icon: string;
23
+ /** the list, or a first page when `search` is async */
24
+ items: ContextItem[];
25
+ /** the current item's id; null reads "Choose a <label>" */
26
+ current: string | null;
27
+ /** keep the row on a skeleton (the list, or the current item, is still loading) */
28
+ loading?: boolean | undefined;
29
+ /** ids floated to the top of the popover, e.g. auth's pinned applications */
30
+ pinned?: string[] | undefined;
31
+ /** search beyond `items` (an unbounded directory) */
32
+ search?: ((q: string) => Promise<ContextItem[]>) | undefined;
33
+ /** footer row: the list page, e.g. "All projects" / "Manage namespaces" */
34
+ all?: {
35
+ label: string;
36
+ href: string;
37
+ requires?: Requires | undefined;
38
+ } | undefined;
39
+ /** footer row: create one */
40
+ create?: {
41
+ label: string;
42
+ href?: string | undefined;
43
+ onClick?: (() => void) | undefined;
44
+ requires?: Requires | undefined;
45
+ } | undefined;
46
+ /** where picking `item` lands; default keeps the current section (contextHref) */
47
+ hrefFor?: ((item: ContextItem, place: {
48
+ sectionPath?: string | undefined;
49
+ }) => string) | undefined;
50
+ }
51
+ /** What the row shows: an item, a pending skeleton, or the empty state. */
52
+ export type CurrentContext = {
53
+ state: "item";
54
+ item: ContextItem;
55
+ } | {
56
+ state: "pending";
57
+ } | {
58
+ state: "none";
59
+ };
60
+ /**
61
+ * `published` is what a screen said through useActiveContext: an id, a whole
62
+ * item (for a context not in the list, e.g. an org-visible project), or
63
+ * "pending" (the screen is mounted but its data has not arrived).
64
+ */
65
+ export declare function currentContext(ctx: NavContext, published?: string | ContextItem | "pending" | undefined): CurrentContext;
66
+ /**
67
+ * The current section's path relative to the context root, or undefined when
68
+ * it does not belong to the context (an `ofScope` group, or nothing lit).
69
+ */
70
+ export declare function sectionPathOf(groups: NavGroup[], active: NavItem | undefined, current: ContextItem | undefined): string | undefined;
71
+ /** The default landing for picking `item`: the same section under it, else its root. */
72
+ export declare function contextHref(item: ContextItem, sectionPath: string | undefined): string;
73
+ /** Recent ids, most recent first, capped. */
74
+ export declare function pushRecent(recent: string[], id: string, cap?: number): string[];
75
+ /** Popover sections: pinned, recent, then the rest — no item twice. */
76
+ export declare function orderItems(items: ContextItem[], pinned?: string[], recent?: string[]): {
77
+ pinned: ContextItem[];
78
+ recent: ContextItem[];
79
+ all: ContextItem[];
80
+ };
81
+ export declare function filterItems(items: ContextItem[], q: string): ContextItem[];
82
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * `published` is what a screen said through useActiveContext: an id, a whole
3
+ * item (for a context not in the list, e.g. an org-visible project), or
4
+ * "pending" (the screen is mounted but its data has not arrived).
5
+ */
6
+ export function currentContext(ctx, published) {
7
+ if (published === "pending")
8
+ return { state: "pending" };
9
+ if (published !== undefined && typeof published !== "string")
10
+ return { state: "item", item: published };
11
+ const id = published ?? ctx.current;
12
+ if (id === null)
13
+ return ctx.loading ? { state: "pending" } : { state: "none" };
14
+ const item = ctx.items.find((i) => i.id === id);
15
+ if (item)
16
+ return { state: "item", item };
17
+ // The URL names a context the list has not delivered yet (a cold deep link):
18
+ // a skeleton, never "Choose a …" and never a flash of the wrong one.
19
+ return ctx.loading ? { state: "pending" } : { state: "item", item: { id, label: id, href: "" } };
20
+ }
21
+ /**
22
+ * The current section's path relative to the context root, or undefined when
23
+ * it does not belong to the context (an `ofScope` group, or nothing lit).
24
+ */
25
+ export function sectionPathOf(groups, active, current) {
26
+ if (!active)
27
+ return undefined;
28
+ const group = groups.find((g) => g.items.includes(active));
29
+ if (group?.ofScope)
30
+ return undefined;
31
+ if (active.to !== undefined) {
32
+ const root = current?.href.replace(/\/+$/, "");
33
+ if (!root || !active.to.startsWith(`${root}/`))
34
+ return undefined;
35
+ return active.to.slice(root.length + 1);
36
+ }
37
+ if (active.href !== undefined)
38
+ return undefined;
39
+ return active.path;
40
+ }
41
+ /** The default landing for picking `item`: the same section under it, else its root. */
42
+ export function contextHref(item, sectionPath) {
43
+ const root = item.href.replace(/\/+$/, "");
44
+ return sectionPath ? `${root}/${sectionPath}` : item.href;
45
+ }
46
+ /** Recent ids, most recent first, capped. */
47
+ export function pushRecent(recent, id, cap = 3) {
48
+ return [id, ...recent.filter((r) => r !== id)].slice(0, cap);
49
+ }
50
+ /** Popover sections: pinned, recent, then the rest — no item twice. */
51
+ export function orderItems(items, pinned = [], recent = []) {
52
+ const byId = new Map(items.map((i) => [i.id, i]));
53
+ const p = pinned.map((id) => byId.get(id)).filter((i) => !!i);
54
+ const seen = new Set(p.map((i) => i.id));
55
+ const r = recent.filter((id) => !seen.has(id)).map((id) => byId.get(id)).filter((i) => !!i);
56
+ r.forEach((i) => seen.add(i.id));
57
+ return { pinned: p, recent: r, all: items.filter((i) => !seen.has(i.id)) };
58
+ }
59
+ export function filterItems(items, q) {
60
+ const needle = q.trim().toLowerCase();
61
+ if (!needle)
62
+ return items;
63
+ return items.filter((i) => i.label.toLowerCase().includes(needle) || i.sub?.toLowerCase().includes(needle) || i.id.toLowerCase().includes(needle));
64
+ }
65
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/dist/crumb.d.ts CHANGED
@@ -6,6 +6,15 @@ import type { Crumb } from "./TopBar.tsx";
6
6
  * a test, a storybook — without a provider.
7
7
  */
8
8
  export declare function useCrumb(label: ReactNode | undefined, href?: string | undefined): void;
9
+ /**
10
+ * Publish an ordered chain of crumbs for the current screen — a child route's
11
+ * parents (strata: Projects › Xeonr Auth › prod). Undefined publishes nothing,
12
+ * which is what a screen does while its data loads.
13
+ */
14
+ export declare function useCrumbs(crumbs: Array<{
15
+ label: ReactNode;
16
+ href?: string | undefined;
17
+ }> | undefined): void;
9
18
  /** Wraps the shell's children; `published` is what the screens have set. */
10
19
  export declare function CrumbProvider({ children }: {
11
20
  children: (published: Crumb[]) => ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"crumb.d.ts","sourceRoot":"","sources":["../src/crumb.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAuB1C;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAUtF;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,SAAS,CAAA;CAAE,+BA4B1F"}
1
+ {"version":3,"file":"crumb.d.ts","sourceRoot":"","sources":["../src/crumb.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAuB1C;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAUtF;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,GAAG,SAAS,GAAG,IAAI,CAW1G;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,SAAS,CAAA;CAAE,+BA4B1F"}
package/dist/crumb.js CHANGED
@@ -18,6 +18,24 @@ export function useCrumb(label, href) {
18
18
  return () => sink.clear(id);
19
19
  }, [sink, id, label, href]);
20
20
  }
21
+ /**
22
+ * Publish an ordered chain of crumbs for the current screen — a child route's
23
+ * parents (strata: Projects › Xeonr Auth › prod). Undefined publishes nothing,
24
+ * which is what a screen does while its data loads.
25
+ */
26
+ export function useCrumbs(crumbs) {
27
+ const sink = useContext(SinkContext);
28
+ const id = useId();
29
+ const key = crumbs ? JSON.stringify(crumbs.map((c) => [String(c.label), c.href ?? null])) : "";
30
+ useEffect(() => {
31
+ if (!sink)
32
+ return;
33
+ sink.set(id, crumbs && crumbs.length ? crumbs.map((c) => ({ label: c.label, ...(c.href !== undefined ? { href: c.href } : {}) })) : undefined);
34
+ return () => sink.clear(id);
35
+ // keyed by value: an inline array must not re-publish every render
36
+ // eslint-disable-next-line react-hooks/exhaustive-deps
37
+ }, [sink, id, key]);
38
+ }
21
39
  /** Wraps the shell's children; `published` is what the screens have set. */
22
40
  export function CrumbProvider({ children }) {
23
41
  const [map, setMap] = useState({});
@@ -26,7 +44,7 @@ export function CrumbProvider({ children }) {
26
44
  const [order, setOrder] = useState([]);
27
45
  const sink = useMemo(() => ({
28
46
  set: (id, crumb) => {
29
- setMap((m) => (m[id] === crumb ? m : { ...m, [id]: crumb }));
47
+ setMap((m) => (m[id] === crumb || (Array.isArray(crumb) && JSON.stringify(m[id]) === JSON.stringify(crumb)) ? m : { ...m, [id]: crumb }));
30
48
  setOrder((o) => (o.includes(id) ? o : [...o, id]));
31
49
  },
32
50
  clear: (id) => {
@@ -40,7 +58,7 @@ export function CrumbProvider({ children }) {
40
58
  setOrder((o) => (o.includes(id) ? o.filter((x) => x !== id) : o));
41
59
  },
42
60
  }), []);
43
- const published = useMemo(() => order.map((id) => map[id]).filter((c) => !!c), [order, map]);
61
+ const published = useMemo(() => order.flatMap((id) => { const v = map[id]; return v === undefined ? [] : Array.isArray(v) ? v : [v]; }), [order, map]);
44
62
  return _jsx(SinkContext.Provider, { value: sink, children: children(published) });
45
63
  }
46
64
  //# sourceMappingURL=crumb.js.map
package/dist/crumb.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"crumb.js","sourceRoot":"","sources":["../src/crumb.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAsBvG,MAAM,WAAW,GAAG,aAAa,CAAmB,IAAI,CAAC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAA4B,EAAE,IAAyB;IAC9E,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;YAChE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,EAAE,KAAK,EAAE,KAAe,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAmD;IACzF,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAoC,EAAE,CAAC,CAAC;IACtE,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IAEjD,MAAM,IAAI,GAAG,OAAO,CAAY,GAAG,EAAE,CAAC,CAAC;QACrC,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;YACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7D,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE;YACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACX,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAC;gBACzB,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;KACF,CAAC,EAAE,EAAE,CAAC,CAAC;IAER,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/D,CAAC,KAAK,EAAE,GAAG,CAAC,CACb,CAAC;IAEF,OAAO,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,YAAG,QAAQ,CAAC,SAAS,CAAC,GAAwB,CAAC;AACzF,CAAC"}
1
+ {"version":3,"file":"crumb.js","sourceRoot":"","sources":["../src/crumb.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Crumb } from "./TopBar.tsx";
2
+ export interface CrumbInputs {
3
+ scope?: Crumb | undefined;
4
+ product: Crumb;
5
+ context?: Crumb | undefined;
6
+ section?: (Crumb & {
7
+ index?: boolean | undefined;
8
+ }) | undefined;
9
+ layout?: Crumb[] | undefined;
10
+ published?: Crumb[] | undefined;
11
+ }
12
+ export declare function deriveCrumbs({ scope, product, context, section, layout, published }: CrumbInputs): Crumb[];
13
+ /** Long trails keep the first crumb and the last `keep`; the rest fold into "…". */
14
+ export declare function foldCrumbs(crumbs: Crumb[], max?: number, keep?: number): {
15
+ visible: Crumb[];
16
+ folded: Crumb[];
17
+ at: number;
18
+ };
19
+ //# sourceMappingURL=crumbs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crumbs.d.ts","sourceRoot":"","sources":["../src/crumbs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAgB1C,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;IAChE,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;CACjC;AAID,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAW,EAAE,SAAc,EAAE,EAAE,WAAW,GAAG,KAAK,EAAE,CA+BpH;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,SAAI,EAAE,IAAI,SAAI,GAAG;IAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAGhH"}
package/dist/crumbs.js ADDED
@@ -0,0 +1,43 @@
1
+ const norm = (s) => s.trim().toLowerCase();
2
+ export function deriveCrumbs({ scope, product, context, section, layout = [], published = [] }) {
3
+ const tail = [...layout, ...published].filter((c) => c.label !== "");
4
+ let sec = section;
5
+ if (sec && tail.some((c) => norm(c.label) === norm(sec.label)))
6
+ sec = undefined;
7
+ if (sec?.index && tail.length === 0)
8
+ sec = undefined;
9
+ const head = [];
10
+ if (scope)
11
+ head.push(scope);
12
+ head.push(product);
13
+ const fixed = head.length; // scope and product are always rendered
14
+ const trail = [...head];
15
+ if (context)
16
+ trail.push(context);
17
+ if (sec)
18
+ trail.push({ label: sec.label, ...(sec.href !== undefined ? { href: sec.href } : {}) });
19
+ trail.push(...tail);
20
+ const out = [];
21
+ for (const c of trail) {
22
+ const prev = out[out.length - 1];
23
+ const i = out.length; // index c would take
24
+ if (prev && norm(prev.label) === norm(c.label) && i - 1 >= (scope ? 1 : 0)) {
25
+ // merge: one crumb, the later (more specific) href
26
+ out[out.length - 1] = { label: prev.label, ...(c.href ?? prev.href ? { href: c.href ?? prev.href } : {}) };
27
+ continue;
28
+ }
29
+ if (prev && i - 1 >= fixed && prev.href !== undefined && prev.href === c.href) {
30
+ out[out.length - 1] = c;
31
+ continue;
32
+ }
33
+ out.push(c);
34
+ }
35
+ return out;
36
+ }
37
+ /** Long trails keep the first crumb and the last `keep`; the rest fold into "…". */
38
+ export function foldCrumbs(crumbs, max = 5, keep = 3) {
39
+ if (crumbs.length <= max)
40
+ return { visible: crumbs, folded: [], at: -1 };
41
+ return { visible: [crumbs[0], ...crumbs.slice(-keep)], folded: crumbs.slice(1, -keep), at: 1 };
42
+ }
43
+ //# sourceMappingURL=crumbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crumbs.js","sourceRoot":"","sources":["../src/crumbs.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,8 +3,16 @@ export { ConsoleShell, type ConsoleShellProps } from "./ConsoleShell.tsx";
3
3
  export { connectConsoleClient, mockConsoleClient, type ConnectConsoleClientOptions, type MockFixtures } from "./client.ts";
4
4
  export { ShellLink, isSameOrigin } from "./links.tsx";
5
5
  export type { AccountMenuConfig, ConsoleAccount } from "./AccountMenu.tsx";
6
- export { sectionFor, type NavGroup, type NavItem } from "./nav.ts";
6
+ export { sectionFor, resolveActive, itemTarget, isLegacySwitcher, type NavGroup, type NavItem, type Requires, type ItemKind } from "./nav.ts";
7
7
  export type { Crumb } from "./TopBar.tsx";
8
- export { useCrumb } from "./crumb.tsx";
8
+ export { useCrumb, useCrumbs } from "./crumb.tsx";
9
+ export { deriveCrumbs, foldCrumbs, type CrumbInputs } from "./crumbs.ts";
9
10
  export type * from "./types.ts";
11
+ export { ScopeCard, TeamCard } from "./ScopeCard.tsx";
12
+ export { satisfies, shellSatisfies, availableScopes, scopeHref, type ScopeEntry, type ScopeMap, type Can } from "./scope.ts";
13
+ export { useActiveSection, useActiveContext, useScope, useActiveTeam, type ScreenTeam } from "./screen.tsx";
14
+ export { currentContext, contextHref, sectionPathOf, type ContextItem, type NavContext, type CurrentContext } from "./context.ts";
15
+ export { useShellLink } from "./shellConfig.tsx";
16
+ export { swapTeamBase, pickSearch, withCarry, joinPath, type Place } from "./place.ts";
17
+ export { Gate, EntityScreen } from "./Gate.tsx";
10
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC/I,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,KAAK,2BAA2B,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3H,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AACnE,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,mBAAmB,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC/I,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,KAAK,2BAA2B,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3H,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9I,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACzE,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAC7H,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC5G,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAClI,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -3,6 +3,14 @@ export { ConsoleProvider, useConsole, useConsoleMaybe, MAX_PINNED } from "./Cons
3
3
  export { ConsoleShell } from "./ConsoleShell.js";
4
4
  export { connectConsoleClient, mockConsoleClient } from "./client.js";
5
5
  export { ShellLink, isSameOrigin } from "./links.js";
6
- export { sectionFor } from "./nav.js";
7
- export { useCrumb } from "./crumb.js";
6
+ export { sectionFor, resolveActive, itemTarget, isLegacySwitcher } from "./nav.js";
7
+ export { useCrumb, useCrumbs } from "./crumb.js";
8
+ export { deriveCrumbs, foldCrumbs } from "./crumbs.js";
9
+ export { ScopeCard, TeamCard } from "./ScopeCard.js";
10
+ export { satisfies, shellSatisfies, availableScopes, scopeHref } from "./scope.js";
11
+ export { useActiveSection, useActiveContext, useScope, useActiveTeam } from "./screen.js";
12
+ export { currentContext, contextHref, sectionPathOf } from "./context.js";
13
+ export { useShellLink } from "./shellConfig.js";
14
+ export { swapTeamBase, pickSearch, withCarry, joinPath } from "./place.js";
15
+ export { Gate, EntityScreen } from "./Gate.js";
8
16
  //# 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,qEAAqE;AACrE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAgD,MAAM,sBAAuB,CAAC;AAC/I,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAoB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAuD,MAAM,aAAa,CAAC;AAC3H,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAa,CAAC;AAEtD,OAAO,EAAE,UAAU,EAA+B,MAAM,UAAU,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAgD,MAAM,sBAAuB,CAAC;AAC/I,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAoB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAuD,MAAM,aAAa,CAAC;AAC3H,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAa,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAA6D,MAAM,UAAU,CAAC;AAE9I,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAiB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAA4C,MAAM,YAAY,CAAC;AAC7H,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAmB,MAAM,aAAc,CAAC;AAC5G,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAA0D,MAAM,cAAc,CAAC;AAClI,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,WAAY,CAAC"}
package/dist/links.d.ts CHANGED
@@ -1,15 +1,16 @@
1
- import type { ReactNode } from "react";
2
- export declare function isSameOrigin(href: string): boolean;
1
+ import type { AnchorHTMLAttributes, ReactNode } from "react";
2
+ import { isSameOrigin } from "./origin.ts";
3
+ export { isSameOrigin };
3
4
  /**
4
5
  * One link that is a router link when it stays on this origin and an <a> when
5
6
  * it leaves. `mark` is rendered only in the external case, so the external
6
7
  * arrow disappears by itself on the auth portal.
7
8
  */
8
- export declare function ShellLink({ href, className, onClick, mark, children, }: {
9
+ export declare function ShellLink({ href, className, onClick, mark, children, ...rest }: {
9
10
  href: string;
10
11
  className?: string | undefined;
11
12
  onClick?: (() => void) | undefined;
12
13
  mark?: ReactNode | undefined;
13
14
  children: ReactNode;
14
- }): import("react").JSX.Element;
15
+ } & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "href" | "className" | "onClick" | "children">): import("react").JSX.Element;
15
16
  //# sourceMappingURL=links.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../src/links.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,SAAS,EACT,OAAO,EACP,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAcA"}
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../src/links.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,CAAC;AASxB;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,SAAS,EACT,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,GAAG,IAAI,EACR,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC,+BAc/F"}
package/dist/links.js CHANGED
@@ -1,32 +1,22 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Link } from "react-router-dom";
3
+ import { isSameOrigin } from "./origin.js";
4
+ export { isSameOrigin };
3
5
  // The shell links out to the auth portal for identity and team management
4
6
  // (`authOrigin`). On every product console that is another host, so the link is
5
7
  // a plain <a> with the external mark. On the auth portal itself it is the
6
8
  // *current* host — the portal mounts the shell with authOrigin="" — and the
7
9
  // same link must be an in-router navigation with no external mark. isSameOrigin
8
10
  // decides that once, so no caller has to special-case the portal.
9
- export function isSameOrigin(href) {
10
- if (!/^[a-z][a-z0-9+.-]*:|^\/\//i.test(href))
11
- return true; // relative
12
- if (typeof window === "undefined")
13
- return false;
14
- try {
15
- return new URL(href, window.location.href).origin === window.location.origin;
16
- }
17
- catch {
18
- return false;
19
- }
20
- }
21
11
  /**
22
12
  * One link that is a router link when it stays on this origin and an <a> when
23
13
  * it leaves. `mark` is rendered only in the external case, so the external
24
14
  * arrow disappears by itself on the auth portal.
25
15
  */
26
- export function ShellLink({ href, className, onClick, mark, children, }) {
16
+ export function ShellLink({ href, className, onClick, mark, children, ...rest }) {
27
17
  if (isSameOrigin(href)) {
28
- return (_jsx(Link, { to: href, className: className, onClick: onClick, children: children }));
18
+ return (_jsx(Link, { to: href, className: className, onClick: onClick, ...rest, children: children }));
29
19
  }
30
- return (_jsxs("a", { href: href, className: className, onClick: onClick, children: [children, mark] }));
20
+ return (_jsxs("a", { href: href, className: className, onClick: onClick, ...rest, children: [children, mark] }));
31
21
  }
32
22
  //# sourceMappingURL=links.js.map
package/dist/links.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"links.js","sourceRoot":"","sources":["../src/links.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,0EAA0E;AAC1E,gFAAgF;AAChF,0EAA0E;AAC1E,4EAA4E;AAC5E,gFAAgF;AAChF,kEAAkE;AAElE,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,WAAW;IACtE,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,SAAS,EACT,OAAO,EACP,IAAI,EACJ,QAAQ,GAOT;IACC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,CACL,KAAC,IAAI,IAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,YACnD,QAAQ,GACJ,CACR,CAAC;IACJ,CAAC;IACD,OAAO,CACL,aAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,aAClD,QAAQ,EACR,IAAI,IACH,CACL,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"links.js","sourceRoot":"","sources":["../src/links.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB,0EAA0E;AAC1E,gFAAgF;AAChF,0EAA0E;AAC1E,4EAA4E;AAC5E,gFAAgF;AAChF,kEAAkE;AAElE;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,SAAS,EACT,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,GAAG,IAAI,EAOuF;IAC9F,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,CACL,KAAC,IAAI,IAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,KAAM,IAAI,YAC7D,QAAQ,GACJ,CACR,CAAC;IACJ,CAAC;IACD,OAAO,CACL,aAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,KAAM,IAAI,aAC5D,QAAQ,EACR,IAAI,IACH,CACL,CAAC;AACJ,CAAC"}
package/dist/nav.d.ts CHANGED
@@ -1,22 +1,84 @@
1
+ /**
2
+ * What an item or group needs before it is shown. The built-ins are
3
+ * namespaced; any other string is a team-typed application role
4
+ * (`team.roles.includes(s)`) unless the product's `can` predicate says
5
+ * otherwise. Evaluated by the shell from 0.5 (ScopeCard / `can`).
6
+ */
7
+ export type Requires = "team:owner" | "org:admin" | (string & {});
1
8
  export interface NavItem {
2
9
  key: string;
3
10
  label: string;
4
11
  icon: string;
5
- /** path relative to the product's team root — "" is the overview index */
12
+ /** path relative to `base` — "" is the index (always exact) */
6
13
  path: string;
7
14
  /** rendered as a count pill when the product knows it */
8
15
  count?: number | string | undefined;
9
- /** opens on another host (e.g. members → auth portal); rendered with an external mark */
16
+ /** looked up in ConsoleShell's `counts` map (0.5) when `count` is absent */
17
+ countKey?: string | undefined;
18
+ /** "attention" tints the pill: work waiting on the person, never an inventory size */
19
+ tone?: "quiet" | "attention" | undefined;
20
+ /**
21
+ * Another route base. A same-origin href is a router link with no external
22
+ * mark (0.5; before, it needed `internal`); another origin gets the mark.
23
+ */
10
24
  href?: string | undefined;
11
- /** an href on this origin that changes the route base (a namespace or project switch): rendered as a router link, no external mark */
25
+ /** @deprecated a same-origin `href` is internal on its own from 0.5; use `to` */
12
26
  internal?: boolean | undefined;
13
- /** force the active state (a switcher item for the current scope) */
27
+ /** force the external mark and a document navigation on a same-origin href */
28
+ external?: boolean | undefined;
29
+ /** absolute same-origin router path, e.g. "/activity" (0.5) */
30
+ to?: string | undefined;
31
+ /**
32
+ * Routes that also belong to this section although they are not under its
33
+ * path: react-router patterns relative to `base` ("trace/:id", "t/:name"),
34
+ * or a predicate over the path relative to base. The longest match wins.
35
+ */
36
+ match?: string | string[] | ((relPath: string) => boolean) | undefined;
37
+ /** match the item's own path exactly, never as a prefix */
38
+ exact?: boolean | undefined;
39
+ /** force the active state; honoured on every kind of item from 0.5 */
14
40
  active?: boolean | undefined;
15
41
  hidden?: boolean | undefined;
42
+ /** shown only when satisfied (evaluated by the shell, 0.5) */
43
+ requires?: Requires | undefined;
44
+ /** the section crumb's label; null suppresses the section crumb */
45
+ crumb?: string | null | undefined;
16
46
  }
17
47
  export interface NavGroup {
18
48
  label?: string | undefined;
19
49
  items: NavItem[];
50
+ /** gate the whole group */
51
+ requires?: Requires | undefined;
52
+ /** belongs to the scope above the context: its items keep the context row as it is */
53
+ ofScope?: boolean | undefined;
54
+ /** a disclosure header, closed by default, open when it holds the resolved item */
55
+ collapsible?: boolean | undefined;
20
56
  }
57
+ /** How the sidebar renders an item. */
58
+ export type ItemKind = "route" | "external";
59
+ /**
60
+ * A 0.4 switcher row: `href` + `internal`, whose highlight the product computes
61
+ * and passes as `active`. It keeps rendering its own flag and is left out of
62
+ * resolution, so a console that has not migrated (auth's scope picker, forest's
63
+ * project rows) looks exactly as it did before the bump.
64
+ */
65
+ export declare function isLegacySwitcher(item: NavItem): boolean;
66
+ /** The item's destination and whether it stays in the router. */
67
+ export declare function itemTarget(item: NavItem, base: string): {
68
+ href: string;
69
+ kind: ItemKind;
70
+ };
71
+ /**
72
+ * The one answer to "which section am I in". Order: a screen's override (by
73
+ * key) > `active` > the longest matching `match` pattern or path prefix. An
74
+ * item is exact — never a prefix — when it is the index (`path: ""`), when it
75
+ * says `exact`, or when its target is a prefix of a sibling's (so trail's
76
+ * project Overview stops lighting on every project page). External items are
77
+ * never resolved, nor are 0.4 switcher rows (isLegacySwitcher). Hidden items
78
+ * are resolved too: a screen whose item is hidden from the sidebar still names
79
+ * its section in the crumb. On a tie a section (`path`/`to`) beats an `href`.
80
+ */
81
+ export declare function resolveActive(groups: NavGroup[], pathname: string, base: string, override?: string | undefined): NavItem | undefined;
82
+ /** @deprecated use resolveActive, which also honours `to`, `match`, `exact` and `active` */
21
83
  export declare function sectionFor(groups: NavGroup[], relPath: string): NavItem | undefined;
22
84
  //# sourceMappingURL=nav.d.ts.map
package/dist/nav.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../src/nav.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,sIAAsI;IACtI,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAInF"}
1
+ {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../src/nav.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElE,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,sFAAsF;IACtF,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;IACzC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,+DAA+D;IAC/D,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACvE,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,mFAAmF;IACnF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACnC;AAED,uCAAuC;AACvC,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAEvD;AAQD,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAOxF;AAgBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,QAAQ,EAAE,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,GAAG,SAAS,CA8CrB;AAED,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAInF"}