@jskit-ai/console-web 0.1.4 → 0.1.6

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.
@@ -1,20 +1,20 @@
1
1
  export default Object.freeze({
2
2
  packageVersion: 1,
3
3
  packageId: "@jskit-ai/console-web",
4
- version: "0.1.4",
4
+ version: "0.1.6",
5
5
  kind: "runtime",
6
6
  description: "Authenticated console surface scaffold and surface policy wiring.",
7
7
  dependsOn: [
8
8
  "@jskit-ai/auth-web",
9
+ "@jskit-ai/console-core",
9
10
  "@jskit-ai/shell-web",
10
- "@jskit-ai/users-core"
11
11
  ],
12
12
  capabilities: {
13
13
  provides: [
14
14
  "console.web"
15
15
  ],
16
16
  requires: [
17
- "users.core"
17
+ "console.core"
18
18
  ]
19
19
  },
20
20
  runtime: {
@@ -37,14 +37,37 @@ export default Object.freeze({
37
37
  server: [],
38
38
  client: []
39
39
  }
40
+ },
41
+ ui: {
42
+ placements: {
43
+ outlets: [
44
+ {
45
+ target: "console-settings:primary-menu",
46
+ defaultLinkComponentToken: "local.main.ui.surface-aware-menu-link-item",
47
+ surfaces: ["console"],
48
+ source: "templates/src/pages/console/settings.vue"
49
+ }
50
+ ],
51
+ contributions: [
52
+ {
53
+ id: "console.web.menu.settings",
54
+ target: "shell-layout:primary-menu",
55
+ surfaces: ["console"],
56
+ order: 100,
57
+ componentToken: "local.main.ui.menu-link-item",
58
+ when: "auth.authenticated === true",
59
+ source: "mutations.text#console-web-console-settings-placement"
60
+ }
61
+ ]
62
+ }
40
63
  }
41
64
  },
42
65
  mutations: {
43
66
  dependencies: {
44
67
  runtime: {
45
- "@jskit-ai/auth-web": "0.1.38",
46
- "@jskit-ai/shell-web": "0.1.36",
47
- "@jskit-ai/users-core": "0.1.47"
68
+ "@jskit-ai/auth-web": "0.1.39",
69
+ "@jskit-ai/console-core": "0.1.1",
70
+ "@jskit-ai/shell-web": "0.1.37",
48
71
  },
49
72
  dev: {}
50
73
  },
@@ -74,6 +97,24 @@ export default Object.freeze({
74
97
  reason: "Install shell-driven console page starter.",
75
98
  category: "console-web",
76
99
  id: "console-web-page-console"
100
+ },
101
+ {
102
+ from: "templates/src/pages/console/settings.vue",
103
+ toSurface: "console",
104
+ toSurfacePath: "settings.vue",
105
+ ownership: "app",
106
+ reason: "Install console settings shell route scaffold for console-web.",
107
+ category: "console-web",
108
+ id: "console-web-page-console-settings-shell"
109
+ },
110
+ {
111
+ from: "templates/src/pages/console/settings/index.vue",
112
+ toSurface: "console",
113
+ toSurfacePath: "settings/index.vue",
114
+ ownership: "app",
115
+ reason: "Install console settings index stub scaffold for app-owned landing or redirect behavior.",
116
+ category: "console-web",
117
+ id: "console-web-page-console-settings"
77
118
  }
78
119
  ],
79
120
  text: [
@@ -93,10 +134,21 @@ export default Object.freeze({
93
134
  position: "bottom",
94
135
  skipIfContains: "config.surfaceDefinitions.console = {",
95
136
  value:
96
- "\nconfig.surfaceDefinitions.console = {\n id: \"console\",\n label: \"Console\",\n pagesRoot: \"console\",\n enabled: true,\n requiresAuth: true,\n requiresWorkspace: false,\n accessPolicyId: \"console_owner\",\n origin: \"\"\n};\n",
137
+ "\nconfig.surfaceDefinitions.console = {\n id: \"console\",\n label: \"Console\",\n pagesRoot: \"console\",\n enabled: true,\n requiresAuth: true,\n requiresWorkspace: false,\n accessPolicyId: \"console_owner\",\n icon: \"mdi-console-network-outline\",\n origin: \"\"\n};\n",
97
138
  reason: "Register console surface definition once console-web is installed.",
98
139
  category: "console-web",
99
140
  id: "console-web-surface-config-console"
141
+ },
142
+ {
143
+ op: "append-text",
144
+ file: "src/placement.js",
145
+ position: "bottom",
146
+ skipIfContains: "id: \"console.web.menu.settings\"",
147
+ value:
148
+ "\naddPlacement({\n id: \"console.web.menu.settings\",\n target: \"shell-layout:primary-menu\",\n surfaces: [\"console\"],\n order: 100,\n componentToken: \"local.main.ui.menu-link-item\",\n props: {\n label: \"Settings\",\n to: \"/console/settings\",\n icon: \"mdi-cog-outline\"\n },\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n",
149
+ reason: "Append console-web settings menu placement into app-owned placement registry.",
150
+ category: "console-web",
151
+ id: "console-web-console-settings-placement"
100
152
  }
101
153
  ]
102
154
  }
package/package.json CHANGED
@@ -1,8 +1,13 @@
1
1
  {
2
2
  "name": "@jskit-ai/console-web",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "test": "node --test"
7
+ },
8
+ "dependencies": {
9
+ "@jskit-ai/auth-web": "0.1.39",
10
+ "@jskit-ai/console-core": "0.1.1",
11
+ "@jskit-ai/shell-web": "0.1.37"
7
12
  }
8
13
  }
@@ -0,0 +1,8 @@
1
+ <script setup>
2
+ // To redirect this settings shell to a child page, uncomment and edit the example below.
3
+ // definePage({
4
+ // redirect: (to) => `${to.path}/your_child_segment`
5
+ // });
6
+ </script>
7
+
8
+ <template />
@@ -0,0 +1,32 @@
1
+ <script setup>
2
+ import ShellOutlet from "@jskit-ai/shell-web/client/components/ShellOutlet";
3
+ import { RouterView } from "vue-router";
4
+ </script>
5
+
6
+ <template>
7
+ <section class="settings-shell d-flex flex-column ga-4">
8
+ <v-card rounded="lg" elevation="1" border>
9
+ <v-card-item>
10
+ <v-card-title>Console settings</v-card-title>
11
+ <v-card-subtitle>Global configuration and reference data for the whole app.</v-card-subtitle>
12
+ </v-card-item>
13
+ <v-divider />
14
+ <v-card-text class="pt-4">
15
+ <v-row no-gutters>
16
+ <v-col cols="12" md="3" lg="2" class="pr-md-4 mb-4 mb-md-0">
17
+ <v-list nav density="comfortable" rounded="lg" border>
18
+ <ShellOutlet
19
+ target="console-settings:primary-menu"
20
+ default-link-component-token="local.main.ui.surface-aware-menu-link-item"
21
+ />
22
+ </v-list>
23
+ </v-col>
24
+
25
+ <v-col cols="12" md="9" lg="10">
26
+ <RouterView />
27
+ </v-col>
28
+ </v-row>
29
+ </v-card-text>
30
+ </v-card>
31
+ </section>
32
+ </template>
@@ -46,6 +46,24 @@ test("console-web installs console surface scripts and files", () => {
46
46
  category: "console-web",
47
47
  id: "console-web-page-console"
48
48
  });
49
+ assert.deepEqual(findFileMutation("console-web-page-console-settings-shell"), {
50
+ from: "templates/src/pages/console/settings.vue",
51
+ toSurface: "console",
52
+ toSurfacePath: "settings.vue",
53
+ ownership: "app",
54
+ reason: "Install console settings shell route scaffold for console-web.",
55
+ category: "console-web",
56
+ id: "console-web-page-console-settings-shell"
57
+ });
58
+ assert.deepEqual(findFileMutation("console-web-page-console-settings"), {
59
+ from: "templates/src/pages/console/settings/index.vue",
60
+ toSurface: "console",
61
+ toSurfacePath: "settings/index.vue",
62
+ ownership: "app",
63
+ reason: "Install console settings index stub scaffold for app-owned landing or redirect behavior.",
64
+ category: "console-web",
65
+ id: "console-web-page-console-settings"
66
+ });
49
67
  });
50
68
 
51
69
  test("console-web wires console surface policy into app config", () => {
@@ -55,13 +73,22 @@ test("console-web wires console surface policy into app config", () => {
55
73
  );
56
74
  assert.equal(findTextMutation("console-web-surface-config-console")?.file, "config/public.js");
57
75
  assert.match(findTextMutation("console-web-surface-config-console")?.value || "", /accessPolicyId: "console_owner"/);
76
+ assert.match(findTextMutation("console-web-surface-config-console")?.value || "", /icon: "mdi-console-network-outline"/);
77
+ assert.equal(findTextMutation("console-web-console-settings-placement")?.file, "src/placement.js");
58
78
  });
59
79
 
60
80
  test("console-web console templates stay shell-driven", async () => {
61
81
  const wrapperSource = await readFile(path.join(PACKAGE_DIR, "templates", "src", "pages", "console.vue"), "utf8");
62
82
  const indexSource = await readFile(path.join(PACKAGE_DIR, "templates", "src", "pages", "console", "index.vue"), "utf8");
83
+ const settingsSource = await readFile(path.join(PACKAGE_DIR, "templates", "src", "pages", "console", "settings.vue"), "utf8");
84
+ const settingsIndexSource = await readFile(path.join(PACKAGE_DIR, "templates", "src", "pages", "console", "settings", "index.vue"), "utf8");
63
85
 
64
86
  assert.match(wrapperSource, /ShellLayout/);
65
87
  assert.match(wrapperSource, /"surface": "console"/);
66
88
  assert.match(indexSource, /Operations Console/);
89
+ assert.match(settingsSource, /target="console-settings:primary-menu"/);
90
+ assert.match(settingsSource, /default-link-component-token="local\.main\.ui\.surface-aware-menu-link-item"/);
91
+ assert.match(settingsSource, /<RouterView \/>/);
92
+ assert.match(settingsIndexSource, /definePage/);
93
+ assert.match(settingsIndexSource, /your_child_segment/);
67
94
  });