From c09f4ddca0aa9518fc0739c523e36acfe8739286 Mon Sep 17 00:00:00 2001 From: Ray Cashmore Date: Thu, 29 May 2025 15:16:56 +1000 Subject: [PATCH 1/8] workspace-platform-starter wrapper initial commit --- .../workspace-platform-starter/.gitignore | 24 + .../workspace-platform-starter/README.md | 1 + .../eslint.config.js | 28 + .../workspace-platform-starter/index.html | 13 + .../package-lock.json | 3366 +++++++++++++++++ .../workspace-platform-starter/package.json | 29 + .../public/vite.svg | 1 + .../workspace-platform-starter/src/App.css | 42 + .../workspace-platform-starter/src/App.tsx | 35 + .../src/assets/react.svg | 1 + .../workspace-platform-starter/src/index.css | 68 + .../workspace-platform-starter/src/main.tsx | 10 + .../src/vite-env.d.ts | 1 + .../tsconfig.app.json | 27 + .../workspace-platform-starter/tsconfig.json | 7 + .../tsconfig.node.json | 25 + .../workspace-platform-starter/vite.config.ts | 7 + 17 files changed, 3685 insertions(+) create mode 100644 frameworks/react/workspace-platform-starter/.gitignore create mode 100644 frameworks/react/workspace-platform-starter/README.md create mode 100644 frameworks/react/workspace-platform-starter/eslint.config.js create mode 100644 frameworks/react/workspace-platform-starter/index.html create mode 100644 frameworks/react/workspace-platform-starter/package-lock.json create mode 100644 frameworks/react/workspace-platform-starter/package.json create mode 100644 frameworks/react/workspace-platform-starter/public/vite.svg create mode 100644 frameworks/react/workspace-platform-starter/src/App.css create mode 100644 frameworks/react/workspace-platform-starter/src/App.tsx create mode 100644 frameworks/react/workspace-platform-starter/src/assets/react.svg create mode 100644 frameworks/react/workspace-platform-starter/src/index.css create mode 100644 frameworks/react/workspace-platform-starter/src/main.tsx create mode 100644 frameworks/react/workspace-platform-starter/src/vite-env.d.ts create mode 100644 frameworks/react/workspace-platform-starter/tsconfig.app.json create mode 100644 frameworks/react/workspace-platform-starter/tsconfig.json create mode 100644 frameworks/react/workspace-platform-starter/tsconfig.node.json create mode 100644 frameworks/react/workspace-platform-starter/vite.config.ts diff --git a/frameworks/react/workspace-platform-starter/.gitignore b/frameworks/react/workspace-platform-starter/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/frameworks/react/workspace-platform-starter/README.md b/frameworks/react/workspace-platform-starter/README.md new file mode 100644 index 0000000..7f53a41 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/README.md @@ -0,0 +1 @@ +# React wrapper for Workspace Platform Starter diff --git a/frameworks/react/workspace-platform-starter/eslint.config.js b/frameworks/react/workspace-platform-starter/eslint.config.js new file mode 100644 index 0000000..092408a --- /dev/null +++ b/frameworks/react/workspace-platform-starter/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/frameworks/react/workspace-platform-starter/index.html b/frameworks/react/workspace-platform-starter/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/frameworks/react/workspace-platform-starter/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/frameworks/react/workspace-platform-starter/package-lock.json b/frameworks/react/workspace-platform-starter/package-lock.json new file mode 100644 index 0000000..3bdb1f6 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/package-lock.json @@ -0,0 +1,3366 @@ +{ + "name": "workspace-platform-starter", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "workspace-platform-starter", + "version": "0.0.0", + "dependencies": { + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@eslint/js": "^9.25.0", + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.2", + "@vitejs/plugin-react": "^4.4.1", + "eslint": "^9.25.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^16.0.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.30.1", + "vite": "^6.3.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.3.tgz", + "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.3.tgz", + "integrity": "sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.3", + "@babel/parser": "^7.27.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.3", + "@babel/types": "^7.27.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz", + "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.3", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.3.tgz", + "integrity": "sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.3.tgz", + "integrity": "sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.3.tgz", + "integrity": "sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", + "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz", + "integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", + "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", + "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", + "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", + "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", + "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", + "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", + "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", + "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", + "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", + "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", + "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", + "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", + "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", + "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.6.tgz", + "integrity": "sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.5.tgz", + "integrity": "sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz", + "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/type-utils": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.33.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz", + "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz", + "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.0", + "@typescript-eslint/types": "^8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz", + "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz", + "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz", + "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz", + "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz", + "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.33.0", + "@typescript-eslint/tsconfig-utils": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz", + "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz", + "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.0.tgz", + "integrity": "sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.10", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@rolldown/pluginutils": "1.0.0-beta.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001720", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", + "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.161", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", + "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", + "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", + "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.41.1", + "@rollup/rollup-android-arm64": "4.41.1", + "@rollup/rollup-darwin-arm64": "4.41.1", + "@rollup/rollup-darwin-x64": "4.41.1", + "@rollup/rollup-freebsd-arm64": "4.41.1", + "@rollup/rollup-freebsd-x64": "4.41.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", + "@rollup/rollup-linux-arm-musleabihf": "4.41.1", + "@rollup/rollup-linux-arm64-gnu": "4.41.1", + "@rollup/rollup-linux-arm64-musl": "4.41.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-musl": "4.41.1", + "@rollup/rollup-linux-s390x-gnu": "4.41.1", + "@rollup/rollup-linux-x64-gnu": "4.41.1", + "@rollup/rollup-linux-x64-musl": "4.41.1", + "@rollup/rollup-win32-arm64-msvc": "4.41.1", + "@rollup/rollup-win32-ia32-msvc": "4.41.1", + "@rollup/rollup-win32-x64-msvc": "4.41.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", + "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.0.tgz", + "integrity": "sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.33.0", + "@typescript-eslint/parser": "8.33.0", + "@typescript-eslint/utils": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", + "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frameworks/react/workspace-platform-starter/package.json b/frameworks/react/workspace-platform-starter/package.json new file mode 100644 index 0000000..d9d6760 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/package.json @@ -0,0 +1,29 @@ +{ + "name": "workspace-platform-starter", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@eslint/js": "^9.25.0", + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.2", + "@vitejs/plugin-react": "^4.4.1", + "eslint": "^9.25.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^16.0.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.30.1", + "vite": "^6.3.5" + } +} diff --git a/frameworks/react/workspace-platform-starter/public/vite.svg b/frameworks/react/workspace-platform-starter/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/frameworks/react/workspace-platform-starter/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frameworks/react/workspace-platform-starter/src/App.css b/frameworks/react/workspace-platform-starter/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.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:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/frameworks/react/workspace-platform-starter/src/App.tsx b/frameworks/react/workspace-platform-starter/src/App.tsx new file mode 100644 index 0000000..3d7ded3 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/App.tsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> +
+ + Vite logo + + + React logo + +
+

Vite + React

+
+ +

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

+
+

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

+ + ) +} + +export default App diff --git a/frameworks/react/workspace-platform-starter/src/assets/react.svg b/frameworks/react/workspace-platform-starter/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frameworks/react/workspace-platform-starter/src/index.css b/frameworks/react/workspace-platform-starter/src/index.css new file mode 100644 index 0000000..08a3ac9 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + 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; +} + +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/frameworks/react/workspace-platform-starter/src/main.tsx b/frameworks/react/workspace-platform-starter/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/frameworks/react/workspace-platform-starter/src/vite-env.d.ts b/frameworks/react/workspace-platform-starter/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frameworks/react/workspace-platform-starter/tsconfig.app.json b/frameworks/react/workspace-platform-starter/tsconfig.app.json new file mode 100644 index 0000000..c9ccbd4 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/tsconfig.app.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/frameworks/react/workspace-platform-starter/tsconfig.json b/frameworks/react/workspace-platform-starter/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/frameworks/react/workspace-platform-starter/tsconfig.node.json b/frameworks/react/workspace-platform-starter/tsconfig.node.json new file mode 100644 index 0000000..9728af2 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/tsconfig.node.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/frameworks/react/workspace-platform-starter/vite.config.ts b/frameworks/react/workspace-platform-starter/vite.config.ts new file mode 100644 index 0000000..8b0f57b --- /dev/null +++ b/frameworks/react/workspace-platform-starter/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From e4db2d9bb957d25b0bb5cc35b04d7473df1ff718 Mon Sep 17 00:00:00 2001 From: Ray Cashmore Date: Thu, 29 May 2025 16:56:56 +1000 Subject: [PATCH 2/8] workspace-platform-starter wrapper boilerplate --- .../workspace-platform-starter/README.md | 13 +- .../eslint.config.js | 50 +- .../openfin/.eslintignore | 2 + .../openfin/.gitignore | 2 + .../package-lock.json | 1091 +++++++++- .../workspace-platform-starter/package.json | 8 + .../workspace-platform-starter/public/app.css | 945 +++++++++ .../public/apps.json | 71 + .../public/favicon.ico | Bin 0 -> 15406 bytes .../public/manifest.fin.json | 1887 +++++++++++++++++ .../public/splash.html | 114 + .../public/vite.svg | 1 - .../workspace-platform-starter/src/App.tsx | 35 - .../src/Provider.tsx | 7 + .../src/hooks/useOpenFin.tsx | 71 + .../workspace-platform-starter/src/main.tsx | 4 +- .../src/types/fdc3.d.ts | 5 + .../src/types/fin.d.ts | 5 + .../tsconfig.app.json | 19 +- .../workspace-platform-starter/tsconfig.json | 5 +- .../tsconfig.node.json | 2 +- .../workspace-platform-starter/vite.config.ts | 16 +- 22 files changed, 4201 insertions(+), 152 deletions(-) create mode 100644 frameworks/react/workspace-platform-starter/openfin/.eslintignore create mode 100644 frameworks/react/workspace-platform-starter/openfin/.gitignore create mode 100644 frameworks/react/workspace-platform-starter/public/app.css create mode 100644 frameworks/react/workspace-platform-starter/public/apps.json create mode 100644 frameworks/react/workspace-platform-starter/public/favicon.ico create mode 100644 frameworks/react/workspace-platform-starter/public/manifest.fin.json create mode 100644 frameworks/react/workspace-platform-starter/public/splash.html delete mode 100644 frameworks/react/workspace-platform-starter/public/vite.svg delete mode 100644 frameworks/react/workspace-platform-starter/src/App.tsx create mode 100644 frameworks/react/workspace-platform-starter/src/Provider.tsx create mode 100644 frameworks/react/workspace-platform-starter/src/hooks/useOpenFin.tsx create mode 100644 frameworks/react/workspace-platform-starter/src/types/fdc3.d.ts create mode 100644 frameworks/react/workspace-platform-starter/src/types/fin.d.ts diff --git a/frameworks/react/workspace-platform-starter/README.md b/frameworks/react/workspace-platform-starter/README.md index 7f53a41..500a854 100644 --- a/frameworks/react/workspace-platform-starter/README.md +++ b/frameworks/react/workspace-platform-starter/README.md @@ -1 +1,12 @@ -# React wrapper for Workspace Platform Starter +# React Wrapper for Workspace Platform Starter + +## Getting started + +### Development + +``` +npm install +npm run dev +``` + +Launch [fin://localhost:5173/manifest.fin.json](fin://localhost:5173/manifest.fin.json) diff --git a/frameworks/react/workspace-platform-starter/eslint.config.js b/frameworks/react/workspace-platform-starter/eslint.config.js index 092408a..149cac8 100644 --- a/frameworks/react/workspace-platform-starter/eslint.config.js +++ b/frameworks/react/workspace-platform-starter/eslint.config.js @@ -1,28 +1,26 @@ -import js from '@eslint/js' -import globals from 'globals' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' -import tseslint from 'typescript-eslint' +import js from "@eslint/js"; +import globals from "globals"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import tseslint from "typescript-eslint"; export default tseslint.config( - { ignores: ['dist'] }, - { - extends: [js.configs.recommended, ...tseslint.configs.recommended], - files: ['**/*.{ts,tsx}'], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - }, - plugins: { - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, - }, - rules: { - ...reactHooks.configs.recommended.rules, - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - }, - }, -) + { ignores: ["dist"] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ["**/*.{ts,tsx}"], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + "react-hooks": reactHooks, + "react-refresh": reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + "react-refresh/only-export-components": ["warn", { allowConstantExport: true }], + }, + ignorePatterns: ["openfin/framework/**"], + }, +); diff --git a/frameworks/react/workspace-platform-starter/openfin/.eslintignore b/frameworks/react/workspace-platform-starter/openfin/.eslintignore new file mode 100644 index 0000000..76bd590 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/openfin/.eslintignore @@ -0,0 +1,2 @@ +framework/ +modules/ diff --git a/frameworks/react/workspace-platform-starter/openfin/.gitignore b/frameworks/react/workspace-platform-starter/openfin/.gitignore new file mode 100644 index 0000000..76bd590 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/openfin/.gitignore @@ -0,0 +1,2 @@ +framework/ +modules/ diff --git a/frameworks/react/workspace-platform-starter/package-lock.json b/frameworks/react/workspace-platform-starter/package-lock.json index 3bdb1f6..8507482 100644 --- a/frameworks/react/workspace-platform-starter/package-lock.json +++ b/frameworks/react/workspace-platform-starter/package-lock.json @@ -8,11 +8,19 @@ "name": "workspace-platform-starter", "version": "0.0.0", "dependencies": { + "@finos/fdc3": "2.0.3", + "@openfin/cloud-interop": "0.41.131", + "@openfin/openid-connect": "^1.0.0", + "@openfin/snap-sdk": "1.3.0", + "@openfin/workspace": "21.0.12", + "@openfin/workspace-platform": "21.0.12", "react": "^19.1.0", "react-dom": "^19.1.0" }, "devDependencies": { "@eslint/js": "^9.25.0", + "@openfin/core": "41.102.1", + "@openfin/node-adapter": "41.102.1", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", "@vitejs/plugin-react": "^4.4.1", @@ -29,7 +37,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -43,7 +50,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -58,7 +64,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.3.tgz", "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -68,7 +73,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.3.tgz", "integrity": "sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==", - "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -99,7 +103,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz", "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.27.3", @@ -112,11 +115,22 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", @@ -133,7 +147,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -147,7 +160,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -165,7 +177,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -175,7 +186,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -185,7 +195,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -195,7 +204,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -205,7 +213,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.3.tgz", "integrity": "sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", @@ -219,7 +226,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.3.tgz", "integrity": "sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -231,6 +237,21 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", @@ -263,11 +284,19 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.3.tgz", + "integrity": "sha512-7EYtGezsdiDMyY80+65EzwiGmcJqpmcZCojSXaRgdrBaGtWTgDZKq69cPIVped6MkIM78cTQ2GOiEYjwOlG4xw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -282,7 +311,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.3.tgz", "integrity": "sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -301,7 +329,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -311,7 +338,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -321,6 +347,33 @@ "node": ">=6.9.0" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "license": "MIT" + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", @@ -900,6 +953,12 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@finos/fdc3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@finos/fdc3/-/fdc3-2.0.3.tgz", + "integrity": "sha512-sq+iGbjU6yRl7xHhp62nB1tV4biFaHZgUAInzPTJvzXWl9xjZMmXvvbeZW6WGZaCSvjQhJPSrmWs+4z2c73T+g==", + "license": "Apache-2.0" + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -970,7 +1029,6 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -985,7 +1043,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -995,7 +1052,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1005,14 +1061,12 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1057,6 +1111,128 @@ "node": ">= 8" } }, + "node_modules/@openfin/cloud-interop": { + "version": "0.41.131", + "resolved": "https://registry.npmjs.org/@openfin/cloud-interop/-/cloud-interop-0.41.131.tgz", + "integrity": "sha512-XWklv0tg1AVhTIKFjmpPbDSmYKvjvGO0aa3LZ8sg2kiQHl3TAx3k9k/yVpNW6wBHe9BEJQSMWR/6RJRDzTKkoA==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@openfin/cloud-interop-core-api": "0.0.1-alpha.05c8c77" + }, + "peerDependencies": { + "@openfin/core": "41.102.1" + } + }, + "node_modules/@openfin/cloud-interop-core-api": { + "version": "0.0.1-alpha.05c8c77", + "resolved": "https://registry.npmjs.org/@openfin/cloud-interop-core-api/-/cloud-interop-core-api-0.0.1-alpha.05c8c77.tgz", + "integrity": "sha512-mKlAKrWZbaPWqBBZeOTfVi3uF52odeNpKCVXc6U18+VQIhYrmp/UuLrsJ/JuH7Yk3jyXI+nwa17vVlBNY1pIQQ==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "mqtt": "^5.3.1", + "zod": "^3.24.1" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "*" + } + }, + "node_modules/@openfin/core": { + "version": "41.102.1", + "resolved": "https://registry.npmjs.org/@openfin/core/-/core-41.102.1.tgz", + "integrity": "sha512-O07+UkqX+PRHYZS4vDEf3parPSyi0Rb/adOLbObhDWEKsb6Ms6nhvrYjGSp/STbQ/PzfWGav5IPk/wHkGZ0pjQ==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@types/node": "^20.14.2", + "events": "^3.0.0", + "lodash": "^4.17.21", + "ws": "^7.3.0" + } + }, + "node_modules/@openfin/microsoft365": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@openfin/microsoft365/-/microsoft365-1.0.1.tgz", + "integrity": "sha512-mCueBhfLYEDkoQr8bkPhSFPnjMEatcfjuJAYoCT/0bO9g+8vl+Oc65wiDOTfo4soJlN0Qamb9jgShYkGIsyiLg==", + "license": "SEE LICENSE IN LICENSE.MD", + "dependencies": { + "@finos/fdc3": "^1.2.0", + "lodash": "^4.17.21", + "lzutf8": "^0.6.3" + } + }, + "node_modules/@openfin/microsoft365/node_modules/@finos/fdc3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@finos/fdc3/-/fdc3-1.2.0.tgz", + "integrity": "sha512-im/vqpS96qsCKMPkwR/Fg2t2FQtwh+/LOvTekIY0eYyuz/CZQoqhwcxwk/Re0pqJiA3inisV7DSfQ1JYLi+bxw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@openfin/node-adapter": { + "version": "41.102.1", + "resolved": "https://registry.npmjs.org/@openfin/node-adapter/-/node-adapter-41.102.1.tgz", + "integrity": "sha512-pxvl9jA/96GMiAHv69zWEr7Ozq73xB6ggoZipkllumnHokqCfuLCuyagVlylZrI9lwE27Hbyd6bbEIFsN5oFjA==", + "dev": true, + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@openfin/core": "41.102.1", + "@types/node": "^20.14.2", + "lodash": "^4.17.21", + "ws": "^7.3.0" + } + }, + "node_modules/@openfin/openid-connect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@openfin/openid-connect/-/openid-connect-1.0.0.tgz", + "integrity": "sha512-OnqootwLHjfb4YkZBwlflsg9TeDF8rHma5cf9jsNUWvuwEbP9+Y53641OFiCxaGH0erKQ13OflL/SA7QqdndYw==", + "license": "SEE LICENSE IN LICENSE.MD", + "dependencies": { + "jose": "^4.14.4" + } + }, + "node_modules/@openfin/snap-sdk": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@openfin/snap-sdk/-/snap-sdk-1.3.0.tgz", + "integrity": "sha512-ZOAnm0YuDNRgkXA67sdXAywJNxU+RFn1Fdh0jwZGPBDeySTZol2kh2g9oVVWxteHyZFdQzrSKIssm4XTV3joiw==", + "license": "SEE LICENSE IN LICENSE.MD", + "dependencies": { + "@openfin/core": "^41.100.117", + "events": "^3.3.0" + } + }, + "node_modules/@openfin/workspace": { + "version": "21.0.12", + "resolved": "https://registry.npmjs.org/@openfin/workspace/-/workspace-21.0.12.tgz", + "integrity": "sha512-nt5rWLZxOFH3rGrIxW4/PL4JR4SuHMpUPEuSYOH4rwc2pt3DfkYNWtyc2LL/oalMJsC5M9zhQiLx7FFSkZuQgw==", + "license": "SEE LICENSE IN LICENSE.MD", + "dependencies": { + "@openfin/microsoft365": "^1.0.1", + "i18next": "^23.7.16", + "idb-keyval": "^6.2.0", + "lodash.debounce": "^4.0.8", + "openfin-notifications": "2.11.0-alpha-3997", + "react-i18next": "^14.0.0", + "title-case": "3.0.3" + }, + "peerDependencies": { + "@openfin/core": "41.102.1" + } + }, + "node_modules/@openfin/workspace-platform": { + "version": "21.0.12", + "resolved": "https://registry.npmjs.org/@openfin/workspace-platform/-/workspace-platform-21.0.12.tgz", + "integrity": "sha512-JKbCXrGqi1dTNG53kLW31OXKCqOnH9ze3omyPJEO2M7jewBfOR/5ZHcoiBBwMI/UHYDN+Go19sXnlNMX7TDISg==", + "license": "SEE LICENSE IN LICENSE.MD", + "dependencies": { + "i18next": "^23.7.16", + "idb-keyval": "^6.2.0", + "lodash.debounce": "^4.0.8", + "react-i18next": "^14.0.0" + }, + "peerDependencies": { + "@openfin/core": "41.102.1" + } + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.9", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz", @@ -1281,7 +1457,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1403,6 +1578,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/node": { + "version": "20.17.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.52.tgz", + "integrity": "sha512-2aj++KfxubvW/Lc0YyXE3OEW7Es8TWn1MsRzYgcOGyTNQxi0L8rxQUCZ7ZbyOBWZQD5I63PV9egZWMsapVaklg==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, "node_modules/@types/react": { "version": "19.1.6", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.6.tgz", @@ -1423,6 +1607,15 @@ "@types/react": "^19.0.0" } }, + "node_modules/@types/readable-stream": { + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.20.tgz", + "integrity": "sha512-eLgbR5KwUh8+6pngBDxS32MymdCsCHnGtwHTrC0GDorbc7NbcnkZAWptDLgZiRk9VRas+B6TyRgPDucq4zRs8g==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz", @@ -1711,6 +1904,18 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/acorn": { "version": "8.14.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", @@ -1774,6 +1979,22 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/babel-plugin-styled-components": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", + "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "lodash": "^4.17.21", + "picomatch": "^2.3.1" + }, + "peerDependencies": { + "styled-components": ">= 2" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1781,6 +2002,38 @@ "dev": true, "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bl": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.0.tgz", + "integrity": "sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==", + "license": "MIT", + "dependencies": { + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^4.2.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1809,7 +2062,6 @@ "version": "4.25.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1838,6 +2090,36 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1848,11 +2130,19 @@ "node": ">=6" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001720", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1906,6 +2196,12 @@ "dev": true, "license": "MIT" }, + "node_modules/commist": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/commist/-/commist-3.2.0.tgz", + "integrity": "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==", + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1913,11 +2209,39 @@ "dev": true, "license": "MIT" }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { @@ -1935,6 +2259,26 @@ "node": ">= 8" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -1946,7 +2290,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1971,7 +2314,6 @@ "version": "1.5.161", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", - "dev": true, "license": "ISC" }, "node_modules/esbuild": { @@ -2019,7 +2361,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2216,6 +2557,24 @@ "node": ">=0.10.0" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2267,6 +2626,19 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-unique-numbers": { + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz", + "integrity": "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.1.0" + } + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -2360,7 +2732,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -2409,43 +2780,141 @@ "node": ">=8" } }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "license": "MIT" + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "void-elements": "3.1.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, + "node_modules/i18next": { + "version": "23.16.8", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz", + "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/idb-keyval": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", + "license": "Apache-2.0" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" } }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2486,11 +2955,29 @@ "dev": true, "license": "ISC" }, + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -2506,11 +2993,16 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT" + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -2544,7 +3036,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -2593,6 +3084,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2600,16 +3103,36 @@ "dev": true, "license": "MIT" }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, + "node_modules/lzutf8": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/lzutf8/-/lzutf8-0.6.3.tgz", + "integrity": "sha512-CAkF9HKrM+XpB0f3DepQ2to2iUEo0zrbh+XgBqgNBc1+k8HMM3u/YSfHI3Dr4GmoTIez2Pr/If1XFl3rU26AwA==", + "license": "MIT", + "dependencies": { + "readable-stream": "^4.0.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2647,11 +3170,87 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mqtt": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.13.0.tgz", + "integrity": "sha512-pR+z+ChxFl3n8AKLQbTONVOOg/jl4KiKQRBAi78tjd6PksOWvl1nl9L8ZHOZ3MiavZfrUOjok2ddwc1VymGWRg==", + "license": "MIT", + "dependencies": { + "commist": "^3.2.0", + "concat-stream": "^2.0.0", + "debug": "^4.4.0", + "help-me": "^5.0.0", + "lru-cache": "^10.4.3", + "minimist": "^1.2.8", + "mqtt-packet": "^9.0.2", + "number-allocator": "^1.0.14", + "readable-stream": "^4.7.0", + "rfdc": "^1.4.1", + "socks": "^2.8.3", + "split2": "^4.2.0", + "worker-timers": "^7.1.8", + "ws": "^8.18.0" + }, + "bin": { + "mqtt": "build/bin/mqtt.js", + "mqtt_pub": "build/bin/pub.js", + "mqtt_sub": "build/bin/sub.js" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/mqtt-packet": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-9.0.2.tgz", + "integrity": "sha512-MvIY0B8/qjq7bKxdN1eD+nrljoeaai+qjLJgfRn3TiMuz0pamsIWY2bFODPZMSNmabsLANXsLl4EMoWvlaTZWA==", + "license": "MIT", + "dependencies": { + "bl": "^6.0.8", + "debug": "^4.3.4", + "process-nextick-args": "^2.0.1" + } + }, + "node_modules/mqtt/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/mqtt/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { @@ -2684,9 +3283,61 @@ "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, "license": "MIT" }, + "node_modules/number-allocator": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz", + "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "js-sdsl": "4.3.0" + } + }, + "node_modules/openfin-notifications": { + "version": "2.11.0-alpha-3997", + "resolved": "https://registry.npmjs.org/openfin-notifications/-/openfin-notifications-2.11.0-alpha-3997.tgz", + "integrity": "sha512-BIxCdQjhTX0DYSEa7+qnvrYjn7rhzU4w5Ja5ZWx2UaO2ydQjO/VJDzTnff65MOEa1SZczPlKrGXgR9HPqBiY5Q==", + "license": "SEE LICENSE IN LICENSE.MD", + "dependencies": { + "openfin-service-async": "^1.0.1", + "openfin-service-signal": "^1.0.0", + "react": "^18.3.1", + "semver-compare": "^1.0.0", + "styled-components": "^5.3.11" + }, + "peerDependencies": { + "@openfin/core": "41.102.1" + } + }, + "node_modules/openfin-notifications/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/openfin-service-async": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/openfin-service-async/-/openfin-service-async-1.0.1.tgz", + "integrity": "sha512-kbIdcyfnOYaCg6+iFueX5HpbJ6FDv1FHjNb1dkld0IY2gI+Y163NVE1/GUoagije/PmAkwqFEkwKv4Mg9+Gl9g==", + "license": "ISC", + "peerDependencies": { + "openfin-service-signal": "^1.0.0" + } + }, + "node_modules/openfin-service-signal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/openfin-service-signal/-/openfin-service-signal-1.0.0.tgz", + "integrity": "sha512-X9fptYE3f5e9tQsU0pdVR3vojYglqBKB+rPJ6h8uC1VFs4mVSMBa+hyHLtIiQf+s7G9gDxsnXm61N3igP5Ipqw==", + "license": "ISC" + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -2774,14 +3425,12 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -2819,6 +3468,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2829,6 +3484,21 @@ "node": ">= 0.8.0" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -2881,6 +3551,35 @@ "react": "^19.1.0" } }, + "node_modules/react-i18next": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.1.3.tgz", + "integrity": "sha512-wZnpfunU6UIAiJ+bxwOiTmBOAaB14ha97MjOEnLGac2RJ+h/maIYXZuTHlmyqQVX1UVHmU1YDTQ5vxLmwfXTjw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", + "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==", + "license": "MIT", + "peer": true + }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", @@ -2891,6 +3590,22 @@ "node": ">=0.10.0" } }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2912,6 +3627,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, "node_modules/rollup": { "version": "4.41.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", @@ -2976,6 +3697,26 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/scheduler": { "version": "0.26.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", @@ -2986,12 +3727,23 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "license": "MIT" + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3015,6 +3767,30 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -3025,6 +3801,30 @@ "node": ">=0.10.0" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -3038,6 +3838,57 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/styled-components": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz", + "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-is": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/styled-components/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3096,6 +3947,15 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/title-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", + "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3122,6 +3982,12 @@ "typescript": ">=4.8.4" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3135,6 +4001,12 @@ "node": ">= 0.8.0" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -3172,11 +4044,16 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -3213,6 +4090,12 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, "node_modules/vite": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", @@ -3316,6 +4199,15 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3342,11 +4234,65 @@ "node": ">=0.10.0" } }, + "node_modules/worker-timers": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-7.1.8.tgz", + "integrity": "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.5", + "tslib": "^2.6.2", + "worker-timers-broker": "^6.1.8", + "worker-timers-worker": "^7.0.71" + } + }, + "node_modules/worker-timers-broker": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz", + "integrity": "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.5", + "fast-unique-numbers": "^8.0.13", + "tslib": "^2.6.2", + "worker-timers-worker": "^7.0.71" + } + }, + "node_modules/worker-timers-worker": { + "version": "7.0.71", + "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz", + "integrity": "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.5", + "tslib": "^2.6.2" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, "license": "ISC" }, "node_modules/yocto-queue": { @@ -3361,6 +4307,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.25.34", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.34.tgz", + "integrity": "sha512-lZHvSc2PpWdcfpHlyB33HA9nqP16GpC9IpiG4lYq9jZCJVLZNnWd6Y1cj79bcLSBKTkxepfpjckPv5Y5VOPlwA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/frameworks/react/workspace-platform-starter/package.json b/frameworks/react/workspace-platform-starter/package.json index d9d6760..253139d 100644 --- a/frameworks/react/workspace-platform-starter/package.json +++ b/frameworks/react/workspace-platform-starter/package.json @@ -10,11 +10,19 @@ "preview": "vite preview" }, "dependencies": { + "@finos/fdc3": "2.0.3", + "@openfin/cloud-interop": "0.41.131", + "@openfin/openid-connect": "^1.0.0", + "@openfin/snap-sdk": "1.3.0", + "@openfin/workspace": "21.0.12", + "@openfin/workspace-platform": "21.0.12", "react": "^19.1.0", "react-dom": "^19.1.0" }, "devDependencies": { "@eslint/js": "^9.25.0", + "@openfin/core": "41.102.1", + "@openfin/node-adapter": "41.102.1", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", "@vitejs/plugin-react": "^4.4.1", diff --git a/frameworks/react/workspace-platform-starter/public/app.css b/frameworks/react/workspace-platform-starter/public/app.css new file mode 100644 index 0000000..cf6a78d --- /dev/null +++ b/frameworks/react/workspace-platform-starter/public/app.css @@ -0,0 +1,945 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter&display=swap'); + +:root { + --brand-background: var(--theme-background-primary, #1e1f23); + --brand-border: var(--theme-background4, #2f3136); + --brand-primary: var(--theme-brand-primary, #0a76d3); + --brand-text: var(--theme-text-default, #ffffff); + --brand-text-secondary: var(--theme-text-help, #c9cbd2); + --brand-input-background: var(--theme-background5, #383a40); + --brand-input-border: var(--theme-background6, #53565f); + --brand-input-border-highlight: var(--theme-input-focused, #c9cbd2); + --brand-table-header: var(--theme-background1, #111214); + --brand-table-header-text: var(--theme-text-default, #ffffff); + --brand-table-row-even: var(--theme-background3, #24262b); + --brand-table-row-odd: var(--theme-background4, #2f3136); + --brand-error: var(--theme-status-critical, #be1d1f); + --brand-success: var(--theme-status-success, #35c759); + + accent-color: var(--brand-primary); +} + +.theme-light { + --brand-background: var(--theme-background-primary, #fafbfe); + --brand-border: var(--theme-background4, #eceef1); + --brand-primary: var(--theme-brand-primary, #0a76d3); + --brand-text: var(--theme-text-default, #111214); + --brand-text-secondary: var(--theme-text-help, #2f3136); + --brand-input-background: var(--theme-background5, #dddfe4); + --brand-input-border: var(--theme-background6, #c9cbd2); + --brand-input-border-highlight: var(--theme-input-focused, #c9cbd2); + --brand-table-header: var(--theme-background1, #ffffff); + --brand-table-header-text: var(--theme-text-default, #111214); + --brand-table-row-even: var(--theme-background3, #eceef1); + --brand-table-row-odd: var(--theme-background4, #c9cbd2); + --brand-error: var(--theme-status-critical, #be1d1f); + --brand-success: var(--theme-status-success, #35c759); +} + +.primary { + color: var(--brand-primary); +} + +.error { + color: var(--brand-error); +} + +.success { + color: var(--brand-success); +} + +::selection { + background-color: var(--brand-primary); +} + +* { + font-family: Inter, 'Sans Serif', sans-serif; + box-sizing: border-box; +} + +html, +body { + height: 100%; +} + +body { + display: flex; + justify-content: stretch; + align-items: stretch; + overflow: hidden; + padding: 20px; + margin: 0; + background-color: var(--brand-background); + color: var(--brand-text); +} + +body.border { + padding: 20px; + margin: 0; + background-color: var(--brand-background); + color: var(--brand-text); + border: 1px solid #000000; + border-radius: 5px; + width: 100%; + height: 100%; +} + +body.border-light { + border-color: var(--brand-input-border-highlight); +} + +body.small { + padding: 15px; +} + +h1 { + font-size: 24px; + font-weight: 700; + line-height: 1; + margin-block-start: 0; + margin-block-end: 0; +} +h1.tag { + font-size: 12px; + font-weight: normal; + margin-top: 5px; + color: var(--brand-text-secondary); +} + +h2 { + font-size: 20px; + font-weight: 700; + line-height: 1; + margin-block-start: 0; + margin-block-end: 0; +} + +h3 { + font-size: 16px; + font-weight: 700; + line-height: 1; + margin-block-start: 0; + margin-block-end: 0; +} + +h4 { + font-size: 14px; + font-weight: 700; + line-height: 1; + margin-block-start: 0; + margin-block-end: 0; +} + +h5 { + font-size: 12px; + font-weight: 700; + line-height: 1; + margin-block-start: 0; + margin-block-end: 0; +} + +p { + color: var(--brand-text-secondary); + font-size: 12px; + margin-block-start: 0; + margin-block-end: 0; +} + +::-webkit-scrollbar { + width: 8px; + height: 8px; +} +::-webkit-scrollbar-track { + background: var(--brand-input-background); + border-radius: 5px; +} +::-webkit-scrollbar-thumb { + background: var(--brand-border); + border-radius: 5px; + border: 1px solid var(--brand-input-border); +} +::-webkit-scrollbar-thumb:hover { + border: 1px solid var(--brand-input-border-highlight); +} + +main { + min-height: 100px; +} + +a { + color: var(--brand-primary); + font-size: 12px; + font-weight: bold; + outline: none; + text-decoration: none; +} + +a:hover, +a:focus { + text-decoration: underline; +} + +button, +input[type='button'], +::-webkit-file-upload-button, +a.button, +footer a { + background-color: var(--brand-primary); + border: 2px solid var(--brand-primary); + color: #ffffff; + border-radius: 5px; + padding: 8px 20px; + text-align: left; + cursor: pointer; + font-size: 12px; + font-weight: bold; + text-decoration: none; + outline: 0; + white-space: nowrap; + transition-property: background-color, color, opacity; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); +} + +a.button:hover, +footer a:hover { + text-decoration: none; +} + +a.button:focus, +a.button:hover, +input[type='button']:focus, +input[type='button']:hover, +input[type='file']:focus::-webkit-file-upload-button, +input[type='file']:hover::-webkit-file-upload-button, +::-webkit-file-upload-button:hover, +footer a:focus, +footer a:not(:disabled):hover, +button:not(:disabled):focus, +button:not(:disabled):hover { + background-image: linear-gradient(rgba(255, 255, 255, 0.1) 0 0); +} + +button.image { + width: 40px; + height: 40px; + padding: 0px; + display: flex; + align-items: center; + justify-content: center; +} +button.image > img { + width: 32px; + height: 32px; +} +button.secondary { + background-color: var(--brand-input-background); + color: var(--brand-text); + border-color: var(--brand-input-border); +} +button.secondary:not(:disabled):hover { + background-color: var(--brand-input-background); +} +button.plain { + border-color: transparent; + background-color: transparent; + color: var(--brand-primary); +} +button.plain:not(:disabled):not(:read-only):hover { + border-color: transparent; + background-color: transparent; +} + +button.small, +a.button.small, +::-webkit-file-upload-button, +td button { + padding: 5px 10px; + font-size: 10px; +} +td button.plain { + width: auto; + height: auto; +} + +button.center { + text-align: center; +} + +::-webkit-file-upload-button { + margin-right: 10px; +} + +pre { + margin: 0; + padding: 5px; + border-radius: 5px; + font-size: 12px; + font-family: 'Courier New', Courier, monospace; + white-space: pre-wrap; + border: 1px solid var(--brand-input-border); + background-color: var(--brand-input-background); + width: 100%; + min-height: 20px; +} + +header { + padding-bottom: 10px; + border-bottom: 2px solid var(--brand-border); +} + +footer { + padding-top: 10px; + border-top: 1px solid var(--brand-border); +} + +fieldset { + display: flex; + flex-direction: column; + align-items: flex-start; + border: 0; + padding: 0; + font-size: 12px; + gap: 5px; +} + +fieldset.row { + flex-direction: row; + align-items: center; + gap: 10px; +} + +label { + font-size: 12px; + font-weight: 600; +} + +select, +input[type='text'], +input[type='url'], +input[type='email'], +input[type='password'], +input[type='file'], +input[type='number'], +input[type='date'], +input[type='time'], +input[type='datetime-local'], +input[type='month'], +input[type='week'], +input[type='color'], +textarea { + border-radius: 5px; + border: 1px solid var(--brand-input-border); + background-color: var(--brand-input-background); + font-size: 12px; + outline: 0; + color: var(--brand-text); + width: 50%; + min-width: 200px; + padding: 8px 12px; + box-shadow: rgb(0 0 0 / 25%) 0px 4px 4px; + transition-property: background-color, color, opacity; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); +} + +textarea { + min-height: 64px; + resize: none; +} + +textarea.resizable { + resize: both; +} + +select.full, +input[type='text'].full, +input[type='email'].full, +input[type='url'].full, +input[type='password'].full, +input[type='file'].full, +input[type='number'].full, +input[type='date'].full, +input[type='time'].full, +input[type='datetime-local'].full, +input[type='month'].full, +input[type='week'].full, +input[type='range'].full, +textarea.full { + width: 95%; +} + +select:focus, +select:not(:disabled):hover, +input[type='text']:not(:read-only):focus, +input[type='text']:not(:disabled):not(:read-only):hover, +input[type='email']:not(:read-only):focus, +input[type='email']:not(:disabled):not(:read-only):hover, +input[type='url']:not(:read-only):focus, +input[type='url']:not(:disabled):not(:read-only):hover, +input[type='password']:not(:read-only):focus, +input[type='password']:not(:disabled):not(:read-only):hover, +input[type='file']:not(:read-only):focus, +input[type='file']:not(:disabled):not(:read-only):hover, +input[type='number']:not(:read-only):focus, +input[type='number']:not(:disabled):not(:read-only):hover, +input[type='date']:not(:read-only):focus, +input[type='date']:not(:disabled):not(:read-only):hover, +input[type='time']:not(:read-only):focus, +input[type='time']:not(:disabled):not(:read-only):hover, +input[type='datetime-local']:not(:read-only):focus, +input[type='datetime-local']:not(:disabled):not(:read-only):hover, +input[type='month']:not(:read-only):focus, +input[type='month']:not(:disabled):not(:read-only):hover, +input[type='week']:not(:read-only):focus, +input[type='week']:not(:disabled):not(:read-only):hover, +textarea:not(:read-only):focus, +textarea:not(:disabled):not(:read-only):hover, +input[type='checkbox']:focus, +input[type='checkbox']:not(:disabled):hover, +input[type='radio']:focus, +input[type='radio']:not(:disabled):hover, +input[type='color']:focus, +input[type='color']:not(:disabled):hover { + border-color: var(--brand-input-border-highlight); +} + +input[type='date'], +input[type='time'], +input[type='datetime-local'], +input[type='month'], +input[type='week'] { + width: 200px; + min-width: auto; +} + +::-webkit-calendar-picker-indicator, +.theme-dark ::-webkit-calendar-picker-indicator { + filter: invert(1); +} + +.theme-light ::-webkit-calendar-picker-indicator { + filter: invert(0); +} + +::-webkit-datetime-edit-day-field:focus, +::-webkit-datetime-edit-month-field:focus, +::-webkit-datetime-edit-year-field:focus, +::-webkit-datetime-edit-hour-field:focus, +::-webkit-datetime-edit-minute-field:focus, +::-webkit-datetime-edit-week-field:focus { + background-color: var(--brand-primary); + color: #ffffff; +} + +::-webkit-outer-spin-button, +::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type='file'] { + padding: 4px 12px; +} + +select { + appearance: none; +} + +select:not([multiple]):not(:disabled) { + appearance: none; + background-image: url("data:image/svg+xml;utf8,"); + background-repeat: no-repeat; + background-size: 12px; + background-position: calc(100% - 12px) 12px; + background-color: var(--brand-input-background); +} + +.theme-light select:not([multiple]):not(:disabled) { + background-image: url("data:image/svg+xml;utf8,"); +} + +select.small { + padding: 4px 8px; + font-size: 10px; +} + +select.small:not([multiple]):not(:disabled) { + background-size: 8px; + background-position: calc(100% - 8px) 8px; +} + +option { + color: var(--brand-text); + padding: 6px; + margin-bottom: 1px; +} + +option:hover { + background: var(--brand-input-border) + linear-gradient(0deg, var(--brand-input-border) 0%, var(--brand-input-border) 100%); + border-radius: 5px; +} + +option:checked { + background: var(--brand-primary) linear-gradient(0deg, var(--brand-primary) 0%, var(--brand-primary) 100%); + color: #ffffff; + border-radius: 5px; +} + +input[type='range'] { + -webkit-appearance: none; + height: 20px; + width: 200px; + background: transparent; + outline: none; +} + +input[type='range']::-webkit-slider-runnable-track { + -webkit-appearance: none; + height: 10px; + border: 1px solid var(--brand-input-border); + background-color: var(--brand-input-background); + border-radius: 5px; + box-shadow: rgb(0 0 0 / 25%) 0px 4px 4px; + transition-property: background-color, color, opacity; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); +} + +input[type='range']::-webkit-slider-thumb { + -webkit-appearance: none; + height: 20px; + width: 20px; + border-radius: 5px; + margin-top: -6px; + border: 1px solid var(--brand-input-border); + background: var(--brand-input-background); + cursor: pointer; + box-shadow: rgb(0 0 0 / 25%) 0px 4px 4px; + transition-property: background-color, color, opacity; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); +} + +input[type='range']:hover::-webkit-slider-runnable-track, +input[type='range']:focus::-webkit-slider-runnable-track, +input[type='range']:hover::-webkit-slider-thumb, +input[type='range']:focus::-webkit-slider-thumb { + border-color: var(--brand-input-border-highlight); +} + +button:disabled, +select:disabled, +input:disabled, +textarea:disabled, +footer a:disabled, +a[disabled] { + opacity: 0.3; + cursor: default; + pointer-events: none; + resize: none; +} + +select:invalid, +input:invalid, +textarea:invalid { + border-color: var(--brand-error); +} + +fieldset > span { + margin-left: 10px; + width: 50px; +} + +input[type='text'].large, +input[type='password'].large, +input[type='file'].large, +input[type='email'].large, +input[type='url'].large, +input[type='date'].large, +input[type='time'].large { + font-size: 20px; + padding: 20px 10px; +} + +input[type='text'].center, +input[type='password'].center, +input[type='email'].center, +input[type='url'].center { + text-align: center; +} + +input[type='checkbox'], +input[type='radio'] { + appearance: none; + border: 1px solid var(--brand-input-border); + background-color: var(--brand-input-background); + color: var(--brand-input-text); + outline: 0; + width: 20px; + height: 20px; + margin: 2px; + box-shadow: rgb(0 0 0 / 25%) 0px 4px 4px; + transition-property: background-color, color, opacity; + transition-duration: 200ms; + transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); +} + +input[type='radio'] { + border-radius: 50%; +} + +input[type='checkbox']::before, +input[type='radio']::before { + content: ''; + display: none; + width: 16px; + height: 16px; + margin: 1px; + background-color: var(--brand-text); + opacity: 0.8; +} + +input[type='checkbox']:checked::before { + display: inline-block; + clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); +} +input[type='radio']:checked::before { + display: inline-block; + clip-path: circle(35% at 52% 50%); +} + +input[type='checkbox'] + label, +input[type='radio'] + label { + white-space: nowrap; +} + +input[type='color'] { + width: 100px; + min-width: auto; + padding: 5px; +} + +input[type='color']::-webkit-color-swatch-wrapper { + padding: 0; + background: transparent; +} + +input[type='color']::-webkit-color-swatch { + border-radius: 5px; + border: none; +} + +/* This disables the auto zoom on iDevices */ +@supports (-webkit-touch-callout: none) { + select, + input[type='text'], + input[type='url'], + input[type='email'], + input[type='password'], + input[type='file'], + input[type='number'], + input[type='date'], + input[type='time'], + input[type='datetime-local'], + input[type='month'], + input[type='week'], + input[type='color'], + textarea { + font-size: 16px; + } +} + +hr { + width: 100%; + border: 0; + border-bottom: 1px solid var(--brand-input-border); +} + +ul { + font-size: 12px; + display: flex; + flex-direction: column; + gap: 10px; + list-style-type: none; +} + +li { + font-size: 12px; + position: relative; + padding: 0 0 10px; +} + +li::before { + content: ' '; + display: inline-block; + background-color: var(--brand-primary); + width: 8px; + height: 8px; + border-radius: 2px; + position: absolute; + left: -13px; + top: 3px; +} + +em { + font-size: 12px; +} + +.row { + display: flex; + flex-direction: row; +} + +.col { + display: flex; + flex-direction: column; +} + +.fill { + flex: 1; +} + +.fill_2 { + flex: 2; +} + +.scroll { + overflow: auto; +} + +.scroll-vertical { + overflow-y: auto; +} + +.scroll-horizontal { + overflow-x: auto; +} + +.overflow-hidden { + overflow: hidden; +} + +.middle { + align-items: center; +} + +.bottom { + align-items: flex-end; +} + +.spread { + justify-content: space-between; +} + +.around { + justify-content: space-around; +} + +.left { + display: flex; + align-items: flex-start; +} + +.center { + display: flex; + justify-content: center; +} + +.right { + display: flex; + justify-content: flex-end; +} + +.wrap { + flex-wrap: wrap; +} + +.gap5 { + gap: 5px; +} + +.gap10 { + gap: 10px; +} + +.gap20 { + gap: 20px; +} + +.gap40 { + gap: 40px; +} + +.pad10 { + padding: 10px; +} + +.pad20 { + padding: 20px; +} + +.pad0 { + padding: 0px; +} + +.table { + display: flex; + flex: 1; + flex-direction: column; + font-size: 10px; +} + +table { + width: 100%; + font-size: 10px; + border: 0; + border-collapse: collapse; +} + +table, +.table { + border: var(--brand-input-border) 1px solid; +} + +.table-row { + display: flex; + flex: 1; + flex-direction: row; +} + +table > tr:first-child, +thead > tr, +.table-row.header { + background-color: var(--brand-table-header); +} + +table > tr:nth-child(even), +.table > div:nth-child(even), +tbody > tr:nth-child(odd) { + background-color: var(--brand-table-row-even); +} + +table > tr:nth-child(odd), +.table > div:not(:first-child):nth-child(odd), +tbody > tr:nth-child(even) { + background-color: var(--brand-table-row-odd); +} + +th, +.table-row.header > div { + color: var(--brand-table-header-text); + font-weight: bold; + padding: 10px 5px; + text-align: left; + word-break: break-word; +} + +.table-row > div { + flex: 1; +} + +td, +.table-row:not(.header) > div { + padding: 5px; + word-break: break-word; + color: var(--brand-text); +} + +.table-row:not(.header) > div { + display: flex; + align-items: center; +} + +@media screen and (max-width: 736px) { + .table-row { + flex-direction: column; + } + + .table-row.header { + display: none; + } + + .table-row:not(.header) > div { + display: flex; + align-items: center; + flex: 1; + gap: 10px; + } + + .table-row:not(.header) > div:before { + content: attr(data-name); + font-weight: bold; + white-space: nowrap; + width: 20%; + } + + .table-row > div.right { + justify-content: flex-start; + } + + .table-row > div.center { + justify-content: flex-start; + } +} + +.border { + border: 1px solid var(--brand-input-border); + border-radius: 5px; +} + +.drag { + user-select: none; + -webkit-app-region: drag; +} + +.no-drag { + -webkit-app-region: none; +} + +.form { + background-color: var(--brand-table-header); + border: var(--brand-input-border) 1px solid; + border-radius: 5px; + padding: 10px; + font-size: 12px; +} + +.form-group { + display: flex; + flex-direction: column; + gap: 10px; + background-color: var(--brand-table-header); + border: var(--brand-input-border) 1px solid; + border-radius: 5px; + padding: 10px; +} + +.form-group.large { + gap: 20px; +} + +.width-full { + width: 100%; +} + +.max-width-full { + max-width: 100%; +} + +.width-responsive { + max-width: fit-content; +} + +.hidden { + display: none; +} + +.pointer { + cursor: pointer; +} + +.nowrap { + white-space: nowrap; +} diff --git a/frameworks/react/workspace-platform-starter/public/apps.json b/frameworks/react/workspace-platform-starter/public/apps.json new file mode 100644 index 0000000..423110b --- /dev/null +++ b/frameworks/react/workspace-platform-starter/public/apps.json @@ -0,0 +1,71 @@ +[ + { + "appId": "my-team", + "name": "my-team", + "title": "My Team", + "description": "View my team.", + "manifest": "http://localhost:8080/common/views/manager-portal/my-team.view.fin.json", + "manifestType": "view", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [ + { + "src": "http://localhost:8080/common/images/previews/manager/preview-manager-portal-my-team.jpeg" + } + ], + "tags": ["view", "manager", "fcd3"] + }, + { + "appId": "annual-leave", + "name": "annual-leave", + "title": "Annual Leave", + "description": "View the annual leave for a team member.", + "manifest": "http://localhost:8080/common/views/manager-portal/annual-leave.view.fin.json", + "manifestType": "view", + "icons": [ + { + "src": "http://localhost:8080/common/views/manager-portal/annual-leave/favicon.ico" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [ + { + "src": "http://localhost:8080/common/images/previews/manager/preview-manager-portal-annual-leave.jpeg" + } + ], + "tags": ["view", "manager", "fcd3"] + }, + { + "appId": "manager-paths", + "name": "manager-paths", + "title": "Manager Paths", + "description": "View the manager paths for a team member.", + "manifest": "http://localhost:8080/common/views/manager-portal/manager-paths.view.fin.json", + "manifestType": "view", + "icons": [ + { + "src": "http://localhost:8080/common/views/manager-portal/manager-paths/favicon.ico" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [ + { + "src": "http://localhost:8080/common/images/previews/manager/preview-manager-portal-manager-paths.jpeg" + } + ], + "tags": ["view", "manager", "fcd3"] + } +] diff --git a/frameworks/react/workspace-platform-starter/public/favicon.ico b/frameworks/react/workspace-platform-starter/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..694af5a773c369ce00d2820643ab4ad838ee5fbe GIT binary patch literal 15406 zcmeI339KDe8OJYMkqQbTyO1IjN>y4cAdMQIwtes2J9B5|wRs?mEEY+X21Kev<5B@3 z#aNes0YT6Lig825x?v50QlLQD1Wk-A3KkTJvM5qH{{G*2lQ*4r=g!=ld;1dgB_}g? z=A3Uk-+t!RYFpK|sqMUTjq9}9l5K0XBWtzVv}ykLj9qHAD|t41_SpM_YPDN;tJP*O zhb64=&$(3obEBhETo9e>!sO338p(1ub972o0Im_A%DPPqH#Ro$?360&9pt(&UX@wv zVFdA2dRGR+Xb+P+TCBgV9S??AeAlCour{UrW$raZ!%Hqm&NlcNI=rl!i{bC<%n@F# zec1)^O~~;5Hp1j)duH$A+ih+Ty*DH06kp2gO>X}DSEszXB-t5ww*VuRr>@8}`4m^} zQTF-Et`RLs*QQr+p3c0Km$CWrMr55|zsc2`^>kf&ZMi;({{#)ojTTRX_`byr4D6V$ z)71sRF34_ej!t-vKJMn6wjD4|Mow3-_LFXCXfIn6MLW4hGc>$@t!QTt;*m}t{NIroKw7(lot~|@q*{gf`nQ4pxhWt}6{>&B|jXl}>Q=xqg{6EY1 zJL8w|bBdc6?a>Q7MKGj;;Jy-E&ww+l2h#7q^6v6}(SVLk1@DF6eV&oE>+$;_ejXb* z*Ug=~LlF<%K6k^>q2Rwa$M-ny)Xu}?Za36?L$`QZtz+M}27d(pyidyG*KhPX3bdvb ztZtqe{xCWo*wVLFILDs_@!!Dz?w;b8Z&Hj2;+M+tC;u{kHZVZ+@6Dg9*LMT&jitC# z*#z-V+`N%pdx6~z4!)AO^~pCF&!Y)z_SYrpmT z-(#cIyT|YcXStD)U5R_!rf`esG5eN{)#E1XjvL$WUjScxXW^t1OD#;H>-Gvz)4-`*g`L%X>ryT7c%=u^)pN?Kv zmwyo7;B#DZhhiCsw)?BZRBr?1zhNS|mdI3duvyta5Pya79BcA&(7r#$I8m_M$=+}e zhi}8a?`i=jON(&GFI|j(eyw1R(V*O#wbTx>jWB+c>(5;yJkHG>osiGC+VZU}HfX;k zbJ6H=<%|KRIx@aJ_stAD&>PLJyk!!Q4!`rrG>EY9(Jz0;gN)L%w} z_tlpogNeRI&w}_;`BKg8*PrFY&E!4Muo_uIhsAK+pQv~J!u#I}SA7y%w6&8Nz3P(y zs_@Txi_PZ#?AHjj4ZSsDNf5ulApedZ;P++tn%E5|)7te#3la431+?!#ANH-}Oe>)C zcIcHqdV!&spuxTJ2lC%Wa)GNaJgQx+?IWoZKw}%*lcyX8ZQq2>$GH~Q@`@n=u_lPG zvA)Y`{prz7AhO_r`TybQU}(Ao`I0kNiNVYXs8bus7uqNdp@@LJ-Uay@EGM@g$Vli0=aF4-t3Jod=~o2i_3Da3GWpvE^v*}Jq4?eq_za@ zYUGXcM-GAZZ$XD_bv#~HyO&?Omi+Hv=$}ycw?x{*hnDx&&2CjIzt}PT0eQOWyrFQG zVD*r+N}!a7Li3UI8aQ{dK1`?b7tc2mD-NF&`sFu=m3v$6S0VSGpkL}8tfw#X&dG>p zI@(|I>Kleq&GCQa4+lg6x8n~W94GXXTta* zU|q*p4XwZ8s{R>$vzEO)FLU)WgZS6XTg7#m8pD^y@ai zs<$N`A2FOB_iFsyb--Cc{ctRO{e!eOSq0~}^7q4ldolFh$51{aze0?(*i`1 zGwIFEwDSkSoH=uf4c)8%tTT=vI-7Yq&rqMN6%Xk%^v`f>o@h}`doTQbiSGqwpMtXlLJa=Fuh>FnwOIU~h1oVzdd{H;L>us5{Ld(C({NqI3@;Z1sapoP;=RAF7 zzk5Qz?-M@ImHt@$q;nw7Tq^jTJU{rosloH!7fu^O_*}JoHDvSjWB2;tS^Hp4(h{g7RNo^gqmhh9k4U zryQkQ|9P|JCd!8u3ltNo*|Fly?^tub#i0&$NAVfme;w=3=~8!uU-{8;J4aLuZY+8W z`*1bSo@}!Z%B_gEk@C+k)B8EJQ@b^}8|}^0fN?+g%5tF1^+Eft{I{80!TLEm^OUXv zmot!&H}Y;JFgGyN3w(~>$|=beEhi*5GGDineLGzKqn)0coc*^p+ncTGJXbp7W6% z-RcK@hsyUD#^Z2E-N5;n`5DZ;e<*r?5w z{tYdBGc;brP<^7aPVIfw`ce5k-%3$e>zk#4(H%`5Ry$h#C>l!X&ht^_x6TBK!ABuC z+0?_(&{_RpHf;WTv3LhGx_Scs+h6(HZgPO%<5QR58+OXerr*C! zcOpAG`UbSi{#xru@pI|g9n^pWlhVJHZ&2^v_k@c2A?Pmmmxk)@flKl>F_NMdbYTxDM_hC}c@5~3OhEh(X zoUfA_*3aEwwSO1iV)x1>EO*d%v0?H#bU}4gl{#86Ya{%wob2;!+XLmT%CY?alj+;Y z;yTX1d(`G?%_M(6knW?^59+gr(Rs*rE&HIpmg)zezxkfBdgHv)9Of3};3>>4eN_x1 nhuIGr8^qKva=jD!)t`CV?)@{~F{gw7joi|F{2$-{mIVF-An9eU literal 0 HcmV?d00001 diff --git a/frameworks/react/workspace-platform-starter/public/manifest.fin.json b/frameworks/react/workspace-platform-starter/public/manifest.fin.json new file mode 100644 index 0000000..526df88 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/public/manifest.fin.json @@ -0,0 +1,1887 @@ +{ + "devtools_port": 9090, + "licenseKey": "openfin-demo-license-key", + "runtime": { + "arguments": "", + "version": "41.134.102.1" + }, + "platform": { + "name": "Workspace Platform Starter", + "uuid": "workspace-platform-starter-react-wrapper", + "icon": "http://localhost:5173/favicon.png", + "autoShow": true, + "providerUrl": "http://localhost:5173", + "preventQuitOnLastWindowClosed": true, + "appLogsTimezone": "utc", + "enableAppLogging": false, + "enableBeforeUnload": true, + "logManagement": { + "enabled": false + }, + "permissions": { + "System": { + "launchExternalProcess": true, + "terminateExternalProcess": true, + "downloadAsset": true, + "openUrlWithBrowser": { + "enabled": true, + "protocols": ["mailto", "msteams", "tel"] + } + } + }, + "defaultWindowOptions": { + "permissions": { + "System": { + "openUrlWithBrowser": { + "enabled": true, + "protocols": ["mailto", "msteams", "tel"] + } + } + }, + "viewVisibility": { + "showViewsOnTabDrag": { + "enabled": true + }, + "showViewsOnSplitterDrag": { + "enabled": true + }, + "showViewsOnWindowResize": { + "enabled": true + } + } + }, + "defaultViewOptions": { + "permissions": { + "System": { + "openUrlWithBrowser": { + "enabled": true, + "protocols": ["mailto", "msteams", "tel"] + } + } + } + }, + "interopBrokerConfiguration": { + "logging": { + "beforeAction": { + "enabled": true + }, + "afterAction": { + "enabled": true + } + } + } + }, + "shortcut": { + "company": "OpenFin", + "description": "A way of showing examples of what OpenFin can do.", + "icon": "http://localhost:5173/favicon.png", + "name": "Workspace Platform Starter - v20.0.0", + "target": ["desktop", "start-menu"] + }, + "supportInformation": { + "company": "OpenFin", + "product": "Workspace Starter - Workspace Platform Starter - Client", + "email": "support@openfin.co", + "forwardErrorReports": true + }, + "snapshot": { + "windows": [] + }, + "customSettings": { + "bootstrap": { + "home": true, + "store": true, + "dock": true, + "notifications": true, + "autoShow": ["dock", "home"] + }, + "splashScreenProvider": { + "url": "http://localhost:5173/splash.html" + }, + "platformProvider": { + "rootUrl": "http://localhost:5173", + "language": { + "initialLanguage": "en-US" + }, + "modules": [ + { + "id": "default-wps-platform", + "icon": "http://localhost:5173/favicon.png", + "title": "Workspace Platform Starter Platform Override", + "description": "This is the implementation included in workspace platform starter but it is now exposed as a module to allow for easy replacement.", + "enabled": true, + "url": "http://localhost:5173/js/modules/wps-platform-override.bundle.js", + "data": { + "loggerName": "WpsPlatformOverride" + } + } + ], + "interop": { + "intentResolver": { + "url": "http://localhost:5173/common/windows/intents/instance-picker.html", + "height": 715, + "width": 665, + "fdc3InteropApi": "2.0" + }, + "intentOptions": {}, + "openOptions": {}, + "contextOptions": {}, + "unregisteredApp": { + "appId": "unregistered", + "title": "Other", + "description": "If you can not find an application to support your action please check the instances associated with this entry to see if it satisfies your need.", + "icons": [ + { + "src": "http://localhost:5173/favicon.png" + } + ], + "publisher": "Multiple", + "intents": [ + { + "name": "StartCall", + "displayName": "Start a Call", + "contexts": ["fdc3.contact", "fdc3.contactList"] + }, + { + "name": "StartChat", + "displayName": "Start a Chat", + "contexts": ["fdc3.contact", "fdc3.contactList"] + }, + { + "name": "ViewChart", + "displayName": "View Chart", + "contexts": ["fdc3.instrument", "fdc3.instrumentList", "fdc3.portfolio", "fdc3.position"] + }, + { + "name": "ViewContact", + "displayName": "View Contact Details", + "contexts": ["fdc3.contact"] + }, + { + "name": "ViewProfile", + "displayName": "View Profile", + "contexts": ["fdc3.contact"] + }, + { + "name": "ViewQuote", + "displayName": "View Quote", + "contexts": ["fdc3.instrument"] + }, + { + "name": "ViewNews", + "displayName": "View News", + "contexts": [ + "fdc3.country", + "fdc3.instrument", + "fdc3.instrumentList", + "fdc3.organization", + "fdc3.portfolio" + ] + }, + { + "name": "ViewAnalysis", + "displayName": "View Analysis", + "contexts": ["fdc3.instrument", "fdc3.organization", "fdc3.portfolio"] + }, + { + "name": "ViewInstrument", + "displayName": "View Instrument Details", + "contexts": ["fdc3.instrument"] + } + ] + }, + "modules": [ + { + "id": "openfin-cloud-interop", + "icon": "http://localhost:5173/favicon.png", + "title": "OpenFin Cloud Interop", + "description": "OpenFin Cloud Interop", + "enabled": false, + "url": "http://localhost:5173/js/modules/openfin-cloud-interop.bundle.js", + "data": { + "userId": "", + "password": "", + "platformId": "", + "url": "", + "sourceDisplayName": "", + "sourceId": "" + } + }, + { + "id": "default-wps-interop", + "icon": "http://localhost:5173/favicon.png", + "title": "Workspace Platform Starter Interop Broker", + "description": "This is the implementation included in workspace platform starter but it is now exposed as a module to allow for easy replacement.", + "enabled": true, + "url": "http://localhost:5173/js/modules/wps-interop-override.bundle.js", + "data": { + "loggerName": "WpsInteropOverride" + } + } + ] + } + }, + "appProvider": { + "endpointIds": ["http://localhost:5173/apps.json"], + "cacheDurationInSeconds": 10, + "cacheDurationInMinutes": 0, + "manifestTypes": [ + "view", + "inline-view", + "window", + "inline-window", + "snapshot", + "inline-snapshot", + "external", + "inline-external", + "appasset", + "inline-appasset", + "manifest", + "desktop-browser", + "connection", + "endpoint" + ], + "updatableLaunchPreference": [ + { + "name": "bounds" + } + ] + }, + "endpointProvider": { + "modules": [ + { + "title": "Local Storage", + "enabled": true, + "id": "local-storage", + "url": "http://localhost:5173/js/modules/local-storage.bundle.js" + }, + { + "title": "Favorite Local Storage", + "enabled": true, + "id": "favorite-local-storage", + "url": "http://localhost:5173/js/modules/favorite-local-storage.bundle.js" + }, + { + "title": "Context Processor", + "enabled": true, + "id": "context-processor", + "url": "http://localhost:5173/js/modules/example-context-processor.bundle.js" + }, + { + "id": "example-notification-source", + "icon": "http://localhost:5173/favicon.png", + "title": "Example Notification Source", + "description": "Example Notification Source. Please see docs in client/src/modules/example-notification-source/README.md", + "enabled": true, + "url": "http://localhost:5173/js/modules/example-notification-source.bundle.js", + "data": { + "websocket": { + "url": "" + }, + "longpoll": { + "url": "", + "intervalInSeconds": 5 + }, + "post": { + "url": "" + }, + "notifyOn": { + "pageChanged": false, + "workspaceChanged": false, + "appsChanged": false, + "themeChanged": false, + "favoriteChanged": false + } + } + } + ], + "endpoints": [ + { + "id": "share-get", + "type": "fetch", + "options": { + "method": "GET", + "url": "https://workspace.openfin.co/api/share/[id]" + } + }, + { + "id": "share-set", + "type": "fetch", + "options": { + "method": "POST", + "url": "https://workspace.openfin.co/api/share" + } + }, + { + "id": "integration-preferences-get", + "type": "module", + "typeId": "local-storage", + "options": { + "method": "GET", + "dataType": "integration-preferences" + } + }, + { + "id": "integration-preferences-set", + "type": "module", + "typeId": "local-storage", + "options": { + "method": "SET", + "dataType": "integration-preferences" + } + }, + { + "id": "interopbroker.process.org.dayofinterest", + "type": "module", + "typeId": "context-processor", + "options": { + "logContext": true, + "logProcessedContext": true + } + }, + { + "id": "favorite-list", + "type": "module", + "typeId": "favorite-local-storage" + }, + { + "id": "favorite-get", + "type": "module", + "typeId": "favorite-local-storage" + }, + { + "id": "favorite-set", + "type": "module", + "typeId": "favorite-local-storage" + }, + { + "id": "favorite-remove", + "type": "module", + "typeId": "favorite-local-storage" + }, + { + "id": "get-default-workspace", + "type": "module", + "typeId": "local-storage", + "options": { + "method": "GET", + "dataType": "default-workspace" + } + }, + { + "id": "set-default-workspace", + "type": "module", + "typeId": "local-storage", + "options": { + "method": "SET", + "dataType": "default-workspace" + } + }, + { + "id": "notification-source-create", + "type": "module", + "typeId": "example-notification-source", + "options": {} + }, + { + "id": "notification-source-clear", + "type": "module", + "typeId": "example-notification-source", + "options": {} + }, + { + "id": "notification-source-close", + "type": "module", + "typeId": "example-notification-source", + "options": {} + }, + { + "id": "notification-source-update", + "type": "module", + "typeId": "example-notification-source", + "options": {} + }, + { + "id": "notification-source-stream", + "type": "module", + "typeId": "example-notification-source", + "options": {} + } + ], + "endpointClients": { + "clientOptions": [ + { + "enabled": true, + "id": "default-workspace", + "endpointIds": ["get-default-workspace", "set-default-workspace"] + }, + { + "enabled": true, + "id": "pages-share", + "endpointIds": ["share-get", "share-set"] + }, + { + "enabled": true, + "id": "workspaces-share", + "endpointIds": ["share-get", "share-set"] + }, + { + "enabled": true, + "id": "default-wps-interop", + "endpointIds": ["*"] + }, + { + "enabled": true, + "id": "default-wps-platform", + "endpointIds": ["*"] + }, + { + "enabled": true, + "id": "example-notification-service", + "endpointIds": [ + "notification-source-create", + "notification-source-clear", + "notification-source-close", + "notification-source-update", + "notification-source-stream" + ] + } + ] + } + }, + "browserProvider": { + "defaultWindowOptions": { + "viewVisibility": { + "showViewsOnTabDrag": { + "enabled": true + }, + "showViewsOnSplitterDrag": { + "enabled": true + }, + "showViewsOnWindowResize": { + "enabled": true + } + }, + "workspacePlatform": { + "pages": [], + "title": { + "type": "view-title" + }, + "favicon": "http://localhost:5173/favicon.png", + "newTabUrl": "http://localhost:5173/common/views/platform/new-tab/new-tab.html", + "newPageUrl": "http://localhost:5173/common/views/platform/new-tab/new-tab.html", + "navigationButtons": { + "enabled": true + } + } + }, + "defaultViewOptions": {}, + "windowPositioningStrategy": { + "x": 30, + "y": 30, + "maxIncrements": 8 + }, + "globalMenu": [ + { + "include": true, + "label": "Toggle Notification Center", + "data": { + "type": "Custom", + "action": { + "id": "notification-toggle" + } + }, + "position": { + "type": "OpenStorefront", + "operation": "after" + } + }, + { + "include": true, + "label": "Open Home", + "data": { + "type": "Custom", + "action": { + "id": "home-show" + } + }, + "position": { + "type": "OpenStorefront", + "operation": "after" + } + }, + { + "include": true, + "label": "Quit App", + "position": { + "type": "Quit", + "operation": "replaceLabel" + } + }, + { + "include": true, + "label": "Log Out and Quit App", + "data": { + "type": "Custom", + "action": { + "id": "logout-and-quit" + } + }, + "position": { + "type": "Quit", + "operation": "after" + }, + "conditions": ["authenticated"] + } + ], + "pageMenu": [ + { + "include": true, + "label": "Move Page to new Window", + "data": { + "type": "Custom", + "action": { + "id": "move-page-to-new-window" + } + }, + "position": { + "operation": "start" + }, + "separator": "after" + } + ], + "viewMenu": [ + { + "include": true, + "label": "Move View(s) to new Window", + "data": { + "type": "Custom", + "action": { + "id": "move-view-to-new-window" + } + }, + "position": { + "operation": "start" + }, + "separator": "after" + } + ], + "toolbarButtons": [ + { + "include": false, + "id": "change-opacity", + "button": { + "type": "Custom", + "tooltip": "Change Opacity", + "disabled": false, + "iconUrl": "http://localhost:5173/favicon.png", + "action": { + "id": "change-opacity", + "customData": { + "sourceId": "change-opacity", + "replacementId": "restore-opacity" + } + } + } + }, + { + "include": false, + "id": "restore-opacity", + "button": { + "type": "Custom", + "tooltip": "Restore Opacity", + "disabled": false, + "iconUrl": "http://localhost:5173/favicon.png", + "action": { + "id": "restore-opacity", + "customData": { + "sourceId": "restore-opacity", + "replacementId": "change-opacity" + } + } + } + }, + { + "include": false, + "id": "toggle-scheme", + "button": { + "type": "Custom", + "tooltip": "Toggle Scheme", + "disabled": false, + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/theme.svg", + "action": { + "id": "toggle-scheme", + "customData": {} + } + }, + "conditions": ["themed"] + }, + { + "include": false, + "id": "home-show", + "button": { + "type": "Custom", + "tooltip": "Show Home", + "disabled": false, + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/search.svg", + "action": { + "id": "home-show", + "customData": {} + } + } + }, + { + "include": false, + "id": "notification-toggle", + "button": { + "type": "Custom", + "tooltip": "Toggle Notification Center", + "disabled": false, + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/bell.svg", + "action": { + "id": "notification-toggle", + "customData": {} + } + } + }, + { + "include": false, + "id": "include-in-snapshot", + "button": { + "type": "Custom", + "tooltip": "Include in Snapshot", + "disabled": false, + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/snapshot-removed.svg", + "action": { + "id": "include-in-snapshot", + "customData": { + "sourceId": "include-in-snapshot", + "replacementId": "remove-from-snapshot" + } + } + }, + "conditions": ["removed-from-snapshot"] + }, + { + "include": false, + "id": "remove-from-snapshot", + "button": { + "type": "Custom", + "tooltip": "Remove from snapshot", + "disabled": false, + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/snapshot-included.svg", + "action": { + "id": "remove-from-snapshot", + "customData": { + "sourceId": "remove-from-snapshot", + "replacementId": "include-in-snapshot" + } + } + }, + "conditions": ["included-in-snapshot"] + }, + { + "include": true, + "id": "pin-window", + "button": { + "type": "Custom", + "tooltip": "Pin this window", + "disabled": false, + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/pin.svg", + "action": { + "id": "pin-window", + "customData": { + "sourceId": "pin-window", + "replacementId": "unpin-window" + } + } + } + }, + { + "include": false, + "id": "unpin-window", + "button": { + "type": "Custom", + "tooltip": "Unpin this window", + "disabled": false, + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/pin-vertical.svg", + "action": { + "id": "unpin-window", + "customData": { + "sourceId": "unpin-window", + "replacementId": "pin-window" + } + } + } + }, + { + "include": true, + "id": "lock-unlock", + "button": { + "type": "LockUnlockPage" + } + }, + { + "include": true, + "id": "show-hide-tabs", + "button": { + "type": "ShowHideTabs" + } + }, + { + "include": true, + "id": "color-linking", + "button": { + "type": "ColorLinking" + } + }, + { + "include": true, + "id": "preset-layouts", + "button": { + "type": "PresetLayouts" + } + }, + { + "include": true, + "id": "share", + "button": { + "type": "Custom", + "tooltip": "Share", + "disabled": false, + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/share.svg", + "action": { + "id": "share", + "customData": {} + } + }, + "conditions": ["sharing"] + }, + { + "include": true, + "id": "save-menu", + "button": { + "type": "SaveMenu" + } + } + ] + }, + "themeProvider": { + "themes": [ + { + "id": "default", + "label": "Default", + "logoUrl": "http://localhost:5173/favicon.png", + "default": "dark", + "palettes": { + "light": { + "brandPrimary": "#0A76D3", + "brandSecondary": "#1E1F23", + "backgroundPrimary": "#FAFBFE", + "background1": "#FFFFFF", + "background2": "#FAFBFE", + "background3": "#F3F5F8", + "background4": "#ECEEF1", + "background5": "#DDDFE4", + "background6": "#C9CBD2", + "statusSuccess": "#35C759", + "statusWarning": "#F48F00", + "statusCritical": "#BE1D1F", + "statusActive": "#0498FB", + "inputBackground": "#ECEEF1", + "inputColor": "#1E1F23", + "inputPlaceholder": "#383A40", + "inputDisabled": "#7D808A", + "inputFocused": "#C9CBD2", + "textDefault": "#1E1F23", + "textHelp": "#2F3136", + "textInactive": "#7D808A", + "contentBackground1": "#0A76D3", + "contentBackground2": "#000000", + "contentBackground3": "#000000", + "contentBackground4": "#000000", + "contentBackground5": "#000000", + "linkDefault": "#6CADE5", + "linkHover": "#0A76D3" + }, + "dark": { + "brandPrimary": "#0A76D3", + "brandSecondary": "#383A40", + "backgroundPrimary": "#1E1F23", + "background1": "#111214", + "background2": "#1E1F23", + "background3": "#24262B", + "background4": "#2F3136", + "background5": "#383A40", + "background6": "#53565F", + "statusSuccess": "#35C759", + "statusWarning": "#F48F00", + "statusCritical": "#BE1D1F", + "statusActive": "#0498FB", + "inputBackground": "#53565F", + "inputColor": "#FFFFFF", + "inputPlaceholder": "#C9CBD2", + "inputDisabled": "#7D808A", + "inputFocused": "#C9CBD2", + "textDefault": "#FFFFFF", + "textHelp": "#C9CBD2", + "textInactive": "#7D808A", + "contentBackground1": "#0A76D3", + "contentBackground2": "#000000", + "contentBackground3": "#000000", + "contentBackground4": "#000000", + "contentBackground5": "#000000", + "linkDefault": "#6CADE5", + "linkHover": "#0A76D3" + } + } + } + ] + }, + "homeProvider": { + "id": "workspace-platform-starter", + "title": "Workspace Platform Starter", + "icon": "http://localhost:5173/favicon.png", + "queryMinLength": 3, + "queryAgainst": ["title"] + }, + "storefrontProvider": { + "id": "workspace-platform-starter", + "title": "Workspace Platform Starter", + "icon": "http://localhost:5173/favicon.png", + "landingPage": { + "hero": { + "title": "Custom Hero Title", + "description": "This is a demonstration of the hero section that you can configure for your store.", + "cta": { + "title": "Hero Apps!", + "tags": ["hero"] + }, + "image": { + "src": "http://localhost:5173/common/images/store/superhero-unsplash.jpg" + } + }, + "topRow": { + "title": "Custom Top Row Content", + "items": [ + { + "title": "Dev Tools", + "description": "A collection of developer tools that can aid with building and debugging OpenFin applications.", + "image": { + "src": "http://localhost:5173/common/images/store/coding-2-unsplash.jpg" + }, + "tags": ["tools"], + "buttonTitle": "View" + }, + { + "title": "Learning Resource", + "description": "A collection of developer documents that can aid with building and debugging OpenFin applications.", + "image": { + "src": "http://localhost:5173/common/images/store/coding-3-unsplash.jpg" + }, + "tags": ["page"], + "buttonTitle": "View" + } + ] + }, + "middleRow": { + "title": "A collection of simple views that show how to share context using the FDC3 or Interop APIs.", + "tags": ["fdc3", "interop"] + }, + "bottomRow": { + "title": "Quick Access", + "items": [ + { + "title": "Views", + "description": "A collection of views made available through our catalog.", + "image": { + "src": "http://localhost:5173/common/images/store/coding-4-unsplash.jpg" + }, + "tags": ["view"], + "buttonTitle": "View" + }, + { + "title": "Web Apps", + "description": "A collection of web apps built using OpenFin.", + "image": { + "src": "http://localhost:5173/common/images/store/coding-5-unsplash.jpg" + }, + "tags": ["manifest"], + "buttonTitle": "View" + }, + { + "title": "Native Apps", + "description": "A collection of native apps made available through our catalog.", + "image": { + "src": "http://localhost:5173/common/images/store/coding-6-unsplash.jpg" + }, + "tags": ["native"], + "buttonTitle": "View" + } + ] + } + }, + "navigation": [ + { + "title": "Applications", + "items": [ + { + "title": "All Apps", + "tags": ["view", "page", "manifest", "native", "desktop-browser"] + }, + { + "title": "Views", + "tags": ["view"] + }, + { + "title": "Pages", + "tags": ["page"] + }, + { + "title": "Manifest", + "tags": ["manifest"] + }, + { + "title": "Native", + "tags": ["native"] + } + ] + }, + { + "title": "Context Sharing", + "items": [ + { + "title": "FDC3 API", + "tags": ["fdc3"] + }, + { + "title": "Interop API", + "tags": ["interop"] + } + ] + } + ], + "footer": { + "logo": { + "src": "http://localhost:5173/favicon.png", + "size": "32" + }, + "text": "Welcome to the OpenFin Sample Footer", + "links": [ + { + "title": "Github", + "url": "https://github.com/built-on-openfin/workspace-starter" + }, + { + "title": "YouTube", + "url": "https://www.youtube.com/user/OpenFinTech" + } + ] + } + }, + "dockProvider": { + "id": "workspace-platform-starter", + "title": "Workspace Platform Starter", + "icon": "http://localhost:5173/favicon.png", + "workspaceComponents": { + "hideHomeButton": false, + "hideWorkspacesButton": false, + "hideNotificationsButton": false, + "hideStorefrontButton": false + }, + "entries": [ + { + "id": "workspaces", + "tooltip": "Workspaces", + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/workspace.svg", + "action": { + "id": "workspaces-menu" + }, + "visible": false + }, + { + "id": "dock-apps", + "display": "individual", + "tags": ["dock"] + }, + { + "id": "fdc3-apps", + "display": "group", + "tooltip": "FDC3", + "tags": ["fdc3"] + }, + { + "id": "manager-apps", + "display": "group", + "tooltip": "Manager", + "iconUrl": "http://localhost:5173/common/images/icon-gradient.png", + "tags": ["manager"] + }, + { + "id": "favorites", + "tooltip": "Favorites", + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/favorite.svg", + "action": { + "id": "favorites-menu" + }, + "conditions": ["favorites"] + }, + { + "id": "pages", + "tooltip": "Pages", + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/page.svg", + "action": { + "id": "pages-menu" + } + }, + { + "id": "google", + "tooltip": "Google", + "iconUrl": "https://www.google.com/favicon.ico", + "action": { + "id": "launch-view", + "customData": { + "url": "https://www.google.com" + } + } + }, + { + "id": "social", + "tooltip": "Social", + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/share.svg", + "options": [ + { + "tooltip": "Twitter", + "action": { + "id": "launch-view", + "customData": { + "url": "https://twitter.com/openfintech" + } + } + }, + { + "tooltip": "YouTube", + "action": { + "id": "launch-view", + "customData": { + "url": "https://www.youtube.com/user/OpenFinTech" + } + } + }, + { + "tooltip": "Other", + "options": [ + { + "tooltip": "LinkedIn", + "action": { + "id": "launch-view", + "customData": { + "url": "https://www.linkedin.com/company/openfin" + } + } + }, + { + "tooltip": "GitHub", + "action": { + "id": "launch-view", + "customData": { + "url": "https://github.com/openfin" + } + } + }, + { + "tooltip": "Search", + "options": [ + { + "tooltip": "Google", + "action": { + "id": "launch-view", + "customData": { + "url": "https://www.google.com/search?q=openfin" + } + } + }, + { + "tooltip": "Bing", + "action": { + "id": "launch-view", + "customData": { + "url": "https://www.bing.com/search?q=openfin" + } + } + } + ] + } + ] + } + ] + }, + { + "id": "windows", + "tooltip": "Window Visibility", + "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/windows.svg", + "options": [ + { + "tooltip": "Show All Windows", + "action": { + "id": "window-show-all" + } + }, + { + "tooltip": "Hide All Windows", + "action": { + "id": "window-hide-all" + } + } + ] + } + ] + }, + "notificationProvider": { + "id": "workspace-platform-starter", + "title": "Workspace Platform Starter", + "icon": "http://localhost:5173/favicon.png", + "notificationClients": { + "defaults": { + "enforceIcon": false, + "includeInPlatform": true + }, + "restrictToListed": false, + "clientOptions": [] + } + }, + "integrationProvider": { + "icon": "http://localhost:5173/favicon.png", + "isManagementEnabled": false, + "command": "integrations", + "commandDescription": "Allows the management of integrations for this platform. You can decide whether enabled integrations should be included when a query is entered.", + "modules": [ + { + "id": "apps", + "icon": "http://localhost:5173/favicon.png", + "title": "Apps", + "description": "Search Applications", + "enabled": true, + "url": "http://localhost:5173/js/modules/apps.bundle.js", + "data": { + "manifestTypeMapping": { + "view": { + "entryLabel": "View", + "actionName": "" + }, + "inline-view": { + "entryLabel": "View", + "actionName": "" + }, + "window": { + "entryLabel": "Window", + "actionName": "" + }, + "inline-window": { + "entryLabel": "Window", + "actionName": "" + }, + "snapshot": { + "entryLabel": "Snapshot", + "actionName": "Launch Snapshot" + }, + "inline-snapshot": { + "entryLabel": "Snapshot", + "actionName": "Launch Snapshot" + }, + "manifest": { + "entryLabel": "App", + "actionName": "Launch App" + }, + "external": { + "entryLabel": "Native App", + "actionName": "Launch Native App" + }, + "inline-external": { + "entryLabel": "Native App", + "actionName": "Launch Native App" + }, + "appasset": { + "entryLabel": "Native App", + "actionName": "Launch Native App" + }, + "inline-appasset": { + "entryLabel": "Native App", + "actionName": "Launch Native App" + }, + "desktop-browser": { + "entryLabel": "Desktop Browser", + "actionName": "" + }, + "endpoint": { + "entryLabel": "Endpoint", + "actionName": "Launch" + }, + "connection": { + "entryLabel": "Connected App", + "actionName": "Launch Connected App" + } + }, + "favoritesEnabled": false + } + }, + { + "id": "workspaces", + "icon": "http://localhost:5173/favicon.png", + "title": "Workspaces", + "description": "Manage workspaces", + "enabled": true, + "url": "http://localhost:5173/js/modules/workspaces.bundle.js", + "data": { + "favoritesEnabled": false, + "images": { + "workspace": "http://localhost:5173/common/icons/{theme}/{scheme}/workspace.svg" + } + } + }, + { + "id": "pages", + "icon": "http://localhost:5173/favicon.png", + "title": "Pages", + "description": "Manage Pages", + "enabled": true, + "url": "http://localhost:5173/js/modules/pages.bundle.js", + "data": { + "favoritesEnabled": false, + "images": { + "page": "http://localhost:5173/common/icons/{theme}/{scheme}/page.svg" + } + } + }, + { + "id": "salesforce", + "icon": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/favicon.ico", + "title": "Salesforce", + "enabled": false, + "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/js/modules/salesforce.bundle.js", + "data": { + "appId": "", + "consumerKey": "", + "orgUrl": "", + "preload": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/js/preload.js", + "enableLibLogging": true, + "iconMap": { + "salesforce": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/salesforce.svg", + "contact": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/contact.svg", + "account": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/account.svg", + "chatter": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/chatter.svg", + "note": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/note.svg", + "task": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/task.svg", + "dashboard": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/dashboard.svg", + "phone": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/phone.svg", + "chat": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/chat.svg", + "email": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/email.svg" + } + } + }, + { + "id": "ms365", + "icon": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/favicon.ico", + "title": "Microsoft 365", + "enabled": false, + "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/js/integrations/ms365.bundle.js", + "data": { + "clientId": "", + "tenantId": "", + "redirectUri": "http://localhost:5173/oauth_redirect.html", + "permissions": [ + "User.Read", + "Presence.Read", + "Presence.Read.All", + "Directory.Read.All", + "Mail.ReadWrite", + "Contacts.Read", + "Tasks.Read", + "Calendars.ReadWrite", + "Chat.Read", + "ChannelMessage.Read.All", + "TeamMember.Read.All", + "ChannelMember.Read.All", + "Files.Read.All", + "Sites.Read.All" + ], + "disableGraphExplorer": false, + "enableLibLogging": true, + "images": { + "microsoft365": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/microsoft365.svg", + "teams": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/teams.svg", + "word": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/word.svg", + "excel": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/excel.svg", + "onenote": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/onenote.svg", + "powerpoint": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/powerpoint.svg", + "outlook": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/outlook-mail.svg", + "email": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/email.svg", + "calendar": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/calendar.svg", + "share": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/share.svg", + "chat": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/chat.svg", + "call": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/call.svg", + "contact": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/contact.svg", + "team": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/team.svg", + "file": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/file.svg", + "folder": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/folder.svg", + "channel": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/channel.svg", + "clock": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/clock.svg", + "check": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/check.svg", + "cross": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/cross.svg" + } + } + }, + { + "id": "servicenow", + "icon": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/favicon.ico", + "title": "ServiceNow", + "enabled": false, + "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/js/integrations/servicenow.bundle.js", + "data": { + "instanceUrl": "", + "clientId": "", + "enableLibLogging": true, + "images": { + "servicenow": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/apps/servicenow.svg", + "contact": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/types/contact.svg", + "account": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/types/account.svg", + "case": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/types/case.svg", + "task": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/types/task.svg", + "incident": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/types/incident.svg", + "call": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/icons/call.svg", + "email": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/icons/email.svg" + } + } + }, + { + "id": "about", + "icon": "http://localhost:5173/favicon.png", + "title": "About", + "description": "Provides information about this platform.", + "enabled": true, + "excludeFromSourceFilter": true, + "url": "http://localhost:5173/js/modules/about.bundle.js", + "data": {} + }, + { + "id": "quote", + "icon": "http://localhost:5173/favicon.png", + "title": "Quote Provider", + "enabled": false, + "url": "https://built-on-openfin.github.io/dev-extensions/extensions/v20.0.0/integrations/js/modules/quote.bundle.js", + "data": { + "rootUrl": "https://built-on-openfin.github.io/dev-extensions/extensions/v20.0.0/integrations/data/quotes/" + } + }, + { + "id": "emoji", + "icon": "http://localhost:5173/favicon.png", + "title": "Emoji Provider", + "enabled": false, + "url": "https://built-on-openfin.github.io/dev-extensions/extensions/v20.0.0/integrations/js/modules/emoji.bundle.js", + "data": {} + } + ] + }, + "initOptionsProvider": { + "modules": [ + { + "enabled": true, + "id": "interop", + "title": "Init Options Interop", + "url": "http://localhost:5173/js/modules/interop.bundle.js", + "data": { + "supportedActions": ["raise-intent", "share-context"] + } + }, + { + "enabled": true, + "id": "launch-app", + "title": "Init Options Launch App", + "url": "http://localhost:5173/js/modules/launch-app.bundle.js", + "data": { + "supportedActions": ["launch-app"], + "supportedManifestTypes": [ + "view", + "inline-view", + "window", + "inline-window", + "snapshot", + "inline-snapshot" + ] + } + }, + { + "enabled": true, + "id": "show-page", + "title": "Init Options Show Page", + "url": "http://localhost:5173/js/modules/pages.bundle.js", + "data": { + "supportedActions": ["show-page"] + } + }, + { + "enabled": true, + "id": "launch-workspace", + "title": "Init Options Launch Workspace", + "url": "http://localhost:5173/js/modules/launch-workspace.bundle.js", + "data": { + "supportedActions": ["launch-workspace"] + } + } + ] + }, + "loggerProvider": { + "modules": [ + { + "enabled": true, + "id": "console", + "title": "Console Logger", + "url": "http://localhost:5173/js/modules/console.bundle.js" + } + ] + }, + "actionsProvider": { + "modules": [ + { + "enabled": true, + "id": "opacity", + "title": "Opacity Action", + "url": "http://localhost:5173/js/modules/opacity.bundle.js" + }, + { + "enabled": true, + "id": "developer-actions", + "title": "Developer Actions", + "url": "http://localhost:5173/js/modules/developer.bundle.js" + }, + { + "enabled": true, + "id": "about-actions", + "title": "About Actions", + "url": "http://localhost:5173/js/modules/about.bundle.js", + "data": { + "windowOptions": { + "name": "about", + "url": "http://localhost:5173/common/windows/version/about.html", + "defaultCentered": true, + "showTaskbarIcon": false, + "autoShow": true, + "minimizable": false, + "maximizable": false, + "defaultHeight": 396, + "defaultWidth": 760, + "customData": {} + } + } + }, + { + "enabled": true, + "id": "page-actions", + "title": "Page Actions", + "url": "http://localhost:5173/js/modules/pages.bundle.js" + }, + { + "enabled": true, + "id": "window-actions", + "title": "Window Actions", + "url": "http://localhost:5173/js/modules/windows.bundle.js" + }, + { + "id": "custom-menu", + "icon": "http://localhost:5173/favicon.png", + "title": "Custom Menu", + "description": "Custom Menu", + "enabled": true, + "url": "http://localhost:5173/js/modules/custom-menu.bundle.js", + "data": { + "images": { + "page": "http://localhost:5173/common/icons/{theme}/{scheme}/page.svg", + "workspace": "http://localhost:5173/common/icons/{theme}/{scheme}/workspace.svg" + } + } + }, + { + "id": "favorites-menu", + "icon": "http://localhost:5173/favicon.png", + "title": "Favorites Menu", + "description": "Favorites Menu", + "enabled": false, + "url": "http://localhost:5173/js/modules/favorites-menu.bundle.js" + }, + { + "id": "include-in-snapshot", + "icon": "http://localhost:5173/favicon.png", + "title": "Include In Snapshot", + "description": "Include In Snapshot", + "enabled": false, + "url": "http://localhost:5173/js/modules/include-in-snapshot.bundle.js" + }, + { + "id": "default-workspace", + "icon": "http://localhost:5173/favicon.png", + "title": "Default Workspace", + "description": "Allows the setting of a default workspace and whether or not it should be set when an active workspace is switched.", + "enabled": true, + "url": "http://localhost:5173/js/modules/default-workspace.bundle.js" + }, + { + "id": "window-platform", + "icon": "http://localhost:5173/favicon.png", + "title": "Window Platform Actions", + "description": "Window Platform Actions", + "enabled": true, + "url": "http://localhost:5173/js/modules/window-platform.bundle.js" + } + ] + }, + "conditionsProvider": { + "modules": [ + { + "enabled": true, + "id": "about-conditions", + "title": "About Conditions", + "url": "http://localhost:5173/js/modules/about.bundle.js" + }, + { + "id": "include-in-snapshot", + "icon": "http://localhost:5173/favicon.png", + "title": "Include In Snapshot", + "description": "Include In Snapshot", + "enabled": false, + "url": "http://localhost:5173/js/modules/include-in-snapshot.bundle.js" + } + ] + }, + "connectionProvider": { + "connectionId": "workspace-connection", + "supportedActions": [ + "show-home", + "show-store", + "show-dock", + "show-notifications", + "hide-home", + "hide-store", + "minimize-dock", + "hide-notifications" + ], + "connections": [ + { + "identity": { + "uuid": "workspace-platform-starter" + }, + "validatePayload": false, + "connectionTypes": [ + { + "type": "broker" + } + ] + }, + { + "identity": { + "uuid": "*" + }, + "validatePayload": false, + "connectionTypes": [ + { + "type": "appSource" + }, + { + "type": "snapshotSource" + }, + { + "type": "actions" + }, + { + "type": "broker" + } + ] + } + ] + }, + "analyticsProvider": { + "modules": [ + { + "enabled": true, + "id": "analytics.console", + "title": "Console Analytics", + "url": "http://localhost:5173/js/modules/console.bundle.js", + "data": { + "eventLogLevel": "info" + } + }, + { + "enabled": true, + "id": "analytics.dev.channel", + "title": "Analytics Dev Channel", + "url": "http://localhost:5173/js/modules/developer.bundle.js", + "data": {} + } + ] + }, + "versionProvider": { + "appVersion": "1.0.0", + "minVersion": { + "workspace": "19.0.0" + }, + "versionWindow": { + "name": "versioning", + "url": "http://localhost:5173/windows/version/version.html", + "defaultCentered": true, + "showTaskbarIcon": false, + "autoShow": true, + "minimizable": false, + "maximizable": false, + "defaultHeight": 481, + "defaultWidth": 760, + "saveWindowState": false, + "includeInSnapshots": false + }, + "endpointId": "version", + "versionCheckIntervalInSeconds": 30 + }, + "menusProvider": { + "popupHtml": "http://localhost:5173/common/popups/menu/index.html", + "modules": [ + { + "enabled": true, + "id": "developer-menus", + "title": "Developer Menus", + "url": "http://localhost:5173/js/modules/developer.bundle.js", + "data": {} + }, + { + "id": "about", + "icon": "http://localhost:5173/favicon.png", + "title": "About", + "description": "Provides information about this platform.", + "enabled": true, + "url": "http://localhost:5173/js/modules/about.bundle.js", + "data": {} + }, + { + "id": "pages", + "icon": "http://localhost:5173/favicon.png", + "title": "Pages", + "description": "Provides additional menu options for pages.", + "enabled": true, + "url": "http://localhost:5173/js/modules/pages.bundle.js", + "data": {} + }, + { + "id": "windows", + "icon": "http://localhost:5173/favicon.png", + "title": "Windows", + "description": "Provides additional menu options for windows.", + "enabled": true, + "url": "http://localhost:5173/js/modules/windows.bundle.js", + "data": {} + }, + { + "id": "default-workspace", + "icon": "http://localhost:5173/favicon.png", + "title": "default workspace menu options", + "description": "set your default default workspace", + "enabled": true, + "url": "http://localhost:5173/js/modules/default-workspace.bundle.js", + "data": {} + } + ] + }, + "lowCodeIntegrationProvider": { + "modules": [ + { + "id": "ms365", + "title": "Microsoft 365 Low Code Integration", + "type": "ms365", + "enabled": false, + "data": { + "connect": { + "clientId": "", + "tenantId": "", + "redirectUri": "" + }, + "workflows": { + "search": { + "disableAutoInitialize": true + } + } + } + } + ] + }, + "authProvider": { + "modules": [ + { + "id": "openid-connect", + "icon": "http://localhost:5173/favicon.png", + "title": "OpenId Connect", + "description": "OpenId Connect", + "enabled": false, + "url": "http://localhost:5173/js/modules/openid-connect.bundle.js", + "data": { + "providerUrl": "", + "clientId": "", + "loginRedirectUrl": "http://localhost:5173/oidc_login.html", + "logoutRedirectUrl": "http://localhost:5173/oidc_logout.html", + "checkSessionValidityInSeconds": 30 + } + } + ] + }, + "trayProvider": { + "enabled": true, + "menuEntries": [ + { + "include": true, + "label": "Quit App", + "position": { + "operation": "end" + }, + "data": { + "type": "Custom", + "action": { + "id": "quit" + } + } + }, + { + "include": true, + "label": "Log Out and Quit App", + "data": { + "type": "Custom", + "action": { + "id": "logout-and-quit" + } + }, + "position": { + "operation": "end" + }, + "conditions": ["authenticated"] + } + ] + }, + "favoriteProvider": { + "enabled": false, + "favoriteIcon": "http://localhost:5173/common/icons/{theme}/{scheme}/favorite.svg", + "unfavoriteIcon": "http://localhost:5173/common/icons/{theme}/{scheme}/unfavorite.svg", + "favoriteCommand": "/fav", + "supportedFavoriteTypes": ["workspace", "page", "app"] + }, + "lifecycleProvider": { + "modules": [ + { + "id": "default-workspace", + "icon": "http://localhost:5173/favicon.png", + "title": "default workspace management", + "description": "set and apply your default workspace.", + "enabled": true, + "url": "http://localhost:5173/js/modules/default-workspace.bundle.js", + "data": {} + }, + { + "id": "example-notification-service", + "icon": "http://localhost:5173/favicon.png", + "title": "Example Notification Service", + "description": "Example Notification Service. See more at client/src/modules/example-notification-service/README.md", + "enabled": true, + "url": "http://localhost:5173/js/modules/example-notification-service.bundle.js", + "data": {} + } + ] + }, + "snapProvider": { + "enabled": false, + "id": "workspace-platform-starter", + "enableAutoWindowRegistration": true, + "serverAssetInfo": { + "src": "https://cdn.openfin.co/release/snap/1.0.0/snap.zip", + "alias": "openfin-snap", + "version": "1.0.0", + "target": "OpenFinSnap.exe" + }, + "serverOptions": { + "showDebug": false, + "keyToStick": true, + "disableBlurDropPreview": false, + "disableGPUAcceleratedDragging": false, + "disableUserUnstick": false + } + }, + "contentCreationProvider": { + "modules": [ + { + "id": "view-position-content-creation", + "icon": "http://localhost:5173/favicon.png", + "title": "View Position Content Creation", + "enabled": true, + "url": "http://localhost:5173/js/modules/view-position.bundle.js", + "data": { + "defaultViewPosition": "stack-right", + "rules": [ + { + "behavior": "window", + "match": ["https://www.newscientist.com/*"], + "options": { + "defaultWidth": 800, + "defaultHeight": 600 + } + }, + { + "behavior": "browser", + "match": ["https://www.livescience.com/*"] + }, + { + "behavior": "block", + "match": ["https://www.sciencenews.org/*"] + }, + { + "behavior": "view", + "match": ["https://*", "http://*"] + } + ] + } + } + ] + }, + "shareProvider": { + "modules": [ + { + "id": "pages-share", + "icon": "http://localhost:5173/favicon.png", + "title": "Pages Share", + "description": "Pages Share", + "enabled": true, + "url": "http://localhost:5173/js/modules/pages.bundle.js", + "data": { + "getEndpointId": "share-get", + "setEndpointId": "share-set", + "images": { + "error": "http://localhost:5173/common/icons/{theme}/{scheme}/error.svg", + "success": "http://localhost:5173/common/icons/{theme}/{scheme}/success.svg" + } + } + }, + { + "id": "workspaces-share", + "icon": "http://localhost:5173/favicon.png", + "title": "Workspaces Share", + "description": "Workspaces Share", + "enabled": true, + "url": "http://localhost:5173/js/modules/workspaces.bundle.js", + "data": { + "getEndpointId": "share-get", + "setEndpointId": "share-set", + "images": { + "error": "http://localhost:5173/common/icons/{theme}/{scheme}/error.svg", + "success": "http://localhost:5173/common/icons/{theme}/{scheme}/success.svg" + } + } + } + ] + }, + "dialogProvider": { + "dialogHtml": "http://localhost:5173/common/popups/dialog/index.html" + } + } +} diff --git a/frameworks/react/workspace-platform-starter/public/splash.html b/frameworks/react/workspace-platform-starter/public/splash.html new file mode 100644 index 0000000..0c720ee --- /dev/null +++ b/frameworks/react/workspace-platform-starter/public/splash.html @@ -0,0 +1,114 @@ + + + + + + + + + + + + +
+ OpenFin +

OpenFin

+
+
+
+
+

Platform

+
+ + + + + + + + + + +
+
+ + + diff --git a/frameworks/react/workspace-platform-starter/public/vite.svg b/frameworks/react/workspace-platform-starter/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/frameworks/react/workspace-platform-starter/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frameworks/react/workspace-platform-starter/src/App.tsx b/frameworks/react/workspace-platform-starter/src/App.tsx deleted file mode 100644 index 3d7ded3..0000000 --- a/frameworks/react/workspace-platform-starter/src/App.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' -import './App.css' - -function App() { - const [count, setCount] = useState(0) - - return ( - <> - -

Vite + React

-
- -

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

-
-

- Click on the Vite and React logos to learn more -

- - ) -} - -export default App diff --git a/frameworks/react/workspace-platform-starter/src/Provider.tsx b/frameworks/react/workspace-platform-starter/src/Provider.tsx new file mode 100644 index 0000000..6d0bdae --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/Provider.tsx @@ -0,0 +1,7 @@ +import { useOpenFin } from "./hooks/useOpenFin"; + +export function Provider() { + useOpenFin(); + + return

Provider

; +} diff --git a/frameworks/react/workspace-platform-starter/src/hooks/useOpenFin.tsx b/frameworks/react/workspace-platform-starter/src/hooks/useOpenFin.tsx new file mode 100644 index 0000000..fa35680 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/hooks/useOpenFin.tsx @@ -0,0 +1,71 @@ +import { useEffect, useRef } from "react"; +import { init as bootstrap } from "workspace-platform-starter/bootstrapper"; +import { createLogger } from "workspace-platform-starter/logger-provider"; +import { init as initializePlatform } from "workspace-platform-starter/platform/platform"; +import * as platformSplashProvider from "workspace-platform-starter/platform/platform-splash"; + +/** + * Initialize the provider and bootstrap the OpenFin platform + * + * @returns True if the provider started successfully. + */ +async function init(): Promise { + await platformSplashProvider.open(); + + try { + return await new Promise((resolve, reject) => { + const logger = createLogger("Provider"); + // Get a reference to the platform proxy and add an event listener + // to bootstrap the application once the platform is ready. + const platform = fin.Platform.getCurrentSync(); + + platform + .once("platform-api-ready", () => { + logger.info("Platform API Ready event received."); + bootstrap() + .then((success) => { + logger.info("Bootstrap return success:", success); + logger.info("Listener for Platform API Ready event setup."); + resolve(success); + return success; + }) + .catch((failure) => { + logger.error("Failed bootstrap execution for the following reason:", failure); + resolve(false); + }); + }) + .catch(async (reason) => { + logger.error("Listener for Platform API Ready event had a problem being setup:", reason); + resolve(false); + }); + + // initialize the platform to prepare the application and trigger the bootstrapping + // process once the platform is ready. + initializePlatform() + .then((success) => { + logger.info("Platform Initialized with success:", success); + if (!success) { + resolve(success); + } + return success; + }) + .catch((failure) => { + logger.error("Error encountered when trying to initiate platform:", failure); + reject(failure); + }); + }); + } finally { + await platformSplashProvider.close(); + } +} + +export function useOpenFin() { + const isInitialized = useRef(false); + + useEffect(() => { + if (!isInitialized.current) { + init(); + isInitialized.current = true; + } + }, []); +} diff --git a/frameworks/react/workspace-platform-starter/src/main.tsx b/frameworks/react/workspace-platform-starter/src/main.tsx index bef5202..624ee37 100644 --- a/frameworks/react/workspace-platform-starter/src/main.tsx +++ b/frameworks/react/workspace-platform-starter/src/main.tsx @@ -1,10 +1,10 @@ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import './index.css' -import App from './App.tsx' +import { Provider } from './Provider'; createRoot(document.getElementById('root')!).render( - + , ) diff --git a/frameworks/react/workspace-platform-starter/src/types/fdc3.d.ts b/frameworks/react/workspace-platform-starter/src/types/fdc3.d.ts new file mode 100644 index 0000000..9a1254a --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/types/fdc3.d.ts @@ -0,0 +1,5 @@ +import { type DesktopAgent } from "@finos/fdc3"; + +declare global { + const fdc3: DesktopAgent; +} diff --git a/frameworks/react/workspace-platform-starter/src/types/fin.d.ts b/frameworks/react/workspace-platform-starter/src/types/fin.d.ts new file mode 100644 index 0000000..8936d86 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/types/fin.d.ts @@ -0,0 +1,5 @@ +import type { fin as FinApi } from "@openfin/core"; + +declare global { + const fin: typeof FinApi; +} diff --git a/frameworks/react/workspace-platform-starter/tsconfig.app.json b/frameworks/react/workspace-platform-starter/tsconfig.app.json index c9ccbd4..d0c092d 100644 --- a/frameworks/react/workspace-platform-starter/tsconfig.app.json +++ b/frameworks/react/workspace-platform-starter/tsconfig.app.json @@ -1,9 +1,9 @@ { "compilerOptions": { "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "target": "ES2020", + "target": "ES2021", "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], + "lib": ["ES2021", "DOM", "DOM.Iterable"], "module": "ESNext", "skipLibCheck": true, @@ -16,12 +16,13 @@ "jsx": "react-jsx", /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "erasableSyntaxOnly": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true + "strict": false, + + "rootDir": ".", + "baseUrl": ".", + "paths": { + "workspace-platform-starter/*": ["openfin/framework/*"] + } }, - "include": ["src"] + "include": ["src", "openfin"] } diff --git a/frameworks/react/workspace-platform-starter/tsconfig.json b/frameworks/react/workspace-platform-starter/tsconfig.json index 1ffef60..d32ff68 100644 --- a/frameworks/react/workspace-platform-starter/tsconfig.json +++ b/frameworks/react/workspace-platform-starter/tsconfig.json @@ -1,7 +1,4 @@ { "files": [], - "references": [ - { "path": "./tsconfig.app.json" }, - { "path": "./tsconfig.node.json" } - ] + "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] } diff --git a/frameworks/react/workspace-platform-starter/tsconfig.node.json b/frameworks/react/workspace-platform-starter/tsconfig.node.json index 9728af2..80e75ff 100644 --- a/frameworks/react/workspace-platform-starter/tsconfig.node.json +++ b/frameworks/react/workspace-platform-starter/tsconfig.node.json @@ -19,7 +19,7 @@ "noUnusedParameters": true, "erasableSyntaxOnly": true, "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true + "noUncheckedSideEffectImports": true, }, "include": ["vite.config.ts"] } diff --git a/frameworks/react/workspace-platform-starter/vite.config.ts b/frameworks/react/workspace-platform-starter/vite.config.ts index 8b0f57b..d2d000b 100644 --- a/frameworks/react/workspace-platform-starter/vite.config.ts +++ b/frameworks/react/workspace-platform-starter/vite.config.ts @@ -1,7 +1,13 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; +import path from 'path'; -// https://vite.dev/config/ export default defineConfig({ - plugins: [react()], -}) + plugins: [react()], + resolve: { + alias: { + 'workspace-platform-starter': path.resolve(__dirname, './openfin/framework') + } + } + } +); From f69deb1b9da02bf853b4dd573d2e9bb2a9237cfb Mon Sep 17 00:00:00 2001 From: Ray Cashmore Date: Fri, 30 May 2025 10:58:47 +1000 Subject: [PATCH 3/8] Bundle modules --- .../workspace-platform-starter/README.md | 5 +- .../openfin/.eslintignore | 1 + .../openfin/.gitignore | 1 + .../package-lock.json | 182 ++++++++++++- .../workspace-platform-starter/package.json | 4 +- .../public/manifest.fin.json | 250 +++++++++--------- .../workspace-platform-starter/vite.config.ts | 145 +++++++++- 7 files changed, 452 insertions(+), 136 deletions(-) diff --git a/frameworks/react/workspace-platform-starter/README.md b/frameworks/react/workspace-platform-starter/README.md index 500a854..138dc68 100644 --- a/frameworks/react/workspace-platform-starter/README.md +++ b/frameworks/react/workspace-platform-starter/README.md @@ -6,7 +6,8 @@ ``` npm install -npm run dev +npm run build +npm start ``` -Launch [fin://localhost:5173/manifest.fin.json](fin://localhost:5173/manifest.fin.json) +Launch [fin://localhost:8080/manifest.fin.json](fin://localhost:8080/manifest.fin.json) diff --git a/frameworks/react/workspace-platform-starter/openfin/.eslintignore b/frameworks/react/workspace-platform-starter/openfin/.eslintignore index 76bd590..7352ff3 100644 --- a/frameworks/react/workspace-platform-starter/openfin/.eslintignore +++ b/frameworks/react/workspace-platform-starter/openfin/.eslintignore @@ -1,2 +1,3 @@ framework/ modules/ +common/ diff --git a/frameworks/react/workspace-platform-starter/openfin/.gitignore b/frameworks/react/workspace-platform-starter/openfin/.gitignore index 76bd590..7352ff3 100644 --- a/frameworks/react/workspace-platform-starter/openfin/.gitignore +++ b/frameworks/react/workspace-platform-starter/openfin/.gitignore @@ -1,2 +1,3 @@ framework/ modules/ +common/ diff --git a/frameworks/react/workspace-platform-starter/package-lock.json b/frameworks/react/workspace-platform-starter/package-lock.json index 8507482..d767830 100644 --- a/frameworks/react/workspace-platform-starter/package-lock.json +++ b/frameworks/react/workspace-platform-starter/package-lock.json @@ -30,7 +30,8 @@ "globals": "^16.0.0", "typescript": "~5.8.3", "typescript-eslint": "^8.30.1", - "vite": "^6.3.5" + "vite": "^6.3.5", + "vite-plugin-static-copy": "^3.0.0" } }, "node_modules/@ampproject/remapping": { @@ -1972,6 +1973,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2022,6 +2037,19 @@ ], "license": "MIT" }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bl": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.0.tgz", @@ -2176,6 +2204,44 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2713,6 +2779,21 @@ "dev": true, "license": "ISC" }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2763,6 +2844,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -2915,6 +3003,19 @@ "node": ">= 12" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3044,6 +3145,19 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -3285,6 +3399,16 @@ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "license": "MIT" }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/number-allocator": { "version": "1.0.14", "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz", @@ -3388,6 +3512,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3606,6 +3743,19 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4050,6 +4200,16 @@ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "license": "MIT" }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -4171,6 +4331,26 @@ } } }, + "node_modules/vite-plugin-static-copy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-3.0.0.tgz", + "integrity": "sha512-Uki9pPUQ4ZnoMEdIFabvoh9h6Bh9Q1m3iF7BrZvoiF30reREpJh2gZb4jOnW1/uYFzyRiLCmFSkM+8hwiq1vWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.3", + "fs-extra": "^11.3.0", + "p-map": "^7.0.3", + "picocolors": "^1.1.1", + "tinyglobby": "^0.2.13" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0" + } + }, "node_modules/vite/node_modules/fdir": { "version": "6.4.5", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", diff --git a/frameworks/react/workspace-platform-starter/package.json b/frameworks/react/workspace-platform-starter/package.json index 253139d..573a517 100644 --- a/frameworks/react/workspace-platform-starter/package.json +++ b/frameworks/react/workspace-platform-starter/package.json @@ -5,6 +5,7 @@ "type": "module", "scripts": { "dev": "vite", + "start": "vite", "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview" @@ -32,6 +33,7 @@ "globals": "^16.0.0", "typescript": "~5.8.3", "typescript-eslint": "^8.30.1", - "vite": "^6.3.5" + "vite": "^6.3.5", + "vite-plugin-static-copy": "^3.0.0" } } diff --git a/frameworks/react/workspace-platform-starter/public/manifest.fin.json b/frameworks/react/workspace-platform-starter/public/manifest.fin.json index 526df88..f2703d6 100644 --- a/frameworks/react/workspace-platform-starter/public/manifest.fin.json +++ b/frameworks/react/workspace-platform-starter/public/manifest.fin.json @@ -6,11 +6,11 @@ "version": "41.134.102.1" }, "platform": { - "name": "Workspace Platform Starter", + "name": "Workspace Platform Starter React Wrapper", "uuid": "workspace-platform-starter-react-wrapper", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "autoShow": true, - "providerUrl": "http://localhost:5173", + "providerUrl": "http://localhost:8080", "preventQuitOnLastWindowClosed": true, "appLogsTimezone": "utc", "enableAppLogging": false, @@ -74,7 +74,7 @@ "shortcut": { "company": "OpenFin", "description": "A way of showing examples of what OpenFin can do.", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "name": "Workspace Platform Starter - v20.0.0", "target": ["desktop", "start-menu"] }, @@ -96,21 +96,21 @@ "autoShow": ["dock", "home"] }, "splashScreenProvider": { - "url": "http://localhost:5173/splash.html" + "url": "http://localhost:8080/splash.html" }, "platformProvider": { - "rootUrl": "http://localhost:5173", + "rootUrl": "http://localhost:8080", "language": { "initialLanguage": "en-US" }, "modules": [ { "id": "default-wps-platform", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Workspace Platform Starter Platform Override", "description": "This is the implementation included in workspace platform starter but it is now exposed as a module to allow for easy replacement.", "enabled": true, - "url": "http://localhost:5173/js/modules/wps-platform-override.bundle.js", + "url": "http://localhost:8080/js/modules/wps-platform-override.bundle.js", "data": { "loggerName": "WpsPlatformOverride" } @@ -118,7 +118,7 @@ ], "interop": { "intentResolver": { - "url": "http://localhost:5173/common/windows/intents/instance-picker.html", + "url": "http://localhost:8080/common/windows/intents/instance-picker.html", "height": 715, "width": 665, "fdc3InteropApi": "2.0" @@ -132,7 +132,7 @@ "description": "If you can not find an application to support your action please check the instances associated with this entry to see if it satisfies your need.", "icons": [ { - "src": "http://localhost:5173/favicon.png" + "src": "http://localhost:8080/favicon.png" } ], "publisher": "Multiple", @@ -193,11 +193,11 @@ "modules": [ { "id": "openfin-cloud-interop", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "OpenFin Cloud Interop", "description": "OpenFin Cloud Interop", "enabled": false, - "url": "http://localhost:5173/js/modules/openfin-cloud-interop.bundle.js", + "url": "http://localhost:8080/js/modules/openfin-cloud-interop.bundle.js", "data": { "userId": "", "password": "", @@ -209,11 +209,11 @@ }, { "id": "default-wps-interop", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Workspace Platform Starter Interop Broker", "description": "This is the implementation included in workspace platform starter but it is now exposed as a module to allow for easy replacement.", "enabled": true, - "url": "http://localhost:5173/js/modules/wps-interop-override.bundle.js", + "url": "http://localhost:8080/js/modules/wps-interop-override.bundle.js", "data": { "loggerName": "WpsInteropOverride" } @@ -222,7 +222,7 @@ } }, "appProvider": { - "endpointIds": ["http://localhost:5173/apps.json"], + "endpointIds": ["http://localhost:8080/apps.json"], "cacheDurationInSeconds": 10, "cacheDurationInMinutes": 0, "manifestTypes": [ @@ -253,27 +253,27 @@ "title": "Local Storage", "enabled": true, "id": "local-storage", - "url": "http://localhost:5173/js/modules/local-storage.bundle.js" + "url": "http://localhost:8080/js/modules/local-storage.bundle.js" }, { "title": "Favorite Local Storage", "enabled": true, "id": "favorite-local-storage", - "url": "http://localhost:5173/js/modules/favorite-local-storage.bundle.js" + "url": "http://localhost:8080/js/modules/favorite-local-storage.bundle.js" }, { "title": "Context Processor", "enabled": true, "id": "context-processor", - "url": "http://localhost:5173/js/modules/example-context-processor.bundle.js" + "url": "http://localhost:8080/js/modules/example-context-processor.bundle.js" }, { "id": "example-notification-source", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Example Notification Source", "description": "Example Notification Source. Please see docs in client/src/modules/example-notification-source/README.md", "enabled": true, - "url": "http://localhost:5173/js/modules/example-notification-source.bundle.js", + "url": "http://localhost:8080/js/modules/example-notification-source.bundle.js", "data": { "websocket": { "url": "" @@ -467,9 +467,9 @@ "title": { "type": "view-title" }, - "favicon": "http://localhost:5173/favicon.png", - "newTabUrl": "http://localhost:5173/common/views/platform/new-tab/new-tab.html", - "newPageUrl": "http://localhost:5173/common/views/platform/new-tab/new-tab.html", + "favicon": "http://localhost:8080/favicon.png", + "newTabUrl": "http://localhost:8080/common/views/platform/new-tab/new-tab.html", + "newPageUrl": "http://localhost:8080/common/views/platform/new-tab/new-tab.html", "navigationButtons": { "enabled": true } @@ -574,7 +574,7 @@ "type": "Custom", "tooltip": "Change Opacity", "disabled": false, - "iconUrl": "http://localhost:5173/favicon.png", + "iconUrl": "http://localhost:8080/favicon.png", "action": { "id": "change-opacity", "customData": { @@ -591,7 +591,7 @@ "type": "Custom", "tooltip": "Restore Opacity", "disabled": false, - "iconUrl": "http://localhost:5173/favicon.png", + "iconUrl": "http://localhost:8080/favicon.png", "action": { "id": "restore-opacity", "customData": { @@ -608,7 +608,7 @@ "type": "Custom", "tooltip": "Toggle Scheme", "disabled": false, - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/theme.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/theme.svg", "action": { "id": "toggle-scheme", "customData": {} @@ -623,7 +623,7 @@ "type": "Custom", "tooltip": "Show Home", "disabled": false, - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/search.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/search.svg", "action": { "id": "home-show", "customData": {} @@ -637,7 +637,7 @@ "type": "Custom", "tooltip": "Toggle Notification Center", "disabled": false, - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/bell.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/bell.svg", "action": { "id": "notification-toggle", "customData": {} @@ -651,7 +651,7 @@ "type": "Custom", "tooltip": "Include in Snapshot", "disabled": false, - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/snapshot-removed.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/snapshot-removed.svg", "action": { "id": "include-in-snapshot", "customData": { @@ -669,7 +669,7 @@ "type": "Custom", "tooltip": "Remove from snapshot", "disabled": false, - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/snapshot-included.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/snapshot-included.svg", "action": { "id": "remove-from-snapshot", "customData": { @@ -687,7 +687,7 @@ "type": "Custom", "tooltip": "Pin this window", "disabled": false, - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/pin.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/pin.svg", "action": { "id": "pin-window", "customData": { @@ -704,7 +704,7 @@ "type": "Custom", "tooltip": "Unpin this window", "disabled": false, - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/pin-vertical.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/pin-vertical.svg", "action": { "id": "unpin-window", "customData": { @@ -749,7 +749,7 @@ "type": "Custom", "tooltip": "Share", "disabled": false, - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/share.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/share.svg", "action": { "id": "share", "customData": {} @@ -771,7 +771,7 @@ { "id": "default", "label": "Default", - "logoUrl": "http://localhost:5173/favicon.png", + "logoUrl": "http://localhost:8080/favicon.png", "default": "dark", "palettes": { "light": { @@ -841,14 +841,14 @@ "homeProvider": { "id": "workspace-platform-starter", "title": "Workspace Platform Starter", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "queryMinLength": 3, "queryAgainst": ["title"] }, "storefrontProvider": { "id": "workspace-platform-starter", "title": "Workspace Platform Starter", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "landingPage": { "hero": { "title": "Custom Hero Title", @@ -858,7 +858,7 @@ "tags": ["hero"] }, "image": { - "src": "http://localhost:5173/common/images/store/superhero-unsplash.jpg" + "src": "http://localhost:8080/common/images/store/superhero-unsplash.jpg" } }, "topRow": { @@ -868,7 +868,7 @@ "title": "Dev Tools", "description": "A collection of developer tools that can aid with building and debugging OpenFin applications.", "image": { - "src": "http://localhost:5173/common/images/store/coding-2-unsplash.jpg" + "src": "http://localhost:8080/common/images/store/coding-2-unsplash.jpg" }, "tags": ["tools"], "buttonTitle": "View" @@ -877,7 +877,7 @@ "title": "Learning Resource", "description": "A collection of developer documents that can aid with building and debugging OpenFin applications.", "image": { - "src": "http://localhost:5173/common/images/store/coding-3-unsplash.jpg" + "src": "http://localhost:8080/common/images/store/coding-3-unsplash.jpg" }, "tags": ["page"], "buttonTitle": "View" @@ -895,7 +895,7 @@ "title": "Views", "description": "A collection of views made available through our catalog.", "image": { - "src": "http://localhost:5173/common/images/store/coding-4-unsplash.jpg" + "src": "http://localhost:8080/common/images/store/coding-4-unsplash.jpg" }, "tags": ["view"], "buttonTitle": "View" @@ -904,7 +904,7 @@ "title": "Web Apps", "description": "A collection of web apps built using OpenFin.", "image": { - "src": "http://localhost:5173/common/images/store/coding-5-unsplash.jpg" + "src": "http://localhost:8080/common/images/store/coding-5-unsplash.jpg" }, "tags": ["manifest"], "buttonTitle": "View" @@ -913,7 +913,7 @@ "title": "Native Apps", "description": "A collection of native apps made available through our catalog.", "image": { - "src": "http://localhost:5173/common/images/store/coding-6-unsplash.jpg" + "src": "http://localhost:8080/common/images/store/coding-6-unsplash.jpg" }, "tags": ["native"], "buttonTitle": "View" @@ -963,7 +963,7 @@ ], "footer": { "logo": { - "src": "http://localhost:5173/favicon.png", + "src": "http://localhost:8080/favicon.png", "size": "32" }, "text": "Welcome to the OpenFin Sample Footer", @@ -982,7 +982,7 @@ "dockProvider": { "id": "workspace-platform-starter", "title": "Workspace Platform Starter", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "workspaceComponents": { "hideHomeButton": false, "hideWorkspacesButton": false, @@ -993,7 +993,7 @@ { "id": "workspaces", "tooltip": "Workspaces", - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/workspace.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/workspace.svg", "action": { "id": "workspaces-menu" }, @@ -1014,13 +1014,13 @@ "id": "manager-apps", "display": "group", "tooltip": "Manager", - "iconUrl": "http://localhost:5173/common/images/icon-gradient.png", + "iconUrl": "http://localhost:8080/common/images/icon-gradient.png", "tags": ["manager"] }, { "id": "favorites", "tooltip": "Favorites", - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/favorite.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/favorite.svg", "action": { "id": "favorites-menu" }, @@ -1029,7 +1029,7 @@ { "id": "pages", "tooltip": "Pages", - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/page.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/page.svg", "action": { "id": "pages-menu" } @@ -1048,7 +1048,7 @@ { "id": "social", "tooltip": "Social", - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/share.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/share.svg", "options": [ { "tooltip": "Twitter", @@ -1119,7 +1119,7 @@ { "id": "windows", "tooltip": "Window Visibility", - "iconUrl": "http://localhost:5173/common/icons/{theme}/{scheme}/windows.svg", + "iconUrl": "http://localhost:8080/common/icons/{theme}/{scheme}/windows.svg", "options": [ { "tooltip": "Show All Windows", @@ -1140,7 +1140,7 @@ "notificationProvider": { "id": "workspace-platform-starter", "title": "Workspace Platform Starter", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "notificationClients": { "defaults": { "enforceIcon": false, @@ -1151,18 +1151,18 @@ } }, "integrationProvider": { - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "isManagementEnabled": false, "command": "integrations", "commandDescription": "Allows the management of integrations for this platform. You can decide whether enabled integrations should be included when a query is entered.", "modules": [ { "id": "apps", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Apps", "description": "Search Applications", "enabled": true, - "url": "http://localhost:5173/js/modules/apps.bundle.js", + "url": "http://localhost:8080/js/modules/apps.bundle.js", "data": { "manifestTypeMapping": { "view": { @@ -1227,29 +1227,29 @@ }, { "id": "workspaces", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Workspaces", "description": "Manage workspaces", "enabled": true, - "url": "http://localhost:5173/js/modules/workspaces.bundle.js", + "url": "http://localhost:8080/js/modules/workspaces.bundle.js", "data": { "favoritesEnabled": false, "images": { - "workspace": "http://localhost:5173/common/icons/{theme}/{scheme}/workspace.svg" + "workspace": "http://localhost:8080/common/icons/{theme}/{scheme}/workspace.svg" } } }, { "id": "pages", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Pages", "description": "Manage Pages", "enabled": true, - "url": "http://localhost:5173/js/modules/pages.bundle.js", + "url": "http://localhost:8080/js/modules/pages.bundle.js", "data": { "favoritesEnabled": false, "images": { - "page": "http://localhost:5173/common/icons/{theme}/{scheme}/page.svg" + "page": "http://localhost:8080/common/icons/{theme}/{scheme}/page.svg" } } }, @@ -1288,7 +1288,7 @@ "data": { "clientId": "", "tenantId": "", - "redirectUri": "http://localhost:5173/oauth_redirect.html", + "redirectUri": "http://localhost:8080/oauth_redirect.html", "permissions": [ "User.Read", "Presence.Read", @@ -1355,17 +1355,17 @@ }, { "id": "about", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "About", "description": "Provides information about this platform.", "enabled": true, "excludeFromSourceFilter": true, - "url": "http://localhost:5173/js/modules/about.bundle.js", + "url": "http://localhost:8080/js/modules/about.bundle.js", "data": {} }, { "id": "quote", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Quote Provider", "enabled": false, "url": "https://built-on-openfin.github.io/dev-extensions/extensions/v20.0.0/integrations/js/modules/quote.bundle.js", @@ -1375,7 +1375,7 @@ }, { "id": "emoji", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Emoji Provider", "enabled": false, "url": "https://built-on-openfin.github.io/dev-extensions/extensions/v20.0.0/integrations/js/modules/emoji.bundle.js", @@ -1389,7 +1389,7 @@ "enabled": true, "id": "interop", "title": "Init Options Interop", - "url": "http://localhost:5173/js/modules/interop.bundle.js", + "url": "http://localhost:8080/js/modules/interop.bundle.js", "data": { "supportedActions": ["raise-intent", "share-context"] } @@ -1398,7 +1398,7 @@ "enabled": true, "id": "launch-app", "title": "Init Options Launch App", - "url": "http://localhost:5173/js/modules/launch-app.bundle.js", + "url": "http://localhost:8080/js/modules/launch-app.bundle.js", "data": { "supportedActions": ["launch-app"], "supportedManifestTypes": [ @@ -1415,7 +1415,7 @@ "enabled": true, "id": "show-page", "title": "Init Options Show Page", - "url": "http://localhost:5173/js/modules/pages.bundle.js", + "url": "http://localhost:8080/js/modules/pages.bundle.js", "data": { "supportedActions": ["show-page"] } @@ -1424,7 +1424,7 @@ "enabled": true, "id": "launch-workspace", "title": "Init Options Launch Workspace", - "url": "http://localhost:5173/js/modules/launch-workspace.bundle.js", + "url": "http://localhost:8080/js/modules/launch-workspace.bundle.js", "data": { "supportedActions": ["launch-workspace"] } @@ -1437,7 +1437,7 @@ "enabled": true, "id": "console", "title": "Console Logger", - "url": "http://localhost:5173/js/modules/console.bundle.js" + "url": "http://localhost:8080/js/modules/console.bundle.js" } ] }, @@ -1447,23 +1447,23 @@ "enabled": true, "id": "opacity", "title": "Opacity Action", - "url": "http://localhost:5173/js/modules/opacity.bundle.js" + "url": "http://localhost:8080/js/modules/opacity.bundle.js" }, { "enabled": true, "id": "developer-actions", "title": "Developer Actions", - "url": "http://localhost:5173/js/modules/developer.bundle.js" + "url": "http://localhost:8080/js/modules/developer.bundle.js" }, { "enabled": true, "id": "about-actions", "title": "About Actions", - "url": "http://localhost:5173/js/modules/about.bundle.js", + "url": "http://localhost:8080/js/modules/about.bundle.js", "data": { "windowOptions": { "name": "about", - "url": "http://localhost:5173/common/windows/version/about.html", + "url": "http://localhost:8080/common/windows/version/about.html", "defaultCentered": true, "showTaskbarIcon": false, "autoShow": true, @@ -1479,59 +1479,59 @@ "enabled": true, "id": "page-actions", "title": "Page Actions", - "url": "http://localhost:5173/js/modules/pages.bundle.js" + "url": "http://localhost:8080/js/modules/pages.bundle.js" }, { "enabled": true, "id": "window-actions", "title": "Window Actions", - "url": "http://localhost:5173/js/modules/windows.bundle.js" + "url": "http://localhost:8080/js/modules/windows.bundle.js" }, { "id": "custom-menu", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Custom Menu", "description": "Custom Menu", "enabled": true, - "url": "http://localhost:5173/js/modules/custom-menu.bundle.js", + "url": "http://localhost:8080/js/modules/custom-menu.bundle.js", "data": { "images": { - "page": "http://localhost:5173/common/icons/{theme}/{scheme}/page.svg", - "workspace": "http://localhost:5173/common/icons/{theme}/{scheme}/workspace.svg" + "page": "http://localhost:8080/common/icons/{theme}/{scheme}/page.svg", + "workspace": "http://localhost:8080/common/icons/{theme}/{scheme}/workspace.svg" } } }, { "id": "favorites-menu", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Favorites Menu", "description": "Favorites Menu", "enabled": false, - "url": "http://localhost:5173/js/modules/favorites-menu.bundle.js" + "url": "http://localhost:8080/js/modules/favorites-menu.bundle.js" }, { "id": "include-in-snapshot", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Include In Snapshot", "description": "Include In Snapshot", "enabled": false, - "url": "http://localhost:5173/js/modules/include-in-snapshot.bundle.js" + "url": "http://localhost:8080/js/modules/include-in-snapshot.bundle.js" }, { "id": "default-workspace", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Default Workspace", "description": "Allows the setting of a default workspace and whether or not it should be set when an active workspace is switched.", "enabled": true, - "url": "http://localhost:5173/js/modules/default-workspace.bundle.js" + "url": "http://localhost:8080/js/modules/default-workspace.bundle.js" }, { "id": "window-platform", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Window Platform Actions", "description": "Window Platform Actions", "enabled": true, - "url": "http://localhost:5173/js/modules/window-platform.bundle.js" + "url": "http://localhost:8080/js/modules/window-platform.bundle.js" } ] }, @@ -1541,15 +1541,15 @@ "enabled": true, "id": "about-conditions", "title": "About Conditions", - "url": "http://localhost:5173/js/modules/about.bundle.js" + "url": "http://localhost:8080/js/modules/about.bundle.js" }, { "id": "include-in-snapshot", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Include In Snapshot", "description": "Include In Snapshot", "enabled": false, - "url": "http://localhost:5173/js/modules/include-in-snapshot.bundle.js" + "url": "http://localhost:8080/js/modules/include-in-snapshot.bundle.js" } ] }, @@ -1605,7 +1605,7 @@ "enabled": true, "id": "analytics.console", "title": "Console Analytics", - "url": "http://localhost:5173/js/modules/console.bundle.js", + "url": "http://localhost:8080/js/modules/console.bundle.js", "data": { "eventLogLevel": "info" } @@ -1614,7 +1614,7 @@ "enabled": true, "id": "analytics.dev.channel", "title": "Analytics Dev Channel", - "url": "http://localhost:5173/js/modules/developer.bundle.js", + "url": "http://localhost:8080/js/modules/developer.bundle.js", "data": {} } ] @@ -1626,7 +1626,7 @@ }, "versionWindow": { "name": "versioning", - "url": "http://localhost:5173/windows/version/version.html", + "url": "http://localhost:8080/windows/version/version.html", "defaultCentered": true, "showTaskbarIcon": false, "autoShow": true, @@ -1641,49 +1641,49 @@ "versionCheckIntervalInSeconds": 30 }, "menusProvider": { - "popupHtml": "http://localhost:5173/common/popups/menu/index.html", + "popupHtml": "http://localhost:8080/common/popups/menu/index.html", "modules": [ { "enabled": true, "id": "developer-menus", "title": "Developer Menus", - "url": "http://localhost:5173/js/modules/developer.bundle.js", + "url": "http://localhost:8080/js/modules/developer.bundle.js", "data": {} }, { "id": "about", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "About", "description": "Provides information about this platform.", "enabled": true, - "url": "http://localhost:5173/js/modules/about.bundle.js", + "url": "http://localhost:8080/js/modules/about.bundle.js", "data": {} }, { "id": "pages", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Pages", "description": "Provides additional menu options for pages.", "enabled": true, - "url": "http://localhost:5173/js/modules/pages.bundle.js", + "url": "http://localhost:8080/js/modules/pages.bundle.js", "data": {} }, { "id": "windows", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Windows", "description": "Provides additional menu options for windows.", "enabled": true, - "url": "http://localhost:5173/js/modules/windows.bundle.js", + "url": "http://localhost:8080/js/modules/windows.bundle.js", "data": {} }, { "id": "default-workspace", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "default workspace menu options", "description": "set your default default workspace", "enabled": true, - "url": "http://localhost:5173/js/modules/default-workspace.bundle.js", + "url": "http://localhost:8080/js/modules/default-workspace.bundle.js", "data": {} } ] @@ -1714,16 +1714,16 @@ "modules": [ { "id": "openid-connect", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "OpenId Connect", "description": "OpenId Connect", "enabled": false, - "url": "http://localhost:5173/js/modules/openid-connect.bundle.js", + "url": "http://localhost:8080/js/modules/openid-connect.bundle.js", "data": { "providerUrl": "", "clientId": "", - "loginRedirectUrl": "http://localhost:5173/oidc_login.html", - "logoutRedirectUrl": "http://localhost:5173/oidc_logout.html", + "loginRedirectUrl": "http://localhost:8080/oidc_login.html", + "logoutRedirectUrl": "http://localhost:8080/oidc_logout.html", "checkSessionValidityInSeconds": 30 } } @@ -1763,8 +1763,8 @@ }, "favoriteProvider": { "enabled": false, - "favoriteIcon": "http://localhost:5173/common/icons/{theme}/{scheme}/favorite.svg", - "unfavoriteIcon": "http://localhost:5173/common/icons/{theme}/{scheme}/unfavorite.svg", + "favoriteIcon": "http://localhost:8080/common/icons/{theme}/{scheme}/favorite.svg", + "unfavoriteIcon": "http://localhost:8080/common/icons/{theme}/{scheme}/unfavorite.svg", "favoriteCommand": "/fav", "supportedFavoriteTypes": ["workspace", "page", "app"] }, @@ -1772,20 +1772,20 @@ "modules": [ { "id": "default-workspace", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "default workspace management", "description": "set and apply your default workspace.", "enabled": true, - "url": "http://localhost:5173/js/modules/default-workspace.bundle.js", + "url": "http://localhost:8080/js/modules/default-workspace.bundle.js", "data": {} }, { "id": "example-notification-service", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Example Notification Service", "description": "Example Notification Service. See more at client/src/modules/example-notification-service/README.md", "enabled": true, - "url": "http://localhost:5173/js/modules/example-notification-service.bundle.js", + "url": "http://localhost:8080/js/modules/example-notification-service.bundle.js", "data": {} } ] @@ -1812,10 +1812,10 @@ "modules": [ { "id": "view-position-content-creation", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "View Position Content Creation", "enabled": true, - "url": "http://localhost:5173/js/modules/view-position.bundle.js", + "url": "http://localhost:8080/js/modules/view-position.bundle.js", "data": { "defaultViewPosition": "stack-right", "rules": [ @@ -1848,40 +1848,40 @@ "modules": [ { "id": "pages-share", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Pages Share", "description": "Pages Share", "enabled": true, - "url": "http://localhost:5173/js/modules/pages.bundle.js", + "url": "http://localhost:8080/js/modules/pages.bundle.js", "data": { "getEndpointId": "share-get", "setEndpointId": "share-set", "images": { - "error": "http://localhost:5173/common/icons/{theme}/{scheme}/error.svg", - "success": "http://localhost:5173/common/icons/{theme}/{scheme}/success.svg" + "error": "http://localhost:8080/common/icons/{theme}/{scheme}/error.svg", + "success": "http://localhost:8080/common/icons/{theme}/{scheme}/success.svg" } } }, { "id": "workspaces-share", - "icon": "http://localhost:5173/favicon.png", + "icon": "http://localhost:8080/favicon.png", "title": "Workspaces Share", "description": "Workspaces Share", "enabled": true, - "url": "http://localhost:5173/js/modules/workspaces.bundle.js", + "url": "http://localhost:8080/js/modules/workspaces.bundle.js", "data": { "getEndpointId": "share-get", "setEndpointId": "share-set", "images": { - "error": "http://localhost:5173/common/icons/{theme}/{scheme}/error.svg", - "success": "http://localhost:5173/common/icons/{theme}/{scheme}/success.svg" + "error": "http://localhost:8080/common/icons/{theme}/{scheme}/error.svg", + "success": "http://localhost:8080/common/icons/{theme}/{scheme}/success.svg" } } } ] }, "dialogProvider": { - "dialogHtml": "http://localhost:5173/common/popups/dialog/index.html" + "dialogHtml": "http://localhost:8080/common/popups/dialog/index.html" } } } diff --git a/frameworks/react/workspace-platform-starter/vite.config.ts b/frameworks/react/workspace-platform-starter/vite.config.ts index d2d000b..b4b666d 100644 --- a/frameworks/react/workspace-platform-starter/vite.config.ts +++ b/frameworks/react/workspace-platform-starter/vite.config.ts @@ -1,13 +1,144 @@ import react from "@vitejs/plugin-react"; import { defineConfig } from "vite"; import path from 'path'; +import { viteStaticCopy } from "vite-plugin-static-copy"; export default defineConfig({ - plugins: [react()], + root: __dirname, + plugins: [ + react(), + viteStaticCopy({ + targets: [ + { + src: path.resolve(__dirname, "./openfin/common"), + dest: "./" + } + ] + }) + ], resolve: { - alias: { - 'workspace-platform-starter': path.resolve(__dirname, './openfin/framework') - } - } - } -); + alias: { + 'workspace-platform-starter': path.resolve(__dirname, './openfin/framework') + } + }, + server: { + port: 8080 + }, + build: { + outDir: "./dist", + emptyOutDir: true, + reportCompressedSize: true, + commonjsOptions: { + transformMixedEsModules: true + }, + // lib: { + // entry: "src/index.ts", + // name: "openfin-modules", + // fileName: "index", + // formats: ["es"] + // }, + rollupOptions: { + external: ["fin", "react", "react-dom", "react/jsx-runtime"], + input: { + // Provider React app + main: path.resolve(__dirname, "src/main.tsx"), + + // Modules + interop: path.resolve(__dirname, "./openfin/modules/init-options/interop/index.ts"), + example: path.resolve(__dirname, "./openfin/modules/auth/example/index.ts"), + "local-storage": path.resolve(__dirname, "./openfin/modules/endpoint/local-storage/index.ts"), + channel: path.resolve(__dirname, "./openfin/modules/endpoint/channel/index.ts"), + "inline-apps": path.resolve(__dirname, "./openfin/modules/endpoint/inline-apps/index.ts"), + "launch-app": path.resolve(__dirname, "./openfin/modules/init-options/launch-app/index.ts"), + console: path.resolve(__dirname, "./openfin/modules/log/console/index.ts"), + opacity: path.resolve(__dirname, "./openfin/modules/actions/opacity/index.ts"), + "example-connection-validation": path.resolve( + __dirname, + "./openfin/modules/endpoint/example-connection-validation/index.ts" + ), + "analytics-console": path.resolve(__dirname, "./openfin/modules/analytics/console/index.ts"), + developer: path.resolve(__dirname, "./openfin/modules/composite/developer/index.ts"), + apps: path.resolve(__dirname, "./openfin/modules/integrations/apps/index.ts"), + workspaces: path.resolve(__dirname, "./openfin/modules/integrations/workspaces/index.ts"), + pages: path.resolve(__dirname, "./openfin/modules/integrations/pages/index.ts"), + about: path.resolve(__dirname, "./openfin/modules/composite/about/index.ts"), + "composite-pages": path.resolve(__dirname, "./openfin/modules/composite/pages/index.ts"), + windows: path.resolve(__dirname, "./openfin/modules/composite/windows/index.ts"), + "example-context-processor": path.resolve( + __dirname, + "./openfin/modules/endpoint/example-context-processor/index.ts" + ), + "fdc3-mapper": path.resolve(__dirname, "./openfin/framework/fdc3/index.ts"), + "custom-menu": path.resolve(__dirname, "./openfin/modules/actions/custom-menu/index.ts"), + "openid-connect": path.resolve(__dirname, "./openfin/modules/auth/openid-connect/index.ts"), + "favorite-local-storage": path.resolve( + __dirname, + "./openfin/modules/endpoint/favorite-local-storage/index.ts" + ), + "favorites-menu": path.resolve(__dirname, "./openfin/modules/actions/favorites-menu/index.ts"), + "include-in-snapshot": path.resolve( + __dirname, + "./openfin/modules/composite/include-in-snapshot/index.ts" + ), + "example-notification-service": path.resolve( + __dirname, + "./openfin/modules/lifecycle/example-notification-service/index.ts" + ), + "example-notification-source": path.resolve( + __dirname, + "./openfin/modules/endpoint/example-notification-source/index.ts" + ), + "application-url-and-access-validator": path.resolve( + __dirname, + "./openfin/modules/platform-override/application-url-and-access-validator/index.ts" + ), + "launch-workspace": path.resolve( + __dirname, + "./openfin/modules/init-options/launch-workspace/index.ts" + ), + "default-workspace": path.resolve( + __dirname, + "./openfin/modules/composite/default-workspace/index.ts" + ), + "view-position": path.resolve(__dirname, "./openfin/modules/content-creation/view-position/index.ts"), + "window-platform": path.resolve(__dirname, "./openfin/modules/actions/window-platform/index.ts"), + "share-pages": path.resolve(__dirname, "./openfin/modules/share/pages/index.ts"), + "share-workspaces": path.resolve(__dirname, "./openfin/modules/share/workspaces/index.ts"), + "wps-interop-override": path.resolve( + __dirname, + "./openfin/modules/interop-override/wps-interop-override/index.ts" + ), + "openfin-cloud-interop": path.resolve( + __dirname, + "./openfin/modules/interop-override/openfin-cloud-interop/index.ts" + ), + "wps-platform-override": path.resolve( + __dirname, + "./openfin/modules/platform-override/wps-platform-override/index.ts" + ), + "snap-window-selection-override": path.resolve( + __dirname, + "./openfin/modules/platform-override/snap-window-selection-override/index.ts" + ), + "get-user-decision-for-beforeunload": path.resolve( + __dirname, + "./openfin/modules/platform-override/get-user-decision-for-beforeunload/index.ts" + ) + }, + output: { + format: "es", + dir: path.resolve(__dirname, "dist"), + sourcemap: false, + manualChunks: undefined, + // preserveModules: true, + preserveModulesRoot: "openfin/modules", + entryFileNames: (chunkInfo) => { + if (chunkInfo.name === "main") { + return "[name].bundle.js" + } + return `js/modules/[name].bundle.js`; + } + } + } + } +}); From 2095b830cfb5ec03ca2585e178518744369b6564 Mon Sep 17 00:00:00 2001 From: Ray Cashmore Date: Fri, 30 May 2025 11:18:00 +1000 Subject: [PATCH 4/8] Update readme --- .../workspace-platform-starter/README.md | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/frameworks/react/workspace-platform-starter/README.md b/frameworks/react/workspace-platform-starter/README.md index 138dc68..7d93e7c 100644 --- a/frameworks/react/workspace-platform-starter/README.md +++ b/frameworks/react/workspace-platform-starter/README.md @@ -1,8 +1,44 @@ # React Wrapper for Workspace Platform Starter +This project provides a React wrapper for the main [workspace-platform-starter](https://github.com/built-on-openfin/workspace-starter/tree/main/how-to/workspace-platform-starter). + +Teams who prefer to use the build tooling available in the React ecosystem can use this starter to bootstrap a new Here® Core platform. + +The source code stays in the original starter so that it can continue to evolve and to avoid duplication. + +## Prerequsites + +Please follow the [getting started](https://resources.here.io/docs/core/develop/) guide to install the OpenFin RVM. + ## Getting started -### Development +### Add workspace-platform-starter source files + +Manually copy the original workspace-platform-starter source files: + +Clone the main workspace-starter repo + +``` +git clone https://github.com/built-on-openfin/workspace-starter.git --depth=1 +``` + +Manually copy the following folders from the **how-to/workspace-platform-starter** directory: + +``` +client/src/framework +client/src/modules +public/common +``` + +And paste them into the **/openfin** folder in this project so that you have: + +``` +/openfin/common +/openfin/framework +/openfin/modules +``` + +### Develop ``` npm install @@ -11,3 +47,12 @@ npm start ``` Launch [fin://localhost:8080/manifest.fin.json](fin://localhost:8080/manifest.fin.json) + +### Build for production + +``` +npm install +npm run build +``` + +The files to deploy will be in the `dist` folder From 0c2827c4e84a5622c16921d9b72d473f4b21e0a6 Mon Sep 17 00:00:00 2001 From: Ray Cashmore Date: Fri, 30 May 2025 11:46:45 +1000 Subject: [PATCH 5/8] Cleanup provider --- .../workspace-platform-starter/index.html | 2 +- .../public/apps.json | 412 +++++++++++++++--- .../public/favicon.png | Bin 0 -> 1722 bytes .../workspace-platform-starter/src/App.css | 42 -- .../src/Provider.tsx | 10 +- .../workspace-platform-starter/src/main.tsx | 3 +- 6 files changed, 355 insertions(+), 114 deletions(-) create mode 100644 frameworks/react/workspace-platform-starter/public/favicon.png delete mode 100644 frameworks/react/workspace-platform-starter/src/App.css diff --git a/frameworks/react/workspace-platform-starter/index.html b/frameworks/react/workspace-platform-starter/index.html index e4b78ea..0cd3c67 100644 --- a/frameworks/react/workspace-platform-starter/index.html +++ b/frameworks/react/workspace-platform-starter/index.html @@ -4,7 +4,7 @@ - Vite + React + TS + OpenFin Workspace Platform Starter
diff --git a/frameworks/react/workspace-platform-starter/public/apps.json b/frameworks/react/workspace-platform-starter/public/apps.json index 423110b..7c87a68 100644 --- a/frameworks/react/workspace-platform-starter/public/apps.json +++ b/frameworks/react/workspace-platform-starter/public/apps.json @@ -1,71 +1,345 @@ [ - { - "appId": "my-team", - "name": "my-team", - "title": "My Team", - "description": "View my team.", - "manifest": "http://localhost:8080/common/views/manager-portal/my-team.view.fin.json", - "manifestType": "view", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [ - { - "src": "http://localhost:8080/common/images/previews/manager/preview-manager-portal-my-team.jpeg" - } - ], - "tags": ["view", "manager", "fcd3"] - }, - { - "appId": "annual-leave", - "name": "annual-leave", - "title": "Annual Leave", - "description": "View the annual leave for a team member.", - "manifest": "http://localhost:8080/common/views/manager-portal/annual-leave.view.fin.json", - "manifestType": "view", - "icons": [ - { - "src": "http://localhost:8080/common/views/manager-portal/annual-leave/favicon.ico" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [ - { - "src": "http://localhost:8080/common/images/previews/manager/preview-manager-portal-annual-leave.jpeg" - } - ], - "tags": ["view", "manager", "fcd3"] - }, - { - "appId": "manager-paths", - "name": "manager-paths", - "title": "Manager Paths", - "description": "View the manager paths for a team member.", - "manifest": "http://localhost:8080/common/views/manager-portal/manager-paths.view.fin.json", - "manifestType": "view", - "icons": [ - { - "src": "http://localhost:8080/common/views/manager-portal/manager-paths/favicon.ico" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [ - { - "src": "http://localhost:8080/common/images/previews/manager/preview-manager-portal-manager-paths.jpeg" - } - ], - "tags": ["view", "manager", "fcd3"] - } + { + "appId": "view-contact-dashboard-launcher", + "name": "view-contact-dashboard-launcher", + "title": "View Contact Dashboard", + "description": "A hidden window that acts as an intent target and launches and snapshot and optionally publishes a context object to a specific context group", + "manifest": { + "name": "view-contact-dashboard-launcher", + "url": "http://localhost:8080/common/windows/intent-window/intent-snapshot-launcher.html", + "autoShow": false, + "includeInSnapshots": false, + "customData": { + "settings": { + "snapshotUrl": "http://localhost:8080/common/snapshots/template-contact-dashboard.snapshot.fin.json", + "contextGroupName": "*", + "contextGroupToken": "{CONTEXT_GROUP}", + "intentName": "ViewContact", + "idToken": "{ID}", + "idName": "email" + } + } + }, + "manifestType": "inline-window", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [ + { + "name": "ViewContact", + "displayName": "View Contact", + "contexts": ["fdc3.contact"] + } + ], + "private": true, + "instanceMode": "single", + "customConfig": {}, + "images": [ + { + "src": "http://localhost:8080/common/images/previews/view-contact-dashboard-launcher.png" + } + ], + "tags": ["window", "fdc3", "interop", "contact"] + }, + { + "appId": "starter-style-guide", + "name": "starter-style-guide", + "title": "Starter Style Guide", + "description": "A style guide used to aid in the building of workspace starter samples.", + "manifest": "http://localhost:8080/common/style/style-view.json", + "manifestType": "view", + "icons": [{ "src": "http://localhost:8080/common/images/icon-blue.png" }], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [ + { + "src": "http://localhost:8080/common/images/previews/starter-style-guide.png" + } + ], + "tags": ["view", "style", "tools"] + }, + { + "appId": "openfin-versions-workspace", + "name": "openfin-versions-workspace", + "title": "OpenFin Versions - Workspace", + "description": "Launch the OpenFin Workspace Versions page. This launches the url as a view to demonstrate the capability. This is an example of a inline-view entry in the app catalog.", + "manifest": { + "url": "https://developer.openfin.co/versions/?product=Runtime#/?product=Workspace", + "name": "openfin-versions" + }, + "manifestType": "inline-view", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [], + "tags": ["versions", "view"] + }, + { + "appId": "openfin-versions-runtime", + "name": "openfin-versions-runtime", + "title": "OpenFin Versions - Runtime", + "description": "Launch the OpenFin Runtime Versions page. This launches in a classic window to demonstrate the capability. This is a example of an inline-window entry in the app catalog.", + "manifest": { + "url": "https://developer.openfin.co/versions/?product=Runtime" + }, + "manifestType": "inline-window", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [], + "tags": ["versions", "window"] + }, + { + "appId": "openfin-versions-integrations", + "name": "openfin-versions-integrations", + "title": "OpenFin Versions - Integrations", + "description": "Launch the OpenFin Integrations Versions page. This launches the url into the desktop browser to demonstrate the capability. This is an example of a desktop-browser entry in the app catalog.", + "manifest": "https://developer.openfin.co/versions/?product=Runtime#/?product=Integrations", + "manifestType": "desktop-browser", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [], + "tags": ["versions", "desktop-browser"] + }, + { + "appId": "openfin-information", + "name": "openfin-information", + "title": "OpenFin Information", + "description": "Display information about the OpenFin environment", + "manifest": "http://localhost:8080/common/views/platform/of-info.view.fin.json", + "manifestType": "view", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [ + { + "src": "http://localhost:8080/common/images/previews/of-info.png" + } + ], + "tags": ["view", "openfin", "versions"] + }, + { + "appId": "openfin-developer-page", + "name": "openfin-developer-page", + "title": "OpenFin Developer Docs", + "manifestType": "snapshot", + "description": "Shows a collection of OpenFin developer pages and provides an example of how you can present a pre-built page as a launch target in OpenFin Home. This entry has a manifest type of 'snapshot'.", + "manifest": "http://localhost:8080/common/snapshots/developer.snapshot.fin.json", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [ + { + "src": "http://localhost:8080/common/images/previews/openfin-page-docs.png" + } + ], + "tags": ["page", "developer"] + }, + { + "appId": "hidden-window-example", + "name": "hidden-window-example", + "title": "Hidden/Headless Window Example", + "manifestType": "window", + "description": "An example of launching a window that will not be captured as part of a saved workspace and will run headless in the background. This window generates a notification to show that it can be a window with a specific purpose (listening for notifications to create). The notification lets you show or close the hidden window. Only one instance can be running at a time. This window could be launched as part of your bootstrapping logic or in reaction to a particular event. It is listed in home as a way of launching the example.", + "manifest": "http://localhost:8080/common/windows/hidden-window/hidden.window.fin.json", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [], + "tags": ["window", "headless", "developer"] + }, + { + "appId": "irs-rfq", + "name": "irs-rfq", + "title": "IRS: Request For Quote", + "description": "Request for quote for Interest Rate Swaps.", + "manifest": "http://localhost:8080/common/windows/irs-rfq/irs-rfq.window.fin.json", + "manifestType": "window", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [ + { + "src": "http://localhost:8080/common/images/previews/irs-rfq.png" + }, + { + "src": "http://localhost:8080/common/images/previews/irs-rfq-notification1.png" + } + ], + "tags": ["view", "irs", "finance"] + }, + { + "appId": "openfin-frame", + "name": "openfin-frame", + "title": "Framed App", + "description": "An example of framing an application, injecting the fin and fdc3 apis and wiring up context group assignment and title updates.", + "manifest": { + "url": "http://localhost:8080/common/views/frame/parent/index.html", + "customData": { + "frame": { + "url": "http://localhost:8080/common/views/frame/example-content/example.html", + "title": "Example Frame", + "sandbox": "allow-forms allow-same-origin allow-scripts" + } + }, + "api": { + "iframe": { + "crossOriginInjection": true, + "sameOriginInjection": true + } + }, + "fdc3InteropApi": "2.0", + "preloadScripts": [ + { + "url": "http://localhost:8080/common/views/frame/framed/framed.preload.js" + } + ] + }, + "manifestType": "inline-view", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [], + "tags": ["developer", "view"] + }, + { + "appId": "openfin-frame-no-api", + "name": "openfin-frame-no-api", + "title": "Framed App (No API Injection)", + "description": "An example of framing an application, not injecting APIs but using a script loaded by the parent and the child and browser APIs (Postmessage) to sync title changes and provide a basic fdc3 api.", + "manifest": { + "url": "http://localhost:8080/common/views/frame/parent/index.html", + "customData": { + "frame": { + "url": "http://localhost:8080/common/views/frame/example-content/example.html", + "title": "Example Frame (No API Injection)", + "sandbox": "allow-forms allow-same-origin allow-scripts" + } + }, + "api": { + "iframe": { + "crossOriginInjection": false, + "sameOriginInjection": false + } + }, + "preloadScripts": [ + { + "url": "http://localhost:8080/common/views/frame/framed/framed.preload.js" + } + ] + }, + "manifestType": "inline-view", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [], + "tags": ["developer", "view"] + }, + { + "appId": "openfin-content-creation", + "name": "openfin-content-creation", + "title": "Content Creation Examples", + "description": "An example of using content creation rules to launch views/windows.", + "manifest": { + "url": "http://localhost:8080/common/views/content-creation/view-position.html" + }, + "manifestType": "inline-view", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [], + "tags": ["developer", "view"] + }, + { + "appId": "openfin-warn-before-closing", + "name": "openfin-warn-before-closing", + "title": "Example Warn Before Closing App", + "description": "An example app from our container starter: https://github.com/built-on-openfin/container-starter/tree/main/how-to/use-platform/warn-before-closing-dialog that makes the platform aware if there are unsaved changes (platform needs enableBeforeUnload to be set to true in the manifest and needs to override getUserDecisionForBeforeUnload.", + "manifest": { + "url": "https://built-on-openfin.github.io/container-starter/main/use-platform-warn-before-closing-dialog/html/view.html", + "customData": {}, + "api": {}, + "fdc3InteropApi": "2.0" + }, + "manifestType": "inline-view", + "icons": [ + { + "src": "http://localhost:8080/common/images/icon-blue.png" + } + ], + "contactEmail": "contact@example.com", + "supportEmail": "support@example.com", + "publisher": "OpenFin", + "intents": [], + "images": [], + "tags": ["developer", "view"] + } ] diff --git a/frameworks/react/workspace-platform-starter/public/favicon.png b/frameworks/react/workspace-platform-starter/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..2518a1f39e21c95a4e51611ddff31d57c95e9d6d GIT binary patch literal 1722 zcmV;r21WUaP)3(R6#nME*S;>S(g&rXq?AMvg3BK@A!6W%^oR1ps5Gc(G(sqg1eBHtE<_|Dge4jb zxB_tjLy$k9MobVBqN0RFWT`A|X(_fqOW$_iof&h^%zN)XdRs8w*U8*_J9Ex=zH`nu zSEyxgYxKJ8E1>`$^sE5K4j}n6)yAYg6CSY0Bk!78Q2Bc#<2}V^eMhCm^lOC3Bf6#(AvNJ6g{W^B)%+j#GNTP zP79?#0Ez(#2yfZSUP_p06{CMf!)TV|AsR*L>=)pa2B#r)r5)!!+=6sGZX9PvMhi)Z z3?O1dxDD?FNU=euLT0g&TviM~67uLUl-5i|VO1rZq6mZ&%A}U_o4DML=I?&Q^>Y{D zrPGkKUt0jA1r`7$LnIpB?FB##FGKjz$#BMuW`pv4Gh*K!fP1AA9so}RX_}o7yn-+y zV@6|S&195RMDw~sNeP*9as6B~PVM~(U2UC4jL5NKErN*EugL@8l$RkgyB4CPINw-2 zfsRdIA=!QvX$`m#aJ4Y^R8U1lxOc%*7*H`RutnWi68kso!qv8GCMm4Tfat1Up9i31 z*5e3|9~)>ScB~PtTlcZU%t%Rrls2PmVig{mGc7M2enS_IT*SUj`^`aUyFzpJ+2m4IH z@!ziC<2AnYyupK;@cL{b{(G^4l>GnPMq zXyw4*`nlm@?dwO-(%fU{XHj$@PAu7z2Y?<5%Lijb%{Y`+-+@ph1gZ`H)z#9Cqu(^5 z=~Oq@K=jU`nDk^d%0>;yE+Yq0YNV19r%rU^>upVFX^KOzv|Du|B|NF4zys=kt7;L1(>vWA_i6D>%+}_w>BlQs{RbRx+T)eh?cQsz6bpP zIMg3rIouBbG9ch7u(9%chT!43<|`=h(!j=57x3$$ZeCAAD$Aw?A*j+dAMVVw*t_s} zHYNP2mictn6as0bA&SDNU3(Xtn<&qKq5hsf>kK-t+2{!XG3aA~02qhX)9wXl z`(Z$H1O$Ym5dyQ;SEH~vSZES)g_mm^5qCAx(mJ;w=rB^5LNjFsXa%uz!NtJin5)KBI!_J8XrplfH_M1_BKEL%A0Eh+3r(t2x z$S`V`MNwRu&qAz6VP$HF%AM8x9Y7n&h&ARC z2(2-sB8*3#7=WsAg}n3hi4=BjzlQVYUAU5*=Z0a?Fpv`oYDWv;qq?rZ8lXNk?UOTR zSkUaml?t9vNO~Ial;UT8?{}`0uLyl^SPv|K&2_OpQeXfOdSZd1qUb$k9HrQyMAEa) zX=ZSWi#D?-6FmhIn1W4p$$kO&86d+1AVo#yNu;DiiUH8QGIf##pz>-U4}hP6Pa0eU zz`|f+ShWlT6gg{wG6vI@0oRjoJ>>%+P4yE1%b27TWV?XmHzW0Q5E(iC7f^lZd~!Ua QProvider; + return ( +
+

OpenFin platform provider

+

+ The window would usually be hidden, you can make it hidden on startup by setting the + platform.autoShow flag to false in the manifest.fin.json +

+
+ ); } diff --git a/frameworks/react/workspace-platform-starter/src/main.tsx b/frameworks/react/workspace-platform-starter/src/main.tsx index 624ee37..4fc40e3 100644 --- a/frameworks/react/workspace-platform-starter/src/main.tsx +++ b/frameworks/react/workspace-platform-starter/src/main.tsx @@ -1,8 +1,9 @@ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' -import './index.css' import { Provider } from './Provider'; +import './index.css' + createRoot(document.getElementById('root')!).render( From 13d84ea7cbf346d5cf5385a210f9e9a4d49ff8c6 Mon Sep 17 00:00:00 2001 From: Ray Cashmore Date: Sat, 31 May 2025 17:55:10 +1000 Subject: [PATCH 6/8] Fix vite modules --- .../workspace-platform-starter/package.json | 4 +- .../public/manifest.fin.json | 548 ++++++++++++------ .../workspace-platform-starter/vite.config.ts | 187 +++--- 3 files changed, 423 insertions(+), 316 deletions(-) diff --git a/frameworks/react/workspace-platform-starter/package.json b/frameworks/react/workspace-platform-starter/package.json index 573a517..12c1497 100644 --- a/frameworks/react/workspace-platform-starter/package.json +++ b/frameworks/react/workspace-platform-starter/package.json @@ -5,10 +5,10 @@ "type": "module", "scripts": { "dev": "vite", - "start": "vite", + "start": "vite preview --port 8080", "build": "tsc -b && vite build", "lint": "eslint .", - "preview": "vite preview" + "preview": "vite preview --port 8080" }, "dependencies": { "@finos/fdc3": "2.0.3", diff --git a/frameworks/react/workspace-platform-starter/public/manifest.fin.json b/frameworks/react/workspace-platform-starter/public/manifest.fin.json index f2703d6..74a1438 100644 --- a/frameworks/react/workspace-platform-starter/public/manifest.fin.json +++ b/frameworks/react/workspace-platform-starter/public/manifest.fin.json @@ -9,7 +9,7 @@ "name": "Workspace Platform Starter React Wrapper", "uuid": "workspace-platform-starter-react-wrapper", "icon": "http://localhost:8080/favicon.png", - "autoShow": true, + "autoShow": false, "providerUrl": "http://localhost:8080", "preventQuitOnLastWindowClosed": true, "appLogsTimezone": "utc", @@ -23,9 +23,14 @@ "launchExternalProcess": true, "terminateExternalProcess": true, "downloadAsset": true, + "serveAsset": true, "openUrlWithBrowser": { "enabled": true, - "protocols": ["mailto", "msteams", "tel"] + "protocols": [ + "mailto", + "msteams", + "tel" + ] } } }, @@ -34,7 +39,11 @@ "System": { "openUrlWithBrowser": { "enabled": true, - "protocols": ["mailto", "msteams", "tel"] + "protocols": [ + "mailto", + "msteams", + "tel" + ] } } }, @@ -55,7 +64,11 @@ "System": { "openUrlWithBrowser": { "enabled": true, - "protocols": ["mailto", "msteams", "tel"] + "protocols": [ + "mailto", + "msteams", + "tel" + ] } } } @@ -74,9 +87,12 @@ "shortcut": { "company": "OpenFin", "description": "A way of showing examples of what OpenFin can do.", - "icon": "http://localhost:8080/favicon.png", - "name": "Workspace Platform Starter - v20.0.0", - "target": ["desktop", "start-menu"] + "icon": "http://localhost:8080/favicon.ico", + "name": "Workspace Platform Starter - v21.0.0", + "target": [ + "desktop", + "start-menu" + ] }, "supportInformation": { "company": "OpenFin", @@ -87,13 +103,24 @@ "snapshot": { "windows": [] }, + "appAssets": [ + { + "src": "http://localhost:8080/common/assets/workspace_platform.zip", + "alias": "self-hosted-workspace-platform", + "version": "21.0.0", + "target": "workspace.asar" + } + ], "customSettings": { "bootstrap": { "home": true, "store": true, "dock": true, "notifications": true, - "autoShow": ["dock", "home"] + "autoShow": [ + "dock", + "home" + ] }, "splashScreenProvider": { "url": "http://localhost:8080/splash.html" @@ -106,11 +133,11 @@ "modules": [ { "id": "default-wps-platform", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Workspace Platform Starter Platform Override", "description": "This is the implementation included in workspace platform starter but it is now exposed as a module to allow for easy replacement.", "enabled": true, - "url": "http://localhost:8080/js/modules/wps-platform-override.bundle.js", + "url": "http://localhost:8080/js/modules/platform-override/wps-platform-override.bundle.js", "data": { "loggerName": "WpsPlatformOverride" } @@ -126,13 +153,17 @@ "intentOptions": {}, "openOptions": {}, "contextOptions": {}, + "getInfoOptions": { + "includeAppInteropInfo": true, + "includeAllAppMetadataInfo": false + }, "unregisteredApp": { "appId": "unregistered", "title": "Other", "description": "If you can not find an application to support your action please check the instances associated with this entry to see if it satisfies your need.", "icons": [ { - "src": "http://localhost:8080/favicon.png" + "src": "http://localhost:8080/favicon.ico" } ], "publisher": "Multiple", @@ -140,32 +171,49 @@ { "name": "StartCall", "displayName": "Start a Call", - "contexts": ["fdc3.contact", "fdc3.contactList"] + "contexts": [ + "fdc3.contact", + "fdc3.contactList" + ] }, { "name": "StartChat", "displayName": "Start a Chat", - "contexts": ["fdc3.contact", "fdc3.contactList"] + "contexts": [ + "fdc3.contact", + "fdc3.contactList" + ] }, { "name": "ViewChart", "displayName": "View Chart", - "contexts": ["fdc3.instrument", "fdc3.instrumentList", "fdc3.portfolio", "fdc3.position"] + "contexts": [ + "fdc3.instrument", + "fdc3.instrumentList", + "fdc3.portfolio", + "fdc3.position" + ] }, { "name": "ViewContact", "displayName": "View Contact Details", - "contexts": ["fdc3.contact"] + "contexts": [ + "fdc3.contact" + ] }, { "name": "ViewProfile", "displayName": "View Profile", - "contexts": ["fdc3.contact"] + "contexts": [ + "fdc3.contact" + ] }, { "name": "ViewQuote", "displayName": "View Quote", - "contexts": ["fdc3.instrument"] + "contexts": [ + "fdc3.instrument" + ] }, { "name": "ViewNews", @@ -181,26 +229,35 @@ { "name": "ViewAnalysis", "displayName": "View Analysis", - "contexts": ["fdc3.instrument", "fdc3.organization", "fdc3.portfolio"] + "contexts": [ + "fdc3.instrument", + "fdc3.organization", + "fdc3.portfolio" + ] }, { "name": "ViewInstrument", "displayName": "View Instrument Details", - "contexts": ["fdc3.instrument"] + "contexts": [ + "fdc3.instrument" + ] } ] }, "modules": [ { "id": "openfin-cloud-interop", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "OpenFin Cloud Interop", "description": "OpenFin Cloud Interop", "enabled": false, - "url": "http://localhost:8080/js/modules/openfin-cloud-interop.bundle.js", + "url": "http://localhost:8080/js/modules/interop-override/openfin-cloud-interop.bundle.js", "data": { - "userId": "", - "password": "", + "authenticationType": "basic", + "basicAuthenticationParameters": { + "username": "", + "password": "" + }, "platformId": "", "url": "", "sourceDisplayName": "", @@ -209,20 +266,40 @@ }, { "id": "default-wps-interop", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Workspace Platform Starter Interop Broker", "description": "This is the implementation included in workspace platform starter but it is now exposed as a module to allow for easy replacement.", "enabled": true, - "url": "http://localhost:8080/js/modules/wps-interop-override.bundle.js", + "url": "http://localhost:8080/js/modules/interop-override/wps-interop-override.bundle.js", "data": { "loggerName": "WpsInteropOverride" } } ] + }, + "workspaceAsar": { + "enabled": false, + "alias": "self-hosted-workspace-platform" } }, "appProvider": { - "endpointIds": ["http://localhost:8080/apps.json"], + "endpointIds": [ + "http://localhost:8080/apps.json", + "http://localhost:8080/apps-fdc3-1-2.json", + "http://localhost:8080/apps-fdc3-2-0.json", + "http://localhost:8080/common/apps-contact.json", + "http://localhost:8080/common/apps.json", + "http://localhost:8080/common/apps-interop.json", + "http://localhost:8080/common/apps-manager.json", + "http://localhost:8080/common/apps-native.json", + "http://localhost:8080/common/apps-dev-extensions.json", + "http://localhost:8080/common/apps-preload.json", + "http://localhost:8080/common/apps-tools.json", + "http://localhost:8080/common/apps-fdc3-1-2.json", + "http://localhost:8080/common/apps-fdc3-2-0.json", + "http://localhost:8080/common/apps-module.json", + "http://localhost:8080/apps-platform.json" + ], "cacheDurationInSeconds": 10, "cacheDurationInMinutes": 0, "manifestTypes": [ @@ -253,27 +330,27 @@ "title": "Local Storage", "enabled": true, "id": "local-storage", - "url": "http://localhost:8080/js/modules/local-storage.bundle.js" + "url": "http://localhost:8080/js/modules/endpoint/local-storage.bundle.js" }, { "title": "Favorite Local Storage", "enabled": true, "id": "favorite-local-storage", - "url": "http://localhost:8080/js/modules/favorite-local-storage.bundle.js" + "url": "http://localhost:8080/js/modules/endpoint/favorite-local-storage.bundle.js" }, { "title": "Context Processor", "enabled": true, "id": "context-processor", - "url": "http://localhost:8080/js/modules/example-context-processor.bundle.js" + "url": "http://localhost:8080/js/modules/endpoint/example.context.processor.bundle.js" }, { "id": "example-notification-source", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Example Notification Source", - "description": "Example Notification Source. Please see docs in client/src/modules/example-notification-source/README.md", + "description": "Example Notification Source. Please see docs in client/src/modules/endpoint/example-notification-source/README.md", "enabled": true, - "url": "http://localhost:8080/js/modules/example-notification-source.bundle.js", + "url": "http://localhost:8080/js/modules/endpoint/example-notification-source.bundle.js", "data": { "websocket": { "url": "" @@ -413,27 +490,40 @@ { "enabled": true, "id": "default-workspace", - "endpointIds": ["get-default-workspace", "set-default-workspace"] + "endpointIds": [ + "get-default-workspace", + "set-default-workspace" + ] }, { "enabled": true, "id": "pages-share", - "endpointIds": ["share-get", "share-set"] + "endpointIds": [ + "share-get", + "share-set" + ] }, { "enabled": true, "id": "workspaces-share", - "endpointIds": ["share-get", "share-set"] + "endpointIds": [ + "share-get", + "share-set" + ] }, { "enabled": true, "id": "default-wps-interop", - "endpointIds": ["*"] + "endpointIds": [ + "*" + ] }, { "enabled": true, "id": "default-wps-platform", - "endpointIds": ["*"] + "endpointIds": [ + "*" + ] }, { "enabled": true, @@ -467,7 +557,7 @@ "title": { "type": "view-title" }, - "favicon": "http://localhost:8080/favicon.png", + "favicon": "http://localhost:8080/favicon.ico", "newTabUrl": "http://localhost:8080/common/views/platform/new-tab/new-tab.html", "newPageUrl": "http://localhost:8080/common/views/platform/new-tab/new-tab.html", "navigationButtons": { @@ -531,7 +621,9 @@ "type": "Quit", "operation": "after" }, - "conditions": ["authenticated"] + "conditions": [ + "authenticated" + ] } ], "pageMenu": [ @@ -574,7 +666,7 @@ "type": "Custom", "tooltip": "Change Opacity", "disabled": false, - "iconUrl": "http://localhost:8080/favicon.png", + "iconUrl": "http://localhost:8080/favicon.ico", "action": { "id": "change-opacity", "customData": { @@ -591,7 +683,7 @@ "type": "Custom", "tooltip": "Restore Opacity", "disabled": false, - "iconUrl": "http://localhost:8080/favicon.png", + "iconUrl": "http://localhost:8080/favicon.ico", "action": { "id": "restore-opacity", "customData": { @@ -614,7 +706,9 @@ "customData": {} } }, - "conditions": ["themed"] + "conditions": [ + "themed" + ] }, { "include": false, @@ -660,7 +754,9 @@ } } }, - "conditions": ["removed-from-snapshot"] + "conditions": [ + "removed-from-snapshot" + ] }, { "include": false, @@ -678,7 +774,9 @@ } } }, - "conditions": ["included-in-snapshot"] + "conditions": [ + "included-in-snapshot" + ] }, { "include": true, @@ -755,7 +853,9 @@ "customData": {} } }, - "conditions": ["sharing"] + "conditions": [ + "sharing" + ] }, { "include": true, @@ -771,7 +871,7 @@ { "id": "default", "label": "Default", - "logoUrl": "http://localhost:8080/favicon.png", + "logoUrl": "http://localhost:8080/favicon.ico", "default": "dark", "palettes": { "light": { @@ -841,21 +941,25 @@ "homeProvider": { "id": "workspace-platform-starter", "title": "Workspace Platform Starter", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "queryMinLength": 3, - "queryAgainst": ["title"] + "queryAgainst": [ + "title" + ] }, "storefrontProvider": { "id": "workspace-platform-starter", "title": "Workspace Platform Starter", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "landingPage": { "hero": { "title": "Custom Hero Title", "description": "This is a demonstration of the hero section that you can configure for your store.", "cta": { "title": "Hero Apps!", - "tags": ["hero"] + "tags": [ + "hero" + ] }, "image": { "src": "http://localhost:8080/common/images/store/superhero-unsplash.jpg" @@ -870,7 +974,9 @@ "image": { "src": "http://localhost:8080/common/images/store/coding-2-unsplash.jpg" }, - "tags": ["tools"], + "tags": [ + "tools" + ], "buttonTitle": "View" }, { @@ -879,14 +985,19 @@ "image": { "src": "http://localhost:8080/common/images/store/coding-3-unsplash.jpg" }, - "tags": ["page"], + "tags": [ + "page" + ], "buttonTitle": "View" } ] }, "middleRow": { "title": "A collection of simple views that show how to share context using the FDC3 or Interop APIs.", - "tags": ["fdc3", "interop"] + "tags": [ + "fdc3", + "interop" + ] }, "bottomRow": { "title": "Quick Access", @@ -897,7 +1008,9 @@ "image": { "src": "http://localhost:8080/common/images/store/coding-4-unsplash.jpg" }, - "tags": ["view"], + "tags": [ + "view" + ], "buttonTitle": "View" }, { @@ -906,7 +1019,9 @@ "image": { "src": "http://localhost:8080/common/images/store/coding-5-unsplash.jpg" }, - "tags": ["manifest"], + "tags": [ + "manifest" + ], "buttonTitle": "View" }, { @@ -915,7 +1030,9 @@ "image": { "src": "http://localhost:8080/common/images/store/coding-6-unsplash.jpg" }, - "tags": ["native"], + "tags": [ + "native" + ], "buttonTitle": "View" } ] @@ -927,23 +1044,37 @@ "items": [ { "title": "All Apps", - "tags": ["view", "page", "manifest", "native", "desktop-browser"] + "tags": [ + "view", + "page", + "manifest", + "native", + "desktop-browser" + ] }, { "title": "Views", - "tags": ["view"] + "tags": [ + "view" + ] }, { "title": "Pages", - "tags": ["page"] + "tags": [ + "page" + ] }, { "title": "Manifest", - "tags": ["manifest"] + "tags": [ + "manifest" + ] }, { "title": "Native", - "tags": ["native"] + "tags": [ + "native" + ] } ] }, @@ -952,18 +1083,22 @@ "items": [ { "title": "FDC3 API", - "tags": ["fdc3"] + "tags": [ + "fdc3" + ] }, { "title": "Interop API", - "tags": ["interop"] + "tags": [ + "interop" + ] } ] } ], "footer": { "logo": { - "src": "http://localhost:8080/favicon.png", + "src": "http://localhost:8080/favicon.ico", "size": "32" }, "text": "Welcome to the OpenFin Sample Footer", @@ -982,7 +1117,7 @@ "dockProvider": { "id": "workspace-platform-starter", "title": "Workspace Platform Starter", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "workspaceComponents": { "hideHomeButton": false, "hideWorkspacesButton": false, @@ -1002,20 +1137,26 @@ { "id": "dock-apps", "display": "individual", - "tags": ["dock"] + "tags": [ + "dock" + ] }, { "id": "fdc3-apps", "display": "group", "tooltip": "FDC3", - "tags": ["fdc3"] + "tags": [ + "fdc3" + ] }, { "id": "manager-apps", "display": "group", "tooltip": "Manager", "iconUrl": "http://localhost:8080/common/images/icon-gradient.png", - "tags": ["manager"] + "tags": [ + "manager" + ] }, { "id": "favorites", @@ -1024,7 +1165,9 @@ "action": { "id": "favorites-menu" }, - "conditions": ["favorites"] + "conditions": [ + "favorites" + ] }, { "id": "pages", @@ -1140,7 +1283,7 @@ "notificationProvider": { "id": "workspace-platform-starter", "title": "Workspace Platform Starter", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "notificationClients": { "defaults": { "enforceIcon": false, @@ -1151,18 +1294,18 @@ } }, "integrationProvider": { - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "isManagementEnabled": false, "command": "integrations", "commandDescription": "Allows the management of integrations for this platform. You can decide whether enabled integrations should be included when a query is entered.", "modules": [ { "id": "apps", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Apps", "description": "Search Applications", "enabled": true, - "url": "http://localhost:8080/js/modules/apps.bundle.js", + "url": "http://localhost:8080/js/modules/integrations/apps.bundle.js", "data": { "manifestTypeMapping": { "view": { @@ -1227,11 +1370,11 @@ }, { "id": "workspaces", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Workspaces", "description": "Manage workspaces", "enabled": true, - "url": "http://localhost:8080/js/modules/workspaces.bundle.js", + "url": "http://localhost:8080/js/modules/integrations/workspaces.bundle.js", "data": { "favoritesEnabled": false, "images": { @@ -1241,11 +1384,11 @@ }, { "id": "pages", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Pages", "description": "Manage Pages", "enabled": true, - "url": "http://localhost:8080/js/modules/pages.bundle.js", + "url": "http://localhost:8080/js/modules/integrations/pages.bundle.js", "data": { "favoritesEnabled": false, "images": { @@ -1255,36 +1398,36 @@ }, { "id": "salesforce", - "icon": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/favicon.ico", + "icon": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/favicon.ico", "title": "Salesforce", "enabled": false, - "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/js/modules/salesforce.bundle.js", + "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/js/modules/integrations/salesforce.bundle.js", "data": { "appId": "", "consumerKey": "", "orgUrl": "", - "preload": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/js/preload.js", + "preload": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/js/preload.js", "enableLibLogging": true, "iconMap": { - "salesforce": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/salesforce.svg", - "contact": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/contact.svg", - "account": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/account.svg", - "chatter": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/chatter.svg", - "note": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/note.svg", - "task": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/task.svg", - "dashboard": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/dashboard.svg", - "phone": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/phone.svg", - "chat": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/chat.svg", - "email": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-salesforce/images/email.svg" + "salesforce": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/images/salesforce.svg", + "contact": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/images/contact.svg", + "account": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/images/account.svg", + "chatter": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/images/chatter.svg", + "note": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/images/note.svg", + "task": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/images/task.svg", + "dashboard": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/images/dashboard.svg", + "phone": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/images/phone.svg", + "chat": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/images/chat.svg", + "email": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-salesforce/images/email.svg" } } }, { "id": "ms365", - "icon": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/favicon.ico", + "icon": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/favicon.ico", "title": "Microsoft 365", "enabled": false, - "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/js/integrations/ms365.bundle.js", + "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/js/integrations/ms365.bundle.js", "data": { "clientId": "", "tenantId": "", @@ -1308,77 +1451,77 @@ "disableGraphExplorer": false, "enableLibLogging": true, "images": { - "microsoft365": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/microsoft365.svg", - "teams": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/teams.svg", - "word": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/word.svg", - "excel": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/excel.svg", - "onenote": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/onenote.svg", - "powerpoint": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/powerpoint.svg", - "outlook": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/apps/outlook-mail.svg", - "email": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/email.svg", - "calendar": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/calendar.svg", - "share": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/share.svg", - "chat": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/chat.svg", - "call": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/call.svg", - "contact": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/contact.svg", - "team": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/team.svg", - "file": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/file.svg", - "folder": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/folder.svg", - "channel": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/channel.svg", - "clock": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/clock.svg", - "check": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/check.svg", - "cross": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-ms365/images/icons/cross.svg" + "microsoft365": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/apps/microsoft365.svg", + "teams": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/apps/teams.svg", + "word": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/apps/word.svg", + "excel": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/apps/excel.svg", + "onenote": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/apps/onenote.svg", + "powerpoint": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/apps/powerpoint.svg", + "outlook": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/apps/outlook-mail.svg", + "email": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/email.svg", + "calendar": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/calendar.svg", + "share": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/share.svg", + "chat": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/chat.svg", + "call": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/call.svg", + "contact": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/contact.svg", + "team": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/team.svg", + "file": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/file.svg", + "folder": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/folder.svg", + "channel": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/channel.svg", + "clock": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/clock.svg", + "check": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/check.svg", + "cross": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-ms365/images/icons/cross.svg" } } }, { "id": "servicenow", - "icon": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/favicon.ico", + "icon": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-servicenow/favicon.ico", "title": "ServiceNow", "enabled": false, - "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/js/integrations/servicenow.bundle.js", + "url": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-servicenow/js/integrations/servicenow.bundle.js", "data": { "instanceUrl": "", "clientId": "", "enableLibLogging": true, "images": { - "servicenow": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/apps/servicenow.svg", - "contact": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/types/contact.svg", - "account": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/types/account.svg", - "case": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/types/case.svg", - "task": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/types/task.svg", - "incident": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/types/incident.svg", - "call": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/icons/call.svg", - "email": "https://built-on-openfin.github.io/workspace-starter/workspace/v20.0.0/integrate-with-servicenow/images/icons/email.svg" + "servicenow": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-servicenow/images/apps/servicenow.svg", + "contact": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-servicenow/images/types/contact.svg", + "account": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-servicenow/images/types/account.svg", + "case": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-servicenow/images/types/case.svg", + "task": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-servicenow/images/types/task.svg", + "incident": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-servicenow/images/types/incident.svg", + "call": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-servicenow/images/icons/call.svg", + "email": "https://built-on-openfin.github.io/workspace-starter/workspace/v21.0.0/integrate-with-servicenow/images/icons/email.svg" } } }, { "id": "about", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "About", "description": "Provides information about this platform.", "enabled": true, "excludeFromSourceFilter": true, - "url": "http://localhost:8080/js/modules/about.bundle.js", + "url": "http://localhost:8080/js/modules/composite/about.bundle.js", "data": {} }, { "id": "quote", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Quote Provider", "enabled": false, - "url": "https://built-on-openfin.github.io/dev-extensions/extensions/v20.0.0/integrations/js/modules/quote.bundle.js", + "url": "https://built-on-openfin.github.io/dev-extensions/extensions/v21.0.0/integrations/js/modules/integrations/quote.bundle.js", "data": { - "rootUrl": "https://built-on-openfin.github.io/dev-extensions/extensions/v20.0.0/integrations/data/quotes/" + "rootUrl": "https://built-on-openfin.github.io/dev-extensions/extensions/v21.0.0/integrations/data/quotes/" } }, { "id": "emoji", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Emoji Provider", "enabled": false, - "url": "https://built-on-openfin.github.io/dev-extensions/extensions/v20.0.0/integrations/js/modules/emoji.bundle.js", + "url": "https://built-on-openfin.github.io/dev-extensions/extensions/v21.0.0/integrations/js/modules/integrations/emoji.bundle.js", "data": {} } ] @@ -1389,18 +1532,23 @@ "enabled": true, "id": "interop", "title": "Init Options Interop", - "url": "http://localhost:8080/js/modules/interop.bundle.js", + "url": "http://localhost:8080/js/modules/init-options/interop.bundle.js", "data": { - "supportedActions": ["raise-intent", "share-context"] + "supportedActions": [ + "raise-intent", + "share-context" + ] } }, { "enabled": true, "id": "launch-app", "title": "Init Options Launch App", - "url": "http://localhost:8080/js/modules/launch-app.bundle.js", + "url": "http://localhost:8080/js/modules/init-options/launch-app.bundle.js", "data": { - "supportedActions": ["launch-app"], + "supportedActions": [ + "launch-app" + ], "supportedManifestTypes": [ "view", "inline-view", @@ -1415,18 +1563,22 @@ "enabled": true, "id": "show-page", "title": "Init Options Show Page", - "url": "http://localhost:8080/js/modules/pages.bundle.js", + "url": "http://localhost:8080/js/modules/composite/pages.bundle.js", "data": { - "supportedActions": ["show-page"] + "supportedActions": [ + "show-page" + ] } }, { "enabled": true, "id": "launch-workspace", "title": "Init Options Launch Workspace", - "url": "http://localhost:8080/js/modules/launch-workspace.bundle.js", + "url": "http://localhost:8080/js/modules/init-options/launch-workspace.bundle.js", "data": { - "supportedActions": ["launch-workspace"] + "supportedActions": [ + "launch-workspace" + ] } } ] @@ -1437,7 +1589,7 @@ "enabled": true, "id": "console", "title": "Console Logger", - "url": "http://localhost:8080/js/modules/console.bundle.js" + "url": "http://localhost:8080/js/modules/log/console.bundle.js" } ] }, @@ -1447,19 +1599,19 @@ "enabled": true, "id": "opacity", "title": "Opacity Action", - "url": "http://localhost:8080/js/modules/opacity.bundle.js" + "url": "http://localhost:8080/js/modules/actions/opacity.bundle.js" }, { "enabled": true, "id": "developer-actions", "title": "Developer Actions", - "url": "http://localhost:8080/js/modules/developer.bundle.js" + "url": "http://localhost:8080/js/modules/composite/developer.bundle.js" }, { "enabled": true, "id": "about-actions", "title": "About Actions", - "url": "http://localhost:8080/js/modules/about.bundle.js", + "url": "http://localhost:8080/js/modules/composite/about.bundle.js", "data": { "windowOptions": { "name": "about", @@ -1479,21 +1631,21 @@ "enabled": true, "id": "page-actions", "title": "Page Actions", - "url": "http://localhost:8080/js/modules/pages.bundle.js" + "url": "http://localhost:8080/js/modules/composite/pages.bundle.js" }, { "enabled": true, "id": "window-actions", "title": "Window Actions", - "url": "http://localhost:8080/js/modules/windows.bundle.js" + "url": "http://localhost:8080/js/modules/composite/windows.bundle.js" }, { "id": "custom-menu", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Custom Menu", "description": "Custom Menu", "enabled": true, - "url": "http://localhost:8080/js/modules/custom-menu.bundle.js", + "url": "http://localhost:8080/js/modules/actions/custom-menu.bundle.js", "data": { "images": { "page": "http://localhost:8080/common/icons/{theme}/{scheme}/page.svg", @@ -1503,35 +1655,35 @@ }, { "id": "favorites-menu", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Favorites Menu", "description": "Favorites Menu", "enabled": false, - "url": "http://localhost:8080/js/modules/favorites-menu.bundle.js" + "url": "http://localhost:8080/js/modules/actions/favorites-menu.bundle.js" }, { "id": "include-in-snapshot", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Include In Snapshot", "description": "Include In Snapshot", "enabled": false, - "url": "http://localhost:8080/js/modules/include-in-snapshot.bundle.js" + "url": "http://localhost:8080/js/modules/composite/include-in-snapshot.bundle.js" }, { "id": "default-workspace", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Default Workspace", "description": "Allows the setting of a default workspace and whether or not it should be set when an active workspace is switched.", "enabled": true, - "url": "http://localhost:8080/js/modules/default-workspace.bundle.js" + "url": "http://localhost:8080/js/modules/composite/default-workspace.bundle.js" }, { "id": "window-platform", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Window Platform Actions", "description": "Window Platform Actions", "enabled": true, - "url": "http://localhost:8080/js/modules/window-platform.bundle.js" + "url": "http://localhost:8080/js/modules/actions/window-platform.bundle.js" } ] }, @@ -1541,15 +1693,15 @@ "enabled": true, "id": "about-conditions", "title": "About Conditions", - "url": "http://localhost:8080/js/modules/about.bundle.js" + "url": "http://localhost:8080/js/modules/composite/about.bundle.js" }, { "id": "include-in-snapshot", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Include In Snapshot", "description": "Include In Snapshot", "enabled": false, - "url": "http://localhost:8080/js/modules/include-in-snapshot.bundle.js" + "url": "http://localhost:8080/js/modules/composite/include-in-snapshot.bundle.js" } ] }, @@ -1605,7 +1757,7 @@ "enabled": true, "id": "analytics.console", "title": "Console Analytics", - "url": "http://localhost:8080/js/modules/console.bundle.js", + "url": "http://localhost:8080/js/modules/analytics/console.bundle.js", "data": { "eventLogLevel": "info" } @@ -1614,7 +1766,7 @@ "enabled": true, "id": "analytics.dev.channel", "title": "Analytics Dev Channel", - "url": "http://localhost:8080/js/modules/developer.bundle.js", + "url": "http://localhost:8080/js/modules/composite/developer.bundle.js", "data": {} } ] @@ -1647,43 +1799,43 @@ "enabled": true, "id": "developer-menus", "title": "Developer Menus", - "url": "http://localhost:8080/js/modules/developer.bundle.js", + "url": "http://localhost:8080/js/modules/composite/developer.bundle.js", "data": {} }, { "id": "about", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "About", "description": "Provides information about this platform.", "enabled": true, - "url": "http://localhost:8080/js/modules/about.bundle.js", + "url": "http://localhost:8080/js/modules/composite/about.bundle.js", "data": {} }, { "id": "pages", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Pages", "description": "Provides additional menu options for pages.", "enabled": true, - "url": "http://localhost:8080/js/modules/pages.bundle.js", + "url": "http://localhost:8080/js/modules/composite/pages.bundle.js", "data": {} }, { "id": "windows", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Windows", "description": "Provides additional menu options for windows.", "enabled": true, - "url": "http://localhost:8080/js/modules/windows.bundle.js", + "url": "http://localhost:8080/js/modules/composite/windows.bundle.js", "data": {} }, { "id": "default-workspace", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "default workspace menu options", "description": "set your default default workspace", "enabled": true, - "url": "http://localhost:8080/js/modules/default-workspace.bundle.js", + "url": "http://localhost:8080/js/modules/composite/default-workspace.bundle.js", "data": {} } ] @@ -1714,11 +1866,11 @@ "modules": [ { "id": "openid-connect", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "OpenId Connect", "description": "OpenId Connect", "enabled": false, - "url": "http://localhost:8080/js/modules/openid-connect.bundle.js", + "url": "http://localhost:8080/js/modules/auth/openid-connect.bundle.js", "data": { "providerUrl": "", "clientId": "", @@ -1757,7 +1909,9 @@ "position": { "operation": "end" }, - "conditions": ["authenticated"] + "conditions": [ + "authenticated" + ] } ] }, @@ -1766,26 +1920,30 @@ "favoriteIcon": "http://localhost:8080/common/icons/{theme}/{scheme}/favorite.svg", "unfavoriteIcon": "http://localhost:8080/common/icons/{theme}/{scheme}/unfavorite.svg", "favoriteCommand": "/fav", - "supportedFavoriteTypes": ["workspace", "page", "app"] + "supportedFavoriteTypes": [ + "workspace", + "page", + "app" + ] }, "lifecycleProvider": { "modules": [ { "id": "default-workspace", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "default workspace management", "description": "set and apply your default workspace.", "enabled": true, - "url": "http://localhost:8080/js/modules/default-workspace.bundle.js", + "url": "http://localhost:8080/js/modules/composite/default-workspace.bundle.js", "data": {} }, { "id": "example-notification-service", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Example Notification Service", - "description": "Example Notification Service. See more at client/src/modules/example-notification-service/README.md", + "description": "Example Notification Service. See more at client/src/modules/lifecycle/example-notification-service/README.md", "enabled": true, - "url": "http://localhost:8080/js/modules/example-notification-service.bundle.js", + "url": "http://localhost:8080/js/modules/lifecycle/example-notification-service.bundle.js", "data": {} } ] @@ -1794,34 +1952,31 @@ "enabled": false, "id": "workspace-platform-starter", "enableAutoWindowRegistration": true, - "serverAssetInfo": { - "src": "https://cdn.openfin.co/release/snap/1.0.0/snap.zip", - "alias": "openfin-snap", - "version": "1.0.0", - "target": "OpenFinSnap.exe" - }, "serverOptions": { "showDebug": false, "keyToStick": true, "disableBlurDropPreview": false, "disableGPUAcceleratedDragging": false, - "disableUserUnstick": false + "disableUserUnstick": false, + "autoHideClientTaskbarIcons": true } }, "contentCreationProvider": { "modules": [ { "id": "view-position-content-creation", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "View Position Content Creation", "enabled": true, - "url": "http://localhost:8080/js/modules/view-position.bundle.js", + "url": "http://localhost:8080/js/modules/content-creation/view-position.bundle.js", "data": { "defaultViewPosition": "stack-right", "rules": [ { "behavior": "window", - "match": ["https://www.newscientist.com/*"], + "match": [ + "https://www.newscientist.com/*" + ], "options": { "defaultWidth": 800, "defaultHeight": 600 @@ -1829,15 +1984,22 @@ }, { "behavior": "browser", - "match": ["https://www.livescience.com/*"] + "match": [ + "https://www.livescience.com/*" + ] }, { "behavior": "block", - "match": ["https://www.sciencenews.org/*"] + "match": [ + "https://www.sciencenews.org/*" + ] }, { "behavior": "view", - "match": ["https://*", "http://*"] + "match": [ + "https://*", + "http://*" + ] } ] } @@ -1848,11 +2010,11 @@ "modules": [ { "id": "pages-share", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Pages Share", "description": "Pages Share", "enabled": true, - "url": "http://localhost:8080/js/modules/pages.bundle.js", + "url": "http://localhost:8080/js/modules/share/pages.bundle.js", "data": { "getEndpointId": "share-get", "setEndpointId": "share-set", @@ -1864,11 +2026,11 @@ }, { "id": "workspaces-share", - "icon": "http://localhost:8080/favicon.png", + "icon": "http://localhost:8080/favicon.ico", "title": "Workspaces Share", "description": "Workspaces Share", "enabled": true, - "url": "http://localhost:8080/js/modules/workspaces.bundle.js", + "url": "http://localhost:8080/js/modules/share/workspaces.bundle.js", "data": { "getEndpointId": "share-get", "setEndpointId": "share-set", diff --git a/frameworks/react/workspace-platform-starter/vite.config.ts b/frameworks/react/workspace-platform-starter/vite.config.ts index b4b666d..272f797 100644 --- a/frameworks/react/workspace-platform-starter/vite.config.ts +++ b/frameworks/react/workspace-platform-starter/vite.config.ts @@ -1,10 +1,58 @@ -import react from "@vitejs/plugin-react"; -import { defineConfig } from "vite"; +import { defineConfig } from 'vite'; import path from 'path'; -import { viteStaticCopy } from "vite-plugin-static-copy"; +import { fileURLToPath } from 'url'; +import react from "@vitejs/plugin-react"; +import { viteStaticCopy } from 'vite-plugin-static-copy'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const entryDefinitions = [ + { entry: './openfin/modules/auth/example/index.ts', outputPathRelative: 'js/modules/auth', outputFilenameKey: 'example' }, + { entry: './openfin/modules/endpoint/local-storage/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'local-storage' }, + { entry: './openfin/modules/endpoint/channel/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'channel' }, + { entry: './openfin/modules/endpoint/inline-apps/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'inline-apps' }, + { entry: './openfin/modules/init-options/interop/index.ts', outputPathRelative: 'js/modules/init-options', outputFilenameKey: 'interop' }, + { entry: './openfin/modules/init-options/launch-app/index.ts', outputPathRelative: 'js/modules/init-options', outputFilenameKey: 'launch-app' }, + { entry: './openfin/modules/log/console/index.ts', outputPathRelative: 'js/modules/log', outputFilenameKey: 'console' }, + { entry: './openfin/modules/actions/opacity/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'opacity' }, + { entry: './openfin/modules/endpoint/example-connection-validation/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'example.connection.validation' }, + { entry: './openfin/modules/analytics/console/index.ts', outputPathRelative: 'js/modules/analytics', outputFilenameKey: 'console' }, + { entry: './openfin/modules/composite/developer/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'developer' }, + { entry: './openfin/modules/integrations/apps/index.ts', outputPathRelative: 'js/modules/integrations', outputFilenameKey: 'apps' }, + { entry: './openfin/modules/integrations/workspaces/index.ts', outputPathRelative: 'js/modules/integrations', outputFilenameKey: 'workspaces' }, + { entry: './openfin/modules/integrations/pages/index.ts', outputPathRelative: 'js/modules/integrations', outputFilenameKey: 'pages' }, + { entry: './openfin/modules/composite/about/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'about' }, + { entry: './openfin/modules/composite/pages/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'pages' }, + { entry: './openfin/modules/composite/windows/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'windows' }, + { entry: './openfin/modules/endpoint/example-context-processor/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'example.context.processor' }, + { entry: './openfin/modules/actions/custom-menu/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'custom-menu' }, + { entry: './openfin/modules/auth/openid-connect/index.ts', outputPathRelative: 'js/modules/auth', outputFilenameKey: 'openid-connect' }, + { entry: './openfin/modules/endpoint/favorite-local-storage/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'favorite-local-storage' }, + { entry: './openfin/modules/actions/favorites-menu/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'favorites-menu' }, + { entry: './openfin/modules/composite/include-in-snapshot/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'include-in-snapshot' }, + { entry: './openfin/modules/lifecycle/example-notification-service/index.ts', outputPathRelative: 'js/modules/lifecycle', outputFilenameKey: 'example-notification-service' }, + { entry: './openfin/modules/endpoint/example-notification-source/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'example-notification-source' }, + { entry: './openfin/modules/platform-override/application-url-and-access-validator/index.ts', outputPathRelative: 'js/modules/platform-override', outputFilenameKey: 'application-url-and-access-validator' }, + { entry: './openfin/modules/init-options/launch-workspace/index.ts', outputPathRelative: 'js/modules/init-options', outputFilenameKey: 'launch-workspace' }, + { entry: './openfin/modules/composite/default-workspace/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'default-workspace' }, + { entry: './openfin/modules/content-creation/view-position/index.ts', outputPathRelative: 'js/modules/content-creation', outputFilenameKey: 'view-position' }, + { entry: './openfin/modules/actions/window-platform/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'window-platform' }, + { entry: './openfin/modules/share/pages/index.ts', outputPathRelative: 'js/modules/share', outputFilenameKey: 'pages' }, + { entry: './openfin/modules/share/workspaces/index.ts', outputPathRelative: 'js/modules/share', outputFilenameKey: 'workspaces' }, + { entry: './openfin/modules/interop-override/wps-interop-override/index.ts', outputPathRelative: 'js/modules/interop-override', outputFilenameKey: 'wps-interop-override' }, + { entry: './openfin/modules/platform-override/wps-platform-override/index.ts', outputPathRelative: 'js/modules/platform-override', outputFilenameKey: 'wps-platform-override' }, +]; + +const rollupInput = entryDefinitions.reduce((acc, item) => { + const name = path.join(item.outputPathRelative, item.outputFilenameKey).replace(/\\/g, '/'); + acc[name] = item.entry; + return acc; +}, {} as Record); + +rollupInput['root_html'] = path.resolve(__dirname, 'index.html'); export default defineConfig({ - root: __dirname, plugins: [ react(), viteStaticCopy({ @@ -19,126 +67,23 @@ export default defineConfig({ resolve: { alias: { 'workspace-platform-starter': path.resolve(__dirname, './openfin/framework') - } + }, + extensions: ['.tsx', '.ts', '.js', '.json'], }, server: { - port: 8080 - }, + port: 8080 + }, build: { - outDir: "./dist", - emptyOutDir: true, - reportCompressedSize: true, - commonjsOptions: { - transformMixedEsModules: true - }, - // lib: { - // entry: "src/index.ts", - // name: "openfin-modules", - // fileName: "index", - // formats: ["es"] - // }, + outDir: path.resolve(__dirname, 'dist'), + sourcemap: false, rollupOptions: { - external: ["fin", "react", "react-dom", "react/jsx-runtime"], - input: { - // Provider React app - main: path.resolve(__dirname, "src/main.tsx"), - - // Modules - interop: path.resolve(__dirname, "./openfin/modules/init-options/interop/index.ts"), - example: path.resolve(__dirname, "./openfin/modules/auth/example/index.ts"), - "local-storage": path.resolve(__dirname, "./openfin/modules/endpoint/local-storage/index.ts"), - channel: path.resolve(__dirname, "./openfin/modules/endpoint/channel/index.ts"), - "inline-apps": path.resolve(__dirname, "./openfin/modules/endpoint/inline-apps/index.ts"), - "launch-app": path.resolve(__dirname, "./openfin/modules/init-options/launch-app/index.ts"), - console: path.resolve(__dirname, "./openfin/modules/log/console/index.ts"), - opacity: path.resolve(__dirname, "./openfin/modules/actions/opacity/index.ts"), - "example-connection-validation": path.resolve( - __dirname, - "./openfin/modules/endpoint/example-connection-validation/index.ts" - ), - "analytics-console": path.resolve(__dirname, "./openfin/modules/analytics/console/index.ts"), - developer: path.resolve(__dirname, "./openfin/modules/composite/developer/index.ts"), - apps: path.resolve(__dirname, "./openfin/modules/integrations/apps/index.ts"), - workspaces: path.resolve(__dirname, "./openfin/modules/integrations/workspaces/index.ts"), - pages: path.resolve(__dirname, "./openfin/modules/integrations/pages/index.ts"), - about: path.resolve(__dirname, "./openfin/modules/composite/about/index.ts"), - "composite-pages": path.resolve(__dirname, "./openfin/modules/composite/pages/index.ts"), - windows: path.resolve(__dirname, "./openfin/modules/composite/windows/index.ts"), - "example-context-processor": path.resolve( - __dirname, - "./openfin/modules/endpoint/example-context-processor/index.ts" - ), - "fdc3-mapper": path.resolve(__dirname, "./openfin/framework/fdc3/index.ts"), - "custom-menu": path.resolve(__dirname, "./openfin/modules/actions/custom-menu/index.ts"), - "openid-connect": path.resolve(__dirname, "./openfin/modules/auth/openid-connect/index.ts"), - "favorite-local-storage": path.resolve( - __dirname, - "./openfin/modules/endpoint/favorite-local-storage/index.ts" - ), - "favorites-menu": path.resolve(__dirname, "./openfin/modules/actions/favorites-menu/index.ts"), - "include-in-snapshot": path.resolve( - __dirname, - "./openfin/modules/composite/include-in-snapshot/index.ts" - ), - "example-notification-service": path.resolve( - __dirname, - "./openfin/modules/lifecycle/example-notification-service/index.ts" - ), - "example-notification-source": path.resolve( - __dirname, - "./openfin/modules/endpoint/example-notification-source/index.ts" - ), - "application-url-and-access-validator": path.resolve( - __dirname, - "./openfin/modules/platform-override/application-url-and-access-validator/index.ts" - ), - "launch-workspace": path.resolve( - __dirname, - "./openfin/modules/init-options/launch-workspace/index.ts" - ), - "default-workspace": path.resolve( - __dirname, - "./openfin/modules/composite/default-workspace/index.ts" - ), - "view-position": path.resolve(__dirname, "./openfin/modules/content-creation/view-position/index.ts"), - "window-platform": path.resolve(__dirname, "./openfin/modules/actions/window-platform/index.ts"), - "share-pages": path.resolve(__dirname, "./openfin/modules/share/pages/index.ts"), - "share-workspaces": path.resolve(__dirname, "./openfin/modules/share/workspaces/index.ts"), - "wps-interop-override": path.resolve( - __dirname, - "./openfin/modules/interop-override/wps-interop-override/index.ts" - ), - "openfin-cloud-interop": path.resolve( - __dirname, - "./openfin/modules/interop-override/openfin-cloud-interop/index.ts" - ), - "wps-platform-override": path.resolve( - __dirname, - "./openfin/modules/platform-override/wps-platform-override/index.ts" - ), - "snap-window-selection-override": path.resolve( - __dirname, - "./openfin/modules/platform-override/snap-window-selection-override/index.ts" - ), - "get-user-decision-for-beforeunload": path.resolve( - __dirname, - "./openfin/modules/platform-override/get-user-decision-for-beforeunload/index.ts" - ) - }, + treeshake: false, + input: rollupInput, + external: ['fin'], output: { - format: "es", - dir: path.resolve(__dirname, "dist"), - sourcemap: false, - manualChunks: undefined, - // preserveModules: true, - preserveModulesRoot: "openfin/modules", - entryFileNames: (chunkInfo) => { - if (chunkInfo.name === "main") { - return "[name].bundle.js" - } - return `js/modules/[name].bundle.js`; - } - } - } - } + format: 'es', + entryFileNames: '[name].bundle.js', + }, + }, + }, }); From 5e9b9a80a77999b311848708271da50a5942499a Mon Sep 17 00:00:00 2001 From: Ray Cashmore Date: Sun, 1 Jun 2025 23:42:18 +1000 Subject: [PATCH 7/8] Use rollup --- .../workspace-platform-starter/.gitignore | 4 + .../workspace-platform-starter/README.md | 28 +- .../eslint.config.js | 5 +- .../package-lock.json | 622 ++++++++++++++++++ .../workspace-platform-starter/package.json | 11 +- .../public/manifest.fin.json | 84 +-- .../rollup.config.mjs | 81 +++ .../src/Provider.tsx | 4 +- .../workspace-platform-starter/src/index.css | 4 + .../tsconfig.app.json | 1 - .../workspace-platform-starter/vite.config.ts | 79 +-- 11 files changed, 787 insertions(+), 136 deletions(-) create mode 100644 frameworks/react/workspace-platform-starter/rollup.config.mjs diff --git a/frameworks/react/workspace-platform-starter/.gitignore b/frameworks/react/workspace-platform-starter/.gitignore index a547bf3..0e4656e 100644 --- a/frameworks/react/workspace-platform-starter/.gitignore +++ b/frameworks/react/workspace-platform-starter/.gitignore @@ -22,3 +22,7 @@ dist-ssr *.njsproj *.sln *.sw? + +# Runtime files copied to public folder +public/openfin +public/common diff --git a/frameworks/react/workspace-platform-starter/README.md b/frameworks/react/workspace-platform-starter/README.md index 7d93e7c..d77c785 100644 --- a/frameworks/react/workspace-platform-starter/README.md +++ b/frameworks/react/workspace-platform-starter/README.md @@ -1,22 +1,21 @@ # React Wrapper for Workspace Platform Starter -This project provides a React wrapper for the main [workspace-platform-starter](https://github.com/built-on-openfin/workspace-starter/tree/main/how-to/workspace-platform-starter). +This project provides a React wrapper for the [workspace-platform-starter](https://github.com/built-on-openfin/workspace-starter/tree/main/how-to/workspace-platform-starter) for teams +who prefer to use the build tooling available in the React ecosystem such as hot reloading. -Teams who prefer to use the build tooling available in the React ecosystem can use this starter to bootstrap a new Here® Core platform. - -The source code stays in the original starter so that it can continue to evolve and to avoid duplication. +The workspace platform starter source files are for demonstration purposes and to help get started building your own project. Once the source is added to your project, consider it your +source code to manage for your production build. Once initial setup is complete, you should review the features you need and turn off many of the modules in the manifest.fin.json, and +remove many of the app endpoints listed in "appProvider" / "endpointIds". ## Prerequsites Please follow the [getting started](https://resources.here.io/docs/core/develop/) guide to install the OpenFin RVM. -## Getting started - -### Add workspace-platform-starter source files +## Copy workspace-platform-starter source files -Manually copy the original workspace-platform-starter source files: +Manually add the original workspace-platform-starter source files into this project: -Clone the main workspace-starter repo +Clone the main workspace-starter repo: ``` git clone https://github.com/built-on-openfin/workspace-starter.git --depth=1 @@ -42,7 +41,6 @@ And paste them into the **/openfin** folder in this project so that you have: ``` npm install -npm run build npm start ``` @@ -56,3 +54,13 @@ npm run build ``` The files to deploy will be in the `dist` folder + +### Preview production build + +``` +npm run preview +``` +Launch [fin://localhost:8080/manifest.fin.json](fin://localhost:8080/manifest.fin.json) + + + diff --git a/frameworks/react/workspace-platform-starter/eslint.config.js b/frameworks/react/workspace-platform-starter/eslint.config.js index 149cac8..a8b75a3 100644 --- a/frameworks/react/workspace-platform-starter/eslint.config.js +++ b/frameworks/react/workspace-platform-starter/eslint.config.js @@ -5,7 +5,7 @@ import reactRefresh from "eslint-plugin-react-refresh"; import tseslint from "typescript-eslint"; export default tseslint.config( - { ignores: ["dist"] }, + { ignores: ["dist", "openfin/**", "public"] }, { extends: [js.configs.recommended, ...tseslint.configs.recommended], files: ["**/*.{ts,tsx}"], @@ -20,7 +20,6 @@ export default tseslint.config( rules: { ...reactHooks.configs.recommended.rules, "react-refresh/only-export-components": ["warn", { allowConstantExport: true }], - }, - ignorePatterns: ["openfin/framework/**"], + } }, ); diff --git a/frameworks/react/workspace-platform-starter/package-lock.json b/frameworks/react/workspace-platform-starter/package-lock.json index d767830..27a64c6 100644 --- a/frameworks/react/workspace-platform-starter/package-lock.json +++ b/frameworks/react/workspace-platform-starter/package-lock.json @@ -21,6 +21,10 @@ "@eslint/js": "^9.25.0", "@openfin/core": "41.102.1", "@openfin/node-adapter": "41.102.1", + "@rollup/plugin-commonjs": "^28.0.3", + "@rollup/plugin-node-resolve": "^16.0.1", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^12.1.2", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", "@vitejs/plugin-react": "^4.4.1", @@ -28,6 +32,7 @@ "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.19", "globals": "^16.0.0", + "rollup-plugin-copy": "^3.5.0", "typescript": "~5.8.3", "typescript-eslint": "^8.30.1", "vite": "^6.3.5", @@ -1058,6 +1063,17 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -1241,6 +1257,172 @@ "dev": true, "license": "MIT" }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.3.tgz", + "integrity": "sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", + "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", + "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz", + "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.41.1", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", @@ -1572,6 +1754,27 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/fs-extra": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz", + "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1579,6 +1782,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.17.52", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.52.tgz", @@ -1617,6 +1827,13 @@ "@types/node": "*" } }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz", @@ -1994,6 +2211,16 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/babel-plugin-styled-components": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", @@ -2262,12 +2489,33 @@ "dev": true, "license": "MIT" }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, "node_modules/commist": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/commist/-/commist-3.2.0.tgz", "integrity": "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==", "license": "MIT" }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2376,6 +2624,29 @@ "dev": true, "license": "MIT" }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.161", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", @@ -2613,6 +2884,13 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2794,6 +3072,13 @@ "node": ">=14.14" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2809,6 +3094,16 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -2818,6 +3113,28 @@ "node": ">=6.9.0" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -2844,6 +3161,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -2868,6 +3205,19 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/help-me": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", @@ -2984,6 +3334,18 @@ "node": ">=0.8.19" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -3016,6 +3378,22 @@ "node": ">=8" } }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3039,6 +3417,13 @@ "node": ">=0.10.0" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3049,6 +3434,26 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3247,6 +3652,16 @@ "readable-stream": "^4.0.0" } }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3419,6 +3834,16 @@ "js-sdsl": "4.3.0" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/openfin-notifications": { "version": "2.11.0-alpha-3997", "resolved": "https://registry.npmjs.org/openfin-notifications/-/openfin-notifications-2.11.0-alpha-3997.tgz", @@ -3548,6 +3973,16 @@ "node": ">=8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -3558,6 +3993,23 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3667,6 +4119,16 @@ ], "license": "MIT" }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/react": { "version": "19.1.0", "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", @@ -3756,6 +4218,27 @@ "node": ">=8.10.0" } }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3823,6 +4306,58 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-copy": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz", + "integrity": "sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rollup-plugin-copy/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/rollup-plugin-copy/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/rollup-plugin-copy/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3888,6 +4423,16 @@ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "license": "MIT" }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -3917,6 +4462,16 @@ "node": ">=8" } }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -3927,6 +4482,13 @@ "npm": ">= 3.0.0" } }, + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", + "dev": true, + "license": "MIT" + }, "node_modules/socks": { "version": "2.8.4", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", @@ -3941,6 +4503,16 @@ "npm": ">= 3.0.0" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -3951,6 +4523,17 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -4052,6 +4635,38 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.40.0.tgz", + "integrity": "sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/tinyglobby": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", @@ -4448,6 +5063,13 @@ "tslib": "^2.6.2" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, "node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", diff --git a/frameworks/react/workspace-platform-starter/package.json b/frameworks/react/workspace-platform-starter/package.json index 12c1497..2be6a91 100644 --- a/frameworks/react/workspace-platform-starter/package.json +++ b/frameworks/react/workspace-platform-starter/package.json @@ -4,9 +4,11 @@ "version": "0.0.0", "type": "module", "scripts": { + "prestart": "npm run build:openfin", "dev": "vite", - "start": "vite preview --port 8080", - "build": "tsc -b && vite build", + "start": "npm run dev", + "build": "tsc -b && npm run build:openfin && vite build", + "build:openfin": "rollup -c rollup.config.mjs", "lint": "eslint .", "preview": "vite preview --port 8080" }, @@ -24,6 +26,10 @@ "@eslint/js": "^9.25.0", "@openfin/core": "41.102.1", "@openfin/node-adapter": "41.102.1", + "@rollup/plugin-commonjs": "^28.0.3", + "@rollup/plugin-node-resolve": "^16.0.1", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^12.1.2", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", "@vitejs/plugin-react": "^4.4.1", @@ -31,6 +37,7 @@ "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.19", "globals": "^16.0.0", + "rollup-plugin-copy": "^3.5.0", "typescript": "~5.8.3", "typescript-eslint": "^8.30.1", "vite": "^6.3.5", diff --git a/frameworks/react/workspace-platform-starter/public/manifest.fin.json b/frameworks/react/workspace-platform-starter/public/manifest.fin.json index 74a1438..7346761 100644 --- a/frameworks/react/workspace-platform-starter/public/manifest.fin.json +++ b/frameworks/react/workspace-platform-starter/public/manifest.fin.json @@ -9,7 +9,7 @@ "name": "Workspace Platform Starter React Wrapper", "uuid": "workspace-platform-starter-react-wrapper", "icon": "http://localhost:8080/favicon.png", - "autoShow": false, + "autoShow": true, "providerUrl": "http://localhost:8080", "preventQuitOnLastWindowClosed": true, "appLogsTimezone": "utc", @@ -137,7 +137,7 @@ "title": "Workspace Platform Starter Platform Override", "description": "This is the implementation included in workspace platform starter but it is now exposed as a module to allow for easy replacement.", "enabled": true, - "url": "http://localhost:8080/js/modules/platform-override/wps-platform-override.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/platform-override/wps-platform-override.bundle.js", "data": { "loggerName": "WpsPlatformOverride" } @@ -251,7 +251,7 @@ "title": "OpenFin Cloud Interop", "description": "OpenFin Cloud Interop", "enabled": false, - "url": "http://localhost:8080/js/modules/interop-override/openfin-cloud-interop.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/interop-override/openfin-cloud-interop.bundle.js", "data": { "authenticationType": "basic", "basicAuthenticationParameters": { @@ -270,7 +270,7 @@ "title": "Workspace Platform Starter Interop Broker", "description": "This is the implementation included in workspace platform starter but it is now exposed as a module to allow for easy replacement.", "enabled": true, - "url": "http://localhost:8080/js/modules/interop-override/wps-interop-override.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/interop-override/wps-interop-override.bundle.js", "data": { "loggerName": "WpsInteropOverride" } @@ -330,19 +330,19 @@ "title": "Local Storage", "enabled": true, "id": "local-storage", - "url": "http://localhost:8080/js/modules/endpoint/local-storage.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/endpoint/local-storage.bundle.js" }, { "title": "Favorite Local Storage", "enabled": true, "id": "favorite-local-storage", - "url": "http://localhost:8080/js/modules/endpoint/favorite-local-storage.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/endpoint/favorite-local-storage.bundle.js" }, { "title": "Context Processor", "enabled": true, "id": "context-processor", - "url": "http://localhost:8080/js/modules/endpoint/example.context.processor.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/endpoint/example.context.processor.bundle.js" }, { "id": "example-notification-source", @@ -350,7 +350,7 @@ "title": "Example Notification Source", "description": "Example Notification Source. Please see docs in client/src/modules/endpoint/example-notification-source/README.md", "enabled": true, - "url": "http://localhost:8080/js/modules/endpoint/example-notification-source.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/endpoint/example-notification-source.bundle.js", "data": { "websocket": { "url": "" @@ -1305,7 +1305,7 @@ "title": "Apps", "description": "Search Applications", "enabled": true, - "url": "http://localhost:8080/js/modules/integrations/apps.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/integrations/apps.bundle.js", "data": { "manifestTypeMapping": { "view": { @@ -1374,7 +1374,7 @@ "title": "Workspaces", "description": "Manage workspaces", "enabled": true, - "url": "http://localhost:8080/js/modules/integrations/workspaces.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/integrations/workspaces.bundle.js", "data": { "favoritesEnabled": false, "images": { @@ -1388,7 +1388,7 @@ "title": "Pages", "description": "Manage Pages", "enabled": true, - "url": "http://localhost:8080/js/modules/integrations/pages.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/integrations/pages.bundle.js", "data": { "favoritesEnabled": false, "images": { @@ -1503,7 +1503,7 @@ "description": "Provides information about this platform.", "enabled": true, "excludeFromSourceFilter": true, - "url": "http://localhost:8080/js/modules/composite/about.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/composite/about.bundle.js", "data": {} }, { @@ -1532,7 +1532,7 @@ "enabled": true, "id": "interop", "title": "Init Options Interop", - "url": "http://localhost:8080/js/modules/init-options/interop.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/init-options/interop.bundle.js", "data": { "supportedActions": [ "raise-intent", @@ -1544,7 +1544,7 @@ "enabled": true, "id": "launch-app", "title": "Init Options Launch App", - "url": "http://localhost:8080/js/modules/init-options/launch-app.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/init-options/launch-app.bundle.js", "data": { "supportedActions": [ "launch-app" @@ -1563,7 +1563,7 @@ "enabled": true, "id": "show-page", "title": "Init Options Show Page", - "url": "http://localhost:8080/js/modules/composite/pages.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/composite/pages.bundle.js", "data": { "supportedActions": [ "show-page" @@ -1574,7 +1574,7 @@ "enabled": true, "id": "launch-workspace", "title": "Init Options Launch Workspace", - "url": "http://localhost:8080/js/modules/init-options/launch-workspace.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/init-options/launch-workspace.bundle.js", "data": { "supportedActions": [ "launch-workspace" @@ -1589,7 +1589,7 @@ "enabled": true, "id": "console", "title": "Console Logger", - "url": "http://localhost:8080/js/modules/log/console.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/log/console.bundle.js" } ] }, @@ -1599,19 +1599,19 @@ "enabled": true, "id": "opacity", "title": "Opacity Action", - "url": "http://localhost:8080/js/modules/actions/opacity.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/actions/opacity.bundle.js" }, { "enabled": true, "id": "developer-actions", "title": "Developer Actions", - "url": "http://localhost:8080/js/modules/composite/developer.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/composite/developer.bundle.js" }, { "enabled": true, "id": "about-actions", "title": "About Actions", - "url": "http://localhost:8080/js/modules/composite/about.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/composite/about.bundle.js", "data": { "windowOptions": { "name": "about", @@ -1631,13 +1631,13 @@ "enabled": true, "id": "page-actions", "title": "Page Actions", - "url": "http://localhost:8080/js/modules/composite/pages.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/composite/pages.bundle.js" }, { "enabled": true, "id": "window-actions", "title": "Window Actions", - "url": "http://localhost:8080/js/modules/composite/windows.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/composite/windows.bundle.js" }, { "id": "custom-menu", @@ -1645,7 +1645,7 @@ "title": "Custom Menu", "description": "Custom Menu", "enabled": true, - "url": "http://localhost:8080/js/modules/actions/custom-menu.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/actions/custom-menu.bundle.js", "data": { "images": { "page": "http://localhost:8080/common/icons/{theme}/{scheme}/page.svg", @@ -1659,7 +1659,7 @@ "title": "Favorites Menu", "description": "Favorites Menu", "enabled": false, - "url": "http://localhost:8080/js/modules/actions/favorites-menu.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/actions/favorites-menu.bundle.js" }, { "id": "include-in-snapshot", @@ -1667,7 +1667,7 @@ "title": "Include In Snapshot", "description": "Include In Snapshot", "enabled": false, - "url": "http://localhost:8080/js/modules/composite/include-in-snapshot.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/composite/include-in-snapshot.bundle.js" }, { "id": "default-workspace", @@ -1675,7 +1675,7 @@ "title": "Default Workspace", "description": "Allows the setting of a default workspace and whether or not it should be set when an active workspace is switched.", "enabled": true, - "url": "http://localhost:8080/js/modules/composite/default-workspace.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/composite/default-workspace.bundle.js" }, { "id": "window-platform", @@ -1683,7 +1683,7 @@ "title": "Window Platform Actions", "description": "Window Platform Actions", "enabled": true, - "url": "http://localhost:8080/js/modules/actions/window-platform.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/actions/window-platform.bundle.js" } ] }, @@ -1693,7 +1693,7 @@ "enabled": true, "id": "about-conditions", "title": "About Conditions", - "url": "http://localhost:8080/js/modules/composite/about.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/composite/about.bundle.js" }, { "id": "include-in-snapshot", @@ -1701,7 +1701,7 @@ "title": "Include In Snapshot", "description": "Include In Snapshot", "enabled": false, - "url": "http://localhost:8080/js/modules/composite/include-in-snapshot.bundle.js" + "url": "http://localhost:8080/openfin/js/modules/composite/include-in-snapshot.bundle.js" } ] }, @@ -1757,7 +1757,7 @@ "enabled": true, "id": "analytics.console", "title": "Console Analytics", - "url": "http://localhost:8080/js/modules/analytics/console.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/analytics/console.bundle.js", "data": { "eventLogLevel": "info" } @@ -1766,7 +1766,7 @@ "enabled": true, "id": "analytics.dev.channel", "title": "Analytics Dev Channel", - "url": "http://localhost:8080/js/modules/composite/developer.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/composite/developer.bundle.js", "data": {} } ] @@ -1799,7 +1799,7 @@ "enabled": true, "id": "developer-menus", "title": "Developer Menus", - "url": "http://localhost:8080/js/modules/composite/developer.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/composite/developer.bundle.js", "data": {} }, { @@ -1808,7 +1808,7 @@ "title": "About", "description": "Provides information about this platform.", "enabled": true, - "url": "http://localhost:8080/js/modules/composite/about.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/composite/about.bundle.js", "data": {} }, { @@ -1817,7 +1817,7 @@ "title": "Pages", "description": "Provides additional menu options for pages.", "enabled": true, - "url": "http://localhost:8080/js/modules/composite/pages.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/composite/pages.bundle.js", "data": {} }, { @@ -1826,7 +1826,7 @@ "title": "Windows", "description": "Provides additional menu options for windows.", "enabled": true, - "url": "http://localhost:8080/js/modules/composite/windows.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/composite/windows.bundle.js", "data": {} }, { @@ -1835,7 +1835,7 @@ "title": "default workspace menu options", "description": "set your default default workspace", "enabled": true, - "url": "http://localhost:8080/js/modules/composite/default-workspace.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/composite/default-workspace.bundle.js", "data": {} } ] @@ -1870,7 +1870,7 @@ "title": "OpenId Connect", "description": "OpenId Connect", "enabled": false, - "url": "http://localhost:8080/js/modules/auth/openid-connect.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/auth/openid-connect.bundle.js", "data": { "providerUrl": "", "clientId": "", @@ -1934,7 +1934,7 @@ "title": "default workspace management", "description": "set and apply your default workspace.", "enabled": true, - "url": "http://localhost:8080/js/modules/composite/default-workspace.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/composite/default-workspace.bundle.js", "data": {} }, { @@ -1943,7 +1943,7 @@ "title": "Example Notification Service", "description": "Example Notification Service. See more at client/src/modules/lifecycle/example-notification-service/README.md", "enabled": true, - "url": "http://localhost:8080/js/modules/lifecycle/example-notification-service.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/lifecycle/example-notification-service.bundle.js", "data": {} } ] @@ -1968,7 +1968,7 @@ "icon": "http://localhost:8080/favicon.ico", "title": "View Position Content Creation", "enabled": true, - "url": "http://localhost:8080/js/modules/content-creation/view-position.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/content-creation/view-position.bundle.js", "data": { "defaultViewPosition": "stack-right", "rules": [ @@ -2014,7 +2014,7 @@ "title": "Pages Share", "description": "Pages Share", "enabled": true, - "url": "http://localhost:8080/js/modules/share/pages.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/share/pages.bundle.js", "data": { "getEndpointId": "share-get", "setEndpointId": "share-set", @@ -2030,7 +2030,7 @@ "title": "Workspaces Share", "description": "Workspaces Share", "enabled": true, - "url": "http://localhost:8080/js/modules/share/workspaces.bundle.js", + "url": "http://localhost:8080/openfin/js/modules/share/workspaces.bundle.js", "data": { "getEndpointId": "share-get", "setEndpointId": "share-set", diff --git a/frameworks/react/workspace-platform-starter/rollup.config.mjs b/frameworks/react/workspace-platform-starter/rollup.config.mjs new file mode 100644 index 0000000..bd2a3a0 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/rollup.config.mjs @@ -0,0 +1,81 @@ +import path from 'path'; +import { fileURLToPath } from 'url'; +import typescript from '@rollup/plugin-typescript'; +import resolve from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import terser from '@rollup/plugin-terser'; +import copy from 'rollup-plugin-copy'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const entryDefinitions = [ + { entry: './openfin/modules/auth/example/index.ts', outputPathRelative: 'js/modules/auth', outputFilenameKey: 'example' }, + { entry: './openfin/modules/endpoint/local-storage/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'local-storage' }, + { entry: './openfin/modules/endpoint/channel/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'channel' }, + { entry: './openfin/modules/endpoint/inline-apps/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'inline-apps' }, + { entry: './openfin/modules/init-options/interop/index.ts', outputPathRelative: 'js/modules/init-options', outputFilenameKey: 'interop' }, + { entry: './openfin/modules/init-options/launch-app/index.ts', outputPathRelative: 'js/modules/init-options', outputFilenameKey: 'launch-app' }, + { entry: './openfin/modules/log/console/index.ts', outputPathRelative: 'js/modules/log', outputFilenameKey: 'console' }, + { entry: './openfin/modules/actions/opacity/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'opacity' }, + { entry: './openfin/modules/endpoint/example-connection-validation/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'example.connection.validation' }, + { entry: './openfin/modules/analytics/console/index.ts', outputPathRelative: 'js/modules/analytics', outputFilenameKey: 'console' }, + { entry: './openfin/modules/composite/developer/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'developer' }, + { entry: './openfin/modules/integrations/apps/index.ts', outputPathRelative: 'js/modules/integrations', outputFilenameKey: 'apps' }, + { entry: './openfin/modules/integrations/workspaces/index.ts', outputPathRelative: 'js/modules/integrations', outputFilenameKey: 'workspaces' }, + { entry: './openfin/modules/integrations/pages/index.ts', outputPathRelative: 'js/modules/integrations', outputFilenameKey: 'pages' }, + { entry: './openfin/modules/composite/about/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'about' }, + { entry: './openfin/modules/composite/pages/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'pages' }, + { entry: './openfin/modules/composite/windows/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'windows' }, + { entry: './openfin/modules/endpoint/example-context-processor/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'example.context.processor' }, + { entry: './openfin/modules/actions/custom-menu/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'custom-menu' }, + { entry: './openfin/modules/auth/openid-connect/index.ts', outputPathRelative: 'js/modules/auth', outputFilenameKey: 'openid-connect' }, + { entry: './openfin/modules/endpoint/favorite-local-storage/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'favorite-local-storage' }, + { entry: './openfin/modules/actions/favorites-menu/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'favorites-menu' }, + { entry: './openfin/modules/composite/include-in-snapshot/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'include-in-snapshot' }, + { entry: './openfin/modules/lifecycle/example-notification-service/index.ts', outputPathRelative: 'js/modules/lifecycle', outputFilenameKey: 'example-notification-service' }, + { entry: './openfin/modules/endpoint/example-notification-source/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'example-notification-source' }, + { entry: './openfin/modules/platform-override/application-url-and-access-validator/index.ts', outputPathRelative: 'js/modules/platform-override', outputFilenameKey: 'application-url-and-access-validator' }, + { entry: './openfin/modules/init-options/launch-workspace/index.ts', outputPathRelative: 'js/modules/init-options', outputFilenameKey: 'launch-workspace' }, + { entry: './openfin/modules/composite/default-workspace/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'default-workspace' }, + { entry: './openfin/modules/content-creation/view-position/index.ts', outputPathRelative: 'js/modules/content-creation', outputFilenameKey: 'view-position' }, + { entry: './openfin/modules/actions/window-platform/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'window-platform' }, + { entry: './openfin/modules/share/pages/index.ts', outputPathRelative: 'js/modules/share', outputFilenameKey: 'pages' }, + { entry: './openfin/modules/share/workspaces/index.ts', outputPathRelative: 'js/modules/share', outputFilenameKey: 'workspaces' }, + { entry: './openfin/modules/interop-override/wps-interop-override/index.ts', outputPathRelative: 'js/modules/interop-override', outputFilenameKey: 'wps-interop-override' }, + { entry: './openfin/modules/platform-override/wps-platform-override/index.ts', outputPathRelative: 'js/modules/platform-override', outputFilenameKey: 'wps-platform-override' }, +]; + +const rollupInput = entryDefinitions.reduce((acc, item) => { + const name = path.join(item.outputPathRelative, item.outputFilenameKey).replace(/\\/g, '/'); + acc[name] = item.entry; + return acc; +}, {}); + +export default { + plugins: [ + resolve({ extensions: ['.js', '.ts', '.mjs', '.json'] }), + commonjs(), + typescript({ + tsconfig: './tsconfig.app.json' + }), + copy({ + targets: [ + { + src: path.resolve(__dirname, './openfin/common'), + dest: './public' + } + ] + }), + terser() + ], + input: rollupInput, + external: ['fin'], + output: { + dir: path.resolve(__dirname, 'public/openfin'), + format: 'es', + entryFileNames: '[name].bundle.js', + sourcemap: false, + }, + treeshake: false, +}; diff --git a/frameworks/react/workspace-platform-starter/src/Provider.tsx b/frameworks/react/workspace-platform-starter/src/Provider.tsx index 3d20689..9a9ab1b 100644 --- a/frameworks/react/workspace-platform-starter/src/Provider.tsx +++ b/frameworks/react/workspace-platform-starter/src/Provider.tsx @@ -4,12 +4,12 @@ export function Provider() { useOpenFin(); return ( -
+

OpenFin platform provider

The window would usually be hidden, you can make it hidden on startup by setting the platform.autoShow flag to false in the manifest.fin.json

-
+ ); } diff --git a/frameworks/react/workspace-platform-starter/src/index.css b/frameworks/react/workspace-platform-starter/src/index.css index 08a3ac9..b08c51b 100644 --- a/frameworks/react/workspace-platform-starter/src/index.css +++ b/frameworks/react/workspace-platform-starter/src/index.css @@ -30,6 +30,10 @@ body { min-height: 100vh; } +main { + padding: 2rem; +} + h1 { font-size: 3.2em; line-height: 1.1; diff --git a/frameworks/react/workspace-platform-starter/tsconfig.app.json b/frameworks/react/workspace-platform-starter/tsconfig.app.json index d0c092d..cc60616 100644 --- a/frameworks/react/workspace-platform-starter/tsconfig.app.json +++ b/frameworks/react/workspace-platform-starter/tsconfig.app.json @@ -9,7 +9,6 @@ /* Bundler mode */ "moduleResolution": "bundler", - "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, "moduleDetection": "force", "noEmit": true, diff --git a/frameworks/react/workspace-platform-starter/vite.config.ts b/frameworks/react/workspace-platform-starter/vite.config.ts index 272f797..8bd6870 100644 --- a/frameworks/react/workspace-platform-starter/vite.config.ts +++ b/frameworks/react/workspace-platform-starter/vite.config.ts @@ -1,69 +1,9 @@ -import { defineConfig } from 'vite'; -import path from 'path'; -import { fileURLToPath } from 'url'; import react from "@vitejs/plugin-react"; -import { viteStaticCopy } from 'vite-plugin-static-copy'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const entryDefinitions = [ - { entry: './openfin/modules/auth/example/index.ts', outputPathRelative: 'js/modules/auth', outputFilenameKey: 'example' }, - { entry: './openfin/modules/endpoint/local-storage/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'local-storage' }, - { entry: './openfin/modules/endpoint/channel/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'channel' }, - { entry: './openfin/modules/endpoint/inline-apps/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'inline-apps' }, - { entry: './openfin/modules/init-options/interop/index.ts', outputPathRelative: 'js/modules/init-options', outputFilenameKey: 'interop' }, - { entry: './openfin/modules/init-options/launch-app/index.ts', outputPathRelative: 'js/modules/init-options', outputFilenameKey: 'launch-app' }, - { entry: './openfin/modules/log/console/index.ts', outputPathRelative: 'js/modules/log', outputFilenameKey: 'console' }, - { entry: './openfin/modules/actions/opacity/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'opacity' }, - { entry: './openfin/modules/endpoint/example-connection-validation/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'example.connection.validation' }, - { entry: './openfin/modules/analytics/console/index.ts', outputPathRelative: 'js/modules/analytics', outputFilenameKey: 'console' }, - { entry: './openfin/modules/composite/developer/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'developer' }, - { entry: './openfin/modules/integrations/apps/index.ts', outputPathRelative: 'js/modules/integrations', outputFilenameKey: 'apps' }, - { entry: './openfin/modules/integrations/workspaces/index.ts', outputPathRelative: 'js/modules/integrations', outputFilenameKey: 'workspaces' }, - { entry: './openfin/modules/integrations/pages/index.ts', outputPathRelative: 'js/modules/integrations', outputFilenameKey: 'pages' }, - { entry: './openfin/modules/composite/about/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'about' }, - { entry: './openfin/modules/composite/pages/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'pages' }, - { entry: './openfin/modules/composite/windows/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'windows' }, - { entry: './openfin/modules/endpoint/example-context-processor/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'example.context.processor' }, - { entry: './openfin/modules/actions/custom-menu/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'custom-menu' }, - { entry: './openfin/modules/auth/openid-connect/index.ts', outputPathRelative: 'js/modules/auth', outputFilenameKey: 'openid-connect' }, - { entry: './openfin/modules/endpoint/favorite-local-storage/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'favorite-local-storage' }, - { entry: './openfin/modules/actions/favorites-menu/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'favorites-menu' }, - { entry: './openfin/modules/composite/include-in-snapshot/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'include-in-snapshot' }, - { entry: './openfin/modules/lifecycle/example-notification-service/index.ts', outputPathRelative: 'js/modules/lifecycle', outputFilenameKey: 'example-notification-service' }, - { entry: './openfin/modules/endpoint/example-notification-source/index.ts', outputPathRelative: 'js/modules/endpoint', outputFilenameKey: 'example-notification-source' }, - { entry: './openfin/modules/platform-override/application-url-and-access-validator/index.ts', outputPathRelative: 'js/modules/platform-override', outputFilenameKey: 'application-url-and-access-validator' }, - { entry: './openfin/modules/init-options/launch-workspace/index.ts', outputPathRelative: 'js/modules/init-options', outputFilenameKey: 'launch-workspace' }, - { entry: './openfin/modules/composite/default-workspace/index.ts', outputPathRelative: 'js/modules/composite', outputFilenameKey: 'default-workspace' }, - { entry: './openfin/modules/content-creation/view-position/index.ts', outputPathRelative: 'js/modules/content-creation', outputFilenameKey: 'view-position' }, - { entry: './openfin/modules/actions/window-platform/index.ts', outputPathRelative: 'js/modules/actions', outputFilenameKey: 'window-platform' }, - { entry: './openfin/modules/share/pages/index.ts', outputPathRelative: 'js/modules/share', outputFilenameKey: 'pages' }, - { entry: './openfin/modules/share/workspaces/index.ts', outputPathRelative: 'js/modules/share', outputFilenameKey: 'workspaces' }, - { entry: './openfin/modules/interop-override/wps-interop-override/index.ts', outputPathRelative: 'js/modules/interop-override', outputFilenameKey: 'wps-interop-override' }, - { entry: './openfin/modules/platform-override/wps-platform-override/index.ts', outputPathRelative: 'js/modules/platform-override', outputFilenameKey: 'wps-platform-override' }, -]; - -const rollupInput = entryDefinitions.reduce((acc, item) => { - const name = path.join(item.outputPathRelative, item.outputFilenameKey).replace(/\\/g, '/'); - acc[name] = item.entry; - return acc; -}, {} as Record); - -rollupInput['root_html'] = path.resolve(__dirname, 'index.html'); +import { defineConfig } from "vite"; +import path from 'path'; export default defineConfig({ - plugins: [ - react(), - viteStaticCopy({ - targets: [ - { - src: path.resolve(__dirname, "./openfin/common"), - dest: "./" - } - ] - }) - ], + plugins: [react()], resolve: { alias: { 'workspace-platform-starter': path.resolve(__dirname, './openfin/framework') @@ -73,17 +13,4 @@ export default defineConfig({ server: { port: 8080 }, - build: { - outDir: path.resolve(__dirname, 'dist'), - sourcemap: false, - rollupOptions: { - treeshake: false, - input: rollupInput, - external: ['fin'], - output: { - format: 'es', - entryFileNames: '[name].bundle.js', - }, - }, - }, }); From 9328ffd068d0c82119a7c7b74e9af7125e94293d Mon Sep 17 00:00:00 2001 From: Ray Cashmore Date: Mon, 2 Jun 2025 09:01:14 +1000 Subject: [PATCH 8/8] Add router and local views --- .../openfin/.gitignore | 3 - .../package-lock.json | 56 ++- .../workspace-platform-starter/package.json | 3 +- .../public/apps.json | 347 +----------------- .../public/manifest.fin.json | 5 +- .../workspace-platform-starter/src/app.tsx | 16 + .../workspace-platform-starter/src/index.css | 84 ++--- .../workspace-platform-starter/src/main.tsx | 18 +- .../src/views/view1.tsx | 3 + .../src/views/view2.tsx | 3 + 10 files changed, 149 insertions(+), 389 deletions(-) delete mode 100644 frameworks/react/workspace-platform-starter/openfin/.gitignore create mode 100644 frameworks/react/workspace-platform-starter/src/app.tsx create mode 100644 frameworks/react/workspace-platform-starter/src/views/view1.tsx create mode 100644 frameworks/react/workspace-platform-starter/src/views/view2.tsx diff --git a/frameworks/react/workspace-platform-starter/openfin/.gitignore b/frameworks/react/workspace-platform-starter/openfin/.gitignore deleted file mode 100644 index 7352ff3..0000000 --- a/frameworks/react/workspace-platform-starter/openfin/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -framework/ -modules/ -common/ diff --git a/frameworks/react/workspace-platform-starter/package-lock.json b/frameworks/react/workspace-platform-starter/package-lock.json index 27a64c6..5078083 100644 --- a/frameworks/react/workspace-platform-starter/package-lock.json +++ b/frameworks/react/workspace-platform-starter/package-lock.json @@ -15,7 +15,8 @@ "@openfin/workspace": "21.0.12", "@openfin/workspace-platform": "21.0.12", "react": "^19.1.0", - "react-dom": "^19.1.0" + "react-dom": "^19.1.0", + "react-router-dom": "^7.6.1" }, "devDependencies": { "@eslint/js": "^9.25.0", @@ -2558,6 +2559,15 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "license": "MIT" }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -4189,6 +4199,44 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.1.tgz", + "integrity": "sha512-hPJXXxHJZEsPFNVbtATH7+MMX43UDeOauz+EAU4cgqTn7ojdI9qQORqS8Z0qmDlL1TclO/6jLRYUEtbWidtdHQ==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.1.tgz", + "integrity": "sha512-vxU7ei//UfPYQ3iZvHuO1D/5fX3/JOqhNTbRR+WjSBWxf9bIvpWK+ftjmdfJHzPOuMQKe2fiEdG+dZX6E8uUpA==", + "license": "MIT", + "dependencies": { + "react-router": "7.6.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, "node_modules/readable-stream": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", @@ -4433,6 +4481,12 @@ "randombytes": "^2.1.0" } }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", diff --git a/frameworks/react/workspace-platform-starter/package.json b/frameworks/react/workspace-platform-starter/package.json index 2be6a91..124ee20 100644 --- a/frameworks/react/workspace-platform-starter/package.json +++ b/frameworks/react/workspace-platform-starter/package.json @@ -20,7 +20,8 @@ "@openfin/workspace": "21.0.12", "@openfin/workspace-platform": "21.0.12", "react": "^19.1.0", - "react-dom": "^19.1.0" + "react-dom": "^19.1.0", + "react-router-dom": "^7.6.1" }, "devDependencies": { "@eslint/js": "^9.25.0", diff --git a/frameworks/react/workspace-platform-starter/public/apps.json b/frameworks/react/workspace-platform-starter/public/apps.json index 7c87a68..9064428 100644 --- a/frameworks/react/workspace-platform-starter/public/apps.json +++ b/frameworks/react/workspace-platform-starter/public/apps.json @@ -1,345 +1,34 @@ [ { - "appId": "view-contact-dashboard-launcher", - "name": "view-contact-dashboard-launcher", - "title": "View Contact Dashboard", - "description": "A hidden window that acts as an intent target and launches and snapshot and optionally publishes a context object to a specific context group", + "appId": "view-1", + "name": "view-1", + "title": "React View 1", + "description": "Example local React app", "manifest": { - "name": "view-contact-dashboard-launcher", - "url": "http://localhost:8080/common/windows/intent-window/intent-snapshot-launcher.html", - "autoShow": false, - "includeInSnapshots": false, - "customData": { - "settings": { - "snapshotUrl": "http://localhost:8080/common/snapshots/template-contact-dashboard.snapshot.fin.json", - "contextGroupName": "*", - "contextGroupToken": "{CONTEXT_GROUP}", - "intentName": "ViewContact", - "idToken": "{ID}", - "idName": "email" - } - } - }, - "manifestType": "inline-window", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [ - { - "name": "ViewContact", - "displayName": "View Contact", - "contexts": ["fdc3.contact"] - } - ], - "private": true, - "instanceMode": "single", - "customConfig": {}, - "images": [ - { - "src": "http://localhost:8080/common/images/previews/view-contact-dashboard-launcher.png" - } - ], - "tags": ["window", "fdc3", "interop", "contact"] - }, - { - "appId": "starter-style-guide", - "name": "starter-style-guide", - "title": "Starter Style Guide", - "description": "A style guide used to aid in the building of workspace starter samples.", - "manifest": "http://localhost:8080/common/style/style-view.json", - "manifestType": "view", - "icons": [{ "src": "http://localhost:8080/common/images/icon-blue.png" }], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [ - { - "src": "http://localhost:8080/common/images/previews/starter-style-guide.png" - } - ], - "tags": ["view", "style", "tools"] - }, - { - "appId": "openfin-versions-workspace", - "name": "openfin-versions-workspace", - "title": "OpenFin Versions - Workspace", - "description": "Launch the OpenFin Workspace Versions page. This launches the url as a view to demonstrate the capability. This is an example of a inline-view entry in the app catalog.", - "manifest": { - "url": "https://developer.openfin.co/versions/?product=Runtime#/?product=Workspace", - "name": "openfin-versions" - }, - "manifestType": "inline-view", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [], - "tags": ["versions", "view"] - }, - { - "appId": "openfin-versions-runtime", - "name": "openfin-versions-runtime", - "title": "OpenFin Versions - Runtime", - "description": "Launch the OpenFin Runtime Versions page. This launches in a classic window to demonstrate the capability. This is a example of an inline-window entry in the app catalog.", - "manifest": { - "url": "https://developer.openfin.co/versions/?product=Runtime" - }, - "manifestType": "inline-window", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [], - "tags": ["versions", "window"] - }, - { - "appId": "openfin-versions-integrations", - "name": "openfin-versions-integrations", - "title": "OpenFin Versions - Integrations", - "description": "Launch the OpenFin Integrations Versions page. This launches the url into the desktop browser to demonstrate the capability. This is an example of a desktop-browser entry in the app catalog.", - "manifest": "https://developer.openfin.co/versions/?product=Runtime#/?product=Integrations", - "manifestType": "desktop-browser", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [], - "tags": ["versions", "desktop-browser"] - }, - { - "appId": "openfin-information", - "name": "openfin-information", - "title": "OpenFin Information", - "description": "Display information about the OpenFin environment", - "manifest": "http://localhost:8080/common/views/platform/of-info.view.fin.json", - "manifestType": "view", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [ - { - "src": "http://localhost:8080/common/images/previews/of-info.png" - } - ], - "tags": ["view", "openfin", "versions"] - }, - { - "appId": "openfin-developer-page", - "name": "openfin-developer-page", - "title": "OpenFin Developer Docs", - "manifestType": "snapshot", - "description": "Shows a collection of OpenFin developer pages and provides an example of how you can present a pre-built page as a launch target in OpenFin Home. This entry has a manifest type of 'snapshot'.", - "manifest": "http://localhost:8080/common/snapshots/developer.snapshot.fin.json", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [ - { - "src": "http://localhost:8080/common/images/previews/openfin-page-docs.png" - } - ], - "tags": ["page", "developer"] - }, - { - "appId": "hidden-window-example", - "name": "hidden-window-example", - "title": "Hidden/Headless Window Example", - "manifestType": "window", - "description": "An example of launching a window that will not be captured as part of a saved workspace and will run headless in the background. This window generates a notification to show that it can be a window with a specific purpose (listening for notifications to create). The notification lets you show or close the hidden window. Only one instance can be running at a time. This window could be launched as part of your bootstrapping logic or in reaction to a particular event. It is listed in home as a way of launching the example.", - "manifest": "http://localhost:8080/common/windows/hidden-window/hidden.window.fin.json", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [], - "tags": ["window", "headless", "developer"] - }, - { - "appId": "irs-rfq", - "name": "irs-rfq", - "title": "IRS: Request For Quote", - "description": "Request for quote for Interest Rate Swaps.", - "manifest": "http://localhost:8080/common/windows/irs-rfq/irs-rfq.window.fin.json", - "manifestType": "window", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [ - { - "src": "http://localhost:8080/common/images/previews/irs-rfq.png" - }, - { - "src": "http://localhost:8080/common/images/previews/irs-rfq-notification1.png" - } - ], - "tags": ["view", "irs", "finance"] - }, - { - "appId": "openfin-frame", - "name": "openfin-frame", - "title": "Framed App", - "description": "An example of framing an application, injecting the fin and fdc3 apis and wiring up context group assignment and title updates.", - "manifest": { - "url": "http://localhost:8080/common/views/frame/parent/index.html", - "customData": { - "frame": { - "url": "http://localhost:8080/common/views/frame/example-content/example.html", - "title": "Example Frame", - "sandbox": "allow-forms allow-same-origin allow-scripts" - } - }, - "api": { - "iframe": { - "crossOriginInjection": true, - "sameOriginInjection": true - } - }, - "fdc3InteropApi": "2.0", - "preloadScripts": [ - { - "url": "http://localhost:8080/common/views/frame/framed/framed.preload.js" - } - ] - }, - "manifestType": "inline-view", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [], - "tags": ["developer", "view"] - }, - { - "appId": "openfin-frame-no-api", - "name": "openfin-frame-no-api", - "title": "Framed App (No API Injection)", - "description": "An example of framing an application, not injecting APIs but using a script loaded by the parent and the child and browser APIs (Postmessage) to sync title changes and provide a basic fdc3 api.", - "manifest": { - "url": "http://localhost:8080/common/views/frame/parent/index.html", - "customData": { - "frame": { - "url": "http://localhost:8080/common/views/frame/example-content/example.html", - "title": "Example Frame (No API Injection)", - "sandbox": "allow-forms allow-same-origin allow-scripts" - } - }, - "api": { - "iframe": { - "crossOriginInjection": false, - "sameOriginInjection": false - } - }, - "preloadScripts": [ - { - "url": "http://localhost:8080/common/views/frame/framed/framed.preload.js" - } - ] - }, - "manifestType": "inline-view", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], - "contactEmail": "contact@example.com", - "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [], - "tags": ["developer", "view"] - }, - { - "appId": "openfin-content-creation", - "name": "openfin-content-creation", - "title": "Content Creation Examples", - "description": "An example of using content creation rules to launch views/windows.", - "manifest": { - "url": "http://localhost:8080/common/views/content-creation/view-position.html" + "name": "view-1", + "url": "http://localhost:8080/view1", + "autoShow": false }, "manifestType": "inline-view", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], + "icons": [{ "src": "http://localhost:8080/favicon.png" }], "contactEmail": "contact@example.com", "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [], - "tags": ["developer", "view"] + "publisher": "OpenFin" }, { - "appId": "openfin-warn-before-closing", - "name": "openfin-warn-before-closing", - "title": "Example Warn Before Closing App", - "description": "An example app from our container starter: https://github.com/built-on-openfin/container-starter/tree/main/how-to/use-platform/warn-before-closing-dialog that makes the platform aware if there are unsaved changes (platform needs enableBeforeUnload to be set to true in the manifest and needs to override getUserDecisionForBeforeUnload.", + "appId": "view-2", + "name": "view-2", + "title": "React View 2", + "description": "Example local React app", "manifest": { - "url": "https://built-on-openfin.github.io/container-starter/main/use-platform-warn-before-closing-dialog/html/view.html", - "customData": {}, - "api": {}, - "fdc3InteropApi": "2.0" + "name": "view-2", + "url": "http://localhost:8080/view2", + "autoShow": false }, "manifestType": "inline-view", - "icons": [ - { - "src": "http://localhost:8080/common/images/icon-blue.png" - } - ], + "icons": [{ "src": "http://localhost:8080/favicon.png" }], "contactEmail": "contact@example.com", "supportEmail": "support@example.com", - "publisher": "OpenFin", - "intents": [], - "images": [], - "tags": ["developer", "view"] + "publisher": "OpenFin" } ] diff --git a/frameworks/react/workspace-platform-starter/public/manifest.fin.json b/frameworks/react/workspace-platform-starter/public/manifest.fin.json index 7346761..7ac548a 100644 --- a/frameworks/react/workspace-platform-starter/public/manifest.fin.json +++ b/frameworks/react/workspace-platform-starter/public/manifest.fin.json @@ -285,8 +285,6 @@ "appProvider": { "endpointIds": [ "http://localhost:8080/apps.json", - "http://localhost:8080/apps-fdc3-1-2.json", - "http://localhost:8080/apps-fdc3-2-0.json", "http://localhost:8080/common/apps-contact.json", "http://localhost:8080/common/apps.json", "http://localhost:8080/common/apps-interop.json", @@ -297,8 +295,7 @@ "http://localhost:8080/common/apps-tools.json", "http://localhost:8080/common/apps-fdc3-1-2.json", "http://localhost:8080/common/apps-fdc3-2-0.json", - "http://localhost:8080/common/apps-module.json", - "http://localhost:8080/apps-platform.json" + "http://localhost:8080/common/apps-module.json" ], "cacheDurationInSeconds": 10, "cacheDurationInMinutes": 0, diff --git a/frameworks/react/workspace-platform-starter/src/app.tsx b/frameworks/react/workspace-platform-starter/src/app.tsx new file mode 100644 index 0000000..88c46fb --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/app.tsx @@ -0,0 +1,16 @@ +import { BrowserRouter, Routes, Route } from "react-router-dom"; +import { Provider } from "./Provider"; +import { View1 } from "./views/view1"; +import { View2 } from "./views/view2"; + +export default function App() { + return ( + + + } /> + } /> + } /> + + + ); +} diff --git a/frameworks/react/workspace-platform-starter/src/index.css b/frameworks/react/workspace-platform-starter/src/index.css index b08c51b..8612352 100644 --- a/frameworks/react/workspace-platform-starter/src/index.css +++ b/frameworks/react/workspace-platform-starter/src/index.css @@ -1,33 +1,33 @@ :root { - font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; + 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; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; + font-weight: 500; + color: #646cff; + text-decoration: inherit; } a:hover { - color: #535bf2; + color: #535bf2; } body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; } main { @@ -35,38 +35,38 @@ main { } h1 { - font-size: 3.2em; - line-height: 1.1; + 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; + 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; + border-color: #646cff; } button:focus, button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; + 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; - } + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } } diff --git a/frameworks/react/workspace-platform-starter/src/main.tsx b/frameworks/react/workspace-platform-starter/src/main.tsx index 4fc40e3..8711709 100644 --- a/frameworks/react/workspace-platform-starter/src/main.tsx +++ b/frameworks/react/workspace-platform-starter/src/main.tsx @@ -1,11 +1,11 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import { Provider } from './Provider'; +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import App from "./app"; -import './index.css' +import "./index.css"; -createRoot(document.getElementById('root')!).render( - - - , -) +createRoot(document.getElementById("root")!).render( + + + , +); diff --git a/frameworks/react/workspace-platform-starter/src/views/view1.tsx b/frameworks/react/workspace-platform-starter/src/views/view1.tsx new file mode 100644 index 0000000..8934453 --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/views/view1.tsx @@ -0,0 +1,3 @@ +export function View1() { + return
View 1
; +} diff --git a/frameworks/react/workspace-platform-starter/src/views/view2.tsx b/frameworks/react/workspace-platform-starter/src/views/view2.tsx new file mode 100644 index 0000000..ebe574e --- /dev/null +++ b/frameworks/react/workspace-platform-starter/src/views/view2.tsx @@ -0,0 +1,3 @@ +export function View2() { + return
View 2
; +}