@jeffusion/bungee-types 6.3.1 → 6.4.1

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/menus.d.ts CHANGED
@@ -17,7 +17,7 @@ export type MenuPageNode = {
17
17
  export type MenuGroupNode = {
18
18
  readonly kind: 'group';
19
19
  readonly id: string;
20
- /** Null is reserved for the translated default system group. */
20
+ /** Null uses the translated title of a predefined group. */
21
21
  readonly title: string | null;
22
22
  readonly visible: boolean;
23
23
  readonly icon?: string;
@@ -76,6 +76,48 @@ export type MenuIcons = {
76
76
  };
77
77
  export declare const MENU_MANAGEMENT_ID = "builtin:menus";
78
78
  export declare const SYSTEM_MENU_GROUP_ID = "group:system";
79
+ export declare const DEFAULT_MENU_GROUPS: readonly [{
80
+ readonly id: "group:gateway";
81
+ readonly label: "menus.groups.gateway";
82
+ readonly icon: "lucide:network";
83
+ readonly pages: readonly ["builtin:routes", "builtin:services"];
84
+ }, {
85
+ readonly id: "group:usage";
86
+ readonly label: "menus.groups.usage";
87
+ readonly icon: "lucide:chart-no-axes-combined";
88
+ readonly pages: readonly ["plugin:token-stats:%2Fstatistics", "plugin:token-budget:%2Fsettings"];
89
+ }, {
90
+ readonly id: "group:access";
91
+ readonly label: "menus.groups.access";
92
+ readonly icon: "lucide:shield-check";
93
+ readonly pages: readonly ["plugin:key-access:%2Fsettings", "plugin:user-auth:%2Fusers"];
94
+ }, {
95
+ readonly id: "group:system";
96
+ readonly label: "header.management";
97
+ readonly icon: "lucide:settings";
98
+ readonly pages: readonly ["builtin:configuration", "builtin:plugins", "builtin:menus", "plugin:user-auth:%2Fprofile"];
99
+ }];
100
+ export declare function defaultMenuGroup(id: string): {
101
+ readonly id: "group:gateway";
102
+ readonly label: "menus.groups.gateway";
103
+ readonly icon: "lucide:network";
104
+ readonly pages: readonly ["builtin:routes", "builtin:services"];
105
+ } | {
106
+ readonly id: "group:usage";
107
+ readonly label: "menus.groups.usage";
108
+ readonly icon: "lucide:chart-no-axes-combined";
109
+ readonly pages: readonly ["plugin:token-stats:%2Fstatistics", "plugin:token-budget:%2Fsettings"];
110
+ } | {
111
+ readonly id: "group:access";
112
+ readonly label: "menus.groups.access";
113
+ readonly icon: "lucide:shield-check";
114
+ readonly pages: readonly ["plugin:key-access:%2Fsettings", "plugin:user-auth:%2Fusers"];
115
+ } | {
116
+ readonly id: "group:system";
117
+ readonly label: "header.management";
118
+ readonly icon: "lucide:settings";
119
+ readonly pages: readonly ["builtin:configuration", "builtin:plugins", "builtin:menus", "plugin:user-auth:%2Fprofile"];
120
+ } | undefined;
79
121
  export declare const BUILTIN_MENU_PAGES: readonly MenuPage[];
80
122
  export declare function createDefaultMenuLayout(catalog: readonly MenuPage[]): MenuLayout;
81
123
  /** New contributions append without moving saved or temporarily unavailable pages. */
package/dist/menus.js CHANGED
@@ -1,5 +1,18 @@
1
1
  export const MENU_MANAGEMENT_ID = 'builtin:menus';
2
2
  export const SYSTEM_MENU_GROUP_ID = 'group:system';
3
+ export const DEFAULT_MENU_GROUPS = [
4
+ { id: 'group:gateway', label: 'menus.groups.gateway', icon: 'lucide:network',
5
+ pages: ['builtin:routes', 'builtin:services'] },
6
+ { id: 'group:usage', label: 'menus.groups.usage', icon: 'lucide:chart-no-axes-combined',
7
+ pages: ['plugin:token-stats:%2Fstatistics', 'plugin:token-budget:%2Fsettings'] },
8
+ { id: 'group:access', label: 'menus.groups.access', icon: 'lucide:shield-check',
9
+ pages: ['plugin:key-access:%2Fsettings', 'plugin:user-auth:%2Fusers'] },
10
+ { id: SYSTEM_MENU_GROUP_ID, label: 'header.management', icon: 'lucide:settings',
11
+ pages: ['builtin:configuration', 'builtin:plugins', MENU_MANAGEMENT_ID, 'plugin:user-auth:%2Fprofile'] },
12
+ ];
13
+ export function defaultMenuGroup(id) {
14
+ return DEFAULT_MENU_GROUPS.find(group => group.id === id);
15
+ }
3
16
  export const BUILTIN_MENU_PAGES = [
4
17
  { id: 'builtin:dashboard', label: 'nav.dashboard', href: '/#/', source: 'builtin', defaultIcon: 'lucide:layout-dashboard', available: true },
5
18
  { id: 'builtin:routes', label: 'nav.routes', href: '/#/routes', source: 'builtin', defaultIcon: 'lucide:route', available: true },
@@ -11,11 +24,21 @@ export const BUILTIN_MENU_PAGES = [
11
24
  ];
12
25
  export function createDefaultMenuLayout(catalog) {
13
26
  const page = (pageId) => ({ kind: 'page', pageId, visible: true });
27
+ const available = new Set(catalog.filter(item => item.available).map(item => item.id));
28
+ const group = (id) => ({ kind: 'group', id, title: null, visible: true,
29
+ children: defaultMenuGroup(id).pages.filter(pageId => available.has(pageId)).map(page) });
30
+ const layout = [
31
+ page('builtin:dashboard'),
32
+ group('group:gateway'),
33
+ group('group:usage'),
34
+ group('group:access'),
35
+ page('builtin:logs'),
36
+ group(SYSTEM_MENU_GROUP_ID),
37
+ ];
38
+ const seen = new Set(layout.flatMap(node => node.kind === 'page' ? [node.pageId] : node.children.map(child => child.pageId)));
14
39
  return [
15
- ...BUILTIN_MENU_PAGES.slice(0, 4).map(item => page(item.id)),
16
- ...catalog.filter(item => item.source === 'plugin' && item.available).map(item => page(item.id)),
17
- { kind: 'group', id: SYSTEM_MENU_GROUP_ID, title: null, visible: true,
18
- children: BUILTIN_MENU_PAGES.slice(4).map(item => page(item.id)) },
40
+ ...layout.filter(node => node.kind === 'group' ? node.children.length > 0 : available.has(node.pageId)),
41
+ ...catalog.filter(item => item.available && !seen.has(item.id)).map(item => page(item.id)),
19
42
  ];
20
43
  }
21
44
  /** New contributions append without moving saved or temporarily unavailable pages. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jeffusion/bungee-types",
3
- "version": "6.3.1",
3
+ "version": "6.4.1",
4
4
  "description": "TypeScript type definitions for Bungee",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",