diff --git a/django_breeze/core/management/commands/create-app.py b/django_breeze/core/management/commands/create-app.py
index acc8c19..efce9e0 100644
--- a/django_breeze/core/management/commands/create-app.py
+++ b/django_breeze/core/management/commands/create-app.py
@@ -1,5 +1,4 @@
-from pathlib import Path, PurePath
-import os
+from pathlib import Path
from django_breeze.core.management import BaseCommand
from django_breeze.core.handlers.files import TemplateFilesHandler
@@ -10,12 +9,12 @@
class CreateAppCommand(BaseCommand):
name = "create-app"
description = "Create a new app"
- usage = "create-app [ react|vue3 ] [ --typescript ]"
+ usage = "create-app [ react|vue3|svelte4 ] [ --typescript ]"
def add_arguments(self, parser):
parser.add_argument(
"framework",
- choices=["react", "vue3"],
+ choices=["react", "vue3", "svelte4"],
help="Framework of the app to create",
)
parser.add_argument("--typescript", action="store_true", help="use TypeScript")
diff --git a/django_breeze/templates/svelte4/package.json b/django_breeze/templates/svelte4/package.json
new file mode 100644
index 0000000..2b575d2
--- /dev/null
+++ b/django_breeze/templates/svelte4/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "svelte4",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@sveltejs/vite-plugin-svelte": "^3.1.2",
+ "@inertiajs/svelte": "^1.2.0",
+ "autoprefixer": "^10.4.20",
+ "postcss": "^8.4.44",
+ "tailwindcss": "^3.4.10"
+ },
+ "devDependencies": {
+ "vite": "^5.4.3",
+ "svelte": "^4.2.19"
+ }
+}
diff --git a/django_breeze/templates/svelte4/postcss.config.js b/django_breeze/templates/svelte4/postcss.config.js
new file mode 100644
index 0000000..2e7af2b
--- /dev/null
+++ b/django_breeze/templates/svelte4/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/django_breeze/templates/svelte4/src/components/PackageCard.svelte b/django_breeze/templates/svelte4/src/components/PackageCard.svelte
new file mode 100644
index 0000000..6aa3abc
--- /dev/null
+++ b/django_breeze/templates/svelte4/src/components/PackageCard.svelte
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/django_breeze/templates/svelte4/src/index.css b/django_breeze/templates/svelte4/src/index.css
new file mode 100644
index 0000000..bd6213e
--- /dev/null
+++ b/django_breeze/templates/svelte4/src/index.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
\ No newline at end of file
diff --git a/django_breeze/templates/svelte4/src/index.html b/django_breeze/templates/svelte4/src/index.html
new file mode 100644
index 0000000..7e62126
--- /dev/null
+++ b/django_breeze/templates/svelte4/src/index.html
@@ -0,0 +1,19 @@
+{% load django_vite %}
+
+
+
+
+
+
+
+
+
+ {% vite_hmr_client %} {% vite_asset 'main.js' %}
+
+ Django Breeze
+
+
+
+ {% block inertia %}{% endblock %}
+
+
diff --git a/django_breeze/templates/svelte4/src/main.js b/django_breeze/templates/svelte4/src/main.js
new file mode 100644
index 0000000..bb4a0ca
--- /dev/null
+++ b/django_breeze/templates/svelte4/src/main.js
@@ -0,0 +1,13 @@
+import { createInertiaApp } from "@inertiajs/svelte";
+import "./index.css";
+
+createInertiaApp({
+ resolve: (name) => {
+ const pages = import.meta.glob("./pages/**/*.svelte", { eager: true });
+ return pages[`./pages/${name}.svelte`];
+ },
+ setup({ el, App, props }) {
+ new App({ target: el, props });
+ },
+});
+
diff --git a/django_breeze/templates/svelte4/src/pages/index.svelte b/django_breeze/templates/svelte4/src/pages/index.svelte
new file mode 100644
index 0000000..38333db
--- /dev/null
+++ b/django_breeze/templates/svelte4/src/pages/index.svelte
@@ -0,0 +1,20 @@
+
+
+
+
+
Welcome, Django Breeze
+
Your project is setup successfully!
+
Powered by:
+
+ {#each $page.props.packages as framework}
+
+ {/each}
+
+
\ No newline at end of file
diff --git a/django_breeze/templates/svelte4/tailwind.config.js b/django_breeze/templates/svelte4/tailwind.config.js
new file mode 100644
index 0000000..0829a27
--- /dev/null
+++ b/django_breeze/templates/svelte4/tailwind.config.js
@@ -0,0 +1,13 @@
+/** @type {import('tailwindcss').Config} */
+
+module.exports = {
+ content: [
+ "./src/index.html",
+ "./src/**/*.{js,svelte}"
+ ],
+ darkMode: 'selector',
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
diff --git a/django_breeze/templates/svelte4/vite.config.js b/django_breeze/templates/svelte4/vite.config.js
new file mode 100644
index 0000000..603e08f
--- /dev/null
+++ b/django_breeze/templates/svelte4/vite.config.js
@@ -0,0 +1,29 @@
+import { defineConfig } from "vite";
+import { svelte } from "@sveltejs/vite-plugin-svelte";
+import { resolve } from "path";
+
+export default defineConfig({
+ plugins: [svelte()],
+ root: resolve("./src"),
+ base: "/static/",
+ server: {
+ host: "localhost",
+ port: 5173,
+ open: false,
+ watch: {
+ usePolling: true,
+ disableGlobbing: false,
+ },
+ },
+ build: {
+ outDir: resolve("./static/dist"),
+ manifest: true,
+ emptyOutDir: true,
+ target: "es2015",
+ rollupOptions: {
+ input: {
+ main: resolve("./src/main.js"),
+ },
+ },
+ },
+});
\ No newline at end of file
diff --git a/django_breeze/templates/svelte4_typescript/package.json b/django_breeze/templates/svelte4_typescript/package.json
new file mode 100644
index 0000000..a02d513
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "svelte4_typescript",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview",
+ "check": "svelte-check --tsconfig ./tsconfig.json && tsc -p tsconfig.node.json"
+ },
+ "dependencies": {
+ "@sveltejs/vite-plugin-svelte": "^3.1.2",
+ "@inertiajs/svelte": "^1.2.0",
+ "autoprefixer": "^10.4.20",
+ "postcss": "^8.4.44",
+ "tailwindcss": "^3.4.10"
+ },
+ "devDependencies": {
+ "vite": "^5.4.3",
+ "@tsconfig/svelte": "^5.0.4",
+ "svelte": "^4.2.19",
+ "svelte-check": "^3.8.5",
+ "tslib": "^2.6.3",
+ "typescript": "^5.5.3"
+ }
+}
\ No newline at end of file
diff --git a/django_breeze/templates/svelte4_typescript/postcss.config.js b/django_breeze/templates/svelte4_typescript/postcss.config.js
new file mode 100644
index 0000000..2e7af2b
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/django_breeze/templates/svelte4_typescript/src/components/PackageCard.svelte b/django_breeze/templates/svelte4_typescript/src/components/PackageCard.svelte
new file mode 100644
index 0000000..8a268f5
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/src/components/PackageCard.svelte
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/django_breeze/templates/svelte4_typescript/src/index.css b/django_breeze/templates/svelte4_typescript/src/index.css
new file mode 100644
index 0000000..bd6213e
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/src/index.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
\ No newline at end of file
diff --git a/django_breeze/templates/svelte4_typescript/src/index.html b/django_breeze/templates/svelte4_typescript/src/index.html
new file mode 100644
index 0000000..dedc094
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/src/index.html
@@ -0,0 +1,19 @@
+{% load django_vite %}
+
+
+
+
+
+
+
+
+
+ {% vite_hmr_client %} {% vite_asset 'main.ts' %}
+
+ Django Breeze
+
+
+
+ {% block inertia %}{% endblock %}
+
+
diff --git a/django_breeze/templates/svelte4_typescript/src/main.ts b/django_breeze/templates/svelte4_typescript/src/main.ts
new file mode 100644
index 0000000..bb4a0ca
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/src/main.ts
@@ -0,0 +1,13 @@
+import { createInertiaApp } from "@inertiajs/svelte";
+import "./index.css";
+
+createInertiaApp({
+ resolve: (name) => {
+ const pages = import.meta.glob("./pages/**/*.svelte", { eager: true });
+ return pages[`./pages/${name}.svelte`];
+ },
+ setup({ el, App, props }) {
+ new App({ target: el, props });
+ },
+});
+
diff --git a/django_breeze/templates/svelte4_typescript/src/pages/index.svelte b/django_breeze/templates/svelte4_typescript/src/pages/index.svelte
new file mode 100644
index 0000000..a621500
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/src/pages/index.svelte
@@ -0,0 +1,24 @@
+
+
+
+
+
Welcome, Django Breeze
+
Your project is setup successfully!
+
Powered by:
+
+ {#each packages as framework}
+
+ {/each}
+
+
\ No newline at end of file
diff --git a/django_breeze/templates/svelte4_typescript/tailwind.config.js b/django_breeze/templates/svelte4_typescript/tailwind.config.js
new file mode 100644
index 0000000..0829a27
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/tailwind.config.js
@@ -0,0 +1,13 @@
+/** @type {import('tailwindcss').Config} */
+
+module.exports = {
+ content: [
+ "./src/index.html",
+ "./src/**/*.{js,svelte}"
+ ],
+ darkMode: 'selector',
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
diff --git a/django_breeze/templates/svelte4_typescript/tsconfig.json b/django_breeze/templates/svelte4_typescript/tsconfig.json
new file mode 100644
index 0000000..5726986
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "extends": "@tsconfig/svelte/tsconfig.json",
+ "compilerOptions": {
+ "target": "ESNext",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "resolveJsonModule": true,
+ /**
+ * Typecheck JS in `.svelte` and `.js` files by default.
+ * Disable checkJs if you'd like to use dynamic types in JS.
+ * Note that setting allowJs false does not prevent the use
+ * of JS in `.svelte` files.
+ */
+ "allowJs": true,
+ "checkJs": true,
+ "isolatedModules": true,
+ "moduleDetection": "force"
+ },
+ "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
\ No newline at end of file
diff --git a/django_breeze/templates/svelte4_typescript/tsconfig.node.json b/django_breeze/templates/svelte4_typescript/tsconfig.node.json
new file mode 100644
index 0000000..119a826
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/tsconfig.node.json
@@ -0,0 +1,12 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "strict": true,
+ "noEmit": true
+ },
+ "include": ["vite.config.ts"]
+}
\ No newline at end of file
diff --git a/django_breeze/templates/svelte4_typescript/vite.config.ts b/django_breeze/templates/svelte4_typescript/vite.config.ts
new file mode 100644
index 0000000..f542d31
--- /dev/null
+++ b/django_breeze/templates/svelte4_typescript/vite.config.ts
@@ -0,0 +1,29 @@
+import { defineConfig } from "vite";
+import { svelte, vitePreprocess } from "@sveltejs/vite-plugin-svelte";
+import { resolve } from "path";
+
+export default defineConfig({
+ plugins: [svelte({ preprocess: vitePreprocess() })],
+ root: resolve("./src"),
+ base: "/static/",
+ server: {
+ host: "localhost",
+ port: 5173,
+ open: false,
+ watch: {
+ usePolling: true,
+ disableGlobbing: false,
+ },
+ },
+ build: {
+ outDir: resolve("./static/dist"),
+ manifest: true,
+ emptyOutDir: true,
+ target: "es2015",
+ rollupOptions: {
+ input: {
+ main: resolve("./src/main.js"),
+ },
+ },
+ },
+});
\ No newline at end of file