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.
Files changed (112) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/ROADMAP.md +17 -0
  3. package/dist/admin/api/handler.js +2 -0
  4. package/dist/admin/api/media-gc.d.ts +3 -0
  5. package/dist/admin/api/media-gc.js +27 -0
  6. package/dist/admin/auth-client.d.ts +55 -55
  7. package/dist/admin/client/admin/admin-after-login-layout.svelte +5 -3
  8. package/dist/admin/client/admin/admin-layout.svelte +0 -2
  9. package/dist/admin/client/collection/bulk-actions-bar.svelte +3 -1
  10. package/dist/admin/client/collection/bulk-actions-bar.svelte.d.ts +1 -1
  11. package/dist/admin/client/collection/collection-entries.svelte +289 -172
  12. package/dist/admin/client/collection/collection-page.svelte +6 -3
  13. package/dist/admin/client/collection/row-actions.svelte +3 -1
  14. package/dist/admin/client/collection/row-actions.svelte.d.ts +1 -1
  15. package/dist/admin/client/entry/entry-page.svelte +5 -4
  16. package/dist/admin/client/form/form-config-wrapper.svelte +5 -3
  17. package/dist/admin/client/form/form-page.svelte +5 -5
  18. package/dist/admin/client/form/form-submission/form-submission-page.svelte +30 -32
  19. package/dist/admin/client/index.d.ts +1 -0
  20. package/dist/admin/client/index.js +1 -0
  21. package/dist/admin/client/maintenance/maintenance-page.svelte +205 -0
  22. package/dist/admin/client/maintenance/maintenance-page.svelte.d.ts +3 -0
  23. package/dist/admin/components/accessibility/accessibility-overview.svelte +7 -5
  24. package/dist/admin/components/accessibility/accessibility-overview.svelte.d.ts +2 -17
  25. package/dist/admin/components/dashboard/a11y-gauge.svelte +7 -4
  26. package/dist/admin/components/dashboard/a11y-gauge.svelte.d.ts +2 -17
  27. package/dist/admin/components/dashboard/accessibility-hub.svelte +7 -4
  28. package/dist/admin/components/dashboard/accessibility-hub.svelte.d.ts +2 -17
  29. package/dist/admin/components/dashboard/form-submissions-widget.svelte +8 -3
  30. package/dist/admin/components/dashboard/form-submissions-widget.svelte.d.ts +2 -17
  31. package/dist/admin/components/dashboard/recent-activity.svelte +8 -3
  32. package/dist/admin/components/dashboard/recent-activity.svelte.d.ts +2 -17
  33. package/dist/admin/components/dashboard/recent-entries.svelte +8 -3
  34. package/dist/admin/components/dashboard/recent-entries.svelte.d.ts +2 -17
  35. package/dist/admin/components/fields/image-field.svelte +21 -20
  36. package/dist/admin/components/fields/media-field.svelte +45 -44
  37. package/dist/admin/components/fields/relation-field.svelte +428 -152
  38. package/dist/admin/components/fields/relation-picker-dialog.svelte +112 -0
  39. package/dist/admin/components/fields/relation-picker-dialog.svelte.d.ts +22 -0
  40. package/dist/admin/components/fields/seo-field.svelte +66 -10
  41. package/dist/admin/components/icons/icon-map.d.ts +4 -0
  42. package/dist/admin/components/icons/icon-map.js +143 -0
  43. package/dist/admin/components/layout/header-actions.svelte +0 -10
  44. package/dist/admin/components/layout/lang.d.ts +1 -0
  45. package/dist/admin/components/layout/lang.js +4 -2
  46. package/dist/admin/components/layout/nav-collections.svelte +53 -56
  47. package/dist/admin/components/layout/nav-collections.svelte.d.ts +2 -17
  48. package/dist/admin/components/layout/nav-forms.svelte +47 -48
  49. package/dist/admin/components/layout/nav-forms.svelte.d.ts +2 -17
  50. package/dist/admin/components/layout/nav-main.svelte +6 -0
  51. package/dist/admin/components/layout/nav-search.svelte +15 -22
  52. package/dist/admin/components/layout/nav-singletons.svelte +33 -37
  53. package/dist/admin/components/layout/nav-singletons.svelte.d.ts +2 -17
  54. package/dist/admin/components/media/file/file-preview.svelte +92 -91
  55. package/dist/admin/components/media/file-preview.svelte +17 -18
  56. package/dist/admin/components/media/media-library.svelte +39 -41
  57. package/dist/admin/components/media/media-selector.svelte +8 -8
  58. package/dist/admin/components/tiptap/InlineBlockNodeView.svelte +6 -8
  59. package/dist/admin/components/tiptap/content-editor.svelte +2 -2
  60. package/dist/admin/components/tiptap/editor-toolbar.svelte +1 -1
  61. package/dist/admin/components/tiptap/inline-block-node.d.ts +1 -0
  62. package/dist/admin/components/tiptap/inline-block-node.js +12 -1
  63. package/dist/admin/components/tiptap/tiptap-editor.svelte +1 -1
  64. package/dist/admin/remote/entry.remote.d.ts +11 -0
  65. package/dist/admin/remote/entry.remote.js +10 -1
  66. package/dist/admin/remote/invite.d.ts +2 -2
  67. package/dist/cms/runtime/remote.d.ts +8 -0
  68. package/dist/cms/runtime/remote.js +7 -0
  69. package/dist/cms/runtime/types.d.ts +1 -1
  70. package/dist/components/ui/input/input.svelte.d.ts +1 -1
  71. package/dist/components/ui/input-group/input-group-input.svelte.d.ts +1 -1
  72. package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +1 -1
  73. package/dist/components/ui/sonner/sonner.svelte +1 -2
  74. package/dist/core/server/entries/operations/get.d.ts +11 -0
  75. package/dist/core/server/entries/operations/get.js +61 -0
  76. package/dist/core/server/fields/resolveUrlFields.js +49 -18
  77. package/dist/core/server/media/operations/purgeImageStyles.d.ts +7 -0
  78. package/dist/core/server/media/operations/purgeImageStyles.js +25 -0
  79. package/dist/core/server/media/operations/reconcileMedia.d.ts +12 -0
  80. package/dist/core/server/media/operations/reconcileMedia.js +62 -0
  81. package/dist/core/server/media/styles/operations/createMediaStyle.js +12 -1
  82. package/dist/db-postgres/index.js +25 -12
  83. package/dist/db-postgres/schema/imageStyle.js +2 -0
  84. package/dist/files-local/index.js +11 -1
  85. package/dist/paraglide/messages/_index.d.ts +3 -36
  86. package/dist/paraglide/messages/_index.js +3 -71
  87. package/dist/paraglide/messages/hello_world.d.ts +5 -0
  88. package/dist/paraglide/messages/hello_world.js +33 -0
  89. package/dist/paraglide/messages/login_hello.d.ts +16 -0
  90. package/dist/paraglide/messages/login_hello.js +34 -0
  91. package/dist/paraglide/messages/login_please_login.d.ts +16 -0
  92. package/dist/paraglide/messages/login_please_login.js +34 -0
  93. package/dist/server/auth.d.ts +10 -10
  94. package/dist/sveltekit/components/structured-content.svelte +18 -5
  95. package/dist/types/adapters/db.d.ts +8 -0
  96. package/dist/types/adapters/files.d.ts +2 -0
  97. package/dist/types/config.d.ts +2 -2
  98. package/dist/types/forms.d.ts +2 -0
  99. package/dist/types/index.d.ts +1 -0
  100. package/dist/types/index.js +1 -0
  101. package/dist/updates/0.5.6/index.d.ts +2 -0
  102. package/dist/updates/0.5.6/index.js +17 -0
  103. package/dist/updates/0.5.7/index.d.ts +2 -0
  104. package/dist/updates/0.5.7/index.js +14 -0
  105. package/dist/updates/0.5.8/index.d.ts +2 -0
  106. package/dist/updates/0.5.8/index.js +27 -0
  107. package/dist/updates/index.js +4 -1
  108. package/package.json +34 -15
  109. package/dist/paraglide/messages/en.d.ts +0 -5
  110. package/dist/paraglide/messages/en.js +0 -14
  111. package/dist/paraglide/messages/pl.d.ts +0 -5
  112. 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,3 @@
1
+ import { type RequestHandler } from '@sveltejs/kit';
2
+ export declare const GET: RequestHandler;
3
+ export declare const DELETE: RequestHandler;
@@ -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
+ };