@aphexcms/cms-core 2.0.5 → 2.0.7

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 (106) hide show
  1. package/dist/api/documents.d.ts +18 -0
  2. package/dist/api/documents.d.ts.map +1 -1
  3. package/dist/api/documents.js +22 -1
  4. package/dist/components/AdminApp.svelte +53 -1
  5. package/dist/components/AdminApp.svelte.d.ts.map +1 -1
  6. package/dist/components/admin/DocumentEditor.svelte +440 -51
  7. package/dist/components/admin/DocumentEditor.svelte.d.ts +7 -0
  8. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  9. package/dist/components/admin/DocumentVersionPanel.svelte +138 -0
  10. package/dist/components/admin/DocumentVersionPanel.svelte.d.ts +15 -0
  11. package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -0
  12. package/dist/components/admin/MediaBrowser.svelte +42 -13
  13. package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
  14. package/dist/components/admin/fields/ArrayField.svelte +102 -2
  15. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
  16. package/dist/components/index.d.ts +1 -0
  17. package/dist/components/index.d.ts.map +1 -1
  18. package/dist/components/index.js +1 -0
  19. package/dist/db/interfaces/document.d.ts +14 -0
  20. package/dist/db/interfaces/document.d.ts.map +1 -1
  21. package/dist/db/interfaces/index.d.ts +6 -0
  22. package/dist/db/interfaces/index.d.ts.map +1 -1
  23. package/dist/graphql/resolvers.js +1 -1
  24. package/dist/lib/api/documents.d.ts +18 -0
  25. package/dist/lib/api/documents.d.ts.map +1 -1
  26. package/dist/lib/api/documents.js +22 -1
  27. package/dist/lib/api/documents.js.map +1 -1
  28. package/dist/lib/components/index.d.ts +1 -0
  29. package/dist/lib/components/index.d.ts.map +1 -1
  30. package/dist/lib/components/index.js +1 -0
  31. package/dist/lib/components/index.js.map +1 -1
  32. package/dist/lib/db/interfaces/document.d.ts +14 -0
  33. package/dist/lib/db/interfaces/document.d.ts.map +1 -1
  34. package/dist/lib/db/interfaces/index.d.ts +6 -0
  35. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  36. package/dist/lib/graphql/resolvers.js +1 -1
  37. package/dist/lib/graphql/resolvers.js.map +1 -1
  38. package/dist/lib/local-api/collection-api.d.ts +5 -1
  39. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  40. package/dist/lib/local-api/collection-api.js +26 -6
  41. package/dist/lib/local-api/collection-api.js.map +1 -1
  42. package/dist/lib/local-api/index.d.ts +2 -0
  43. package/dist/lib/local-api/index.d.ts.map +1 -1
  44. package/dist/lib/local-api/index.js +7 -2
  45. package/dist/lib/local-api/index.js.map +1 -1
  46. package/dist/lib/routes/document-versions.d.ts +5 -0
  47. package/dist/lib/routes/document-versions.d.ts.map +1 -0
  48. package/dist/lib/routes/document-versions.js +100 -0
  49. package/dist/lib/routes/document-versions.js.map +1 -0
  50. package/dist/lib/routes-exports.d.ts +1 -0
  51. package/dist/lib/routes-exports.d.ts.map +1 -1
  52. package/dist/lib/routes-exports.js +1 -0
  53. package/dist/lib/routes-exports.js.map +1 -1
  54. package/dist/lib/services/index.d.ts +1 -0
  55. package/dist/lib/services/index.d.ts.map +1 -1
  56. package/dist/lib/services/index.js +1 -0
  57. package/dist/lib/services/index.js.map +1 -1
  58. package/dist/lib/services/version-service.d.ts +39 -0
  59. package/dist/lib/services/version-service.d.ts.map +1 -0
  60. package/dist/lib/services/version-service.js +129 -0
  61. package/dist/lib/services/version-service.js.map +1 -0
  62. package/dist/lib/types/config.d.ts +7 -0
  63. package/dist/lib/types/config.d.ts.map +1 -1
  64. package/dist/lib/types/document.d.ts +2 -2
  65. package/dist/lib/types/document.d.ts.map +1 -1
  66. package/dist/lib/types/index.d.ts +1 -0
  67. package/dist/lib/types/index.d.ts.map +1 -1
  68. package/dist/lib/types/index.js +1 -0
  69. package/dist/lib/types/index.js.map +1 -1
  70. package/dist/lib/types/schemas.d.ts +3 -0
  71. package/dist/lib/types/schemas.d.ts.map +1 -1
  72. package/dist/lib/types/version.d.ts +15 -0
  73. package/dist/lib/types/version.d.ts.map +1 -0
  74. package/dist/lib/types/version.js +2 -0
  75. package/dist/lib/types/version.js.map +1 -0
  76. package/dist/local-api/collection-api.d.ts +5 -1
  77. package/dist/local-api/collection-api.d.ts.map +1 -1
  78. package/dist/local-api/collection-api.js +26 -6
  79. package/dist/local-api/index.d.ts +2 -0
  80. package/dist/local-api/index.d.ts.map +1 -1
  81. package/dist/local-api/index.js +7 -2
  82. package/dist/routes/document-versions.d.ts +5 -0
  83. package/dist/routes/document-versions.d.ts.map +1 -0
  84. package/dist/routes/document-versions.js +99 -0
  85. package/dist/routes-exports.d.ts +1 -0
  86. package/dist/routes-exports.d.ts.map +1 -1
  87. package/dist/routes-exports.js +1 -0
  88. package/dist/services/index.d.ts +1 -0
  89. package/dist/services/index.d.ts.map +1 -1
  90. package/dist/services/index.js +1 -0
  91. package/dist/services/version-service.d.ts +39 -0
  92. package/dist/services/version-service.d.ts.map +1 -0
  93. package/dist/services/version-service.js +128 -0
  94. package/dist/types/config.d.ts +7 -0
  95. package/dist/types/config.d.ts.map +1 -1
  96. package/dist/types/document.d.ts +2 -2
  97. package/dist/types/document.d.ts.map +1 -1
  98. package/dist/types/index.d.ts +1 -0
  99. package/dist/types/index.d.ts.map +1 -1
  100. package/dist/types/index.js +1 -0
  101. package/dist/types/schemas.d.ts +3 -0
  102. package/dist/types/schemas.d.ts.map +1 -1
  103. package/dist/types/version.d.ts +15 -0
  104. package/dist/types/version.d.ts.map +1 -0
  105. package/dist/types/version.js +1 -0
  106. package/package.json +1 -1
@@ -0,0 +1,138 @@
1
+ <script lang="ts">
2
+ import { Badge } from '@aphexcms/ui/shadcn/badge';
3
+ import { Button } from '@aphexcms/ui/shadcn/button';
4
+ import { documents } from '../../api/documents';
5
+ import { toast } from 'svelte-sonner';
6
+
7
+ interface Props {
8
+ documentId: string;
9
+ onClose: () => void;
10
+ onRestored?: () => void;
11
+ onPreviewVersion?: (version: { versionNumber: number; data: Record<string, any>; eventType: string; createdAt?: string } | null) => void;
12
+ }
13
+
14
+ let { documentId, onClose, onRestored, onPreviewVersion }: Props = $props();
15
+
16
+ let versions = $state<any[]>([]);
17
+ let loading = $state(true);
18
+ let previewVersion = $state<any>(null);
19
+ let filter = $state<'all' | 'publish' | 'draft'>('all');
20
+
21
+ const filteredVersions = $derived(
22
+ filter === 'all' ? versions : versions.filter((v) => v.eventType === filter)
23
+ );
24
+
25
+ $effect(() => {
26
+ loadVersions();
27
+ });
28
+
29
+ async function loadVersions() {
30
+ loading = true;
31
+ try {
32
+ const res = await documents.listVersions(documentId, { limit: 100 });
33
+ if (res.success && res.data) {
34
+ versions = res.data;
35
+ }
36
+ } catch {
37
+ toast.error('Failed to load versions');
38
+ } finally {
39
+ loading = false;
40
+ }
41
+ }
42
+
43
+ async function previewVersionData(version: any) {
44
+ try {
45
+ const res = await documents.getVersion(documentId, version.versionNumber);
46
+ if (res.success && res.data) {
47
+ previewVersion = { ...version, data: res.data.data };
48
+ onPreviewVersion?.({
49
+ versionNumber: version.versionNumber,
50
+ data: res.data.data,
51
+ eventType: version.eventType,
52
+ createdAt: version.createdAt
53
+ });
54
+ }
55
+ } catch {
56
+ toast.error('Failed to load version');
57
+ }
58
+ }
59
+
60
+ function clearPreview() {
61
+ previewVersion = null;
62
+ onPreviewVersion?.(null);
63
+ }
64
+
65
+ async function restoreVersion() {
66
+ if (!previewVersion) return;
67
+ try {
68
+ await documents.restoreVersion(documentId, previewVersion.versionNumber);
69
+ toast.success(`Restored to v${previewVersion.versionNumber}`);
70
+ clearPreview();
71
+ onRestored?.();
72
+ await loadVersions();
73
+ } catch {
74
+ toast.error('Failed to restore');
75
+ }
76
+ }
77
+ </script>
78
+
79
+ <div class="flex h-full flex-col">
80
+ <!-- Header -->
81
+ <div class="border-border bg-background flex h-14 items-center justify-between border-b px-3">
82
+ <h3 class="text-sm font-medium">History</h3>
83
+ <button
84
+ class="hover:bg-muted rounded p-1 transition-colors"
85
+ onclick={onClose}
86
+ >
87
+ <svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
88
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
89
+ </svg>
90
+ </button>
91
+ </div>
92
+
93
+ <!-- Filter tabs -->
94
+ <div class="border-border flex border-b">
95
+ {#each [{ value: 'all', label: 'All' }, { value: 'publish', label: 'Published' }, { value: 'draft', label: 'Drafts' }] as tab}
96
+ <button
97
+ class="flex-1 px-2 py-2 text-xs font-medium transition-colors {filter === tab.value ? 'border-b-2 border-primary text-foreground' : 'text-muted-foreground hover:text-foreground'}"
98
+ onclick={() => { filter = tab.value as any; }}
99
+ >
100
+ {tab.label}
101
+ </button>
102
+ {/each}
103
+ </div>
104
+
105
+ <!-- Version List -->
106
+ <div class="flex-1 overflow-auto">
107
+ {#if loading}
108
+ <div class="p-4 text-center">
109
+ <span class="text-muted-foreground text-xs">Loading...</span>
110
+ </div>
111
+ {:else if filteredVersions.length === 0}
112
+ <div class="p-4 text-center">
113
+ <span class="text-muted-foreground text-xs">No {filter === 'all' ? '' : filter} versions</span>
114
+ </div>
115
+ {:else}
116
+ {#each filteredVersions as version}
117
+ <button
118
+ class="w-full border-b px-3 py-2.5 text-left transition-colors hover:bg-muted {previewVersion?.versionNumber === version.versionNumber ? 'bg-muted border-l-2 border-l-primary' : ''}"
119
+ onclick={() => previewVersionData(version)}
120
+ >
121
+ <div class="flex items-center justify-between">
122
+ <span class="text-muted-foreground text-[11px]">
123
+ {new Date(version.createdAt).toLocaleString(undefined, { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit', hour12: true })}
124
+ </span>
125
+ <Badge variant={version.eventType === 'publish' ? 'default' : 'secondary'} class="text-[9px] px-1.5 py-0">
126
+ {version.eventType}
127
+ </Badge>
128
+ </div>
129
+ {#if version.createdByName || version.createdBy}
130
+ <p class="text-muted-foreground mt-0.5 truncate text-[10px]">
131
+ {version.createdByName || version.createdBy}
132
+ </p>
133
+ {/if}
134
+ </button>
135
+ {/each}
136
+ {/if}
137
+ </div>
138
+ </div>
@@ -0,0 +1,15 @@
1
+ interface Props {
2
+ documentId: string;
3
+ onClose: () => void;
4
+ onRestored?: () => void;
5
+ onPreviewVersion?: (version: {
6
+ versionNumber: number;
7
+ data: Record<string, any>;
8
+ eventType: string;
9
+ createdAt?: string;
10
+ } | null) => void;
11
+ }
12
+ declare const DocumentVersionPanel: import("svelte").Component<Props, {}, "">;
13
+ type DocumentVersionPanel = ReturnType<typeof DocumentVersionPanel>;
14
+ export default DocumentVersionPanel;
15
+ //# sourceMappingURL=DocumentVersionPanel.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentVersionPanel.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/DocumentVersionPanel.svelte.ts"],"names":[],"mappings":"AASC,UAAU,KAAK;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;CACzI;AA+HF,QAAA,MAAM,oBAAoB,2CAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
@@ -725,7 +725,13 @@
725
725
  <div class="grid grid-cols-2 gap-0.5 p-1 sm:grid-cols-5 xl:grid-cols-10">
726
726
  {#each pinnedAssets as asset (asset.id)}
727
727
  <button
728
- onclick={() => openAssetDetail(asset)}
728
+ onclick={() => {
729
+ if (selectable && multiSelect) {
730
+ toggleSelect(asset.id);
731
+ } else {
732
+ openAssetDetail(asset);
733
+ }
734
+ }}
729
735
  class="group relative flex flex-col overflow-hidden rounded-sm transition-colors {selectedIds.has(
730
736
  asset.id
731
737
  )
@@ -747,13 +753,15 @@
747
753
  <FileText class="text-muted-foreground h-10 w-10" />
748
754
  </div>
749
755
  {/if}
750
- <div class="absolute top-1.5 left-1.5">
751
- <Checkbox
752
- checked={selectedIds.has(asset.id)}
753
- onCheckedChange={() => toggleSelect(asset.id)}
754
- onclick={(e) => e.stopPropagation()}
755
- />
756
- </div>
756
+ {#if isSelectMode && !selectable}
757
+ <div class="absolute top-1.5 left-1.5">
758
+ <Checkbox
759
+ checked={selectedIds.has(asset.id)}
760
+ onCheckedChange={() => toggleSelect(asset.id)}
761
+ onclick={(e) => e.stopPropagation()}
762
+ />
763
+ </div>
764
+ {/if}
757
765
  </div>
758
766
  <div class="p-1.5">
759
767
  <p class="text-muted-foreground truncate text-xs">
@@ -766,11 +774,9 @@
766
774
  <button
767
775
  onclick={() => {
768
776
  if (selectable && multiSelect) {
769
- openAssetDetail(asset);
777
+ toggleSelect(asset.id);
770
778
  } else if (isSelectMode) {
771
779
  toggleSelect(asset.id);
772
- } else if (selectable && onSelect) {
773
- onSelect(asset);
774
780
  } else {
775
781
  openAssetDetail(asset);
776
782
  }
@@ -796,8 +802,19 @@
796
802
  <FileText class="text-muted-foreground h-10 w-10" />
797
803
  </div>
798
804
  {/if}
799
- <!-- Checkbox overlay (only in select mode) -->
800
- {#if isSelectMode}
805
+ {#if selectable}
806
+ <!-- Info button to view details without selecting -->
807
+ <button
808
+ onclick={(e) => { e.stopPropagation(); openAssetDetail(asset); }}
809
+ class="absolute top-1.5 right-1.5 rounded bg-background/80 p-1 opacity-0 transition-opacity group-hover:opacity-100"
810
+ title="View details"
811
+ >
812
+ <svg class="h-3.5 w-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
813
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
814
+ </svg>
815
+ </button>
816
+ {:else if isSelectMode}
817
+ <!-- Checkbox overlay for bulk mode -->
801
818
  <div class="absolute top-1.5 left-1.5">
802
819
  <Checkbox
803
820
  checked={selectedIds.has(asset.id)}
@@ -1083,6 +1100,18 @@
1083
1100
  </div>
1084
1101
  </div>
1085
1102
 
1103
+ {#if selectable && !multiSelect && onSelect}
1104
+ <div class="border-border border-b px-4 py-2">
1105
+ <Button
1106
+ size="sm"
1107
+ class="w-full"
1108
+ onclick={() => { if (selectedAsset && onSelect) onSelect(selectedAsset); }}
1109
+ >
1110
+ Select
1111
+ </Button>
1112
+ </div>
1113
+ {/if}
1114
+
1086
1115
  <!-- Preview (click to enlarge) -->
1087
1116
  <div class="p-4 pb-0">
1088
1117
  {#if isImage(selectedAsset)}
@@ -1 +1 @@
1
- {"version":3,"file":"MediaBrowser.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/MediaBrowser.svelte.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAO9C,UAAU,KAAK;IACd,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAC7C,oCAAoC;IACpC,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACnC,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AA8mCF,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"MediaBrowser.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/MediaBrowser.svelte.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAO9C,UAAU,KAAK;IACd,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAC7C,oCAAoC;IACpC,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACnC,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAmoCF,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -66,6 +66,7 @@
66
66
  return getSchemaByName(schemas, typeName);
67
67
  }
68
68
 
69
+ const isGridLayout = $derived(field.options?.layout === 'grid');
69
70
  const isPrimitiveArray = $derived(
70
71
  field.of &&
71
72
  field.of.length > 0 &&
@@ -142,9 +143,9 @@
142
143
  });
143
144
  });
144
145
 
145
- // Persist generated keys back to parent state
146
+ // Persist generated keys back to parent state (skip in readonly mode to avoid infinite loops)
146
147
  $effect(() => {
147
- if (isPrimitiveArray) return;
148
+ if (isPrimitiveArray || readonly) return;
148
149
  const hasUnkeyed = arrayValue.some(
149
150
  (item: any) => item && typeof item === 'object' && !item._key
150
151
  );
@@ -436,6 +437,104 @@
436
437
  {:else if primitiveType === 'image'}
437
438
  {#key dndKey}
438
439
  <DragDropProvider onDragEnd={handlePrimitiveDragEnd}>
440
+ {#if isGridLayout}
441
+ <!-- Grid layout for images -->
442
+ {#if arrayValue.length === 0}
443
+ <div class="border-border/50 flex h-32 items-center justify-center rounded-md border border-dashed">
444
+ <div class="text-center">
445
+ <ImageIcon class="mx-auto h-8 w-8 text-muted-foreground" />
446
+ <p class="text-muted-foreground mt-1 text-xs">No images yet</p>
447
+ </div>
448
+ </div>
449
+ {/if}
450
+ <div class="grid grid-cols-2 gap-2 sm:grid-cols-3 md:grid-cols-4">
451
+ {#each arrayValue as item, index (`prim-${index}`)}
452
+ {@const sortable = createSortable({ id: `prim-${index}`, index, disabled: readonly })}
453
+ <div
454
+ {@attach sortable.attach}
455
+ class="border-border/50 bg-background group relative aspect-square overflow-hidden rounded-md border"
456
+ class:opacity-50={sortable.isDragging}
457
+ >
458
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
459
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
460
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
461
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
462
+ <div
463
+ class="h-full w-full cursor-pointer"
464
+ onclick={() => handleOpenImageModal(index)}
465
+ >
466
+ {#if item?.asset?._ref}
467
+ {#await assets.getById(item.asset._ref)}
468
+ <div class="flex h-full w-full items-center justify-center bg-muted">
469
+ <div class="border-primary h-4 w-4 animate-spin rounded-full border-b-2"></div>
470
+ </div>
471
+ {:then result}
472
+ {#if result.success && result.data?.url}
473
+ <img
474
+ src={result.data.url}
475
+ alt={item?.alt || `Image ${index + 1}`}
476
+ class="h-full w-full object-cover"
477
+ loading="lazy"
478
+ />
479
+ {:else}
480
+ <div class="flex h-full w-full items-center justify-center bg-muted">
481
+ <ImageIcon class="h-8 w-8 text-muted-foreground" />
482
+ </div>
483
+ {/if}
484
+ {:catch}
485
+ <div class="flex h-full w-full items-center justify-center bg-muted">
486
+ <ImageIcon class="h-8 w-8 text-muted-foreground" />
487
+ </div>
488
+ {/await}
489
+ {:else}
490
+ <div class="flex h-full w-full items-center justify-center bg-muted">
491
+ <ImageIcon class="h-8 w-8 text-muted-foreground" />
492
+ </div>
493
+ {/if}
494
+ </div>
495
+
496
+ <!-- Overlay controls -->
497
+ {#if !readonly}
498
+ <div class="absolute top-1 left-1 opacity-0 group-hover:opacity-100 transition-opacity">
499
+ <button
500
+ {@attach sortable.attachHandle}
501
+ class="bg-background/80 rounded p-1 cursor-grab active:cursor-grabbing"
502
+ >
503
+ <GripVertical class="h-3.5 w-3.5" />
504
+ </button>
505
+ </div>
506
+ <div class="absolute right-1 bottom-1 opacity-0 group-hover:opacity-100 transition-opacity">
507
+ <DropdownMenu.Root>
508
+ <DropdownMenu.Trigger>
509
+ {#snippet child({ props })}
510
+ <button
511
+ {...props}
512
+ class="bg-background/80 rounded p-1"
513
+ >
514
+ <Ellipsis class="h-3.5 w-3.5" />
515
+ </button>
516
+ {/snippet}
517
+ </DropdownMenu.Trigger>
518
+ <DropdownMenu.Content align="end">
519
+ <DropdownMenu.Item onclick={() => handleOpenImageModal(index)}>
520
+ <Pencil class="mr-2 h-4 w-4" /> Edit
521
+ </DropdownMenu.Item>
522
+ <DropdownMenu.Separator />
523
+ <DropdownMenu.Item
524
+ class="text-destructive focus:text-destructive"
525
+ onclick={() => handleRemoveItem(index)}
526
+ >
527
+ <Trash2 class="mr-2 h-4 w-4" /> Remove
528
+ </DropdownMenu.Item>
529
+ </DropdownMenu.Content>
530
+ </DropdownMenu.Root>
531
+ </div>
532
+ {/if}
533
+ </div>
534
+ {/each}
535
+ </div>
536
+ {:else}
537
+ <!-- Default list layout for images -->
439
538
  <div class="space-y-1">
440
539
  {#each arrayValue as item, index (`prim-${index}`)}
441
540
  {@const sortable = createSortable({ id: `prim-${index}`, index, disabled: readonly })}
@@ -505,6 +604,7 @@
505
604
  </div>
506
605
  {/each}
507
606
  </div>
607
+ {/if}
508
608
  </DragDropProvider>
509
609
  {/key}
510
610
  {:else}
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ArrayField.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAc,MAAM,wBAAwB,CAAC;AAyBtF,UAAU,KAAK;IACd,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAutBF,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ArrayField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ArrayField.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAc,MAAM,wBAAwB,CAAC;AAyBtF,UAAU,KAAK;IACd,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAsyBF,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -4,5 +4,6 @@ export { default as DocumentEditor } from './admin/DocumentEditor.svelte';
4
4
  export { default as SchemaField } from './admin/SchemaField.svelte';
5
5
  export { default as MediaBrowser } from './admin/MediaBrowser.svelte';
6
6
  export { default as AssetBrowserModal } from './admin/AssetBrowserModal.svelte';
7
+ export { default as DocumentVersionPanel } from './admin/DocumentVersionPanel.svelte';
7
8
  export * from './fields/index.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/components/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGhF,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/components/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAGtF,cAAc,gBAAgB,CAAC"}
@@ -9,5 +9,6 @@ export { default as DocumentEditor } from './admin/DocumentEditor.svelte';
9
9
  export { default as SchemaField } from './admin/SchemaField.svelte';
10
10
  export { default as MediaBrowser } from './admin/MediaBrowser.svelte';
11
11
  export { default as AssetBrowserModal } from './admin/AssetBrowserModal.svelte';
12
+ export { default as DocumentVersionPanel } from './admin/DocumentVersionPanel.svelte';
12
13
  // Field components
13
14
  export * from './fields/index.js';
@@ -1,4 +1,5 @@
1
1
  import type { Document } from '../../types/index.js';
2
+ import type { DocumentVersion, DocumentVersionList } from '../../types/version.js';
2
3
  import type { Where, FindOptions, FindResult } from '../../types/filters.js';
3
4
  export interface DocumentFilters {
4
5
  organizationId: string;
@@ -75,5 +76,18 @@ export interface DocumentAdapter {
75
76
  * @returns Map of asset ID to reference count
76
77
  */
77
78
  countDocumentReferencesForAssets?(organizationId: string, assetIds: string[]): Promise<Record<string, number>>;
79
+ createDocumentVersion?(data: {
80
+ documentId: string;
81
+ organizationId: string;
82
+ eventType: 'draft' | 'publish';
83
+ data: any;
84
+ createdBy?: string | null;
85
+ }): Promise<DocumentVersion | null>;
86
+ listDocumentVersions?(organizationId: string, documentId: string, options?: {
87
+ limit?: number;
88
+ offset?: number;
89
+ }): Promise<DocumentVersionList>;
90
+ getDocumentVersion?(organizationId: string, documentId: string, versionNumber: number): Promise<DocumentVersion | null>;
91
+ deleteDocumentVersions?(documentId: string, versionIds: string[]): Promise<void>;
78
92
  }
79
93
  //# sourceMappingURL=document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/document.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,12 @@ export interface DatabaseAdapter extends DocumentAdapter, AssetAdapter, UserProf
36
36
  * Check if any user profiles exist in the system (for first-user detection)
37
37
  */
38
38
  hasAnyUserProfiles?(): Promise<boolean>;
39
+ /**
40
+ * Execute multiple adapter operations in a single atomic transaction.
41
+ * The callback receives a transactional version of the adapter — all operations
42
+ * within it share the same DB transaction and commit/rollback together.
43
+ */
44
+ withTransaction?<T>(fn: (adapter: DatabaseAdapter) => Promise<T>): Promise<T>;
39
45
  }
40
46
  /**
41
47
  * Database provider factory interface
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,YAAY,EACX,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC9E,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACrE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,eAChB,SAAQ,eAAe,EACtB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,eAAe;IAEhB,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAG7B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAG9B;;OAEG;IACH,aAAa,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7E;;OAEG;IACH,qBAAqB,CAAC,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvE;;OAEG;IACH,kBAAkB,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,IAAI,eAAe,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,OAAO,CAAC,EAAE;QACT,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACnB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,IAAI,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,eAAe;IACpE,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjD,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/index.ts"],"names":[],"mappings":"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"}
@@ -298,7 +298,7 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
298
298
  perspective,
299
299
  limit: args.limit || 50,
300
300
  offset: args.offset || 0,
301
- sort: args.sort || undefined,
301
+ sort: args.sort || '-createdAt',
302
302
  depth: args.depth || 0
303
303
  });
304
304
  // Map documents to GraphQL format
@@ -41,6 +41,21 @@ export declare class DocumentsApi {
41
41
  * Get draft documents only (convenience method)
42
42
  */
43
43
  static getDrafts(params?: Omit<DocumentListParams, 'status'>): Promise<ApiResponse<Document[]>>;
44
+ /**
45
+ * List document version history
46
+ */
47
+ static listVersions(id: string, params?: {
48
+ limit?: number;
49
+ offset?: number;
50
+ }): Promise<ApiResponse<any[]>>;
51
+ /**
52
+ * Get a specific version
53
+ */
54
+ static getVersion(id: string, versionNumber: number): Promise<ApiResponse<any>>;
55
+ /**
56
+ * Restore a version to draft
57
+ */
58
+ static restoreVersion(id: string, versionNumber: number): Promise<ApiResponse<Document>>;
44
59
  }
45
60
  export declare const documents: {
46
61
  list: typeof DocumentsApi.list;
@@ -53,5 +68,8 @@ export declare const documents: {
53
68
  getByType: typeof DocumentsApi.getByType;
54
69
  getPublished: typeof DocumentsApi.getPublished;
55
70
  getDrafts: typeof DocumentsApi.getDrafts;
71
+ listVersions: typeof DocumentsApi.listVersions;
72
+ getVersion: typeof DocumentsApi.getVersion;
73
+ restoreVersion: typeof DocumentsApi.restoreVersion;
56
74
  };
57
75
  //# sourceMappingURL=documents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../src/lib/api/documents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,MAAM,SAAS,CAAC;AAEjB,qBAAa,YAAY;IACxB;;;OAGG;WACU,IAAI,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAYpF;;OAEG;WACU,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAIhE;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAI7E;;OAEG;WACU,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAI7F;;OAEG;WACU,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAIhE;;OAEG;WACU,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAIlE;;OAEG;WACU,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAI/D;;OAEG;WACU,SAAS,CACrB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAM,GAC9C,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAInC;;OAEG;WACU,YAAY,CACxB,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAM,GAC7C,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAInC;;OAEG;WACU,SAAS,CACrB,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAM,GAC7C,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;CAGnC;AAGD,eAAO,MAAM,SAAS;;;;;;;;;;;CAWrB,CAAC"}
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../src/lib/api/documents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,MAAM,SAAS,CAAC;AAEjB,qBAAa,YAAY;IACxB;;;OAGG;WACU,IAAI,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAYpF;;OAEG;WACU,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAIhE;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAI7E;;OAEG;WACU,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAI7F;;OAEG;WACU,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAIhE;;OAEG;WACU,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAIlE;;OAEG;WACU,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAI/D;;OAEG;WACU,SAAS,CACrB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAM,GAC9C,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAInC;;OAEG;WACU,YAAY,CACxB,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAM,GAC7C,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAInC;;OAEG;WACU,SAAS,CACrB,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAM,GAC7C,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAInC;;OAEG;WACU,YAAY,CACxB,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1C,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;IAI9B;;OAEG;WACU,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAIrF;;OAEG;WACU,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;CAG9F;AAGD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;CAcrB,CAAC"}
@@ -69,6 +69,24 @@ export class DocumentsApi {
69
69
  static async getDrafts(params = {}) {
70
70
  return this.list({ ...params, status: 'draft' });
71
71
  }
72
+ /**
73
+ * List document version history
74
+ */
75
+ static async listVersions(id, params) {
76
+ return apiClient.get(`/documents/${id}/versions`, params);
77
+ }
78
+ /**
79
+ * Get a specific version
80
+ */
81
+ static async getVersion(id, versionNumber) {
82
+ return apiClient.get(`/documents/${id}/versions/${versionNumber}`);
83
+ }
84
+ /**
85
+ * Restore a version to draft
86
+ */
87
+ static async restoreVersion(id, versionNumber) {
88
+ return apiClient.post(`/documents/${id}/versions/${versionNumber}/restore`);
89
+ }
72
90
  }
73
91
  // Export convenience functions for direct use
74
92
  export const documents = {
@@ -81,6 +99,9 @@ export const documents = {
81
99
  deleteById: DocumentsApi.deleteById.bind(DocumentsApi),
82
100
  getByType: DocumentsApi.getByType.bind(DocumentsApi),
83
101
  getPublished: DocumentsApi.getPublished.bind(DocumentsApi),
84
- getDrafts: DocumentsApi.getDrafts.bind(DocumentsApi)
102
+ getDrafts: DocumentsApi.getDrafts.bind(DocumentsApi),
103
+ listVersions: DocumentsApi.listVersions.bind(DocumentsApi),
104
+ getVersion: DocumentsApi.getVersion.bind(DocumentsApi),
105
+ restoreVersion: DocumentsApi.restoreVersion.bind(DocumentsApi)
85
106
  };
86
107
  //# sourceMappingURL=documents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/lib/api/documents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/lib/api/documents.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,6 @@ export { default as DocumentEditor } from './admin/DocumentEditor.svelte';
4
4
  export { default as SchemaField } from './admin/SchemaField.svelte';
5
5
  export { default as MediaBrowser } from './admin/MediaBrowser.svelte';
6
6
  export { default as AssetBrowserModal } from './admin/AssetBrowserModal.svelte';
7
+ export { default as DocumentVersionPanel } from './admin/DocumentVersionPanel.svelte';
7
8
  export * from './fields/index.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/components/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGhF,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/components/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAGtF,cAAc,gBAAgB,CAAC"}
@@ -9,6 +9,7 @@ export { default as DocumentEditor } from './admin/DocumentEditor.svelte';
9
9
  export { default as SchemaField } from './admin/SchemaField.svelte';
10
10
  export { default as MediaBrowser } from './admin/MediaBrowser.svelte';
11
11
  export { default as AssetBrowserModal } from './admin/AssetBrowserModal.svelte';
12
+ export { default as DocumentVersionPanel } from './admin/DocumentVersionPanel.svelte';
12
13
  // Field components
13
14
  export * from './fields/index.js';
14
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/components/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,wDAAwD;AAExD,iBAAiB;AACjB,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAExD,UAAU;AACV,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE7D,kEAAkE;AAClE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,mBAAmB;AACnB,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/components/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,wDAAwD;AAExD,iBAAiB;AACjB,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAExD,UAAU;AACV,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE7D,kEAAkE;AAClE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEtF,mBAAmB;AACnB,cAAc,gBAAgB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { Document } from '../../types/index.js';
2
+ import type { DocumentVersion, DocumentVersionList } from '../../types/version.js';
2
3
  import type { Where, FindOptions, FindResult } from '../../types/filters.js';
3
4
  export interface DocumentFilters {
4
5
  organizationId: string;
@@ -75,5 +76,18 @@ export interface DocumentAdapter {
75
76
  * @returns Map of asset ID to reference count
76
77
  */
77
78
  countDocumentReferencesForAssets?(organizationId: string, assetIds: string[]): Promise<Record<string, number>>;
79
+ createDocumentVersion?(data: {
80
+ documentId: string;
81
+ organizationId: string;
82
+ eventType: 'draft' | 'publish';
83
+ data: any;
84
+ createdBy?: string | null;
85
+ }): Promise<DocumentVersion | null>;
86
+ listDocumentVersions?(organizationId: string, documentId: string, options?: {
87
+ limit?: number;
88
+ offset?: number;
89
+ }): Promise<DocumentVersionList>;
90
+ getDocumentVersion?(organizationId: string, documentId: string, versionNumber: number): Promise<DocumentVersion | null>;
91
+ deleteDocumentVersions?(documentId: string, versionIds: string[]): Promise<void>;
78
92
  }
79
93
  //# sourceMappingURL=document.d.ts.map