diff --git a/client/main.lua b/client/main.lua index 74052db..30721a3 100644 --- a/client/main.lua +++ b/client/main.lua @@ -10,6 +10,7 @@ end) AddEventHandler('onResourceStart', function(resource) if resource == GetCurrentResourceName() then Utils.createBlips() + print('[INFO] Resource started') _Loaded = true end end) diff --git a/client/testDrive.lua b/client/testDrive.lua new file mode 100644 index 0000000..d56af60 --- /dev/null +++ b/client/testDrive.lua @@ -0,0 +1,56 @@ +local testDriving = false +local testVehicle +local testShop + +RegisterNUICallback('testDrive', function(data, cb) + ESX.TriggerServerCallback('h-vshop:testDrive', function(success) + print(success) + if success then + testDriving = true + local shop = Utils.getShop() + testShop = shop + + if shop then + local sPos = shop.delivery.pos + local sHeading = shop.delivery.heading + ESX.Game.SpawnLocalVehicle(data.vehicle, sPos, heading, function(vehicle) + testVehicle = vehicle + print('Test vehicle spawned: '..vehicle) + end) + Wait(100) + SetPedIntoVehicle(PlayerPedId(), testVehicle, -1) + StartTestTimer() + end + cb(true) + else + cb(false) + end + end, data.vehicle) +end) + +RegisterNUICallback('stopTestDrive', function(data, cb) + if testDriving then + testDriving = false + SendNUIMessage({ + type = 'stopTimer', + }) + ESX.Game.DeleteVehicle(testVehicle) + SetEntityCoords(PlayerPedId(), testShop.pos) + ESX.TriggerServerCallback('h-vshop:removeBucket', function(success) + if not success then + print('Failed to remove bucket') + end + end) + cb(true) + else + cb(false) + end +end) + +local testTime = Config.TestTime +StartTestTimer = function () + SendNUIMessage({ + type = 'startTimer', + time = testTime + }) +end \ No newline at end of file diff --git a/client/utils.lua b/client/utils.lua index c218cd2..86e0bf6 100644 --- a/client/utils.lua +++ b/client/utils.lua @@ -60,7 +60,7 @@ Utils.openShop = function () type = 'open', shop = shop, cars = cars, - translation = Config.Translation + translation = Config.Translation, }) SetNuiFocus(true, true) end @@ -77,6 +77,22 @@ Utils.deleteVehicle = function() end end +Utils.loadModel = function(model) + RequestModel(model) + + while not HasModelLoaded(model) do + Wait(1) + end + + print('Loading Completed') + + SendNUIMessage({ + type = 'loadingDone' + }) + + return true +end + Utils.spawnShowcase = function(vehicle) local shop = Utils.getShop() local pos = shop.preview @@ -88,6 +104,12 @@ Utils.spawnShowcase = function(vehicle) if not cars then return end if pos then + + local loaded = Utils.loadModel(cars[1].model) + while not loaded do + Wait(1) + end + if not currentVeh and not vehicle then ESX.Game.SpawnLocalVehicle(cars[1].model, vector3(pos.x, pos.y, pos.z), heading, function(vehicle) currentVeh = vehicle @@ -123,6 +145,7 @@ end Utils.spawnVehicle = function(model, plate) local shop = Utils.getShop() + if shop then local sPos = shop.delivery.pos local sHeading = shop.delivery.heading @@ -148,12 +171,24 @@ Utils.spawnVehicle = function(model, plate) end Utils.getShopVehicles = function (category) - local vehicles = {} - for k,v in pairs(Config.Vehicles) do - if v.category == category then - vehicles[#vehicles+1] = v + if type(category) == "table" then + local vehicles = {} + for i = 1, #category do + local name = category[i] + for _,v in pairs(Config.Vehicles) do + if v.category == name then + vehicles[#vehicles+1] = v + end + end end + return vehicles or nil + else + local vehicles = {} + for k,v in pairs(Config.Vehicles) do + if v.category == category then + vehicles[#vehicles+1] = v + end + end + return vehicles end - - return vehicles end \ No newline at end of file diff --git a/fxmanifest.lua b/fxmanifest.lua index 67d3f05..c03c07c 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -2,6 +2,8 @@ fx_version 'adamant' game 'gta5' +lua54 'yes' + server_scripts { '@oxmysql/lib/MySQL.lua', 'server/*.lua', @@ -17,6 +19,7 @@ shared_scripts { } ui_page 'web/dist/index.html' +--ui_page 'http://localhost:3000/' files { 'web/dist/**' diff --git a/server/callbacks.lua b/server/callbacks.lua index 2a54407..0e38b23 100644 --- a/server/callbacks.lua +++ b/server/callbacks.lua @@ -1,5 +1,7 @@ local shop = {} +local inUseBuckets = {} + ESX.RegisterServerCallback('esx_vehicleshop:isPlateTaken', function(source, cb, plate) MySQL.scalar('SELECT plate FROM owned_vehicles WHERE plate = ?', {plate}, function(result) @@ -33,6 +35,30 @@ ESX.RegisterServerCallback('h-vshop:setOwned', function(source, cb, props) end end) +ESX.RegisterServerCallback('h-vshop:testDrive', function (source, cb, model) + local bucketSet = shop.testDrive(source, model) + + if bucketSet then + cb(true) + else + cb(false) + end +end) + +ESX.RegisterServerCallback('h-vshop:removeBucket', function (source, cb, bucket) + if source ~= nil and source ~= -1 then + local bucket = GetPlayerRoutingBucket(source) + + if bucket ~= 0 then + SetPlayerRoutingBucket(source, 0) + inUseBuckets[bucket] = nil + cb(true) + else + cb(false) + end + end +end) + function shop.setOwned(source, props) local xPlayer = ESX.GetPlayerFromId(source) if xPlayer then @@ -62,19 +88,30 @@ function shop.purchaseCar(source,model, plate) TriggerClientEvent('esx:showNotification', source, 'Sorry but you need: $' .. vPrice .. ' to purchase a ' .. vehicle.name) return false end - elseif Config.Payment == 'money' then - local money = xPlayer.getMoney() - if money >= vPrice then - xPlayer.removeMoney(vPrice) - TriggerClientEvent('esx:showNotification', source, 'You have purchased a ' .. vehicle.name .. ' for $' .. vPrice) + end + else + print('Issues finding the vehicle from the config.lua file!') + end +end + +function shop.testDrive(source, model) + local car = findCarByModel(model) + if source ~= -1 or source ~= nil and car then + local bucket = GetPlayerRoutingBucket(source) + + if bucket == 0 then + local r = math.random(400, 900) + if not inUseBuckets[r] then + inUseBuckets[r] = true + SetPlayerRoutingBucket(source, r) + Player(source).state.bucket = r return true else - TriggerClientEvent('esx:showNotification', source, 'Sorry but you need: $' .. vPrice .. ' to purchase a ' .. vehicle.name) return false end + else + return false end - else - print('Issues finding the vehicle from the config.lua file!') end end @@ -88,3 +125,16 @@ function findCarByModel(model) return false end + +local Debug = false + +if Debug then + RegisterCommand('getPlayerBucket', function(source) + local bucket = GetPlayerRoutingBucket(source) + print('Bucket: ' .. bucket) + end) + + RegisterCommand('resetPlayerBucket', function (source) + SetPlayerRoutingBucket(source, 0) + end) +end \ No newline at end of file diff --git a/shared/config.lua b/shared/config.lua index e167d40..d8ff971 100644 --- a/shared/config.lua +++ b/shared/config.lua @@ -5,6 +5,7 @@ Config.PlateLetters = 3 Config.PlateNumbers = 3 Config.PlateUseSpace = true Config.Payment = 'bank' +Config.TestTime = 30 -- Sekundes Nahui! -- This table is used to configure different shops! Config.Shops = { @@ -13,7 +14,7 @@ Config.Shops = { description = 'At our dealership you can find only premium quality vehicles that are brand new and not used!', pos = vec3(-33.942856, -1102.008789, 26.415405), -- Vec3(x, y, z) preview = vec3(-43.279121, -1099.938477, 26.415405), previewHeading = 68.031494, -- Vec3(x, y, z) - category = 'sports', -- Vehicle Category + category = {'sports', 'suv', 'bmw', 'audi'}, -- Vehicle Category you can have a table of categories or a string example: 'sports' or {'sports', 'offroad'} don't remove X from the categories list! blip = { -- Blip Settings color = 3, sprite = 355, diff --git a/web/dist/index.html b/web/dist/index.html index 0a8f2f1..55948ef 100644 --- a/web/dist/index.html +++ b/web/dist/index.html @@ -2,11 +2,11 @@ - + Vite App - - + +
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index d8bc415..c6e0f91 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 specifiers: '@fortawesome/fontawesome-svg-core': ^6.1.2 @@ -20,8 +20,8 @@ dependencies: '@fortawesome/free-brands-svg-icons': 6.1.2 '@fortawesome/free-regular-svg-icons': 6.1.2 '@fortawesome/free-solid-svg-icons': 6.1.2 - '@fortawesome/vue-fontawesome': 3.0.1_9411007cf579a03029310c32185eb961 - daisyui: 2.20.0_a191cbaa25c4a0a9f05cc78eac153be7 + '@fortawesome/vue-fontawesome': 3.0.1_sqiqa7hvpgqdakjrbqzbqxvzme + daisyui: 2.20.0_ugi4xkrfysqkt4c4y6hkyfj344 vue: 3.2.37 vue-router: 4.1.3_vue@3.2.37 @@ -34,11 +34,28 @@ devDependencies: packages: + /@babel/helper-string-parser/7.18.10: + resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + /@babel/parser/7.18.9: resolution: {integrity: sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==} engines: {node: '>=6.0.0'} hasBin: true - dev: false + dependencies: + '@babel/types': 7.19.0 + + /@babel/types/7.19.0: + resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.18.10 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 /@fortawesome/fontawesome-common-types/6.1.2: resolution: {integrity: sha512-wBaAPGz1Awxg05e0PBRkDRuTsy4B3dpBm+zreTTyd9TH4uUM27cAL4xWyWR0rLJCrRwzVsQ4hF3FvM6rqydKPA==} @@ -78,7 +95,7 @@ packages: '@fortawesome/fontawesome-common-types': 6.1.2 dev: false - /@fortawesome/vue-fontawesome/3.0.1_9411007cf579a03029310c32185eb961: + /@fortawesome/vue-fontawesome/3.0.1_sqiqa7hvpgqdakjrbqzbqxvzme: resolution: {integrity: sha512-CdXZJoCS+aEPec26ZP7hWWU3SaJlQPZSCGdgpQ2qGl2HUmtUUNrI3zC4XWdn1JUmh3t5OuDeRG1qB4eGRNSD4A==} peerDependencies: '@fortawesome/fontawesome-svg-core': ~1 || ~6 @@ -124,14 +141,12 @@ packages: '@vue/shared': 3.2.37 estree-walker: 2.0.2 source-map: 0.6.1 - dev: false /@vue/compiler-dom/3.2.37: resolution: {integrity: sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==} dependencies: '@vue/compiler-core': 3.2.37 '@vue/shared': 3.2.37 - dev: false /@vue/compiler-sfc/3.2.37: resolution: {integrity: sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==} @@ -146,14 +161,12 @@ packages: magic-string: 0.25.9 postcss: 8.4.14 source-map: 0.6.1 - dev: false /@vue/compiler-ssr/3.2.37: resolution: {integrity: sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==} dependencies: '@vue/compiler-dom': 3.2.37 '@vue/shared': 3.2.37 - dev: false /@vue/devtools-api/6.2.1: resolution: {integrity: sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==} @@ -167,20 +180,17 @@ packages: '@vue/shared': 3.2.37 estree-walker: 2.0.2 magic-string: 0.25.9 - dev: false /@vue/reactivity/3.2.37: resolution: {integrity: sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==} dependencies: '@vue/shared': 3.2.37 - dev: false /@vue/runtime-core/3.2.37: resolution: {integrity: sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==} dependencies: '@vue/reactivity': 3.2.37 '@vue/shared': 3.2.37 - dev: false /@vue/runtime-dom/3.2.37: resolution: {integrity: sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==} @@ -188,7 +198,6 @@ packages: '@vue/runtime-core': 3.2.37 '@vue/shared': 3.2.37 csstype: 2.6.20 - dev: false /@vue/server-renderer/3.2.37_vue@3.2.37: resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==} @@ -198,11 +207,9 @@ packages: '@vue/compiler-ssr': 3.2.37 '@vue/shared': 3.2.37 vue: 3.2.37 - dev: false /@vue/shared/3.2.37: resolution: {integrity: sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==} - dev: false /acorn-node/1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} @@ -244,7 +251,6 @@ packages: picocolors: 1.0.0 postcss: 8.4.14 postcss-value-parser: 4.2.0 - dev: true /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} @@ -265,7 +271,6 @@ packages: electron-to-chromium: 1.4.202 node-releases: 2.0.6 update-browserslist-db: 1.0.5_browserslist@4.21.3 - dev: true /camelcase-css/2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} @@ -273,7 +278,6 @@ packages: /caniuse-lite/1.0.30001370: resolution: {integrity: sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==} - dev: true /chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} @@ -328,9 +332,8 @@ packages: /csstype/2.6.20: resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} - dev: false - /daisyui/2.20.0_a191cbaa25c4a0a9f05cc78eac153be7: + /daisyui/2.20.0_ugi4xkrfysqkt4c4y6hkyfj344: resolution: {integrity: sha512-97xFBWQOXV/JCVRrGI5xranElKMmXIajDxojTQ1qoYwcWlkfFE7hY4D/NyHVIzlQb+B4xbiXhVPJM7EleRAY8g==} peerDependencies: autoprefixer: ^10.0.2 @@ -366,13 +369,13 @@ packages: /electron-to-chromium/1.4.202: resolution: {integrity: sha512-JYsK2ex9lmQD27kj19fhXYxzFJ/phLAkLKHv49A5UY6kMRV2xED3qMMLg/voW/+0AR6wMiI+VxlmK9NDtdxlPA==} - dev: true /esbuild-android-64/0.14.50: resolution: {integrity: sha512-H7iUEm7gUJHzidsBlFPGF6FTExazcgXL/46xxLo6i6bMtPim6ZmXyTccS8yOMpy6HAC6dPZ/JCQqrkkin69n6Q==} engines: {node: '>=12'} cpu: [x64] os: [android] + requiresBuild: true dev: true optional: true @@ -381,6 +384,7 @@ packages: engines: {node: '>=12'} cpu: [arm64] os: [android] + requiresBuild: true dev: true optional: true @@ -389,6 +393,7 @@ packages: engines: {node: '>=12'} cpu: [x64] os: [darwin] + requiresBuild: true dev: true optional: true @@ -397,6 +402,7 @@ packages: engines: {node: '>=12'} cpu: [arm64] os: [darwin] + requiresBuild: true dev: true optional: true @@ -405,6 +411,7 @@ packages: engines: {node: '>=12'} cpu: [x64] os: [freebsd] + requiresBuild: true dev: true optional: true @@ -413,6 +420,7 @@ packages: engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + requiresBuild: true dev: true optional: true @@ -421,6 +429,7 @@ packages: engines: {node: '>=12'} cpu: [ia32] os: [linux] + requiresBuild: true dev: true optional: true @@ -429,6 +438,7 @@ packages: engines: {node: '>=12'} cpu: [x64] os: [linux] + requiresBuild: true dev: true optional: true @@ -437,6 +447,7 @@ packages: engines: {node: '>=12'} cpu: [arm] os: [linux] + requiresBuild: true dev: true optional: true @@ -445,6 +456,7 @@ packages: engines: {node: '>=12'} cpu: [arm64] os: [linux] + requiresBuild: true dev: true optional: true @@ -453,6 +465,7 @@ packages: engines: {node: '>=12'} cpu: [mips64el] os: [linux] + requiresBuild: true dev: true optional: true @@ -461,6 +474,7 @@ packages: engines: {node: '>=12'} cpu: [ppc64] os: [linux] + requiresBuild: true dev: true optional: true @@ -469,6 +483,7 @@ packages: engines: {node: '>=12'} cpu: [riscv64] os: [linux] + requiresBuild: true dev: true optional: true @@ -477,6 +492,7 @@ packages: engines: {node: '>=12'} cpu: [s390x] os: [linux] + requiresBuild: true dev: true optional: true @@ -485,6 +501,7 @@ packages: engines: {node: '>=12'} cpu: [x64] os: [netbsd] + requiresBuild: true dev: true optional: true @@ -493,6 +510,7 @@ packages: engines: {node: '>=12'} cpu: [x64] os: [openbsd] + requiresBuild: true dev: true optional: true @@ -501,6 +519,7 @@ packages: engines: {node: '>=12'} cpu: [x64] os: [sunos] + requiresBuild: true dev: true optional: true @@ -509,6 +528,7 @@ packages: engines: {node: '>=12'} cpu: [ia32] os: [win32] + requiresBuild: true dev: true optional: true @@ -517,6 +537,7 @@ packages: engines: {node: '>=12'} cpu: [x64] os: [win32] + requiresBuild: true dev: true optional: true @@ -525,6 +546,7 @@ packages: engines: {node: '>=12'} cpu: [arm64] os: [win32] + requiresBuild: true dev: true optional: true @@ -559,11 +581,9 @@ packages: /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - dev: true /estree-walker/2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: false /fast-glob/3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} @@ -592,12 +612,12 @@ packages: /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - dev: true /fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + requiresBuild: true optional: true /function-bind/1.1.1: @@ -658,7 +678,6 @@ packages: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: sourcemap-codec: 1.4.8 - dev: false /merge2/1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -681,7 +700,6 @@ packages: /node-releases/2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} - dev: true /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -690,7 +708,6 @@ packages: /normalize-range/0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - dev: true /object-hash/3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} @@ -829,11 +846,9 @@ packages: /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - dev: false /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - dev: false /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} @@ -869,6 +884,10 @@ packages: transitivePeerDependencies: - ts-node + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -884,7 +903,6 @@ packages: browserslist: 4.21.3 escalade: 3.1.1 picocolors: 1.0.0 - dev: true /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -930,7 +948,6 @@ packages: '@vue/runtime-dom': 3.2.37 '@vue/server-renderer': 3.2.37_vue@3.2.37 '@vue/shared': 3.2.37 - dev: false /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} diff --git a/web/src/App.vue b/web/src/App.vue index f30b730..7d38fc4 100644 --- a/web/src/App.vue +++ b/web/src/App.vue @@ -1,113 +1,186 @@ @@ -121,6 +194,14 @@ export default { overflow: hidden; } +.dot-two { + animation-delay: 0.2s; +} + +.dot-three { + animation-delay: 0.3s; +} + /* width */ ::-webkit-scrollbar { width: 5px; diff --git a/web/src/assets/logopd.svg b/web/src/assets/logopd.svg new file mode 100644 index 0000000..911d9df --- /dev/null +++ b/web/src/assets/logopd.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/src/components/timer.vue b/web/src/components/timer.vue new file mode 100644 index 0000000..f536251 --- /dev/null +++ b/web/src/components/timer.vue @@ -0,0 +1,35 @@ + + + \ No newline at end of file diff --git a/web/src/views/Home.vue b/web/src/views/Home.vue new file mode 100644 index 0000000..c4a1308 --- /dev/null +++ b/web/src/views/Home.vue @@ -0,0 +1,16 @@ + + + \ No newline at end of file