includio-cms 0.5.3 → 0.5.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.
- package/CHANGELOG.md +71 -0
- package/ROADMAP.md +33 -0
- package/dist/admin/api/rest/handler.d.ts +7 -0
- package/dist/admin/api/rest/handler.js +116 -0
- package/dist/admin/api/rest/middleware/apiKey.d.ts +6 -0
- package/dist/admin/api/rest/middleware/apiKey.js +45 -0
- package/dist/admin/api/rest/routes/collections.d.ts +5 -0
- package/dist/admin/api/rest/routes/collections.js +104 -0
- package/dist/admin/api/rest/routes/entries.d.ts +2 -0
- package/dist/admin/api/rest/routes/entries.js +37 -0
- package/dist/admin/api/rest/routes/languages.d.ts +1 -0
- package/dist/admin/api/rest/routes/languages.js +5 -0
- package/dist/admin/api/rest/routes/schema.d.ts +2 -0
- package/dist/admin/api/rest/routes/schema.js +78 -0
- package/dist/admin/api/rest/routes/singletons.d.ts +3 -0
- package/dist/admin/api/rest/routes/singletons.js +60 -0
- package/dist/admin/auth-client.d.ts +48 -48
- package/dist/admin/client/admin/admin-after-login-layout.svelte +5 -3
- package/dist/admin/client/admin/admin-layout.svelte +0 -2
- package/dist/admin/client/collection/bulk-actions-bar.svelte +3 -1
- package/dist/admin/client/collection/bulk-actions-bar.svelte.d.ts +1 -1
- package/dist/admin/client/collection/collection-entries.svelte +334 -166
- package/dist/admin/client/collection/collection-page.svelte +6 -3
- package/dist/admin/client/collection/data-table.svelte +127 -18
- package/dist/admin/client/collection/data-table.svelte.d.ts +2 -0
- package/dist/admin/client/collection/row-actions.svelte +3 -1
- package/dist/admin/client/collection/row-actions.svelte.d.ts +1 -1
- package/dist/admin/client/entry/entry-page.svelte +5 -4
- package/dist/admin/client/form/form-config-wrapper.svelte +5 -3
- package/dist/admin/client/form/form-page.svelte +5 -5
- package/dist/admin/client/form/form-submission/form-submission-page.svelte +30 -32
- package/dist/admin/components/accessibility/accessibility-overview.svelte +7 -5
- package/dist/admin/components/accessibility/accessibility-overview.svelte.d.ts +2 -17
- package/dist/admin/components/dashboard/a11y-gauge.svelte +7 -4
- package/dist/admin/components/dashboard/a11y-gauge.svelte.d.ts +2 -17
- package/dist/admin/components/dashboard/accessibility-hub.svelte +7 -4
- package/dist/admin/components/dashboard/accessibility-hub.svelte.d.ts +2 -17
- package/dist/admin/components/dashboard/form-submissions-widget.svelte +8 -3
- package/dist/admin/components/dashboard/form-submissions-widget.svelte.d.ts +2 -17
- package/dist/admin/components/dashboard/recent-activity.svelte +8 -3
- package/dist/admin/components/dashboard/recent-activity.svelte.d.ts +2 -17
- package/dist/admin/components/dashboard/recent-entries.svelte +8 -3
- package/dist/admin/components/dashboard/recent-entries.svelte.d.ts +2 -17
- package/dist/admin/components/fields/image-field.svelte +21 -20
- package/dist/admin/components/fields/media-field.svelte +45 -44
- package/dist/admin/components/fields/relation-field.svelte +428 -149
- package/dist/admin/components/fields/relation-picker-dialog.svelte +112 -0
- package/dist/admin/components/fields/relation-picker-dialog.svelte.d.ts +22 -0
- package/dist/admin/components/fields/seo-field.svelte +66 -10
- package/dist/admin/components/icons/icon-map.d.ts +4 -0
- package/dist/admin/components/icons/icon-map.js +143 -0
- package/dist/admin/components/layout/header-actions.svelte +0 -10
- package/dist/admin/components/layout/nav-collections.svelte +55 -57
- package/dist/admin/components/layout/nav-collections.svelte.d.ts +2 -17
- package/dist/admin/components/layout/nav-forms.svelte +49 -49
- package/dist/admin/components/layout/nav-forms.svelte.d.ts +2 -17
- package/dist/admin/components/layout/nav-search.svelte +15 -22
- package/dist/admin/components/layout/nav-singletons.svelte +35 -38
- package/dist/admin/components/layout/nav-singletons.svelte.d.ts +2 -17
- package/dist/admin/components/media/file/file-preview.svelte +92 -91
- package/dist/admin/components/media/file-preview.svelte +17 -18
- package/dist/admin/components/media/media-library.svelte +39 -41
- package/dist/admin/components/media/media-selector.svelte +8 -8
- package/dist/admin/components/tiptap/InlineBlockNodeView.svelte +6 -8
- package/dist/admin/components/tiptap/content-editor.svelte +2 -2
- package/dist/admin/components/tiptap/editor-toolbar.svelte +1 -1
- package/dist/admin/components/tiptap/inline-block-node.d.ts +1 -0
- package/dist/admin/components/tiptap/inline-block-node.js +12 -1
- package/dist/admin/components/tiptap/tiptap-editor.svelte +1 -1
- package/dist/admin/remote/entry.remote.d.ts +20 -1
- package/dist/admin/remote/entry.remote.js +24 -3
- package/dist/admin/remote/invite.d.ts +2 -2
- package/dist/cli/scaffold/admin.js +8 -0
- package/dist/cms/runtime/remote.d.ts +8 -0
- package/dist/cms/runtime/remote.js +7 -0
- package/dist/cms/runtime/types.d.ts +1 -1
- package/dist/components/ui/input/input.svelte.d.ts +1 -1
- package/dist/components/ui/input-group/input-group-input.svelte.d.ts +1 -1
- package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +1 -1
- package/dist/components/ui/sonner/sonner.svelte +1 -2
- package/dist/core/cms.d.ts +2 -1
- package/dist/core/cms.js +2 -0
- package/dist/core/server/entries/operations/get.d.ts +11 -0
- package/dist/core/server/entries/operations/get.js +63 -1
- package/dist/core/server/entries/operations/update.d.ts +1 -0
- package/dist/core/server/entries/operations/update.js +5 -1
- package/dist/core/server/fields/resolveUrlFields.js +49 -18
- package/dist/db-postgres/schema/entry.d.ts +17 -0
- package/dist/db-postgres/schema/entry.js +4 -2
- package/dist/server/auth.d.ts +4 -4
- package/dist/sveltekit/components/structured-content.svelte +18 -5
- package/dist/sveltekit/server/handle.js +1 -0
- package/dist/types/cms.d.ts +7 -0
- package/dist/types/collections.d.ts +2 -0
- package/dist/types/config.d.ts +2 -2
- package/dist/types/entries.d.ts +7 -1
- package/dist/types/forms.d.ts +2 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.js +1 -0
- package/dist/updates/0.5.4/index.d.ts +2 -0
- package/dist/updates/0.5.4/index.js +15 -0
- package/dist/updates/0.5.5/index.d.ts +2 -0
- package/dist/updates/0.5.5/index.js +20 -0
- package/dist/updates/0.5.6/index.d.ts +2 -0
- package/dist/updates/0.5.6/index.js +17 -0
- package/dist/updates/0.5.7/index.d.ts +2 -0
- package/dist/updates/0.5.7/index.js +14 -0
- package/dist/updates/index.js +5 -1
- package/package.json +6 -2
|
@@ -44,6 +44,8 @@
|
|
|
44
44
|
draft: '○',
|
|
45
45
|
scheduled: '◐'
|
|
46
46
|
};
|
|
47
|
+
|
|
48
|
+
const query = $derived(remotes.getRecentEntries(6));
|
|
47
49
|
</script>
|
|
48
50
|
|
|
49
51
|
<section class="dash-card dash-card--entries" aria-labelledby="entries-heading">
|
|
@@ -52,7 +54,7 @@
|
|
|
52
54
|
<a href="/admin/entries" class="dash-card-link">{lang[interfaceLanguage.current].viewAll}</a>
|
|
53
55
|
</div>
|
|
54
56
|
|
|
55
|
-
{#
|
|
57
|
+
{#if !query.ready}
|
|
56
58
|
<ul class="entries-list">
|
|
57
59
|
{#each Array(4) as _}
|
|
58
60
|
<li class="entry-item">
|
|
@@ -65,7 +67,9 @@
|
|
|
65
67
|
</li>
|
|
66
68
|
{/each}
|
|
67
69
|
</ul>
|
|
68
|
-
{:
|
|
70
|
+
{:else if query.current}
|
|
71
|
+
{@const entries = query.current}
|
|
72
|
+
<div class:opacity-60={query.loading} class="transition-opacity duration-200">
|
|
69
73
|
{#if entries.length === 0}
|
|
70
74
|
<p class="text-center text-sm py-6" style="color:var(--text-light)">
|
|
71
75
|
{lang[interfaceLanguage.current].noEntries}
|
|
@@ -90,5 +94,6 @@
|
|
|
90
94
|
{/each}
|
|
91
95
|
</ul>
|
|
92
96
|
{/if}
|
|
93
|
-
|
|
97
|
+
</div>
|
|
98
|
+
{/if}
|
|
94
99
|
</section>
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
$$bindings?: Bindings;
|
|
4
|
-
} & Exports;
|
|
5
|
-
(internal: unknown, props: {
|
|
6
|
-
$$events?: Events;
|
|
7
|
-
$$slots?: Slots;
|
|
8
|
-
}): Exports & {
|
|
9
|
-
$set?: any;
|
|
10
|
-
$on?: any;
|
|
11
|
-
};
|
|
12
|
-
z_$$bindings?: Bindings;
|
|
13
|
-
}
|
|
14
|
-
declare const RecentEntries: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
-
[evt: string]: CustomEvent<any>;
|
|
16
|
-
}, {}, {}, string>;
|
|
17
|
-
type RecentEntries = InstanceType<typeof RecentEntries>;
|
|
1
|
+
declare const RecentEntries: import("svelte").Component<Record<string, never>, {}, "">;
|
|
2
|
+
type RecentEntries = ReturnType<typeof RecentEntries>;
|
|
18
3
|
export default RecentEntries;
|
|
@@ -51,29 +51,30 @@
|
|
|
51
51
|
{#if value && ((typeof value === 'string' && value !== '') || (Array.isArray(value) && value.length > 0))}
|
|
52
52
|
<div class="group/dialog-trigger relative aspect-square max-w-64 overflow-hidden rounded-2xl border">
|
|
53
53
|
{#if typeof value === 'string'}
|
|
54
|
-
{
|
|
54
|
+
{@const fileQuery = remotes.getFileById(value)}
|
|
55
|
+
{#if !fileQuery.ready}
|
|
55
56
|
<div class="animate-pulse bg-muted w-full h-full rounded-xl"></div>
|
|
56
|
-
{:
|
|
57
|
-
{
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
{/await}
|
|
57
|
+
{:else if fileQuery.current}
|
|
58
|
+
{@const file = fileQuery.current}
|
|
59
|
+
<button
|
|
60
|
+
type="button"
|
|
61
|
+
class="p-1 w-full h-full cursor-zoom-in"
|
|
62
|
+
onclick={(e) => {
|
|
63
|
+
e.stopPropagation();
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
openLightbox(file);
|
|
66
|
+
}}
|
|
67
|
+
>
|
|
68
|
+
<FileMiniature {file} />
|
|
69
|
+
</button>
|
|
70
|
+
{/if}
|
|
71
71
|
{:else if Array.isArray(value) && value.length > 0}
|
|
72
72
|
{@const valueArr = value}
|
|
73
|
-
{
|
|
73
|
+
{@const mFilesQuery = remotes.getMediaFiles({ data: { ids: valueArr } })}
|
|
74
|
+
{#if !mFilesQuery.ready}
|
|
74
75
|
<div class="animate-pulse bg-muted w-full h-full rounded-xl"></div>
|
|
75
|
-
{:
|
|
76
|
-
{@const file =
|
|
76
|
+
{:else if mFilesQuery.current}
|
|
77
|
+
{@const file = mFilesQuery.current[currentIndex]}
|
|
77
78
|
{#if file}
|
|
78
79
|
<button
|
|
79
80
|
type="button"
|
|
@@ -87,7 +88,7 @@
|
|
|
87
88
|
<FileMiniature {file} />
|
|
88
89
|
</button>
|
|
89
90
|
{/if}
|
|
90
|
-
{/
|
|
91
|
+
{/if}
|
|
91
92
|
<!-- Nawigacja multi-image -->
|
|
92
93
|
{#if valueArr.length > 1}
|
|
93
94
|
<div class="absolute inset-x-0 top-1/2 flex -translate-y-1/2 justify-between px-1 pointer-events-none">
|
|
@@ -195,58 +195,59 @@
|
|
|
195
195
|
{#if value && ((typeof value === 'string' && value !== '') || (Array.isArray(value) && value.length > 0))}
|
|
196
196
|
<div class="max-w-96">
|
|
197
197
|
{#if typeof value === 'string'}
|
|
198
|
-
{
|
|
198
|
+
{@const fileQuery = remotes.getFileById(value)}
|
|
199
|
+
{#if !fileQuery.ready}
|
|
199
200
|
<div class="animate-pulse bg-muted w-full aspect-video rounded-xl"></div>
|
|
200
|
-
{:
|
|
201
|
-
{
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
201
|
+
{:else if fileQuery.current}
|
|
202
|
+
{@const file = fileQuery.current}
|
|
203
|
+
{#if file.type === 'video'}
|
|
204
|
+
<div class="overflow-hidden rounded-2xl border">
|
|
205
|
+
{@render videoPreview(file)}
|
|
206
|
+
<div class="flex items-center justify-between gap-2 p-2 bg-gradient-to-t from-muted/50">
|
|
207
|
+
<Button {...props} size="sm" variant="secondary" class="h-8">
|
|
208
|
+
<Plus class="h-4 w-4" />
|
|
209
|
+
{lang[interfaceLanguage.current].change}
|
|
210
|
+
</Button>
|
|
211
|
+
{#if !field.required}
|
|
212
|
+
<Button variant="destructive" size="sm" class="h-8" onclick={(e) => { e.stopPropagation(); value = ''; }}>
|
|
213
|
+
<X class="h-4 w-4" />
|
|
214
|
+
{lang[interfaceLanguage.current].remove}
|
|
209
215
|
</Button>
|
|
210
|
-
|
|
211
|
-
<Button variant="destructive" size="sm" class="h-8" onclick={(e) => { e.stopPropagation(); value = ''; }}>
|
|
212
|
-
<X class="h-4 w-4" />
|
|
213
|
-
{lang[interfaceLanguage.current].remove}
|
|
214
|
-
</Button>
|
|
215
|
-
{/if}
|
|
216
|
-
</div>
|
|
217
|
-
{@render accessibilityPanel(file)}
|
|
216
|
+
{/if}
|
|
218
217
|
</div>
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
<
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
218
|
+
{@render accessibilityPanel(file)}
|
|
219
|
+
</div>
|
|
220
|
+
{:else}
|
|
221
|
+
<div class="group/dialog-trigger relative aspect-square max-w-64 overflow-hidden rounded-2xl border">
|
|
222
|
+
<button
|
|
223
|
+
type="button"
|
|
224
|
+
class="p-1 w-full h-full cursor-zoom-in"
|
|
225
|
+
onclick={(e) => { e.stopPropagation(); e.preventDefault(); openLightbox(file); }}
|
|
226
|
+
>
|
|
227
|
+
<FileMiniature {file} />
|
|
228
|
+
</button>
|
|
229
|
+
<div class="absolute inset-x-0 bottom-0 flex items-center justify-between gap-2 bg-gradient-to-t from-black/60 to-transparent p-2 pt-8">
|
|
230
|
+
<Button {...props} size="sm" variant="secondary" class="h-8">
|
|
231
|
+
<Plus class="h-4 w-4" />
|
|
232
|
+
{lang[interfaceLanguage.current].change}
|
|
233
|
+
</Button>
|
|
234
|
+
{#if !field.required}
|
|
235
|
+
<Button variant="destructive" size="sm" class="h-8" onclick={(e) => { e.stopPropagation(); value = ''; }}>
|
|
236
|
+
<X class="h-4 w-4" />
|
|
237
|
+
{lang[interfaceLanguage.current].remove}
|
|
232
238
|
</Button>
|
|
233
|
-
|
|
234
|
-
<Button variant="destructive" size="sm" class="h-8" onclick={(e) => { e.stopPropagation(); value = ''; }}>
|
|
235
|
-
<X class="h-4 w-4" />
|
|
236
|
-
{lang[interfaceLanguage.current].remove}
|
|
237
|
-
</Button>
|
|
238
|
-
{/if}
|
|
239
|
-
</div>
|
|
239
|
+
{/if}
|
|
240
240
|
</div>
|
|
241
|
-
|
|
241
|
+
</div>
|
|
242
242
|
{/if}
|
|
243
|
-
{/
|
|
243
|
+
{/if}
|
|
244
244
|
{:else if Array.isArray(value) && value.length > 0}
|
|
245
245
|
{@const valueArr = value}
|
|
246
|
-
{
|
|
246
|
+
{@const mFilesQuery = remotes.getMediaFiles({ data: { ids: valueArr } })}
|
|
247
|
+
{#if !mFilesQuery.ready}
|
|
247
248
|
<div class="animate-pulse bg-muted w-full aspect-video rounded-xl"></div>
|
|
248
|
-
{:
|
|
249
|
-
{@const file =
|
|
249
|
+
{:else if mFilesQuery.current}
|
|
250
|
+
{@const file = mFilesQuery.current[currentIndex]}
|
|
250
251
|
{#if file}
|
|
251
252
|
<div class="group/dialog-trigger relative overflow-hidden rounded-2xl border">
|
|
252
253
|
{#if file.type === 'video'}
|
|
@@ -298,7 +299,7 @@
|
|
|
298
299
|
</div>
|
|
299
300
|
{@render accessibilityPanel(file)}
|
|
300
301
|
{/if}
|
|
301
|
-
{/
|
|
302
|
+
{/if}
|
|
302
303
|
{/if}
|
|
303
304
|
</div>
|
|
304
305
|
{:else}
|