@opencxh/domain 1.196.0 → 1.198.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.
@@ -37,6 +37,21 @@ export type ResourceDefinition<T = any> = T;
37
37
  * It defines the app's identity, its components, its UI contributions,
38
38
  * and most importantly, its security sandbox via the permissions block.
39
39
  */
40
+ /** The two groups of the app switcher: the product itself, and what extends it. */
41
+ export type AppSwitcherGroup = "core" | "apps";
42
+ /**
43
+ * Where an app sits in the shell's app switcher. Declaring this — not having an
44
+ * `icon` — is what puts an app in the switcher; settings-only and provider apps
45
+ * leave it out and stay reachable through settings, panels and docks.
46
+ */
47
+ export interface AppSwitcherPlacement {
48
+ /** `core` is reserved for first-party product apps; everything else is `apps`. */
49
+ group: AppSwitcherGroup;
50
+ /** Position within `core` — a fixed reading order, not alphabetical. Ignored for `apps`. */
51
+ order?: number;
52
+ /** Also offer the app in the mobile tab bar. Core apps are there by default. */
53
+ mobile?: boolean;
54
+ }
40
55
  export interface AppManifest<_TSDK = any> {
41
56
  /**
42
57
  * The namespace of the application.
@@ -63,9 +78,12 @@ export interface AppManifest<_TSDK = any> {
63
78
  */
64
79
  description?: string;
65
80
  /**
66
- * Optional icon for the application.
81
+ * Optional icon for the application. Shown wherever the app is listed; on its own
82
+ * it does not place the app in the switcher — see `switcher`.
67
83
  */
68
84
  icon?: IconDefinition;
85
+ /** Placement in the app switcher and the mobile tab bar. Absent = not listed. */
86
+ switcher?: AppSwitcherPlacement;
69
87
  /**
70
88
  * Optional default route for the application.
71
89
  */
@@ -72,6 +72,14 @@ export interface DockControls {
72
72
  * Which settings-panel tab a page appears under. A page may belong to both.
73
73
  */
74
74
  export type SettingsScope = "personal" | "company";
75
+ /**
76
+ * The heading a settings page sits under. The overlay groups on this, not on the
77
+ * app that registered the page, so a mailbox, a PBX and an MCP server all land
78
+ * under "connections" whichever app owns them.
79
+ */
80
+ export type SettingsCategory = "personal" | "workspace" | "connections" | "work" | "ai";
81
+ /** Reading order of the categories in the settings nav. */
82
+ export declare const SETTINGS_CATEGORIES: readonly SettingsCategory[];
75
83
  export interface SettingsPageConfig {
76
84
  id: string;
77
85
  displayName: string;
@@ -86,6 +94,12 @@ export interface SettingsPageConfig {
86
94
  * the group itself.
87
95
  */
88
96
  group?: string;
97
+ /**
98
+ * Heading in the settings nav. Absent = `personal` for a personal-only page,
99
+ * otherwise `workspace`; declare it, the fallback is only there for apps
100
+ * that have not caught up.
101
+ */
102
+ category?: SettingsCategory;
89
103
  icon?: string;
90
104
  resource: string;
91
105
  order?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opencxh/domain",
3
- "version": "1.196.0",
3
+ "version": "1.198.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",