includio-cms 0.5.5 → 0.6.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.
- package/CHANGELOG.md +60 -0
- package/ROADMAP.md +17 -0
- package/dist/admin/api/handler.js +2 -0
- package/dist/admin/api/media-gc.d.ts +3 -0
- package/dist/admin/api/media-gc.js +27 -0
- package/dist/admin/auth-client.d.ts +55 -55
- 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 +289 -172
- package/dist/admin/client/collection/collection-page.svelte +6 -3
- 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/client/index.d.ts +1 -0
- package/dist/admin/client/index.js +1 -0
- package/dist/admin/client/maintenance/maintenance-page.svelte +205 -0
- package/dist/admin/client/maintenance/maintenance-page.svelte.d.ts +3 -0
- 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 -152
- 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/lang.d.ts +1 -0
- package/dist/admin/components/layout/lang.js +4 -2
- package/dist/admin/components/layout/nav-collections.svelte +53 -56
- package/dist/admin/components/layout/nav-collections.svelte.d.ts +2 -17
- package/dist/admin/components/layout/nav-forms.svelte +47 -48
- package/dist/admin/components/layout/nav-forms.svelte.d.ts +2 -17
- package/dist/admin/components/layout/nav-main.svelte +6 -0
- package/dist/admin/components/layout/nav-search.svelte +15 -22
- package/dist/admin/components/layout/nav-singletons.svelte +33 -37
- 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 +11 -0
- package/dist/admin/remote/entry.remote.js +10 -1
- package/dist/admin/remote/invite.d.ts +2 -2
- 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/server/entries/operations/get.d.ts +11 -0
- package/dist/core/server/entries/operations/get.js +61 -0
- package/dist/core/server/fields/resolveUrlFields.js +49 -18
- package/dist/core/server/media/operations/purgeImageStyles.d.ts +7 -0
- package/dist/core/server/media/operations/purgeImageStyles.js +25 -0
- package/dist/core/server/media/operations/reconcileMedia.d.ts +12 -0
- package/dist/core/server/media/operations/reconcileMedia.js +62 -0
- package/dist/core/server/media/styles/operations/createMediaStyle.js +12 -1
- package/dist/db-postgres/index.js +25 -12
- package/dist/db-postgres/schema/imageStyle.js +2 -0
- package/dist/files-local/index.js +11 -1
- package/dist/paraglide/messages/_index.d.ts +3 -36
- package/dist/paraglide/messages/_index.js +3 -71
- package/dist/paraglide/messages/hello_world.d.ts +5 -0
- package/dist/paraglide/messages/hello_world.js +33 -0
- package/dist/paraglide/messages/login_hello.d.ts +16 -0
- package/dist/paraglide/messages/login_hello.js +34 -0
- package/dist/paraglide/messages/login_please_login.d.ts +16 -0
- package/dist/paraglide/messages/login_please_login.js +34 -0
- package/dist/server/auth.d.ts +10 -10
- package/dist/sveltekit/components/structured-content.svelte +18 -5
- package/dist/types/adapters/db.d.ts +8 -0
- package/dist/types/adapters/files.d.ts +2 -0
- package/dist/types/config.d.ts +2 -2
- package/dist/types/forms.d.ts +2 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +1 -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/0.5.8/index.d.ts +2 -0
- package/dist/updates/0.5.8/index.js +27 -0
- package/dist/updates/index.js +4 -1
- package/package.json +34 -15
- package/dist/paraglide/messages/en.d.ts +0 -5
- package/dist/paraglide/messages/en.js +0 -14
- package/dist/paraglide/messages/pl.d.ts +0 -5
- package/dist/paraglide/messages/pl.js +0 -14
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,66 @@
|
|
|
3
3
|
All notable changes to includio-cms are documented here.
|
|
4
4
|
Generated from `src/lib/updates/` — do not edit manually.
|
|
5
5
|
|
|
6
|
+
## 0.5.8 — 2026-03-09
|
|
7
|
+
|
|
8
|
+
Media GC: deduplicate image styles, auto-cleanup, admin maintenance page
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Image style upsert: replace duplicates instead of creating new files
|
|
12
|
+
- Auto-cleanup old style files from disk on regeneration
|
|
13
|
+
- Admin maintenance page: purge styles, reconcile orphaned disk files
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- Deduplicate existing image style records (keep newest per unique key)
|
|
17
|
+
|
|
18
|
+
### Migration
|
|
19
|
+
|
|
20
|
+
```sql
|
|
21
|
+
-- Deduplicate: keep newest style (by id) per unique key, delete rest
|
|
22
|
+
DELETE FROM image_styles a
|
|
23
|
+
USING image_styles b
|
|
24
|
+
WHERE a.media_file_id = b.media_file_id
|
|
25
|
+
AND a.name = b.name
|
|
26
|
+
AND COALESCE(a.width, 0) = COALESCE(b.width, 0)
|
|
27
|
+
AND COALESCE(a.height, 0) = COALESCE(b.height, 0)
|
|
28
|
+
AND COALESCE(a.quality, 0) = COALESCE(b.quality, 0)
|
|
29
|
+
AND a.id < b.id;
|
|
30
|
+
|
|
31
|
+
-- Unique index to prevent future duplicates
|
|
32
|
+
CREATE UNIQUE INDEX IF NOT EXISTS image_styles_unique_key
|
|
33
|
+
ON image_styles (media_file_id, name, COALESCE(width, 0), COALESCE(height, 0), COALESCE(quality, 0));
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 0.5.7 — 2026-03-06
|
|
37
|
+
|
|
38
|
+
SEO field with slug toggle, structured-content & URL field fixes
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
- SEO field: auto/manual slug toggle with Switch component
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
- Structured content: skip empty paragraphs, wrap inline blocks in `<div>`
|
|
45
|
+
- `resolveUrlFields`: normalize flat string url/text values, use raw DB calls for performance
|
|
46
|
+
- Admin UI: migrate `{#await}` blocks to reactive query pattern for consistent loading states
|
|
47
|
+
|
|
48
|
+
## 0.5.6 — 2026-03-05
|
|
49
|
+
|
|
50
|
+
Relation field UX overhaul, collection list improvements, icon map refactor
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
- Relation field: dialog picker with search, reorder, multi-select UX
|
|
54
|
+
- `getEntryLabels` — lightweight labels endpoint for relation field options
|
|
55
|
+
- Collection list: relation labels displayed in columns, delete restricted to archived entries
|
|
56
|
+
- Icon map: string-based sidebar icons replace component references
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
- TipTap: auto-expand new inline blocks, fix editor overflow, toolbar background
|
|
60
|
+
- Runtime types: FormEntryMap rename, add remote.ts typings
|
|
61
|
+
|
|
62
|
+
### Notes
|
|
63
|
+
|
|
64
|
+
Removed `mode-watcher` dependency — light theme is now hardcoded.
|
|
65
|
+
|
|
6
66
|
## 0.5.5 — 2026-03-04
|
|
7
67
|
|
|
8
68
|
REST API with API key auth, orderable collection fixes
|
package/ROADMAP.md
CHANGED
|
@@ -105,6 +105,23 @@
|
|
|
105
105
|
- [x] `[fix]` `[P1]` Nav active state exact match — prevents false highlights <!-- files: src/lib/admin/components/layout/nav-*.svelte -->
|
|
106
106
|
- [x] `[chore]` `[P2]` Admin scaffold generates REST API route <!-- files: src/lib/cli/scaffold/admin.ts -->
|
|
107
107
|
|
|
108
|
+
## 0.5.6 — Relation field & collection improvements
|
|
109
|
+
|
|
110
|
+
- [x] `[feature]` `[P1]` Relation field: dialog picker, reorder, search, multi-select UX <!-- files: src/lib/admin/components/fields/relation-field.svelte -->
|
|
111
|
+
- [x] `[feature]` `[P1]` getEntryLabels — lightweight labels endpoint for relation fields <!-- files: src/lib/admin/remote/entry.remote.ts -->
|
|
112
|
+
- [x] `[feature]` `[P2]` Collection list: relation labels in columns, delete only for archived <!-- files: src/lib/admin/client/collection/collection-entries.svelte -->
|
|
113
|
+
- [x] `[feature]` `[P2]` Icon map — string-based sidebar icons replace component refs <!-- files: src/lib/admin/components/layout/nav-main.svelte -->
|
|
114
|
+
- [x] `[fix]` `[P1]` TipTap: auto-expand new inline blocks, editor overflow, toolbar bg <!-- files: src/lib/admin/components/fields/structured-content/ -->
|
|
115
|
+
- [x] `[chore]` `[P2]` Runtime types: FormEntryMap rename, add remote.ts
|
|
116
|
+
- [x] `[chore]` `[P2]` Remove mode-watcher, hardcode light theme
|
|
117
|
+
|
|
118
|
+
## 0.5.7 — SEO field & content fixes
|
|
119
|
+
|
|
120
|
+
- [x] `[feature]` `[P1]` SEO field: auto/manual slug toggle with Switch <!-- files: src/lib/admin/components/fields/seo-field.svelte -->
|
|
121
|
+
- [x] `[fix]` `[P1]` Structured content: skip empty paragraphs, wrap inline blocks in div <!-- files: src/lib/core/server/entries/operations/ -->
|
|
122
|
+
- [x] `[fix]` `[P1]` resolveUrlFields: normalize flat string url/text, use raw DB calls <!-- files: src/lib/core/server/entries/ -->
|
|
123
|
+
- [x] `[chore]` `[P1]` Migrate #await to reactive query pattern across admin UI
|
|
124
|
+
|
|
108
125
|
## 0.6.0 — Plugin system _(deferred from 0.2.0)_
|
|
109
126
|
|
|
110
127
|
- [ ] `[feature]` `[P0]` Wire plugin hooks into CRUD operations (before/afterCreate, Update, Delete) <!-- files: src/lib/types/plugins.ts, src/lib/core/server/entries/operations/ -->
|
|
@@ -4,6 +4,7 @@ import * as orphanedHandlers from './orphaned.js';
|
|
|
4
4
|
import * as replaceHandlers from './replace.js';
|
|
5
5
|
import * as inviteHandlers from './invite.js';
|
|
6
6
|
import * as acceptInviteHandlers from './accept-invite.js';
|
|
7
|
+
import * as mediaGcHandlers from './media-gc.js';
|
|
7
8
|
export function createAdminApiHandler(options) {
|
|
8
9
|
const routes = {
|
|
9
10
|
upload: uploadHandlers,
|
|
@@ -11,6 +12,7 @@ export function createAdminApiHandler(options) {
|
|
|
11
12
|
replace: replaceHandlers,
|
|
12
13
|
invite: inviteHandlers,
|
|
13
14
|
'accept-invite': acceptInviteHandlers,
|
|
15
|
+
'media-gc': mediaGcHandlers,
|
|
14
16
|
...options?.extraRoutes
|
|
15
17
|
};
|
|
16
18
|
function handle(method) {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { requireRole } from '../remote/middleware/auth.js';
|
|
2
|
+
import { getImageStylesStats, purgeAllImageStyles } from '../../core/server/media/operations/purgeImageStyles.js';
|
|
3
|
+
import { getReconciliationReport, deleteOrphanedDiskFiles } from '../../core/server/media/operations/reconcileMedia.js';
|
|
4
|
+
import { json } from '@sveltejs/kit';
|
|
5
|
+
export const GET = async ({ url }) => {
|
|
6
|
+
requireRole('admin');
|
|
7
|
+
const stats = await getImageStylesStats();
|
|
8
|
+
const report = await getReconciliationReport();
|
|
9
|
+
return json({
|
|
10
|
+
imageStylesCount: stats.count,
|
|
11
|
+
orphanedDiskFiles: report.orphanedDisk,
|
|
12
|
+
missingDiskRecords: report.missingDisk
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
export const DELETE = async ({ url }) => {
|
|
16
|
+
requireRole('admin');
|
|
17
|
+
const action = url.searchParams.get('action');
|
|
18
|
+
if (action === 'purge-styles') {
|
|
19
|
+
const result = await purgeAllImageStyles();
|
|
20
|
+
return json(result);
|
|
21
|
+
}
|
|
22
|
+
if (action === 'delete-orphaned-disk') {
|
|
23
|
+
const result = await deleteOrphanedDiskFiles();
|
|
24
|
+
return json(result);
|
|
25
|
+
}
|
|
26
|
+
return json({ error: 'Unknown action' }, { status: 400 });
|
|
27
|
+
};
|