includio-cms 0.15.5 → 0.16.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 +14 -0
- package/DOCS.md +1 -1
- package/ROADMAP.md +22 -8
- package/dist/paraglide/messages/_index.d.ts +36 -3
- package/dist/paraglide/messages/_index.js +71 -3
- package/dist/paraglide/messages/en.d.ts +5 -0
- package/dist/paraglide/messages/en.js +14 -0
- package/dist/paraglide/messages/pl.d.ts +5 -0
- package/dist/paraglide/messages/pl.js +14 -0
- package/dist/updates/0.16.0/index.d.ts +2 -0
- package/dist/updates/0.16.0/index.js +14 -0
- package/dist/updates/index.js +2 -1
- package/package.json +1 -1
- package/dist/demo/seed.d.ts +0 -1
- package/dist/demo/seed.js +0 -117
- package/dist/inline-edit-proto/ModeToggle.svelte +0 -36
- package/dist/inline-edit-proto/ModeToggle.svelte.d.ts +0 -18
- package/dist/inline-edit-proto/blocks/AddBlockButton.svelte +0 -47
- package/dist/inline-edit-proto/blocks/AddBlockButton.svelte.d.ts +0 -8
- package/dist/inline-edit-proto/blocks/BlockToolbar.svelte +0 -80
- package/dist/inline-edit-proto/blocks/BlockToolbar.svelte.d.ts +0 -13
- package/dist/inline-edit-proto/blocks/BlockWrapper.svelte +0 -83
- package/dist/inline-edit-proto/blocks/BlockWrapper.svelte.d.ts +0 -11
- package/dist/inline-edit-proto/context.svelte.d.ts +0 -65
- package/dist/inline-edit-proto/context.svelte.js +0 -194
- package/dist/inline-edit-proto/hybrid/EditableHybrid.svelte +0 -70
- package/dist/inline-edit-proto/hybrid/EditableHybrid.svelte.d.ts +0 -11
- package/dist/inline-edit-proto/hybrid/FieldRenderer.svelte +0 -94
- package/dist/inline-edit-proto/hybrid/FieldRenderer.svelte.d.ts +0 -11
- package/dist/inline-edit-proto/hybrid/HybridEditor.svelte +0 -107
- package/dist/inline-edit-proto/hybrid/HybridEditor.svelte.d.ts +0 -7
- package/dist/inline-edit-proto/hybrid/SyncPanel.svelte +0 -181
- package/dist/inline-edit-proto/hybrid/SyncPanel.svelte.d.ts +0 -3
- package/dist/inline-edit-proto/inline/EditableInline.svelte +0 -120
- package/dist/inline-edit-proto/inline/EditableInline.svelte.d.ts +0 -11
- package/dist/inline-edit-proto/inline/InlineToolbar.svelte +0 -71
- package/dist/inline-edit-proto/inline/InlineToolbar.svelte.d.ts +0 -6
- package/dist/inline-edit-proto/panel/EditSheet.svelte +0 -130
- package/dist/inline-edit-proto/panel/EditSheet.svelte.d.ts +0 -3
- package/dist/inline-edit-proto/panel/EditablePanel.svelte +0 -44
- package/dist/inline-edit-proto/panel/EditablePanel.svelte.d.ts +0 -9
- package/dist/paraglide/messages/hello_world.d.ts +0 -5
- package/dist/paraglide/messages/hello_world.js +0 -33
- package/dist/paraglide/messages/login_hello.d.ts +0 -16
- package/dist/paraglide/messages/login_hello.js +0 -34
- package/dist/paraglide/messages/login_please_login.d.ts +0 -16
- package/dist/paraglide/messages/login_please_login.js +0 -34
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,20 @@
|
|
|
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.16.0 — 2026-04-29
|
|
7
|
+
|
|
8
|
+
Hard reset martwego kodu — start drogi do v1.0.0. Wycięte: prototyp inline-edit, demo seed, demo routes. Zostają: cmp/ (backend działa), mockups/ (designy), isomorphic-dompurify (Faza 5), tippy.js (slash-command).
|
|
9
|
+
|
|
10
|
+
### Breaking
|
|
11
|
+
- `src/lib/inline-edit-proto/` — usunięty. Prototyp hybrid editor (`HybridEditor`, `EditableInline`, `EditablePanel`, `BlockWrapper`, `ModeToggle` itd.) skasowany w całości. Inline edit zostanie zaprojektowany od zera w v1.x z innym podejściem. Pełen kod zarchiwizowany lokalnie na branchu `archive/inline-edit-proto` (niepublikowany na origin). Projekty importujące cokolwiek z `$lib/inline-edit-proto/*` lub `includio-cms/inline-edit-proto` muszą wyciąć te wywołania — moduł nigdy nie był publikowany w `package.json` exports, więc realnie żadna external integracja się nie zerwie.
|
|
12
|
+
- `src/lib/demo/seed.ts` — usunięte. Funkcja `seedDemoData()` (wpisywanie demo użytkownika `demo@includio.dev`) skasowana. Demo content zostanie zaprojektowany od zera w v1.x.
|
|
13
|
+
- `src/routes/(site)/demo/` i `src/routes/admin/(afterLogin)/demo/` — usunięte. Demo pages (`/demo`, `/demo/inline-edit-test`, `/admin/demo/hybrid-editor`) skasowane razem z modułami. Live preview demo trzeba odbudować od zera.
|
|
14
|
+
- `ROADMAP-EDITOR.md` — usunięty. Plan unified editora (Faza 0.2.0–0.5.0) zarchiwizowany razem z prototypem na branchu `archive/inline-edit-proto`.
|
|
15
|
+
|
|
16
|
+
### Notes
|
|
17
|
+
|
|
18
|
+
Brak SQL migration. Brak zmian publicznego API w `package.json` exports — `inline-edit-proto`, `demo`, ani `cmp` nigdy nie były tam wymienione, więc `pnpm i` w projekcie konsumującym przejdzie clean. `cmp/` ZOSTAJE: backend CMP (operations, `consent_logs` schema, public `createConsentLog`) i typy publiczne (`ResolvedCmpConfig`, `CmpStrings` w `CMSConfig.cmp`) działają bez zmian. Frontend banner dla CMP wróci jako feature w v1.x. Backlog `ideas/*.md` przeniesiony do `ideas/post-v1/` (lokalnie, katalog w `.gitignore`); `select-field-defaultvalue-bug.md` promowany do ROADMAP jako fix do v1.0. Bundle delta: `dist/` 8.8M → 8.5M (−0.3 MB) — mniej niż meta-plan szacował (−1.5 MB+), bo `inline-edit-proto/` był w `.gitignore` i nigdy nie trafiał do `dist/`. Realny zysk to czystsza struktura repo + zero martwego kodu w gałęzi roboczej.
|
|
19
|
+
|
|
6
20
|
## 0.15.5 — 2026-04-23
|
|
7
21
|
|
|
8
22
|
Media field recovers from orphan references; delete dialog shows usage breakdown + replace hint. X-Frame-Options relaxed to SAMEORIGIN. Background maintenance no longer duplicates on Vite HMR. Runtime generator no longer triggers an infinite SSR reload loop in dev.
|
package/DOCS.md
CHANGED
package/ROADMAP.md
CHANGED
|
@@ -324,17 +324,31 @@
|
|
|
324
324
|
- [x] `[fix]` `[P0]` `createFormSubmission` — split try/catch so SMTP failure no longer returns `false` (endpoint responded 500 even though submission was persisted); notification email is best-effort, logged via `console.error` <!-- files: src/lib/core/server/forms/submissions/operations/create.ts -->
|
|
325
325
|
- [ ] `[feature]` `[P1]` Built-in `/api/health` + `/api/health/ready` with per-adapter checks (db/files/email/ai) + ręczny SMTP diagnostics panel in maintenance page <!-- files: ideas/health-check-module.md -->
|
|
326
326
|
|
|
327
|
-
## 0.16.0 —
|
|
327
|
+
## 0.16.0 — Hard reset
|
|
328
328
|
|
|
329
|
-
|
|
330
|
-
- [ ] `[feature]` `[P1]` Global SEO settings
|
|
331
|
-
- [ ] `[feature]` `[P1]` Dedicated frontend SEO components <!-- files: src/lib/sveltekit/components/seo.svelte -->
|
|
332
|
-
- [ ] `[feature]` `[P2]` Sitemap generation
|
|
329
|
+
> Start drogi do v1.0.0. Decyzje: **[V1-DECISIONS.md](./V1-DECISIONS.md)** | Workflow: **[V1-WORKFLOW.md](./V1-WORKFLOW.md)**
|
|
333
330
|
|
|
334
|
-
|
|
331
|
+
- [x] `[breaking]` `[P0]` Wycięty `src/lib/inline-edit-proto/` (kod na lokalnym branchu `archive/inline-edit-proto`) — inline edit od zera w v1.x
|
|
332
|
+
- [x] `[breaking]` `[P0]` Wycięty `src/lib/demo/seed.ts` + demo routes (`/demo/*`, `/admin/demo/*`) — demo content od zera w v1.x
|
|
333
|
+
- [x] `[breaking]` `[P0]` Skasowany `ROADMAP-EDITOR.md` (treść na archive branch)
|
|
334
|
+
- [x] `[chore]` `[P2]` `ideas/*.md` przeniesione do `ideas/post-v1/` (lokalnie, w `.gitignore`); `select-field-defaultvalue-bug` promowany do v1.0 fix
|
|
335
|
+
- [x] `[chore]` `[P2]` `V1-DECISIONS.md` jako referencja decyzji v1 dla każdej kolejnej sesji
|
|
335
336
|
|
|
336
|
-
|
|
337
|
-
|
|
337
|
+
## v1.0.0 — Stabilizacja (in progress)
|
|
338
|
+
|
|
339
|
+
> 13 faz w ~16 sesjach, droga 0.16 → 1.0.0. Lean scope: stabilizacja, security, testy, docs, audit + polish shopa. Bez nowych feature'ów.
|
|
340
|
+
|
|
341
|
+
- [ ] `[fix]` `[P1]` Select field — `defaultValue` propagacja do zod schema (full repro: `ideas/post-v1/select-field-defaultvalue-bug.md`); fix planowany w Fazie 12 (RC)
|
|
342
|
+
|
|
343
|
+
## v1.x — Post-v1.0 deferred
|
|
344
|
+
|
|
345
|
+
- [ ] `[feature]` `[P1]` SEO module — SERP preview, char limits, global settings, frontend components, sitemap (full plan: `ideas/post-v1/seo-aeo-geo-module.md`)
|
|
346
|
+
- [ ] `[feature]` `[P0]` WCAG/ATAG compliance — full audit + accessibility rework
|
|
347
|
+
- [ ] `[feature]` `[P1]` CMP frontend banner — backend już działa (operations, `consent_logs`, `createConsentLog`); brakuje banner UI (`ideas/post-v1/cmp-module.md`)
|
|
348
|
+
- [ ] `[feature]` `[P1]` Health check module — `/api/health` + `/api/health/ready` (`ideas/post-v1/health-check-module.md`)
|
|
349
|
+
- [ ] `[feature]` `[P2]` Cache layer dla `getEntries` / `getEntry` / `countEntries` (`ideas/post-v1/cache-layer.md`)
|
|
350
|
+
- [ ] `[feature]` `[P2]` Configurable sidebar (`ideas/post-v1/configurable-sidebar.md`)
|
|
351
|
+
- [ ] `[feature]` `[P0]` Plugin hooks in CRUD ops + plugin registration API
|
|
338
352
|
|
|
339
353
|
## Security hardening
|
|
340
354
|
|
|
@@ -1,3 +1,36 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export function hello_world(inputs: {
|
|
2
|
+
name: NonNullable<unknown>;
|
|
3
|
+
}, options?: {
|
|
4
|
+
locale?: "en" | "pl";
|
|
5
|
+
}): string;
|
|
6
|
+
/**
|
|
7
|
+
* This function has been compiled by [Paraglide JS](https://inlang.com/m/gerre34r).
|
|
8
|
+
*
|
|
9
|
+
* - Changing this function will be over-written by the next build.
|
|
10
|
+
*
|
|
11
|
+
* - If you want to change the translations, you can either edit the source files e.g. `en.json`, or
|
|
12
|
+
* use another inlang app like [Fink](https://inlang.com/m/tdozzpar) or the [VSCode extension Sherlock](https://inlang.com/m/r7kp499g).
|
|
13
|
+
*
|
|
14
|
+
* @param {{}} inputs
|
|
15
|
+
* @param {{ locale?: "en" | "pl" }} options
|
|
16
|
+
* @returns {string}
|
|
17
|
+
*/
|
|
18
|
+
declare function login_hello(inputs?: {}, options?: {
|
|
19
|
+
locale?: "en" | "pl";
|
|
20
|
+
}): string;
|
|
21
|
+
/**
|
|
22
|
+
* This function has been compiled by [Paraglide JS](https://inlang.com/m/gerre34r).
|
|
23
|
+
*
|
|
24
|
+
* - Changing this function will be over-written by the next build.
|
|
25
|
+
*
|
|
26
|
+
* - If you want to change the translations, you can either edit the source files e.g. `en.json`, or
|
|
27
|
+
* use another inlang app like [Fink](https://inlang.com/m/tdozzpar) or the [VSCode extension Sherlock](https://inlang.com/m/r7kp499g).
|
|
28
|
+
*
|
|
29
|
+
* @param {{}} inputs
|
|
30
|
+
* @param {{ locale?: "en" | "pl" }} options
|
|
31
|
+
* @returns {string}
|
|
32
|
+
*/
|
|
33
|
+
declare function login_please_login(inputs?: {}, options?: {
|
|
34
|
+
locale?: "en" | "pl";
|
|
35
|
+
}): string;
|
|
36
|
+
export { login_hello as login.hello, login_please_login as login.please_login };
|
|
@@ -1,4 +1,72 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { getLocale, trackMessageCall, experimentalMiddlewareLocaleSplitting, isServer } from "../runtime.js"
|
|
3
|
+
import * as en from "./en.js"
|
|
4
|
+
import * as pl from "./pl.js"
|
|
5
|
+
/**
|
|
6
|
+
* This function has been compiled by [Paraglide JS](https://inlang.com/m/gerre34r).
|
|
7
|
+
*
|
|
8
|
+
* - Changing this function will be over-written by the next build.
|
|
9
|
+
*
|
|
10
|
+
* - If you want to change the translations, you can either edit the source files e.g. `en.json`, or
|
|
11
|
+
* use another inlang app like [Fink](https://inlang.com/m/tdozzpar) or the [VSCode extension Sherlock](https://inlang.com/m/r7kp499g).
|
|
12
|
+
*
|
|
13
|
+
* @param {{ name: NonNullable<unknown> }} inputs
|
|
14
|
+
* @param {{ locale?: "en" | "pl" }} options
|
|
15
|
+
* @returns {string}
|
|
16
|
+
*/
|
|
17
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
18
|
+
export const hello_world = (inputs, options = {}) => {
|
|
19
|
+
if (experimentalMiddlewareLocaleSplitting && isServer === false) {
|
|
20
|
+
return /** @type {any} */ (globalThis).__paraglide_ssr.hello_world(inputs)
|
|
21
|
+
}
|
|
22
|
+
const locale = options.locale ?? getLocale()
|
|
23
|
+
trackMessageCall("hello_world", locale)
|
|
24
|
+
if (locale === "en") return en.hello_world(inputs)
|
|
25
|
+
return pl.hello_world(inputs)
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* This function has been compiled by [Paraglide JS](https://inlang.com/m/gerre34r).
|
|
29
|
+
*
|
|
30
|
+
* - Changing this function will be over-written by the next build.
|
|
31
|
+
*
|
|
32
|
+
* - If you want to change the translations, you can either edit the source files e.g. `en.json`, or
|
|
33
|
+
* use another inlang app like [Fink](https://inlang.com/m/tdozzpar) or the [VSCode extension Sherlock](https://inlang.com/m/r7kp499g).
|
|
34
|
+
*
|
|
35
|
+
* @param {{}} inputs
|
|
36
|
+
* @param {{ locale?: "en" | "pl" }} options
|
|
37
|
+
* @returns {string}
|
|
38
|
+
*/
|
|
39
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
40
|
+
const login_hello = (inputs = {}, options = {}) => {
|
|
41
|
+
if (experimentalMiddlewareLocaleSplitting && isServer === false) {
|
|
42
|
+
return /** @type {any} */ (globalThis).__paraglide_ssr.login_hello(inputs)
|
|
43
|
+
}
|
|
44
|
+
const locale = options.locale ?? getLocale()
|
|
45
|
+
trackMessageCall("login_hello", locale)
|
|
46
|
+
if (locale === "en") return en.login_hello(inputs)
|
|
47
|
+
return pl.login_hello(inputs)
|
|
48
|
+
};
|
|
49
|
+
export { login_hello as "login.hello" }
|
|
50
|
+
/**
|
|
51
|
+
* This function has been compiled by [Paraglide JS](https://inlang.com/m/gerre34r).
|
|
52
|
+
*
|
|
53
|
+
* - Changing this function will be over-written by the next build.
|
|
54
|
+
*
|
|
55
|
+
* - If you want to change the translations, you can either edit the source files e.g. `en.json`, or
|
|
56
|
+
* use another inlang app like [Fink](https://inlang.com/m/tdozzpar) or the [VSCode extension Sherlock](https://inlang.com/m/r7kp499g).
|
|
57
|
+
*
|
|
58
|
+
* @param {{}} inputs
|
|
59
|
+
* @param {{ locale?: "en" | "pl" }} options
|
|
60
|
+
* @returns {string}
|
|
61
|
+
*/
|
|
62
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
63
|
+
const login_please_login = (inputs = {}, options = {}) => {
|
|
64
|
+
if (experimentalMiddlewareLocaleSplitting && isServer === false) {
|
|
65
|
+
return /** @type {any} */ (globalThis).__paraglide_ssr.login_please_login(inputs)
|
|
66
|
+
}
|
|
67
|
+
const locale = options.locale ?? getLocale()
|
|
68
|
+
trackMessageCall("login_please_login", locale)
|
|
69
|
+
if (locale === "en") return en.login_please_login(inputs)
|
|
70
|
+
return pl.login_please_login(inputs)
|
|
71
|
+
};
|
|
72
|
+
export { login_please_login as "login.please_login" }
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export const hello_world = /** @type {(inputs: { name: NonNullable<unknown> }) => string} */ (i) => {
|
|
5
|
+
return `Hello, ${i.name} from en!`
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const login_hello = /** @type {(inputs: {}) => string} */ () => {
|
|
9
|
+
return `Welcome back`
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const login_please_login = /** @type {(inputs: {}) => string} */ () => {
|
|
13
|
+
return `Login to your account`
|
|
14
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export const hello_world = /** @type {(inputs: { name: NonNullable<unknown> }) => string} */ (i) => {
|
|
5
|
+
return `Hello, ${i.name} from pl!`
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const login_hello = /** @type {(inputs: {}) => string} */ () => {
|
|
9
|
+
return `Witaj ponownie`
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const login_please_login = /** @type {(inputs: {}) => string} */ () => {
|
|
13
|
+
return `Zaloguj się na swoje konto`
|
|
14
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const update = {
|
|
2
|
+
version: '0.16.0',
|
|
3
|
+
date: '2026-04-29',
|
|
4
|
+
description: 'Hard reset martwego kodu — start drogi do v1.0.0. Wycięte: prototyp inline-edit, demo seed, demo routes. Zostają: cmp/ (backend działa), mockups/ (designy), isomorphic-dompurify (Faza 5), tippy.js (slash-command).',
|
|
5
|
+
features: [],
|
|
6
|
+
fixes: [],
|
|
7
|
+
breakingChanges: [
|
|
8
|
+
'`src/lib/inline-edit-proto/` — usunięty. Prototyp hybrid editor (`HybridEditor`, `EditableInline`, `EditablePanel`, `BlockWrapper`, `ModeToggle` itd.) skasowany w całości. Inline edit zostanie zaprojektowany od zera w v1.x z innym podejściem. Pełen kod zarchiwizowany lokalnie na branchu `archive/inline-edit-proto` (niepublikowany na origin). Projekty importujące cokolwiek z `$lib/inline-edit-proto/*` lub `includio-cms/inline-edit-proto` muszą wyciąć te wywołania — moduł nigdy nie był publikowany w `package.json` exports, więc realnie żadna external integracja się nie zerwie.',
|
|
9
|
+
'`src/lib/demo/seed.ts` — usunięte. Funkcja `seedDemoData()` (wpisywanie demo użytkownika `demo@includio.dev`) skasowana. Demo content zostanie zaprojektowany od zera w v1.x.',
|
|
10
|
+
'`src/routes/(site)/demo/` i `src/routes/admin/(afterLogin)/demo/` — usunięte. Demo pages (`/demo`, `/demo/inline-edit-test`, `/admin/demo/hybrid-editor`) skasowane razem z modułami. Live preview demo trzeba odbudować od zera.',
|
|
11
|
+
'`ROADMAP-EDITOR.md` — usunięty. Plan unified editora (Faza 0.2.0–0.5.0) zarchiwizowany razem z prototypem na branchu `archive/inline-edit-proto`.'
|
|
12
|
+
],
|
|
13
|
+
notes: 'Brak SQL migration. Brak zmian publicznego API w `package.json` exports — `inline-edit-proto`, `demo`, ani `cmp` nigdy nie były tam wymienione, więc `pnpm i` w projekcie konsumującym przejdzie clean. `cmp/` ZOSTAJE: backend CMP (operations, `consent_logs` schema, public `createConsentLog`) i typy publiczne (`ResolvedCmpConfig`, `CmpStrings` w `CMSConfig.cmp`) działają bez zmian. Frontend banner dla CMP wróci jako feature w v1.x. Backlog `ideas/*.md` przeniesiony do `ideas/post-v1/` (lokalnie, katalog w `.gitignore`); `select-field-defaultvalue-bug.md` promowany do ROADMAP jako fix do v1.0. Bundle delta: `dist/` 8.8M → 8.5M (−0.3 MB) — mniej niż meta-plan szacował (−1.5 MB+), bo `inline-edit-proto/` był w `.gitignore` i nigdy nie trafiał do `dist/`. Realny zysk to czystsza struktura repo + zero martwego kodu w gałęzi roboczej.'
|
|
14
|
+
};
|
package/dist/updates/index.js
CHANGED
|
@@ -50,7 +50,8 @@ import { update as update0152 } from './0.15.2/index.js';
|
|
|
50
50
|
import { update as update0153 } from './0.15.3/index.js';
|
|
51
51
|
import { update as update0154 } from './0.15.4/index.js';
|
|
52
52
|
import { update as update0155 } from './0.15.5/index.js';
|
|
53
|
-
|
|
53
|
+
import { update as update0160 } from './0.16.0/index.js';
|
|
54
|
+
export const updates = [update0065, update0066, update0067, update0068, update0069, update010, update011, update012, update013, update014, update015, update020, update022, update050, update051, update052, update053, update054, update055, update056, update057, update058, update060, update061, update062, update070, update071, update072, update073, update080, update090, update0100, update0110, update0120, update0130, update0131, update0132, update0133, update0134, update0140, update0141, update0142, update0143, update0144, update0145, update0146, update0150, update0151, update0152, update0153, update0154, update0155, update0160];
|
|
54
55
|
export const getUpdatesFrom = (fromVersion) => {
|
|
55
56
|
const fromParts = fromVersion.split('.').map(Number);
|
|
56
57
|
return updates.filter((update) => {
|
package/package.json
CHANGED
package/dist/demo/seed.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function seedDemoData(): Promise<void>;
|
package/dist/demo/seed.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { getCMS } from '../core/cms.js';
|
|
2
|
-
const blogPosts = [
|
|
3
|
-
{
|
|
4
|
-
title: 'Getting Started with Includio CMS',
|
|
5
|
-
slug: 'getting-started',
|
|
6
|
-
category: 'tutorial',
|
|
7
|
-
content: '<p>Includio CMS is a modern, headless content management system built with SvelteKit. It provides a flexible and developer-friendly way to manage content for your web applications.</p><p>In this tutorial, we will walk through the basic setup and configuration of Includio CMS.</p>',
|
|
8
|
-
publishedAt: '2024-12-01'
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
title: 'Building Modern Web Applications',
|
|
12
|
-
slug: 'modern-web-apps',
|
|
13
|
-
category: 'technology',
|
|
14
|
-
content: '<p>The landscape of web development is constantly evolving. With frameworks like SvelteKit, developers can build fast, modern applications with great developer experience.</p><p>This post explores the key principles behind modern web application architecture.</p>',
|
|
15
|
-
publishedAt: '2024-12-15'
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
title: 'Design Systems for Content Management',
|
|
19
|
-
slug: 'design-systems-cms',
|
|
20
|
-
category: 'design',
|
|
21
|
-
content: '<p>A well-designed content management interface can make all the difference in editorial productivity. Learn how design systems help create consistent, usable admin panels.</p>',
|
|
22
|
-
publishedAt: '2025-01-05'
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
title: 'Scaling Your Content Strategy',
|
|
26
|
-
slug: 'scaling-content-strategy',
|
|
27
|
-
category: 'business',
|
|
28
|
-
content: '<p>As your business grows, so does your content needs. This post discusses strategies for scaling content operations while maintaining quality and consistency.</p>',
|
|
29
|
-
publishedAt: '2025-01-20'
|
|
30
|
-
}
|
|
31
|
-
];
|
|
32
|
-
const projects = [
|
|
33
|
-
{
|
|
34
|
-
title: 'E-commerce Platform',
|
|
35
|
-
description: 'A full-featured online store built with SvelteKit and Includio CMS.',
|
|
36
|
-
url: 'https://example.com/ecommerce',
|
|
37
|
-
techStack: [{ name: 'SvelteKit' }, { name: 'PostgreSQL' }, { name: 'Stripe' }]
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
title: 'Corporate Website',
|
|
41
|
-
description: 'Multi-language corporate site with dynamic content management.',
|
|
42
|
-
url: 'https://example.com/corporate',
|
|
43
|
-
techStack: [{ name: 'SvelteKit' }, { name: 'Includio CMS' }, { name: 'Tailwind CSS' }]
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
title: 'Blog Platform',
|
|
47
|
-
description: 'A performant blogging platform with SEO optimization.',
|
|
48
|
-
url: 'https://example.com/blog',
|
|
49
|
-
techStack: [{ name: 'SvelteKit' }, { name: 'MDsveX' }, { name: 'Vercel' }]
|
|
50
|
-
}
|
|
51
|
-
];
|
|
52
|
-
const settingsData = {
|
|
53
|
-
siteName: 'Includio Demo',
|
|
54
|
-
description: 'A demo instance of Includio CMS showcasing its features.',
|
|
55
|
-
socialLinks: [
|
|
56
|
-
{ platform: 'GitHub', url: 'https://github.com/includio' },
|
|
57
|
-
{ platform: 'Twitter', url: 'https://twitter.com/includio' }
|
|
58
|
-
]
|
|
59
|
-
};
|
|
60
|
-
export async function seedDemoData() {
|
|
61
|
-
const cms = getCMS();
|
|
62
|
-
const db = cms.databaseAdapter;
|
|
63
|
-
// Seed blog posts
|
|
64
|
-
for (const post of blogPosts) {
|
|
65
|
-
const entry = await db.createEntry({
|
|
66
|
-
slug: 'blog-post',
|
|
67
|
-
type: 'collection'
|
|
68
|
-
});
|
|
69
|
-
await db.createEntryVersion({
|
|
70
|
-
entryId: entry.id,
|
|
71
|
-
versionNumber: 1,
|
|
72
|
-
data: {
|
|
73
|
-
en: {
|
|
74
|
-
title: post.title,
|
|
75
|
-
slug: post.slug,
|
|
76
|
-
category: post.category,
|
|
77
|
-
content: post.content,
|
|
78
|
-
publishedAt: post.publishedAt
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
publishedAt: new Date(post.publishedAt)
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
// Seed projects
|
|
85
|
-
for (const project of projects) {
|
|
86
|
-
const entry = await db.createEntry({
|
|
87
|
-
slug: 'project',
|
|
88
|
-
type: 'collection'
|
|
89
|
-
});
|
|
90
|
-
await db.createEntryVersion({
|
|
91
|
-
entryId: entry.id,
|
|
92
|
-
versionNumber: 1,
|
|
93
|
-
data: {
|
|
94
|
-
en: {
|
|
95
|
-
title: project.title,
|
|
96
|
-
description: project.description,
|
|
97
|
-
url: project.url,
|
|
98
|
-
techStack: project.techStack
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
publishedAt: new Date()
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
// Seed settings single
|
|
105
|
-
const settingsEntry = await db.createEntry({
|
|
106
|
-
slug: 'settings',
|
|
107
|
-
type: 'singleton'
|
|
108
|
-
});
|
|
109
|
-
await db.createEntryVersion({
|
|
110
|
-
entryId: settingsEntry.id,
|
|
111
|
-
versionNumber: 1,
|
|
112
|
-
data: {
|
|
113
|
-
en: settingsData
|
|
114
|
-
},
|
|
115
|
-
publishedAt: new Date()
|
|
116
|
-
});
|
|
117
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { getEditContext, type EditMode } from './context.svelte.js';
|
|
3
|
-
|
|
4
|
-
const ctx = getEditContext();
|
|
5
|
-
|
|
6
|
-
const modes: { value: EditMode; label: string; desc: string }[] = [
|
|
7
|
-
{ value: 'panel', label: 'A', desc: 'Panel' },
|
|
8
|
-
{ value: 'inline', label: 'B', desc: 'Inline' },
|
|
9
|
-
{ value: 'blocks', label: 'C', desc: 'Blocks' },
|
|
10
|
-
{ value: 'hybrid', label: 'D', desc: 'Hybrid' }
|
|
11
|
-
];
|
|
12
|
-
</script>
|
|
13
|
-
|
|
14
|
-
<div class="fixed bottom-6 left-1/2 z-50 -translate-x-1/2">
|
|
15
|
-
<div class="flex items-center gap-1 rounded-full bg-slate-900 p-1.5 shadow-xl">
|
|
16
|
-
{#each modes as m}
|
|
17
|
-
<button
|
|
18
|
-
onclick={() => (ctx.mode = m.value)}
|
|
19
|
-
class="flex items-center gap-2 rounded-full px-4 py-2 text-sm font-medium transition-all {ctx.mode ===
|
|
20
|
-
m.value
|
|
21
|
-
? 'bg-white text-slate-900'
|
|
22
|
-
: 'text-slate-400 hover:text-white'}"
|
|
23
|
-
>
|
|
24
|
-
<span
|
|
25
|
-
class="flex h-5 w-5 items-center justify-center rounded-full text-xs font-bold {ctx.mode ===
|
|
26
|
-
m.value
|
|
27
|
-
? 'bg-slate-900 text-white'
|
|
28
|
-
: 'bg-slate-700 text-slate-400'}"
|
|
29
|
-
>
|
|
30
|
-
{m.label}
|
|
31
|
-
</span>
|
|
32
|
-
<span class="hidden sm:inline">{m.desc}</span>
|
|
33
|
-
</button>
|
|
34
|
-
{/each}
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
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 ModeToggle: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
-
[evt: string]: CustomEvent<any>;
|
|
16
|
-
}, {}, {}, string>;
|
|
17
|
-
type ModeToggle = InstanceType<typeof ModeToggle>;
|
|
18
|
-
export default ModeToggle;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import Plus from '@tabler/icons-svelte/icons/plus';
|
|
3
|
-
import { getEditContext } from '../context.svelte.js';
|
|
4
|
-
|
|
5
|
-
type Props = {
|
|
6
|
-
arrayPath: string;
|
|
7
|
-
index: number;
|
|
8
|
-
itemTemplate: () => Record<string, unknown>;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
let { arrayPath, index, itemTemplate }: Props = $props();
|
|
12
|
-
|
|
13
|
-
const ctx = getEditContext();
|
|
14
|
-
|
|
15
|
-
let isHovered = $state(false);
|
|
16
|
-
|
|
17
|
-
function addBlock() {
|
|
18
|
-
const arr = ctx.getData(arrayPath) as unknown[];
|
|
19
|
-
if (Array.isArray(arr)) {
|
|
20
|
-
const newItem = { ...itemTemplate(), _id: crypto.randomUUID() };
|
|
21
|
-
arr.splice(index, 0, newItem);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
</script>
|
|
25
|
-
|
|
26
|
-
{#if ctx.mode === 'blocks'}
|
|
27
|
-
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
28
|
-
<div
|
|
29
|
-
class="add-block-zone relative my-2 flex h-8 items-center justify-center"
|
|
30
|
-
onmouseenter={() => (isHovered = true)}
|
|
31
|
-
onmouseleave={() => (isHovered = false)}
|
|
32
|
-
>
|
|
33
|
-
{#if isHovered}
|
|
34
|
-
<div class="absolute inset-x-0 top-1/2 h-px bg-[#1e3a5f]/30"></div>
|
|
35
|
-
<button
|
|
36
|
-
type="button"
|
|
37
|
-
onclick={addBlock}
|
|
38
|
-
class="relative z-10 flex h-8 w-8 items-center justify-center rounded-full bg-[#1e3a5f] text-white shadow-lg transition-transform hover:scale-110"
|
|
39
|
-
title="Add block"
|
|
40
|
-
>
|
|
41
|
-
<Plus class="h-4 w-4" />
|
|
42
|
-
</button>
|
|
43
|
-
{:else}
|
|
44
|
-
<div class="h-1 w-full cursor-pointer rounded bg-transparent transition-colors hover:bg-[#1e3a5f]/10"></div>
|
|
45
|
-
{/if}
|
|
46
|
-
</div>
|
|
47
|
-
{/if}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
type Props = {
|
|
2
|
-
arrayPath: string;
|
|
3
|
-
index: number;
|
|
4
|
-
itemTemplate: () => Record<string, unknown>;
|
|
5
|
-
};
|
|
6
|
-
declare const AddBlockButton: import("svelte").Component<Props, {}, "">;
|
|
7
|
-
type AddBlockButton = ReturnType<typeof AddBlockButton>;
|
|
8
|
-
export default AddBlockButton;
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import ArrowUp from '@tabler/icons-svelte/icons/arrow-up';
|
|
3
|
-
import ArrowDown from '@tabler/icons-svelte/icons/arrow-down';
|
|
4
|
-
import Trash from '@tabler/icons-svelte/icons/trash';
|
|
5
|
-
import Settings from '@tabler/icons-svelte/icons/settings';
|
|
6
|
-
import GripVertical from '@tabler/icons-svelte/icons/grip-vertical';
|
|
7
|
-
|
|
8
|
-
type Props = {
|
|
9
|
-
label: string;
|
|
10
|
-
canMoveUp: boolean;
|
|
11
|
-
canMoveDown: boolean;
|
|
12
|
-
canDelete: boolean;
|
|
13
|
-
onMoveUp: () => void;
|
|
14
|
-
onMoveDown: () => void;
|
|
15
|
-
onDelete: () => void;
|
|
16
|
-
onSettings: () => void;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
let { label, canMoveUp, canMoveDown, canDelete, onMoveUp, onMoveDown, onDelete, onSettings }: Props = $props();
|
|
20
|
-
</script>
|
|
21
|
-
|
|
22
|
-
<div class="absolute -left-12 top-1/2 z-20 flex -translate-y-1/2 flex-col items-center gap-1">
|
|
23
|
-
<div class="flex flex-col rounded-lg bg-slate-900 p-1 shadow-xl">
|
|
24
|
-
<button
|
|
25
|
-
type="button"
|
|
26
|
-
class="cursor-grab rounded p-1.5 text-slate-400 transition-colors hover:bg-slate-700 hover:text-white"
|
|
27
|
-
title="Drag to reorder"
|
|
28
|
-
>
|
|
29
|
-
<GripVertical class="h-4 w-4" />
|
|
30
|
-
</button>
|
|
31
|
-
|
|
32
|
-
<div class="my-1 h-px bg-slate-700"></div>
|
|
33
|
-
|
|
34
|
-
<button
|
|
35
|
-
type="button"
|
|
36
|
-
onclick={onMoveUp}
|
|
37
|
-
disabled={!canMoveUp}
|
|
38
|
-
class="rounded p-1.5 text-slate-400 transition-colors hover:bg-slate-700 hover:text-white disabled:cursor-not-allowed disabled:opacity-30"
|
|
39
|
-
title="Move up"
|
|
40
|
-
>
|
|
41
|
-
<ArrowUp class="h-4 w-4" />
|
|
42
|
-
</button>
|
|
43
|
-
|
|
44
|
-
<button
|
|
45
|
-
type="button"
|
|
46
|
-
onclick={onMoveDown}
|
|
47
|
-
disabled={!canMoveDown}
|
|
48
|
-
class="rounded p-1.5 text-slate-400 transition-colors hover:bg-slate-700 hover:text-white disabled:cursor-not-allowed disabled:opacity-30"
|
|
49
|
-
title="Move down"
|
|
50
|
-
>
|
|
51
|
-
<ArrowDown class="h-4 w-4" />
|
|
52
|
-
</button>
|
|
53
|
-
|
|
54
|
-
<div class="my-1 h-px bg-slate-700"></div>
|
|
55
|
-
|
|
56
|
-
<button
|
|
57
|
-
type="button"
|
|
58
|
-
onclick={onSettings}
|
|
59
|
-
class="rounded p-1.5 text-slate-400 transition-colors hover:bg-slate-700 hover:text-white"
|
|
60
|
-
title="Edit settings"
|
|
61
|
-
>
|
|
62
|
-
<Settings class="h-4 w-4" />
|
|
63
|
-
</button>
|
|
64
|
-
|
|
65
|
-
{#if canDelete}
|
|
66
|
-
<button
|
|
67
|
-
type="button"
|
|
68
|
-
onclick={onDelete}
|
|
69
|
-
class="rounded p-1.5 text-red-400 transition-colors hover:bg-red-900/50 hover:text-red-300"
|
|
70
|
-
title="Delete"
|
|
71
|
-
>
|
|
72
|
-
<Trash class="h-4 w-4" />
|
|
73
|
-
</button>
|
|
74
|
-
{/if}
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
|
|
78
|
-
<div class="absolute -top-3 left-4 z-20 rounded bg-slate-900 px-2 py-0.5 text-xs font-medium text-slate-300 shadow">
|
|
79
|
-
{label}
|
|
80
|
-
</div>
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
type Props = {
|
|
2
|
-
label: string;
|
|
3
|
-
canMoveUp: boolean;
|
|
4
|
-
canMoveDown: boolean;
|
|
5
|
-
canDelete: boolean;
|
|
6
|
-
onMoveUp: () => void;
|
|
7
|
-
onMoveDown: () => void;
|
|
8
|
-
onDelete: () => void;
|
|
9
|
-
onSettings: () => void;
|
|
10
|
-
};
|
|
11
|
-
declare const BlockToolbar: import("svelte").Component<Props, {}, "">;
|
|
12
|
-
type BlockToolbar = ReturnType<typeof BlockToolbar>;
|
|
13
|
-
export default BlockToolbar;
|