@fapost/jig-ui 0.2.0-next.31 → 0.2.0-next.33
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/dist/http/app.js +18 -0
- package/dist/jig/client.js +28 -1
- package/dist/source/local.js +9 -1
- package/dist/web/assets/CanvasView-sbssvuAA.js +1 -0
- package/dist/web/assets/{index-jvDNuXHj.js → index-DKpb5a8g.js} +2 -2
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/web/assets/CanvasView-BlJ7Md7X.js +0 -1
package/dist/http/app.js
CHANGED
|
@@ -44,6 +44,11 @@ function place(v) {
|
|
|
44
44
|
}
|
|
45
45
|
/** A priority as the page sends it: 0 to 5, or `null` for none. */
|
|
46
46
|
const isPriority = (v) => v === null || (Number.isInteger(v) && v >= 0 && v <= 5);
|
|
47
|
+
/** The body of a write that names only a task: the task and the revision it was read at, `undefined` where invalid. */
|
|
48
|
+
function taskAt(body) {
|
|
49
|
+
const [task, revision] = [field(body, 'task'), field(body, 'revision')];
|
|
50
|
+
return { task: isId(task) ? task : undefined, revision: isRevision(revision) ? revision : undefined };
|
|
51
|
+
}
|
|
47
52
|
/** What a write came to, in the API's form. A refusal names no path: only Jig's code goes on. */
|
|
48
53
|
function written(c, w) {
|
|
49
54
|
if (w === undefined)
|
|
@@ -121,6 +126,19 @@ function apiRoutes(source, version) {
|
|
|
121
126
|
return refuse(c, 422, 'usage', 'Give a task, a priority from 0 to 5 or null, and the revision it was read at.');
|
|
122
127
|
}
|
|
123
128
|
return written(c, await source.prioritise(c.req.param('id'), task, priority, revision));
|
|
129
|
+
})
|
|
130
|
+
// A pause is asked of the task, not made: Jig honours it at the task's next stage boundary.
|
|
131
|
+
.post('/api/projects/:id/queue/pause', validator('json', taskAt), async (c) => {
|
|
132
|
+
const { task, revision } = c.req.valid('json');
|
|
133
|
+
if (task === undefined || revision === undefined)
|
|
134
|
+
return refuse(c, 422, 'usage', 'Give a task and the revision it was read at.');
|
|
135
|
+
return written(c, await source.requestPause(c.req.param('id'), task, revision));
|
|
136
|
+
})
|
|
137
|
+
.post('/api/projects/:id/queue/pause/cancel', validator('json', taskAt), async (c) => {
|
|
138
|
+
const { task, revision } = c.req.valid('json');
|
|
139
|
+
if (task === undefined || revision === undefined)
|
|
140
|
+
return refuse(c, 422, 'usage', 'Give a task and the revision it was read at.');
|
|
141
|
+
return written(c, await source.cancelPause(c.req.param('id'), task, revision));
|
|
124
142
|
})
|
|
125
143
|
.post('/api/projects', validator('json', (body) => ({
|
|
126
144
|
path: absolute(body?.path),
|
package/dist/jig/client.js
CHANGED
|
@@ -131,7 +131,20 @@ export async function readStatus(root, platform = process.platform) {
|
|
|
131
131
|
return { revision, attention, housekeepingStale: housekeeping?.stale === true };
|
|
132
132
|
}
|
|
133
133
|
/** Jig's action ids this Jig UI knows; Jig may add ids without raising `schema`, and a consumer ignores those. */
|
|
134
|
-
const ACTIONS = new Set([
|
|
134
|
+
const ACTIONS = new Set([
|
|
135
|
+
'start',
|
|
136
|
+
'pause',
|
|
137
|
+
'resume',
|
|
138
|
+
'request-pause',
|
|
139
|
+
'cancel-pause-request',
|
|
140
|
+
'approve-gate',
|
|
141
|
+
'answer-stop',
|
|
142
|
+
'set-class',
|
|
143
|
+
'ship',
|
|
144
|
+
'close',
|
|
145
|
+
'abandon',
|
|
146
|
+
'reopen',
|
|
147
|
+
]);
|
|
135
148
|
/** What a person may do next with a task, as Jig decides it from the task's state. */
|
|
136
149
|
const TaskAction = z.object({
|
|
137
150
|
id: text,
|
|
@@ -151,6 +164,8 @@ const TaskRow = z
|
|
|
151
164
|
goal: maybe,
|
|
152
165
|
knowledge_consolidated: z.boolean(),
|
|
153
166
|
paused: z.boolean(),
|
|
167
|
+
/** A pause asked of the task and not yet honoured; its reason is a person's text and not read. */
|
|
168
|
+
pause_request: z.object({ requested_at: text }).nullable(),
|
|
154
169
|
created_at: maybe,
|
|
155
170
|
updated_at: maybe,
|
|
156
171
|
/** `null` while the task has not been started. */
|
|
@@ -174,6 +189,7 @@ const TaskRow = z
|
|
|
174
189
|
goal: t.goal,
|
|
175
190
|
knowledgeConsolidated: t.knowledge_consolidated,
|
|
176
191
|
paused: t.paused,
|
|
192
|
+
pauseRequest: t.pause_request && { requestedAt: t.pause_request.requested_at },
|
|
177
193
|
createdAt: t.created_at,
|
|
178
194
|
updatedAt: t.updated_at,
|
|
179
195
|
branch: t.branch,
|
|
@@ -285,3 +301,14 @@ export function supports(version, minimum = MIN_JIG_VERSION) {
|
|
|
285
301
|
}
|
|
286
302
|
return true;
|
|
287
303
|
}
|
|
304
|
+
/**
|
|
305
|
+
* Asks a task to pause at its next stage boundary (`jig queue request … pause`); refused as `already-exists` when a
|
|
306
|
+
* pause is already asked, `failed` when the task is paused or finished, and as `moveInQueue` is.
|
|
307
|
+
*/
|
|
308
|
+
export async function requestPause(root, task, revision, platform = process.platform) {
|
|
309
|
+
await readJson(root, ['queue', 'request', `task:${task}`, 'pause', '--revision', String(revision)], platform);
|
|
310
|
+
}
|
|
311
|
+
/** Takes back a pause asked of a task (`jig queue cancel … pause`); refused as `not-found` when none is asked. */
|
|
312
|
+
export async function cancelPause(root, task, revision, platform = process.platform) {
|
|
313
|
+
await readJson(root, ['queue', 'cancel', `task:${task}`, 'pause', '--revision', String(revision)], platform);
|
|
314
|
+
}
|
package/dist/source/local.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import { JigRefusal, JigShapeError, jigVersion, MIN_JIG_VERSION, moveInQueue, readQueue, readSpecs, readStatus, readTasks, setPriority, supports, watchDir, writtenByReads, } from '../jig/client.js';
|
|
2
|
+
import { cancelPause, JigRefusal, JigShapeError, jigVersion, MIN_JIG_VERSION, moveInQueue, readQueue, readSpecs, readStatus, readTasks, requestPause, setPriority, supports, watchDir, writtenByReads, } from '../jig/client.js';
|
|
3
3
|
import { addProject, readProjects, removeProject } from '../registry/projects.js';
|
|
4
4
|
import { watchTree } from '../watch/watch.js';
|
|
5
5
|
import { mainCheckout } from './checkout.js';
|
|
@@ -40,6 +40,8 @@ const card = (t, q) => ({
|
|
|
40
40
|
status: t.status,
|
|
41
41
|
goal: t.goal,
|
|
42
42
|
paused: t.paused,
|
|
43
|
+
pauseRequest: t.pauseRequest,
|
|
44
|
+
pauseRequestable: t.actions.some((a) => a.id === 'request-pause' && a.offered),
|
|
43
45
|
started: t.branch !== null,
|
|
44
46
|
gate: t.gate?.state ?? null,
|
|
45
47
|
autopilot: t.autopilot?.state ?? null,
|
|
@@ -312,6 +314,12 @@ export function localSource(configDir, { rescanMs = 60_000, quietMs, maxWaitMs }
|
|
|
312
314
|
prioritise(id, taskId, priority, revision) {
|
|
313
315
|
return writing(id, [taskId], (root) => setPriority(root, taskId, priority, revision));
|
|
314
316
|
},
|
|
317
|
+
requestPause(id, taskId, revision) {
|
|
318
|
+
return writing(id, [taskId], (root) => requestPause(root, taskId, revision));
|
|
319
|
+
},
|
|
320
|
+
cancelPause(id, taskId, revision) {
|
|
321
|
+
return writing(id, [taskId], (root) => cancelPause(root, taskId, revision));
|
|
322
|
+
},
|
|
315
323
|
async disconnect(id) {
|
|
316
324
|
if (!(await removeProject(configDir, id)))
|
|
317
325
|
return false;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as ee,O as m,P as te,Q as h,R as g,S as _,T as v,U as y,V as b,W as ne,X as x,Y as S,Z as C,_ as w,a as re,b as T,c as ie,d as E,f as D,g as O,h as ae,i as k,j as A,k as oe,l as se,m as ce,n as j,o as M,p as le,q as N,r as ue,s as de,t as fe,u as pe,v as me,w as he,x as P,y as F,z as I}from"./index-DKpb5a8g.js";var L=y({__name:`BaseSeparator`,props:{orientation:{type:String,required:!1,default:`horizontal`},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,n=[`horizontal`,`vertical`];function r(e){return n.includes(e)}let i=l(()=>r(t.orientation)?t.orientation:`horizontal`),a=l(()=>i.value===`vertical`?t.orientation:void 0),o=l(()=>t.decorative?{role:`none`}:{"aria-orientation":a.value,role:`separator`});return(t,n)=>(d(),g(x(oe),s({as:e.as,"as-child":e.asChild,"data-orientation":i.value},o.value),{default:S(()=>[u(t.$slots,`default`)]),_:3},16,[`as`,`as-child`,`data-orientation`]))}}),R=y({__name:`Separator`,props:{orientation:{type:String,required:!1,default:`horizontal`},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e;return(e,n)=>(d(),g(L,h(ne(t)),{default:S(()=>[u(e.$slots,`default`)]),_:3},16))}}),ge=y({__name:`CardContent`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let r=e;return(e,i)=>(d(),n(`div`,{"data-slot":`card-content`,class:C(x(t)(`px-4 group-data-[size=sm]/card:px-3`,r.class))},[u(e.$slots,`default`)],2))}}),_e=y({__name:`CardDescription`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let r=e;return(e,i)=>(d(),n(`div`,{"data-slot":`card-description`,class:C(x(t)(`text-xs/relaxed text-muted-foreground`,r.class))},[u(e.$slots,`default`)],2))}}),ve=y({__name:`CardHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let r=e;return(e,i)=>(d(),n(`div`,{"data-slot":`card-header`,class:C(x(t)(`group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-none px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3`,r.class))},[u(e.$slots,`default`)],2))}}),ye=y({__name:`CardTitle`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let r=e;return(e,i)=>(d(),n(`div`,{"data-slot":`card-title`,class:C(x(t)(`cn-font-heading text-sm font-medium group-data-[size=sm]/card:text-sm`,r.class))},[u(e.$slots,`default`)],2))}}),z=y({__name:`Separator`,props:{orientation:{default:`horizontal`},decorative:{type:Boolean,default:!0},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let n=e,r=v(n,`class`);return(e,i)=>(d(),g(x(R),s({"data-slot":`separator`},x(r),{class:x(t)(`shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch`,n.class)}),null,16,[`class`]))}}),be=[`aria-label`],xe={class:`flex items-baseline gap-3 border-b bg-muted/50 px-4 py-2`},Se={class:`font-semibold tracking-wider uppercase`},Ce={key:0,class:`text-muted-foreground`},we={class:`grid grid-cols-1 divide-y lg:grid-cols-2 lg:divide-x lg:divide-y-0`},B=y({__name:`CanvasSection`,props:{title:{},note:{}},setup(t){return(r,i)=>(d(),n(`section`,{"aria-label":t.title,class:`border-b`},[f(`h2`,xe,[f(`span`,Se,e(t.title),1),t.note?(d(),n(`span`,Ce,e(t.note),1)):I(``,!0)]),f(`div`,we,[(d(),n(o,null,N([`light`,`dark`],e=>f(`div`,{key:e,class:C([e,`flex flex-col gap-4 bg-background p-4 text-foreground`])},[u(r.$slots,`default`)],2)),64))])],8,be))}}),V=(e,t)=>({id:e,class:`T2`,status:`active`,goal:null,paused:!1,pauseRequest:null,pauseRequestable:!0,started:!0,gate:null,autopilot:null,pullRequest:null,priority:null,queue:null,...t}),H=(e,t)=>({url:`https://github.com/fapost-lab/jig-ui/pull/18`,state:e,ci:t,fetchedAt:`2026-10-18T09:40:00Z`}),U=[V(`design-system`,{class:`T3`,gate:`waiting`,priority:0,queue:{level:null,position:100},goal:`shadcn-vue on Tailwind v4 with light and dark themes; #/canvas with every component in every variant; the three screens rebuilt on it.`}),V(`registry-schema`,{gate:`changed`,priority:3,queue:{level:null,position:200},goal:`Version the registry file so a newer Jig UI can read an older one.`}),V(`pause-request`,{class:`T3`,autopilot:`stopped`,goal:`A drop on the paused column writes a sticky request through Jig; the card shows it with its age and a cancel.`}),V(`specs-and-epics`,{autopilot:`on`,queue:{level:null,position:300},goal:`Show each spec with its phases, progress and epic branch beside the board, from Jig's spec list.`}),V(`task-details`,{status:`ready`,pullRequest:H(`open`,`green`),goal:`Open a task's details from its card.`}),V(`refusal-fixture`,{class:`T0`,status:`ready`,pullRequest:H(`open`,`red`),goal:`Replace the refusal text in task-list-states.json with one Jig prints.`}),V(`docs-board`,{class:`T1`,status:`ready`,pullRequest:H(`open`,`pending`),goal:`Describe the five columns on the projects page of the docs.`}),V(`live-updates`,{status:`ready`,pullRequest:H(`merged`,`none`),goal:`Follow connected projects without a reload.`}),V(`no-pr-yet`,{class:`T1`,status:`ready`,goal:`Ready, nothing pushed.`}),V(`jig-init-hook`,{class:`T3`,paused:!0,pauseRequestable:!1,goal:`Register a project in an installed Jig UI from jig init.`}),V(`file-backlog-task`,{class:null,started:!1,goal:`File a minimal backlog task from the page through jig task new.`}),V(`a-task-with-a-rather-long-identifier-that-wraps`,{goal:null}),V(`conflict-display`,{pauseRequest:{requestedAt:`2026-10-22T09:00:00Z`},pauseRequestable:!1,goal:`Show what changed when a write was based on a stale read.`})],W=[{id:`needs-you`,title:`Needs you`,cards:U.slice(0,3)},{id:`in-progress`,title:`In progress`,cards:[U[3],U[12],U[11]]},{id:`ready`,title:`Ready`,cards:U.slice(4,9)},{id:`backlog`,title:`Backlog`,cards:[U[10]]},{id:`paused`,title:`Paused`,cards:[U[9]]}],G=W.map(e=>({...e,cards:[]})),Te=[{id:`needs-you`,title:`Needs you`,count:3},{id:`in-progress`,title:`In progress`,count:1},{id:`ready`,title:`Ready`,count:5},{id:`backlog`,title:`Backlog`,count:1},{id:`paused`,title:`Paused`,count:1},{id:`unknown`,title:`A column this page does not know`,count:0}],K=[{kind:`gate`,subject:{type:`task`,id:`design-system`},tasks:[`design-system`],title:`Design waits at its gate`,detail:null,todo:`Review the design and approve it: jig task gate design-system approved`,url:null},{kind:`pull-request-ci-failed`,subject:{type:`task`,id:`refusal-fixture`},tasks:[`refusal-fixture`],title:`CI failed`,detail:`pull request #19`,todo:`Look at the failing check.`,url:`https://github.com/fapost-lab/jig-ui/pull/19`},{kind:`housekeeping`,subject:{type:`project`,id:null},tasks:[],title:`Housekeeping never ran`,detail:null,todo:`Run jig housekeeping.`,url:`https://example.com/docs`}],q=[{id:`approve-gate`,command:`jig task gate design-system approved`},{id:`answer-stop`,command:`jig task autopilot pause-request resume --answer <text>`},{id:`pause`,command:`jig task pause design-system`},{id:`request-pause`,command:`jig queue request task:design-system pause`},{id:`something-new`,command:`jig task something-new design-system`}],J={state:`ready`,issue:null,baseBranch:`main`,createdAt:`2026-10-17`,updatedAt:`2026-10-18`,knowledgeConsolidated:!1,worktree:null,gateBy:null,run:null,housekeepingFlags:[],attention:[]},Y=[{...J,...U[2],gate:`approved`,gateBy:`human`,branch:`task/pause-request`,worktree:{uncommitted:4},issue:`#42`,pullRequest:H(`open`,`red`),run:{mode:`attended`,stage:`implement`,stageAt:`2026-10-18T09:00:00Z`,stopReason:`Which column takes a paused task that already has an open pull request?`,stopAt:`2026-10-18T09:12:00Z`,phase:null},housekeepingFlags:[`needs-consolidation`],attention:[K[0]],actions:q,column:{id:`needs-you`,title:`Needs you`}},{...J,...U[10],branch:null,actions:[{id:`start`,command:`jig task start file-backlog-task`}],column:{id:`backlog`,title:`Backlog`}}],X=(e,t={})=>({id:e,state:`ready`,jigVersion:`0.29.0`,counts:{active:11,paused:1,ready:3},attention:[],housekeepingStale:!1,...t}),Z=[X(`jig-ui`,{attention:K,housekeepingStale:!0}),X(`nextjs-store`,{counts:{active:0,paused:0,ready:0}}),{id:`old-jig`,state:`unsupported`,jigVersion:`0.26.0`,minimum:`0.29.0`},{id:`new-jig`,state:`incompatible`,jigVersion:`1.0.0`},{id:`busy`,state:`unreadable`,code:`locked`},{id:`moved`,state:`unavailable`,reason:`missing`}],Q=[{text:"`design-system` — design system and canvas",checked:!0,task:`design-system`,fog:!1},{text:"`specs-and-epics` — specs and epics (after: project board — `jig spec list`)",checked:!1,task:`specs-and-epics`,fog:!1},{text:"`old-task` — a task no longer live",checked:!1,task:`old-task`,fog:!1},{text:`invoices from orders, no task filed yet`,checked:!1,task:null,fog:!1},{text:"fog: registration by `jig init`",checked:!1,task:null,fog:!0}],Ee=[{id:`jig-ui`,title:`Jig UI — a local control center for Jig projects`,missingFiles:[],release:null,epic:null,progress:{done:2,total:6,filed:2,fog:1},phases:[{phase:0,title:`Package and release`,done:1,total:1,filed:0,fog:0,items:[{...Q[0],text:`package and release`,task:null}]},{phase:1,title:`Read-only UI`,done:1,total:5,filed:2,fog:1,items:Q}]},{id:`billing`,title:`Billing in one place`,missingFiles:[],release:`minor`,epic:{branch:`epic/billing`,state:`open`,checkedOut:!1,missing:!1,fetched:!0},progress:{done:0,total:1,filed:0,fog:0},phases:[{phase:null,title:null,done:0,total:1,filed:0,fog:0,items:[Q[3]]}]},{id:`lost-epic`,title:`An epic whose branch is gone`,missingFiles:[],release:`major`,epic:{branch:`epic/lost`,state:`open`,checkedOut:!0,missing:!0,fetched:!1},progress:null,phases:[]},{id:`half-written`,title:null,missingFiles:[`spec.md`,`roadmap.md`],release:null,epic:null,progress:null,phases:[]}],De={class:`flex gap-4`},Oe={class:`w-24 text-muted-foreground`},ke={class:`flex items-center gap-2`},Ae={class:`flex flex-wrap gap-2`},$={class:`flex max-w-sm flex-col gap-2`},je={class:`flex h-5 items-center gap-2`},Me={class:`flex flex-wrap items-center gap-6`},Ne={class:`flex items-center gap-1`},Pe={class:`grid grid-cols-2 gap-2 xl:grid-cols-3`},Fe={class:`flex h-[28rem] flex-col`},Ie={class:`flex h-40 flex-col`},Le={class:`flex h-[28rem] flex-col`},Re={class:`flex h-64 flex-col`},ze={class:`flex h-64 flex-col`},Be=y({__name:`CanvasView`,setup(t){let s=[`default`,`secondary`,`outline`,`ghost`,`destructive`,`link`],l=[`xs`,`sm`,`default`,`lg`],u=[`icon-xs`,`icon-sm`,`icon`,`icon-lg`],h=[`default`,`secondary`,`outline`,`ghost`,`destructive`,`link`],v=[`attention`,`good`,`bad`,`quiet`];return(t,y)=>(d(),n(`div`,null,[y[12]||=f(`div`,{class:`border-b px-4 py-3`},[f(`h1`,{class:`font-semibold tracking-wider uppercase`},`Canvas`),f(`p`,{class:`text-muted-foreground`},`Every component of the page in every variant and state; the left panel light, the right dark.`)],-1),c(B,{title:`Tones`,note:`lib/tones.ts — the only colours with a meaning`},{default:S(()=>[(d(),n(o,null,N(v,t=>f(`p`,{key:t,class:C(x(ee)[t])},e(t)+` as a rule`,3)),64)),f(`p`,De,[(d(),n(o,null,N(v,t=>f(`span`,{key:t,class:C(x(te)[t])},e(t),3)),64))])]),_:1}),y[13]||=f(`h2`,{class:`border-b px-4 py-2 font-bold tracking-widest uppercase`},`components/ui`,-1),c(B,{title:`Button`,note:`variant × size; icon sizes; disabled`},{default:S(()=>[(d(),n(o,null,N(s,t=>f(`div`,{key:t,class:`flex flex-wrap items-center gap-2`},[f(`span`,Oe,e(t),1),(d(),n(o,null,N(l,n=>c(x(m),{key:n,variant:t,size:n},{default:S(()=>[b(e(n),1)]),_:2},1032,[`variant`,`size`])),64)),c(x(m),{variant:t,disabled:``},{default:S(()=>[...y[0]||=[b(`disabled`,-1)]]),_:1},8,[`variant`])])),64)),f(`div`,ke,[y[2]||=f(`span`,{class:`w-24 text-muted-foreground`},`icon`,-1),(d(),n(o,null,N(u,e=>c(x(m),{key:e,variant:`outline`,size:e,"aria-label":e},{default:S(()=>[c(x(A))]),_:1},8,[`size`,`aria-label`])),64)),c(x(m),{variant:`outline`,size:`sm`},{default:S(()=>[c(x(A),{"data-icon":`inline-start`}),y[1]||=b(`with icon`,-1)]),_:1})])]),_:1}),c(B,{title:`Badge`},{default:S(()=>[f(`div`,Ae,[(d(),n(o,null,N(h,t=>c(x(he),{key:t,variant:t},{default:S(()=>[b(e(t),1)]),_:2},1032,[`variant`])),64))])]),_:1}),c(B,{title:`Card`},{default:S(()=>[c(x(r),{class:`max-w-sm`},{default:S(()=>[c(x(ve),null,{default:S(()=>[c(x(ye),null,{default:S(()=>[...y[3]||=[b(`Card title`,-1)]]),_:1}),c(x(_e),null,{default:S(()=>[...y[4]||=[b(`Card description, muted.`,-1)]]),_:1})]),_:1}),c(x(ge),null,{default:S(()=>[...y[5]||=[b(`Card content.`,-1)]]),_:1})]),_:1})]),_:1}),c(B,{title:`Input and Label`,note:`empty, filled, invalid, disabled`},{default:S(()=>[f(`div`,$,[c(x(ue),null,{default:S(()=>[...y[6]||=[b(`Project path`,-1)]]),_:1}),c(x(k),{placeholder:`/path/to/project`}),c(x(k),{"model-value":`/Users/me/project`}),c(x(k),{"model-value":`/not/a/project`,"aria-invalid":`true`}),c(x(k),{"model-value":`disabled`,disabled:``})])]),_:1}),c(B,{title:`Separator`},{default:S(()=>[c(x(z)),f(`div`,je,[y[7]||=b(`left`,-1),c(x(z),{orientation:`vertical`}),y[8]||=b(`right`,-1)])]),_:1}),c(B,{title:`ToggleGroup`,note:`the Board / List switch`},{default:S(()=>[c(x(de),{type:`single`,variant:`outline`,size:`sm`,"model-value":`board`,"aria-label":`View`},{default:S(()=>[c(x(M),{value:`board`},{default:S(()=>[...y[9]||=[b(`Board`,-1)]]),_:1}),c(x(M),{value:`list`},{default:S(()=>[...y[10]||=[b(`List`,-1)]]),_:1})]),_:1})]),_:1}),c(B,{title:`Collapsible`,note:`open and folded`},{default:S(()=>[(d(),n(o,null,N([!0,!1],t=>c(x(ae),{key:String(t),"default-open":t},{default:S(()=>[c(x(le),{class:`w-full border-b bg-muted/50 px-3 py-1.5 text-left`},{default:S(()=>[b(`Trigger (`+e(t?`open`:`folded`)+`)`,1)]),_:2},1024),c(x(ce),{class:`px-3 py-2`},{default:S(()=>[...y[11]||=[b(`Content`,-1)]]),_:1})]),_:2},1032,[`default-open`])),64))]),_:1}),y[14]||=f(`h2`,{class:`border-b px-4 py-2 font-bold tracking-widest uppercase`},`components`,-1),c(B,{title:`ProjectTabs`,note:`on the workspace; on a project; empty`},{default:S(()=>[c(p,{projects:x(Z),version:`0.1.0`},{default:S(()=>[c(i)]),_:1},8,[`projects`]),c(p,{projects:x(Z),current:`jig-ui`,version:`0.1.0`},null,8,[`projects`]),c(p,{projects:[]})]),_:1}),c(B,{title:`ThemeToggle`,note:`switches the whole page; the icon is the theme it switches to`},{default:S(()=>[f(`div`,null,[c(i)])]),_:1}),c(B,{title:`ProjectCard`,note:`ready with attention and stale housekeeping; nothing needs you; each state it cannot be read in`},{default:S(()=>[(d(!0),n(o,null,N(x(Z),e=>(d(),g(fe,{key:e.id,project:e},null,8,[`project`]))),128))]),_:1}),c(B,{title:`ConnectForm`,note:`idle, busy, refused`},{default:S(()=>[c(j,{busy:!1}),c(j,{busy:!0,"model-value":`/Users/me/project`}),c(j,{busy:!1,"model-value":`/Users/me/project/.claude/worktrees/x`,refusal:`That is a worktree. Connect the main checkout instead.`})]),_:1}),c(B,{title:`AttentionItem`,note:`no link; a pull request; another link`},{default:S(()=>[(d(!0),n(o,null,N(x(K),(e,t)=>(d(),g(re,{key:t,item:e},null,8,[`item`]))),128))]),_:1}),c(B,{title:`ColumnHeader`,note:`each column, and one this page does not know`},{default:S(()=>[(d(!0),n(o,null,N(x(Te),e=>(d(),g(a,{id:e.id,key:e.id,title:e.title,count:e.count},null,8,[`id`,`title`,`count`]))),128))]),_:1}),c(B,{title:`QueueMenu`,note:`press to open: To top, Up, Down, To bottom, Priority, the pause — first queued, in the middle, not queued, last, paused (no pause to ask), a pause asked, while its change is on its way`},{default:S(()=>[f(`div`,Me,[(d(!0),n(o,null,N([x(U)[0],x(U)[1],x(U)[3],x(U)[11],x(U)[9],x(U)[12]],t=>(d(),n(`span`,{key:t.id,class:`flex items-center gap-1`},[b(e(t.id),1),c(_,{task:t,cards:x(U)},null,8,[`task`,`cards`])]))),128)),f(`span`,Ne,[b(e(x(U)[1].id),1),c(_,{task:x(U)[1],cards:x(U),disabled:``},null,8,[`task`,`cards`])])])]),_:1}),c(B,{title:`TaskCard`,note:`every note a card carries, a priority among them; with its queue menu; while its change is on its way; open with details, while reading, unreadable`},{default:S(()=>[f(`div`,Pe,[(d(!0),n(o,null,N(x(U),e=>(d(),g(w,{key:e.id,project:`jig-ui`,task:e,open:!1},null,8,[`task`]))),128)),c(w,{project:`jig-ui`,task:x(U)[1],open:!1,cards:x(U)},null,8,[`task`,`cards`]),c(w,{project:`jig-ui`,task:x(U)[0],open:!1,cards:x(U),busy:``},null,8,[`task`,`cards`]),c(w,{project:`jig-ui`,task:x(U)[2],open:!0,details:x(Y)[0]},null,8,[`task`,`details`]),c(w,{project:`jig-ui`,task:x(U)[0],open:!0},null,8,[`task`]),c(w,{project:`jig-ui`,task:x(U)[1],open:!0,details:`unavailable`},null,8,[`task`])])]),_:1}),c(B,{title:`TaskRow`,note:`each note and priority; selected; with its queue menu; while its change is on its way`},{default:S(()=>[f(`div`,null,[(d(!0),n(o,null,N(x(U),(e,t)=>(d(),g(D,{key:e.id,task:e,selected:t===2},null,8,[`task`,`selected`]))),128)),c(D,{task:x(U)[1],selected:!1,cards:x(U)},null,8,[`task`,`cards`]),c(D,{task:x(U)[0],selected:!1,cards:x(U),busy:``},null,8,[`task`,`cards`])])]),_:1}),c(B,{title:`BoardColumns`,note:`cards in every column, one open with its details; no live task`},{default:S(()=>[f(`div`,Fe,[c(O,{project:`jig-ui`,columns:x(W),selected:x(U)[2].id,details:x(Y)[0],pending:x(U)[0].id},null,8,[`columns`,`selected`,`details`,`pending`])]),f(`div`,Ie,[c(O,{project:`jig-ui`,columns:x(G)},null,8,[`columns`])])]),_:1}),c(B,{title:`BoardList`,note:`a row picked with its details; nothing picked; no live task`},{default:S(()=>[f(`div`,Le,[c(E,{project:`jig-ui`,columns:x(W),selected:x(U)[2].id,details:x(Y)[0]},null,8,[`columns`,`selected`,`details`])]),f(`div`,Re,[c(E,{project:`jig-ui`,columns:x(W)},null,8,[`columns`])]),f(`div`,ze,[c(E,{project:`jig-ui`,columns:x(G)},null,8,[`columns`])])]),_:1}),c(B,{title:`TaskFacts`,note:`everything a task can carry; a task not started`},{default:S(()=>[(d(!0),n(o,null,N(x(Y),e=>(d(),g(F,{key:e.id,details:e,class:`border-b pb-3`},null,8,[`details`]))),128))]),_:1}),c(B,{title:`TaskBrief`,note:`facts, actions and the link to the full page`},{default:S(()=>[c(me,{project:`jig-ui`,task:x(Y)[1].id,details:x(Y)[1]},null,8,[`task`,`details`])]),_:1}),c(B,{title:`ActionList`,note:`Jig's offers, one unknown id; none`},{default:S(()=>[c(T,{actions:x(q)},null,8,[`actions`]),c(T,{actions:[]})]),_:1}),c(B,{title:`CopyCommand`,note:`short; long enough to be cut`},{default:S(()=>[c(P,{command:`jig task pause design-system`}),c(P,{command:`jig task autopilot a-task-with-a-rather-long-identifier-that-wraps resume --answer 'a long answer to the question'`,class:`max-w-xs`})]),_:1}),c(B,{title:`ProgressBar`,note:`none, part, all, an empty roadmap`},{default:S(()=>[(d(),n(o,null,N([[0,4],[3,9],[5,5],[0,0]],([e,t])=>c(pe,{key:`${e}/${t}`,done:e,total:t},null,8,[`done`,`total`])),64))]),_:1}),c(B,{title:`SpecItemRow`,note:`done with a live task; open with dependencies; a task no longer live; no task; fog`},{default:S(()=>[f(`ul`,null,[(d(!0),n(o,null,N(x(Q),(e,t)=>(d(),g(se,{key:t,item:e,project:`jig-ui`,live:t<2},null,8,[`item`,`live`]))),128))])]),_:1}),c(B,{title:`SpecCard`,note:`no epic, a finished phase folded; an open epic as of the last fetch; a lost epic branch; missing files`},{default:S(()=>[(d(!0),n(o,null,N(x(Ee),e=>(d(),g(ie,{key:e.id,spec:e,project:`jig-ui`,live:[`design-system`,`specs-and-epics`]},null,8,[`spec`]))),128))]),_:1})]))}});export{Be as default};
|