feat(desktop): embed BoosAPI Desktop client as a subproject

Vendor the rebranded BoosAPI Desktop client (Tauri + Vue) into metapi as
a monorepo subdirectory under desktop/. Source only — node_modules,
dist, Cargo target and the upstream .git history are excluded.

desktop/ keeps its own independent Cargo workspace (desktop/src-tauri
with crates/*); it is not part of the backend boosapi crate, so a
`cargo check` at the metapi root still compiles only the backend. Build
the desktop app from desktop/src-tauri per desktop/README.md.

Note: app icons are still placeholder assets pending the final BoosAPI
logo. The updater signing keys live outside the repo and are not
included.
This commit is contained in:
boos
2026-06-22 11:32:57 +08:00
parent d9c78ecc73
commit e0a5f57793
2305 changed files with 449355 additions and 0 deletions
@@ -0,0 +1,229 @@
import { describe, expect, it } from 'vitest'
import {
activateDiffUnchangedExpandAction,
bindDiffUnchangedRevealButtonAction,
collectDiffUnchangedViewZoneIds,
findDiffUnchangedActivationAction,
findDiffUnchangedExpandAction,
resolveDiffUnchangedWheelScrollTarget,
resolveDiffUnchangedViewZoneHeight,
shouldHandleDiffUnchangedCenterClick,
shouldHandleDiffUnchangedWheel,
shouldIgnoreDiffUnchangedCenterClickTarget,
} from '../src/core/diffUnchangedDom'
describe('diffUnchangedDom helpers', () => {
it('resolves unchanged view-zone heights from style', () => {
expect(resolveDiffUnchangedViewZoneHeight('simple')).toBe(28)
expect(resolveDiffUnchangedViewZoneHeight('line-info')).toBe(32)
expect(resolveDiffUnchangedViewZoneHeight('line-info-basic')).toBe(32)
expect(resolveDiffUnchangedViewZoneHeight('metadata')).toBe(32)
})
it('collects visible diff unchanged view-zone ids that align with widgets', () => {
const editorRoot = {
querySelectorAll(selector: string) {
if (selector === '.diff-hidden-lines-widget') {
return [
{ style: { top: '20' } },
{ style: { top: '-100001' } },
]
}
if (
selector
=== '.view-zones > div[monaco-view-zone][monaco-visible-view-zone="true"]'
) {
return [
{
style: { top: '120', height: '32' },
getAttribute(name: string) {
return name === 'monaco-view-zone' ? 'zone-a' : null
},
},
{
style: { top: '120', height: '0' },
getAttribute(name: string) {
return name === 'monaco-view-zone' ? 'zone-b' : null
},
},
{
style: { top: '160', height: '32' },
getAttribute(name: string) {
return name === 'monaco-view-zone' ? 'zone-c' : null
},
},
]
}
return []
},
}
expect(
collectDiffUnchangedViewZoneIds(editorRoot as any, 100),
).toEqual(['zone-a'])
})
it('finds expand and activation actions from unchanged widgets', () => {
const expandAction = { kind: 'expand' }
const fallbackAction = { kind: 'fallback' }
const centerNode = {
querySelector(selector: string) {
return selector === 'a' ? expandAction : null
},
}
const primaryNode = {
querySelector(selector: string) {
return selector === 'a, button' ? fallbackAction : null
},
}
expect(findDiffUnchangedExpandAction(centerNode as any)).toBe(expandAction)
expect(
findDiffUnchangedActivationAction(null, primaryNode as any),
).toBe(fallbackAction)
})
it('ignores center clicks that originate from links or breadcrumbs', () => {
class HTMLElementMock {
constructor(private readonly result: unknown) {}
closest() {
return this.result
}
}
const previousHTMLElement = globalThis.HTMLElement
globalThis.HTMLElement = HTMLElementMock as any
try {
expect(
shouldIgnoreDiffUnchangedCenterClickTarget(
new HTMLElementMock({}) as any,
),
).toBe(true)
expect(
shouldIgnoreDiffUnchangedCenterClickTarget(
new HTMLElementMock(null) as any,
),
).toBe(false)
expect(shouldIgnoreDiffUnchangedCenterClickTarget(null)).toBe(false)
}
finally {
globalThis.HTMLElement = previousHTMLElement
}
})
it('handles only primary center clicks that are not already on actions', () => {
class HTMLElementMock {
constructor(private readonly result: unknown) {}
closest() {
return this.result
}
}
const previousHTMLElement = globalThis.HTMLElement
globalThis.HTMLElement = HTMLElementMock as any
try {
expect(
shouldHandleDiffUnchangedCenterClick({
button: 0,
target: new HTMLElementMock(null) as any,
} as any),
).toBe(true)
expect(
shouldHandleDiffUnchangedCenterClick({
button: 1,
target: new HTMLElementMock(null) as any,
} as any),
).toBe(false)
expect(
shouldHandleDiffUnchangedCenterClick({
button: 0,
target: new HTMLElementMock({}) as any,
} as any),
).toBe(false)
}
finally {
globalThis.HTMLElement = previousHTMLElement
}
})
it('resolves unchanged wheel handling and scroll targets', () => {
expect(shouldHandleDiffUnchangedWheel({ deltaX: 0, deltaY: 0.4 } as any)).toBe(false)
expect(shouldHandleDiffUnchangedWheel({ deltaX: 0, deltaY: 2 } as any)).toBe(true)
expect(
resolveDiffUnchangedWheelScrollTarget(10, 20, {
deltaX: 5,
deltaY: 7,
} as any),
).toEqual({
targetScrollTop: 17,
targetScrollLeft: 25,
syncHorizontal: true,
})
})
it('binds reveal button activation only when a handle exists', () => {
const events: string[] = []
const button = {
onclick: null as null | ((event: any) => void),
}
const handle = { id: 'top' }
bindDiffUnchangedRevealButtonAction(
button as any,
handle as any,
(nextHandle) => {
events.push((nextHandle as any).id)
},
)
button.onclick?.({
preventDefault() {
events.push('prevent')
},
stopPropagation() {
events.push('stop')
},
})
expect(events).toEqual(['prevent', 'stop', 'top'])
bindDiffUnchangedRevealButtonAction(button as any, null, () => {
events.push('unexpected')
})
expect(button.onclick).toBeNull()
})
it('activates the expand action from a center root when present', () => {
const events: string[] = []
const root = {
querySelector(selector: string) {
if (selector !== 'a')
return null
return {
click() {
events.push('click')
},
}
},
}
expect(
activateDiffUnchangedExpandAction(root as any, () => {
events.push('before')
}),
).toBe(true)
expect(events).toEqual(['before', 'click'])
expect(
activateDiffUnchangedExpandAction({ querySelector: () => null } as any),
).toBe(false)
})
})