From c8201d503739b3392f6ef85f80adc98b9b3a036e Mon Sep 17 00:00:00 2001 From: James Ross Date: Thu, 15 Oct 2026 09:50:00 -0700 Subject: [PATCH 1/3] Design inline explorer expansion and read-only preview syntax --- ...164-explorer-inline-tree-preview-syntax.md | 218 ++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 docs/design/0164-explorer-inline-tree-preview-syntax.md diff --git a/docs/design/0164-explorer-inline-tree-preview-syntax.md b/docs/design/0164-explorer-inline-tree-preview-syntax.md new file mode 100644 index 00000000..197ea95e --- /dev/null +++ b/docs/design/0164-explorer-inline-tree-preview-syntax.md @@ -0,0 +1,218 @@ +--- +title: "DX-0164 - Inline explorer tree and preview syntax" +legend: "DX" +lane: "design" +issue: "https://github.com/flyingrobots/jedit/issues/348" +status: "active" +owners: ["@flyingrobots"] +created: "2026-10-15" +updated: "2026-10-15" +--- + +# DX-0164 - Inline explorer tree and preview syntax + +## Linked Issue + +https://github.com/flyingrobots/jedit/issues/348 + +## Decision Summary + +The workspace Files explorer expands directories inline on click or Enter, +with indentation and disclosure markers. File click remains selection/preview; +file Enter remains an explicit open. Bounded read-only previews receive Graft +syntax spans without creating a buffer or claiming an Echo head. + +## Sponsored Human + +A Jim user wants to browse several open folders and read colored source previews +without repeatedly changing the explorer root or opening unwanted buffers. + +## Sponsored Agent + +An agent needs inspectable expansion state, selected entry identity, bounded +preview text and stale-result rejection to prove input and authority boundaries. + +## Hill + +Click and Enter reveal/hide folder children in place. Selecting a source file +renders syntax colors in the main preview while buffer authority remains intact. + +## Current Truth + +The fetched base is +[af1fad8ab3356fa6d96548c8793aa6f2afea8c6b](https://github.com/flyingrobots/jedit/commit/af1fad8ab3356fa6d96548c8793aa6f2afea8c6b), +footer PR #344. `file-tree.ts` changes cwd for a directory. `mouse.ts` only selects +rows. `file-explorer-preview-view.ts` builds an uncolored text Surface. +`file-explorer-preview.ts` already bounds reads and rejects stale results. +The Graft adapter currently accepts an editor-head basis; Graft itself allows +basis-free projections for disposable content. + +## Problem + +Entering a directory loses sibling context, clicking cannot expand it, and source +previews lose the syntax information available in the editor. + +## Scope + +Lazy inline expansion/collapse, nested indentation, directory pointer/keyboard +actions, filtered ancestry, refresh behavior, and read-only preview syntax. + +## Non-Goals + +Recursive filesystem indexing, watchers, persisted expansion, symbol search, +preview editing, new Echo buffer authorities, or changes to the startup picker. + +## User Experience / Product Shape + +Folders show ▸ when closed and ▾ when open; each child is indented two cells. +Clicking any part of a folder row selects and toggles it. Enter toggles it too. +Right/l expands a closed folder or enters its first child; Left/h collapses an +open folder or selects its parent. Backspace and Alt+Up retain root-parent +navigation. Refresh reloads the current root and collapses expanded branches. +An empty folder still shows its open disclosure. An unreadable folder shows the +existing directory error toast and keeps the current tree intact. + +The filter searches the currently known visible rows. Matching children retain +their directory ancestors. Filtering never recursively loads closed directories. +Hover remains distinct from selection; a file click only previews, while Enter +opens it. Folder actions do not modify cwd, editor text or Echo authority. + +Source previews load/highlight asynchronously. Parser errors or unsupported +languages retain readable text. The existing loading/binary/unavailable/truncated +labels remain. Header and truncation notice receive no source syntax colors. + +### User Journey + +Open Files with Ctrl+B, expand src and a nested folder, select a file to inspect +its highlighted preview, then Enter to open it or collapse the folder to keep +browsing. Closing Files reveals the existing editor unchanged. + +### Wide UI Mockup + +100x32, current theme: + +```text +Files / filter Preview · main.ts + ▾ src/ + ▸ components/ export const answer = 42; + › main.ts ^ keyword ^ number + ▸ tests/ + README.md +``` + +### Narrow UI Mockup + +60x12: the same pinned header and indented rows use the existing list viewport. +The selected row remains visible through collapse/expand and scrolling. The +preview occupies the existing main viewer, with clipped lines and syntax tokens. + +### Accessibility Considerations + +Disclosure characters communicate state without color; selection keeps the +existing filled token and hover keeps its separate token. Keyboard-only and +pointer flows share the same visible row projection and directory operation. + +## Runtime / API Contract + +Files entries remain the visible ordered list; optional tree metadata records +per-path depth, parent and expanded state. Loading is lazy through FileSystemPort. +The startup picker and command-path directory opens retain their existing API. + +A basis-free PreviewHighlighter port accepts only preview path/text and bounded +line coordinates. The Graft adapter shares syntax-span conversion with editor +highlighting but omits the editor-head basis for previews. Preview text is +sanitized once before both parsing and rendering. The existing preview request +identity gates the combined text/syntax result. Open-buffer text remains preferred. + +## Lower Modes + +Unsupported syntax and parser failures produce plain text; no new required +service. Unicode, tabs and stripped controls must keep text/color alignment. +Existing minimum terminal dimensions and no-color text state remain valid. + +## Data / State Model + +UI-only tree metadata and preview spans are ephemeral. Collapse drops the +visible descendants and their expansion metadata. Refresh/root changes clear +metadata. Expansion loads immediate children only and excludes parent rows. +No filesystem content cache, serialization, buffer import or Echo Tick is added. + +## Accessibility Posture + +Folder disclosure, nesting and error state are visible without accent colors. +Active input ownership stays with Files. The main document remains a preview +until an explicit file open; hover performs no filesystem read. + +## Localization / Directionality Posture + +Reuse localized preview and directory-error copy. Keep literal path order in +RTL locales and reuse the existing Files indentation convention. Update the +existing Enter hint to communicate toggle/open in all 20 authored locales. + +## Agent Inspectability / Explainability Posture + +Tests can inspect tree metadata, selected indexes, preview result/spans and +rendered token colors. Native witnesses must show nested expansion and a colored +preview rather than infer either feature from source strings. + +## Linked Invariants + +Hover is not selection. Selection is not open. A preview is disposable and +read-only. Filesystem/Graft work belongs behind ports. Echo owns buffer authority. + +## Design Alternatives Considered + +Recursively walking the repository would delay the requested interaction and +increase read scope. Replacing cwd preserves the current defect. Lazy visible +rows with small per-path metadata fit existing selection/filter geometry. +Reusing a made-up editor head for preview syntax would misrepresent provenance; +a basis-free Graft projection is the appropriate read-only boundary. + +## Decision + +Implement the lazy tree and basis-free syntax projection. Preserve the existing +startup-picker and explicit file-opening behaviors. + +## Implementation Slices + +- [ ] Slice 1: Inline directory state, rendering, keyboard and pointer behavior. +- [ ] Slice 2: Basis-free Graft preview highlighting and stale/failure protection. +- [ ] Slice 3: Native witnesses, full checks and review handoff. + +## Tests To Write First + +- [ ] Enter/click expand and collapse nested directories without changing root. +- [ ] Sibling branches, selection, indentation and filter ancestors stay coherent. +- [ ] Empty/unreadable directories and root refresh preserve safe navigation. +- [ ] Real Graft syntax colors reach the preview, including unsaved buffer text. +- [ ] Stale results, parser failure, tabs, Unicode and truncation remain safe. + +## Acceptance Criteria + +Both actions work through the real runtime; selected previews display theme +syntax tokens. Focus/filter and explicit-open behavior remain intact. Native +terminal witnesses and focused/full checks pass. No new buffer authority exists. + +## Validation Plan + +TypeScript compile, focused explorer/preview/Graft tests, quality, full npm run +check, shard coverage, native wide/narrow dark/light/RTL witnesses and hosted CI. + +## Playback / Witness + +Ctrl+B; click or Enter on a folder; expand another level; select a TypeScript +file; verify keyword/number colors; collapse/reopen; explicitly open a file. + +## Risks + +A flat visible list must keep stable entry identity while indexes shift. Metadata +and rendering share one projection; mouse uses the renderer's exact rows. Syntax +must parse the same sanitized text it paints, without coloring the notice row. + +## Follow-On Debt + +None introduced by this scope. Global recursive search remains outside this cycle. + +## Retrospective + +Pending implementation and validation. From 72933ebbc34d92609067ae1edcb87e28ec836754 Mon Sep 17 00:00:00 2001 From: James Ross Date: Thu, 15 Oct 2026 09:58:09 -0700 Subject: [PATCH 2/3] Expand explorer folders inline and color read-only source previews --- GUIDE.md | 17 +++ ...164-explorer-inline-tree-preview-syntax.md | 14 +-- docs/jim-component-ownership.md | 17 +++ scripts/explorer-inline-witness.mjs | 55 +++++++++ spec/file-explorer-inline-tree.spec.mjs | 94 +++++++++++++++ spec/file-preview-syntax.spec.mjs | 81 +++++++++++++ src/adapters/graft-source-highlighter.ts | 48 ++++---- src/adapters/workspace-app.ts | 1 + src/app/workspace/directory-change-failure.ts | 22 ++++ src/app/workspace/file-explorer-pointer.ts | 106 +++++++++++++++++ .../workspace/file-explorer-preview-view.ts | 12 +- src/app/workspace/file-explorer-preview.ts | 23 ++-- src/app/workspace/file-explorer-view.ts | 4 +- src/app/workspace/file-preview-syntax.ts | 22 ++++ src/app/workspace/file-search.ts | 31 ++++- src/app/workspace/file-tree-expansion.ts | 97 ++++++++++++++++ src/app/workspace/file-tree.ts | 21 ++-- src/app/workspace/model.ts | 2 + src/app/workspace/mouse.ts | 107 +----------------- src/app/workspace/runtime.ts | 3 +- .../workspace-runtime-dependencies.ts | 3 +- src/generated/i18n.ts | 42 +++---- src/ports/source-highlighter.ts | 6 + src/ui/file-preview-syntax.ts | 45 ++++++++ src/ui/file-search-results.ts | 6 +- src/ui/source-highlight.ts | 4 +- src/ui/workspace-render.ts | 16 ++- translations.json | 40 +++---- 28 files changed, 729 insertions(+), 210 deletions(-) create mode 100644 scripts/explorer-inline-witness.mjs create mode 100644 spec/file-explorer-inline-tree.spec.mjs create mode 100644 spec/file-preview-syntax.spec.mjs create mode 100644 src/app/workspace/directory-change-failure.ts create mode 100644 src/app/workspace/file-explorer-pointer.ts create mode 100644 src/app/workspace/file-preview-syntax.ts create mode 100644 src/app/workspace/file-tree-expansion.ts create mode 100644 src/ui/file-preview-syntax.ts diff --git a/GUIDE.md b/GUIDE.md index f4f142e8..a589fbee 100644 --- a/GUIDE.md +++ b/GUIDE.md @@ -36,6 +36,23 @@ npm run build runtime assets. The generated Rust contract bindings are checked in so normal builds do not require a sibling Echo checkout or generator invocation. +## Files explorer + +Ctrl+B opens Files in navigation mode. Click a folder or press Enter to expand +or collapse it inline. Right/l expands a folder or selects its first visible +child; Left/h collapses it or selects its parent. Backspace and Alt+Up move the +explorer root upward. Refresh with r or Ctrl+R reloads the root and collapses +expanded branches. + +Click a file to select it and preview its contents in the main viewer. Enter +opens that file for editing. Previews use Graft syntax colors, prefer unsaved +open-buffer text, and remain read-only. Unsupported syntax or a parser failure +leaves a readable plain-text preview. + +Press / to filter known visible paths; matching children retain their folder +ancestors, and the matching file stays selected. Esc/Enter exits filter editing +and keeps the query. Closed directories are loaded only when expanded. + ## Validate The Workspace Use the normal local gate: diff --git a/docs/design/0164-explorer-inline-tree-preview-syntax.md b/docs/design/0164-explorer-inline-tree-preview-syntax.md index 197ea95e..f6fb28c1 100644 --- a/docs/design/0164-explorer-inline-tree-preview-syntax.md +++ b/docs/design/0164-explorer-inline-tree-preview-syntax.md @@ -175,17 +175,17 @@ startup-picker and explicit file-opening behaviors. ## Implementation Slices -- [ ] Slice 1: Inline directory state, rendering, keyboard and pointer behavior. -- [ ] Slice 2: Basis-free Graft preview highlighting and stale/failure protection. +- [x] Slice 1: Inline directory state, rendering, keyboard and pointer behavior. +- [x] Slice 2: Basis-free Graft preview highlighting and stale/failure protection. - [ ] Slice 3: Native witnesses, full checks and review handoff. ## Tests To Write First -- [ ] Enter/click expand and collapse nested directories without changing root. -- [ ] Sibling branches, selection, indentation and filter ancestors stay coherent. -- [ ] Empty/unreadable directories and root refresh preserve safe navigation. -- [ ] Real Graft syntax colors reach the preview, including unsaved buffer text. -- [ ] Stale results, parser failure, tabs, Unicode and truncation remain safe. +- [x] Enter/click expand and collapse nested directories without changing root. +- [x] Sibling branches, selection, indentation and filter ancestors stay coherent. +- [x] Empty/unreadable directories and root refresh preserve safe navigation. +- [x] Real Graft syntax colors reach the preview, including unsaved buffer text. +- [x] Stale results, parser failure, tabs, Unicode and truncation remain safe. ## Acceptance Criteria diff --git a/docs/jim-component-ownership.md b/docs/jim-component-ownership.md index c79b9f39..fb106c4f 100644 --- a/docs/jim-component-ownership.md +++ b/docs/jim-component-ownership.md @@ -303,6 +303,23 @@ continues through the native Echo text-import path. a future workspace or symbol index must remain a rebuildable projection and declare its observation basis and staleness policy. +The Files explorer owns ephemeral inline-tree metadata alongside its visible +entry list. Directory click/Enter toggle immediate children in place through the +filesystem port, preserving cwd and other branches. Disclosure, indentation, +selection and hover derive from the same rows used by pointer hit testing. +Filtering retains ancestors of matching known rows without recursively reading +closed directories; it selects the first actual match. Collapse drops descendant +metadata, and refresh/root changes reset expansion. The startup picker retains +its existing directory-changing behavior. + +Preview syntax is a disposable Graft projection through a basis-free preview +highlighting port, separate from editor-head highlighting. Both parse and render +use the same sanitized bounded text. Open-buffer text remains preferred, and +request/entry identity rejects stale text and spans together. Parser failure +retains plain text. Preview colors do not introduce a buffer, head, Tick or save +authority. [DX-0164](design/0164-explorer-inline-tree-preview-syntax.md) refines +[DX-0161](design/0161-file-explorer-search.md) and owns this cycle's evidence. + The footer layout is a Jedit presentation preference, remembered across launches through an injected preferences port and the `~/.jimrc` JSON adapter. The `filepathStyle` preference shares that adapter and chooses paths relative to diff --git a/scripts/explorer-inline-witness.mjs b/scripts/explorer-inline-witness.mjs new file mode 100644 index 00000000..6a856d1b --- /dev/null +++ b/scripts/explorer-inline-witness.mjs @@ -0,0 +1,55 @@ +import { mkdtempSync, mkdirSync, writeFileSync, realpathSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { initDefaultContext } from '@flyingrobots/bijou-node'; +import { getDefaultContext } from '@flyingrobots/bijou'; +import { run } from '@flyingrobots/bijou-tui'; +import { workspaceTerminalIO } from '../dist/adapters/workspace-terminal-io.js'; +import { JEDIT_TERMINAL_MOUSE_OPTIONS } from '../dist/ui/terminal-mouse.js'; +import { createWorkspaceApp } from '../dist/adapters/workspace-app.js'; +import { createWorkspaceProductionTextDependencies, closingProductionText } from '../dist/adapters/workspace-production-text-dependencies.js'; +import { createInitialModelSnapshot } from '../dist/adapters/workspace-initial-model-snapshot.js'; +import { createFooterPreferences } from '../dist/adapters/footer-preferences.js'; +import { BijouI18nAdapter } from '../dist/adapters/bijou-i18n-adapter.js'; +import { oppositeJeditTheme } from '../dist/ui/jedit-themes.js'; + +const directory = realpathSync(mkdtempSync(join(tmpdir(), 'jim-inline-tree-'))); +writeFileSync('/tmp/jim-inline-tree-witness-directory.txt', directory); +mkdirSync(join(directory, 'src', 'components'), { recursive: true }); +mkdirSync(join(directory, 'tests')); +writeFileSync(join(directory, 'src', 'components', 'panel.ts'), '// Preview syntax from Graft\nexport const title = "Panel";\nexport const answer = 42;\n'); +writeFileSync(join(directory, 'src', 'main.ts'), 'import { answer } from "./components/panel";\nconsole.log(answer);\n'); +writeFileSync(join(directory, 'README.md'), 'Synthetic explorer witness fixture.\n'); +process.env.JEDIT_ECHO_WAL_DIR = join(directory, 'wal'); +process.env.TERM = 'xterm-256color'; +for (const name of ['NO_COLOR', 'CI', 'BIJOU_ACCESSIBLE']) delete process.env[name]; +initDefaultContext(); +const seed = createInitialModelSnapshot(Date.now(), directory); +seed.i18n = new BijouI18nAdapter(process.env.JIM_EXPLORER_WITNESS_LOCALE ?? 'en'); +if (process.env.JIM_EXPLORER_WITNESS_LIGHT === '1') seed.jeditTheme = oppositeJeditTheme(seed.jeditTheme); +const production = await createWorkspaceProductionTextDependencies(); +await closingProductionText(production, async () => { + const app = createWorkspaceApp({ initialColumns: process.stdout.columns, initialRows: process.stdout.rows, + initialWorkingDirectory: directory, perfEnabled: false, seed, + footerPreferences: createFooterPreferences(join(directory, '.jimrc')) }, production); + const update = app.update; + const history = []; + app.update = (message, model) => { + const result = update(message, model); + if (!['key', 'mouse', 'file-explorer-preview-result', 'text-open-result'].includes(message.type)) return result; + const next = result[0]; + const surface = app.view(next); + const cells = Array.from({ length: surface.height }, (_, y) => + Array.from({ length: surface.width }, (_, x) => surface.get(x, y))); + history.push({ message: { type: message.type, key: message.key, action: message.action, col: message.col, row: message.row }, + cwd: next.cwd, focus: next.focusPane, selected: next.selectedIndex, tree: next.fileTree, + paths: next.entries.map((entry) => entry.path), previewPath: next.fileExplorerPreview?.entry.path, + syntaxSpans: next.fileExplorerPreview?.highlight?.spans.length, authority: next.textAuthority.kind, + textRequestId: next.textRequestId, commands: result[1].length }); + writeFileSync(join(directory, 'events.json'), JSON.stringify(history, null, 2)); + writeFileSync(join(directory, `frame-${history.length}.json`), JSON.stringify(cells)); + return result; + }; + const context = getDefaultContext(); + await run(app, { ...JEDIT_TERMINAL_MOUSE_OPTIONS, ctx: { ...context, io: workspaceTerminalIO(context.io) } }); +}); diff --git a/spec/file-explorer-inline-tree.spec.mjs b/spec/file-explorer-inline-tree.spec.mjs new file mode 100644 index 00000000..adadd501 --- /dev/null +++ b/spec/file-explorer-inline-tree.spec.mjs @@ -0,0 +1,94 @@ +import assert from 'node:assert/strict'; +import test from 'node:test'; +import { importDist, mockRuntime } from './workspace-helpers.mjs'; + +const src = { kind: 'dir', name: 'src', path: '/repo/src' }; +const tests = { kind: 'dir', name: 'tests', path: '/repo/tests' }; +const nested = { kind: 'dir', name: 'nested', path: '/repo/src/nested' }; +const main = { kind: 'file', name: 'main.ts', path: '/repo/src/main.ts' }; +const deep = { kind: 'file', name: 'deep.ts', path: '/repo/src/nested/deep.ts' }; +const parent = { kind: 'parent', name: '..', path: '/repo' }; +const key = (runtime, model, key, extra = {}) => runtime.update({ type: 'key', key, ...extra }, model); +const text = (surface) => Array.from({ length: surface.height }, (_, y) => + Array.from({ length: surface.width }, (_, x) => surface.get(x, y).char).join('')).join('\n'); +async function setup() { + const { createWorkspaceRuntime } = await importDist('app', 'workspace', 'runtime.js'); + const { BijouI18nAdapter } = await importDist('adapters', 'bijou-i18n-adapter.js'); + const { availableJeditThemes } = await importDist('ui', 'jedit-themes.js'); + const deps = mockRuntime(); const reads = []; + deps.initialModel.entries = [src, tests]; + deps.initialModel.i18n = new BijouI18nAdapter(); deps.initialModel.jeditTheme = availableJeditThemes()[0]; + const children = new Map([['/repo', [src, tests]], ['/repo/src', [parent, nested, main]], ['/repo/src/nested', [parent, deep]], ['/repo/tests', []]]); + deps.fileSystem.loadEntries = (path) => { reads.push(path); return children.get(path) ?? []; }; + const runtime = createWorkspaceRuntime(deps); const initial = runtime.init()[0]; + return { runtime, deps, reads, model: { ...initial, fileDrawerOpen: true, fileDrawerProgress: 1, focusPane: 'files' } }; +} + +test('Enter toggles immediate children inline and nested collapse preserves sibling branches', async () => { + const { runtime, model, reads } = await setup(); + const [open, effects] = key(runtime, model, 'enter'); + assert.equal(open.cwd, model.cwd); assert.equal(open.textAuthority, model.textAuthority); assert.deepEqual(effects, []); + assert.deepEqual(open.entries, [src, nested, main, tests]); assert.deepEqual(reads, ['/repo/src']); + const nestedOpen = key(runtime, { ...open, selectedIndex: 1 }, 'enter')[0]; + assert.deepEqual(nestedOpen.entries, [src, nested, deep, main, tests]); + const both = key(runtime, { ...nestedOpen, selectedIndex: 4 }, 'enter')[0]; + assert.equal(both.fileTree[tests.path].expanded, true); + const closed = key(runtime, { ...both, selectedIndex: 0 }, 'enter')[0]; + assert.deepEqual(closed.entries, [src, tests]); assert.equal(closed.fileTree[tests.path].expanded, true); + assert.equal(closed.fileTree[deep.path], undefined); assert.equal(closed.selectedIndex, 0); + const reopened = key(runtime, closed, 'enter')[0]; + assert.deepEqual(reopened.entries, [src, nested, main, tests]); +}); + +test('Directory clicks toggle inline while file clicks only select and file Enter explicitly opens', async () => { + const { runtime, model } = await setup(); + const mouse = (model, row) => runtime.update({ type: 'mouse', action: 'press', button: 'left', col: 6, row }, model); + const [expanded] = mouse(model, 4); + assert.deepEqual(expanded.entries, [src, nested, main, tests]); assert.equal(expanded.cwd, model.cwd); + const [selected, effects] = mouse(expanded, 6); + assert.equal(selected.selectedIndex, 2); assert.equal(selected.entries[2], main); + assert.equal(selected.textAuthority, model.textAuthority); assert.deepEqual(effects, []); + const [opening, commands] = key(runtime, selected, 'enter'); + assert.equal(opening.textAuthority.filePath, main.path); assert.equal(commands.length, 1); + assert.deepEqual(mouse(expanded, 4)[0].entries, [src, tests]); +}); + +test('Right enters a child, Left selects its parent and collapses it without changing the root', async () => { + const { runtime, model } = await setup(); + const expanded = key(runtime, model, 'right')[0]; + const child = key(runtime, expanded, 'right')[0]; assert.equal(child.entries[child.selectedIndex], nested); + const up = key(runtime, child, 'left')[0]; assert.equal(up.selectedIndex, 0); assert.equal(up.cwd, model.cwd); + const closed = key(runtime, up, 'left')[0]; assert.deepEqual(closed.entries, [src, tests]); +}); + +test('Tree rows render nesting/disclosure and filters retain matching children with their ancestors', async () => { + const { runtime, model } = await setup(); + let next = key(runtime, model, 'enter')[0]; next = key(runtime, { ...next, selectedIndex: 1 }, 'enter')[0]; + const rendered = text(runtime.view(next)); assert.match(rendered, /▾ src\//); assert.match(rendered, / ▾ nested\//); + assert.match(rendered, / deep\.ts/); + const { fileSearchEntries, fileSearchWithInput } = await importDist('app', 'workspace', 'file-search.js'); + const filtered = fileSearchWithInput(next, { input: 'deep', cursorIndex: 4 }); + assert.deepEqual(fileSearchEntries(filtered).map(({ entry }) => entry.path), [src.path, nested.path, deep.path]); + assert.equal(filtered.entries, next.entries); +}); + +test('Unreadable directories preserve the tree and refresh resets expansion at the same root', async () => { + const { runtime, model, deps } = await setup(); + deps.fileSystem.loadEntries = () => { throw new Error('permission denied'); }; + const [failed] = key(runtime, model, 'enter'); assert.equal(failed.entries, model.entries); + assert.equal(failed.fileTree?.[src.path]?.expanded, undefined); assert.equal(failed.cwd, model.cwd); + assert.notEqual(failed.notifications, model.notifications); + const second = await setup(); const open = key(second.runtime, second.model, 'enter')[0]; + const refreshed = key(second.runtime, open, 'r')[0]; assert.deepEqual(refreshed.entries, [src, tests]); + assert.equal(refreshed.fileTree, undefined); assert.equal(refreshed.cwd, second.model.cwd); +}); + +test('Filtering selects the matching file and Right uses the visible first child', async () => { + const { runtime, model } = await setup(); + const open = key(runtime, model, 'enter')[0]; + const { fileSearchWithInput } = await importDist('app', 'workspace', 'file-search.js'); + const filtered = fileSearchWithInput(open, { input: 'main', cursorIndex: 4 }); + assert.equal(filtered.entries[filtered.selectedIndex], main); + const next = key(runtime, { ...filtered, selectedIndex: 0 }, 'right')[0]; + assert.equal(next.entries[next.selectedIndex], main); +}); diff --git a/spec/file-preview-syntax.spec.mjs b/spec/file-preview-syntax.spec.mjs new file mode 100644 index 00000000..1dc1d758 --- /dev/null +++ b/spec/file-preview-syntax.spec.mjs @@ -0,0 +1,81 @@ +import assert from 'node:assert/strict'; +import test from 'node:test'; +import { importDist, mockRuntime } from './workspace-helpers.mjs'; +const entry = { kind: 'file', name: 'main.ts', path: '/repo/main.ts' }; +const key = (key, flags = {}) => ({ type: 'key', key, ...flags }); +async function setup(options = {}) { + const { createWorkspaceRuntime } = await importDist('app', 'workspace', 'runtime.js'); + const { BijouI18nAdapter } = await importDist('adapters', 'bijou-i18n-adapter.js'); + const { availableJeditThemes } = await importDist('ui', 'jedit-themes.js'); + const { createGraftSourceHighlighter } = await importDist('adapters', 'graft-source-highlighter.js'); + const deps = mockRuntime(); const reads = []; + deps.initialModel.entries = [entry]; deps.initialModel.i18n = new BijouI18nAdapter(); + deps.initialModel.jeditTheme = availableJeditThemes()[0]; + deps.previewHighlighter = options.highlighter ?? createGraftSourceHighlighter(); + deps.filePreviewSource = { loadFilePreview: (path) => { + reads.push(path); return { kind: 'loaded', lines: options.lines ?? ['export const answer = 42;'], truncated: options.truncated ?? false }; + } }; + const runtime = createWorkspaceRuntime(deps); + return { runtime, reads, model: { ...runtime.init()[0], ...options.model }, deps }; +} +async function preview(fixture) { + const [opened, commands] = fixture.runtime.update(key('b', { ctrl: true }), fixture.model); + const message = await commands.at(-1)(); + return fixture.runtime.update(message, { ...opened, fileDrawerProgress: 1 })[0]; +} +const rowText = (surface, row) => Array.from({ length: surface.width }, (_, x) => surface.get(x, row).char).join(''); + +test('Real Graft syntax colors reach the read-only preview without opening an Echo buffer', async () => { + const fixture = await setup(); const next = await preview(fixture); + assert.ok(next.fileExplorerPreview.highlight.spans.length > 0); + const { renderFileExplorerPreview } = await importDist('app', 'workspace', 'file-explorer-preview-view.js'); + const { JEDIT_SOURCE_TOKEN } = await importDist('ui', 'jedit-theme.js'); + const surface = renderFileExplorerPreview(next, 60, 12); + assert.match(rowText(surface, 3), /export const answer = 42/); + assert.equal(surface.get(1, 3).fg, next.jeditTheme.source.get(JEDIT_SOURCE_TOKEN.Keyword).fg); + assert.equal(surface.get(23, 3).fg, next.jeditTheme.source.get(JEDIT_SOURCE_TOKEN.Number).fg); + assert.equal(next.textAuthority, fixture.model.textAuthority); assert.equal(next.textRequestId, fixture.model.textRequestId); +}); + +test('Preview Graft projections omit an editor-head basis', async () => { + const { createGraftSourceHighlighter } = await importDist('adapters', 'graft-source-highlighter.js'); + const calls = []; + const highlighter = createGraftSourceHighlighter({ loadRuntime: async () => ({ ensureParserReady: async () => {}, + createProjectionBundle: (path, content, options) => { calls.push({ path, content, options }); return { syntax: { spans: [] } }; } }) }); + await highlighter.highlightPreview({ path: entry.path, text: 'const x = 1', startLine: 0, lineCount: 1 }); + assert.equal('basis' in calls[0].options, false); + await highlighter.highlight({ path: entry.path, text: 'const x = 1', startLine: 0, lineCount: 1, headId: 'real-head', tick: 2 }); + assert.deepEqual(calls[1].options.basis, { kind: 'editor_head', headId: 'real-head', tick: 2 }); +}); + +test('Unsaved preview text is highlighted without disk reads and parser failure keeps readable text', async () => { + const inputs = []; + const editor = { path: entry.path, lines: ['\tconst unsaved = 7;\u001b'], dirty: true }; + const fixture = await setup({ model: { editor }, highlighter: { highlightPreview: async (input) => { + inputs.push(input); throw new Error('parser unavailable'); + } } }); + const next = await preview(fixture); + assert.deepEqual(fixture.reads, []); assert.equal(inputs[0].text, ' const unsaved = 7;'); + assert.equal(next.editor, editor); assert.equal(next.textAuthority, fixture.model.textAuthority); + const { renderFileExplorerPreview } = await importDist('app', 'workspace', 'file-explorer-preview-view.js'); + assert.match(rowText(renderFileExplorerPreview(next, 60, 12), 3), /const unsaved = 7/); +}); + +test('Preview highlights align after tabs, wide Unicode and a truncation notice without coloring the notice', async () => { + const fixture = await setup({ lines: ['\tconst 界 = 42;'], truncated: true }); const next = await preview(fixture); + const { renderFileExplorerPreview } = await importDist('app', 'workspace', 'file-explorer-preview-view.js'); + const { JEDIT_SOURCE_TOKEN } = await importDist('ui', 'jedit-theme.js'); + const surface = renderFileExplorerPreview(next, 60, 12); + assert.match(rowText(surface, 3), /truncated/i); assert.match(rowText(surface, 4), /const.*42/); + assert.equal(surface.get(5, 4).fg, next.jeditTheme.source.get(JEDIT_SOURCE_TOKEN.Keyword).fg); + const x = Array.from({ length: surface.width }, (_, x) => x).find((x) => surface.get(x, 4).char === '4'); + assert.equal(surface.get(x, 4).fg, next.jeditTheme.source.get(JEDIT_SOURCE_TOKEN.Number).fg); +}); + +test('A late highlighted preview cannot repaint a closed drawer or a different selection', async () => { + const fixture = await setup(); const [opened, commands] = fixture.runtime.update(key('b', { ctrl: true }), fixture.model); + const [closed] = fixture.runtime.update(key('b', { ctrl: true }), opened); const message = await commands.at(-1)(); + assert.ok(message.highlight.spans.length > 0); + const [late] = fixture.runtime.update(message, closed); assert.equal(late.fileExplorerPreview, undefined); + assert.equal(late.textAuthority, fixture.model.textAuthority); +}); diff --git a/src/adapters/graft-source-highlighter.ts b/src/adapters/graft-source-highlighter.ts index 6987806a..e4576ec9 100644 --- a/src/adapters/graft-source-highlighter.ts +++ b/src/adapters/graft-source-highlighter.ts @@ -3,6 +3,7 @@ import { SOURCE_HIGHLIGHT_ROLE, type SourceHighlightReading, type SourceHighlighter, + type PreviewHighlighter, type PreviewHighlightInput, type SourceHighlightInput, type SourceHighlightRole, type SourceHighlightSpan, @@ -75,7 +76,7 @@ interface GraftProjectionBundle { } interface GraftProjectionOptions { - readonly basis: { + readonly basis?: { readonly kind: typeof EDITOR_HEAD_BASIS_KIND; readonly headId: string; readonly tick: number; @@ -166,42 +167,43 @@ export function createGraftSourceHighlighterProcessRunner(): GraftProcessRunner }; } -export function createGraftSourceHighlighter(options: GraftSourceHighlighterOptions = {}): SourceHighlighter { +export function createGraftSourceHighlighter(options: GraftSourceHighlighterOptions = {}): SourceHighlighter & PreviewHighlighter { const loadRuntime = options.loadRuntime ?? defaultRuntimeLoader(); return { - async highlight(input: SourceHighlightInput): Promise { - const runtime = await loadRuntime(); - await runtime.ensureParserReady(); - const bundle = readProjectionBundle(runtime, input); + highlight: (input) => highlightInput(loadRuntime, input), + highlightPreview: (input) => highlightInput(loadRuntime, input), + }; +} - return { - path: input.path, - partial: bundle.partial, - spans: graftSyntaxSpansToSourceHighlights(bundle.spans, input.textStartLine), - projection: input.projection, - ...(bundle.reason == null ? {} : { notice: bundle.reason }), - }; - }, +async function highlightInput( + loadRuntime: LoadGraftSourceHighlighterRuntime, + input: SourceHighlightInput | PreviewHighlightInput, +): Promise { + const runtime = await loadRuntime(); + await runtime.ensureParserReady(); + const bundle = readProjectionBundle(runtime, input); + const textStartLine = 'textStartLine' in input ? input.textStartLine : undefined; + return { + path: input.path, partial: bundle.partial, + spans: graftSyntaxSpansToSourceHighlights(bundle.spans, textStartLine), + projection: 'projection' in input ? input.projection : undefined, + ...(bundle.reason == null ? {} : { notice: bundle.reason }), }; } function readProjectionBundle( runtime: GraftSourceHighlighterRuntime, - input: SourceHighlightInput, + input: SourceHighlightInput | PreviewHighlightInput, ): { readonly partial: boolean; readonly spans: readonly GraftSyntaxSpan[]; readonly reason?: string; } { try { - const textStartLine = input.textStartLine ?? FIRST_PROJECTED_LINE; + const textStartLine = ('textStartLine' in input ? input.textStartLine : undefined) ?? FIRST_PROJECTED_LINE; const bundle = runtime.createProjectionBundle(input.path, input.text, { - basis: { - kind: EDITOR_HEAD_BASIS_KIND, - headId: input.headId, - tick: input.tick, - }, + ...projectionBasis(input), viewport: { start: { row: input.startLine - textStartLine, column: VIEWPORT_START_COLUMN }, end: { row: input.startLine - textStartLine + input.lineCount, column: VIEWPORT_END_COLUMN }, @@ -223,6 +225,10 @@ function readProjectionBundle( } } +function projectionBasis(input: SourceHighlightInput | PreviewHighlightInput): Pick { + return 'headId' in input ? { basis: { kind: EDITOR_HEAD_BASIS_KIND, headId: input.headId, tick: input.tick } } : {}; +} + export function graftSyntaxSpansToSourceHighlights( spans: readonly GraftSyntaxSpan[], textStartLine: number = FIRST_PROJECTED_LINE, diff --git a/src/adapters/workspace-app.ts b/src/adapters/workspace-app.ts index 5e037e12..0bc77e1b 100644 --- a/src/adapters/workspace-app.ts +++ b/src/adapters/workspace-app.ts @@ -68,6 +68,7 @@ function workspaceRuntimeDependencies( productionTextSession: productionText.productionTextSession, graftSession, sourceHighlighter, + previewHighlighter: sourceHighlighter, profiler: createRaytracerProfilerPort(nowMs), profileOnStartup: options.profileEnabled ?? false, initialModel: { diff --git a/src/app/workspace/directory-change-failure.ts b/src/app/workspace/directory-change-failure.ts new file mode 100644 index 00000000..a010e542 --- /dev/null +++ b/src/app/workspace/directory-change-failure.ts @@ -0,0 +1,22 @@ +import type { Cmd } from '@flyingrobots/bijou-tui'; +import type { DirectoryAction, FileSystemPort } from '../../ports/file-system.js'; +import { createNotificationTickCmd, pushErrorToast } from '../../ui/feedback.js'; +import type { WorkspaceModel } from './model.js'; +import { WorkspaceMessageTypes, type WorkspaceMsg } from './msg.js'; + +export interface DirectoryExpansionContext { + readonly fileSystem: FileSystemPort; + readonly nowMs: () => number; +} + +export function directoryChangeFailure( + model: WorkspaceModel, + path: string, + action: DirectoryAction, + cause: Error | string, + context: DirectoryExpansionContext, +): [WorkspaceModel, Cmd[]] { + const issue = context.fileSystem.describeDirectoryIssue(action, path, cause); + return pushErrorToast(model, issue.title, issue.message, context.nowMs(), + () => createNotificationTickCmd((atMs: number): WorkspaceMsg => ({ type: WorkspaceMessageTypes.NotificationTick, atMs }))); +} diff --git a/src/app/workspace/file-explorer-pointer.ts b/src/app/workspace/file-explorer-pointer.ts new file mode 100644 index 00000000..166ee664 --- /dev/null +++ b/src/app/workspace/file-explorer-pointer.ts @@ -0,0 +1,106 @@ +import type { Cmd, MouseMsg } from '@flyingrobots/bijou-tui'; +import { fileSearchCursorAtColumn } from '../../ui/file-search-input.js'; +import { fileSearchInputOptions, fileFilterPromptWidth, fileFilterPromptX } from '../../ui/workspace-file-filter-prompt.js'; +import { resolveWorkspaceLayout } from '../../ui/drawer-layout.js'; +import { FocusPanes } from '../../ui/panel-focus.js'; +import { fileSearchEntries, fileSearchState } from './file-search.js'; +import { DRAWER_INNER_PAD, listScrollOffset, workspaceBodyHeight, WORKSPACE_BODY_TOP_OFFSET, + FILE_SEARCH_ROW, FILE_SEARCH_LIST_TOP, fileSearchListHeight, workspaceFooterRows } from './viewport.js'; +import { toggleFileTreeDirectory } from './file-tree-expansion.js'; +import type { DirectoryExpansionContext } from './directory-change-failure.js'; +import type { WorkspaceModel } from './model.js'; +import type { WorkspaceMsg } from './msg.js'; + +const MOUSE_PRESS = 'press'; +const MOUSE_MOVE = 'move'; +const MOUSE_BUTTON_LEFT = 'left'; + +export function updateFileExplorerPointer( + msg: MouseMsg, + model: WorkspaceModel, + context?: DirectoryExpansionContext, +): [WorkspaceModel, Cmd[]] | undefined { + const hover = updateFileDrawerHover(msg, model); + if (hover != null) return [hover, []]; + const input = updateFooterFilterFromClick(msg, model) ?? updateFileSearchFromClick(msg, model); + if (input != null) return [input, []]; + const clicked = updateFileDrawerFromClick(msg, model); + if (clicked == null) return undefined; + return context == null ? [clicked, []] : toggleFileTreeDirectory(clicked, context); +} + +function updateFileDrawerFromClick( + msg: MouseMsg, + model: WorkspaceModel, +): WorkspaceModel | undefined { + if (msg.action !== MOUSE_PRESS || msg.button !== MOUSE_BUTTON_LEFT) { + return undefined; + } + const index = fileDrawerEntryIndexAt(msg, model); + return index == null + ? undefined + : { ...model, focusPane: FocusPanes.Files, selectedIndex: index, fileSearchEditing: false }; +} + +function fileDrawerEntryIndexAt( + msg: MouseMsg, + model: WorkspaceModel, +): number | undefined { + if (!fileDrawerPointerEnabled(model)) { + return undefined; + } + const drawer = resolveWorkspaceLayout( + model.columns, + model.fileDrawerProgress, + model.graftDrawerProgress, + ).fileDrawer; + const withinDrawer = drawer.width > 0 + && msg.col >= drawer.x + DRAWER_INNER_PAD + && msg.col < (drawer.x + drawer.width) - DRAWER_INNER_PAD; + if (!withinDrawer) { + return undefined; + } + const row = msg.row - WORKSPACE_BODY_TOP_OFFSET - FILE_SEARCH_LIST_TOP; + const listHeight = fileSearchListHeight(workspaceBodyHeight(model)); + if (row < 0 || row >= listHeight) { + return undefined; + } + const entries = fileSearchEntries(model); + const position = entries.findIndex(({ index }) => index === model.selectedIndex); + const index = row + listScrollOffset( + position, + entries.length, + listHeight, + ); + return entries[index]?.index; +} + +function updateFileDrawerHover(msg: MouseMsg, model: WorkspaceModel): WorkspaceModel | undefined { + if (msg.action !== MOUSE_MOVE) return undefined; + const index = fileDrawerEntryIndexAt(msg, model); + return model.fileHoveredIndex === index ? model : { ...model, fileHoveredIndex: index }; +} + +function fileDrawerPointerEnabled(model: WorkspaceModel): boolean { + return model.fileDrawerOpen && !model.settingsOpen && !model.quitConfirmOpen && + !model.startupFileModalOpen && !model.commandLine?.active; +} + +function updateFileSearchFromClick(msg: MouseMsg, model: WorkspaceModel): WorkspaceModel | undefined { + if (msg.action !== MOUSE_PRESS || msg.button !== MOUSE_BUTTON_LEFT || !fileDrawerPointerEnabled(model)) return undefined; + if (msg.row !== WORKSPACE_BODY_TOP_OFFSET + FILE_SEARCH_ROW) return undefined; + if (fileSearchState(model).input.length === 0) return undefined; + const layout = resolveWorkspaceLayout(model.columns, model.fileDrawerProgress, model.graftDrawerProgress).fileDrawer; + if (msg.col <= layout.x || msg.col >= layout.x + layout.width - DRAWER_INNER_PAD) return undefined; + return { ...model, focusPane: FocusPanes.Files, fileSearchEditing: true }; +} + +function updateFooterFilterFromClick(msg: MouseMsg, model: WorkspaceModel): WorkspaceModel | undefined { + if (!model.fileSearchEditing || !fileDrawerPointerEnabled(model)) return undefined; + if (msg.action !== MOUSE_PRESS || msg.button !== MOUSE_BUTTON_LEFT || msg.row !== model.rows - workspaceFooterRows(model)) return undefined; + const width = fileFilterPromptWidth(model); + const column = msg.col - fileFilterPromptX(model); + if (column < 0 || column >= width) return undefined; + return { ...model, fileSearch: { ...fileSearchState(model), + cursorIndex: fileSearchCursorAtColumn(fileSearchInputOptions(model, width), column) } }; +} diff --git a/src/app/workspace/file-explorer-preview-view.ts b/src/app/workspace/file-explorer-preview-view.ts index 89debbd0..1d604647 100644 --- a/src/app/workspace/file-explorer-preview-view.ts +++ b/src/app/workspace/file-explorer-preview-view.ts @@ -1,3 +1,5 @@ +import { paintPreviewSyntax } from '../../ui/file-preview-syntax.js'; +import { filePreviewSourceLines } from './file-preview-syntax.js'; import { createSurface, stringToSurface, type Surface } from '@flyingrobots/bijou'; import { FilePreviewKinds, type FilePreviewResult } from '../../ports/file-preview.js'; import { fitBlock } from '../../ui/workspace-render.js'; @@ -14,8 +16,6 @@ const PREVIEW_LOADING = 'fileExplorer.preview_loading'; const PREVIEW_BINARY = 'fileExplorer.preview_binary'; const PREVIEW_UNAVAILABLE = 'fileExplorer.preview_unavailable'; const PREVIEW_TRUNCATED = 'fileExplorer.preview_truncated'; -const TAB_SPACES = ' '; -const UNSAFE_CONTROLS = /[\p{Cc}\p{Cf}]/gu; export function renderFileExplorerPreview(model: WorkspaceModel, width: number, height: number): Surface | undefined { if (!fileExplorerHasFocus(model)) return undefined; @@ -34,6 +34,12 @@ export function renderFileExplorerPreview(model: WorkspaceModel, width: number, const body = stringToSurface(fitBlock(lines.join('\n'), innerWidth, bodyHeight), innerWidth, bodyHeight); applyBackground(body, model.jeditTheme.surface.workspace); surface.blit(body, PREVIEW_PAD, PREVIEW_BODY_TOP); + if (result?.kind === FilePreviewKinds.Loaded) { + const offset = result.truncated ? 1 : 0; + paintPreviewSyntax(surface, filePreviewSourceLines(result.lines), model.fileExplorerPreview?.highlight, { + x: PREVIEW_PAD, y: PREVIEW_BODY_TOP + offset, width: innerWidth, height: Math.max(0, bodyHeight - offset), theme: model.jeditTheme, + }); + } return surface; } @@ -41,6 +47,6 @@ function previewLines(model: WorkspaceModel, result: FilePreviewResult | undefin if (result == null) return [model.i18n.t(PREVIEW_LOADING)]; if (result.kind === FilePreviewKinds.Binary) return [model.i18n.t(PREVIEW_BINARY)]; if (result.kind === FilePreviewKinds.Unavailable) return [model.i18n.t(PREVIEW_UNAVAILABLE)]; - const lines = result.lines.map((line) => line.replaceAll('\t', TAB_SPACES).replace(UNSAFE_CONTROLS, '')); + const lines = filePreviewSourceLines(result.lines); return result.truncated ? [model.i18n.t(PREVIEW_TRUNCATED), ...lines] : lines; } diff --git a/src/app/workspace/file-explorer-preview.ts b/src/app/workspace/file-explorer-preview.ts index 16591f03..d5cf845e 100644 --- a/src/app/workspace/file-explorer-preview.ts +++ b/src/app/workspace/file-explorer-preview.ts @@ -1,3 +1,5 @@ +import type { PreviewHighlighter, SourceHighlightReading } from '../../ports/source-highlighter.js'; +import { highlightFilePreview } from './file-preview-syntax.js'; import type { Cmd } from '@flyingrobots/bijou-tui'; import { FilePreviewKinds, FILE_PREVIEW_MAX_LINES, type FilePreviewSource, type FilePreviewResult } from '../../ports/file-preview.js'; import { FileEntryKinds, type FileEntry } from '../../ports/file-system.js'; @@ -10,6 +12,7 @@ export interface FileExplorerPreview { readonly requestId: number; readonly entry: FileEntry; readonly result?: FilePreviewResult; + readonly highlight?: SourceHighlightReading; } export interface FileExplorerPreviewMessage extends FileExplorerPreview { @@ -18,15 +21,16 @@ export interface FileExplorerPreviewMessage extends FileExplorerPreview { type Result = [WorkspaceModel, Cmd[]]; -export function synchronizeFileExplorerPreview(result: Result, source: FilePreviewSource | undefined): Result { +export function synchronizeFileExplorerPreview(result: Result, source: FilePreviewSource | undefined, highlighter?: PreviewHighlighter): Result { const [model, commands] = result; const entry = fileExplorerHasFocus(model) ? selectedFileSearchEntry(model) : undefined; if (entry?.kind !== FileEntryKinds.File) return clearFileExplorerPreview(result); - if (model.fileExplorerPreview?.entry === entry || source == null) return result; + if (model.fileExplorerPreview?.entry === entry) return result; const requestId = (model.fileExplorerPreviewRequestId ?? 0) + 1; const preview = { requestId, entry, result: bufferPreview(model, entry.path) }; + if (preview.result == null && source == null) return result; const next = { ...model, fileExplorerPreviewRequestId: requestId, fileExplorerPreview: preview }; - return preview.result != null ? [next, commands] : [next, [...commands, loadPreviewCmd(preview, source)]]; + return [next, [...commands, ...previewLoadCommands(preview, source, highlighter)]]; } export function applyFileExplorerPreview(model: WorkspaceModel, msg: FileExplorerPreviewMessage): WorkspaceModel { @@ -50,11 +54,16 @@ function bufferPreview(model: WorkspaceModel, path: string): FilePreviewResult | }; } -function loadPreviewCmd(preview: FileExplorerPreview, source: FilePreviewSource): Cmd { - return () => { +function loadPreviewCmd(preview: FileExplorerPreview, source: FilePreviewSource | undefined, highlighter?: PreviewHighlighter): Cmd { + return async () => { let result: FilePreviewResult; - try { result = source.loadFilePreview(preview.entry.path); } + try { result = preview.result ?? source?.loadFilePreview(preview.entry.path) ?? { kind: FilePreviewKinds.Unavailable }; } catch { result = { kind: FilePreviewKinds.Unavailable }; } - return { type: WorkspaceMessageTypes.FileExplorerPreviewResult, ...preview, result }; + return { type: WorkspaceMessageTypes.FileExplorerPreviewResult, ...preview, result, + highlight: await highlightFilePreview(preview.entry.path, result, highlighter) }; }; } + +function previewLoadCommands(preview: FileExplorerPreview, source: FilePreviewSource | undefined, highlighter?: PreviewHighlighter): Cmd[] { + return preview.result != null && highlighter == null ? [] : [loadPreviewCmd(preview, source, highlighter)]; +} diff --git a/src/app/workspace/file-explorer-view.ts b/src/app/workspace/file-explorer-view.ts index 82379fdc..0a1a0c80 100644 --- a/src/app/workspace/file-explorer-view.ts +++ b/src/app/workspace/file-explorer-view.ts @@ -36,8 +36,8 @@ function paintFileSearchResults(surface: Surface, model: WorkspaceModel, width: const offset = listScrollOffset(selected, entries.length, height); const lines = entries.length === 0 ? [model.i18n.t(SEARCH_EMPTY_KEY)] - : entries.slice(offset, offset + height).map(({ entry, index }) => formatTreeLine(entry, { - selected: index === model.selectedIndex, + : entries.slice(offset, offset + height).map(({ entry, index, depth, expanded }) => formatTreeLine(entry, { + selected: index === model.selectedIndex, depth, expanded, })); const content = stringToSurface(fitBlock(lines.join('\n'), width, height), width, height); applyBackground(content, model.jeditTheme.surface.drawer); diff --git a/src/app/workspace/file-preview-syntax.ts b/src/app/workspace/file-preview-syntax.ts new file mode 100644 index 00000000..2478985b --- /dev/null +++ b/src/app/workspace/file-preview-syntax.ts @@ -0,0 +1,22 @@ +import type { PreviewHighlighter, SourceHighlightReading } from '../../ports/source-highlighter.js'; +import { FilePreviewKinds, type FilePreviewResult } from '../../ports/file-preview.js'; + +const TAB_SPACES = ' '; +const UNSAFE_CONTROLS = /[\p{Cc}\p{Cf}]/gu; + +export function filePreviewSourceLines(lines: readonly string[]): readonly string[] { + return lines.map((line) => line.replaceAll('\t', TAB_SPACES).replace(UNSAFE_CONTROLS, '')); +} + +export async function highlightFilePreview( + path: string, + result: FilePreviewResult, + highlighter: PreviewHighlighter | undefined, +): Promise { + if (result.kind !== FilePreviewKinds.Loaded || highlighter == null) return undefined; + const lines = filePreviewSourceLines(result.lines); + try { + const highlight = await highlighter.highlightPreview({ path, text: lines.join('\n'), startLine: 0, lineCount: lines.length }); + return highlight.path === path ? highlight : undefined; + } catch { return undefined; } +} diff --git a/src/app/workspace/file-search.ts b/src/app/workspace/file-search.ts index 055901a2..f95317ab 100644 --- a/src/app/workspace/file-search.ts +++ b/src/app/workspace/file-search.ts @@ -14,6 +14,9 @@ export interface FileSearchEntry { readonly entry: FileEntry; readonly index: number; readonly matchIndexes: readonly number[]; + readonly depth?: number; + readonly expanded?: boolean; + readonly matchesQuery?: boolean; } export const EMPTY_FILE_SEARCH: FileSearchState = Object.freeze({ input: '', cursorIndex: 0 }); @@ -33,17 +36,35 @@ export function fileSearchHasFocus(model: WorkspaceModel): boolean { return fileExplorerHasFocus(model) && model.fileSearchEditing === true; } -export function fileSearchEntries(model: Pick): readonly FileSearchEntry[] { +type FileSearchModel = Pick; + +export function fileSearchEntries(model: FileSearchModel): readonly FileSearchEntry[] { const query = fileSearchState(model).input.toLowerCase(); - return model.entries.flatMap((entry, index) => { - if (query.length === 0) return [{ entry, index, matchIndexes: [] }]; + const matches = model.entries.flatMap((entry, index) => { + if (query.length === 0) return [{ entry, index, matchIndexes: [], matchesQuery: true }]; if (entry.kind === FileEntryKinds.Parent) return []; const path = fuzzyPathMatches(entry.name, query) != null ? entry.name : relativeFilePath(model.workspaceSearchRoot ?? model.workspaceRoot, entry); const matches = fuzzyPathMatches(path, query); if (matches == null) return []; const nameStart = Array.from(path).length - Array.from(entry.name).length; - return [{ entry, index, matchIndexes: matches.filter((offset) => offset >= nameStart).map((offset) => offset - nameStart) }]; + return [{ entry, index, matchesQuery: true, matchIndexes: matches.filter((offset) => offset >= nameStart).map((offset) => offset - nameStart) }]; }); + return withTreeAncestors(model, matches); +} + +function withTreeAncestors(model: FileSearchModel, matches: readonly FileSearchEntry[]): readonly FileSearchEntry[] { + const rows = new Map(matches.map((row) => [row.entry.path, row])); + const included = new Set(rows.keys()); + for (const match of matches) { + let parent = model.fileTree?.[match.entry.path]?.parentPath; + while (parent != null && !included.has(parent)) { + included.add(parent); + parent = model.fileTree?.[parent]?.parentPath; + } + } + return model.entries.flatMap((entry, index) => included.has(entry.path) + ? [{ ...(rows.get(entry.path) ?? { entry, index, matchIndexes: [], matchesQuery: false }), ...model.fileTree?.[entry.path] }] + : []); } function relativeFilePath(root: string, entry: FileEntry): string { @@ -74,7 +95,7 @@ export function selectedFileSearchEntry(model: WorkspaceModel): FileEntry | unde export function fileSearchWithInput(model: WorkspaceModel, search: FileSearchState): WorkspaceModel { const next = { ...model, fileSearch: search, fileHoveredIndex: undefined }; - return { ...next, selectedIndex: fileSearchEntries(next)[0]?.index ?? NO_SELECTION }; + return { ...next, selectedIndex: fileSearchEntries(next).find((row) => row.matchesQuery !== false)?.index ?? NO_SELECTION }; } export function moveFileSearchSelection(model: WorkspaceModel, delta: number): WorkspaceModel { diff --git a/src/app/workspace/file-tree-expansion.ts b/src/app/workspace/file-tree-expansion.ts new file mode 100644 index 00000000..a5582fb6 --- /dev/null +++ b/src/app/workspace/file-tree-expansion.ts @@ -0,0 +1,97 @@ +import type { Cmd, KeyMsg } from '@flyingrobots/bijou-tui'; +import { DIRECTORY_ACTION_OPEN, FileEntryKinds } from '../../ports/file-system.js'; +import { directoryChangeFailure, type DirectoryExpansionContext } from './directory-change-failure.js'; +import { fileSearchEntries, selectedFileSearchEntry } from './file-search.js'; +import type { WorkspaceModel } from './model.js'; +import type { WorkspaceMsg } from './msg.js'; +import { WorkspaceKeys } from './workspace-key.js'; + +export interface FileTreeNode { + readonly depth: number; + readonly parentPath?: string; + readonly expanded: boolean; +} +const CHILD_DEPTH = 1; +const FIRST_CHILD_OFFSET = 1; +const NO_SELECTION = -1; +const COLLAPSE_KEYS = new Set([WorkspaceKeys.ArrowLeft, WorkspaceKeys.H]); +const TOGGLE_KEYS = new Set([WorkspaceKeys.Enter, WorkspaceKeys.Return]); +const EXPAND_KEYS = new Set([WorkspaceKeys.ArrowRight, WorkspaceKeys.L]); +type Result = [WorkspaceModel, Cmd[]]; + +export function toggleFileTreeDirectory(model: WorkspaceModel, context: DirectoryExpansionContext): Result { + const entry = selectedFileSearchEntry(model); + if (entry?.kind !== FileEntryKinds.Directory) return [model, []]; + if (model.fileTree?.[entry.path]?.expanded) return [collapseDirectory(model), []]; + try { return [expandDirectory(model, context), []]; } + catch (cause) { + return directoryChangeFailure(model, entry.path, DIRECTORY_ACTION_OPEN, cause instanceof Error ? cause : String(cause), context); + } +} + +export function updateInlineDirectoryKey(msg: KeyMsg, model: WorkspaceModel, context: DirectoryExpansionContext): Result | undefined { + const entry = selectedFileSearchEntry(model); + if (entry == null) return undefined; + if (COLLAPSE_KEYS.has(msg.key)) return collapseOrParent(model); + if (entry.kind !== FileEntryKinds.Directory) return undefined; + if (TOGGLE_KEYS.has(msg.key)) return toggleFileTreeDirectory(model, context); + if (!EXPAND_KEYS.has(msg.key)) return undefined; + return expandOrEnterChild(model, context); +} + +function expandOrEnterChild(model: WorkspaceModel, context: DirectoryExpansionContext): Result { + const entry = model.entries[model.selectedIndex]; + if (entry == null) return [model, []]; + if (!model.fileTree?.[entry.path]?.expanded) return toggleFileTreeDirectory(model, context); + const child = fileSearchEntries(model).find((row) => row.index > model.selectedIndex); + const parentPath = child == null ? undefined : model.fileTree?.[child.entry.path]?.parentPath; + return [parentPath === entry.path && child != null ? { ...model, selectedIndex: child.index } : model, []]; +} + +function collapseOrParent(model: WorkspaceModel): Result | undefined { + const entry = selectedFileSearchEntry(model); + if (entry == null) return undefined; + const node = model.fileTree?.[entry.path]; + if (node?.expanded) return [collapseDirectory(model), []]; + const parent = model.entries.findIndex((candidate) => candidate.path === node?.parentPath); + return parent < 0 ? undefined : [{ ...model, selectedIndex: parent, fileHoveredIndex: undefined }, []]; +} + +function expandDirectory(model: WorkspaceModel, context: DirectoryExpansionContext): WorkspaceModel { + const entry = model.entries[model.selectedIndex]; + if (entry == null) return model; + const node = model.fileTree?.[entry.path] ?? { depth: 0, expanded: false }; + const paths = new Set(model.entries.map((row) => row.path)); + const children = context.fileSystem.loadEntries(entry.path).filter((row) => row.kind !== FileEntryKinds.Parent && !paths.has(row.path)); + const fileTree = { ...model.fileTree, [entry.path]: { ...node, expanded: true } }; + for (const child of children) fileTree[child.path] = { depth: node.depth + CHILD_DEPTH, parentPath: entry.path, expanded: false }; + const entries = [...model.entries.slice(0, model.selectedIndex + FIRST_CHILD_OFFSET), ...children, + ...model.entries.slice(model.selectedIndex + FIRST_CHILD_OFFSET)]; + return { ...model, entries, fileTree, fileHoveredIndex: undefined }; +} + +function collapseDirectory(model: WorkspaceModel): WorkspaceModel { + const entry = model.entries[model.selectedIndex]; + if (entry == null) return model; + const node = model.fileTree?.[entry.path]; + if (node == null) return model; + const end = descendantEnd(model, node.depth); + const removed = new Set(model.entries.slice(model.selectedIndex + FIRST_CHILD_OFFSET, end).map((row) => row.path)); + const fileTree = Object.fromEntries(Object.entries(model.fileTree ?? {}).filter(([path]) => !removed.has(path))); + fileTree[entry.path] = { ...node, expanded: false }; + const next = { ...model, fileTree, entries: [...model.entries.slice(0, model.selectedIndex + FIRST_CHILD_OFFSET), ...model.entries.slice(end)], + fileHoveredIndex: undefined }; + const visible = fileSearchEntries(next); + return { ...next, selectedIndex: visible.some((row) => row.index === model.selectedIndex) ? model.selectedIndex : visible[0]?.index ?? NO_SELECTION }; +} + +function descendantEnd(model: WorkspaceModel, depth: number): number { + let end = model.selectedIndex + FIRST_CHILD_OFFSET; + while (end < model.entries.length && rowDepth(model, end) > depth) end += FIRST_CHILD_OFFSET; + return end; +} + +function rowDepth(model: WorkspaceModel, index: number): number { + const path = model.entries[index]?.path; + return path == null ? 0 : model.fileTree?.[path]?.depth ?? 0; +} diff --git a/src/app/workspace/file-tree.ts b/src/app/workspace/file-tree.ts index 139df40d..f5b06213 100644 --- a/src/app/workspace/file-tree.ts +++ b/src/app/workspace/file-tree.ts @@ -9,13 +9,14 @@ import { import type { EditorFilePort } from '../../ports/editor-file.js'; import type { GraftSessionPort } from '../../ports/graft-session.js'; import type { SourceHighlighter } from '../../ports/source-highlighter.js'; -import { createNotificationTickCmd, pushErrorToast } from '../../ui/feedback.js'; +import { directoryChangeFailure } from './directory-change-failure.js'; +import { updateInlineDirectoryKey } from './file-tree-expansion.js'; import { withFocusPane } from './focus.js'; import { isWorkspaceMarkdownFile } from './editor-session.js'; import { ViewModes } from './view-mode.js'; import { FocusPanes } from '../../ui/panel-focus.js'; import type { WorkspaceModel } from './model.js'; -import { WorkspaceMessageTypes, type WorkspaceMsg } from './msg.js'; +import type { WorkspaceMsg } from './msg.js'; import type { ProductionTextSession } from './production-text-session.js'; import { createWorkspaceTextOpenCmd, defaultWorkspaceTextAperture } from './workspace-text-commands.js'; import { pendingWorkspaceTextOpen } from './workspace-text-authority.js'; @@ -60,6 +61,8 @@ export function updateTreeFromKey( return [navigation, []]; } + const inline = updateInlineDirectoryKey(msg, model, { fileSystem: deps.fileSystem, nowMs }); + if (inline != null) return inline; if (isWorkspaceRefreshKey(msg)) { return changeDirectory(model, model.cwd, DIRECTORY_ACTION_REFRESH, nowMs, deps.fileSystem); } @@ -172,6 +175,8 @@ function openDirectory( ...model, cwd, entries: fileSystem.loadEntries(cwd), + fileTree: undefined, + fileHoveredIndex: undefined, selectedIndex: 0, }, cwd === model.cwd ? fileSearchState(model) : EMPTY_FILE_SEARCH); } @@ -186,17 +191,7 @@ function changeDirectory( try { return [openDirectory(model, cwd, fileSystem), []]; } catch (cause) { - const issue = fileSystem.describeDirectoryIssue(action, cwd, cause instanceof Error ? cause : String(cause)); - return pushErrorToast( - model, - issue.title, - issue.message, - nowMs(), - () => createNotificationTickCmd((atMs: number): WorkspaceMsg => ({ - type: WorkspaceMessageTypes.NotificationTick, - atMs, - })), - ); + return directoryChangeFailure(model, cwd, action, cause instanceof Error ? cause : String(cause), { fileSystem, nowMs }); } } diff --git a/src/app/workspace/model.ts b/src/app/workspace/model.ts index 871c44ed..a296e543 100644 --- a/src/app/workspace/model.ts +++ b/src/app/workspace/model.ts @@ -1,3 +1,4 @@ +import type { FileTreeNode } from './file-tree-expansion.js'; import type { FilepathStyle } from '../../ports/filepath-style.js'; import type { FooterLayout } from '../../ports/footer-preferences.js'; import type { NotificationState } from "@flyingrobots/bijou-tui"; @@ -35,6 +36,7 @@ export interface WorkspaceModel readonly cwd: string; readonly entries: readonly FileEntry[]; readonly selectedIndex: number; + readonly fileTree?: Readonly>; readonly fileSearch: FileSearchState; readonly fileSearchEditing: boolean; readonly fileHoveredIndex?: number; diff --git a/src/app/workspace/mouse.ts b/src/app/workspace/mouse.ts index 5dc5899e..86538305 100644 --- a/src/app/workspace/mouse.ts +++ b/src/app/workspace/mouse.ts @@ -1,5 +1,5 @@ -import { fileSearchCursorAtColumn } from '../../ui/file-search-input.js'; -import { fileSearchInputOptions, fileFilterPromptWidth, fileFilterPromptX } from '../../ui/workspace-file-filter-prompt.js'; +import { updateFileExplorerPointer } from './file-explorer-pointer.js'; +import type { DirectoryExpansionContext } from './directory-change-failure.js'; import type { Cmd, MouseMsg } from '@flyingrobots/bijou-tui'; import { mouseScrollDeltaRows, @@ -13,38 +13,19 @@ import { editorViewport } from './editor-session.js'; import { settingsRows } from './settings.js'; import type { SourceHighlighter } from '../../ports/source-highlighter.js'; import { ViewModes } from './view-mode.js'; -import { resolveWorkspaceLayout } from '../../ui/drawer-layout.js'; -import { - DRAWER_INNER_PAD, - listScrollOffset, - workspaceBodyHeight, - WORKSPACE_BODY_TOP_OFFSET, - FILE_SEARCH_ROW, - FILE_SEARCH_LIST_TOP, - fileSearchListHeight, - workspaceFooterRows, -} from './viewport.js'; import { FocusPanes } from '../../ui/panel-focus.js'; import { beginWorkspaceSourceHighlightRefresh } from './workspace-source-highlight.js'; -import { fileSearchEntries, fileSearchState, scrollFileSearchSelection } from './file-search.js'; +import { scrollFileSearchSelection } from './file-search.js'; -const MOUSE_PRESS = 'press'; -const MOUSE_MOVE = 'move'; -const MOUSE_BUTTON_LEFT = 'left'; export function updateFromMouse( msg: MouseMsg, model: WorkspaceModel, sourceHighlighter: SourceHighlighter, + directoryContext?: DirectoryExpansionContext, ): [WorkspaceModel, Cmd[]] { - const hover = updateFileDrawerHover(msg, model); - if (hover != null) return [hover, []]; - const input = updateFooterFilterFromClick(msg, model) ?? updateFileSearchFromClick(msg, model); - if (input != null) return [input, []]; - const clicked = updateFileDrawerFromClick(msg, model); - if (clicked != null) { - return [clicked, []]; - } + const pointer = updateFileExplorerPointer(msg, model, directoryContext); + if (pointer != null) return pointer; const deltaRows = mouseScrollDeltaRows(msg); if (deltaRows === 0) { return [model, []]; @@ -60,58 +41,6 @@ export function updateFromMouse( // (layout.fileDrawer.x, WORKSPACE_BODY_TOP_OFFSET) and its content is inset by // DRAWER_INNER_PAD. Filtered positions map through the scroll offset back to // original entry indexes. -function updateFileDrawerFromClick( - msg: MouseMsg, - model: WorkspaceModel, -): WorkspaceModel | undefined { - if (msg.action !== MOUSE_PRESS || msg.button !== MOUSE_BUTTON_LEFT) { - return undefined; - } - const index = fileDrawerEntryIndexAt(msg, model); - return index == null - ? undefined - : { ...model, focusPane: FocusPanes.Files, selectedIndex: index, fileSearchEditing: false }; -} - -function fileDrawerEntryIndexAt( - msg: MouseMsg, - model: WorkspaceModel, -): number | undefined { - if (!fileDrawerPointerEnabled(model)) { - return undefined; - } - const drawer = resolveWorkspaceLayout( - model.columns, - model.fileDrawerProgress, - model.graftDrawerProgress, - ).fileDrawer; - const withinDrawer = drawer.width > 0 - && msg.col >= drawer.x + DRAWER_INNER_PAD - && msg.col < (drawer.x + drawer.width) - DRAWER_INNER_PAD; - if (!withinDrawer) { - return undefined; - } - const row = msg.row - WORKSPACE_BODY_TOP_OFFSET - FILE_SEARCH_LIST_TOP; - const listHeight = fileSearchListHeight(workspaceBodyHeight(model)); - if (row < 0 || row >= listHeight) { - return undefined; - } - const entries = fileSearchEntries(model); - const position = entries.findIndex(({ index }) => index === model.selectedIndex); - const index = row + listScrollOffset( - position, - entries.length, - listHeight, - ); - return entries[index]?.index; -} - -function updateFileDrawerHover(msg: MouseMsg, model: WorkspaceModel): WorkspaceModel | undefined { - if (msg.action !== MOUSE_MOVE) return undefined; - const index = fileDrawerEntryIndexAt(msg, model); - return model.fileHoveredIndex === index ? model : { ...model, fileHoveredIndex: index }; -} - function updateScrollableDrawerFromMouse(model: WorkspaceModel, deltaRows: number): WorkspaceModel | undefined { if (model.settingsOpen) { return { @@ -131,20 +60,6 @@ function updateScrollableDrawerFromMouse(model: WorkspaceModel, deltaRows: numbe return undefined; } -function fileDrawerPointerEnabled(model: WorkspaceModel): boolean { - return model.fileDrawerOpen && !model.settingsOpen && !model.quitConfirmOpen && - !model.startupFileModalOpen && !model.commandLine?.active; -} - -function updateFileSearchFromClick(msg: MouseMsg, model: WorkspaceModel): WorkspaceModel | undefined { - if (msg.action !== MOUSE_PRESS || msg.button !== MOUSE_BUTTON_LEFT || !fileDrawerPointerEnabled(model)) return undefined; - if (msg.row !== WORKSPACE_BODY_TOP_OFFSET + FILE_SEARCH_ROW) return undefined; - if (fileSearchState(model).input.length === 0) return undefined; - const layout = resolveWorkspaceLayout(model.columns, model.fileDrawerProgress, model.graftDrawerProgress).fileDrawer; - if (msg.col <= layout.x || msg.col >= layout.x + layout.width - DRAWER_INNER_PAD) return undefined; - return { ...model, focusPane: FocusPanes.Files, fileSearchEditing: true }; -} - function updateEditorFromMouse( model: WorkspaceModel, deltaRows: number, @@ -164,13 +79,3 @@ function updateEditorFromMouse( function graftOutlineLength(model: WorkspaceModel): number { return model.graftInfo?.outlineItems.length ?? 0; } - -function updateFooterFilterFromClick(msg: MouseMsg, model: WorkspaceModel): WorkspaceModel | undefined { - if (!model.fileSearchEditing || !fileDrawerPointerEnabled(model)) return undefined; - if (msg.action !== MOUSE_PRESS || msg.button !== MOUSE_BUTTON_LEFT || msg.row !== model.rows - workspaceFooterRows(model)) return undefined; - const width = fileFilterPromptWidth(model); - const column = msg.col - fileFilterPromptX(model); - if (column < 0 || column >= width) return undefined; - return { ...model, fileSearch: { ...fileSearchState(model), - cursorIndex: fileSearchCursorAtColumn(fileSearchInputOptions(model, width), column) } }; -} diff --git a/src/app/workspace/runtime.ts b/src/app/workspace/runtime.ts index 62b7d907..02f84659 100644 --- a/src/app/workspace/runtime.ts +++ b/src/app/workspace/runtime.ts @@ -87,7 +87,7 @@ function updateWorkspaceRuntime( ): WorkspaceRuntimeResult { return synchronizeFileExplorerPreview(syncWorkspaceRuntimeResult( rebaseFrameClock(deps, model, updateWorkspaceRuntimeState(deps, msg, model)), - ), deps.filePreviewSource); + ), deps.filePreviewSource, deps.previewHighlighter); } // While the workspace is idle the tick handler returns the model untouched, so @@ -402,6 +402,7 @@ function updateWorkspaceInputMessage( msg, model, deps.sourceHighlighter, + { fileSystem: deps.fileSystem, nowMs: deps.nowMs }, ); } return msg.type === WorkspaceInputMessageTypes.Key diff --git a/src/app/workspace/workspace-runtime-dependencies.ts b/src/app/workspace/workspace-runtime-dependencies.ts index 02911fa0..22987d87 100644 --- a/src/app/workspace/workspace-runtime-dependencies.ts +++ b/src/app/workspace/workspace-runtime-dependencies.ts @@ -6,7 +6,7 @@ import type { EditorFilePort } from '../../ports/editor-file.js'; import type { FileSystemPort } from '../../ports/file-system.js'; import type { GraftDiagnosticsPort } from '../../ports/graft-diagnostics.js'; import type { GraftSessionPort } from '../../ports/graft-session.js'; -import type { SourceHighlighter } from '../../ports/source-highlighter.js'; +import type { SourceHighlighter, PreviewHighlighter } from '../../ports/source-highlighter.js'; import type { WorkspaceInitialModelSnapshot } from './init.js'; import type { CreateStartupFileDrawerAnimationCmd } from './key-binding-context.js'; import type { WorkspaceModel } from './model.js'; @@ -22,6 +22,7 @@ export type WorkspaceResizeMsg = ResizeMsg; export interface WorkspaceRuntimeDependencies { readonly footerPreferences?: FooterPreferencesPort; readonly filePreviewSource?: FilePreviewSource; + readonly previewHighlighter?: PreviewHighlighter; readonly initialColumns: number; readonly initialRows: number; readonly initialWorkingDirectory: string; diff --git a/src/generated/i18n.ts b/src/generated/i18n.ts index bb9ba803..49cc5140 100644 --- a/src/generated/i18n.ts +++ b/src/generated/i18n.ts @@ -214,47 +214,47 @@ export interface LocaleMetadata { readonly direction: LocaleDirection; } -export const en: TranslationSchema = {"footer":{"mode":{"browse":"browse","insert":"insert","normal":"normal","preview":"preview","settings":"settings","files":"files","graft":"graft","history":"history"},"context":{"settings":"settings","graft_empty":"open a file to inspect it","history_empty":"no Echo evidence yet","history_count":"Echo evidence: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k move","enter_change":"enter change","f2_close":"f2 close","esc_close":"esc close","j_k_scroll":"j/k scroll","f3_source":"f3 source","f3_preview":"f3 preview","text_input":"text input","esc_normal":"esc normal","ctrl_s_save":"ctrl+s save","ctrl_t_theme":"ctrl+t theme","tab_focus":"tab focus","tab_indent":"tab indent","ctrl_b_files":"ctrl+b files","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h history","enter_open":"enter open","backspace_up":"backspace up","ctrl_b_close":"ctrl+b close","enter_jump":"enter jump","r_refresh":"r refresh","ctrl_g_close":"ctrl+g close","ctrl_h_close":"ctrl+h close","i_insert":"i insert","o_open_line":"o open line","cc_line":"cc line","cw_word":"cw word","ce_word_end":"ce word-end","c0_start":"c0 start","c_end":"c$ end","dd_line":"dd line","dw_word":"dw word","de_word_end":"de word-end","d0_start":"d0 start","d_end":"d$ end","yy_line":"yy line","yw_word":"yw word","ye_word_end":"ye word-end","y0_start":"y0 start","y_end":"y$ end","gg_top":"gg top","esc_cancel":"esc cancel","type_filter":"type filter","arrows_select":"↑/↓ select","slash_filter":"/ filter"},"evidence":{"head":"head","tick":"tick","anchor":"anchor","coverage":"coverage","complete":"complete","partial":"partial","unavailable":"unavailable"},"status":{"nav":"nav","filter":"filter","read_only":"read-only","modified":"modified","modified_count":"{count} modified","pending_count":"{count} pending","buffer_count":"{count} buffers","loading":"loading"}},"history":{"title":"Echo History","empty":"No Echo evidence yet","header":"# tick kind status evidence summary"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Footer layout","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Filepaths","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Focused + workspace","footer_per_pane":"Per-pane + workspace","footer_compact":"Compact","paths_git_root":"Git root","paths_absolute":"Fully qualified"},"toast":{"changed_title":"Settings changed","save_failed_title":"Settings not saved","save_failed_message":"Could not save ~/.jimrc. Check its JSON and permissions. The setting is unchanged."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Search","placeholder":"Filter files…","empty":"No matches","preview_label":"Preview","preview_loading":"Loading preview…","preview_binary":"Binary file — preview unavailable","preview_unavailable":"Preview unavailable","preview_truncated":"Preview truncated"}}; +export const en: TranslationSchema = {"footer":{"mode":{"browse":"browse","insert":"insert","normal":"normal","preview":"preview","settings":"settings","files":"files","graft":"graft","history":"history"},"context":{"settings":"settings","graft_empty":"open a file to inspect it","history_empty":"no Echo evidence yet","history_count":"Echo evidence: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k move","enter_change":"enter change","f2_close":"f2 close","esc_close":"esc close","j_k_scroll":"j/k scroll","f3_source":"f3 source","f3_preview":"f3 preview","text_input":"text input","esc_normal":"esc normal","ctrl_s_save":"ctrl+s save","ctrl_t_theme":"ctrl+t theme","tab_focus":"tab focus","tab_indent":"tab indent","ctrl_b_files":"ctrl+b files","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h history","enter_open":"enter open / toggle","backspace_up":"backspace up","ctrl_b_close":"ctrl+b close","enter_jump":"enter jump","r_refresh":"r refresh","ctrl_g_close":"ctrl+g close","ctrl_h_close":"ctrl+h close","i_insert":"i insert","o_open_line":"o open line","cc_line":"cc line","cw_word":"cw word","ce_word_end":"ce word-end","c0_start":"c0 start","c_end":"c$ end","dd_line":"dd line","dw_word":"dw word","de_word_end":"de word-end","d0_start":"d0 start","d_end":"d$ end","yy_line":"yy line","yw_word":"yw word","ye_word_end":"ye word-end","y0_start":"y0 start","y_end":"y$ end","gg_top":"gg top","esc_cancel":"esc cancel","type_filter":"type filter","arrows_select":"↑/↓ select","slash_filter":"/ filter"},"evidence":{"head":"head","tick":"tick","anchor":"anchor","coverage":"coverage","complete":"complete","partial":"partial","unavailable":"unavailable"},"status":{"nav":"nav","filter":"filter","read_only":"read-only","modified":"modified","modified_count":"{count} modified","pending_count":"{count} pending","buffer_count":"{count} buffers","loading":"loading"}},"history":{"title":"Echo History","empty":"No Echo evidence yet","header":"# tick kind status evidence summary"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Footer layout","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Filepaths","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Focused + workspace","footer_per_pane":"Per-pane + workspace","footer_compact":"Compact","paths_git_root":"Git root","paths_absolute":"Fully qualified"},"toast":{"changed_title":"Settings changed","save_failed_title":"Settings not saved","save_failed_message":"Could not save ~/.jimrc. Check its JSON and permissions. The setting is unchanged."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Search","placeholder":"Filter files…","empty":"No matches","preview_label":"Preview","preview_loading":"Loading preview…","preview_binary":"Binary file — preview unavailable","preview_unavailable":"Preview unavailable","preview_truncated":"Preview truncated"}}; -export const fr: TranslationSchema = {"footer":{"mode":{"browse":"parcourir","insert":"insertion","normal":"normal","preview":"aperçu","settings":"paramètres","files":"fichiers","graft":"graft","history":"historique"},"context":{"settings":"paramètres","graft_empty":"ouvrez un fichier pour l'inspecter","history_empty":"pas encore de preuve Echo","history_count":"Preuves Echo : {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k déplacer","enter_change":"enter changer","f2_close":"f2 fermer","esc_close":"esc fermer","j_k_scroll":"j/k défiler","f3_source":"f3 source","f3_preview":"f3 aperçu","text_input":"saisie texte","esc_normal":"esc normal","ctrl_s_save":"ctrl+s enregistrer","ctrl_t_theme":"ctrl+t thème","tab_focus":"tab focus","tab_indent":"tab retrait","ctrl_b_files":"ctrl+b fichiers","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h historique","enter_open":"enter ouvrir","backspace_up":"backspace haut","ctrl_b_close":"ctrl+b fermer","enter_jump":"enter aller","r_refresh":"r actualiser","ctrl_g_close":"ctrl+g fermer","ctrl_h_close":"ctrl+h fermer","i_insert":"i insérer","o_open_line":"o ouvrir ligne","cc_line":"cc ligne","cw_word":"cw mot","ce_word_end":"ce fin mot","c0_start":"c0 début","c_end":"c$ fin","dd_line":"dd ligne","dw_word":"dw mot","de_word_end":"de fin mot","d0_start":"d0 début","d_end":"d$ fin","yy_line":"yy ligne","yw_word":"yw mot","ye_word_end":"ye fin mot","y0_start":"y0 début","y_end":"y$ fin","gg_top":"gg haut","esc_cancel":"esc annuler","type_filter":"saisir le filtre","arrows_select":"↑/↓ sélectionner","slash_filter":"/ filtrer"},"evidence":{"head":"tête","tick":"tick","anchor":"ancre","coverage":"couverture","complete":"complète","partial":"partielle","unavailable":"indisponible"},"status":{"nav":"navigation","filter":"filtre","read_only":"lecture seule","modified":"modifié","modified_count":"{count} modifiés","pending_count":"{count} en attente","buffer_count":"{count} tampons","loading":"chargement"}},"history":{"title":"Historique Echo","empty":"Pas encore de preuve Echo","header":"# tick type statut preuve résumé"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Disposition du pied","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Chemins","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Focus + espace","footer_per_pane":"Par panneau + espace","footer_compact":"Compact","paths_git_root":"Racine Git","paths_absolute":"Chemins absolus"},"toast":{"changed_title":"Settings changed","save_failed_title":"Réglages non enregistrés","save_failed_message":"Impossible d’enregistrer ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Recherche","placeholder":"Filtrer les fichiers…","empty":"Aucun résultat","preview_label":"Aperçu","preview_loading":"Chargement de l’aperçu…","preview_binary":"Fichier binaire — aperçu indisponible","preview_unavailable":"Aperçu indisponible","preview_truncated":"Aperçu tronqué"}}; +export const fr: TranslationSchema = {"footer":{"mode":{"browse":"parcourir","insert":"insertion","normal":"normal","preview":"aperçu","settings":"paramètres","files":"fichiers","graft":"graft","history":"historique"},"context":{"settings":"paramètres","graft_empty":"ouvrez un fichier pour l'inspecter","history_empty":"pas encore de preuve Echo","history_count":"Preuves Echo : {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k déplacer","enter_change":"enter changer","f2_close":"f2 fermer","esc_close":"esc fermer","j_k_scroll":"j/k défiler","f3_source":"f3 source","f3_preview":"f3 aperçu","text_input":"saisie texte","esc_normal":"esc normal","ctrl_s_save":"ctrl+s enregistrer","ctrl_t_theme":"ctrl+t thème","tab_focus":"tab focus","tab_indent":"tab retrait","ctrl_b_files":"ctrl+b fichiers","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h historique","enter_open":"entrée ouvrir / déplier","backspace_up":"backspace haut","ctrl_b_close":"ctrl+b fermer","enter_jump":"enter aller","r_refresh":"r actualiser","ctrl_g_close":"ctrl+g fermer","ctrl_h_close":"ctrl+h fermer","i_insert":"i insérer","o_open_line":"o ouvrir ligne","cc_line":"cc ligne","cw_word":"cw mot","ce_word_end":"ce fin mot","c0_start":"c0 début","c_end":"c$ fin","dd_line":"dd ligne","dw_word":"dw mot","de_word_end":"de fin mot","d0_start":"d0 début","d_end":"d$ fin","yy_line":"yy ligne","yw_word":"yw mot","ye_word_end":"ye fin mot","y0_start":"y0 début","y_end":"y$ fin","gg_top":"gg haut","esc_cancel":"esc annuler","type_filter":"saisir le filtre","arrows_select":"↑/↓ sélectionner","slash_filter":"/ filtrer"},"evidence":{"head":"tête","tick":"tick","anchor":"ancre","coverage":"couverture","complete":"complète","partial":"partielle","unavailable":"indisponible"},"status":{"nav":"navigation","filter":"filtre","read_only":"lecture seule","modified":"modifié","modified_count":"{count} modifiés","pending_count":"{count} en attente","buffer_count":"{count} tampons","loading":"chargement"}},"history":{"title":"Historique Echo","empty":"Pas encore de preuve Echo","header":"# tick type statut preuve résumé"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Disposition du pied","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Chemins","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Focus + espace","footer_per_pane":"Par panneau + espace","footer_compact":"Compact","paths_git_root":"Racine Git","paths_absolute":"Chemins absolus"},"toast":{"changed_title":"Settings changed","save_failed_title":"Réglages non enregistrés","save_failed_message":"Impossible d’enregistrer ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Recherche","placeholder":"Filtrer les fichiers…","empty":"Aucun résultat","preview_label":"Aperçu","preview_loading":"Chargement de l’aperçu…","preview_binary":"Fichier binaire — aperçu indisponible","preview_unavailable":"Aperçu indisponible","preview_truncated":"Aperçu tronqué"}}; -export const it: TranslationSchema = {"footer":{"mode":{"browse":"sfoglia","insert":"inserisci","normal":"normale","preview":"anteprima","settings":"impostazioni","files":"file","graft":"graft","history":"cronologia"},"context":{"settings":"impostazioni","graft_empty":"apri un file per ispezionarlo","history_empty":"nessuna prova Echo ancora","history_count":"Prove Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k muovi","enter_change":"enter cambia","f2_close":"f2 chiudi","esc_close":"esc chiudi","j_k_scroll":"j/k scorri","f3_source":"f3 sorgente","f3_preview":"f3 anteprima","text_input":"testo","esc_normal":"esc normale","ctrl_s_save":"ctrl+s salva","ctrl_t_theme":"ctrl+t tema","tab_focus":"tab focus","tab_indent":"tab rientra","ctrl_b_files":"ctrl+b file","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h cronologia","enter_open":"enter apri","backspace_up":"backspace su","ctrl_b_close":"ctrl+b chiudi","enter_jump":"enter vai","r_refresh":"r aggiorna","ctrl_g_close":"ctrl+g chiudi","ctrl_h_close":"ctrl+h chiudi","i_insert":"i inserisci","o_open_line":"o apri riga","cc_line":"cc riga","cw_word":"cw parola","ce_word_end":"ce fine parola","c0_start":"c0 inizio","c_end":"c$ fine","dd_line":"dd riga","dw_word":"dw parola","de_word_end":"de fine parola","d0_start":"d0 inizio","d_end":"d$ fine","yy_line":"yy riga","yw_word":"yw parola","ye_word_end":"ye fine parola","y0_start":"y0 inizio","y_end":"y$ fine","gg_top":"gg cima","esc_cancel":"esc annulla","type_filter":"digita filtro","arrows_select":"↑/↓ seleziona","slash_filter":"/ filtra"},"evidence":{"head":"testa","tick":"tick","anchor":"ancora","coverage":"copertura","complete":"completa","partial":"parziale","unavailable":"non disponibile"},"status":{"nav":"navigazione","filter":"filtro","read_only":"sola lettura","modified":"modificato","modified_count":"{count} modificati","pending_count":"{count} in attesa","buffer_count":"{count} buffer","loading":"caricamento"}},"history":{"title":"Cronologia Echo","empty":"Nessuna prova Echo ancora","header":"# tick tipo stato prova riepilogo"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Layout piè di pagina","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Percorsi","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Focus + area di lavoro","footer_per_pane":"Pannelli + area lavoro","footer_compact":"Compatto","paths_git_root":"Radice Git","paths_absolute":"Percorsi assoluti"},"toast":{"changed_title":"Settings changed","save_failed_title":"Impostazioni non salvate","save_failed_message":"Impossibile salvare ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Cerca","placeholder":"Filtra file…","empty":"Nessun risultato","preview_label":"Anteprima","preview_loading":"Caricamento anteprima…","preview_binary":"File binario — anteprima non disponibile","preview_unavailable":"Anteprima non disponibile","preview_truncated":"Anteprima troncata"}}; +export const it: TranslationSchema = {"footer":{"mode":{"browse":"sfoglia","insert":"inserisci","normal":"normale","preview":"anteprima","settings":"impostazioni","files":"file","graft":"graft","history":"cronologia"},"context":{"settings":"impostazioni","graft_empty":"apri un file per ispezionarlo","history_empty":"nessuna prova Echo ancora","history_count":"Prove Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k muovi","enter_change":"enter cambia","f2_close":"f2 chiudi","esc_close":"esc chiudi","j_k_scroll":"j/k scorri","f3_source":"f3 sorgente","f3_preview":"f3 anteprima","text_input":"testo","esc_normal":"esc normale","ctrl_s_save":"ctrl+s salva","ctrl_t_theme":"ctrl+t tema","tab_focus":"tab focus","tab_indent":"tab rientra","ctrl_b_files":"ctrl+b file","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h cronologia","enter_open":"invio apri / espandi","backspace_up":"backspace su","ctrl_b_close":"ctrl+b chiudi","enter_jump":"enter vai","r_refresh":"r aggiorna","ctrl_g_close":"ctrl+g chiudi","ctrl_h_close":"ctrl+h chiudi","i_insert":"i inserisci","o_open_line":"o apri riga","cc_line":"cc riga","cw_word":"cw parola","ce_word_end":"ce fine parola","c0_start":"c0 inizio","c_end":"c$ fine","dd_line":"dd riga","dw_word":"dw parola","de_word_end":"de fine parola","d0_start":"d0 inizio","d_end":"d$ fine","yy_line":"yy riga","yw_word":"yw parola","ye_word_end":"ye fine parola","y0_start":"y0 inizio","y_end":"y$ fine","gg_top":"gg cima","esc_cancel":"esc annulla","type_filter":"digita filtro","arrows_select":"↑/↓ seleziona","slash_filter":"/ filtra"},"evidence":{"head":"testa","tick":"tick","anchor":"ancora","coverage":"copertura","complete":"completa","partial":"parziale","unavailable":"non disponibile"},"status":{"nav":"navigazione","filter":"filtro","read_only":"sola lettura","modified":"modificato","modified_count":"{count} modificati","pending_count":"{count} in attesa","buffer_count":"{count} buffer","loading":"caricamento"}},"history":{"title":"Cronologia Echo","empty":"Nessuna prova Echo ancora","header":"# tick tipo stato prova riepilogo"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Layout piè di pagina","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Percorsi","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Focus + area di lavoro","footer_per_pane":"Pannelli + area lavoro","footer_compact":"Compatto","paths_git_root":"Radice Git","paths_absolute":"Percorsi assoluti"},"toast":{"changed_title":"Settings changed","save_failed_title":"Impostazioni non salvate","save_failed_message":"Impossibile salvare ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Cerca","placeholder":"Filtra file…","empty":"Nessun risultato","preview_label":"Anteprima","preview_loading":"Caricamento anteprima…","preview_binary":"File binario — anteprima non disponibile","preview_unavailable":"Anteprima non disponibile","preview_truncated":"Anteprima troncata"}}; -export const de: TranslationSchema = {"footer":{"mode":{"browse":"durchsuchen","insert":"einfügen","normal":"normal","preview":"vorschau","settings":"einstellungen","files":"dateien","graft":"graft","history":"verlauf"},"context":{"settings":"einstellungen","graft_empty":"datei öffnen zum prüfen","history_empty":"noch keine Echo-Nachweise","history_count":"Echo-Nachweise: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k bewegen","enter_change":"enter ändern","f2_close":"f2 schließen","esc_close":"esc schließen","j_k_scroll":"j/k scrollen","f3_source":"f3 quelltext","f3_preview":"f3 vorschau","text_input":"texteingabe","esc_normal":"esc normal","ctrl_s_save":"ctrl+s speichern","ctrl_t_theme":"ctrl+t theme","tab_focus":"tab fokus","tab_indent":"tab einrücken","ctrl_b_files":"ctrl+b dateien","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h verlauf","enter_open":"enter öffnen","backspace_up":"backspace hoch","ctrl_b_close":"ctrl+b schließen","enter_jump":"enter springen","r_refresh":"r aktualisieren","ctrl_g_close":"ctrl+g schließen","ctrl_h_close":"ctrl+h schließen","i_insert":"i einfügen","o_open_line":"o zeile öffnen","cc_line":"cc zeile","cw_word":"cw wort","ce_word_end":"ce wortende","c0_start":"c0 anfang","c_end":"c$ ende","dd_line":"dd zeile","dw_word":"dw wort","de_word_end":"de wortende","d0_start":"d0 anfang","d_end":"d$ ende","yy_line":"yy zeile","yw_word":"yw wort","ye_word_end":"ye wortende","y0_start":"y0 anfang","y_end":"y$ ende","gg_top":"gg oben","esc_cancel":"esc abbrechen","type_filter":"Filter eingeben","arrows_select":"↑/↓ auswählen","slash_filter":"/ filtern"},"evidence":{"head":"Kopf","tick":"Tick","anchor":"Anker","coverage":"Abdeckung","complete":"vollständig","partial":"teilweise","unavailable":"nicht verfügbar"},"status":{"nav":"Navigation","filter":"Filter","read_only":"schreibgeschützt","modified":"geändert","modified_count":"{count} geändert","pending_count":"{count} ausstehend","buffer_count":"{count} Puffer","loading":"wird geladen"}},"history":{"title":"Echo-Verlauf","empty":"Noch keine Echo-Nachweise","header":"# tick art status nachweis zusammenfassung"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Fußzeilenlayout","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Dateipfade","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Fokus + Arbeitsbereich","footer_per_pane":"Je Bereich + global","footer_compact":"Kompakt","paths_git_root":"Git-Wurzel","paths_absolute":"Vollständige Pfade"},"toast":{"changed_title":"Settings changed","save_failed_title":"Nicht gespeichert","save_failed_message":"~/.jimrc konnte nicht gespeichert werden."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Suche","placeholder":"Dateien filtern…","empty":"Keine Treffer","preview_label":"Vorschau","preview_loading":"Vorschau wird geladen…","preview_binary":"Binärdatei — keine Vorschau","preview_unavailable":"Vorschau nicht verfügbar","preview_truncated":"Vorschau gekürzt"}}; +export const de: TranslationSchema = {"footer":{"mode":{"browse":"durchsuchen","insert":"einfügen","normal":"normal","preview":"vorschau","settings":"einstellungen","files":"dateien","graft":"graft","history":"verlauf"},"context":{"settings":"einstellungen","graft_empty":"datei öffnen zum prüfen","history_empty":"noch keine Echo-Nachweise","history_count":"Echo-Nachweise: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k bewegen","enter_change":"enter ändern","f2_close":"f2 schließen","esc_close":"esc schließen","j_k_scroll":"j/k scrollen","f3_source":"f3 quelltext","f3_preview":"f3 vorschau","text_input":"texteingabe","esc_normal":"esc normal","ctrl_s_save":"ctrl+s speichern","ctrl_t_theme":"ctrl+t theme","tab_focus":"tab fokus","tab_indent":"tab einrücken","ctrl_b_files":"ctrl+b dateien","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h verlauf","enter_open":"eingabe öffnen / aufklappen","backspace_up":"backspace hoch","ctrl_b_close":"ctrl+b schließen","enter_jump":"enter springen","r_refresh":"r aktualisieren","ctrl_g_close":"ctrl+g schließen","ctrl_h_close":"ctrl+h schließen","i_insert":"i einfügen","o_open_line":"o zeile öffnen","cc_line":"cc zeile","cw_word":"cw wort","ce_word_end":"ce wortende","c0_start":"c0 anfang","c_end":"c$ ende","dd_line":"dd zeile","dw_word":"dw wort","de_word_end":"de wortende","d0_start":"d0 anfang","d_end":"d$ ende","yy_line":"yy zeile","yw_word":"yw wort","ye_word_end":"ye wortende","y0_start":"y0 anfang","y_end":"y$ ende","gg_top":"gg oben","esc_cancel":"esc abbrechen","type_filter":"Filter eingeben","arrows_select":"↑/↓ auswählen","slash_filter":"/ filtern"},"evidence":{"head":"Kopf","tick":"Tick","anchor":"Anker","coverage":"Abdeckung","complete":"vollständig","partial":"teilweise","unavailable":"nicht verfügbar"},"status":{"nav":"Navigation","filter":"Filter","read_only":"schreibgeschützt","modified":"geändert","modified_count":"{count} geändert","pending_count":"{count} ausstehend","buffer_count":"{count} Puffer","loading":"wird geladen"}},"history":{"title":"Echo-Verlauf","empty":"Noch keine Echo-Nachweise","header":"# tick art status nachweis zusammenfassung"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Fußzeilenlayout","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Dateipfade","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Fokus + Arbeitsbereich","footer_per_pane":"Je Bereich + global","footer_compact":"Kompakt","paths_git_root":"Git-Wurzel","paths_absolute":"Vollständige Pfade"},"toast":{"changed_title":"Settings changed","save_failed_title":"Nicht gespeichert","save_failed_message":"~/.jimrc konnte nicht gespeichert werden."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Suche","placeholder":"Dateien filtern…","empty":"Keine Treffer","preview_label":"Vorschau","preview_loading":"Vorschau wird geladen…","preview_binary":"Binärdatei — keine Vorschau","preview_unavailable":"Vorschau nicht verfügbar","preview_truncated":"Vorschau gekürzt"}}; -export const es: TranslationSchema = {"footer":{"mode":{"browse":"explorar","insert":"insertar","normal":"normal","preview":"vista previa","settings":"ajustes","files":"archivos","graft":"graft","history":"historial"},"context":{"settings":"ajustes","graft_empty":"abre un archivo para inspeccionarlo","history_empty":"sin evidencia Echo todavía","history_count":"Evidencia Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k mover","enter_change":"enter cambiar","f2_close":"f2 cerrar","esc_close":"esc cerrar","j_k_scroll":"j/k desplazar","f3_source":"f3 fuente","f3_preview":"f3 vista previa","text_input":"texto","esc_normal":"esc normal","ctrl_s_save":"ctrl+s guardar","ctrl_t_theme":"ctrl+t tema","tab_focus":"tab foco","tab_indent":"tab sangría","ctrl_b_files":"ctrl+b archivos","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h historial","enter_open":"enter abrir","backspace_up":"backspace arriba","ctrl_b_close":"ctrl+b cerrar","enter_jump":"enter saltar","r_refresh":"r actualizar","ctrl_g_close":"ctrl+g cerrar","ctrl_h_close":"ctrl+h cerrar","i_insert":"i insertar","o_open_line":"o abrir línea","cc_line":"cc línea","cw_word":"cw palabra","ce_word_end":"ce fin palabra","c0_start":"c0 inicio","c_end":"c$ fin","dd_line":"dd línea","dw_word":"dw palabra","de_word_end":"de fin palabra","d0_start":"d0 inicio","d_end":"d$ fin","yy_line":"yy línea","yw_word":"yw palabra","ye_word_end":"ye fin palabra","y0_start":"y0 inicio","y_end":"y$ fin","gg_top":"gg arriba","esc_cancel":"esc cancelar","type_filter":"escribir filtro","arrows_select":"↑/↓ seleccionar","slash_filter":"/ filtrar"},"evidence":{"head":"cabeza","tick":"tick","anchor":"ancla","coverage":"cobertura","complete":"completa","partial":"parcial","unavailable":"no disponible"},"status":{"nav":"navegación","filter":"filtro","read_only":"solo lectura","modified":"modificado","modified_count":"{count} modificados","pending_count":"{count} pendientes","buffer_count":"{count} búferes","loading":"cargando"}},"history":{"title":"Historial Echo","empty":"Sin evidencia Echo todavía","header":"# tick tipo estado evidencia resumen"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Diseño del pie","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Rutas","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Foco + espacio","footer_per_pane":"Por panel + espacio","footer_compact":"Compacto","paths_git_root":"Raíz de Git","paths_absolute":"Rutas absolutas"},"toast":{"changed_title":"Settings changed","save_failed_title":"Ajustes no guardados","save_failed_message":"No se pudo guardar ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Buscar","placeholder":"Filtrar archivos…","empty":"Sin resultados","preview_label":"Vista previa","preview_loading":"Cargando vista previa…","preview_binary":"Archivo binario — sin vista previa","preview_unavailable":"Vista previa no disponible","preview_truncated":"Vista previa truncada"}}; +export const es: TranslationSchema = {"footer":{"mode":{"browse":"explorar","insert":"insertar","normal":"normal","preview":"vista previa","settings":"ajustes","files":"archivos","graft":"graft","history":"historial"},"context":{"settings":"ajustes","graft_empty":"abre un archivo para inspeccionarlo","history_empty":"sin evidencia Echo todavía","history_count":"Evidencia Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k mover","enter_change":"enter cambiar","f2_close":"f2 cerrar","esc_close":"esc cerrar","j_k_scroll":"j/k desplazar","f3_source":"f3 fuente","f3_preview":"f3 vista previa","text_input":"texto","esc_normal":"esc normal","ctrl_s_save":"ctrl+s guardar","ctrl_t_theme":"ctrl+t tema","tab_focus":"tab foco","tab_indent":"tab sangría","ctrl_b_files":"ctrl+b archivos","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h historial","enter_open":"intro abrir / desplegar","backspace_up":"backspace arriba","ctrl_b_close":"ctrl+b cerrar","enter_jump":"enter saltar","r_refresh":"r actualizar","ctrl_g_close":"ctrl+g cerrar","ctrl_h_close":"ctrl+h cerrar","i_insert":"i insertar","o_open_line":"o abrir línea","cc_line":"cc línea","cw_word":"cw palabra","ce_word_end":"ce fin palabra","c0_start":"c0 inicio","c_end":"c$ fin","dd_line":"dd línea","dw_word":"dw palabra","de_word_end":"de fin palabra","d0_start":"d0 inicio","d_end":"d$ fin","yy_line":"yy línea","yw_word":"yw palabra","ye_word_end":"ye fin palabra","y0_start":"y0 inicio","y_end":"y$ fin","gg_top":"gg arriba","esc_cancel":"esc cancelar","type_filter":"escribir filtro","arrows_select":"↑/↓ seleccionar","slash_filter":"/ filtrar"},"evidence":{"head":"cabeza","tick":"tick","anchor":"ancla","coverage":"cobertura","complete":"completa","partial":"parcial","unavailable":"no disponible"},"status":{"nav":"navegación","filter":"filtro","read_only":"solo lectura","modified":"modificado","modified_count":"{count} modificados","pending_count":"{count} pendientes","buffer_count":"{count} búferes","loading":"cargando"}},"history":{"title":"Historial Echo","empty":"Sin evidencia Echo todavía","header":"# tick tipo estado evidencia resumen"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Diseño del pie","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Rutas","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Foco + espacio","footer_per_pane":"Por panel + espacio","footer_compact":"Compacto","paths_git_root":"Raíz de Git","paths_absolute":"Rutas absolutas"},"toast":{"changed_title":"Settings changed","save_failed_title":"Ajustes no guardados","save_failed_message":"No se pudo guardar ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Buscar","placeholder":"Filtrar archivos…","empty":"Sin resultados","preview_label":"Vista previa","preview_loading":"Cargando vista previa…","preview_binary":"Archivo binario — sin vista previa","preview_unavailable":"Vista previa no disponible","preview_truncated":"Vista previa truncada"}}; -export const ko: TranslationSchema = {"footer":{"mode":{"browse":"탐색","insert":"삽입","normal":"일반","preview":"미리보기","settings":"설정","files":"파일","graft":"Graft","history":"기록"},"context":{"settings":"설정","graft_empty":"검사할 파일을 여세요","history_empty":"아직 Echo 증거 없음","history_count":"Echo 증거: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k 이동","enter_change":"enter 변경","f2_close":"f2 닫기","esc_close":"esc 닫기","j_k_scroll":"j/k 스크롤","f3_source":"f3 소스","f3_preview":"f3 미리보기","text_input":"텍스트 입력","esc_normal":"esc 일반","ctrl_s_save":"ctrl+s 저장","ctrl_t_theme":"ctrl+t 테마","tab_focus":"tab 포커스","tab_indent":"tab 들여쓰기","ctrl_b_files":"ctrl+b 파일","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h 기록","enter_open":"enter 열기","backspace_up":"backspace 위로","ctrl_b_close":"ctrl+b 닫기","enter_jump":"enter 이동","r_refresh":"r 새로고침","ctrl_g_close":"ctrl+g 닫기","ctrl_h_close":"ctrl+h 닫기","i_insert":"i 삽입","o_open_line":"o 줄 열기","cc_line":"cc 줄","cw_word":"cw 단어","ce_word_end":"ce 단어 끝","c0_start":"c0 시작","c_end":"c$ 끝","dd_line":"dd 줄","dw_word":"dw 단어","de_word_end":"de 단어 끝","d0_start":"d0 시작","d_end":"d$ 끝","yy_line":"yy 줄","yw_word":"yw 단어","ye_word_end":"ye 단어 끝","y0_start":"y0 시작","y_end":"y$ 끝","gg_top":"gg 맨 위","esc_cancel":"esc 취소","type_filter":"필터 입력","arrows_select":"↑/↓ 선택","slash_filter":"/ 필터"},"evidence":{"head":"헤드","tick":"틱","anchor":"앵커","coverage":"범위","complete":"완전","partial":"부분","unavailable":"사용 불가"},"status":{"nav":"탐색","filter":"필터","read_only":"읽기 전용","modified":"수정됨","modified_count":"수정 {count}개","pending_count":"대기 {count}개","buffer_count":"버퍼 {count}개","loading":"로딩 중"}},"history":{"title":"Echo 기록","empty":"아직 Echo 증거 없음","header":"# tick 종류 상태 증거 요약"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"하단 표시 형식","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"파일 경로","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"포커스 + 작업 공간","footer_per_pane":"패널별 + 작업 공간","footer_compact":"간결하게","paths_git_root":"Git 루트 기준","paths_absolute":"절대 경로"},"toast":{"changed_title":"Settings changed","save_failed_title":"설정 저장 실패","save_failed_message":"~/.jimrc를 저장할 수 없습니다. JSON과 권한을 확인하세요."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"검색","placeholder":"파일 필터…","empty":"일치 항목 없음","preview_label":"미리 보기","preview_loading":"미리 보기 불러오는 중…","preview_binary":"바이너리 파일 — 미리 보기 불가","preview_unavailable":"미리 보기 불가","preview_truncated":"미리 보기 생략됨"}}; +export const ko: TranslationSchema = {"footer":{"mode":{"browse":"탐색","insert":"삽입","normal":"일반","preview":"미리보기","settings":"설정","files":"파일","graft":"Graft","history":"기록"},"context":{"settings":"설정","graft_empty":"검사할 파일을 여세요","history_empty":"아직 Echo 증거 없음","history_count":"Echo 증거: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k 이동","enter_change":"enter 변경","f2_close":"f2 닫기","esc_close":"esc 닫기","j_k_scroll":"j/k 스크롤","f3_source":"f3 소스","f3_preview":"f3 미리보기","text_input":"텍스트 입력","esc_normal":"esc 일반","ctrl_s_save":"ctrl+s 저장","ctrl_t_theme":"ctrl+t 테마","tab_focus":"tab 포커스","tab_indent":"tab 들여쓰기","ctrl_b_files":"ctrl+b 파일","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h 기록","enter_open":"enter 열기 / 펼치기","backspace_up":"backspace 위로","ctrl_b_close":"ctrl+b 닫기","enter_jump":"enter 이동","r_refresh":"r 새로고침","ctrl_g_close":"ctrl+g 닫기","ctrl_h_close":"ctrl+h 닫기","i_insert":"i 삽입","o_open_line":"o 줄 열기","cc_line":"cc 줄","cw_word":"cw 단어","ce_word_end":"ce 단어 끝","c0_start":"c0 시작","c_end":"c$ 끝","dd_line":"dd 줄","dw_word":"dw 단어","de_word_end":"de 단어 끝","d0_start":"d0 시작","d_end":"d$ 끝","yy_line":"yy 줄","yw_word":"yw 단어","ye_word_end":"ye 단어 끝","y0_start":"y0 시작","y_end":"y$ 끝","gg_top":"gg 맨 위","esc_cancel":"esc 취소","type_filter":"필터 입력","arrows_select":"↑/↓ 선택","slash_filter":"/ 필터"},"evidence":{"head":"헤드","tick":"틱","anchor":"앵커","coverage":"범위","complete":"완전","partial":"부분","unavailable":"사용 불가"},"status":{"nav":"탐색","filter":"필터","read_only":"읽기 전용","modified":"수정됨","modified_count":"수정 {count}개","pending_count":"대기 {count}개","buffer_count":"버퍼 {count}개","loading":"로딩 중"}},"history":{"title":"Echo 기록","empty":"아직 Echo 증거 없음","header":"# tick 종류 상태 증거 요약"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"하단 표시 형식","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"파일 경로","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"포커스 + 작업 공간","footer_per_pane":"패널별 + 작업 공간","footer_compact":"간결하게","paths_git_root":"Git 루트 기준","paths_absolute":"절대 경로"},"toast":{"changed_title":"Settings changed","save_failed_title":"설정 저장 실패","save_failed_message":"~/.jimrc를 저장할 수 없습니다. JSON과 권한을 확인하세요."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"검색","placeholder":"파일 필터…","empty":"일치 항목 없음","preview_label":"미리 보기","preview_loading":"미리 보기 불러오는 중…","preview_binary":"바이너리 파일 — 미리 보기 불가","preview_unavailable":"미리 보기 불가","preview_truncated":"미리 보기 생략됨"}}; -export const ja: TranslationSchema = {"footer":{"mode":{"browse":"参照","insert":"挿入","normal":"通常","preview":"プレビュー","settings":"設定","files":"ファイル","graft":"Graft","history":"履歴"},"context":{"settings":"設定","graft_empty":"検査するファイルを開く","history_empty":"Echo 証拠はまだありません","history_count":"Echo 証拠: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k 移動","enter_change":"enter 変更","f2_close":"f2 閉じる","esc_close":"esc 閉じる","j_k_scroll":"j/k スクロール","f3_source":"f3 ソース","f3_preview":"f3 プレビュー","text_input":"テキスト入力","esc_normal":"esc 通常","ctrl_s_save":"ctrl+s 保存","ctrl_t_theme":"ctrl+t テーマ","tab_focus":"tab フォーカス","tab_indent":"tab インデント","ctrl_b_files":"ctrl+b ファイル","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h 履歴","enter_open":"enter 開く","backspace_up":"backspace 上へ","ctrl_b_close":"ctrl+b 閉じる","enter_jump":"enter 移動","r_refresh":"r 更新","ctrl_g_close":"ctrl+g 閉じる","ctrl_h_close":"ctrl+h 閉じる","i_insert":"i 挿入","o_open_line":"o 行を開く","cc_line":"cc 行","cw_word":"cw 単語","ce_word_end":"ce 単語末","c0_start":"c0 先頭","c_end":"c$ 末尾","dd_line":"dd 行","dw_word":"dw 単語","de_word_end":"de 単語末","d0_start":"d0 先頭","d_end":"d$ 末尾","yy_line":"yy 行","yw_word":"yw 単語","ye_word_end":"ye 単語末","y0_start":"y0 先頭","y_end":"y$ 末尾","gg_top":"gg 先頭","esc_cancel":"esc 取消","type_filter":"絞り込み入力","arrows_select":"↑/↓ 選択","slash_filter":"/ 絞り込み"},"evidence":{"head":"ヘッド","tick":"ティック","anchor":"アンカー","coverage":"範囲","complete":"完全","partial":"部分","unavailable":"利用不可"},"status":{"nav":"移動","filter":"絞り込み","read_only":"読み取り専用","modified":"変更あり","modified_count":"変更 {count} 件","pending_count":"保留 {count} 件","buffer_count":"バッファ {count} 件","loading":"読み込み中"}},"history":{"title":"Echo 履歴","empty":"Echo 証拠はまだありません","header":"# tick 種類 状態 証拠 概要"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"フッターの配置","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"ファイルパス","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"フォーカス+作業領域","footer_per_pane":"ペイン別+作業領域","footer_compact":"コンパクト","paths_git_root":"Gitルート相対","paths_absolute":"絶対パス"},"toast":{"changed_title":"Settings changed","save_failed_title":"設定を保存できません","save_failed_message":"~/.jimrc を保存できません。JSON と権限を確認してください。"}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"検索","placeholder":"ファイルを絞り込む…","empty":"一致なし","preview_label":"プレビュー","preview_loading":"プレビューを読み込み中…","preview_binary":"バイナリファイル — プレビュー不可","preview_unavailable":"プレビュー不可","preview_truncated":"プレビューを省略"}}; +export const ja: TranslationSchema = {"footer":{"mode":{"browse":"参照","insert":"挿入","normal":"通常","preview":"プレビュー","settings":"設定","files":"ファイル","graft":"Graft","history":"履歴"},"context":{"settings":"設定","graft_empty":"検査するファイルを開く","history_empty":"Echo 証拠はまだありません","history_count":"Echo 証拠: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k 移動","enter_change":"enter 変更","f2_close":"f2 閉じる","esc_close":"esc 閉じる","j_k_scroll":"j/k スクロール","f3_source":"f3 ソース","f3_preview":"f3 プレビュー","text_input":"テキスト入力","esc_normal":"esc 通常","ctrl_s_save":"ctrl+s 保存","ctrl_t_theme":"ctrl+t テーマ","tab_focus":"tab フォーカス","tab_indent":"tab インデント","ctrl_b_files":"ctrl+b ファイル","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h 履歴","enter_open":"enter 開く / 展開","backspace_up":"backspace 上へ","ctrl_b_close":"ctrl+b 閉じる","enter_jump":"enter 移動","r_refresh":"r 更新","ctrl_g_close":"ctrl+g 閉じる","ctrl_h_close":"ctrl+h 閉じる","i_insert":"i 挿入","o_open_line":"o 行を開く","cc_line":"cc 行","cw_word":"cw 単語","ce_word_end":"ce 単語末","c0_start":"c0 先頭","c_end":"c$ 末尾","dd_line":"dd 行","dw_word":"dw 単語","de_word_end":"de 単語末","d0_start":"d0 先頭","d_end":"d$ 末尾","yy_line":"yy 行","yw_word":"yw 単語","ye_word_end":"ye 単語末","y0_start":"y0 先頭","y_end":"y$ 末尾","gg_top":"gg 先頭","esc_cancel":"esc 取消","type_filter":"絞り込み入力","arrows_select":"↑/↓ 選択","slash_filter":"/ 絞り込み"},"evidence":{"head":"ヘッド","tick":"ティック","anchor":"アンカー","coverage":"範囲","complete":"完全","partial":"部分","unavailable":"利用不可"},"status":{"nav":"移動","filter":"絞り込み","read_only":"読み取り専用","modified":"変更あり","modified_count":"変更 {count} 件","pending_count":"保留 {count} 件","buffer_count":"バッファ {count} 件","loading":"読み込み中"}},"history":{"title":"Echo 履歴","empty":"Echo 証拠はまだありません","header":"# tick 種類 状態 証拠 概要"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"フッターの配置","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"ファイルパス","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"フォーカス+作業領域","footer_per_pane":"ペイン別+作業領域","footer_compact":"コンパクト","paths_git_root":"Gitルート相対","paths_absolute":"絶対パス"},"toast":{"changed_title":"Settings changed","save_failed_title":"設定を保存できません","save_failed_message":"~/.jimrc を保存できません。JSON と権限を確認してください。"}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"検索","placeholder":"ファイルを絞り込む…","empty":"一致なし","preview_label":"プレビュー","preview_loading":"プレビューを読み込み中…","preview_binary":"バイナリファイル — プレビュー不可","preview_unavailable":"プレビュー不可","preview_truncated":"プレビューを省略"}}; -export const zhHans: TranslationSchema = {"footer":{"mode":{"browse":"浏览","insert":"插入","normal":"普通","preview":"预览","settings":"设置","files":"文件","graft":"Graft","history":"历史"},"context":{"settings":"设置","graft_empty":"打开文件以检查","history_empty":"还没有 Echo 证据","history_count":"Echo 证据: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k 移动","enter_change":"enter 更改","f2_close":"f2 关闭","esc_close":"esc 关闭","j_k_scroll":"j/k 滚动","f3_source":"f3 源码","f3_preview":"f3 预览","text_input":"文本输入","esc_normal":"esc 普通","ctrl_s_save":"ctrl+s 保存","ctrl_t_theme":"ctrl+t 主题","tab_focus":"tab 焦点","tab_indent":"tab 缩进","ctrl_b_files":"ctrl+b 文件","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h 历史","enter_open":"enter 打开","backspace_up":"backspace 上一级","ctrl_b_close":"ctrl+b 关闭","enter_jump":"enter 跳转","r_refresh":"r 刷新","ctrl_g_close":"ctrl+g 关闭","ctrl_h_close":"ctrl+h 关闭","i_insert":"i 插入","o_open_line":"o 打开行","cc_line":"cc 行","cw_word":"cw 词","ce_word_end":"ce 词尾","c0_start":"c0 开头","c_end":"c$ 结尾","dd_line":"dd 行","dw_word":"dw 词","de_word_end":"de 词尾","d0_start":"d0 开头","d_end":"d$ 结尾","yy_line":"yy 行","yw_word":"yw 词","ye_word_end":"ye 词尾","y0_start":"y0 开头","y_end":"y$ 结尾","gg_top":"gg 顶部","esc_cancel":"esc 取消","type_filter":"输入筛选","arrows_select":"↑/↓ 选择","slash_filter":"/ 筛选"},"evidence":{"head":"头","tick":"时刻","anchor":"锚点","coverage":"覆盖","complete":"完整","partial":"部分","unavailable":"不可用"},"status":{"nav":"导航","filter":"筛选","read_only":"只读","modified":"已修改","modified_count":"{count} 个已修改","pending_count":"{count} 个待处理","buffer_count":"{count} 个缓冲区","loading":"加载中"}},"history":{"title":"Echo 历史","empty":"还没有 Echo 证据","header":"# tick 类型 状态 证据 摘要"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"页脚布局","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"文件路径","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"焦点与工作区","footer_per_pane":"分面板与工作区","footer_compact":"紧凑","paths_git_root":"相对 Git 根目录","paths_absolute":"绝对路径"},"toast":{"changed_title":"Settings changed","save_failed_title":"设置未保存","save_failed_message":"无法保存 ~/.jimrc。请检查 JSON 和权限。"}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"搜索","placeholder":"筛选文件…","empty":"无匹配项","preview_label":"预览","preview_loading":"正在加载预览…","preview_binary":"二进制文件 — 无法预览","preview_unavailable":"无法预览","preview_truncated":"预览已截断"}}; +export const zhHans: TranslationSchema = {"footer":{"mode":{"browse":"浏览","insert":"插入","normal":"普通","preview":"预览","settings":"设置","files":"文件","graft":"Graft","history":"历史"},"context":{"settings":"设置","graft_empty":"打开文件以检查","history_empty":"还没有 Echo 证据","history_count":"Echo 证据: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k 移动","enter_change":"enter 更改","f2_close":"f2 关闭","esc_close":"esc 关闭","j_k_scroll":"j/k 滚动","f3_source":"f3 源码","f3_preview":"f3 预览","text_input":"文本输入","esc_normal":"esc 普通","ctrl_s_save":"ctrl+s 保存","ctrl_t_theme":"ctrl+t 主题","tab_focus":"tab 焦点","tab_indent":"tab 缩进","ctrl_b_files":"ctrl+b 文件","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h 历史","enter_open":"enter 打开 / 展开","backspace_up":"backspace 上一级","ctrl_b_close":"ctrl+b 关闭","enter_jump":"enter 跳转","r_refresh":"r 刷新","ctrl_g_close":"ctrl+g 关闭","ctrl_h_close":"ctrl+h 关闭","i_insert":"i 插入","o_open_line":"o 打开行","cc_line":"cc 行","cw_word":"cw 词","ce_word_end":"ce 词尾","c0_start":"c0 开头","c_end":"c$ 结尾","dd_line":"dd 行","dw_word":"dw 词","de_word_end":"de 词尾","d0_start":"d0 开头","d_end":"d$ 结尾","yy_line":"yy 行","yw_word":"yw 词","ye_word_end":"ye 词尾","y0_start":"y0 开头","y_end":"y$ 结尾","gg_top":"gg 顶部","esc_cancel":"esc 取消","type_filter":"输入筛选","arrows_select":"↑/↓ 选择","slash_filter":"/ 筛选"},"evidence":{"head":"头","tick":"时刻","anchor":"锚点","coverage":"覆盖","complete":"完整","partial":"部分","unavailable":"不可用"},"status":{"nav":"导航","filter":"筛选","read_only":"只读","modified":"已修改","modified_count":"{count} 个已修改","pending_count":"{count} 个待处理","buffer_count":"{count} 个缓冲区","loading":"加载中"}},"history":{"title":"Echo 历史","empty":"还没有 Echo 证据","header":"# tick 类型 状态 证据 摘要"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"页脚布局","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"文件路径","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"焦点与工作区","footer_per_pane":"分面板与工作区","footer_compact":"紧凑","paths_git_root":"相对 Git 根目录","paths_absolute":"绝对路径"},"toast":{"changed_title":"Settings changed","save_failed_title":"设置未保存","save_failed_message":"无法保存 ~/.jimrc。请检查 JSON 和权限。"}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"搜索","placeholder":"筛选文件…","empty":"无匹配项","preview_label":"预览","preview_loading":"正在加载预览…","preview_binary":"二进制文件 — 无法预览","preview_unavailable":"无法预览","preview_truncated":"预览已截断"}}; -export const ptBR: TranslationSchema = {"footer":{"mode":{"browse":"navegar","insert":"inserir","normal":"normal","preview":"prévia","settings":"configurações","files":"arquivos","graft":"graft","history":"histórico"},"context":{"settings":"configurações","graft_empty":"abra um arquivo para inspecionar","history_empty":"nenhuma evidência Echo ainda","history_count":"Evidências Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k mover","enter_change":"enter alterar","f2_close":"f2 fechar","esc_close":"esc fechar","j_k_scroll":"j/k rolar","f3_source":"f3 código","f3_preview":"f3 prévia","text_input":"entrada de texto","esc_normal":"esc normal","ctrl_s_save":"ctrl+s salvar","ctrl_t_theme":"ctrl+t tema","tab_focus":"tab foco","tab_indent":"tab recuo","ctrl_b_files":"ctrl+b arquivos","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h histórico","enter_open":"enter abrir","backspace_up":"backspace subir","ctrl_b_close":"ctrl+b fechar","enter_jump":"enter ir","r_refresh":"r atualizar","ctrl_g_close":"ctrl+g fechar","ctrl_h_close":"ctrl+h fechar","i_insert":"i inserir","o_open_line":"o abrir linha","cc_line":"cc linha","cw_word":"cw palavra","ce_word_end":"ce fim palavra","c0_start":"c0 início","c_end":"c$ fim","dd_line":"dd linha","dw_word":"dw palavra","de_word_end":"de fim palavra","d0_start":"d0 início","d_end":"d$ fim","yy_line":"yy linha","yw_word":"yw palavra","ye_word_end":"ye fim palavra","y0_start":"y0 início","y_end":"y$ fim","gg_top":"gg topo","esc_cancel":"esc cancelar","type_filter":"digitar filtro","arrows_select":"↑/↓ selecionar","slash_filter":"/ filtrar"},"evidence":{"head":"cabeça","tick":"tick","anchor":"âncora","coverage":"cobertura","complete":"completa","partial":"parcial","unavailable":"indisponível"},"status":{"nav":"navegação","filter":"filtro","read_only":"somente leitura","modified":"modificado","modified_count":"{count} modificados","pending_count":"{count} pendentes","buffer_count":"{count} buffers","loading":"carregando"}},"history":{"title":"Histórico Echo","empty":"Nenhuma evidência Echo ainda","header":"# tick tipo status evidência resumo"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Layout do rodapé","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Caminhos","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Foco + espaço","footer_per_pane":"Por painel + espaço","footer_compact":"Compacto","paths_git_root":"Raiz do Git","paths_absolute":"Caminhos absolutos"},"toast":{"changed_title":"Settings changed","save_failed_title":"Configurações não salvas","save_failed_message":"Não foi possível salvar ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Buscar","placeholder":"Filtrar arquivos…","empty":"Nenhum resultado","preview_label":"Prévia","preview_loading":"Carregando prévia…","preview_binary":"Arquivo binário — sem prévia","preview_unavailable":"Prévia indisponível","preview_truncated":"Prévia truncada"}}; +export const ptBR: TranslationSchema = {"footer":{"mode":{"browse":"navegar","insert":"inserir","normal":"normal","preview":"prévia","settings":"configurações","files":"arquivos","graft":"graft","history":"histórico"},"context":{"settings":"configurações","graft_empty":"abra um arquivo para inspecionar","history_empty":"nenhuma evidência Echo ainda","history_count":"Evidências Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k mover","enter_change":"enter alterar","f2_close":"f2 fechar","esc_close":"esc fechar","j_k_scroll":"j/k rolar","f3_source":"f3 código","f3_preview":"f3 prévia","text_input":"entrada de texto","esc_normal":"esc normal","ctrl_s_save":"ctrl+s salvar","ctrl_t_theme":"ctrl+t tema","tab_focus":"tab foco","tab_indent":"tab recuo","ctrl_b_files":"ctrl+b arquivos","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h histórico","enter_open":"enter abrir / expandir","backspace_up":"backspace subir","ctrl_b_close":"ctrl+b fechar","enter_jump":"enter ir","r_refresh":"r atualizar","ctrl_g_close":"ctrl+g fechar","ctrl_h_close":"ctrl+h fechar","i_insert":"i inserir","o_open_line":"o abrir linha","cc_line":"cc linha","cw_word":"cw palavra","ce_word_end":"ce fim palavra","c0_start":"c0 início","c_end":"c$ fim","dd_line":"dd linha","dw_word":"dw palavra","de_word_end":"de fim palavra","d0_start":"d0 início","d_end":"d$ fim","yy_line":"yy linha","yw_word":"yw palavra","ye_word_end":"ye fim palavra","y0_start":"y0 início","y_end":"y$ fim","gg_top":"gg topo","esc_cancel":"esc cancelar","type_filter":"digitar filtro","arrows_select":"↑/↓ selecionar","slash_filter":"/ filtrar"},"evidence":{"head":"cabeça","tick":"tick","anchor":"âncora","coverage":"cobertura","complete":"completa","partial":"parcial","unavailable":"indisponível"},"status":{"nav":"navegação","filter":"filtro","read_only":"somente leitura","modified":"modificado","modified_count":"{count} modificados","pending_count":"{count} pendentes","buffer_count":"{count} buffers","loading":"carregando"}},"history":{"title":"Histórico Echo","empty":"Nenhuma evidência Echo ainda","header":"# tick tipo status evidência resumo"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Layout do rodapé","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Caminhos","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Foco + espaço","footer_per_pane":"Por painel + espaço","footer_compact":"Compacto","paths_git_root":"Raiz do Git","paths_absolute":"Caminhos absolutos"},"toast":{"changed_title":"Settings changed","save_failed_title":"Configurações não salvas","save_failed_message":"Não foi possível salvar ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Buscar","placeholder":"Filtrar arquivos…","empty":"Nenhum resultado","preview_label":"Prévia","preview_loading":"Carregando prévia…","preview_binary":"Arquivo binário — sem prévia","preview_unavailable":"Prévia indisponível","preview_truncated":"Prévia truncada"}}; -export const ru: TranslationSchema = {"footer":{"mode":{"browse":"обзор","insert":"вставка","normal":"обычный","preview":"просмотр","settings":"настройки","files":"файлы","graft":"graft","history":"история"},"context":{"settings":"настройки","graft_empty":"откройте файл для проверки","history_empty":"пока нет доказательств Echo","history_count":"Доказательства Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k переместить","enter_change":"enter изменить","f2_close":"f2 закрыть","esc_close":"esc закрыть","j_k_scroll":"j/k прокрутка","f3_source":"f3 исходник","f3_preview":"f3 просмотр","text_input":"ввод текста","esc_normal":"esc обычный","ctrl_s_save":"ctrl+s сохранить","ctrl_t_theme":"ctrl+t тема","tab_focus":"tab фокус","tab_indent":"tab отступ","ctrl_b_files":"ctrl+b файлы","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h история","enter_open":"enter открыть","backspace_up":"backspace вверх","ctrl_b_close":"ctrl+b закрыть","enter_jump":"enter перейти","r_refresh":"r обновить","ctrl_g_close":"ctrl+g закрыть","ctrl_h_close":"ctrl+h закрыть","i_insert":"i вставка","o_open_line":"o открыть строку","cc_line":"cc строка","cw_word":"cw слово","ce_word_end":"ce конец слова","c0_start":"c0 начало","c_end":"c$ конец","dd_line":"dd строка","dw_word":"dw слово","de_word_end":"de конец слова","d0_start":"d0 начало","d_end":"d$ конец","yy_line":"yy строка","yw_word":"yw слово","ye_word_end":"ye конец слова","y0_start":"y0 начало","y_end":"y$ конец","gg_top":"gg верх","esc_cancel":"esc отмена","type_filter":"ввод фильтра","arrows_select":"↑/↓ выбор","slash_filter":"/ фильтр"},"evidence":{"head":"вершина","tick":"тик","anchor":"якорь","coverage":"покрытие","complete":"полное","partial":"частичное","unavailable":"недоступно"},"status":{"nav":"навигация","filter":"фильтр","read_only":"только чтение","modified":"изменён","modified_count":"изменено: {count}","pending_count":"ожидает: {count}","buffer_count":"буферов: {count}","loading":"загрузка"}},"history":{"title":"История Echo","empty":"Пока нет доказательств Echo","header":"# tick тип статус доказательство сводка"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Вид строки состояния","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Пути файлов","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Фокус + рабочая область","footer_per_pane":"По панелям + общее","footer_compact":"Компактный","paths_git_root":"От корня Git","paths_absolute":"Абсолютные пути"},"toast":{"changed_title":"Settings changed","save_failed_title":"Настройки не сохранены","save_failed_message":"Не удалось сохранить ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Поиск","placeholder":"Фильтр файлов…","empty":"Нет совпадений","preview_label":"Просмотр","preview_loading":"Загрузка просмотра…","preview_binary":"Двоичный файл — просмотр недоступен","preview_unavailable":"Просмотр недоступен","preview_truncated":"Просмотр сокращён"}}; +export const ru: TranslationSchema = {"footer":{"mode":{"browse":"обзор","insert":"вставка","normal":"обычный","preview":"просмотр","settings":"настройки","files":"файлы","graft":"graft","history":"история"},"context":{"settings":"настройки","graft_empty":"откройте файл для проверки","history_empty":"пока нет доказательств Echo","history_count":"Доказательства Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k переместить","enter_change":"enter изменить","f2_close":"f2 закрыть","esc_close":"esc закрыть","j_k_scroll":"j/k прокрутка","f3_source":"f3 исходник","f3_preview":"f3 просмотр","text_input":"ввод текста","esc_normal":"esc обычный","ctrl_s_save":"ctrl+s сохранить","ctrl_t_theme":"ctrl+t тема","tab_focus":"tab фокус","tab_indent":"tab отступ","ctrl_b_files":"ctrl+b файлы","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h история","enter_open":"enter открыть / развернуть","backspace_up":"backspace вверх","ctrl_b_close":"ctrl+b закрыть","enter_jump":"enter перейти","r_refresh":"r обновить","ctrl_g_close":"ctrl+g закрыть","ctrl_h_close":"ctrl+h закрыть","i_insert":"i вставка","o_open_line":"o открыть строку","cc_line":"cc строка","cw_word":"cw слово","ce_word_end":"ce конец слова","c0_start":"c0 начало","c_end":"c$ конец","dd_line":"dd строка","dw_word":"dw слово","de_word_end":"de конец слова","d0_start":"d0 начало","d_end":"d$ конец","yy_line":"yy строка","yw_word":"yw слово","ye_word_end":"ye конец слова","y0_start":"y0 начало","y_end":"y$ конец","gg_top":"gg верх","esc_cancel":"esc отмена","type_filter":"ввод фильтра","arrows_select":"↑/↓ выбор","slash_filter":"/ фильтр"},"evidence":{"head":"вершина","tick":"тик","anchor":"якорь","coverage":"покрытие","complete":"полное","partial":"частичное","unavailable":"недоступно"},"status":{"nav":"навигация","filter":"фильтр","read_only":"только чтение","modified":"изменён","modified_count":"изменено: {count}","pending_count":"ожидает: {count}","buffer_count":"буферов: {count}","loading":"загрузка"}},"history":{"title":"История Echo","empty":"Пока нет доказательств Echo","header":"# tick тип статус доказательство сводка"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Вид строки состояния","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Пути файлов","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Фокус + рабочая область","footer_per_pane":"По панелям + общее","footer_compact":"Компактный","paths_git_root":"От корня Git","paths_absolute":"Абсолютные пути"},"toast":{"changed_title":"Settings changed","save_failed_title":"Настройки не сохранены","save_failed_message":"Не удалось сохранить ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Поиск","placeholder":"Фильтр файлов…","empty":"Нет совпадений","preview_label":"Просмотр","preview_loading":"Загрузка просмотра…","preview_binary":"Двоичный файл — просмотр недоступен","preview_unavailable":"Просмотр недоступен","preview_truncated":"Просмотр сокращён"}}; -export const ar: TranslationSchema = {"footer":{"mode":{"browse":"تصفح","insert":"إدراج","normal":"عادي","preview":"معاينة","settings":"إعدادات","files":"ملفات","graft":"Graft","history":"السجل"},"context":{"settings":"إعدادات","graft_empty":"افتح ملفا لفحصه","history_empty":"لا توجد أدلة Echo بعد","history_count":"أدلة Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k تحريك","enter_change":"enter تغيير","f2_close":"f2 إغلاق","esc_close":"esc إغلاق","j_k_scroll":"j/k تمرير","f3_source":"f3 المصدر","f3_preview":"f3 معاينة","text_input":"إدخال نص","esc_normal":"esc عادي","ctrl_s_save":"ctrl+s حفظ","ctrl_t_theme":"ctrl+t سمة","tab_focus":"tab تركيز","tab_indent":"tab إزاحة","ctrl_b_files":"ctrl+b ملفات","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h سجل","enter_open":"enter فتح","backspace_up":"backspace أعلى","ctrl_b_close":"ctrl+b إغلاق","enter_jump":"enter انتقال","r_refresh":"r تحديث","ctrl_g_close":"ctrl+g إغلاق","ctrl_h_close":"ctrl+h إغلاق","i_insert":"i إدراج","o_open_line":"o فتح سطر","cc_line":"cc سطر","cw_word":"cw كلمة","ce_word_end":"ce نهاية كلمة","c0_start":"c0 بداية","c_end":"c$ نهاية","dd_line":"dd سطر","dw_word":"dw كلمة","de_word_end":"de نهاية كلمة","d0_start":"d0 بداية","d_end":"d$ نهاية","yy_line":"yy سطر","yw_word":"yw كلمة","ye_word_end":"ye نهاية كلمة","y0_start":"y0 بداية","y_end":"y$ نهاية","gg_top":"gg أعلى","esc_cancel":"esc إلغاء","type_filter":"اكتب للتصفية","arrows_select":"↑/↓ تحديد","slash_filter":"/ تصفية"},"evidence":{"head":"الرأس","tick":"النبضة","anchor":"المرساة","coverage":"التغطية","complete":"كاملة","partial":"جزئية","unavailable":"غير متاحة"},"status":{"nav":"تنقل","filter":"تصفية","read_only":"للقراءة فقط","modified":"معدّل","modified_count":"{count} معدّل","pending_count":"{count} معلّق","buffer_count":"{count} مخازن","loading":"جار التحميل"}},"history":{"title":"سجل Echo","empty":"لا توجد أدلة Echo بعد","header":"# tick النوع الحالة الدليل الملخص"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"تخطيط التذييل","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"مسارات الملفات","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"التركيز ومساحة العمل","footer_per_pane":"لكل لوحة ومساحة العمل","footer_compact":"مضغوط","paths_git_root":"جذر Git","paths_absolute":"مسارات كاملة"},"toast":{"changed_title":"Settings changed","save_failed_title":"لم تُحفظ الإعدادات","save_failed_message":"تعذر حفظ ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"بحث","placeholder":"تصفية الملفات…","empty":"لا نتائج","preview_label":"معاينة","preview_loading":"جارٍ تحميل المعاينة…","preview_binary":"ملف ثنائي — المعاينة غير متاحة","preview_unavailable":"المعاينة غير متاحة","preview_truncated":"المعاينة مختصرة"}}; +export const ar: TranslationSchema = {"footer":{"mode":{"browse":"تصفح","insert":"إدراج","normal":"عادي","preview":"معاينة","settings":"إعدادات","files":"ملفات","graft":"Graft","history":"السجل"},"context":{"settings":"إعدادات","graft_empty":"افتح ملفا لفحصه","history_empty":"لا توجد أدلة Echo بعد","history_count":"أدلة Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k تحريك","enter_change":"enter تغيير","f2_close":"f2 إغلاق","esc_close":"esc إغلاق","j_k_scroll":"j/k تمرير","f3_source":"f3 المصدر","f3_preview":"f3 معاينة","text_input":"إدخال نص","esc_normal":"esc عادي","ctrl_s_save":"ctrl+s حفظ","ctrl_t_theme":"ctrl+t سمة","tab_focus":"tab تركيز","tab_indent":"tab إزاحة","ctrl_b_files":"ctrl+b ملفات","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h سجل","enter_open":"enter فتح / توسيع","backspace_up":"backspace أعلى","ctrl_b_close":"ctrl+b إغلاق","enter_jump":"enter انتقال","r_refresh":"r تحديث","ctrl_g_close":"ctrl+g إغلاق","ctrl_h_close":"ctrl+h إغلاق","i_insert":"i إدراج","o_open_line":"o فتح سطر","cc_line":"cc سطر","cw_word":"cw كلمة","ce_word_end":"ce نهاية كلمة","c0_start":"c0 بداية","c_end":"c$ نهاية","dd_line":"dd سطر","dw_word":"dw كلمة","de_word_end":"de نهاية كلمة","d0_start":"d0 بداية","d_end":"d$ نهاية","yy_line":"yy سطر","yw_word":"yw كلمة","ye_word_end":"ye نهاية كلمة","y0_start":"y0 بداية","y_end":"y$ نهاية","gg_top":"gg أعلى","esc_cancel":"esc إلغاء","type_filter":"اكتب للتصفية","arrows_select":"↑/↓ تحديد","slash_filter":"/ تصفية"},"evidence":{"head":"الرأس","tick":"النبضة","anchor":"المرساة","coverage":"التغطية","complete":"كاملة","partial":"جزئية","unavailable":"غير متاحة"},"status":{"nav":"تنقل","filter":"تصفية","read_only":"للقراءة فقط","modified":"معدّل","modified_count":"{count} معدّل","pending_count":"{count} معلّق","buffer_count":"{count} مخازن","loading":"جار التحميل"}},"history":{"title":"سجل Echo","empty":"لا توجد أدلة Echo بعد","header":"# tick النوع الحالة الدليل الملخص"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"تخطيط التذييل","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"مسارات الملفات","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"التركيز ومساحة العمل","footer_per_pane":"لكل لوحة ومساحة العمل","footer_compact":"مضغوط","paths_git_root":"جذر Git","paths_absolute":"مسارات كاملة"},"toast":{"changed_title":"Settings changed","save_failed_title":"لم تُحفظ الإعدادات","save_failed_message":"تعذر حفظ ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"بحث","placeholder":"تصفية الملفات…","empty":"لا نتائج","preview_label":"معاينة","preview_loading":"جارٍ تحميل المعاينة…","preview_binary":"ملف ثنائي — المعاينة غير متاحة","preview_unavailable":"المعاينة غير متاحة","preview_truncated":"المعاينة مختصرة"}}; -export const id: TranslationSchema = {"footer":{"mode":{"browse":"jelajah","insert":"sisip","normal":"normal","preview":"pratinjau","settings":"pengaturan","files":"berkas","graft":"graft","history":"riwayat"},"context":{"settings":"pengaturan","graft_empty":"buka berkas untuk diperiksa","history_empty":"belum ada bukti Echo","history_count":"Bukti Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k pindah","enter_change":"enter ubah","f2_close":"f2 tutup","esc_close":"esc tutup","j_k_scroll":"j/k gulir","f3_source":"f3 sumber","f3_preview":"f3 pratinjau","text_input":"input teks","esc_normal":"esc normal","ctrl_s_save":"ctrl+s simpan","ctrl_t_theme":"ctrl+t tema","tab_focus":"tab fokus","tab_indent":"tab inden","ctrl_b_files":"ctrl+b berkas","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h riwayat","enter_open":"enter buka","backspace_up":"backspace naik","ctrl_b_close":"ctrl+b tutup","enter_jump":"enter lompat","r_refresh":"r segarkan","ctrl_g_close":"ctrl+g tutup","ctrl_h_close":"ctrl+h tutup","i_insert":"i sisip","o_open_line":"o buka baris","cc_line":"cc baris","cw_word":"cw kata","ce_word_end":"ce akhir kata","c0_start":"c0 awal","c_end":"c$ akhir","dd_line":"dd baris","dw_word":"dw kata","de_word_end":"de akhir kata","d0_start":"d0 awal","d_end":"d$ akhir","yy_line":"yy baris","yw_word":"yw kata","ye_word_end":"ye akhir kata","y0_start":"y0 awal","y_end":"y$ akhir","gg_top":"gg atas","esc_cancel":"esc batal","type_filter":"ketik filter","arrows_select":"↑/↓ pilih","slash_filter":"/ filter"},"evidence":{"head":"kepala","tick":"tick","anchor":"jangkar","coverage":"cakupan","complete":"lengkap","partial":"sebagian","unavailable":"tidak tersedia"},"status":{"nav":"navigasi","filter":"filter","read_only":"hanya baca","modified":"diubah","modified_count":"{count} diubah","pending_count":"{count} tertunda","buffer_count":"{count} buffer","loading":"memuat"}},"history":{"title":"Riwayat Echo","empty":"Belum ada bukti Echo","header":"# tick jenis status bukti ringkasan"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Tata letak footer","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Jalur berkas","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Fokus + ruang kerja","footer_per_pane":"Per panel + ruang kerja","footer_compact":"Ringkas","paths_git_root":"Akar Git","paths_absolute":"Jalur lengkap"},"toast":{"changed_title":"Settings changed","save_failed_title":"Pengaturan tidak disimpan","save_failed_message":"Tidak dapat menyimpan ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Cari","placeholder":"Filter berkas…","empty":"Tidak ada hasil","preview_label":"Pratinjau","preview_loading":"Memuat pratinjau…","preview_binary":"Berkas biner — pratinjau tidak tersedia","preview_unavailable":"Pratinjau tidak tersedia","preview_truncated":"Pratinjau dipotong"}}; +export const id: TranslationSchema = {"footer":{"mode":{"browse":"jelajah","insert":"sisip","normal":"normal","preview":"pratinjau","settings":"pengaturan","files":"berkas","graft":"graft","history":"riwayat"},"context":{"settings":"pengaturan","graft_empty":"buka berkas untuk diperiksa","history_empty":"belum ada bukti Echo","history_count":"Bukti Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k pindah","enter_change":"enter ubah","f2_close":"f2 tutup","esc_close":"esc tutup","j_k_scroll":"j/k gulir","f3_source":"f3 sumber","f3_preview":"f3 pratinjau","text_input":"input teks","esc_normal":"esc normal","ctrl_s_save":"ctrl+s simpan","ctrl_t_theme":"ctrl+t tema","tab_focus":"tab fokus","tab_indent":"tab inden","ctrl_b_files":"ctrl+b berkas","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h riwayat","enter_open":"enter buka / luaskan","backspace_up":"backspace naik","ctrl_b_close":"ctrl+b tutup","enter_jump":"enter lompat","r_refresh":"r segarkan","ctrl_g_close":"ctrl+g tutup","ctrl_h_close":"ctrl+h tutup","i_insert":"i sisip","o_open_line":"o buka baris","cc_line":"cc baris","cw_word":"cw kata","ce_word_end":"ce akhir kata","c0_start":"c0 awal","c_end":"c$ akhir","dd_line":"dd baris","dw_word":"dw kata","de_word_end":"de akhir kata","d0_start":"d0 awal","d_end":"d$ akhir","yy_line":"yy baris","yw_word":"yw kata","ye_word_end":"ye akhir kata","y0_start":"y0 awal","y_end":"y$ akhir","gg_top":"gg atas","esc_cancel":"esc batal","type_filter":"ketik filter","arrows_select":"↑/↓ pilih","slash_filter":"/ filter"},"evidence":{"head":"kepala","tick":"tick","anchor":"jangkar","coverage":"cakupan","complete":"lengkap","partial":"sebagian","unavailable":"tidak tersedia"},"status":{"nav":"navigasi","filter":"filter","read_only":"hanya baca","modified":"diubah","modified_count":"{count} diubah","pending_count":"{count} tertunda","buffer_count":"{count} buffer","loading":"memuat"}},"history":{"title":"Riwayat Echo","empty":"Belum ada bukti Echo","header":"# tick jenis status bukti ringkasan"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Tata letak footer","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Jalur berkas","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Fokus + ruang kerja","footer_per_pane":"Per panel + ruang kerja","footer_compact":"Ringkas","paths_git_root":"Akar Git","paths_absolute":"Jalur lengkap"},"toast":{"changed_title":"Settings changed","save_failed_title":"Pengaturan tidak disimpan","save_failed_message":"Tidak dapat menyimpan ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Cari","placeholder":"Filter berkas…","empty":"Tidak ada hasil","preview_label":"Pratinjau","preview_loading":"Memuat pratinjau…","preview_binary":"Berkas biner — pratinjau tidak tersedia","preview_unavailable":"Pratinjau tidak tersedia","preview_truncated":"Pratinjau dipotong"}}; -export const tr: TranslationSchema = {"footer":{"mode":{"browse":"gözat","insert":"ekle","normal":"normal","preview":"önizleme","settings":"ayarlar","files":"dosyalar","graft":"graft","history":"geçmiş"},"context":{"settings":"ayarlar","graft_empty":"incelemek için dosya aç","history_empty":"henüz Echo kanıtı yok","history_count":"Echo kanıtı: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k taşı","enter_change":"enter değiştir","f2_close":"f2 kapat","esc_close":"esc kapat","j_k_scroll":"j/k kaydır","f3_source":"f3 kaynak","f3_preview":"f3 önizleme","text_input":"metin girişi","esc_normal":"esc normal","ctrl_s_save":"ctrl+s kaydet","ctrl_t_theme":"ctrl+t tema","tab_focus":"tab odak","tab_indent":"tab girinti","ctrl_b_files":"ctrl+b dosyalar","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h geçmiş","enter_open":"enter aç","backspace_up":"backspace yukarı","ctrl_b_close":"ctrl+b kapat","enter_jump":"enter git","r_refresh":"r yenile","ctrl_g_close":"ctrl+g kapat","ctrl_h_close":"ctrl+h kapat","i_insert":"i ekle","o_open_line":"o satır aç","cc_line":"cc satır","cw_word":"cw kelime","ce_word_end":"ce kelime sonu","c0_start":"c0 başlangıç","c_end":"c$ son","dd_line":"dd satır","dw_word":"dw kelime","de_word_end":"de kelime sonu","d0_start":"d0 başlangıç","d_end":"d$ son","yy_line":"yy satır","yw_word":"yw kelime","ye_word_end":"ye kelime sonu","y0_start":"y0 başlangıç","y_end":"y$ son","gg_top":"gg üst","esc_cancel":"esc iptal","type_filter":"filtre yaz","arrows_select":"↑/↓ seç","slash_filter":"/ filtre"},"evidence":{"head":"baş","tick":"tik","anchor":"çapa","coverage":"kapsam","complete":"tam","partial":"kısmi","unavailable":"kullanılamıyor"},"status":{"nav":"gezinme","filter":"filtre","read_only":"salt okunur","modified":"değiştirildi","modified_count":"{count} değiştirildi","pending_count":"{count} bekliyor","buffer_count":"{count} arabellek","loading":"yükleniyor"}},"history":{"title":"Echo Geçmişi","empty":"Henüz Echo kanıtı yok","header":"# tick tür durum kanıt özet"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Alt çubuk düzeni","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Dosya yolları","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Odak + çalışma alanı","footer_per_pane":"Bölme + çalışma alanı","footer_compact":"Kompakt","paths_git_root":"Git kökü","paths_absolute":"Tam yollar"},"toast":{"changed_title":"Settings changed","save_failed_title":"Ayarlar kaydedilmedi","save_failed_message":"~/.jimrc kaydedilemedi."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Ara","placeholder":"Dosyaları filtrele…","empty":"Eşleşme yok","preview_label":"Önizleme","preview_loading":"Önizleme yükleniyor…","preview_binary":"İkili dosya — önizleme yok","preview_unavailable":"Önizleme kullanılamıyor","preview_truncated":"Önizleme kısaltıldı"}}; +export const tr: TranslationSchema = {"footer":{"mode":{"browse":"gözat","insert":"ekle","normal":"normal","preview":"önizleme","settings":"ayarlar","files":"dosyalar","graft":"graft","history":"geçmiş"},"context":{"settings":"ayarlar","graft_empty":"incelemek için dosya aç","history_empty":"henüz Echo kanıtı yok","history_count":"Echo kanıtı: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k taşı","enter_change":"enter değiştir","f2_close":"f2 kapat","esc_close":"esc kapat","j_k_scroll":"j/k kaydır","f3_source":"f3 kaynak","f3_preview":"f3 önizleme","text_input":"metin girişi","esc_normal":"esc normal","ctrl_s_save":"ctrl+s kaydet","ctrl_t_theme":"ctrl+t tema","tab_focus":"tab odak","tab_indent":"tab girinti","ctrl_b_files":"ctrl+b dosyalar","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h geçmiş","enter_open":"enter aç / genişlet","backspace_up":"backspace yukarı","ctrl_b_close":"ctrl+b kapat","enter_jump":"enter git","r_refresh":"r yenile","ctrl_g_close":"ctrl+g kapat","ctrl_h_close":"ctrl+h kapat","i_insert":"i ekle","o_open_line":"o satır aç","cc_line":"cc satır","cw_word":"cw kelime","ce_word_end":"ce kelime sonu","c0_start":"c0 başlangıç","c_end":"c$ son","dd_line":"dd satır","dw_word":"dw kelime","de_word_end":"de kelime sonu","d0_start":"d0 başlangıç","d_end":"d$ son","yy_line":"yy satır","yw_word":"yw kelime","ye_word_end":"ye kelime sonu","y0_start":"y0 başlangıç","y_end":"y$ son","gg_top":"gg üst","esc_cancel":"esc iptal","type_filter":"filtre yaz","arrows_select":"↑/↓ seç","slash_filter":"/ filtre"},"evidence":{"head":"baş","tick":"tik","anchor":"çapa","coverage":"kapsam","complete":"tam","partial":"kısmi","unavailable":"kullanılamıyor"},"status":{"nav":"gezinme","filter":"filtre","read_only":"salt okunur","modified":"değiştirildi","modified_count":"{count} değiştirildi","pending_count":"{count} bekliyor","buffer_count":"{count} arabellek","loading":"yükleniyor"}},"history":{"title":"Echo Geçmişi","empty":"Henüz Echo kanıtı yok","header":"# tick tür durum kanıt özet"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Alt çubuk düzeni","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Dosya yolları","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Odak + çalışma alanı","footer_per_pane":"Bölme + çalışma alanı","footer_compact":"Kompakt","paths_git_root":"Git kökü","paths_absolute":"Tam yollar"},"toast":{"changed_title":"Settings changed","save_failed_title":"Ayarlar kaydedilmedi","save_failed_message":"~/.jimrc kaydedilemedi."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Ara","placeholder":"Dosyaları filtrele…","empty":"Eşleşme yok","preview_label":"Önizleme","preview_loading":"Önizleme yükleniyor…","preview_binary":"İkili dosya — önizleme yok","preview_unavailable":"Önizleme kullanılamıyor","preview_truncated":"Önizleme kısaltıldı"}}; -export const hi: TranslationSchema = {"footer":{"mode":{"browse":"ब्राउज़","insert":"सम्मिलित","normal":"सामान्य","preview":"पूर्वावलोकन","settings":"सेटिंग","files":"फाइलें","graft":"Graft","history":"इतिहास"},"context":{"settings":"सेटिंग","graft_empty":"जांचने के लिए फाइल खोलें","history_empty":"अभी कोई Echo प्रमाण नहीं","history_count":"Echo प्रमाण: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k चलें","enter_change":"enter बदलें","f2_close":"f2 बंद","esc_close":"esc बंद","j_k_scroll":"j/k स्क्रोल","f3_source":"f3 स्रोत","f3_preview":"f3 पूर्वावलोकन","text_input":"पाठ इनपुट","esc_normal":"esc सामान्य","ctrl_s_save":"ctrl+s सहेजें","ctrl_t_theme":"ctrl+t थीम","tab_focus":"tab फोकस","tab_indent":"tab इंडेंट","ctrl_b_files":"ctrl+b फाइलें","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h इतिहास","enter_open":"enter खोलें","backspace_up":"backspace ऊपर","ctrl_b_close":"ctrl+b बंद","enter_jump":"enter जाएं","r_refresh":"r ताज़ा","ctrl_g_close":"ctrl+g बंद","ctrl_h_close":"ctrl+h बंद","i_insert":"i सम्मिलित","o_open_line":"o पंक्ति खोलें","cc_line":"cc पंक्ति","cw_word":"cw शब्द","ce_word_end":"ce शब्द अंत","c0_start":"c0 शुरुआत","c_end":"c$ अंत","dd_line":"dd पंक्ति","dw_word":"dw शब्द","de_word_end":"de शब्द अंत","d0_start":"d0 शुरुआत","d_end":"d$ अंत","yy_line":"yy पंक्ति","yw_word":"yw शब्द","ye_word_end":"ye शब्द अंत","y0_start":"y0 शुरुआत","y_end":"y$ अंत","gg_top":"gg ऊपर","esc_cancel":"esc रद्द","type_filter":"फ़िल्टर लिखें","arrows_select":"↑/↓ चुनें","slash_filter":"/ फ़िल्टर"},"evidence":{"head":"शीर्ष","tick":"टिक","anchor":"एंकर","coverage":"कवरेज","complete":"पूर्ण","partial":"आंशिक","unavailable":"अनुपलब्ध"},"status":{"nav":"नेविगेशन","filter":"फ़िल्टर","read_only":"केवल पढ़ने योग्य","modified":"बदला गया","modified_count":"{count} बदले गए","pending_count":"{count} लंबित","buffer_count":"{count} बफ़र","loading":"लोड हो रहा है"}},"history":{"title":"Echo इतिहास","empty":"अभी कोई Echo प्रमाण नहीं","header":"# tick प्रकार स्थिति प्रमाण सारांश"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"फ़ुटर लेआउट","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"फ़ाइल पथ","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"फ़ोकस + कार्यक्षेत्र","footer_per_pane":"प्रति पैनल + कार्यक्षेत्र","footer_compact":"संक्षिप्त","paths_git_root":"Git रूट","paths_absolute":"पूर्ण पथ"},"toast":{"changed_title":"Settings changed","save_failed_title":"सेटिंग सहेजी नहीं गई","save_failed_message":"~/.jimrc सहेजा नहीं जा सका। JSON और अनुमतियाँ जाँचें। फ़ुटर लेआउट नहीं बदला है।."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"खोज","placeholder":"फ़ाइलें छाँटें…","empty":"कोई मेल नहीं","preview_label":"पूर्वावलोकन","preview_loading":"पूर्वावलोकन लोड हो रहा है…","preview_binary":"बाइनरी फ़ाइल — पूर्वावलोकन उपलब्ध नहीं","preview_unavailable":"पूर्वावलोकन उपलब्ध नहीं","preview_truncated":"पूर्वावलोकन संक्षिप्त है"}}; +export const hi: TranslationSchema = {"footer":{"mode":{"browse":"ब्राउज़","insert":"सम्मिलित","normal":"सामान्य","preview":"पूर्वावलोकन","settings":"सेटिंग","files":"फाइलें","graft":"Graft","history":"इतिहास"},"context":{"settings":"सेटिंग","graft_empty":"जांचने के लिए फाइल खोलें","history_empty":"अभी कोई Echo प्रमाण नहीं","history_count":"Echo प्रमाण: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k चलें","enter_change":"enter बदलें","f2_close":"f2 बंद","esc_close":"esc बंद","j_k_scroll":"j/k स्क्रोल","f3_source":"f3 स्रोत","f3_preview":"f3 पूर्वावलोकन","text_input":"पाठ इनपुट","esc_normal":"esc सामान्य","ctrl_s_save":"ctrl+s सहेजें","ctrl_t_theme":"ctrl+t थीम","tab_focus":"tab फोकस","tab_indent":"tab इंडेंट","ctrl_b_files":"ctrl+b फाइलें","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h इतिहास","enter_open":"enter खोलें / फैलाएँ","backspace_up":"backspace ऊपर","ctrl_b_close":"ctrl+b बंद","enter_jump":"enter जाएं","r_refresh":"r ताज़ा","ctrl_g_close":"ctrl+g बंद","ctrl_h_close":"ctrl+h बंद","i_insert":"i सम्मिलित","o_open_line":"o पंक्ति खोलें","cc_line":"cc पंक्ति","cw_word":"cw शब्द","ce_word_end":"ce शब्द अंत","c0_start":"c0 शुरुआत","c_end":"c$ अंत","dd_line":"dd पंक्ति","dw_word":"dw शब्द","de_word_end":"de शब्द अंत","d0_start":"d0 शुरुआत","d_end":"d$ अंत","yy_line":"yy पंक्ति","yw_word":"yw शब्द","ye_word_end":"ye शब्द अंत","y0_start":"y0 शुरुआत","y_end":"y$ अंत","gg_top":"gg ऊपर","esc_cancel":"esc रद्द","type_filter":"फ़िल्टर लिखें","arrows_select":"↑/↓ चुनें","slash_filter":"/ फ़िल्टर"},"evidence":{"head":"शीर्ष","tick":"टिक","anchor":"एंकर","coverage":"कवरेज","complete":"पूर्ण","partial":"आंशिक","unavailable":"अनुपलब्ध"},"status":{"nav":"नेविगेशन","filter":"फ़िल्टर","read_only":"केवल पढ़ने योग्य","modified":"बदला गया","modified_count":"{count} बदले गए","pending_count":"{count} लंबित","buffer_count":"{count} बफ़र","loading":"लोड हो रहा है"}},"history":{"title":"Echo इतिहास","empty":"अभी कोई Echo प्रमाण नहीं","header":"# tick प्रकार स्थिति प्रमाण सारांश"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"फ़ुटर लेआउट","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"फ़ाइल पथ","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"फ़ोकस + कार्यक्षेत्र","footer_per_pane":"प्रति पैनल + कार्यक्षेत्र","footer_compact":"संक्षिप्त","paths_git_root":"Git रूट","paths_absolute":"पूर्ण पथ"},"toast":{"changed_title":"Settings changed","save_failed_title":"सेटिंग सहेजी नहीं गई","save_failed_message":"~/.jimrc सहेजा नहीं जा सका। JSON और अनुमतियाँ जाँचें। फ़ुटर लेआउट नहीं बदला है।."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"खोज","placeholder":"फ़ाइलें छाँटें…","empty":"कोई मेल नहीं","preview_label":"पूर्वावलोकन","preview_loading":"पूर्वावलोकन लोड हो रहा है…","preview_binary":"बाइनरी फ़ाइल — पूर्वावलोकन उपलब्ध नहीं","preview_unavailable":"पूर्वावलोकन उपलब्ध नहीं","preview_truncated":"पूर्वावलोकन संक्षिप्त है"}}; -export const nl: TranslationSchema = {"footer":{"mode":{"browse":"bladeren","insert":"invoegen","normal":"normaal","preview":"voorbeeld","settings":"instellingen","files":"bestanden","graft":"graft","history":"geschiedenis"},"context":{"settings":"instellingen","graft_empty":"open een bestand om te inspecteren","history_empty":"nog geen Echo-bewijs","history_count":"Echo-bewijs: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k bewegen","enter_change":"enter wijzigen","f2_close":"f2 sluiten","esc_close":"esc sluiten","j_k_scroll":"j/k scrollen","f3_source":"f3 bron","f3_preview":"f3 voorbeeld","text_input":"tekstinvoer","esc_normal":"esc normaal","ctrl_s_save":"ctrl+s opslaan","ctrl_t_theme":"ctrl+t thema","tab_focus":"tab focus","tab_indent":"tab inspringen","ctrl_b_files":"ctrl+b bestanden","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h geschiedenis","enter_open":"enter openen","backspace_up":"backspace omhoog","ctrl_b_close":"ctrl+b sluiten","enter_jump":"enter springen","r_refresh":"r vernieuwen","ctrl_g_close":"ctrl+g sluiten","ctrl_h_close":"ctrl+h sluiten","i_insert":"i invoegen","o_open_line":"o regel openen","cc_line":"cc regel","cw_word":"cw woord","ce_word_end":"ce woord-einde","c0_start":"c0 begin","c_end":"c$ einde","dd_line":"dd regel","dw_word":"dw woord","de_word_end":"de woord-einde","d0_start":"d0 begin","d_end":"d$ einde","yy_line":"yy regel","yw_word":"yw woord","ye_word_end":"ye woord-einde","y0_start":"y0 begin","y_end":"y$ einde","gg_top":"gg boven","esc_cancel":"esc annuleren","type_filter":"filter typen","arrows_select":"↑/↓ selecteren","slash_filter":"/ filter"},"evidence":{"head":"kop","tick":"tick","anchor":"anker","coverage":"dekking","complete":"volledig","partial":"gedeeltelijk","unavailable":"niet beschikbaar"},"status":{"nav":"navigatie","filter":"filter","read_only":"alleen-lezen","modified":"gewijzigd","modified_count":"{count} gewijzigd","pending_count":"{count} in behandeling","buffer_count":"{count} buffers","loading":"laden"}},"history":{"title":"Echo-geschiedenis","empty":"Nog geen Echo-bewijs","header":"# tick soort status bewijs samenvatting"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Voettekstindeling","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Bestandspaden","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Focus + werkruimte","footer_per_pane":"Per paneel + werkruimte","footer_compact":"Compact","paths_git_root":"Git-hoofdmap","paths_absolute":"Volledige paden"},"toast":{"changed_title":"Settings changed","save_failed_title":"Instellingen niet bewaard","save_failed_message":"Kan ~/.jimrc niet opslaan."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Zoeken","placeholder":"Bestanden filteren…","empty":"Geen resultaten","preview_label":"Voorbeeld","preview_loading":"Voorbeeld laden…","preview_binary":"Binair bestand — geen voorbeeld","preview_unavailable":"Voorbeeld niet beschikbaar","preview_truncated":"Voorbeeld ingekort"}}; +export const nl: TranslationSchema = {"footer":{"mode":{"browse":"bladeren","insert":"invoegen","normal":"normaal","preview":"voorbeeld","settings":"instellingen","files":"bestanden","graft":"graft","history":"geschiedenis"},"context":{"settings":"instellingen","graft_empty":"open een bestand om te inspecteren","history_empty":"nog geen Echo-bewijs","history_count":"Echo-bewijs: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k bewegen","enter_change":"enter wijzigen","f2_close":"f2 sluiten","esc_close":"esc sluiten","j_k_scroll":"j/k scrollen","f3_source":"f3 bron","f3_preview":"f3 voorbeeld","text_input":"tekstinvoer","esc_normal":"esc normaal","ctrl_s_save":"ctrl+s opslaan","ctrl_t_theme":"ctrl+t thema","tab_focus":"tab focus","tab_indent":"tab inspringen","ctrl_b_files":"ctrl+b bestanden","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h geschiedenis","enter_open":"enter openen / uitklappen","backspace_up":"backspace omhoog","ctrl_b_close":"ctrl+b sluiten","enter_jump":"enter springen","r_refresh":"r vernieuwen","ctrl_g_close":"ctrl+g sluiten","ctrl_h_close":"ctrl+h sluiten","i_insert":"i invoegen","o_open_line":"o regel openen","cc_line":"cc regel","cw_word":"cw woord","ce_word_end":"ce woord-einde","c0_start":"c0 begin","c_end":"c$ einde","dd_line":"dd regel","dw_word":"dw woord","de_word_end":"de woord-einde","d0_start":"d0 begin","d_end":"d$ einde","yy_line":"yy regel","yw_word":"yw woord","ye_word_end":"ye woord-einde","y0_start":"y0 begin","y_end":"y$ einde","gg_top":"gg boven","esc_cancel":"esc annuleren","type_filter":"filter typen","arrows_select":"↑/↓ selecteren","slash_filter":"/ filter"},"evidence":{"head":"kop","tick":"tick","anchor":"anker","coverage":"dekking","complete":"volledig","partial":"gedeeltelijk","unavailable":"niet beschikbaar"},"status":{"nav":"navigatie","filter":"filter","read_only":"alleen-lezen","modified":"gewijzigd","modified_count":"{count} gewijzigd","pending_count":"{count} in behandeling","buffer_count":"{count} buffers","loading":"laden"}},"history":{"title":"Echo-geschiedenis","empty":"Nog geen Echo-bewijs","header":"# tick soort status bewijs samenvatting"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Voettekstindeling","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Bestandspaden","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Focus + werkruimte","footer_per_pane":"Per paneel + werkruimte","footer_compact":"Compact","paths_git_root":"Git-hoofdmap","paths_absolute":"Volledige paden"},"toast":{"changed_title":"Settings changed","save_failed_title":"Instellingen niet bewaard","save_failed_message":"Kan ~/.jimrc niet opslaan."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Zoeken","placeholder":"Bestanden filteren…","empty":"Geen resultaten","preview_label":"Voorbeeld","preview_loading":"Voorbeeld laden…","preview_binary":"Binair bestand — geen voorbeeld","preview_unavailable":"Voorbeeld niet beschikbaar","preview_truncated":"Voorbeeld ingekort"}}; -export const pl: TranslationSchema = {"footer":{"mode":{"browse":"przeglądaj","insert":"wstaw","normal":"normalny","preview":"podgląd","settings":"ustawienia","files":"pliki","graft":"graft","history":"historia"},"context":{"settings":"ustawienia","graft_empty":"otwórz plik do sprawdzenia","history_empty":"brak jeszcze dowodów Echo","history_count":"Dowody Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k przesuń","enter_change":"enter zmień","f2_close":"f2 zamknij","esc_close":"esc zamknij","j_k_scroll":"j/k przewiń","f3_source":"f3 źródło","f3_preview":"f3 podgląd","text_input":"wpisywanie tekstu","esc_normal":"esc normalny","ctrl_s_save":"ctrl+s zapisz","ctrl_t_theme":"ctrl+t motyw","tab_focus":"tab fokus","tab_indent":"tab wcięcie","ctrl_b_files":"ctrl+b pliki","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h historia","enter_open":"enter otwórz","backspace_up":"backspace w górę","ctrl_b_close":"ctrl+b zamknij","enter_jump":"enter skocz","r_refresh":"r odśwież","ctrl_g_close":"ctrl+g zamknij","ctrl_h_close":"ctrl+h zamknij","i_insert":"i wstaw","o_open_line":"o otwórz linię","cc_line":"cc linia","cw_word":"cw słowo","ce_word_end":"ce koniec słowa","c0_start":"c0 początek","c_end":"c$ koniec","dd_line":"dd linia","dw_word":"dw słowo","de_word_end":"de koniec słowa","d0_start":"d0 początek","d_end":"d$ koniec","yy_line":"yy linia","yw_word":"yw słowo","ye_word_end":"ye koniec słowa","y0_start":"y0 początek","y_end":"y$ koniec","gg_top":"gg góra","esc_cancel":"esc anuluj","type_filter":"wpisz filtr","arrows_select":"↑/↓ wybierz","slash_filter":"/ filtr"},"evidence":{"head":"głowa","tick":"takt","anchor":"kotwica","coverage":"pokrycie","complete":"pełne","partial":"częściowe","unavailable":"niedostępne"},"status":{"nav":"nawigacja","filter":"filtr","read_only":"tylko odczyt","modified":"zmieniony","modified_count":"zmienione: {count}","pending_count":"oczekujące: {count}","buffer_count":"bufory: {count}","loading":"ładowanie"}},"history":{"title":"Historia Echo","empty":"Brak jeszcze dowodów Echo","header":"# tick typ status dowód podsumowanie"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Układ stopki","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Ścieżki plików","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Fokus + obszar pracy","footer_per_pane":"Panele + obszar pracy","footer_compact":"Kompaktowy","paths_git_root":"Katalog Git","paths_absolute":"Pełne ścieżki"},"toast":{"changed_title":"Settings changed","save_failed_title":"Ustawienia niezapisane","save_failed_message":"Nie można zapisać ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Szukaj","placeholder":"Filtruj pliki…","empty":"Brak wyników","preview_label":"Podgląd","preview_loading":"Wczytywanie podglądu…","preview_binary":"Plik binarny — brak podglądu","preview_unavailable":"Podgląd niedostępny","preview_truncated":"Podgląd skrócony"}}; +export const pl: TranslationSchema = {"footer":{"mode":{"browse":"przeglądaj","insert":"wstaw","normal":"normalny","preview":"podgląd","settings":"ustawienia","files":"pliki","graft":"graft","history":"historia"},"context":{"settings":"ustawienia","graft_empty":"otwórz plik do sprawdzenia","history_empty":"brak jeszcze dowodów Echo","history_count":"Dowody Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k przesuń","enter_change":"enter zmień","f2_close":"f2 zamknij","esc_close":"esc zamknij","j_k_scroll":"j/k przewiń","f3_source":"f3 źródło","f3_preview":"f3 podgląd","text_input":"wpisywanie tekstu","esc_normal":"esc normalny","ctrl_s_save":"ctrl+s zapisz","ctrl_t_theme":"ctrl+t motyw","tab_focus":"tab fokus","tab_indent":"tab wcięcie","ctrl_b_files":"ctrl+b pliki","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h historia","enter_open":"enter otwórz / rozwiń","backspace_up":"backspace w górę","ctrl_b_close":"ctrl+b zamknij","enter_jump":"enter skocz","r_refresh":"r odśwież","ctrl_g_close":"ctrl+g zamknij","ctrl_h_close":"ctrl+h zamknij","i_insert":"i wstaw","o_open_line":"o otwórz linię","cc_line":"cc linia","cw_word":"cw słowo","ce_word_end":"ce koniec słowa","c0_start":"c0 początek","c_end":"c$ koniec","dd_line":"dd linia","dw_word":"dw słowo","de_word_end":"de koniec słowa","d0_start":"d0 początek","d_end":"d$ koniec","yy_line":"yy linia","yw_word":"yw słowo","ye_word_end":"ye koniec słowa","y0_start":"y0 początek","y_end":"y$ koniec","gg_top":"gg góra","esc_cancel":"esc anuluj","type_filter":"wpisz filtr","arrows_select":"↑/↓ wybierz","slash_filter":"/ filtr"},"evidence":{"head":"głowa","tick":"takt","anchor":"kotwica","coverage":"pokrycie","complete":"pełne","partial":"częściowe","unavailable":"niedostępne"},"status":{"nav":"nawigacja","filter":"filtr","read_only":"tylko odczyt","modified":"zmieniony","modified_count":"zmienione: {count}","pending_count":"oczekujące: {count}","buffer_count":"bufory: {count}","loading":"ładowanie"}},"history":{"title":"Historia Echo","empty":"Brak jeszcze dowodów Echo","header":"# tick typ status dowód podsumowanie"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Układ stopki","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Ścieżki plików","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Fokus + obszar pracy","footer_per_pane":"Panele + obszar pracy","footer_compact":"Kompaktowy","paths_git_root":"Katalog Git","paths_absolute":"Pełne ścieżki"},"toast":{"changed_title":"Settings changed","save_failed_title":"Ustawienia niezapisane","save_failed_message":"Nie można zapisać ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Szukaj","placeholder":"Filtruj pliki…","empty":"Brak wyników","preview_label":"Podgląd","preview_loading":"Wczytywanie podglądu…","preview_binary":"Plik binarny — brak podglądu","preview_unavailable":"Podgląd niedostępny","preview_truncated":"Podgląd skrócony"}}; -export const vi: TranslationSchema = {"footer":{"mode":{"browse":"duyệt","insert":"chèn","normal":"thường","preview":"xem trước","settings":"cài đặt","files":"tệp","graft":"graft","history":"lịch sử"},"context":{"settings":"cài đặt","graft_empty":"mở tệp để kiểm tra","history_empty":"chưa có bằng chứng Echo","history_count":"Bằng chứng Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k di chuyển","enter_change":"enter đổi","f2_close":"f2 đóng","esc_close":"esc đóng","j_k_scroll":"j/k cuộn","f3_source":"f3 nguồn","f3_preview":"f3 xem trước","text_input":"nhập văn bản","esc_normal":"esc thường","ctrl_s_save":"ctrl+s lưu","ctrl_t_theme":"ctrl+t giao diện","tab_focus":"tab tiêu điểm","tab_indent":"tab thụt lề","ctrl_b_files":"ctrl+b tệp","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h lịch sử","enter_open":"enter mở","backspace_up":"backspace lên","ctrl_b_close":"ctrl+b đóng","enter_jump":"enter nhảy","r_refresh":"r làm mới","ctrl_g_close":"ctrl+g đóng","ctrl_h_close":"ctrl+h đóng","i_insert":"i chèn","o_open_line":"o mở dòng","cc_line":"cc dòng","cw_word":"cw từ","ce_word_end":"ce cuối từ","c0_start":"c0 đầu","c_end":"c$ cuối","dd_line":"dd dòng","dw_word":"dw từ","de_word_end":"de cuối từ","d0_start":"d0 đầu","d_end":"d$ cuối","yy_line":"yy dòng","yw_word":"yw từ","ye_word_end":"ye cuối từ","y0_start":"y0 đầu","y_end":"y$ cuối","gg_top":"gg đầu","esc_cancel":"esc hủy","type_filter":"nhập bộ lọc","arrows_select":"↑/↓ chọn","slash_filter":"/ lọc"},"evidence":{"head":"đầu","tick":"nhịp","anchor":"neo","coverage":"độ phủ","complete":"đầy đủ","partial":"một phần","unavailable":"không khả dụng"},"status":{"nav":"điều hướng","filter":"lọc","read_only":"chỉ đọc","modified":"đã sửa","modified_count":"{count} đã sửa","pending_count":"{count} đang chờ","buffer_count":"{count} bộ đệm","loading":"đang tải"}},"history":{"title":"Lịch sử Echo","empty":"Chưa có bằng chứng Echo","header":"# tick loại trạng thái bằng chứng tóm tắt"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Bố cục chân trang","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Đường dẫn","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Tiêu điểm + không gian","footer_per_pane":"Theo ngăn + không gian","footer_compact":"Gọn","paths_git_root":"Gốc Git","paths_absolute":"Đường dẫn đầy đủ"},"toast":{"changed_title":"Settings changed","save_failed_title":"Chưa lưu cài đặt","save_failed_message":"Không thể lưu ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Tìm","placeholder":"Lọc tệp…","empty":"Không khớp","preview_label":"Xem trước","preview_loading":"Đang tải bản xem trước…","preview_binary":"Tệp nhị phân — không thể xem trước","preview_unavailable":"Không thể xem trước","preview_truncated":"Bản xem trước bị cắt"}}; +export const vi: TranslationSchema = {"footer":{"mode":{"browse":"duyệt","insert":"chèn","normal":"thường","preview":"xem trước","settings":"cài đặt","files":"tệp","graft":"graft","history":"lịch sử"},"context":{"settings":"cài đặt","graft_empty":"mở tệp để kiểm tra","history_empty":"chưa có bằng chứng Echo","history_count":"Bằng chứng Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k di chuyển","enter_change":"enter đổi","f2_close":"f2 đóng","esc_close":"esc đóng","j_k_scroll":"j/k cuộn","f3_source":"f3 nguồn","f3_preview":"f3 xem trước","text_input":"nhập văn bản","esc_normal":"esc thường","ctrl_s_save":"ctrl+s lưu","ctrl_t_theme":"ctrl+t giao diện","tab_focus":"tab tiêu điểm","tab_indent":"tab thụt lề","ctrl_b_files":"ctrl+b tệp","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h lịch sử","enter_open":"enter mở / mở rộng","backspace_up":"backspace lên","ctrl_b_close":"ctrl+b đóng","enter_jump":"enter nhảy","r_refresh":"r làm mới","ctrl_g_close":"ctrl+g đóng","ctrl_h_close":"ctrl+h đóng","i_insert":"i chèn","o_open_line":"o mở dòng","cc_line":"cc dòng","cw_word":"cw từ","ce_word_end":"ce cuối từ","c0_start":"c0 đầu","c_end":"c$ cuối","dd_line":"dd dòng","dw_word":"dw từ","de_word_end":"de cuối từ","d0_start":"d0 đầu","d_end":"d$ cuối","yy_line":"yy dòng","yw_word":"yw từ","ye_word_end":"ye cuối từ","y0_start":"y0 đầu","y_end":"y$ cuối","gg_top":"gg đầu","esc_cancel":"esc hủy","type_filter":"nhập bộ lọc","arrows_select":"↑/↓ chọn","slash_filter":"/ lọc"},"evidence":{"head":"đầu","tick":"nhịp","anchor":"neo","coverage":"độ phủ","complete":"đầy đủ","partial":"một phần","unavailable":"không khả dụng"},"status":{"nav":"điều hướng","filter":"lọc","read_only":"chỉ đọc","modified":"đã sửa","modified_count":"{count} đã sửa","pending_count":"{count} đang chờ","buffer_count":"{count} bộ đệm","loading":"đang tải"}},"history":{"title":"Lịch sử Echo","empty":"Chưa có bằng chứng Echo","header":"# tick loại trạng thái bằng chứng tóm tắt"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"Bố cục chân trang","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"Đường dẫn","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"Tiêu điểm + không gian","footer_per_pane":"Theo ngăn + không gian","footer_compact":"Gọn","paths_git_root":"Gốc Git","paths_absolute":"Đường dẫn đầy đủ"},"toast":{"changed_title":"Settings changed","save_failed_title":"Chưa lưu cài đặt","save_failed_message":"Không thể lưu ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"Tìm","placeholder":"Lọc tệp…","empty":"Không khớp","preview_label":"Xem trước","preview_loading":"Đang tải bản xem trước…","preview_binary":"Tệp nhị phân — không thể xem trước","preview_unavailable":"Không thể xem trước","preview_truncated":"Bản xem trước bị cắt"}}; -export const th: TranslationSchema = {"footer":{"mode":{"browse":"เรียกดู","insert":"แทรก","normal":"ปกติ","preview":"ดูตัวอย่าง","settings":"ตั้งค่า","files":"ไฟล์","graft":"Graft","history":"ประวัติ"},"context":{"settings":"ตั้งค่า","graft_empty":"เปิดไฟล์เพื่อตรวจสอบ","history_empty":"ยังไม่มีหลักฐาน Echo","history_count":"หลักฐาน Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k ย้าย","enter_change":"enter เปลี่ยน","f2_close":"f2 ปิด","esc_close":"esc ปิด","j_k_scroll":"j/k เลื่อน","f3_source":"f3 ต้นฉบับ","f3_preview":"f3 ดูตัวอย่าง","text_input":"ป้อนข้อความ","esc_normal":"esc ปกติ","ctrl_s_save":"ctrl+s บันทึก","ctrl_t_theme":"ctrl+t ธีม","tab_focus":"tab โฟกัส","tab_indent":"tab เยื้อง","ctrl_b_files":"ctrl+b ไฟล์","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h ประวัติ","enter_open":"enter เปิด","backspace_up":"backspace ขึ้น","ctrl_b_close":"ctrl+b ปิด","enter_jump":"enter ไป","r_refresh":"r รีเฟรช","ctrl_g_close":"ctrl+g ปิด","ctrl_h_close":"ctrl+h ปิด","i_insert":"i แทรก","o_open_line":"o เปิดบรรทัด","cc_line":"cc บรรทัด","cw_word":"cw คำ","ce_word_end":"ce จบคำ","c0_start":"c0 เริ่ม","c_end":"c$ จบ","dd_line":"dd บรรทัด","dw_word":"dw คำ","de_word_end":"de จบคำ","d0_start":"d0 เริ่ม","d_end":"d$ จบ","yy_line":"yy บรรทัด","yw_word":"yw คำ","ye_word_end":"ye จบคำ","y0_start":"y0 เริ่ม","y_end":"y$ จบ","gg_top":"gg บน","esc_cancel":"esc ยกเลิก","type_filter":"พิมพ์ตัวกรอง","arrows_select":"↑/↓ เลือก","slash_filter":"/ กรอง"},"evidence":{"head":"เฮด","tick":"ทิก","anchor":"จุดยึด","coverage":"ความครอบคลุม","complete":"ครบถ้วน","partial":"บางส่วน","unavailable":"ไม่พร้อมใช้งาน"},"status":{"nav":"นำทาง","filter":"กรอง","read_only":"อ่านอย่างเดียว","modified":"แก้ไขแล้ว","modified_count":"แก้ไข {count}","pending_count":"รอดำเนินการ {count}","buffer_count":"บัฟเฟอร์ {count}","loading":"กำลังโหลด"}},"history":{"title":"ประวัติ Echo","empty":"ยังไม่มีหลักฐาน Echo","header":"# tick ชนิด สถานะ หลักฐาน สรุป"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"รูปแบบแถบล่าง","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"เส้นทางไฟล์","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"โฟกัส + พื้นที่ทำงาน","footer_per_pane":"แยกแผง + พื้นที่ทำงาน","footer_compact":"กะทัดรัด","paths_git_root":"ราก Git","paths_absolute":"เส้นทางเต็ม"},"toast":{"changed_title":"Settings changed","save_failed_title":"ไม่ได้บันทึกการตั้งค่า","save_failed_message":"บันทึก ~/.jimrc ไม่ได้ ตรวจสอบ JSON และสิทธิ์"}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"ค้นหา","placeholder":"กรองไฟล์…","empty":"ไม่พบผลลัพธ์","preview_label":"ตัวอย่าง","preview_loading":"กำลังโหลดตัวอย่าง…","preview_binary":"ไฟล์ไบนารี — ไม่สามารถแสดงตัวอย่าง","preview_unavailable":"ไม่สามารถแสดงตัวอย่าง","preview_truncated":"ตัวอย่างถูกตัด"}}; +export const th: TranslationSchema = {"footer":{"mode":{"browse":"เรียกดู","insert":"แทรก","normal":"ปกติ","preview":"ดูตัวอย่าง","settings":"ตั้งค่า","files":"ไฟล์","graft":"Graft","history":"ประวัติ"},"context":{"settings":"ตั้งค่า","graft_empty":"เปิดไฟล์เพื่อตรวจสอบ","history_empty":"ยังไม่มีหลักฐาน Echo","history_count":"หลักฐาน Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k ย้าย","enter_change":"enter เปลี่ยน","f2_close":"f2 ปิด","esc_close":"esc ปิด","j_k_scroll":"j/k เลื่อน","f3_source":"f3 ต้นฉบับ","f3_preview":"f3 ดูตัวอย่าง","text_input":"ป้อนข้อความ","esc_normal":"esc ปกติ","ctrl_s_save":"ctrl+s บันทึก","ctrl_t_theme":"ctrl+t ธีม","tab_focus":"tab โฟกัส","tab_indent":"tab เยื้อง","ctrl_b_files":"ctrl+b ไฟล์","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h ประวัติ","enter_open":"enter เปิด / ขยาย","backspace_up":"backspace ขึ้น","ctrl_b_close":"ctrl+b ปิด","enter_jump":"enter ไป","r_refresh":"r รีเฟรช","ctrl_g_close":"ctrl+g ปิด","ctrl_h_close":"ctrl+h ปิด","i_insert":"i แทรก","o_open_line":"o เปิดบรรทัด","cc_line":"cc บรรทัด","cw_word":"cw คำ","ce_word_end":"ce จบคำ","c0_start":"c0 เริ่ม","c_end":"c$ จบ","dd_line":"dd บรรทัด","dw_word":"dw คำ","de_word_end":"de จบคำ","d0_start":"d0 เริ่ม","d_end":"d$ จบ","yy_line":"yy บรรทัด","yw_word":"yw คำ","ye_word_end":"ye จบคำ","y0_start":"y0 เริ่ม","y_end":"y$ จบ","gg_top":"gg บน","esc_cancel":"esc ยกเลิก","type_filter":"พิมพ์ตัวกรอง","arrows_select":"↑/↓ เลือก","slash_filter":"/ กรอง"},"evidence":{"head":"เฮด","tick":"ทิก","anchor":"จุดยึด","coverage":"ความครอบคลุม","complete":"ครบถ้วน","partial":"บางส่วน","unavailable":"ไม่พร้อมใช้งาน"},"status":{"nav":"นำทาง","filter":"กรอง","read_only":"อ่านอย่างเดียว","modified":"แก้ไขแล้ว","modified_count":"แก้ไข {count}","pending_count":"รอดำเนินการ {count}","buffer_count":"บัฟเฟอร์ {count}","loading":"กำลังโหลด"}},"history":{"title":"ประวัติ Echo","empty":"ยังไม่มีหลักฐาน Echo","header":"# tick ชนิด สถานะ หลักฐาน สรุป"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"รูปแบบแถบล่าง","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"เส้นทางไฟล์","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"โฟกัส + พื้นที่ทำงาน","footer_per_pane":"แยกแผง + พื้นที่ทำงาน","footer_compact":"กะทัดรัด","paths_git_root":"ราก Git","paths_absolute":"เส้นทางเต็ม"},"toast":{"changed_title":"Settings changed","save_failed_title":"ไม่ได้บันทึกการตั้งค่า","save_failed_message":"บันทึก ~/.jimrc ไม่ได้ ตรวจสอบ JSON และสิทธิ์"}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"ค้นหา","placeholder":"กรองไฟล์…","empty":"ไม่พบผลลัพธ์","preview_label":"ตัวอย่าง","preview_loading":"กำลังโหลดตัวอย่าง…","preview_binary":"ไฟล์ไบนารี — ไม่สามารถแสดงตัวอย่าง","preview_unavailable":"ไม่สามารถแสดงตัวอย่าง","preview_truncated":"ตัวอย่างถูกตัด"}}; -export const fa: TranslationSchema = {"footer":{"mode":{"browse":"مرور","insert":"درج","normal":"عادی","preview":"پیش‌نمایش","settings":"تنظیمات","files":"فایل‌ها","graft":"Graft","history":"تاریخچه"},"context":{"settings":"تنظیمات","graft_empty":"برای بررسی یک فایل باز کنید","history_empty":"هنوز مدرک Echo وجود ندارد","history_count":"مدارک Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k حرکت","enter_change":"enter تغییر","f2_close":"f2 بستن","esc_close":"esc بستن","j_k_scroll":"j/k پیمایش","f3_source":"f3 منبع","f3_preview":"f3 پیش‌نمایش","text_input":"ورودی متن","esc_normal":"esc عادی","ctrl_s_save":"ctrl+s ذخیره","ctrl_t_theme":"ctrl+t پوسته","tab_focus":"tab تمرکز","tab_indent":"tab تورفتگی","ctrl_b_files":"ctrl+b فایل‌ها","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h تاریخچه","enter_open":"enter باز کردن","backspace_up":"backspace بالا","ctrl_b_close":"ctrl+b بستن","enter_jump":"enter پرش","r_refresh":"r تازه‌سازی","ctrl_g_close":"ctrl+g بستن","ctrl_h_close":"ctrl+h بستن","i_insert":"i درج","o_open_line":"o باز کردن خط","cc_line":"cc خط","cw_word":"cw واژه","ce_word_end":"ce پایان واژه","c0_start":"c0 آغاز","c_end":"c$ پایان","dd_line":"dd خط","dw_word":"dw واژه","de_word_end":"de پایان واژه","d0_start":"d0 آغاز","d_end":"d$ پایان","yy_line":"yy خط","yw_word":"yw واژه","ye_word_end":"ye پایان واژه","y0_start":"y0 آغاز","y_end":"y$ پایان","gg_top":"gg بالا","esc_cancel":"esc لغو","type_filter":"نوشتن فیلتر","arrows_select":"↑/↓ انتخاب","slash_filter":"/ فیلتر"},"evidence":{"head":"سر","tick":"تیک","anchor":"لنگر","coverage":"پوشش","complete":"کامل","partial":"جزئی","unavailable":"در دسترس نیست"},"status":{"nav":"پیمایش","filter":"پالایش","read_only":"فقط خواندنی","modified":"ویرایش‌شده","modified_count":"{count} ویرایش‌شده","pending_count":"{count} در انتظار","buffer_count":"{count} بافر","loading":"در حال بارگیری"}},"history":{"title":"تاریخچه Echo","empty":"هنوز مدرک Echo وجود ندارد","header":"# tick نوع وضعیت مدرک خلاصه"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"چیدمان پانوشت","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"مسیر پرونده‌ها","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"تمرکز و فضای کار","footer_per_pane":"هر بخش و فضای کار","footer_compact":"فشرده","paths_git_root":"ریشه Git","paths_absolute":"مسیر کامل"},"toast":{"changed_title":"Settings changed","save_failed_title":"تنظیمات ذخیره نشد","save_failed_message":"ذخیره ~/.jimrc ممکن نشد."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"جستجو","placeholder":"فیلتر پرونده‌ها…","empty":"بدون نتیجه","preview_label":"پیش‌نمایش","preview_loading":"در حال بارگذاری پیش‌نمایش…","preview_binary":"فایل دودویی — پیش‌نمایش در دسترس نیست","preview_unavailable":"پیش‌نمایش در دسترس نیست","preview_truncated":"پیش‌نمایش کوتاه شده"}}; +export const fa: TranslationSchema = {"footer":{"mode":{"browse":"مرور","insert":"درج","normal":"عادی","preview":"پیش‌نمایش","settings":"تنظیمات","files":"فایل‌ها","graft":"Graft","history":"تاریخچه"},"context":{"settings":"تنظیمات","graft_empty":"برای بررسی یک فایل باز کنید","history_empty":"هنوز مدرک Echo وجود ندارد","history_count":"مدارک Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k حرکت","enter_change":"enter تغییر","f2_close":"f2 بستن","esc_close":"esc بستن","j_k_scroll":"j/k پیمایش","f3_source":"f3 منبع","f3_preview":"f3 پیش‌نمایش","text_input":"ورودی متن","esc_normal":"esc عادی","ctrl_s_save":"ctrl+s ذخیره","ctrl_t_theme":"ctrl+t پوسته","tab_focus":"tab تمرکز","tab_indent":"tab تورفتگی","ctrl_b_files":"ctrl+b فایل‌ها","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h تاریخچه","enter_open":"enter باز کردن / گسترش","backspace_up":"backspace بالا","ctrl_b_close":"ctrl+b بستن","enter_jump":"enter پرش","r_refresh":"r تازه‌سازی","ctrl_g_close":"ctrl+g بستن","ctrl_h_close":"ctrl+h بستن","i_insert":"i درج","o_open_line":"o باز کردن خط","cc_line":"cc خط","cw_word":"cw واژه","ce_word_end":"ce پایان واژه","c0_start":"c0 آغاز","c_end":"c$ پایان","dd_line":"dd خط","dw_word":"dw واژه","de_word_end":"de پایان واژه","d0_start":"d0 آغاز","d_end":"d$ پایان","yy_line":"yy خط","yw_word":"yw واژه","ye_word_end":"ye پایان واژه","y0_start":"y0 آغاز","y_end":"y$ پایان","gg_top":"gg بالا","esc_cancel":"esc لغو","type_filter":"نوشتن فیلتر","arrows_select":"↑/↓ انتخاب","slash_filter":"/ فیلتر"},"evidence":{"head":"سر","tick":"تیک","anchor":"لنگر","coverage":"پوشش","complete":"کامل","partial":"جزئی","unavailable":"در دسترس نیست"},"status":{"nav":"پیمایش","filter":"پالایش","read_only":"فقط خواندنی","modified":"ویرایش‌شده","modified_count":"{count} ویرایش‌شده","pending_count":"{count} در انتظار","buffer_count":"{count} بافر","loading":"در حال بارگیری"}},"history":{"title":"تاریخچه Echo","empty":"هنوز مدرک Echo وجود ندارد","header":"# tick نوع وضعیت مدرک خلاصه"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"چیدمان پانوشت","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"مسیر پرونده‌ها","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"تمرکز و فضای کار","footer_per_pane":"هر بخش و فضای کار","footer_compact":"فشرده","paths_git_root":"ریشه Git","paths_absolute":"مسیر کامل"},"toast":{"changed_title":"Settings changed","save_failed_title":"تنظیمات ذخیره نشد","save_failed_message":"ذخیره ~/.jimrc ممکن نشد."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"جستجو","placeholder":"فیلتر پرونده‌ها…","empty":"بدون نتیجه","preview_label":"پیش‌نمایش","preview_loading":"در حال بارگذاری پیش‌نمایش…","preview_binary":"فایل دودویی — پیش‌نمایش در دسترس نیست","preview_unavailable":"پیش‌نمایش در دسترس نیست","preview_truncated":"پیش‌نمایش کوتاه شده"}}; -export const he: TranslationSchema = {"footer":{"mode":{"browse":"עיון","insert":"הוספה","normal":"רגיל","preview":"תצוגה","settings":"הגדרות","files":"קבצים","graft":"Graft","history":"היסטוריה"},"context":{"settings":"הגדרות","graft_empty":"פתח קובץ לבדיקה","history_empty":"עדיין אין ראיות Echo","history_count":"ראיות Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k הזז","enter_change":"enter שנה","f2_close":"f2 סגור","esc_close":"esc סגור","j_k_scroll":"j/k גלול","f3_source":"f3 מקור","f3_preview":"f3 תצוגה","text_input":"קלט טקסט","esc_normal":"esc רגיל","ctrl_s_save":"ctrl+s שמור","ctrl_t_theme":"ctrl+t ערכת נושא","tab_focus":"tab מיקוד","tab_indent":"tab הזחה","ctrl_b_files":"ctrl+b קבצים","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h היסטוריה","enter_open":"enter פתח","backspace_up":"backspace למעלה","ctrl_b_close":"ctrl+b סגור","enter_jump":"enter קפוץ","r_refresh":"r רענן","ctrl_g_close":"ctrl+g סגור","ctrl_h_close":"ctrl+h סגור","i_insert":"i הוסף","o_open_line":"o פתח שורה","cc_line":"cc שורה","cw_word":"cw מילה","ce_word_end":"ce סוף מילה","c0_start":"c0 התחלה","c_end":"c$ סוף","dd_line":"dd שורה","dw_word":"dw מילה","de_word_end":"de סוף מילה","d0_start":"d0 התחלה","d_end":"d$ סוף","yy_line":"yy שורה","yw_word":"yw מילה","ye_word_end":"ye סוף מילה","y0_start":"y0 התחלה","y_end":"y$ סוף","gg_top":"gg למעלה","esc_cancel":"esc בטל","type_filter":"הקלדת סינון","arrows_select":"↑/↓ בחירה","slash_filter":"/ סינון"},"evidence":{"head":"ראש","tick":"טיק","anchor":"עוגן","coverage":"כיסוי","complete":"מלא","partial":"חלקי","unavailable":"לא זמין"},"status":{"nav":"ניווט","filter":"סינון","read_only":"לקריאה בלבד","modified":"שונה","modified_count":"{count} שונו","pending_count":"{count} בהמתנה","buffer_count":"{count} מאגרים","loading":"בטעינה"}},"history":{"title":"היסטוריית Echo","empty":"עדיין אין ראיות Echo","header":"# tick סוג מצב ראיה סיכום"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"פריסת שורת מצב","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"נתיבי קבצים","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"מיקוד וסביבת עבודה","footer_per_pane":"לפי חלונית וסביבה","footer_compact":"קומפקטי","paths_git_root":"שורש Git","paths_absolute":"נתיבים מלאים"},"toast":{"changed_title":"Settings changed","save_failed_title":"ההגדרות לא נשמרו","save_failed_message":"לא ניתן לשמור את ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"חיפוש","placeholder":"סינון קבצים…","empty":"אין התאמות","preview_label":"תצוגה מקדימה","preview_loading":"טוען תצוגה מקדימה…","preview_binary":"קובץ בינארי — אין תצוגה מקדימה","preview_unavailable":"תצוגה מקדימה אינה זמינה","preview_truncated":"תצוגה מקדימה מקוצרת"}}; +export const he: TranslationSchema = {"footer":{"mode":{"browse":"עיון","insert":"הוספה","normal":"רגיל","preview":"תצוגה","settings":"הגדרות","files":"קבצים","graft":"Graft","history":"היסטוריה"},"context":{"settings":"הגדרות","graft_empty":"פתח קובץ לבדיקה","history_empty":"עדיין אין ראיות Echo","history_count":"ראיות Echo: {count}"},"command":{"invalid":"Command not recognized; type :help for help","hints":{"tab_accept":"tab accept","enter_run":"enter run","esc_cancel":"esc cancel"},"details":{"edit":"Open a file","write":"Write the current file","quit":"Quit jedit","wq":"Write and quit","ttd":"Observe a causal tick without moving canonical head","strand":"Create, switch, or list copy-on-write strands","braid":"View, preview, or admit braid candidates","why":"Explain the last meaningful command","help":"Show command help"}},"hints":{"j_k_move":"j/k הזז","enter_change":"enter שנה","f2_close":"f2 סגור","esc_close":"esc סגור","j_k_scroll":"j/k גלול","f3_source":"f3 מקור","f3_preview":"f3 תצוגה","text_input":"קלט טקסט","esc_normal":"esc רגיל","ctrl_s_save":"ctrl+s שמור","ctrl_t_theme":"ctrl+t ערכת נושא","tab_focus":"tab מיקוד","tab_indent":"tab הזחה","ctrl_b_files":"ctrl+b קבצים","ctrl_g_graft":"ctrl+g graft","ctrl_h_history":"ctrl+h היסטוריה","enter_open":"enter פתיחה / הרחבה","backspace_up":"backspace למעלה","ctrl_b_close":"ctrl+b סגור","enter_jump":"enter קפוץ","r_refresh":"r רענן","ctrl_g_close":"ctrl+g סגור","ctrl_h_close":"ctrl+h סגור","i_insert":"i הוסף","o_open_line":"o פתח שורה","cc_line":"cc שורה","cw_word":"cw מילה","ce_word_end":"ce סוף מילה","c0_start":"c0 התחלה","c_end":"c$ סוף","dd_line":"dd שורה","dw_word":"dw מילה","de_word_end":"de סוף מילה","d0_start":"d0 התחלה","d_end":"d$ סוף","yy_line":"yy שורה","yw_word":"yw מילה","ye_word_end":"ye סוף מילה","y0_start":"y0 התחלה","y_end":"y$ סוף","gg_top":"gg למעלה","esc_cancel":"esc בטל","type_filter":"הקלדת סינון","arrows_select":"↑/↓ בחירה","slash_filter":"/ סינון"},"evidence":{"head":"ראש","tick":"טיק","anchor":"עוגן","coverage":"כיסוי","complete":"מלא","partial":"חלקי","unavailable":"לא זמין"},"status":{"nav":"ניווט","filter":"סינון","read_only":"לקריאה בלבד","modified":"שונה","modified_count":"{count} שונו","pending_count":"{count} בהמתנה","buffer_count":"{count} מאגרים","loading":"בטעינה"}},"history":{"title":"היסטוריית Echo","empty":"עדיין אין ראיות Echo","header":"# tick סוג מצב ראיה סיכום"},"startupFileModal":{"title":"Open file","current_directory":"Current directory","empty":"No files in this directory"},"settings":{"sections":{"appearance":"Appearance","editor":"Editor","runtime":"Runtime"},"rows":{"theme":{"label":"Theme","description":"Switch between installed data-driven themes."},"theme_mode":{"label":"Light/dark","description":"Switch the current theme to its light or dark companion."},"footer":{"label":"Footer","description":"Show mode, focus, and command hints at the bottom edge."},"markdown_preview":{"label":"Markdown preview","description":"Switch the active Markdown buffer between source and preview."},"diagnostics":{"label":"Diagnostics","description":"Inspect Graft, parser, and Colorful runtime wiring."},"line_numbers":{"label":"Line numbers","description":"Switch between absolute and cursor-relative editor line numbers."},"gutter_dimmed":{"label":"Dim gutter","description":"Use the theme dimmed gutter token set."},"causal_gutter_basis":{"label":"Causal markers","description":"Choose the causal basis used by gutter change markers."},"footer_layout":{"label":"פריסת שורת מצב","description":"{layout} · ~/.jimrc"},"filepaths":{"label":"נתיבי קבצים","description":"{style} · ~/.jimrc"}},"values":{"on":"On","off":"Off","theme_mode_dark":"Dark","theme_mode_light":"Light","line_numbers_absolute":"Absolute","line_numbers_relative":"Relative","source":"Source","preview":"Preview","current":"Current","open":"Open","causal_gutter_last_save":"Last save","causal_gutter_import":"Import","causal_gutter_selected_checkpoint":"Selected checkpoint","causal_gutter_selected_tick":"Selected tick","footer_focused":"מיקוד וסביבת עבודה","footer_per_pane":"לפי חלונית וסביבה","footer_compact":"קומפקטי","paths_git_root":"שורש Git","paths_absolute":"נתיבים מלאים"},"toast":{"changed_title":"Settings changed","save_failed_title":"ההגדרות לא נשמרו","save_failed_message":"לא ניתן לשמור את ~/.jimrc."}},"worldline":{"title":"Worldlines","empty":"No worldlines yet","header":"kind name basis head delta conflict"},"why":{"range_obstructed_title":"Why range obstructed"},"fileExplorer":{"search_label":"חיפוש","placeholder":"סינון קבצים…","empty":"אין התאמות","preview_label":"תצוגה מקדימה","preview_loading":"טוען תצוגה מקדימה…","preview_binary":"קובץ בינארי — אין תצוגה מקדימה","preview_unavailable":"תצוגה מקדימה אינה זמינה","preview_truncated":"תצוגה מקדימה מקוצרת"}}; -export const me: TranslationSchema = {"footer":{"mode":{"browse":"esworb","insert":"tresni","normal":"lamron","preview":"weiverp","settings":"sgnittes","files":"selif","graft":"tfarg","history":"yrotsih"},"context":{"settings":"sgnittes","graft_empty":"ti tcepsni ot elif a nepo","history_empty":"tey ecnedive ohcE on","history_count":"{count} :ecnedive ohcE"},"command":{"invalid":"pleh rof pleh: epyt ;dezingocer ton dnammoC","hints":{"tab_accept":"tpecca bat","enter_run":"nur retne","esc_cancel":"lecnac cse"},"details":{"edit":"elif a nepO","write":"elif tnerruc eht etirW","quit":"tidej tiuQ","wq":"tiuq dna etirW","ttd":"daeh lacinonac gnivom tuohtiw kcit lasuac a evresbO","strand":"sdnarts etirw-no-ypoc tsil ro ,hctiws ,etaerC","braid":"setadidnac diarb timda ro ,weiverp ,weiV","why":"dnammoc lufgninaem tsal eht nialpxE","help":"pleh dnammoc wohS"}},"hints":{"j_k_move":"evom k/j","enter_change":"egnahc retne","f2_close":"esolc 2f","esc_close":"esolc cse","j_k_scroll":"llorcs k/j","f3_source":"ecruos 3f","f3_preview":"weiverp 3f","text_input":"tupni txet","esc_normal":"lamron cse","ctrl_s_save":"evas s+lrtc","ctrl_t_theme":"emeht t+lrtc","tab_focus":"sucof bat","tab_indent":"tnedni bat","ctrl_b_files":"selif b+lrtc","ctrl_g_graft":"tfarg g+lrtc","ctrl_h_history":"yrotsih h+lrtc","enter_open":"nepo retne","backspace_up":"pu ecapskcab","ctrl_b_close":"esolc b+lrtc","enter_jump":"pmuj retne","r_refresh":"hserfer r","ctrl_g_close":"esolc g+lrtc","ctrl_h_close":"esolc h+lrtc","i_insert":"tresni i","o_open_line":"enil nepo o","cc_line":"enil cc","cw_word":"drow wc","ce_word_end":"dne-drow ec","c0_start":"trats 0c","c_end":"dne $c","dd_line":"enil dd","dw_word":"drow wd","de_word_end":"dne-drow ed","d0_start":"trats 0d","d_end":"dne $d","yy_line":"enil yy","yw_word":"drow wy","ye_word_end":"dne-drow ey","y0_start":"trats 0y","y_end":"dne $y","gg_top":"pot gg","esc_cancel":"lecnac cse","type_filter":"retlif epyt","arrows_select":"tceles ↓/↑","slash_filter":"retlif /"},"evidence":{"head":"daeh","tick":"kcit","anchor":"rohcna","coverage":"egarevoc","complete":"etelpmoc","partial":"laitrap","unavailable":"elbaliavanu"},"status":{"nav":"van","filter":"retlif","read_only":"ylno-daer","modified":"deifidom","modified_count":"deifidom {count}","pending_count":"gnidnep {count}","buffer_count":"sreffub {count}","loading":"gnidaol"}},"history":{"title":"yrotsiH ohcE","empty":"tey ecnedive ohcE oN","header":"yrammus ecnedive sutats dnik kcit #"},"startupFileModal":{"title":"elif nepO","current_directory":"yrotcerid tnerruC","empty":"yrotcerid siht ni selif oN"},"settings":{"sections":{"appearance":"ecnaraeppA","editor":"rotidE","runtime":"emitnuR"},"rows":{"theme":{"label":"emehT","description":".semeht nevird-atad dellatsni neewteb hctiwS"},"theme_mode":{"label":"krad/thgiL","description":".noinapmoc krad ro thgil sti ot emeht tnerruc eht hctiwS"},"footer":{"label":"retooF","description":".egde mottob eht ta stnih dnammoc dna ,sucof ,edom wohS"},"markdown_preview":{"label":"weiverp nwodkraM","description":".weiverp dna ecruos neewteb reffub nwodkraM evitca eht hctiwS"},"diagnostics":{"label":"scitsongaiD","description":".gniriw emitnur lufroloC dna ,resrap ,tfarG tcepsnI"},"line_numbers":{"label":"srebmun eniL","description":".srebmun enil rotide evitaler-rosruc dna etulosba neewteb hctiwS"},"gutter_dimmed":{"label":"rettug miD","description":".tes nekot rettug demmid emeht eht esU"},"causal_gutter_basis":{"label":"srekram lasuaC","description":".srekram egnahc rettug yb desu sisab lasuac eht esoohC"},"footer_layout":{"label":"tuoyal retooF","description":"crmij./~ · {layout}"},"filepaths":{"label":"shtapeliF","description":"crmij./~ · {style}"}},"values":{"on":"nO","off":"ffO","theme_mode_dark":"kraD","theme_mode_light":"thgiL","line_numbers_absolute":"etulosbA","line_numbers_relative":"evitaleR","source":"ecruoS","preview":"weiverP","current":"tnerruC","open":"nepO","causal_gutter_last_save":"evas tsaL","causal_gutter_import":"tropmI","causal_gutter_selected_checkpoint":"tniopkcehc detceleS","causal_gutter_selected_tick":"kcit detceleS","footer_focused":"ecapskrow + desucoF","footer_per_pane":"ecapskrow + enap-reP","footer_compact":"tcapmoC","paths_git_root":"toor tiG","paths_absolute":"deifilauq ylluF"},"toast":{"changed_title":"degnahc sgnitteS","save_failed_title":"devas ton sgnitteS","save_failed_message":".degnahcnu si gnittes ehT .snoissimrep dna NOSJ sti kcehC .crmij./~ evas ton dluoC"}},"worldline":{"title":"senildlroW","empty":"tey senildlrow oN","header":"tcilfnoc atled daeh sisab eman dnik"},"why":{"range_obstructed_title":"detcurtsbo egnar yhW"},"fileExplorer":{"search_label":"hcraeS","placeholder":"…selif retliF","empty":"sehctam oN","preview_label":"weiverP","preview_loading":"…weiverp gnidaoL","preview_binary":"elbaliavanu weiverp — elif yraniB","preview_unavailable":"elbaliavanu weiverP","preview_truncated":"detacnurt weiverP"}}; +export const me: TranslationSchema = {"footer":{"mode":{"browse":"esworb","insert":"tresni","normal":"lamron","preview":"weiverp","settings":"sgnittes","files":"selif","graft":"tfarg","history":"yrotsih"},"context":{"settings":"sgnittes","graft_empty":"ti tcepsni ot elif a nepo","history_empty":"tey ecnedive ohcE on","history_count":"{count} :ecnedive ohcE"},"command":{"invalid":"pleh rof pleh: epyt ;dezingocer ton dnammoC","hints":{"tab_accept":"tpecca bat","enter_run":"nur retne","esc_cancel":"lecnac cse"},"details":{"edit":"elif a nepO","write":"elif tnerruc eht etirW","quit":"tidej tiuQ","wq":"tiuq dna etirW","ttd":"daeh lacinonac gnivom tuohtiw kcit lasuac a evresbO","strand":"sdnarts etirw-no-ypoc tsil ro ,hctiws ,etaerC","braid":"setadidnac diarb timda ro ,weiverp ,weiV","why":"dnammoc lufgninaem tsal eht nialpxE","help":"pleh dnammoc wohS"}},"hints":{"j_k_move":"evom k/j","enter_change":"egnahc retne","f2_close":"esolc 2f","esc_close":"esolc cse","j_k_scroll":"llorcs k/j","f3_source":"ecruos 3f","f3_preview":"weiverp 3f","text_input":"tupni txet","esc_normal":"lamron cse","ctrl_s_save":"evas s+lrtc","ctrl_t_theme":"emeht t+lrtc","tab_focus":"sucof bat","tab_indent":"tnedni bat","ctrl_b_files":"selif b+lrtc","ctrl_g_graft":"tfarg g+lrtc","ctrl_h_history":"yrotsih h+lrtc","enter_open":"elggot / nepo retne","backspace_up":"pu ecapskcab","ctrl_b_close":"esolc b+lrtc","enter_jump":"pmuj retne","r_refresh":"hserfer r","ctrl_g_close":"esolc g+lrtc","ctrl_h_close":"esolc h+lrtc","i_insert":"tresni i","o_open_line":"enil nepo o","cc_line":"enil cc","cw_word":"drow wc","ce_word_end":"dne-drow ec","c0_start":"trats 0c","c_end":"dne $c","dd_line":"enil dd","dw_word":"drow wd","de_word_end":"dne-drow ed","d0_start":"trats 0d","d_end":"dne $d","yy_line":"enil yy","yw_word":"drow wy","ye_word_end":"dne-drow ey","y0_start":"trats 0y","y_end":"dne $y","gg_top":"pot gg","esc_cancel":"lecnac cse","type_filter":"retlif epyt","arrows_select":"tceles ↓/↑","slash_filter":"retlif /"},"evidence":{"head":"daeh","tick":"kcit","anchor":"rohcna","coverage":"egarevoc","complete":"etelpmoc","partial":"laitrap","unavailable":"elbaliavanu"},"status":{"nav":"van","filter":"retlif","read_only":"ylno-daer","modified":"deifidom","modified_count":"deifidom {count}","pending_count":"gnidnep {count}","buffer_count":"sreffub {count}","loading":"gnidaol"}},"history":{"title":"yrotsiH ohcE","empty":"tey ecnedive ohcE oN","header":"yrammus ecnedive sutats dnik kcit #"},"startupFileModal":{"title":"elif nepO","current_directory":"yrotcerid tnerruC","empty":"yrotcerid siht ni selif oN"},"settings":{"sections":{"appearance":"ecnaraeppA","editor":"rotidE","runtime":"emitnuR"},"rows":{"theme":{"label":"emehT","description":".semeht nevird-atad dellatsni neewteb hctiwS"},"theme_mode":{"label":"krad/thgiL","description":".noinapmoc krad ro thgil sti ot emeht tnerruc eht hctiwS"},"footer":{"label":"retooF","description":".egde mottob eht ta stnih dnammoc dna ,sucof ,edom wohS"},"markdown_preview":{"label":"weiverp nwodkraM","description":".weiverp dna ecruos neewteb reffub nwodkraM evitca eht hctiwS"},"diagnostics":{"label":"scitsongaiD","description":".gniriw emitnur lufroloC dna ,resrap ,tfarG tcepsnI"},"line_numbers":{"label":"srebmun eniL","description":".srebmun enil rotide evitaler-rosruc dna etulosba neewteb hctiwS"},"gutter_dimmed":{"label":"rettug miD","description":".tes nekot rettug demmid emeht eht esU"},"causal_gutter_basis":{"label":"srekram lasuaC","description":".srekram egnahc rettug yb desu sisab lasuac eht esoohC"},"footer_layout":{"label":"tuoyal retooF","description":"crmij./~ · {layout}"},"filepaths":{"label":"shtapeliF","description":"crmij./~ · {style}"}},"values":{"on":"nO","off":"ffO","theme_mode_dark":"kraD","theme_mode_light":"thgiL","line_numbers_absolute":"etulosbA","line_numbers_relative":"evitaleR","source":"ecruoS","preview":"weiverP","current":"tnerruC","open":"nepO","causal_gutter_last_save":"evas tsaL","causal_gutter_import":"tropmI","causal_gutter_selected_checkpoint":"tniopkcehc detceleS","causal_gutter_selected_tick":"kcit detceleS","footer_focused":"ecapskrow + desucoF","footer_per_pane":"ecapskrow + enap-reP","footer_compact":"tcapmoC","paths_git_root":"toor tiG","paths_absolute":"deifilauq ylluF"},"toast":{"changed_title":"degnahc sgnitteS","save_failed_title":"devas ton sgnitteS","save_failed_message":".degnahcnu si gnittes ehT .snoissimrep dna NOSJ sti kcehC .crmij./~ evas ton dluoC"}},"worldline":{"title":"senildlroW","empty":"tey senildlrow oN","header":"tcilfnoc atled daeh sisab eman dnik"},"why":{"range_obstructed_title":"detcurtsbo egnar yhW"},"fileExplorer":{"search_label":"hcraeS","placeholder":"…selif retliF","empty":"sehctam oN","preview_label":"weiverP","preview_loading":"…weiverp gnidaoL","preview_binary":"elbaliavanu weiverp — elif yraniB","preview_unavailable":"elbaliavanu weiverP","preview_truncated":"detacnurt weiverP"}}; export const locales = ["en", "fr", "it", "de", "es", "ko", "ja", "zh-Hans", "pt-BR", "ru", "ar", "id", "tr", "hi", "nl", "pl", "vi", "th", "fa", "he", "me"] as const; diff --git a/src/ports/source-highlighter.ts b/src/ports/source-highlighter.ts index ab0b5b1d..5b6564dd 100644 --- a/src/ports/source-highlighter.ts +++ b/src/ports/source-highlighter.ts @@ -64,3 +64,9 @@ export interface SourceHighlightReading { export interface SourceHighlighter { highlight(input: SourceHighlightInput): Promise; } + +export type PreviewHighlightInput = Pick; + +export interface PreviewHighlighter { + highlightPreview(input: PreviewHighlightInput): Promise; +} diff --git a/src/ui/file-preview-syntax.ts b/src/ui/file-preview-syntax.ts new file mode 100644 index 00000000..2eb96b01 --- /dev/null +++ b/src/ui/file-preview-syntax.ts @@ -0,0 +1,45 @@ +import { segmentGraphemes, type Surface } from '@flyingrobots/bijou'; +import type { SourceHighlightReading } from '../ports/source-highlighter.js'; +import type { JeditTheme } from './jedit-theme.js'; +import { visibleLineLength } from './fit-line.js'; +import { sourceHighlightStyleAt } from './source-highlight.js'; + +export interface PreviewSyntaxPaintOptions { + readonly x: number; + readonly y: number; + readonly width: number; + readonly height: number; + readonly theme: JeditTheme; +} + +export function paintPreviewSyntax( + surface: Surface, + lines: readonly string[], + highlight: SourceHighlightReading | undefined, + options: PreviewSyntaxPaintOptions, +): void { + lines.slice(0, options.height).forEach((line, row) => paintSyntaxLine(surface, line, row, highlight, options)); +} + +function paintSyntaxLine( + surface: Surface, + line: string, + row: number, + highlight: SourceHighlightReading | undefined, + options: PreviewSyntaxPaintOptions, +): void { + let column = 0; + let sourceColumn = 0; + for (const grapheme of segmentGraphemes(line)) { + const width = visibleLineLength(grapheme); + const style = sourceHighlightStyleAt(highlight?.spans ?? [], row, sourceColumn, options.theme); + for (let cell = 0; cell < width && column + cell < options.width; cell += 1) { + const x = options.x + column + cell; + const y = options.y + row; + surface.set(x, y, { ...surface.get(x, y), ...style }); + } + sourceColumn += grapheme.length; + column += width; + if (column >= options.width) break; + } +} diff --git a/src/ui/file-search-results.ts b/src/ui/file-search-results.ts index 8a31a073..ffd747e2 100644 --- a/src/ui/file-search-results.ts +++ b/src/ui/file-search-results.ts @@ -1,3 +1,4 @@ +import { fileTreeNameColumn } from './workspace-render.js'; import type { Surface } from '@flyingrobots/bijou'; import type { FileSearchEntry } from '../app/workspace/file-search.js'; import { filledSelectionToken } from './filled-selection-token.js'; @@ -5,16 +6,15 @@ import type { JeditTheme } from './jedit-theme.js'; import { JEDIT_TEXT_MODIFIER } from './jedit-theme.js'; import { visibleLineLength } from './fit-line.js'; -const ENTRY_PREFIX_WIDTH = 2; const CHARACTER_STEP = 1; export function highlightFileSearchMatches(surface: Surface, entries: readonly FileSearchEntry[], theme: JeditTheme, selection: FileSearchSelection): void { - entries.forEach(({ entry, matchIndexes, index: sourceIndex }, row) => { + entries.forEach(({ entry, matchIndexes, index: sourceIndex, depth }, row) => { const selected = sourceIndex === selection.selectedIndex; paintFileSearchRow(surface, row, theme, { selected, hovered: sourceIndex === selection.hoveredIndex }); const characters = Array.from(entry.name); for (const index of matchIndexes) { - const column = ENTRY_PREFIX_WIDTH + visibleLineLength(characters.slice(0, index).join('')); + const column = fileTreeNameColumn(entry, depth) + visibleLineLength(characters.slice(0, index).join('')); const width = visibleLineLength(characters[index] ?? ''); for (let x = column; x < Math.min(surface.width, column + width); x += CHARACTER_STEP) { const cell = surface.get(x, row); diff --git a/src/ui/source-highlight.ts b/src/ui/source-highlight.ts index c710ee09..836e92ec 100644 --- a/src/ui/source-highlight.ts +++ b/src/ui/source-highlight.ts @@ -40,7 +40,7 @@ export function paintHighlightedSourceWindow( for (let col = ZERO_INDEX; col < safeWidth; col += 1) { const sourceCol = safeScrollCol + col; const char = sourceText[sourceCol] ?? SPACE_CHAR; - const style = styleAt( + const style = sourceHighlightStyleAt( highlight?.spans ?? [], sourceRow, sourceCol, @@ -55,7 +55,7 @@ export function paintHighlightedSourceWindow( } } -function styleAt( +export function sourceHighlightStyleAt( spans: readonly SourceHighlightSpan[], row: number, column: number, diff --git a/src/ui/workspace-render.ts b/src/ui/workspace-render.ts index 8aaccc75..86ec5350 100644 --- a/src/ui/workspace-render.ts +++ b/src/ui/workspace-render.ts @@ -30,15 +30,25 @@ export function formatGraftOutlineLine(item: GraftOutlineDisplayItem, options: S return `${prefix}${item.kind} ${item.name} · ${String(item.startLine)}`; } -export function formatTreeLine(entry: FileEntry, options: SelectableLineOptions): string { +export interface TreeLineOptions extends SelectableLineOptions { + readonly depth?: number; + readonly expanded?: boolean; +} + +export function fileTreeNameColumn(entry: FileEntry, depth = 0): number { + return 2 + depth * 2 + (entry.kind === FileEntryKinds.Directory ? 2 : 0); +} + +export function formatTreeLine(entry: FileEntry, options: TreeLineOptions): string { const prefix = options.selected ? '› ' : ' '; if (entry.kind === FileEntryKinds.Parent) { return `${prefix}../`; } if (entry.kind === FileEntryKinds.Directory) { - return `${prefix}${entry.name}/`; + const disclosure = options.expanded ? '▾' : '▸'; + return `${prefix}${' '.repeat(options.depth ?? 0)}${disclosure} ${entry.name}/`; } - return `${prefix}${entry.name}`; + return `${prefix}${' '.repeat(options.depth ?? 0)}${entry.name}`; } export function graftOutlineScroll(selectedIndex: number, total: number, visible: number): number { diff --git a/translations.json b/translations.json index b99122bd..540327e5 100644 --- a/translations.json +++ b/translations.json @@ -57,7 +57,7 @@ "ctrl_b_files": "ctrl+b files", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h history", - "enter_open": "enter open", + "enter_open": "enter open / toggle", "backspace_up": "backspace up", "ctrl_b_close": "ctrl+b close", "enter_jump": "enter jump", @@ -269,7 +269,7 @@ "ctrl_b_files": "ctrl+b fichiers", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h historique", - "enter_open": "enter ouvrir", + "enter_open": "entrée ouvrir / déplier", "backspace_up": "backspace haut", "ctrl_b_close": "ctrl+b fermer", "enter_jump": "enter aller", @@ -481,7 +481,7 @@ "ctrl_b_files": "ctrl+b file", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h cronologia", - "enter_open": "enter apri", + "enter_open": "invio apri / espandi", "backspace_up": "backspace su", "ctrl_b_close": "ctrl+b chiudi", "enter_jump": "enter vai", @@ -693,7 +693,7 @@ "ctrl_b_files": "ctrl+b dateien", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h verlauf", - "enter_open": "enter öffnen", + "enter_open": "eingabe öffnen / aufklappen", "backspace_up": "backspace hoch", "ctrl_b_close": "ctrl+b schließen", "enter_jump": "enter springen", @@ -905,7 +905,7 @@ "ctrl_b_files": "ctrl+b archivos", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h historial", - "enter_open": "enter abrir", + "enter_open": "intro abrir / desplegar", "backspace_up": "backspace arriba", "ctrl_b_close": "ctrl+b cerrar", "enter_jump": "enter saltar", @@ -1117,7 +1117,7 @@ "ctrl_b_files": "ctrl+b 파일", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h 기록", - "enter_open": "enter 열기", + "enter_open": "enter 열기 / 펼치기", "backspace_up": "backspace 위로", "ctrl_b_close": "ctrl+b 닫기", "enter_jump": "enter 이동", @@ -1329,7 +1329,7 @@ "ctrl_b_files": "ctrl+b ファイル", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h 履歴", - "enter_open": "enter 開く", + "enter_open": "enter 開く / 展開", "backspace_up": "backspace 上へ", "ctrl_b_close": "ctrl+b 閉じる", "enter_jump": "enter 移動", @@ -1541,7 +1541,7 @@ "ctrl_b_files": "ctrl+b 文件", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h 历史", - "enter_open": "enter 打开", + "enter_open": "enter 打开 / 展开", "backspace_up": "backspace 上一级", "ctrl_b_close": "ctrl+b 关闭", "enter_jump": "enter 跳转", @@ -1753,7 +1753,7 @@ "ctrl_b_files": "ctrl+b arquivos", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h histórico", - "enter_open": "enter abrir", + "enter_open": "enter abrir / expandir", "backspace_up": "backspace subir", "ctrl_b_close": "ctrl+b fechar", "enter_jump": "enter ir", @@ -1965,7 +1965,7 @@ "ctrl_b_files": "ctrl+b файлы", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h история", - "enter_open": "enter открыть", + "enter_open": "enter открыть / развернуть", "backspace_up": "backspace вверх", "ctrl_b_close": "ctrl+b закрыть", "enter_jump": "enter перейти", @@ -2177,7 +2177,7 @@ "ctrl_b_files": "ctrl+b ملفات", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h سجل", - "enter_open": "enter فتح", + "enter_open": "enter فتح / توسيع", "backspace_up": "backspace أعلى", "ctrl_b_close": "ctrl+b إغلاق", "enter_jump": "enter انتقال", @@ -2389,7 +2389,7 @@ "ctrl_b_files": "ctrl+b berkas", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h riwayat", - "enter_open": "enter buka", + "enter_open": "enter buka / luaskan", "backspace_up": "backspace naik", "ctrl_b_close": "ctrl+b tutup", "enter_jump": "enter lompat", @@ -2601,7 +2601,7 @@ "ctrl_b_files": "ctrl+b dosyalar", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h geçmiş", - "enter_open": "enter aç", + "enter_open": "enter aç / genişlet", "backspace_up": "backspace yukarı", "ctrl_b_close": "ctrl+b kapat", "enter_jump": "enter git", @@ -2813,7 +2813,7 @@ "ctrl_b_files": "ctrl+b फाइलें", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h इतिहास", - "enter_open": "enter खोलें", + "enter_open": "enter खोलें / फैलाएँ", "backspace_up": "backspace ऊपर", "ctrl_b_close": "ctrl+b बंद", "enter_jump": "enter जाएं", @@ -3025,7 +3025,7 @@ "ctrl_b_files": "ctrl+b bestanden", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h geschiedenis", - "enter_open": "enter openen", + "enter_open": "enter openen / uitklappen", "backspace_up": "backspace omhoog", "ctrl_b_close": "ctrl+b sluiten", "enter_jump": "enter springen", @@ -3237,7 +3237,7 @@ "ctrl_b_files": "ctrl+b pliki", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h historia", - "enter_open": "enter otwórz", + "enter_open": "enter otwórz / rozwiń", "backspace_up": "backspace w górę", "ctrl_b_close": "ctrl+b zamknij", "enter_jump": "enter skocz", @@ -3449,7 +3449,7 @@ "ctrl_b_files": "ctrl+b tệp", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h lịch sử", - "enter_open": "enter mở", + "enter_open": "enter mở / mở rộng", "backspace_up": "backspace lên", "ctrl_b_close": "ctrl+b đóng", "enter_jump": "enter nhảy", @@ -3661,7 +3661,7 @@ "ctrl_b_files": "ctrl+b ไฟล์", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h ประวัติ", - "enter_open": "enter เปิด", + "enter_open": "enter เปิด / ขยาย", "backspace_up": "backspace ขึ้น", "ctrl_b_close": "ctrl+b ปิด", "enter_jump": "enter ไป", @@ -3873,7 +3873,7 @@ "ctrl_b_files": "ctrl+b فایل‌ها", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h تاریخچه", - "enter_open": "enter باز کردن", + "enter_open": "enter باز کردن / گسترش", "backspace_up": "backspace بالا", "ctrl_b_close": "ctrl+b بستن", "enter_jump": "enter پرش", @@ -4085,7 +4085,7 @@ "ctrl_b_files": "ctrl+b קבצים", "ctrl_g_graft": "ctrl+g graft", "ctrl_h_history": "ctrl+h היסטוריה", - "enter_open": "enter פתח", + "enter_open": "enter פתיחה / הרחבה", "backspace_up": "backspace למעלה", "ctrl_b_close": "ctrl+b סגור", "enter_jump": "enter קפוץ", From 26bba0062c6a76911372cbecf9169c8baee9d68a Mon Sep 17 00:00:00 2001 From: James Ross Date: Thu, 15 Oct 2026 10:02:18 -0700 Subject: [PATCH 3/3] Preserve explorer row identity and record native expansion witnesses --- ...164-explorer-inline-tree-preview-syntax.md | 26 ++++++++-- docs/design/0164-explorer-witness/README.md | 46 ++++++++++++++++++ .../collapsed-nested-dark-100x32.png | Bin 0 -> 95414 bytes .../filtered-nested-dark-100x32.png | Bin 0 -> 33300 bytes .../nested-syntax-dark-100x32.png | Bin 0 -> 43187 bytes .../nested-syntax-dark-60x12.png | Bin 0 -> 31307 bytes .../nested-syntax-light-rtl-60x16.png | Bin 0 -> 36253 bytes .../design/0164-explorer-witness/receipt.json | 35 +++++++++++++ src/app/workspace/file-search.ts | 6 +-- 9 files changed, 106 insertions(+), 7 deletions(-) create mode 100644 docs/design/0164-explorer-witness/README.md create mode 100644 docs/design/0164-explorer-witness/collapsed-nested-dark-100x32.png create mode 100644 docs/design/0164-explorer-witness/filtered-nested-dark-100x32.png create mode 100644 docs/design/0164-explorer-witness/nested-syntax-dark-100x32.png create mode 100644 docs/design/0164-explorer-witness/nested-syntax-dark-60x12.png create mode 100644 docs/design/0164-explorer-witness/nested-syntax-light-rtl-60x16.png create mode 100644 docs/design/0164-explorer-witness/receipt.json diff --git a/docs/design/0164-explorer-inline-tree-preview-syntax.md b/docs/design/0164-explorer-inline-tree-preview-syntax.md index f6fb28c1..ed54b054 100644 --- a/docs/design/0164-explorer-inline-tree-preview-syntax.md +++ b/docs/design/0164-explorer-inline-tree-preview-syntax.md @@ -89,7 +89,7 @@ browsing. Closing Files reveals the existing editor unchanged. ### Wide UI Mockup -100x32, current theme: +100x32, current theme. [Native capture](0164-explorer-witness/nested-syntax-dark-100x32.png): ```text Files / filter Preview · main.ts @@ -102,7 +102,7 @@ Files / filter Preview · main.ts ### Narrow UI Mockup -60x12: the same pinned header and indented rows use the existing list viewport. +60x12, [native capture](0164-explorer-witness/nested-syntax-dark-60x12.png): the same pinned header and indented rows use the existing list viewport. The selected row remains visible through collapse/expand and scrolling. The preview occupies the existing main viewer, with clipped lines and syntax tokens. @@ -177,7 +177,7 @@ startup-picker and explicit file-opening behaviors. - [x] Slice 1: Inline directory state, rendering, keyboard and pointer behavior. - [x] Slice 2: Basis-free Graft preview highlighting and stale/failure protection. -- [ ] Slice 3: Native witnesses, full checks and review handoff. +- [x] Slice 3: Native witnesses, full checks and review handoff. ## Tests To Write First @@ -215,4 +215,22 @@ None introduced by this scope. Global recursive search remains outside this cycl ## Retrospective -Pending implementation and validation. +Inline expansion, collapse, filtered ancestry and read-only syntax are implemented. +File clicks remain previews; Enter remains an explicit open for files. Directory +clicks and Enter share one lazy filesystem operation. The preview port omits an +editor-head basis, and parser failures preserve readable text. + +Tests exposed one interaction refinement: filter ancestry must not steal the +initial selection from the actual match. A later full check found that row +identity needed to remain index-based rather than path-based. Both have focused +regressions, and the corrected full check passed 907 tests: 895 passed, 12 existing +skips, zero failures. Quality has no new debt; all 140 specs are assigned. + +[Native evidence](0164-explorer-witness/README.md) covers mouse and Enter toggles, +root preservation, nested/filtered rows, dark 100x32 and minimum 60x12, and Arabic +light 60x16. Graft produced 13 syntax spans while preview authority remained none +and textRequestId remained 0. Only explicit file Enter opened a buffer. +Arabic rasterization proves alignment, not terminal-specific shaping. + +PR: https://github.com/flyingrobots/jedit/pull/349. The change is stacked on footer +PR #344; the separate Dojo Feed branch is not part of this change. diff --git a/docs/design/0164-explorer-witness/README.md b/docs/design/0164-explorer-witness/README.md new file mode 100644 index 00000000..43e4f503 --- /dev/null +++ b/docs/design/0164-explorer-witness/README.md @@ -0,0 +1,46 @@ +# Inline explorer and preview syntax witnesses + +These captures render Surface cells from the native Bijou terminal loop with +production Echo and the installed Graft parser. The fixture is synthetic local +TypeScript source. The committed helper reproduces the flow. + +| Capture | Behavior | +| --- | --- | +| [Nested folders and colored source, 100x32](nested-syntax-dark-100x32.png) | Click expanded src/components; clicking panel.ts previewed 13 syntax spans. | +| [Filtered hierarchy, 100x32](filtered-nested-dark-100x32.png) | /panel retained src and components, selected panel.ts, and kept its colored preview. | +| [Collapsed folder, 100x32](collapsed-nested-dark-100x32.png) | Enter removed components' children and kept sibling main.ts visible. | +| [Minimum-size dark, 60x12](nested-syntax-dark-60x12.png) | Enter expanded both levels; selection/indentation and keyword/string/number colors fit. | +| [Arabic/light, 60x16](nested-syntax-light-rtl-60x16.png) | Localized preview label and footer, literal paths/source, themed syntax colors. | + +Recorded native observations: + +- The explorer cwd stayed identical across all wide-run operations. +- The selected preview contained 13 Graft syntax spans; textRequestId stayed 0 + and authority stayed none during folder operations and preview selection. +- Enter on the selected file then produced textRequestId 1, editor focus and + opened authority through the production Echo path. +- Mouse expanded directories; keyboard Enter collapsed and reopened them. + +The cell images use Menlo with Apple Symbols/Geeza Pro fallback fonts. +Arabic glyph shaping is terminal-dependent; this rasterization verifies cell +alignment and literal code/path order, not full Arabic shaping. +`receipt.json` records dimensions and captured-cell digests. + +Reproduce after `npm run build`: + +```sh +node scripts/explorer-inline-witness.mjs +JIM_EXPLORER_WITNESS_LOCALE=ar JIM_EXPLORER_WITNESS_LIGHT=1 node scripts/explorer-inline-witness.mjs +``` + +The helper writes synthetic files, isolated preferences and Echo WAL to a fresh +temporary directory. Its path is in `/tmp/jim-inline-tree-witness-directory.txt`. +Use Ctrl+B, then j Enter j Enter j to expand both levels and select panel.ts. +Clicking the same directory rows exercises pointer toggling. Type /panel to +filter; Esc exits filtering. Enter on the file opens it. Ctrl+C exits. + +Validation: 47 focused explorer/Graft tests passed; the selection-index +correction then passed 24 focused navigation/tree/syntax tests. The final full +local check passed 907 tests: 895 passed, 12 existing skips, zero failures, and +no quality regressions. All 140 specs belong to CI shards. Hosted exact-head +checks are recorded in PR #349. diff --git a/docs/design/0164-explorer-witness/collapsed-nested-dark-100x32.png b/docs/design/0164-explorer-witness/collapsed-nested-dark-100x32.png new file mode 100644 index 0000000000000000000000000000000000000000..170170b9c52887efb5fcbf5776b433071e9dee09 GIT binary patch literal 95414 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 literal 0 HcmV?d00001 diff --git a/docs/design/0164-explorer-witness/nested-syntax-dark-100x32.png b/docs/design/0164-explorer-witness/nested-syntax-dark-100x32.png new file mode 100644 index 0000000000000000000000000000000000000000..571853afd5e8c8f83fe3dc668a66879c8cf6935c GIT binary patch literal 43187 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 V;*>W1)q2p5I8RqUmvv4FO#spo-@*U@ literal 0 HcmV?d00001 diff --git a/docs/design/0164-explorer-witness/nested-syntax-dark-60x12.png b/docs/design/0164-explorer-witness/nested-syntax-dark-60x12.png new file mode 100644 index 0000000000000000000000000000000000000000..6706a17e9519053b190bb5ab7677fcdb1150551e GIT binary patch literal 31307 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 literal 0 HcmV?d00001 diff --git a/docs/design/0164-explorer-witness/nested-syntax-light-rtl-60x16.png b/docs/design/0164-explorer-witness/nested-syntax-light-rtl-60x16.png new file mode 100644 index 0000000000000000000000000000000000000000..d8d6c0067cc11defcbb27687b53335671789266a GIT binary patch literal 36253 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 k3*yBO1W+yQ>U2lQ7v1nPG#I4 [row.entry.path, row])); - const included = new Set(rows.keys()); + const rows = new Map(matches.map((row) => [row.index, row])); + const included = new Set(matches.map((row) => row.entry.path)); for (const match of matches) { let parent = model.fileTree?.[match.entry.path]?.parentPath; while (parent != null && !included.has(parent)) { @@ -63,7 +63,7 @@ function withTreeAncestors(model: FileSearchModel, matches: readonly FileSearchE } } return model.entries.flatMap((entry, index) => included.has(entry.path) - ? [{ ...(rows.get(entry.path) ?? { entry, index, matchIndexes: [], matchesQuery: false }), ...model.fileTree?.[entry.path] }] + ? [{ ...(rows.get(index) ?? { entry, index, matchIndexes: [], matchesQuery: false }), ...model.fileTree?.[entry.path] }] : []); }