diff --git a/.github/workflows/sync-submodules.yml b/.github/workflows/sync-submodules.yml new file mode 100644 index 0000000..b2962b9 --- /dev/null +++ b/.github/workflows/sync-submodules.yml @@ -0,0 +1,291 @@ +name: Sync Submodule Changes + +on: + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: + inputs: + pr_number: + description: 'PR number to sync submodules for' + required: true + type: number + +permissions: + contents: write + pull-requests: write + +jobs: + sync-submodules: + runs-on: ubuntu-latest + steps: + - name: Checkout PR branch + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref || github.ref }} + fetch-depth: 0 + submodules: recursive + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Configure Git + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + + - name: Check and create PR for ararat-ui-web submodule changes + id: push-ararat-ui-web + run: | + cd deps/ararat-ui-web + + # Get current branch + CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) + echo "Current branch in submodule: $CURRENT_BRANCH" + + # Check if there are unpushed commits + if ! UNPUSHED=$(git log origin/$CURRENT_BRANCH..$CURRENT_BRANCH --oneline 2>&1); then + echo "Warning: Could not check for unpushed commits: $UNPUSHED" + UNPUSHED="" + fi + + if [ -n "$UNPUSHED" ]; then + echo "Found unpushed commits in ararat-ui-web submodule:" + echo "$UNPUSHED" + + # Create a new branch for the PR + PR_BRANCH="sync-from-main-pr-${{ github.event.pull_request.number || github.run_number }}" + echo "Creating branch: $PR_BRANCH" + + git checkout -b $PR_BRANCH + + # Try to push with the GitHub token + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/hyecompany/ararat-ui-web.git + + if git push origin $PR_BRANCH; then + echo "✅ Successfully pushed ararat-ui-web submodule changes to branch $PR_BRANCH" + echo "pushed=true" >> $GITHUB_OUTPUT + echo "branch=$PR_BRANCH" >> $GITHUB_OUTPUT + echo "base_branch=$CURRENT_BRANCH" >> $GITHUB_OUTPUT + echo "has_changes=true" >> $GITHUB_OUTPUT + else + echo "❌ Failed to push ararat-ui-web submodule changes" + echo "This may require manual intervention or additional permissions" + echo "pushed=false" >> $GITHUB_OUTPUT + echo "has_changes=false" >> $GITHUB_OUTPUT + echo "error=true" >> $GITHUB_OUTPUT + # Don't exit 1 - let the workflow continue to report the error + fi + else + echo "No unpushed commits in ararat-ui-web submodule" + echo "pushed=false" >> $GITHUB_OUTPUT + echo "has_changes=false" >> $GITHUB_OUTPUT + fi + + - name: Check and create PR for ui-web submodule changes + id: push-ui-web + run: | + cd deps/ui-web + + # Get current branch + CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) + echo "Current branch in submodule: $CURRENT_BRANCH" + + # Check if there are unpushed commits + if ! UNPUSHED=$(git log origin/$CURRENT_BRANCH..$CURRENT_BRANCH --oneline 2>&1); then + echo "Warning: Could not check for unpushed commits: $UNPUSHED" + UNPUSHED="" + fi + + if [ -n "$UNPUSHED" ]; then + echo "Found unpushed commits in ui-web submodule:" + echo "$UNPUSHED" + + # Create a new branch for the PR + PR_BRANCH="sync-from-main-pr-${{ github.event.pull_request.number || github.run_number }}" + echo "Creating branch: $PR_BRANCH" + + git checkout -b $PR_BRANCH + + # Try to push with the GitHub token + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/hyecompany/ui-web.git + + if git push origin $PR_BRANCH; then + echo "✅ Successfully pushed ui-web submodule changes to branch $PR_BRANCH" + echo "pushed=true" >> $GITHUB_OUTPUT + echo "branch=$PR_BRANCH" >> $GITHUB_OUTPUT + echo "base_branch=$CURRENT_BRANCH" >> $GITHUB_OUTPUT + echo "has_changes=true" >> $GITHUB_OUTPUT + else + echo "❌ Failed to push ui-web submodule changes" + echo "This may require manual intervention or additional permissions" + echo "pushed=false" >> $GITHUB_OUTPUT + echo "has_changes=false" >> $GITHUB_OUTPUT + echo "error=true" >> $GITHUB_OUTPUT + # Don't exit 1 - let the workflow continue to report the error + fi + else + echo "No unpushed commits in ui-web submodule" + echo "pushed=false" >> $GITHUB_OUTPUT + echo "has_changes=false" >> $GITHUB_OUTPUT + fi + + - name: Create PR for ararat-ui-web submodule + if: steps.push-ararat-ui-web.outputs.has_changes == 'true' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const branch = '${{ steps.push-ararat-ui-web.outputs.branch }}'; + const baseBranch = '${{ steps.push-ararat-ui-web.outputs.base_branch }}'; + const mainPrNumber = '${{ github.event.pull_request.number }}'; + + try { + const { data: pr } = await github.rest.pulls.create({ + owner: 'hyecompany', + repo: 'ararat-ui-web', + title: `Sync changes from ararat-web PR #${mainPrNumber}`, + head: branch, + base: baseBranch, + body: `This PR contains changes synced from the main ararat-web repository. + + **Source PR**: hyecompany/ararat-web#${mainPrNumber} + + ## Changes + These changes were made in the main repository's PR and need to be merged into the ararat-ui-web submodule. + + This PR was automatically created by the sync-submodules workflow.` + }); + + console.log(\`Created PR #\${pr.number} in ararat-ui-web\`); + core.setOutput('pr_number', pr.number); + core.setOutput('pr_url', pr.html_url); + } catch (error) { + console.error('Failed to create PR:', error.message); + // Don't fail the workflow if PR creation fails (might already exist) + } + + - name: Create PR for ui-web submodule + if: steps.push-ui-web.outputs.has_changes == 'true' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const branch = '${{ steps.push-ui-web.outputs.branch }}'; + const baseBranch = '${{ steps.push-ui-web.outputs.base_branch }}'; + const mainPrNumber = '${{ github.event.pull_request.number }}'; + + try { + const { data: pr } = await github.rest.pulls.create({ + owner: 'hyecompany', + repo: 'ui-web', + title: `Sync changes from ararat-web PR #${mainPrNumber}`, + head: branch, + base: baseBranch, + body: `This PR contains changes synced from the main ararat-web repository. + + **Source PR**: hyecompany/ararat-web#${mainPrNumber} + + ## Changes + These changes were made in the main repository's PR and need to be merged into the ui-web submodule. + + This PR was automatically created by the sync-submodules workflow.` + }); + + console.log(\`Created PR #\${pr.number} in ui-web\`); + core.setOutput('pr_number', pr.number); + core.setOutput('pr_url', pr.html_url); + } catch (error) { + console.error('Failed to create PR:', error.message); + // Don't fail the workflow if PR creation fails (might already exist) + } + + - name: Update submodule references + if: steps.push-ararat-ui-web.outputs.pushed == 'true' || steps.push-ui-web.outputs.pushed == 'true' + run: | + # Update the submodule references in the main repo to point to the new PR branches + cd deps/ararat-ui-web + if [ "${{ steps.push-ararat-ui-web.outputs.pushed }}" == "true" ]; then + git checkout ${{ steps.push-ararat-ui-web.outputs.branch }} + fi + cd ../.. + + cd deps/ui-web + if [ "${{ steps.push-ui-web.outputs.pushed }}" == "true" ]; then + git checkout ${{ steps.push-ui-web.outputs.branch }} + fi + cd ../.. + + # Add the submodule changes + git add deps/ararat-ui-web deps/ui-web + + if git diff --cached --quiet; then + echo "No submodule reference changes to commit" + else + git commit -m "Update submodule references to PR branches + + This commit updates the submodule pointers to the PR branches: + - ararat-ui-web: ${{ steps.push-ararat-ui-web.outputs.branch }} + - ui-web: ${{ steps.push-ui-web.outputs.branch }}" + + git push origin ${{ github.event.pull_request.head.ref || github.ref }} + fi + + - name: Comment on PR + if: always() && github.event_name == 'pull_request' + id: comment + uses: actions/github-script@v7 + with: + script: | + const araratHasChanges = '${{ steps.push-ararat-ui-web.outputs.has_changes }}' === 'true'; + const araratError = '${{ steps.push-ararat-ui-web.outputs.error }}' === 'true'; + const uiHasChanges = '${{ steps.push-ui-web.outputs.has_changes }}' === 'true'; + const uiError = '${{ steps.push-ui-web.outputs.error }}' === 'true'; + + let message = '## 🔄 Submodule Sync Status\n\n'; + + if (araratHasChanges) { + if (araratError) { + message += '### ararat-ui-web\n'; + message += 'âš ī¸ Failed to push submodule changes\n'; + message += 'The GitHub Actions workflow may not have sufficient permissions to push to the submodule repository.\n'; + message += 'Please push the submodule changes manually or configure a PAT with appropriate permissions.\n\n'; + } else { + message += '### ararat-ui-web\n'; + message += '✅ Successfully created PR for submodule changes\n'; + message += `- **Branch**: \`${{ steps.push-ararat-ui-web.outputs.branch }}\`\n`; + message += `- **Base**: \`${{ steps.push-ararat-ui-web.outputs.base_branch }}\`\n`; + message += `- **PR**: [View PR](https://github.com/hyecompany/ararat-ui-web/pulls)\n\n`; + } + } + + if (uiHasChanges) { + if (uiError) { + message += '### ui-web\n'; + message += 'âš ī¸ Failed to push submodule changes\n'; + message += 'The GitHub Actions workflow may not have sufficient permissions to push to the submodule repository.\n'; + message += 'Please push the submodule changes manually or configure a PAT with appropriate permissions.\n\n'; + } else { + message += '### ui-web\n'; + message += '✅ Successfully created PR for submodule changes\n'; + message += `- **Branch**: \`${{ steps.push-ui-web.outputs.branch }}\`\n`; + message += `- **Base**: \`${{ steps.push-ui-web.outputs.base_branch }}\`\n`; + message += `- **PR**: [View PR](https://github.com/hyecompany/ui-web/pulls)\n\n`; + } + } + + if (!araratHasChanges && !uiHasChanges) { + message += 'â„šī¸ No submodule changes needed to be synced.\n\n'; + } + + if (araratHasChanges || uiHasChanges) { + message += '---\n\n'; + message += '**Next Steps:**\n'; + message += '1. Review and merge the submodule PR(s) above\n'; + message += '2. Once merged, update this PR to point to the merged commits\n'; + message += '3. This PR can then be merged\n'; + } + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: message + }); diff --git a/app/(main)/_lib/instance.ts b/app/(main)/_lib/instance.ts index bb15c87..ce8e7f7 100644 --- a/app/(main)/_lib/instance.ts +++ b/app/(main)/_lib/instance.ts @@ -55,4 +55,43 @@ export default class Instance implements IInstance { } return await response.text(); } + + async openExecSocket( + command: string[], + options?: { width?: number; height?: number }, + ) { + const response = await fetch( + `/1.0/instances/${encodeURIComponent(this.name)}/exec`, + { + method: 'POST', + body: JSON.stringify({ + command: command, + interactive: true, + 'wait-for-websocket': true, + width: options?.width, + height: options?.height, + }), + }, + ); + if (!response.ok) { + let errorMessage = `Failed to open exec socket: ${response.status} ${response.statusText}`; + try { + const errorData = await response.json(); + errorMessage += ` - ${JSON.stringify(errorData)}`; + } catch (e) { + // Ignore JSON parse errors, use default message + } + throw new Error(errorMessage); + } + const data = await response.json(); + const protocol = window.location.protocol === 'https:' ? 'wss' : 'ws'; + return { + data: new WebSocket( + `${protocol}://${window.location.host}${data.operation}/websocket?secret=${data.metadata.metadata.fds['0']}`, + ), + control: new WebSocket( + `${protocol}://${window.location.host}${data.operation}/websocket?secret=${data.metadata.metadata.fds['control']}`, + ), + }; + } } diff --git a/app/(main)/instance/console/page.tsx b/app/(main)/instance/console/page.tsx index 996d7e8..2f6fd29 100644 --- a/app/(main)/instance/console/page.tsx +++ b/app/(main)/instance/console/page.tsx @@ -1,5 +1,156 @@ 'use client'; +import { useState } from 'react'; import InstanceTextConsole from 'ararat-ui-web/components/instance/textConsole'; +import InstanceExec from 'ararat-ui-web/components/instance/exec'; +import { Button } from 'ui-web/components/button'; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from 'ui-web/components/dialog'; +import { Input } from 'ui-web/components/input'; +import { Label } from 'ui-web/components/label'; +import { TerminalIcon } from 'lucide-react'; + export default function ConsolePage() { - return ; + const [showExecDialog, setShowExecDialog] = useState(false); + const [showExecTerminal, setShowExecTerminal] = useState(false); + const [command, setCommand] = useState(''); + const [execCommand, setExecCommand] = useState([]); + + const parseCommand = (cmd: string): string[] => { + // Simple command parser that handles quoted strings + const args: string[] = []; + let current = ''; + let inQuote: string | null = null; + + for (let i = 0; i < cmd.length; i++) { + const char = cmd[i]; + + if (inQuote) { + if (char === inQuote) { + inQuote = null; + } else { + current += char; + } + } else if (char === '"' || char === "'") { + inQuote = char; + } else if (char === ' ' || char === '\t') { + if (current) { + args.push(current); + current = ''; + } + } else { + current += char; + } + } + + if (current) { + args.push(current); + } + + return args; + }; + + const handleExecuteCommand = () => { + if (!command.trim()) return; + + // Parse command into array, handling quoted strings + const cmdArray = parseCommand(command.trim()); + setExecCommand(cmdArray); + setShowExecDialog(false); + setShowExecTerminal(true); + }; + + const handleCloseExecTerminal = () => { + setShowExecTerminal(false); + setCommand(''); + setExecCommand([]); + }; + + return ( +
+
+

Console

+ +
+ + + + {/* Command Input Dialog */} + + + + Execute Command + + Enter a command to execute on this instance. The command will run + in an interactive terminal. + + +
+
+ + setCommand(e.target.value)} + onKeyDown={(e) => { + if (e.key === 'Enter') { + handleExecuteCommand(); + } + }} + /> +
+
+ + + + +
+
+ + {/* Command Execution Terminal Dialog */} + + + + + Executing: {execCommand.join(' ')} + + + Interactive terminal session + + + {showExecTerminal && ( + + )} + + + + + +
+ ); } diff --git a/bun.lock b/bun.lock index 13d3318..498bc02 100644 --- a/bun.lock +++ b/bun.lock @@ -16,7 +16,7 @@ "cmdk": "^1.1.1", "js-yaml": "^4.1.1", "lucide-react": "^0.555.0", - "next": "16.0.6", + "next": "16.0.7", "next-themes": "^0.4.6", "node-forge": "^1.3.2", "react": "19.2.0", @@ -288,25 +288,25 @@ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], - "@next/env": ["@next/env@16.0.6", "", {}, "sha512-PFTK/G/vM3UJwK5XDYMFOqt8QW42mmhSgdKDapOlCqBUAOfJN2dyOnASR/xUR/JRrro0pLohh/zOJ77xUQWQAg=="], + "@next/env": ["@next/env@16.0.7", "", {}, "sha512-gpaNgUh5nftFKRkRQGnVi5dpcYSKGcZZkQffZ172OrG/XkrnS7UBTQ648YY+8ME92cC4IojpI2LqTC8sTDhAaw=="], "@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.0.6", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-9INsBF3/4XL0/tON8AGsh0svnTtDMLwv3iREGWnWkewGdOnd790tguzq9rX8xwrVthPyvaBHhw1ww0GZz0jO5Q=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.0.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-AGzKiPlDiui+9JcPRHLI4V9WFTTcKukhJTfK9qu3e0tz+Y/88B7vo5yZoO7UaikplJEHORzG3QaBFQfkjhnL0Q=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.0.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LlDtCYOEj/rfSnEn/Idi+j1QKHxY9BJFmxx7108A6D8K0SB+bNgfYQATPk/4LqOl4C0Wo3LACg2ie6s7xqMpJg=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.0.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-LlLLNrK9WCIUkq2GciWDcquXYIf7vLxX8XE49gz7EncssZGL1vlHwgmURiJsUZAvk0HM1a8qb1ABDezsjAE/jw=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.0.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-rtZ7BhnVvO1ICf3QzfW9H3aPz7GhBrnSIMZyr4Qy6boXF0b5E3QLs+cvJmg3PsTCG2M1PBoC+DANUi4wCOKXpA=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.0.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-r04NzmLSGGfG8EPXKVK72N5zDNnq9pa9el78LhdtqIC3zqKh74QfKHnk24DoK4PEs6eY7sIK/CnNpt30oc59kg=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.0.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-mloD5WcPIeIeeZqAIP5c2kdaTa6StwP4/2EGy1mUw8HiexSHGK/jcM7lFuS3u3i2zn+xH9+wXJs6njO7VrAqww=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.0.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-hfB/QV0hA7lbD1OJxp52wVDlpffUMfyxUB5ysZbb/pBC5iuhyLcEKSVQo56PFUUmUQzbMsAtUu6k2Gh9bBtWXA=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.0.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-+ksWNrZrthisXuo9gd1XnjHRowCbMtl/YgMpbRvFeDEqEBd523YHPWpBuDjomod88U8Xliw5DHhekBC3EOOd9g=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.0.6", "", { "os": "linux", "cpu": "x64" }, "sha512-PZJushBgfvKhJBy01yXMdgL+l5XKr7uSn5jhOQXQXiH3iPT2M9iG64yHpPNGIKitKrHJInwmhPVGogZBAJOCPw=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.0.7", "", { "os": "linux", "cpu": "x64" }, "sha512-4WtJU5cRDxpEE44Ana2Xro1284hnyVpBb62lIpU5k85D8xXxatT+rXxBgPkc7C1XwkZMWpK5rXLXTh9PFipWsA=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.0.6", "", { "os": "linux", "cpu": "x64" }, "sha512-LqY76IojrH9yS5fyATjLzlOIOgwyzBuNRqXwVxcGfZ58DWNQSyfnLGlfF6shAEqjwlDNLh4Z+P0rnOI87Y9jEw=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.0.7", "", { "os": "linux", "cpu": "x64" }, "sha512-HYlhqIP6kBPXalW2dbMTSuB4+8fe+j9juyxwfMwCe9kQPPeiyFn7NMjNfoFOfJ2eXkeQsoUGXg+O2SE3m4Qg2w=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.0.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-eIfSNNqAkj0tqKRf0u7BVjqylJCuabSrxnpSENY3YKApqwDMeAqYPmnOwmVe6DDl3Lvkbe7cJAyP6i9hQ5PmmQ=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.0.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-EviG+43iOoBRZg9deGauXExjRphhuYmIOJ12b9sAPy0eQ6iwcPxfED2asb/s2/yiLYOdm37kPaiZu8uXSYPs0Q=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.0.6", "", { "os": "win32", "cpu": "x64" }, "sha512-QGs18P4OKdK9y2F3Th42+KGnwsc2iaThOe6jxQgP62kslUU4W+g6AzI6bdIn/pslhSfxjAMU5SjakfT5Fyo/xA=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.0.7", "", { "os": "win32", "cpu": "x64" }, "sha512-gniPjy55zp5Eg0896qSrf3yB1dw4F/3s8VK1ephdsZZ129j2n6e1WqCbE2YgcKhW9hPB9TVZENugquWJD5x0ug=="], "@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], @@ -1122,7 +1122,7 @@ "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "next": ["next@16.0.6", "", { "dependencies": { "@next/env": "16.0.6", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.0.6", "@next/swc-darwin-x64": "16.0.6", "@next/swc-linux-arm64-gnu": "16.0.6", "@next/swc-linux-arm64-musl": "16.0.6", "@next/swc-linux-x64-gnu": "16.0.6", "@next/swc-linux-x64-musl": "16.0.6", "@next/swc-win32-arm64-msvc": "16.0.6", "@next/swc-win32-x64-msvc": "16.0.6", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-2zOZ/4FdaAp5hfCU/RnzARlZzBsjaTZ/XjNQmuyYLluAPM7kcrbIkdeO2SL0Ysd1vnrSgU+GwugfeWX1cUCgCg=="], + "next": ["next@16.0.7", "", { "dependencies": { "@next/env": "16.0.7", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.0.7", "@next/swc-darwin-x64": "16.0.7", "@next/swc-linux-arm64-gnu": "16.0.7", "@next/swc-linux-arm64-musl": "16.0.7", "@next/swc-linux-x64-gnu": "16.0.7", "@next/swc-linux-x64-musl": "16.0.7", "@next/swc-win32-arm64-msvc": "16.0.7", "@next/swc-win32-x64-msvc": "16.0.7", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-3mBRJyPxT4LOxAJI6IsXeFtKfiJUbjCLgvXO02fV8Wy/lIhPvP94Fe7dGhUgHXcQy4sSuYwQNcOLhIfOm0rL0A=="], "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], diff --git a/deps/ararat-ui-web b/deps/ararat-ui-web index 834bf5e..2a6755d 160000 --- a/deps/ararat-ui-web +++ b/deps/ararat-ui-web @@ -1 +1 @@ -Subproject commit 834bf5e3ec6c7e57f81d9be513311b245007c3a2 +Subproject commit 2a6755d337d26948dd7ba760aa436d852db3b57e