mirror of
https://github.com/esengine/DeepSeek-Reasonix.git
synced 2026-11-08 08:04:50 -10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
564177d7c2 | ||
|
|
a89b729586 | ||
|
|
6844599056 | ||
|
|
d38c8b99ad | ||
|
|
10b92ed99c | ||
|
|
2738768c4d | ||
|
|
4684e5d7b2 | ||
|
|
d5ee56c1b7 | ||
|
|
45e7f52d70 | ||
|
|
ccb39feeb5 | ||
|
|
f75b0624a6 | ||
|
|
7b783209fd | ||
|
|
03943d8a84 | ||
|
|
3db2fc12a6 |
No files matched your search
@@ -114,7 +114,7 @@ jobs:
|
||||
cache-dependency-path: go.sum
|
||||
|
||||
# pnpm first: setup-node's pnpm cache needs the executable to exist.
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v4
|
||||
- uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
@@ -124,7 +124,7 @@ jobs:
|
||||
cache: pnpm
|
||||
cache-dependency-path: desktop/frontend-next/pnpm-lock.yaml
|
||||
|
||||
- uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
||||
- uses: actions/setup-java@77dd5b2ce225ea11469928ac317850245a74ae78 # v6.2.0
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: "21"
|
||||
|
||||
@@ -43,20 +43,20 @@ jobs:
|
||||
if: matrix.branch != ''
|
||||
run: echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
|
||||
uses: github/codeql-action/init@33d7b85da1a04171e211befe2c739303b9a4c066 # v4.39.3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
build-mode: ${{ matrix.language == 'go' && 'autobuild' || 'none' }}
|
||||
- name: Perform CodeQL Analysis
|
||||
if: matrix.branch == ''
|
||||
uses: github/codeql-action/analyze@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
|
||||
uses: github/codeql-action/analyze@33d7b85da1a04171e211befe2c739303b9a4c066 # v4.39.3
|
||||
with:
|
||||
category: "/language:${{ matrix.language }}"
|
||||
# Results from a checked-out line are filed under that line's ref, not the
|
||||
# default branch the schedule happened to run from.
|
||||
- name: Perform CodeQL Analysis (${{ matrix.branch }})
|
||||
if: matrix.branch != ''
|
||||
uses: github/codeql-action/analyze@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
|
||||
uses: github/codeql-action/analyze@33d7b85da1a04171e211befe2c739303b9a4c066 # v4.39.3
|
||||
with:
|
||||
category: "/language:${{ matrix.language }}"
|
||||
ref: refs/heads/${{ matrix.branch }}
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
- uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
- uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
- uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
@@ -200,7 +200,7 @@ jobs:
|
||||
cache: true
|
||||
cache-dependency-path: go.sum
|
||||
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
- uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
@@ -608,7 +608,7 @@ jobs:
|
||||
ref: ${{ needs.resolve.outputs.sha }}
|
||||
persist-credentials: false
|
||||
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
- uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
@@ -911,7 +911,7 @@ jobs:
|
||||
# The page every archive carries beside the executable, built once here
|
||||
# rather than once per target: serve.FindPage looks for
|
||||
# frontend-next/dist next to the binary.
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
- uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
cache: true
|
||||
cache-dependency-path: go.sum
|
||||
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
- uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
- uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
@@ -108,7 +108,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- if: steps.spa.outputs.run == 'true'
|
||||
uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
@@ -250,7 +250,7 @@ jobs:
|
||||
cache: true
|
||||
|
||||
- if: steps.scope.outputs.run == 'true'
|
||||
uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
@@ -435,7 +435,7 @@ jobs:
|
||||
cache: true
|
||||
cache-dependency-path: desktop/go.sum
|
||||
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
- uses: pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"launcher-live": "node test/launcher_live.mjs"
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "45.1.0",
|
||||
"electron": "45.2.3",
|
||||
"electron-builder": "^26.18.0",
|
||||
"playwright": "1.64.1"
|
||||
},
|
||||
|
||||
Generated
+5
-5
@@ -9,8 +9,8 @@ importers:
|
||||
.:
|
||||
devDependencies:
|
||||
electron:
|
||||
specifier: 45.1.0
|
||||
version: 45.1.0([email protected])
|
||||
specifier: 45.2.3
|
||||
version: 45.2.3([email protected])
|
||||
electron-builder:
|
||||
specifier: ^26.18.0
|
||||
version: 26.18.0([email protected])([email protected])
|
||||
@@ -374,8 +374,8 @@ packages:
|
||||
resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
|
||||
electron@45.1.0:
|
||||
resolution: {integrity: sha512-i7qKVAh/KR5v1pf56NhGGX2QYHcdjvLgS7koL6ui50c+zUDGLRunR95nXcTpHPURKOQ4GDBG8BmXiDgOQ8DD0A==}
|
||||
electron@45.2.3:
|
||||
resolution: {integrity: sha512-Vurzu5UOA5nTGT4LqIwXD16QFGrOZdiXxF+1UP4KNsAOo/YtDcT3/u0jhP4WSwNJ0iLrLDi85hzBJ0arnGDhyw==}
|
||||
engines: {node: '>= 22.12.0'}
|
||||
hasBin: true
|
||||
|
||||
@@ -1551,7 +1551,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
electron@45.1.0([email protected]):
|
||||
electron@45.2.3([email protected]):
|
||||
dependencies:
|
||||
'@electron-internal/extract-zip': 1.0.5
|
||||
'@electron/get': 5.1.0([email protected])
|
||||
|
||||
@@ -28,7 +28,7 @@ class HostStartError extends Error {
|
||||
function start(binary, args, { onStderr, onExit, onAct, onSlow, systemLanguage, timeoutMs = HANDSHAKE_TIMEOUT_MS } = {}) {
|
||||
const env = { ...process.env };
|
||||
if (systemLanguage) env.REASONIX_SYSTEM_LANG = systemLanguage;
|
||||
const child = spawn(binary, args, { stdio: ["pipe", "pipe", "pipe"], env });
|
||||
const child = spawn(binary, args, { stdio: ["pipe", "pipe", "pipe"], env, windowsHide: true });
|
||||
child.stderr.setEncoding("utf8");
|
||||
if (onStderr) child.stderr.on("data", onStderr);
|
||||
if (onExit) child.on("exit", onExit);
|
||||
|
||||
@@ -6,9 +6,9 @@ const { execFileSync } = require("node:child_process");
|
||||
// one Studio, canonicalized where it lives. The kernel answers it, because the
|
||||
// home is resolved from an environment and a platform default this process
|
||||
// does not own.
|
||||
function instanceID(binary) {
|
||||
function instanceID(binary, run = execFileSync) {
|
||||
try {
|
||||
return execFileSync(binary, ["-instance-id"], { encoding: "utf8", timeout: 10000 }).trim();
|
||||
return run(binary, ["-instance-id"], { encoding: "utf8", timeout: 10000, windowsHide: true }).trim();
|
||||
} catch {
|
||||
// A kernel that cannot be run at all is a launch that is going to fail with
|
||||
// a better message in a moment. Refusing to start here would report it as
|
||||
|
||||
@@ -625,7 +625,7 @@ test("Windows is given the format it reads the small sizes from", () => {
|
||||
assert.equal(iconFile("linux"), "icon.png");
|
||||
});
|
||||
|
||||
const { profileFor } = require("../src/instance.js");
|
||||
const { profileFor, instanceID } = require("../src/instance.js");
|
||||
|
||||
// Two homes are two Studios, and the profile is what carries that into the
|
||||
// platform's own lock. Sharing one would make the second launch look like a
|
||||
@@ -641,6 +641,14 @@ test("each instance gets a profile of its own", () => {
|
||||
assert.equal(profileFor(base, ""), base);
|
||||
});
|
||||
|
||||
test("the instance probe runs the kernel without a console window of its own", () => {
|
||||
let options;
|
||||
const run = (binary, args, opts) => { options = { binary, args, opts }; return "abc123\n"; };
|
||||
assert.equal(instanceID("host", run), "abc123");
|
||||
assert.deepEqual(options.args, ["-instance-id"]);
|
||||
assert.equal(options.opts.windowsHide, true);
|
||||
});
|
||||
|
||||
// A program that cannot be started emits "error" and never "exit". Waiting for
|
||||
// the handshake instead spent the full timeout and then blamed the kernel for
|
||||
// saying nothing, which is where the launch failure on Windows hid: go build
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
"census:verify": "node tools/ui-census/verify.mjs"
|
||||
},
|
||||
"dependencies": {
|
||||
"@a2ui/react": "0.14.0",
|
||||
"@a2ui/web_core": "0.14.0",
|
||||
"@a2ui/react": "0.15.0",
|
||||
"@a2ui/web_core": "0.15.0",
|
||||
"@codemirror/commands": "^6.11.1",
|
||||
"@codemirror/lang-css": "^6.3.1",
|
||||
"@codemirror/lang-go": "^6.0.1",
|
||||
@@ -32,9 +32,9 @@
|
||||
"@codemirror/state": "^6.7.6",
|
||||
"@codemirror/view": "^6.43.15",
|
||||
"@lezer/highlight": "^1.2.5",
|
||||
"@mantine/charts": "9.7.4",
|
||||
"@mantine/core": "9.7.4",
|
||||
"@mantine/hooks": "9.7.4",
|
||||
"@mantine/charts": "9.7.5",
|
||||
"@mantine/core": "9.7.5",
|
||||
"@mantine/hooks": "9.7.5",
|
||||
"@noble/curves": "2.4.0",
|
||||
"@xterm/addon-fit": "^0.11.0",
|
||||
"@xterm/addon-web-links": "^0.12.0",
|
||||
@@ -44,10 +44,10 @@
|
||||
"dompurify": "^3.4.17",
|
||||
"exceljs": "4.4.0",
|
||||
"katex": "^0.19.1",
|
||||
"lucide-react": "^1.64.0",
|
||||
"lucide-react": "^1.69.0",
|
||||
"maplibre-gl": "6.16.0",
|
||||
"papaparse": "^5.7.0",
|
||||
"pdfjs-dist": "^6.4.299",
|
||||
"pdfjs-dist": "^6.5.438",
|
||||
"react": "^19.3.1",
|
||||
"react-dom": "^19.3.1",
|
||||
"react-map-gl": "8.1.3",
|
||||
@@ -64,18 +64,18 @@
|
||||
"zod": "3.25.76"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/parser": "^8.0.8",
|
||||
"@babel/parser": "^8.1.0",
|
||||
"@testing-library/react": "^16.3.3",
|
||||
"@testing-library/user-event": "^14.6.8",
|
||||
"@types/papaparse": "^5.5.2",
|
||||
"@types/react": "^19.3.0",
|
||||
"@types/react-dom": "^19.3.0",
|
||||
"@vitejs/plugin-react": "^6.1.2",
|
||||
"@vitejs/plugin-react": "^6.2.1",
|
||||
"jsdom": "^30.1.3",
|
||||
"jszip": "3.10.2",
|
||||
"playwright": "^1.64.1",
|
||||
"typescript": "^7.0.2",
|
||||
"vite": "^8.3.5",
|
||||
"vitest": "^5.0.5"
|
||||
"vite": "^8.3.6",
|
||||
"vitest": "^5.1.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { chromium } from "playwright";
|
||||
|
||||
const PAGE = process.env.PERF_URL ?? "http://localhost:4399/perf.html?pref=zh";
|
||||
const browser = await chromium.launch();
|
||||
try {
|
||||
const page = await browser.newPage({ viewport: { width: 1300, height: 900 } });
|
||||
const errors = [];
|
||||
page.on("pageerror", (error) => errors.push(error.message));
|
||||
await page.goto(PAGE, { waitUntil: "networkidle" });
|
||||
await page.waitForSelector(".model-picker");
|
||||
await page.locator(".model-picker").first().click();
|
||||
await page.waitForSelector(".studio-model-menu .studio-item-line");
|
||||
const sizes = await page.evaluate(() => {
|
||||
const lines = [...document.querySelectorAll(".studio-model-menu .studio-item-line")].filter((line) => line.querySelector(".studio-item-badge"));
|
||||
for (const line of lines) line.querySelector(".lb").textContent = "workbuddy/deepseek-v4.1-flash-preview-extended";
|
||||
return lines.map((line) => {
|
||||
const badge = line.querySelector(".studio-item-badge").getBoundingClientRect();
|
||||
return { width: Math.round(badge.width), height: Math.round(badge.height) };
|
||||
});
|
||||
});
|
||||
assert.ok(sizes.length > 0, "the menu has a model that reads images");
|
||||
for (const size of sizes) assert.ok(size.height <= 20, `a long model name leaves the badge on one line (${JSON.stringify(size)})`);
|
||||
assert.deepEqual(errors, []);
|
||||
console.log(`PASS model menu badge stays on one line beside a long name (${sizes.length} rows)`);
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { chromium } from "playwright";
|
||||
|
||||
const PAGE = process.env.PERF_URL ?? "http://localhost:4399/perf.html?pref=zh";
|
||||
const browser = await chromium.launch();
|
||||
try {
|
||||
const page = await browser.newPage({ viewport: { width: 1300, height: 900 } });
|
||||
const errors = [];
|
||||
page.on("pageerror", (error) => errors.push(error.message));
|
||||
await page.addInitScript(() => localStorage.setItem("rx-session-quick-actions", "on"));
|
||||
await page.goto(PAGE, { waitUntil: "networkidle" });
|
||||
await page.waitForSelector(".ds-row.sessrow");
|
||||
await page.waitForTimeout(500);
|
||||
const shown = (row, selector) =>
|
||||
row.evaluate((el, sel) => {
|
||||
const node = el.querySelector(sel);
|
||||
return !!node && getComputedStyle(node).display !== "none" && getComputedStyle(node).opacity !== "0" && node.getBoundingClientRect().width > 2;
|
||||
}, selector);
|
||||
const rows = page.locator(".ds-row.sessrow");
|
||||
await page.mouse.move(700, 450);
|
||||
for (let i = 0; i < Math.min(await rows.count(), 5); i++) {
|
||||
assert.equal(await shown(rows.nth(i), ".sesspin-action"), false, `row ${i}: a resting row shows no pin button`);
|
||||
assert.equal(await shown(rows.nth(i), ".sesspin-marker"), false, `row ${i}: an unpinned row shows no pin marker`);
|
||||
}
|
||||
const first = rows.first();
|
||||
await first.hover();
|
||||
assert.equal(await shown(first, ".sesspin-action"), true, "hovering a row offers the pin button");
|
||||
await first.locator(".sesspin-action").click();
|
||||
await page.waitForTimeout(400);
|
||||
await page.evaluate(() => document.activeElement?.blur());
|
||||
await page.mouse.move(700, 450);
|
||||
await page.waitForTimeout(200);
|
||||
const pinned = page.locator('.ds-row.sessrow:has(.sesspin-marker)').first();
|
||||
assert.equal(await shown(pinned, ".sesspin-marker"), true, "a pinned row keeps its marker while the pointer is away");
|
||||
assert.equal(await shown(pinned, ".sesspin-action"), false, "and still hides the button");
|
||||
await pinned.hover();
|
||||
assert.equal(await shown(pinned, ".sesspin-marker"), false, "the marker gives way to the button under the pointer");
|
||||
assert.equal(await shown(pinned, ".sesspin-action"), true);
|
||||
assert.deepEqual(errors, []);
|
||||
console.log("PASS session row pin button and marker");
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { chromium } from "playwright";
|
||||
|
||||
const PAGE = process.env.PERF_URL ?? "http://localhost:4399/perf.html?pref=zh";
|
||||
const browser = await chromium.launch();
|
||||
try {
|
||||
const page = await browser.newPage({ viewport: { width: 1600, height: 900 } });
|
||||
const errors = [];
|
||||
page.on("pageerror", (error) => errors.push(error.message));
|
||||
await page.goto(PAGE, { waitUntil: "networkidle" });
|
||||
await page.evaluate(() => document.querySelector('[data-action="chrome.settings"]')?.click());
|
||||
await page.waitForSelector(".prefs-nav button");
|
||||
const lefts = () =>
|
||||
page.evaluate(() => {
|
||||
const left = (selector) => Math.round(document.querySelector(selector).getBoundingClientRect().left);
|
||||
return { title: left(".prefs-main .prefs-pagetitle"), index: left(".prefs-main .page-index"), col: left(".prefs-main .prefs-col") };
|
||||
});
|
||||
for (const name of ["模型", "连接", "常用"]) {
|
||||
await page.locator(".prefs-nav button", { hasText: new RegExp(`^${name}`) }).first().click();
|
||||
await page.waitForTimeout(400);
|
||||
const at = await lefts();
|
||||
assert.equal(at.index, at.title, `${name}: the page index starts where the title does (${JSON.stringify(at)})`);
|
||||
assert.equal(at.col, at.title, `${name}: the cards start where the title does (${JSON.stringify(at)})`);
|
||||
console.log(`PASS ${name}: title, index and cards all start at ${at.title}px`);
|
||||
}
|
||||
await page.locator(".prefs-nav button", { hasText: /^操作与性能/ }).first().click();
|
||||
await page.waitForTimeout(400);
|
||||
await page.getByRole("button", { name: "调整导航" }).click();
|
||||
await page.waitForTimeout(600);
|
||||
const shown = await page.evaluate(() => {
|
||||
const card = document.querySelector(".prefs-col .deep-page").closest(".prefs-card");
|
||||
return [...card.children].filter((c) => !c.classList.contains("deep-page") && getComputedStyle(c).display !== "none").length;
|
||||
});
|
||||
assert.equal(shown, 0, "an open sub-page shows nothing of the page it was opened from");
|
||||
console.log("PASS sub-page: nothing of the parent page remains above it");
|
||||
assert.deepEqual(errors, []);
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { chromium } from "playwright";
|
||||
|
||||
const PAGE = process.env.PERF_URL ?? "http://localhost:4399/perf.html?pref=zh";
|
||||
const browser = await chromium.launch();
|
||||
try {
|
||||
const page = await browser.newPage({ viewport: { width: 1300, height: 900 } });
|
||||
await page.goto(PAGE, { waitUntil: "networkidle" });
|
||||
await page.waitForSelector(".app");
|
||||
const heights = await page.evaluate(() => {
|
||||
const long = Array.from({ length: 30 }, (_, i) => `line ${i}`).join("\n");
|
||||
const host = document.querySelector(".app");
|
||||
const make = (attrs) => {
|
||||
const box = document.createElement("div");
|
||||
box.innerHTML = `<details class="think" open ${attrs}><summary>t</summary><div class="tk"><div class="tk-in" style="white-space:pre-wrap">${long}</div></div></details>`;
|
||||
host.appendChild(box);
|
||||
return box.querySelector(".tk").getBoundingClientRect().height;
|
||||
};
|
||||
return { windowed: make("data-live"), full: make("data-live data-full") };
|
||||
});
|
||||
assert.ok(heights.windowed < 200, `a live thought is a window of a few lines (${heights.windowed}px)`);
|
||||
assert.ok(heights.full > heights.windowed * 2, `a thought the reader asked to keep open grows with its text (${heights.full}px)`);
|
||||
console.log(`PASS live thinking window ${Math.round(heights.windowed)}px, always-open ${Math.round(heights.full)}px`);
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
Generated
+207
-207
@@ -9,11 +9,11 @@ importers:
|
||||
.:
|
||||
dependencies:
|
||||
'@a2ui/react':
|
||||
specifier: 0.14.0
|
||||
version: 0.14.0([email protected]([email protected]))([email protected])([email protected])
|
||||
specifier: 0.15.0
|
||||
version: 0.15.0([email protected]([email protected]))([email protected])([email protected])
|
||||
'@a2ui/web_core':
|
||||
specifier: 0.14.0
|
||||
version: 0.14.0
|
||||
specifier: 0.15.0
|
||||
version: 0.15.0
|
||||
'@codemirror/commands':
|
||||
specifier: ^6.11.1
|
||||
version: 6.11.1
|
||||
@@ -69,14 +69,14 @@ importers:
|
||||
specifier: ^1.2.5
|
||||
version: 1.2.5
|
||||
'@mantine/charts':
|
||||
specifier: 9.7.4
|
||||
version: 9.7.4(@mantine/[email protected].4(@mantine/[email protected].4([email protected]))(@types/[email protected])([email protected]([email protected]))([email protected]))(@mantine/[email protected].4([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected])([email protected]([email protected]))([email protected])([email protected])([email protected]))
|
||||
specifier: 9.7.5
|
||||
version: 9.7.5(@mantine/[email protected].5(@mantine/[email protected].5([email protected]))(@types/[email protected])([email protected]([email protected]))([email protected]))(@mantine/[email protected].5([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected])([email protected]([email protected]))([email protected])([email protected])([email protected]))
|
||||
'@mantine/core':
|
||||
specifier: 9.7.4
|
||||
version: 9.7.4(@mantine/[email protected].4([email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
specifier: 9.7.5
|
||||
version: 9.7.5(@mantine/[email protected].5([email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@mantine/hooks':
|
||||
specifier: 9.7.4
|
||||
version: 9.7.4([email protected])
|
||||
specifier: 9.7.5
|
||||
version: 9.7.5([email protected])
|
||||
'@noble/curves':
|
||||
specifier: 2.4.0
|
||||
version: 2.4.0
|
||||
@@ -105,8 +105,8 @@ importers:
|
||||
specifier: ^0.19.1
|
||||
version: 0.19.1
|
||||
lucide-react:
|
||||
specifier: ^1.64.0
|
||||
version: 1.64.0(@types/[email protected])([email protected])
|
||||
specifier: ^1.69.0
|
||||
version: 1.69.0(@types/[email protected])([email protected])
|
||||
maplibre-gl:
|
||||
specifier: 6.16.0
|
||||
version: 6.16.0
|
||||
@@ -114,8 +114,8 @@ importers:
|
||||
specifier: ^5.7.0
|
||||
version: 5.7.0
|
||||
pdfjs-dist:
|
||||
specifier: ^6.4.299
|
||||
version: 6.4.299
|
||||
specifier: ^6.5.438
|
||||
version: 6.5.438
|
||||
react:
|
||||
specifier: ^19.3.1
|
||||
version: 19.3.1
|
||||
@@ -160,8 +160,8 @@ importers:
|
||||
version: 3.25.76
|
||||
devDependencies:
|
||||
'@babel/parser':
|
||||
specifier: ^8.0.8
|
||||
version: 8.0.8
|
||||
specifier: ^8.1.0
|
||||
version: 8.1.0
|
||||
'@testing-library/react':
|
||||
specifier: ^16.3.3
|
||||
version: 16.3.3(@testing-library/[email protected])(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
@@ -178,8 +178,8 @@ importers:
|
||||
specifier: ^19.3.0
|
||||
version: 19.3.0(@types/[email protected])
|
||||
'@vitejs/plugin-react':
|
||||
specifier: ^6.1.2
|
||||
version: 6.1.2([email protected].5(@types/[email protected])([email protected]))
|
||||
specifier: ^6.2.1
|
||||
version: 6.2.1([email protected].6(@types/[email protected])([email protected]))
|
||||
jsdom:
|
||||
specifier: ^30.1.3
|
||||
version: 30.1.3(@noble/[email protected])
|
||||
@@ -193,11 +193,11 @@ importers:
|
||||
specifier: ^7.0.2
|
||||
version: 7.0.2
|
||||
vite:
|
||||
specifier: ^8.3.5
|
||||
version: 8.3.5(@types/[email protected])([email protected])
|
||||
specifier: ^8.3.6
|
||||
version: 8.3.6(@types/[email protected])([email protected])
|
||||
vitest:
|
||||
specifier: ^5.0.5
|
||||
version: 5.0.5(@types/[email protected])([email protected](@noble/[email protected]))([email protected].5(@types/[email protected])([email protected]))
|
||||
specifier: ^5.1.0
|
||||
version: 5.1.0(@types/[email protected])([email protected](@noble/[email protected]))([email protected].6(@types/[email protected])([email protected]))
|
||||
|
||||
packages:
|
||||
|
||||
@@ -206,16 +206,16 @@ packages:
|
||||
peerDependencies:
|
||||
'@a2ui/web_core': ^0.14.0
|
||||
|
||||
'@a2ui/[email protected]4.0':
|
||||
resolution: {integrity: sha512-kew3gVx4/U4qZ41FwyanDndCuBsx3s+5kPzjBt5N9w8E6UKSfwJpOmWD3Vy5WN5bxuiQKmorN+Ozh59ZLrwkMA==}
|
||||
'@a2ui/[email protected]5.0':
|
||||
resolution: {integrity: sha512-SkbdIMoRgtYNGh+nSEvK8YHDSAgS8LVFggDMCYdDqrUAWMLb2PS1unYOL8lfkXjskYK/+VoD7sa6X+I2F+F62w==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
peerDependencies:
|
||||
react: ^18.0.0 || ^19.0.0
|
||||
react-dom: ^18.0.0 || ^19.0.0
|
||||
zod: ^3.25.76
|
||||
|
||||
'@a2ui/[email protected]4.0':
|
||||
resolution: {integrity: sha512-OEJOgcfRMW0lwActVl1NKToxE2Ff5G3mIBHDB6gKm0elGZSwAhB7bj+Ef2a/h2nrL+57VPnSR67YSNz9JVV4yw==}
|
||||
'@a2ui/[email protected]5.0':
|
||||
resolution: {integrity: sha512-S3k9rAJ9O55z5TlDeWy22ly3yQnDLO+XBWihlL5JQSuyxaCUmd7jgFnxO4eq/Bn6dSgdBF0WG8cve/euMoz8SA==}
|
||||
|
||||
'@asamuzakjp/[email protected]':
|
||||
resolution: {integrity: sha512-1t1U8Cm3RBl9vh3RAZhjkPaduzLSvQJRToRrxpGR/eDRW99mOREleuu+mWfiFa795bUzjwht7NgphCKTs2ianQ==}
|
||||
@@ -241,8 +241,8 @@ packages:
|
||||
resolution: {integrity: sha512-HYx0YmuchRxRSpnjvcNffnPS8DCauKNmnumIuHG3jnQAVewRA7kfJGwF13ayEpSZs7s4R/oBH4eppuXcAQd5JQ==}
|
||||
engines: {node: ^22.18.0 || >=24.11.0}
|
||||
|
||||
'@babel/parser@8.0.8':
|
||||
resolution: {integrity: sha512-Gq65JogAr0S2p0BzvfSJboyuiRnxDQApyOqHkKmkrvm+VlLK4gC3pKsiOKEdnhFBemrFbSnOu90mZZWDpiJnmQ==}
|
||||
'@babel/parser@8.1.0':
|
||||
resolution: {integrity: sha512-fpqZYAC+Tthr19JbEKxXhCGutvfm/+roMe+ULrgUKI+GVyzkQiTMTSheORcWIAzW8T3Oo3W5UavWSvAWmsp7fA==}
|
||||
engines: {node: ^22.18.0 || >=24.11.0}
|
||||
hasBin: true
|
||||
|
||||
@@ -250,8 +250,8 @@ packages:
|
||||
resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/types@8.0.8':
|
||||
resolution: {integrity: sha512-iXSSZAKQWmaeAwGtFw10v9fg5hUiUs0L+w+Z2K11kym3pDNK+SF0VcAQPsEFvWcTSZ7LMgClMXDBvTbH0IlICg==}
|
||||
'@babel/types@8.1.0':
|
||||
resolution: {integrity: sha512-8V8aSTDx012YPmDQF30vrokyxVFdRAU2YBS2VzrnfLAGkP8floVnjckwgFcD0Jrvf6GWMSRdCrYVsk3tyMwZRg==}
|
||||
engines: {node: ^22.18.0 || >=24.11.0}
|
||||
|
||||
'@bramus/[email protected]':
|
||||
@@ -607,24 +607,24 @@ packages:
|
||||
'@lit/[email protected]':
|
||||
resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==}
|
||||
|
||||
'@mantine/[email protected].4':
|
||||
resolution: {integrity: sha512-liMa0KIxcbE7goA0YqslEj9Ir8NVBV2158vW11J8g20+yrYe6fAqFu0nrtFMqN0Jm72wU0DMqCqZcrsKlWf0DQ==}
|
||||
'@mantine/[email protected].5':
|
||||
resolution: {integrity: sha512-udNEXI9NWs/BOXNOS868O4dNuQDzBNO9hP3ahFRe/i1It7kbFGlZ2P5y0HNYZ4+a38+coUeTuYaN7AJ7a41BiA==}
|
||||
peerDependencies:
|
||||
'@mantine/core': 9.7.4
|
||||
'@mantine/hooks': 9.7.4
|
||||
'@mantine/core': 9.7.5
|
||||
'@mantine/hooks': 9.7.5
|
||||
react: ^19.2.0
|
||||
react-dom: ^19.2.0
|
||||
recharts: '>=3.2.1'
|
||||
|
||||
'@mantine/[email protected].4':
|
||||
resolution: {integrity: sha512-c7aTGELNn74CxG9i5/tq9BHGh0lKdKmGGz+9iDF+gR7Ipt4U1TMM286lAmLpRrKL2bR+UEaN4blZ8UJmOuGJ4Q==}
|
||||
'@mantine/[email protected].5':
|
||||
resolution: {integrity: sha512-NiOTHpAZssi1Z5ISZBvcXEA4XDn0BWcxwpmmUthFx/eL0CsJ18FXMn/ydRCJmoeMGcIKmRE+pjt90KM70GOsUw==}
|
||||
peerDependencies:
|
||||
'@mantine/hooks': 9.7.4
|
||||
'@mantine/hooks': 9.7.5
|
||||
react: ^19.2.0
|
||||
react-dom: ^19.2.0
|
||||
|
||||
'@mantine/[email protected].4':
|
||||
resolution: {integrity: sha512-j6Xf9Sc1fhhGEKXg6BZA2geyP/Czqvo6Rsi0IduOCWgwl/MAAJbKRjRc7xe2+9vePLdfqLZqRIAOY5rta88uNA==}
|
||||
'@mantine/[email protected].5':
|
||||
resolution: {integrity: sha512-+3cNisLOUkzF77SjRKkG/V+svZii9WDGvcwlaxFH58b14MNohz1zWbV+WfjZt9qfzrIPPUOedks/z6PMo5rAFA==}
|
||||
peerDependencies:
|
||||
react: ^19.2.0
|
||||
|
||||
@@ -667,79 +667,79 @@ packages:
|
||||
'@marijn/[email protected]':
|
||||
resolution: {integrity: sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==}
|
||||
|
||||
'@napi-rs/canvas-android-arm64@1.0.12':
|
||||
resolution: {integrity: sha512-Z8hg9BD7ABaZNhdM8O96IrfBaYLM7KzO/YyKA8eU9BDdc5fZJRTWyOhSAyOv59/ari6bOYa+p96h7zN6wbJRDA==}
|
||||
'@napi-rs/canvas-android-arm64@1.1.0':
|
||||
resolution: {integrity: sha512-mKrSmRyhWK4q699Q1xthbZIZi7JBvLtsRNnOZAeFaLPOFT1yo8y82aRC2nNZbXTGJXU7fVDONgGQPr0vo3kerw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@napi-rs/canvas-darwin-arm64@1.0.12':
|
||||
resolution: {integrity: sha512-dRtZCi/u1IOZyRjEDCA73PqgWakf5689K2jfv4uPRYGMJvEqtV+Eq7MIQkBJLmdfUPe7AktSiBZRml2pggnjRQ==}
|
||||
'@napi-rs/canvas-darwin-arm64@1.1.0':
|
||||
resolution: {integrity: sha512-iqwST4g0oH+x8VCpBIYh+MYokv/mVvkM+v9oJGB0d9A3P2qBh42ogJlVyWq9SpPCrAjS7tplMb1D3OIfxl+utw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@napi-rs/canvas-darwin-x64@1.0.12':
|
||||
resolution: {integrity: sha512-YwvMgK5NBXwPY1AjZGXfPCG3hp/OFGM0Kw+JZHCOR/FYaeSOftaZRyxaDEGkJQSLEUZZIMNJXKCWgZYSzgWZEA==}
|
||||
'@napi-rs/canvas-darwin-x64@1.1.0':
|
||||
resolution: {integrity: sha512-jkeA8eVTxDum03LTvc32YJ28F6KB1U0gYwnWMfOAUQZvWWEh/kvONby4iWGJx3+Tw45UqMGMXjtw2GKNVZDhVg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@napi-rs/canvas-linux-arm-gnueabihf@1.0.12':
|
||||
resolution: {integrity: sha512-LlOsZy8qh+qJq1euEvDZqa9muACS1fL1Ag38c7J+axAnA8NeXazMtqmUyKb4NVyft6DqbU/MesEj3C0bAFnv4Q==}
|
||||
'@napi-rs/canvas-linux-arm-gnueabihf@1.1.0':
|
||||
resolution: {integrity: sha512-Y4YkKG1ijoqkgUdTEEBNG4k+2BK5bR5jGL6S56YxCXYPwGfUd5nED8/74xyc7z+bpixPasCjSYoP3xYPOIGNxw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@napi-rs/canvas-linux-arm64-gnu@1.0.12':
|
||||
resolution: {integrity: sha512-nvuqhi85GzaFl/6sid4qf7wwjHuGU6gfIuDyywUb/fB+kp6Fp3h8GyIAKss/QPil3zVO2r8g6O9ah+IOUoBrIw==}
|
||||
'@napi-rs/canvas-linux-arm64-gnu@1.1.0':
|
||||
resolution: {integrity: sha512-dE/XthqYkiWcBVtKFlZbUXwAYfDuQGqDWixznipJNmevLGpprNnTVQZyftm1RZJudkIOn2EkzYZDMMETM08Row==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@napi-rs/canvas-linux-arm64-musl@1.0.12':
|
||||
resolution: {integrity: sha512-Bf6+9PoEr9K06P/oyMab7zZOpW90KimbIuNsy/vL0VhZZKsb0B0rCC78cp0jXhK6PIM7v8t6uX1sn7isOZ8KEw==}
|
||||
'@napi-rs/canvas-linux-arm64-musl@1.1.0':
|
||||
resolution: {integrity: sha512-DqZ/CMcHlhU56pPjv9AP0h3U7MFQ5LzC1HzMyRMotL+PFsJmZJA/ziApPYVyyz78DaVLhI8t3So3ztqtijbYpg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@napi-rs/canvas-linux-riscv64-gnu@1.0.12':
|
||||
resolution: {integrity: sha512-j7VcZduLSRx60nv/wbdyH+fyB5QriWGuO8GrvMDlFlt7GNUKAw5lHAHpcuuQW3QwLOe+3P+3qryzyT3sW5pCqQ==}
|
||||
'@napi-rs/canvas-linux-riscv64-gnu@1.1.0':
|
||||
resolution: {integrity: sha512-kJ7m5n2VffxWXM5QGa5lfq8ZN4LdOJEoz3aAJAmIqYvKiZw1gRdXqpucnRXsF6D9nLYiiIlevaAtAclR7c5ilg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@napi-rs/canvas-linux-x64-gnu@1.0.12':
|
||||
resolution: {integrity: sha512-twDb8ZNgoCF8EG6ka+Lk4etU+ea9lv6NiV5ptIf+thz3LgWuHBbt85c+YgL1s05VsHe4WYWK0f+GhR45IuqARg==}
|
||||
'@napi-rs/canvas-linux-x64-gnu@1.1.0':
|
||||
resolution: {integrity: sha512-uQ9JuJlRhQdHyttcMWOiwLkfIqkqaB0YFUVe835LUe12THt2b51HXkTItq0fxWT1jdhUPX2ylWZ1walkJyD6GQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@napi-rs/canvas-linux-x64-musl@1.0.12':
|
||||
resolution: {integrity: sha512-mtZbBeNCdGA0MYQxivPmMOp5JMH80LaJLQeEMg7Nne517fvgGb+DWTJTmoE/qUW8YJ4nkiP2vQyr1XVGrH/Ktg==}
|
||||
'@napi-rs/canvas-linux-x64-musl@1.1.0':
|
||||
resolution: {integrity: sha512-has4CPPAkkCac/LZ13VAw5p+MJLdaKVoyrhumN/A7uJd6960xYkJNDZgUebyxiha82AFzXx6RV+QJg5qGG079g==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@napi-rs/canvas-win32-arm64-msvc@1.0.12':
|
||||
resolution: {integrity: sha512-HgGRuBUkFL8U99ogwUnTz3SmwUu7WKjmj0eOVWRqVZTPPyfWGEIMr+ycb8oDoNZcKM9vSiF1rpy3r+UIqqaKqw==}
|
||||
'@napi-rs/canvas-win32-arm64-msvc@1.1.0':
|
||||
resolution: {integrity: sha512-MJnktLKNijmXqdjTughHDZ9TDLZ9uUm2hvFXqaOqn0+w7lphXFnft6bpSgQAc9U1exc20UGIBlzGu9+kiCj9Ag==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@napi-rs/canvas-win32-x64-msvc@1.0.12':
|
||||
resolution: {integrity: sha512-SEEfblIAnYeS4UkeFPp9jw6ZWuHxaTqumUuksMgnMXmPLW8Ofb21uu7cujhw+lk4E9V3aWgGAE9f8g+CdoAU0Q==}
|
||||
'@napi-rs/canvas-win32-x64-msvc@1.1.0':
|
||||
resolution: {integrity: sha512-08575bFk7iiadxap4h+JxgGut9xDCHAGum6wh0eInN53zEMImkmEHi5MushX2FOmNO7qRNX7BPiDC5ZYBwHeEg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@napi-rs/canvas@1.0.12':
|
||||
resolution: {integrity: sha512-PSwhRdvizfuiSDlhE4Ld2jl/JqkrbSFFyZO0ycamE6mBpf1H0uUF3Tm8yQaVDeAwCNNDzxjRfrN22KmWLTDwcw==}
|
||||
'@napi-rs/canvas@1.1.0':
|
||||
resolution: {integrity: sha512-k+ph/D8H9GS8ZZ48okvHrKeJynkqAA1kMUZRuzRWNlQUDHXngq7oRaWMZBdmSfd9ZhVy9bwNKei/7wMboI/uMg==}
|
||||
engines: {node: '>= 10'}
|
||||
|
||||
'@noble/[email protected]':
|
||||
@@ -750,8 +750,8 @@ packages:
|
||||
resolution: {integrity: sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==}
|
||||
engines: {node: '>= 20.19.0'}
|
||||
|
||||
'@oxc-project/[email protected]5.0':
|
||||
resolution: {integrity: sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==}
|
||||
'@oxc-project/[email protected]6.0':
|
||||
resolution: {integrity: sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw==}
|
||||
|
||||
'@preact/[email protected]':
|
||||
resolution: {integrity: sha512-HNB6HYeYKhQbJ1aKl+YRjrS4+QWHLKX6qKoUsfS/m0vqzsVaEBiZiaKbG/e+NKk2ch5ALQr/ihWaMHxiCuuWHA==}
|
||||
@@ -767,98 +767,98 @@ packages:
|
||||
react-redux:
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-ia3DwAs0OsMGS7+IConptSiyk9pEXkOx/AbJ2n/lAGxH3QkWQus1t8d7gnAT38FCU2sQu8lUbeR6AiZFv4JxaA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-kx5wBiMB6E7TEvpl2B9gjLU004BkvEm2Dr941BFjx/SontPwSzNuQUIoVKxHHoSjpFIfHMmcguyLOtyn0hObRg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-qslZrXnKJU4cUpjoAmtAo/KQM9e2IRMlmpig6Zpwj+8KWxW8v+nkAf9216Bsek9lOC1jvg2yCjygCFo2f83msQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-FdF+y48ND13eAyM2mQn+85kvAqNlvRWROy2rhgA463X/0Gv4vGtazZtfaF1mRBLscYvtOlh4QnLjOWiFzX69OQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-ddjqFM5e95AgLbUPtKIS7V1KTVlA0RUgCVr5mn+/IEhsdy3pr+Vuj/HZ7nlMN2FyxIwUktOH1LEPIQXO1v9y1Q==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-tHdKWbFkFBI687iim3LIyIvyL7j66VvQYkDPss5Stn/qyE2tWkR1YD0dXmXPFKKqT/o5ZEJVsaRsWS2meQwGOA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-FJiLGAblPBMlBEdbOqw6kW6QcXDWAf/oJu7gYs9ZJZwmg+K+/zjFLxPTIY9izJUzxzc24FHvmseyA0IvJSl17w==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-hrJpblMsrQ58U9veWpbXzkhV5zStunds6HWLprqq1qauvgBr1E6P+24kLj6lSLI9vjRn/RYpjprhkHQPKGWpNg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-qJd/dC6j6CwLG9/s/RP2nb1RZ0GIgj7Ioj7x/SYa3RzjVrlzrmH0fhIOpfvqQDeIsdP0loi+kHaMhJzY1PBIaA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-Vx7Xg5uUJuNcujJjI70OICaH0EYj80BtOLZTSN7uOYg8QOLlyKnaG0IW7Fn/J0IpJsaKzmDKMhOQv1JBM9m9vg==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-TNKhgE3uJTsTzatUSSYt0Kgo+Oa2uSlSjz4r1aEIea7HX6ULBym4fAlYUhG1i6pjNf2njfCUAfKwr6C3E9Xg1w==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-7chXdpjXZ8qG0+mIxECN3cT9kvhZ3/oZhMX6Pp876P7CDrIy8nJswva6Mq357JR7eYXfuskwZxMeV1SzoZdHrA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-Kwjt+7uNTJK5/MDkGWGVO2KQPnj8yAV75dMpfwyHZrJSXWHrniOB0aUEWlVYf3H1hOqFLIStLdM5QXq6bnKmOQ==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [openharmony]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-/LH6WfjDRXXJz/p5xl4TmU+jpcnwcxbKEQBW/GZE0JHfN0lGIyTtsUEGaQ/q/GikkGJ2yLKe6pwm7AnEWO8pdw==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
resolution: {integrity: sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==}
|
||||
'@rolldown/[email protected]6':
|
||||
resolution: {integrity: sha512-1lv1KvX0Z871zfk7vw+dnXMMnHNyDwMzWG8Kv3HxDXMOhzCX4SHc7HK319fInP0i+0p9D8brkfzL7pJOaGl+tw==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
@@ -1129,13 +1129,13 @@ packages:
|
||||
maplibre-gl:
|
||||
optional: true
|
||||
|
||||
'@vitejs/plugin-react@6.1.2':
|
||||
resolution: {integrity: sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==}
|
||||
'@vitejs/plugin-react@6.2.1':
|
||||
resolution: {integrity: sha512-9KyWCij3r0+qLG3Q62vBmv0VyevmYibAtxaCIVK9o0k6CXgaajZRIe8tpfchQcdZArJ5b/7OrIz4W3b2uxVRDA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
peerDependencies:
|
||||
'@rolldown/plugin-babel': ^0.1.7 || ^0.2.0
|
||||
'@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 || ^0.3.0
|
||||
babel-plugin-react-compiler: ^1.0.0
|
||||
oxc-transform-react: ^0.152.0
|
||||
oxc-transform-react: '>=0.152.0 <0.157.0'
|
||||
vite: ^8.0.0
|
||||
peerDependenciesMeta:
|
||||
'@rolldown/plugin-babel':
|
||||
@@ -1145,8 +1145,8 @@ packages:
|
||||
oxc-transform-react:
|
||||
optional: true
|
||||
|
||||
'@vitest/mocker@5.0.5':
|
||||
resolution: {integrity: sha512-xLL3lkDegJZw+MGoGaCCsFayDZthGgpAtr3Vziyfc4p7xH89K7KRPcRBBh/kEYm0Aqkt5DtTmkYpBtRV/FrHZg==}
|
||||
'@vitest/mocker@5.1.0':
|
||||
resolution: {integrity: sha512-5umB9/jlWcqVS6fsrFmv5Gdnpu6wAUio/lEOwAmvB7v+lFo/IW2B9FhAD0p19GCULTgMzLCdUmuCDCnAzWgppQ==}
|
||||
peerDependencies:
|
||||
msw: ^2.4.9 || ^3.0.0
|
||||
vite: ^6.0.0 || ^7.0.0 || ^8.0.0
|
||||
@@ -1156,8 +1156,8 @@ packages:
|
||||
vite:
|
||||
optional: true
|
||||
|
||||
'@vitest/spy@5.0.5':
|
||||
resolution: {integrity: sha512-lwJRExuH417257Q5wv9QYugN9IMJkoxcrKrYxGPQkBzl7wlNpTUxD/5yNX4ESKVUIShKPgkGchYPFMWOOk0wzw==}
|
||||
'@vitest/spy@5.1.0':
|
||||
resolution: {integrity: sha512-2DPO5OMHWKrBngC+fCmTQqemNF0gidRhp3lxbBmRhW+M1XJrfgPpqNqWVevXtn2f2ufD5ZaR1B6B641aAlcX5A==}
|
||||
|
||||
'@xterm/[email protected]':
|
||||
resolution: {integrity: sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==}
|
||||
@@ -2075,8 +2075,8 @@ packages:
|
||||
resolution: {integrity: sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==}
|
||||
engines: {node: 20 || >=22}
|
||||
|
||||
[email protected]4.0:
|
||||
resolution: {integrity: sha512-v626F/bcLNvFom6vzztHILtG9tUgXXbgA5AGkd82YkV401+Ko/NHyrWafbPwGofa+6p/EgDJcvEkIwsMH9098w==}
|
||||
[email protected]9.0:
|
||||
resolution: {integrity: sha512-UTFECm4yEgkgMN0kfLuxWcmlk+4u02Jrqehgk3ZXRx/Ud68OpP7hjkp67bvkBHmIpMaZCIveF1QDYeupO7XmYQ==}
|
||||
peerDependencies:
|
||||
'@types/react': '*'
|
||||
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
@@ -2322,8 +2322,8 @@ packages:
|
||||
resolution: {integrity: sha512-mnvGdvOrIvJOBGUEdGkrVXjN8E/VkIJCkf2eS1DH2yv82ORUlLttmDt0rWY38yYZmVwciZwBUvHM20qxBZf40w==}
|
||||
hasBin: true
|
||||
|
||||
pdfjs-dist@6.4.299:
|
||||
resolution: {integrity: sha512-AVl138zALtfaAPvADulE0PZThbYzCBS79nL4pOSL/6Sm/4AH5A21BD9VHt97OlCuzJuCpmeZtAtkinisF4Vb1g==}
|
||||
pdfjs-dist@6.5.438:
|
||||
resolution: {integrity: sha512-vg8Pw1x+AFKy4AMDvhuWl5cOYV8d698UoEANoFFhc79hqXDnZQqnOXoxw3HG907WHOg1JYOvLhP756boddFxpA==}
|
||||
engines: {node: '>=22.13.0 || >=24'}
|
||||
|
||||
[email protected]:
|
||||
@@ -2347,8 +2347,8 @@ packages:
|
||||
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
[email protected]0:
|
||||
resolution: {integrity: sha512-zkd+e9S1AQHhmaBKye9zlFHWjOwVgqXl1q3ECYy8561K7qxR2cREf/STLskulBFd78k6AOFeA+ff1TtEzk9bAA==}
|
||||
[email protected]2:
|
||||
resolution: {integrity: sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
|
||||
[email protected]:
|
||||
@@ -2545,8 +2545,8 @@ packages:
|
||||
deprecated: Rimraf versions prior to v4 are no longer supported
|
||||
hasBin: true
|
||||
|
||||
[email protected]5:
|
||||
resolution: {integrity: sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==}
|
||||
[email protected]6:
|
||||
resolution: {integrity: sha512-bWvlMpFKiTfDKfnK7FC2MPgPeWCf/Kpwsq49ApdW+FQaBZb6O6dZ4MAPbPUjp7hYQrw/RobqCzn64BRrQecGHw==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
hasBin: true
|
||||
|
||||
@@ -2874,8 +2874,8 @@ packages:
|
||||
[email protected]:
|
||||
resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==}
|
||||
|
||||
[email protected].5:
|
||||
resolution: {integrity: sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==}
|
||||
[email protected].6:
|
||||
resolution: {integrity: sha512-UI7dK29NnS54Fk+mmo7o+jI6U8Fp7hDl+X5Q1k45WH+d4dSlbLVUETGQ+hfkNgvLQGyoElPj837nZyv4MBc0VA==}
|
||||
engines: {node: ^20.19.0 || >=22.12.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -2917,20 +2917,20 @@ packages:
|
||||
yaml:
|
||||
optional: true
|
||||
|
||||
vitest@5.0.5:
|
||||
resolution: {integrity: sha512-cPODOMF8YnkiiYtDdHo6n4wWmBrOBBbOIYH2d33M4l3CdNn72h+qMmO6uXffUN6A5AZFXNND/d+krS9mgkXRfg==}
|
||||
vitest@5.1.0:
|
||||
resolution: {integrity: sha512-MzmNFnrwa8v8lF1bLxw3UJ4EREwVOVb75VqJZmUDRjJ6EluK/x9th7qTbaeDk41WxE1GxWqmTXcdsfobfH5sOA==}
|
||||
engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@edge-runtime/vm': '*'
|
||||
'@opentelemetry/api': ^1.9.0
|
||||
'@types/node': ^22.0.0 || >=24.0.0
|
||||
'@vitest/browser-playwright': 5.0.5
|
||||
'@vitest/browser-preview': 5.0.5
|
||||
'@vitest/browser-playwright': 5.1.0
|
||||
'@vitest/browser-preview': 5.1.0
|
||||
'@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0
|
||||
'@vitest/coverage-istanbul': 5.0.5
|
||||
'@vitest/coverage-v8': 5.0.5
|
||||
'@vitest/ui': 5.0.5
|
||||
'@vitest/coverage-istanbul': 5.1.0
|
||||
'@vitest/coverage-v8': 5.1.0
|
||||
'@vitest/ui': 5.1.0
|
||||
happy-dom: '*'
|
||||
jsdom: '*'
|
||||
vite: ^6.4.0 || ^7.0.0 || ^8.0.0
|
||||
@@ -3028,23 +3028,23 @@ packages:
|
||||
|
||||
snapshots:
|
||||
|
||||
'@a2ui/[email protected](@a2ui/[email protected]4.0)':
|
||||
'@a2ui/[email protected](@a2ui/[email protected]5.0)':
|
||||
dependencies:
|
||||
'@a2ui/web_core': 0.14.0
|
||||
'@a2ui/web_core': 0.15.0
|
||||
dompurify: 3.4.11
|
||||
markdown-it: 14.3.2
|
||||
|
||||
'@a2ui/[email protected]4.0([email protected]([email protected]))([email protected])([email protected])':
|
||||
'@a2ui/[email protected]5.0([email protected]([email protected]))([email protected])([email protected])':
|
||||
dependencies:
|
||||
'@a2ui/markdown-it': 0.2.2(@a2ui/[email protected]4.0)
|
||||
'@a2ui/web_core': 0.14.0
|
||||
'@a2ui/markdown-it': 0.2.2(@a2ui/[email protected]5.0)
|
||||
'@a2ui/web_core': 0.15.0
|
||||
clsx: 2.1.1
|
||||
markdown-it: 14.3.2
|
||||
react: 19.3.1
|
||||
react-dom: 19.3.1([email protected])
|
||||
zod: 3.25.76
|
||||
|
||||
'@a2ui/[email protected]4.0':
|
||||
'@a2ui/[email protected]5.0':
|
||||
dependencies:
|
||||
'@lit/context': 1.1.6
|
||||
'@preact/signals-core': 1.14.4
|
||||
@@ -3081,13 +3081,13 @@ snapshots:
|
||||
|
||||
'@babel/[email protected]': {}
|
||||
|
||||
'@babel/parser@8.0.8':
|
||||
'@babel/parser@8.1.0':
|
||||
dependencies:
|
||||
'@babel/types': 8.0.8
|
||||
'@babel/types': 8.1.0
|
||||
|
||||
'@babel/[email protected]': {}
|
||||
|
||||
'@babel/types@8.0.8':
|
||||
'@babel/types@8.1.0':
|
||||
dependencies:
|
||||
'@babel/helper-string-parser': 8.0.8
|
||||
'@babel/helper-validator-identifier': 8.0.6
|
||||
@@ -3488,18 +3488,18 @@ snapshots:
|
||||
dependencies:
|
||||
'@lit-labs/ssr-dom-shim': 1.6.0
|
||||
|
||||
'@mantine/[email protected].4(@mantine/[email protected].4(@mantine/[email protected].4([email protected]))(@types/[email protected])([email protected]([email protected]))([email protected]))(@mantine/[email protected].4([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected])([email protected]([email protected]))([email protected])([email protected])([email protected]))':
|
||||
'@mantine/[email protected].5(@mantine/[email protected].5(@mantine/[email protected].5([email protected]))(@types/[email protected])([email protected]([email protected]))([email protected]))(@mantine/[email protected].5([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected])([email protected]([email protected]))([email protected])([email protected])([email protected]))':
|
||||
dependencies:
|
||||
'@mantine/core': 9.7.4(@mantine/[email protected].4([email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@mantine/hooks': 9.7.4([email protected])
|
||||
'@mantine/core': 9.7.5(@mantine/[email protected].5([email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@mantine/hooks': 9.7.5([email protected])
|
||||
react: 19.3.1
|
||||
react-dom: 19.3.1([email protected])
|
||||
recharts: 3.10.1(@types/[email protected])([email protected]([email protected]))([email protected])([email protected])([email protected])
|
||||
|
||||
'@mantine/[email protected].4(@mantine/[email protected].4([email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
|
||||
'@mantine/[email protected].5(@mantine/[email protected].5([email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
|
||||
dependencies:
|
||||
'@floating-ui/react': 0.27.20([email protected]([email protected]))([email protected])
|
||||
'@mantine/hooks': 9.7.4([email protected])
|
||||
'@mantine/hooks': 9.7.5([email protected])
|
||||
clsx: 2.1.1
|
||||
react: 19.3.1
|
||||
react-dom: 19.3.1([email protected])
|
||||
@@ -3509,7 +3509,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- '@types/react'
|
||||
|
||||
'@mantine/[email protected].4([email protected])':
|
||||
'@mantine/[email protected].5([email protected])':
|
||||
dependencies:
|
||||
react: 19.3.1
|
||||
|
||||
@@ -3563,52 +3563,52 @@ snapshots:
|
||||
|
||||
'@marijn/[email protected]': {}
|
||||
|
||||
'@napi-rs/canvas-android-arm64@1.0.12':
|
||||
'@napi-rs/canvas-android-arm64@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas-darwin-arm64@1.0.12':
|
||||
'@napi-rs/canvas-darwin-arm64@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas-darwin-x64@1.0.12':
|
||||
'@napi-rs/canvas-darwin-x64@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas-linux-arm-gnueabihf@1.0.12':
|
||||
'@napi-rs/canvas-linux-arm-gnueabihf@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas-linux-arm64-gnu@1.0.12':
|
||||
'@napi-rs/canvas-linux-arm64-gnu@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas-linux-arm64-musl@1.0.12':
|
||||
'@napi-rs/canvas-linux-arm64-musl@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas-linux-riscv64-gnu@1.0.12':
|
||||
'@napi-rs/canvas-linux-riscv64-gnu@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas-linux-x64-gnu@1.0.12':
|
||||
'@napi-rs/canvas-linux-x64-gnu@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas-linux-x64-musl@1.0.12':
|
||||
'@napi-rs/canvas-linux-x64-musl@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas-win32-arm64-msvc@1.0.12':
|
||||
'@napi-rs/canvas-win32-arm64-msvc@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas-win32-x64-msvc@1.0.12':
|
||||
'@napi-rs/canvas-win32-x64-msvc@1.1.0':
|
||||
optional: true
|
||||
|
||||
'@napi-rs/canvas@1.0.12':
|
||||
'@napi-rs/canvas@1.1.0':
|
||||
optionalDependencies:
|
||||
'@napi-rs/canvas-android-arm64': 1.0.12
|
||||
'@napi-rs/canvas-darwin-arm64': 1.0.12
|
||||
'@napi-rs/canvas-darwin-x64': 1.0.12
|
||||
'@napi-rs/canvas-linux-arm-gnueabihf': 1.0.12
|
||||
'@napi-rs/canvas-linux-arm64-gnu': 1.0.12
|
||||
'@napi-rs/canvas-linux-arm64-musl': 1.0.12
|
||||
'@napi-rs/canvas-linux-riscv64-gnu': 1.0.12
|
||||
'@napi-rs/canvas-linux-x64-gnu': 1.0.12
|
||||
'@napi-rs/canvas-linux-x64-musl': 1.0.12
|
||||
'@napi-rs/canvas-win32-arm64-msvc': 1.0.12
|
||||
'@napi-rs/canvas-win32-x64-msvc': 1.0.12
|
||||
'@napi-rs/canvas-android-arm64': 1.1.0
|
||||
'@napi-rs/canvas-darwin-arm64': 1.1.0
|
||||
'@napi-rs/canvas-darwin-x64': 1.1.0
|
||||
'@napi-rs/canvas-linux-arm-gnueabihf': 1.1.0
|
||||
'@napi-rs/canvas-linux-arm64-gnu': 1.1.0
|
||||
'@napi-rs/canvas-linux-arm64-musl': 1.1.0
|
||||
'@napi-rs/canvas-linux-riscv64-gnu': 1.1.0
|
||||
'@napi-rs/canvas-linux-x64-gnu': 1.1.0
|
||||
'@napi-rs/canvas-linux-x64-musl': 1.1.0
|
||||
'@napi-rs/canvas-win32-arm64-msvc': 1.1.0
|
||||
'@napi-rs/canvas-win32-x64-msvc': 1.1.0
|
||||
optional: true
|
||||
|
||||
'@noble/[email protected]':
|
||||
@@ -3617,7 +3617,7 @@ snapshots:
|
||||
|
||||
'@noble/[email protected]': {}
|
||||
|
||||
'@oxc-project/[email protected]5.0': {}
|
||||
'@oxc-project/[email protected]6.0': {}
|
||||
|
||||
'@preact/[email protected]': {}
|
||||
|
||||
@@ -3633,49 +3633,49 @@ snapshots:
|
||||
react: 19.3.1
|
||||
react-redux: 9.3.0(@types/[email protected])([email protected])([email protected])
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]5':
|
||||
'@rolldown/[email protected]6':
|
||||
optional: true
|
||||
|
||||
'@rolldown/[email protected]': {}
|
||||
@@ -3867,21 +3867,21 @@ snapshots:
|
||||
optionalDependencies:
|
||||
maplibre-gl: 6.16.0
|
||||
|
||||
'@vitejs/plugin-react@6.1.2([email protected].5(@types/[email protected])([email protected]))':
|
||||
'@vitejs/plugin-react@6.2.1([email protected].6(@types/[email protected])([email protected]))':
|
||||
dependencies:
|
||||
'@rolldown/pluginutils': 1.0.1
|
||||
vite: 8.3.5(@types/[email protected])([email protected])
|
||||
vite: 8.3.6(@types/[email protected])([email protected])
|
||||
|
||||
'@vitest/mocker@5.0.5([email protected].5(@types/[email protected])([email protected]))':
|
||||
'@vitest/mocker@5.1.0([email protected].6(@types/[email protected])([email protected]))':
|
||||
dependencies:
|
||||
'@jridgewell/trace-mapping': 0.3.31
|
||||
'@vitest/spy': 5.0.5
|
||||
'@vitest/spy': 5.1.0
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 1.4.3
|
||||
optionalDependencies:
|
||||
vite: 8.3.5(@types/[email protected])([email protected])
|
||||
vite: 8.3.6(@types/[email protected])([email protected])
|
||||
|
||||
'@vitest/spy@5.0.5': {}
|
||||
'@vitest/spy@5.1.0': {}
|
||||
|
||||
'@xterm/[email protected]': {}
|
||||
|
||||
@@ -4948,7 +4948,7 @@ snapshots:
|
||||
|
||||
[email protected]: {}
|
||||
|
||||
[email protected]4.0(@types/[email protected])([email protected]):
|
||||
[email protected]9.0(@types/[email protected])([email protected]):
|
||||
dependencies:
|
||||
react: 19.3.1
|
||||
optionalDependencies:
|
||||
@@ -5440,9 +5440,9 @@ snapshots:
|
||||
dependencies:
|
||||
resolve-protobuf-schema: 2.1.0
|
||||
|
||||
pdfjs-dist@6.4.299:
|
||||
pdfjs-dist@6.5.438:
|
||||
optionalDependencies:
|
||||
'@napi-rs/canvas': 1.0.12
|
||||
'@napi-rs/canvas': 1.1.0
|
||||
|
||||
[email protected]: {}
|
||||
|
||||
@@ -5456,7 +5456,7 @@ snapshots:
|
||||
|
||||
[email protected]: {}
|
||||
|
||||
[email protected]0:
|
||||
[email protected]2:
|
||||
dependencies:
|
||||
nanoid: 3.3.20
|
||||
picocolors: 1.1.1
|
||||
@@ -5723,26 +5723,26 @@ snapshots:
|
||||
dependencies:
|
||||
glob: 7.2.3
|
||||
|
||||
[email protected]5:
|
||||
[email protected]6:
|
||||
dependencies:
|
||||
'@oxc-project/types': 0.155.0
|
||||
'@oxc-project/types': 0.156.0
|
||||
'@rolldown/pluginutils': 1.0.1
|
||||
optionalDependencies:
|
||||
'@rolldown/binding-android-arm-eabi': 1.2.15
|
||||
'@rolldown/binding-android-arm64': 1.2.15
|
||||
'@rolldown/binding-darwin-arm64': 1.2.15
|
||||
'@rolldown/binding-darwin-x64': 1.2.15
|
||||
'@rolldown/binding-freebsd-x64': 1.2.15
|
||||
'@rolldown/binding-linux-arm-gnueabihf': 1.2.15
|
||||
'@rolldown/binding-linux-arm64-gnu': 1.2.15
|
||||
'@rolldown/binding-linux-arm64-musl': 1.2.15
|
||||
'@rolldown/binding-linux-ppc64-gnu': 1.2.15
|
||||
'@rolldown/binding-linux-s390x-gnu': 1.2.15
|
||||
'@rolldown/binding-linux-x64-gnu': 1.2.15
|
||||
'@rolldown/binding-linux-x64-musl': 1.2.15
|
||||
'@rolldown/binding-openharmony-arm64': 1.2.15
|
||||
'@rolldown/binding-win32-arm64-msvc': 1.2.15
|
||||
'@rolldown/binding-win32-x64-msvc': 1.2.15
|
||||
'@rolldown/binding-android-arm-eabi': 1.2.16
|
||||
'@rolldown/binding-android-arm64': 1.2.16
|
||||
'@rolldown/binding-darwin-arm64': 1.2.16
|
||||
'@rolldown/binding-darwin-x64': 1.2.16
|
||||
'@rolldown/binding-freebsd-x64': 1.2.16
|
||||
'@rolldown/binding-linux-arm-gnueabihf': 1.2.16
|
||||
'@rolldown/binding-linux-arm64-gnu': 1.2.16
|
||||
'@rolldown/binding-linux-arm64-musl': 1.2.16
|
||||
'@rolldown/binding-linux-ppc64-gnu': 1.2.16
|
||||
'@rolldown/binding-linux-s390x-gnu': 1.2.16
|
||||
'@rolldown/binding-linux-x64-gnu': 1.2.16
|
||||
'@rolldown/binding-linux-x64-musl': 1.2.16
|
||||
'@rolldown/binding-openharmony-arm64': 1.2.16
|
||||
'@rolldown/binding-win32-arm64-msvc': 1.2.16
|
||||
'@rolldown/binding-win32-x64-msvc': 1.2.16
|
||||
|
||||
[email protected]: {}
|
||||
|
||||
@@ -6183,22 +6183,22 @@ snapshots:
|
||||
d3-time: 3.1.0
|
||||
d3-timer: 3.0.1
|
||||
|
||||
[email protected].5(@types/[email protected])([email protected]):
|
||||
[email protected].6(@types/[email protected])([email protected]):
|
||||
dependencies:
|
||||
lightningcss: 1.33.0
|
||||
picomatch: 4.0.7
|
||||
postcss: 8.5.30
|
||||
rolldown: 1.2.15
|
||||
postcss: 8.5.32
|
||||
rolldown: 1.2.16
|
||||
tinyglobby: 0.2.17
|
||||
optionalDependencies:
|
||||
'@types/node': 26.6.5
|
||||
esbuild: 0.28.2
|
||||
fsevents: 2.3.3
|
||||
|
||||
vitest@5.0.5(@types/[email protected])([email protected](@noble/[email protected]))([email protected].5(@types/[email protected])([email protected])):
|
||||
vitest@5.1.0(@types/[email protected])([email protected](@noble/[email protected]))([email protected].6(@types/[email protected])([email protected])):
|
||||
dependencies:
|
||||
'@types/chai': 5.2.3
|
||||
'@vitest/mocker': 5.0.5([email protected].5(@types/[email protected])([email protected]))
|
||||
'@vitest/mocker': 5.1.0([email protected].6(@types/[email protected])([email protected]))
|
||||
chai: 6.3.0
|
||||
es-module-lexer: 2.3.2
|
||||
expect-type: 1.4.0
|
||||
@@ -6209,7 +6209,7 @@ snapshots:
|
||||
tinybench: 6.2.2
|
||||
tinyexec: 1.3.1
|
||||
tinyglobby: 0.2.17
|
||||
vite: 8.3.5(@types/[email protected])([email protected])
|
||||
vite: 8.3.6(@types/[email protected])([email protected])
|
||||
why-is-node-running: 3.2.1
|
||||
optionalDependencies:
|
||||
'@types/node': 26.6.5
|
||||
|
||||
@@ -132,6 +132,7 @@
|
||||
:root .composer-menu.studio-model-menu .studio-item-line { flex-wrap: nowrap; align-items: center; gap: 8px; }
|
||||
:root .composer-menu.studio-model-menu .studio-item-line > .lb { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: var(--w-med) var(--fs-ui)/1.3 var(--ui); }
|
||||
:root .composer-menu.studio-model-menu .studio-item-meta { flex: none; color: var(--faint); font: var(--w-reg) var(--fs-micro)/1.3 var(--ui); white-space: nowrap; }
|
||||
:root .composer-menu.studio-model-menu .studio-item-badge { flex: none; white-space: nowrap; }
|
||||
:root .composer-menu.studio-model-menu .mi[data-on]::after { color: var(--net-ink); }
|
||||
:root .composer-menu.studio-effort-menu .mi.head { padding: 12px 14px 8px; }
|
||||
:root .composer-menu.studio-effort-menu .mi.head:first-child .lb { color: var(--text); font: var(--w-semi) var(--fs-ui)/1.3 var(--ui); }
|
||||
|
||||
@@ -47,9 +47,11 @@
|
||||
.ds-row:is(:hover, :focus-within) > :is(.ds-meta, .ds-pin) { display: none; }
|
||||
@media (hover: none) { .ds-row .ds-more { display: grid; } }
|
||||
.ds-row .ds-pin { width: 12px; height: 12px; flex: none; }
|
||||
.ds-row .sessquick, .ds-row .sesspin-action { flex: none; display: none; }
|
||||
.ds-row:is(:hover, :focus-within) .sessquick, .ds-row:is(:hover, :focus-within) .sesspin-action { display: flex; }
|
||||
.ds-row .sessquick > button, .ds-row .sesspin-action { width: 24px; height: 28px; padding: 0; display: grid; place-items: center; border: 0; border-radius: var(--r-xs); background: transparent; color: var(--faint); cursor: pointer; }
|
||||
.ds-row .sessquick { flex: none; display: flex; }
|
||||
.ds-row .sesspin-action { flex: none; display: grid; }
|
||||
.ds-row:not(:is(:hover, :focus-within)) :is(.sessquick, .sesspin-action) { position: absolute; width: 0; height: 0; overflow: hidden; clip-path: inset(50%); opacity: 0; pointer-events: none; }
|
||||
.ds-row .sessquick > button, .ds-row .sesspin-action { width: 24px; height: 28px; padding: 0; place-items: center; border: 0; border-radius: var(--r-xs); background: transparent; color: var(--faint); cursor: pointer; }
|
||||
.ds-row .sessquick > button { display: grid; }
|
||||
.ds-row .sessquick > button:hover, .ds-row .sesspin-action:hover { background: var(--raised); color: var(--text); }
|
||||
.ds-row .sessquick > button:disabled, .ds-row .sesspin-action:disabled { opacity: .35; cursor: default; }
|
||||
.ds-row .sessquick .studio-icon, .ds-row .sesspin-action .studio-icon { width: 14px; height: 14px; }
|
||||
|
||||
@@ -32,4 +32,13 @@ describe("session and project rows follow the board", () => {
|
||||
expect(rule(".ds-row:is(:hover, :focus-within) > :is(.ds-meta, .ds-pin)")).toMatch(/display:\s*none/);
|
||||
expect(rule(".ds-row:is(:hover, :focus-within) .ds-more")).toMatch(/display:\s*grid/);
|
||||
});
|
||||
|
||||
it("hides the quick buttons until the row is hovered or focused, without taking them out of the tab order", () => {
|
||||
const hidden = rule(".ds-row:not(:is(:hover, :focus-within)) :is(.sessquick, .sesspin-action)");
|
||||
expect(hidden).toMatch(/opacity:\s*0/);
|
||||
expect(hidden).toMatch(/pointer-events:\s*none/);
|
||||
expect(hidden).not.toMatch(/display:\s*none/);
|
||||
expect(rule(".ds-row .sesspin-action")).toMatch(/display:\s*grid/);
|
||||
expect(rule(".ds-row .sessquick, .ds-row .sesspin-action")).not.toMatch(/display:\s*none/);
|
||||
});
|
||||
});
|
||||
@@ -263,7 +263,7 @@
|
||||
.grp-row-t small { overflow: hidden; color: var(--faint); font: var(--w-reg) var(--fs-meta)/1.5 var(--ui); white-space: nowrap; text-overflow: ellipsis; }
|
||||
.grp-row > .now { flex: none; color: var(--muted); font: var(--w-med) var(--fs-meta) var(--ui); }
|
||||
.grp-row > .studio-icon { flex: none; width: 14px; height: 14px; color: var(--faint); }
|
||||
.prefs-col[data-deep] :not(.deep-page, .deep-page *, :has(.deep-page)) { display: none; }
|
||||
.prefs-col[data-deep] :not(.deep-page, .deep-page *, :has(.deep-page)) { display: none !important; }
|
||||
.prefs-col[data-deep] :is(.prefs-card, .grp):has(.deep-page) { padding: 0; border: 0; background: none; box-shadow: none; }
|
||||
.deep-page { display: flex; flex-direction: column; gap: 12px; animation: m-panel var(--t-panel) var(--ease-out, ease-out); }
|
||||
.deep-crumb { display: flex; align-items: center; gap: 6px; color: var(--faint); font: var(--w-med) var(--fs-meta) var(--ui); }
|
||||
@@ -436,9 +436,9 @@
|
||||
.changed-keys { display: flex; flex-direction: column; gap: 4px; margin: 4px 0 0; padding: 8px 0 2px; border-top: 1px solid var(--hair); list-style: none; }
|
||||
.changed-keys li { color: var(--muted); font: var(--w-reg) var(--fs-meta) var(--mono); }
|
||||
.prefs-card > .grp { grid-template-columns: minmax(0, 1fr) fit-content(320px); }
|
||||
.prefs-main > .prefs-pagetitle { max-width: 880px; margin-inline: auto; }
|
||||
.prefs-main > :is(.prefs-pagetitle, .page-index) { max-width: 880px; margin-inline: auto; }
|
||||
@container prefsmain (min-width: 860px) {
|
||||
.prefs-main:has(.prefs-col[data-cols="2"]) > .prefs-pagetitle { max-width: 1400px; }
|
||||
.prefs-main:has(.prefs-col[data-cols="2"]) > :is(.prefs-pagetitle, .page-index) { max-width: 1400px; }
|
||||
}
|
||||
.apply[data-usual] { display: none; }
|
||||
.prefs-card > .grp > .apply { display: none; }
|
||||
|
||||
@@ -68,8 +68,8 @@
|
||||
.think-swap > .think-label { grid-area: 1 / 1; }
|
||||
.think[data-settled] .think-label:not(.think-out) { animation: m-fade var(--t-card) var(--ease-out) both; }
|
||||
.think-out { animation: m-exit var(--t-card) var(--ease-out) both; pointer-events: none; }
|
||||
.think[data-live] .tk { max-height: calc(1.75em * 6); overflow: hidden; display: flex; flex-direction: column; justify-content: flex-end; }
|
||||
.think[data-live] .tk-in { flex: none; }
|
||||
.think[data-live]:not([data-full]) .tk { max-height: calc(1.75em * 6); overflow: hidden; display: flex; flex-direction: column; justify-content: flex-end; }
|
||||
.think[data-live]:not([data-full]) .tk-in { flex: none; }
|
||||
.think[data-cut] > summary .fold, .think[data-cut] > summary:hover .fold { color: var(--warn-ink); }
|
||||
.think-note { margin: 4px 0 0 16px; color: var(--faint); font: var(--w-reg) var(--fs-meta)/1.5 var(--ui); }
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
|
||||
@@ -12,14 +12,18 @@ export function SessionPinAction({ target, title, pinned, enabled, disabled, onP
|
||||
enabled: boolean;
|
||||
onPin: () => void;
|
||||
}) {
|
||||
if (!enabled) return pinned ? <StudioIcon name="pin" className="sesspin-marker ds-pin" aria-label={t("session.pinned")} /> : null;
|
||||
return <button className="sesspin-action" data-action="session.pin" data-target={target}
|
||||
aria-pressed={pinned} disabled={disabled}
|
||||
title={t(pinned ? "common.unpin" : "common.pin_session")}
|
||||
aria-label={t(pinned ? "session.unpin_session_title" : "session.pin_session_title", { title })}
|
||||
onClick={(event) => { event.stopPropagation(); onPin(); }}>
|
||||
<StudioIcon name="pin" aria-label={pinned ? t("session.pinned") : undefined} />
|
||||
</button>;
|
||||
const marker = pinned ? <StudioIcon name="pin" className="sesspin-marker ds-pin" aria-label={enabled ? undefined : t("session.pinned")} aria-hidden={enabled ? true : undefined} /> : null;
|
||||
if (!enabled) return marker;
|
||||
return <>
|
||||
{marker}
|
||||
<button className="sesspin-action" data-action="session.pin" data-target={target}
|
||||
aria-pressed={pinned} disabled={disabled}
|
||||
title={t(pinned ? "common.unpin" : "common.pin_session")}
|
||||
aria-label={t(pinned ? "session.unpin_session_title" : "session.pin_session_title", { title })}
|
||||
onClick={(event) => { event.stopPropagation(); onPin(); }}>
|
||||
<StudioIcon name="pin" aria-label={pinned ? t("session.pinned") : undefined} />
|
||||
</button>
|
||||
</>;
|
||||
}
|
||||
|
||||
export function SessionArchiveAction({ target, title, archived, disabled, onArchive }: Target & {
|
||||
|
||||
@@ -4,6 +4,7 @@ import { act, cleanup, render } from "@testing-library/react";
|
||||
import "../testkit";
|
||||
import { SayCard } from "./SayCard";
|
||||
import { appendText } from "../../state/say";
|
||||
import { setFoldModes } from "../../state/prefs";
|
||||
import type { Item } from "../../state/session";
|
||||
|
||||
afterEach(() => { cleanup(); vi.useRealTimers(); });
|
||||
@@ -23,6 +24,18 @@ describe("the thinking block, as the Think-Exec board draws it", () => {
|
||||
expect(label().textContent).toBe("思考 1.2 秒 · 1 字");
|
||||
});
|
||||
|
||||
it("tells the stylesheet when the reader asked for every thought open, so the live window does not cap it", () => {
|
||||
act(() => setFoldModes({ thinking: "open" }));
|
||||
const view = render(<SayCard item={appendText([], "想", "reasoning")[0] as Say} />);
|
||||
expect(think().hasAttribute("data-live")).toBe(true);
|
||||
expect(think().hasAttribute("data-full")).toBe(true);
|
||||
view.unmount();
|
||||
act(() => setFoldModes({ thinking: "live" }));
|
||||
render(<SayCard item={appendText([], "想", "reasoning")[0] as Say} />);
|
||||
expect(think().hasAttribute("data-full")).toBe(false);
|
||||
act(() => setFoldModes({ thinking: "folded" }));
|
||||
});
|
||||
|
||||
it("keeps a caret only on reasoning still arriving", () => {
|
||||
const view = render(<SayCard item={appendText([], "想", "reasoning")[0] as Say} />);
|
||||
think().open = true;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from "react";
|
||||
import { createPortal } from "react-dom";
|
||||
import { useThinkingPreview, useStartsOpen } from "../../state/foldpref";
|
||||
import { useThinkingPreview, useStartsOpen, useFoldModes } from "../../state/foldpref";
|
||||
import { StudioIcon } from "../StudioIcon";
|
||||
import { t } from "../../i18n";
|
||||
import { count, decimals } from "../../i18n/format";
|
||||
@@ -109,6 +109,7 @@ export function SayCard({ item, afterAnswer, settled = true, reply, quiet }: { i
|
||||
const [branching, setBranching] = useState(false);
|
||||
const thinking = !item.done && item.thoughtMs === undefined;
|
||||
const start = useStartsOpen("thinking", thinking && !item.text);
|
||||
const alwaysOpen = useFoldModes().thinking === "open";
|
||||
// The title changes once, when a thought this card watched finishes; a
|
||||
// thought drawn already finished is not that change happening.
|
||||
const watchedThinking = useRef(thinking);
|
||||
@@ -171,7 +172,7 @@ export function SayCard({ item, afterAnswer, settled = true, reply, quiet }: { i
|
||||
</div>
|
||||
<div className="out">
|
||||
{item.reasoning?.trim() && (
|
||||
<details className="think" open={open} data-live={thinking ? "" : undefined} data-cut={item.cut}
|
||||
<details className="think" open={open} data-live={thinking ? "" : undefined} data-full={alwaysOpen ? "" : undefined} data-cut={item.cut}
|
||||
data-settled={settledHere ? "" : undefined} onToggle={(e) => {
|
||||
const next = e.currentTarget.open;
|
||||
if (next === open) return;
|
||||
|
||||
@@ -6,9 +6,10 @@ import { Workspaces } from "./Workspaces";
|
||||
import { RailSearch } from "./railsearch";
|
||||
import type { TreeSession, TreeWorkspace } from "../port/hub";
|
||||
|
||||
afterEach(cleanup);
|
||||
afterEach(() => { cleanup(); vi.useRealTimers(); });
|
||||
|
||||
function draw(session: TreeSession, run?: string) {
|
||||
vi.useFakeTimers({ toFake: ["Date"], now: NOON });
|
||||
const tree: TreeWorkspace[] = [{ root: "/a", name: "alpha", remembered: true, sessions: [session] }];
|
||||
render(<RailSearch><Workspaces
|
||||
hub={{} as never} tree={tree} treeRead runtimes={[]} active="" folded={new Set()} onFold={() => {}} reload={vi.fn().mockResolvedValue(undefined)}
|
||||
@@ -19,7 +20,8 @@ function draw(session: TreeSession, run?: string) {
|
||||
return within(screen.getByRole("treeitem", { name: /plan/ }));
|
||||
}
|
||||
|
||||
const base = { path: "/a/s/one.jsonl", name: "one", title: "plan", lastActiveAt: Date.now() - 3600_000 } as TreeSession;
|
||||
const NOON = new Date(2026, 5, 15, 12, 0, 0).getTime();
|
||||
const base = { path: "/a/s/one.jsonl", name: "one", title: "plan", lastActiveAt: NOON - 3600_000 } as TreeSession;
|
||||
|
||||
it("says 运行中 in place of the time while the conversation runs", () => {
|
||||
const row = draw({ ...base, runtimeId: "r1" }, "running");
|
||||
|
||||
@@ -33,6 +33,10 @@ func mcpCommand(args []string) int {
|
||||
mcpUsage()
|
||||
return 2
|
||||
}
|
||||
if len(args) > 1 && (args[1] == "-h" || args[1] == "--help") {
|
||||
mcpUsage()
|
||||
return 0
|
||||
}
|
||||
switch args[0] {
|
||||
case "list", "ls":
|
||||
if len(args) > 1 {
|
||||
@@ -41,10 +45,6 @@ func mcpCommand(args []string) int {
|
||||
}
|
||||
return mcpList()
|
||||
case "add":
|
||||
if len(args) > 1 && (args[1] == "-h" || args[1] == "--help") {
|
||||
mcpUsage()
|
||||
return 0
|
||||
}
|
||||
return mcpAddCLI(args[1:])
|
||||
case "get":
|
||||
return mcpGetCLI(args[1:])
|
||||
@@ -64,6 +64,10 @@ func mcpCommand(args []string) int {
|
||||
case "update":
|
||||
return mcpUpdateCLI(args[1:])
|
||||
case "import":
|
||||
if len(args) > 1 {
|
||||
fmt.Fprintf(os.Stderr, "mcp import: unexpected argument %q\n", args[1])
|
||||
return 2
|
||||
}
|
||||
return mcpImportCLI()
|
||||
case "browse", "search":
|
||||
return mcpBrowseCLI(args[1:])
|
||||
|
||||
@@ -33,3 +33,35 @@ func TestMCPListAndGetRejectExtraArguments(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMCPHelpFlagPrintsUsageForEverySubcommandAndRunsNothing(t *testing.T) {
|
||||
home := t.TempDir()
|
||||
t.Setenv("HOME", home)
|
||||
t.Setenv("USERPROFILE", home)
|
||||
t.Setenv("REASONIX_HOME", home)
|
||||
for _, sub := range []string{"list", "ls", "add", "get", "remove", "rm", "enable", "disable", "retry", "connect", "trust", "auth", "authorize", "update", "import", "browse", "search", "install"} {
|
||||
for _, flag := range []string{"--help", "-h"} {
|
||||
var code int
|
||||
stdout, stderr := captureCLIOutput(t, func() {
|
||||
code = Run([]string{"mcp", sub, flag}, "test")
|
||||
})
|
||||
if code != 0 || !strings.Contains(stdout, "reasonix mcp") || stderr != "" || strings.Contains(stdout, "imported") {
|
||||
t.Errorf("mcp %s %s: exit %d, want 0 with usage only\nstdout:\n%s\nstderr:\n%s", sub, flag, code, stdout, stderr)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMCPImportRejectsArgumentsInsteadOfImporting(t *testing.T) {
|
||||
home := t.TempDir()
|
||||
t.Setenv("HOME", home)
|
||||
t.Setenv("USERPROFILE", home)
|
||||
t.Setenv("REASONIX_HOME", home)
|
||||
var code int
|
||||
stdout, stderr := captureCLIOutput(t, func() {
|
||||
code = Run([]string{"mcp", "import", "--nope"}, "test")
|
||||
})
|
||||
if code != 2 || stdout != "" || stderr == "" {
|
||||
t.Fatalf("mcp import --nope exited %d, want 2 with an error\nstdout:\n%s\nstderr:\n%s", code, stdout, stderr)
|
||||
}
|
||||
}
|
||||
@@ -288,3 +288,26 @@ func TestAProgramOutsideEveryProjectCarriesNoReason(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestLinuxTerminalFollowsTheMachinesDefaultBeforeAnyFixedOrder(t *testing.T) {
|
||||
dir := "/home/a/proj"
|
||||
f := newFake(t, "linux", map[string]string{"PATH": "/usr/bin"})
|
||||
f.dirs[dir] = true
|
||||
f.files["/usr/bin/konsole"] = true
|
||||
f.files["/usr/bin/kitty"] = true
|
||||
if _, err := f.m.open("terminal", dir); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if want := []call{{"/usr/bin/konsole", []string{"--workdir", dir}}}; !reflect.DeepEqual(f.started, want) {
|
||||
t.Fatalf("without a default-terminal launcher started %v, want %v", f.started, want)
|
||||
}
|
||||
|
||||
f.started = nil
|
||||
f.files["/usr/bin/xdg-terminal-exec"] = true
|
||||
if _, err := f.m.open("terminal", dir); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if want := []call{{"/usr/bin/xdg-terminal-exec", []string{"--dir=" + dir}}}; !reflect.DeepEqual(f.started, want) {
|
||||
t.Fatalf("with xdg-terminal-exec started %v, want %v", f.started, want)
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,7 @@ var targets = []target{
|
||||
"windows": {{exes: []string{`%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe`}, lead: []string{"-d"}}},
|
||||
"darwin": {{apps: []string{"Terminal"}}},
|
||||
"linux": {
|
||||
{commands: []string{"xdg-terminal-exec"}, glue: "--dir="},
|
||||
{commands: []string{"gnome-terminal"}, glue: "--working-directory="},
|
||||
{commands: []string{"konsole"}, lead: []string{"--workdir"}},
|
||||
{commands: []string{"xfce4-terminal"}, glue: "--working-directory="},
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
## 修复
|
||||
|
||||
- 修复 Linux 上「在终端中打开」不管你把哪个终端设成默认,总是按固定顺序挑一个(比如装了 konsole 就先用它,而不是你的 kitty)。现在如果装了 `xdg-terminal-exec`(桌面规范里读取默认终端的启动器),就由它按你机器声明的默认终端打开;没装的话仍按原来的顺序(#15031)。
|
||||
|
||||
---
|
||||
<!-- lang:en -->
|
||||
|
||||
## Fixed
|
||||
|
||||
- On Linux, "Open in terminal" picked a terminal by a fixed order rather than the one the machine declares as its default (konsole before kitty, for example). When `xdg-terminal-exec` is installed, it now starts the machine's default terminal; without it the old order still applies (#15031).
|
||||
@@ -0,0 +1,10 @@
|
||||
## 修复
|
||||
|
||||
- 修复命令行里 `reasonix mcp import --help`(以及 `mcp remove --help` 等其他子命令)不会显示用法,反而把 `--help` 当成参数真的去执行:`import` 会直接改写 MCP 配置。现在所有 `reasonix mcp` 子命令的 `--help` / `-h` 都只打印用法并退出,什么都不改;`mcp import` 带多余参数时会报错而不是照常导入(#15022)。
|
||||
|
||||
---
|
||||
<!-- lang:en -->
|
||||
|
||||
## Fixed
|
||||
|
||||
- `reasonix mcp import --help` (and `--help` on the other `mcp` subcommands) did not print usage and ran the command with `--help` as an argument, so `import` rewrote the MCP configuration. Every `reasonix mcp` subcommand now prints usage for `--help` / `-h` and changes nothing, and `mcp import` refuses extra arguments instead of importing (#15022).
|
||||
@@ -0,0 +1,12 @@
|
||||
## 修复
|
||||
|
||||
- 修复 2.58.0 里,开着「会话行快捷按钮」时,侧栏每一行会话都一直显示一个置顶图标(不管有没有置顶):现在这个按钮只在鼠标移上去或键盘聚焦时才出现;已置顶的会话在没悬停时会一直显示一个小图钉,方便一眼看出(#15012)。
|
||||
- 修复输入框右下角的模型选单里,模型名字较长时,右边的「读图」标签被挤成两行竖着排的问题;现在标签始终在一行里完整显示(#15012)。
|
||||
|
||||
---
|
||||
<!-- lang:en -->
|
||||
|
||||
## Fixed
|
||||
|
||||
- With "Quick buttons on session rows" turned on, every session row in the sidebar showed a pin icon all the time, pinned or not (2.58.0). The button now appears only when the pointer is over the row or it has keyboard focus, and a pinned session keeps a small pin on the row while nothing is hovered (#15012).
|
||||
- In the model menu next to the message box, the "reads images" tag was squeezed into two stacked characters beside a long model name; it now stays whole on one line (#15012).
|
||||
@@ -0,0 +1,12 @@
|
||||
## 修复
|
||||
|
||||
- 修复 2.58.0 里设置的「模型」「连接」等单栏页面:顶部「本页包含」目录和下面的标题、卡片没有对齐,卡片左边多出一大块空白(现在三者对齐到同一条左边线)(#15008)。
|
||||
- 修复从「操作与性能」点开「导航入口」这类二级页时,顶部多出几条空白的横条;现在二级页里只显示它自己(#15009)。
|
||||
|
||||
---
|
||||
<!-- lang:en -->
|
||||
|
||||
## Fixed
|
||||
|
||||
- In Settings, single-column pages such as Model and Connection no longer draw the "On this page" index out of line with the title and cards, which left a wide empty strip beside the cards in 2.58.0; all three now share one left edge (#15008).
|
||||
- Opening a sub-page such as Navigation entries from Operation and performance no longer leaves a few empty bars above it; the sub-page shows only itself (#15009).
|
||||
@@ -0,0 +1,10 @@
|
||||
## 修复
|
||||
|
||||
- 修复设置里「思考过程」选成「展开」后,模型思考时仍然只显示最新六行、要等整段思考结束才一下子全部显示的问题:选「展开」时,运行中的思考块现在随内容一直完整展开;「进行中展开」仍是最新六行的滚动窗口(#15013)。
|
||||
|
||||
---
|
||||
<!-- lang:en -->
|
||||
|
||||
## Fixed
|
||||
|
||||
- With Thinking set to "Open", a thought still showed only its latest six lines while the model was thinking and then jumped to the full text when it finished. In "Open" the running thought now grows with its text; "Open while running" keeps the six-line rolling window (#15013).
|
||||
@@ -0,0 +1,10 @@
|
||||
## 修复
|
||||
|
||||
- 修复 Windows 上每次启动 Reasonix Studio 都会先闪一下黑色控制台窗口的问题:启动时用来确认"是不是同一个 Studio"的内核探测,以及启动内核本身,现在都隐藏控制台窗口(#15016)。
|
||||
|
||||
---
|
||||
<!-- lang:en -->
|
||||
|
||||
## Fixed
|
||||
|
||||
- On Windows, launching Reasonix Studio no longer flashes a console window first: the kernel probe that tells whether this is the same Studio, and the kernel launch itself, now run with their console hidden (#15016).
|
||||
Reference in new issue
Block a user