@happyvertical/smrt-svelte 0.43.10 → 0.44.1
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/AGENTS.md +38 -2
- package/dist/Provider.svelte +11 -0
- package/dist/Provider.svelte.d.ts.map +1 -1
- package/dist/components/forms/Form.svelte +29 -13
- package/dist/components/forms/Form.svelte.d.ts +5 -0
- package/dist/components/forms/Form.svelte.d.ts.map +1 -1
- package/dist/components/forms/__tests__/Form.webmcp.test.js +115 -6
- package/dist/components/settings/SettingsCatalog.svelte +9 -0
- package/dist/components/settings/SettingsCatalog.svelte.d.ts +9 -0
- package/dist/components/settings/SettingsCatalog.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/ActivityBadge.svelte +2 -0
- package/dist/components/workspace/admin-shell/ActivityBadge.svelte.d.ts +2 -0
- package/dist/components/workspace/admin-shell/ActivityBadge.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/ActivityItem.svelte +1 -0
- package/dist/components/workspace/admin-shell/ActivityItem.svelte.d.ts +1 -0
- package/dist/components/workspace/admin-shell/ActivityItem.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/ActivityList.svelte +3 -0
- package/dist/components/workspace/admin-shell/ActivityList.svelte.d.ts +3 -0
- package/dist/components/workspace/admin-shell/ActivityList.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/ActivityToasts.svelte +1 -0
- package/dist/components/workspace/admin-shell/ActivityToasts.svelte.d.ts +1 -0
- package/dist/components/workspace/admin-shell/ActivityToasts.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/AdminShell.svelte +15 -0
- package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts +15 -0
- package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/AppScopePanel.svelte +7 -0
- package/dist/components/workspace/admin-shell/AppScopePanel.svelte.d.ts +7 -0
- package/dist/components/workspace/admin-shell/AppScopePanel.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/HotkeyInput.svelte +4 -0
- package/dist/components/workspace/admin-shell/HotkeyInput.svelte.d.ts +4 -0
- package/dist/components/workspace/admin-shell/HotkeyInput.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/ShellCorner.svelte +1 -0
- package/dist/components/workspace/admin-shell/ShellCorner.svelte.d.ts +1 -0
- package/dist/components/workspace/admin-shell/ShellCorner.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/ShortcutsOverlay.svelte +1 -0
- package/dist/components/workspace/admin-shell/ShortcutsOverlay.svelte.d.ts +1 -0
- package/dist/components/workspace/admin-shell/ShortcutsOverlay.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/SystemScopePanel.svelte +2 -0
- package/dist/components/workspace/admin-shell/SystemScopePanel.svelte.d.ts +2 -0
- package/dist/components/workspace/admin-shell/SystemScopePanel.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/SystemStatusChips.svelte +1 -0
- package/dist/components/workspace/admin-shell/SystemStatusChips.svelte.d.ts +1 -0
- package/dist/components/workspace/admin-shell/SystemStatusChips.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/TenantNav.svelte +5 -0
- package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts +5 -0
- package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts.map +1 -1
- package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte +11 -0
- package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.d.ts +11 -0
- package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/web/__tests__/view-intent-provider.fixture.svelte +28 -0
- package/dist/web/__tests__/view-intent-provider.fixture.svelte.d.ts +13 -0
- package/dist/web/__tests__/view-intent-provider.fixture.svelte.d.ts.map +1 -0
- package/dist/web/__tests__/view-intent.fixture.svelte +33 -0
- package/dist/web/__tests__/view-intent.fixture.svelte.d.ts +15 -0
- package/dist/web/__tests__/view-intent.fixture.svelte.d.ts.map +1 -0
- package/dist/web/__tests__/view-intent.intents.d.ts +14 -0
- package/dist/web/__tests__/view-intent.intents.d.ts.map +1 -0
- package/dist/web/__tests__/view-intent.intents.js +38 -0
- package/dist/web/__tests__/view-intent.svelte.test.js +201 -0
- package/dist/web/__tests__/webmcp-composed.child.fixture.svelte +11 -0
- package/dist/web/__tests__/webmcp-composed.child.fixture.svelte.d.ts.map +1 -1
- package/dist/web/__tests__/webmcp-composed.integration.svelte.test.js +4 -0
- package/dist/web/__tests__/webmcp-effects-reactivity.child.fixture.svelte +16 -0
- package/dist/web/__tests__/webmcp-effects-reactivity.child.fixture.svelte.d.ts +19 -0
- package/dist/web/__tests__/webmcp-effects-reactivity.child.fixture.svelte.d.ts.map +1 -0
- package/dist/web/__tests__/webmcp-effects-reactivity.fixture.svelte +11 -0
- package/dist/web/__tests__/webmcp-effects-reactivity.fixture.svelte.d.ts +8 -0
- package/dist/web/__tests__/webmcp-effects-reactivity.fixture.svelte.d.ts.map +1 -0
- package/dist/web/__tests__/webmcp-harness-reactive-samename.svelte +20 -0
- package/dist/web/__tests__/webmcp-harness-reactive-samename.svelte.d.ts +7 -0
- package/dist/web/__tests__/webmcp-harness-reactive-samename.svelte.d.ts.map +1 -0
- package/dist/web/__tests__/webmcp-harness-unannotated.svelte +14 -0
- package/dist/web/__tests__/webmcp-harness-unannotated.svelte.d.ts +19 -0
- package/dist/web/__tests__/webmcp-harness-unannotated.svelte.d.ts.map +1 -0
- package/dist/web/__tests__/webmcp-harness.svelte +4 -0
- package/dist/web/__tests__/webmcp-harness.svelte.d.ts.map +1 -1
- package/dist/web/__tests__/webmcp.test.js +136 -9
- package/dist/web/view-intent.svelte.d.ts +64 -0
- package/dist/web/view-intent.svelte.d.ts.map +1 -0
- package/dist/web/view-intent.svelte.js +83 -0
- package/dist/web/webmcp-bespoke-context.d.ts +14 -0
- package/dist/web/webmcp-bespoke-context.d.ts.map +1 -0
- package/dist/web/webmcp-bespoke-context.js +8 -0
- package/dist/web/webmcp.svelte.d.ts +29 -13
- package/dist/web/webmcp.svelte.d.ts.map +1 -1
- package/dist/web/webmcp.svelte.js +92 -12
- package/package.json +8 -7
|
@@ -59,8 +59,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
59
59
|
render(AsyncValidationForm, {
|
|
60
60
|
props: { onsubmit, validate, webmcp: true },
|
|
61
61
|
});
|
|
62
|
+
const _regLenBefore = registered.length;
|
|
62
63
|
await tick();
|
|
63
64
|
await tick();
|
|
65
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
64
66
|
expect(registered).toHaveLength(1);
|
|
65
67
|
await userEvent.click(screen.getByRole('button', { name: 'Submit' }));
|
|
66
68
|
await waitFor(() => expect(validate).toHaveBeenCalledTimes(1));
|
|
@@ -155,8 +157,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
155
157
|
};
|
|
156
158
|
const onsubmit = vi.fn();
|
|
157
159
|
render(FormWithFields, { props: { webmcp: true, onsubmit } });
|
|
160
|
+
const _regLenBefore = registered.length;
|
|
158
161
|
await tick();
|
|
159
162
|
await tick();
|
|
163
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
160
164
|
expect(registered).toHaveLength(1);
|
|
161
165
|
expect(registered[0].inputSchema).toMatchObject({
|
|
162
166
|
type: 'object',
|
|
@@ -195,8 +199,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
195
199
|
onselectchange: selectChanged,
|
|
196
200
|
},
|
|
197
201
|
});
|
|
202
|
+
const _regLenBefore = registered.length;
|
|
198
203
|
await tick();
|
|
199
204
|
await tick();
|
|
205
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
200
206
|
const tool = registered.at(-1);
|
|
201
207
|
if (!tool)
|
|
202
208
|
throw new Error('WebMCP tool was not registered');
|
|
@@ -237,8 +243,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
237
243
|
interactionRegistry: registry,
|
|
238
244
|
},
|
|
239
245
|
});
|
|
246
|
+
const _regLenBefore = registered.length;
|
|
240
247
|
await tick();
|
|
241
248
|
await tick();
|
|
249
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
242
250
|
expect(await registered.at(-1)?.execute({ age: '' })).toBe('Staged 1 change for review');
|
|
243
251
|
const age = registry
|
|
244
252
|
.list()
|
|
@@ -261,8 +269,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
261
269
|
render(FormWithFields, {
|
|
262
270
|
props: { webmcp: true, showAge: false, interactionRegistry },
|
|
263
271
|
});
|
|
272
|
+
const _regLenBefore = registered.length;
|
|
264
273
|
await tick();
|
|
265
274
|
await tick();
|
|
275
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
266
276
|
await registered.at(-1)?.execute({ fullname: 'Ada Lovelace' });
|
|
267
277
|
await userEvent.click(await screen.findByRole('button', { name: 'Apply valid changes' }));
|
|
268
278
|
await waitFor(() => expect(screen.getByRole('textbox', { name: 'Full name' })).toHaveFocus());
|
|
@@ -370,8 +380,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
370
380
|
const view = render(FormWithFields, {
|
|
371
381
|
props: { webmcp: true, interactionRegistry: registry },
|
|
372
382
|
});
|
|
383
|
+
const _regLenBefore = registered.length;
|
|
373
384
|
await tick();
|
|
374
385
|
await tick();
|
|
386
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
375
387
|
expect(await registered.at(-1)?.execute({ fullname: 'Ada' })).toBe('Staged 1 change for review');
|
|
376
388
|
await view.rerender({
|
|
377
389
|
webmcp: true,
|
|
@@ -583,8 +595,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
583
595
|
interactionRegistry: registry,
|
|
584
596
|
},
|
|
585
597
|
});
|
|
598
|
+
const _regLenBefore = registered.length;
|
|
586
599
|
await tick();
|
|
587
600
|
await tick();
|
|
601
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
588
602
|
expect(await registered.at(-1)?.execute({
|
|
589
603
|
appointment: '2026-02-30',
|
|
590
604
|
phone: '21234567890',
|
|
@@ -623,8 +637,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
623
637
|
interactionRegistry: registry,
|
|
624
638
|
},
|
|
625
639
|
});
|
|
640
|
+
const _regLenBefore = registered.length;
|
|
626
641
|
await tick();
|
|
627
642
|
await tick();
|
|
643
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
628
644
|
expect(await registered.at(-1)?.execute({ notes: 'Proposed' })).toBe('Staged 1 change for review');
|
|
629
645
|
const notes = registry
|
|
630
646
|
.list()
|
|
@@ -655,8 +671,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
655
671
|
interactionRegistry: registry,
|
|
656
672
|
},
|
|
657
673
|
});
|
|
674
|
+
const _regLenBefore = registered.length;
|
|
658
675
|
await tick();
|
|
659
676
|
await tick();
|
|
677
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
660
678
|
expect(await registered.at(-1)?.execute({ notes: 'Proposed' })).toBe('Staged 1 change for review');
|
|
661
679
|
const notes = registry
|
|
662
680
|
.list()
|
|
@@ -692,8 +710,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
692
710
|
onmeasurementchange: measurementChanged,
|
|
693
711
|
},
|
|
694
712
|
});
|
|
713
|
+
const _regLenBefore = registered.length;
|
|
695
714
|
await tick();
|
|
696
715
|
await tick();
|
|
716
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
697
717
|
expect(await registered.at(-1)?.execute({
|
|
698
718
|
measurement: { unit: 'ft', value: 12 },
|
|
699
719
|
})).toBe('Staged 1 change for review');
|
|
@@ -730,8 +750,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
730
750
|
interactionRegistry: registry,
|
|
731
751
|
},
|
|
732
752
|
});
|
|
753
|
+
const _regLenBefore = registered.length;
|
|
733
754
|
await tick();
|
|
734
755
|
await tick();
|
|
756
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
735
757
|
expect(await registered.at(-1)?.execute({
|
|
736
758
|
phone: 'five five five one two three four five six seven',
|
|
737
759
|
})).toBe('Staged 1 change for review');
|
|
@@ -787,8 +809,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
787
809
|
interactionRegistry: registry,
|
|
788
810
|
},
|
|
789
811
|
});
|
|
812
|
+
const _regLenBefore = registered.length;
|
|
790
813
|
await tick();
|
|
791
814
|
await tick();
|
|
815
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
792
816
|
const staging = registered.at(-1)?.execute({ notes: 'Proposed' });
|
|
793
817
|
await policyStartedPromise;
|
|
794
818
|
await userEvent.type(screen.getByRole('textbox', { name: 'Notes' }), ' human');
|
|
@@ -845,8 +869,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
845
869
|
interactionRegistry: registry,
|
|
846
870
|
},
|
|
847
871
|
});
|
|
872
|
+
const _regLenBefore = registered.length;
|
|
848
873
|
await tick();
|
|
849
874
|
await tick();
|
|
875
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
850
876
|
const staging = registered.at(-1)?.execute({
|
|
851
877
|
address: { street: '123 Main Street' },
|
|
852
878
|
});
|
|
@@ -1070,8 +1096,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1070
1096
|
onsubmit,
|
|
1071
1097
|
},
|
|
1072
1098
|
});
|
|
1099
|
+
const _regLenBefore = registered.length;
|
|
1073
1100
|
await tick();
|
|
1074
1101
|
await tick();
|
|
1102
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1075
1103
|
expect(registered).toHaveLength(1);
|
|
1076
1104
|
const schema = registered[0].inputSchema;
|
|
1077
1105
|
expect(schema.required).toEqual(['fullname', 'age']);
|
|
@@ -1095,8 +1123,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1095
1123
|
const view = render(FormWithFields, {
|
|
1096
1124
|
props: { webmcp: true, textDisabled: false, showAge: false },
|
|
1097
1125
|
});
|
|
1126
|
+
let _regLenBefore = registered.length;
|
|
1098
1127
|
await tick();
|
|
1099
1128
|
await tick();
|
|
1129
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1100
1130
|
expect(registered.at(-1)?.inputSchema).toMatchObject({
|
|
1101
1131
|
properties: { fullname: { type: 'string' } },
|
|
1102
1132
|
});
|
|
@@ -1105,8 +1135,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1105
1135
|
textDisabled: true,
|
|
1106
1136
|
showAge: false,
|
|
1107
1137
|
});
|
|
1138
|
+
_regLenBefore = registered.length;
|
|
1108
1139
|
await tick();
|
|
1109
1140
|
await tick();
|
|
1141
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1110
1142
|
const tool = registered.at(-1);
|
|
1111
1143
|
expect(tool?.inputSchema).toMatchObject({ properties: {} });
|
|
1112
1144
|
expect(await tool?.execute({ fullname: 'Ada Lovelace' })).toBe('No reviewable changes provided');
|
|
@@ -1122,8 +1154,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1122
1154
|
render(FormWithFields, {
|
|
1123
1155
|
props: { webmcp: true, showAge: false },
|
|
1124
1156
|
});
|
|
1157
|
+
const _regLenBefore = registered.length;
|
|
1125
1158
|
await tick();
|
|
1126
1159
|
await tick();
|
|
1160
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1127
1161
|
const input = screen.getByRole('textbox', { name: 'Full name' });
|
|
1128
1162
|
expect(registered.at(-1)?.inputSchema).toMatchObject({
|
|
1129
1163
|
properties: { fullname: expect.any(Object) },
|
|
@@ -1157,8 +1191,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1157
1191
|
showAge: false,
|
|
1158
1192
|
},
|
|
1159
1193
|
});
|
|
1194
|
+
const _regLenBefore = registered.length;
|
|
1160
1195
|
await tick();
|
|
1161
1196
|
await tick();
|
|
1197
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1162
1198
|
const tool = registered.at(-1);
|
|
1163
1199
|
expect(tool?.inputSchema).toMatchObject({ properties: {} });
|
|
1164
1200
|
expect(await tool?.execute({ fullname: 'Ada Lovelace' })).toBe('No reviewable changes provided');
|
|
@@ -1207,8 +1243,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1207
1243
|
formSubject: { type: 'person', id: 'person-1' },
|
|
1208
1244
|
},
|
|
1209
1245
|
});
|
|
1246
|
+
let _regLenBefore = registered.length;
|
|
1210
1247
|
await tick();
|
|
1211
1248
|
await tick();
|
|
1249
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1212
1250
|
expect(await registered.at(-1)?.execute({ fullname: 'Ada' })).toBe('Staged 1 change for review');
|
|
1213
1251
|
const fullname = screen.getByRole('textbox', { name: 'Full name' });
|
|
1214
1252
|
expect(fullname).toHaveAttribute('data-smrt-subject-type', 'person');
|
|
@@ -1219,8 +1257,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1219
1257
|
showAge: false,
|
|
1220
1258
|
formSubject: { type: 'person', id: 'person-2' },
|
|
1221
1259
|
});
|
|
1260
|
+
_regLenBefore = registered.length;
|
|
1222
1261
|
await tick();
|
|
1223
1262
|
await tick();
|
|
1263
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1224
1264
|
expect(await registered.at(-1)?.execute({ fullname: 'Grace' })).toBe('Staged 1 change for review');
|
|
1225
1265
|
expect(fullname).toHaveAttribute('data-smrt-subject-id', 'person-2');
|
|
1226
1266
|
expect(await screen.findByText(/person:person-2/)).toBeInTheDocument();
|
|
@@ -1250,8 +1290,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1250
1290
|
interactionRegistry: registry,
|
|
1251
1291
|
},
|
|
1252
1292
|
});
|
|
1293
|
+
const _regLenBefore = registered.length;
|
|
1253
1294
|
await tick();
|
|
1254
1295
|
await tick();
|
|
1296
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1255
1297
|
expect(registered.at(-1)?.inputSchema).toMatchObject({
|
|
1256
1298
|
properties: {
|
|
1257
1299
|
budget: {
|
|
@@ -1299,8 +1341,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1299
1341
|
};
|
|
1300
1342
|
const onsubmit = vi.fn();
|
|
1301
1343
|
render(FormWithStructuredFields, { props: { webmcp: true, onsubmit } });
|
|
1344
|
+
const _regLenBefore = registered.length;
|
|
1302
1345
|
await tick();
|
|
1303
1346
|
await tick();
|
|
1347
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1304
1348
|
expect(registered).toHaveLength(1);
|
|
1305
1349
|
const schema = registered[0].inputSchema;
|
|
1306
1350
|
expect(schema.required).toEqual(['measurement', 'dates', 'address']);
|
|
@@ -1370,19 +1414,43 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1370
1414
|
onaddresschange: addressChanged,
|
|
1371
1415
|
},
|
|
1372
1416
|
});
|
|
1417
|
+
const _regLenBefore = registered.length;
|
|
1373
1418
|
await tick();
|
|
1374
1419
|
await tick();
|
|
1420
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1375
1421
|
const addressProperties = () => {
|
|
1376
1422
|
const tool = registered.at(-1);
|
|
1377
1423
|
if (!tool)
|
|
1378
1424
|
throw new Error('WebMCP tool was not registered');
|
|
1379
1425
|
return tool.inputSchema.properties.address.properties;
|
|
1380
1426
|
};
|
|
1427
|
+
// `registered.at(-1)` is a snapshot: a registry-driven side effect from
|
|
1428
|
+
// an earlier step in this test (e.g. an "apply" attempt) can retrigger
|
|
1429
|
+
// the reactive tool spec and replace that snapshot before `.execute()`
|
|
1430
|
+
// runs against it. Retry against whatever is current rather than
|
|
1431
|
+
// asserting the specific instance stays live for the whole test.
|
|
1432
|
+
const executeLive = async (args) => {
|
|
1433
|
+
for (let attempt = 0;; attempt += 1) {
|
|
1434
|
+
const tool = registered.at(-1);
|
|
1435
|
+
if (!tool)
|
|
1436
|
+
throw new Error('WebMCP tool was not registered');
|
|
1437
|
+
try {
|
|
1438
|
+
return await tool.execute(args);
|
|
1439
|
+
}
|
|
1440
|
+
catch (error) {
|
|
1441
|
+
const stale = error instanceof Error &&
|
|
1442
|
+
error.message.includes('is no longer registered');
|
|
1443
|
+
if (!stale || attempt >= 9)
|
|
1444
|
+
throw error;
|
|
1445
|
+
await tick();
|
|
1446
|
+
}
|
|
1447
|
+
}
|
|
1448
|
+
};
|
|
1381
1449
|
expect(addressProperties()).toEqual({
|
|
1382
1450
|
province: { type: 'string', enum: ['', 'AB'] },
|
|
1383
1451
|
country: { type: 'string', enum: ['CA'] },
|
|
1384
1452
|
});
|
|
1385
|
-
await
|
|
1453
|
+
await executeLive({
|
|
1386
1454
|
address: { province: 'AB', country: 'CA' },
|
|
1387
1455
|
});
|
|
1388
1456
|
const identity = { formId: 'structured-fields', controlId: 'address' };
|
|
@@ -1398,9 +1466,16 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1398
1466
|
});
|
|
1399
1467
|
await tick();
|
|
1400
1468
|
await tick();
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1469
|
+
// A prop change here can drive the reactive tool spec through more than
|
|
1470
|
+
// one intermediate registration before it settles (address option
|
|
1471
|
+
// registries can update in a separate tick from the rerender itself), so
|
|
1472
|
+
// waiting only for `registered.length` to grow can observe a
|
|
1473
|
+
// soon-to-be-superseded entry. Poll the actual settled schema instead.
|
|
1474
|
+
await vi.waitFor(() => {
|
|
1475
|
+
expect(addressProperties()).toEqual({
|
|
1476
|
+
province: { type: 'string', enum: ['', 'IDF'] },
|
|
1477
|
+
country: { type: 'string', enum: ['FR'] },
|
|
1478
|
+
});
|
|
1404
1479
|
});
|
|
1405
1480
|
expect(await dispatchLocalGesture((event) => executeLocalControlCommand(registry, {
|
|
1406
1481
|
action: 'apply',
|
|
@@ -1408,7 +1483,7 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1408
1483
|
revision: registry.get(identity)?.state.staged?.revision,
|
|
1409
1484
|
}, event))).toMatchObject({ ok: false });
|
|
1410
1485
|
expect(addressChanged).not.toHaveBeenCalled();
|
|
1411
|
-
await
|
|
1486
|
+
await executeLive({
|
|
1412
1487
|
address: { province: 'IDF', country: 'FR' },
|
|
1413
1488
|
});
|
|
1414
1489
|
expect(registry.get(identity)?.state.staged).toMatchObject({ valid: true });
|
|
@@ -1421,7 +1496,7 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1421
1496
|
province: 'IDF',
|
|
1422
1497
|
country: 'FR',
|
|
1423
1498
|
});
|
|
1424
|
-
await
|
|
1499
|
+
await executeLive({
|
|
1425
1500
|
address: { province: 'XX', country: 'FR' },
|
|
1426
1501
|
});
|
|
1427
1502
|
expect(registry.get(identity)?.state.staged).toMatchObject({
|
|
@@ -1445,8 +1520,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1445
1520
|
interactionRegistry: registry,
|
|
1446
1521
|
},
|
|
1447
1522
|
});
|
|
1523
|
+
let _regLenBefore = registered.length;
|
|
1448
1524
|
await tick();
|
|
1449
1525
|
await tick();
|
|
1526
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1450
1527
|
const valueSchema = () => {
|
|
1451
1528
|
const tool = registered.at(-1);
|
|
1452
1529
|
if (!tool)
|
|
@@ -1477,8 +1554,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1477
1554
|
measurementStep: 2,
|
|
1478
1555
|
interactionRegistry: registry,
|
|
1479
1556
|
});
|
|
1557
|
+
_regLenBefore = registered.length;
|
|
1480
1558
|
await tick();
|
|
1481
1559
|
await tick();
|
|
1560
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1482
1561
|
expect(valueSchema()).toMatchObject({
|
|
1483
1562
|
type: 'number',
|
|
1484
1563
|
minimum: 2,
|
|
@@ -1503,8 +1582,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1503
1582
|
interactionRegistry: legacyRegistry,
|
|
1504
1583
|
},
|
|
1505
1584
|
});
|
|
1585
|
+
const _regLenBefore = registered.length;
|
|
1506
1586
|
await tick();
|
|
1507
1587
|
await tick();
|
|
1588
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1508
1589
|
expect(await registered.at(-1)?.execute({ fullname: 'Ada' })).toBe('Staged 1 change for review');
|
|
1509
1590
|
expect(legacyRegistry.list()[0]?.state.staged?.value).toBe('Ada');
|
|
1510
1591
|
await userEvent.click(screen.getByRole('button', { name: 'Apply Full name' }));
|
|
@@ -1528,8 +1609,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1528
1609
|
interactionRegistry: registry,
|
|
1529
1610
|
},
|
|
1530
1611
|
});
|
|
1612
|
+
const _regLenBefore = registered.length;
|
|
1531
1613
|
await tick();
|
|
1532
1614
|
await tick();
|
|
1615
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1533
1616
|
expect(registered).toHaveLength(1);
|
|
1534
1617
|
const schema = registered[0].inputSchema;
|
|
1535
1618
|
expect(schema.properties.address).toMatchObject({
|
|
@@ -1573,8 +1656,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1573
1656
|
interactionRegistry: registry,
|
|
1574
1657
|
},
|
|
1575
1658
|
});
|
|
1659
|
+
let _regLenBefore = registered.length;
|
|
1576
1660
|
await tick();
|
|
1577
1661
|
await tick();
|
|
1662
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1578
1663
|
await view.rerender({
|
|
1579
1664
|
webmcp: true,
|
|
1580
1665
|
addressFields: ['country'],
|
|
@@ -1584,8 +1669,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1584
1669
|
measurementMax: 200,
|
|
1585
1670
|
interactionRegistry: registry,
|
|
1586
1671
|
});
|
|
1672
|
+
_regLenBefore = registered.length;
|
|
1587
1673
|
await tick();
|
|
1588
1674
|
await tick();
|
|
1675
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1589
1676
|
const schema = registered.at(-1)?.inputSchema;
|
|
1590
1677
|
expect(schema.properties.address.properties).toEqual({
|
|
1591
1678
|
country: { type: 'string', enum: ['CA', 'US'] },
|
|
@@ -1622,16 +1709,20 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1622
1709
|
textRequired: false,
|
|
1623
1710
|
},
|
|
1624
1711
|
});
|
|
1712
|
+
let _regLenBefore = registered.length;
|
|
1625
1713
|
await tick();
|
|
1626
1714
|
await tick();
|
|
1715
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1627
1716
|
await view.rerender({
|
|
1628
1717
|
webmcp: true,
|
|
1629
1718
|
ageLabel: 'Maximum age',
|
|
1630
1719
|
ageMax: 100,
|
|
1631
1720
|
textRequired: true,
|
|
1632
1721
|
});
|
|
1722
|
+
_regLenBefore = registered.length;
|
|
1633
1723
|
await tick();
|
|
1634
1724
|
await tick();
|
|
1725
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1635
1726
|
const schema = registered.at(-1)?.inputSchema;
|
|
1636
1727
|
expect(schema.required).toContain('fullname');
|
|
1637
1728
|
expect(schema.properties.age).toMatchObject({
|
|
@@ -1653,8 +1744,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1653
1744
|
const view = render(FormWithPolicyField, {
|
|
1654
1745
|
props: { webmcp: true, interactionRegistry: registry },
|
|
1655
1746
|
});
|
|
1747
|
+
let _regLenBefore = registered.length;
|
|
1656
1748
|
await tick();
|
|
1657
1749
|
await tick();
|
|
1750
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1658
1751
|
expect(await registered.at(-1)?.execute({ policy: 'Grace' })).toBe('Staged 1 change for review');
|
|
1659
1752
|
const revision = registry.get({
|
|
1660
1753
|
formId: 'policy-form',
|
|
@@ -1667,8 +1760,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1667
1760
|
sensitivity: 'secret',
|
|
1668
1761
|
writable: false,
|
|
1669
1762
|
});
|
|
1763
|
+
_regLenBefore = registered.length;
|
|
1670
1764
|
await tick();
|
|
1671
1765
|
await tick();
|
|
1766
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1672
1767
|
expect(registered.at(-1)?.inputSchema).toMatchObject({ properties: {} });
|
|
1673
1768
|
const snapshot = registry.get({
|
|
1674
1769
|
formId: 'policy-form',
|
|
@@ -1696,8 +1791,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1696
1791
|
sensitivity: 'public',
|
|
1697
1792
|
writable: true,
|
|
1698
1793
|
});
|
|
1794
|
+
_regLenBefore = registered.length;
|
|
1699
1795
|
await tick();
|
|
1700
1796
|
await tick();
|
|
1797
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1701
1798
|
expect(registry.get({ formId: 'policy-form', controlId: 'policy' })?.state).not.toHaveProperty('staged');
|
|
1702
1799
|
});
|
|
1703
1800
|
it('allows partial payloads for optional structured fields', async () => {
|
|
@@ -1719,8 +1816,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1719
1816
|
interactionRegistry: registry,
|
|
1720
1817
|
},
|
|
1721
1818
|
});
|
|
1819
|
+
const _regLenBefore = registered.length;
|
|
1722
1820
|
await tick();
|
|
1723
1821
|
await tick();
|
|
1822
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1724
1823
|
expect(registered).toHaveLength(1);
|
|
1725
1824
|
const schema = registered[0].inputSchema;
|
|
1726
1825
|
expect(schema.properties.measurement).not.toHaveProperty('required');
|
|
@@ -1775,8 +1874,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1775
1874
|
render(FormWithStructuredFields, {
|
|
1776
1875
|
props: { webmcp: true, fieldsetDisabled: true },
|
|
1777
1876
|
});
|
|
1877
|
+
const _regLenBefore = registered.length;
|
|
1778
1878
|
await tick();
|
|
1779
1879
|
await tick();
|
|
1880
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1780
1881
|
const tool = registered.at(-1);
|
|
1781
1882
|
expect(tool?.inputSchema).toMatchObject({ properties: {} });
|
|
1782
1883
|
expect(await tool?.execute({ address: { city: 'Edmonton' } })).toBe('No reviewable changes provided');
|
|
@@ -1824,8 +1925,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1824
1925
|
showCollidingSibling: true,
|
|
1825
1926
|
},
|
|
1826
1927
|
});
|
|
1928
|
+
const _regLenBefore = registered.length;
|
|
1827
1929
|
await tick();
|
|
1828
1930
|
await tick();
|
|
1931
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1829
1932
|
expect(registered.at(-1)?.inputSchema).toMatchObject({ properties: {} });
|
|
1830
1933
|
expect(await registered.at(-1)?.execute({ user: { value: 2, unit: 'm' } })).toBe('No reviewable changes provided');
|
|
1831
1934
|
});
|
|
@@ -1847,8 +1950,10 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
1847
1950
|
interactionRegistry: registry,
|
|
1848
1951
|
},
|
|
1849
1952
|
});
|
|
1953
|
+
const _regLenBefore = registered.length;
|
|
1850
1954
|
await tick();
|
|
1851
1955
|
await tick();
|
|
1956
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
1852
1957
|
const tool = registered.at(-1);
|
|
1853
1958
|
if (!tool)
|
|
1854
1959
|
throw new Error('WebMCP tool was not registered');
|
|
@@ -2209,14 +2314,18 @@ describe('Form WebMCP staged-edit intent', () => {
|
|
|
2209
2314
|
const view = render(FormWithStructuredFields, {
|
|
2210
2315
|
props: { webmcp: true },
|
|
2211
2316
|
});
|
|
2317
|
+
let _regLenBefore = registered.length;
|
|
2212
2318
|
await tick();
|
|
2213
2319
|
await tick();
|
|
2320
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
2214
2321
|
expect(registered.at(-1)?.inputSchema).toMatchObject({
|
|
2215
2322
|
properties: { dates: expect.any(Object) },
|
|
2216
2323
|
});
|
|
2217
2324
|
await view.rerender({ webmcp: true, fieldsetDisabled: true });
|
|
2325
|
+
_regLenBefore = registered.length;
|
|
2218
2326
|
await tick();
|
|
2219
2327
|
await tick();
|
|
2328
|
+
await vi.waitFor(() => expect(registered.length).toBeGreaterThan(_regLenBefore));
|
|
2220
2329
|
expect(registered.at(-1)?.inputSchema).toMatchObject({ properties: {} });
|
|
2221
2330
|
expect(await registered.at(-1)?.execute({
|
|
2222
2331
|
dates: { startDate: '2026-08-26', endDate: '2026-08-27' },
|
|
@@ -7,14 +7,23 @@ import { M } from '../../i18n/strings.settings.js';
|
|
|
7
7
|
import type { SettingsCatalogItem, SettingsCatalogPage } from './types.js';
|
|
8
8
|
|
|
9
9
|
interface Props<T extends SettingsCatalogItem, D extends { id: string }> {
|
|
10
|
+
/** Paginated catalog data with items, current page, and totals. */
|
|
10
11
|
page: SettingsCatalogPage<T, D>;
|
|
12
|
+
/** Base URL for navigation and search links. */
|
|
11
13
|
baseUrl: string;
|
|
14
|
+
/** Render snippet for the detail pane, receives the selected item. */
|
|
12
15
|
detail: Snippet<[{ item: D }]>;
|
|
16
|
+
/** Placeholder text for the search input field. */
|
|
13
17
|
searchPlaceholder?: string;
|
|
18
|
+
/** Label for the search input field. */
|
|
14
19
|
searchLabel?: string;
|
|
20
|
+
/** Label for the results list navigation. */
|
|
15
21
|
resultsLabel?: string;
|
|
22
|
+
/** Text shown when there are no search results. */
|
|
16
23
|
emptyLabel?: string;
|
|
24
|
+
/** Text shown when no item is selected. */
|
|
17
25
|
selectionLabel?: string;
|
|
26
|
+
/** URL search parameters to preserve across pagination. */
|
|
18
27
|
preservedParams?: Record<string, string>;
|
|
19
28
|
}
|
|
20
29
|
|
|
@@ -3,16 +3,25 @@ import type { SettingsCatalogItem, SettingsCatalogPage } from './types.js';
|
|
|
3
3
|
interface Props<T extends SettingsCatalogItem, D extends {
|
|
4
4
|
id: string;
|
|
5
5
|
}> {
|
|
6
|
+
/** Paginated catalog data with items, current page, and totals. */
|
|
6
7
|
page: SettingsCatalogPage<T, D>;
|
|
8
|
+
/** Base URL for navigation and search links. */
|
|
7
9
|
baseUrl: string;
|
|
10
|
+
/** Render snippet for the detail pane, receives the selected item. */
|
|
8
11
|
detail: Snippet<[{
|
|
9
12
|
item: D;
|
|
10
13
|
}]>;
|
|
14
|
+
/** Placeholder text for the search input field. */
|
|
11
15
|
searchPlaceholder?: string;
|
|
16
|
+
/** Label for the search input field. */
|
|
12
17
|
searchLabel?: string;
|
|
18
|
+
/** Label for the results list navigation. */
|
|
13
19
|
resultsLabel?: string;
|
|
20
|
+
/** Text shown when there are no search results. */
|
|
14
21
|
emptyLabel?: string;
|
|
22
|
+
/** Text shown when no item is selected. */
|
|
15
23
|
selectionLabel?: string;
|
|
24
|
+
/** URL search parameters to preserve across pagination. */
|
|
16
25
|
preservedParams?: Record<string, string>;
|
|
17
26
|
}
|
|
18
27
|
declare function $$render<T extends SettingsCatalogItem, D extends {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsCatalog.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/settings/SettingsCatalog.svelte.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SettingsCatalog.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/settings/SettingsCatalog.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAG3E,UAAU,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IACrE,mEAAmE;IACnE,IAAI,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC,CAAC;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IAC/B,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAAC,iBAAS,QAAQ,CAAC,CAAC,SAAS,mBAAmB,EAAE,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC;WAsHlD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;;;;;EAA4E;AACpH,cAAM,iBAAiB,CAAC,CAAC,SAAS,mBAAmB,EAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC;IAC9E,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAClD,MAAM,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpD,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAClD,QAAQ;IACR,OAAO;CACV;AAED,UAAU,qBAAqB;IAC3B,KAAK,CAAC,SAAS,mBAAmB,EAAC,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACjc,CAAC,CAAC,SAAS,mBAAmB,EAAC,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACxL,YAAY,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CACrE;AACD,QAAA,MAAM,eAAe,EAAE,qBAAmC,CAAC;AACzC,KAAK,eAAe,CAAC,CAAC,SAAS,mBAAmB,EAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC,IAAI,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;AAC/H,eAAe,eAAe,CAAC"}
|
|
@@ -4,7 +4,9 @@ import { useAdminShell } from './context.js';
|
|
|
4
4
|
import type { PanelEdge } from './types.js';
|
|
5
5
|
|
|
6
6
|
interface Props {
|
|
7
|
+
/** Which panel edge to fetch activity status from. */
|
|
7
8
|
edge: PanelEdge;
|
|
9
|
+
/** Accessibility label for the activity badge. */
|
|
8
10
|
label?: string;
|
|
9
11
|
}
|
|
10
12
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { PanelEdge } from './types.js';
|
|
2
2
|
interface Props {
|
|
3
|
+
/** Which panel edge to fetch activity status from. */
|
|
3
4
|
edge: PanelEdge;
|
|
5
|
+
/** Accessibility label for the activity badge. */
|
|
4
6
|
label?: string;
|
|
5
7
|
}
|
|
6
8
|
declare const ActivityBadge: import("svelte").Component<Props, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityBadge.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/ActivityBadge.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,UAAU,KAAK;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoBD,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"ActivityBadge.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/ActivityBadge.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,UAAU,KAAK;IACb,sDAAsD;IACtD,IAAI,EAAE,SAAS,CAAC;IAChB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoBD,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityItem.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/ActivityItem.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,UAAU,KAAK;IACb,QAAQ,EAAE,aAAa,CAAC;CACzB;AA2CD,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"ActivityItem.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/ActivityItem.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,UAAU,KAAK;IACb,iFAAiF;IACjF,QAAQ,EAAE,aAAa,CAAC;CACzB;AA2CD,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
|
|
@@ -6,8 +6,11 @@ import { useAdminShell } from './context.js';
|
|
|
6
6
|
import type { ShellActivityFilter } from './types.js';
|
|
7
7
|
|
|
8
8
|
interface Props {
|
|
9
|
+
/** Criteria to filter activities. */
|
|
9
10
|
filter?: ShellActivityFilter;
|
|
11
|
+
/** Hide the list entirely when no activities match the filter. */
|
|
10
12
|
hideWhenEmpty?: boolean;
|
|
13
|
+
/** Text shown when no activities are available. */
|
|
11
14
|
emptyLabel?: string;
|
|
12
15
|
}
|
|
13
16
|
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ShellActivityFilter } from './types.js';
|
|
2
2
|
interface Props {
|
|
3
|
+
/** Criteria to filter activities. */
|
|
3
4
|
filter?: ShellActivityFilter;
|
|
5
|
+
/** Hide the list entirely when no activities match the filter. */
|
|
4
6
|
hideWhenEmpty?: boolean;
|
|
7
|
+
/** Text shown when no activities are available. */
|
|
5
8
|
emptyLabel?: string;
|
|
6
9
|
}
|
|
7
10
|
declare const ActivityList: import("svelte").Component<Props, {}, "">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityList.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/ActivityList.svelte.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtD,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA+BD,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"ActivityList.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/ActivityList.svelte.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtD,UAAU,KAAK;IACb,qCAAqC;IACrC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,kEAAkE;IAClE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA+BD,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
|