@happyvertical/smrt-content 0.44.0 → 0.45.0

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.
Files changed (52) hide show
  1. package/agents/content-list.md +93 -14
  2. package/dist/chunks/{content-corrections-BxfA3tW1.js → content-corrections-B4mPd_th.js} +6 -3
  3. package/dist/chunks/content-corrections-B4mPd_th.js.map +1 -0
  4. package/dist/chunks/{content-query-B4cHfrig.js → content-query-BV41W2Dq.js} +6 -6
  5. package/dist/chunks/{content-query-B4cHfrig.js.map → content-query-BV41W2Dq.js.map} +1 -1
  6. package/dist/chunks/{content-reviews-BWrYEQc6.js → content-reviews-lBoqJY7Y.js} +6 -3
  7. package/dist/chunks/content-reviews-lBoqJY7Y.js.map +1 -0
  8. package/dist/chunks/{content-versions-OEYQVrUf.js → content-versions-dZSBU8UF.js} +6 -3
  9. package/dist/chunks/content-versions-dZSBU8UF.js.map +1 -0
  10. package/dist/chunks/{contents-BrGxWH3s.js → contents-Ba7JHu2K.js} +2 -2
  11. package/dist/chunks/{contents-BrGxWH3s.js.map → contents-Ba7JHu2K.js.map} +1 -1
  12. package/dist/content-contribution.d.ts +1 -1
  13. package/dist/content-contribution.d.ts.map +1 -1
  14. package/dist/index.js +12 -9
  15. package/dist/index.js.map +1 -1
  16. package/dist/manifest.json +2268 -4345
  17. package/dist/server/content-list-actions.d.ts +10 -3
  18. package/dist/server/content-list-actions.d.ts.map +1 -1
  19. package/dist/server/content-list-data-surface.d.ts +29 -0
  20. package/dist/server/content-list-data-surface.d.ts.map +1 -0
  21. package/dist/server/content-list-lifecycle.d.ts +20 -0
  22. package/dist/server/content-list-lifecycle.d.ts.map +1 -0
  23. package/dist/server.d.ts +2 -0
  24. package/dist/server.d.ts.map +1 -1
  25. package/dist/server.js +247 -25
  26. package/dist/server.js.map +1 -1
  27. package/dist/smrt-knowledge.json +4291 -2510
  28. package/dist/svelte/components/ContentList.svelte +538 -40
  29. package/dist/svelte/components/ContentList.svelte.d.ts +6 -1
  30. package/dist/svelte/components/ContentList.svelte.d.ts.map +1 -1
  31. package/dist/svelte/components/ContentListLifecyclePanel.svelte +387 -0
  32. package/dist/svelte/components/ContentListLifecyclePanel.svelte.d.ts +17 -0
  33. package/dist/svelte/components/ContentListLifecyclePanel.svelte.d.ts.map +1 -0
  34. package/dist/svelte/content-list-controller.d.ts +10 -0
  35. package/dist/svelte/content-list-controller.d.ts.map +1 -1
  36. package/dist/svelte/content-list-controller.js +111 -26
  37. package/dist/svelte/content-list-data-surface.d.ts +45 -0
  38. package/dist/svelte/content-list-data-surface.d.ts.map +1 -0
  39. package/dist/svelte/content-list-data-surface.js +196 -0
  40. package/dist/svelte/content-list-lifecycle.d.ts +132 -0
  41. package/dist/svelte/content-list-lifecycle.d.ts.map +1 -0
  42. package/dist/svelte/content-list-lifecycle.js +439 -0
  43. package/dist/svelte/i18n.contribution.d.ts +27 -0
  44. package/dist/svelte/i18n.contribution.d.ts.map +1 -1
  45. package/dist/svelte/i18n.contribution.js +27 -0
  46. package/dist/svelte/index.d.ts +2 -0
  47. package/dist/svelte/index.d.ts.map +1 -1
  48. package/dist/svelte/index.js +2 -0
  49. package/package.json +15 -15
  50. package/dist/chunks/content-corrections-BxfA3tW1.js.map +0 -1
  51. package/dist/chunks/content-reviews-BWrYEQc6.js.map +0 -1
  52. package/dist/chunks/content-versions-OEYQVrUf.js.map +0 -1
@@ -25,6 +25,7 @@ export interface ContentListUrlStateBinding {
25
25
  }
26
26
  import type { Snippet } from 'svelte';
27
27
  import type { ContentData } from '../../mock-smrt-client.js';
28
+ import type { ContentListLifecycleBinding } from '../content-list-lifecycle.js';
28
29
  import { type ContentListDataSurface, type ContentListViewMode } from '../content-list-controller.js';
29
30
  import { type ContentListQuerySource } from '../content-list-query.js';
30
31
  import { type ContentListJobBinding } from '../content-list-runtime.js';
@@ -59,7 +60,7 @@ interface Props {
59
60
  error?: string | null;
60
61
  /** Retry affordance rendered with an error. */
61
62
  onRetry?: () => void;
62
- /** Opt-in agent addressability. Non-table presentations land with #2456. */
63
+ /** Opt-in agent addressability shared by every list presentation. */
63
64
  dataSurface?: ContentListDataSurface;
64
65
  /**
65
66
  * Opt-in server-backed rows (#2452). `bind()` is called exactly once, during
@@ -76,6 +77,10 @@ interface Props {
76
77
  jobs?: ContentListJobBinding;
77
78
  /** Opt-in, authenticated preview/apply client for bulk workflows (#2453). */
78
79
  workflows?: ContentListWorkflowBinding;
80
+ /** Opt-in, server-authoritative trash/restore/permanent-delete lifecycle. */
81
+ lifecycle?: ContentListLifecycleBinding;
82
+ /** Locks the status query to deleted content and exposes trash actions. */
83
+ lifecycleMode?: 'active' | 'trash';
79
84
  }
80
85
  declare const ContentList: import("svelte").Component<Props, {}, "">;
81
86
  type ContentList = ReturnType<typeof ContentList>;
@@ -1 +1 @@
1
- {"version":3,"file":"ContentList.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ContentList.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,IAAI,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE/E;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CACT,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,6BAA6B,KACjC,IAAI,CAAC;IACV,uEAAuE;IACvE,OAAO,CAAC,EAAE,0BAA0B,CAAC;CACtC;AAcD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EASL,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EAiBzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAOL,KAAK,sBAAsB,EAU5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGL,KAAK,qBAAqB,EAG3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEL,KAAK,yBAAyB,EAG/B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,KAAK,0BAA0B,EAOhC,MAAM,8BAA8B,CAAC;AAgBtC,UAAU,KAAK;IACb,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,6DAA6D;IAC7D,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,4DAA4D;IAC5D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,MAAM,GAAG,IAAI,CAAC;IACtD,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,oFAAoF;IACpF,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,6EAA6E;IAC7E,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC7B,6EAA6E;IAC7E,SAAS,CAAC,EAAE,0BAA0B,CAAC;CACxC;AAq9ED,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"ContentList.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ContentList.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,IAAI,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE/E;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CACT,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,6BAA6B,KACjC,IAAI,CAAC;IACV,uEAAuE;IACvE,OAAO,CAAC,EAAE,0BAA0B,CAAC;CACtC;AAcD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAUhF,OAAO,EASL,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EAiBzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAOL,KAAK,sBAAsB,EAU5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGL,KAAK,qBAAqB,EAG3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEL,KAAK,yBAAyB,EAG/B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,KAAK,0BAA0B,EAOhC,MAAM,8BAA8B,CAAC;AAiBtC,UAAU,KAAK;IACb,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,6DAA6D;IAC7D,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,4DAA4D;IAC5D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,MAAM,GAAG,IAAI,CAAC;IACtD,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,oFAAoF;IACpF,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,6EAA6E;IAC7E,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC7B,6EAA6E;IAC7E,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,6EAA6E;IAC7E,SAAS,CAAC,EAAE,2BAA2B,CAAC;IACxC,2EAA2E;IAC3E,aAAa,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACpC;AA26FD,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,387 @@
1
+ <script lang="ts">
2
+ import type {
3
+ DataSurfaceActionResult,
4
+ DataSurfaceRowId,
5
+ } from '@happyvertical/smrt-ui/data';
6
+ import { Modal } from '@happyvertical/smrt-ui/feedback';
7
+ import { Input, Select } from '@happyvertical/smrt-ui/forms';
8
+ import { useI18n } from '@happyvertical/smrt-ui/i18n';
9
+ import { Button } from '@happyvertical/smrt-ui/ui';
10
+ import { onDestroy, untrack } from 'svelte';
11
+ import {
12
+ type ContentListLifecycleActionId,
13
+ type ContentListLifecycleBinding,
14
+ type ContentListLifecycleSnapshot,
15
+ type ContentListRestoreStatus,
16
+ createContentListLifecycleController,
17
+ } from '../content-list-lifecycle.js';
18
+ import type { ContentListDataQueryRequest } from '../content-list-query.js';
19
+ import { M } from '../i18n.contribution.js';
20
+
21
+ const { t } = useI18n();
22
+
23
+ interface Props {
24
+ binding: ContentListLifecycleBinding;
25
+ mode: 'active' | 'trash';
26
+ selectedRowIds: DataSurfaceRowId[];
27
+ query?: ContentListDataQueryRequest;
28
+ queryFingerprint?: string;
29
+ exactMatchingCount?: number;
30
+ viewKey: string;
31
+ oncomplete: (result: DataSurfaceActionResult) => void;
32
+ }
33
+
34
+ let {
35
+ binding,
36
+ mode,
37
+ selectedRowIds,
38
+ query = undefined,
39
+ queryFingerprint = undefined,
40
+ exactMatchingCount = undefined,
41
+ viewKey,
42
+ oncomplete,
43
+ }: Props = $props();
44
+
45
+ let controller = createContentListLifecycleController(untrack(() => binding));
46
+ let snapshot = $state<ContentListLifecycleSnapshot>(controller.snapshot());
47
+ let lastResult = $state<ContentListLifecycleSnapshot['summary']>();
48
+ let dialogOpen = $state(false);
49
+ let countConfirmation = $state('');
50
+ let restoreStatus = $state<ContentListRestoreStatus>('draft');
51
+ let intent = $state<'selected' | 'all-matching'>('selected');
52
+
53
+ let unsubscribe = controller.subscribe((next) => {
54
+ snapshot = next;
55
+ });
56
+
57
+ function sameBindingAuthority(
58
+ left: ContentListLifecycleBinding,
59
+ right: ContentListLifecycleBinding,
60
+ ): boolean {
61
+ return (
62
+ left.client === right.client &&
63
+ left.client.preview === right.client.preview &&
64
+ left.client.apply === right.client.apply &&
65
+ left.revision === right.revision &&
66
+ left.maxSelectionSize === right.maxSelectionSize &&
67
+ left.identity?.kind === right.identity?.kind &&
68
+ left.identity?.surfaceId === right.identity?.surfaceId &&
69
+ left.identity?.subject?.type === right.identity?.subject?.type &&
70
+ left.identity?.subject?.id === right.identity?.subject?.id
71
+ );
72
+ }
73
+
74
+ let installedBinding = untrack(() => binding);
75
+
76
+ function replaceController(nextBinding: ContentListLifecycleBinding): void {
77
+ unsubscribe();
78
+ controller.reset();
79
+ controller = createContentListLifecycleController(nextBinding);
80
+ snapshot = controller.snapshot();
81
+ lastResult = undefined;
82
+ dialogOpen = false;
83
+ countConfirmation = '';
84
+ unsubscribe = controller.subscribe((next) => {
85
+ snapshot = next;
86
+ });
87
+ }
88
+
89
+ $effect(() => {
90
+ const nextBinding = binding;
91
+ if (sameBindingAuthority(installedBinding, nextBinding)) return;
92
+ replaceController(nextBinding);
93
+ installedBinding = nextBinding;
94
+ });
95
+
96
+ onDestroy(() => unsubscribe());
97
+
98
+ $effect(() => {
99
+ controller.invalidate(viewKey);
100
+ if (snapshot.status === 'idle') {
101
+ dialogOpen = false;
102
+ countConfirmation = '';
103
+ }
104
+ });
105
+
106
+ const busy = $derived(
107
+ snapshot.status === 'previewing' ||
108
+ snapshot.status === 'applying' ||
109
+ snapshot.replayRequired === true,
110
+ );
111
+ const selectedCount = $derived(selectedRowIds.length);
112
+ const selectionLimit = $derived(binding.maxSelectionSize ?? 200);
113
+ const selectedSelectionTooLarge = $derived(selectedCount > selectionLimit);
114
+ const matchingSelectionTooLarge = $derived(
115
+ exactMatchingCount !== undefined && exactMatchingCount > selectionLimit,
116
+ );
117
+ const resolvedCount = $derived(snapshot.summary?.resolvedCount ?? 0);
118
+ const requiresTypedCount = $derived(snapshot.actionId === 'permanent-delete');
119
+ const confirmationValid = $derived(
120
+ !requiresTypedCount || countConfirmation.trim() === String(resolvedCount),
121
+ );
122
+
123
+ function selectionFor(scope: 'selected' | 'all-matching') {
124
+ return scope === 'selected'
125
+ ? { scope: 'explicit-ids' as const, rowIds: [...selectedRowIds] }
126
+ : {
127
+ scope: 'all-matching' as const,
128
+ queryFingerprint: queryFingerprint ?? '',
129
+ };
130
+ }
131
+
132
+ async function begin(
133
+ actionId: ContentListLifecycleActionId,
134
+ scope: 'selected' | 'all-matching' = 'selected',
135
+ ) {
136
+ if (
137
+ (scope === 'selected' && selectedSelectionTooLarge) ||
138
+ (scope === 'all-matching' && matchingSelectionTooLarge)
139
+ )
140
+ return;
141
+ intent = scope;
142
+ countConfirmation = '';
143
+ dialogOpen = true;
144
+ await controller.preview({
145
+ actionId,
146
+ selection: selectionFor(scope),
147
+ expectedCount:
148
+ scope === 'selected' ? selectedCount : (exactMatchingCount ?? -1),
149
+ ...(scope === 'all-matching' && query ? { query } : {}),
150
+ ...(actionId === 'restore' ? { restoreStatus } : {}),
151
+ viewKey,
152
+ });
153
+ }
154
+
155
+ async function apply() {
156
+ const next = await controller.apply(resolvedCount);
157
+ if (next.status !== 'succeeded' || !next.result) return;
158
+ lastResult = next.summary;
159
+ oncomplete(next.result);
160
+ }
161
+
162
+ function close() {
163
+ if (busy) return;
164
+ dialogOpen = false;
165
+ controller.reset();
166
+ }
167
+
168
+ function retryPreview() {
169
+ if (!snapshot.actionId) return;
170
+ void begin(snapshot.actionId, intent);
171
+ }
172
+ </script>
173
+
174
+ <section
175
+ class="lifecycle"
176
+ aria-label={mode === 'trash'
177
+ ? t(M['content.content_list.trash_actions'])
178
+ : t(M['content.content_list.lifecycle_actions'])}
179
+ >
180
+ {#if mode === 'active'}
181
+ <Button
182
+ variant="ghost"
183
+ size="sm"
184
+ type="button"
185
+ disabled={selectedCount === 0 || selectedSelectionTooLarge || busy}
186
+ onclick={() => begin('move-to-trash')}
187
+ >{t(M['content.content_list.move_selected_to_trash'])}</Button>
188
+ {:else}
189
+ <Select
190
+ aria-label={t(M['content.content_list.restore_destination'])}
191
+ bind:value={restoreStatus}
192
+ disabled={busy || dialogOpen}
193
+ >
194
+ <option value="draft">{t(M['content.content_list.restore_as_draft'])}</option>
195
+ <option value="review">{t(M['content.content_list.restore_for_review'])}</option>
196
+ <option value="published">{t(M['content.content_list.restore_and_publish'])}</option>
197
+ </Select>
198
+ <Button
199
+ variant="ghost"
200
+ size="sm"
201
+ type="button"
202
+ disabled={selectedCount === 0 || selectedSelectionTooLarge || busy}
203
+ onclick={() => begin('restore')}
204
+ >{t(M['content.content_list.restore_selected'])}</Button>
205
+ <Button
206
+ variant="ghost"
207
+ size="sm"
208
+ type="button"
209
+ disabled={selectedCount === 0 || selectedSelectionTooLarge || busy}
210
+ onclick={() => begin('permanent-delete')}
211
+ >{t(M['content.content_list.delete_selected_permanently'])}</Button>
212
+ <Button
213
+ variant="ghost"
214
+ size="sm"
215
+ type="button"
216
+ disabled={exactMatchingCount === undefined || exactMatchingCount === 0 || matchingSelectionTooLarge || !query || !queryFingerprint || busy}
217
+ onclick={() => begin('permanent-delete', 'all-matching')}
218
+ >{t(M['content.content_list.empty_trash'])}</Button>
219
+ {/if}
220
+ </section>
221
+ {#if mode === 'trash' && matchingSelectionTooLarge}
222
+ <p class="selection-limit" role="status">
223
+ {t(M['content.content_list.empty_trash_limit'], { count: selectionLimit })}
224
+ </p>
225
+ {/if}
226
+ {#if lastResult}
227
+ <div class="lifecycle-result" aria-live="polite">
228
+ <p>
229
+ {t(M['content.content_list.lifecycle_completed_summary'], {
230
+ accepted: lastResult.accepted,
231
+ skipped: lastResult.skipped,
232
+ failed: lastResult.failed,
233
+ reference: lastResult.auditReference,
234
+ })}
235
+ </p>
236
+ {#if lastResult.skipped > 0 || lastResult.failed > 0}
237
+ <ul aria-label={t(M['content.content_list.lifecycle_exceptions'])}>
238
+ {#each lastResult.outcomes.filter((outcome) => outcome.status !== 'accepted') as outcome}
239
+ <li>{String(outcome.rowId)}: {outcome.reason ?? outcome.status}</li>
240
+ {/each}
241
+ </ul>
242
+ {/if}
243
+ </div>
244
+ {/if}
245
+
246
+ <Modal
247
+ open={dialogOpen}
248
+ title={snapshot.actionId === 'permanent-delete'
249
+ ? t(M['content.content_list.permanent_delete_title'])
250
+ : snapshot.actionId === 'restore'
251
+ ? t(M['content.content_list.restore_title'])
252
+ : t(M['content.content_list.move_to_trash_title'])}
253
+ size="md"
254
+ closeOnBackdrop={!busy}
255
+ closeOnEscape={!busy}
256
+ showClose={!busy}
257
+ onClose={close}
258
+ ariaDescribedBy="content-lifecycle-summary"
259
+ >
260
+ <div class="preview" aria-live="polite" aria-busy={busy}>
261
+ {#if snapshot.status === 'previewing'}
262
+ <p id="content-lifecycle-summary">
263
+ {t(M['content.content_list.lifecycle_resolving'])}
264
+ </p>
265
+ {:else if snapshot.status === 'applying'}
266
+ <p role="status">
267
+ {t(M['content.content_list.workflow_applying'])}
268
+ </p>
269
+ {#if snapshot.summary}
270
+ <p id="content-lifecycle-summary">
271
+ {t(M['content.content_list.lifecycle_resolved'], {
272
+ count: snapshot.summary.resolvedCount,
273
+ })}
274
+ </p>
275
+ {/if}
276
+ {:else if snapshot.summary}
277
+ <p id="content-lifecycle-summary">
278
+ {t(M['content.content_list.lifecycle_resolved'], {
279
+ count: snapshot.summary.resolvedCount,
280
+ })}
281
+ </p>
282
+ {#if snapshot.summary.representativeLabels.length > 0}
283
+ <p>{t(M['content.content_list.lifecycle_examples'], {
284
+ examples: snapshot.summary.representativeLabels.join(', '),
285
+ })}</p>
286
+ {/if}
287
+ <p>
288
+ {t(M['content.content_list.lifecycle_eligibility'], {
289
+ accepted: snapshot.summary.accepted,
290
+ skipped: snapshot.summary.skipped,
291
+ failed: snapshot.summary.failed,
292
+ })}
293
+ </p>
294
+ {#if snapshot.actionId === 'permanent-delete'}
295
+ <p>{t(M['content.content_list.permanent_delete_warning'], {
296
+ count: snapshot.summary.resolvedCount,
297
+ })}</p>
298
+ <Input
299
+ aria-label={t(M['content.content_list.permanent_delete_count_label'])}
300
+ inputmode="numeric"
301
+ autocomplete="off"
302
+ bind:value={countConfirmation}
303
+ disabled={busy || snapshot.status !== 'ready'}
304
+ />
305
+ {/if}
306
+ {/if}
307
+
308
+ {#if snapshot.error}
309
+ <p class="error" role="alert">{snapshot.error}</p>
310
+ {/if}
311
+ {#if snapshot.status === 'succeeded' && snapshot.summary}
312
+ <p role="status">
313
+ {t(M['content.content_list.lifecycle_completed_audit'], {
314
+ reference: snapshot.summary.auditReference,
315
+ })}
316
+ </p>
317
+ {#if snapshot.summary.skipped > 0 || snapshot.summary.failed > 0}
318
+ <ul aria-label={t(M['content.content_list.lifecycle_exceptions'])}>
319
+ {#each snapshot.summary.outcomes.filter((outcome) => outcome.status !== 'accepted') as outcome}
320
+ <li>{String(outcome.rowId)}: {outcome.reason ?? outcome.status}</li>
321
+ {/each}
322
+ </ul>
323
+ {/if}
324
+ {/if}
325
+
326
+ <div class="actions">
327
+ <Button variant="ghost" type="button" disabled={busy} onclick={close}>
328
+ {snapshot.status === 'succeeded'
329
+ ? t(M['content.content_list.lifecycle_close'])
330
+ : t(M['content.content_list.cancel'])}
331
+ </Button>
332
+ {#if snapshot.status === 'failed' && snapshot.renewalRequired}
333
+ <Button type="button" onclick={retryPreview}>
334
+ {t(M['content.content_list.lifecycle_renew_preview'])}
335
+ </Button>
336
+ {:else if snapshot.status === 'failed'}
337
+ <Button type="button" onclick={apply}>
338
+ {t(M['content.content_list.retry'])}
339
+ </Button>
340
+ {:else if snapshot.status === 'ready'}
341
+ <Button
342
+ type="button"
343
+ disabled={!confirmationValid || resolvedCount === 0}
344
+ onclick={apply}
345
+ >{t(M['content.content_list.lifecycle_confirm_count'], {
346
+ count: resolvedCount,
347
+ })}</Button>
348
+ {/if}
349
+ </div>
350
+ </div>
351
+ </Modal>
352
+
353
+ <style>
354
+ .lifecycle,
355
+ .actions {
356
+ display: flex;
357
+ align-items: center;
358
+ flex-wrap: wrap;
359
+ gap: 0.5rem;
360
+ }
361
+
362
+ .preview {
363
+ display: grid;
364
+ gap: 0.75rem;
365
+ }
366
+
367
+ .preview p {
368
+ margin: 0;
369
+ }
370
+
371
+ .lifecycle-result p {
372
+ margin: 0.5rem 0 0;
373
+ }
374
+
375
+ .selection-limit {
376
+ margin: 0.5rem 0 0;
377
+ }
378
+
379
+ .actions {
380
+ justify-content: flex-end;
381
+ margin-top: 0.5rem;
382
+ }
383
+
384
+ .error {
385
+ color: var(--smrt-color-error, #b3261e);
386
+ }
387
+ </style>
@@ -0,0 +1,17 @@
1
+ import type { DataSurfaceActionResult, DataSurfaceRowId } from '@happyvertical/smrt-ui/data';
2
+ import { type ContentListLifecycleBinding } from '../content-list-lifecycle.js';
3
+ import type { ContentListDataQueryRequest } from '../content-list-query.js';
4
+ interface Props {
5
+ binding: ContentListLifecycleBinding;
6
+ mode: 'active' | 'trash';
7
+ selectedRowIds: DataSurfaceRowId[];
8
+ query?: ContentListDataQueryRequest;
9
+ queryFingerprint?: string;
10
+ exactMatchingCount?: number;
11
+ viewKey: string;
12
+ oncomplete: (result: DataSurfaceActionResult) => void;
13
+ }
14
+ declare const ContentListLifecyclePanel: import("svelte").Component<Props, {}, "">;
15
+ type ContentListLifecyclePanel = ReturnType<typeof ContentListLifecyclePanel>;
16
+ export default ContentListLifecyclePanel;
17
+ //# sourceMappingURL=ContentListLifecyclePanel.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentListLifecyclePanel.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ContentListLifecyclePanel.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EAEL,KAAK,2BAA2B,EAIjC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAI5E,UAAU,KAAK;IACb,OAAO,EAAE,2BAA2B,CAAC;IACrC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,2BAA2B,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;CACvD;AAgSD,QAAA,MAAM,yBAAyB,2CAAwC,CAAC;AACxE,KAAK,yBAAyB,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC9E,eAAe,yBAAyB,CAAC"}
@@ -105,6 +105,16 @@ export interface ContentListSurfaceDescriptorOptions {
105
105
  limits?: Partial<DataSurfaceLimits>;
106
106
  /** Publish bulk workflow actions only when the mounted list can execute them. */
107
107
  includeWorkflows?: boolean;
108
+ /** Narrows discovery to operations the server query translator can execute. */
109
+ serverBacked?: boolean;
110
+ /** Publish the server-authoritative lifecycle actions available to this list. */
111
+ lifecycle?: boolean;
112
+ /** Trash lists expose restore/delete rather than active editing actions. */
113
+ lifecycleMode?: 'active' | 'trash';
114
+ /** A mounted query can refresh the currently visible result. */
115
+ refresh?: boolean;
116
+ /** A mounted query or host callback can retry a failed result. */
117
+ retry?: boolean;
108
118
  }
109
119
  /**
110
120
  * Opt-in agent addressability for the compact table. The host owns the
@@ -1 +1 @@
1
- {"version":3,"file":"content-list-controller.d.ts","sourceRoot":"","sources":["../../src/svelte/content-list-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-list-controller.d.ts","sourceRoot":"","sources":["../../src/svelte/content-list-controller.ts"],"names":[],"mappings":"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"}