@jskit-ai/shell-web 0.1.182 → 0.1.184
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 +2 -2
- package/patterns/application-shell/PATTERN.md +1 -0
- package/patterns/application-shell/example/expected-existing/src/pages/home/index.vue +0 -27
- package/patterns/application-shell/example/src/pages/home/index.vue +5 -31
- package/patterns/application-shell/example/src/pages/home/settings/general/index.vue +3 -6
- package/patterns/application-shell/example/src/pages/home/settings.vue +0 -19
- package/patterns/page-and-placement/PATTERN.md +1 -0
- package/patterns/page-and-placement/example/src/pages/home/reports/activity.vue +1 -2
- package/patterns/page-and-placement/example/src/pages/home/reports/overview.vue +1 -2
- package/patterns/page-and-placement/example/src/pages/home/reports.vue +0 -8
- package/test/settingsPlacementContract.test.js +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jskit-ai/shell-web",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.184",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "node --test"
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@mdi/js": "^7.4.47"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@jskit-ai/kernel": "0.1.
|
|
34
|
+
"@jskit-ai/kernel": "0.1.180",
|
|
35
35
|
"pinia": "^3.0.4",
|
|
36
36
|
"vue": "^3.5.13",
|
|
37
37
|
"vue-router": "^5.0.4",
|
|
@@ -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>
|
|
@@ -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"
|
|
@@ -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.
|
|
@@ -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" />
|
|
@@ -54,7 +54,7 @@ test("shell-web application pattern exposes surface-derived settings outlets", a
|
|
|
54
54
|
|
|
55
55
|
assert.match(source, /target="home-settings:primary-menu"/);
|
|
56
56
|
assert.match(source, /class="settings-shell d-flex flex-column ga-4"/);
|
|
57
|
-
assert.match(source, /--settings-shell-
|
|
57
|
+
assert.match(source, /--settings-shell-panel-padding/);
|
|
58
58
|
assert.doesNotMatch(source, /generated-ui/u);
|
|
59
59
|
assert.doesNotMatch(source, /default-link-component-token/);
|
|
60
60
|
assert.match(source, /<RouterView \/>/);
|
|
@@ -538,9 +538,9 @@ test("shell-web pattern home page relies on adaptive navigation instead of dead
|
|
|
538
538
|
);
|
|
539
539
|
|
|
540
540
|
assert.match(source, /class="home-surface-screen d-flex flex-column ga-4"/);
|
|
541
|
-
assert.match(source, /--home-surface-
|
|
541
|
+
assert.match(source, /--home-surface-panel-padding/);
|
|
542
542
|
assert.doesNotMatch(source, /generated-ui/u);
|
|
543
|
-
assert.match(source, /
|
|
543
|
+
assert.match(source, /Service health/);
|
|
544
544
|
assert.match(source, /to="\/home\/settings\/general"/);
|
|
545
545
|
assert.doesNotMatch(source, /Use bottom navigation|Replace this content|Main public surface/);
|
|
546
546
|
assert.doesNotMatch(source, /\/console/);
|