okno 1.0.0-beta.6 → 1.0.0-beta.8
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/dist/init.d.ts.map +1 -1
- package/dist/init.js +176 -95
- package/package.json +15 -15
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAkBA,KAAK,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AAEpE,UAAU,QAAQ;IACjB,SAAS,EAAE,SAAS,CAAA;IACpB,yEAAyE;IACzE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,oFAAoF;IACpF,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;CACzB;AAiBD,kEAAkE;AAClE,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CA0B5C;AAED;;;mEAGmE;AACnE,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CA8BrD;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,CAAA;AAE9C;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,YAAwB,GAAG,OAAO,CAmB7E;AA2FD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWrD;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAgB/E;AA2DD,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAuK7C"}
|
package/dist/init.js
CHANGED
|
@@ -1,58 +1,59 @@
|
|
|
1
|
-
import { existsSync as
|
|
2
|
-
import { join as
|
|
3
|
-
import { fileURLToPath as
|
|
4
|
-
|
|
1
|
+
import { existsSync as c, readFileSync as d, writeFileSync as f, mkdirSync as g } from "node:fs";
|
|
2
|
+
import { join as i, dirname as v } from "node:path";
|
|
3
|
+
import { fileURLToPath as j } from "node:url";
|
|
4
|
+
import { spawnSync as $ } from "node:child_process";
|
|
5
|
+
const k = {
|
|
5
6
|
astro: ["astro.config.mjs", "astro.config.ts", "astro.config.js"],
|
|
6
7
|
sveltekit: ["vite.config.ts", "vite.config.js"],
|
|
7
8
|
nuxt: ["nuxt.config.ts", "nuxt.config.js"],
|
|
8
9
|
vite: ["vite.config.ts", "vite.config.js", "vite.config.mjs"]
|
|
9
10
|
};
|
|
10
|
-
function
|
|
11
|
-
for (const
|
|
12
|
-
const
|
|
13
|
-
if (
|
|
11
|
+
function m(t, e) {
|
|
12
|
+
for (const n of e) {
|
|
13
|
+
const s = i(t, n);
|
|
14
|
+
if (c(s)) return s;
|
|
14
15
|
}
|
|
15
16
|
return null;
|
|
16
17
|
}
|
|
17
|
-
function
|
|
18
|
-
const e =
|
|
19
|
-
if (
|
|
18
|
+
function w(t) {
|
|
19
|
+
const e = i(t, "package.json"), n = {};
|
|
20
|
+
if (c(e))
|
|
20
21
|
try {
|
|
21
|
-
const
|
|
22
|
-
Object.assign(
|
|
22
|
+
const l = JSON.parse(d(e, "utf-8"));
|
|
23
|
+
Object.assign(n, l.dependencies, l.devDependencies);
|
|
23
24
|
} catch {
|
|
24
25
|
}
|
|
25
|
-
const
|
|
26
|
-
return
|
|
26
|
+
const s = (l) => l in n;
|
|
27
|
+
return s("astro") || m(t, k.astro) ? { framework: "astro", configPath: m(t, k.astro), pluginsAt: "vite" } : s("nuxt") ? { framework: "nuxt", configPath: m(t, k.nuxt), pluginsAt: "vite" } : s("@sveltejs/kit") ? { framework: "sveltekit", configPath: m(t, k.vite), pluginsAt: "top" } : s("vite") ? { framework: "vite", configPath: m(t, k.vite), pluginsAt: "top" } : { framework: "unknown", configPath: null, pluginsAt: "top" };
|
|
27
28
|
}
|
|
28
|
-
function
|
|
29
|
-
let e =
|
|
29
|
+
function y(t) {
|
|
30
|
+
let e = d(t, "utf-8");
|
|
30
31
|
if (/from\s*["']okno\/vite["']/.test(e)) return !0;
|
|
31
|
-
const
|
|
32
|
-
if (!
|
|
33
|
-
const
|
|
34
|
-
let
|
|
35
|
-
const a =
|
|
36
|
-
a ?
|
|
37
|
-
${a[1]}okno(),` :
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
40
|
-
const
|
|
41
|
-
e = e.slice(0,
|
|
42
|
-
` +
|
|
32
|
+
const n = e.match(/\bplugins\s*:\s*\[/);
|
|
33
|
+
if (!n || n.index === void 0) return !1;
|
|
34
|
+
const s = n.index + n[0].length, l = e.slice(s);
|
|
35
|
+
let u;
|
|
36
|
+
const a = l.match(/^[^\S\n]*\n(\s*)/);
|
|
37
|
+
a ? u = `
|
|
38
|
+
${a[1]}okno(),` : l.trimStart().startsWith("]") ? u = "okno()" : u = "okno(), ", e = e.slice(0, s) + u + e.slice(s);
|
|
39
|
+
const h = 'import { okno } from "okno/vite"', o = [...e.matchAll(/^import .*$/gm)];
|
|
40
|
+
if (o.length) {
|
|
41
|
+
const r = o[o.length - 1], p = r.index + r[0].length;
|
|
42
|
+
e = e.slice(0, p) + `
|
|
43
|
+
` + h + e.slice(p);
|
|
43
44
|
} else
|
|
44
|
-
e =
|
|
45
|
+
e = h + `
|
|
45
46
|
` + e;
|
|
46
|
-
return
|
|
47
|
+
return f(t, e), !0;
|
|
47
48
|
}
|
|
48
|
-
function
|
|
49
|
-
const
|
|
50
|
-
return
|
|
49
|
+
function M(t, e = "starter") {
|
|
50
|
+
const n = i(t, "okno"), s = i(n, "schema.ts");
|
|
51
|
+
return c(s) ? !1 : (g(n, { recursive: !0 }), e === "empty" ? (f(s, R), !0) : (g(i(n, "pages"), { recursive: !0 }), g(i(n, "globals"), { recursive: !0 }), f(s, E), f(i(n, "pages", "home.ts"), I), f(i(n, "globals", "meta.ts"), T), f(i(n, "globals", "navbar.ts"), O), f(i(n, "globals", "footer.ts"), N), !0));
|
|
51
52
|
}
|
|
52
|
-
const
|
|
53
|
+
const R = `import type { Schema } from "okno"
|
|
53
54
|
|
|
54
55
|
export default {} satisfies Schema
|
|
55
|
-
`,
|
|
56
|
+
`, E = `import type { Schema } from "okno"
|
|
56
57
|
|
|
57
58
|
export default {
|
|
58
59
|
pages: {
|
|
@@ -102,19 +103,19 @@ export default {
|
|
|
102
103
|
},
|
|
103
104
|
},
|
|
104
105
|
} satisfies Schema
|
|
105
|
-
`,
|
|
106
|
+
`, I = `export default {
|
|
106
107
|
headline: "Hello from okno",
|
|
107
108
|
subhead: "Edit this on the page — press “e” or visit ?okno.",
|
|
108
109
|
body: "<p>This is your home page. Everything here is content in your repo.</p>",
|
|
109
110
|
image: null,
|
|
110
111
|
}
|
|
111
|
-
`,
|
|
112
|
+
`, T = `export default {
|
|
112
113
|
title: "My okno site",
|
|
113
114
|
description: "Built with okno — a Git-backed CMS with live editing.",
|
|
114
115
|
shareImage: null,
|
|
115
116
|
favicon: null,
|
|
116
117
|
}
|
|
117
|
-
`,
|
|
118
|
+
`, O = `export default {
|
|
118
119
|
logo: "okno",
|
|
119
120
|
links: [
|
|
120
121
|
{ link: { text: "Home", url: "/", external: false } },
|
|
@@ -122,34 +123,104 @@ export default {
|
|
|
122
123
|
],
|
|
123
124
|
cta: { text: "Get started", url: "/", external: false },
|
|
124
125
|
}
|
|
125
|
-
`,
|
|
126
|
+
`, N = `export default {
|
|
126
127
|
text: "© My okno site",
|
|
127
128
|
links: [{ link: { text: "Home", url: "/", external: false } }],
|
|
128
129
|
}
|
|
129
130
|
`;
|
|
130
|
-
function
|
|
131
|
-
const e = v(
|
|
132
|
-
if (!
|
|
133
|
-
const
|
|
134
|
-
return
|
|
135
|
-
}
|
|
136
|
-
function
|
|
137
|
-
const
|
|
138
|
-
let
|
|
139
|
-
if (
|
|
131
|
+
function b(t) {
|
|
132
|
+
const e = v(j(import.meta.url)), n = i(e, "..", "skills", "connect-okno", "SKILL.md");
|
|
133
|
+
if (!c(n)) return null;
|
|
134
|
+
const s = i(".claude", "skills", "connect-okno", "SKILL.md"), l = i(t, s);
|
|
135
|
+
return c(l) ? null : (g(v(l), { recursive: !0 }), f(l, d(n, "utf-8")), s);
|
|
136
|
+
}
|
|
137
|
+
function S(t, e) {
|
|
138
|
+
const n = e === "claude" ? ".mcp.json" : i(".cursor", "mcp.json"), s = i(t, n);
|
|
139
|
+
let l = { mcpServers: {} };
|
|
140
|
+
if (c(s))
|
|
140
141
|
try {
|
|
141
|
-
|
|
142
|
+
l = JSON.parse(d(s, "utf-8"));
|
|
142
143
|
} catch {
|
|
143
144
|
}
|
|
144
|
-
return
|
|
145
|
-
`),
|
|
145
|
+
return l.mcpServers ??= {}, l.mcpServers.okno = { command: "npx", args: ["okno", "mcp"] }, g(i(s, ".."), { recursive: !0 }), f(s, JSON.stringify(l, null, 2) + `
|
|
146
|
+
`), n;
|
|
147
|
+
}
|
|
148
|
+
function x(t) {
|
|
149
|
+
return c(i(t, "bun.lock")) || c(i(t, "bun.lockb")) ? "bun" : c(i(t, "pnpm-lock.yaml")) ? "pnpm" : c(i(t, "yarn.lock")) ? "yarn" : "npm";
|
|
146
150
|
}
|
|
147
|
-
|
|
148
|
-
|
|
151
|
+
function H() {
|
|
152
|
+
try {
|
|
153
|
+
const t = v(j(import.meta.url));
|
|
154
|
+
return JSON.parse(d(i(t, "..", "package.json"), "utf-8")).version ?? "";
|
|
155
|
+
} catch {
|
|
156
|
+
return "";
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function F(t) {
|
|
160
|
+
for (const e of [".mcp.json", i(".cursor", "mcp.json")]) {
|
|
161
|
+
const n = i(t, e);
|
|
162
|
+
if (c(n))
|
|
163
|
+
try {
|
|
164
|
+
if (JSON.parse(d(n, "utf-8"))?.mcpServers?.okno) return !0;
|
|
165
|
+
} catch {
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return !1;
|
|
169
|
+
}
|
|
170
|
+
function C(t) {
|
|
171
|
+
try {
|
|
172
|
+
const e = JSON.parse(d(i(t, "package.json"), "utf-8"));
|
|
173
|
+
return !!(e.dependencies?.okno || e.devDependencies?.okno);
|
|
174
|
+
} catch {
|
|
175
|
+
return !1;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function A(t, e) {
|
|
179
|
+
const n = H(), s = n ? `okno@${n}` : "okno", l = e === "npm" ? ["install", s] : ["add", s], u = `${e} ${l.join(" ")}`;
|
|
180
|
+
return $(e, l, { cwd: t, stdio: "inherit", shell: process.platform === "win32" }).status === 0 ? u : null;
|
|
181
|
+
}
|
|
182
|
+
async function L() {
|
|
183
|
+
const t = process.cwd(), e = await import("@clack/prompts");
|
|
149
184
|
e.intro("okno init");
|
|
150
|
-
let
|
|
151
|
-
if (t
|
|
152
|
-
const
|
|
185
|
+
let n = w(t);
|
|
186
|
+
if (c(i(t, "okno", "schema.ts"))) {
|
|
187
|
+
const o = [];
|
|
188
|
+
if (C(t))
|
|
189
|
+
o.push("• okno already installed");
|
|
190
|
+
else {
|
|
191
|
+
const r = x(t);
|
|
192
|
+
e.log.step(`Installing okno with ${r}…`);
|
|
193
|
+
const p = A(t, r);
|
|
194
|
+
o.push(
|
|
195
|
+
p ? `✓ Installed okno (${p})` : `! Couldn't install okno — run \`${r === "npm" ? "npm install" : `${r} add`} okno\` yourself`
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
if (n.configPath) {
|
|
199
|
+
const r = n.configPath.replace(t + "/", "");
|
|
200
|
+
/from\s*["']okno\/vite["']/.test(d(n.configPath, "utf-8")) ? o.push(`• Plugin already in ${r}`) : y(n.configPath) ? o.push(`✓ Added okno() to ${r}`) : o.push("! Add okno() to your config's plugins array yourself");
|
|
201
|
+
}
|
|
202
|
+
if (o.push("• okno/ already scaffolded — left it alone"), F(t))
|
|
203
|
+
o.push("• MCP already configured");
|
|
204
|
+
else {
|
|
205
|
+
const r = await e.select({
|
|
206
|
+
message: "Add the okno MCP server for your AI editor? (optional)",
|
|
207
|
+
options: [
|
|
208
|
+
{ value: "skip", label: "Skip", hint: "default — add later with `okno mcp`" },
|
|
209
|
+
{ value: "claude", label: "Claude Code", hint: ".mcp.json + connect-okno skill" },
|
|
210
|
+
{ value: "cursor", label: "Cursor", hint: ".cursor/mcp.json" }
|
|
211
|
+
],
|
|
212
|
+
initialValue: "skip"
|
|
213
|
+
});
|
|
214
|
+
if (!e.isCancel(r) && r !== "skip" && (o.push(`✓ Registered the okno MCP server in ${S(t, r)}`), r === "claude")) {
|
|
215
|
+
const p = b(t);
|
|
216
|
+
p && o.push(`✓ Installed the connect-okno skill in ${p}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return e.note(o.join(`
|
|
220
|
+
`), "okno is already set up"), e.outro("Run your dev server and press “e” (or visit ?okno) to open the editor.");
|
|
221
|
+
}
|
|
222
|
+
if (n.framework === "unknown") {
|
|
223
|
+
const o = await e.select({
|
|
153
224
|
message: "Which framework is this project?",
|
|
154
225
|
options: [
|
|
155
226
|
{ value: "astro", label: "Astro" },
|
|
@@ -158,23 +229,13 @@ async function H() {
|
|
|
158
229
|
{ value: "nuxt", label: "Nuxt" }
|
|
159
230
|
]
|
|
160
231
|
});
|
|
161
|
-
if (e.isCancel(
|
|
162
|
-
const
|
|
163
|
-
|
|
232
|
+
if (e.isCancel(o)) return e.cancel("Cancelled.");
|
|
233
|
+
const r = o, p = r === "astro" || r === "nuxt" ? "vite" : "top", P = k[r] ?? k.vite;
|
|
234
|
+
n = { framework: r, configPath: m(t, P), pluginsAt: p };
|
|
164
235
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
{ value: "claude", label: "Claude Code", hint: ".mcp.json + connect-okno skill" },
|
|
169
|
-
{ value: "cursor", label: "Cursor", hint: ".cursor/mcp.json" },
|
|
170
|
-
{ value: "skip", label: "Skip", hint: "no AI editor" }
|
|
171
|
-
],
|
|
172
|
-
initialValue: "claude"
|
|
173
|
-
});
|
|
174
|
-
if (e.isCancel(o)) return e.cancel("Cancelled.");
|
|
175
|
-
let i = "starter";
|
|
176
|
-
if (!f(s(n, "okno", "schema.ts"))) {
|
|
177
|
-
const r = await e.select({
|
|
236
|
+
let s = "starter";
|
|
237
|
+
if (!c(i(t, "okno", "schema.ts"))) {
|
|
238
|
+
const o = await e.select({
|
|
178
239
|
message: "Scaffold a Starter, or an empty schema?",
|
|
179
240
|
options: [
|
|
180
241
|
{ value: "starter", label: "Starter", hint: "Home + Meta/Navbar/Footer globals, ready to edit" },
|
|
@@ -182,40 +243,60 @@ async function H() {
|
|
|
182
243
|
],
|
|
183
244
|
initialValue: "starter"
|
|
184
245
|
});
|
|
185
|
-
if (e.isCancel(
|
|
186
|
-
|
|
246
|
+
if (e.isCancel(o)) return e.cancel("Cancelled.");
|
|
247
|
+
s = o;
|
|
187
248
|
}
|
|
249
|
+
const u = await e.select({
|
|
250
|
+
message: "Set up the okno MCP server for your AI editor? (optional)",
|
|
251
|
+
options: [
|
|
252
|
+
{ value: "skip", label: "Skip", hint: "default — add later with `okno mcp`" },
|
|
253
|
+
{ value: "claude", label: "Claude Code", hint: ".mcp.json + connect-okno skill" },
|
|
254
|
+
{ value: "cursor", label: "Cursor", hint: ".cursor/mcp.json" }
|
|
255
|
+
],
|
|
256
|
+
initialValue: "skip"
|
|
257
|
+
});
|
|
258
|
+
if (e.isCancel(u)) return e.cancel("Cancelled.");
|
|
188
259
|
const a = [];
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
260
|
+
if (C(t))
|
|
261
|
+
a.push("• okno already a dependency — skipped install");
|
|
262
|
+
else {
|
|
263
|
+
const o = x(t);
|
|
264
|
+
e.log.step(`Installing okno with ${o}…`);
|
|
265
|
+
const r = A(t, o);
|
|
266
|
+
a.push(
|
|
267
|
+
r ? `✓ Installed okno (${r})` : `! Couldn't install okno automatically — run \`${o === "npm" ? "npm install" : `${o} add`} okno\` yourself`
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
let h = !1;
|
|
271
|
+
if (n.configPath && (h = y(n.configPath)), h)
|
|
272
|
+
a.push(`✓ Added okno() to ${n.configPath.replace(t + "/", "")}`);
|
|
192
273
|
else {
|
|
193
|
-
const
|
|
274
|
+
const o = n.pluginsAt === "vite" ? `import { okno } from "okno/vite"
|
|
194
275
|
// inside defineConfig:
|
|
195
276
|
// vite: { plugins: [okno()] }` : `import { okno } from "okno/vite"
|
|
196
277
|
// inside defineConfig:
|
|
197
278
|
// plugins: [okno()]`;
|
|
198
279
|
a.push(`! Couldn't edit your config automatically — add okno() yourself:
|
|
199
|
-
${
|
|
280
|
+
${o}`);
|
|
200
281
|
}
|
|
201
|
-
if (
|
|
202
|
-
|
|
203
|
-
) : a.push("• okno/ already exists — left it alone"),
|
|
204
|
-
const
|
|
205
|
-
a.push(`✓ Registered the okno MCP server in ${
|
|
282
|
+
if (M(t, s) ? a.push(
|
|
283
|
+
s === "starter" ? "✓ Scaffolded the okno Starter (Home + Meta/Navbar/Footer globals)" : "✓ Scaffolded an empty okno/ (schema only — nothing else)"
|
|
284
|
+
) : a.push("• okno/ already exists — left it alone"), u !== "skip") {
|
|
285
|
+
const o = S(t, u);
|
|
286
|
+
a.push(`✓ Registered the okno MCP server in ${o}`);
|
|
206
287
|
}
|
|
207
|
-
if (
|
|
208
|
-
const
|
|
209
|
-
|
|
288
|
+
if (u === "claude") {
|
|
289
|
+
const o = b(t);
|
|
290
|
+
o && a.push(`✓ Installed the connect-okno skill in ${o}`);
|
|
210
291
|
}
|
|
211
292
|
e.note(a.join(`
|
|
212
293
|
`), "Done"), e.outro("Run your dev server and press “e” (or visit ?okno) to open the editor.");
|
|
213
294
|
}
|
|
214
295
|
export {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
296
|
+
y as addPlugin,
|
|
297
|
+
w as detect,
|
|
298
|
+
L as runInit,
|
|
299
|
+
M as scaffold,
|
|
300
|
+
S as writeMcpConfig,
|
|
301
|
+
b as writeSkill
|
|
221
302
|
};
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "okno",
|
|
3
3
|
"description": "Git-backed CMS with live editing for any Vite framework",
|
|
4
4
|
"author": "Gabriel Uhlíř",
|
|
5
|
-
"version": "1.0.0-beta.
|
|
5
|
+
"version": "1.0.0-beta.8",
|
|
6
6
|
"homepage": "https://okno.build",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
@@ -46,20 +46,9 @@
|
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@clack/prompts": "^0.7.0",
|
|
48
48
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
49
|
-
"zod": "^3.23.8",
|
|
50
|
-
"@internationalized/date": "^3.12.2",
|
|
51
|
-
"@tiptap/core": "^3.27.1",
|
|
52
|
-
"@tiptap/extension-image": "3.27.1",
|
|
53
|
-
"@tiptap/extension-table": "3.27.1",
|
|
54
|
-
"@tiptap/extension-text-align": "^3",
|
|
55
|
-
"@tiptap/pm": "^3.27.1",
|
|
56
|
-
"@tiptap/starter-kit": "^3.27.1",
|
|
57
|
-
"acorn": "^8.11.3",
|
|
58
|
-
"bits-ui": "^2.18.0",
|
|
59
|
-
"runed": "^0.23.0",
|
|
60
49
|
"simple-git": "^3.32.0",
|
|
61
|
-
"svelte": "
|
|
62
|
-
"
|
|
50
|
+
"svelte": "5.56.3",
|
|
51
|
+
"zod": "^3.23.8"
|
|
63
52
|
},
|
|
64
53
|
"devDependencies": {
|
|
65
54
|
"@hugeicons-pro/core-bulk-rounded": "*",
|
|
@@ -67,16 +56,27 @@
|
|
|
67
56
|
"@hugeicons-pro/core-stroke-rounded": "*",
|
|
68
57
|
"@hugeicons-pro/core-stroke-standard": "*",
|
|
69
58
|
"@hugeicons/svelte": "*",
|
|
59
|
+
"@internationalized/date": "^3.12.2",
|
|
70
60
|
"@sveltejs/vite-plugin-svelte": "^5.0.0",
|
|
71
61
|
"@tailwindcss/vite": "^4.0.0",
|
|
62
|
+
"@tiptap/core": "^3.27.1",
|
|
63
|
+
"@tiptap/extension-image": "3.27.1",
|
|
64
|
+
"@tiptap/extension-table": "3.27.1",
|
|
65
|
+
"@tiptap/extension-text-align": "^3",
|
|
66
|
+
"@tiptap/pm": "^3.27.1",
|
|
67
|
+
"@tiptap/starter-kit": "^3.27.1",
|
|
72
68
|
"@types/node": "^20.19.13",
|
|
69
|
+
"acorn": "^8.11.3",
|
|
70
|
+
"bits-ui": "^2.18.0",
|
|
71
|
+
"runed": "^0.23.0",
|
|
72
|
+
"svelte-dnd-action": "^0.9.69",
|
|
73
73
|
"tailwindcss": "^4.0.0",
|
|
74
74
|
"tailwindcss-animate": "^1.0.7",
|
|
75
75
|
"typescript": "^5.9.2",
|
|
76
76
|
"vite": "^6.4.3"
|
|
77
77
|
},
|
|
78
78
|
"peerDependencies": {
|
|
79
|
-
"svelte": "
|
|
79
|
+
"svelte": "5.56.3",
|
|
80
80
|
"vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
|
|
81
81
|
},
|
|
82
82
|
"keywords": [
|