@morscherlab/mint-sdk 1.4.0-beta.16 → 1.4.0-beta.18
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/README.md +14 -3
- package/dist/{AlertBox-SnsbVow-.js → AlertBox-CzLg0UaL.js} +2 -2
- package/dist/{AlertBox-SnsbVow-.js.map → AlertBox-CzLg0UaL.js.map} +1 -1
- package/dist/{AppSidebar-CB0-RQ4m.js → AppSidebar-6oTT-gPO.js} +43 -13
- package/dist/AppSidebar-6oTT-gPO.js.map +1 -0
- package/dist/{ExperimentPopover-ChKCrklH.js → ExperimentPopover-9l4QZlvQ.js} +2 -2
- package/dist/{ExperimentPopover-ChKCrklH.js.map → ExperimentPopover-9l4QZlvQ.js.map} +1 -1
- package/dist/{ExperimentSelectorModal-BqifjNaN.js → ExperimentSelectorModal-pR5fK3pA.js} +3 -3
- package/dist/{ExperimentSelectorModal-BqifjNaN.js.map → ExperimentSelectorModal-pR5fK3pA.js.map} +1 -1
- package/dist/{SegmentedControl-hOgBVdju.js → SegmentedControl-CJ7EAmOq.js} +2 -2
- package/dist/{SegmentedControl-hOgBVdju.js.map → SegmentedControl-CJ7EAmOq.js.map} +1 -1
- package/dist/{SettingsModal-CoZK3EDN.js → SettingsModal-Dyitgzfp.js} +6 -6
- package/dist/{SettingsModal-CoZK3EDN.js.map → SettingsModal-Dyitgzfp.js.map} +1 -1
- package/dist/components/AppTopBar.vue.d.ts +7 -0
- package/dist/components/JobsStatusTray.vue.d.ts +11 -4
- package/dist/components/PluginWorkspaceView.props.d.ts +3 -0
- package/dist/components/PluginWorkspaceView.vue.d.ts +3 -0
- package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +8 -0
- package/dist/composables/useJobCenter.d.ts +11 -3
- package/dist/{controlSchemaModel-CIH5Hqpw.js → controlSchemaModel-DCUOx8ll.js} +2 -2
- package/dist/{controlSchemaModel-CIH5Hqpw.js.map → controlSchemaModel-DCUOx8ll.js.map} +1 -1
- package/dist/{data-OZ94DhVC.js → data-BIiV4kKw.js} +9 -9
- package/dist/{data-OZ94DhVC.js.map → data-BIiV4kKw.js.map} +1 -1
- package/dist/data.js +7 -7
- package/dist/index.js +16 -16
- package/dist/{install-BKgb5qZw.js → install-Dg-Z6ze5.js} +13 -13
- package/dist/{install-BKgb5qZw.js.map → install-Dg-Z6ze5.js.map} +1 -1
- package/dist/install.js +1 -1
- package/dist/{lab-ZDKlx1Oo.js → lab-BHVT1qN2.js} +9 -9
- package/dist/{lab-ZDKlx1Oo.js.map → lab-BHVT1qN2.js.map} +1 -1
- package/dist/lab.js +4 -4
- package/dist/{records-B4yl2oIu.js → records-CR_pYzIP.js} +62 -62
- package/dist/{records-B4yl2oIu.js.map → records-CR_pYzIP.js.map} +1 -1
- package/dist/{runtime-Cz1GJa_O.js → runtime-cHv1phcc.js} +379 -31
- package/dist/runtime-cHv1phcc.js.map +1 -0
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.js +6 -6
- package/dist/{shell-kq9p4VsX.js → shell-BDuZf2zb.js} +4 -4
- package/dist/{shell-kq9p4VsX.js.map → shell-BDuZf2zb.js.map} +1 -1
- package/dist/shell.js +4 -4
- package/dist/styles.css +163 -307
- package/dist/types/components.d.ts +2 -0
- package/dist/{useExperimentSamples-BLx29CkM.js → useExperimentSamples-Dno1fFMq.js} +3 -3
- package/dist/{useExperimentSamples-BLx29CkM.js.map → useExperimentSamples-Dno1fFMq.js.map} +1 -1
- package/dist/{useListReorder-C_8RYeVP.js → useListReorder-CQ9OCScc.js} +76 -76
- package/dist/useListReorder-CQ9OCScc.js.map +1 -0
- package/dist/{useRackEditor-BhYlXKFM.js → useRackEditor-wL3kPrRT.js} +6 -6
- package/dist/{useRackEditor-BhYlXKFM.js.map → useRackEditor-wL3kPrRT.js.map} +1 -1
- package/dist/useRealtime-BW02xy4Z.js +398 -0
- package/dist/useRealtime-BW02xy4Z.js.map +1 -0
- package/dist/{useRequest-C9uwM79q.js → useRequest-CDkrXNU7.js} +2 -2
- package/dist/{useRequest-C9uwM79q.js.map → useRequest-CDkrXNU7.js.map} +1 -1
- package/package.json +1 -1
- package/src/__tests__/components/AppTopBar.test.ts +33 -2
- package/src/__tests__/components/GeneratedPluginView.test.ts +1 -1
- package/src/__tests__/components/JobsStatusTray.test.ts +137 -71
- package/src/__tests__/components/PluginWorkspaceView.test.ts +56 -1
- package/src/__tests__/composables/useJobCenter.test.ts +223 -3
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +3 -3
- package/src/__tests__/styles/v2AuditRules.test.ts +8 -0
- package/src/components/AppTopBar.vue +14 -0
- package/src/components/GeneratedPluginView.vue +4 -9
- package/src/components/JobsStatusTray.story.vue +78 -43
- package/src/components/JobsStatusTray.vue +171 -279
- package/src/components/PluginWorkspaceView.props.ts +3 -0
- package/src/components/PluginWorkspaceView.vue +17 -0
- package/src/components/internal/WorkspaceShellInternal.vue +12 -0
- package/src/composables/useJobCenter.ts +127 -6
- package/src/runtime.ts +0 -1
- package/src/styles/components/app-top-bar.css +7 -0
- package/src/styles/components/jobs-status-tray.css +129 -296
- package/src/styles/variables.css +16 -0
- package/src/types/components.ts +2 -0
- package/dist/AppSidebar-CB0-RQ4m.js.map +0 -1
- package/dist/runtime-Cz1GJa_O.js.map +0 -1
- package/dist/useListReorder-C_8RYeVP.js.map +0 -1
- package/dist/useRealtime-CUMbW_ln.js +0 -699
- package/dist/useRealtime-CUMbW_ln.js.map +0 -1
|
@@ -1,8 +1,6 @@
|
|
|
1
|
+
/* The compact jobs panel of design v2: opened from the top-bar run slot, one list
|
|
2
|
+
(Active, then Finished), one row per job. Non-modal: the page is not dimmed. */
|
|
1
3
|
.mint-jobs-tray {
|
|
2
|
-
position: fixed;
|
|
3
|
-
right: max(1.25rem, env(safe-area-inset-right));
|
|
4
|
-
bottom: max(1.25rem, env(safe-area-inset-bottom));
|
|
5
|
-
z-index: 1000;
|
|
6
4
|
color: var(--text-primary);
|
|
7
5
|
font-family: var(--font-sans);
|
|
8
6
|
}
|
|
@@ -12,146 +10,79 @@
|
|
|
12
10
|
--border-light: var(--border-color);
|
|
13
11
|
}
|
|
14
12
|
|
|
15
|
-
.
|
|
16
|
-
|
|
17
|
-
min-height: 2.75rem;
|
|
18
|
-
align-items: center;
|
|
19
|
-
gap: 0.625rem;
|
|
20
|
-
padding: 0.5rem 1rem;
|
|
21
|
-
border: 0;
|
|
22
|
-
border-radius: var(--radius-lg);
|
|
23
|
-
background: var(--color-primary);
|
|
24
|
-
color: var(--text-on-accent);
|
|
25
|
-
box-shadow: var(--mint-shadow-pop);
|
|
26
|
-
cursor: pointer;
|
|
27
|
-
transition: background var(--mint-transition);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.mint-jobs-tray__trigger:hover {
|
|
31
|
-
background: var(--color-primary-hover);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.mint-jobs-tray__trigger:focus-visible,
|
|
35
|
-
.mint-jobs-tray__panel:focus-visible,
|
|
36
|
-
.mint-jobs-tray button:focus-visible {
|
|
37
|
-
outline: none;
|
|
38
|
-
box-shadow: var(--focus-ring-offset);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.mint-jobs-tray__trigger-icon {
|
|
42
|
-
width: 1.125rem;
|
|
43
|
-
height: 1.125rem;
|
|
44
|
-
stroke-width: 1.8;
|
|
45
|
-
stroke-linecap: round;
|
|
46
|
-
stroke-linejoin: round;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.mint-jobs-tray__trigger-icon--active {
|
|
50
|
-
animation: mint-jobs-tray-pulse 1.8s ease-in-out infinite;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.mint-jobs-tray__trigger-label {
|
|
54
|
-
font-size: 0.875rem;
|
|
55
|
-
font-weight: 600;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.mint-jobs-tray__count,
|
|
59
|
-
.mint-jobs-tray__tab-count {
|
|
60
|
-
display: inline-flex;
|
|
61
|
-
min-width: 1.25rem;
|
|
62
|
-
height: 1.25rem;
|
|
63
|
-
align-items: center;
|
|
64
|
-
justify-content: center;
|
|
65
|
-
padding: 0 0.375rem;
|
|
66
|
-
border-radius: var(--radius-sm);
|
|
67
|
-
font: 600 0.6875rem/1 var(--font-mono);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/* Inverted on the accent fill: accent ink on the on-accent colour, in both themes. */
|
|
71
|
-
.mint-jobs-tray__count {
|
|
72
|
-
background: var(--text-on-accent);
|
|
73
|
-
color: var(--_ink-primary);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
.mint-jobs-tray__backdrop {
|
|
13
|
+
/* Transparent: catches clicks outside the panel. */
|
|
14
|
+
.mint-jobs-tray__scrim {
|
|
77
15
|
position: fixed;
|
|
78
16
|
inset: 0;
|
|
79
|
-
z-index:
|
|
80
|
-
background: rgb(15 23 42 / 0.22);
|
|
17
|
+
z-index: 999;
|
|
81
18
|
}
|
|
82
19
|
|
|
83
20
|
.mint-jobs-tray__panel {
|
|
84
|
-
position:
|
|
85
|
-
|
|
86
|
-
|
|
21
|
+
position: fixed;
|
|
22
|
+
top: calc(4.5rem + env(safe-area-inset-top));
|
|
23
|
+
right: max(1rem, env(safe-area-inset-right));
|
|
24
|
+
z-index: 1000;
|
|
87
25
|
display: flex;
|
|
88
|
-
width: min(
|
|
89
|
-
max-height:
|
|
26
|
+
width: min(360px, calc(100vw - 2rem));
|
|
27
|
+
max-height: 75vh;
|
|
90
28
|
flex-direction: column;
|
|
91
29
|
overflow: hidden;
|
|
92
30
|
border: 1px solid var(--border-color);
|
|
93
31
|
border-radius: var(--radius-lg);
|
|
94
32
|
background: var(--bg-card);
|
|
95
33
|
box-shadow: var(--mint-shadow-pop);
|
|
34
|
+
font-size: 0.8125rem;
|
|
96
35
|
}
|
|
97
36
|
|
|
98
|
-
.
|
|
99
|
-
.mint-jobs-
|
|
100
|
-
|
|
101
|
-
.mint-jobs-tray__header-actions,
|
|
102
|
-
.mint-jobs-tray__clear-row {
|
|
103
|
-
display: flex;
|
|
104
|
-
align-items: center;
|
|
37
|
+
/* The panel takes focus only so Escape and Tab start inside it; it shows no ring. */
|
|
38
|
+
.mint-jobs-tray__panel:focus {
|
|
39
|
+
outline: none;
|
|
105
40
|
}
|
|
106
41
|
|
|
107
|
-
.mint-jobs-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
padding: 0 0.5rem 0 0.75rem;
|
|
111
|
-
border-bottom: 1px solid var(--border-color);
|
|
42
|
+
.mint-jobs-tray button:focus-visible {
|
|
43
|
+
outline: none;
|
|
44
|
+
box-shadow: var(--focus-ring);
|
|
112
45
|
}
|
|
113
46
|
|
|
114
|
-
.mint-jobs-
|
|
47
|
+
.mint-jobs-tray__head {
|
|
115
48
|
display: flex;
|
|
116
|
-
|
|
49
|
+
flex-shrink: 0;
|
|
50
|
+
align-items: center;
|
|
117
51
|
gap: 0.5rem;
|
|
118
|
-
|
|
52
|
+
height: 40px;
|
|
53
|
+
padding: 0 0.5rem 0 0.75rem;
|
|
54
|
+
border-bottom: 1px solid var(--border-color);
|
|
119
55
|
}
|
|
120
56
|
|
|
121
57
|
.mint-jobs-tray__title {
|
|
122
|
-
flex-shrink: 0;
|
|
123
58
|
margin: 0;
|
|
124
|
-
color: var(--text-primary);
|
|
125
59
|
font-size: 0.8125rem;
|
|
126
60
|
font-weight: 600;
|
|
127
61
|
white-space: nowrap;
|
|
128
62
|
}
|
|
129
63
|
|
|
130
|
-
.mint-jobs-
|
|
64
|
+
.mint-jobs-tray__head-count {
|
|
65
|
+
flex: 1;
|
|
131
66
|
min-width: 0;
|
|
132
|
-
margin: 0;
|
|
133
67
|
overflow: hidden;
|
|
134
|
-
color: var(--text-
|
|
135
|
-
font:
|
|
68
|
+
color: var(--text-secondary);
|
|
69
|
+
font-family: var(--font-mono);
|
|
70
|
+
font-size: 0.6875rem;
|
|
136
71
|
text-overflow: ellipsis;
|
|
137
72
|
white-space: nowrap;
|
|
138
73
|
}
|
|
139
74
|
|
|
140
|
-
.mint-jobs-tray__header-actions {
|
|
141
|
-
gap: 0.25rem;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
75
|
.mint-jobs-tray__icon-button {
|
|
145
|
-
display: inline-
|
|
146
|
-
width:
|
|
147
|
-
height:
|
|
148
|
-
|
|
149
|
-
|
|
76
|
+
display: inline-grid;
|
|
77
|
+
width: 28px;
|
|
78
|
+
height: 28px;
|
|
79
|
+
flex-shrink: 0;
|
|
80
|
+
place-items: center;
|
|
150
81
|
padding: 0;
|
|
151
82
|
border: 0;
|
|
152
83
|
border-radius: var(--radius-md);
|
|
153
84
|
background: transparent;
|
|
154
|
-
color: var(--text-secondary
|
|
85
|
+
color: var(--text-secondary);
|
|
155
86
|
cursor: pointer;
|
|
156
87
|
transition: background var(--mint-transition), color var(--mint-transition);
|
|
157
88
|
}
|
|
@@ -161,175 +92,143 @@
|
|
|
161
92
|
color: var(--text-primary);
|
|
162
93
|
}
|
|
163
94
|
|
|
164
|
-
.mint-jobs-tray__icon-button
|
|
165
|
-
|
|
166
|
-
height: 1rem;
|
|
167
|
-
stroke-width: 1.8;
|
|
168
|
-
stroke-linecap: round;
|
|
169
|
-
stroke-linejoin: round;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
.mint-jobs-tray__icon-button--danger {
|
|
95
|
+
.mint-jobs-tray__icon-button--danger,
|
|
96
|
+
.mint-jobs-tray__icon-button--danger:hover {
|
|
173
97
|
color: var(--mint-error);
|
|
174
98
|
}
|
|
175
99
|
|
|
176
|
-
.mint-jobs-tray__tabs {
|
|
177
|
-
display: grid;
|
|
178
|
-
grid-template-columns: 1fr 1fr;
|
|
179
|
-
border-bottom: 1px solid var(--border-color);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
.mint-jobs-tray__tab {
|
|
183
|
-
position: relative;
|
|
184
|
-
display: inline-flex;
|
|
185
|
-
min-height: 2.75rem;
|
|
186
|
-
align-items: center;
|
|
187
|
-
justify-content: center;
|
|
188
|
-
gap: 0.375rem;
|
|
189
|
-
padding: 0.5rem 1rem;
|
|
190
|
-
border: 0;
|
|
191
|
-
background: transparent;
|
|
192
|
-
color: var(--text-secondary-strong);
|
|
193
|
-
font: 500 0.8125rem/1 var(--font-sans);
|
|
194
|
-
cursor: pointer;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
.mint-jobs-tray__tab--active {
|
|
198
|
-
color: var(--_ink-primary);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
.mint-jobs-tray__tab--active::after {
|
|
202
|
-
position: absolute;
|
|
203
|
-
right: 1rem;
|
|
204
|
-
bottom: 0;
|
|
205
|
-
left: 1rem;
|
|
206
|
-
height: 2px;
|
|
207
|
-
background: var(--color-primary);
|
|
208
|
-
content: '';
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
.mint-jobs-tray__tab-count {
|
|
212
|
-
background: var(--bg-tertiary);
|
|
213
|
-
color: currentColor;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
100
|
.mint-jobs-tray__error {
|
|
217
|
-
margin: 0.75rem
|
|
218
|
-
padding: 0.
|
|
101
|
+
margin: 0.5rem 0.75rem 0;
|
|
102
|
+
padding: 0.5rem 0.75rem;
|
|
219
103
|
border: 1px solid var(--mint-error-border);
|
|
220
104
|
border-radius: var(--radius-md);
|
|
221
105
|
background: var(--mint-error-bg);
|
|
222
|
-
color: var(--
|
|
106
|
+
color: var(--_ink-error);
|
|
223
107
|
font-size: 0.75rem;
|
|
224
108
|
}
|
|
225
109
|
|
|
226
110
|
.mint-jobs-tray__body {
|
|
227
111
|
flex: 1;
|
|
112
|
+
min-height: 0;
|
|
228
113
|
overflow-y: auto;
|
|
229
114
|
scrollbar-color: var(--scrollbar-thumb) transparent;
|
|
230
115
|
}
|
|
231
116
|
|
|
232
117
|
.mint-jobs-tray__empty {
|
|
233
118
|
margin: 0;
|
|
234
|
-
padding:
|
|
119
|
+
padding: 1.5rem 0.75rem;
|
|
235
120
|
color: var(--text-secondary);
|
|
236
121
|
text-align: center;
|
|
237
|
-
font-size: 0.8125rem;
|
|
238
122
|
}
|
|
239
123
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
124
|
+
.mint-jobs-tray__section {
|
|
125
|
+
display: flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
gap: 0.375rem;
|
|
128
|
+
padding: 0.625rem 0.75rem 0.25rem;
|
|
129
|
+
color: var(--text-secondary);
|
|
130
|
+
font-size: 0.6875rem;
|
|
131
|
+
font-weight: 600;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.mint-jobs-tray__section-count {
|
|
135
|
+
color: var(--text-muted);
|
|
136
|
+
font-family: var(--font-mono);
|
|
137
|
+
font-weight: 500;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.mint-jobs-tray__section-action {
|
|
141
|
+
margin-left: auto;
|
|
142
|
+
padding: 0;
|
|
143
|
+
border: 0;
|
|
144
|
+
border-radius: var(--radius-sm);
|
|
145
|
+
background: transparent;
|
|
146
|
+
color: var(--text-secondary);
|
|
147
|
+
font: inherit;
|
|
148
|
+
font-weight: 500;
|
|
149
|
+
cursor: pointer;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.mint-jobs-tray__section-action:hover {
|
|
153
|
+
color: var(--mint-error);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* Rows + hairlines, no card per job. */
|
|
157
|
+
.mint-jobs-tray__row {
|
|
158
|
+
display: grid;
|
|
159
|
+
grid-template-columns: 16px minmax(0, 1fr) auto;
|
|
160
|
+
align-items: center;
|
|
161
|
+
gap: 0.25rem 0.625rem;
|
|
162
|
+
padding: 0.5rem 0.5rem 0.5rem 0.75rem;
|
|
243
163
|
border-bottom: 1px solid var(--border-light);
|
|
244
164
|
}
|
|
245
165
|
|
|
166
|
+
.mint-jobs-tray__row:hover {
|
|
167
|
+
background: var(--bg-hover);
|
|
168
|
+
}
|
|
169
|
+
|
|
246
170
|
/* The one state that needs a person: tinted and pinned first. */
|
|
247
|
-
.mint-jobs-
|
|
171
|
+
.mint-jobs-tray__row--awaiting-input,
|
|
172
|
+
.mint-jobs-tray__row--awaiting-input:hover {
|
|
248
173
|
background: var(--mint-warning-bg);
|
|
249
174
|
}
|
|
250
175
|
|
|
251
|
-
.mint-jobs-
|
|
252
|
-
|
|
253
|
-
justify-content: space-between;
|
|
254
|
-
gap: 0.75rem;
|
|
176
|
+
.mint-jobs-tray__status {
|
|
177
|
+
color: var(--text-muted);
|
|
255
178
|
}
|
|
256
179
|
|
|
257
|
-
.mint-jobs-
|
|
258
|
-
|
|
259
|
-
|
|
180
|
+
.mint-jobs-tray__status--running {
|
|
181
|
+
color: var(--color-primary);
|
|
182
|
+
animation: mint-jobs-tray-spin 1s linear infinite;
|
|
260
183
|
}
|
|
261
184
|
|
|
262
|
-
.mint-jobs-
|
|
263
|
-
|
|
264
|
-
|
|
185
|
+
.mint-jobs-tray__status--awaiting-input { color: var(--mint-warning); }
|
|
186
|
+
.mint-jobs-tray__status--completed { color: var(--mint-success); }
|
|
187
|
+
.mint-jobs-tray__status--failed { color: var(--mint-error); }
|
|
188
|
+
|
|
189
|
+
@keyframes mint-jobs-tray-spin {
|
|
190
|
+
to { transform: rotate(360deg); }
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.mint-jobs-tray__row-title {
|
|
194
|
+
min-width: 0;
|
|
265
195
|
padding: 0;
|
|
266
196
|
overflow: hidden;
|
|
267
197
|
border: 0;
|
|
198
|
+
border-radius: var(--radius-sm);
|
|
268
199
|
background: transparent;
|
|
269
200
|
color: var(--text-primary);
|
|
270
|
-
|
|
271
|
-
font-size: 0.8125rem;
|
|
201
|
+
font: inherit;
|
|
272
202
|
font-weight: 500;
|
|
273
203
|
text-align: left;
|
|
274
204
|
text-overflow: ellipsis;
|
|
275
205
|
white-space: nowrap;
|
|
206
|
+
cursor: pointer;
|
|
276
207
|
}
|
|
277
208
|
|
|
278
|
-
.mint-jobs-
|
|
279
|
-
display:
|
|
280
|
-
margin-top: 0.125rem;
|
|
281
|
-
color: var(--text-secondary);
|
|
282
|
-
font: 0.6875rem/1.3 var(--font-mono);
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/* Status: tone dot + neutral text. Only "waiting for input" and "failed"
|
|
286
|
-
color their text. */
|
|
287
|
-
.mint-jobs-tray__status {
|
|
288
|
-
display: inline-flex;
|
|
289
|
-
flex: 0 0 auto;
|
|
209
|
+
.mint-jobs-tray__tools {
|
|
210
|
+
display: flex;
|
|
290
211
|
align-items: center;
|
|
291
|
-
gap:
|
|
292
|
-
color: var(--text-secondary-strong);
|
|
293
|
-
font-size: 0.75rem;
|
|
294
|
-
--mint-jobs-tray-tone: var(--text-muted);
|
|
212
|
+
gap: 2px;
|
|
295
213
|
}
|
|
296
214
|
|
|
297
|
-
.mint-jobs-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
border-radius: 9999px;
|
|
301
|
-
background: var(--mint-jobs-tray-tone);
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
.mint-jobs-tray__status--running { --mint-jobs-tray-tone: var(--color-primary); }
|
|
305
|
-
.mint-jobs-tray__status--completed { --mint-jobs-tray-tone: var(--mint-success); }
|
|
306
|
-
|
|
307
|
-
.mint-jobs-tray__status--awaiting-input {
|
|
308
|
-
--mint-jobs-tray-tone: var(--mint-warning);
|
|
309
|
-
color: var(--mint-warning-text);
|
|
310
|
-
font-weight: 600;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
.mint-jobs-tray__status--failed {
|
|
314
|
-
--mint-jobs-tray-tone: var(--mint-error);
|
|
315
|
-
color: var(--_ink-error);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
.mint-jobs-tray__percent {
|
|
319
|
-
flex: 0 0 auto;
|
|
320
|
-
min-width: 2.125rem;
|
|
321
|
-
color: var(--text-primary);
|
|
215
|
+
.mint-jobs-tray__value {
|
|
216
|
+
margin-right: 0.375rem;
|
|
217
|
+
color: var(--text-secondary);
|
|
322
218
|
font-family: var(--font-mono);
|
|
323
|
-
font-size: 0.
|
|
219
|
+
font-size: 0.6875rem;
|
|
324
220
|
font-variant-numeric: tabular-nums;
|
|
325
|
-
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.mint-jobs-tray__progress,
|
|
224
|
+
.mint-jobs-tray__detail {
|
|
225
|
+
grid-column: 2 / 4;
|
|
326
226
|
}
|
|
327
227
|
|
|
328
228
|
.mint-jobs-tray__progress {
|
|
329
|
-
height:
|
|
330
|
-
margin-top: 0.375rem;
|
|
229
|
+
height: 2px;
|
|
331
230
|
overflow: hidden;
|
|
332
|
-
border-radius:
|
|
231
|
+
border-radius: 1px;
|
|
333
232
|
background: var(--bg-tertiary);
|
|
334
233
|
}
|
|
335
234
|
|
|
@@ -340,56 +239,17 @@
|
|
|
340
239
|
transition: width var(--mint-transition);
|
|
341
240
|
}
|
|
342
241
|
|
|
343
|
-
.mint-jobs-
|
|
344
|
-
min-
|
|
345
|
-
|
|
242
|
+
.mint-jobs-tray__detail {
|
|
243
|
+
min-width: 0;
|
|
244
|
+
overflow: hidden;
|
|
346
245
|
color: var(--text-secondary);
|
|
347
246
|
font-size: 0.75rem;
|
|
247
|
+
text-overflow: ellipsis;
|
|
248
|
+
white-space: nowrap;
|
|
348
249
|
}
|
|
349
250
|
|
|
350
|
-
.mint-jobs-
|
|
351
|
-
|
|
352
|
-
padding: 0.375rem 0.625rem;
|
|
353
|
-
border: 1px solid var(--border-color);
|
|
354
|
-
border-radius: var(--radius);
|
|
355
|
-
background: var(--bg-secondary);
|
|
356
|
-
color: var(--text-secondary-strong);
|
|
357
|
-
font: 500 0.75rem/1 var(--font-sans);
|
|
358
|
-
cursor: pointer;
|
|
359
|
-
transition: background var(--mint-transition), border-color var(--mint-transition), color var(--mint-transition);
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
.mint-jobs-tray__job-actions {
|
|
363
|
-
display: inline-flex;
|
|
364
|
-
align-items: center;
|
|
365
|
-
gap: 0.25rem;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/* 2f: the inline action of a row waiting for input is the primary one. */
|
|
369
|
-
.mint-jobs-tray__job--awaiting-input .mint-jobs-tray__action:not(.mint-jobs-tray__action--danger) {
|
|
370
|
-
border-color: var(--color-primary);
|
|
371
|
-
background: var(--color-primary);
|
|
372
|
-
color: var(--text-on-accent);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
.mint-jobs-tray__job--awaiting-input .mint-jobs-tray__action:not(.mint-jobs-tray__action--danger):hover {
|
|
376
|
-
border-color: var(--color-primary-hover);
|
|
377
|
-
background: var(--color-primary-hover);
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
.mint-jobs-tray__action--danger {
|
|
381
|
-
border-color: var(--mint-error-border);
|
|
382
|
-
color: var(--mint-error);
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
.mint-jobs-tray__action--danger:hover {
|
|
386
|
-
background: var(--mint-error-bg);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
.mint-jobs-tray__clear-row {
|
|
390
|
-
justify-content: flex-end;
|
|
391
|
-
padding: 0.5rem 0.75rem;
|
|
392
|
-
border-bottom: 1px solid var(--border-light);
|
|
251
|
+
.mint-jobs-tray__detail--error {
|
|
252
|
+
color: var(--_ink-error);
|
|
393
253
|
}
|
|
394
254
|
|
|
395
255
|
.mint-jobs-tray button:disabled {
|
|
@@ -397,12 +257,10 @@
|
|
|
397
257
|
cursor: not-allowed;
|
|
398
258
|
}
|
|
399
259
|
|
|
400
|
-
/* Overlays fade in
|
|
260
|
+
/* Overlays fade in; no lift or scale (v2). */
|
|
401
261
|
.mint-jobs-tray-fade-enter-active,
|
|
402
|
-
.mint-jobs-tray-fade-leave-active
|
|
403
|
-
|
|
404
|
-
.mint-jobs-tray-slide-leave-active {
|
|
405
|
-
transition: opacity 180ms ease;
|
|
262
|
+
.mint-jobs-tray-fade-leave-active {
|
|
263
|
+
transition: opacity 150ms ease;
|
|
406
264
|
}
|
|
407
265
|
|
|
408
266
|
.mint-jobs-tray-fade-enter-from,
|
|
@@ -410,31 +268,6 @@
|
|
|
410
268
|
opacity: 0;
|
|
411
269
|
}
|
|
412
270
|
|
|
413
|
-
.mint-jobs-tray-slide-enter-from,
|
|
414
|
-
.mint-jobs-tray-slide-leave-to {
|
|
415
|
-
opacity: 0;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
@keyframes mint-jobs-tray-pulse {
|
|
419
|
-
50% { opacity: 0.55; }
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
@media (max-width: 480px) {
|
|
423
|
-
.mint-jobs-tray {
|
|
424
|
-
right: max(1rem, env(safe-area-inset-right));
|
|
425
|
-
bottom: max(1rem, env(safe-area-inset-bottom));
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
.mint-jobs-tray__panel {
|
|
429
|
-
position: fixed;
|
|
430
|
-
right: 1rem;
|
|
431
|
-
bottom: 4.75rem;
|
|
432
|
-
left: 1rem;
|
|
433
|
-
width: auto;
|
|
434
|
-
max-height: calc(100vh - 6.75rem - env(safe-area-inset-bottom));
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
|
|
438
271
|
@media (prefers-reduced-motion: reduce) {
|
|
439
272
|
.mint-jobs-tray *,
|
|
440
273
|
.mint-jobs-tray *::before,
|
package/src/styles/variables.css
CHANGED
|
@@ -393,6 +393,22 @@ body {
|
|
|
393
393
|
transition: background-color 0.15s, color 0.15s;
|
|
394
394
|
}
|
|
395
395
|
|
|
396
|
+
/* No page-level rubber-band bounce or pull-to-refresh; overflow: hidden does
|
|
397
|
+
not stop it. Panels still scroll, and their overscroll stops at their own
|
|
398
|
+
edge. A browser tab keeps the horizontal swipe for back and forward; an
|
|
399
|
+
installed PWA has no history swipe, so it drops both axes. */
|
|
400
|
+
html,
|
|
401
|
+
body {
|
|
402
|
+
overscroll-behavior-y: none;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
@media (display-mode: standalone) {
|
|
406
|
+
html,
|
|
407
|
+
body {
|
|
408
|
+
overscroll-behavior: none;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
396
412
|
code, pre {
|
|
397
413
|
font-family: var(--font-mono);
|
|
398
414
|
}
|
package/src/types/components.ts
CHANGED
|
@@ -317,6 +317,8 @@ export interface PluginWorkspaceViewSpec {
|
|
|
317
317
|
disabled?: import('vue').MaybeRefOrGetter<boolean>
|
|
318
318
|
reason?: import('vue').MaybeRefOrGetter<string | undefined>
|
|
319
319
|
}
|
|
320
|
+
/** Job source: the top bar shows the viewer's job and opens a JobsStatusTray. Read once at setup, like `experiment`. */
|
|
321
|
+
jobs?: import('vue').MaybeRefOrGetter<import('../composables/useJobCenter').PluginJobCenterSource | undefined>
|
|
320
322
|
}
|
|
321
323
|
|
|
322
324
|
|