From f08432e417fc104257057c77b061a93c8e4dbcc8 Mon Sep 17 00:00:00 2001 From: Edwin Eames Date: Fri, 26 Dec 2025 20:01:28 -0500 Subject: [PATCH] added listings --- package-lock.json | 40 +- package.json | 1 + src/app.postcss | 6 +- src/lib/types/types.ts | 22 + src/routes/(app)/+layout.svelte | 39 +- src/routes/(app)/+page.svelte | 47 +- src/routes/(app)/[...slugs]/+page.svelte | 167 +++++ src/routes/(app)/[stateSlug]/+page.svelte | 21 +- .../[stateSlug]/[countySlug]/+page.svelte | 217 ++++++- src/routes/(app)/login/+page.svelte | 2 +- src/routes/(app)/vendor/+page.svelte | 365 ++++++++++- src/routes/(app)/vendor/price/+page.svelte | 475 ++++++++++++++- .../(app)/vendor/price/[id]/+page.svelte | 568 ++++++++++++++++++ src/routes/(app)/vendor/profile/+page.svelte | 275 +++++++-- .../appspecific/com.chrome.devtools.json | 1 + tailwind.config.js | 45 +- vite.config.ts | 10 +- 17 files changed, 2200 insertions(+), 101 deletions(-) create mode 100644 src/routes/(app)/[...slugs]/+page.svelte create mode 100644 src/routes/(app)/vendor/price/[id]/+page.svelte create mode 100644 static/.well-known/appspecific/com.chrome.devtools.json diff --git a/package-lock.json b/package-lock.json index cc31541..552c7dc 100755 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.1", "dependencies": { "@popperjs/core": "^2.11.8", + "lucide-svelte": "^0.544.0", "tailwind-merge": "^1.14.0" }, "devDependencies": { @@ -45,7 +46,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -443,7 +443,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -457,7 +456,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -466,7 +464,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -474,14 +471,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1037,8 +1032,7 @@ "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "node_modules/@types/resolve": { "version": "1.20.2", @@ -1050,7 +1044,6 @@ "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -1132,7 +1125,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -1178,7 +1170,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -1302,7 +1293,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "@types/estree": "^1.0.1", @@ -1315,7 +1305,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -1390,7 +1379,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -1903,8 +1891,7 @@ "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "dev": true + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" }, "node_modules/lru-cache": { "version": "10.4.3", @@ -1912,11 +1899,18 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true }, + "node_modules/lucide-svelte": { + "version": "0.544.0", + "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.544.0.tgz", + "integrity": "sha512-8kBxSivf8SJdEUJRHBpu9bRw0S/qfVK+Yfb92KQnRRBdP425RzT6aQfrIfZctG1oucPVTBQe1ZXgmth/3qVICg==", + "peerDependencies": { + "svelte": "^3 || ^4 || ^5.0.0-next.42" + } + }, "node_modules/magic-string": { "version": "0.30.11", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", - "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } @@ -1924,8 +1918,7 @@ "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" }, "node_modules/merge2": { "version": "1.4.1", @@ -2131,7 +2124,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^3.0.0", @@ -2142,7 +2134,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -2151,7 +2142,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dev": true, "dependencies": { "@types/estree": "*" } @@ -2533,7 +2523,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2678,7 +2667,6 @@ "version": "4.2.19", "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -2756,7 +2744,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -2765,7 +2752,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dev": true, "dependencies": { "@types/estree": "*" } diff --git a/package.json b/package.json index 3c4218b..c9f948d 100755 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "type": "module", "dependencies": { "@popperjs/core": "^2.11.8", + "lucide-svelte": "^0.544.0", "tailwind-merge": "^1.14.0" } } diff --git a/src/app.postcss b/src/app.postcss index 6b41a06..68ec60d 100755 --- a/src/app.postcss +++ b/src/app.postcss @@ -18,4 +18,8 @@ } .text-orange-oil { color: #ff6600; -} \ No newline at end of file +} + +.btn-state { + @apply btn btn-outline btn-secondary btn-xs px-1 py-1 text-xs leading-none; +} diff --git a/src/lib/types/types.ts b/src/lib/types/types.ts index 6830da6..7d007a7 100755 --- a/src/lib/types/types.ts +++ b/src/lib/types/types.ts @@ -18,3 +18,25 @@ username: string; password: string; } + + export interface User { + id: number; + username: string; + email: string; + // Add other fields as needed + } + + export interface Company { + id: number; + active: boolean; + created: string; // Assuming ISO date string + name: string; + address?: string | null; + town?: string | null; + state?: string | null; + phone?: number | null; + owner_name?: string | null; + owner_phone_number?: number | null; + email?: string | null; + user_id?: number | null; + } diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 78b23df..acf6edd 100755 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -3,12 +3,17 @@ import { writable } from "svelte/store"; import type { Writable } from 'svelte/store'; import '../../app.postcss'; // Import Tailwind CSS - import { user } from '$lib/states'; + import { user, darkMode, type User } from '$lib/states'; - // Define the type for the user store - interface User { - username: string; - } + // Initialize dark mode on mount to ensure data-theme is set + onMount(() => { + const isDark = $darkMode; + if (isDark) { + document.documentElement.setAttribute('data-theme', 'dark'); + } else { + document.documentElement.setAttribute('data-theme', 'light'); + } + }); // Placeholder for user store - in a real app, this would be managed by an auth library or context let storedUser: User | null = null; @@ -36,14 +41,32 @@ localStorage.removeItem('user'); window.location.href = '/'; }; + + // Toggle dark mode + const toggleDarkMode = () => { + darkMode.update((value: boolean) => !value); + }; -
+
diff --git a/src/routes/(app)/vendor/price/[id]/+page.svelte b/src/routes/(app)/vendor/price/[id]/+page.svelte new file mode 100644 index 0000000..67d2680 --- /dev/null +++ b/src/routes/(app)/vendor/price/[id]/+page.svelte @@ -0,0 +1,568 @@ + + + + + +
+ {#if isLoading} +
+ +
+ {:else} + +

Edit the pricing information for this listing.

+ + + +
+
+

Edit Price Listing

+ +
+ +
+ +
+ + +
+ + + {#if errors.companyName} + + {/if} +
+ + +
+

Pricing Information

+
+ +
+ + + {#if errors.pricePerGallon} + + {/if} +
+ + +
+ + +
+ + +
+ + + {#if errors.bioPercent} + + {/if} +
+ + +
+ + +
+
+
+ + +
+

Service Options

+
+ +
+ +
+
+
+ + +
+

Contact & Location

+
+ +
+ + + {#if errors.phone} + + {/if} +
+ + +
+
+ Online Ordering + + + +
+
+ + +
+ + + {#if errors.state} + + {/if} +
+ + +
+ + + {#if errors.countyId} + + {/if} +
+
+
+ + +
+ +
+ + + {#if submitMessage} +
+ {submitMessage} +
+ {/if} +
+
+
+ {/if} +
diff --git a/src/routes/(app)/vendor/profile/+page.svelte b/src/routes/(app)/vendor/profile/+page.svelte index 499f7b9..f9bd03e 100644 --- a/src/routes/(app)/vendor/profile/+page.svelte +++ b/src/routes/(app)/vendor/profile/+page.svelte @@ -1,49 +1,252 @@ -
-

Vendor Profile

-
-
- - +
+

Vendor Profile

+ + {#if loading} +
+
+

Loading company profile...

-
- - + {:else} + +
+
-
- - + + + +
+

Company Information

+
+
+ + +
+
+ + +
+
-
- - + + +
+

Address

+
+
+ + +
+
+
+ + +
+
+ + +
+
+
-
- - + + +
+

Contact Information

+
+ + +
-
- - + + +
+

Owner Information

+
+
+ + +
+
+ + +
+
-
- - -
-
- - + + +
+ + Back to Vendor Dashboard
- + {/if}
diff --git a/static/.well-known/appspecific/com.chrome.devtools.json b/static/.well-known/appspecific/com.chrome.devtools.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/static/.well-known/appspecific/com.chrome.devtools.json @@ -0,0 +1 @@ +{} diff --git a/tailwind.config.js b/tailwind.config.js index c23cb3a..b26c529 100755 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -7,19 +7,40 @@ const config = { darkMode: 'class', daisyui: { - themes: [{ - mytheme: { - "primary": "#0256bf", - "secondary": "#36363a", - "accent": "#7F00FF", - "neutral": "#2B2B36", - "base-100": "#252531", - "info": "#74a0d5", - "success": "#33cc33", - "warning": "#97520C", - "error": "#da0e0e", + themes: [ + { + light: { + "primary": "#0256bf", + "secondary": "#36363a", + "accent": "#7F00FF", + "neutral": "#2B2B36", + "base-100": "#ffffff", + "base-200": "#f8f9fa", + "base-300": "#dee2e6", + "base-content": "#000000", + "info": "#74a0d5", + "success": "#33cc33", + "warning": "#97520C", + "error": "#da0e0e", + }, }, - }, ], + { + dark: { + "primary": "#0256bf", + "secondary": "#36363a", + "accent": "#7F00FF", + "neutral": "#2B2B36", + "base-100": "#252531", + "base-200": "#1a1a1f", + "base-300": "#15151a", + "base-content": "#ffffff", + "info": "#74a0d5", + "success": "#33cc33", + "warning": "#97520C", + "error": "#da0e0e", + }, + }, + ], }, plugins: [ require("daisyui"), diff --git a/vite.config.ts b/vite.config.ts index bbf8c7d..072ec44 100755 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,5 +2,13 @@ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [sveltekit()] + plugins: [sveltekit()], + server: { + proxy: { + '/api': { + target: 'http://newenglandoil_api_rust:9552', + changeOrigin: true + } + } + } });