rvlib-shipkit 2.2.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/package.json +1 -1
- package/src/agent-time/mask.ts +43 -0
- package/src/agent-time/render.ts +187 -0
- package/src/agent-time/report.ts +335 -0
- package/src/agent-time/shape.ts +271 -0
- package/src/agent-time/signals.ts +84 -0
- package/src/agent-time/store.ts +379 -0
- package/src/agent-time/timeline.ts +218 -0
- package/src/agent-time/turns.ts +135 -0
- package/src/assets/kits/identity-kit.ts +5 -2
- package/src/cli/cmd_Commands.ts +9 -0
- package/src/cli/cmd_Review.ts +974 -0
- package/src/cli/cmd_Sound.ts +209 -0
- package/src/cli/cmd_Time.ts +112 -0
- package/src/cli/cmd_Trailer.ts +264 -6
- package/src/cli/kit/verb.ts +22 -4
- package/src/cli.ts +8 -4
- package/src/collections/collection-types.ts +6 -1
- package/src/collections/providers.ts +3 -0
- package/src/collections/review.ts +70 -0
- package/src/core/app-icon.ts +10 -6
- package/src/core/layout.ts +2 -0
- package/src/reflect/prompt-corpus.ts +15 -119
- package/src/reflect/transcript.ts +254 -0
- package/src/repo-config.ts +3 -0
- package/src/review/anim.ts +228 -0
- package/src/review/auto.ts +141 -0
- package/src/review/format.ts +158 -0
- package/src/review/http.ts +23 -0
- package/src/review/marks.ts +43 -0
- package/src/review/media.ts +45 -0
- package/src/review/model.ts +896 -0
- package/src/review/project.ts +126 -0
- package/src/review/role.ts +48 -0
- package/src/review/routes.ts +239 -0
- package/src/review/store.ts +1011 -0
- package/src/review/threads.ts +237 -0
- package/src/review/trailer-desk.ts +385 -0
- package/src/review/trailer-model.ts +183 -0
- package/src/review/trailer-routes.ts +136 -0
- package/src/review/unit.ts +183 -0
- package/src/review/watchers.ts +54 -0
- package/src/serve/embed.ts +35 -0
- package/src/serve/hub-app/activity-view.tsx +1 -1
- package/src/serve/hub-app/activity.css +0 -4
- package/src/serve/hub-app/admin-svc.ts +1 -1
- package/src/serve/hub-app/admin-view.tsx +1 -1
- package/src/serve/hub-app/dock-view.tsx +5 -4
- package/src/serve/hub-app/hash-route.ts +36 -1
- package/src/serve/hub-app/header-bar.tsx +3 -1
- package/src/serve/hub-app/home-st.ts +17 -3
- package/src/serve/hub-app/home-strip.tsx +3 -2
- package/src/serve/hub-app/home.html +1 -0
- package/src/serve/hub-app/hub-app.tsx +80 -11
- package/src/serve/hub-app/hub.css +83 -14
- package/src/serve/hub-app/icons.tsx +15 -0
- package/src/serve/hub-app/index.html +1 -0
- package/src/serve/hub-app/insights-view.tsx +4 -3
- package/src/serve/hub-app/keys.ts +14 -10
- package/src/serve/hub-app/layout-st.ts +63 -2
- package/src/serve/hub-app/md.ts +32 -0
- package/src/serve/hub-app/planned-view.tsx +3 -2
- package/src/serve/hub-app/planned.css +0 -1
- package/src/serve/hub-app/project-list.css +26 -6
- package/src/serve/hub-app/project-list.tsx +46 -10
- package/src/serve/hub-app/projects-svc.ts +7 -2
- package/src/serve/hub-app/repo-sections.ts +15 -3
- package/src/serve/hub-app/repo-st.ts +61 -4
- package/src/serve/hub-app/review/clip-st.ts +258 -0
- package/src/serve/hub-app/review/kind-view.tsx +240 -0
- package/src/serve/hub-app/review/kit.tsx +113 -0
- package/src/serve/hub-app/review/review-answer.tsx +269 -0
- package/src/serve/hub-app/review/review-board.tsx +46 -0
- package/src/serve/hub-app/review/review-list.tsx +156 -0
- package/src/serve/hub-app/review/review-page.tsx +96 -0
- package/src/serve/hub-app/review/review-st.ts +902 -0
- package/src/serve/hub-app/review/review-views.tsx +648 -0
- package/src/serve/hub-app/review/trailer-page.tsx +416 -0
- package/src/serve/hub-app/review/trailer-st.ts +602 -0
- package/src/serve/hub-app/review/trailer-timeline.tsx +207 -0
- package/src/serve/hub-app/review.css +389 -0
- package/src/serve/hub-app/theme-st.ts +56 -0
- package/src/serve/hub-app/tree-build.ts +4 -0
- package/src/serve/hub-app/tree-row.tsx +1 -1
- package/src/serve/hub-app/tree-svc.ts +4 -0
- package/src/serve/hub-app/wiki-st.ts +190 -0
- package/src/serve/hub-app/wikis-view.tsx +134 -5
- package/src/serve/hub-runtime.ts +9 -7
- package/src/serve/project-gutter-route.ts +25 -1
- package/src/serve/project-gutter.ts +1 -1
- package/src/serve/same-origin.ts +5 -1
- package/src/serve/serve-hub.ts +15 -0
- package/src/shipkit-files.ts +9 -5
- package/src/shot/client.ts +17 -5
- package/src/shot/shooter.ts +19 -3
- package/src/shot/shot-ask.ts +9 -1
- package/src/shot/stepped-clip.ts +53 -0
- package/src/trailer/adapter.ts +90 -6
- package/src/trailer/build.ts +459 -59
- package/src/trailer/ffmpeg.ts +22 -0
- package/src/trailer/fonts.ts +55 -0
- package/src/trailer/footage.ts +112 -43
- package/src/trailer/grammar.ts +864 -127
- package/src/trailer/graph.ts +308 -49
- package/src/trailer/holes.ts +72 -0
- package/src/trailer/load-unit.ts +20 -3
- package/src/trailer/look.ts +20 -3
- package/src/trailer/motion.ts +207 -0
- package/src/trailer/passage.ts +129 -0
- package/src/trailer/plan.ts +82 -23
- package/src/trailer/prune.ts +204 -0
- package/src/trailer/score/compose.ts +256 -0
- package/src/trailer/score/dsp.ts +272 -0
- package/src/trailer/score/gm-render.ts +43 -0
- package/src/trailer/score/gm.ts +90 -0
- package/src/trailer/score/midi.ts +143 -0
- package/src/trailer/score/palette.ts +188 -0
- package/src/trailer/score/pattern.ts +98 -0
- package/src/trailer/score/score.ts +228 -0
- package/src/trailer/score/sound.ts +123 -0
- package/src/trailer/score/synth.ts +383 -0
- package/src/trailer/sound/audio.ts +148 -0
- package/src/trailer/sound/brand.ts +42 -0
- package/src/trailer/sound/comfy.ts +38 -0
- package/src/trailer/sound/eleven.ts +72 -0
- package/src/trailer/sound/fluid.ts +71 -0
- package/src/trailer/sound/gen.ts +139 -0
- package/src/trailer/sound/index.ts +60 -0
- package/src/trailer/sound/presets.ts +69 -0
- package/src/trailer/sound/run.ts +189 -0
- package/src/trailer/states.ts +76 -0
- package/src/trailer/stitch.ts +92 -9
- package/src/trailer/titles.ts +471 -150
- package/src/trailer/url.ts +18 -3
- package/src/trailer/vocab.ts +34 -4
- package/src/trailer/words.ts +275 -0
- package/src/wiki/graph-mount.ts +3 -0
- package/src/wiki/graph-page.ts +45 -9
- package/src/wiki/graph-pages.ts +128 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// a repo's review page (`#page:review`, wiki build/shipkit/review.md, The review page): the cards on the left, the open
|
|
2
|
+
// one in the middle with every view stacked, the answer on the right; `top` (or `auto` narrower than STACK_PX) reads in
|
|
3
|
+
// one column from the top: the header and the verdicts, the views, the answer. On a phone one pane at a time, the verdicts in a bar under the thumb. The list is read while the page
|
|
4
|
+
// shows
|
|
5
|
+
import { observer } from 'mobx-react-lite'
|
|
6
|
+
import { useEffect, useRef } from 'react'
|
|
7
|
+
import { Group, Panel, Separator } from 'react-resizable-panels'
|
|
8
|
+
import type { RepoSt } from '../repo-st.ts'
|
|
9
|
+
import { ReviewForm, VerdictBar } from './review-answer.tsx'
|
|
10
|
+
import { ReviewList } from './review-list.tsx'
|
|
11
|
+
import type { PhonePane } from './review-st.ts'
|
|
12
|
+
import { ReviewImage } from './review-views.tsx'
|
|
13
|
+
|
|
14
|
+
const PANE_LABEL: Record<PhonePane, string> = { list: 'cards', card: 'card', answer: 'answer' }
|
|
15
|
+
|
|
16
|
+
export const ReviewPage = observer(({ app }: { app: RepoSt }) => {
|
|
17
|
+
const rv = app.review
|
|
18
|
+
const el = useRef<HTMLDivElement | null>(null)
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
rv.start()
|
|
21
|
+
return () => rv.stop()
|
|
22
|
+
}, [rv])
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const node = el.current
|
|
25
|
+
if (node == null || typeof ResizeObserver === 'undefined') return
|
|
26
|
+
// the pick lands on the next frame: a relayout inside the callback is the observer's loop error
|
|
27
|
+
let raf = 0
|
|
28
|
+
const ro = new ResizeObserver(([e]) => {
|
|
29
|
+
const w = e!.contentRect.width
|
|
30
|
+
cancelAnimationFrame(raf)
|
|
31
|
+
raf = requestAnimationFrame(() => rv.fit(w))
|
|
32
|
+
})
|
|
33
|
+
ro.observe(node)
|
|
34
|
+
return () => {
|
|
35
|
+
cancelAnimationFrame(raf)
|
|
36
|
+
ro.disconnect()
|
|
37
|
+
}
|
|
38
|
+
}, [rv, rv.phone.on])
|
|
39
|
+
if (rv.phone.on)
|
|
40
|
+
return (
|
|
41
|
+
<div className="rv-phone">
|
|
42
|
+
<PhoneTop app={app} />
|
|
43
|
+
<div className="rv-phonetabs seg">
|
|
44
|
+
{(['list', 'card', 'answer'] as const).map((p) => (
|
|
45
|
+
<button key={p} className={rv.phone.pane === p ? 'on' : ''} onClick={() => rv.phone.show(p)}>
|
|
46
|
+
{PANE_LABEL[p]}{p === 'list' && rv.pendingCount > 0 ? ` · ${rv.pendingCount}` : ''}
|
|
47
|
+
</button>
|
|
48
|
+
))}
|
|
49
|
+
</div>
|
|
50
|
+
<div className="rv-phonepane">
|
|
51
|
+
{rv.phone.pane === 'list' ? <ReviewList rv={rv} /> : rv.phone.pane === 'card' ? <ReviewImage rv={rv} /> : <ReviewForm rv={rv} />}
|
|
52
|
+
</div>
|
|
53
|
+
{rv.phone.pane === 'list' ? null : <VerdictBar rv={rv} />}
|
|
54
|
+
</div>
|
|
55
|
+
)
|
|
56
|
+
return (
|
|
57
|
+
<Group className="rv-cols" orientation="horizontal" elementRef={el}>
|
|
58
|
+
<Panel id="review-list" defaultSize={rv.stacked ? '32%' : '20%'} minSize={160} className="rv-pane" style={PANEL}>
|
|
59
|
+
<ReviewList rv={rv} />
|
|
60
|
+
</Panel>
|
|
61
|
+
<Separator className="rsep" />
|
|
62
|
+
{rv.stacked ? (
|
|
63
|
+
// one column read from the top: the header and the verdicts, the views, then the answer
|
|
64
|
+
<Panel id="review-stack" defaultSize="68%" minSize={300} className="rv-pane" style={PANEL}>
|
|
65
|
+
<div className="rv-scroll">
|
|
66
|
+
<ReviewImage rv={rv} />
|
|
67
|
+
<ReviewForm rv={rv} />
|
|
68
|
+
</div>
|
|
69
|
+
</Panel>
|
|
70
|
+
) : (
|
|
71
|
+
<>
|
|
72
|
+
<Panel id="review-image" defaultSize="54%" minSize={300} className="rv-pane" style={PANEL}>
|
|
73
|
+
<div className="rv-scroll"><ReviewImage rv={rv} /></div>
|
|
74
|
+
</Panel>
|
|
75
|
+
<Separator className="rsep" />
|
|
76
|
+
<Panel id="review-form" defaultSize="26%" minSize={260} className="rv-pane" style={PANEL}>
|
|
77
|
+
<div className="rv-scroll"><ReviewForm rv={rv} /></div>
|
|
78
|
+
</Panel>
|
|
79
|
+
</>
|
|
80
|
+
)}
|
|
81
|
+
</Group>
|
|
82
|
+
)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
/** the phone's top line: the way back to the hub (none in another tool's frame), and the repo the page is of. On a phone the page covers the hub's
|
|
86
|
+
* panes, which leave it no room */
|
|
87
|
+
export const PhoneTop = observer(({ app }: { app: RepoSt }) => (
|
|
88
|
+
<div className="rv-phonetop">
|
|
89
|
+
{app.home.embedded ? null : <button className="ghost" onClick={() => app.showReadme()}>◂ hub</button>}
|
|
90
|
+
<b>{app.name}</b>
|
|
91
|
+
<span className="rv-dim">{app.sel?.t === 'trailer' ? 'trailer' : 'review'}</span>
|
|
92
|
+
</div>
|
|
93
|
+
))
|
|
94
|
+
|
|
95
|
+
/** a panel never scrolls itself: the column inside it does (hub-app.tsx, PANEL) */
|
|
96
|
+
export const PANEL = { overflow: 'hidden' } as const
|