From 909a31011b3094d7602894fe05efc7b6d847bc1b Mon Sep 17 00:00:00 2001 From: MartinaeyNL Date: Fri, 27 Jun 2025 16:46:58 +0200 Subject: [PATCH 1/8] WIP: Initial example setup for a custom React application. --- ui/app/README.md | 20 +- ui/app/custom-example-react/.gitignore | 16 + ui/app/custom-example-react/package.json | 25 + ui/app/custom-example-react/rsbuild.config.ts | 6 + ui/app/custom-example-react/src/App.css | 26 ++ ui/app/custom-example-react/src/App.tsx | 12 + ui/app/custom-example-react/src/env.d.ts | 1 + ui/app/custom-example-react/src/index.tsx | 13 + ui/app/custom-example-react/tsconfig.json | 23 + yarn.lock | 426 ++++++++++++++++++ 10 files changed, 567 insertions(+), 1 deletion(-) create mode 100644 ui/app/custom-example-react/.gitignore create mode 100644 ui/app/custom-example-react/package.json create mode 100644 ui/app/custom-example-react/rsbuild.config.ts create mode 100644 ui/app/custom-example-react/src/App.css create mode 100644 ui/app/custom-example-react/src/App.tsx create mode 100644 ui/app/custom-example-react/src/env.d.ts create mode 100644 ui/app/custom-example-react/src/index.tsx create mode 100644 ui/app/custom-example-react/tsconfig.json diff --git a/ui/app/README.md b/ui/app/README.md index f8a36354b..b91c07f03 100644 --- a/ui/app/README.md +++ b/ui/app/README.md @@ -1 +1,19 @@ -Custom UI apps can be added here use the manager UI app as a template. +# Custom UI apps + +In this folder, you can add custom (web) applications that will be shipped along with OpenRemote. +For example, special mobile apps for a single use are very common. +We make it easy for them to communicate with OpenRemote. + +## Example apps + +We provided several example apps to get familiar with the architecture. +Here's a list of the apps, and what they do; + +### /custom +This is an example web application built with Lit Web Components and Webpack. +Apps in our main OpenRemote repository are built with these technologies as well. +It can be used as a template to add your own pages on top of it. + +### /custom-example-react +This is an example web application built with React 19 and RSBuild. +*(more information soon)* \ No newline at end of file diff --git a/ui/app/custom-example-react/.gitignore b/ui/app/custom-example-react/.gitignore new file mode 100644 index 000000000..6f3092c30 --- /dev/null +++ b/ui/app/custom-example-react/.gitignore @@ -0,0 +1,16 @@ +# Local +.DS_Store +*.local +*.log* + +# Dist +node_modules +dist/ + +# Profile +.rspack-profile-*/ + +# IDE +.vscode/* +!.vscode/extensions.json +.idea diff --git a/ui/app/custom-example-react/package.json b/ui/app/custom-example-react/package.json new file mode 100644 index 000000000..81c348c79 --- /dev/null +++ b/ui/app/custom-example-react/package.json @@ -0,0 +1,25 @@ +{ + "name": "@openremote/custom-example-react", + "version": "1.0.0", + "description": "OpenRemote Custom App example using React", + "author": "OpenRemote", + "license": "AGPL-3.0-or-later", + "private": true, + "type": "module", + "scripts": { + "build": "rsbuild build", + "dev": "rsbuild dev --open", + "preview": "rsbuild preview" + }, + "dependencies": { + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@rsbuild/core": "^1.4.0", + "@rsbuild/plugin-react": "^1.3.2", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "typescript": "^5.8.3" + } +} diff --git a/ui/app/custom-example-react/rsbuild.config.ts b/ui/app/custom-example-react/rsbuild.config.ts new file mode 100644 index 000000000..c9962d33f --- /dev/null +++ b/ui/app/custom-example-react/rsbuild.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from '@rsbuild/core'; +import { pluginReact } from '@rsbuild/plugin-react'; + +export default defineConfig({ + plugins: [pluginReact()], +}); diff --git a/ui/app/custom-example-react/src/App.css b/ui/app/custom-example-react/src/App.css new file mode 100644 index 000000000..164c0a6aa --- /dev/null +++ b/ui/app/custom-example-react/src/App.css @@ -0,0 +1,26 @@ +body { + margin: 0; + color: #fff; + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + background-image: linear-gradient(to bottom, #020917, #101725); +} + +.content { + display: flex; + min-height: 100vh; + line-height: 1.1; + text-align: center; + flex-direction: column; + justify-content: center; +} + +.content h1 { + font-size: 3.6rem; + font-weight: 700; +} + +.content p { + font-size: 1.2rem; + font-weight: 400; + opacity: 0.5; +} diff --git a/ui/app/custom-example-react/src/App.tsx b/ui/app/custom-example-react/src/App.tsx new file mode 100644 index 000000000..dff175123 --- /dev/null +++ b/ui/app/custom-example-react/src/App.tsx @@ -0,0 +1,12 @@ +import './App.css'; + +const App = () => { + return ( +
+

Rsbuild with React

+

Start building amazing things with Rsbuild.

+
+ ); +}; + +export default App; diff --git a/ui/app/custom-example-react/src/env.d.ts b/ui/app/custom-example-react/src/env.d.ts new file mode 100644 index 000000000..b0ac762b0 --- /dev/null +++ b/ui/app/custom-example-react/src/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/ui/app/custom-example-react/src/index.tsx b/ui/app/custom-example-react/src/index.tsx new file mode 100644 index 000000000..55f29bff5 --- /dev/null +++ b/ui/app/custom-example-react/src/index.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; + +const rootEl = document.getElementById('root'); +if (rootEl) { + const root = ReactDOM.createRoot(rootEl); + root.render( + + + , + ); +} diff --git a/ui/app/custom-example-react/tsconfig.json b/ui/app/custom-example-react/tsconfig.json new file mode 100644 index 000000000..649a0adaf --- /dev/null +++ b/ui/app/custom-example-react/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "lib": ["DOM", "ES2020"], + "jsx": "react-jsx", + "target": "ES2020", + "noEmit": true, + "skipLibCheck": true, + "useDefineForClassFields": true, + + /* modules */ + "module": "ESNext", + "verbatimModuleSyntax": true, + "resolveJsonModule": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + + /* type checking */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true + }, + "include": ["src"] +} diff --git a/yarn.lock b/yarn.lock index d56cf5531..e237b2ff8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1355,6 +1355,34 @@ __metadata: languageName: node linkType: hard +"@emnapi/core@npm:^1.4.3": + version: 1.4.3 + resolution: "@emnapi/core@npm:1.4.3" + dependencies: + "@emnapi/wasi-threads": "npm:1.0.2" + tslib: "npm:^2.4.0" + checksum: 10/b511f66b897d2019835391544fdf11f4fa0ce06cc1181abfa17c7d4cf03aaaa4fc8a64fcd30bb3f901de488d0a6f370b53a8de2215a898f5a4ac98015265b3b7 + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.4.3": + version: 1.4.3 + resolution: "@emnapi/runtime@npm:1.4.3" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/4f90852a1a5912982cc4e176b6420556971bcf6a85ee23e379e2455066d616219751367dcf43e6a6eaf41ea7e95ba9dc830665a52b5d979dfe074237d19578f8 + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.0.2": + version: 1.0.2 + resolution: "@emnapi/wasi-threads@npm:1.0.2" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/e82941776665eb958c2084728191d6b15a94383449975c4621b67a1c8217e1c0ec11056a693906c76863cb96f782f8be500510ecec6874e3f5da35a8e7968cfd + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -2271,6 +2299,72 @@ __metadata: languageName: node linkType: hard +"@module-federation/error-codes@npm:0.15.0": + version: 0.15.0 + resolution: "@module-federation/error-codes@npm:0.15.0" + checksum: 10/1dace0ecc511c6bf8b4f76db237a28f3f96b2f30a278d758afa70be4daccae1fc89613685fc66d85a74e82244a4cb1acd45cca7005a414d2431950d2035ea585 + languageName: node + linkType: hard + +"@module-federation/runtime-core@npm:0.15.0": + version: 0.15.0 + resolution: "@module-federation/runtime-core@npm:0.15.0" + dependencies: + "@module-federation/error-codes": "npm:0.15.0" + "@module-federation/sdk": "npm:0.15.0" + checksum: 10/40dc67f8c496352f1883a8a520fd145996dc08cc640f1b337c6168d6e2be05ac5fb04fb3916f94300c9bcd15575a53eeb8fa472214d9d3b14906b24e00a47dd2 + languageName: node + linkType: hard + +"@module-federation/runtime-tools@npm:0.15.0": + version: 0.15.0 + resolution: "@module-federation/runtime-tools@npm:0.15.0" + dependencies: + "@module-federation/runtime": "npm:0.15.0" + "@module-federation/webpack-bundler-runtime": "npm:0.15.0" + checksum: 10/399a3092090b81c1e08b4a25a34d813b023241fbe5df692d7ff9a4d2365ab487f1974e22bd321ff16fa7df88580e0e403e6f7bf5e38fc679d251dd936c2d8eda + languageName: node + linkType: hard + +"@module-federation/runtime@npm:0.15.0": + version: 0.15.0 + resolution: "@module-federation/runtime@npm:0.15.0" + dependencies: + "@module-federation/error-codes": "npm:0.15.0" + "@module-federation/runtime-core": "npm:0.15.0" + "@module-federation/sdk": "npm:0.15.0" + checksum: 10/01362d8b2889eaae07b87735ae99d302c256a75f4ec7f7757d70684ab69c9ecbd4abe52736a43d7d2480ca9b42dca9a328356a811c5bdb11c8cf24506fe1dfce + languageName: node + linkType: hard + +"@module-federation/sdk@npm:0.15.0": + version: 0.15.0 + resolution: "@module-federation/sdk@npm:0.15.0" + checksum: 10/2d4bdc38d7fadca59f7e73c152e2614ef0228de1fd996c0143e81e68cf046cb20fb8b60df22931c5082b3ec891ce9448378fa38f647bb41d9222c877aa581152 + languageName: node + linkType: hard + +"@module-federation/webpack-bundler-runtime@npm:0.15.0": + version: 0.15.0 + resolution: "@module-federation/webpack-bundler-runtime@npm:0.15.0" + dependencies: + "@module-federation/runtime": "npm:0.15.0" + "@module-federation/sdk": "npm:0.15.0" + checksum: 10/a5171a591e320da36ad4edc6239faa34039f2996de8479465bcd76cfd5a406000d3040b4247c127e1151aaa80c5846832c6274a3ed8e90ebbd70959bfb18c4af + languageName: node + linkType: hard + +"@napi-rs/wasm-runtime@npm:^0.2.11": + version: 0.2.11 + resolution: "@napi-rs/wasm-runtime@npm:0.2.11" + dependencies: + "@emnapi/core": "npm:^1.4.3" + "@emnapi/runtime": "npm:^1.4.3" + "@tybys/wasm-util": "npm:^0.9.0" + checksum: 10/e30fe3060474c5018e160231df0531d62b5e22f4736ecd49c04ca6cadacb2acf59b9205435794cd5b898e41e2e3ddb6523e93b97799bd1f4d0751557de6e38e4 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -2337,6 +2431,20 @@ __metadata: languageName: node linkType: hard +"@openremote/custom-example-react@workspace:ui/app/custom-example-react": + version: 0.0.0-use.local + resolution: "@openremote/custom-example-react@workspace:ui/app/custom-example-react" + dependencies: + "@rsbuild/core": "npm:^1.4.0" + "@rsbuild/plugin-react": "npm:^1.3.2" + "@types/react": "npm:^19.1.8" + "@types/react-dom": "npm:^19.1.6" + react: "npm:^19.1.0" + react-dom: "npm:^19.1.0" + typescript: "npm:^5.8.3" + languageName: unknown + linkType: soft + "@openremote/custom@workspace:ui/app/custom": version: 0.0.0-use.local resolution: "@openremote/custom@workspace:ui/app/custom" @@ -2826,6 +2934,201 @@ __metadata: languageName: node linkType: hard +"@rsbuild/core@npm:^1.4.0": + version: 1.4.1 + resolution: "@rsbuild/core@npm:1.4.1" + dependencies: + "@rspack/core": "npm:1.4.1" + "@rspack/lite-tapable": "npm:~1.0.1" + "@swc/helpers": "npm:^0.5.17" + core-js: "npm:~3.43.0" + jiti: "npm:^2.4.2" + bin: + rsbuild: bin/rsbuild.js + checksum: 10/6e5d68eb6757b69fc21709cc6679de0e5a48761ddfd0035baa409437df22ea70d5093eaaa34b4165d46862a7d455a9489c7ecd0928a3ec173632a6a9e62052df + languageName: node + linkType: hard + +"@rsbuild/plugin-react@npm:^1.3.2": + version: 1.3.2 + resolution: "@rsbuild/plugin-react@npm:1.3.2" + dependencies: + "@rspack/plugin-react-refresh": "npm:~1.4.3" + react-refresh: "npm:^0.17.0" + peerDependencies: + "@rsbuild/core": 1.x + checksum: 10/852d5098e71028d3c238b12a04ff2220ef9023c50a37bc5db24d96facbdbfac5f5c3c73e9f1e8822956ad34b0e98f556ff8291f497e7163ec38378ddbe2e8e36 + languageName: node + linkType: hard + +"@rspack/binding-darwin-arm64@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding-darwin-arm64@npm:1.4.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rspack/binding-darwin-x64@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding-darwin-x64@npm:1.4.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rspack/binding-linux-arm64-gnu@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding-linux-arm64-gnu@npm:1.4.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rspack/binding-linux-arm64-musl@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding-linux-arm64-musl@npm:1.4.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rspack/binding-linux-x64-gnu@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding-linux-x64-gnu@npm:1.4.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rspack/binding-linux-x64-musl@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding-linux-x64-musl@npm:1.4.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rspack/binding-wasm32-wasi@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding-wasm32-wasi@npm:1.4.1" + dependencies: + "@napi-rs/wasm-runtime": "npm:^0.2.11" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@rspack/binding-win32-arm64-msvc@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding-win32-arm64-msvc@npm:1.4.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rspack/binding-win32-ia32-msvc@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding-win32-ia32-msvc@npm:1.4.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rspack/binding-win32-x64-msvc@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding-win32-x64-msvc@npm:1.4.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rspack/binding@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/binding@npm:1.4.1" + dependencies: + "@rspack/binding-darwin-arm64": "npm:1.4.1" + "@rspack/binding-darwin-x64": "npm:1.4.1" + "@rspack/binding-linux-arm64-gnu": "npm:1.4.1" + "@rspack/binding-linux-arm64-musl": "npm:1.4.1" + "@rspack/binding-linux-x64-gnu": "npm:1.4.1" + "@rspack/binding-linux-x64-musl": "npm:1.4.1" + "@rspack/binding-wasm32-wasi": "npm:1.4.1" + "@rspack/binding-win32-arm64-msvc": "npm:1.4.1" + "@rspack/binding-win32-ia32-msvc": "npm:1.4.1" + "@rspack/binding-win32-x64-msvc": "npm:1.4.1" + dependenciesMeta: + "@rspack/binding-darwin-arm64": + optional: true + "@rspack/binding-darwin-x64": + optional: true + "@rspack/binding-linux-arm64-gnu": + optional: true + "@rspack/binding-linux-arm64-musl": + optional: true + "@rspack/binding-linux-x64-gnu": + optional: true + "@rspack/binding-linux-x64-musl": + optional: true + "@rspack/binding-wasm32-wasi": + optional: true + "@rspack/binding-win32-arm64-msvc": + optional: true + "@rspack/binding-win32-ia32-msvc": + optional: true + "@rspack/binding-win32-x64-msvc": + optional: true + checksum: 10/565de02d4b5aabde5e53f56bb6515237d561308df45dd2c4406fd684a58c6a5b7928516af05e990c7e94ce67b48198285980f07393f79500e6ce8b283a549e00 + languageName: node + linkType: hard + +"@rspack/core@npm:1.4.1": + version: 1.4.1 + resolution: "@rspack/core@npm:1.4.1" + dependencies: + "@module-federation/runtime-tools": "npm:0.15.0" + "@rspack/binding": "npm:1.4.1" + "@rspack/lite-tapable": "npm:1.0.1" + peerDependencies: + "@swc/helpers": ">=0.5.1" + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 10/36d79846a7c7b26f6994feaa51e16ff5054e644011a70a0368315d472760ab4d3436fc900a6dee832085b5d4bb2b0d991919170e09fde599fe7525bf8dec8f9f + languageName: node + linkType: hard + +"@rspack/lite-tapable@npm:1.0.1, @rspack/lite-tapable@npm:~1.0.1": + version: 1.0.1 + resolution: "@rspack/lite-tapable@npm:1.0.1" + checksum: 10/240b7832965bca5a52d1f03a8539dab5810958ce24b5a670405b2505d81350f10d668f4055648f5918bc18ac033e637bcb7f92189345f0f2f671b546019c2f9e + languageName: node + linkType: hard + +"@rspack/plugin-react-refresh@npm:~1.4.3": + version: 1.4.3 + resolution: "@rspack/plugin-react-refresh@npm:1.4.3" + dependencies: + error-stack-parser: "npm:^2.1.4" + html-entities: "npm:^2.6.0" + peerDependencies: + react-refresh: ">=0.10.0 <1.0.0" + webpack-hot-middleware: 2.x + peerDependenciesMeta: + webpack-hot-middleware: + optional: true + checksum: 10/ddbe4268f0c5eb1e6c4384db16cad42628596ff7ca97707b5075be894f60bb87de2483fe2735129dc624380e46b7999735af7c418123a6bb2d01280ca5fea2c1 + languageName: node + linkType: hard + +"@swc/helpers@npm:^0.5.17": + version: 0.5.17 + resolution: "@swc/helpers@npm:0.5.17" + dependencies: + tslib: "npm:^2.8.0" + checksum: 10/1fc8312a78f1f99c8ec838585445e99763eeebff2356100738cdfdb8ad47d2d38df678ee6edd93a90fe319ac52da67adc14ac00eb82b606c5fb8ebc5d06ec2a2 + languageName: node + linkType: hard + +"@tybys/wasm-util@npm:^0.9.0": + version: 0.9.0 + resolution: "@tybys/wasm-util@npm:0.9.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/aa58e64753a420ad1eefaf7bacef3dda61d74f9336925943d9244132d5b48d9242f734f1e707fd5ccfa6dd1d8ec8e6debc234b4dedb3a5b0d8486d1f373350b2 + languageName: node + linkType: hard + "@types/body-parser@npm:*": version: 1.19.5 resolution: "@types/body-parser@npm:1.19.5" @@ -3080,6 +3383,24 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^19.1.6": + version: 19.1.6 + resolution: "@types/react-dom@npm:19.1.6" + peerDependencies: + "@types/react": ^19.0.0 + checksum: 10/b5b20b7f0797f34c5a11915b74dcf8b3b7a9da9fea90279975ce6f150ca5d31bb069dbb0838638a5e9e168098aa4bb4a6f61d078efa1bbb55d7f0bdfe47bb142 + languageName: node + linkType: hard + +"@types/react@npm:^19.1.8": + version: 19.1.8 + resolution: "@types/react@npm:19.1.8" + dependencies: + csstype: "npm:^3.0.2" + checksum: 10/a3e6fe0f60f22828ef887f30993aa147b71532d7b1219dd00d246277eb7a9ca01ec533096237fa21ca1bccb3653373b4e8e59e5ae59f9c793058384bbc1f4d5c + languageName: node + linkType: hard + "@types/retry@npm:0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" @@ -4395,6 +4716,13 @@ __metadata: languageName: node linkType: hard +"core-js@npm:~3.43.0": + version: 3.43.0 + resolution: "core-js@npm:3.43.0" + checksum: 10/514952992863266b1a6a2d3c985e905461d37fe72d131d9320d5dbf01ac7e746f6fc53004b548347518cc832f7d2602b9a228acf6b5183e5cbede9dd296d73d3 + languageName: node + linkType: hard + "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -4500,6 +4828,13 @@ __metadata: languageName: node linkType: hard +"csstype@npm:^3.0.2": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10/f593cce41ff5ade23f44e77521e3a1bcc2c64107041e1bf6c3c32adc5187d0d60983292fda326154d20b01079e24931aa5b08e4467cc488b60bb1e7f6d478ade + languageName: node + linkType: hard + "data-view-buffer@npm:^1.0.1": version: 1.0.1 resolution: "data-view-buffer@npm:1.0.1" @@ -4850,6 +5185,15 @@ __metadata: languageName: node linkType: hard +"error-stack-parser@npm:^2.1.4": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: "npm:^1.3.4" + checksum: 10/23db33135bfc6ba701e5eee45e1bb9bd2fe33c5d4f9927440d9a499c7ac538f91f455fcd878611361269893c56734419252c40d8105eb3b023cf8b0fc2ebb64e + languageName: node + linkType: hard + "es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" @@ -6021,6 +6365,13 @@ __metadata: languageName: node linkType: hard +"html-entities@npm:^2.6.0": + version: 2.6.0 + resolution: "html-entities@npm:2.6.0" + checksum: 10/06d4e7a3ba6243bba558af176e56f85e09894b26d911bc1ef7b2b9b3f18b46604360805b32636f080e954778e9a34313d1982479a05a5aa49791afd6a4229346 + languageName: node + linkType: hard + "html-minifier-terser@npm:^6.0.2": version: 6.1.0 resolution: "html-minifier-terser@npm:6.1.0" @@ -6672,6 +7023,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^2.4.2": + version: 2.4.2 + resolution: "jiti@npm:2.4.2" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10/e2b07eb2e3fbb245e29ad288dddecab31804967fc84d5e01d39858997d2743b5e248946defcecf99272275a00284ecaf7ec88b8c841331324f0c946d8274414b + languageName: node + linkType: hard + "js-sha256@npm:^0.11.0": version: 0.11.0 resolution: "js-sha256@npm:0.11.0" @@ -8163,6 +8523,31 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^19.1.0": + version: 19.1.0 + resolution: "react-dom@npm:19.1.0" + dependencies: + scheduler: "npm:^0.26.0" + peerDependencies: + react: ^19.1.0 + checksum: 10/c5b58605862c7b0bb044416b01c73647bb8e89717fb5d7a2c279b11815fb7b49b619fe685c404e59f55eb52c66831236cc565c25ee1c2d042739f4a2cc538aa2 + languageName: node + linkType: hard + +"react-refresh@npm:^0.17.0": + version: 0.17.0 + resolution: "react-refresh@npm:0.17.0" + checksum: 10/5e94f07d43bb1cfdc9b0c6e0c8c73e754005489950dcff1edb53aa8451d1d69a47b740b195c7c80fb4eb511c56a3585dc55eddd83f0097fb5e015116a1460467 + languageName: node + linkType: hard + +"react@npm:^19.1.0": + version: 19.1.0 + resolution: "react@npm:19.1.0" + checksum: 10/d0180689826fd9de87e839c365f6f361c561daea397d61d724687cae88f432a307d1c0f53a0ee95ddbe3352c10dac41d7ff1ad85530fb24951b27a39e5398db4 + languageName: node + linkType: hard + "readable-stream@npm:^2.0.1": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" @@ -8538,6 +8923,13 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.26.0": + version: 0.26.0 + resolution: "scheduler@npm:0.26.0" + checksum: 10/1ecf2e5d7de1a7a132796834afe14a2d589ba7e437615bd8c06f3e0786a3ac3434655e67aac8755d9b14e05754c177e49c064261de2673aaa3c926bc98caa002 + languageName: node + linkType: hard + "schema-utils@npm:2.7.0": version: 2.7.0 resolution: "schema-utils@npm:2.7.0" @@ -9024,6 +9416,13 @@ __metadata: languageName: node linkType: hard +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: 10/29ca71c1fd17974c1c178df0236b1407bc65f6ea389cc43dec000def6e42ff548d4453de9a85b76469e2ae2b2abdd802c6b6f3db947c05794efbd740d1cf4121 + languageName: node + linkType: hard + "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -9377,6 +9776,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.8.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 + languageName: node + linkType: hard + "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -9476,6 +9882,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.8.3": + version: 5.8.3 + resolution: "typescript@npm:5.8.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/65c40944c51b513b0172c6710ee62e951b70af6f75d5a5da745cb7fab132c09ae27ffdf7838996e3ed603bb015dadd099006658046941bd0ba30340cc563ae92 + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A>=4.5.2#optional!builtin": version: 5.4.5 resolution: "typescript@patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=d69c25" @@ -9486,6 +9902,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": + version: 5.8.3 + resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=d69c25" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/98470634034ec37fd9ea61cc82dcf9a27950d0117a4646146b767d085a2ec14b137aae9642a83d1c62732d7fdcdac19bb6288b0bb468a72f7a06ae4e1d2c72c9 + languageName: node + linkType: hard + "typewise-core@npm:^1.2, typewise-core@npm:^1.2.0": version: 1.2.0 resolution: "typewise-core@npm:1.2.0" From 582b41da79f9512c6d6ef42e8bbd2bee484ede5d Mon Sep 17 00:00:00 2001 From: MartinaeyNL Date: Fri, 27 Jun 2025 17:52:24 +0200 Subject: [PATCH 2/8] Replaced RSBuild project with RSPack. Using a different setup now; got or-mwc-input working. --- ui/app/README.md | 4 +- .../.gitignore | 3 - ui/app/custom-app-react/index.html | 12 + ui/app/custom-app-react/package.json | 29 + ui/app/custom-app-react/rspack.config.ts | 72 ++ ui/app/custom-app-react/src/App.css | 41 + ui/app/custom-app-react/src/App.tsx | 41 + ui/app/custom-app-react/src/assets/react.svg | 1 + ui/app/custom-app-react/src/index.css | 70 ++ ui/app/custom-app-react/src/main.tsx | 10 + ui/app/custom-app-react/src/react-env.d.ts | 213 ++++ .../tsconfig.json | 25 +- ui/app/custom-example-react/package.json | 25 - ui/app/custom-example-react/rsbuild.config.ts | 6 - ui/app/custom-example-react/src/App.css | 26 - ui/app/custom-example-react/src/App.tsx | 12 - ui/app/custom-example-react/src/env.d.ts | 1 - ui/app/custom-example-react/src/index.tsx | 13 - yarn.lock | 1098 ++++++++++++++++- 19 files changed, 1569 insertions(+), 133 deletions(-) rename ui/app/{custom-example-react => custom-app-react}/.gitignore (78%) create mode 100644 ui/app/custom-app-react/index.html create mode 100644 ui/app/custom-app-react/package.json create mode 100644 ui/app/custom-app-react/rspack.config.ts create mode 100644 ui/app/custom-app-react/src/App.css create mode 100644 ui/app/custom-app-react/src/App.tsx create mode 100644 ui/app/custom-app-react/src/assets/react.svg create mode 100644 ui/app/custom-app-react/src/index.css create mode 100644 ui/app/custom-app-react/src/main.tsx create mode 100644 ui/app/custom-app-react/src/react-env.d.ts rename ui/app/{custom-example-react => custom-app-react}/tsconfig.json (60%) delete mode 100644 ui/app/custom-example-react/package.json delete mode 100644 ui/app/custom-example-react/rsbuild.config.ts delete mode 100644 ui/app/custom-example-react/src/App.css delete mode 100644 ui/app/custom-example-react/src/App.tsx delete mode 100644 ui/app/custom-example-react/src/env.d.ts delete mode 100644 ui/app/custom-example-react/src/index.tsx diff --git a/ui/app/README.md b/ui/app/README.md index b91c07f03..8615dac8f 100644 --- a/ui/app/README.md +++ b/ui/app/README.md @@ -14,6 +14,6 @@ This is an example web application built with Lit Web Components and Webpack. Apps in our main OpenRemote repository are built with these technologies as well. It can be used as a template to add your own pages on top of it. -### /custom-example-react -This is an example web application built with React 19 and RSBuild. +### /custom-app-react +This is an example web application built with React 19 and RSPack. *(more information soon)* \ No newline at end of file diff --git a/ui/app/custom-example-react/.gitignore b/ui/app/custom-app-react/.gitignore similarity index 78% rename from ui/app/custom-example-react/.gitignore rename to ui/app/custom-app-react/.gitignore index 6f3092c30..38d7344c8 100644 --- a/ui/app/custom-example-react/.gitignore +++ b/ui/app/custom-app-react/.gitignore @@ -7,9 +7,6 @@ node_modules dist/ -# Profile -.rspack-profile-*/ - # IDE .vscode/* !.vscode/extensions.json diff --git a/ui/app/custom-app-react/index.html b/ui/app/custom-app-react/index.html new file mode 100644 index 000000000..569dd752f --- /dev/null +++ b/ui/app/custom-app-react/index.html @@ -0,0 +1,12 @@ + + + + + + + Custom app example using React + + +
+ + diff --git a/ui/app/custom-app-react/package.json b/ui/app/custom-app-react/package.json new file mode 100644 index 000000000..07d412ce8 --- /dev/null +++ b/ui/app/custom-app-react/package.json @@ -0,0 +1,29 @@ +{ + "name": "@openremote/custom-app-react", + "version": "1.0.0", + "description": "OpenRemote Custom App using React", + "author": "OpenRemote", + "license": "AGPL-3.0-or-later", + "private": true, + "scripts": { + "build": "cross-env NODE_ENV=production rspack build", + "serve": "cross-env NODE_ENV=development rspack serve" + }, + "dependencies": { + "@openremote/or-chart": "^1.6.5", + "@openremote/or-mwc-components": "^1.6.5", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@rspack/cli": "^1.1.8", + "@rspack/core": "^1.1.8", + "@rspack/plugin-react-refresh": "1.0.0", + "@types/react": "^18.2.48", + "@types/react-dom": "^18.2.18", + "cross-env": "^7.0.3", + "react-refresh": "^0.14.0", + "ts-node": "^10.9.2", + "typescript": "^5.6.3" + } +} diff --git a/ui/app/custom-app-react/rspack.config.ts b/ui/app/custom-app-react/rspack.config.ts new file mode 100644 index 000000000..52151bd49 --- /dev/null +++ b/ui/app/custom-app-react/rspack.config.ts @@ -0,0 +1,72 @@ +import { defineConfig } from "@rspack/cli"; +import { rspack } from "@rspack/core"; +import * as RefreshPlugin from "@rspack/plugin-react-refresh"; + +const isDev = process.env.NODE_ENV === "development"; + +// Target browsers, see: https://github.com/browserslist/browserslist +const targets = ["chrome >= 87", "edge >= 88", "firefox >= 78", "safari >= 14"]; + + +export default defineConfig({ + context: __dirname, + entry: { + main: "./src/main.tsx" + }, + resolve: { + extensions: ["...", ".ts", ".tsx", ".jsx"] + }, + module: { + rules: [ + { + test: /\.svg$/, + type: "asset" + }, + { + test: /(maplibre|mapbox|@material|gridstack|@mdi).*\.css$/, //output css as strings + type: "asset/source" + }, + { + test: /\.(jsx?|tsx?)$/, + use: [ + { + loader: "builtin:swc-loader", + options: { + jsc: { + parser: { + syntax: "typescript", + tsx: true + }, + transform: { + react: { + runtime: "automatic", + development: isDev, + refresh: isDev + } + } + }, + env: { targets } + } + } + ] + } + ] + }, + plugins: [ + new rspack.HtmlRspackPlugin({ + template: "./index.html" + }), + isDev ? new RefreshPlugin() : null + ].filter(Boolean), + optimization: { + minimizer: [ + new rspack.SwcJsMinimizerRspackPlugin(), + new rspack.LightningCssMinimizerRspackPlugin({ + minimizerOptions: { targets } + }) + ] + }, + experiments: { + css: true + } +}); diff --git a/ui/app/custom-app-react/src/App.css b/ui/app/custom-app-react/src/App.css new file mode 100644 index 000000000..1b83399ee --- /dev/null +++ b/ui/app/custom-app-react/src/App.css @@ -0,0 +1,41 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a > .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/ui/app/custom-app-react/src/App.tsx b/ui/app/custom-app-react/src/App.tsx new file mode 100644 index 000000000..f547189b9 --- /dev/null +++ b/ui/app/custom-app-react/src/App.tsx @@ -0,0 +1,41 @@ +import { useState } from "react"; +import reactLogo from "./assets/react.svg"; +import {InputType, OrMwcInput} from "@openremote/or-mwc-components/or-mwc-input"; +import "./App.css"; + +declare global { + namespace JSX { + interface IntrinsicElements { + 'or-mwc-input': OrMwcInput + } + } +} + +function App() { + const [count, setCount] = useState(0); + + return ( +
+
+ + React logo + +
+

Rspack + React + TypeScript

+
+ +

+ Edit src/App.tsx and save to test HMR +

+
+

+ Click on the Rspack and React logos to learn more +

+ +
+ ); +} + +export default App; diff --git a/ui/app/custom-app-react/src/assets/react.svg b/ui/app/custom-app-react/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/ui/app/custom-app-react/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/app/custom-app-react/src/index.css b/ui/app/custom-app-react/src/index.css new file mode 100644 index 000000000..917888c1d --- /dev/null +++ b/ui/app/custom-app-react/src/index.css @@ -0,0 +1,70 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/ui/app/custom-app-react/src/main.tsx b/ui/app/custom-app-react/src/main.tsx new file mode 100644 index 000000000..29baf78c5 --- /dev/null +++ b/ui/app/custom-app-react/src/main.tsx @@ -0,0 +1,10 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App.tsx"; +import "./index.css"; + +ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( + + + +); diff --git a/ui/app/custom-app-react/src/react-env.d.ts b/ui/app/custom-app-react/src/react-env.d.ts new file mode 100644 index 000000000..49c347bae --- /dev/null +++ b/ui/app/custom-app-react/src/react-env.d.ts @@ -0,0 +1,213 @@ +// CSS modules +type CSSModuleClasses = { readonly [key: string]: string }; + +declare module "*.module.css" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.scss" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.sass" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.less" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.styl" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.stylus" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.pcss" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.sss" { + const classes: CSSModuleClasses; + export default classes; +} + +// CSS +declare module "*.css" { + /** + * @deprecated Use `import style from './style.css?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.scss" { + /** + * @deprecated Use `import style from './style.scss?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.sass" { + /** + * @deprecated Use `import style from './style.sass?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.less" { + /** + * @deprecated Use `import style from './style.less?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.styl" { + /** + * @deprecated Use `import style from './style.styl?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.stylus" { + /** + * @deprecated Use `import style from './style.stylus?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.pcss" { + /** + * @deprecated Use `import style from './style.pcss?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.sss" { + /** + * @deprecated Use `import style from './style.sss?inline'` instead. + */ + const css: string; + export default css; +} + +// images +declare module "*.png" { + const src: string; + export default src; +} +declare module "*.jpg" { + const src: string; + export default src; +} +declare module "*.jpeg" { + const src: string; + export default src; +} +declare module "*.jfif" { + const src: string; + export default src; +} +declare module "*.pjpeg" { + const src: string; + export default src; +} +declare module "*.pjp" { + const src: string; + export default src; +} +declare module "*.gif" { + const src: string; + export default src; +} +declare module "*.svg" { + const ReactComponent: React.FC>; + const content: string; + + export { ReactComponent }; + export default content; +} +declare module "*.ico" { + const src: string; + export default src; +} +declare module "*.webp" { + const src: string; + export default src; +} +declare module "*.avif" { + const src: string; + export default src; +} + +// media +declare module "*.mp4" { + const src: string; + export default src; +} +declare module "*.webm" { + const src: string; + export default src; +} +declare module "*.ogg" { + const src: string; + export default src; +} +declare module "*.mp3" { + const src: string; + export default src; +} +declare module "*.wav" { + const src: string; + export default src; +} +declare module "*.flac" { + const src: string; + export default src; +} +declare module "*.aac" { + const src: string; + export default src; +} + +declare module "*.opus" { + const src: string; + export default src; +} + +// fonts +declare module "*.woff" { + const src: string; + export default src; +} +declare module "*.woff2" { + const src: string; + export default src; +} +declare module "*.eot" { + const src: string; + export default src; +} +declare module "*.ttf" { + const src: string; + export default src; +} +declare module "*.otf" { + const src: string; + export default src; +} + +// other +declare module "*.webmanifest" { + const src: string; + export default src; +} +declare module "*.pdf" { + const src: string; + export default src; +} +declare module "*.txt" { + const src: string; + export default src; +} diff --git a/ui/app/custom-example-react/tsconfig.json b/ui/app/custom-app-react/tsconfig.json similarity index 60% rename from ui/app/custom-example-react/tsconfig.json rename to ui/app/custom-app-react/tsconfig.json index 649a0adaf..3c7419370 100644 --- a/ui/app/custom-example-react/tsconfig.json +++ b/ui/app/custom-app-react/tsconfig.json @@ -1,23 +1,22 @@ { "compilerOptions": { + "target": "ES2020", "lib": ["DOM", "ES2020"], + "module": "ESNext", "jsx": "react-jsx", - "target": "ES2020", + "strict": true, "noEmit": true, "skipLibCheck": true, - "useDefineForClassFields": true, - - /* modules */ - "module": "ESNext", - "verbatimModuleSyntax": true, + "isolatedModules": true, "resolveJsonModule": true, "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - - /* type checking */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true + "useDefineForClassFields": true, + "allowImportingTsExtensions": true }, - "include": ["src"] + "include": ["src"], + "ts-node": { + "compilerOptions": { + "module": "CommonJS" + } + } } diff --git a/ui/app/custom-example-react/package.json b/ui/app/custom-example-react/package.json deleted file mode 100644 index 81c348c79..000000000 --- a/ui/app/custom-example-react/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@openremote/custom-example-react", - "version": "1.0.0", - "description": "OpenRemote Custom App example using React", - "author": "OpenRemote", - "license": "AGPL-3.0-or-later", - "private": true, - "type": "module", - "scripts": { - "build": "rsbuild build", - "dev": "rsbuild dev --open", - "preview": "rsbuild preview" - }, - "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" - }, - "devDependencies": { - "@rsbuild/core": "^1.4.0", - "@rsbuild/plugin-react": "^1.3.2", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", - "typescript": "^5.8.3" - } -} diff --git a/ui/app/custom-example-react/rsbuild.config.ts b/ui/app/custom-example-react/rsbuild.config.ts deleted file mode 100644 index c9962d33f..000000000 --- a/ui/app/custom-example-react/rsbuild.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { defineConfig } from '@rsbuild/core'; -import { pluginReact } from '@rsbuild/plugin-react'; - -export default defineConfig({ - plugins: [pluginReact()], -}); diff --git a/ui/app/custom-example-react/src/App.css b/ui/app/custom-example-react/src/App.css deleted file mode 100644 index 164c0a6aa..000000000 --- a/ui/app/custom-example-react/src/App.css +++ /dev/null @@ -1,26 +0,0 @@ -body { - margin: 0; - color: #fff; - font-family: Inter, Avenir, Helvetica, Arial, sans-serif; - background-image: linear-gradient(to bottom, #020917, #101725); -} - -.content { - display: flex; - min-height: 100vh; - line-height: 1.1; - text-align: center; - flex-direction: column; - justify-content: center; -} - -.content h1 { - font-size: 3.6rem; - font-weight: 700; -} - -.content p { - font-size: 1.2rem; - font-weight: 400; - opacity: 0.5; -} diff --git a/ui/app/custom-example-react/src/App.tsx b/ui/app/custom-example-react/src/App.tsx deleted file mode 100644 index dff175123..000000000 --- a/ui/app/custom-example-react/src/App.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import './App.css'; - -const App = () => { - return ( -
-

Rsbuild with React

-

Start building amazing things with Rsbuild.

-
- ); -}; - -export default App; diff --git a/ui/app/custom-example-react/src/env.d.ts b/ui/app/custom-example-react/src/env.d.ts deleted file mode 100644 index b0ac762b0..000000000 --- a/ui/app/custom-example-react/src/env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/ui/app/custom-example-react/src/index.tsx b/ui/app/custom-example-react/src/index.tsx deleted file mode 100644 index 55f29bff5..000000000 --- a/ui/app/custom-example-react/src/index.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import App from './App'; - -const rootEl = document.getElementById('root'); -if (rootEl) { - const root = ReactDOM.createRoot(rootEl); - root.render( - - - , - ); -} diff --git a/yarn.lock b/yarn.lock index e237b2ff8..189521d30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1348,7 +1348,16 @@ __metadata: languageName: node linkType: hard -"@discoveryjs/json-ext@npm:^0.5.0": +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": "npm:0.3.9" + checksum: 10/b6e38a1712fab242c86a241c229cf562195aad985d0564bd352ac404be583029e89e93028ffd2c251d2c407ecac5fb0cbdca94a2d5c10f29ac806ede0508b3ff + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:0.5.7, @discoveryjs/json-ext@npm:^0.5.0, @discoveryjs/json-ext@npm:^0.5.7": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" checksum: 10/b95682a852448e8ef50d6f8e3b7ba288aab3fd98a2bafbe46881a3db0c6e7248a2debe9e1ee0d4137c521e4743ca5bbcb1c0765c9d7b3e0ef53231506fec42b4 @@ -1509,7 +1518,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:^3.1.0": +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" checksum: 10/97106439d750a409c22c8bff822d648f6a71f3aa9bc8e5129efdc36343cd3096ddc4eeb1c62d2fe48e9bdd4db37b05d4646a17114ecebd3bbcacfa2de51c3c1d @@ -1540,6 +1549,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.0.3" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: 10/83deafb8e7a5ca98993c2c6eeaa93c270f6f647a4c0dc00deb38c9cf9b2d3b7bf15e8839540155247ef034a052c0ec4466f980bf0c9e2ab63b97d16c0cedd3ff + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" @@ -1562,6 +1581,38 @@ __metadata: languageName: node linkType: hard +"@jsonjoy.com/base64@npm:^1.1.1": + version: 1.1.2 + resolution: "@jsonjoy.com/base64@npm:1.1.2" + peerDependencies: + tslib: 2 + checksum: 10/d76bb58eff841c090d9bf69a073611ffa73c40a664ccbcea689f65961f57d7b24051269d06b437e4f6204285d6ba92f50f587c5e95c5f9e4f10b36a2ed4cd0c8 + languageName: node + linkType: hard + +"@jsonjoy.com/json-pack@npm:^1.0.3": + version: 1.2.0 + resolution: "@jsonjoy.com/json-pack@npm:1.2.0" + dependencies: + "@jsonjoy.com/base64": "npm:^1.1.1" + "@jsonjoy.com/util": "npm:^1.1.2" + hyperdyperid: "npm:^1.2.0" + thingies: "npm:^1.20.0" + peerDependencies: + tslib: 2 + checksum: 10/5b4f01bf195e314c19c5669a7bad968a814f0ed6b9e16a669b08081db0ed9f66fe3c3b2e3e0b67281b4f90910338f6beeae6b51bda9198590d29b39d1ea69755 + languageName: node + linkType: hard + +"@jsonjoy.com/util@npm:^1.1.2, @jsonjoy.com/util@npm:^1.3.0": + version: 1.6.0 + resolution: "@jsonjoy.com/util@npm:1.6.0" + peerDependencies: + tslib: 2 + checksum: 10/6f2fd06aa9fb8b6bde1301e30aef0115bb728eff4dc73ab3402f11f0674a58f0a96411c0eeeb9ef2ed28e5aca3a9dc8138a5de784e62d1d53a3200731f7a0379 + languageName: node + linkType: hard + "@juggle/resize-observer@npm:^3.3.1": version: 3.4.0 resolution: "@juggle/resize-observer@npm:3.4.0" @@ -2435,6 +2486,7 @@ __metadata: version: 0.0.0-use.local resolution: "@openremote/custom-example-react@workspace:ui/app/custom-example-react" dependencies: + "@openremote/or-mwc-components": "npm:^1.6.5" "@rsbuild/core": "npm:^1.4.0" "@rsbuild/plugin-react": "npm:^1.3.2" "@types/react": "npm:^19.1.8" @@ -2634,7 +2686,7 @@ __metadata: languageName: node linkType: hard -"@openremote/or-chart@npm:1.6.5": +"@openremote/or-chart@npm:1.6.5, @openremote/or-chart@npm:^1.6.5": version: 1.6.5 resolution: "@openremote/or-chart@npm:1.6.5" dependencies: @@ -2747,7 +2799,7 @@ __metadata: languageName: node linkType: hard -"@openremote/or-mwc-components@npm:1.6.5": +"@openremote/or-mwc-components@npm:1.6.5, @openremote/or-mwc-components@npm:^1.6.5": version: 1.6.5 resolution: "@openremote/or-mwc-components@npm:1.6.5" dependencies: @@ -2905,6 +2957,13 @@ __metadata: languageName: node linkType: hard +"@polka/url@npm:^1.0.0-next.24": + version: 1.0.0-next.29 + resolution: "@polka/url@npm:1.0.0-next.29" + checksum: 10/69ca11ab15a4ffec7f0b07fcc4e1f01489b3d9683a7e1867758818386575c60c213401259ba3705b8a812228d17e2bfd18e6f021194d943fff4bca389c9d4f28 + languageName: node + linkType: hard + "@polymer/polymer@npm:^3.3.1": version: 3.5.1 resolution: "@polymer/polymer@npm:3.5.1" @@ -3072,7 +3131,27 @@ __metadata: languageName: node linkType: hard -"@rspack/core@npm:1.4.1": +"@rspack/cli@npm:^1.1.8": + version: 1.4.1 + resolution: "@rspack/cli@npm:1.4.1" + dependencies: + "@discoveryjs/json-ext": "npm:^0.5.7" + "@rspack/dev-server": "npm:~1.1.3" + colorette: "npm:2.0.20" + exit-hook: "npm:^4.0.0" + interpret: "npm:^3.1.1" + rechoir: "npm:^0.8.0" + webpack-bundle-analyzer: "npm:4.10.2" + yargs: "npm:17.7.2" + peerDependencies: + "@rspack/core": ^1.0.0-alpha || ^1.x + bin: + rspack: bin/rspack.js + checksum: 10/ab62d3f1c7a157c22968a3b620f7c52011ea96c6145895db529104679bb7032ab769841db3e4667f1d6f13b406faad9d07092f44ac607b8c9dfcbe6337a8859f + languageName: node + linkType: hard + +"@rspack/core@npm:1.4.1, @rspack/core@npm:^1.1.8": version: 1.4.1 resolution: "@rspack/core@npm:1.4.1" dependencies: @@ -3088,6 +3167,21 @@ __metadata: languageName: node linkType: hard +"@rspack/dev-server@npm:~1.1.3": + version: 1.1.3 + resolution: "@rspack/dev-server@npm:1.1.3" + dependencies: + chokidar: "npm:^3.6.0" + http-proxy-middleware: "npm:^2.0.9" + p-retry: "npm:^6.2.0" + webpack-dev-server: "npm:5.2.2" + ws: "npm:^8.18.0" + peerDependencies: + "@rspack/core": "*" + checksum: 10/31cef80a602acf9468a94c31b1f09239cae9c47cf0ed25c6bcddd057bbaff5a220a1dead068a255d35d0addfea21d81a574069d63ea258c2807d84a02d4fe966 + languageName: node + linkType: hard + "@rspack/lite-tapable@npm:1.0.1, @rspack/lite-tapable@npm:~1.0.1": version: 1.0.1 resolution: "@rspack/lite-tapable@npm:1.0.1" @@ -3095,6 +3189,21 @@ __metadata: languageName: node linkType: hard +"@rspack/plugin-react-refresh@npm:1.0.0": + version: 1.0.0 + resolution: "@rspack/plugin-react-refresh@npm:1.0.0" + dependencies: + error-stack-parser: "npm:^2.0.6" + html-entities: "npm:^2.1.0" + peerDependencies: + react-refresh: ">=0.10.0 <1.0.0" + peerDependenciesMeta: + react-refresh: + optional: true + checksum: 10/09d76ba4ac93c012a8a90fb0a6aef717ec0fd78dc620d1f0a7e26493cb696a1c9ba20d639f9eed57074a180fc58226be6b084b172f668fe4bbe2f13e6982fe35 + languageName: node + linkType: hard + "@rspack/plugin-react-refresh@npm:~1.4.3": version: 1.4.3 resolution: "@rspack/plugin-react-refresh@npm:1.4.3" @@ -3120,6 +3229,34 @@ __metadata: languageName: node linkType: hard +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 10/51fe47d55fe1b80ec35e6e5ed30a13665fd3a531945350aa74a14a1e82875fb60b350c2f2a5e72a64831b1b6bc02acb6760c30b3738b54954ec2dea82db7a267 + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 10/5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 10/19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10/202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.9.0": version: 0.9.0 resolution: "@tybys/wasm-util@npm:0.9.0" @@ -3139,7 +3276,7 @@ __metadata: languageName: node linkType: hard -"@types/bonjour@npm:^3.5.9": +"@types/bonjour@npm:^3.5.13, @types/bonjour@npm:^3.5.9": version: 3.5.13 resolution: "@types/bonjour@npm:3.5.13" dependencies: @@ -3148,7 +3285,7 @@ __metadata: languageName: node linkType: hard -"@types/connect-history-api-fallback@npm:^1.3.5": +"@types/connect-history-api-fallback@npm:^1.3.5, @types/connect-history-api-fallback@npm:^1.5.4": version: 1.5.4 resolution: "@types/connect-history-api-fallback@npm:1.5.4" dependencies: @@ -3206,6 +3343,18 @@ __metadata: languageName: node linkType: hard +"@types/express-serve-static-core@npm:^4.17.21": + version: 4.19.6 + resolution: "@types/express-serve-static-core@npm:4.19.6" + dependencies: + "@types/node": "npm:*" + "@types/qs": "npm:*" + "@types/range-parser": "npm:*" + "@types/send": "npm:*" + checksum: 10/a2e00b6c5993f0dd63ada2239be81076fe0220314b9e9fde586e8946c9c09ce60f9a2dd0d74410ee2b5fd10af8c3e755a32bb3abf134533e2158142488995455 + languageName: node + linkType: hard + "@types/express@npm:*, @types/express@npm:^4.17.13": version: 4.17.21 resolution: "@types/express@npm:4.17.21" @@ -3218,6 +3367,18 @@ __metadata: languageName: node linkType: hard +"@types/express@npm:^4.17.21": + version: 4.17.23 + resolution: "@types/express@npm:4.17.23" + dependencies: + "@types/body-parser": "npm:*" + "@types/express-serve-static-core": "npm:^4.17.33" + "@types/qs": "npm:*" + "@types/serve-static": "npm:*" + checksum: 10/cf4d540bbd90801cdc79a46107b8873404698a7fd0c3e8dd42989d52d3bd7f5b8768672e54c20835e41e27349c319bb47a404ad14c0f8db0e9d055ba1cb8a05b + languageName: node + linkType: hard + "@types/geojson-vt@npm:3.2.5": version: 3.2.5 resolution: "@types/geojson-vt@npm:3.2.5" @@ -3369,6 +3530,13 @@ __metadata: languageName: node linkType: hard +"@types/prop-types@npm:*": + version: 15.7.15 + resolution: "@types/prop-types@npm:15.7.15" + checksum: 10/31aa2f59b28f24da6fb4f1d70807dae2aedfce090ec63eaf9ea01727a9533ef6eaf017de5bff99fbccad7d1c9e644f52c6c2ba30869465dd22b1a7221c29f356 + languageName: node + linkType: hard + "@types/qs@npm:*, @types/qs@npm:^6.9.7": version: 6.9.15 resolution: "@types/qs@npm:6.9.15" @@ -3383,6 +3551,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^18.2.18": + version: 18.3.7 + resolution: "@types/react-dom@npm:18.3.7" + peerDependencies: + "@types/react": ^18.0.0 + checksum: 10/317569219366d487a3103ba1e5e47154e95a002915fdcf73a44162c48fe49c3a57fcf7f57fc6979e70d447112681e6b13c6c3c1df289db8b544df4aab2d318f3 + languageName: node + linkType: hard + "@types/react-dom@npm:^19.1.6": version: 19.1.6 resolution: "@types/react-dom@npm:19.1.6" @@ -3392,6 +3569,16 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^18.2.48": + version: 18.3.23 + resolution: "@types/react@npm:18.3.23" + dependencies: + "@types/prop-types": "npm:*" + csstype: "npm:^3.0.2" + checksum: 10/4b965dffe34a1f8aac8e2d7e976f113373f38134f9e37239f7e75d7ac6b3c2e1333a8df21febf1fe7749640f8de5708f7668cdfc70bffebda1cc4d3346724fd5 + languageName: node + linkType: hard + "@types/react@npm:^19.1.8": version: 19.1.8 resolution: "@types/react@npm:19.1.8" @@ -3408,6 +3595,13 @@ __metadata: languageName: node linkType: hard +"@types/retry@npm:0.12.2": + version: 0.12.2 + resolution: "@types/retry@npm:0.12.2" + checksum: 10/e5675035717b39ce4f42f339657cae9637cf0c0051cf54314a6a2c44d38d91f6544be9ddc0280587789b6afd056be5d99dbe3e9f4df68c286c36321579b1bf4a + languageName: node + linkType: hard + "@types/semver@npm:^7.3.12": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" @@ -3425,7 +3619,7 @@ __metadata: languageName: node linkType: hard -"@types/serve-index@npm:^1.9.1": +"@types/serve-index@npm:^1.9.1, @types/serve-index@npm:^1.9.4": version: 1.9.4 resolution: "@types/serve-index@npm:1.9.4" dependencies: @@ -3445,7 +3639,18 @@ __metadata: languageName: node linkType: hard -"@types/sockjs@npm:^0.3.33": +"@types/serve-static@npm:^1.15.5": + version: 1.15.8 + resolution: "@types/serve-static@npm:1.15.8" + dependencies: + "@types/http-errors": "npm:*" + "@types/node": "npm:*" + "@types/send": "npm:*" + checksum: 10/c031f870df6056a4c0a5a0ae94c5584006ab55400c74ae44de4d68d89338fbe982422861bad478b89a073f671efca454689fd28b6147358d6adc8edbc599caea + languageName: node + linkType: hard + +"@types/sockjs@npm:^0.3.33, @types/sockjs@npm:^0.3.36": version: 0.3.36 resolution: "@types/sockjs@npm:0.3.36" dependencies: @@ -3470,6 +3675,15 @@ __metadata: languageName: node linkType: hard +"@types/ws@npm:^8.5.10": + version: 8.18.1 + resolution: "@types/ws@npm:8.18.1" + dependencies: + "@types/node": "npm:*" + checksum: 10/1ce05e3174dcacf28dae0e9b854ef1c9a12da44c7ed73617ab6897c5cbe4fccbb155a20be5508ae9a7dde2f83bd80f5cf3baa386b934fc4b40889ec963e94f3a + languageName: node + linkType: hard + "@types/ws@npm:^8.5.5": version: 8.5.10 resolution: "@types/ws@npm:8.5.10" @@ -3875,6 +4089,15 @@ __metadata: languageName: node linkType: hard +"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.1.1": + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10/871386764e1451c637bb8ab9f76f4995d408057e9909be6fb5ad68537ae3375d85e6a6f170b98989f44ab3ff6c74ad120bc2779a3d577606e7a0cd2b4efcaf77 + languageName: node + linkType: hard + "acorn@npm:>= 2.5.2 <= 5.7.5": version: 5.7.4 resolution: "acorn@npm:5.7.4" @@ -3884,6 +4107,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.0.4, acorn@npm:^8.11.0, acorn@npm:^8.4.1": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" + bin: + acorn: bin/acorn + checksum: 10/77f2de5051a631cf1729c090e5759148459cdb76b5f5c70f890503d629cf5052357b0ce783c0f976dd8a93c5150f59f6d18df1def3f502396a20f81282482fa4 + languageName: node + linkType: hard + "acorn@npm:^8.7.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.11.3 resolution: "acorn@npm:8.11.3" @@ -4028,6 +4260,13 @@ __metadata: languageName: node linkType: hard +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 10/969b491082f20cad166649fa4d2073ea9e974a4e5ac36247ca23d2e5a8b3cb12d60e9ff70a8acfe26d76566c71fd351ee5e6a9a6595157eb36f92b1fd64e1599 + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -4272,6 +4511,26 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:1.20.3": + version: 1.20.3 + resolution: "body-parser@npm:1.20.3" + dependencies: + bytes: "npm:3.1.2" + content-type: "npm:~1.0.5" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + on-finished: "npm:2.4.1" + qs: "npm:6.13.0" + raw-body: "npm:2.5.2" + type-is: "npm:~1.6.18" + unpipe: "npm:1.0.0" + checksum: 10/8723e3d7a672eb50854327453bed85ac48d045f4958e81e7d470c56bf111f835b97e5b73ae9f6393d0011cc9e252771f46fd281bbabc57d33d3986edf1e6aeca + languageName: node + linkType: hard + "bonjour-service@npm:^1.0.11": version: 1.2.1 resolution: "bonjour-service@npm:1.2.1" @@ -4282,6 +4541,16 @@ __metadata: languageName: node linkType: hard +"bonjour-service@npm:^1.2.1": + version: 1.3.0 + resolution: "bonjour-service@npm:1.3.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + multicast-dns: "npm:^7.2.5" + checksum: 10/63d516d88f15fa4b89e247e6ff7d81c21a3ef5ed035b0b043c2b38e0c839f54f4ce58fbf9b7668027bf538ac86de366939dbb55cca63930f74eeea1e278c9585 + languageName: node + linkType: hard + "boolbase@npm:^1.0.0": version: 1.0.0 resolution: "boolbase@npm:1.0.0" @@ -4338,6 +4607,15 @@ __metadata: languageName: node linkType: hard +"bundle-name@npm:^4.1.0": + version: 4.1.0 + resolution: "bundle-name@npm:4.1.0" + dependencies: + run-applescript: "npm:^7.0.0" + checksum: 10/1d966c8d2dbf4d9d394e53b724ac756c2414c45c01340b37743621f59cc565a435024b394ddcb62b9b335d1c9a31f4640eb648c3fec7f97ee74dc0694c9beb6c + languageName: node + linkType: hard + "bytes@npm:3.0.0": version: 3.0.0 resolution: "bytes@npm:3.0.0" @@ -4482,7 +4760,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.4.2, chokidar@npm:^3.5.3": +"chokidar@npm:^3.4.2, chokidar@npm:^3.5.3, chokidar@npm:^3.6.0": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: @@ -4531,6 +4809,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10/eaa5561aeb3135c2cddf7a3b3f562fc4238ff3b3fc666869ef2adf264be0f372136702f16add9299087fb1907c2e4ec5dbfe83bd24bce815c70a80c6c1a2e950 + languageName: node + linkType: hard + "clone-deep@npm:^4.0.1": version: 4.0.1 resolution: "clone-deep@npm:4.0.1" @@ -4574,7 +4863,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.10, colorette@npm:^2.0.14": +"colorette@npm:2.0.20, colorette@npm:^2.0.10, colorette@npm:^2.0.14": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: 10/0b8de48bfa5d10afc160b8eaa2b9938f34a892530b2f7d7897e0458d9535a066e3998b49da9d21161c78225b272df19ae3a64d6df28b4c9734c0e55bbd02406f @@ -4588,7 +4877,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^7.0.0": +"commander@npm:^7.0.0, commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" checksum: 10/9973af10727ad4b44f26703bf3e9fdc323528660a7590efe3aa9ad5042b4584c0deed84ba443f61c9d6f02dade54a5a5d3c95e306a1e1630f8374ae6db16c06d @@ -4684,6 +4973,13 @@ __metadata: languageName: node linkType: hard +"cookie@npm:0.7.1": + version: 0.7.1 + resolution: "cookie@npm:0.7.1" + checksum: 10/aec6a6aa0781761bf55d60447d6be08861d381136a0fe94aa084fddd4f0300faa2b064df490c6798adfa1ebaef9e0af9b08a189c823e0811b8b313b3d9a03380 + languageName: node + linkType: hard + "copy-webpack-plugin@npm:^10.0.0": version: 10.2.4 resolution: "copy-webpack-plugin@npm:10.2.4" @@ -4743,6 +5039,13 @@ __metadata: languageName: node linkType: hard +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: 10/a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + "cross-env@npm:^7.0.3": version: 7.0.3 resolution: "cross-env@npm:7.0.3" @@ -4799,6 +5102,30 @@ __metadata: languageName: node linkType: hard +"css-loader@npm:^7.1.2": + version: 7.1.2 + resolution: "css-loader@npm:7.1.2" + dependencies: + icss-utils: "npm:^5.1.0" + postcss: "npm:^8.4.33" + postcss-modules-extract-imports: "npm:^3.1.0" + postcss-modules-local-by-default: "npm:^4.0.5" + postcss-modules-scope: "npm:^3.2.0" + postcss-modules-values: "npm:^4.0.0" + postcss-value-parser: "npm:^4.2.0" + semver: "npm:^7.5.4" + peerDependencies: + "@rspack/core": 0.x || 1.x + webpack: ^5.27.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 10/ddde22fb103888320f60a1414a6a04638d2e9760a532a52d03c45e6e2830b32dd76c734aeef426f78dd95b2d15f77eeec3854ac53061aff02569732dc6e6801c + languageName: node + linkType: hard + "css-select@npm:^4.1.3": version: 4.3.0 resolution: "css-select@npm:4.3.0" @@ -4835,6 +5162,27 @@ __metadata: languageName: node linkType: hard +"custom-app-react@workspace:ui/app/custom-app-react": + version: 0.0.0-use.local + resolution: "custom-app-react@workspace:ui/app/custom-app-react" + dependencies: + "@openremote/or-chart": "npm:^1.6.5" + "@openremote/or-mwc-components": "npm:^1.6.5" + "@rspack/cli": "npm:^1.1.8" + "@rspack/core": "npm:^1.1.8" + "@rspack/plugin-react-refresh": "npm:1.0.0" + "@types/react": "npm:^18.2.48" + "@types/react-dom": "npm:^18.2.18" + cross-env: "npm:^7.0.3" + css-loader: "npm:^7.1.2" + react: "npm:^18.2.0" + react-dom: "npm:^18.2.0" + react-refresh: "npm:^0.14.0" + ts-node: "npm:^10.9.2" + typescript: "npm:^5.6.3" + languageName: unknown + linkType: soft + "data-view-buffer@npm:^1.0.1": version: 1.0.1 resolution: "data-view-buffer@npm:1.0.1" @@ -4868,6 +5216,13 @@ __metadata: languageName: node linkType: hard +"debounce@npm:^1.2.1": + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 10/0b95b2a9d80ed69117d890f8dab8c0f2d6066f8d20edd1d810ae51f8f366a6d4c8b1d56e97dcb9304e93d57de4d5db440d34a03def7dad50403fc3f22bf16808 + languageName: node + linkType: hard + "debug@npm:2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" @@ -4912,6 +5267,23 @@ __metadata: languageName: node linkType: hard +"default-browser-id@npm:^5.0.0": + version: 5.0.0 + resolution: "default-browser-id@npm:5.0.0" + checksum: 10/185bfaecec2c75fa423544af722a3469b20704c8d1942794a86e4364fe7d9e8e9f63241a5b769d61c8151993bc65833a5b959026fa1ccea343b3db0a33aa6deb + languageName: node + linkType: hard + +"default-browser@npm:^5.2.1": + version: 5.2.1 + resolution: "default-browser@npm:5.2.1" + dependencies: + bundle-name: "npm:^4.1.0" + default-browser-id: "npm:^5.0.0" + checksum: 10/afab7eff7b7f5f7a94d9114d1ec67273d3fbc539edf8c0f80019879d53aa71e867303c6f6d7cffeb10a6f3cfb59d4f963dba3f9c96830b4540cc7339a1bf9840 + languageName: node + linkType: hard + "default-gateway@npm:^6.0.3": version: 6.0.3 resolution: "default-gateway@npm:6.0.3" @@ -4939,6 +5311,13 @@ __metadata: languageName: node linkType: hard +"define-lazy-prop@npm:^3.0.0": + version: 3.0.0 + resolution: "define-lazy-prop@npm:3.0.0" + checksum: 10/f28421cf9ee86eecaf5f3b8fe875f13d7009c2625e97645bfff7a2a49aca678270b86c39f9c32939e5ca7ab96b551377ed4139558c795e076774287ad3af1aa4 + languageName: node + linkType: hard + "define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" @@ -4978,6 +5357,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: 10/ec09ec2101934ca5966355a229d77afcad5911c92e2a77413efda5455636c4cf2ce84057e2d7715227a2eeeda04255b849bd3ae3a4dd22eb22e86e76456df069 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -5071,6 +5457,13 @@ __metadata: languageName: node linkType: hard +"duplexer@npm:^0.1.2": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 10/62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + "earcut@npm:^2.2.4": version: 2.2.4 resolution: "earcut@npm:2.2.4" @@ -5127,6 +5520,13 @@ __metadata: languageName: node linkType: hard +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: 10/abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe + languageName: node + linkType: hard + "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -5185,7 +5585,7 @@ __metadata: languageName: node linkType: hard -"error-stack-parser@npm:^2.1.4": +"error-stack-parser@npm:^2.0.6, error-stack-parser@npm:^2.1.4": version: 2.1.4 resolution: "error-stack-parser@npm:2.1.4" dependencies: @@ -5311,6 +5711,13 @@ __metadata: languageName: node linkType: hard +"escalade@npm:^3.1.1": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10/9d7169e3965b2f9ae46971afa392f6e5a25545ea30f2e2dd99c9b0a95a3f52b5653681a84f5b2911a413ddad2d7a93d3514165072f349b5ffc59c75a899970d6 + languageName: node + linkType: hard + "escalade@npm:^3.1.2": version: 3.1.2 resolution: "escalade@npm:3.1.2" @@ -5628,6 +6035,13 @@ __metadata: languageName: node linkType: hard +"exit-hook@npm:^4.0.0": + version: 4.0.0 + resolution: "exit-hook@npm:4.0.0" + checksum: 10/5aa8b4e45fa943e7e174c25329750a0ffefb593ccc2eafd5d67e1d734b114c93cb36b5714548fb1c2a1dd90f3e9cdc606b5e788f428f780708774da444021fdc + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -5674,6 +6088,45 @@ __metadata: languageName: node linkType: hard +"express@npm:^4.21.2": + version: 4.21.2 + resolution: "express@npm:4.21.2" + dependencies: + accepts: "npm:~1.3.8" + array-flatten: "npm:1.1.1" + body-parser: "npm:1.20.3" + content-disposition: "npm:0.5.4" + content-type: "npm:~1.0.4" + cookie: "npm:0.7.1" + cookie-signature: "npm:1.0.6" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + finalhandler: "npm:1.3.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + merge-descriptors: "npm:1.0.3" + methods: "npm:~1.1.2" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + path-to-regexp: "npm:0.1.12" + proxy-addr: "npm:~2.0.7" + qs: "npm:6.13.0" + range-parser: "npm:~1.2.1" + safe-buffer: "npm:5.2.1" + send: "npm:0.19.0" + serve-static: "npm:1.16.2" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + type-is: "npm:~1.6.18" + utils-merge: "npm:1.0.1" + vary: "npm:~1.1.2" + checksum: 10/34571c442fc8c9f2c4b442d2faa10ea1175cf8559237fc6a278f5ce6254a8ffdbeb9a15d99f77c1a9f2926ab183e3b7ba560e3261f1ad4149799e3412ab66bd1 + languageName: node + linkType: hard + "extend-shallow@npm:^2.0.1": version: 2.0.1 resolution: "extend-shallow@npm:2.0.1" @@ -5807,6 +6260,21 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:1.3.1": + version: 1.3.1 + resolution: "finalhandler@npm:1.3.1" + dependencies: + debug: "npm:2.6.9" + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + statuses: "npm:2.0.1" + unpipe: "npm:~1.0.0" + checksum: 10/4babe72969b7373b5842bc9f75c3a641a4d0f8eb53af6b89fa714d4460ce03fb92b28de751d12ba415e96e7e02870c436d67412120555e2b382640535697305b + languageName: node + linkType: hard + "find-cache-dir@npm:^3.3.1": version: 3.3.2 resolution: "find-cache-dir@npm:3.3.2" @@ -6067,6 +6535,13 @@ __metadata: languageName: node linkType: hard +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10/b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + "get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" @@ -6268,6 +6743,15 @@ __metadata: languageName: node linkType: hard +"gzip-size@npm:^6.0.0": + version: 6.0.0 + resolution: "gzip-size@npm:6.0.0" + dependencies: + duplexer: "npm:^0.1.2" + checksum: 10/2df97f359696ad154fc171dcb55bc883fe6e833bca7a65e457b9358f3cb6312405ed70a8da24a77c1baac0639906cd52358dc0ce2ec1a937eaa631b934c94194 + languageName: node + linkType: hard + "handle-thing@npm:^2.0.0": version: 2.0.1 resolution: "handle-thing@npm:2.0.1" @@ -6358,6 +6842,13 @@ __metadata: languageName: node linkType: hard +"html-entities@npm:^2.1.0, html-entities@npm:^2.6.0": + version: 2.6.0 + resolution: "html-entities@npm:2.6.0" + checksum: 10/06d4e7a3ba6243bba558af176e56f85e09894b26d911bc1ef7b2b9b3f18b46604360805b32636f080e954778e9a34313d1982479a05a5aa49791afd6a4229346 + languageName: node + linkType: hard + "html-entities@npm:^2.3.2": version: 2.5.2 resolution: "html-entities@npm:2.5.2" @@ -6365,10 +6856,10 @@ __metadata: languageName: node linkType: hard -"html-entities@npm:^2.6.0": - version: 2.6.0 - resolution: "html-entities@npm:2.6.0" - checksum: 10/06d4e7a3ba6243bba558af176e56f85e09894b26d911bc1ef7b2b9b3f18b46604360805b32636f080e954778e9a34313d1982479a05a5aa49791afd6a4229346 +"html-escaper@npm:^2.0.2": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 10/034d74029dcca544a34fb6135e98d427acd73019796ffc17383eaa3ec2fe1c0471dcbbc8f8ed39e46e86d43ccd753a160631615e4048285e313569609b66d5b7 languageName: node linkType: hard @@ -6496,6 +6987,24 @@ __metadata: languageName: node linkType: hard +"http-proxy-middleware@npm:^2.0.9": + version: 2.0.9 + resolution: "http-proxy-middleware@npm:2.0.9" + dependencies: + "@types/http-proxy": "npm:^1.17.8" + http-proxy: "npm:^1.18.1" + is-glob: "npm:^4.0.1" + is-plain-obj: "npm:^3.0.0" + micromatch: "npm:^4.0.2" + peerDependencies: + "@types/express": ^4.17.13 + peerDependenciesMeta: + "@types/express": + optional: true + checksum: 10/4ece416a91d52e96f8136c5f4abfbf7ac2f39becbad21fa8b158a12d7e7d8f808287ff1ae342b903fd1f15f2249dee87fabc09e1f0e73106b83331c496d67660 + languageName: node + linkType: hard + "http-proxy@npm:^1.18.1": version: 1.18.1 resolution: "http-proxy@npm:1.18.1" @@ -6524,6 +7033,13 @@ __metadata: languageName: node linkType: hard +"hyperdyperid@npm:^1.2.0": + version: 1.2.0 + resolution: "hyperdyperid@npm:1.2.0" + checksum: 10/64abb5568ff17aa08ac0175ae55e46e22831c5552be98acdd1692081db0209f36fff58b31432017b4e1772c178962676a2cc3c54e4d5d7f020d7710cec7ad7a6 + languageName: node + linkType: hard + "i18next-http-backend@npm:^1.3.1": version: 1.4.5 resolution: "i18next-http-backend@npm:1.4.5" @@ -6682,6 +7198,13 @@ __metadata: languageName: node linkType: hard +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 10/bc9e11126949c4e6ff49b0b819e923a9adc8e8bf3f9d4f2d782de6d5f592774f6fee4457c10bd08c6a2146b4baee460ccb242c99e5397defa9c846af0d00505a + languageName: node + linkType: hard + "ip-address@npm:^9.0.5": version: 9.0.5 resolution: "ip-address@npm:9.0.5" @@ -6699,7 +7222,7 @@ __metadata: languageName: node linkType: hard -"ipaddr.js@npm:^2.0.1": +"ipaddr.js@npm:^2.0.1, ipaddr.js@npm:^2.1.0": version: 2.2.0 resolution: "ipaddr.js@npm:2.2.0" checksum: 10/9e1cdd9110b3bca5d910ab70d7fb1933e9c485d9b92cb14ef39f30c412ba3fe02a553921bf696efc7149cc653453c48ccf173adb996ec27d925f1f340f872986 @@ -6767,6 +7290,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.16.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10/452b2c2fb7f889cbbf7e54609ef92cf6c24637c568acc7e63d166812a0fb365ae8a504c333a29add8bdb1686704068caa7f4e4b639b650dde4f00a038b8941fb + languageName: node + linkType: hard + "is-data-view@npm:^1.0.1": version: 1.0.1 resolution: "is-data-view@npm:1.0.1" @@ -6794,6 +7326,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: 10/b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + languageName: node + linkType: hard + "is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": version: 0.1.1 resolution: "is-extendable@npm:0.1.1" @@ -6833,6 +7374,17 @@ __metadata: languageName: node linkType: hard +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: "npm:^3.0.0" + bin: + is-inside-container: cli.js + checksum: 10/c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + languageName: node + linkType: hard + "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -6847,6 +7399,13 @@ __metadata: languageName: node linkType: hard +"is-network-error@npm:^1.0.0": + version: 1.1.0 + resolution: "is-network-error@npm:1.1.0" + checksum: 10/b2fe6aac07f814a9de275efd05934c832c129e7ba292d27614e9e8eec9e043b7a0bbeaeca5d0916b0f462edbec2aa2eaee974ee0a12ac095040e9515c222c251 + languageName: node + linkType: hard + "is-number-object@npm:^1.0.4": version: 1.0.7 resolution: "is-number-object@npm:1.0.7" @@ -6957,6 +7516,15 @@ __metadata: languageName: node linkType: hard +"is-wsl@npm:^3.1.0": + version: 3.1.0 + resolution: "is-wsl@npm:3.1.0" + dependencies: + is-inside-container: "npm:^1.0.0" + checksum: 10/f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 + languageName: node + linkType: hard + "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" @@ -7039,7 +7607,7 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^4.0.0": +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" checksum: 10/af37d0d913fb56aec6dc0074c163cc71cd23c0b8aad5c2350747b6721d37ba118af35abdd8b33c47ec2800de07dedb16a527ca9c530ee004093e04958bd0cbf2 @@ -7214,6 +7782,16 @@ __metadata: languageName: node linkType: hard +"launch-editor@npm:^2.6.1": + version: 2.10.0 + resolution: "launch-editor@npm:2.10.0" + dependencies: + picocolors: "npm:^1.0.0" + shell-quote: "npm:^1.8.1" + checksum: 10/2ef26369d89ad22938c1f5c343a622ff2e8e2f7709901c739ef38319a103b7da400afc147005e765fc0c22fd467eeb5f63f98568b3882e21f7782a4061fdeb60 + languageName: node + linkType: hard + "leaflet@npm:1.4.0": version: 1.4.0 resolution: "leaflet@npm:1.4.0" @@ -7385,6 +7963,17 @@ __metadata: languageName: node linkType: hard +"loose-envify@npm:^1.1.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: "npm:^3.0.0 || ^4.0.0" + bin: + loose-envify: cli.js + checksum: 10/6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + "lower-case@npm:^2.0.2": version: 2.0.2 resolution: "lower-case@npm:2.0.2" @@ -7419,6 +8008,13 @@ __metadata: languageName: node linkType: hard +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 10/b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + "make-fetch-happen@npm:^13.0.0": version: 13.0.1 resolution: "make-fetch-happen@npm:13.0.1" @@ -7502,6 +8098,18 @@ __metadata: languageName: node linkType: hard +"memfs@npm:^4.6.0": + version: 4.17.2 + resolution: "memfs@npm:4.17.2" + dependencies: + "@jsonjoy.com/json-pack": "npm:^1.0.3" + "@jsonjoy.com/util": "npm:^1.3.0" + tree-dump: "npm:^1.0.1" + tslib: "npm:^2.0.0" + checksum: 10/105175204e74e836460fbf18e431bc24def3f5ea7ecd94d644f35992dc28b5a4c5f425849dd5f342878ef0ba032508c05b2756e026491635a59fc7f631cbfcde + languageName: node + linkType: hard + "merge-descriptors@npm:1.0.1": version: 1.0.1 resolution: "merge-descriptors@npm:1.0.1" @@ -7509,6 +8117,13 @@ __metadata: languageName: node linkType: hard +"merge-descriptors@npm:1.0.3": + version: 1.0.3 + resolution: "merge-descriptors@npm:1.0.3" + checksum: 10/52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1 + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -7719,6 +8334,13 @@ __metadata: languageName: node linkType: hard +"mrmime@npm:^2.0.0": + version: 2.0.1 + resolution: "mrmime@npm:2.0.1" + checksum: 10/1f966e2c05b7264209c4149ae50e8e830908eb64dd903535196f6ad72681fa109b794007288a3c2814f7a1ecf9ca192769909c0c374d974d604a8de5fc095d4a + languageName: node + linkType: hard + "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -8019,7 +8641,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1": +"on-finished@npm:2.4.1, on-finished@npm:^2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -8053,6 +8675,18 @@ __metadata: languageName: node linkType: hard +"open@npm:^10.0.3": + version: 10.1.2 + resolution: "open@npm:10.1.2" + dependencies: + default-browser: "npm:^5.2.1" + define-lazy-prop: "npm:^3.0.0" + is-inside-container: "npm:^1.0.0" + is-wsl: "npm:^3.1.0" + checksum: 10/dc0496486fd79289844d8cac678402384488696db60ae5c5a175748cd728c381689cd937527762685dc27530408da0f0dac7653769f9730e773aa439d6674b98 + languageName: node + linkType: hard + "open@npm:^8.0.9": version: 8.4.2 resolution: "open@npm:8.4.2" @@ -8064,6 +8698,15 @@ __metadata: languageName: node linkType: hard +"opener@npm:^1.5.2": + version: 1.5.2 + resolution: "opener@npm:1.5.2" + bin: + opener: bin/opener-bin.js + checksum: 10/0504efcd6546e14c016a261f58a68acf9f2e5c23d84865d7d5470d5169788327ceaa5386253682f533b3fba4821748aa37ecb395f3dae7acb3261b9b22e36814 + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -8133,6 +8776,17 @@ __metadata: languageName: node linkType: hard +"p-retry@npm:^6.2.0": + version: 6.2.1 + resolution: "p-retry@npm:6.2.1" + dependencies: + "@types/retry": "npm:0.12.2" + is-network-error: "npm:^1.0.0" + retry: "npm:^0.13.1" + checksum: 10/7104ef13703b155d70883b0d3654ecc03148407d2711a4516739cf93139e8bec383451e14925e25e3c1ae04dbace3ed53c26dc3853c1e9b9867fcbdde25f4cdc + languageName: node + linkType: hard + "p-try@npm:^2.0.0": version: 2.2.0 resolution: "p-try@npm:2.2.0" @@ -8226,6 +8880,13 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:0.1.12": + version: 0.1.12 + resolution: "path-to-regexp@npm:0.1.12" + checksum: 10/2e30f6a0144679c1f95c98e166b96e6acd1e72be9417830fefc8de7ac1992147eb9a4c7acaa59119fb1b3c34eec393b2129ef27e24b2054a3906fc4fb0d1398e + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -8465,6 +9126,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:6.13.0": + version: 6.13.0 + resolution: "qs@npm:6.13.0" + dependencies: + side-channel: "npm:^1.0.6" + checksum: 10/f548b376e685553d12e461409f0d6e5c59ec7c7d76f308e2a888fd9db3e0c5e89902bedd0754db3a9038eda5f27da2331a6f019c8517dc5e0a16b3c9a6e9cef8 + languageName: node + linkType: hard + "qs@npm:^6.8.0": version: 6.12.1 resolution: "qs@npm:6.12.1" @@ -8523,6 +9193,18 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^18.2.0": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + scheduler: "npm:^0.23.2" + peerDependencies: + react: ^18.3.1 + checksum: 10/3f4b73a3aa083091173b29812b10394dd06f4ac06aff410b74702cfb3aa29d7b0ced208aab92d5272919b612e5cda21aeb1d54191848cf6e46e9e354f3541f81 + languageName: node + linkType: hard + "react-dom@npm:^19.1.0": version: 19.1.0 resolution: "react-dom@npm:19.1.0" @@ -8534,6 +9216,13 @@ __metadata: languageName: node linkType: hard +"react-refresh@npm:^0.14.0": + version: 0.14.2 + resolution: "react-refresh@npm:0.14.2" + checksum: 10/512abf97271ab8623486061be04b608c39d932e3709f9af1720b41573415fa4993d0009fa5138b6705b60a98f4102f744d4e26c952b14f41a0e455521c6be4cc + languageName: node + linkType: hard + "react-refresh@npm:^0.17.0": version: 0.17.0 resolution: "react-refresh@npm:0.17.0" @@ -8541,6 +9230,15 @@ __metadata: languageName: node linkType: hard +"react@npm:^18.2.0": + version: 18.3.1 + resolution: "react@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10/261137d3f3993eaa2368a83110466fc0e558bc2c7f7ae7ca52d94f03aac945f45146bd85e5f481044db1758a1dbb57879e2fcdd33924e2dde1bdc550ce73f7bf + languageName: node + linkType: hard + "react@npm:^19.1.0": version: 19.1.0 resolution: "react@npm:19.1.0" @@ -8601,6 +9299,15 @@ __metadata: languageName: node linkType: hard +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: "npm:^1.20.0" + checksum: 10/ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 + languageName: node + linkType: hard + "redux-thunk@npm:^2.4.2": version: 2.4.2 resolution: "redux-thunk@npm:2.4.2" @@ -8715,6 +9422,13 @@ __metadata: languageName: node linkType: hard +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10/a72468e2589270d91f06c7d36ec97a88db53ae5d6fe3787fadc943f0b0276b10347f89b363b2a82285f650bdcc135ad4a257c61bdd4d00d6df1fa24875b0ddaf + languageName: node + linkType: hard + "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" @@ -8788,6 +9502,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.20.0": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10/0a398b44da5c05e6e421d70108822c327675febb880eebe905587628de401854c61d5df02866ff34fc4cb1173a51c9f0e84a94702738df3611a62e2acdc68181 + languageName: node + linkType: hard + "resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.9.0#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" @@ -8801,6 +9528,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10/d4d878bfe3702d215ea23e75e0e9caf99468e3db76f5ca100d27ebdc527366fee3877e54bce7d47cc72ca8952fc2782a070d238bfa79a550eeb0082384c3b81a + languageName: node + linkType: hard + "rest@workspace:*, rest@workspace:ui/component/rest": version: 0.0.0-use.local resolution: "rest@workspace:ui/component/rest" @@ -8863,6 +9603,13 @@ __metadata: languageName: node linkType: hard +"run-applescript@npm:^7.0.0": + version: 7.0.0 + resolution: "run-applescript@npm:7.0.0" + checksum: 10/b02462454d8b182ad4117e5d4626e9e6782eb2072925c9fac582170b0627ae3c1ea92ee9b2df7daf84b5e9ffe14eb1cf5fb70bc44b15c8a0bfcdb47987e2410c + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -8923,6 +9670,15 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10/e8d68b89d18d5b028223edf090092846868a765a591944760942b77ea1f69b17235f7e956696efbb62c8130ab90af7e0949bfb8eba7896335507317236966bc9 + languageName: node + linkType: hard + "scheduler@npm:^0.26.0": version: 0.26.0 resolution: "scheduler@npm:0.26.0" @@ -8975,6 +9731,18 @@ __metadata: languageName: node linkType: hard +"schema-utils@npm:^4.2.0": + version: 4.3.2 + resolution: "schema-utils@npm:4.3.2" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10/02c32c34aae762d48468f98465a96a167fede637772871c7c7d8923671ddb9f20b2cc6f6e8448ae6bef5363e3597493c655212c8b06a4ee73aa099d9452fbd8b + languageName: node + linkType: hard + "select-hose@npm:^2.0.0": version: 2.0.0 resolution: "select-hose@npm:2.0.0" @@ -8982,7 +9750,7 @@ __metadata: languageName: node linkType: hard -"selfsigned@npm:^2.1.1": +"selfsigned@npm:^2.1.1, selfsigned@npm:^2.4.1": version: 2.4.1 resolution: "selfsigned@npm:2.4.1" dependencies: @@ -9031,6 +9799,27 @@ __metadata: languageName: node linkType: hard +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" + dependencies: + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:2.4.1" + range-parser: "npm:~1.2.1" + statuses: "npm:2.0.1" + checksum: 10/1f6064dea0ae4cbe4878437aedc9270c33f2a6650a77b56a16b62d057527f2766d96ee282997dd53ec0339082f2aad935bc7d989b46b48c82fc610800dc3a1d0 + languageName: node + linkType: hard + "serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" @@ -9067,6 +9856,18 @@ __metadata: languageName: node linkType: hard +"serve-static@npm:1.16.2": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" + dependencies: + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:0.19.0" + checksum: 10/7fa9d9c68090f6289976b34fc13c50ac8cd7f16ae6bce08d16459300f7fc61fbc2d7ebfa02884c073ec9d6ab9e7e704c89561882bbe338e99fcacb2912fde737 + languageName: node + linkType: hard + "set-function-length@npm:^1.2.1": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -9232,6 +10033,17 @@ __metadata: languageName: node linkType: hard +"sirv@npm:^2.0.3": + version: 2.0.4 + resolution: "sirv@npm:2.0.4" + dependencies: + "@polka/url": "npm:^1.0.0-next.24" + mrmime: "npm:^2.0.0" + totalist: "npm:^3.0.0" + checksum: 10/24f42cf06895017e589c9d16fc3f1c6c07fe8b0dbafce8a8b46322cfba67b7f2498610183954cb0e9d089c8cb60002a7ee7e8bca6a91a0d7042bfbc3473c95c3 + languageName: node + linkType: hard + "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -9437,7 +10249,7 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -9690,6 +10502,15 @@ __metadata: languageName: node linkType: hard +"thingies@npm:^1.20.0": + version: 1.21.0 + resolution: "thingies@npm:1.21.0" + peerDependencies: + tslib: ^2 + checksum: 10/5c3954b67391d1432c252cb7089f29480e2164f06987a63d83c9747aa6999bfc313d6edfce71ed967316a3378dfcaf38f35ea77aaa5d423edaf776b8ff854f83 + languageName: node + linkType: hard + "thunky@npm:^1.0.2": version: 1.1.0 resolution: "thunky@npm:1.1.0" @@ -9727,6 +10548,13 @@ __metadata: languageName: node linkType: hard +"totalist@npm:^3.0.0": + version: 3.0.1 + resolution: "totalist@npm:3.0.1" + checksum: 10/5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -9734,6 +10562,15 @@ __metadata: languageName: node linkType: hard +"tree-dump@npm:^1.0.1": + version: 1.0.3 + resolution: "tree-dump@npm:1.0.3" + peerDependencies: + tslib: 2 + checksum: 10/cf382e61cfb5e3ff8f03425b5bc1923e8f0e385b3a02f43d9d0a32d09da9984477e0f2a7698628662263d1d3f1af17e33486c77ff454978f0f9f07fb5d1fe9a2 + languageName: node + linkType: hard + "ts-loader@npm:^9.2.6": version: 9.5.1 resolution: "ts-loader@npm:9.5.1" @@ -9750,6 +10587,44 @@ __metadata: languageName: node linkType: hard +"ts-node@npm:^10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 10/a91a15b3c9f76ac462f006fa88b6bfa528130dcfb849dd7ef7f9d640832ab681e235b8a2bc58ecde42f72851cc1d5d4e22c901b0c11aa51001ea1d395074b794 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.15.0": version: 3.15.0 resolution: "tsconfig-paths@npm:3.15.0" @@ -9769,6 +10644,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.0.0, tslib@npm:^2.8.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 + languageName: node + linkType: hard + "tslib@npm:^2.0.3, tslib@npm:^2.4.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" @@ -9776,13 +10658,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.8.0": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 - languageName: node - linkType: hard - "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -9882,7 +10757,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.8.3": +"typescript@npm:^5.6.3, typescript@npm:^5.8.3": version: 5.8.3 resolution: "typescript@npm:5.8.3" bin: @@ -9902,7 +10777,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": +"typescript@patch:typescript@npm%3A^5.6.3#optional!builtin, typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": version: 5.8.3 resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=d69c25" bin: @@ -10082,6 +10957,13 @@ __metadata: languageName: node linkType: hard +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 10/88d3423a52b6aaf1836be779cab12f7016d47ad8430dffba6edf766695e6d90ad4adaa3d8eeb512cc05924f3e246c4a4ca51e089dccf4402caa536b5e5be8961 + languageName: node + linkType: hard + "vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" @@ -10126,6 +11008,28 @@ __metadata: languageName: node linkType: hard +"webpack-bundle-analyzer@npm:4.10.2": + version: 4.10.2 + resolution: "webpack-bundle-analyzer@npm:4.10.2" + dependencies: + "@discoveryjs/json-ext": "npm:0.5.7" + acorn: "npm:^8.0.4" + acorn-walk: "npm:^8.0.0" + commander: "npm:^7.2.0" + debounce: "npm:^1.2.1" + escape-string-regexp: "npm:^4.0.0" + gzip-size: "npm:^6.0.0" + html-escaper: "npm:^2.0.2" + opener: "npm:^1.5.2" + picocolors: "npm:^1.0.0" + sirv: "npm:^2.0.3" + ws: "npm:^7.3.1" + bin: + webpack-bundle-analyzer: lib/bin/analyzer.js + checksum: 10/cb7ff9d01dc04ef23634f439ab9fe739e022cce5595cb340e01d106ed474605ce4ef50b11b47e444507d341b16650dcb3610e88944020ca6c1c38e88072d43ba + languageName: node + linkType: hard + "webpack-cli@npm:^4.9.1": version: 4.10.0 resolution: "webpack-cli@npm:4.10.0" @@ -10174,6 +11078,70 @@ __metadata: languageName: node linkType: hard +"webpack-dev-middleware@npm:^7.4.2": + version: 7.4.2 + resolution: "webpack-dev-middleware@npm:7.4.2" + dependencies: + colorette: "npm:^2.0.10" + memfs: "npm:^4.6.0" + mime-types: "npm:^2.1.31" + on-finished: "npm:^2.4.1" + range-parser: "npm:^1.2.1" + schema-utils: "npm:^4.0.0" + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + checksum: 10/608d101b82081a5bc6c0237f9945e14a8eefce1664c10877f3feb0042710f6c8b4288b07986505f791302d81b3c51180f679b97c91c3cdabd3fd0687a464ca1c + languageName: node + linkType: hard + +"webpack-dev-server@npm:5.2.2": + version: 5.2.2 + resolution: "webpack-dev-server@npm:5.2.2" + dependencies: + "@types/bonjour": "npm:^3.5.13" + "@types/connect-history-api-fallback": "npm:^1.5.4" + "@types/express": "npm:^4.17.21" + "@types/express-serve-static-core": "npm:^4.17.21" + "@types/serve-index": "npm:^1.9.4" + "@types/serve-static": "npm:^1.15.5" + "@types/sockjs": "npm:^0.3.36" + "@types/ws": "npm:^8.5.10" + ansi-html-community: "npm:^0.0.8" + bonjour-service: "npm:^1.2.1" + chokidar: "npm:^3.6.0" + colorette: "npm:^2.0.10" + compression: "npm:^1.7.4" + connect-history-api-fallback: "npm:^2.0.0" + express: "npm:^4.21.2" + graceful-fs: "npm:^4.2.6" + http-proxy-middleware: "npm:^2.0.9" + ipaddr.js: "npm:^2.1.0" + launch-editor: "npm:^2.6.1" + open: "npm:^10.0.3" + p-retry: "npm:^6.2.0" + schema-utils: "npm:^4.2.0" + selfsigned: "npm:^2.4.1" + serve-index: "npm:^1.9.1" + sockjs: "npm:^0.3.24" + spdy: "npm:^4.0.2" + webpack-dev-middleware: "npm:^7.4.2" + ws: "npm:^8.18.0" + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + bin: + webpack-dev-server: bin/webpack-dev-server.js + checksum: 10/59517409cd38c01a875a03b9658f3d20d492b5b8bead9ded4a0f3d33e6857daf2d352fe89f0181dcaea6d0fbe84b0494cb4750a87120fe81cdbb3c32b499451c + languageName: node + linkType: hard + "webpack-dev-server@npm:^4.5.0": version: 4.15.2 resolution: "webpack-dev-server@npm:4.15.2" @@ -10377,7 +11345,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -10406,6 +11374,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^7.3.1": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10/9c796b84ba80ffc2c2adcdfc9c8e9a219ba99caa435c9a8d45f9ac593bba325563b3f83edc5eb067cc6d21b9a6bf2c930adf76dd40af5f58a5ca6859e81858f0 + languageName: node + linkType: hard + "ws@npm:^8.13.0": version: 8.17.0 resolution: "ws@npm:8.17.0" @@ -10421,6 +11404,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.18.0": + version: 8.18.2 + resolution: "ws@npm:8.18.2" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10/018e04ec95561d88248d53a2eaf094b4ae131e9b062f2679e6e8a62f04649bc543448f1e038125225ac6bbb25f54c1e65d7a2cc9dbc1e28b43e5e6b7162ad88e + languageName: node + linkType: hard + "xtend@npm:^4.0.0, xtend@npm:^4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -10428,6 +11426,13 @@ __metadata: languageName: node linkType: hard +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10/5f1b5f95e3775de4514edbb142398a2c37849ccfaf04a015be5d75521e9629d3be29bd4432d23c57f37e5b61ade592fb0197022e9993f81a06a5afbdcda9346d + languageName: node + linkType: hard + "yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" @@ -10449,6 +11454,35 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10/9dc2c217ea3bf8d858041252d43e074f7166b53f3d010a8c711275e09cd3d62a002969a39858b92bbda2a6a63a585c7127014534a560b9c69ed2d923d113406e + languageName: node + linkType: hard + +"yargs@npm:17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10/abb3e37678d6e38ea85485ed86ebe0d1e3464c640d7d9069805ea0da12f69d5a32df8e5625e370f9c96dd1c2dc088ab2d0a4dd32af18222ef3c4224a19471576 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 10/2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" From c497aa551931ae16a456f0a14be1793889061728 Mon Sep 17 00:00:00 2001 From: MartinaeyNL Date: Wed, 2 Jul 2025 17:53:27 +0200 Subject: [PATCH 3/8] Updated README.md for custom apps --- ui/app/README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ui/app/README.md b/ui/app/README.md index 8615dac8f..4e0395e6e 100644 --- a/ui/app/README.md +++ b/ui/app/README.md @@ -1,8 +1,10 @@ # Custom UI apps In this folder, you can add custom (web) applications that will be shipped along with OpenRemote. -For example, special mobile apps for a single use are very common. -We make it easy for them to communicate with OpenRemote. +For example, special mobile apps for end users, or apps for less-technical consumers are widespread. + +Developing these custom apps is pretty straightforward, thanks to the built-in packages we provide. +These make communicating with OpenRemote easier, and allows developers to quickly set up an user interface. ## Example apps @@ -10,10 +12,10 @@ We provided several example apps to get familiar with the architecture. Here's a list of the apps, and what they do; ### /custom -This is an example web application built with Lit Web Components and Webpack. -Apps in our main OpenRemote repository are built with these technologies as well. +This is an example web application built with [Lit Web Components](https://lit.dev) and [Webpack](https://webpack.js.org). +Apps in our main OpenRemote [repository](https://github.com/openremote/openremote) are built with these technologies as well. It can be used as a template to add your own pages on top of it. ### /custom-app-react -This is an example web application built with React 19 and RSPack. +This is an example web application built with [React 19](https://react.dev) and [RSPack](https://rspack.rs). *(more information soon)* \ No newline at end of file From ce5c4fb007b04b535e362887e4169045a196e1f7 Mon Sep 17 00:00:00 2001 From: MartinaeyNL Date: Thu, 3 Jul 2025 11:19:24 +0200 Subject: [PATCH 4/8] Updated RSPack config with correct path and port. Updated README. --- ui/app/README.md | 1 + ui/app/custom-app-react/rspack.config.ts | 8 + yarn.lock | 200 +++-------------------- 3 files changed, 30 insertions(+), 179 deletions(-) diff --git a/ui/app/README.md b/ui/app/README.md index 4e0395e6e..8e1ac569c 100644 --- a/ui/app/README.md +++ b/ui/app/README.md @@ -9,6 +9,7 @@ These make communicating with OpenRemote easier, and allows developers to quickl ## Example apps We provided several example apps to get familiar with the architecture. +All apps can be ran using `npm run serve`, and visited at http://localhost:9000/custom/. Here's a list of the apps, and what they do; ### /custom diff --git a/ui/app/custom-app-react/rspack.config.ts b/ui/app/custom-app-react/rspack.config.ts index 52151bd49..e0681c369 100644 --- a/ui/app/custom-app-react/rspack.config.ts +++ b/ui/app/custom-app-react/rspack.config.ts @@ -10,6 +10,11 @@ const targets = ["chrome >= 87", "edge >= 88", "firefox >= 78", "safari >= 14"]; export default defineConfig({ context: __dirname, + devServer: { + host: "0.0.0.0", + port: 9000, + open: false + }, entry: { main: "./src/main.tsx" }, @@ -66,6 +71,9 @@ export default defineConfig({ }) ] }, + output: { + publicPath: isDev ? "/custom/" : "/", + }, experiments: { css: true } diff --git a/yarn.lock b/yarn.lock index 189521d30..18a1b8e7b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2482,18 +2482,23 @@ __metadata: languageName: node linkType: hard -"@openremote/custom-example-react@workspace:ui/app/custom-example-react": +"@openremote/custom-app-react@workspace:ui/app/custom-app-react": version: 0.0.0-use.local - resolution: "@openremote/custom-example-react@workspace:ui/app/custom-example-react" + resolution: "@openremote/custom-app-react@workspace:ui/app/custom-app-react" dependencies: + "@openremote/or-chart": "npm:^1.6.5" "@openremote/or-mwc-components": "npm:^1.6.5" - "@rsbuild/core": "npm:^1.4.0" - "@rsbuild/plugin-react": "npm:^1.3.2" - "@types/react": "npm:^19.1.8" - "@types/react-dom": "npm:^19.1.6" - react: "npm:^19.1.0" - react-dom: "npm:^19.1.0" - typescript: "npm:^5.8.3" + "@rspack/cli": "npm:^1.1.8" + "@rspack/core": "npm:^1.1.8" + "@rspack/plugin-react-refresh": "npm:1.0.0" + "@types/react": "npm:^18.2.48" + "@types/react-dom": "npm:^18.2.18" + cross-env: "npm:^7.0.3" + react: "npm:^18.2.0" + react-dom: "npm:^18.2.0" + react-refresh: "npm:^0.14.0" + ts-node: "npm:^10.9.2" + typescript: "npm:^5.6.3" languageName: unknown linkType: soft @@ -2993,33 +2998,6 @@ __metadata: languageName: node linkType: hard -"@rsbuild/core@npm:^1.4.0": - version: 1.4.1 - resolution: "@rsbuild/core@npm:1.4.1" - dependencies: - "@rspack/core": "npm:1.4.1" - "@rspack/lite-tapable": "npm:~1.0.1" - "@swc/helpers": "npm:^0.5.17" - core-js: "npm:~3.43.0" - jiti: "npm:^2.4.2" - bin: - rsbuild: bin/rsbuild.js - checksum: 10/6e5d68eb6757b69fc21709cc6679de0e5a48761ddfd0035baa409437df22ea70d5093eaaa34b4165d46862a7d455a9489c7ecd0928a3ec173632a6a9e62052df - languageName: node - linkType: hard - -"@rsbuild/plugin-react@npm:^1.3.2": - version: 1.3.2 - resolution: "@rsbuild/plugin-react@npm:1.3.2" - dependencies: - "@rspack/plugin-react-refresh": "npm:~1.4.3" - react-refresh: "npm:^0.17.0" - peerDependencies: - "@rsbuild/core": 1.x - checksum: 10/852d5098e71028d3c238b12a04ff2220ef9023c50a37bc5db24d96facbdbfac5f5c3c73e9f1e8822956ad34b0e98f556ff8291f497e7163ec38378ddbe2e8e36 - languageName: node - linkType: hard - "@rspack/binding-darwin-arm64@npm:1.4.1": version: 1.4.1 resolution: "@rspack/binding-darwin-arm64@npm:1.4.1" @@ -3151,7 +3129,7 @@ __metadata: languageName: node linkType: hard -"@rspack/core@npm:1.4.1, @rspack/core@npm:^1.1.8": +"@rspack/core@npm:^1.1.8": version: 1.4.1 resolution: "@rspack/core@npm:1.4.1" dependencies: @@ -3182,7 +3160,7 @@ __metadata: languageName: node linkType: hard -"@rspack/lite-tapable@npm:1.0.1, @rspack/lite-tapable@npm:~1.0.1": +"@rspack/lite-tapable@npm:1.0.1": version: 1.0.1 resolution: "@rspack/lite-tapable@npm:1.0.1" checksum: 10/240b7832965bca5a52d1f03a8539dab5810958ce24b5a670405b2505d81350f10d668f4055648f5918bc18ac033e637bcb7f92189345f0f2f671b546019c2f9e @@ -3204,31 +3182,6 @@ __metadata: languageName: node linkType: hard -"@rspack/plugin-react-refresh@npm:~1.4.3": - version: 1.4.3 - resolution: "@rspack/plugin-react-refresh@npm:1.4.3" - dependencies: - error-stack-parser: "npm:^2.1.4" - html-entities: "npm:^2.6.0" - peerDependencies: - react-refresh: ">=0.10.0 <1.0.0" - webpack-hot-middleware: 2.x - peerDependenciesMeta: - webpack-hot-middleware: - optional: true - checksum: 10/ddbe4268f0c5eb1e6c4384db16cad42628596ff7ca97707b5075be894f60bb87de2483fe2735129dc624380e46b7999735af7c418123a6bb2d01280ca5fea2c1 - languageName: node - linkType: hard - -"@swc/helpers@npm:^0.5.17": - version: 0.5.17 - resolution: "@swc/helpers@npm:0.5.17" - dependencies: - tslib: "npm:^2.8.0" - checksum: 10/1fc8312a78f1f99c8ec838585445e99763eeebff2356100738cdfdb8ad47d2d38df678ee6edd93a90fe319ac52da67adc14ac00eb82b606c5fb8ebc5d06ec2a2 - languageName: node - linkType: hard - "@tsconfig/node10@npm:^1.0.7": version: 1.0.11 resolution: "@tsconfig/node10@npm:1.0.11" @@ -3560,15 +3513,6 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^19.1.6": - version: 19.1.6 - resolution: "@types/react-dom@npm:19.1.6" - peerDependencies: - "@types/react": ^19.0.0 - checksum: 10/b5b20b7f0797f34c5a11915b74dcf8b3b7a9da9fea90279975ce6f150ca5d31bb069dbb0838638a5e9e168098aa4bb4a6f61d078efa1bbb55d7f0bdfe47bb142 - languageName: node - linkType: hard - "@types/react@npm:^18.2.48": version: 18.3.23 resolution: "@types/react@npm:18.3.23" @@ -3579,15 +3523,6 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^19.1.8": - version: 19.1.8 - resolution: "@types/react@npm:19.1.8" - dependencies: - csstype: "npm:^3.0.2" - checksum: 10/a3e6fe0f60f22828ef887f30993aa147b71532d7b1219dd00d246277eb7a9ca01ec533096237fa21ca1bccb3653373b4e8e59e5ae59f9c793058384bbc1f4d5c - languageName: node - linkType: hard - "@types/retry@npm:0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" @@ -5012,13 +4947,6 @@ __metadata: languageName: node linkType: hard -"core-js@npm:~3.43.0": - version: 3.43.0 - resolution: "core-js@npm:3.43.0" - checksum: 10/514952992863266b1a6a2d3c985e905461d37fe72d131d9320d5dbf01ac7e746f6fc53004b548347518cc832f7d2602b9a228acf6b5183e5cbede9dd296d73d3 - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -5102,30 +5030,6 @@ __metadata: languageName: node linkType: hard -"css-loader@npm:^7.1.2": - version: 7.1.2 - resolution: "css-loader@npm:7.1.2" - dependencies: - icss-utils: "npm:^5.1.0" - postcss: "npm:^8.4.33" - postcss-modules-extract-imports: "npm:^3.1.0" - postcss-modules-local-by-default: "npm:^4.0.5" - postcss-modules-scope: "npm:^3.2.0" - postcss-modules-values: "npm:^4.0.0" - postcss-value-parser: "npm:^4.2.0" - semver: "npm:^7.5.4" - peerDependencies: - "@rspack/core": 0.x || 1.x - webpack: ^5.27.0 - peerDependenciesMeta: - "@rspack/core": - optional: true - webpack: - optional: true - checksum: 10/ddde22fb103888320f60a1414a6a04638d2e9760a532a52d03c45e6e2830b32dd76c734aeef426f78dd95b2d15f77eeec3854ac53061aff02569732dc6e6801c - languageName: node - linkType: hard - "css-select@npm:^4.1.3": version: 4.3.0 resolution: "css-select@npm:4.3.0" @@ -5162,27 +5066,6 @@ __metadata: languageName: node linkType: hard -"custom-app-react@workspace:ui/app/custom-app-react": - version: 0.0.0-use.local - resolution: "custom-app-react@workspace:ui/app/custom-app-react" - dependencies: - "@openremote/or-chart": "npm:^1.6.5" - "@openremote/or-mwc-components": "npm:^1.6.5" - "@rspack/cli": "npm:^1.1.8" - "@rspack/core": "npm:^1.1.8" - "@rspack/plugin-react-refresh": "npm:1.0.0" - "@types/react": "npm:^18.2.48" - "@types/react-dom": "npm:^18.2.18" - cross-env: "npm:^7.0.3" - css-loader: "npm:^7.1.2" - react: "npm:^18.2.0" - react-dom: "npm:^18.2.0" - react-refresh: "npm:^0.14.0" - ts-node: "npm:^10.9.2" - typescript: "npm:^5.6.3" - languageName: unknown - linkType: soft - "data-view-buffer@npm:^1.0.1": version: 1.0.1 resolution: "data-view-buffer@npm:1.0.1" @@ -5585,7 +5468,7 @@ __metadata: languageName: node linkType: hard -"error-stack-parser@npm:^2.0.6, error-stack-parser@npm:^2.1.4": +"error-stack-parser@npm:^2.0.6": version: 2.1.4 resolution: "error-stack-parser@npm:2.1.4" dependencies: @@ -6842,7 +6725,7 @@ __metadata: languageName: node linkType: hard -"html-entities@npm:^2.1.0, html-entities@npm:^2.6.0": +"html-entities@npm:^2.1.0": version: 2.6.0 resolution: "html-entities@npm:2.6.0" checksum: 10/06d4e7a3ba6243bba558af176e56f85e09894b26d911bc1ef7b2b9b3f18b46604360805b32636f080e954778e9a34313d1982479a05a5aa49791afd6a4229346 @@ -7591,15 +7474,6 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^2.4.2": - version: 2.4.2 - resolution: "jiti@npm:2.4.2" - bin: - jiti: lib/jiti-cli.mjs - checksum: 10/e2b07eb2e3fbb245e29ad288dddecab31804967fc84d5e01d39858997d2743b5e248946defcecf99272275a00284ecaf7ec88b8c841331324f0c946d8274414b - languageName: node - linkType: hard - "js-sha256@npm:^0.11.0": version: 0.11.0 resolution: "js-sha256@npm:0.11.0" @@ -9205,17 +9079,6 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^19.1.0": - version: 19.1.0 - resolution: "react-dom@npm:19.1.0" - dependencies: - scheduler: "npm:^0.26.0" - peerDependencies: - react: ^19.1.0 - checksum: 10/c5b58605862c7b0bb044416b01c73647bb8e89717fb5d7a2c279b11815fb7b49b619fe685c404e59f55eb52c66831236cc565c25ee1c2d042739f4a2cc538aa2 - languageName: node - linkType: hard - "react-refresh@npm:^0.14.0": version: 0.14.2 resolution: "react-refresh@npm:0.14.2" @@ -9223,13 +9086,6 @@ __metadata: languageName: node linkType: hard -"react-refresh@npm:^0.17.0": - version: 0.17.0 - resolution: "react-refresh@npm:0.17.0" - checksum: 10/5e94f07d43bb1cfdc9b0c6e0c8c73e754005489950dcff1edb53aa8451d1d69a47b740b195c7c80fb4eb511c56a3585dc55eddd83f0097fb5e015116a1460467 - languageName: node - linkType: hard - "react@npm:^18.2.0": version: 18.3.1 resolution: "react@npm:18.3.1" @@ -9239,13 +9095,6 @@ __metadata: languageName: node linkType: hard -"react@npm:^19.1.0": - version: 19.1.0 - resolution: "react@npm:19.1.0" - checksum: 10/d0180689826fd9de87e839c365f6f361c561daea397d61d724687cae88f432a307d1c0f53a0ee95ddbe3352c10dac41d7ff1ad85530fb24951b27a39e5398db4 - languageName: node - linkType: hard - "readable-stream@npm:^2.0.1": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" @@ -9679,13 +9528,6 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.26.0": - version: 0.26.0 - resolution: "scheduler@npm:0.26.0" - checksum: 10/1ecf2e5d7de1a7a132796834afe14a2d589ba7e437615bd8c06f3e0786a3ac3434655e67aac8755d9b14e05754c177e49c064261de2673aaa3c926bc98caa002 - languageName: node - linkType: hard - "schema-utils@npm:2.7.0": version: 2.7.0 resolution: "schema-utils@npm:2.7.0" @@ -10644,7 +10486,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.8.0": +"tslib@npm:^2.0.0": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 @@ -10757,7 +10599,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.6.3, typescript@npm:^5.8.3": +"typescript@npm:^5.6.3": version: 5.8.3 resolution: "typescript@npm:5.8.3" bin: @@ -10777,7 +10619,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.6.3#optional!builtin, typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": +"typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": version: 5.8.3 resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=d69c25" bin: From f10b31ea287bed1bf872cd7c39774913dbcc415d Mon Sep 17 00:00:00 2001 From: MartinaeyNL Date: Thu, 3 Jul 2025 12:02:17 +0200 Subject: [PATCH 5/8] Added example for listening to events --- ui/app/custom-app-react/src/App.tsx | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/ui/app/custom-app-react/src/App.tsx b/ui/app/custom-app-react/src/App.tsx index f547189b9..9c80ac2e5 100644 --- a/ui/app/custom-app-react/src/App.tsx +++ b/ui/app/custom-app-react/src/App.tsx @@ -1,18 +1,31 @@ -import { useState } from "react"; +import { useState, useRef, useEffect } from "react"; import reactLogo from "./assets/react.svg"; import {InputType, OrMwcInput} from "@openremote/or-mwc-components/or-mwc-input"; import "./App.css"; +/** + * In React, for web components to be recognized, it's common to add each HTML tag in the JSX IntrinsicElements interface. + * Be aware; your IDE might still not understand these web components correctly. + */ declare global { namespace JSX { interface IntrinsicElements { - 'or-mwc-input': OrMwcInput + "or-mwc-input": OrMwcInput } } } function App() { const [count, setCount] = useState(0); + const buttonRef = useRef(null); + const handleButtonClick = () => setCount(count => count + 1); + + useEffect(() => { + (buttonRef.current as any)?.addEventListener("or-mwc-input-changed", handleButtonClick); + return () => { + (buttonRef.current as any)?.removeEventListener("or-mwc-input-changed", handleButtonClick); + }; + }, []); return (
@@ -29,11 +42,11 @@ function App() {

Edit src/App.tsx and save to test HMR

+

- Click on the Rspack and React logos to learn more + Click on the React logo to learn more

- ); } From 41b5e767fb177edb0e63b18e2c8d1171ace17063 Mon Sep 17 00:00:00 2001 From: MartinaeyNL Date: Thu, 3 Jul 2025 15:43:07 +0200 Subject: [PATCH 6/8] Added OpenRemote authentication and dependencies. Now prompting login upon opening app. --- ui/app/custom-app-react/package.json | 3 ++- ui/app/custom-app-react/src/main.tsx | 30 +++++++++++++++++++++++----- yarn.lock | 9 +++++---- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/ui/app/custom-app-react/package.json b/ui/app/custom-app-react/package.json index 07d412ce8..34c197822 100644 --- a/ui/app/custom-app-react/package.json +++ b/ui/app/custom-app-react/package.json @@ -10,7 +10,8 @@ "serve": "cross-env NODE_ENV=development rspack serve" }, "dependencies": { - "@openremote/or-chart": "^1.6.5", + "@openremote/core": "^1.6.5", + "@openremote/model": "^1.6.5", "@openremote/or-mwc-components": "^1.6.5", "react": "^18.2.0", "react-dom": "^18.2.0" diff --git a/ui/app/custom-app-react/src/main.tsx b/ui/app/custom-app-react/src/main.tsx index 29baf78c5..85259adc0 100644 --- a/ui/app/custom-app-react/src/main.tsx +++ b/ui/app/custom-app-react/src/main.tsx @@ -1,10 +1,30 @@ import React from "react"; import ReactDOM from "react-dom/client"; import App from "./App.tsx"; +import {manager} from "@openremote/core"; +import {ManagerConfig} from "@openremote/model"; import "./index.css"; -ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( - - - -); +/** + * Define the Manager configuration to talk with OpenRemote. + * For example, defining the realm and URL to communicate with. (these will be consumed with HTTP API calls for example) + * We also enable autoLogin to prompt a Keycloak login before the app appears. + */ +const managerConfig: ManagerConfig = { + realm: "custom", + managerUrl: "http://192.168.0.101:8080", + autoLogin: true +}; + +/** + * Initialize the Manager connection. + * Afterward, we can start rendering the React DOM UI. + */ +manager.init(managerConfig).then(() => { + + ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( + + + + ); +}); diff --git a/yarn.lock b/yarn.lock index 18a1b8e7b..ac7b22877 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2465,7 +2465,7 @@ __metadata: languageName: node linkType: hard -"@openremote/core@npm:1.6.5": +"@openremote/core@npm:1.6.5, @openremote/core@npm:^1.6.5": version: 1.6.5 resolution: "@openremote/core@npm:1.6.5" dependencies: @@ -2486,7 +2486,8 @@ __metadata: version: 0.0.0-use.local resolution: "@openremote/custom-app-react@workspace:ui/app/custom-app-react" dependencies: - "@openremote/or-chart": "npm:^1.6.5" + "@openremote/core": "npm:^1.6.5" + "@openremote/model": "npm:^1.6.5" "@openremote/or-mwc-components": "npm:^1.6.5" "@rspack/cli": "npm:^1.1.8" "@rspack/core": "npm:^1.1.8" @@ -2557,7 +2558,7 @@ __metadata: languageName: node linkType: hard -"@openremote/model@npm:1.6.5": +"@openremote/model@npm:1.6.5, @openremote/model@npm:^1.6.5": version: 1.6.5 resolution: "@openremote/model@npm:1.6.5" checksum: 10/643a4de11861f61143b92565ce7b4c3fef7c36b4b96c31af7ee337614db049ba479f2357143fc0c4e29352790139fa0a0506e0e2345f9e80b05cae31da8a5295 @@ -2691,7 +2692,7 @@ __metadata: languageName: node linkType: hard -"@openremote/or-chart@npm:1.6.5, @openremote/or-chart@npm:^1.6.5": +"@openremote/or-chart@npm:1.6.5": version: 1.6.5 resolution: "@openremote/or-chart@npm:1.6.5" dependencies: From f2d492e2f195703e3b0e48e9b56d5a1dd9c13be3 Mon Sep 17 00:00:00 2001 From: MartinaeyNL Date: Tue, 28 Oct 2025 14:46:33 +0100 Subject: [PATCH 7/8] Upgraded dependencies: React 19, RSPack 1.5.8, etc --- ui/app/custom-app-react/build.gradle | 12 + ui/app/custom-app-react/package.json | 26 +- ui/app/custom-app-react/rspack.config.ts | 17 +- ui/app/custom-app-react/src/App.tsx | 74 ++-- ui/app/custom-app-react/src/main.tsx | 4 +- yarn.lock | 504 ++++++++++++++++++----- 6 files changed, 473 insertions(+), 164 deletions(-) create mode 100644 ui/app/custom-app-react/build.gradle diff --git a/ui/app/custom-app-react/build.gradle b/ui/app/custom-app-react/build.gradle new file mode 100644 index 000000000..797533f42 --- /dev/null +++ b/ui/app/custom-app-react/build.gradle @@ -0,0 +1,12 @@ +buildDir = "dist" + +tasks.register('clean') { + dependsOn npmClean +} + +tasks.register('installDist', Copy) { + dependsOn npmBuild + mustRunAfter(resolveTask(":manager:installDist")) + from project.buildDir + into "${project(':deployment').buildDir}/image/manager/app/${projectDir.name}" +} diff --git a/ui/app/custom-app-react/package.json b/ui/app/custom-app-react/package.json index 34c197822..93e47a13f 100644 --- a/ui/app/custom-app-react/package.json +++ b/ui/app/custom-app-react/package.json @@ -10,21 +10,21 @@ "serve": "cross-env NODE_ENV=development rspack serve" }, "dependencies": { - "@openremote/core": "^1.6.5", - "@openremote/model": "^1.6.5", - "@openremote/or-mwc-components": "^1.6.5", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "@openremote/core": "^1.9.0", + "@openremote/model": "^1.9.0", + "@openremote/or-mwc-components": "^1.9.0", + "react": "^19.2.0", + "react-dom": "^19.2.0" }, "devDependencies": { - "@rspack/cli": "^1.1.8", - "@rspack/core": "^1.1.8", - "@rspack/plugin-react-refresh": "1.0.0", - "@types/react": "^18.2.48", - "@types/react-dom": "^18.2.18", - "cross-env": "^7.0.3", - "react-refresh": "^0.14.0", + "@rspack/cli": "^1.5.8", + "@rspack/core": "^1.5.8", + "@rspack/plugin-react-refresh": "1.5.2", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "cross-env": "^10.1.0", + "react-refresh": "^0.18.0", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.9.3" } } diff --git a/ui/app/custom-app-react/rspack.config.ts b/ui/app/custom-app-react/rspack.config.ts index e0681c369..250e1bc0e 100644 --- a/ui/app/custom-app-react/rspack.config.ts +++ b/ui/app/custom-app-react/rspack.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from "@rspack/cli"; import { rspack } from "@rspack/core"; -import * as RefreshPlugin from "@rspack/plugin-react-refresh"; +import ReactRefreshPlugin from "@rspack/plugin-react-refresh"; const isDev = process.env.NODE_ENV === "development"; @@ -32,7 +32,8 @@ export default defineConfig({ type: "asset/source" }, { - test: /\.(jsx?|tsx?)$/, + test: /\.tsx$/, + type: "javascript/auto", use: [ { loader: "builtin:swc-loader", @@ -42,15 +43,15 @@ export default defineConfig({ syntax: "typescript", tsx: true }, - transform: { + /*transform: { react: { runtime: "automatic", development: isDev, refresh: isDev } - } + }*/ }, - env: { targets } + /*env: { targets }*/ } } ] @@ -58,11 +59,11 @@ export default defineConfig({ ] }, plugins: [ + isDev && new ReactRefreshPlugin(), new rspack.HtmlRspackPlugin({ template: "./index.html" - }), - isDev ? new RefreshPlugin() : null - ].filter(Boolean), + }) + ], optimization: { minimizer: [ new rspack.SwcJsMinimizerRspackPlugin(), diff --git a/ui/app/custom-app-react/src/App.tsx b/ui/app/custom-app-react/src/App.tsx index 9c80ac2e5..2d8cb18a6 100644 --- a/ui/app/custom-app-react/src/App.tsx +++ b/ui/app/custom-app-react/src/App.tsx @@ -1,4 +1,4 @@ -import { useState, useRef, useEffect } from "react"; +import React, {useEffect, useRef, useState} from "react"; import reactLogo from "./assets/react.svg"; import {InputType, OrMwcInput} from "@openremote/or-mwc-components/or-mwc-input"; import "./App.css"; @@ -7,48 +7,46 @@ import "./App.css"; * In React, for web components to be recognized, it's common to add each HTML tag in the JSX IntrinsicElements interface. * Be aware; your IDE might still not understand these web components correctly. */ -declare global { - namespace JSX { - interface IntrinsicElements { - "or-mwc-input": OrMwcInput - } - } +declare module "react/jsx-runtime" { + namespace JSX { + interface IntrinsicElements { + "or-mwc-input": OrMwcInput + } + } } function App() { - const [count, setCount] = useState(0); - const buttonRef = useRef(null); - const handleButtonClick = () => setCount(count => count + 1); + const [count, setCount] = useState(0); + const buttonRef = useRef(null); + const handleButtonClick = () => setCount(c => c + 1); - useEffect(() => { - (buttonRef.current as any)?.addEventListener("or-mwc-input-changed", handleButtonClick); - return () => { - (buttonRef.current as any)?.removeEventListener("or-mwc-input-changed", handleButtonClick); - }; - }, []); + useEffect(() => { + (buttonRef.current as any)?.addEventListener("or-mwc-input-changed", handleButtonClick); + return () => (buttonRef.current as any)?.removeEventListener("or-mwc-input-changed", handleButtonClick); + }, []); - return ( -
-
- - React logo - -
-

Rspack + React + TypeScript

-
- -

- Edit src/App.tsx and save to test HMR -

- -
-

- Click on the React logo to learn more -

-
- ); + return ( +
+
+ + React logo + +
+

Rspack + React + TypeScript

+
+ +

+ Edit src/App.tsx and save to test HMR +

+ +
+

+ Click on the React logo to learn more +

+
+ ); } export default App; diff --git a/ui/app/custom-app-react/src/main.tsx b/ui/app/custom-app-react/src/main.tsx index 85259adc0..5a21dc8d8 100644 --- a/ui/app/custom-app-react/src/main.tsx +++ b/ui/app/custom-app-react/src/main.tsx @@ -11,8 +11,8 @@ import "./index.css"; * We also enable autoLogin to prompt a Keycloak login before the app appears. */ const managerConfig: ManagerConfig = { - realm: "custom", - managerUrl: "http://192.168.0.101:8080", + realm: "master", + managerUrl: "http://localhost:8080", autoLogin: true }; diff --git a/yarn.lock b/yarn.lock index ba9931091..6192550c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1348,6 +1348,15 @@ __metadata: languageName: node linkType: hard +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": "npm:0.3.9" + checksum: 10/b6e38a1712fab242c86a241c229cf562195aad985d0564bd352ac404be583029e89e93028ffd2c251d2c407ecac5fb0cbdca94a2d5c10f29ac806ede0508b3ff + languageName: node + linkType: hard + "@discoveryjs/json-ext@npm:0.5.7, @discoveryjs/json-ext@npm:^0.5.0, @discoveryjs/json-ext@npm:^0.5.7": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" @@ -1365,6 +1374,16 @@ __metadata: languageName: node linkType: hard +"@emnapi/core@npm:^1.5.0": + version: 1.6.0 + resolution: "@emnapi/core@npm:1.6.0" + dependencies: + "@emnapi/wasi-threads": "npm:1.1.0" + tslib: "npm:^2.4.0" + checksum: 10/72e99690772a1eca8e6b2bcf1819ddc6867151b15fc650ca39ca03d43d9efaea46d731a2bf2659f5b31a1a8823367f5203fcb873bfacbcbe52f92a5574c7995a + languageName: node + linkType: hard + "@emnapi/runtime@npm:^1.4.5": version: 1.4.5 resolution: "@emnapi/runtime@npm:1.4.5" @@ -1374,6 +1393,15 @@ __metadata: languageName: node linkType: hard +"@emnapi/runtime@npm:^1.5.0": + version: 1.6.0 + resolution: "@emnapi/runtime@npm:1.6.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/88f685ecb23df070a61447bf61b12a113b7edecc248969e1dc18e4637ee8519389cde8b95c22b2144de41490b42aedc6a791fe1b00940a02fdeaadac1352bbf6 + languageName: node + linkType: hard + "@emnapi/wasi-threads@npm:1.0.4": version: 1.0.4 resolution: "@emnapi/wasi-threads@npm:1.0.4" @@ -1383,6 +1411,22 @@ __metadata: languageName: node linkType: hard +"@emnapi/wasi-threads@npm:1.1.0": + version: 1.1.0 + resolution: "@emnapi/wasi-threads@npm:1.1.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/0d557e75262d2f4c95cb2a456ba0785ef61f919ce488c1d76e5e3acfd26e00c753ef928cd80068363e0c166ba8cc0141305daf0f81aad5afcd421f38f11e0f4e + languageName: node + linkType: hard + +"@epic-web/invariant@npm:^1.0.0": + version: 1.0.0 + resolution: "@epic-web/invariant@npm:1.0.0" + checksum: 10/28b36a7447f60b84f9d6a23571480042170ef4239a577577ad8447f64a2e4f1a4e57e6fe1b592e61534c5ab53ff67776130e6c88a68cbd997eb6e9c9759a5934 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -2383,6 +2427,13 @@ __metadata: languageName: node linkType: hard +"@module-federation/error-codes@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/error-codes@npm:0.18.0" + checksum: 10/ccd00f6b2504ec2e685bda6d175ed86df27e21994b36869140a18059595716e9ea7db5d0b516a095891ec9e6c90e702f42a366743df3652bf91ff3bb4f895991 + languageName: node + linkType: hard + "@module-federation/runtime-core@npm:0.17.1": version: 0.17.1 resolution: "@module-federation/runtime-core@npm:0.17.1" @@ -2393,6 +2444,16 @@ __metadata: languageName: node linkType: hard +"@module-federation/runtime-core@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/runtime-core@npm:0.18.0" + dependencies: + "@module-federation/error-codes": "npm:0.18.0" + "@module-federation/sdk": "npm:0.18.0" + checksum: 10/82af795408f2e92bea9c801a2057f1a6ed85eaf131195d5deaa4ef9a6a88db9e2cb851b4416e6e43a841459986b5ebb84e98b4625fb9bbd98cee11929f1ede6b + languageName: node + linkType: hard + "@module-federation/runtime-tools@npm:0.17.1": version: 0.17.1 resolution: "@module-federation/runtime-tools@npm:0.17.1" @@ -2403,6 +2464,16 @@ __metadata: languageName: node linkType: hard +"@module-federation/runtime-tools@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/runtime-tools@npm:0.18.0" + dependencies: + "@module-federation/runtime": "npm:0.18.0" + "@module-federation/webpack-bundler-runtime": "npm:0.18.0" + checksum: 10/c6b1483899865e4c73be0ae77e6e1a5f517798f7ab3b8c6df2bb7ed22463e7a471f68d5f9528b2aff5b45e2db67596805028206f3956aafec5a36dcefb94afd2 + languageName: node + linkType: hard + "@module-federation/runtime@npm:0.17.1": version: 0.17.1 resolution: "@module-federation/runtime@npm:0.17.1" @@ -2414,6 +2485,17 @@ __metadata: languageName: node linkType: hard +"@module-federation/runtime@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/runtime@npm:0.18.0" + dependencies: + "@module-federation/error-codes": "npm:0.18.0" + "@module-federation/runtime-core": "npm:0.18.0" + "@module-federation/sdk": "npm:0.18.0" + checksum: 10/6164597782b21840e3b8f159000338d8e20a817a60909015c11402e9e6442d60d9c3b4b6f25d92d7261011ef1fc0e8caafbb91f25c29b372f28764cbea8ef9eb + languageName: node + linkType: hard + "@module-federation/sdk@npm:0.17.1": version: 0.17.1 resolution: "@module-federation/sdk@npm:0.17.1" @@ -2421,6 +2503,13 @@ __metadata: languageName: node linkType: hard +"@module-federation/sdk@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/sdk@npm:0.18.0" + checksum: 10/f397dc53c705ad1f1e19530a8ff79116bb5aeeef92a79b3acaaa6140ae4e5784b42e81d1445eabf536c007c9383857f6764506ed725a6352464fe1ce581af89a + languageName: node + linkType: hard + "@module-federation/webpack-bundler-runtime@npm:0.17.1": version: 0.17.1 resolution: "@module-federation/webpack-bundler-runtime@npm:0.17.1" @@ -2431,6 +2520,16 @@ __metadata: languageName: node linkType: hard +"@module-federation/webpack-bundler-runtime@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/webpack-bundler-runtime@npm:0.18.0" + dependencies: + "@module-federation/runtime": "npm:0.18.0" + "@module-federation/sdk": "npm:0.18.0" + checksum: 10/c80f26e02d497948a0864283bedf13118d5c188ac8165e71edce5da72776091db6da2dc5da5d47a53fbb6914bfbff1ddfce16a6b9c18485a9a41a04bc4060e34 + languageName: node + linkType: hard + "@napi-rs/wasm-runtime@npm:^1.0.1": version: 1.0.3 resolution: "@napi-rs/wasm-runtime@npm:1.0.3" @@ -2442,6 +2541,17 @@ __metadata: languageName: node linkType: hard +"@napi-rs/wasm-runtime@npm:^1.0.5": + version: 1.0.7 + resolution: "@napi-rs/wasm-runtime@npm:1.0.7" + dependencies: + "@emnapi/core": "npm:^1.5.0" + "@emnapi/runtime": "npm:^1.5.0" + "@tybys/wasm-util": "npm:^0.10.1" + checksum: 10/6bc32d32d486d07b83220a9b7b2b715e39acacbacef0011ebca05c00b41d80a0535123da10fea7a7d6d7e206712bb50dc50ac3cf88b770754d44378570fb5c05 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -2491,7 +2601,7 @@ __metadata: languageName: node linkType: hard -"@openremote/core@npm:1.9.0": +"@openremote/core@npm:1.9.0, @openremote/core@npm:^1.9.0": version: 1.9.0 resolution: "@openremote/core@npm:1.9.0" dependencies: @@ -2512,20 +2622,20 @@ __metadata: version: 0.0.0-use.local resolution: "@openremote/custom-app-react@workspace:ui/app/custom-app-react" dependencies: - "@openremote/core": "npm:^1.6.5" - "@openremote/model": "npm:^1.6.5" - "@openremote/or-mwc-components": "npm:^1.6.5" - "@rspack/cli": "npm:^1.1.8" - "@rspack/core": "npm:^1.1.8" - "@rspack/plugin-react-refresh": "npm:1.0.0" - "@types/react": "npm:^18.2.48" - "@types/react-dom": "npm:^18.2.18" - cross-env: "npm:^7.0.3" - react: "npm:^18.2.0" - react-dom: "npm:^18.2.0" - react-refresh: "npm:^0.14.0" + "@openremote/core": "npm:^1.9.0" + "@openremote/model": "npm:^1.9.0" + "@openremote/or-mwc-components": "npm:^1.9.0" + "@rspack/cli": "npm:^1.5.8" + "@rspack/core": "npm:^1.5.8" + "@rspack/plugin-react-refresh": "npm:1.5.2" + "@types/react": "npm:^19.2.2" + "@types/react-dom": "npm:^19.2.2" + cross-env: "npm:^10.1.0" + react: "npm:^19.2.0" + react-dom: "npm:^19.2.0" + react-refresh: "npm:^0.18.0" ts-node: "npm:^10.9.2" - typescript: "npm:^5.6.3" + typescript: "npm:^5.9.3" languageName: unknown linkType: soft @@ -2587,7 +2697,7 @@ __metadata: languageName: node linkType: hard -"@openremote/model@npm:1.9.0": +"@openremote/model@npm:1.9.0, @openremote/model@npm:^1.9.0": version: 1.9.0 resolution: "@openremote/model@npm:1.9.0" checksum: 10/77bb0b5649137ecd202aae1fe25bb9bcb660df5649e5544a53dcc7c74c8c3c26d63611212e47eaee3dc19fcdf6137928e7b3a21d32af87f11972cdc9518a38fe @@ -2851,7 +2961,7 @@ __metadata: languageName: node linkType: hard -"@openremote/or-mwc-components@npm:1.9.0": +"@openremote/or-mwc-components@npm:1.9.0, @openremote/or-mwc-components@npm:^1.9.0": version: 1.9.0 resolution: "@openremote/or-mwc-components@npm:1.9.0" dependencies: @@ -3068,6 +3178,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-darwin-arm64@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-darwin-arm64@npm:1.5.8" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rspack/binding-darwin-x64@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-darwin-x64@npm:1.4.11" @@ -3075,6 +3192,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-darwin-x64@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-darwin-x64@npm:1.5.8" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rspack/binding-linux-arm64-gnu@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-linux-arm64-gnu@npm:1.4.11" @@ -3082,6 +3206,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-linux-arm64-gnu@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-linux-arm64-gnu@npm:1.5.8" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rspack/binding-linux-arm64-musl@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-linux-arm64-musl@npm:1.4.11" @@ -3089,6 +3220,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-linux-arm64-musl@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-linux-arm64-musl@npm:1.5.8" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@rspack/binding-linux-x64-gnu@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-linux-x64-gnu@npm:1.4.11" @@ -3096,6 +3234,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-linux-x64-gnu@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-linux-x64-gnu@npm:1.5.8" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rspack/binding-linux-x64-musl@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-linux-x64-musl@npm:1.4.11" @@ -3103,6 +3248,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-linux-x64-musl@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-linux-x64-musl@npm:1.5.8" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rspack/binding-wasm32-wasi@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-wasm32-wasi@npm:1.4.11" @@ -3112,6 +3264,15 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-wasm32-wasi@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-wasm32-wasi@npm:1.5.8" + dependencies: + "@napi-rs/wasm-runtime": "npm:^1.0.5" + conditions: cpu=wasm32 + languageName: node + linkType: hard + "@rspack/binding-win32-arm64-msvc@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-win32-arm64-msvc@npm:1.4.11" @@ -3119,6 +3280,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-win32-arm64-msvc@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-win32-arm64-msvc@npm:1.5.8" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rspack/binding-win32-ia32-msvc@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-win32-ia32-msvc@npm:1.4.11" @@ -3126,6 +3294,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-win32-ia32-msvc@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-win32-ia32-msvc@npm:1.5.8" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rspack/binding-win32-x64-msvc@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-win32-x64-msvc@npm:1.4.11" @@ -3133,6 +3308,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-win32-x64-msvc@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-win32-x64-msvc@npm:1.5.8" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rspack/binding@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding@npm:1.4.11" @@ -3172,6 +3354,64 @@ __metadata: languageName: node linkType: hard +"@rspack/binding@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding@npm:1.5.8" + dependencies: + "@rspack/binding-darwin-arm64": "npm:1.5.8" + "@rspack/binding-darwin-x64": "npm:1.5.8" + "@rspack/binding-linux-arm64-gnu": "npm:1.5.8" + "@rspack/binding-linux-arm64-musl": "npm:1.5.8" + "@rspack/binding-linux-x64-gnu": "npm:1.5.8" + "@rspack/binding-linux-x64-musl": "npm:1.5.8" + "@rspack/binding-wasm32-wasi": "npm:1.5.8" + "@rspack/binding-win32-arm64-msvc": "npm:1.5.8" + "@rspack/binding-win32-ia32-msvc": "npm:1.5.8" + "@rspack/binding-win32-x64-msvc": "npm:1.5.8" + dependenciesMeta: + "@rspack/binding-darwin-arm64": + optional: true + "@rspack/binding-darwin-x64": + optional: true + "@rspack/binding-linux-arm64-gnu": + optional: true + "@rspack/binding-linux-arm64-musl": + optional: true + "@rspack/binding-linux-x64-gnu": + optional: true + "@rspack/binding-linux-x64-musl": + optional: true + "@rspack/binding-wasm32-wasi": + optional: true + "@rspack/binding-win32-arm64-msvc": + optional: true + "@rspack/binding-win32-ia32-msvc": + optional: true + "@rspack/binding-win32-x64-msvc": + optional: true + checksum: 10/8185f3d77f71f210f182799fd41edead264aa8819c354aa13744635869734722b056a958fd94f770c05cab2a501cb8f0c217626098f9b4ec82afed3c6c3b53f4 + languageName: node + linkType: hard + +"@rspack/cli@npm:^1.5.8": + version: 1.5.8 + resolution: "@rspack/cli@npm:1.5.8" + dependencies: + "@discoveryjs/json-ext": "npm:^0.5.7" + "@rspack/dev-server": "npm:~1.1.4" + colorette: "npm:2.0.20" + exit-hook: "npm:^4.0.0" + pirates: "npm:^4.0.7" + webpack-bundle-analyzer: "npm:4.10.2" + yargs: "npm:17.7.2" + peerDependencies: + "@rspack/core": ^1.0.0-alpha || ^1.x + bin: + rspack: bin/rspack.js + checksum: 10/13eb3d0c2d6f4b49777b5c1e1b07c37bcf72872f38d791e284c1fcd564ca43ab6f6aa2f481c4d11ea5e3a0ce3266df17fcecdcb4dd5bf73b5a8c12f2c0f06a15 + languageName: node + linkType: hard + "@rspack/cli@npm:~1.4.11": version: 1.4.11 resolution: "@rspack/cli@npm:1.4.11" @@ -3192,6 +3432,22 @@ __metadata: languageName: node linkType: hard +"@rspack/core@npm:^1.5.8": + version: 1.5.8 + resolution: "@rspack/core@npm:1.5.8" + dependencies: + "@module-federation/runtime-tools": "npm:0.18.0" + "@rspack/binding": "npm:1.5.8" + "@rspack/lite-tapable": "npm:1.0.1" + peerDependencies: + "@swc/helpers": ">=0.5.1" + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 10/269e691dbb83430179b89d9f10e115c5fb97cf54eb13c49ae6f6070468f3fcbee17ebe0968d8ab82dfdb7b5474e339f3fd9c945d5d20eb89333b53d8c1ad32cc + languageName: node + linkType: hard + "@rspack/core@npm:~1.4.11": version: 1.4.11 resolution: "@rspack/core@npm:1.4.11" @@ -3208,7 +3464,7 @@ __metadata: languageName: node linkType: hard -"@rspack/dev-server@npm:~1.1.3": +"@rspack/dev-server@npm:~1.1.3, @rspack/dev-server@npm:~1.1.4": version: 1.1.4 resolution: "@rspack/dev-server@npm:1.1.4" dependencies: @@ -3230,6 +3486,50 @@ __metadata: languageName: node linkType: hard +"@rspack/plugin-react-refresh@npm:1.5.2": + version: 1.5.2 + resolution: "@rspack/plugin-react-refresh@npm:1.5.2" + dependencies: + error-stack-parser: "npm:^2.1.4" + html-entities: "npm:^2.6.0" + peerDependencies: + react-refresh: ">=0.10.0 <1.0.0" + webpack-hot-middleware: 2.x + peerDependenciesMeta: + webpack-hot-middleware: + optional: true + checksum: 10/e1fdda9ab1d453f6718e5c57e67ec81048bf4b5d9534ccfe04a7354f0fe3309f914aa53592d2a7430e2a490319a27b34a6b01da8ad4e88b0053e5a8141ec1b6c + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 10/51fe47d55fe1b80ec35e6e5ed30a13665fd3a531945350aa74a14a1e82875fb60b350c2f2a5e72a64831b1b6bc02acb6760c30b3738b54954ec2dea82db7a267 + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 10/5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 10/19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10/202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.10.0": version: 0.10.0 resolution: "@tybys/wasm-util@npm:0.10.0" @@ -3239,6 +3539,15 @@ __metadata: languageName: node linkType: hard +"@tybys/wasm-util@npm:^0.10.1": + version: 0.10.1 + resolution: "@tybys/wasm-util@npm:0.10.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/7fe0d239397aebb002ac4855d30c197c06a05ea8df8511350a3a5b1abeefe26167c60eda8a5508337571161e4c4b53d7c1342296123f9607af8705369de9fa7f + languageName: node + linkType: hard + "@types/body-parser@npm:*": version: 1.19.5 resolution: "@types/body-parser@npm:1.19.5" @@ -3503,13 +3812,6 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*": - version: 15.7.15 - resolution: "@types/prop-types@npm:15.7.15" - checksum: 10/31aa2f59b28f24da6fb4f1d70807dae2aedfce090ec63eaf9ea01727a9533ef6eaf017de5bff99fbccad7d1c9e644f52c6c2ba30869465dd22b1a7221c29f356 - languageName: node - linkType: hard - "@types/qs@npm:*, @types/qs@npm:^6.9.7": version: 6.9.15 resolution: "@types/qs@npm:6.9.15" @@ -3524,22 +3826,21 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.2.18": - version: 18.3.7 - resolution: "@types/react-dom@npm:18.3.7" +"@types/react-dom@npm:^19.2.2": + version: 19.2.2 + resolution: "@types/react-dom@npm:19.2.2" peerDependencies: - "@types/react": ^18.0.0 - checksum: 10/317569219366d487a3103ba1e5e47154e95a002915fdcf73a44162c48fe49c3a57fcf7f57fc6979e70d447112681e6b13c6c3c1df289db8b544df4aab2d318f3 + "@types/react": ^19.2.0 + checksum: 10/73d5671e57ab73cb3f2acd7992faee8f90d5b4d155b972e76e91fa13e5871ebb5e224960b05039d57ea502cb3370746eb98beda5fa44e9712b4aee52653c237a languageName: node linkType: hard -"@types/react@npm:^18.2.48": - version: 18.3.23 - resolution: "@types/react@npm:18.3.23" +"@types/react@npm:^19.2.2": + version: 19.2.2 + resolution: "@types/react@npm:19.2.2" dependencies: - "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10/4b965dffe34a1f8aac8e2d7e976f113373f38134f9e37239f7e75d7ac6b3c2e1333a8df21febf1fe7749640f8de5708f7668cdfc70bffebda1cc4d3346724fd5 + checksum: 10/d6adf8fd4bb23a7e04da5700d96b15dc0f59653727a9c6e940c151d7232fa1dbbab98417d5ac830dcfb6cba3f206efbd4cd83647e6f9a688d7363a90e607f6bf languageName: node linkType: hard @@ -4985,6 +5286,19 @@ __metadata: languageName: node linkType: hard +"cross-env@npm:^10.1.0": + version: 10.1.0 + resolution: "cross-env@npm:10.1.0" + dependencies: + "@epic-web/invariant": "npm:^1.0.0" + cross-spawn: "npm:^7.0.6" + bin: + cross-env: dist/bin/cross-env.js + cross-env-shell: dist/bin/cross-env-shell.js + checksum: 10/0e5d8bdefbbcd000460b69755e0eeb22953510abac8375e4f8b638ff7c45406141acfd57b8a4c1d1cf0b5ea42f33451b302062fb9b34408753b4d465e901b845 + languageName: node + linkType: hard + "cross-env@npm:^7.0.3": version: 7.0.3 resolution: "cross-env@npm:7.0.3" @@ -5017,6 +5331,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10/0d52657d7ae36eb130999dffff1168ec348687b48dd38e2ff59992ed916c88d328cf1d07ff4a4a10bc78de5e1c23f04b306d569e42f7a2293915c081e4dfee86 + languageName: node + linkType: hard + "css-loader@npm:^6.5.1": version: 6.11.0 resolution: "css-loader@npm:6.11.0" @@ -5489,7 +5814,7 @@ __metadata: languageName: node linkType: hard -"error-stack-parser@npm:^2.0.6": +"error-stack-parser@npm:^2.1.4": version: 2.1.4 resolution: "error-stack-parser@npm:2.1.4" dependencies: @@ -6746,13 +7071,6 @@ __metadata: languageName: node linkType: hard -"html-entities@npm:^2.1.0": - version: 2.6.0 - resolution: "html-entities@npm:2.6.0" - checksum: 10/06d4e7a3ba6243bba558af176e56f85e09894b26d911bc1ef7b2b9b3f18b46604360805b32636f080e954778e9a34313d1982479a05a5aa49791afd6a4229346 - languageName: node - linkType: hard - "html-entities@npm:^2.3.2": version: 2.5.2 resolution: "html-entities@npm:2.5.2" @@ -6760,6 +7078,13 @@ __metadata: languageName: node linkType: hard +"html-entities@npm:^2.6.0": + version: 2.6.0 + resolution: "html-entities@npm:2.6.0" + checksum: 10/06d4e7a3ba6243bba558af176e56f85e09894b26d911bc1ef7b2b9b3f18b46604360805b32636f080e954778e9a34313d1982479a05a5aa49791afd6a4229346 + languageName: node + linkType: hard + "html-escaper@npm:^2.0.2": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -7239,15 +7564,6 @@ __metadata: languageName: node linkType: hard -"is-docker@npm:^3.0.0": - version: 3.0.0 - resolution: "is-docker@npm:3.0.0" - bin: - is-docker: cli.js - checksum: 10/b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 - languageName: node - linkType: hard - "is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": version: 0.1.1 resolution: "is-extendable@npm:0.1.1" @@ -7438,15 +7754,6 @@ __metadata: languageName: node linkType: hard -"is-wsl@npm:^3.1.0": - version: 3.1.0 - resolution: "is-wsl@npm:3.1.0" - dependencies: - is-inside-container: "npm:^1.0.0" - checksum: 10/f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 - languageName: node - linkType: hard - "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" @@ -7520,7 +7827,7 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": +"js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" checksum: 10/af37d0d913fb56aec6dc0074c163cc71cd23c0b8aad5c2350747b6721d37ba118af35abdd8b33c47ec2800de07dedb16a527ca9c530ee004093e04958bd0cbf2 @@ -7845,17 +8152,6 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.1.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: "npm:^3.0.0 || ^4.0.0" - bin: - loose-envify: cli.js - checksum: 10/6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 - languageName: node - linkType: hard - "lower-case@npm:^2.0.2": version: 2.0.2 resolution: "lower-case@npm:2.0.2" @@ -8817,6 +9113,13 @@ __metadata: languageName: node linkType: hard +"pirates@npm:^4.0.7": + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 10/2427f371366081ae42feb58214f04805d6b41d6b84d74480ebcc9e0ddbd7105a139f7c653daeaf83ad8a1a77214cf07f64178e76de048128fec501eab3305a96 + languageName: node + linkType: hard + "pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -9083,31 +9386,28 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.2.0": - version: 18.3.1 - resolution: "react-dom@npm:18.3.1" +"react-dom@npm:^19.2.0": + version: 19.2.0 + resolution: "react-dom@npm:19.2.0" dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.2" + scheduler: "npm:^0.27.0" peerDependencies: - react: ^18.3.1 - checksum: 10/3f4b73a3aa083091173b29812b10394dd06f4ac06aff410b74702cfb3aa29d7b0ced208aab92d5272919b612e5cda21aeb1d54191848cf6e46e9e354f3541f81 + react: ^19.2.0 + checksum: 10/3dbba071b9b1e7a19eae55f05c100f6b44f88c0aee72397d719ae338248ca66ed5028e6964c1c14870cc3e1abcecc91b22baba6dc2072f819dea81a9fd72f2fd languageName: node linkType: hard -"react-refresh@npm:^0.14.0": - version: 0.14.2 - resolution: "react-refresh@npm:0.14.2" - checksum: 10/512abf97271ab8623486061be04b608c39d932e3709f9af1720b41573415fa4993d0009fa5138b6705b60a98f4102f744d4e26c952b14f41a0e455521c6be4cc +"react-refresh@npm:^0.18.0": + version: 0.18.0 + resolution: "react-refresh@npm:0.18.0" + checksum: 10/504c331c19776bf8320c23bad7f80b3a28de03301ed7523b0dd21d3f02bf2b53bbdd5aa52469b187bc90f358614b2ba303c088a0765c95f4f0a68c43a7d67b1d languageName: node linkType: hard -"react@npm:^18.2.0": - version: 18.3.1 - resolution: "react@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10/261137d3f3993eaa2368a83110466fc0e558bc2c7f7ae7ca52d94f03aac945f45146bd85e5f481044db1758a1dbb57879e2fcdd33924e2dde1bdc550ce73f7bf +"react@npm:^19.2.0": + version: 19.2.0 + resolution: "react@npm:19.2.0" + checksum: 10/e13bcdb8e994c3cfa922743cb75ca8deb60531bf02f584d2d8dab940a8132ce8a2e6ef16f8ed7f372b4072e7a7eeff589b2812dabbedfa73e6e46201dac8a9d0 languageName: node linkType: hard @@ -9535,12 +9835,10 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.2": - version: 0.23.2 - resolution: "scheduler@npm:0.23.2" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10/e8d68b89d18d5b028223edf090092846868a765a591944760942b77ea1f69b17235f7e956696efbb62c8130ab90af7e0949bfb8eba7896335507317236966bc9 +"scheduler@npm:^0.27.0": + version: 0.27.0 + resolution: "scheduler@npm:0.27.0" + checksum: 10/eab3c3a8373195173e59c147224fc30dabe6dd453f248f5e610e8458512a5a2ee3a06465dc400ebfe6d35c9f5b7f3bb6b2e41c88c86fd177c25a73e7286a1e06 languageName: node linkType: hard @@ -10629,13 +10927,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.6.3": - version: 5.8.3 - resolution: "typescript@npm:5.8.3" +"typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/65c40944c51b513b0172c6710ee62e951b70af6f75d5a5da745cb7fab132c09ae27ffdf7838996e3ed603bb015dadd099006658046941bd0ba30340cc563ae92 + checksum: 10/c089d9d3da2729fd4ac517f9b0e0485914c4b3c26f80dc0cffcb5de1719a17951e92425d55db59515c1a7ddab65808466debb864d0d56dcf43f27007d0709594 languageName: node linkType: hard @@ -10649,13 +10947,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": - version: 5.8.3 - resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=d69c25" +"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/98470634034ec37fd9ea61cc82dcf9a27950d0117a4646146b767d085a2ec14b137aae9642a83d1c62732d7fdcdac19bb6288b0bb468a72f7a06ae4e1d2c72c9 + checksum: 10/696e1b017bc2635f4e0c94eb4435357701008e2f272f553d06e35b494b8ddc60aa221145e286c28ace0c89ee32827a28c2040e3a69bdc108b1a5dc8fb40b72e3 languageName: node linkType: hard From 5be0abbb645bec93a6d81e4ecfe752f1d77e7c44 Mon Sep 17 00:00:00 2001 From: MartinaeyNL Date: Fri, 31 Oct 2025 09:42:04 +0100 Subject: [PATCH 8/8] Cleanup and rename to custom-react --- ui/app/README.md | 2 +- ui/app/custom-app-react/src/App.css | 41 ----------- ui/app/custom-app-react/src/App.tsx | 52 -------------- ui/app/custom-app-react/src/assets/react.svg | 1 - ui/app/custom-app-react/src/index.css | 70 ------------------- .../.gitignore | 0 .../build.gradle | 0 .../index.html | 0 .../package.json | 8 +-- .../rspack.config.ts | 23 +++--- ui/app/custom-react/src/App.css | 10 +++ ui/app/custom-react/src/App.tsx | 23 ++++++ ui/app/custom-react/src/assets/openremote.svg | 16 +++++ ui/app/custom-react/src/index.css | 31 ++++++++ .../src/main.tsx | 21 +++--- .../src/react-env.d.ts | 0 .../tsconfig.json | 0 yarn.lock | 44 +----------- 18 files changed, 108 insertions(+), 234 deletions(-) delete mode 100644 ui/app/custom-app-react/src/App.css delete mode 100644 ui/app/custom-app-react/src/App.tsx delete mode 100644 ui/app/custom-app-react/src/assets/react.svg delete mode 100644 ui/app/custom-app-react/src/index.css rename ui/app/{custom-app-react => custom-react}/.gitignore (100%) rename ui/app/{custom-app-react => custom-react}/build.gradle (100%) rename ui/app/{custom-app-react => custom-react}/index.html (100%) rename ui/app/{custom-app-react => custom-react}/package.json (67%) rename ui/app/{custom-app-react => custom-react}/rspack.config.ts (78%) create mode 100644 ui/app/custom-react/src/App.css create mode 100644 ui/app/custom-react/src/App.tsx create mode 100644 ui/app/custom-react/src/assets/openremote.svg create mode 100644 ui/app/custom-react/src/index.css rename ui/app/{custom-app-react => custom-react}/src/main.tsx (65%) rename ui/app/{custom-app-react => custom-react}/src/react-env.d.ts (100%) rename ui/app/{custom-app-react => custom-react}/tsconfig.json (100%) diff --git a/ui/app/README.md b/ui/app/README.md index 8e1ac569c..774b731bd 100644 --- a/ui/app/README.md +++ b/ui/app/README.md @@ -17,6 +17,6 @@ This is an example web application built with [Lit Web Components](https://lit.d Apps in our main OpenRemote [repository](https://github.com/openremote/openremote) are built with these technologies as well. It can be used as a template to add your own pages on top of it. -### /custom-app-react +### /custom-react This is an example web application built with [React 19](https://react.dev) and [RSPack](https://rspack.rs). *(more information soon)* \ No newline at end of file diff --git a/ui/app/custom-app-react/src/App.css b/ui/app/custom-app-react/src/App.css deleted file mode 100644 index 1b83399ee..000000000 --- a/ui/app/custom-app-react/src/App.css +++ /dev/null @@ -1,41 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a > .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/ui/app/custom-app-react/src/App.tsx b/ui/app/custom-app-react/src/App.tsx deleted file mode 100644 index 2d8cb18a6..000000000 --- a/ui/app/custom-app-react/src/App.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React, {useEffect, useRef, useState} from "react"; -import reactLogo from "./assets/react.svg"; -import {InputType, OrMwcInput} from "@openremote/or-mwc-components/or-mwc-input"; -import "./App.css"; - -/** - * In React, for web components to be recognized, it's common to add each HTML tag in the JSX IntrinsicElements interface. - * Be aware; your IDE might still not understand these web components correctly. - */ -declare module "react/jsx-runtime" { - namespace JSX { - interface IntrinsicElements { - "or-mwc-input": OrMwcInput - } - } -} - -function App() { - const [count, setCount] = useState(0); - const buttonRef = useRef(null); - const handleButtonClick = () => setCount(c => c + 1); - - useEffect(() => { - (buttonRef.current as any)?.addEventListener("or-mwc-input-changed", handleButtonClick); - return () => (buttonRef.current as any)?.removeEventListener("or-mwc-input-changed", handleButtonClick); - }, []); - - return ( -
-
- - React logo - -
-

Rspack + React + TypeScript

-
- -

- Edit src/App.tsx and save to test HMR -

- -
-

- Click on the React logo to learn more -

-
- ); -} - -export default App; diff --git a/ui/app/custom-app-react/src/assets/react.svg b/ui/app/custom-app-react/src/assets/react.svg deleted file mode 100644 index 6c87de9bb..000000000 --- a/ui/app/custom-app-react/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui/app/custom-app-react/src/index.css b/ui/app/custom-app-react/src/index.css deleted file mode 100644 index 917888c1d..000000000 --- a/ui/app/custom-app-react/src/index.css +++ /dev/null @@ -1,70 +0,0 @@ -:root { - font-family: Inter, Avenir, Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/ui/app/custom-app-react/.gitignore b/ui/app/custom-react/.gitignore similarity index 100% rename from ui/app/custom-app-react/.gitignore rename to ui/app/custom-react/.gitignore diff --git a/ui/app/custom-app-react/build.gradle b/ui/app/custom-react/build.gradle similarity index 100% rename from ui/app/custom-app-react/build.gradle rename to ui/app/custom-react/build.gradle diff --git a/ui/app/custom-app-react/index.html b/ui/app/custom-react/index.html similarity index 100% rename from ui/app/custom-app-react/index.html rename to ui/app/custom-react/index.html diff --git a/ui/app/custom-app-react/package.json b/ui/app/custom-react/package.json similarity index 67% rename from ui/app/custom-app-react/package.json rename to ui/app/custom-react/package.json index 93e47a13f..b0a9cda80 100644 --- a/ui/app/custom-app-react/package.json +++ b/ui/app/custom-react/package.json @@ -1,13 +1,14 @@ { - "name": "@openremote/custom-app-react", + "name": "@openremote/custom-react", "version": "1.0.0", "description": "OpenRemote Custom App using React", "author": "OpenRemote", "license": "AGPL-3.0-or-later", "private": true, "scripts": { - "build": "cross-env NODE_ENV=production rspack build", - "serve": "cross-env NODE_ENV=development rspack serve" + "clean": "npx tsc -b --clean && npx shx rm -rf dist", + "build": "npx cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=4096 rspack build", + "serve": "npx cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 rspack serve" }, "dependencies": { "@openremote/core": "^1.9.0", @@ -19,7 +20,6 @@ "devDependencies": { "@rspack/cli": "^1.5.8", "@rspack/core": "^1.5.8", - "@rspack/plugin-react-refresh": "1.5.2", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", "cross-env": "^10.1.0", diff --git a/ui/app/custom-app-react/rspack.config.ts b/ui/app/custom-react/rspack.config.ts similarity index 78% rename from ui/app/custom-app-react/rspack.config.ts rename to ui/app/custom-react/rspack.config.ts index 250e1bc0e..596b7ec43 100644 --- a/ui/app/custom-app-react/rspack.config.ts +++ b/ui/app/custom-react/rspack.config.ts @@ -1,13 +1,11 @@ import { defineConfig } from "@rspack/cli"; import { rspack } from "@rspack/core"; -import ReactRefreshPlugin from "@rspack/plugin-react-refresh"; const isDev = process.env.NODE_ENV === "development"; // Target browsers, see: https://github.com/browserslist/browserslist const targets = ["chrome >= 87", "edge >= 88", "firefox >= 78", "safari >= 14"]; - export default defineConfig({ context: __dirname, devServer: { @@ -42,16 +40,8 @@ export default defineConfig({ parser: { syntax: "typescript", tsx: true - }, - /*transform: { - react: { - runtime: "automatic", - development: isDev, - refresh: isDev - } - }*/ - }, - /*env: { targets }*/ + } + } } } ] @@ -59,10 +49,13 @@ export default defineConfig({ ] }, plugins: [ - isDev && new ReactRefreshPlugin(), new rspack.HtmlRspackPlugin({ template: "./index.html" - }) + }), + // Define MANAGER_URL as a global variable + new rspack.DefinePlugin({ + MANAGER_URL: JSON.stringify(process.env.MANAGER_URL ?? (isDev ? "http://localhost:8080" : undefined)) + }) ], optimization: { minimizer: [ @@ -73,7 +66,7 @@ export default defineConfig({ ] }, output: { - publicPath: isDev ? "/custom/" : "/", + publicPath: isDev ? "/custom-react/" : "/", }, experiments: { css: true diff --git a/ui/app/custom-react/src/App.css b/ui/app/custom-react/src/App.css new file mode 100644 index 000000000..6f883249c --- /dev/null +++ b/ui/app/custom-react/src/App.css @@ -0,0 +1,10 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 12em; +} diff --git a/ui/app/custom-react/src/App.tsx b/ui/app/custom-react/src/App.tsx new file mode 100644 index 000000000..e97bd4968 --- /dev/null +++ b/ui/app/custom-react/src/App.tsx @@ -0,0 +1,23 @@ +import React from "react"; +import openremoteLogo from "./assets/openremote.svg"; +import {InputType} from "@openremote/or-mwc-components/or-mwc-input"; +import type {} from "@openremote/or-mwc-components/jsx"; +import "./App.css"; + +function App() { + return ( +
+ +

"A React template for your custom app."

+
+ + + +
+
+ ); +} + +export default App; \ No newline at end of file diff --git a/ui/app/custom-react/src/assets/openremote.svg b/ui/app/custom-react/src/assets/openremote.svg new file mode 100644 index 000000000..8bed2c961 --- /dev/null +++ b/ui/app/custom-react/src/assets/openremote.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ui/app/custom-react/src/index.css b/ui/app/custom-react/src/index.css new file mode 100644 index 000000000..c5795d5bb --- /dev/null +++ b/ui/app/custom-react/src/index.css @@ -0,0 +1,31 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } +} diff --git a/ui/app/custom-app-react/src/main.tsx b/ui/app/custom-react/src/main.tsx similarity index 65% rename from ui/app/custom-app-react/src/main.tsx rename to ui/app/custom-react/src/main.tsx index 5a21dc8d8..c905efc99 100644 --- a/ui/app/custom-app-react/src/main.tsx +++ b/ui/app/custom-react/src/main.tsx @@ -5,15 +5,17 @@ import {manager} from "@openremote/core"; import {ManagerConfig} from "@openremote/model"; import "./index.css"; +declare const MANAGER_URL: string | undefined; + /** * Define the Manager configuration to talk with OpenRemote. * For example, defining the realm and URL to communicate with. (these will be consumed with HTTP API calls for example) * We also enable autoLogin to prompt a Keycloak login before the app appears. */ const managerConfig: ManagerConfig = { - realm: "master", - managerUrl: "http://localhost:8080", - autoLogin: true + realm: "master", + managerUrl: MANAGER_URL ?? "", + autoLogin: true }; /** @@ -22,9 +24,12 @@ const managerConfig: ManagerConfig = { */ manager.init(managerConfig).then(() => { - ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( - - - - ); + /** + * Render your React application to the DOM. + */ + ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( + + + + ); }); diff --git a/ui/app/custom-app-react/src/react-env.d.ts b/ui/app/custom-react/src/react-env.d.ts similarity index 100% rename from ui/app/custom-app-react/src/react-env.d.ts rename to ui/app/custom-react/src/react-env.d.ts diff --git a/ui/app/custom-app-react/tsconfig.json b/ui/app/custom-react/tsconfig.json similarity index 100% rename from ui/app/custom-app-react/tsconfig.json rename to ui/app/custom-react/tsconfig.json diff --git a/yarn.lock b/yarn.lock index 6192550c7..846dacca4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2618,16 +2618,15 @@ __metadata: languageName: node linkType: hard -"@openremote/custom-app-react@workspace:ui/app/custom-app-react": +"@openremote/custom-react@workspace:ui/app/custom-react": version: 0.0.0-use.local - resolution: "@openremote/custom-app-react@workspace:ui/app/custom-app-react" + resolution: "@openremote/custom-react@workspace:ui/app/custom-react" dependencies: "@openremote/core": "npm:^1.9.0" "@openremote/model": "npm:^1.9.0" "@openremote/or-mwc-components": "npm:^1.9.0" "@rspack/cli": "npm:^1.5.8" "@rspack/core": "npm:^1.5.8" - "@rspack/plugin-react-refresh": "npm:1.5.2" "@types/react": "npm:^19.2.2" "@types/react-dom": "npm:^19.2.2" cross-env: "npm:^10.1.0" @@ -3486,22 +3485,6 @@ __metadata: languageName: node linkType: hard -"@rspack/plugin-react-refresh@npm:1.5.2": - version: 1.5.2 - resolution: "@rspack/plugin-react-refresh@npm:1.5.2" - dependencies: - error-stack-parser: "npm:^2.1.4" - html-entities: "npm:^2.6.0" - peerDependencies: - react-refresh: ">=0.10.0 <1.0.0" - webpack-hot-middleware: 2.x - peerDependenciesMeta: - webpack-hot-middleware: - optional: true - checksum: 10/e1fdda9ab1d453f6718e5c57e67ec81048bf4b5d9534ccfe04a7354f0fe3309f914aa53592d2a7430e2a490319a27b34a6b01da8ad4e88b0053e5a8141ec1b6c - languageName: node - linkType: hard - "@tsconfig/node10@npm:^1.0.7": version: 1.0.11 resolution: "@tsconfig/node10@npm:1.0.11" @@ -5814,15 +5797,6 @@ __metadata: languageName: node linkType: hard -"error-stack-parser@npm:^2.1.4": - version: 2.1.4 - resolution: "error-stack-parser@npm:2.1.4" - dependencies: - stackframe: "npm:^1.3.4" - checksum: 10/23db33135bfc6ba701e5eee45e1bb9bd2fe33c5d4f9927440d9a499c7ac538f91f455fcd878611361269893c56734419252c40d8105eb3b023cf8b0fc2ebb64e - languageName: node - linkType: hard - "es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" @@ -7078,13 +7052,6 @@ __metadata: languageName: node linkType: hard -"html-entities@npm:^2.6.0": - version: 2.6.0 - resolution: "html-entities@npm:2.6.0" - checksum: 10/06d4e7a3ba6243bba558af176e56f85e09894b26d911bc1ef7b2b9b3f18b46604360805b32636f080e954778e9a34313d1982479a05a5aa49791afd6a4229346 - languageName: node - linkType: hard - "html-escaper@npm:^2.0.2": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -10391,13 +10358,6 @@ __metadata: languageName: node linkType: hard -"stackframe@npm:^1.3.4": - version: 1.3.4 - resolution: "stackframe@npm:1.3.4" - checksum: 10/29ca71c1fd17974c1c178df0236b1407bc65f6ea389cc43dec000def6e42ff548d4453de9a85b76469e2ae2b2abdd802c6b6f3db947c05794efbd740d1cf4121 - languageName: node - linkType: hard - "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1"