From 8988f68450975d9666992cf398451464b42fb69c Mon Sep 17 00:00:00 2001 From: Matt Henderson Date: Thu, 14 Aug 2025 20:45:51 +0100 Subject: [PATCH 1/2] add logo --- .gitignore | 2 ++ README.md | 6 +++++- assets/favicon.svg | 1 + assets/logo.afdesign | Bin 0 -> 30617 bytes assets/logo.svg | 1 + lib/server.js | 14 ++++++++++++++ package.json | 3 ++- templates/index.html | 5 +---- 8 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 assets/favicon.svg create mode 100644 assets/logo.afdesign create mode 100644 assets/logo.svg diff --git a/.gitignore b/.gitignore index bcb4cfd..0594256 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ var coverage +*~lock~ # Dependencies node_modules/ @@ -22,6 +23,7 @@ npm-debug.log* # NPM package files *.tgz + # OS .DS_Store Thumbs.db diff --git a/README.md b/README.md index c94f587..8aa0abc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ -# Leafstone +# leafstone + +

+ leafstone icon +

[![Test](https://github.com/matthen/leafstone/workflows/Test/badge.svg)](https://github.com/matthen/leafstone/workflows/Test) [![Lint](https://github.com/matthen/leafstone/workflows/Lint/badge.svg)](https://github.com/matthen/leafstone/workflows/Lint) diff --git a/assets/favicon.svg b/assets/favicon.svg new file mode 100644 index 0000000..5a6e12e --- /dev/null +++ b/assets/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/logo.afdesign b/assets/logo.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..e8a5398d36b782fb02895d8fa3acadd849e17599 GIT binary patch literal 30617 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 z∠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 yzrDR@6X{Y<0LK@Wle literal 0 HcmV?d00001 diff --git a/assets/logo.svg b/assets/logo.svg new file mode 100644 index 0000000..5a6e12e --- /dev/null +++ b/assets/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lib/server.js b/lib/server.js index 60523a4..9a083e2 100644 --- a/lib/server.js +++ b/lib/server.js @@ -41,6 +41,20 @@ async function startServer(componentFile, port = 3000, options = {}) { // Copy assets to temp directory await copyAssets(assets, tempDir); + // Copy favicon to public directory in temp project + const faviconSrc = path.join(__dirname, '..', 'assets', 'favicon.svg'); + const faviconDest = path.join(tempDir, 'public', 'favicon.svg'); + const publicDir = path.join(tempDir, 'public'); + + if (!fs.existsSync(publicDir)) { + fs.mkdirSync(publicDir, { recursive: true, mode: 0o755 }); + } + + if (fs.existsSync(faviconSrc)) { + fs.copyFileSync(faviconSrc, faviconDest); + fs.chmodSync(faviconDest, 0o644); + } + const viteConfig = { root: tempDir, plugins: [react()], diff --git a/package.json b/package.json index 0e8963a..03f3934 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "files": [ "bin/", "lib/", - "templates/" + "templates/", + "assets/" ], "scripts": { "test": "jest", diff --git a/templates/index.html b/templates/index.html index 7fa80b7..e2475d3 100644 --- a/templates/index.html +++ b/templates/index.html @@ -9,10 +9,7 @@ content="Interactive demo of {{componentName}} React component built with Leafstone" /> - +
From 485be587ebc325147e4b6e321b95795d5e34d78b Mon Sep 17 00:00:00 2001 From: Matt Henderson Date: Thu, 14 Aug 2025 20:48:16 +0100 Subject: [PATCH 2/2] just one svg --- assets/favicon.svg | 1 - lib/server.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 assets/favicon.svg diff --git a/assets/favicon.svg b/assets/favicon.svg deleted file mode 100644 index 5a6e12e..0000000 --- a/assets/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lib/server.js b/lib/server.js index 9a083e2..bfd565f 100644 --- a/lib/server.js +++ b/lib/server.js @@ -42,7 +42,7 @@ async function startServer(componentFile, port = 3000, options = {}) { await copyAssets(assets, tempDir); // Copy favicon to public directory in temp project - const faviconSrc = path.join(__dirname, '..', 'assets', 'favicon.svg'); + const faviconSrc = path.join(__dirname, '..', 'assets', 'logo.svg'); const faviconDest = path.join(tempDir, 'public', 'favicon.svg'); const publicDir = path.join(tempDir, 'public');