diff --git a/.github/workflows/nextjs_bundle_analysis_reusable.yml b/.github/workflows/nextjs_bundle_analysis_reusable.yml index 2831424091..67190a3b4e 100644 --- a/.github/workflows/nextjs_bundle_analysis_reusable.yml +++ b/.github/workflows/nextjs_bundle_analysis_reusable.yml @@ -95,7 +95,7 @@ jobs: - name: Get comment body id: get-comment-body if: success() && github.event.number - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: result-encoding: string script: | diff --git a/.github/workflows/station-build-test.yml b/.github/workflows/station-build-test.yml index eb8b345599..152c16f1b2 100644 --- a/.github/workflows/station-build-test.yml +++ b/.github/workflows/station-build-test.yml @@ -31,7 +31,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 7.0.402 + dotnet-version: 8.0.x - name: Build shell: bash run: | diff --git a/.github/workflows/station-release-binaries.yml b/.github/workflows/station-release-binaries.yml index 0ebf6f6e71..72c164f8b5 100644 --- a/.github/workflows/station-release-binaries.yml +++ b/.github/workflows/station-release-binaries.yml @@ -38,7 +38,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 7.0.402 + dotnet-version: 8.0.x - name: Build shell: bash run: | diff --git a/.github/workflows/web-nextjs_bundle_analysis.yml b/.github/workflows/web-nextjs_bundle_analysis.yml index dace43d842..0b0e9ad926 100644 --- a/.github/workflows/web-nextjs_bundle_analysis.yml +++ b/.github/workflows/web-nextjs_bundle_analysis.yml @@ -67,6 +67,6 @@ jobs: uses: ./.github/workflows/nextjs_bundle_analysis_reusable.yml with: workflowName: 'web-nextjs_bundle_analysis.yml' - name: 'doprocess' + name: 'doprocess.app' path: 'web/apps/doprocess.app' secrets: inherit \ No newline at end of file diff --git a/cloud/infrastructure/package.json b/cloud/infrastructure/package.json index 9f3b3b37b0..3dce751e0d 100644 --- a/cloud/infrastructure/package.json +++ b/cloud/infrastructure/package.json @@ -8,24 +8,24 @@ "restart-functions": "node tools/restart-functions.js" }, "devDependencies": { - "@types/node": "18.18.7", - "@typescript-eslint/eslint-plugin": "6.9.0", - "@typescript-eslint/parser": "6.9.0", - "eslint": "8.52.0", + "@types/node": "18.18.9", + "@typescript-eslint/eslint-plugin": "6.11.0", + "@typescript-eslint/parser": "6.11.0", + "eslint": "8.53.0", "eslint-config-standard": "17.1.0", "eslint-plugin-import": "2.29.0", - "eslint-plugin-n": "16.2.0", + "eslint-plugin-n": "16.3.1", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", "typescript": "5.2.2" }, "dependencies": { "@checkly/pulumi": "1.1.4", - "@pulumi/aws": "6.6.1", - "@pulumi/azure-native": "2.14.0", - "@pulumi/cloudflare": "5.13.0", - "@pulumi/command": "0.9.1", - "@pulumi/docker": "4.4.4", - "@pulumi/pulumi": "3.91.0" + "@pulumi/aws": "6.9.0", + "@pulumi/azure-native": "2.18.0", + "@pulumi/cloudflare": "5.15.0", + "@pulumi/command": "0.9.2", + "@pulumi/docker": "4.4.5", + "@pulumi/pulumi": "3.94.1" } } diff --git a/cloud/infrastructure/pnpm-lock.yaml b/cloud/infrastructure/pnpm-lock.yaml index a585c2407a..b85b076651 100644 --- a/cloud/infrastructure/pnpm-lock.yaml +++ b/cloud/infrastructure/pnpm-lock.yaml @@ -9,52 +9,52 @@ dependencies: specifier: 1.1.4 version: 1.1.4 '@pulumi/aws': - specifier: 6.6.1 - version: 6.6.1 + specifier: 6.9.0 + version: 6.9.0 '@pulumi/azure-native': - specifier: 2.14.0 - version: 2.14.0 + specifier: 2.18.0 + version: 2.18.0 '@pulumi/cloudflare': - specifier: 5.13.0 - version: 5.13.0 + specifier: 5.15.0 + version: 5.15.0 '@pulumi/command': - specifier: 0.9.1 - version: 0.9.1 + specifier: 0.9.2 + version: 0.9.2 '@pulumi/docker': - specifier: 4.4.4 - version: 4.4.4 + specifier: 4.4.5 + version: 4.4.5 '@pulumi/pulumi': - specifier: 3.91.0 - version: 3.91.0 + specifier: 3.94.1 + version: 3.94.1 devDependencies: '@types/node': - specifier: 18.18.7 - version: 18.18.7 + specifier: 18.18.9 + version: 18.18.9 '@typescript-eslint/eslint-plugin': - specifier: 6.9.0 - version: 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.11.0 + version: 6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.53.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: 6.9.0 - version: 6.9.0(eslint@8.52.0)(typescript@5.2.2) + specifier: 6.11.0 + version: 6.11.0(eslint@8.53.0)(typescript@5.2.2) eslint: - specifier: 8.52.0 - version: 8.52.0 + specifier: 8.53.0 + version: 8.53.0 eslint-config-standard: specifier: 17.1.0 - version: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.52.0) + version: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.53.0) eslint-plugin-import: specifier: 2.29.0 - version: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0) + version: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint@8.53.0) eslint-plugin-n: - specifier: 16.2.0 - version: 16.2.0(eslint@8.52.0) + specifier: 16.3.1 + version: 16.3.1(eslint@8.53.0) eslint-plugin-node: specifier: 11.1.0 - version: 11.1.0(eslint@8.52.0) + version: 11.1.0(eslint@8.53.0) eslint-plugin-promise: specifier: 6.1.1 - version: 6.1.1(eslint@8.52.0) + version: 6.1.1(eslint@8.53.0) typescript: specifier: 5.2.2 version: 5.2.2 @@ -70,18 +70,18 @@ packages: resolution: {integrity: sha512-YPNYtwEnKu23VDHNFu91xd/Ueu5zYONHcYwKDA5qTvtgZZ1nzrvPJgrO15KF0fLRVlGo7yckirDS26GpvBTe6w==} requiresBuild: true dependencies: - '@pulumi/pulumi': 3.91.0 + '@pulumi/pulumi': 3.94.1 transitivePeerDependencies: - supports-color dev: false - /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.52.0 + eslint: 8.53.0 eslint-visitor-keys: 3.4.3 dev: true @@ -90,8 +90,8 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + /@eslint/eslintrc@2.1.3: + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 @@ -107,27 +107,26 @@ packages: - supports-color dev: true - /@eslint/js@8.52.0: - resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} + /@eslint/js@8.53.0: + resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@grpc/grpc-js@1.8.17: - resolution: {integrity: sha512-DGuSbtMFbaRsyffMf+VEkVu8HkSXEUfO3UyGJNtqxW9ABdtTIA+2UXAJpwbJS+xfQxuwqLUeELmL6FuZkOqPxw==} + /@grpc/grpc-js@1.9.6: + resolution: {integrity: sha512-yq3qTy23u++8zdvf+h4mz4ohDFi681JAkMZZPTKh8zmUVh0AKLisFlgxcn22FMNowXz15oJ6pqgwT7DJ+PdJvg==} engines: {node: ^8.13.0 || >=10.10.0} dependencies: - '@grpc/proto-loader': 0.7.7 - '@types/node': 18.18.7 + '@grpc/proto-loader': 0.7.10 + '@types/node': 18.18.9 dev: false - /@grpc/proto-loader@0.7.7: - resolution: {integrity: sha512-1TIeXOi8TuSCQprPItwoMymZXxWT0CPxUhkrkeCUH+D8U7QDwQ6b7SUz2MaLuWM2llT+J/TVFLmQI5KtML3BhQ==} + /@grpc/proto-loader@0.7.10: + resolution: {integrity: sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==} engines: {node: '>=6'} hasBin: true dependencies: - '@types/long': 4.0.2 lodash.camelcase: 4.3.0 - long: 4.0.0 + long: 5.2.3 protobufjs: 7.2.4 yargs: 17.7.2 dev: false @@ -363,10 +362,10 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@pulumi/aws@6.6.1: - resolution: {integrity: sha512-fpjiZ1BwTBbGdI+FiNlSN6//nXBDgLSUhl2+QMMYbB68reJUaVIRe/h73F1SxCwRm12fL9rFrsG2qEf5HYk6wA==} + /@pulumi/aws@6.9.0: + resolution: {integrity: sha512-c0ivz01YEuZesfroFSQJdjXivyltdvXBW8hcOhGCwAycjmHpDnXI0HSXk9aIkwxVrUBAW0MQYEa+QRHb5W2V1Q==} dependencies: - '@pulumi/pulumi': 3.91.0 + '@pulumi/pulumi': 3.94.1 builtin-modules: 3.0.0 mime: 2.6.0 read-package-tree: 5.3.1 @@ -375,45 +374,45 @@ packages: - supports-color dev: false - /@pulumi/azure-native@2.14.0: - resolution: {integrity: sha512-MYtd5EVgvfPGyUzk0nQEemNt0ehsOmn8fGxPX8lELuONU0UYwpsNeQYO4TSqA4qN9hsMipLKBVCkVh4DYo4INA==} + /@pulumi/azure-native@2.18.0: + resolution: {integrity: sha512-mp6MlTmM1GRj1EXLk5cfwGTZtmAFFjb1taAjs53xHl7YLnW+wLd/Ff0Su+uvloLGUgV2JJIOjdaegQqcR1Aj+w==} dependencies: - '@pulumi/pulumi': 3.91.0 + '@pulumi/pulumi': 3.94.1 transitivePeerDependencies: - supports-color dev: false - /@pulumi/cloudflare@5.13.0: - resolution: {integrity: sha512-YkkmbCDZwbswBUqvOdtwMm5RbrDKG4b2RXzaCLj6JMgwltHcIz4yR5afBAK87IfJSCR5wjzD0YGXtG+SHExjvw==} + /@pulumi/cloudflare@5.15.0: + resolution: {integrity: sha512-h7jhFv4hTpdki5F5MwS6CVMUorfiragesGrnIl/YZtw2BZZL7hlFMODnJTZyq7RBVQcoMSigSvfOI8M404egKQ==} dependencies: - '@pulumi/pulumi': 3.91.0 + '@pulumi/pulumi': 3.94.1 transitivePeerDependencies: - supports-color dev: false - /@pulumi/command@0.9.1: - resolution: {integrity: sha512-0QVj0N02FOZRv/DrEPEx//wfMI6Iv2gatPj0s6ue5LpmhXXjLuOC/TBnpcTq1DqB9/uc3sCLafqXdJSdFzbt9g==} + /@pulumi/command@0.9.2: + resolution: {integrity: sha512-9RaGDiy8jFCiaarj4EOrMW/fVCM/AgBigzwM6CKzlR49x8UFiRDmKrXfEVHb8r2P9IpC4IaAZf5VbNNAHwN/rA==} requiresBuild: true dependencies: - '@pulumi/pulumi': 3.91.0 + '@pulumi/pulumi': 3.94.1 transitivePeerDependencies: - supports-color dev: false - /@pulumi/docker@4.4.4: - resolution: {integrity: sha512-CuW5UAI+mZWJqD3ZKEv74ReWu/jCpoJKyXpjtp3m4I+bWoOoOfg7jUGoJnwLODQPnrmlawOviNa0TzMR5WdXaQ==} + /@pulumi/docker@4.4.5: + resolution: {integrity: sha512-Y3q/aI9HQEN3FwgGbTTURFaD+vQLlG5CXiHD4lnlbqt4USU9BhMeYpT6BbwHktFxnNil/8FYr2mX7X4MetQidg==} dependencies: - '@pulumi/pulumi': 3.91.0 + '@pulumi/pulumi': 3.94.1 semver: 5.7.2 transitivePeerDependencies: - supports-color dev: false - /@pulumi/pulumi@3.91.0: - resolution: {integrity: sha512-xtCsfDyWK/tJXI/TrqgOUDdykYfcSBW2DLMBw3wZ4cCYG25OMg5e4uSo/0BJ2HAS4xr0cGeFL7FpADCPIWgFEQ==} + /@pulumi/pulumi@3.94.1: + resolution: {integrity: sha512-uftw2Ry9W0s6t5cAYWGPSIzB82n0dSuwUR21k8WaO9P56cO0aaUIdCxsORcNL4kI7+z7LJQOBVYcGNYVHvZeJQ==} engines: {node: '>=8.13.0 || >=10.10.0'} dependencies: - '@grpc/grpc-js': 1.8.17 + '@grpc/grpc-js': 1.9.6 '@logdna/tail-file': 2.2.0 '@opentelemetry/api': 1.4.1 '@opentelemetry/exporter-zipkin': 1.12.0(@opentelemetry/api@1.4.1) @@ -454,12 +453,8 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/long@4.0.2: - resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - dev: false - - /@types/node@18.18.7: - resolution: {integrity: sha512-bw+lEsxis6eqJYW8Ql6+yTqkE6RuFtsQPSe5JxXbqYRFQEER5aJA9a5UH9igqDWm3X4iLHIKOHlnAXLM4mi7uQ==} + /@types/node@18.18.9: + resolution: {integrity: sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==} dependencies: undici-types: 5.26.5 @@ -467,8 +462,8 @@ packages: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true - /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==} + /@typescript-eslint/eslint-plugin@6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -479,13 +474,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.9.0 - '@typescript-eslint/type-utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.9.0 + '@typescript-eslint/parser': 6.11.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.11.0 + '@typescript-eslint/type-utils': 6.11.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.11.0 debug: 4.3.4 - eslint: 8.52.0 + eslint: 8.53.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 @@ -496,8 +491,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.9.0(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==} + /@typescript-eslint/parser@6.11.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -506,27 +501,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.9.0 - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.9.0 + '@typescript-eslint/scope-manager': 6.11.0 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.11.0 debug: 4.3.4 - eslint: 8.52.0 + eslint: 8.53.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.9.0: - resolution: {integrity: sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==} + /@typescript-eslint/scope-manager@6.11.0: + resolution: {integrity: sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/visitor-keys': 6.9.0 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/visitor-keys': 6.11.0 dev: true - /@typescript-eslint/type-utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==} + /@typescript-eslint/type-utils@6.11.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -535,23 +530,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.52.0 + eslint: 8.53.0 ts-api-utils: 1.0.1(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.9.0: - resolution: {integrity: sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==} + /@typescript-eslint/types@6.11.0: + resolution: {integrity: sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.9.0(typescript@5.2.2): - resolution: {integrity: sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==} + /@typescript-eslint/typescript-estree@6.11.0(typescript@5.2.2): + resolution: {integrity: sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -559,8 +554,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/visitor-keys': 6.9.0 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/visitor-keys': 6.11.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -571,30 +566,30 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==} + /@typescript-eslint/utils@6.11.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.9.0 - '@typescript-eslint/types': 6.9.0 - '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) - eslint: 8.52.0 + '@typescript-eslint/scope-manager': 6.11.0 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) + eslint: 8.53.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.9.0: - resolution: {integrity: sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==} + /@typescript-eslint/visitor-keys@6.11.0: + resolution: {integrity: sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.9.0 + '@typescript-eslint/types': 6.11.0 eslint-visitor-keys: 3.4.3 dev: true @@ -759,6 +754,11 @@ packages: engines: {node: '>=6'} dev: false + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: @@ -768,8 +768,8 @@ packages: /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 dev: true /call-bind@1.0.5: @@ -984,7 +984,7 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.52.0): + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.53.0): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -993,10 +993,10 @@ packages: eslint-plugin-n: '^15.0.0 || ^16.0.0 ' eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.52.0 - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0) - eslint-plugin-n: 16.2.0(eslint@8.52.0) - eslint-plugin-promise: 6.1.1(eslint@8.52.0) + eslint: 8.53.0 + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint@8.53.0) + eslint-plugin-n: 16.3.1(eslint@8.53.0) + eslint-plugin-promise: 6.1.1(eslint@8.53.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -1009,7 +1009,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint@8.53.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -1030,37 +1030,37 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.11.0(eslint@8.53.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.52.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es-x@7.1.0(eslint@8.52.0): + /eslint-plugin-es-x@7.1.0(eslint@8.53.0): resolution: {integrity: sha512-AhiaF31syh4CCQ+C5ccJA0VG6+kJK8+5mXKKE7Qs1xcPRg02CDPOj3mWlQxuWS/AYtg7kxrDNgW9YW3vc0Q+Mw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) '@eslint-community/regexpp': 4.6.2 - eslint: 8.52.0 + eslint: 8.53.0 dev: true - /eslint-plugin-es@3.0.1(eslint@8.52.0): + /eslint-plugin-es@3.0.1(eslint@8.53.0): resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.52.0 + eslint: 8.53.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0): + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.11.0)(eslint@8.53.0): resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: @@ -1070,16 +1070,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.11.0(eslint@8.53.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.52.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint@8.53.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -1095,32 +1095,33 @@ packages: - supports-color dev: true - /eslint-plugin-n@16.2.0(eslint@8.52.0): - resolution: {integrity: sha512-AQER2jEyQOt1LG6JkGJCCIFotzmlcCZFur2wdKrp1JX2cNotC7Ae0BcD/4lLv3lUAArM9uNS8z/fsvXTd0L71g==} + /eslint-plugin-n@16.3.1(eslint@8.53.0): + resolution: {integrity: sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) builtins: 5.0.1 - eslint: 8.52.0 - eslint-plugin-es-x: 7.1.0(eslint@8.52.0) + eslint: 8.53.0 + eslint-plugin-es-x: 7.1.0(eslint@8.53.0) get-tsconfig: 4.7.0 ignore: 5.2.4 - is-core-module: 2.13.0 + is-builtin-module: 3.2.1 + is-core-module: 2.13.1 minimatch: 3.1.2 - resolve: 1.22.3 + resolve: 1.22.8 semver: 7.5.4 dev: true - /eslint-plugin-node@11.1.0(eslint@8.52.0): + /eslint-plugin-node@11.1.0(eslint@8.53.0): resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=5.16.0' dependencies: - eslint: 8.52.0 - eslint-plugin-es: 3.0.1(eslint@8.52.0) + eslint: 8.53.0 + eslint-plugin-es: 3.0.1(eslint@8.53.0) eslint-utils: 2.1.0 ignore: 5.2.4 minimatch: 3.1.2 @@ -1128,13 +1129,13 @@ packages: semver: 6.3.1 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.52.0): + /eslint-plugin-promise@6.1.1(eslint@8.53.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.52.0 + eslint: 8.53.0 dev: true /eslint-scope@7.2.2: @@ -1162,15 +1163,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.52.0: - resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} + /eslint@8.53.0: + resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) '@eslint-community/regexpp': 4.6.2 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.52.0 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.53.0 '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -1342,9 +1343,6 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -1368,10 +1366,11 @@ packages: /get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 + dev: true /get-intrinsic@1.2.2: resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} @@ -1476,7 +1475,7 @@ packages: /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} @@ -1496,7 +1495,7 @@ packages: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 /hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} @@ -1579,16 +1578,17 @@ packages: call-bind: 1.0.5 has-tostringtag: 1.0.0 + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - dependencies: - has: 1.0.3 - dev: true - /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: @@ -1747,10 +1747,6 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /long@4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - dev: false - /long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} dev: false @@ -2024,7 +2020,7 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 18.18.7 + '@types/node': 18.18.9 long: 5.2.3 dev: false @@ -2111,15 +2107,6 @@ packages: /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true - dependencies: - is-core-module: 2.13.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /resolve@1.22.3: - resolution: {integrity: sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==} - hasBin: true dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 diff --git a/cloud/src/Signal.Api.Common/Signal.Api.Common.csproj b/cloud/src/Signal.Api.Common/Signal.Api.Common.csproj index b8791b9033..8ff985cd17 100644 --- a/cloud/src/Signal.Api.Common/Signal.Api.Common.csproj +++ b/cloud/src/Signal.Api.Common/Signal.Api.Common.csproj @@ -8,14 +8,14 @@ - + - - - + + + diff --git a/cloud/src/Signal.Core/Signal.Core.csproj b/cloud/src/Signal.Core/Signal.Core.csproj index 357bc07ab9..5cdbc6a55f 100644 --- a/cloud/src/Signal.Core/Signal.Core.csproj +++ b/cloud/src/Signal.Core/Signal.Core.csproj @@ -6,7 +6,7 @@ true - - + + \ No newline at end of file diff --git a/cloud/src/Signal.Infrastructure.AzureSpeech/Signal.Infrastructure.AzureSpeech.csproj b/cloud/src/Signal.Infrastructure.AzureSpeech/Signal.Infrastructure.AzureSpeech.csproj index ae27da6ff4..17f3080406 100644 --- a/cloud/src/Signal.Infrastructure.AzureSpeech/Signal.Infrastructure.AzureSpeech.csproj +++ b/cloud/src/Signal.Infrastructure.AzureSpeech/Signal.Infrastructure.AzureSpeech.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/cloud/src/Signal.Infrastructure.AzureStorage.Tables/Signal.Infrastructure.AzureStorage.Tables.csproj b/cloud/src/Signal.Infrastructure.AzureStorage.Tables/Signal.Infrastructure.AzureStorage.Tables.csproj index 359ca49273..ff86853a24 100644 --- a/cloud/src/Signal.Infrastructure.AzureStorage.Tables/Signal.Infrastructure.AzureStorage.Tables.csproj +++ b/cloud/src/Signal.Infrastructure.AzureStorage.Tables/Signal.Infrastructure.AzureStorage.Tables.csproj @@ -17,11 +17,11 @@ - - - - - + + + + + diff --git a/cloud/src/Signal.Infrastructure.Secrets/Signal.Infrastructure.Secrets.csproj b/cloud/src/Signal.Infrastructure.Secrets/Signal.Infrastructure.Secrets.csproj index d3f95dcf44..6be931bd5f 100644 --- a/cloud/src/Signal.Infrastructure.Secrets/Signal.Infrastructure.Secrets.csproj +++ b/cloud/src/Signal.Infrastructure.Secrets/Signal.Infrastructure.Secrets.csproj @@ -9,10 +9,10 @@ - + - - + + diff --git a/cloud/src/Signalco.Api.Common.Health/Signalco.Api.Common.Health.csproj b/cloud/src/Signalco.Api.Common.Health/Signalco.Api.Common.Health.csproj index 2159c41f4b..cb3e8b24e4 100644 --- a/cloud/src/Signalco.Api.Common.Health/Signalco.Api.Common.Health.csproj +++ b/cloud/src/Signalco.Api.Common.Health/Signalco.Api.Common.Health.csproj @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/cloud/src/Signalco.Api.Public.RemoteBrowser/Signalco.Api.Public.RemoteBrowser.csproj b/cloud/src/Signalco.Api.Public.RemoteBrowser/Signalco.Api.Public.RemoteBrowser.csproj index ccff52680a..c0bd711a51 100644 --- a/cloud/src/Signalco.Api.Public.RemoteBrowser/Signalco.Api.Public.RemoteBrowser.csproj +++ b/cloud/src/Signalco.Api.Public.RemoteBrowser/Signalco.Api.Public.RemoteBrowser.csproj @@ -9,8 +9,8 @@ true - - + + diff --git a/cloud/src/Signalco.Api.Public/Signalco.Api.Public.csproj b/cloud/src/Signalco.Api.Public/Signalco.Api.Public.csproj index 464b59e023..953b63daf1 100644 --- a/cloud/src/Signalco.Api.Public/Signalco.Api.Public.csproj +++ b/cloud/src/Signalco.Api.Public/Signalco.Api.Public.csproj @@ -10,12 +10,12 @@ true - - - + + + - + diff --git a/cloud/src/Signalco.Channel.GitHubApp/Signalco.Channel.GitHubApp.csproj b/cloud/src/Signalco.Channel.GitHubApp/Signalco.Channel.GitHubApp.csproj index 3f00cc2917..c46f87abc5 100644 --- a/cloud/src/Signalco.Channel.GitHubApp/Signalco.Channel.GitHubApp.csproj +++ b/cloud/src/Signalco.Channel.GitHubApp/Signalco.Channel.GitHubApp.csproj @@ -10,10 +10,10 @@ true - - + + - + diff --git a/cloud/src/Signalco.Channel.PhilipsHue/Signalco.Channel.PhilipsHue.csproj b/cloud/src/Signalco.Channel.PhilipsHue/Signalco.Channel.PhilipsHue.csproj index 5a86dc68fb..f5386c0852 100644 --- a/cloud/src/Signalco.Channel.PhilipsHue/Signalco.Channel.PhilipsHue.csproj +++ b/cloud/src/Signalco.Channel.PhilipsHue/Signalco.Channel.PhilipsHue.csproj @@ -9,11 +9,11 @@ preview - - + + - + diff --git a/cloud/src/Signalco.Channel.Samsung/Signalco.Channel.Samsung.csproj b/cloud/src/Signalco.Channel.Samsung/Signalco.Channel.Samsung.csproj index 5a86dc68fb..f5386c0852 100644 --- a/cloud/src/Signalco.Channel.Samsung/Signalco.Channel.Samsung.csproj +++ b/cloud/src/Signalco.Channel.Samsung/Signalco.Channel.Samsung.csproj @@ -9,11 +9,11 @@ preview - - + + - + diff --git a/cloud/src/Signalco.Channel.Slack/Signalco.Channel.Slack.csproj b/cloud/src/Signalco.Channel.Slack/Signalco.Channel.Slack.csproj index 0b831050e0..8b3608e359 100644 --- a/cloud/src/Signalco.Channel.Slack/Signalco.Channel.Slack.csproj +++ b/cloud/src/Signalco.Channel.Slack/Signalco.Channel.Slack.csproj @@ -9,8 +9,8 @@ preview - - + + diff --git a/cloud/src/Signalco.Channel.Station/Signalco.Channel.Station.csproj b/cloud/src/Signalco.Channel.Station/Signalco.Channel.Station.csproj index ba4745aeaf..05c8990197 100644 --- a/cloud/src/Signalco.Channel.Station/Signalco.Channel.Station.csproj +++ b/cloud/src/Signalco.Channel.Station/Signalco.Channel.Station.csproj @@ -9,11 +9,11 @@ preview - - + + - + diff --git a/cloud/src/Signalco.Channel.Zigbee2Mqtt/Signalco.Channel.Zigbee2Mqtt.csproj b/cloud/src/Signalco.Channel.Zigbee2Mqtt/Signalco.Channel.Zigbee2Mqtt.csproj index 8e7b5871bb..9188a82f74 100644 --- a/cloud/src/Signalco.Channel.Zigbee2Mqtt/Signalco.Channel.Zigbee2Mqtt.csproj +++ b/cloud/src/Signalco.Channel.Zigbee2Mqtt/Signalco.Channel.Zigbee2Mqtt.csproj @@ -9,11 +9,11 @@ preview - - + + - + diff --git a/cloud/src/Signalco.Channel.iRobot/Signalco.Channel.iRobot.csproj b/cloud/src/Signalco.Channel.iRobot/Signalco.Channel.iRobot.csproj index 8a160a1cee..094cf92c04 100644 --- a/cloud/src/Signalco.Channel.iRobot/Signalco.Channel.iRobot.csproj +++ b/cloud/src/Signalco.Channel.iRobot/Signalco.Channel.iRobot.csproj @@ -9,11 +9,11 @@ true - - + + - + diff --git a/cloud/src/Signalco.Func.Internal.ContactStateProcessor/Signalco.Func.Internal.ContactStateProcessor.csproj b/cloud/src/Signalco.Func.Internal.ContactStateProcessor/Signalco.Func.Internal.ContactStateProcessor.csproj index 361c6f905d..7d6b38a85d 100644 --- a/cloud/src/Signalco.Func.Internal.ContactStateProcessor/Signalco.Func.Internal.ContactStateProcessor.csproj +++ b/cloud/src/Signalco.Func.Internal.ContactStateProcessor/Signalco.Func.Internal.ContactStateProcessor.csproj @@ -9,10 +9,10 @@ preview - - + + - + diff --git a/cloud/src/Signalco.Func.Internal.Maintenance/Signalco.Func.Internal.Maintenance.csproj b/cloud/src/Signalco.Func.Internal.Maintenance/Signalco.Func.Internal.Maintenance.csproj index 28374494da..5f8113231f 100644 --- a/cloud/src/Signalco.Func.Internal.Maintenance/Signalco.Func.Internal.Maintenance.csproj +++ b/cloud/src/Signalco.Func.Internal.Maintenance/Signalco.Func.Internal.Maintenance.csproj @@ -9,12 +9,12 @@ preview - - + + - + - + diff --git a/cloud/src/Signalco.Func.Internal.Migration/Signalco.Func.Internal.Migration.csproj b/cloud/src/Signalco.Func.Internal.Migration/Signalco.Func.Internal.Migration.csproj index ed45c25861..d2d7d45678 100644 --- a/cloud/src/Signalco.Func.Internal.Migration/Signalco.Func.Internal.Migration.csproj +++ b/cloud/src/Signalco.Func.Internal.Migration/Signalco.Func.Internal.Migration.csproj @@ -9,11 +9,11 @@ preview - - + + - - + + diff --git a/cloud/src/Signalco.Func.Internal.TimeEntityPublic/Signalco.Func.Internal.TimeEntityPublic.csproj b/cloud/src/Signalco.Func.Internal.TimeEntityPublic/Signalco.Func.Internal.TimeEntityPublic.csproj index b6528b84a3..0c5d187ade 100644 --- a/cloud/src/Signalco.Func.Internal.TimeEntityPublic/Signalco.Func.Internal.TimeEntityPublic.csproj +++ b/cloud/src/Signalco.Func.Internal.TimeEntityPublic/Signalco.Func.Internal.TimeEntityPublic.csproj @@ -9,11 +9,11 @@ preview - - + + - - + + diff --git a/cloud/src/Signalco.Func.Internal.UsageProcessor/Signalco.Func.Internal.UsageProcessor.csproj b/cloud/src/Signalco.Func.Internal.UsageProcessor/Signalco.Func.Internal.UsageProcessor.csproj index 5972b39ab2..0915ef2931 100644 --- a/cloud/src/Signalco.Func.Internal.UsageProcessor/Signalco.Func.Internal.UsageProcessor.csproj +++ b/cloud/src/Signalco.Func.Internal.UsageProcessor/Signalco.Func.Internal.UsageProcessor.csproj @@ -9,12 +9,12 @@ preview - + - + - + diff --git a/cloud/src/Signalco.Infrastructure.Processor.Tests/Signalco.Infrastructure.Processor.Tests.csproj b/cloud/src/Signalco.Infrastructure.Processor.Tests/Signalco.Infrastructure.Processor.Tests.csproj index 9b45d7390d..08759eb177 100644 --- a/cloud/src/Signalco.Infrastructure.Processor.Tests/Signalco.Infrastructure.Processor.Tests.csproj +++ b/cloud/src/Signalco.Infrastructure.Processor.Tests/Signalco.Infrastructure.Processor.Tests.csproj @@ -8,9 +8,9 @@ - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/discrete/Signalco.Discrete.Api.Mutex/cloud/Signalco.Discrete.Api.Mutex.csproj b/discrete/Signalco.Discrete.Api.Mutex/cloud/Signalco.Discrete.Api.Mutex.csproj index 9c28c0c1d5..44d7c96656 100644 --- a/discrete/Signalco.Discrete.Api.Mutex/cloud/Signalco.Discrete.Api.Mutex.csproj +++ b/discrete/Signalco.Discrete.Api.Mutex/cloud/Signalco.Discrete.Api.Mutex.csproj @@ -8,9 +8,9 @@ true - - - + + + diff --git a/station/Signal.Beacon.Application/Signal.Beacon.Application.csproj b/station/Signal.Beacon.Application/Signal.Beacon.Application.csproj index 0c2a2aebf8..20c67e9a4f 100644 --- a/station/Signal.Beacon.Application/Signal.Beacon.Application.csproj +++ b/station/Signal.Beacon.Application/Signal.Beacon.Application.csproj @@ -7,16 +7,16 @@ - - - + + + - + - + diff --git a/station/Signal.Beacon.Channel.PhilipsHue/Signal.Beacon.Channel.PhilipsHue.csproj b/station/Signal.Beacon.Channel.PhilipsHue/Signal.Beacon.Channel.PhilipsHue.csproj index d6dd0a8a6a..da2ac1c6b0 100644 --- a/station/Signal.Beacon.Channel.PhilipsHue/Signal.Beacon.Channel.PhilipsHue.csproj +++ b/station/Signal.Beacon.Channel.PhilipsHue/Signal.Beacon.Channel.PhilipsHue.csproj @@ -7,10 +7,10 @@ - - - - + + + + diff --git a/station/Signal.Beacon.Channel.Samsung/Signal.Beacon.Channel.Samsung.csproj b/station/Signal.Beacon.Channel.Samsung/Signal.Beacon.Channel.Samsung.csproj index ff48b73afb..468bc03526 100644 --- a/station/Signal.Beacon.Channel.Samsung/Signal.Beacon.Channel.Samsung.csproj +++ b/station/Signal.Beacon.Channel.Samsung/Signal.Beacon.Channel.Samsung.csproj @@ -7,7 +7,7 @@ - + diff --git a/station/Signal.Beacon.Channel.Signal/Signal.Beacon.Channel.Signal.csproj b/station/Signal.Beacon.Channel.Signal/Signal.Beacon.Channel.Signal.csproj index 19c807d6b8..ec36e5a54e 100644 --- a/station/Signal.Beacon.Channel.Signal/Signal.Beacon.Channel.Signal.csproj +++ b/station/Signal.Beacon.Channel.Signal/Signal.Beacon.Channel.Signal.csproj @@ -7,7 +7,7 @@ - + diff --git a/station/Signal.Beacon.Channel.Tasmota/Signal.Beacon.Channel.Tasmota.csproj b/station/Signal.Beacon.Channel.Tasmota/Signal.Beacon.Channel.Tasmota.csproj index 19c807d6b8..ec36e5a54e 100644 --- a/station/Signal.Beacon.Channel.Tasmota/Signal.Beacon.Channel.Tasmota.csproj +++ b/station/Signal.Beacon.Channel.Tasmota/Signal.Beacon.Channel.Tasmota.csproj @@ -7,7 +7,7 @@ - + diff --git a/station/Signal.Beacon.Channel.Zigbee2Mqtt/Signal.Beacon.Channel.Zigbee2Mqtt.csproj b/station/Signal.Beacon.Channel.Zigbee2Mqtt/Signal.Beacon.Channel.Zigbee2Mqtt.csproj index d8d46fb282..8322213c60 100644 --- a/station/Signal.Beacon.Channel.Zigbee2Mqtt/Signal.Beacon.Channel.Zigbee2Mqtt.csproj +++ b/station/Signal.Beacon.Channel.Zigbee2Mqtt/Signal.Beacon.Channel.Zigbee2Mqtt.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/station/Signal.Beacon.Channel.iRobot/Signal.Beacon.Channel.iRobot.csproj b/station/Signal.Beacon.Channel.iRobot/Signal.Beacon.Channel.iRobot.csproj index 19c807d6b8..ec36e5a54e 100644 --- a/station/Signal.Beacon.Channel.iRobot/Signal.Beacon.Channel.iRobot.csproj +++ b/station/Signal.Beacon.Channel.iRobot/Signal.Beacon.Channel.iRobot.csproj @@ -7,7 +7,7 @@ - + diff --git a/station/Signal.Beacon.Configuration/Signal.Beacon.Configuration.csproj b/station/Signal.Beacon.Configuration/Signal.Beacon.Configuration.csproj index d8d46fb282..8322213c60 100644 --- a/station/Signal.Beacon.Configuration/Signal.Beacon.Configuration.csproj +++ b/station/Signal.Beacon.Configuration/Signal.Beacon.Configuration.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/station/Signal.Beacon.Core.Tests/Signal.Beacon.Core.Tests.csproj b/station/Signal.Beacon.Core.Tests/Signal.Beacon.Core.Tests.csproj index 2d68dacab0..2cbee23f21 100644 --- a/station/Signal.Beacon.Core.Tests/Signal.Beacon.Core.Tests.csproj +++ b/station/Signal.Beacon.Core.Tests/Signal.Beacon.Core.Tests.csproj @@ -7,9 +7,9 @@ - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/station/Signal.Beacon.Core/Signal.Beacon.Core.csproj b/station/Signal.Beacon.Core/Signal.Beacon.Core.csproj index 5bd81b99e6..0e91f4b363 100644 --- a/station/Signal.Beacon.Core/Signal.Beacon.Core.csproj +++ b/station/Signal.Beacon.Core/Signal.Beacon.Core.csproj @@ -7,7 +7,7 @@ - + diff --git a/station/Signal.Beacon.Voice.Tests/Signal.Beacon.Voice.Tests.csproj b/station/Signal.Beacon.Voice.Tests/Signal.Beacon.Voice.Tests.csproj index b10f9b130f..a3756dca2f 100644 --- a/station/Signal.Beacon.Voice.Tests/Signal.Beacon.Voice.Tests.csproj +++ b/station/Signal.Beacon.Voice.Tests/Signal.Beacon.Voice.Tests.csproj @@ -7,10 +7,10 @@ - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/station/Signal.Beacon.Voice/Signal.Beacon.Voice.csproj b/station/Signal.Beacon.Voice/Signal.Beacon.Voice.csproj index 7dde6b8484..443dd46ab4 100644 --- a/station/Signal.Beacon.Voice/Signal.Beacon.Voice.csproj +++ b/station/Signal.Beacon.Voice/Signal.Beacon.Voice.csproj @@ -16,11 +16,11 @@ - - + + - - + + diff --git a/station/Signal.Beacon.WorkerService/Signal.Beacon.csproj b/station/Signal.Beacon.WorkerService/Signal.Beacon.csproj index e0bdc20524..e72e10bcd8 100644 --- a/station/Signal.Beacon.WorkerService/Signal.Beacon.csproj +++ b/station/Signal.Beacon.WorkerService/Signal.Beacon.csproj @@ -8,9 +8,9 @@ - - - + + + diff --git a/station/Signalco.Station.Channel.MiFlora/Signalco.Station.Channel.MiFlora.csproj b/station/Signalco.Station.Channel.MiFlora/Signalco.Station.Channel.MiFlora.csproj index 607079f28f..c9608edfb0 100644 --- a/station/Signalco.Station.Channel.MiFlora/Signalco.Station.Channel.MiFlora.csproj +++ b/station/Signalco.Station.Channel.MiFlora/Signalco.Station.Channel.MiFlora.csproj @@ -10,7 +10,7 @@ - + diff --git a/station/Signalco.Station.Channel.Shelly/Signalco.Station.Channel.Shelly.csproj b/station/Signalco.Station.Channel.Shelly/Signalco.Station.Channel.Shelly.csproj index cf9d57bcfd..75a7c8b5b3 100644 --- a/station/Signalco.Station.Channel.Shelly/Signalco.Station.Channel.Shelly.csproj +++ b/station/Signalco.Station.Channel.Shelly/Signalco.Station.Channel.Shelly.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/station/global.json b/station/global.json index 44da40565e..7da2763474 100644 --- a/station/global.json +++ b/station/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "7.0.403", + "version": "8.0.100", "rollForward": "latestMajor" } } \ No newline at end of file diff --git a/web/apps/app/app/global.css b/web/apps/app/app/global.css index dc39a55ae4..e46cf7a22f 100644 --- a/web/apps/app/app/global.css +++ b/web/apps/app/app/global.css @@ -4,17 +4,6 @@ @tailwind components; @tailwind utilities; -/* raleway-200 - latin */ -@font-face { - font-family: 'Raleway'; - font-style: normal; - font-weight: 200; - font-display: swap; - src: local(''), - url('/assets/fonts/raleway-v26-latin-200.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ - url('/assets/fonts/raleway-v26-latin-200.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} - @font-face { font-family: 'Material Icons'; font-style: normal; @@ -57,8 +46,8 @@ --graph-stroke: #999; - --selection-bg: #000; - --selection-color: #fff; + --bg-selection: #000; + --text-selection: #fff; } .dark { diff --git a/web/apps/app/app/layout.tsx b/web/apps/app/app/layout.tsx index 3981f1a1f4..5788dc65ea 100644 --- a/web/apps/app/app/layout.tsx +++ b/web/apps/app/app/layout.tsx @@ -1,14 +1,20 @@ import './global.css'; import { PropsWithChildren } from 'react'; -import { type Metadata } from 'next'; +import { Inter } from 'next/font/google'; +import { Viewport, type Metadata } from 'next'; import { Analytics } from '@vercel/analytics/react'; import { AppLayout } from '../components/layouts/AppLayout'; import { LayoutClientWrapper } from './LayoutClientWrapper'; +const inter = Inter({ + subsets: ['latin'], + variable: '--font-sans', +}); + export default function RootLayout({ children }: PropsWithChildren) { return ( - + {children} @@ -23,11 +29,6 @@ export default function RootLayout({ children }: PropsWithChildren) { export const metadata = { title: 'Signalco', description: 'Automate your life', - themeColor: [ - { media: '(prefers-color-scheme: light)', color: '#ffffff' }, - { media: '(prefers-color-scheme: dark)', color: '#000000' }, - { color: '#000000' }, - ], manifest: '/manifest.json', icons: { icon: [ @@ -36,3 +37,11 @@ export const metadata = { ] } } satisfies Metadata; + +export const viewport = { + themeColor: [ + { media: '(prefers-color-scheme: light)', color: 'white' }, + { media: '(prefers-color-scheme: dark)', color: 'black' }, + { color: 'black' }, + ] +} satisfies Viewport; diff --git a/web/apps/app/components/icons/SignalcoLogotype.module.scss b/web/apps/app/components/icons/SignalcoLogotype.module.scss deleted file mode 100644 index 6e825316e6..0000000000 --- a/web/apps/app/components/icons/SignalcoLogotype.module.scss +++ /dev/null @@ -1,16 +0,0 @@ -.root { - display: flex; - position: relative; - gap: 8px; -} - -.hideBadge { - display: block; -} - -.badgeContainer { - & > * { - position: absolute; - top: calc(var(--fixedHeight) - 24px - var(--fixedHeight) * 0.18) - } -} diff --git a/web/apps/app/components/icons/SignalcoLogotype.tsx b/web/apps/app/components/icons/SignalcoLogotype.tsx index a36cf1d538..5f09314cdc 100644 --- a/web/apps/app/components/icons/SignalcoLogotype.tsx +++ b/web/apps/app/components/icons/SignalcoLogotype.tsx @@ -3,7 +3,6 @@ import { cx } from 'classix'; import type { SupportedColorScheme } from '@signalco/ui/dist/theme'; import ApiBadge from '../development/ApiBadge'; import { isDeveloper } from '../../src/services/EnvProvider'; -import styles from './SignalcoLogotype.module.scss'; interface SignalcoLogotypeProps { width?: number; @@ -27,7 +26,7 @@ function SignalcoLogotype({ width, height, theme, hideBadge }: SignalcoLogotypeP const badgeContainerStyle: BadgeContainerCssProperties = { '--fixedHeight': `${fixedHeight - paddingTop}px` }; return ( -
+
{(!hideBadge && isDeveloper) && ( -
+
)} diff --git a/web/apps/app/package.json b/web/apps/app/package.json index 4e8c0c32d5..f43e5f4168 100644 --- a/web/apps/app/package.json +++ b/web/apps/app/package.json @@ -17,32 +17,32 @@ "lint": "next lint --fix" }, "dependencies": { - "@auth0/auth0-react": "2.2.1", + "@auth0/auth0-react": "2.2.3", "@auth0/auth0-spa-js": "2.1.2", "@date-io/date-fns": "2.17.0", - "@dnd-kit/core": "6.0.8", - "@dnd-kit/modifiers": "6.0.1", - "@dnd-kit/sortable": "7.0.2", - "@dnd-kit/utilities": "3.2.1", + "@dnd-kit/core": "6.1.0", + "@dnd-kit/modifiers": "7.0.0", + "@dnd-kit/sortable": "8.0.0", + "@dnd-kit/utilities": "3.2.2", "@enterwell/react-form-builder": "0.3.2", - "@enterwell/react-form-validation": "1.2.8", - "@enterwell/react-hooks": "0.3.1", - "@hcaptcha/react-hcaptcha": "1.8.1", - "@microsoft/signalr": "7.0.12", + "@enterwell/react-form-validation": "1.3.0", + "@enterwell/react-hooks": "0.3.2", + "@hcaptcha/react-hcaptcha": "1.9.1", + "@microsoft/signalr": "8.0.0", "@monaco-editor/react": "4.6.0", - "@next/env": "14.0.0", + "@next/env": "14.0.3", "@signalco/data": "workspace:*", "@signalco/hooks": "workspace:*", "@signalco/js": "workspace:*", "@signalco/tailwindcss-config-signalco": "workspace:*", "@signalco/ui": "workspace:*", "@signalco/ui-icons": "workspace:*", - "@tanstack/query-sync-storage-persister": "5.0.5", - "@tanstack/react-query": "5.0.5", - "@tanstack/react-query-devtools": "5.4.2", - "@tanstack/react-query-persist-client": "5.0.5", + "@tanstack/query-sync-storage-persister": "5.8.3", + "@tanstack/react-query": "5.8.4", + "@tanstack/react-query-devtools": "5.8.4", + "@tanstack/react-query-persist-client": "5.8.4", "@vercel/analytics": "1.1.1", - "@vvo/tzdb": "6.109.0", + "@vvo/tzdb": "6.112.0", "autoprefixer": "10.4.16", "classix": "2.1.35", "cobe": "0.6.3", @@ -51,17 +51,17 @@ "d3": "7.8.5", "date-fns": "2.30.0", "monaco-editor": "0.44.0", - "next": "14.0.0", + "next": "14.0.3", "next-secure-headers": "2.2.0", "next-themes": "0.2.1", "pigeon-maps": "0.21.3", "react": "18.2.0", "react-cool-inview": "3.0.1", "react-dom": "18.2.0", - "react-grid-layout": "1.4.2", + "react-grid-layout": "1.4.3", "react-toastify": "9.1.3", "react-transition-group": "4.4.5", - "recharts": "2.9.0", + "recharts": "2.9.3", "sharp": "0.32.6", "suncalc": "1.9.0", "tailwindcss": "3.3.5", @@ -71,29 +71,28 @@ "devDependencies": { "@axe-core/playwright": "4.8.1", "@ducanh2912/next-pwa": "9.7.2", - "@next/bundle-analyzer": "14.0.0", + "@next/bundle-analyzer": "14.0.3", "@playwright/test": "1.39.0", "@signalco/eslint-config-signalco": "workspace:*", "@signalco/tsconfig": "workspace:*", "@total-typescript/ts-reset": "0.5.1", - "@types/color": "3.0.5", - "@types/d3": "7.4.2", - "@types/next-pwa": "5.6.8", - "@types/node": "18.18.7", - "@types/react": "18.2.33", - "@types/react-dom": "18.2.14", - "@types/react-grid-layout": "1.3.4", - "@types/recharts": "1.8.26", - "@types/suncalc": "1.9.1", - "@types/uuid": "9.0.6", + "@types/color": "3.0.6", + "@types/d3": "7.4.3", + "@types/next-pwa": "5.6.9", + "@types/node": "18.18.9", + "@types/react": "18.2.37", + "@types/react-dom": "18.2.15", + "@types/react-grid-layout": "1.3.5", + "@types/recharts": "1.8.27", + "@types/suncalc": "1.9.2", + "@types/uuid": "9.0.7", "colorette": "2.0.20", "cross-env": "7.0.3", - "eslint": "8.52.0", + "eslint": "8.53.0", "fs-extra": "11.1.1", "next-sitemap": "4.2.3", "openapi-types": "12.1.3", "postcss": "8.4.31", - "prop-types": "15.8.1", "react-is": "18.2.0", "rimraf": "5.0.5", "sass": "1.69.5", diff --git a/web/apps/app/public/assets/fonts/raleway-v26-latin-200.woff b/web/apps/app/public/assets/fonts/raleway-v26-latin-200.woff deleted file mode 100644 index 2e805a2c68..0000000000 Binary files a/web/apps/app/public/assets/fonts/raleway-v26-latin-200.woff and /dev/null differ diff --git a/web/apps/app/public/assets/fonts/raleway-v26-latin-200.woff2 b/web/apps/app/public/assets/fonts/raleway-v26-latin-200.woff2 deleted file mode 100644 index 8e00ce1ea8..0000000000 Binary files a/web/apps/app/public/assets/fonts/raleway-v26-latin-200.woff2 and /dev/null differ diff --git a/web/apps/app/public/assets/fonts/raleway-v26-latin-500.woff b/web/apps/app/public/assets/fonts/raleway-v26-latin-500.woff deleted file mode 100644 index 5a5d4e79bc..0000000000 Binary files a/web/apps/app/public/assets/fonts/raleway-v26-latin-500.woff and /dev/null differ diff --git a/web/apps/blog/app/global.css b/web/apps/blog/app/global.css index 506ba9a082..abb6713fc9 100644 --- a/web/apps/blog/app/global.css +++ b/web/apps/blog/app/global.css @@ -4,17 +4,6 @@ @tailwind components; @tailwind utilities; -/* raleway-200 - latin */ -@font-face { - font-family: 'Raleway'; - font-style: normal; - font-weight: 200; - font-display: swap; - src: local(''), - url('/assets/fonts/raleway-v26-latin-200.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ - url('/assets/fonts/raleway-v26-latin-200.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} - @font-face { font-family: 'Material Icons'; font-style: normal; diff --git a/web/apps/blog/app/layout.tsx b/web/apps/blog/app/layout.tsx index 8b7d6a44bb..f9b164a58e 100644 --- a/web/apps/blog/app/layout.tsx +++ b/web/apps/blog/app/layout.tsx @@ -1,8 +1,14 @@ -import { Metadata } from 'next'; +import { Inter } from 'next/font/google'; +import { Metadata, Viewport } from 'next'; import { Analytics } from '@vercel/analytics/react'; import { PageLayout } from '../components/layouts/PageLayout'; import './global.css'; +const inter = Inter({ + subsets: ['latin'], + variable: '--font-sans', +}); + export default function RootLayout({ // Layouts must accept a children prop. // This will be populated with nested layouts or pages @@ -12,7 +18,7 @@ export default function RootLayout({ }) { return ( - + {children} @@ -23,11 +29,6 @@ export default function RootLayout({ export const metadata = { title: 'Signalco | Blog', description: 'Automate your life', - themeColor: [ - { media: '(prefers-color-scheme: light)', color: 'white' }, - { media: '(prefers-color-scheme: dark)', color: 'black' }, - { color: 'black' }, - ], icons: { apple: '/apple-touch-icon.png', icon: [ @@ -36,3 +37,11 @@ export const metadata = { ] } } satisfies Metadata; + +export const viewport = { + themeColor: [ + { media: '(prefers-color-scheme: light)', color: 'white' }, + { media: '(prefers-color-scheme: dark)', color: 'black' }, + { color: 'black' }, + ] +} satisfies Viewport; diff --git a/web/apps/blog/components/icons/SignalcoLogotype.module.scss b/web/apps/blog/components/icons/SignalcoLogotype.module.scss index 6e825316e6..78a5e05c00 100644 --- a/web/apps/blog/components/icons/SignalcoLogotype.module.scss +++ b/web/apps/blog/components/icons/SignalcoLogotype.module.scss @@ -4,10 +4,6 @@ gap: 8px; } -.hideBadge { - display: block; -} - .badgeContainer { & > * { position: absolute; diff --git a/web/apps/blog/components/icons/SignalcoLogotype.tsx b/web/apps/blog/components/icons/SignalcoLogotype.tsx index af6f2a20d1..f5571bffe2 100644 --- a/web/apps/blog/components/icons/SignalcoLogotype.tsx +++ b/web/apps/blog/components/icons/SignalcoLogotype.tsx @@ -7,10 +7,9 @@ interface SignalcoLogotypeProps { width?: number; height?: number; theme?: SupportedColorScheme; - hideBadge?: boolean; } -function SignalcoLogotype({ width, height, theme, hideBadge }: SignalcoLogotypeProps, ref: React.Ref) { +function SignalcoLogotype({ width, height, theme }: SignalcoLogotypeProps, ref: React.Ref) { if (typeof width === 'undefined' && typeof height === 'undefined') { throw new Error('Either height or width must be provided to SignalcoLogo.'); @@ -23,7 +22,7 @@ function SignalcoLogotype({ width, height, theme, hideBadge }: SignalcoLogotypeP
- + {children} @@ -21,11 +27,6 @@ export default function RootLayout({ export const metadata = { title: 'BrandGrab', description: 'Discover branding', - themeColor: [ - { media: '(prefers-color-scheme: light)', color: 'white' }, - { media: '(prefers-color-scheme: dark)', color: 'black' }, - { color: 'black' }, - ], icons: { apple: '/apple-touch-icon.png', icon: [ @@ -34,3 +35,11 @@ export const metadata = { ] } } satisfies Metadata; + +export const viewport = { + themeColor: [ + { media: '(prefers-color-scheme: light)', color: 'white' }, + { media: '(prefers-color-scheme: dark)', color: 'black' }, + { color: 'black' }, + ] +} satisfies Viewport; diff --git a/web/apps/brandgrab/package.json b/web/apps/brandgrab/package.json index e61647107b..3b35e80280 100644 --- a/web/apps/brandgrab/package.json +++ b/web/apps/brandgrab/package.json @@ -17,8 +17,8 @@ "test": "playwright test" }, "dependencies": { - "@enterwell/react-hooks": "0.3.1", - "@next/env": "14.0.0", + "@enterwell/react-hooks": "0.3.2", + "@next/env": "14.0.3", "@signalco/data": "workspace:*", "@signalco/hooks": "workspace:*", "@signalco/js": "workspace:*", @@ -26,7 +26,7 @@ "@signalco/ui-icons": "workspace:*", "cheerio": "1.0.0-rc.12", "classix": "2.1.35", - "next": "14.0.0", + "next": "14.0.3", "next-secure-headers": "2.2.0", "react": "18.2.0", "react-dom": "18.2.0", @@ -35,21 +35,20 @@ }, "devDependencies": { "@axe-core/playwright": "4.8.1", - "@babel/core": "7.23.2", - "@next/bundle-analyzer": "14.0.0", + "@babel/core": "7.23.3", + "@next/bundle-analyzer": "14.0.3", "@playwright/test": "1.39.0", "@signalco/eslint-config-signalco": "workspace:*", "@signalco/tsconfig": "workspace:*", - "@types/color": "3.0.5", - "@types/node": "18.18.7", - "@types/react": "18.2.33", - "@types/react-dom": "18.2.14", + "@types/color": "3.0.6", + "@types/node": "18.18.9", + "@types/react": "18.2.37", + "@types/react-dom": "18.2.15", "@types/sharp": "0.31.1", "cross-env": "7.0.3", - "eslint": "8.52.0", + "eslint": "8.53.0", "next-sitemap": "4.2.3", "postcss": "8.4.31", - "prop-types": "15.8.1", "rimraf": "5.0.5", "sass": "1.69.5", "typescript": "5.2.2" diff --git a/web/apps/brandgrab/public/assets/fonts/raleway-v26-latin-200.woff b/web/apps/brandgrab/public/assets/fonts/raleway-v26-latin-200.woff deleted file mode 100644 index 2e805a2c68..0000000000 Binary files a/web/apps/brandgrab/public/assets/fonts/raleway-v26-latin-200.woff and /dev/null differ diff --git a/web/apps/brandgrab/public/assets/fonts/raleway-v26-latin-200.woff2 b/web/apps/brandgrab/public/assets/fonts/raleway-v26-latin-200.woff2 deleted file mode 100644 index 8e00ce1ea8..0000000000 Binary files a/web/apps/brandgrab/public/assets/fonts/raleway-v26-latin-200.woff2 and /dev/null differ diff --git a/web/apps/brandgrab/public/assets/fonts/raleway-v26-latin-500.woff b/web/apps/brandgrab/public/assets/fonts/raleway-v26-latin-500.woff deleted file mode 100644 index 5a5d4e79bc..0000000000 Binary files a/web/apps/brandgrab/public/assets/fonts/raleway-v26-latin-500.woff and /dev/null differ diff --git a/web/apps/development/package.json b/web/apps/development/package.json index ec06a8f48b..dc13ca8aeb 100644 --- a/web/apps/development/package.json +++ b/web/apps/development/package.json @@ -13,10 +13,10 @@ "react-dom": "18.2.0" }, "devDependencies": { - "@types/react": "18.2.33", - "@types/react-dom": "18.2.14", - "@vitejs/plugin-react-swc": "3.4.0", + "@types/react": "18.2.37", + "@types/react-dom": "18.2.15", + "@vitejs/plugin-react-swc": "3.5.0", "typescript": "5.2.2", - "vite": "4.5.0" + "vite": "5.0.0" } } \ No newline at end of file diff --git a/web/apps/doprocess.app/.env.example b/web/apps/doprocess.app/.env.example new file mode 100644 index 0000000000..fe7d3829d3 --- /dev/null +++ b/web/apps/doprocess.app/.env.example @@ -0,0 +1,5 @@ +NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=secret +CLERK_SECRET_KEY=secret +DOPROCESS_DATABASE_HOST=secret +DOPROCESS_DATABASE_USERNAME=secret +DOPROCESS_DATABASE_PASSWORD=secret diff --git a/web/apps/doprocess.app/.gitignore b/web/apps/doprocess.app/.gitignore index 28d0d899ee..5807f19430 100644 --- a/web/apps/doprocess.app/.gitignore +++ b/web/apps/doprocess.app/.gitignore @@ -443,3 +443,9 @@ yarn-error.log* .turbo .swc test-results/ + +# PWA +**/public/workbox-*.js +**/public/sw.js +**/public/fallback-*.js +**/public/worker-*.js diff --git a/web/apps/doprocess.app/app/(embedded)/documents/[id]/embedded/page.tsx b/web/apps/doprocess.app/app/(embedded)/documents/[id]/embedded/page.tsx new file mode 100644 index 0000000000..62b0f30669 --- /dev/null +++ b/web/apps/doprocess.app/app/(embedded)/documents/[id]/embedded/page.tsx @@ -0,0 +1,15 @@ +import { Stack } from '@signalco/ui/dist/Stack'; +import { TypographyDocumentName } from '../../../../../components/processes/documents/TypographyDocumentName'; +import { DocumentEditor } from '../../../../../components/processes/documents/DocumentEditor'; + +export default function DocumentEmbeddedPage({ params }: { params: { id: string } }) { + const { id } = params; + return ( + +
+ +
+ +
+ ); +} diff --git a/web/apps/doprocess.app/app/(embedded)/layout.tsx b/web/apps/doprocess.app/app/(embedded)/layout.tsx new file mode 100644 index 0000000000..2dfb718551 --- /dev/null +++ b/web/apps/doprocess.app/app/(embedded)/layout.tsx @@ -0,0 +1,10 @@ +import { PropsWithChildren } from 'react'; +import '../global.css'; + +export default function EmbeddedLayout({children}: PropsWithChildren) { + return ( + <> + {children} + + ) +} diff --git a/web/apps/doprocess.app/app/(embedded)/processes/[id]/embedded/page.tsx b/web/apps/doprocess.app/app/(embedded)/processes/[id]/embedded/page.tsx new file mode 100644 index 0000000000..0324997d78 --- /dev/null +++ b/web/apps/doprocess.app/app/(embedded)/processes/[id]/embedded/page.tsx @@ -0,0 +1,17 @@ +import { TaskDetails } from '../../../../../components/processes/tasks/TaskDetails'; +import { ProcessDetails } from '../../../../../components/processes/ProcessDetails'; +import { SplitView } from '../../../../../components/layouts/SplitView'; + +export default function ProcessEmbeddedPage({ params }: { params: { id: string } }) { + const editable = false; + return ( + +
+ +
+
+ +
+
+ ); +} diff --git a/web/apps/doprocess.app/app/(embedded)/processes/[id]/runs/[runId]/embedded/page.tsx b/web/apps/doprocess.app/app/(embedded)/processes/[id]/runs/[runId]/embedded/page.tsx new file mode 100644 index 0000000000..16c52151f9 --- /dev/null +++ b/web/apps/doprocess.app/app/(embedded)/processes/[id]/runs/[runId]/embedded/page.tsx @@ -0,0 +1,18 @@ +import { TaskDetails } from '../../../../../../../components/processes/tasks/TaskDetails'; +import { ProcessDetails } from '../../../../../../../components/processes/ProcessDetails'; +import { SplitView } from '../../../../../../../components/layouts/SplitView'; + +export default function ProcessEmbeddedPage({ params }: { params: { id: string, runId: string } }) { + const { id, runId } = params; + const editable = false; + return ( + +
+ +
+
+ +
+
+ ); +} diff --git a/web/apps/doprocess.app/app/(landing)/layout.tsx b/web/apps/doprocess.app/app/(landing)/layout.tsx deleted file mode 100644 index 0c88fab5f2..0000000000 --- a/web/apps/doprocess.app/app/(landing)/layout.tsx +++ /dev/null @@ -1 +0,0 @@ -export { PageFullLayout as default } from '../../components/layouts/PageFullLayout'; diff --git a/web/apps/doprocess.app/app/(landing)/page.tsx b/web/apps/doprocess.app/app/(landing)/page.tsx deleted file mode 100644 index 9a3ae14216..0000000000 --- a/web/apps/doprocess.app/app/(landing)/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import LandingPageView from '../../components/views/LandingView'; - -export default function LandingPage() { - return ( - - ) -} diff --git a/web/apps/doprocess.app/app/(rest)/(app)/documents/[id]/page.tsx b/web/apps/doprocess.app/app/(rest)/(app)/documents/[id]/page.tsx new file mode 100644 index 0000000000..70b652248a --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(app)/documents/[id]/page.tsx @@ -0,0 +1,34 @@ +'use client'; + +import { useState } from 'react'; +import { cx } from 'classix'; +import { Stack } from '@signalco/ui/dist/Stack'; +import { useDocument } from '../../../../../src/hooks/useDocument'; +import { TypographyDocumentName } from '../../../../../components/processes/documents/TypographyDocumentName'; +import { DocumentEditor } from '../../../../../components/processes/documents/DocumentEditor'; +import { DocumentDetailsToolbar } from '../../../../../components/processes/documents/DocumentDetailsToolbar'; + +export default function DocumentPage({ params }: { params: { id: string } }) { + const { id } = params; + const [saving, setSaving] = useState(false); + const { data: document } = useDocument(id); + const editable = document != null; + + return ( + + {editable && } +
+ +
+ +
+ ); +} diff --git a/web/apps/doprocess.app/app/(rest)/(app)/documents/page.tsx b/web/apps/doprocess.app/app/(rest)/(app)/documents/page.tsx new file mode 100644 index 0000000000..b9070baf3a --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(app)/documents/page.tsx @@ -0,0 +1,7 @@ +import { DocumentsListView } from '../../../../components/processes/documents/DocumentsListView'; + +export default function RunsPage() { + return ( + + ) +} diff --git a/web/apps/doprocess.app/app/(rest)/(app)/layout.tsx b/web/apps/doprocess.app/app/(rest)/(app)/layout.tsx new file mode 100644 index 0000000000..afa9b188dd --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(app)/layout.tsx @@ -0,0 +1,19 @@ +import { PropsWithChildren } from 'react'; +import { AppProviders } from '../../../components/providers/AppProviders'; +import { PageNav } from '../../../components/PageNav'; +import { AppLayout } from '../../../components/layouts/AppLayout'; + +export default function RootLayout({ children }: PropsWithChildren) { + return ( + <> + +
+ + + {children} + + +
+ + ); +} diff --git a/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/layout.tsx b/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/layout.tsx new file mode 100644 index 0000000000..6454c5795d --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/layout.tsx @@ -0,0 +1,43 @@ +'use client'; + +import { PropsWithChildren, useMemo } from 'react'; +import { usePathname } from 'next/navigation'; +import { Stack } from '@signalco/ui/dist/Stack'; +import { Breadcrumbs } from '@signalco/ui/dist/Breadcrumbs'; +import { KnownPages } from '../../../../../src/knownPages'; +import { TypographyProcessName } from '../../../../../components/processes/TypographyProcessName'; +import { ProcessDetails } from '../../../../../components/processes/ProcessDetails'; +import { SplitView } from '../../../../../components/layouts/SplitView'; + +export default function ProcessLayout({ children, params }: PropsWithChildren<{ params: { id: string } }>) { + const { id } = params; + + // Extract process run segment + // Note: workaround for [params for layouts should include ALL dynamic route parameters, regardless of depth in the tree #49507](https://github.com/vercel/next.js/discussions/49507) + // Example path: /processes//runs//... + const pathname = usePathname(); + const runId = useMemo(() => { + const match = pathname.match(/\/runs\/([^/]+)/); + return match?.[1]; + }, [pathname]); + + const breadcrumbs = useMemo(() => [ + { label: 'Processes', href: KnownPages.Processes }, + Boolean(runId) && { label: , href: KnownPages.Process(id) }, + ].filter(Boolean), [id, runId]); + + return ( + + + + + + {children} + + ); +} diff --git a/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/page.tsx b/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/page.tsx new file mode 100644 index 0000000000..9feb0e8741 --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/page.tsx @@ -0,0 +1,12 @@ +import { cx } from 'classix'; +import { TaskDetails } from '../../../../../components/processes/tasks/TaskDetails'; + +export default function ProcessPage({ params }: { params: { id: string } }) { + const { id } = params; + const editable = true; + return ( +
+ +
+ ); +} diff --git a/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/runs/[runId]/page.tsx b/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/runs/[runId]/page.tsx new file mode 100644 index 0000000000..2c90eb5c99 --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/runs/[runId]/page.tsx @@ -0,0 +1,9 @@ +import { TaskDetails } from '../../../../../../../components/processes/tasks/TaskDetails'; + +export default function ProcessRunPage({ params }: { params: { id: string } }) { + const { id } = params; + + return ( + + ); +} diff --git a/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/runs/page.tsx b/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/runs/page.tsx new file mode 100644 index 0000000000..80464a1d92 --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(app)/processes/[id]/runs/page.tsx @@ -0,0 +1,6 @@ +import { RunsListView } from '../../../../../../components/processes/RunsListView'; + +export default function ProcessRunsPage({ params }: { params: { id: string } }) { + const processId = params.id; + return +} diff --git a/web/apps/doprocess.app/app/(rest)/(app)/processes/page.tsx b/web/apps/doprocess.app/app/(rest)/(app)/processes/page.tsx new file mode 100644 index 0000000000..85aacd1418 --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(app)/processes/page.tsx @@ -0,0 +1,7 @@ +import { ProcessesListView } from '../../../../components/processes/ProcessesListView'; + +export default function ProcessesPage() { + return ( + + ) +} diff --git a/web/apps/doprocess.app/app/(rest)/(app)/runs/page.tsx b/web/apps/doprocess.app/app/(rest)/(app)/runs/page.tsx new file mode 100644 index 0000000000..2a8dd4ffed --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(app)/runs/page.tsx @@ -0,0 +1,7 @@ +import { RunsListView } from '../../../../components/processes/RunsListView'; + +export default function RunsPage() { + return ( + + ) +} diff --git a/web/apps/doprocess.app/app/(rest)/(marketing)/layout.tsx b/web/apps/doprocess.app/app/(rest)/(marketing)/layout.tsx new file mode 100644 index 0000000000..ac7925f347 --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(marketing)/layout.tsx @@ -0,0 +1,14 @@ +import { PageNav } from '../../../components/PageNav'; + +export default function RootMarketingLayout({ children, }: { + children: React.ReactNode; +}) { + return ( + <> + +
+ {children} +
+ + ); +} diff --git a/web/apps/doprocess.app/app/(rest)/(marketing)/page.tsx b/web/apps/doprocess.app/app/(rest)/(marketing)/page.tsx new file mode 100644 index 0000000000..6528915b57 --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/(marketing)/page.tsx @@ -0,0 +1,81 @@ +import { ListChecks, Play, Share } from '@signalco/ui-icons'; +import { NavigatingButton } from '@signalco/ui/dist/NavigatingButton'; +import { KnownPages } from '../../../src/knownPages'; +import { ImagePlaceholder } from '../../../components/images/ImagePlaceholder'; + +function FeaturesSection() { + return ( +
+
+
+

Explore

+

+ Explore our features and start your journey with us. +

+
+
+
+ +

Document

+

+ Create and manage your documents in one place. +

+
+
+ +

Run

+

+ Execute your tasks efficiently and effectively. +

+
+
+ +

Share

+

+ Share your work with others and collaborate. +

+
+
+
+
+ ); +} + +function CoverSection() { + return ( +
+
+
+
+ +
+
+ +

+ do process +

+

+ the right way. +

+
+

+ Simplest and fastest way to document and act upon your processes. +

+ + Start Now + +
+
+
+
+ ); +} + +export default function LandingPage() { + return ( +
+ + +
+ ); +} diff --git a/web/apps/doprocess.app/app/error.tsx b/web/apps/doprocess.app/app/(rest)/error.tsx similarity index 77% rename from web/apps/doprocess.app/app/error.tsx rename to web/apps/doprocess.app/app/(rest)/error.tsx index a36a28d72f..db5e24cd4e 100644 --- a/web/apps/doprocess.app/app/error.tsx +++ b/web/apps/doprocess.app/app/(rest)/error.tsx @@ -19,14 +19,14 @@ export default function RootError({ error, reset }: RootErrorProps) { }, [error]); return ( - + - + Page not found {'Can\'t find find what you\'re looking for...'} - - BrandGrab home + + doprocess home diff --git a/web/apps/doprocess.app/app/(rest)/layout.tsx b/web/apps/doprocess.app/app/(rest)/layout.tsx new file mode 100644 index 0000000000..99447629d4 --- /dev/null +++ b/web/apps/doprocess.app/app/(rest)/layout.tsx @@ -0,0 +1,9 @@ +export default function RootLayout({ children, }: { + children: React.ReactNode; +}) { + return ( + <> + {children} + + ); +} diff --git a/web/apps/doprocess.app/app/api/documents/[id]/route.ts b/web/apps/doprocess.app/app/api/documents/[id]/route.ts new file mode 100644 index 0000000000..e4a7233d2f --- /dev/null +++ b/web/apps/doprocess.app/app/api/documents/[id]/route.ts @@ -0,0 +1,48 @@ +import { documentDelete, documentGet, documentRename, documentSetData, getDocumentIdByPublicId } from '../../../../src/lib/repo/documentsRepository'; +import { ensureUserId } from '../../../../src/lib/auth/apiAuth'; +import { requiredParamString } from '../../../../src/lib/api/apiParam'; + +export async function GET(_request: Request, { params }: { params: { id: string } }) { + const documentPublicId = requiredParamString(params.id); + const { userId } = ensureUserId(); + + const documentId = await getDocumentIdByPublicId(documentPublicId); + if (documentId == null) + return new Response(null, { status: 404 }); + + const document = await documentGet(userId, documentId); + const documentDto = document != null ? { ...document, id: document.publicId, publicId: undefined } : null; + return Response.json(documentDto); +} + +export async function PUT(request: Request, { params }: { params: { id: string } }) { + const documentPublicId = requiredParamString(params.id); + const { userId } = ensureUserId(); + + const documentId = await getDocumentIdByPublicId(documentPublicId); + if (documentId == null) + return new Response(null, { status: 404 }); + + const data = await request.json(); + if (data != null && typeof data === 'object') { + if ('name' in data && typeof data.name === 'string') { + await documentRename(userId, documentId, data.name); + } + if ('data' in data && typeof data.data === 'string') { + await documentSetData(userId, documentId, data.data); + } + } + return Response.json(null); +} + +export async function DELETE(_request: Request, { params }: { params: { id: string } }) { + const documentPublicId = requiredParamString(params.id); + const { userId } = ensureUserId(); + + const documentId = await getDocumentIdByPublicId(documentPublicId); + if (documentId == null) + return new Response(null, { status: 404 }); + + await documentDelete(userId, documentId); + return Response.json(null); +} diff --git a/web/apps/doprocess.app/app/api/documents/route.ts b/web/apps/doprocess.app/app/api/documents/route.ts new file mode 100644 index 0000000000..b4864c9fed --- /dev/null +++ b/web/apps/doprocess.app/app/api/documents/route.ts @@ -0,0 +1,20 @@ +import { documentCreate, documentGet, documentsGet } from '../../../src/lib/repo/documentsRepository'; +import { ensureUserId } from '../../../src/lib/auth/apiAuth'; + +export async function GET() { + const { userId } = ensureUserId(); + const documents = await documentsGet(userId); + const documentsDto = documents.map(p => ({ ...p, id: p.publicId, publicId: undefined })); + return Response.json(documentsDto); +} + +export async function POST(request: Request) { + const data = await request.json(); + const name = data != null && typeof data === 'object' && 'name' in data && typeof data.name === 'string' ? data.name : ''; + + const { userId } = ensureUserId(); + + const id = await documentCreate(userId, name); + const document = await documentGet(userId, Number(id)); + return Response.json({ id: document?.publicId }); +} diff --git a/web/apps/doprocess.app/app/api/dtos/dtos.ts b/web/apps/doprocess.app/app/api/dtos/dtos.ts new file mode 100644 index 0000000000..a6a4b9dad5 --- /dev/null +++ b/web/apps/doprocess.app/app/api/dtos/dtos.ts @@ -0,0 +1,11 @@ +import { Document, Process, ProcessRun, Task, TaskDefinition } from '../../../src/lib/db/schema'; + +export type ProcessDto = Omit & { id: string }; + +export type ProcessRunDto = Omit & { id: string, processId: string }; + +export type ProcessTaskDefinitionDto = Omit & { id: string, processId: string }; + +export type ProcessRunTaskDto = Omit & { id: string, processId: string, taskDefinitionId: string }; + +export type DocumentDto = Omit & { id: string }; diff --git a/web/apps/doprocess.app/app/api/processes/[id]/route.ts b/web/apps/doprocess.app/app/api/processes/[id]/route.ts new file mode 100644 index 0000000000..19a05f9f6d --- /dev/null +++ b/web/apps/doprocess.app/app/api/processes/[id]/route.ts @@ -0,0 +1,50 @@ +import { deleteProcess, getProcess, getProcessIdByPublicId, renameProcess } from '../../../../src/lib/repo/processesRepository'; +import { ensureUserId } from '../../../../src/lib/auth/apiAuth'; +import { requiredParamString } from '../../../../src/lib/api/apiParam'; + +export async function GET(_request: Request, { params }: { params: { id: string } }) { + const processPublicId = requiredParamString(params.id); + + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + + const process = await getProcess(userId, processId); + const processDto = process != null ? { + ...process, + id: process.publicId, + publicId: undefined + } : null; + return Response.json(processDto); +} + +export async function PUT(request: Request, { params }: { params: { id: string } }) { + const processPublicId = requiredParamString(params.id); + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + + const data = await request.json(); + if (data != null && typeof data === 'object' && 'name' in data && typeof data.name === 'string') { + await renameProcess(userId, processId, data.name); + } + + return Response.json(null); +} + +export async function DELETE(_request: Request, { params }: { params: { id: string } }) { + const processPublicId = requiredParamString(params.id); + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + + await deleteProcess(userId, processId); + + return Response.json(null); +} diff --git a/web/apps/doprocess.app/app/api/processes/[id]/runs/[runId]/route.ts b/web/apps/doprocess.app/app/api/processes/[id]/runs/[runId]/route.ts new file mode 100644 index 0000000000..6da86528fe --- /dev/null +++ b/web/apps/doprocess.app/app/api/processes/[id]/runs/[runId]/route.ts @@ -0,0 +1,47 @@ +import { deleteProcessRun, getProcessIdByPublicId, getProcessRun, getProcessRunIdByPublicId } from '../../../../../../src/lib/repo/processesRepository'; +import { ensureUserId } from '../../../../../../src/lib/auth/apiAuth'; +import { requiredParamString } from '../../../../../../src/lib/api/apiParam'; + +export async function GET(_request: Request, { params }: { params: { id: string, runId: string } }) { + const processPublicId = requiredParamString(params.id); + const runPublicId = requiredParamString(params.runId); + + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + const runId = await getProcessRunIdByPublicId(processPublicId, runPublicId); + if (runId == null) + return new Response(null, { status: 404 }); + + const processRun = await getProcessRun(userId, processId, runId); + if (!processRun) + return new Response(null, { status: 404 }); + const processRunDto = { + ...processRun, + id: processRun.publicId, + publicId: undefined, + processId: processPublicId, + runId: runPublicId + }; + return Response.json(processRunDto); +} + +export async function DELETE(_request: Request, { params }: { params: { id: string, runId: string } }) { + const processPublicId = requiredParamString(params.id); + const runPublicId = requiredParamString(params.runId); + + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + const runId = await getProcessRunIdByPublicId(processPublicId, runPublicId); + if (runId == null) + return new Response(null, { status: 404 }); + + await deleteProcessRun(userId, processId, runId); + + return Response.json(null); +} diff --git a/web/apps/doprocess.app/app/api/processes/[id]/runs/[runId]/tasks/route.ts b/web/apps/doprocess.app/app/api/processes/[id]/runs/[runId]/tasks/route.ts new file mode 100644 index 0000000000..8777d9de06 --- /dev/null +++ b/web/apps/doprocess.app/app/api/processes/[id]/runs/[runId]/tasks/route.ts @@ -0,0 +1,63 @@ +import { getProcessIdByPublicId, getProcessRunIdByPublicId, getTaskDefinitionIdByPublicId, getTaskDefinitions, getTasks, setTaskState } from '../../../../../../../src/lib/repo/processesRepository'; +import { ensureUserId } from '../../../../../../../src/lib/auth/apiAuth'; +import { requiredParamString } from '../../../../../../../src/lib/api/apiParam'; + +export async function GET(_request: Request, { params }: { params: { id: string, runId: string } }) { + const processPublicId = requiredParamString(params.id); + const runPublicId = requiredParamString(params.runId); + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + const runId = await getProcessRunIdByPublicId(processPublicId, runPublicId); + if (runId == null) + return new Response(null, { status: 404 }); + + const taskDefinitions = await getTaskDefinitions(userId, processId); + + const tasks = await getTasks(userId, processId, runId); + const tasksDto = tasks.map(p => ({ + ...p, + id: p.publicId, + publicId: undefined, + processId: processPublicId, + runId: runPublicId, + taskDefinitionId: taskDefinitions.find(t => t.id === p.taskDefinitionId)?.publicId + })); + return Response.json(tasksDto); +} + +export async function POST(request: Request, { params }: { params: { id: string, runId: string } }) { + const processPublicId = requiredParamString(params.id); + const runPublicId = requiredParamString(params.runId); + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + const runId = await getProcessRunIdByPublicId(processPublicId, runPublicId); + if (runId == null) + return new Response(null, { status: 404 }); + + const data = await request.json(); + + let taskDefinitionPublicId = null; + if (data != null && typeof data === 'object' && 'taskDefinitionId' in data && typeof data.taskDefinitionId === 'string') { + taskDefinitionPublicId = data.taskDefinitionId; + } + if (taskDefinitionPublicId == null) + return new Response('Task definition ID is required', { status: 400 }); + const taskDefinitionId = await getTaskDefinitionIdByPublicId(processPublicId, taskDefinitionPublicId); + if (taskDefinitionId == null) + return new Response(null, { status: 404 }); + + if (data != null && typeof data === 'object' && 'state' in data && typeof data.state === 'string') { + if (data.state !== 'new' && data.state !== 'completed') + return Response.json('Invalid status', { status: 400 }); + + await setTaskState(userId, processId, runId, taskDefinitionId, data.state); + } + + return Response.json(null); +} diff --git a/web/apps/doprocess.app/app/api/processes/[id]/runs/route.ts b/web/apps/doprocess.app/app/api/processes/[id]/runs/route.ts new file mode 100644 index 0000000000..ddcbec8206 --- /dev/null +++ b/web/apps/doprocess.app/app/api/processes/[id]/runs/route.ts @@ -0,0 +1,38 @@ +import { getProcessIdByPublicId, getProcessRun, getProcessRuns, runProcess } from '../../../../../src/lib/repo/processesRepository'; +import { ensureUserId } from '../../../../../src/lib/auth/apiAuth'; +import { requiredParamString } from '../../../../../src/lib/api/apiParam'; + +export async function GET(_request: Request, { params }: { params: { id: string } }) { + const processPublicId = requiredParamString(params.id); + const { userId } = ensureUserId(); + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + const processRuns = await getProcessRuns(userId, processId); + const processRunsDto = processRuns.map(p => ({ + ...p, + id: p.publicId, + publicId: undefined, + processId: processPublicId + })); + return Response.json(processRunsDto); +} + +export async function POST(request: Request, { params }: { params: { id: string } }) { + const processPublicId = requiredParamString(params.id); + + const data = await request.json(); + const name = typeof data === 'object' && data != null && 'name' in data && typeof data.name === 'string' ? data.name.toString() : null; + if (name == null) + throw new Error('Missing name'); + + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + + const id = await runProcess(userId, processId, name); + const processRun = await getProcessRun(userId, processId, Number(id)); + return Response.json({ id: processRun?.publicId }); +} diff --git a/web/apps/doprocess.app/app/api/processes/[id]/task-definitions/[taskDefinitionId]/route.ts b/web/apps/doprocess.app/app/api/processes/[id]/task-definitions/[taskDefinitionId]/route.ts new file mode 100644 index 0000000000..0d39e70c0d --- /dev/null +++ b/web/apps/doprocess.app/app/api/processes/[id]/task-definitions/[taskDefinitionId]/route.ts @@ -0,0 +1,91 @@ +import { changeTaskDefinitionText, changeTaskDefinitionType, deleteTaskDefinition, getProcess, getProcessIdByPublicId, getTaskDefinition, getTaskDefinitionIdByPublicId } from '../../../../../../src/lib/repo/processesRepository'; +import { documentCreate, documentGet } from '../../../../../../src/lib/repo/documentsRepository'; +import { ensureUserId } from '../../../../../../src/lib/auth/apiAuth'; +import { requiredParamString } from '../../../../../../src/lib/api/apiParam'; + +export async function GET(_request: Request, { params }: { params: { id: string, taskDefinitionId: string } }) { + const processPublicId = requiredParamString(params.id); + const taskDefinitionPublicId = requiredParamString(params.taskDefinitionId); + + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + const taskDefinitionId = await getTaskDefinitionIdByPublicId(processPublicId, taskDefinitionPublicId); + if (taskDefinitionId == null) + return new Response(null, { status: 404 }); + + const taskDefinition = await getTaskDefinition(userId, processId, taskDefinitionId); + if (!taskDefinition) + return new Response(null, { status: 404 }); + + const taskDefinitionDto = { + ...taskDefinition, + id: taskDefinition.publicId, + publicId: undefined, + processId: processPublicId + }; + return Response.json(taskDefinitionDto); +} + +export async function PUT(request: Request, { params }: { params: { id: string, taskDefinitionId: string } }) { + const processPublicId = requiredParamString(params.id); + const taskDefinitionPublicId = requiredParamString(params.taskDefinitionId); + + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + const taskDefinitionId = await getTaskDefinitionIdByPublicId(processPublicId, taskDefinitionPublicId); + if (taskDefinitionId == null) + return new Response(null, { status: 404 }); + + const data = await request.json(); + if (data != null && typeof data === 'object') { + if ('text' in data && typeof data.text === 'string') { + await changeTaskDefinitionText(userId, processId, taskDefinitionId, data.text); + } + if ('type' in data && typeof data.type === 'string') { + let typeData = 'typeData' in data && typeof data.typeData === 'string' ? data.typeData : null; + if (!typeData && data.type === 'document') { + const process = await getProcess(userId, processId); + const taskDefinition = await getTaskDefinition(userId, processId, taskDefinitionId); + // TODO: Use publicId instead of internalId for dataType + const documentName = [process?.name, taskDefinition?.text ?? 'New document'].filter(Boolean).join(' - '); + const documentId = await documentCreate(userId, documentName); + const document = await documentGet(userId, Number(documentId)); + if (document) { + typeData = document?.publicId; + } + } else if (data.type === 'blank') { + typeData = 'blank'; + } + if (!typeData) { + throw new Error('Invalid type'); + } + + await changeTaskDefinitionType(userId, processId, taskDefinitionId, data.type, typeData); + } + } + + return Response.json(null); +} + +export async function DELETE(_request: Request, { params }: { params: { id: string, taskDefinitionId: string } }) { + const processPublicId = requiredParamString(params.id); + const taskDefinitionPublicId = requiredParamString(params.taskDefinitionId); + + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + const taskDefinitionId = await getTaskDefinitionIdByPublicId(processPublicId, taskDefinitionPublicId); + if (taskDefinitionId == null) + return new Response(null, { status: 404 }); + + await deleteTaskDefinition(userId, processId, taskDefinitionId) + return Response.json(null); +} diff --git a/web/apps/doprocess.app/app/api/processes/[id]/task-definitions/route.ts b/web/apps/doprocess.app/app/api/processes/[id]/task-definitions/route.ts new file mode 100644 index 0000000000..b63db0e7aa --- /dev/null +++ b/web/apps/doprocess.app/app/api/processes/[id]/task-definitions/route.ts @@ -0,0 +1,39 @@ +import { createTaskDefinition, getProcessIdByPublicId, getTaskDefinition, getTaskDefinitions } from '../../../../../src/lib/repo/processesRepository'; +import { ensureUserId } from '../../../../../src/lib/auth/apiAuth'; +import { requiredParamString } from '../../../../../src/lib/api/apiParam'; + +export async function GET(_request: Request, { params }: { params: { id: string } }) { + const processPublicId = requiredParamString(params.id); + + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + + const taskDefinitions = await getTaskDefinitions(userId, processId); + const taskDefinitionsDto = taskDefinitions.map(p => ({ + ...p, + id: p.publicId, + publicId: undefined, + processId: processPublicId + })); + return Response.json(taskDefinitionsDto); +} + +export async function POST(request: Request, { params }: { params: { id: string } }) { + const processPublicId = requiredParamString(params.id); + + const data = await request.json(); + const text = data != null && typeof data === 'object' && 'text' in data && typeof data.text === 'string' ? data.text : ''; + + const { userId } = ensureUserId(); + + const processId = await getProcessIdByPublicId(processPublicId); + if (processId == null) + return new Response(null, { status: 404 }); + + const id = await createTaskDefinition(userId, processId, text); + const taskDefinition = await getTaskDefinition(userId, processId, Number(id)); + return Response.json({ id: taskDefinition?.publicId }); +} diff --git a/web/apps/doprocess.app/app/api/processes/route.ts b/web/apps/doprocess.app/app/api/processes/route.ts new file mode 100644 index 0000000000..62617b40d2 --- /dev/null +++ b/web/apps/doprocess.app/app/api/processes/route.ts @@ -0,0 +1,20 @@ +import { createProcess, getProcess, getProcesses } from '../../../src/lib/repo/processesRepository'; +import { ensureUserId } from '../../../src/lib/auth/apiAuth'; + +export async function GET() { + const { userId } = ensureUserId(); + const processes = await getProcesses(userId); + const processesDto = processes.map(p => ({ ...p, id: p.publicId, publicId: undefined })); + return Response.json(processesDto); +} + +export async function POST(request: Request) { + const { userId } = ensureUserId(); + const req = await request.json(); + const name = typeof req === 'object' && req != null && 'name' in req && typeof req.name === 'string' ? req.name.toString() : null; + if (name == null) + throw new Error('Missing name'); + const id = await createProcess(userId, name); + const process = await getProcess(userId, Number(id)); + return Response.json({ id: process?.publicId }); +} diff --git a/web/apps/doprocess.app/app/api/processes/runs/route.ts b/web/apps/doprocess.app/app/api/processes/runs/route.ts new file mode 100644 index 0000000000..d58409b03c --- /dev/null +++ b/web/apps/doprocess.app/app/api/processes/runs/route.ts @@ -0,0 +1,15 @@ +import { getAllProcessesRuns, getProcesses } from '../../../../src/lib/repo/processesRepository'; +import { ensureUserId } from '../../../../src/lib/auth/apiAuth'; + +export async function GET() { + const { userId } = ensureUserId(); + const processRuns = await getAllProcessesRuns(userId); + const processes = await getProcesses(userId); + const processRunsDto = processRuns.map(p => ({ + ...p, + id: p.publicId, + publicId: undefined, + processId: processes.find(pr => pr.id === p.processId)?.publicId + })); + return Response.json(processRunsDto); +} diff --git a/web/apps/doprocess.app/app/global.css b/web/apps/doprocess.app/app/global.css new file mode 100644 index 0000000000..ac0f313360 --- /dev/null +++ b/web/apps/doprocess.app/app/global.css @@ -0,0 +1,29 @@ +@import '@signalco/ui/dist/index.css'; + +@tailwind components; +@tailwind utilities; + +html, body, #__next { + height: 100%; + width: 100%; +} + +:root { + --bg-selection: #000; + --text-selection: #fff; +} + +.dark { + --bg-selection: #fff; + --text-selection: #000; +} + +::selection { background: var(--bg-selection); color: var(--text-selection); } + +.image--light { + display: var(--light-display); +} + +.image--dark { + display: var(--dark-display); +} diff --git a/web/apps/doprocess.app/app/global.scss b/web/apps/doprocess.app/app/global.scss deleted file mode 100644 index 3fe544b988..0000000000 --- a/web/apps/doprocess.app/app/global.scss +++ /dev/null @@ -1,76 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* raleway-200 - latin */ -@font-face { - font-family: 'Raleway'; - font-style: normal; - font-weight: 200; - font-display: swap; - src: local(''), - url('/assets/fonts/raleway-v26-latin-200.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ - url('/assets/fonts/raleway-v26-latin-200.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ -} - -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: local(''), - url('/assets/fonts/MaterialIcons-Regular.woff2') format('woff2'), - url('/assets/fonts/MaterialIcons-Regular.woff') format('woff'); -} - -html, body, #__next { - height: 100%; - width: 100%; -} - -.material-icons { - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 24px; /* Preferred icon size */ - display: inline-block; - line-height: 1; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - white-space: nowrap; - direction: ltr; - - /* Support for all WebKit browsers. */ - -webkit-font-smoothing: antialiased; - /* Support for Safari and Chrome. */ - text-rendering: optimizeLegibility; - - /* Support for Firefox. */ - -moz-osx-font-smoothing: grayscale; - - /* Support for IE. */ - font-feature-settings: 'liga'; -} - - -@layer base { - :root { - --selection-bg: #000; - --selection-color: #fff; - } - - .dark { - --bg-selection: #fff; - --text-selection: #000; - } - - ::selection { background: var(--bg-selection); color: var(--text-selection); } -} - -.image--light { - display: var(--light-display); -} - -.image--dark { - display: var(--dark-display); -} diff --git a/web/apps/doprocess.app/app/layout.tsx b/web/apps/doprocess.app/app/layout.tsx index 9dc38aa45f..54e0b550cd 100644 --- a/web/apps/doprocess.app/app/layout.tsx +++ b/web/apps/doprocess.app/app/layout.tsx @@ -1,14 +1,27 @@ -import { Metadata } from 'next'; -import '@signalco/ui/dist/index.css'; -import './global.scss'; +import { Inter } from 'next/font/google'; +import { Metadata, Viewport } from 'next'; +import './global.css'; +import { Analytics } from '@vercel/analytics/react'; +import { ClerkProvider } from '@clerk/nextjs'; +import { ClientProvider } from '../components/providers/ClientProvider'; + +const inter = Inter({ + subsets: ['latin'], + variable: '--font-sans', +}); export default function RootLayout({ children, }: { children: React.ReactNode; }) { return ( - - - {children} + + + + + {children} + + + ); @@ -17,17 +30,20 @@ export default function RootLayout({ children, }: { export const metadata = { title: 'DoProcess.app', description: 'Do process the right way', - themeColor: [ - { media: '(prefers-color-scheme: light)', color: 'white' }, - { media: '(prefers-color-scheme: dark)', color: 'black' }, - { color: 'black' }, - ], manifest: '/manifest.json', icons: { apple: '/apple-touch-icon.png', icon: [ { url: '/favicon-32x32.png', sizes: '32x32', type: 'image/png' }, { url: '/favicon-16x16.png', sizes: '16x16', type: 'image/png' } - ] + ], } } satisfies Metadata; + +export const viewport = { + themeColor: [ + { media: '(prefers-color-scheme: light)', color: 'white' }, + { media: '(prefers-color-scheme: dark)', color: 'black' }, + { color: 'black' }, + ] +} satisfies Viewport; diff --git a/web/apps/doprocess.app/components/PageNav.tsx b/web/apps/doprocess.app/components/PageNav.tsx index e53141d909..8e85f66bb0 100644 --- a/web/apps/doprocess.app/components/PageNav.tsx +++ b/web/apps/doprocess.app/components/PageNav.tsx @@ -1,9 +1,13 @@ -import React, { Suspense } from 'react'; import { cx } from 'classix'; +import { Navigate } from '@signalco/ui-icons'; import { Row } from '@signalco/ui/dist/Row'; import { Link } from '@signalco/ui/dist/Link'; import { Container } from '@signalco/ui/dist/Container'; import { Button } from '@signalco/ui/dist/Button'; +import { SignInButton, SignUpButton, SignedIn, SignedOut } from '@clerk/nextjs'; +import { KnownPages } from '../src/knownPages'; +import { UserButton } from './UserButton'; +import DoProcessLogo from './brand/DoProcessLogo'; type NavLinkItem = { href: string, @@ -15,7 +19,7 @@ const navLinks: NavLinkItem[] = [ // { href: KnownPages.Pricing, text: 'Pricing' } ]; -function NavMenu() { +function NavMenu({ cta }: { cta?: boolean }) { return ( <> {navLinks.map(nl => ( @@ -23,28 +27,49 @@ function NavMenu() { ))} + + + + + + + + + + {cta && ( + + )} + + ); } -export function PageNav({ fullWidth }: { fullWidth?: boolean | undefined; }) { +export function PageNav({ fullWidth, cta }: { fullWidth?: boolean, cta?: boolean }) { return (