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 @@ + +
+

{framework}

+
\ 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 @@ + +
+

{framework}

+
\ 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