diff --git a/backend/CMakeLists.txt b/backend/CMakeLists.txt index 4d8c2fe..5b52375 100644 --- a/backend/CMakeLists.txt +++ b/backend/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.5) project(Tubender) set(CMAKE_CXX_STANDARD 14) @@ -6,13 +6,20 @@ set(OpenCASCADE_DIR "/usr/lib/cmake/opencascade/") find_package(OpenCASCADE REQUIRED) include_directories("/usr/include/opencascade/") -add_executable(cad_to_gcode src/cad_to_gcode.cpp) -add_executable(iges_to_topo src/iges_to_topo.cpp) -add_executable(step_to_topo src/step_to_topo.cpp) -add_executable(shape_to_bspline src/shape_to_bspline.cpp) -add_executable(tangent_vectors_geom_bspline src/tangent_vectors_geom_bspline.cpp) +add_executable(cad_to_gcode + src/cad_to_gcode.cpp + src/iges_to_topo.cpp + src/step_to_topo.cpp + src/shape_to_bspline.cpp + src/tangent_vectors_geom_bspline.cpp + src/gcode_from_vectors.cpp +) +# add_executable(iges_to_topo src/iges_to_topo.cpp) +# add_executable(step_to_topo src/step_to_topo.cpp) +# add_executable(shape_to_bspline src/shape_to_bspline.cpp) +# add_executable(tangent_vectors_geom_bspline src/tangent_vectors_geom_bspline.cpp) target_link_libraries(cad_to_gcode ${OpenCASCADE_LIBRARIES}) -target_link_libraries(iges_to_topo ${OpenCASCADE_LIBRARIES}) -target_link_libraries(shape_to_bspline ${OpenCASCADE_LIBRARIES}) -target_link_libraries(tangent_vectors_geom_bspline ${OpenCASCADE_LIBRARIES}) -target_link_libraries(step_to_topo ${OpenCASCADE_LIBRARIES}) +# target_link_libraries(iges_to_topo ${OpenCASCADE_LIBRARIES}) +# target_link_libraries(shape_to_bspline ${OpenCASCADE_LIBRARIES}) +# target_link_libraries(tangent_vectors_geom_bspline ${OpenCASCADE_LIBRARIES}) +# target_link_libraries(step_to_topo ${OpenCASCADE_LIBRARIES}) diff --git a/backend/src/cad_to_gcode.cpp b/backend/src/cad_to_gcode.cpp index 1a4e8c5..8477c73 100644 --- a/backend/src/cad_to_gcode.cpp +++ b/backend/src/cad_to_gcode.cpp @@ -1,8 +1,45 @@ #include #include +#include "step_to_topo.hpp" +#include "shape_to_bspline.hpp" +#include "tangent_vectors_geom_bspline.hpp" +#include "iges_to_topo.hpp" +#include "gcode_from_vectors.hpp" -int main(int argc, char* argv[]) { - TopoDS_Shape shape = TopoDS_Shape(); - bool eq = shape.IsEqual(TopoDS_Shape()); - std::cout << eq << std::endl; +// int main(int argc, char* argv[]) { +// // TopoDS_Shape shape = TopoDS_Shape(); +// // bool eq = shape.IsEqual(TopoDS_Shape()); +// // std::cout << eq << std::endl; +// } + +int main() { + try { + std::string step_filename = "RRH.STEP"; + std::string iges_filename = "RRH_test.IGS"; + + std::cout << "Reading files..." << step_filename << std::endl; + + TopoDS_Shape step_shape = read_step(step_filename); + TopoDS_Shape iges_shape = read_iges(iges_filename.c_str()); + + std::cout << "Creating B-Spline curves from shapes..." << std::endl; + + Handle(Geom_BSplineCurve) bsplineCurveStep = CreateBSplineFromShape(step_shape); + Handle(Geom_BSplineCurve) bsplineCurveIges = CreateBSplineFromShape(iges_shape); + + std::cout << "Calculating tangent vectors..." << std::endl; + + std::vector tangentVectorsStep = calculate_tangent_vectors(bsplineCurveStep); + std::vector tangentVectorsIges = calculate_tangent_vectors(bsplineCurveIges); + + std::cout << "Generating G-code..." << std::endl; + + generateGCode(tangentVectorsStep, "output_step.gcode"); + generateGCode(tangentVectorsIges, "output_iges.gcode"); + + } catch (const std::exception& e) { + std::cerr << "Exception caught: " << e.what() << std::endl; + } + + return 0; } \ No newline at end of file diff --git a/backend/src/gcode_from_vectors.cpp b/backend/src/gcode_from_vectors.cpp new file mode 100644 index 0000000..92d0f54 --- /dev/null +++ b/backend/src/gcode_from_vectors.cpp @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "gcode_from_vectors.hpp" + + +void generateGCode(const std::vector &tangentVectors, const std::string &outputPath) +{ + std::ofstream outFile(outputPath); + if (!outFile.is_open()) + { + std::cerr << "Error opening output file." << std::endl; + return; + } + std::cout << "Starting G-code generation..." << std::endl; + // Initial position of the tool head, assuming it starts at (0, 0, 0) + gp_Pnt currentPosition(0.0, 0.0, 0.0); + // Constants + const double zIncrement = 1.0; // Constant Z movement for each step + const double feedRate = 100.0; // Constant feed rate + int vectorCount = 0; // For logging progress + // Iterate over each tangent vector + for (const auto &vec : tangentVectors) + { + // Calculate the new position by adding the tangent vector to the current position + gp_Pnt newPosition = currentPosition.Translated(vec); + // Generate the G01 command + outFile << "G01 " + << "X" << newPosition.X() << " " + << "Y" << newPosition.Y() << " " + << "Z" << (currentPosition.Z() + zIncrement) << " " // Increment Z position + << "F" << feedRate << std::endl; + // Update the current position to the new position + currentPosition = newPosition; + // Logging progress + vectorCount++; + if (vectorCount % 100 == 0) // Log every 100 vectors processed + { + std::cout << "Processed " << vectorCount << " vectors..." << std::endl; + } + } + outFile.close(); + std::cout << "G-code generated successfully at " << outputPath << std::endl; +} + +// int main(int argc, char *argv[]) +// { +// std::cout << "Program started." << std::endl; +// // Create or obtain a BSplineCurve +// Handle(Geom_BSplineCurve) bsplineCurve = createExampleBSplineCurve(); +// // Calculate tangent vectors +// std::vector tangentVectors = calculate_tangent_vectors(bsplineCurve); +// // Specify the output path for the G-code file +// std::string outputPath = "output.gcode"; +// if (argc > 1) +// { +// outputPath = argv[1]; // Allow specifying output path as a command line argument +// } +// // Generate G-code +// generateGCode(tangentVectors, outputPath); +// std::cout << "Program completed." << std::endl; +// } \ No newline at end of file diff --git a/backend/src/gcode_from_vectors.hpp b/backend/src/gcode_from_vectors.hpp new file mode 100644 index 0000000..d1b2b8e --- /dev/null +++ b/backend/src/gcode_from_vectors.hpp @@ -0,0 +1,9 @@ +#ifndef GCODE_FROM_VECTORS +#define GCODE_FROM_VECTORS + +#include +#include + +void generateGCode(const std::vector &tangentVectors, const std::string &outputPath); + +#endif \ No newline at end of file diff --git a/backend/src/iges_to_topo.cpp b/backend/src/iges_to_topo.cpp index d6d4caf..cfcd49a 100644 --- a/backend/src/iges_to_topo.cpp +++ b/backend/src/iges_to_topo.cpp @@ -1,6 +1,7 @@ #include #include #include +#include "iges_to_topo.hpp" // takes in an IGES file and returns a TopoDS_Shape TopoDS_Shape read_iges(const char* filename) @@ -20,27 +21,27 @@ TopoDS_Shape read_iges(const char* filename) } // to see if it works -int main(int argc, char* argv[]) { - if (argc != 2) { - std::cerr << "Usage: " << argv[0] << " " << std::endl; - return 1; // Return a non-zero value to indicate an error - } +// int main(int argc, char* argv[]) { +// if (argc != 2) { +// std::cerr << "Usage: " << argv[0] << " " << std::endl; +// return 1; // Return a non-zero value to indicate an error +// } - const char* igesFileName = argv[1]; - std::cout < +#include + +TopoDS_Shape read_iges(const char* filename); + +#endif \ No newline at end of file diff --git a/backend/src/shape_to_bspline.cpp b/backend/src/shape_to_bspline.cpp index b079cd3..949880a 100644 --- a/backend/src/shape_to_bspline.cpp +++ b/backend/src/shape_to_bspline.cpp @@ -13,6 +13,8 @@ #include #include #include +#include +#include "shape_to_bspline.hpp" bool VerticesMatch(const TopoDS_Vertex& v1, const TopoDS_Vertex& v2) { gp_Pnt p1 = BRep_Tool::Pnt(v1); @@ -82,6 +84,20 @@ std::vector SamplePointsFromEdge(const TopoDS_Edge& edge, int numPoints) return points; } +Handle(Geom_BSplineCurve) CreateSimpleBSpline(const TopoDS_Shape& shape) { + TColgp_Array1OfPnt points(1, 6); + + points.SetValue(1, gp_Pnt(0.0, 0.0, 0.0)); + points.SetValue(2, gp_Pnt(1.0, 2.0, 0.0)); + points.SetValue(3, gp_Pnt(2.0, 4.0, 1.0)); + points.SetValue(4, gp_Pnt(3.0, 6.0, 1.0)); + points.SetValue(5, gp_Pnt(4.0, 8.0, 0.0)); + points.SetValue(6, gp_Pnt(5.0, 10.0, 0.0)); + + GeomAPI_PointsToBSpline splineBuilder(points); + return splineBuilder.Curve(); +} + Handle(Geom_BSplineCurve) CreateBSplineFromShape(const TopoDS_Shape& shape) { std::vector orderedEdges = OrderEdges(shape); std::vector allPoints; @@ -98,11 +114,16 @@ Handle(Geom_BSplineCurve) CreateBSplineFromShape(const TopoDS_Shape& shape) { arrayPoints.SetValue(i + 1, allPoints[i]); } - GeomAPI_PointsToBSpline splineBuilder(arrayPoints); - return splineBuilder.Curve(); -} + // // create simple bspline using CreateSimpleBSpline function + // Handle(Geom_BSplineCurve) simpleSpline = CreateSimpleBSpline(); -int main(int argc, char* argv[]) { + // // make sure the simpleSpline is not null + // if (simpleSpline.IsNull()) { + // std::cout << "simpleSpline is null" << std::endl; + // } else { + // std::cout << "simpleSpline is not null" << std::endl; + // } + GeomAPI_PointsToBSpline splineBuilder(arrayPoints); + return splineBuilder.Curve(); } - diff --git a/backend/src/shape_to_bspline.hpp b/backend/src/shape_to_bspline.hpp new file mode 100644 index 0000000..b63605d --- /dev/null +++ b/backend/src/shape_to_bspline.hpp @@ -0,0 +1,9 @@ +#ifndef BSPLINE_CREATOR_H +#define BSPLINE_CREATOR_H + +#include +#include + +Handle(Geom_BSplineCurve) CreateBSplineFromShape(const TopoDS_Shape& shape); + +#endif \ No newline at end of file diff --git a/backend/src/step_to_topo.cpp b/backend/src/step_to_topo.cpp index 45cc075..aca4741 100644 --- a/backend/src/step_to_topo.cpp +++ b/backend/src/step_to_topo.cpp @@ -5,6 +5,7 @@ #include #include using namespace std; +#include "step_to_topo.hpp" TopoDS_Shape read_step(const string& filename) { STEPControl_Reader reader; @@ -29,10 +30,10 @@ TopoDS_Shape read_step(const string& filename) { return result; } -int main(int argc, char* argv[]) { - string full_frame_filename = "Full_Frame.STEP"; - TopoDS_Shape full_frame_shape = read_step(full_frame_filename); +// int main(int argc, char* argv[]) { +// string full_frame_filename = "Full_Frame.STEP"; +// TopoDS_Shape full_frame_shape = read_step(full_frame_filename); - string rrh_filename = "RRH.STEP"; - TopoDS_Shape rrh_shape = read_step(rrh_filename); -} \ No newline at end of file +// string rrh_filename = "RRH.STEP"; +// TopoDS_Shape rrh_shape = read_step(rrh_filename); +// } \ No newline at end of file diff --git a/backend/src/step_to_topo.hpp b/backend/src/step_to_topo.hpp new file mode 100644 index 0000000..58cae8f --- /dev/null +++ b/backend/src/step_to_topo.hpp @@ -0,0 +1,9 @@ +#ifndef STEP_READER_H +#define STEP_READER_H + +#include +#include + +TopoDS_Shape read_step(const std::string& filename); + +#endif \ No newline at end of file diff --git a/backend/src/tangent_vectors_geom_bspline.cpp b/backend/src/tangent_vectors_geom_bspline.cpp index 1e4ec12..c972b95 100644 --- a/backend/src/tangent_vectors_geom_bspline.cpp +++ b/backend/src/tangent_vectors_geom_bspline.cpp @@ -1,4 +1,3 @@ - #include #include #include @@ -6,23 +5,23 @@ #include #include #include - -// outputs a list of vectors containing the tangents to the knots on the curve +#include "tangent_vectors_geom_bspline.hpp" +// Outputs a list of vectors containing the tangents at various points along the curve std::vector calculate_tangent_vectors(const Handle(Geom_BSplineCurve)& bsplineCurve) { std::vector tangentVectors; gp_Vec tangentVector; gp_Pnt point; - int knots = bsplineCurve->NbKnots(); - Standard_Real step_size = 1 / knots; Standard_Real first_parameter = bsplineCurve->FirstParameter(); Standard_Real last_parameter = bsplineCurve->LastParameter(); - for (int u = first_parameter; u < last_parameter; u += step_size) { + int numSamples = bsplineCurve->NbKnots() + 1; // For example, you might want samples at each knot and one in between each + Standard_Real step_size = (last_parameter - first_parameter) / (numSamples - 1); + for (Standard_Real u = first_parameter; u <= last_parameter; u += step_size) { bsplineCurve->D1(u, point, tangentVector); tangentVectors.push_back(tangentVector); + if (u + step_size > last_parameter && u != last_parameter) { + // Ensure the last parameter is included without going over + u = last_parameter - step_size; + } } return tangentVectors; -} - -int main(int argc, char* argv[]) { - return 1; -} +} \ No newline at end of file diff --git a/backend/src/tangent_vectors_geom_bspline.hpp b/backend/src/tangent_vectors_geom_bspline.hpp new file mode 100644 index 0000000..d577bc5 --- /dev/null +++ b/backend/src/tangent_vectors_geom_bspline.hpp @@ -0,0 +1,10 @@ +#ifndef TANGENT_CALCULATOR_H +#define TANGENT_CALCULATOR_H + +#include +#include +#include + +std::vector calculate_tangent_vectors(const Handle(Geom_BSplineCurve)& bsplineCurve); + +#endif \ No newline at end of file diff --git a/frontend/electron.js b/frontend/electron.js index 5a26f02..420530f 100644 --- a/frontend/electron.js +++ b/frontend/electron.js @@ -1,6 +1,9 @@ const { app, BrowserWindow } = require('electron'); const path = require('path'); -const isDev = require('electron-is-dev'); +const express = require('express'); + +// Implement NSApplicationDelegate.applicationSupportsSecureRestorableState +app.applicationSupportsSecureRestorableState = () => true; let mainWindow; @@ -9,22 +12,34 @@ function createWindow() { width: 800, height: 600, webPreferences: { - nodeIntegration: false, // nodeIntegration is set to false - contextIsolation: true, // enable context isolation - preload: path.join(__dirname, 'preload.js'), // specify preload script + nodeIntegration: false, + contextIsolation: true, }, }); - const startURL = isDev - ? 'http://localhost:3000' - : `file://${path.join(__dirname, '../build/index.html')}`; - - mainWindow.loadURL(startURL); + // Load the production build of the React application + mainWindow.loadFile(path.join(__dirname, 'build', 'index.html')); mainWindow.on('closed', () => (mainWindow = null)); } -app.on('ready', createWindow); +app.on('ready', () => { + createWindow(); + + // Create an express server to serve static files + const expressApp = express(); + const staticPath = path.join(__dirname, 'build', 'static'); + expressApp.use(express.static(staticPath)); + + // Error handling + expressApp.on('error', (err) => { + console.error('Express server error:', err); + }); + + expressApp.listen(3000, () => { + console.log('Static server running on port 3000'); + }); +}); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { @@ -36,4 +51,4 @@ app.on('activate', () => { if (mainWindow === null) { createWindow(); } -}); \ No newline at end of file +}); diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9d61c6e..0bb5889 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -22,7 +22,7 @@ "@types/electron": "^1.6.10", "@types/react": "^18.2.53", "@types/react-dom": "^18.2.18", - "electron": "^28.1.1", + "electron": "^28.2.3", "electron-builder": "^24.9.1", "electron-is-dev": "^2.0.0", "tailwindcss": "^3.4.1", @@ -8230,9 +8230,9 @@ } }, "node_modules/electron": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-28.1.1.tgz", - "integrity": "sha512-HJSbGHpRl46jWCp5G4OH57KSm2F5u15tB10ixD8iFiz9dhwojqlSQTRAcjSwvga+Vqs1jv7iqwQRrolXP4DgOA==", + "version": "28.2.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-28.2.3.tgz", + "integrity": "sha512-he9nGphZo03ejDjYBXpmFVw0KBKogXvR2tYxE4dyYvnfw42uaFIBFrwGeenvqoEOfheJfcI0u4rFG6h3QxDwnA==", "dev": true, "hasInstallScript": true, "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 9142521..b929294 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -51,7 +51,7 @@ "@types/electron": "^1.6.10", "@types/react": "^18.2.53", "@types/react-dom": "^18.2.18", - "electron": "^28.1.1", + "electron": "^28.2.3", "electron-builder": "^24.9.1", "electron-is-dev": "^2.0.0", "tailwindcss": "^3.4.1", diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index ff52163..7f1b967 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,6 +1,7 @@ import React from 'react'; -import { BrowserRouter as Router, Route, Routes } from "react-router-dom"; +import { Route } from "react-router-dom"; import HomePage from './pages/HomePage'; +import RoutingComponent from './components/RoutingComponent'; import AboutPage from './pages/AboutPage'; import MainPage from './pages/MainPage'; import PersuasivePage from './pages/PersuasivePage'; @@ -9,17 +10,14 @@ import ReviewsPage from './pages/ReviewsPage'; function App() { return ( - - + } /> } /> } /> } /> } /> } /> - - - + ); } diff --git a/frontend/src/components/RoutingComponent.tsx b/frontend/src/components/RoutingComponent.tsx new file mode 100644 index 0000000..cbdb214 --- /dev/null +++ b/frontend/src/components/RoutingComponent.tsx @@ -0,0 +1,30 @@ +import React, { ReactNode } from 'react'; +import { BrowserRouter as BrowserRouterImpl, HashRouter as HashRouterImpl, Routes } from 'react-router-dom'; + +interface RoutingComponentProps { + children: ReactNode; +} + +const RoutingComponent: React.FC = ({ children }) => { + if (isElectron()) { + return ( + + {children} + + ); + } else { + return ( + + {children} + + ); + } +} + +function isElectron() { + // Check if running in Electron environment + const isElectron = navigator.userAgent.toLowerCase().indexOf(' electron/') > -1; + return isElectron; +} + +export default RoutingComponent; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index e753237..0000000 --- a/package-lock.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "Tubender-1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@types/react": "^18.2.53", - "@types/react-dom": "^18.2.18", - "typescript": "^5.3.3" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.2.53", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.53.tgz", - "integrity": "sha512-52IHsMDT8qATp9B9zoOyobW8W3/0QhaJQTw1HwRj0UY2yBpCAQ7+S/CqHYQ8niAm3p4ji+rWUQ9UCib0GxQ60w==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.18", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", - "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index d89be24..0000000 --- a/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "dependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@types/react": "^18.2.53", - "@types/react-dom": "^18.2.18", - "typescript": "^5.3.3" - } -}