@jskit-ai/agent-docs 0.1.150 → 0.1.151
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/guide/agent/framework/material-3.md +3 -2
- package/guide/agent/framework/ui-operations.md +2 -1
- package/package.json +1 -1
- package/patterns/feature-package/example/booking-engine/package.json +1 -1
- package/patterns/minimal-foundation/PATTERN.md +2 -0
- package/patterns/minimal-foundation/example/AGENTS.md +4 -0
- package/patterns/minimal-foundation/example/Procfile +0 -1
- package/patterns/minimal-foundation/example/package.json +4 -4
- package/patterns/minimal-foundation/example/src/pages/home/index.vue +0 -27
- package/patterns/minimal-foundation/example/tests/e2e/base-shell.spec.ts +1 -1
- package/patterns/page-scaffolding.md +5 -3
- package/patterns/shell-foundation/PATTERN.md +2 -0
- package/patterns/shell-foundation/example/AGENTS.md +4 -0
- package/patterns/shell-foundation/example/Procfile +0 -1
- package/patterns/shell-foundation/example/package.json +5 -5
- package/patterns/shell-foundation/example/packages/main/package.json +1 -1
- package/patterns/shell-foundation/example/src/pages/home/index.vue +5 -31
- package/patterns/shell-foundation/example/src/pages/home/settings/general/index.vue +3 -6
- package/patterns/shell-foundation/example/src/pages/home/settings.vue +0 -19
- package/patterns/shell-foundation/example/tests/e2e/base-shell.spec.ts +1 -1
- package/patterns/ui-contract.md +2 -0
- package/patterns/ui-testing.md +1 -1
- package/reference/autogen/PATTERN_INDEX.md +20 -20
- package/skills/jskit/references/material-3.md +3 -2
- package/skills/jskit/references/pattern-index.md +20 -20
- package/skills/jskit/references/patterns/app/minimal-foundation/PATTERN.md +2 -0
- package/skills/jskit/references/patterns/app/minimal-foundation/example/AGENTS.md +4 -0
- package/skills/jskit/references/patterns/app/minimal-foundation/example/Procfile +0 -1
- package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +4 -4
- package/skills/jskit/references/patterns/app/minimal-foundation/example/src/pages/home/index.vue +0 -27
- package/skills/jskit/references/patterns/app/minimal-foundation/example/tests/e2e/base-shell.spec.ts +1 -1
- package/skills/jskit/references/patterns/app/shell-foundation/PATTERN.md +2 -0
- package/skills/jskit/references/patterns/app/shell-foundation/example/AGENTS.md +4 -0
- package/skills/jskit/references/patterns/app/shell-foundation/example/Procfile +0 -1
- package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +5 -5
- package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
- package/skills/jskit/references/patterns/app/shell-foundation/example/src/pages/home/index.vue +5 -31
- package/skills/jskit/references/patterns/app/shell-foundation/example/src/pages/home/settings/general/index.vue +3 -6
- package/skills/jskit/references/patterns/app/shell-foundation/example/src/pages/home/settings.vue +0 -19
- package/skills/jskit/references/patterns/app/shell-foundation/example/tests/e2e/base-shell.spec.ts +1 -1
- package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
- package/skills/jskit/references/patterns/console/console-surface/PATTERN.md +1 -0
- package/skills/jskit/references/patterns/console/console-surface/example/src/pages/console/index.vue +5 -24
- package/skills/jskit/references/patterns/console/console-surface/example/src/pages/console/settings/index.vue +0 -1
- package/skills/jskit/references/patterns/console/console-surface/example/src/pages/console/settings.vue +0 -14
- package/skills/jskit/references/patterns/crud/crud-screen-set/PATTERN.md +1 -0
- package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookEditPage.vue +0 -2
- package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookListPage.vue +0 -4
- package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookNewPage.vue +0 -2
- package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookViewPage.vue +0 -1
- package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +2 -2
- package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
- package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
- package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
- package/skills/jskit/references/patterns/shell/application-shell/PATTERN.md +1 -0
- package/skills/jskit/references/patterns/shell/application-shell/example/expected-existing/src/pages/home/index.vue +0 -27
- package/skills/jskit/references/patterns/shell/application-shell/example/src/pages/home/index.vue +5 -31
- package/skills/jskit/references/patterns/shell/application-shell/example/src/pages/home/settings/general/index.vue +3 -6
- package/skills/jskit/references/patterns/shell/application-shell/example/src/pages/home/settings.vue +0 -19
- package/skills/jskit/references/patterns/ui/page-and-placement/PATTERN.md +1 -0
- package/skills/jskit/references/patterns/ui/page-and-placement/example/src/pages/home/reports/activity.vue +1 -2
- package/skills/jskit/references/patterns/ui/page-and-placement/example/src/pages/home/reports/overview.vue +1 -2
- package/skills/jskit/references/patterns/ui/page-and-placement/example/src/pages/home/reports.vue +0 -8
- package/skills/jskit/references/patterns/users/account-settings/PATTERN.md +2 -0
- package/skills/jskit/references/patterns/users/account-settings/example/src/components/account/settings/AccountSettingsNotificationsSection.vue +0 -14
- package/skills/jskit/references/patterns/users/account-settings/example/src/components/account/settings/AccountSettingsPreferencesSection.vue +0 -14
- package/skills/jskit/references/patterns/users/account-settings/example/src/components/account/settings/AccountSettingsProfileSection.vue +0 -14
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +2 -2
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +3 -3
- package/skills/jskit/references/patterns/workspaces/workspace-surfaces/PATTERN.md +2 -0
- package/skills/jskit/references/patterns/workspaces/workspace-surfaces/example/src/components/WorkspaceNotFoundCard.vue +3 -14
- package/skills/jskit/references/patterns/workspaces/workspace-surfaces/example/src/pages/admin/workspace/settings/index.vue +0 -8
- package/skills/jskit/references/patterns/workspaces/workspace-surfaces/example/src/pages/admin/workspace/settings.vue +0 -14
- package/skills/jskit/references/patterns/workspaces/workspace-surfaces/example/src/surfaces/admin/index.vue +4 -31
- package/skills/jskit/references/patterns/workspaces/workspace-surfaces/example/src/surfaces/app/index.vue +0 -15
- package/skills/jskit/references/ui-operations.md +2 -1
- package/templates/app/AGENTS.md +4 -0
|
@@ -32,6 +32,7 @@ placement registry, topology, and adaptive smoke helper exported by
|
|
|
32
32
|
## Invariants
|
|
33
33
|
|
|
34
34
|
- `App.vue`, the shell layout, placements, topology, and route pages agree.
|
|
35
|
+
- Route pages do not add a page header or standalone heading by default.
|
|
35
36
|
- Navigation uses semantic placements rather than direct component injection.
|
|
36
37
|
- Compact controls have accessible names and at least 48 CSS-pixel targets.
|
|
37
38
|
- Cached route/resource state hydrates writable UI state synchronously or with
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<section class="home-start-screen d-flex flex-column ga-4">
|
|
3
|
-
<header>
|
|
4
|
-
<p class="text-overline text-medium-emphasis mb-1">Home</p>
|
|
5
|
-
<h1 class="home-start-screen__title">Home base</h1>
|
|
6
|
-
<p class="text-body-2 text-medium-emphasis mb-0">
|
|
7
|
-
The app runtime is online and ready for the first real workflow.
|
|
8
|
-
</p>
|
|
9
|
-
</header>
|
|
10
|
-
|
|
11
3
|
<v-sheet rounded="lg" border class="home-start-screen__panel">
|
|
12
|
-
<h2 class="text-h6 mb-2">No activity yet</h2>
|
|
13
4
|
<p class="text-body-2 text-medium-emphasis mb-0">
|
|
14
5
|
Recent work, saved records, and next actions will appear here once this app has data.
|
|
15
6
|
</p>
|
|
@@ -19,30 +10,12 @@
|
|
|
19
10
|
|
|
20
11
|
<style scoped>
|
|
21
12
|
.home-start-screen {
|
|
22
|
-
--home-start-title-size: 2rem;
|
|
23
13
|
--home-start-panel-padding: 1rem;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.home-start-screen {
|
|
27
14
|
margin-inline: auto;
|
|
28
15
|
max-width: 48rem;
|
|
29
16
|
}
|
|
30
17
|
|
|
31
|
-
.home-start-screen__title {
|
|
32
|
-
font-size: var(--home-start-title-size);
|
|
33
|
-
font-weight: 700;
|
|
34
|
-
letter-spacing: 0;
|
|
35
|
-
line-height: 1.08;
|
|
36
|
-
margin: 0 0 0.45rem;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
18
|
.home-start-screen__panel {
|
|
40
19
|
padding: var(--home-start-panel-padding);
|
|
41
20
|
}
|
|
42
|
-
|
|
43
|
-
@media (max-width: 640px) {
|
|
44
|
-
.home-start-screen {
|
|
45
|
-
--home-start-title-size: 1.5rem;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
21
|
</style>
|
package/skills/jskit/references/patterns/shell/application-shell/example/src/pages/home/index.vue
CHANGED
|
@@ -29,16 +29,9 @@ const health = computed(() => {
|
|
|
29
29
|
|
|
30
30
|
<template>
|
|
31
31
|
<section class="home-surface-screen d-flex flex-column ga-4">
|
|
32
|
-
<
|
|
33
|
-
<div>
|
|
34
|
-
<p class="text-overline text-medium-emphasis mb-1">Home</p>
|
|
35
|
-
<h1 class="home-surface-screen__title">Ready</h1>
|
|
36
|
-
<p class="text-body-2 text-medium-emphasis mb-0">
|
|
37
|
-
Core services are available.
|
|
38
|
-
</p>
|
|
39
|
-
</div>
|
|
32
|
+
<div class="home-surface-screen__actions">
|
|
40
33
|
<v-btn color="primary" variant="flat" to="/home/settings/general">Settings</v-btn>
|
|
41
|
-
</
|
|
34
|
+
</div>
|
|
42
35
|
|
|
43
36
|
<v-sheet rounded="lg" border class="home-surface-screen__panel">
|
|
44
37
|
<div class="home-surface-screen__status">
|
|
@@ -56,23 +49,12 @@ const health = computed(() => {
|
|
|
56
49
|
|
|
57
50
|
<style scoped>
|
|
58
51
|
.home-surface-screen {
|
|
59
|
-
--home-surface-title-size: 2rem;
|
|
60
52
|
--home-surface-panel-padding: 1rem;
|
|
61
53
|
}
|
|
62
54
|
|
|
63
|
-
.home-surface-
|
|
64
|
-
align-items: flex-start;
|
|
55
|
+
.home-surface-screen__actions {
|
|
65
56
|
display: flex;
|
|
66
|
-
|
|
67
|
-
justify-content: space-between;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.home-surface-screen__title {
|
|
71
|
-
font-size: var(--home-surface-title-size);
|
|
72
|
-
font-weight: 700;
|
|
73
|
-
letter-spacing: 0;
|
|
74
|
-
line-height: 1.1;
|
|
75
|
-
margin: 0 0 0.4rem;
|
|
57
|
+
justify-content: flex-end;
|
|
76
58
|
}
|
|
77
59
|
|
|
78
60
|
.home-surface-screen__panel {
|
|
@@ -90,15 +72,7 @@ const health = computed(() => {
|
|
|
90
72
|
}
|
|
91
73
|
|
|
92
74
|
@media (max-width: 640px) {
|
|
93
|
-
.home-surface-
|
|
94
|
-
--home-surface-title-size: 1.5rem;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.home-surface-screen__header {
|
|
98
|
-
flex-direction: column;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.home-surface-screen__header :deep(.v-btn) {
|
|
75
|
+
.home-surface-screen__actions :deep(.v-btn) {
|
|
102
76
|
min-height: 48px;
|
|
103
77
|
width: 100%;
|
|
104
78
|
}
|
|
@@ -16,12 +16,9 @@ const drawerDefaultOpenModel = computed({
|
|
|
16
16
|
|
|
17
17
|
<template>
|
|
18
18
|
<section class="settings-general-screen d-flex flex-column ga-4">
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
On wider screens, collapsed navigation remains available as a rail. Phone layouts close the drawer and keep primary navigation in the bottom bar.
|
|
23
|
-
</p>
|
|
24
|
-
</div>
|
|
19
|
+
<p class="text-body-2 text-medium-emphasis mb-0">
|
|
20
|
+
On wider screens, collapsed navigation remains available as a rail. Phone layouts close the drawer and keep primary navigation in the bottom bar.
|
|
21
|
+
</p>
|
|
25
22
|
|
|
26
23
|
<v-switch
|
|
27
24
|
v-model="drawerDefaultOpenModel"
|
package/skills/jskit/references/patterns/shell/application-shell/example/src/pages/home/settings.vue
CHANGED
|
@@ -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">Home settings</h1>
|
|
11
|
-
<p class="text-body-2 text-medium-emphasis mb-0">Configure shell behavior for this surface.</p>
|
|
12
|
-
</header>
|
|
13
|
-
|
|
14
8
|
<v-sheet rounded="lg" border class="settings-shell__panel">
|
|
15
9
|
<div class="settings-shell__body">
|
|
16
10
|
<nav class="settings-shell__nav" aria-label="Home settings sections">
|
|
@@ -29,18 +23,9 @@ import { RouterView } from "vue-router";
|
|
|
29
23
|
|
|
30
24
|
<style scoped>
|
|
31
25
|
.settings-shell {
|
|
32
|
-
--settings-shell-title-size: 1.85rem;
|
|
33
26
|
--settings-shell-panel-padding: 1rem;
|
|
34
27
|
}
|
|
35
28
|
|
|
36
|
-
.settings-shell__title {
|
|
37
|
-
font-size: var(--settings-shell-title-size);
|
|
38
|
-
font-weight: 650;
|
|
39
|
-
letter-spacing: 0;
|
|
40
|
-
line-height: 1.15;
|
|
41
|
-
margin: 0 0 0.35rem;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
29
|
.settings-shell__panel {
|
|
45
30
|
overflow: hidden;
|
|
46
31
|
}
|
|
@@ -81,10 +66,6 @@ import { RouterView } from "vue-router";
|
|
|
81
66
|
}
|
|
82
67
|
|
|
83
68
|
@media (max-width: 960px) {
|
|
84
|
-
.settings-shell {
|
|
85
|
-
--settings-shell-title-size: 1.35rem;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
69
|
.settings-shell__body {
|
|
89
70
|
grid-template-columns: 1fr;
|
|
90
71
|
}
|
|
@@ -30,6 +30,7 @@ a filename alone.
|
|
|
30
30
|
## Invariants
|
|
31
31
|
|
|
32
32
|
- File routes and placement destinations agree.
|
|
33
|
+
- Route pages do not add a page header or standalone heading by default.
|
|
33
34
|
- Placement ids describe product ownership, not the authoring mechanism.
|
|
34
35
|
- Child links share an explicit section owner.
|
|
35
36
|
- Topology maps each semantic placement to concrete responsive outlets.
|
package/skills/jskit/references/patterns/ui/page-and-placement/example/src/pages/home/reports.vue
CHANGED
|
@@ -5,14 +5,6 @@ import { RouterView } from "vue-router";
|
|
|
5
5
|
|
|
6
6
|
<template>
|
|
7
7
|
<section class="reports-section d-flex flex-column ga-4">
|
|
8
|
-
<header>
|
|
9
|
-
<p class="text-overline text-medium-emphasis mb-1">Insights</p>
|
|
10
|
-
<h1 class="text-h4 font-weight-medium mb-1">Reports</h1>
|
|
11
|
-
<p class="text-body-2 text-medium-emphasis mb-0">
|
|
12
|
-
Review catalogue activity and completion trends.
|
|
13
|
-
</p>
|
|
14
|
-
</header>
|
|
15
|
-
|
|
16
8
|
<nav aria-label="Report sections">
|
|
17
9
|
<v-tabs density="comfortable">
|
|
18
10
|
<ShellOutlet target="reports:section-nav" />
|
|
@@ -31,6 +31,8 @@ ordinary `useCommand()` mutation behavior, and JSKIT shell placements.
|
|
|
31
31
|
## Invariants
|
|
32
32
|
|
|
33
33
|
- Sections use JSKIT account settings APIs rather than direct HTTP helpers.
|
|
34
|
+
- Settings pages and sections do not add headers or standalone headings by
|
|
35
|
+
default.
|
|
34
36
|
- Cached resource data hydrates local writable fields immediately.
|
|
35
37
|
- Mutation errors use the standard toast and do not push the form down.
|
|
36
38
|
- Loading uses layout-stable skeletons, never an indeterminate spinner.
|
|
@@ -11,9 +11,6 @@ const notifications = props.runtime.notifications;
|
|
|
11
11
|
|
|
12
12
|
<template>
|
|
13
13
|
<v-sheet rounded="lg" border class="account-settings-section">
|
|
14
|
-
<header class="account-settings-section__header">
|
|
15
|
-
<h2 class="account-settings-section__title">Notifications</h2>
|
|
16
|
-
</header>
|
|
17
14
|
<div class="account-settings-section__body">
|
|
18
15
|
<v-form @submit.prevent="notifications.submit" novalidate>
|
|
19
16
|
<v-switch
|
|
@@ -58,17 +55,6 @@ const notifications = props.runtime.notifications;
|
|
|
58
55
|
overflow: hidden;
|
|
59
56
|
}
|
|
60
57
|
|
|
61
|
-
.account-settings-section__header {
|
|
62
|
-
padding: 1rem 1rem 0;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.account-settings-section__title {
|
|
66
|
-
font-size: 1rem;
|
|
67
|
-
font-weight: 650;
|
|
68
|
-
line-height: 1.2;
|
|
69
|
-
margin: 0;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
58
|
.account-settings-section__body {
|
|
73
59
|
padding: 1rem;
|
|
74
60
|
}
|
|
@@ -11,9 +11,6 @@ const preferences = props.runtime.preferences;
|
|
|
11
11
|
|
|
12
12
|
<template>
|
|
13
13
|
<v-sheet rounded="lg" border class="account-settings-section">
|
|
14
|
-
<header class="account-settings-section__header">
|
|
15
|
-
<h2 class="account-settings-section__title">Preferences</h2>
|
|
16
|
-
</header>
|
|
17
14
|
<div class="account-settings-section__body">
|
|
18
15
|
<v-form @submit.prevent="preferences.submit" novalidate>
|
|
19
16
|
<v-row>
|
|
@@ -128,17 +125,6 @@ const preferences = props.runtime.preferences;
|
|
|
128
125
|
overflow: hidden;
|
|
129
126
|
}
|
|
130
127
|
|
|
131
|
-
.account-settings-section__header {
|
|
132
|
-
padding: 1rem 1rem 0;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.account-settings-section__title {
|
|
136
|
-
font-size: 1rem;
|
|
137
|
-
font-weight: 650;
|
|
138
|
-
line-height: 1.2;
|
|
139
|
-
margin: 0;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
128
|
.account-settings-section__body {
|
|
143
129
|
padding: 1rem;
|
|
144
130
|
}
|
|
@@ -11,9 +11,6 @@ const profile = props.runtime.profile;
|
|
|
11
11
|
|
|
12
12
|
<template>
|
|
13
13
|
<v-sheet rounded="lg" border class="account-settings-section">
|
|
14
|
-
<header class="account-settings-section__header">
|
|
15
|
-
<h2 class="account-settings-section__title">Profile</h2>
|
|
16
|
-
</header>
|
|
17
14
|
<div class="account-settings-section__body">
|
|
18
15
|
<v-form @submit.prevent="profile.submit" novalidate>
|
|
19
16
|
<v-row class="mb-2">
|
|
@@ -97,17 +94,6 @@ const profile = props.runtime.profile;
|
|
|
97
94
|
overflow: hidden;
|
|
98
95
|
}
|
|
99
96
|
|
|
100
|
-
.account-settings-section__header {
|
|
101
|
-
padding: 1rem 1rem 0;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
.account-settings-section__title {
|
|
105
|
-
font-size: 1rem;
|
|
106
|
-
font-weight: 650;
|
|
107
|
-
line-height: 1.2;
|
|
108
|
-
margin: 0;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
97
|
.account-settings-section__body {
|
|
112
98
|
padding: 1rem;
|
|
113
99
|
}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"./shared": "./src/shared/index.js"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@jskit-ai/crud-core": "0.1.
|
|
13
|
-
"@jskit-ai/resource-crud-core": "0.1.
|
|
12
|
+
"@jskit-ai/crud-core": "0.1.190",
|
|
13
|
+
"@jskit-ai/resource-crud-core": "0.1.121"
|
|
14
14
|
},
|
|
15
15
|
"jskit": {
|
|
16
16
|
"kind": "runtime",
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
"./shared": "./src/shared/index.js"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@jskit-ai/crud-core": "0.1.
|
|
13
|
-
"@jskit-ai/resource-crud-core": "0.1.
|
|
14
|
-
"@jskit-ai/workspaces-core": "0.1.
|
|
12
|
+
"@jskit-ai/crud-core": "0.1.190",
|
|
13
|
+
"@jskit-ai/resource-crud-core": "0.1.121",
|
|
14
|
+
"@jskit-ai/workspaces-core": "0.1.157"
|
|
15
15
|
},
|
|
16
16
|
"jskit": {
|
|
17
17
|
"kind": "runtime",
|
|
@@ -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-
|
|
22
|
+
<div class="workspace-unavailable-panel__status">
|
|
23
23
|
<v-icon :icon="mdiAlertCircleOutline" color="error" />
|
|
24
|
-
<
|
|
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-
|
|
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
|
-
<
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
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;
|
|
@@ -29,7 +29,8 @@ hash, pattern receipt, or tool-owned source declaration.
|
|
|
29
29
|
|
|
30
30
|
- Keep screens phone/task-first with drawer-independent primary actions and
|
|
31
31
|
at least 48 CSS-pixel targets.
|
|
32
|
-
-
|
|
32
|
+
- Never add page headers or standalone headings unless the user explicitly asks.
|
|
33
|
+
- Use direct surfaces instead of needless nested cards.
|
|
33
34
|
- Render all meaningful loading, empty, error, permission, and retry states.
|
|
34
35
|
- Use structure-matching Material skeletons for visible loading; never use a
|
|
35
36
|
generic spinner or circular progress indicator.
|
package/templates/app/AGENTS.md
CHANGED
|
@@ -12,6 +12,10 @@ Before implementation, read the narrow relevant source pattern completely. If
|
|
|
12
12
|
its owner package is installed, prefer that version-matched package-owned copy.
|
|
13
13
|
Do not install an unrelated runtime package only to read documentation.
|
|
14
14
|
|
|
15
|
+
Pages never start with a page header, title block, welcome heading, or other
|
|
16
|
+
standalone heading copy. Start with the useful content and actions. If the user
|
|
17
|
+
wants a heading, they will ask for or add one.
|
|
18
|
+
|
|
15
19
|
Copied pattern source is ordinary application source. Do not add generator
|
|
16
20
|
provenance, receipts, completion ledgers, or tooling-operation history. Keep
|
|
17
21
|
changes scoped to the user request and verify runtime behavior directly.
|