@jskit-ai/workspaces-web 0.1.157 → 0.1.159

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/workspaces-web",
3
- "version": "0.1.157",
3
+ "version": "0.1.159",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "test": "node --test"
@@ -14,16 +14,16 @@
14
14
  "./client/composables/useWorkspaceRouteContext": "./src/client/composables/useWorkspaceRouteContext.js"
15
15
  },
16
16
  "dependencies": {
17
- "@jskit-ai/users-core": "0.1.191",
18
- "@jskit-ai/workspaces-core": "0.1.156",
17
+ "@jskit-ai/users-core": "0.1.193",
18
+ "@jskit-ai/workspaces-core": "0.1.158",
19
19
  "@mdi/js": "^7.4.47"
20
20
  },
21
21
  "peerDependencies": {
22
- "@jskit-ai/auth-web": "0.1.178",
23
- "@jskit-ai/http-web": "0.1.23",
24
- "@jskit-ai/kernel": "0.1.178",
25
- "@jskit-ai/shell-web": "0.1.182",
26
- "@jskit-ai/users-web": "0.1.196",
22
+ "@jskit-ai/auth-web": "0.1.180",
23
+ "@jskit-ai/http-web": "0.1.25",
24
+ "@jskit-ai/kernel": "0.1.180",
25
+ "@jskit-ai/shell-web": "0.1.184",
26
+ "@jskit-ai/users-web": "0.1.198",
27
27
  "@tanstack/vue-query": "^5.90.5",
28
28
  "vue": "^3.5.13",
29
29
  "vue-router": "^5.0.4",
@@ -32,6 +32,8 @@ Use the workspace client provider, components, and composables exported by
32
32
  ## Invariants
33
33
 
34
34
  - Route workspace slug, selected workspace, and server scope stay synchronized.
35
+ - Route and surface pages do not add a page header or standalone heading by
36
+ default.
35
37
  - Invitation acceptance is public only where the server contract permits it.
36
38
  - Administrative UI visibility never substitutes for server authorization.
37
39
  - Query and route state hydrate immediately on warm-cache navigation.
@@ -19,12 +19,9 @@ const normalizedMessage = computed(() => String(props.message || "").trim() || "
19
19
 
20
20
  <template>
21
21
  <v-sheet rounded="lg" border class="workspace-unavailable-panel">
22
- <div class="workspace-unavailable-panel__header">
22
+ <div class="workspace-unavailable-panel__status">
23
23
  <v-icon :icon="mdiAlertCircleOutline" color="error" />
24
- <div>
25
- <h1 class="workspace-unavailable-panel__title">Unavailable</h1>
26
- <p class="text-body-2 text-medium-emphasis mb-0">{{ normalizedSurfaceLabel }} surface.</p>
27
- </div>
24
+ <p class="text-body-2 text-medium-emphasis mb-0">{{ normalizedSurfaceLabel }} surface unavailable.</p>
28
25
  </div>
29
26
  <p class="text-body-2 text-medium-emphasis mb-0">{{ normalizedMessage }}</p>
30
27
  </v-sheet>
@@ -37,17 +34,9 @@ const normalizedMessage = computed(() => String(props.message || "").trim() || "
37
34
  padding: 1rem;
38
35
  }
39
36
 
40
- .workspace-unavailable-panel__header {
37
+ .workspace-unavailable-panel__status {
41
38
  align-items: flex-start;
42
39
  display: flex;
43
40
  gap: 0.75rem;
44
41
  }
45
-
46
- .workspace-unavailable-panel__title {
47
- font-size: clamp(1.35rem, 2vw, 1.85rem);
48
- font-weight: 650;
49
- letter-spacing: -0.02em;
50
- line-height: 1.15;
51
- margin: 0 0 0.25rem;
52
- }
53
42
  </style>
@@ -1,7 +1,6 @@
1
1
  <template>
2
2
  <section class="workspace-settings-landing">
3
3
  <v-sheet rounded="lg" border class="workspace-settings-landing__panel">
4
- <h2 class="workspace-settings-landing__title">No settings sections yet</h2>
5
4
  <p class="text-body-2 text-medium-emphasis mb-0">
6
5
  This app has no workspace-level settings configured.
7
6
  </p>
@@ -13,11 +12,4 @@
13
12
  .workspace-settings-landing__panel {
14
13
  padding: 1rem;
15
14
  }
16
-
17
- .workspace-settings-landing__title {
18
- font-size: 1rem;
19
- font-weight: 650;
20
- line-height: 1.2;
21
- margin: 0 0 0.25rem;
22
- }
23
15
  </style>
@@ -5,12 +5,6 @@ import { RouterView } from "vue-router";
5
5
 
6
6
  <template>
7
7
  <section class="settings-shell d-flex flex-column ga-4">
8
- <header>
9
- <p class="text-overline text-medium-emphasis mb-1">Settings</p>
10
- <h1 class="settings-shell__title">Workspace settings</h1>
11
- <p class="text-body-2 text-medium-emphasis mb-0">Configure the current workspace and its members.</p>
12
- </header>
13
-
14
8
  <v-sheet rounded="lg" border class="settings-shell__panel">
15
9
  <nav class="settings-shell__nav" aria-label="Workspace settings sections">
16
10
  <v-list nav density="compact" class="settings-shell__nav-list">
@@ -25,14 +19,6 @@ import { RouterView } from "vue-router";
25
19
  </template>
26
20
 
27
21
  <style scoped>
28
- .settings-shell__title {
29
- font-size: clamp(1.35rem, 2vw, 1.85rem);
30
- font-weight: 650;
31
- letter-spacing: -0.02em;
32
- line-height: 1.15;
33
- margin: 0 0 0.35rem;
34
- }
35
-
36
22
  .settings-shell__panel {
37
23
  display: grid;
38
24
  gap: 1rem;
@@ -20,20 +20,12 @@ function adminChildPath(suffix = "") {
20
20
  surface-label="Admin"
21
21
  />
22
22
  <section v-else class="workspace-admin-screen d-flex flex-column ga-4">
23
- <header class="workspace-admin-screen__header">
24
- <div>
25
- <p class="text-overline text-medium-emphasis mb-1">Admin</p>
26
- <h1 class="workspace-admin-screen__title">Workspace Admin</h1>
27
- <p class="text-body-2 text-medium-emphasis mb-0">Manage members and workspace settings.</p>
28
- </div>
29
- <div class="workspace-admin-screen__actions">
30
- <v-btn color="primary" variant="flat" :to="adminChildPath('members')">Members</v-btn>
31
- <v-btn color="primary" variant="tonal" :to="adminChildPath('workspace/settings')">Settings</v-btn>
32
- </div>
33
- </header>
23
+ <div class="workspace-admin-screen__actions">
24
+ <v-btn color="primary" variant="flat" :to="adminChildPath('members')">Members</v-btn>
25
+ <v-btn color="primary" variant="tonal" :to="adminChildPath('workspace/settings')">Settings</v-btn>
26
+ </div>
34
27
 
35
28
  <v-sheet rounded="lg" border class="workspace-admin-screen__panel">
36
- <h2 class="text-h6 mb-2">Admin tasks</h2>
37
29
  <p class="text-body-2 text-medium-emphasis mb-0">
38
30
  Review workspace access, members, and operational settings from this surface.
39
31
  </p>
@@ -42,21 +34,6 @@ function adminChildPath(suffix = "") {
42
34
  </template>
43
35
 
44
36
  <style scoped>
45
- .workspace-admin-screen__header {
46
- align-items: flex-start;
47
- display: flex;
48
- gap: 1rem;
49
- justify-content: space-between;
50
- }
51
-
52
- .workspace-admin-screen__title {
53
- font-size: clamp(1.5rem, 2.5vw, 2.25rem);
54
- font-weight: 700;
55
- letter-spacing: -0.03em;
56
- line-height: 1.1;
57
- margin: 0 0 0.4rem;
58
- }
59
-
60
37
  .workspace-admin-screen__actions {
61
38
  display: flex;
62
39
  flex-wrap: wrap;
@@ -69,10 +46,6 @@ function adminChildPath(suffix = "") {
69
46
  }
70
47
 
71
48
  @media (max-width: 640px) {
72
- .workspace-admin-screen__header {
73
- flex-direction: column;
74
- }
75
-
76
49
  .workspace-admin-screen__actions {
77
50
  width: 100%;
78
51
  }
@@ -12,14 +12,7 @@ const { workspaceUnavailable, workspaceUnavailableMessage } = useWorkspaceNotFou
12
12
  surface-label="App"
13
13
  />
14
14
  <section v-else class="workspace-home-screen d-flex flex-column ga-4">
15
- <header>
16
- <p class="text-overline text-medium-emphasis mb-1">Workspace</p>
17
- <h1 class="workspace-home-screen__title">Workspace Home</h1>
18
- <p class="text-body-2 text-medium-emphasis mb-0">The current workspace is active.</p>
19
- </header>
20
-
21
15
  <v-sheet rounded="lg" border class="workspace-home-screen__panel">
22
- <h2 class="text-h6 mb-2">No workspace activity yet</h2>
23
16
  <p class="text-body-2 text-medium-emphasis mb-0">
24
17
  Activity from workspace workflows will appear here.
25
18
  </p>
@@ -28,14 +21,6 @@ const { workspaceUnavailable, workspaceUnavailableMessage } = useWorkspaceNotFou
28
21
  </template>
29
22
 
30
23
  <style scoped>
31
- .workspace-home-screen__title {
32
- font-size: clamp(1.5rem, 2.5vw, 2.25rem);
33
- font-weight: 700;
34
- letter-spacing: -0.03em;
35
- line-height: 1.1;
36
- margin: 0 0 0.4rem;
37
- }
38
-
39
24
  .workspace-home-screen__panel {
40
25
  margin-inline: auto;
41
26
  max-width: 34rem;
@@ -99,9 +99,9 @@ test("workspace pattern includes pending-invite context and product-ready empty
99
99
  assert.match(cue, /placementContext\.value\?\.pendingInvitesCount/);
100
100
  assert.match(cue, /placementContext\.value\?\.workspaceInvitesEnabled/);
101
101
  assert.doesNotMatch(cue, /\bfetch\s*\(|\buseQuery\b/);
102
- assert.match(settingsLanding, /No settings sections yet/);
103
- assert.match(appSurface, /No workspace activity yet/);
104
- assert.match(adminSurface, /Manage members and workspace settings/);
102
+ assert.match(settingsLanding, /This app has no workspace-level settings configured/);
103
+ assert.match(appSurface, /Activity from workspace workflows will appear here/);
104
+ assert.match(adminSurface, /Review workspace access, members, and operational settings/);
105
105
  assert.doesNotMatch(appSurface, /Replace this page|Primary in-workspace surface/);
106
106
  assert.doesNotMatch(adminSurface, /Use this area|Privileged workspace workflows/);
107
107
  });