@agent-plan/pi-adapter 0.2.19-next.2 → 0.2.19-next.4
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/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AA6uBtF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AA6uBtF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA67F9D"}
|
package/dist/index.js
CHANGED
|
@@ -416,7 +416,7 @@ async function buildHandoffMarkdown(st, reason, overrides) {
|
|
|
416
416
|
...recentActivityLines,
|
|
417
417
|
"",
|
|
418
418
|
"## Reminder",
|
|
419
|
-
"-
|
|
419
|
+
"- This handoff is KEPT until a task in this phase starts (then auto-archived to .planner/handoff-archive/) or the phase completes. No need to clear it manually.",
|
|
420
420
|
].join("\n");
|
|
421
421
|
}
|
|
422
422
|
async function writeProjectHandoff(st, reason, overrides) {
|
|
@@ -757,6 +757,10 @@ export default function planPiExtension(pi) {
|
|
|
757
757
|
const handoffs = await st.listHandoffs().catch(() => []);
|
|
758
758
|
if (handoffs.length > 0) {
|
|
759
759
|
ctx.ui.notify(`ℹ️ ${handoffs.length} phase handoff(s) pending — review with /planner handoff list.`, "info");
|
|
760
|
+
// Mark each handoff as read (recap presented). Do NOT clear — content is
|
|
761
|
+
// kept until a task in the phase starts (auto-archived) or phase completes.
|
|
762
|
+
for (const h of handoffs)
|
|
763
|
+
await st.markHandoffRead(h.phaseId).catch(() => { });
|
|
760
764
|
}
|
|
761
765
|
}
|
|
762
766
|
// If the user declined enablement, skip EVERYTHING (no web prompt, no migration, no summary).
|
|
@@ -1557,6 +1561,8 @@ export default function planPiExtension(pi) {
|
|
|
1557
1561
|
openQuestions: [], decisions: [], acceptedDecisions: [], completionCriteria: [], taskIds: [], tasks: [],
|
|
1558
1562
|
createdAt: nowISO(), updatedAt: nowISO(),
|
|
1559
1563
|
handoff: "", handoffUpdatedAt: "",
|
|
1564
|
+
handoffReadAt: "",
|
|
1565
|
+
handoffHistory: [],
|
|
1560
1566
|
};
|
|
1561
1567
|
await st.savePhase(phase);
|
|
1562
1568
|
await st.updateFeatures((doc) => {
|
|
@@ -2002,12 +2008,16 @@ export default function planPiExtension(pi) {
|
|
|
2002
2008
|
ctx.ui.notify(`Task "${task.title}" is already in-progress.`, "info");
|
|
2003
2009
|
return;
|
|
2004
2010
|
}
|
|
2005
|
-
//
|
|
2006
|
-
//
|
|
2007
|
-
//
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
ctx.ui.notify("
|
|
2011
|
+
// Auto-archive the handoff on THIS task's phase (reason: task-started) —
|
|
2012
|
+
// the agent is now actively working, so the captured context is consumed.
|
|
2013
|
+
// Other phases' handoffs are left untouched (informational, non-blocking).
|
|
2014
|
+
if ((phase.handoff ?? "") !== "") {
|
|
2015
|
+
await st.clearPhaseHandoff(phase.id, "task-started").catch(() => { });
|
|
2016
|
+
ctx.ui.notify("📦 Archived handoff for this phase (task started) — recover via /planner handoff list + .planner/handoff-archive/.", "info");
|
|
2017
|
+
}
|
|
2018
|
+
const _otherHandoffs = (await st.listHandoffs()).filter((h) => h.phaseId !== phase.id);
|
|
2019
|
+
if (_otherHandoffs.length > 0) {
|
|
2020
|
+
ctx.ui.notify(`ℹ️ ${_otherHandoffs.length} other phase handoff(s) pending — review with /planner handoff list if relevant.`, "info");
|
|
2011
2021
|
}
|
|
2012
2022
|
const now = nowISO();
|
|
2013
2023
|
// Record status change in the incremental statusLog.
|
|
@@ -2164,7 +2174,7 @@ export default function planPiExtension(pi) {
|
|
|
2164
2174
|
ctx.ui.notify(r.error, "warning");
|
|
2165
2175
|
return;
|
|
2166
2176
|
}
|
|
2167
|
-
await st.clearPhaseHandoff(r.phase.id);
|
|
2177
|
+
await st.clearPhaseHandoff(r.phase.id, "manual");
|
|
2168
2178
|
ctx.ui.notify(`Cleared handoff on ${r.compositeRef}`, "info");
|
|
2169
2179
|
return;
|
|
2170
2180
|
}
|
|
@@ -2691,7 +2701,7 @@ export default function planPiExtension(pi) {
|
|
|
2691
2701
|
const r = await resolvePhaseForHandoff(st, undefined);
|
|
2692
2702
|
if (!r.ok)
|
|
2693
2703
|
return { content: [{ type: "text", text: `⚠️ plan_delete_handoff is deprecated — use handoff_clear. ${r.error}` }], details: { deprecated: true, error: r.error } };
|
|
2694
|
-
await st.clearPhaseHandoff(r.phase.id);
|
|
2704
|
+
await st.clearPhaseHandoff(r.phase.id, "manual");
|
|
2695
2705
|
return { content: [{ type: "text", text: `⚠️ plan_delete_handoff is deprecated — cleared handoff on ${r.compositeRef} (phase.handoff). Prefer handoff_clear.` }], details: { deprecated: true, phaseRef: r.compositeRef, phaseId: r.phase.id } };
|
|
2696
2706
|
},
|
|
2697
2707
|
});
|
|
@@ -2789,8 +2799,8 @@ export default function planPiExtension(pi) {
|
|
|
2789
2799
|
const r = await resolvePhaseForHandoff(st, params.phaseRef);
|
|
2790
2800
|
if (!r.ok)
|
|
2791
2801
|
return { content: [{ type: "text", text: `❌ ${r.error}` }], details: { error: r.error } };
|
|
2792
|
-
await st.clearPhaseHandoff(r.phase.id);
|
|
2793
|
-
return { content: [{ type: "text", text: `✅ Cleared handoff on ${r.compositeRef}
|
|
2802
|
+
await st.clearPhaseHandoff(r.phase.id, "manual");
|
|
2803
|
+
return { content: [{ type: "text", text: `✅ Cleared handoff on ${r.compositeRef} (handoffUpdatedAt preserved as audit; archived to .planner/handoff-archive/).` }], details: { phaseRef: r.compositeRef, phaseId: r.phase.id } };
|
|
2794
2804
|
},
|
|
2795
2805
|
});
|
|
2796
2806
|
pi.registerTool({
|
|
@@ -2906,7 +2916,7 @@ export default function planPiExtension(pi) {
|
|
|
2906
2916
|
return doc;
|
|
2907
2917
|
});
|
|
2908
2918
|
await st.writeGenerated();
|
|
2909
|
-
return { content: [{ type: "text", text:
|
|
2919
|
+
return { content: [{ type: "text", text: `✅ Feature created: ${formatFeatureRef(feature.number)} — ${feature.name}${feature.shortId ? ` · ${feature.shortId}` : ""}` }], details: feature };
|
|
2910
2920
|
},
|
|
2911
2921
|
});
|
|
2912
2922
|
pi.registerTool({
|
|
@@ -2981,7 +2991,7 @@ export default function planPiExtension(pi) {
|
|
|
2981
2991
|
if (!feature)
|
|
2982
2992
|
return { content: [{ type: "text", text: `Feature not found: ${params.featureId}` }], details: {} };
|
|
2983
2993
|
await st.writeGenerated();
|
|
2984
|
-
return { content: [{ type: "text", text:
|
|
2994
|
+
return { content: [{ type: "text", text: `✅ Feature updated: ${formatFeatureRef(feature.number)} — ${feature.name}${feature.shortId ? ` · ${feature.shortId}` : ""}` }], details: feature };
|
|
2985
2995
|
},
|
|
2986
2996
|
});
|
|
2987
2997
|
pi.registerTool({
|
|
@@ -3097,6 +3107,8 @@ export default function planPiExtension(pi) {
|
|
|
3097
3107
|
openQuestions: [], decisions: [], acceptedDecisions: [], completionCriteria: [], taskIds: [], tasks: [],
|
|
3098
3108
|
createdAt: now, updatedAt: now,
|
|
3099
3109
|
handoff: "", handoffUpdatedAt: "",
|
|
3110
|
+
handoffReadAt: "",
|
|
3111
|
+
handoffHistory: [],
|
|
3100
3112
|
};
|
|
3101
3113
|
await st.savePhase(phase);
|
|
3102
3114
|
// Atomic: serialize concurrent phase_create linking to the same feature.
|
|
@@ -3112,7 +3124,8 @@ export default function planPiExtension(pi) {
|
|
|
3112
3124
|
});
|
|
3113
3125
|
if (!phase)
|
|
3114
3126
|
return { content: [{ type: "text", text: "Phase creation failed." }], details: {} };
|
|
3115
|
-
|
|
3127
|
+
const phaseCreateFeatures = (await st.loadFeatures()).features;
|
|
3128
|
+
return { content: [{ type: "text", text: `✅ Phase created: ${formatPhaseRef(phase.number, featureNumberOfPhase(phase, phaseCreateFeatures))} — ${phase.title}${phase.shortId ? ` · ${phase.shortId}` : ""}` }], details: phase };
|
|
3116
3129
|
},
|
|
3117
3130
|
});
|
|
3118
3131
|
pi.registerTool({
|
|
@@ -3201,7 +3214,8 @@ export default function planPiExtension(pi) {
|
|
|
3201
3214
|
phase.updatedAt = nowISO();
|
|
3202
3215
|
await st.savePhase(phase);
|
|
3203
3216
|
await st.writeGenerated();
|
|
3204
|
-
|
|
3217
|
+
const phaseUpdateFeatures = (await st.loadFeatures()).features;
|
|
3218
|
+
return { content: [{ type: "text", text: `✅ Phase updated: ${formatPhaseRef(phase.number, featureNumberOfPhase(phase, phaseUpdateFeatures))} — ${phase.title}${phase.shortId ? ` · ${phase.shortId}` : ""}` }], details: phase };
|
|
3205
3219
|
},
|
|
3206
3220
|
});
|
|
3207
3221
|
pi.registerTool({
|
|
@@ -3713,12 +3727,12 @@ export default function planPiExtension(pi) {
|
|
|
3713
3727
|
: hasActiveWork
|
|
3714
3728
|
? plan.features.features.find((feature) => feature.status === "in-progress") ?? null
|
|
3715
3729
|
: null;
|
|
3716
|
-
const nextActivity =
|
|
3717
|
-
? (resume.nextSteps
|
|
3718
|
-
|
|
3719
|
-
|
|
3720
|
-
|
|
3721
|
-
: "Review the current plan and choose the next task."
|
|
3730
|
+
const nextActivity = handoffs.length > 0
|
|
3731
|
+
? "Read the most recent phase handoff (handoff show <ref>), validate it against current plan ordering and dependencies, then pick the next task. (Legacy resume.json nextSteps may be stale — the handoff is authoritative.)"
|
|
3732
|
+
: hasActiveWork
|
|
3733
|
+
? (resume.nextSteps[0]
|
|
3734
|
+
?? (currentTask ? `Resume task ${currentTask.id} — ${taskLabel(currentTask)}` : currentPhase ? `Resume phase ${currentPhase.id} — ${phaseLabel(currentPhase)}` : "Resume the active work stream"))
|
|
3735
|
+
: "Review the current plan and choose the next task.";
|
|
3722
3736
|
const webServer = server;
|
|
3723
3737
|
const webLocalUrl = webServer?.localUrl ?? webServer?.url ?? "";
|
|
3724
3738
|
const webLanUrl = webServer?.lanUrl ?? "";
|
|
@@ -3769,12 +3783,12 @@ export default function planPiExtension(pi) {
|
|
|
3769
3783
|
"═══════════════════════════════════════════════════════════════",
|
|
3770
3784
|
"MANDATORY OPERATIONAL PROTOCOL (violation = execution failure):",
|
|
3771
3785
|
"═══════════════════════════════════════════════════════════════",
|
|
3772
|
-
"1. HANDOFF HYGIENE: If one or more phases have a pending handoff (entity-scoped, phase.handoff), present the list, read the relevant one with handoff show <ref
|
|
3786
|
+
"1. HANDOFF HYGIENE: If one or more phases have a pending handoff (entity-scoped, phase.handoff), present the list, read the relevant one with handoff show <ref> for context. Handoffs are KEPT until a task in the phase starts (auto-archived to .planner/handoff-archive/) or the phase completes — no manual clear needed. They are non-blocking context artifacts, not locks — they never block task_start.",
|
|
3773
3787
|
"2. TASK LIFECYCLE: BEFORE coding ANY file: call task_start. AFTER finishing work on ANY task: call task_complete. No exceptions. No 'I'll do it later'. NOTE: Planner operations (plan_write_handoff / /planner handoff, task_start, task_complete, task_update, status reads) are NOT code edits. They are ALWAYS allowed regardless of task state — you may write/refresh the handoff even when no task is in-progress (e.g., all tasks done, or capturing state mid-flight). Never refuse to write a handoff because 'no task is open'; that is incorrect.",
|
|
3774
3788
|
"3. IMMEDIATE SYNC: Update task status AT THE EXACT MOMENT of transition. Start = task_start NOW. Done = task_complete NOW. Blocked = task_update with motivation NOW. Never batch status updates.",
|
|
3775
3789
|
"4. BLOCKED MOTIVATION: Transitions to blocked/canceled/rejected/deferred/waiting/planned(from non-planned) MUST include a detailed 'motivation' parameter. Write it as if the next person has zero context.",
|
|
3776
3790
|
"5. NO SHORTCUTS: If a tool blocks you, follow the protocol. Bypasses are for emergencies only, not for convenience.",
|
|
3777
|
-
"6. ENTITY REFERENCES: When you mention a feature/phase/task in chat,
|
|
3791
|
+
"6. ENTITY REFERENCES: When you mention a feature/phase/task in chat, PREFER its 5-char shortId (globally unique, e.g. UUXD1). The composite T00x is per-phase and AMBIGUOUS unless fully qualified as T00x(P00x/F00x) — do NOT use bare 'T00x'. NEVER a raw UUID like bd6ed366. Tool responses already show shortId + compositeRef; reuse them.",
|
|
3778
3792
|
"═══════════════════════════════════════════════════════════════",
|
|
3779
3793
|
"",
|
|
3780
3794
|
// ── Project details ──
|
|
@@ -3805,7 +3819,7 @@ export default function planPiExtension(pi) {
|
|
|
3805
3819
|
resume.currentPhaseId ? ` current phase: ${resume.currentPhaseId}` : " current phase: (none)",
|
|
3806
3820
|
resume.inProgressTaskIds.length ? ` in-progress tasks: ${resume.inProgressTaskIds.join(", ")}` : " in-progress tasks: (none)",
|
|
3807
3821
|
resume.blockers.length ? ` blockers: ${resume.blockers.join("; ")}` : " blockers: (none)",
|
|
3808
|
-
resume.nextSteps.length ? ` next steps: ${resume.nextSteps.join("; ")}` : " next steps: (none)",
|
|
3822
|
+
resume.nextSteps.length ? ` next steps: ${resume.nextSteps.join("; ")}${handoffs.length > 0 ? " (⚠️ may be stale — handoff is authoritative)" : resume.nextStepsUpdatedAt ? ` (last updated ${resume.nextStepsUpdatedAt}, may be stale)` : ""}` : " next steps: (none)",
|
|
3809
3823
|
resume.lastSessionSummary ? ` last session: ${resume.lastSessionSummary}` : "",
|
|
3810
3824
|
"",
|
|
3811
3825
|
recentActivity.length ? "Recent activity (most recent first):" : "",
|
|
@@ -3849,7 +3863,7 @@ export default function planPiExtension(pi) {
|
|
|
3849
3863
|
...handoffs.map((h, i) => ` [${i + 1}] ${h.compositeRef} — ${h.updatedAt} — "${h.firstLine}"`),
|
|
3850
3864
|
handoffs.length > 0 ? "Read the relevant one with handoff show <ref> (or /planner handoff show <ref>) as previous-session context, but validate it against the current planner state, ordering, and dependencies before treating any target as the next task." : "",
|
|
3851
3865
|
handoffs.length > 0 ? "If planner state shows no task/phase in-progress, do NOT present a handoff target as the current focus; present it only as a candidate to validate." : "",
|
|
3852
|
-
handoffs.length > 0 ? "
|
|
3866
|
+
handoffs.length > 0 ? "Handoffs are KEPT until a task in the phase starts (auto-archived to .planner/handoff-archive/) or the phase completes — read with handoff show <ref> for context; no manual clear needed." : "",
|
|
3853
3867
|
"Plan tools available: project_set_language_preferences, plan_init, project_update, requirement_list, requirement_create, requirement_update, requirement_delete, plan_get, feature_list, feature_get, feature_create, feature_update, feature_delete, phase_list, phase_get, phase_create, phase_update, phase_delete, task_list, task_get, task_create, task_update, task_delete, task_start, task_complete, plan_render, plan_get_handoff, plan_write_handoff, plan_delete_handoff, handoff_list, handoff_show, handoff_write, handoff_clear, plan_authorize_bypass, plan_clear_bypass",
|
|
3854
3868
|
].filter(Boolean).join("\n");
|
|
3855
3869
|
contextBlockCache = contextBlock;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-plan/pi-adapter",
|
|
3
|
-
"version": "0.2.19-next.
|
|
3
|
+
"version": "0.2.19-next.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Pi agent extension for Agent Plan — structured project planning in .planner/",
|
|
6
6
|
"keywords": [
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"typebox": "^1.1.24",
|
|
30
30
|
"zod": "^3.24.0",
|
|
31
|
-
"@agent-plan/core": "0.2.19-next.
|
|
32
|
-
"@agent-plan/server": "0.2.19-next.
|
|
31
|
+
"@agent-plan/core": "0.2.19-next.4",
|
|
32
|
+
"@agent-plan/server": "0.2.19-next.4"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@earendil-works/pi-coding-agent": "^0.74.0",
|
|
@@ -194,7 +194,7 @@ Please change the parent <Route path="${N}"> to <Route path="${N==="/"?"*":`${N}
|
|
|
194
194
|
To pick up a draggable item, press the space bar.
|
|
195
195
|
While dragging, use the arrow keys to move the item.
|
|
196
196
|
Press space again to drop the item in its new position, or press escape to cancel.
|
|
197
|
-
`},IR={onDragStart(t){let{active:a}=t;return"Picked up draggable item "+a.id+"."},onDragOver(t){let{active:a,over:r}=t;return r?"Draggable item "+a.id+" was moved over droppable area "+r.id+".":"Draggable item "+a.id+" is no longer over a droppable area."},onDragEnd(t){let{active:a,over:r}=t;return r?"Draggable item "+a.id+" was dropped over droppable area "+r.id:"Draggable item "+a.id+" was dropped."},onDragCancel(t){let{active:a}=t;return"Dragging was cancelled. Draggable item "+a.id+" was dropped."}};function QR(t){let{announcements:a=IR,container:r,hiddenTextDescribedById:i,screenReaderInstructions:u=XR}=t;const{announce:o,announcement:h}=VR(),m=_u("DndLiveRegion"),[p,g]=v.useState(!1);if(v.useEffect(()=>{g(!0)},[]),FR(v.useMemo(()=>({onDragStart(b){let{active:w}=b;o(a.onDragStart({active:w}))},onDragMove(b){let{active:w,over:S}=b;a.onDragMove&&o(a.onDragMove({active:w,over:S}))},onDragOver(b){let{active:w,over:S}=b;o(a.onDragOver({active:w,over:S}))},onDragEnd(b){let{active:w,over:S}=b;o(a.onDragEnd({active:w,over:S}))},onDragCancel(b){let{active:w,over:S}=b;o(a.onDragCancel({active:w,over:S}))}}),[o,a])),!p)return null;const x=un.createElement(un.Fragment,null,un.createElement(qR,{id:i,value:u.draggable}),un.createElement(YR,{id:m,announcement:h}));return r?Zl.createPortal(x,r):x}var Ln;(function(t){t.DragStart="dragStart",t.DragMove="dragMove",t.DragEnd="dragEnd",t.DragCancel="dragCancel",t.DragOver="dragOver",t.RegisterDroppable="registerDroppable",t.SetDroppableDisabled="setDroppableDisabled",t.UnregisterDroppable="unregisterDroppable"})(Ln||(Ln={}));function Rc(){}function PR(t,a){return v.useMemo(()=>({sensor:t,options:a??{}}),[t,a])}function KR(){for(var t=arguments.length,a=new Array(t),r=0;r<t;r++)a[r]=arguments[r];return v.useMemo(()=>[...a].filter(i=>i!=null),[...a])}const ll=Object.freeze({x:0,y:0});function ZR(t,a){return Math.sqrt(Math.pow(t.x-a.x,2)+Math.pow(t.y-a.y,2))}function JR(t,a){const r=wc(t);if(!r)return"0 0";const i={x:(r.x-a.left)/a.width*100,y:(r.y-a.top)/a.height*100};return i.x+"% "+i.y+"%"}function WR(t,a){let{data:{value:r}}=t,{data:{value:i}}=a;return r-i}function eN(t,a){let{data:{value:r}}=t,{data:{value:i}}=a;return i-r}function tN(t,a){if(!t||t.length===0)return null;const[r]=t;return r[a]}function Ly(t,a,r){return a===void 0&&(a=t.left),r===void 0&&(r=t.top),{x:a+t.width*.5,y:r+t.height*.5}}const nN=t=>{let{collisionRect:a,droppableRects:r,droppableContainers:i}=t;const u=Ly(a,a.left,a.top),o=[];for(const h of i){const{id:m}=h,p=r.get(m);if(p){const g=ZR(Ly(p),u);o.push({id:m,data:{droppableContainer:h,value:g}})}}return o.sort(WR)};function aN(t,a){const r=Math.max(a.top,t.top),i=Math.max(a.left,t.left),u=Math.min(a.left+a.width,t.left+t.width),o=Math.min(a.top+a.height,t.top+t.height),h=u-i,m=o-r;if(i<u&&r<o){const p=a.width*a.height,g=t.width*t.height,x=h*m,b=x/(p+g-x);return Number(b.toFixed(4))}return 0}const lN=t=>{let{collisionRect:a,droppableRects:r,droppableContainers:i}=t;const u=[];for(const o of i){const{id:h}=o,m=r.get(h);if(m){const p=aN(m,a);p>0&&u.push({id:h,data:{droppableContainer:o,value:p}})}}return u.sort(eN)};function rN(t,a,r){return{...t,scaleX:a&&r?a.width/r.width:1,scaleY:a&&r?a.height/r.height:1}}function vb(t,a){return t&&a?{x:t.left-a.left,y:t.top-a.top}:ll}function sN(t){return function(r){for(var i=arguments.length,u=new Array(i>1?i-1:0),o=1;o<i;o++)u[o-1]=arguments[o];return u.reduce((h,m)=>({...h,top:h.top+t*m.y,bottom:h.bottom+t*m.y,left:h.left+t*m.x,right:h.right+t*m.x}),{...r})}}const iN=sN(1);function yb(t){if(t.startsWith("matrix3d(")){const a=t.slice(9,-1).split(/, /);return{x:+a[12],y:+a[13],scaleX:+a[0],scaleY:+a[5]}}else if(t.startsWith("matrix(")){const a=t.slice(7,-1).split(/, /);return{x:+a[4],y:+a[5],scaleX:+a[0],scaleY:+a[3]}}return null}function uN(t,a,r){const i=yb(a);if(!i)return t;const{scaleX:u,scaleY:o,x:h,y:m}=i,p=t.left-h-(1-u)*parseFloat(r),g=t.top-m-(1-o)*parseFloat(r.slice(r.indexOf(" ")+1)),x=u?t.width/u:t.width,b=o?t.height/o:t.height;return{width:x,height:b,top:g,right:p+x,bottom:g+b,left:p}}const oN={ignoreTransform:!1};function ui(t,a){a===void 0&&(a=oN);let r=t.getBoundingClientRect();if(a.ignoreTransform){const{transform:g,transformOrigin:x}=oa(t).getComputedStyle(t);g&&(r=uN(r,g,x))}const{top:i,left:u,width:o,height:h,bottom:m,right:p}=r;return{top:i,left:u,width:o,height:h,bottom:m,right:p}}function zy(t){return ui(t,{ignoreTransform:!0})}function cN(t){const a=t.innerWidth,r=t.innerHeight;return{top:0,left:0,right:a,bottom:r,width:a,height:r}}function dN(t,a){return a===void 0&&(a=oa(t).getComputedStyle(t)),a.position==="fixed"}function fN(t,a){a===void 0&&(a=oa(t).getComputedStyle(t));const r=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(u=>{const o=a[u];return typeof o=="string"?r.test(o):!1})}function lm(t,a){const r=[];function i(u){if(a!=null&&r.length>=a||!u)return r;if(am(u)&&u.scrollingElement!=null&&!r.includes(u.scrollingElement))return r.push(u.scrollingElement),r;if(!Mu(u)||mb(u)||r.includes(u))return r;const o=oa(t).getComputedStyle(u);return u!==t&&fN(u,o)&&r.push(u),dN(u,o)?r:i(u.parentNode)}return t?i(t):r}function xb(t){const[a]=lm(t,1);return a??null}function sh(t){return!Bc||!t?null:si(t)?t:nm(t)?am(t)||t===ii(t).scrollingElement?window:Mu(t)?t:null:null}function bb(t){return si(t)?t.scrollX:t.scrollLeft}function Sb(t){return si(t)?t.scrollY:t.scrollTop}function Ch(t){return{x:bb(t),y:Sb(t)}}var Hn;(function(t){t[t.Forward=1]="Forward",t[t.Backward=-1]="Backward"})(Hn||(Hn={}));function Eb(t){return!Bc||!t?!1:t===document.scrollingElement}function wb(t){const a={x:0,y:0},r=Eb(t)?{height:window.innerHeight,width:window.innerWidth}:{height:t.clientHeight,width:t.clientWidth},i={x:t.scrollWidth-r.width,y:t.scrollHeight-r.height},u=t.scrollTop<=a.y,o=t.scrollLeft<=a.x,h=t.scrollTop>=i.y,m=t.scrollLeft>=i.x;return{isTop:u,isLeft:o,isBottom:h,isRight:m,maxScroll:i,minScroll:a}}const hN={x:.2,y:.2};function mN(t,a,r,i,u){let{top:o,left:h,right:m,bottom:p}=r;i===void 0&&(i=10),u===void 0&&(u=hN);const{isTop:g,isBottom:x,isLeft:b,isRight:w}=wb(t),S={x:0,y:0},R={x:0,y:0},C={height:a.height*u.y,width:a.width*u.x};return!g&&o<=a.top+C.height?(S.y=Hn.Backward,R.y=i*Math.abs((a.top+C.height-o)/C.height)):!x&&p>=a.bottom-C.height&&(S.y=Hn.Forward,R.y=i*Math.abs((a.bottom-C.height-p)/C.height)),!w&&m>=a.right-C.width?(S.x=Hn.Forward,R.x=i*Math.abs((a.right-C.width-m)/C.width)):!b&&h<=a.left+C.width&&(S.x=Hn.Backward,R.x=i*Math.abs((a.left+C.width-h)/C.width)),{direction:S,speed:R}}function pN(t){if(t===document.scrollingElement){const{innerWidth:o,innerHeight:h}=window;return{top:0,left:0,right:o,bottom:h,width:o,height:h}}const{top:a,left:r,right:i,bottom:u}=t.getBoundingClientRect();return{top:a,left:r,right:i,bottom:u,width:t.clientWidth,height:t.clientHeight}}function Rb(t){return t.reduce((a,r)=>Js(a,Ch(r)),ll)}function gN(t){return t.reduce((a,r)=>a+bb(r),0)}function vN(t){return t.reduce((a,r)=>a+Sb(r),0)}function Nb(t,a){if(a===void 0&&(a=ui),!t)return;const{top:r,left:i,bottom:u,right:o}=a(t);xb(t)&&(u<=0||o<=0||r>=window.innerHeight||i>=window.innerWidth)&&t.scrollIntoView({block:"center",inline:"center"})}const yN=[["x",["left","right"],gN],["y",["top","bottom"],vN]];class rm{constructor(a,r){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const i=lm(r),u=Rb(i);this.rect={...a},this.width=a.width,this.height=a.height;for(const[o,h,m]of yN)for(const p of h)Object.defineProperty(this,p,{get:()=>{const g=m(i),x=u[o]-g;return this.rect[p]+x},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class hu{constructor(a){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(r=>{var i;return(i=this.target)==null?void 0:i.removeEventListener(...r)})},this.target=a}add(a,r,i){var u;(u=this.target)==null||u.addEventListener(a,r,i),this.listeners.push([a,r,i])}}function xN(t){const{EventTarget:a}=oa(t);return t instanceof a?t:ii(t)}function ih(t,a){const r=Math.abs(t.x),i=Math.abs(t.y);return typeof a=="number"?Math.sqrt(r**2+i**2)>a:"x"in a&&"y"in a?r>a.x&&i>a.y:"x"in a?r>a.x:"y"in a?i>a.y:!1}var Xa;(function(t){t.Click="click",t.DragStart="dragstart",t.Keydown="keydown",t.ContextMenu="contextmenu",t.Resize="resize",t.SelectionChange="selectionchange",t.VisibilityChange="visibilitychange"})(Xa||(Xa={}));function Uy(t){t.preventDefault()}function bN(t){t.stopPropagation()}var Ct;(function(t){t.Space="Space",t.Down="ArrowDown",t.Right="ArrowRight",t.Left="ArrowLeft",t.Up="ArrowUp",t.Esc="Escape",t.Enter="Enter",t.Tab="Tab"})(Ct||(Ct={}));const Tb={start:[Ct.Space,Ct.Enter],cancel:[Ct.Esc],end:[Ct.Space,Ct.Enter,Ct.Tab]},SN=(t,a)=>{let{currentCoordinates:r}=a;switch(t.code){case Ct.Right:return{...r,x:r.x+25};case Ct.Left:return{...r,x:r.x-25};case Ct.Down:return{...r,y:r.y+25};case Ct.Up:return{...r,y:r.y-25}}};class jb{constructor(a){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=a;const{event:{target:r}}=a;this.props=a,this.listeners=new hu(ii(r)),this.windowListeners=new hu(oa(r)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(Xa.Resize,this.handleCancel),this.windowListeners.add(Xa.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(Xa.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:a,onStart:r}=this.props,i=a.node.current;i&&Nb(i),r(ll)}handleKeyDown(a){if(qc(a)){const{active:r,context:i,options:u}=this.props,{keyboardCodes:o=Tb,coordinateGetter:h=SN,scrollBehavior:m="smooth"}=u,{code:p}=a;if(o.end.includes(p)){this.handleEnd(a);return}if(o.cancel.includes(p)){this.handleCancel(a);return}const{collisionRect:g}=i.current,x=g?{x:g.left,y:g.top}:ll;this.referenceCoordinates||(this.referenceCoordinates=x);const b=h(a,{active:r,context:i.current,currentCoordinates:x});if(b){const w=Ec(b,x),S={x:0,y:0},{scrollableAncestors:R}=i.current;for(const C of R){const N=a.code,{isTop:z,isRight:I,isLeft:q,isBottom:Q,maxScroll:ee,minScroll:te}=wb(C),D=pN(C),j={x:Math.min(N===Ct.Right?D.right-D.width/2:D.right,Math.max(N===Ct.Right?D.left:D.left+D.width/2,b.x)),y:Math.min(N===Ct.Down?D.bottom-D.height/2:D.bottom,Math.max(N===Ct.Down?D.top:D.top+D.height/2,b.y))},re=N===Ct.Right&&!I||N===Ct.Left&&!q,ue=N===Ct.Down&&!Q||N===Ct.Up&&!z;if(re&&j.x!==b.x){const xe=C.scrollLeft+w.x,pe=N===Ct.Right&&xe<=ee.x||N===Ct.Left&&xe>=te.x;if(pe&&!w.y){C.scrollTo({left:xe,behavior:m});return}pe?S.x=C.scrollLeft-xe:S.x=N===Ct.Right?C.scrollLeft-ee.x:C.scrollLeft-te.x,S.x&&C.scrollBy({left:-S.x,behavior:m});break}else if(ue&&j.y!==b.y){const xe=C.scrollTop+w.y,pe=N===Ct.Down&&xe<=ee.y||N===Ct.Up&&xe>=te.y;if(pe&&!w.x){C.scrollTo({top:xe,behavior:m});return}pe?S.y=C.scrollTop-xe:S.y=N===Ct.Down?C.scrollTop-ee.y:C.scrollTop-te.y,S.y&&C.scrollBy({top:-S.y,behavior:m});break}}this.handleMove(a,Js(Ec(b,this.referenceCoordinates),S))}}}handleMove(a,r){const{onMove:i}=this.props;a.preventDefault(),i(r)}handleEnd(a){const{onEnd:r}=this.props;a.preventDefault(),this.detach(),r()}handleCancel(a){const{onCancel:r}=this.props;a.preventDefault(),this.detach(),r()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}jb.activators=[{eventName:"onKeyDown",handler:(t,a,r)=>{let{keyboardCodes:i=Tb,onActivation:u}=a,{active:o}=r;const{code:h}=t.nativeEvent;if(i.start.includes(h)){const m=o.activatorNode.current;return m&&t.target!==m?!1:(t.preventDefault(),u==null||u({event:t.nativeEvent}),!0)}return!1}}];function Hy(t){return!!(t&&"distance"in t)}function By(t){return!!(t&&"delay"in t)}class sm{constructor(a,r,i){var u;i===void 0&&(i=xN(a.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=a,this.events=r;const{event:o}=a,{target:h}=o;this.props=a,this.events=r,this.document=ii(h),this.documentListeners=new hu(this.document),this.listeners=new hu(i),this.windowListeners=new hu(oa(h)),this.initialCoordinates=(u=wc(o))!=null?u:ll,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:a,props:{options:{activationConstraint:r,bypassActivationConstraint:i}}}=this;if(this.listeners.add(a.move.name,this.handleMove,{passive:!1}),this.listeners.add(a.end.name,this.handleEnd),a.cancel&&this.listeners.add(a.cancel.name,this.handleCancel),this.windowListeners.add(Xa.Resize,this.handleCancel),this.windowListeners.add(Xa.DragStart,Uy),this.windowListeners.add(Xa.VisibilityChange,this.handleCancel),this.windowListeners.add(Xa.ContextMenu,Uy),this.documentListeners.add(Xa.Keydown,this.handleKeydown),r){if(i!=null&&i({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(By(r)){this.timeoutId=setTimeout(this.handleStart,r.delay),this.handlePending(r);return}if(Hy(r)){this.handlePending(r);return}}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handlePending(a,r){const{active:i,onPending:u}=this.props;u(i,a,this.initialCoordinates,r)}handleStart(){const{initialCoordinates:a}=this,{onStart:r}=this.props;a&&(this.activated=!0,this.documentListeners.add(Xa.Click,bN,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(Xa.SelectionChange,this.removeTextSelection),r(a))}handleMove(a){var r;const{activated:i,initialCoordinates:u,props:o}=this,{onMove:h,options:{activationConstraint:m}}=o;if(!u)return;const p=(r=wc(a))!=null?r:ll,g=Ec(u,p);if(!i&&m){if(Hy(m)){if(m.tolerance!=null&&ih(g,m.tolerance))return this.handleCancel();if(ih(g,m.distance))return this.handleStart()}if(By(m)&&ih(g,m.tolerance))return this.handleCancel();this.handlePending(m,g);return}a.cancelable&&a.preventDefault(),h(p)}handleEnd(){const{onAbort:a,onEnd:r}=this.props;this.detach(),this.activated||a(this.props.active),r()}handleCancel(){const{onAbort:a,onCancel:r}=this.props;this.detach(),this.activated||a(this.props.active),r()}handleKeydown(a){a.code===Ct.Esc&&this.handleCancel()}removeTextSelection(){var a;(a=this.document.getSelection())==null||a.removeAllRanges()}}const EN={cancel:{name:"pointercancel"},move:{name:"pointermove"},end:{name:"pointerup"}};class im extends sm{constructor(a){const{event:r}=a,i=ii(r.target);super(a,EN,i)}}im.activators=[{eventName:"onPointerDown",handler:(t,a)=>{let{nativeEvent:r}=t,{onActivation:i}=a;return!r.isPrimary||r.button!==0?!1:(i==null||i({event:r}),!0)}}];const wN={move:{name:"mousemove"},end:{name:"mouseup"}};var Ah;(function(t){t[t.RightClick=2]="RightClick"})(Ah||(Ah={}));class RN extends sm{constructor(a){super(a,wN,ii(a.event.target))}}RN.activators=[{eventName:"onMouseDown",handler:(t,a)=>{let{nativeEvent:r}=t,{onActivation:i}=a;return r.button===Ah.RightClick?!1:(i==null||i({event:r}),!0)}}];const uh={cancel:{name:"touchcancel"},move:{name:"touchmove"},end:{name:"touchend"}};class NN extends sm{constructor(a){super(a,uh)}static setup(){return window.addEventListener(uh.move.name,a,{capture:!1,passive:!1}),function(){window.removeEventListener(uh.move.name,a)};function a(){}}}NN.activators=[{eventName:"onTouchStart",handler:(t,a)=>{let{nativeEvent:r}=t,{onActivation:i}=a;const{touches:u}=r;return u.length>1?!1:(i==null||i({event:r}),!0)}}];var mu;(function(t){t[t.Pointer=0]="Pointer",t[t.DraggableRect=1]="DraggableRect"})(mu||(mu={}));var Nc;(function(t){t[t.TreeOrder=0]="TreeOrder",t[t.ReversedTreeOrder=1]="ReversedTreeOrder"})(Nc||(Nc={}));function TN(t){let{acceleration:a,activator:r=mu.Pointer,canScroll:i,draggingRect:u,enabled:o,interval:h=5,order:m=Nc.TreeOrder,pointerCoordinates:p,scrollableAncestors:g,scrollableAncestorRects:x,delta:b,threshold:w}=t;const S=DN({delta:b,disabled:!o}),[R,C]=zR(),N=v.useRef({x:0,y:0}),z=v.useRef({x:0,y:0}),I=v.useMemo(()=>{switch(r){case mu.Pointer:return p?{top:p.y,bottom:p.y,left:p.x,right:p.x}:null;case mu.DraggableRect:return u}},[r,u,p]),q=v.useRef(null),Q=v.useCallback(()=>{const te=q.current;if(!te)return;const D=N.current.x*z.current.x,j=N.current.y*z.current.y;te.scrollBy(D,j)},[]),ee=v.useMemo(()=>m===Nc.TreeOrder?[...g].reverse():g,[m,g]);v.useEffect(()=>{if(!o||!g.length||!I){C();return}for(const te of ee){if((i==null?void 0:i(te))===!1)continue;const D=g.indexOf(te),j=x[D];if(!j)continue;const{direction:re,speed:ue}=mN(te,j,I,a,w);for(const xe of["x","y"])S[xe][re[xe]]||(ue[xe]=0,re[xe]=0);if(ue.x>0||ue.y>0){C(),q.current=te,R(Q,h),N.current=ue,z.current=re;return}}N.current={x:0,y:0},z.current={x:0,y:0},C()},[a,Q,i,C,o,h,JSON.stringify(I),JSON.stringify(S),R,g,ee,x,JSON.stringify(w)])}const jN={x:{[Hn.Backward]:!1,[Hn.Forward]:!1},y:{[Hn.Backward]:!1,[Hn.Forward]:!1}};function DN(t){let{delta:a,disabled:r}=t;const i=Sc(a);return ku(u=>{if(r||!i||!u)return jN;const o={x:Math.sign(a.x-i.x),y:Math.sign(a.y-i.y)};return{x:{[Hn.Backward]:u.x[Hn.Backward]||o.x===-1,[Hn.Forward]:u.x[Hn.Forward]||o.x===1},y:{[Hn.Backward]:u.y[Hn.Backward]||o.y===-1,[Hn.Forward]:u.y[Hn.Forward]||o.y===1}}},[r,a,i])}function CN(t,a){const r=a!=null?t.get(a):void 0,i=r?r.node.current:null;return ku(u=>{var o;return a==null?null:(o=i??u)!=null?o:null},[i,a])}function AN(t,a){return v.useMemo(()=>t.reduce((r,i)=>{const{sensor:u}=i,o=u.activators.map(h=>({eventName:h.eventName,handler:a(h.handler,i)}));return[...r,...o]},[]),[t,a])}var Su;(function(t){t[t.Always=0]="Always",t[t.BeforeDragging=1]="BeforeDragging",t[t.WhileDragging=2]="WhileDragging"})(Su||(Su={}));var Oh;(function(t){t.Optimized="optimized"})(Oh||(Oh={}));const $y=new Map;function ON(t,a){let{dragging:r,dependencies:i,config:u}=a;const[o,h]=v.useState(null),{frequency:m,measure:p,strategy:g}=u,x=v.useRef(t),b=N(),w=bu(b),S=v.useCallback(function(z){z===void 0&&(z=[]),!w.current&&h(I=>I===null?z:I.concat(z.filter(q=>!I.includes(q))))},[w]),R=v.useRef(null),C=ku(z=>{if(b&&!r)return $y;if(!z||z===$y||x.current!==t||o!=null){const I=new Map;for(let q of t){if(!q)continue;if(o&&o.length>0&&!o.includes(q.id)&&q.rect.current){I.set(q.id,q.rect.current);continue}const Q=q.node.current,ee=Q?new rm(p(Q),Q):null;q.rect.current=ee,ee&&I.set(q.id,ee)}return I}return z},[t,o,r,b,p]);return v.useEffect(()=>{x.current=t},[t]),v.useEffect(()=>{b||S()},[r,b]),v.useEffect(()=>{o&&o.length>0&&h(null)},[JSON.stringify(o)]),v.useEffect(()=>{b||typeof m!="number"||R.current!==null||(R.current=setTimeout(()=>{S(),R.current=null},m))},[m,b,S,...i]),{droppableRects:C,measureDroppableContainers:S,measuringScheduled:o!=null};function N(){switch(g){case Su.Always:return!1;case Su.BeforeDragging:return r;default:return!r}}}function um(t,a){return ku(r=>t?r||(typeof a=="function"?a(t):t):null,[a,t])}function MN(t,a){return um(t,a)}function kN(t){let{callback:a,disabled:r}=t;const i=$c(a),u=v.useMemo(()=>{if(r||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:o}=window;return new o(i)},[i,r]);return v.useEffect(()=>()=>u==null?void 0:u.disconnect(),[u]),u}function Yc(t){let{callback:a,disabled:r}=t;const i=$c(a),u=v.useMemo(()=>{if(r||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:o}=window;return new o(i)},[r]);return v.useEffect(()=>()=>u==null?void 0:u.disconnect(),[u]),u}function _N(t){return new rm(ui(t),t)}function qy(t,a,r){a===void 0&&(a=_N);const[i,u]=v.useState(null);function o(){u(p=>{if(!t)return null;if(t.isConnected===!1){var g;return(g=p??r)!=null?g:null}const x=a(t);return JSON.stringify(p)===JSON.stringify(x)?p:x})}const h=kN({callback(p){if(t)for(const g of p){const{type:x,target:b}=g;if(x==="childList"&&b instanceof HTMLElement&&b.contains(t)){o();break}}}}),m=Yc({callback:o});return al(()=>{o(),t?(m==null||m.observe(t),h==null||h.observe(document.body,{childList:!0,subtree:!0})):(m==null||m.disconnect(),h==null||h.disconnect())},[t]),i}function LN(t){const a=um(t);return vb(t,a)}const Yy=[];function zN(t){const a=v.useRef(t),r=ku(i=>t?i&&i!==Yy&&t&&a.current&&t.parentNode===a.current.parentNode?i:lm(t):Yy,[t]);return v.useEffect(()=>{a.current=t},[t]),r}function UN(t){const[a,r]=v.useState(null),i=v.useRef(t),u=v.useCallback(o=>{const h=sh(o.target);h&&r(m=>m?(m.set(h,Ch(h)),new Map(m)):null)},[]);return v.useEffect(()=>{const o=i.current;if(t!==o){h(o);const m=t.map(p=>{const g=sh(p);return g?(g.addEventListener("scroll",u,{passive:!0}),[g,Ch(g)]):null}).filter(p=>p!=null);r(m.length?new Map(m):null),i.current=t}return()=>{h(t),h(o)};function h(m){m.forEach(p=>{const g=sh(p);g==null||g.removeEventListener("scroll",u)})}},[u,t]),v.useMemo(()=>t.length?a?Array.from(a.values()).reduce((o,h)=>Js(o,h),ll):Rb(t):ll,[t,a])}function Vy(t,a){a===void 0&&(a=[]);const r=v.useRef(null);return v.useEffect(()=>{r.current=null},a),v.useEffect(()=>{const i=t!==ll;i&&!r.current&&(r.current=t),!i&&r.current&&(r.current=null)},[t]),r.current?Ec(t,r.current):ll}function HN(t){v.useEffect(()=>{if(!Bc)return;const a=t.map(r=>{let{sensor:i}=r;return i.setup==null?void 0:i.setup()});return()=>{for(const r of a)r==null||r()}},t.map(a=>{let{sensor:r}=a;return r}))}function BN(t,a){return v.useMemo(()=>t.reduce((r,i)=>{let{eventName:u,handler:o}=i;return r[u]=h=>{o(h,a)},r},{}),[t,a])}function Db(t){return v.useMemo(()=>t?cN(t):null,[t])}const Fy=[];function $N(t,a){a===void 0&&(a=ui);const[r]=t,i=Db(r?oa(r):null),[u,o]=v.useState(Fy);function h(){o(()=>t.length?t.map(p=>Eb(p)?i:new rm(a(p),p)):Fy)}const m=Yc({callback:h});return al(()=>{m==null||m.disconnect(),h(),t.forEach(p=>m==null?void 0:m.observe(p))},[t]),u}function Cb(t){if(!t)return null;if(t.children.length>1)return t;const a=t.children[0];return Mu(a)?a:t}function qN(t){let{measure:a}=t;const[r,i]=v.useState(null),u=v.useCallback(g=>{for(const{target:x}of g)if(Mu(x)){i(b=>{const w=a(x);return b?{...b,width:w.width,height:w.height}:w});break}},[a]),o=Yc({callback:u}),h=v.useCallback(g=>{const x=Cb(g);o==null||o.disconnect(),x&&(o==null||o.observe(x)),i(x?a(x):null)},[a,o]),[m,p]=bc(h);return v.useMemo(()=>({nodeRef:m,rect:r,setRef:p}),[r,m,p])}const YN=[{sensor:im,options:{}},{sensor:jb,options:{}}],VN={current:{}},fc={draggable:{measure:zy},droppable:{measure:zy,strategy:Su.WhileDragging,frequency:Oh.Optimized},dragOverlay:{measure:ui}};class pu extends Map{get(a){var r;return a!=null&&(r=super.get(a))!=null?r:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(a=>{let{disabled:r}=a;return!r})}getNodeFor(a){var r,i;return(r=(i=this.get(a))==null?void 0:i.node.current)!=null?r:void 0}}const FN={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new pu,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:Rc},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:fc,measureDroppableContainers:Rc,windowRect:null,measuringScheduled:!1},Ab={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:Rc,draggableNodes:new Map,over:null,measureDroppableContainers:Rc},Lu=v.createContext(Ab),Ob=v.createContext(FN);function GN(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new pu}}}function XN(t,a){switch(a.type){case Ln.DragStart:return{...t,draggable:{...t.draggable,initialCoordinates:a.initialCoordinates,active:a.active}};case Ln.DragMove:return t.draggable.active==null?t:{...t,draggable:{...t.draggable,translate:{x:a.coordinates.x-t.draggable.initialCoordinates.x,y:a.coordinates.y-t.draggable.initialCoordinates.y}}};case Ln.DragEnd:case Ln.DragCancel:return{...t,draggable:{...t.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case Ln.RegisterDroppable:{const{element:r}=a,{id:i}=r,u=new pu(t.droppable.containers);return u.set(i,r),{...t,droppable:{...t.droppable,containers:u}}}case Ln.SetDroppableDisabled:{const{id:r,key:i,disabled:u}=a,o=t.droppable.containers.get(r);if(!o||i!==o.key)return t;const h=new pu(t.droppable.containers);return h.set(r,{...o,disabled:u}),{...t,droppable:{...t.droppable,containers:h}}}case Ln.UnregisterDroppable:{const{id:r,key:i}=a,u=t.droppable.containers.get(r);if(!u||i!==u.key)return t;const o=new pu(t.droppable.containers);return o.delete(r),{...t,droppable:{...t.droppable,containers:o}}}default:return t}}function IN(t){let{disabled:a}=t;const{active:r,activatorEvent:i,draggableNodes:u}=v.useContext(Lu),o=Sc(i),h=Sc(r==null?void 0:r.id);return v.useEffect(()=>{if(!a&&!i&&o&&h!=null){if(!qc(o)||document.activeElement===o.target)return;const m=u.get(h);if(!m)return;const{activatorNode:p,node:g}=m;if(!p.current&&!g.current)return;requestAnimationFrame(()=>{for(const x of[p.current,g.current]){if(!x)continue;const b=BR(x);if(b){b.focus();break}}})}},[i,a,u,h,o]),null}function Mb(t,a){let{transform:r,...i}=a;return t!=null&&t.length?t.reduce((u,o)=>o({transform:u,...i}),r):r}function QN(t){return v.useMemo(()=>({draggable:{...fc.draggable,...t==null?void 0:t.draggable},droppable:{...fc.droppable,...t==null?void 0:t.droppable},dragOverlay:{...fc.dragOverlay,...t==null?void 0:t.dragOverlay}}),[t==null?void 0:t.draggable,t==null?void 0:t.droppable,t==null?void 0:t.dragOverlay])}function PN(t){let{activeNode:a,measure:r,initialRect:i,config:u=!0}=t;const o=v.useRef(!1),{x:h,y:m}=typeof u=="boolean"?{x:u,y:u}:u;al(()=>{if(!h&&!m||!a){o.current=!1;return}if(o.current||!i)return;const g=a==null?void 0:a.node.current;if(!g||g.isConnected===!1)return;const x=r(g),b=vb(x,i);if(h||(b.x=0),m||(b.y=0),o.current=!0,Math.abs(b.x)>0||Math.abs(b.y)>0){const w=xb(g);w&&w.scrollBy({top:b.y,left:b.x})}},[a,h,m,i,r])}const Vc=v.createContext({...ll,scaleX:1,scaleY:1});var Dr;(function(t){t[t.Uninitialized=0]="Uninitialized",t[t.Initializing=1]="Initializing",t[t.Initialized=2]="Initialized"})(Dr||(Dr={}));const KN=v.memo(function(a){var r,i,u,o;let{id:h,accessibility:m,autoScroll:p=!0,children:g,sensors:x=YN,collisionDetection:b=lN,measuring:w,modifiers:S,...R}=a;const C=v.useReducer(XN,void 0,GN),[N,z]=C,[I,q]=GR(),[Q,ee]=v.useState(Dr.Uninitialized),te=Q===Dr.Initialized,{draggable:{active:D,nodes:j,translate:re},droppable:{containers:ue}}=N,xe=D!=null?j.get(D):null,pe=v.useRef({initial:null,translated:null}),Te=v.useMemo(()=>{var Yt;return D!=null?{id:D,data:(Yt=xe==null?void 0:xe.data)!=null?Yt:VN,rect:pe}:null},[D,xe]),Ae=v.useRef(null),[Re,B]=v.useState(null),[V,de]=v.useState(null),fe=bu(R,Object.values(R)),Ne=_u("DndDescribedBy",h),O=v.useMemo(()=>ue.getEnabled(),[ue]),X=QN(w),{droppableRects:se,measureDroppableContainers:ce,measuringScheduled:we}=ON(O,{dragging:te,dependencies:[re.x,re.y],config:X.droppable}),Se=CN(j,D),He=v.useMemo(()=>V?wc(V):null,[V]),it=Qt(),Fe=MN(Se,X.draggable.measure);PN({activeNode:D!=null?j.get(D):null,config:it.layoutShiftCompensation,initialRect:Fe,measure:X.draggable.measure});const et=qy(Se,X.draggable.measure,Fe),en=qy(Se?Se.parentElement:null),qt=v.useRef({activatorEvent:null,active:null,activeNode:Se,collisionRect:null,collisions:null,droppableRects:se,draggableNodes:j,draggingNode:null,draggingNodeRect:null,droppableContainers:ue,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),ut=ue.getNodeFor((r=qt.current.over)==null?void 0:r.id),le=qN({measure:X.dragOverlay.measure}),Le=(i=le.nodeRef.current)!=null?i:Se,at=te?(u=le.rect)!=null?u:et:null,Xt=!!(le.nodeRef.current&&le.rect),Cn=LN(Xt?null:et),pn=Db(Le?oa(Le):null),_t=zN(te?ut??Se:null),Wt=$N(_t),Yn=Mb(S,{transform:{x:re.x-Cn.x,y:re.y-Cn.y,scaleX:1,scaleY:1},activatorEvent:V,active:Te,activeNodeRect:et,containerNodeRect:en,draggingNodeRect:at,over:qt.current.over,overlayNodeRect:le.rect,scrollableAncestors:_t,scrollableAncestorRects:Wt,windowRect:pn}),ye=He?Js(He,re):null,Oe=UN(_t),ze=Vy(Oe),Ge=Vy(Oe,[et]),lt=Js(Yn,ze),At=at?iN(at,Yn):null,Ot=Te&&At?b({active:Te,collisionRect:At,droppableRects:se,droppableContainers:O,pointerCoordinates:ye}):null,tn=tN(Ot,"id"),[It,ca]=v.useState(null),gn=Xt?Yn:Js(Yn,Ge),J=rN(gn,(o=It==null?void 0:It.rect)!=null?o:null,et),St=v.useRef(null),Lt=v.useCallback((Yt,gt)=>{let{sensor:zt,options:Rt}=gt;if(Ae.current==null)return;const nn=j.get(Ae.current);if(!nn)return;const Pt=Yt.nativeEvent,Ut=new zt({active:Ae.current,activeNode:nn,event:Pt,options:Rt,context:qt,onAbort(Ke){if(!j.get(Ke))return;const{onDragAbort:An}=fe.current,A={id:Ke};An==null||An(A),I({type:"onDragAbort",event:A})},onPending(Ke,Sn,An,A){if(!j.get(Ke))return;const{onDragPending:H}=fe.current,K={id:Ke,constraint:Sn,initialCoordinates:An,offset:A};H==null||H(K),I({type:"onDragPending",event:K})},onStart(Ke){const Sn=Ae.current;if(Sn==null)return;const An=j.get(Sn);if(!An)return;const{onDragStart:A}=fe.current,_={activatorEvent:Pt,active:{id:Sn,data:An.data,rect:pe}};Zl.unstable_batchedUpdates(()=>{A==null||A(_),ee(Dr.Initializing),z({type:Ln.DragStart,initialCoordinates:Ke,active:Sn}),I({type:"onDragStart",event:_}),B(St.current),de(Pt)})},onMove(Ke){z({type:Ln.DragMove,coordinates:Ke})},onEnd:dt(Ln.DragEnd),onCancel:dt(Ln.DragCancel)});St.current=Ut;function dt(Ke){return async function(){const{active:An,collisions:A,over:_,scrollAdjustedTranslate:H}=qt.current;let K=null;if(An&&H){const{cancelDrop:ne}=fe.current;K={activatorEvent:Pt,active:An,collisions:A,delta:H,over:_},Ke===Ln.DragEnd&&typeof ne=="function"&&await Promise.resolve(ne(K))&&(Ke=Ln.DragCancel)}Ae.current=null,Zl.unstable_batchedUpdates(()=>{z({type:Ke}),ee(Dr.Uninitialized),ca(null),B(null),de(null),St.current=null;const ne=Ke===Ln.DragEnd?"onDragEnd":"onDragCancel";if(K){const Ee=fe.current[ne];Ee==null||Ee(K),I({type:ne,event:K})}})}}},[j]),er=v.useCallback((Yt,gt)=>(zt,Rt)=>{const nn=zt.nativeEvent,Pt=j.get(Rt);if(Ae.current!==null||!Pt||nn.dndKit||nn.defaultPrevented)return;const Ut={active:Pt};Yt(zt,gt.options,Ut)===!0&&(nn.dndKit={capturedBy:gt.sensor},Ae.current=Rt,Lt(zt,gt))},[j,Lt]),Zn=AN(x,er);HN(x),al(()=>{et&&Q===Dr.Initializing&&ee(Dr.Initialized)},[et,Q]),v.useEffect(()=>{const{onDragMove:Yt}=fe.current,{active:gt,activatorEvent:zt,collisions:Rt,over:nn}=qt.current;if(!gt||!zt)return;const Pt={active:gt,activatorEvent:zt,collisions:Rt,delta:{x:lt.x,y:lt.y},over:nn};Zl.unstable_batchedUpdates(()=>{Yt==null||Yt(Pt),I({type:"onDragMove",event:Pt})})},[lt.x,lt.y]),v.useEffect(()=>{const{active:Yt,activatorEvent:gt,collisions:zt,droppableContainers:Rt,scrollAdjustedTranslate:nn}=qt.current;if(!Yt||Ae.current==null||!gt||!nn)return;const{onDragOver:Pt}=fe.current,Ut=Rt.get(tn),dt=Ut&&Ut.rect.current?{id:Ut.id,rect:Ut.rect.current,data:Ut.data,disabled:Ut.disabled}:null,Ke={active:Yt,activatorEvent:gt,collisions:zt,delta:{x:nn.x,y:nn.y},over:dt};Zl.unstable_batchedUpdates(()=>{ca(dt),Pt==null||Pt(Ke),I({type:"onDragOver",event:Ke})})},[tn]),al(()=>{qt.current={activatorEvent:V,active:Te,activeNode:Se,collisionRect:At,collisions:Ot,droppableRects:se,draggableNodes:j,draggingNode:Le,draggingNodeRect:at,droppableContainers:ue,over:It,scrollableAncestors:_t,scrollAdjustedTranslate:lt},pe.current={initial:at,translated:At}},[Te,Se,Ot,At,j,Le,at,se,ue,It,_t,lt]),TN({...it,delta:re,draggingRect:At,pointerCoordinates:ye,scrollableAncestors:_t,scrollableAncestorRects:Wt});const Nl=v.useMemo(()=>({active:Te,activeNode:Se,activeNodeRect:et,activatorEvent:V,collisions:Ot,containerNodeRect:en,dragOverlay:le,draggableNodes:j,droppableContainers:ue,droppableRects:se,over:It,measureDroppableContainers:ce,scrollableAncestors:_t,scrollableAncestorRects:Wt,measuringConfiguration:X,measuringScheduled:we,windowRect:pn}),[Te,Se,et,V,Ot,en,le,j,ue,se,It,ce,_t,Wt,X,we,pn]),$e=v.useMemo(()=>({activatorEvent:V,activators:Zn,active:Te,activeNodeRect:et,ariaDescribedById:{draggable:Ne},dispatch:z,draggableNodes:j,over:It,measureDroppableContainers:ce}),[V,Zn,Te,et,z,Ne,j,It,ce]);return un.createElement(gb.Provider,{value:q},un.createElement(Lu.Provider,{value:$e},un.createElement(Ob.Provider,{value:Nl},un.createElement(Vc.Provider,{value:J},g)),un.createElement(IN,{disabled:(m==null?void 0:m.restoreFocus)===!1})),un.createElement(QR,{...m,hiddenTextDescribedById:Ne}));function Qt(){const Yt=(Re==null?void 0:Re.autoScrollEnabled)===!1,gt=typeof p=="object"?p.enabled===!1:p===!1,zt=te&&!Yt&&!gt;return typeof p=="object"?{...p,enabled:zt}:{enabled:zt}}}),ZN=v.createContext(null),Gy="button",JN="Draggable";function WN(t){let{id:a,data:r,disabled:i=!1,attributes:u}=t;const o=_u(JN),{activators:h,activatorEvent:m,active:p,activeNodeRect:g,ariaDescribedById:x,draggableNodes:b,over:w}=v.useContext(Lu),{role:S=Gy,roleDescription:R="draggable",tabIndex:C=0}=u??{},N=(p==null?void 0:p.id)===a,z=v.useContext(N?Vc:ZN),[I,q]=bc(),[Q,ee]=bc(),te=BN(h,a),D=bu(r);al(()=>(b.set(a,{id:a,key:o,node:I,activatorNode:Q,data:D}),()=>{const re=b.get(a);re&&re.key===o&&b.delete(a)}),[b,a]);const j=v.useMemo(()=>({role:S,tabIndex:C,"aria-disabled":i,"aria-pressed":N&&S===Gy?!0:void 0,"aria-roledescription":R,"aria-describedby":x.draggable}),[i,S,C,N,R,x.draggable]);return{active:p,activatorEvent:m,activeNodeRect:g,attributes:j,isDragging:N,listeners:i?void 0:te,node:I,over:w,setNodeRef:q,setActivatorNodeRef:ee,transform:z}}function kb(){return v.useContext(Ob)}const e2="Droppable",t2={timeout:25};function n2(t){let{data:a,disabled:r=!1,id:i,resizeObserverConfig:u}=t;const o=_u(e2),{active:h,dispatch:m,over:p,measureDroppableContainers:g}=v.useContext(Lu),x=v.useRef({disabled:r}),b=v.useRef(!1),w=v.useRef(null),S=v.useRef(null),{disabled:R,updateMeasurementsFor:C,timeout:N}={...t2,...u},z=bu(C??i),I=v.useCallback(()=>{if(!b.current){b.current=!0;return}S.current!=null&&clearTimeout(S.current),S.current=setTimeout(()=>{g(Array.isArray(z.current)?z.current:[z.current]),S.current=null},N)},[N]),q=Yc({callback:I,disabled:R||!h}),Q=v.useCallback((j,re)=>{q&&(re&&(q.unobserve(re),b.current=!1),j&&q.observe(j))},[q]),[ee,te]=bc(Q),D=bu(a);return v.useEffect(()=>{!q||!ee.current||(q.disconnect(),b.current=!1,q.observe(ee.current))},[ee,q]),v.useEffect(()=>(m({type:Ln.RegisterDroppable,element:{id:i,key:o,disabled:r,node:ee,rect:w,data:D}}),()=>m({type:Ln.UnregisterDroppable,key:o,id:i})),[i]),v.useEffect(()=>{r!==x.current.disabled&&(m({type:Ln.SetDroppableDisabled,id:i,key:o,disabled:r}),x.current.disabled=r)},[i,o,r,m]),{active:h,rect:w,isOver:(p==null?void 0:p.id)===i,node:ee,over:p,setNodeRef:te}}function a2(t){let{animation:a,children:r}=t;const[i,u]=v.useState(null),[o,h]=v.useState(null),m=Sc(r);return!r&&!i&&m&&u(m),al(()=>{if(!o)return;const p=i==null?void 0:i.key,g=i==null?void 0:i.props.id;if(p==null||g==null){u(null);return}Promise.resolve(a(g,o)).then(()=>{u(null)})},[a,i,o]),un.createElement(un.Fragment,null,r,i?v.cloneElement(i,{ref:h}):null)}const l2={x:0,y:0,scaleX:1,scaleY:1};function r2(t){let{children:a}=t;return un.createElement(Lu.Provider,{value:Ab},un.createElement(Vc.Provider,{value:l2},a))}const s2={position:"fixed",touchAction:"none"},i2=t=>qc(t)?"transform 250ms ease":void 0,u2=v.forwardRef((t,a)=>{let{as:r,activatorEvent:i,adjustScale:u,children:o,className:h,rect:m,style:p,transform:g,transition:x=i2}=t;if(!m)return null;const b=u?g:{...g,scaleX:1,scaleY:1},w={...s2,width:m.width,height:m.height,top:m.top,left:m.left,transform:Or.Transform.toString(b),transformOrigin:u&&i?JR(i,m):void 0,transition:typeof x=="function"?x(i):x,...p};return un.createElement(r,{className:h,style:w,ref:a},o)}),o2=t=>a=>{let{active:r,dragOverlay:i}=a;const u={},{styles:o,className:h}=t;if(o!=null&&o.active)for(const[m,p]of Object.entries(o.active))p!==void 0&&(u[m]=r.node.style.getPropertyValue(m),r.node.style.setProperty(m,p));if(o!=null&&o.dragOverlay)for(const[m,p]of Object.entries(o.dragOverlay))p!==void 0&&i.node.style.setProperty(m,p);return h!=null&&h.active&&r.node.classList.add(h.active),h!=null&&h.dragOverlay&&i.node.classList.add(h.dragOverlay),function(){for(const[p,g]of Object.entries(u))r.node.style.setProperty(p,g);h!=null&&h.active&&r.node.classList.remove(h.active)}},c2=t=>{let{transform:{initial:a,final:r}}=t;return[{transform:Or.Transform.toString(a)},{transform:Or.Transform.toString(r)}]},d2={duration:250,easing:"ease",keyframes:c2,sideEffects:o2({styles:{active:{opacity:"0"}}})};function f2(t){let{config:a,draggableNodes:r,droppableContainers:i,measuringConfiguration:u}=t;return $c((o,h)=>{if(a===null)return;const m=r.get(o);if(!m)return;const p=m.node.current;if(!p)return;const g=Cb(h);if(!g)return;const{transform:x}=oa(h).getComputedStyle(h),b=yb(x);if(!b)return;const w=typeof a=="function"?a:h2(a);return Nb(p,u.draggable.measure),w({active:{id:o,data:m.data,node:p,rect:u.draggable.measure(p)},draggableNodes:r,dragOverlay:{node:h,rect:u.dragOverlay.measure(g)},droppableContainers:i,measuringConfiguration:u,transform:b})})}function h2(t){const{duration:a,easing:r,sideEffects:i,keyframes:u}={...d2,...t};return o=>{let{active:h,dragOverlay:m,transform:p,...g}=o;if(!a)return;const x={x:m.rect.left-h.rect.left,y:m.rect.top-h.rect.top},b={scaleX:p.scaleX!==1?h.rect.width*p.scaleX/m.rect.width:1,scaleY:p.scaleY!==1?h.rect.height*p.scaleY/m.rect.height:1},w={x:p.x-x.x,y:p.y-x.y,...b},S=u({...g,active:h,dragOverlay:m,transform:{initial:p,final:w}}),[R]=S,C=S[S.length-1];if(JSON.stringify(R)===JSON.stringify(C))return;const N=i==null?void 0:i({active:h,dragOverlay:m,...g}),z=m.node.animate(S,{duration:a,easing:r,fill:"forwards"});return new Promise(I=>{z.onfinish=()=>{N==null||N(),I()}})}}let Xy=0;function m2(t){return v.useMemo(()=>{if(t!=null)return Xy++,Xy},[t])}const p2=un.memo(t=>{let{adjustScale:a=!1,children:r,dropAnimation:i,style:u,transition:o,modifiers:h,wrapperElement:m="div",className:p,zIndex:g=999}=t;const{activatorEvent:x,active:b,activeNodeRect:w,containerNodeRect:S,draggableNodes:R,droppableContainers:C,dragOverlay:N,over:z,measuringConfiguration:I,scrollableAncestors:q,scrollableAncestorRects:Q,windowRect:ee}=kb(),te=v.useContext(Vc),D=m2(b==null?void 0:b.id),j=Mb(h,{activatorEvent:x,active:b,activeNodeRect:w,containerNodeRect:S,draggingNodeRect:N.rect,over:z,overlayNodeRect:N.rect,scrollableAncestors:q,scrollableAncestorRects:Q,transform:te,windowRect:ee}),re=um(w),ue=f2({config:i,draggableNodes:R,droppableContainers:C,measuringConfiguration:I}),xe=re?N.setRef:void 0;return un.createElement(r2,null,un.createElement(a2,{animation:ue},b&&D?un.createElement(u2,{key:D,id:b.id,ref:xe,as:m,activatorEvent:x,adjustScale:a,className:p,transition:o,rect:re,style:{zIndex:g,...u},transform:j},r):null))});function gu(t,a,r){const i=t.slice();return i.splice(r<0?i.length+r:r,0,i.splice(a,1)[0]),i}function g2(t,a){return t.reduce((r,i,u)=>{const o=a.get(i);return o&&(r[u]=o),r},Array(t.length))}function ec(t){return t!==null&&t>=0}function v2(t,a){if(t===a)return!0;if(t.length!==a.length)return!1;for(let r=0;r<t.length;r++)if(t[r]!==a[r])return!1;return!0}function y2(t){return typeof t=="boolean"?{draggable:t,droppable:t}:t}const _b=t=>{let{rects:a,activeIndex:r,overIndex:i,index:u}=t;const o=gu(a,i,r),h=a[u],m=o[u];return!m||!h?null:{x:m.left-h.left,y:m.top-h.top,scaleX:m.width/h.width,scaleY:m.height/h.height}},tc={scaleX:1,scaleY:1},om=t=>{var a;let{activeIndex:r,activeNodeRect:i,index:u,rects:o,overIndex:h}=t;const m=(a=o[r])!=null?a:i;if(!m)return null;if(u===r){const g=o[h];return g?{x:0,y:r<h?g.top+g.height-(m.top+m.height):g.top-m.top,...tc}:null}const p=x2(o,u,r);return u>r&&u<=h?{x:0,y:-m.height-p,...tc}:u<r&&u>=h?{x:0,y:m.height+p,...tc}:{x:0,y:0,...tc}};function x2(t,a,r){const i=t[a],u=t[a-1],o=t[a+1];return i?r<a?u?i.top-(u.top+u.height):o?o.top-(i.top+i.height):0:o?o.top-(i.top+i.height):u?i.top-(u.top+u.height):0:0}const Lb="Sortable",zb=un.createContext({activeIndex:-1,containerId:Lb,disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:_b,disabled:{draggable:!1,droppable:!1}});function cm(t){let{children:a,id:r,items:i,strategy:u=_b,disabled:o=!1}=t;const{active:h,dragOverlay:m,droppableRects:p,over:g,measureDroppableContainers:x}=kb(),b=_u(Lb,r),w=m.rect!==null,S=v.useMemo(()=>i.map(te=>typeof te=="object"&&"id"in te?te.id:te),[i]),R=h!=null,C=h?S.indexOf(h.id):-1,N=g?S.indexOf(g.id):-1,z=v.useRef(S),I=!v2(S,z.current),q=N!==-1&&C===-1||I,Q=y2(o);al(()=>{I&&R&&x(S)},[I,S,R,x]),v.useEffect(()=>{z.current=S},[S]);const ee=v.useMemo(()=>({activeIndex:C,containerId:b,disabled:Q,disableTransforms:q,items:S,overIndex:N,useDragOverlay:w,sortedRects:g2(S,p),strategy:u}),[C,b,Q.draggable,Q.droppable,q,S,N,p,w,u]);return un.createElement(zb.Provider,{value:ee},a)}const b2=t=>{let{id:a,items:r,activeIndex:i,overIndex:u}=t;return gu(r,i,u).indexOf(a)},S2=t=>{let{containerId:a,isSorting:r,wasDragging:i,index:u,items:o,newIndex:h,previousItems:m,previousContainerId:p,transition:g}=t;return!g||!i||m!==o&&u===h?!1:r?!0:h!==u&&a===p},E2={duration:200,easing:"ease"},Ub="transform",w2=Or.Transition.toString({property:Ub,duration:0,easing:"linear"}),R2={roleDescription:"sortable"};function N2(t){let{disabled:a,index:r,node:i,rect:u}=t;const[o,h]=v.useState(null),m=v.useRef(r);return al(()=>{if(!a&&r!==m.current&&i.current){const p=u.current;if(p){const g=ui(i.current,{ignoreTransform:!0}),x={x:p.left-g.left,y:p.top-g.top,scaleX:p.width/g.width,scaleY:p.height/g.height};(x.x||x.y)&&h(x)}}r!==m.current&&(m.current=r)},[a,r,i,u]),v.useEffect(()=>{o&&h(null)},[o]),o}function T2(t){let{animateLayoutChanges:a=S2,attributes:r,disabled:i,data:u,getNewIndex:o=b2,id:h,strategy:m,resizeObserverConfig:p,transition:g=E2}=t;const{items:x,containerId:b,activeIndex:w,disabled:S,disableTransforms:R,sortedRects:C,overIndex:N,useDragOverlay:z,strategy:I}=v.useContext(zb),q=j2(i,S),Q=x.indexOf(h),ee=v.useMemo(()=>({sortable:{containerId:b,index:Q,items:x},...u}),[b,u,Q,x]),te=v.useMemo(()=>x.slice(x.indexOf(h)),[x,h]),{rect:D,node:j,isOver:re,setNodeRef:ue}=n2({id:h,data:ee,disabled:q.droppable,resizeObserverConfig:{updateMeasurementsFor:te,...p}}),{active:xe,activatorEvent:pe,activeNodeRect:Te,attributes:Ae,setNodeRef:Re,listeners:B,isDragging:V,over:de,setActivatorNodeRef:fe,transform:Ne}=WN({id:h,data:ee,attributes:{...R2,...r},disabled:q.draggable}),O=LR(ue,Re),X=!!xe,se=X&&!R&&ec(w)&&ec(N),ce=!z&&V,we=ce&&se?Ne:null,He=se?we??(m??I)({rects:C,activeNodeRect:Te,activeIndex:w,overIndex:N,index:Q}):null,it=ec(w)&&ec(N)?o({id:h,items:x,activeIndex:w,overIndex:N}):Q,Fe=xe==null?void 0:xe.id,et=v.useRef({activeId:Fe,items:x,newIndex:it,containerId:b}),en=x!==et.current.items,qt=a({active:xe,containerId:b,isDragging:V,isSorting:X,id:h,index:Q,items:x,newIndex:et.current.newIndex,previousItems:et.current.items,previousContainerId:et.current.containerId,transition:g,wasDragging:et.current.activeId!=null}),ut=N2({disabled:!qt,index:Q,node:j,rect:D});return v.useEffect(()=>{X&&et.current.newIndex!==it&&(et.current.newIndex=it),b!==et.current.containerId&&(et.current.containerId=b),x!==et.current.items&&(et.current.items=x)},[X,it,b,x]),v.useEffect(()=>{if(Fe===et.current.activeId)return;if(Fe!=null&&et.current.activeId==null){et.current.activeId=Fe;return}const Le=setTimeout(()=>{et.current.activeId=Fe},50);return()=>clearTimeout(Le)},[Fe]),{active:xe,activeIndex:w,attributes:Ae,data:ee,rect:D,index:Q,newIndex:it,items:x,isOver:re,isSorting:X,isDragging:V,listeners:B,node:j,overIndex:N,over:de,setNodeRef:O,setActivatorNodeRef:fe,setDroppableNodeRef:ue,setDraggableNodeRef:Re,transform:ut??He,transition:le()};function le(){if(ut||en&&et.current.newIndex===Q)return w2;if(!(ce&&!qc(pe)||!g)&&(X||qt))return Or.Transition.toString({...g,property:Ub})}}function j2(t,a){var r,i;return typeof t=="boolean"?{draggable:t,droppable:!1}:{draggable:(r=t==null?void 0:t.draggable)!=null?r:a.draggable,droppable:(i=t==null?void 0:t.droppable)!=null?i:a.droppable}}Ct.Down,Ct.Right,Ct.Up,Ct.Left;const Fc=[{value:"planned",label:"Planned"},{value:"in-progress",label:"In progress"},{value:"done",label:"Done"},{value:"blocked",label:"Blocked"},{value:"canceled",label:"Canceled"},{value:"rejected",label:"Rejected"},{value:"deferred",label:"Deferred"},{value:"waiting",label:"Waiting"}],Gc=[{value:"draft",label:"Draft"},{value:"discovery",label:"Discovery"},{value:"planned",label:"Planned"},{value:"in-progress",label:"In progress"},{value:"done",label:"Done"},{value:"blocked",label:"Blocked"},{value:"canceled",label:"Canceled"},{value:"rejected",label:"Rejected"},{value:"deferred",label:"Deferred"},{value:"waiting",label:"Waiting"}],zu=[{value:"planned",label:"Planned"},{value:"in-progress",label:"In progress"},{value:"done",label:"Done"},{value:"blocked",label:"Blocked"},{value:"canceled",label:"Canceled"},{value:"rejected",label:"Rejected"},{value:"deferred",label:"Deferred"},{value:"waiting",label:"Waiting"}],ru=Fc.map(t=>t.value),su=Gc.map(t=>t.value),iu=zu.map(t=>t.value);function oh(t,a,r){if(t.includes(a)){const i=t.filter(u=>u!==a);return i.length===0?[...r]:i}return[...t,a]}function ch(t,a){return a.includes(t)}function gl(t,a){return`agent-plan:dashboard:${t}:${a}`}function dh(t,a,r){if(typeof window>"u")return a;try{const i=window.localStorage.getItem(t);if(!i)return a;const u=JSON.parse(i);if(!Array.isArray(u))return a;const o=`${t}-schema`,h=r.slice().sort().join(",");if(window.localStorage.getItem(o)!==h)return window.localStorage.setItem(o,h),a;const p=u.filter(g=>typeof g=="string"&&r.includes(g));return p.length>0?p:a}catch{return a}}function fh(t,a,r){typeof window>"u"||(window.localStorage.setItem(t,JSON.stringify(a)),window.localStorage.setItem(`${t}-schema`,r.slice().sort().join(",")))}function hh(t,a){if(typeof window>"u")return a;const r=window.localStorage.getItem(t);return r===null?a:r==="true"}const Iy={featureNumbers:null,phaseNumbers:null,taskNumbers:null,shortIds:null,status:null,featureStatus:null,phaseStatus:null,text:null},Qy=/^(feature-status|phase-status|feature|phase|task|id|status|title):(.*)$/i;function Hb(t){return t.split(",").map(a=>a.trim()).filter(a=>a.length>0)}function D2(t){return new Set(Hb(t).map(a=>Number(a)).filter(a=>Number.isFinite(a)&&a>0))}function Py(t){const a=t.toUpperCase();return a==="AND"||a==="OR"}function mh(t,a){const r=t??new Set;for(const i of D2(a))r.add(i);return r}function C2(t,a){const r=t??new Set;for(const i of Hb(a).map(u=>u.toUpperCase()))r.add(i);return r}function A2(t){const a=t.trim();if(!a)return{...Iy};const r={...Iy},i=[],u=[];let o=0;for(;o<a.length;){const m=a[o];if(m==='"'){const p=a.indexOf('"',o+1);if(p===-1){u.push(a.slice(o+1));break}u.push(a.slice(o+1,p)),o=p+1}else if(m===" ")o+=1;else{let p=o;for(;p<a.length&&a[p]!==" ";)p+=1;u.push(a.slice(o,p)),o=p}}let h=0;for(;h<u.length;){const m=u[h];if(Py(m)){h+=1;continue}const p=m.match(Qy);if(p){const g=(p[1]??"").toLowerCase();let x=p[2]??"";if(x.trim()===""&&h+1<u.length){let b=h+1;for(;b<u.length&&Py(u[b]);)b+=1;b<u.length&&!u[b].match(Qy)&&(x=u[b],h=b)}if(g==="feature"){const b=mh(r.featureNumbers,x);b.size&&(r.featureNumbers=b)}else if(g==="phase"){const b=mh(r.phaseNumbers,x);b.size&&(r.phaseNumbers=b)}else if(g==="task"){const b=mh(r.taskNumbers,x);b.size&&(r.taskNumbers=b)}else if(g==="id"){const b=C2(r.shortIds,x);b.size&&(r.shortIds=b)}else g==="status"?x.trim()&&(r.status=x.toLowerCase()):g==="feature-status"?x.trim()&&(r.featureStatus=x.toLowerCase()):g==="phase-status"?x.trim()&&(r.phaseStatus=x.toLowerCase()):g==="title"&&x.trim()&&(r.text=x.toLowerCase())}else i.push(m.toLowerCase());h+=1}return i.length>0&&!r.text&&(r.text=i.join(" ")),r}function O2(t){return!!(t.featureNumbers||t.phaseNumbers||t.taskNumbers||t.shortIds||t.status||t.featureStatus||t.phaseStatus||t.text)}function M2(t,a){if(t.featureNumbers&&!t.featureNumbers.has(a.feature.number)||t.phaseNumbers&&!t.phaseNumbers.has(a.phase.number)||t.taskNumbers&&!t.taskNumbers.has(a.task.number)||t.shortIds&&!(t.shortIds.has(a.task.shortId??"")||t.shortIds.has(a.phase.shortId??"")||t.shortIds.has(a.feature.shortId??""))||t.status&&a.task.status!==t.status||t.featureStatus&&a.feature.status!==t.featureStatus||t.phaseStatus&&a.phase.status!==t.phaseStatus)return!1;if(t.text){const r=t.text;if(![a.task.title,a.task.shortId??"",a.phase.title,a.phase.shortId??"",a.feature.name,a.feature.shortId??""].join(" ").toLowerCase().includes(r))return!1}return!0}function k2({features:t,phases:a,projectStorageScope:r}){const i=gl(r,"show-all-features"),u=gl(r,"tree-open-mode"),o=gl(r,"expanded-features"),h=gl(r,"expanded-phases"),m=gl(r,"feature-status-filters"),p=gl(r,"phase-status-filters"),g=gl(r,"task-status-filters"),x=gl(r,"hide-done"),b=gl(r,"hide-planned"),w=gl(r,"only-active-branches"),[S,R]=v.useState(""),C=v.useMemo(()=>kR(t,a),[t,a]),N=v.useMemo(()=>A2(S),[S]),z=O2(N),{matchedTaskIds:I,matchedFeatureIds:q,matchedPhaseIds:Q}=v.useMemo(()=>{const ye=new Set,Oe=new Set,ze=new Set;if(!z)return{matchedTaskIds:ye,matchedFeatureIds:Oe,matchedPhaseIds:ze};for(const Ge of C)for(const lt of Ge.allPhases)for(const At of lt.allTasks)M2(N,{feature:Ge.feature,phase:lt.phase,task:At})&&(ye.add(At.id),Oe.add(Ge.feature.id),ze.add(lt.phase.id));return{matchedTaskIds:ye,matchedFeatureIds:Oe,matchedPhaseIds:ze}},[z,N,C]),[ee,te]=v.useState(()=>{if(typeof window>"u")return!0;const ye=window.localStorage.getItem(i);return ye===null?!0:ye==="true"}),[D,j]=v.useState(()=>{if(typeof window>"u")return"all";const ye=window.localStorage.getItem(u);return ye==="smart"||ye==="none"||ye==="all"?ye:"all"}),[re,ue]=v.useState(()=>{if(typeof window>"u")return[];try{const ye=window.localStorage.getItem(o);return ye?JSON.parse(ye):[]}catch{return[]}}),[xe,pe]=v.useState(()=>{if(typeof window>"u")return[];try{const ye=window.localStorage.getItem(h);return ye?JSON.parse(ye):[]}catch{return[]}}),[Te,Ae]=v.useState(()=>dh(m,ru,ru)),[Re,B]=v.useState(()=>dh(p,su,su)),[V,de]=v.useState(()=>dh(g,iu,iu)),[fe,Ne]=v.useState(()=>hh(x,!1)),[O,X]=v.useState(()=>hh(b,!1)),[se,ce]=v.useState(()=>hh(w,!1)),[we,Se]=v.useState([]),[He,it]=v.useState([]),[Fe,et]=v.useState([]),en=v.useRef({});v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(i,String(ee))},[ee,i]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(u,D)},[D,u]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(o,JSON.stringify(re))},[re,o]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(h,JSON.stringify(xe))},[xe,h]),v.useEffect(()=>{typeof window>"u"||fh(m,Te,ru)},[Te,m]),v.useEffect(()=>{typeof window>"u"||fh(p,Re,su)},[Re,p]),v.useEffect(()=>{typeof window>"u"||fh(g,V,iu)},[V,g]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(x,String(fe))},[fe,x]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(b,String(O))},[O,b]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(w,String(se))},[se,w]),v.useEffect(()=>()=>{Object.values(en.current).forEach(ye=>window.clearTimeout(ye)),en.current={}},[]);const qt=v.useMemo(()=>{let ye=[...Te];return fe&&(ye=ye.filter(Oe=>Oe!=="done")),O&&(ye=ye.filter(Oe=>Oe!=="planned")),ye},[Te,fe,O]),ut=v.useMemo(()=>{let ye=[...Re];return fe&&(ye=ye.filter(Oe=>Oe!=="done")),O&&(ye=ye.filter(Oe=>Oe!=="planned"&&Oe!=="draft")),ye},[Re,fe,O]),le=v.useMemo(()=>{let ye=[...V];return fe&&(ye=ye.filter(Oe=>Oe!=="done")),O&&(ye=ye.filter(Oe=>Oe!=="planned")),ye},[V,fe,O]),Le=v.useMemo(()=>{if(z)return C.map(ze=>({...ze,allPhases:ze.allPhases.map(Ge=>({...Ge,allTasks:Ge.allTasks.filter(lt=>I.has(lt.id))})).filter(Ge=>Ge.allTasks.length>0)})).filter(ze=>ze.allPhases.length>0);const ye=!ee||se;return(ee?C:C.filter(ze=>ze.isActive)).filter(({feature:ze})=>ch(ze.status,qt)).map(ze=>({...ze,allPhases:ze.allPhases.filter(({phase:Ge,hasActiveTask:lt})=>ch(Ge.status,ut)?ye?Ge.status==="in-progress"||Ge.status==="discovery"||lt:!0:!1).map(Ge=>({...Ge,allTasks:Ge.allTasks.filter(lt=>!!ch(lt.status,le))})).filter(Ge=>Ge.allTasks.length>0||ee||!ye)})).filter(({hasActiveTask:ze,allPhases:Ge})=>ye?ze||Ge.some(lt=>lt.hasActiveTask):Ge.length>0||ee)},[z,I,C,qt,ut,le,se,ee]);v.useEffect(()=>{if(D==="none"){ue([]),pe([]);return}if(D==="all"){ue(Le.filter(({feature:ze})=>ze.status!=="done").map(({feature:ze})=>ze.id)),pe(Le.flatMap(({allPhases:ze})=>ze.map(({phase:Ge})=>Ge.id)));return}const ye=new Set(Le.map(({feature:ze})=>ze.id)),Oe=new Set(Le.flatMap(({allPhases:ze})=>ze.map(({phase:Ge})=>Ge.id)));ue(ze=>ze.filter(Ge=>ye.has(Ge))),pe(ze=>ze.filter(Ge=>Oe.has(Ge)))},[Le,D]),v.useEffect(()=>{z&&(j("smart"),ue(Array.from(q)),pe(Array.from(Q)))},[z,q,Q]);const at=ye=>{j("smart"),ue(Oe=>Oe.includes(ye)?Oe.filter(ze=>ze!==ye):[...Oe,ye])},Xt=ye=>{j("smart"),pe(Oe=>Oe.includes(ye)?Oe.filter(ze=>ze!==ye):[...Oe,ye])},Cn=()=>{j("smart"),ue(Le.map(({feature:ye})=>ye.id)),pe(Le.flatMap(({allPhases:ye})=>ye.map(({phase:Oe})=>Oe.id)))};return v.useEffect(()=>{const ye=(ze,Ge)=>{const lt=Ge.filter(At=>!!At);for(const At of lt){const Ot=`${ze}:${At}`,tn=ze==="feature"?Se:ze==="phase"?it:et;tn(It=>It.includes(At)?It:[...It,At]),en.current[Ot]!==void 0&&window.clearTimeout(en.current[Ot]),en.current[Ot]=window.setTimeout(()=>{tn(It=>It.filter(ca=>ca!==At)),delete en.current[Ot]},CR)}},Oe=ze=>{var At,Ot,tn,It,ca,gn;const lt=ze.detail;if(lt!=null&<.type){if(lt.type==="features-updated"){const J=((At=lt.data)==null?void 0:At.featureId)??((Ot=lt.data)==null?void 0:Ot.id);ye("feature",[J]),J&&(j("smart"),ue(St=>St.includes(J)?St:[...St,J]));return}if(lt.type==="phases-updated"){const J=(tn=lt.data)==null?void 0:tn.featureId,St=((It=lt.data)==null?void 0:It.phaseId)??((ca=lt.data)==null?void 0:ca.id);ye("phase",[St]),ye("feature",[J]),ye("task",[(gn=lt.data)==null?void 0:gn.taskId]),j("smart"),J&&ue(Lt=>Lt.includes(J)?Lt:[...Lt,J]),St&&pe(Lt=>Lt.includes(St)?Lt:[...Lt,St])}}};return window.addEventListener("agent-plan:ws-event",Oe),()=>{window.removeEventListener("agent-plan:ws-event",Oe)}},[]),{workTree:C,displayedWorkTree:Le,treeOpenMode:D,setTreeOpenMode:j,expandAll:Cn,expandedFeatureIds:re,expandedPhaseIds:xe,toggleExpandedFeature:at,toggleExpandedPhase:Xt,recentFeatureIds:we,recentPhaseIds:He,recentTaskIds:Fe,showAllFeatures:ee,setShowAllFeatures:te,featureStatusFilters:Te,phaseStatusFilters:Re,taskStatusFilters:V,hideDone:fe,setHideDone:Ne,hidePlanned:O,setHidePlanned:X,onlyActiveBranches:se,setOnlyActiveBranches:ce,resetFilters:()=>{te(!0),Ne(!1),X(!1),Ae(ru),B(su),de(iu),ce(!1),j("all")},toggleFeatureStatusFilter:ye=>Ae(Oe=>oh(Oe,ye,ru)),togglePhaseStatusFilter:ye=>B(Oe=>oh(Oe,ye,su)),toggleTaskStatusFilter:ye=>de(Oe=>oh(Oe,ye,iu)),searchQuery:S,setSearchQuery:R,searchActive:z,matchedTaskIds:I,matchedFeatureIds:q,matchedPhaseIds:Q}}const Bb=v.createContext(null);function dm({id:t,children:a}){const r=T2({id:t}),i={transform:Or.Transform.toString(r.transform),transition:r.transition};return d.jsx(Bb.Provider,{value:r,children:d.jsx("div",{ref:r.setNodeRef,style:i,className:r.isDragging?"ap-sortable--dragging":"",children:a})})}function fm(){const t=v.useContext(Bb);return t?d.jsx("button",{type:"button",className:"drag-handle","aria-label":"Drag to reorder",title:"Drag to reorder",...t.listeners,...t.attributes,children:d.jsx(jw,{className:"h-4 w-4"})}):null}const hm="mt-1 block min-w-0 break-words font-mono text-sm font-semibold leading-snug [overflow-wrap:anywhere]";function _2(){return d.jsx("span",{className:"rounded-full bg-[color:color-mix(in_srgb,var(--accent)_16%,transparent)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.12em] text-[var(--accent)]",children:"Updated"})}function ni({status:t,doneTasks:a,totalTasks:r,recentlyChanged:i,className:u}){const o=a!=null&&r!=null;return d.jsxs("div",{className:u,children:[i?d.jsx(_2,{}):null,o?d.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["(",a,"/",r||0,")"]}):null,d.jsx("span",{className:"shrink-0",children:d.jsx(Oa,{status:t})})]})}function L2({entry:t,expanded:a,recentlyChanged:r,onToggle:i,isPhaseExpanded:u,onTogglePhase:o,isPhaseRecentlyChanged:h,isTaskRecentlyChanged:m,highlightedTaskIds:p}){const{feature:g,totalTasks:x,doneTasks:b,allPhases:w,hasActiveTask:S}=t;return d.jsxs("div",{className:`surface-card min-w-0 px-3 py-3 transition-colors sm:px-4 ${g.status==="in-progress"?"ap-in-progress":S?"border-[color:var(--color-status-in-progress)]/40 bg-[color:color-mix(in_srgb,var(--color-status-in-progress)_7%,transparent)]":""} ${g.status==="done"?"!opacity-70 !bg-[color:color-mix(in_srgb,var(--color-status-done)_10%,transparent)] !border-[color:color-mix(in_srgb,var(--color-status-done)_35%,transparent)]":""} ${r?"ring-1 ring-[color:color-mix(in_srgb,var(--accent)_55%,transparent)] bg-[color:color-mix(in_srgb,var(--accent)_12%,transparent)]":""}`,children:[d.jsxs("div",{className:`flex min-w-0 flex-col gap-1.5 rounded-[12px] px-1 py-1 transition-colors hover:bg-[var(--accent-soft)] sm:flex-row sm:items-start sm:justify-between sm:gap-3 ${r?"bg-[color:color-mix(in_srgb,var(--accent)_10%,transparent)]":""}`,children:[d.jsxs("div",{className:"flex min-w-0 items-start gap-2 sm:flex-1",children:[d.jsx("button",{type:"button",onClick:i,className:"mt-0.5 inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-[var(--text-subtle)] hover:bg-[var(--surface-elevated)] hover:text-[var(--text)]","aria-label":a?`Collapse feature ${g.name}`:`Expand feature ${g.name}`,"aria-expanded":a,children:d.jsx(tb,{className:`h-4 w-4 transition ${a?"rotate-90":"rotate-0"}`})}),d.jsxs("div",{className:"min-w-0 flex-1",children:[d.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[d.jsx(fm,{}),d.jsx(Wl,{id:li({featureNum:g.number}),children:d.jsx(Jl,{featureNum:g.number})}),g.shortId?d.jsx(ri,{shortId:g.shortId}):null,S?d.jsx("span",{"aria-hidden":"true",className:"ap-progress-dot"}):null]}),d.jsx(ni,{status:g.status,doneTasks:b,totalTasks:x,recentlyChanged:r,className:"mt-1 flex flex-wrap items-center gap-2 sm:hidden"}),d.jsx(wt,{to:`/features/${g.id}`,className:`entity-link--feature ${hm} underline-offset-4 hover:underline`,children:g.name})]})]}),d.jsx(ni,{status:g.status,doneTasks:b,totalTasks:x,recentlyChanged:r,className:"hidden shrink-0 items-center gap-2 sm:flex"})]}),a&&w.length>0?d.jsx("div",{className:"mt-2 ml-1.5 grid grid-cols-1 gap-2 border-l border-[var(--border)] pl-3 sm:ml-4 sm:pl-4",children:d.jsx(cm,{items:w.map(R=>R.phase.id),strategy:om,children:w.map(R=>d.jsx(dm,{id:R.phase.id,children:d.jsx(z2,{feature:g,phaseEntry:R,expanded:u(R.phase.id),recentlyChanged:h(R.phase.id),onToggle:()=>o(R.phase.id),isTaskRecentlyChanged:m,highlightedTaskIds:p})},R.phase.id))})}):null]})}function z2({feature:t,phaseEntry:a,expanded:r,recentlyChanged:i,onToggle:u,isTaskRecentlyChanged:o,highlightedTaskIds:h}){const{phase:m,totalTasks:p,doneTasks:g,allTasks:x,hasActiveTask:b}=a;return d.jsxs("div",{className:`work-tree-row grid min-w-0 grid-cols-1 gap-2 rounded-[12px] p-3 transition-colors ${m.status==="in-progress"?"ap-in-progress":b?"border border-[color:color-mix(in_srgb,var(--color-status-in-progress)_35%,transparent)] bg-[color:color-mix(in_srgb,var(--color-status-in-progress)_6%,transparent)]":""} ${m.status==="done"?"opacity-70 bg-[color:color-mix(in_srgb,var(--color-status-done)_6%,transparent)]":""} ${i?"ring-1 ring-[color:color-mix(in_srgb,var(--accent)_55%,transparent)] bg-[color:color-mix(in_srgb,var(--accent)_12%,transparent)]":""}`,children:[d.jsxs("div",{className:`flex min-w-0 flex-col gap-1.5 rounded-[10px] px-1 py-1 transition-colors hover:bg-[var(--accent-soft)] sm:flex-row sm:items-start sm:justify-between sm:gap-3 ${i?"bg-[color:color-mix(in_srgb,var(--accent)_8%,transparent)]":""}`,children:[d.jsxs("div",{className:"flex min-w-0 items-start gap-2 sm:flex-1",children:[d.jsx("button",{type:"button",onClick:u,className:"mt-0.5 inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-[var(--text-subtle)] hover:bg-[var(--surface-elevated)] hover:text-[var(--text)]","aria-label":r?`Collapse phase ${m.title}`:`Expand phase ${m.title}`,"aria-expanded":r,children:d.jsx(tb,{className:`h-4 w-4 transition ${r?"rotate-90":"rotate-0"}`})}),d.jsxs("div",{className:"min-w-0 flex-1",children:[d.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[d.jsx(fm,{}),d.jsx(Wl,{id:li({featureNum:t==null?void 0:t.number,phaseNum:m.number}),children:d.jsx(Jl,{featureNum:t==null?void 0:t.number,phaseNum:m.number})}),m.shortId?d.jsx(ri,{shortId:m.shortId}):null,m.handoff?d.jsx(tm,{updatedAt:m.handoffUpdatedAt}):null,b?d.jsx("span",{"aria-hidden":"true",className:"ap-progress-dot"}):null]}),d.jsx(ni,{status:m.status,doneTasks:g,totalTasks:p,recentlyChanged:i,className:"mt-1 flex flex-wrap items-center gap-2 sm:hidden"}),d.jsx(wt,{to:`/features/${t.id}/phases/${m.id}`,className:`entity-link--phase ${hm} underline-offset-4 hover:underline`,children:m.title})]})]}),d.jsx(ni,{status:m.status,doneTasks:g,totalTasks:p,recentlyChanged:i,className:"hidden shrink-0 items-center gap-2 sm:flex"})]}),r?x.length>0?d.jsx("div",{className:"ml-1.5 grid grid-cols-1 gap-1 border-l border-[var(--border)] pl-3 sm:ml-4 sm:pl-4",children:d.jsx(cm,{items:x.map(w=>w.id),strategy:om,children:x.map(w=>d.jsx(dm,{id:w.id,children:d.jsx(U2,{feature:t,phase:m,task:w,recentlyChanged:o(w.id),highlighted:h==null?void 0:h.has(w.id)})},w.id))})}):d.jsx("p",{className:"ml-1.5 text-xs italic text-[var(--text-subtle)] sm:ml-4",children:"No tasks"}):null]})}function U2({feature:t,phase:a,task:r,recentlyChanged:i,highlighted:u}){return d.jsxs("div",{className:`flex min-w-0 flex-col gap-1.5 rounded-[10px] px-2 py-2 transition-colors hover:bg-[var(--accent-soft)] sm:flex-row sm:items-start sm:justify-between sm:gap-3 ${r.status==="in-progress"?"ap-in-progress":""} ${r.status==="done"?"opacity-60 bg-[color:color-mix(in_srgb,var(--color-status-done)_6%,transparent)] text-[var(--text-muted)]":""} ${i?"ring-1 ring-[color:color-mix(in_srgb,var(--accent)_55%,transparent)] bg-[color:color-mix(in_srgb,var(--accent)_12%,transparent)]":""} ${u?"ap-search-hit":""}`,children:[d.jsxs("div",{className:"min-w-0 flex-1",children:[d.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[d.jsx(fm,{}),d.jsx(Wl,{id:li({featureNum:t==null?void 0:t.number,phaseNum:a.number,taskNum:r.number}),children:d.jsx(Jl,{featureNum:t==null?void 0:t.number,phaseNum:a.number,taskNum:r.number})}),r.shortId?d.jsx(ri,{shortId:r.shortId}):null,r.status==="in-progress"?d.jsx("span",{"aria-hidden":"true",className:"ap-progress-dot"}):null]}),d.jsx(ni,{status:r.status,recentlyChanged:i,className:"mt-1 flex flex-wrap items-center gap-2 sm:hidden"}),d.jsx(wt,{to:`/features/${t.id}/phases/${a.id}/tasks/${r.id}`,className:`entity-link--task ${hm} underline-offset-4 hover:underline`,children:r.title})]}),d.jsx(ni,{status:r.status,recentlyChanged:i,className:"hidden shrink-0 items-center gap-2 sm:flex"})]})}var k=(function(t){return t.FIELD_NAME="FIELD_NAME",t.COLON="COLON",t.VALUE="VALUE",t.QUOTED_VALUE="QUOTED_VALUE",t.AND="AND",t.OR="OR",t.NOT="NOT",t.COMPARISON_OP="COMPARISON_OP",t.LPAREN="LPAREN",t.RPAREN="RPAREN",t.SAVED_SEARCH="SAVED_SEARCH",t.HISTORY_REF="HISTORY_REF",t.PREFIX_OP="PREFIX_OP",t.WILDCARD="WILDCARD",t.REGEX="REGEX",t.RANGE="RANGE",t.TILDE="TILDE",t.BOOST="BOOST",t.WHITESPACE="WHITESPACE",t.UNKNOWN="UNKNOWN",t})({}),ra=(function(t){return t[t.EXPECT_TERM=0]="EXPECT_TERM",t[t.EXPECT_VALUE=1]="EXPECT_VALUE",t})(ra||{}),Ks=class{constructor(t,a){mn(this,"input");mn(this,"pos");mn(this,"state");mn(this,"tokens");mn(this,"options");this.input=t,this.pos=0,this.state=ra.EXPECT_TERM,this.tokens=[],this.options=a||{}}tokenize(){for(this.tokens=[],this.pos=0,this.state=ra.EXPECT_TERM;this.pos<this.input.length;)this.state===ra.EXPECT_VALUE?this.readValue():this.readTerm();return this.tokens}peek(){return this.input[this.pos]}peekAt(t){return this.input[this.pos+t]}advance(){return this.input[this.pos++]}isWhitespace(t){return t===" "||t===" "||t===`
|
|
197
|
+
`},IR={onDragStart(t){let{active:a}=t;return"Picked up draggable item "+a.id+"."},onDragOver(t){let{active:a,over:r}=t;return r?"Draggable item "+a.id+" was moved over droppable area "+r.id+".":"Draggable item "+a.id+" is no longer over a droppable area."},onDragEnd(t){let{active:a,over:r}=t;return r?"Draggable item "+a.id+" was dropped over droppable area "+r.id:"Draggable item "+a.id+" was dropped."},onDragCancel(t){let{active:a}=t;return"Dragging was cancelled. Draggable item "+a.id+" was dropped."}};function QR(t){let{announcements:a=IR,container:r,hiddenTextDescribedById:i,screenReaderInstructions:u=XR}=t;const{announce:o,announcement:h}=VR(),m=_u("DndLiveRegion"),[p,g]=v.useState(!1);if(v.useEffect(()=>{g(!0)},[]),FR(v.useMemo(()=>({onDragStart(b){let{active:w}=b;o(a.onDragStart({active:w}))},onDragMove(b){let{active:w,over:S}=b;a.onDragMove&&o(a.onDragMove({active:w,over:S}))},onDragOver(b){let{active:w,over:S}=b;o(a.onDragOver({active:w,over:S}))},onDragEnd(b){let{active:w,over:S}=b;o(a.onDragEnd({active:w,over:S}))},onDragCancel(b){let{active:w,over:S}=b;o(a.onDragCancel({active:w,over:S}))}}),[o,a])),!p)return null;const x=un.createElement(un.Fragment,null,un.createElement(qR,{id:i,value:u.draggable}),un.createElement(YR,{id:m,announcement:h}));return r?Zl.createPortal(x,r):x}var Ln;(function(t){t.DragStart="dragStart",t.DragMove="dragMove",t.DragEnd="dragEnd",t.DragCancel="dragCancel",t.DragOver="dragOver",t.RegisterDroppable="registerDroppable",t.SetDroppableDisabled="setDroppableDisabled",t.UnregisterDroppable="unregisterDroppable"})(Ln||(Ln={}));function Rc(){}function PR(t,a){return v.useMemo(()=>({sensor:t,options:a??{}}),[t,a])}function KR(){for(var t=arguments.length,a=new Array(t),r=0;r<t;r++)a[r]=arguments[r];return v.useMemo(()=>[...a].filter(i=>i!=null),[...a])}const ll=Object.freeze({x:0,y:0});function ZR(t,a){return Math.sqrt(Math.pow(t.x-a.x,2)+Math.pow(t.y-a.y,2))}function JR(t,a){const r=wc(t);if(!r)return"0 0";const i={x:(r.x-a.left)/a.width*100,y:(r.y-a.top)/a.height*100};return i.x+"% "+i.y+"%"}function WR(t,a){let{data:{value:r}}=t,{data:{value:i}}=a;return r-i}function eN(t,a){let{data:{value:r}}=t,{data:{value:i}}=a;return i-r}function tN(t,a){if(!t||t.length===0)return null;const[r]=t;return r[a]}function Ly(t,a,r){return a===void 0&&(a=t.left),r===void 0&&(r=t.top),{x:a+t.width*.5,y:r+t.height*.5}}const nN=t=>{let{collisionRect:a,droppableRects:r,droppableContainers:i}=t;const u=Ly(a,a.left,a.top),o=[];for(const h of i){const{id:m}=h,p=r.get(m);if(p){const g=ZR(Ly(p),u);o.push({id:m,data:{droppableContainer:h,value:g}})}}return o.sort(WR)};function aN(t,a){const r=Math.max(a.top,t.top),i=Math.max(a.left,t.left),u=Math.min(a.left+a.width,t.left+t.width),o=Math.min(a.top+a.height,t.top+t.height),h=u-i,m=o-r;if(i<u&&r<o){const p=a.width*a.height,g=t.width*t.height,x=h*m,b=x/(p+g-x);return Number(b.toFixed(4))}return 0}const lN=t=>{let{collisionRect:a,droppableRects:r,droppableContainers:i}=t;const u=[];for(const o of i){const{id:h}=o,m=r.get(h);if(m){const p=aN(m,a);p>0&&u.push({id:h,data:{droppableContainer:o,value:p}})}}return u.sort(eN)};function rN(t,a,r){return{...t,scaleX:a&&r?a.width/r.width:1,scaleY:a&&r?a.height/r.height:1}}function vb(t,a){return t&&a?{x:t.left-a.left,y:t.top-a.top}:ll}function sN(t){return function(r){for(var i=arguments.length,u=new Array(i>1?i-1:0),o=1;o<i;o++)u[o-1]=arguments[o];return u.reduce((h,m)=>({...h,top:h.top+t*m.y,bottom:h.bottom+t*m.y,left:h.left+t*m.x,right:h.right+t*m.x}),{...r})}}const iN=sN(1);function yb(t){if(t.startsWith("matrix3d(")){const a=t.slice(9,-1).split(/, /);return{x:+a[12],y:+a[13],scaleX:+a[0],scaleY:+a[5]}}else if(t.startsWith("matrix(")){const a=t.slice(7,-1).split(/, /);return{x:+a[4],y:+a[5],scaleX:+a[0],scaleY:+a[3]}}return null}function uN(t,a,r){const i=yb(a);if(!i)return t;const{scaleX:u,scaleY:o,x:h,y:m}=i,p=t.left-h-(1-u)*parseFloat(r),g=t.top-m-(1-o)*parseFloat(r.slice(r.indexOf(" ")+1)),x=u?t.width/u:t.width,b=o?t.height/o:t.height;return{width:x,height:b,top:g,right:p+x,bottom:g+b,left:p}}const oN={ignoreTransform:!1};function ui(t,a){a===void 0&&(a=oN);let r=t.getBoundingClientRect();if(a.ignoreTransform){const{transform:g,transformOrigin:x}=oa(t).getComputedStyle(t);g&&(r=uN(r,g,x))}const{top:i,left:u,width:o,height:h,bottom:m,right:p}=r;return{top:i,left:u,width:o,height:h,bottom:m,right:p}}function zy(t){return ui(t,{ignoreTransform:!0})}function cN(t){const a=t.innerWidth,r=t.innerHeight;return{top:0,left:0,right:a,bottom:r,width:a,height:r}}function dN(t,a){return a===void 0&&(a=oa(t).getComputedStyle(t)),a.position==="fixed"}function fN(t,a){a===void 0&&(a=oa(t).getComputedStyle(t));const r=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(u=>{const o=a[u];return typeof o=="string"?r.test(o):!1})}function lm(t,a){const r=[];function i(u){if(a!=null&&r.length>=a||!u)return r;if(am(u)&&u.scrollingElement!=null&&!r.includes(u.scrollingElement))return r.push(u.scrollingElement),r;if(!Mu(u)||mb(u)||r.includes(u))return r;const o=oa(t).getComputedStyle(u);return u!==t&&fN(u,o)&&r.push(u),dN(u,o)?r:i(u.parentNode)}return t?i(t):r}function xb(t){const[a]=lm(t,1);return a??null}function sh(t){return!Bc||!t?null:si(t)?t:nm(t)?am(t)||t===ii(t).scrollingElement?window:Mu(t)?t:null:null}function bb(t){return si(t)?t.scrollX:t.scrollLeft}function Sb(t){return si(t)?t.scrollY:t.scrollTop}function Ch(t){return{x:bb(t),y:Sb(t)}}var Hn;(function(t){t[t.Forward=1]="Forward",t[t.Backward=-1]="Backward"})(Hn||(Hn={}));function Eb(t){return!Bc||!t?!1:t===document.scrollingElement}function wb(t){const a={x:0,y:0},r=Eb(t)?{height:window.innerHeight,width:window.innerWidth}:{height:t.clientHeight,width:t.clientWidth},i={x:t.scrollWidth-r.width,y:t.scrollHeight-r.height},u=t.scrollTop<=a.y,o=t.scrollLeft<=a.x,h=t.scrollTop>=i.y,m=t.scrollLeft>=i.x;return{isTop:u,isLeft:o,isBottom:h,isRight:m,maxScroll:i,minScroll:a}}const hN={x:.2,y:.2};function mN(t,a,r,i,u){let{top:o,left:h,right:m,bottom:p}=r;i===void 0&&(i=10),u===void 0&&(u=hN);const{isTop:g,isBottom:x,isLeft:b,isRight:w}=wb(t),S={x:0,y:0},R={x:0,y:0},C={height:a.height*u.y,width:a.width*u.x};return!g&&o<=a.top+C.height?(S.y=Hn.Backward,R.y=i*Math.abs((a.top+C.height-o)/C.height)):!x&&p>=a.bottom-C.height&&(S.y=Hn.Forward,R.y=i*Math.abs((a.bottom-C.height-p)/C.height)),!w&&m>=a.right-C.width?(S.x=Hn.Forward,R.x=i*Math.abs((a.right-C.width-m)/C.width)):!b&&h<=a.left+C.width&&(S.x=Hn.Backward,R.x=i*Math.abs((a.left+C.width-h)/C.width)),{direction:S,speed:R}}function pN(t){if(t===document.scrollingElement){const{innerWidth:o,innerHeight:h}=window;return{top:0,left:0,right:o,bottom:h,width:o,height:h}}const{top:a,left:r,right:i,bottom:u}=t.getBoundingClientRect();return{top:a,left:r,right:i,bottom:u,width:t.clientWidth,height:t.clientHeight}}function Rb(t){return t.reduce((a,r)=>Js(a,Ch(r)),ll)}function gN(t){return t.reduce((a,r)=>a+bb(r),0)}function vN(t){return t.reduce((a,r)=>a+Sb(r),0)}function Nb(t,a){if(a===void 0&&(a=ui),!t)return;const{top:r,left:i,bottom:u,right:o}=a(t);xb(t)&&(u<=0||o<=0||r>=window.innerHeight||i>=window.innerWidth)&&t.scrollIntoView({block:"center",inline:"center"})}const yN=[["x",["left","right"],gN],["y",["top","bottom"],vN]];class rm{constructor(a,r){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const i=lm(r),u=Rb(i);this.rect={...a},this.width=a.width,this.height=a.height;for(const[o,h,m]of yN)for(const p of h)Object.defineProperty(this,p,{get:()=>{const g=m(i),x=u[o]-g;return this.rect[p]+x},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class hu{constructor(a){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(r=>{var i;return(i=this.target)==null?void 0:i.removeEventListener(...r)})},this.target=a}add(a,r,i){var u;(u=this.target)==null||u.addEventListener(a,r,i),this.listeners.push([a,r,i])}}function xN(t){const{EventTarget:a}=oa(t);return t instanceof a?t:ii(t)}function ih(t,a){const r=Math.abs(t.x),i=Math.abs(t.y);return typeof a=="number"?Math.sqrt(r**2+i**2)>a:"x"in a&&"y"in a?r>a.x&&i>a.y:"x"in a?r>a.x:"y"in a?i>a.y:!1}var Xa;(function(t){t.Click="click",t.DragStart="dragstart",t.Keydown="keydown",t.ContextMenu="contextmenu",t.Resize="resize",t.SelectionChange="selectionchange",t.VisibilityChange="visibilitychange"})(Xa||(Xa={}));function Uy(t){t.preventDefault()}function bN(t){t.stopPropagation()}var Ct;(function(t){t.Space="Space",t.Down="ArrowDown",t.Right="ArrowRight",t.Left="ArrowLeft",t.Up="ArrowUp",t.Esc="Escape",t.Enter="Enter",t.Tab="Tab"})(Ct||(Ct={}));const Tb={start:[Ct.Space,Ct.Enter],cancel:[Ct.Esc],end:[Ct.Space,Ct.Enter,Ct.Tab]},SN=(t,a)=>{let{currentCoordinates:r}=a;switch(t.code){case Ct.Right:return{...r,x:r.x+25};case Ct.Left:return{...r,x:r.x-25};case Ct.Down:return{...r,y:r.y+25};case Ct.Up:return{...r,y:r.y-25}}};class jb{constructor(a){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=a;const{event:{target:r}}=a;this.props=a,this.listeners=new hu(ii(r)),this.windowListeners=new hu(oa(r)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(Xa.Resize,this.handleCancel),this.windowListeners.add(Xa.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(Xa.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:a,onStart:r}=this.props,i=a.node.current;i&&Nb(i),r(ll)}handleKeyDown(a){if(qc(a)){const{active:r,context:i,options:u}=this.props,{keyboardCodes:o=Tb,coordinateGetter:h=SN,scrollBehavior:m="smooth"}=u,{code:p}=a;if(o.end.includes(p)){this.handleEnd(a);return}if(o.cancel.includes(p)){this.handleCancel(a);return}const{collisionRect:g}=i.current,x=g?{x:g.left,y:g.top}:ll;this.referenceCoordinates||(this.referenceCoordinates=x);const b=h(a,{active:r,context:i.current,currentCoordinates:x});if(b){const w=Ec(b,x),S={x:0,y:0},{scrollableAncestors:R}=i.current;for(const C of R){const N=a.code,{isTop:z,isRight:I,isLeft:q,isBottom:Q,maxScroll:ee,minScroll:te}=wb(C),D=pN(C),j={x:Math.min(N===Ct.Right?D.right-D.width/2:D.right,Math.max(N===Ct.Right?D.left:D.left+D.width/2,b.x)),y:Math.min(N===Ct.Down?D.bottom-D.height/2:D.bottom,Math.max(N===Ct.Down?D.top:D.top+D.height/2,b.y))},re=N===Ct.Right&&!I||N===Ct.Left&&!q,ue=N===Ct.Down&&!Q||N===Ct.Up&&!z;if(re&&j.x!==b.x){const xe=C.scrollLeft+w.x,pe=N===Ct.Right&&xe<=ee.x||N===Ct.Left&&xe>=te.x;if(pe&&!w.y){C.scrollTo({left:xe,behavior:m});return}pe?S.x=C.scrollLeft-xe:S.x=N===Ct.Right?C.scrollLeft-ee.x:C.scrollLeft-te.x,S.x&&C.scrollBy({left:-S.x,behavior:m});break}else if(ue&&j.y!==b.y){const xe=C.scrollTop+w.y,pe=N===Ct.Down&&xe<=ee.y||N===Ct.Up&&xe>=te.y;if(pe&&!w.x){C.scrollTo({top:xe,behavior:m});return}pe?S.y=C.scrollTop-xe:S.y=N===Ct.Down?C.scrollTop-ee.y:C.scrollTop-te.y,S.y&&C.scrollBy({top:-S.y,behavior:m});break}}this.handleMove(a,Js(Ec(b,this.referenceCoordinates),S))}}}handleMove(a,r){const{onMove:i}=this.props;a.preventDefault(),i(r)}handleEnd(a){const{onEnd:r}=this.props;a.preventDefault(),this.detach(),r()}handleCancel(a){const{onCancel:r}=this.props;a.preventDefault(),this.detach(),r()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}jb.activators=[{eventName:"onKeyDown",handler:(t,a,r)=>{let{keyboardCodes:i=Tb,onActivation:u}=a,{active:o}=r;const{code:h}=t.nativeEvent;if(i.start.includes(h)){const m=o.activatorNode.current;return m&&t.target!==m?!1:(t.preventDefault(),u==null||u({event:t.nativeEvent}),!0)}return!1}}];function Hy(t){return!!(t&&"distance"in t)}function By(t){return!!(t&&"delay"in t)}class sm{constructor(a,r,i){var u;i===void 0&&(i=xN(a.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=a,this.events=r;const{event:o}=a,{target:h}=o;this.props=a,this.events=r,this.document=ii(h),this.documentListeners=new hu(this.document),this.listeners=new hu(i),this.windowListeners=new hu(oa(h)),this.initialCoordinates=(u=wc(o))!=null?u:ll,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:a,props:{options:{activationConstraint:r,bypassActivationConstraint:i}}}=this;if(this.listeners.add(a.move.name,this.handleMove,{passive:!1}),this.listeners.add(a.end.name,this.handleEnd),a.cancel&&this.listeners.add(a.cancel.name,this.handleCancel),this.windowListeners.add(Xa.Resize,this.handleCancel),this.windowListeners.add(Xa.DragStart,Uy),this.windowListeners.add(Xa.VisibilityChange,this.handleCancel),this.windowListeners.add(Xa.ContextMenu,Uy),this.documentListeners.add(Xa.Keydown,this.handleKeydown),r){if(i!=null&&i({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(By(r)){this.timeoutId=setTimeout(this.handleStart,r.delay),this.handlePending(r);return}if(Hy(r)){this.handlePending(r);return}}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handlePending(a,r){const{active:i,onPending:u}=this.props;u(i,a,this.initialCoordinates,r)}handleStart(){const{initialCoordinates:a}=this,{onStart:r}=this.props;a&&(this.activated=!0,this.documentListeners.add(Xa.Click,bN,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(Xa.SelectionChange,this.removeTextSelection),r(a))}handleMove(a){var r;const{activated:i,initialCoordinates:u,props:o}=this,{onMove:h,options:{activationConstraint:m}}=o;if(!u)return;const p=(r=wc(a))!=null?r:ll,g=Ec(u,p);if(!i&&m){if(Hy(m)){if(m.tolerance!=null&&ih(g,m.tolerance))return this.handleCancel();if(ih(g,m.distance))return this.handleStart()}if(By(m)&&ih(g,m.tolerance))return this.handleCancel();this.handlePending(m,g);return}a.cancelable&&a.preventDefault(),h(p)}handleEnd(){const{onAbort:a,onEnd:r}=this.props;this.detach(),this.activated||a(this.props.active),r()}handleCancel(){const{onAbort:a,onCancel:r}=this.props;this.detach(),this.activated||a(this.props.active),r()}handleKeydown(a){a.code===Ct.Esc&&this.handleCancel()}removeTextSelection(){var a;(a=this.document.getSelection())==null||a.removeAllRanges()}}const EN={cancel:{name:"pointercancel"},move:{name:"pointermove"},end:{name:"pointerup"}};class im extends sm{constructor(a){const{event:r}=a,i=ii(r.target);super(a,EN,i)}}im.activators=[{eventName:"onPointerDown",handler:(t,a)=>{let{nativeEvent:r}=t,{onActivation:i}=a;return!r.isPrimary||r.button!==0?!1:(i==null||i({event:r}),!0)}}];const wN={move:{name:"mousemove"},end:{name:"mouseup"}};var Ah;(function(t){t[t.RightClick=2]="RightClick"})(Ah||(Ah={}));class RN extends sm{constructor(a){super(a,wN,ii(a.event.target))}}RN.activators=[{eventName:"onMouseDown",handler:(t,a)=>{let{nativeEvent:r}=t,{onActivation:i}=a;return r.button===Ah.RightClick?!1:(i==null||i({event:r}),!0)}}];const uh={cancel:{name:"touchcancel"},move:{name:"touchmove"},end:{name:"touchend"}};class NN extends sm{constructor(a){super(a,uh)}static setup(){return window.addEventListener(uh.move.name,a,{capture:!1,passive:!1}),function(){window.removeEventListener(uh.move.name,a)};function a(){}}}NN.activators=[{eventName:"onTouchStart",handler:(t,a)=>{let{nativeEvent:r}=t,{onActivation:i}=a;const{touches:u}=r;return u.length>1?!1:(i==null||i({event:r}),!0)}}];var mu;(function(t){t[t.Pointer=0]="Pointer",t[t.DraggableRect=1]="DraggableRect"})(mu||(mu={}));var Nc;(function(t){t[t.TreeOrder=0]="TreeOrder",t[t.ReversedTreeOrder=1]="ReversedTreeOrder"})(Nc||(Nc={}));function TN(t){let{acceleration:a,activator:r=mu.Pointer,canScroll:i,draggingRect:u,enabled:o,interval:h=5,order:m=Nc.TreeOrder,pointerCoordinates:p,scrollableAncestors:g,scrollableAncestorRects:x,delta:b,threshold:w}=t;const S=DN({delta:b,disabled:!o}),[R,C]=zR(),N=v.useRef({x:0,y:0}),z=v.useRef({x:0,y:0}),I=v.useMemo(()=>{switch(r){case mu.Pointer:return p?{top:p.y,bottom:p.y,left:p.x,right:p.x}:null;case mu.DraggableRect:return u}},[r,u,p]),q=v.useRef(null),Q=v.useCallback(()=>{const te=q.current;if(!te)return;const D=N.current.x*z.current.x,j=N.current.y*z.current.y;te.scrollBy(D,j)},[]),ee=v.useMemo(()=>m===Nc.TreeOrder?[...g].reverse():g,[m,g]);v.useEffect(()=>{if(!o||!g.length||!I){C();return}for(const te of ee){if((i==null?void 0:i(te))===!1)continue;const D=g.indexOf(te),j=x[D];if(!j)continue;const{direction:re,speed:ue}=mN(te,j,I,a,w);for(const xe of["x","y"])S[xe][re[xe]]||(ue[xe]=0,re[xe]=0);if(ue.x>0||ue.y>0){C(),q.current=te,R(Q,h),N.current=ue,z.current=re;return}}N.current={x:0,y:0},z.current={x:0,y:0},C()},[a,Q,i,C,o,h,JSON.stringify(I),JSON.stringify(S),R,g,ee,x,JSON.stringify(w)])}const jN={x:{[Hn.Backward]:!1,[Hn.Forward]:!1},y:{[Hn.Backward]:!1,[Hn.Forward]:!1}};function DN(t){let{delta:a,disabled:r}=t;const i=Sc(a);return ku(u=>{if(r||!i||!u)return jN;const o={x:Math.sign(a.x-i.x),y:Math.sign(a.y-i.y)};return{x:{[Hn.Backward]:u.x[Hn.Backward]||o.x===-1,[Hn.Forward]:u.x[Hn.Forward]||o.x===1},y:{[Hn.Backward]:u.y[Hn.Backward]||o.y===-1,[Hn.Forward]:u.y[Hn.Forward]||o.y===1}}},[r,a,i])}function CN(t,a){const r=a!=null?t.get(a):void 0,i=r?r.node.current:null;return ku(u=>{var o;return a==null?null:(o=i??u)!=null?o:null},[i,a])}function AN(t,a){return v.useMemo(()=>t.reduce((r,i)=>{const{sensor:u}=i,o=u.activators.map(h=>({eventName:h.eventName,handler:a(h.handler,i)}));return[...r,...o]},[]),[t,a])}var Su;(function(t){t[t.Always=0]="Always",t[t.BeforeDragging=1]="BeforeDragging",t[t.WhileDragging=2]="WhileDragging"})(Su||(Su={}));var Oh;(function(t){t.Optimized="optimized"})(Oh||(Oh={}));const $y=new Map;function ON(t,a){let{dragging:r,dependencies:i,config:u}=a;const[o,h]=v.useState(null),{frequency:m,measure:p,strategy:g}=u,x=v.useRef(t),b=N(),w=bu(b),S=v.useCallback(function(z){z===void 0&&(z=[]),!w.current&&h(I=>I===null?z:I.concat(z.filter(q=>!I.includes(q))))},[w]),R=v.useRef(null),C=ku(z=>{if(b&&!r)return $y;if(!z||z===$y||x.current!==t||o!=null){const I=new Map;for(let q of t){if(!q)continue;if(o&&o.length>0&&!o.includes(q.id)&&q.rect.current){I.set(q.id,q.rect.current);continue}const Q=q.node.current,ee=Q?new rm(p(Q),Q):null;q.rect.current=ee,ee&&I.set(q.id,ee)}return I}return z},[t,o,r,b,p]);return v.useEffect(()=>{x.current=t},[t]),v.useEffect(()=>{b||S()},[r,b]),v.useEffect(()=>{o&&o.length>0&&h(null)},[JSON.stringify(o)]),v.useEffect(()=>{b||typeof m!="number"||R.current!==null||(R.current=setTimeout(()=>{S(),R.current=null},m))},[m,b,S,...i]),{droppableRects:C,measureDroppableContainers:S,measuringScheduled:o!=null};function N(){switch(g){case Su.Always:return!1;case Su.BeforeDragging:return r;default:return!r}}}function um(t,a){return ku(r=>t?r||(typeof a=="function"?a(t):t):null,[a,t])}function MN(t,a){return um(t,a)}function kN(t){let{callback:a,disabled:r}=t;const i=$c(a),u=v.useMemo(()=>{if(r||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:o}=window;return new o(i)},[i,r]);return v.useEffect(()=>()=>u==null?void 0:u.disconnect(),[u]),u}function Yc(t){let{callback:a,disabled:r}=t;const i=$c(a),u=v.useMemo(()=>{if(r||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:o}=window;return new o(i)},[r]);return v.useEffect(()=>()=>u==null?void 0:u.disconnect(),[u]),u}function _N(t){return new rm(ui(t),t)}function qy(t,a,r){a===void 0&&(a=_N);const[i,u]=v.useState(null);function o(){u(p=>{if(!t)return null;if(t.isConnected===!1){var g;return(g=p??r)!=null?g:null}const x=a(t);return JSON.stringify(p)===JSON.stringify(x)?p:x})}const h=kN({callback(p){if(t)for(const g of p){const{type:x,target:b}=g;if(x==="childList"&&b instanceof HTMLElement&&b.contains(t)){o();break}}}}),m=Yc({callback:o});return al(()=>{o(),t?(m==null||m.observe(t),h==null||h.observe(document.body,{childList:!0,subtree:!0})):(m==null||m.disconnect(),h==null||h.disconnect())},[t]),i}function LN(t){const a=um(t);return vb(t,a)}const Yy=[];function zN(t){const a=v.useRef(t),r=ku(i=>t?i&&i!==Yy&&t&&a.current&&t.parentNode===a.current.parentNode?i:lm(t):Yy,[t]);return v.useEffect(()=>{a.current=t},[t]),r}function UN(t){const[a,r]=v.useState(null),i=v.useRef(t),u=v.useCallback(o=>{const h=sh(o.target);h&&r(m=>m?(m.set(h,Ch(h)),new Map(m)):null)},[]);return v.useEffect(()=>{const o=i.current;if(t!==o){h(o);const m=t.map(p=>{const g=sh(p);return g?(g.addEventListener("scroll",u,{passive:!0}),[g,Ch(g)]):null}).filter(p=>p!=null);r(m.length?new Map(m):null),i.current=t}return()=>{h(t),h(o)};function h(m){m.forEach(p=>{const g=sh(p);g==null||g.removeEventListener("scroll",u)})}},[u,t]),v.useMemo(()=>t.length?a?Array.from(a.values()).reduce((o,h)=>Js(o,h),ll):Rb(t):ll,[t,a])}function Vy(t,a){a===void 0&&(a=[]);const r=v.useRef(null);return v.useEffect(()=>{r.current=null},a),v.useEffect(()=>{const i=t!==ll;i&&!r.current&&(r.current=t),!i&&r.current&&(r.current=null)},[t]),r.current?Ec(t,r.current):ll}function HN(t){v.useEffect(()=>{if(!Bc)return;const a=t.map(r=>{let{sensor:i}=r;return i.setup==null?void 0:i.setup()});return()=>{for(const r of a)r==null||r()}},t.map(a=>{let{sensor:r}=a;return r}))}function BN(t,a){return v.useMemo(()=>t.reduce((r,i)=>{let{eventName:u,handler:o}=i;return r[u]=h=>{o(h,a)},r},{}),[t,a])}function Db(t){return v.useMemo(()=>t?cN(t):null,[t])}const Fy=[];function $N(t,a){a===void 0&&(a=ui);const[r]=t,i=Db(r?oa(r):null),[u,o]=v.useState(Fy);function h(){o(()=>t.length?t.map(p=>Eb(p)?i:new rm(a(p),p)):Fy)}const m=Yc({callback:h});return al(()=>{m==null||m.disconnect(),h(),t.forEach(p=>m==null?void 0:m.observe(p))},[t]),u}function Cb(t){if(!t)return null;if(t.children.length>1)return t;const a=t.children[0];return Mu(a)?a:t}function qN(t){let{measure:a}=t;const[r,i]=v.useState(null),u=v.useCallback(g=>{for(const{target:x}of g)if(Mu(x)){i(b=>{const w=a(x);return b?{...b,width:w.width,height:w.height}:w});break}},[a]),o=Yc({callback:u}),h=v.useCallback(g=>{const x=Cb(g);o==null||o.disconnect(),x&&(o==null||o.observe(x)),i(x?a(x):null)},[a,o]),[m,p]=bc(h);return v.useMemo(()=>({nodeRef:m,rect:r,setRef:p}),[r,m,p])}const YN=[{sensor:im,options:{}},{sensor:jb,options:{}}],VN={current:{}},fc={draggable:{measure:zy},droppable:{measure:zy,strategy:Su.WhileDragging,frequency:Oh.Optimized},dragOverlay:{measure:ui}};class pu extends Map{get(a){var r;return a!=null&&(r=super.get(a))!=null?r:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(a=>{let{disabled:r}=a;return!r})}getNodeFor(a){var r,i;return(r=(i=this.get(a))==null?void 0:i.node.current)!=null?r:void 0}}const FN={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new pu,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:Rc},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:fc,measureDroppableContainers:Rc,windowRect:null,measuringScheduled:!1},Ab={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:Rc,draggableNodes:new Map,over:null,measureDroppableContainers:Rc},Lu=v.createContext(Ab),Ob=v.createContext(FN);function GN(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new pu}}}function XN(t,a){switch(a.type){case Ln.DragStart:return{...t,draggable:{...t.draggable,initialCoordinates:a.initialCoordinates,active:a.active}};case Ln.DragMove:return t.draggable.active==null?t:{...t,draggable:{...t.draggable,translate:{x:a.coordinates.x-t.draggable.initialCoordinates.x,y:a.coordinates.y-t.draggable.initialCoordinates.y}}};case Ln.DragEnd:case Ln.DragCancel:return{...t,draggable:{...t.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case Ln.RegisterDroppable:{const{element:r}=a,{id:i}=r,u=new pu(t.droppable.containers);return u.set(i,r),{...t,droppable:{...t.droppable,containers:u}}}case Ln.SetDroppableDisabled:{const{id:r,key:i,disabled:u}=a,o=t.droppable.containers.get(r);if(!o||i!==o.key)return t;const h=new pu(t.droppable.containers);return h.set(r,{...o,disabled:u}),{...t,droppable:{...t.droppable,containers:h}}}case Ln.UnregisterDroppable:{const{id:r,key:i}=a,u=t.droppable.containers.get(r);if(!u||i!==u.key)return t;const o=new pu(t.droppable.containers);return o.delete(r),{...t,droppable:{...t.droppable,containers:o}}}default:return t}}function IN(t){let{disabled:a}=t;const{active:r,activatorEvent:i,draggableNodes:u}=v.useContext(Lu),o=Sc(i),h=Sc(r==null?void 0:r.id);return v.useEffect(()=>{if(!a&&!i&&o&&h!=null){if(!qc(o)||document.activeElement===o.target)return;const m=u.get(h);if(!m)return;const{activatorNode:p,node:g}=m;if(!p.current&&!g.current)return;requestAnimationFrame(()=>{for(const x of[p.current,g.current]){if(!x)continue;const b=BR(x);if(b){b.focus();break}}})}},[i,a,u,h,o]),null}function Mb(t,a){let{transform:r,...i}=a;return t!=null&&t.length?t.reduce((u,o)=>o({transform:u,...i}),r):r}function QN(t){return v.useMemo(()=>({draggable:{...fc.draggable,...t==null?void 0:t.draggable},droppable:{...fc.droppable,...t==null?void 0:t.droppable},dragOverlay:{...fc.dragOverlay,...t==null?void 0:t.dragOverlay}}),[t==null?void 0:t.draggable,t==null?void 0:t.droppable,t==null?void 0:t.dragOverlay])}function PN(t){let{activeNode:a,measure:r,initialRect:i,config:u=!0}=t;const o=v.useRef(!1),{x:h,y:m}=typeof u=="boolean"?{x:u,y:u}:u;al(()=>{if(!h&&!m||!a){o.current=!1;return}if(o.current||!i)return;const g=a==null?void 0:a.node.current;if(!g||g.isConnected===!1)return;const x=r(g),b=vb(x,i);if(h||(b.x=0),m||(b.y=0),o.current=!0,Math.abs(b.x)>0||Math.abs(b.y)>0){const w=xb(g);w&&w.scrollBy({top:b.y,left:b.x})}},[a,h,m,i,r])}const Vc=v.createContext({...ll,scaleX:1,scaleY:1});var Dr;(function(t){t[t.Uninitialized=0]="Uninitialized",t[t.Initializing=1]="Initializing",t[t.Initialized=2]="Initialized"})(Dr||(Dr={}));const KN=v.memo(function(a){var r,i,u,o;let{id:h,accessibility:m,autoScroll:p=!0,children:g,sensors:x=YN,collisionDetection:b=lN,measuring:w,modifiers:S,...R}=a;const C=v.useReducer(XN,void 0,GN),[N,z]=C,[I,q]=GR(),[Q,ee]=v.useState(Dr.Uninitialized),te=Q===Dr.Initialized,{draggable:{active:D,nodes:j,translate:re},droppable:{containers:ue}}=N,xe=D!=null?j.get(D):null,pe=v.useRef({initial:null,translated:null}),Te=v.useMemo(()=>{var Yt;return D!=null?{id:D,data:(Yt=xe==null?void 0:xe.data)!=null?Yt:VN,rect:pe}:null},[D,xe]),Ae=v.useRef(null),[Re,B]=v.useState(null),[V,de]=v.useState(null),fe=bu(R,Object.values(R)),Ne=_u("DndDescribedBy",h),O=v.useMemo(()=>ue.getEnabled(),[ue]),X=QN(w),{droppableRects:se,measureDroppableContainers:ce,measuringScheduled:we}=ON(O,{dragging:te,dependencies:[re.x,re.y],config:X.droppable}),Se=CN(j,D),He=v.useMemo(()=>V?wc(V):null,[V]),it=Qt(),Fe=MN(Se,X.draggable.measure);PN({activeNode:D!=null?j.get(D):null,config:it.layoutShiftCompensation,initialRect:Fe,measure:X.draggable.measure});const et=qy(Se,X.draggable.measure,Fe),en=qy(Se?Se.parentElement:null),qt=v.useRef({activatorEvent:null,active:null,activeNode:Se,collisionRect:null,collisions:null,droppableRects:se,draggableNodes:j,draggingNode:null,draggingNodeRect:null,droppableContainers:ue,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),ut=ue.getNodeFor((r=qt.current.over)==null?void 0:r.id),le=qN({measure:X.dragOverlay.measure}),Le=(i=le.nodeRef.current)!=null?i:Se,at=te?(u=le.rect)!=null?u:et:null,Xt=!!(le.nodeRef.current&&le.rect),Cn=LN(Xt?null:et),pn=Db(Le?oa(Le):null),_t=zN(te?ut??Se:null),Wt=$N(_t),Yn=Mb(S,{transform:{x:re.x-Cn.x,y:re.y-Cn.y,scaleX:1,scaleY:1},activatorEvent:V,active:Te,activeNodeRect:et,containerNodeRect:en,draggingNodeRect:at,over:qt.current.over,overlayNodeRect:le.rect,scrollableAncestors:_t,scrollableAncestorRects:Wt,windowRect:pn}),ye=He?Js(He,re):null,Oe=UN(_t),ze=Vy(Oe),Ge=Vy(Oe,[et]),lt=Js(Yn,ze),At=at?iN(at,Yn):null,Ot=Te&&At?b({active:Te,collisionRect:At,droppableRects:se,droppableContainers:O,pointerCoordinates:ye}):null,tn=tN(Ot,"id"),[It,ca]=v.useState(null),gn=Xt?Yn:Js(Yn,Ge),J=rN(gn,(o=It==null?void 0:It.rect)!=null?o:null,et),St=v.useRef(null),Lt=v.useCallback((Yt,gt)=>{let{sensor:zt,options:Rt}=gt;if(Ae.current==null)return;const nn=j.get(Ae.current);if(!nn)return;const Pt=Yt.nativeEvent,Ut=new zt({active:Ae.current,activeNode:nn,event:Pt,options:Rt,context:qt,onAbort(Ke){if(!j.get(Ke))return;const{onDragAbort:An}=fe.current,A={id:Ke};An==null||An(A),I({type:"onDragAbort",event:A})},onPending(Ke,Sn,An,A){if(!j.get(Ke))return;const{onDragPending:H}=fe.current,K={id:Ke,constraint:Sn,initialCoordinates:An,offset:A};H==null||H(K),I({type:"onDragPending",event:K})},onStart(Ke){const Sn=Ae.current;if(Sn==null)return;const An=j.get(Sn);if(!An)return;const{onDragStart:A}=fe.current,_={activatorEvent:Pt,active:{id:Sn,data:An.data,rect:pe}};Zl.unstable_batchedUpdates(()=>{A==null||A(_),ee(Dr.Initializing),z({type:Ln.DragStart,initialCoordinates:Ke,active:Sn}),I({type:"onDragStart",event:_}),B(St.current),de(Pt)})},onMove(Ke){z({type:Ln.DragMove,coordinates:Ke})},onEnd:dt(Ln.DragEnd),onCancel:dt(Ln.DragCancel)});St.current=Ut;function dt(Ke){return async function(){const{active:An,collisions:A,over:_,scrollAdjustedTranslate:H}=qt.current;let K=null;if(An&&H){const{cancelDrop:ne}=fe.current;K={activatorEvent:Pt,active:An,collisions:A,delta:H,over:_},Ke===Ln.DragEnd&&typeof ne=="function"&&await Promise.resolve(ne(K))&&(Ke=Ln.DragCancel)}Ae.current=null,Zl.unstable_batchedUpdates(()=>{z({type:Ke}),ee(Dr.Uninitialized),ca(null),B(null),de(null),St.current=null;const ne=Ke===Ln.DragEnd?"onDragEnd":"onDragCancel";if(K){const Ee=fe.current[ne];Ee==null||Ee(K),I({type:ne,event:K})}})}}},[j]),er=v.useCallback((Yt,gt)=>(zt,Rt)=>{const nn=zt.nativeEvent,Pt=j.get(Rt);if(Ae.current!==null||!Pt||nn.dndKit||nn.defaultPrevented)return;const Ut={active:Pt};Yt(zt,gt.options,Ut)===!0&&(nn.dndKit={capturedBy:gt.sensor},Ae.current=Rt,Lt(zt,gt))},[j,Lt]),Zn=AN(x,er);HN(x),al(()=>{et&&Q===Dr.Initializing&&ee(Dr.Initialized)},[et,Q]),v.useEffect(()=>{const{onDragMove:Yt}=fe.current,{active:gt,activatorEvent:zt,collisions:Rt,over:nn}=qt.current;if(!gt||!zt)return;const Pt={active:gt,activatorEvent:zt,collisions:Rt,delta:{x:lt.x,y:lt.y},over:nn};Zl.unstable_batchedUpdates(()=>{Yt==null||Yt(Pt),I({type:"onDragMove",event:Pt})})},[lt.x,lt.y]),v.useEffect(()=>{const{active:Yt,activatorEvent:gt,collisions:zt,droppableContainers:Rt,scrollAdjustedTranslate:nn}=qt.current;if(!Yt||Ae.current==null||!gt||!nn)return;const{onDragOver:Pt}=fe.current,Ut=Rt.get(tn),dt=Ut&&Ut.rect.current?{id:Ut.id,rect:Ut.rect.current,data:Ut.data,disabled:Ut.disabled}:null,Ke={active:Yt,activatorEvent:gt,collisions:zt,delta:{x:nn.x,y:nn.y},over:dt};Zl.unstable_batchedUpdates(()=>{ca(dt),Pt==null||Pt(Ke),I({type:"onDragOver",event:Ke})})},[tn]),al(()=>{qt.current={activatorEvent:V,active:Te,activeNode:Se,collisionRect:At,collisions:Ot,droppableRects:se,draggableNodes:j,draggingNode:Le,draggingNodeRect:at,droppableContainers:ue,over:It,scrollableAncestors:_t,scrollAdjustedTranslate:lt},pe.current={initial:at,translated:At}},[Te,Se,Ot,At,j,Le,at,se,ue,It,_t,lt]),TN({...it,delta:re,draggingRect:At,pointerCoordinates:ye,scrollableAncestors:_t,scrollableAncestorRects:Wt});const Nl=v.useMemo(()=>({active:Te,activeNode:Se,activeNodeRect:et,activatorEvent:V,collisions:Ot,containerNodeRect:en,dragOverlay:le,draggableNodes:j,droppableContainers:ue,droppableRects:se,over:It,measureDroppableContainers:ce,scrollableAncestors:_t,scrollableAncestorRects:Wt,measuringConfiguration:X,measuringScheduled:we,windowRect:pn}),[Te,Se,et,V,Ot,en,le,j,ue,se,It,ce,_t,Wt,X,we,pn]),$e=v.useMemo(()=>({activatorEvent:V,activators:Zn,active:Te,activeNodeRect:et,ariaDescribedById:{draggable:Ne},dispatch:z,draggableNodes:j,over:It,measureDroppableContainers:ce}),[V,Zn,Te,et,z,Ne,j,It,ce]);return un.createElement(gb.Provider,{value:q},un.createElement(Lu.Provider,{value:$e},un.createElement(Ob.Provider,{value:Nl},un.createElement(Vc.Provider,{value:J},g)),un.createElement(IN,{disabled:(m==null?void 0:m.restoreFocus)===!1})),un.createElement(QR,{...m,hiddenTextDescribedById:Ne}));function Qt(){const Yt=(Re==null?void 0:Re.autoScrollEnabled)===!1,gt=typeof p=="object"?p.enabled===!1:p===!1,zt=te&&!Yt&&!gt;return typeof p=="object"?{...p,enabled:zt}:{enabled:zt}}}),ZN=v.createContext(null),Gy="button",JN="Draggable";function WN(t){let{id:a,data:r,disabled:i=!1,attributes:u}=t;const o=_u(JN),{activators:h,activatorEvent:m,active:p,activeNodeRect:g,ariaDescribedById:x,draggableNodes:b,over:w}=v.useContext(Lu),{role:S=Gy,roleDescription:R="draggable",tabIndex:C=0}=u??{},N=(p==null?void 0:p.id)===a,z=v.useContext(N?Vc:ZN),[I,q]=bc(),[Q,ee]=bc(),te=BN(h,a),D=bu(r);al(()=>(b.set(a,{id:a,key:o,node:I,activatorNode:Q,data:D}),()=>{const re=b.get(a);re&&re.key===o&&b.delete(a)}),[b,a]);const j=v.useMemo(()=>({role:S,tabIndex:C,"aria-disabled":i,"aria-pressed":N&&S===Gy?!0:void 0,"aria-roledescription":R,"aria-describedby":x.draggable}),[i,S,C,N,R,x.draggable]);return{active:p,activatorEvent:m,activeNodeRect:g,attributes:j,isDragging:N,listeners:i?void 0:te,node:I,over:w,setNodeRef:q,setActivatorNodeRef:ee,transform:z}}function kb(){return v.useContext(Ob)}const e2="Droppable",t2={timeout:25};function n2(t){let{data:a,disabled:r=!1,id:i,resizeObserverConfig:u}=t;const o=_u(e2),{active:h,dispatch:m,over:p,measureDroppableContainers:g}=v.useContext(Lu),x=v.useRef({disabled:r}),b=v.useRef(!1),w=v.useRef(null),S=v.useRef(null),{disabled:R,updateMeasurementsFor:C,timeout:N}={...t2,...u},z=bu(C??i),I=v.useCallback(()=>{if(!b.current){b.current=!0;return}S.current!=null&&clearTimeout(S.current),S.current=setTimeout(()=>{g(Array.isArray(z.current)?z.current:[z.current]),S.current=null},N)},[N]),q=Yc({callback:I,disabled:R||!h}),Q=v.useCallback((j,re)=>{q&&(re&&(q.unobserve(re),b.current=!1),j&&q.observe(j))},[q]),[ee,te]=bc(Q),D=bu(a);return v.useEffect(()=>{!q||!ee.current||(q.disconnect(),b.current=!1,q.observe(ee.current))},[ee,q]),v.useEffect(()=>(m({type:Ln.RegisterDroppable,element:{id:i,key:o,disabled:r,node:ee,rect:w,data:D}}),()=>m({type:Ln.UnregisterDroppable,key:o,id:i})),[i]),v.useEffect(()=>{r!==x.current.disabled&&(m({type:Ln.SetDroppableDisabled,id:i,key:o,disabled:r}),x.current.disabled=r)},[i,o,r,m]),{active:h,rect:w,isOver:(p==null?void 0:p.id)===i,node:ee,over:p,setNodeRef:te}}function a2(t){let{animation:a,children:r}=t;const[i,u]=v.useState(null),[o,h]=v.useState(null),m=Sc(r);return!r&&!i&&m&&u(m),al(()=>{if(!o)return;const p=i==null?void 0:i.key,g=i==null?void 0:i.props.id;if(p==null||g==null){u(null);return}Promise.resolve(a(g,o)).then(()=>{u(null)})},[a,i,o]),un.createElement(un.Fragment,null,r,i?v.cloneElement(i,{ref:h}):null)}const l2={x:0,y:0,scaleX:1,scaleY:1};function r2(t){let{children:a}=t;return un.createElement(Lu.Provider,{value:Ab},un.createElement(Vc.Provider,{value:l2},a))}const s2={position:"fixed",touchAction:"none"},i2=t=>qc(t)?"transform 250ms ease":void 0,u2=v.forwardRef((t,a)=>{let{as:r,activatorEvent:i,adjustScale:u,children:o,className:h,rect:m,style:p,transform:g,transition:x=i2}=t;if(!m)return null;const b=u?g:{...g,scaleX:1,scaleY:1},w={...s2,width:m.width,height:m.height,top:m.top,left:m.left,transform:Or.Transform.toString(b),transformOrigin:u&&i?JR(i,m):void 0,transition:typeof x=="function"?x(i):x,...p};return un.createElement(r,{className:h,style:w,ref:a},o)}),o2=t=>a=>{let{active:r,dragOverlay:i}=a;const u={},{styles:o,className:h}=t;if(o!=null&&o.active)for(const[m,p]of Object.entries(o.active))p!==void 0&&(u[m]=r.node.style.getPropertyValue(m),r.node.style.setProperty(m,p));if(o!=null&&o.dragOverlay)for(const[m,p]of Object.entries(o.dragOverlay))p!==void 0&&i.node.style.setProperty(m,p);return h!=null&&h.active&&r.node.classList.add(h.active),h!=null&&h.dragOverlay&&i.node.classList.add(h.dragOverlay),function(){for(const[p,g]of Object.entries(u))r.node.style.setProperty(p,g);h!=null&&h.active&&r.node.classList.remove(h.active)}},c2=t=>{let{transform:{initial:a,final:r}}=t;return[{transform:Or.Transform.toString(a)},{transform:Or.Transform.toString(r)}]},d2={duration:250,easing:"ease",keyframes:c2,sideEffects:o2({styles:{active:{opacity:"0"}}})};function f2(t){let{config:a,draggableNodes:r,droppableContainers:i,measuringConfiguration:u}=t;return $c((o,h)=>{if(a===null)return;const m=r.get(o);if(!m)return;const p=m.node.current;if(!p)return;const g=Cb(h);if(!g)return;const{transform:x}=oa(h).getComputedStyle(h),b=yb(x);if(!b)return;const w=typeof a=="function"?a:h2(a);return Nb(p,u.draggable.measure),w({active:{id:o,data:m.data,node:p,rect:u.draggable.measure(p)},draggableNodes:r,dragOverlay:{node:h,rect:u.dragOverlay.measure(g)},droppableContainers:i,measuringConfiguration:u,transform:b})})}function h2(t){const{duration:a,easing:r,sideEffects:i,keyframes:u}={...d2,...t};return o=>{let{active:h,dragOverlay:m,transform:p,...g}=o;if(!a)return;const x={x:m.rect.left-h.rect.left,y:m.rect.top-h.rect.top},b={scaleX:p.scaleX!==1?h.rect.width*p.scaleX/m.rect.width:1,scaleY:p.scaleY!==1?h.rect.height*p.scaleY/m.rect.height:1},w={x:p.x-x.x,y:p.y-x.y,...b},S=u({...g,active:h,dragOverlay:m,transform:{initial:p,final:w}}),[R]=S,C=S[S.length-1];if(JSON.stringify(R)===JSON.stringify(C))return;const N=i==null?void 0:i({active:h,dragOverlay:m,...g}),z=m.node.animate(S,{duration:a,easing:r,fill:"forwards"});return new Promise(I=>{z.onfinish=()=>{N==null||N(),I()}})}}let Xy=0;function m2(t){return v.useMemo(()=>{if(t!=null)return Xy++,Xy},[t])}const p2=un.memo(t=>{let{adjustScale:a=!1,children:r,dropAnimation:i,style:u,transition:o,modifiers:h,wrapperElement:m="div",className:p,zIndex:g=999}=t;const{activatorEvent:x,active:b,activeNodeRect:w,containerNodeRect:S,draggableNodes:R,droppableContainers:C,dragOverlay:N,over:z,measuringConfiguration:I,scrollableAncestors:q,scrollableAncestorRects:Q,windowRect:ee}=kb(),te=v.useContext(Vc),D=m2(b==null?void 0:b.id),j=Mb(h,{activatorEvent:x,active:b,activeNodeRect:w,containerNodeRect:S,draggingNodeRect:N.rect,over:z,overlayNodeRect:N.rect,scrollableAncestors:q,scrollableAncestorRects:Q,transform:te,windowRect:ee}),re=um(w),ue=f2({config:i,draggableNodes:R,droppableContainers:C,measuringConfiguration:I}),xe=re?N.setRef:void 0;return un.createElement(r2,null,un.createElement(a2,{animation:ue},b&&D?un.createElement(u2,{key:D,id:b.id,ref:xe,as:m,activatorEvent:x,adjustScale:a,className:p,transition:o,rect:re,style:{zIndex:g,...u},transform:j},r):null))});function gu(t,a,r){const i=t.slice();return i.splice(r<0?i.length+r:r,0,i.splice(a,1)[0]),i}function g2(t,a){return t.reduce((r,i,u)=>{const o=a.get(i);return o&&(r[u]=o),r},Array(t.length))}function ec(t){return t!==null&&t>=0}function v2(t,a){if(t===a)return!0;if(t.length!==a.length)return!1;for(let r=0;r<t.length;r++)if(t[r]!==a[r])return!1;return!0}function y2(t){return typeof t=="boolean"?{draggable:t,droppable:t}:t}const _b=t=>{let{rects:a,activeIndex:r,overIndex:i,index:u}=t;const o=gu(a,i,r),h=a[u],m=o[u];return!m||!h?null:{x:m.left-h.left,y:m.top-h.top,scaleX:m.width/h.width,scaleY:m.height/h.height}},tc={scaleX:1,scaleY:1},om=t=>{var a;let{activeIndex:r,activeNodeRect:i,index:u,rects:o,overIndex:h}=t;const m=(a=o[r])!=null?a:i;if(!m)return null;if(u===r){const g=o[h];return g?{x:0,y:r<h?g.top+g.height-(m.top+m.height):g.top-m.top,...tc}:null}const p=x2(o,u,r);return u>r&&u<=h?{x:0,y:-m.height-p,...tc}:u<r&&u>=h?{x:0,y:m.height+p,...tc}:{x:0,y:0,...tc}};function x2(t,a,r){const i=t[a],u=t[a-1],o=t[a+1];return i?r<a?u?i.top-(u.top+u.height):o?o.top-(i.top+i.height):0:o?o.top-(i.top+i.height):u?i.top-(u.top+u.height):0:0}const Lb="Sortable",zb=un.createContext({activeIndex:-1,containerId:Lb,disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:_b,disabled:{draggable:!1,droppable:!1}});function cm(t){let{children:a,id:r,items:i,strategy:u=_b,disabled:o=!1}=t;const{active:h,dragOverlay:m,droppableRects:p,over:g,measureDroppableContainers:x}=kb(),b=_u(Lb,r),w=m.rect!==null,S=v.useMemo(()=>i.map(te=>typeof te=="object"&&"id"in te?te.id:te),[i]),R=h!=null,C=h?S.indexOf(h.id):-1,N=g?S.indexOf(g.id):-1,z=v.useRef(S),I=!v2(S,z.current),q=N!==-1&&C===-1||I,Q=y2(o);al(()=>{I&&R&&x(S)},[I,S,R,x]),v.useEffect(()=>{z.current=S},[S]);const ee=v.useMemo(()=>({activeIndex:C,containerId:b,disabled:Q,disableTransforms:q,items:S,overIndex:N,useDragOverlay:w,sortedRects:g2(S,p),strategy:u}),[C,b,Q.draggable,Q.droppable,q,S,N,p,w,u]);return un.createElement(zb.Provider,{value:ee},a)}const b2=t=>{let{id:a,items:r,activeIndex:i,overIndex:u}=t;return gu(r,i,u).indexOf(a)},S2=t=>{let{containerId:a,isSorting:r,wasDragging:i,index:u,items:o,newIndex:h,previousItems:m,previousContainerId:p,transition:g}=t;return!g||!i||m!==o&&u===h?!1:r?!0:h!==u&&a===p},E2={duration:200,easing:"ease"},Ub="transform",w2=Or.Transition.toString({property:Ub,duration:0,easing:"linear"}),R2={roleDescription:"sortable"};function N2(t){let{disabled:a,index:r,node:i,rect:u}=t;const[o,h]=v.useState(null),m=v.useRef(r);return al(()=>{if(!a&&r!==m.current&&i.current){const p=u.current;if(p){const g=ui(i.current,{ignoreTransform:!0}),x={x:p.left-g.left,y:p.top-g.top,scaleX:p.width/g.width,scaleY:p.height/g.height};(x.x||x.y)&&h(x)}}r!==m.current&&(m.current=r)},[a,r,i,u]),v.useEffect(()=>{o&&h(null)},[o]),o}function T2(t){let{animateLayoutChanges:a=S2,attributes:r,disabled:i,data:u,getNewIndex:o=b2,id:h,strategy:m,resizeObserverConfig:p,transition:g=E2}=t;const{items:x,containerId:b,activeIndex:w,disabled:S,disableTransforms:R,sortedRects:C,overIndex:N,useDragOverlay:z,strategy:I}=v.useContext(zb),q=j2(i,S),Q=x.indexOf(h),ee=v.useMemo(()=>({sortable:{containerId:b,index:Q,items:x},...u}),[b,u,Q,x]),te=v.useMemo(()=>x.slice(x.indexOf(h)),[x,h]),{rect:D,node:j,isOver:re,setNodeRef:ue}=n2({id:h,data:ee,disabled:q.droppable,resizeObserverConfig:{updateMeasurementsFor:te,...p}}),{active:xe,activatorEvent:pe,activeNodeRect:Te,attributes:Ae,setNodeRef:Re,listeners:B,isDragging:V,over:de,setActivatorNodeRef:fe,transform:Ne}=WN({id:h,data:ee,attributes:{...R2,...r},disabled:q.draggable}),O=LR(ue,Re),X=!!xe,se=X&&!R&&ec(w)&&ec(N),ce=!z&&V,we=ce&&se?Ne:null,He=se?we??(m??I)({rects:C,activeNodeRect:Te,activeIndex:w,overIndex:N,index:Q}):null,it=ec(w)&&ec(N)?o({id:h,items:x,activeIndex:w,overIndex:N}):Q,Fe=xe==null?void 0:xe.id,et=v.useRef({activeId:Fe,items:x,newIndex:it,containerId:b}),en=x!==et.current.items,qt=a({active:xe,containerId:b,isDragging:V,isSorting:X,id:h,index:Q,items:x,newIndex:et.current.newIndex,previousItems:et.current.items,previousContainerId:et.current.containerId,transition:g,wasDragging:et.current.activeId!=null}),ut=N2({disabled:!qt,index:Q,node:j,rect:D});return v.useEffect(()=>{X&&et.current.newIndex!==it&&(et.current.newIndex=it),b!==et.current.containerId&&(et.current.containerId=b),x!==et.current.items&&(et.current.items=x)},[X,it,b,x]),v.useEffect(()=>{if(Fe===et.current.activeId)return;if(Fe!=null&&et.current.activeId==null){et.current.activeId=Fe;return}const Le=setTimeout(()=>{et.current.activeId=Fe},50);return()=>clearTimeout(Le)},[Fe]),{active:xe,activeIndex:w,attributes:Ae,data:ee,rect:D,index:Q,newIndex:it,items:x,isOver:re,isSorting:X,isDragging:V,listeners:B,node:j,overIndex:N,over:de,setNodeRef:O,setActivatorNodeRef:fe,setDroppableNodeRef:ue,setDraggableNodeRef:Re,transform:ut??He,transition:le()};function le(){if(ut||en&&et.current.newIndex===Q)return w2;if(!(ce&&!qc(pe)||!g)&&(X||qt))return Or.Transition.toString({...g,property:Ub})}}function j2(t,a){var r,i;return typeof t=="boolean"?{draggable:t,droppable:!1}:{draggable:(r=t==null?void 0:t.draggable)!=null?r:a.draggable,droppable:(i=t==null?void 0:t.droppable)!=null?i:a.droppable}}Ct.Down,Ct.Right,Ct.Up,Ct.Left;const Fc=[{value:"planned",label:"Planned"},{value:"in-progress",label:"In progress"},{value:"done",label:"Done"},{value:"blocked",label:"Blocked"},{value:"canceled",label:"Canceled"},{value:"rejected",label:"Rejected"},{value:"deferred",label:"Deferred"},{value:"waiting",label:"Waiting"}],Gc=[{value:"draft",label:"Draft"},{value:"discovery",label:"Discovery"},{value:"planned",label:"Planned"},{value:"in-progress",label:"In progress"},{value:"done",label:"Done"},{value:"blocked",label:"Blocked"},{value:"canceled",label:"Canceled"},{value:"rejected",label:"Rejected"},{value:"deferred",label:"Deferred"},{value:"waiting",label:"Waiting"}],zu=[{value:"planned",label:"Planned"},{value:"in-progress",label:"In progress"},{value:"done",label:"Done"},{value:"blocked",label:"Blocked"},{value:"canceled",label:"Canceled"},{value:"rejected",label:"Rejected"},{value:"deferred",label:"Deferred"},{value:"waiting",label:"Waiting"}],ru=Fc.map(t=>t.value),su=Gc.map(t=>t.value),iu=zu.map(t=>t.value);function oh(t,a,r){if(t.includes(a)){const i=t.filter(u=>u!==a);return i.length===0?[...r]:i}return[...t,a]}function ch(t,a){return a.includes(t)}function gl(t,a){return`agent-plan:dashboard:${t}:${a}`}function dh(t,a,r){if(typeof window>"u")return a;try{const i=window.localStorage.getItem(t);if(!i)return a;const u=JSON.parse(i);if(!Array.isArray(u))return a;const o=`${t}-schema`,h=r.slice().sort().join(",");if(window.localStorage.getItem(o)!==h)return window.localStorage.setItem(o,h),a;const p=u.filter(g=>typeof g=="string"&&r.includes(g));return p.length>0?p:a}catch{return a}}function fh(t,a,r){typeof window>"u"||(window.localStorage.setItem(t,JSON.stringify(a)),window.localStorage.setItem(`${t}-schema`,r.slice().sort().join(",")))}function hh(t,a){if(typeof window>"u")return a;const r=window.localStorage.getItem(t);return r===null?a:r==="true"}const Iy={featureNumbers:null,phaseNumbers:null,taskNumbers:null,shortIds:null,status:null,featureStatus:null,phaseStatus:null,text:null},Qy=/^(feature-status|phase-status|feature|phase|task|id|status|title):(.*)$/i;function Hb(t){return t.split(",").map(a=>a.trim()).filter(a=>a.length>0)}function D2(t){return new Set(Hb(t).map(a=>Number(a)).filter(a=>Number.isFinite(a)&&a>0))}function Py(t){const a=t.toUpperCase();return a==="AND"||a==="OR"}function mh(t,a){const r=t??new Set;for(const i of D2(a))r.add(i);return r}function C2(t,a){const r=t??new Set;for(const i of Hb(a).map(u=>u.toUpperCase()))r.add(i);return r}function A2(t){const a=t.trim();if(!a)return{...Iy};const r={...Iy},i=[],u=[];let o=0;for(;o<a.length;){const m=a[o];if(m==='"'){const p=a.indexOf('"',o+1);if(p===-1){u.push(a.slice(o+1));break}u.push(a.slice(o+1,p)),o=p+1}else if(m===" ")o+=1;else{let p=o;for(;p<a.length&&a[p]!==" ";)p+=1;u.push(a.slice(o,p)),o=p}}let h=0;for(;h<u.length;){const m=u[h];if(Py(m)){h+=1;continue}const p=m.match(Qy);if(p){const g=(p[1]??"").toLowerCase();let x=p[2]??"";if(x.trim()===""&&h+1<u.length){let b=h+1;for(;b<u.length&&Py(u[b]);)b+=1;b<u.length&&!u[b].match(Qy)&&(x=u[b],h=b)}if(g==="feature"){const b=mh(r.featureNumbers,x);b.size&&(r.featureNumbers=b)}else if(g==="phase"){const b=mh(r.phaseNumbers,x);b.size&&(r.phaseNumbers=b)}else if(g==="task"){const b=mh(r.taskNumbers,x);b.size&&(r.taskNumbers=b)}else if(g==="id"){const b=C2(r.shortIds,x);b.size&&(r.shortIds=b)}else g==="status"?x.trim()&&(r.status=x.toLowerCase()):g==="feature-status"?x.trim()&&(r.featureStatus=x.toLowerCase()):g==="phase-status"?x.trim()&&(r.phaseStatus=x.toLowerCase()):g==="title"&&x.trim()&&(r.text=x.toLowerCase())}else i.push(m.toLowerCase());h+=1}return i.length>0&&!r.text&&(r.text=i.join(" ")),r}function O2(t){return!!(t.featureNumbers||t.phaseNumbers||t.taskNumbers||t.shortIds||t.status||t.featureStatus||t.phaseStatus||t.text)}function M2(t,a){if(t.featureNumbers&&!t.featureNumbers.has(a.feature.number)||t.phaseNumbers&&!t.phaseNumbers.has(a.phase.number)||t.taskNumbers&&!t.taskNumbers.has(a.task.number)||t.shortIds&&!(t.shortIds.has(a.task.shortId??"")||t.shortIds.has(a.phase.shortId??"")||t.shortIds.has(a.feature.shortId??""))||t.status&&a.task.status!==t.status||t.featureStatus&&a.feature.status!==t.featureStatus||t.phaseStatus&&a.phase.status!==t.phaseStatus)return!1;if(t.text){const r=t.text;if(![a.task.title,a.task.shortId??"",a.phase.title,a.phase.shortId??"",a.feature.name,a.feature.shortId??""].join(" ").toLowerCase().includes(r))return!1}return!0}function k2({features:t,phases:a,projectStorageScope:r}){const i=gl(r,"show-all-features"),u=gl(r,"tree-open-mode"),o=gl(r,"expanded-features"),h=gl(r,"expanded-phases"),m=gl(r,"feature-status-filters"),p=gl(r,"phase-status-filters"),g=gl(r,"task-status-filters"),x=gl(r,"hide-done"),b=gl(r,"hide-planned"),w=gl(r,"only-active-branches"),[S,R]=v.useState(""),C=v.useMemo(()=>kR(t,a),[t,a]),N=v.useMemo(()=>A2(S),[S]),z=O2(N),{matchedTaskIds:I,matchedFeatureIds:q,matchedPhaseIds:Q}=v.useMemo(()=>{const ye=new Set,Oe=new Set,ze=new Set;if(!z)return{matchedTaskIds:ye,matchedFeatureIds:Oe,matchedPhaseIds:ze};for(const Ge of C)for(const lt of Ge.allPhases)for(const At of lt.allTasks)M2(N,{feature:Ge.feature,phase:lt.phase,task:At})&&(ye.add(At.id),Oe.add(Ge.feature.id),ze.add(lt.phase.id));return{matchedTaskIds:ye,matchedFeatureIds:Oe,matchedPhaseIds:ze}},[z,N,C]),[ee,te]=v.useState(()=>{if(typeof window>"u")return!0;const ye=window.localStorage.getItem(i);return ye===null?!0:ye==="true"}),[D,j]=v.useState(()=>{if(typeof window>"u")return"all";const ye=window.localStorage.getItem(u);return ye==="smart"||ye==="none"||ye==="all"?ye:"all"}),[re,ue]=v.useState(()=>{if(typeof window>"u")return[];try{const ye=window.localStorage.getItem(o);return ye?JSON.parse(ye):[]}catch{return[]}}),[xe,pe]=v.useState(()=>{if(typeof window>"u")return[];try{const ye=window.localStorage.getItem(h);return ye?JSON.parse(ye):[]}catch{return[]}}),[Te,Ae]=v.useState(()=>dh(m,ru,ru)),[Re,B]=v.useState(()=>dh(p,su,su)),[V,de]=v.useState(()=>dh(g,iu,iu)),[fe,Ne]=v.useState(()=>hh(x,!1)),[O,X]=v.useState(()=>hh(b,!1)),[se,ce]=v.useState(()=>hh(w,!1)),[we,Se]=v.useState([]),[He,it]=v.useState([]),[Fe,et]=v.useState([]),en=v.useRef({});v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(i,String(ee))},[ee,i]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(u,D)},[D,u]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(o,JSON.stringify(re))},[re,o]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(h,JSON.stringify(xe))},[xe,h]),v.useEffect(()=>{typeof window>"u"||fh(m,Te,ru)},[Te,m]),v.useEffect(()=>{typeof window>"u"||fh(p,Re,su)},[Re,p]),v.useEffect(()=>{typeof window>"u"||fh(g,V,iu)},[V,g]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(x,String(fe))},[fe,x]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(b,String(O))},[O,b]),v.useEffect(()=>{typeof window>"u"||window.localStorage.setItem(w,String(se))},[se,w]),v.useEffect(()=>()=>{Object.values(en.current).forEach(ye=>window.clearTimeout(ye)),en.current={}},[]);const qt=v.useMemo(()=>{let ye=[...Te];return fe&&(ye=ye.filter(Oe=>Oe!=="done")),O&&(ye=ye.filter(Oe=>Oe!=="planned")),ye},[Te,fe,O]),ut=v.useMemo(()=>{let ye=[...Re];return fe&&(ye=ye.filter(Oe=>Oe!=="done")),O&&(ye=ye.filter(Oe=>Oe!=="planned"&&Oe!=="draft")),ye},[Re,fe,O]),le=v.useMemo(()=>{let ye=[...V];return fe&&(ye=ye.filter(Oe=>Oe!=="done")),O&&(ye=ye.filter(Oe=>Oe!=="planned")),ye},[V,fe,O]),Le=v.useMemo(()=>{if(z)return C.map(ze=>({...ze,allPhases:ze.allPhases.map(Ge=>({...Ge,allTasks:Ge.allTasks.filter(lt=>I.has(lt.id))})).filter(Ge=>Ge.allTasks.length>0)})).filter(ze=>ze.allPhases.length>0);const ye=!ee||se;return(ee?C:C.filter(ze=>ze.isActive)).filter(({feature:ze})=>ch(ze.status,qt)).map(ze=>({...ze,allPhases:ze.allPhases.filter(({phase:Ge,hasActiveTask:lt})=>ch(Ge.status,ut)?ye?Ge.status==="in-progress"||Ge.status==="discovery"||lt:!0:!1).map(Ge=>({...Ge,allTasks:Ge.allTasks.filter(lt=>!!ch(lt.status,le))})).filter(Ge=>Ge.allTasks.length>0||ee||!ye)})).filter(({hasActiveTask:ze,allPhases:Ge})=>ye?ze||Ge.some(lt=>lt.hasActiveTask):Ge.length>0||ee)},[z,I,C,qt,ut,le,se,ee]);v.useEffect(()=>{if(D==="none"){ue([]),pe([]);return}if(D==="all"){ue(Le.filter(({feature:ze})=>ze.status!=="done").map(({feature:ze})=>ze.id)),pe(Le.flatMap(({allPhases:ze})=>ze.map(({phase:Ge})=>Ge.id)));return}const ye=new Set(Le.map(({feature:ze})=>ze.id)),Oe=new Set(Le.flatMap(({allPhases:ze})=>ze.map(({phase:Ge})=>Ge.id)));ue(ze=>ze.filter(Ge=>ye.has(Ge))),pe(ze=>ze.filter(Ge=>Oe.has(Ge)))},[Le,D]),v.useEffect(()=>{z&&(j("smart"),ue(Array.from(q)),pe(Array.from(Q)))},[z,q,Q]);const at=ye=>{j("smart"),ue(Oe=>Oe.includes(ye)?Oe.filter(ze=>ze!==ye):[...Oe,ye])},Xt=ye=>{j("smart"),pe(Oe=>Oe.includes(ye)?Oe.filter(ze=>ze!==ye):[...Oe,ye])},Cn=()=>{j("smart"),ue(Le.map(({feature:ye})=>ye.id)),pe(Le.flatMap(({allPhases:ye})=>ye.map(({phase:Oe})=>Oe.id)))};return v.useEffect(()=>{const ye=(ze,Ge)=>{const lt=Ge.filter(At=>!!At);for(const At of lt){const Ot=`${ze}:${At}`,tn=ze==="feature"?Se:ze==="phase"?it:et;tn(It=>It.includes(At)?It:[...It,At]),en.current[Ot]!==void 0&&window.clearTimeout(en.current[Ot]),en.current[Ot]=window.setTimeout(()=>{tn(It=>It.filter(ca=>ca!==At)),delete en.current[Ot]},CR)}},Oe=ze=>{var At,Ot,tn,It,ca,gn;const lt=ze.detail;if(lt!=null&<.type){if(lt.type==="features-updated"){const J=((At=lt.data)==null?void 0:At.featureId)??((Ot=lt.data)==null?void 0:Ot.id);ye("feature",[J]),J&&(j("smart"),ue(St=>St.includes(J)?St:[...St,J]));return}if(lt.type==="phases-updated"){const J=(tn=lt.data)==null?void 0:tn.featureId,St=((It=lt.data)==null?void 0:It.phaseId)??((ca=lt.data)==null?void 0:ca.id);ye("phase",[St]),ye("feature",[J]),ye("task",[(gn=lt.data)==null?void 0:gn.taskId]),j("smart"),J&&ue(Lt=>Lt.includes(J)?Lt:[...Lt,J]),St&&pe(Lt=>Lt.includes(St)?Lt:[...Lt,St])}}};return window.addEventListener("agent-plan:ws-event",Oe),()=>{window.removeEventListener("agent-plan:ws-event",Oe)}},[]),{workTree:C,displayedWorkTree:Le,treeOpenMode:D,setTreeOpenMode:j,expandAll:Cn,expandedFeatureIds:re,expandedPhaseIds:xe,toggleExpandedFeature:at,toggleExpandedPhase:Xt,recentFeatureIds:we,recentPhaseIds:He,recentTaskIds:Fe,showAllFeatures:ee,setShowAllFeatures:te,featureStatusFilters:Te,phaseStatusFilters:Re,taskStatusFilters:V,hideDone:fe,setHideDone:Ne,hidePlanned:O,setHidePlanned:X,onlyActiveBranches:se,setOnlyActiveBranches:ce,resetFilters:()=>{te(!0),Ne(!1),X(!1),Ae(ru),B(su),de(iu),ce(!1),j("all")},toggleFeatureStatusFilter:ye=>Ae(Oe=>oh(Oe,ye,ru)),togglePhaseStatusFilter:ye=>B(Oe=>oh(Oe,ye,su)),toggleTaskStatusFilter:ye=>de(Oe=>oh(Oe,ye,iu)),searchQuery:S,setSearchQuery:R,searchActive:z,matchedTaskIds:I,matchedFeatureIds:q,matchedPhaseIds:Q}}const Bb=v.createContext(null);function dm({id:t,children:a}){const r=T2({id:t}),i={transform:Or.Transform.toString(r.transform),transition:r.transition};return d.jsx(Bb.Provider,{value:r,children:d.jsx("div",{ref:r.setNodeRef,style:i,className:r.isDragging?"ap-sortable--dragging":"",children:a})})}function fm(){const t=v.useContext(Bb);return t?d.jsx("button",{type:"button",className:"drag-handle","aria-label":"Drag to reorder",title:"Drag to reorder",...t.listeners,...t.attributes,children:d.jsx(jw,{className:"h-4 w-4"})}):null}const hm="mt-1 block min-w-0 break-words font-mono text-sm font-semibold leading-snug [overflow-wrap:anywhere]";function _2(){return d.jsx("span",{className:"rounded-full bg-[color:color-mix(in_srgb,var(--accent)_16%,transparent)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.12em] text-[var(--accent)]",children:"Updated"})}function ni({status:t,doneTasks:a,totalTasks:r,recentlyChanged:i,className:u}){const o=a!=null&&r!=null;return d.jsxs("div",{className:u,children:[i?d.jsx(_2,{}):null,o?d.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["(",a,"/",r||0,")"]}):null,d.jsx("span",{className:"shrink-0",children:d.jsx(Oa,{status:t})})]})}function L2({entry:t,expanded:a,recentlyChanged:r,onToggle:i,isPhaseExpanded:u,onTogglePhase:o,isPhaseRecentlyChanged:h,isTaskRecentlyChanged:m,highlightedTaskIds:p}){const{feature:g,totalTasks:x,doneTasks:b,allPhases:w,hasActiveTask:S}=t;return d.jsxs("div",{className:`surface-card min-w-0 px-3 py-3 transition-colors sm:px-4 ${S?"ap-in-progress":g.status==="in-progress"?"border-[color:var(--color-status-in-progress)]/40 bg-[color:color-mix(in_srgb,var(--color-status-in-progress)_7%,transparent)]":""} ${g.status==="done"?"!opacity-70 !bg-[color:color-mix(in_srgb,var(--color-status-done)_10%,transparent)] !border-[color:color-mix(in_srgb,var(--color-status-done)_35%,transparent)]":""} ${r?"ring-1 ring-[color:color-mix(in_srgb,var(--accent)_55%,transparent)] bg-[color:color-mix(in_srgb,var(--accent)_12%,transparent)]":""}`,children:[d.jsxs("div",{className:`flex min-w-0 flex-col gap-1.5 rounded-[12px] px-1 py-1 transition-colors hover:bg-[var(--accent-soft)] sm:flex-row sm:items-start sm:justify-between sm:gap-3 ${r?"bg-[color:color-mix(in_srgb,var(--accent)_10%,transparent)]":""}`,children:[d.jsxs("div",{className:"flex min-w-0 items-start gap-2 sm:flex-1",children:[d.jsx("button",{type:"button",onClick:i,className:"mt-0.5 inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-[var(--text-subtle)] hover:bg-[var(--surface-elevated)] hover:text-[var(--text)]","aria-label":a?`Collapse feature ${g.name}`:`Expand feature ${g.name}`,"aria-expanded":a,children:d.jsx(tb,{className:`h-4 w-4 transition ${a?"rotate-90":"rotate-0"}`})}),d.jsxs("div",{className:"min-w-0 flex-1",children:[d.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[d.jsx(fm,{}),d.jsx(Wl,{id:li({featureNum:g.number}),children:d.jsx(Jl,{featureNum:g.number})}),g.shortId?d.jsx(ri,{shortId:g.shortId}):null,S?d.jsx("span",{"aria-hidden":"true",className:"ap-progress-dot"}):null]}),d.jsx(ni,{status:g.status,doneTasks:b,totalTasks:x,recentlyChanged:r,className:"mt-1 flex flex-wrap items-center gap-2 sm:hidden"}),d.jsx(wt,{to:`/features/${g.id}`,className:`entity-link--feature ${hm} underline-offset-4 hover:underline`,children:g.name})]})]}),d.jsx(ni,{status:g.status,doneTasks:b,totalTasks:x,recentlyChanged:r,className:"hidden shrink-0 items-center gap-2 sm:flex"})]}),a&&w.length>0?d.jsx("div",{className:"mt-2 ml-1.5 grid grid-cols-1 gap-2 border-l border-[var(--border)] pl-3 sm:ml-4 sm:pl-4",children:d.jsx(cm,{items:w.map(R=>R.phase.id),strategy:om,children:w.map(R=>d.jsx(dm,{id:R.phase.id,children:d.jsx(z2,{feature:g,phaseEntry:R,expanded:u(R.phase.id),recentlyChanged:h(R.phase.id),onToggle:()=>o(R.phase.id),isTaskRecentlyChanged:m,highlightedTaskIds:p})},R.phase.id))})}):null]})}function z2({feature:t,phaseEntry:a,expanded:r,recentlyChanged:i,onToggle:u,isTaskRecentlyChanged:o,highlightedTaskIds:h}){const{phase:m,totalTasks:p,doneTasks:g,allTasks:x,hasActiveTask:b}=a;return d.jsxs("div",{className:`work-tree-row grid min-w-0 grid-cols-1 gap-2 rounded-[12px] p-3 transition-colors ${b?"ap-in-progress":m.status==="in-progress"?"border border-[color:color-mix(in_srgb,var(--color-status-in-progress)_35%,transparent)] bg-[color:color-mix(in_srgb,var(--color-status-in-progress)_6%,transparent)]":""} ${m.status==="done"?"opacity-70 bg-[color:color-mix(in_srgb,var(--color-status-done)_6%,transparent)]":""} ${i?"ring-1 ring-[color:color-mix(in_srgb,var(--accent)_55%,transparent)] bg-[color:color-mix(in_srgb,var(--accent)_12%,transparent)]":""}`,children:[d.jsxs("div",{className:`flex min-w-0 flex-col gap-1.5 rounded-[10px] px-1 py-1 transition-colors hover:bg-[var(--accent-soft)] sm:flex-row sm:items-start sm:justify-between sm:gap-3 ${i?"bg-[color:color-mix(in_srgb,var(--accent)_8%,transparent)]":""}`,children:[d.jsxs("div",{className:"flex min-w-0 items-start gap-2 sm:flex-1",children:[d.jsx("button",{type:"button",onClick:u,className:"mt-0.5 inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-[var(--text-subtle)] hover:bg-[var(--surface-elevated)] hover:text-[var(--text)]","aria-label":r?`Collapse phase ${m.title}`:`Expand phase ${m.title}`,"aria-expanded":r,children:d.jsx(tb,{className:`h-4 w-4 transition ${r?"rotate-90":"rotate-0"}`})}),d.jsxs("div",{className:"min-w-0 flex-1",children:[d.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[d.jsx(fm,{}),d.jsx(Wl,{id:li({featureNum:t==null?void 0:t.number,phaseNum:m.number}),children:d.jsx(Jl,{featureNum:t==null?void 0:t.number,phaseNum:m.number})}),m.shortId?d.jsx(ri,{shortId:m.shortId}):null,m.handoff?d.jsx(tm,{updatedAt:m.handoffUpdatedAt}):null,b?d.jsx("span",{"aria-hidden":"true",className:"ap-progress-dot"}):null]}),d.jsx(ni,{status:m.status,doneTasks:g,totalTasks:p,recentlyChanged:i,className:"mt-1 flex flex-wrap items-center gap-2 sm:hidden"}),d.jsx(wt,{to:`/features/${t.id}/phases/${m.id}`,className:`entity-link--phase ${hm} underline-offset-4 hover:underline`,children:m.title})]})]}),d.jsx(ni,{status:m.status,doneTasks:g,totalTasks:p,recentlyChanged:i,className:"hidden shrink-0 items-center gap-2 sm:flex"})]}),r?x.length>0?d.jsx("div",{className:"ml-1.5 grid grid-cols-1 gap-1 border-l border-[var(--border)] pl-3 sm:ml-4 sm:pl-4",children:d.jsx(cm,{items:x.map(w=>w.id),strategy:om,children:x.map(w=>d.jsx(dm,{id:w.id,children:d.jsx(U2,{feature:t,phase:m,task:w,recentlyChanged:o(w.id),highlighted:h==null?void 0:h.has(w.id)})},w.id))})}):d.jsx("p",{className:"ml-1.5 text-xs italic text-[var(--text-subtle)] sm:ml-4",children:"No tasks"}):null]})}function U2({feature:t,phase:a,task:r,recentlyChanged:i,highlighted:u}){return d.jsxs("div",{className:`flex min-w-0 flex-col gap-1.5 rounded-[10px] px-2 py-2 transition-colors hover:bg-[var(--accent-soft)] sm:flex-row sm:items-start sm:justify-between sm:gap-3 ${r.status==="in-progress"?"ap-in-progress":""} ${r.status==="done"?"opacity-60 bg-[color:color-mix(in_srgb,var(--color-status-done)_6%,transparent)] text-[var(--text-muted)]":""} ${i?"ring-1 ring-[color:color-mix(in_srgb,var(--accent)_55%,transparent)] bg-[color:color-mix(in_srgb,var(--accent)_12%,transparent)]":""} ${u?"ap-search-hit":""}`,children:[d.jsxs("div",{className:"min-w-0 flex-1",children:[d.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[d.jsx(fm,{}),d.jsx(Wl,{id:li({featureNum:t==null?void 0:t.number,phaseNum:a.number,taskNum:r.number}),children:d.jsx(Jl,{featureNum:t==null?void 0:t.number,phaseNum:a.number,taskNum:r.number})}),r.shortId?d.jsx(ri,{shortId:r.shortId}):null,r.status==="in-progress"?d.jsx("span",{"aria-hidden":"true",className:"ap-progress-dot"}):null]}),d.jsx(ni,{status:r.status,recentlyChanged:i,className:"mt-1 flex flex-wrap items-center gap-2 sm:hidden"}),d.jsx(wt,{to:`/features/${t.id}/phases/${a.id}/tasks/${r.id}`,className:`entity-link--task ${hm} underline-offset-4 hover:underline`,children:r.title})]}),d.jsx(ni,{status:r.status,recentlyChanged:i,className:"hidden shrink-0 items-center gap-2 sm:flex"})]})}var k=(function(t){return t.FIELD_NAME="FIELD_NAME",t.COLON="COLON",t.VALUE="VALUE",t.QUOTED_VALUE="QUOTED_VALUE",t.AND="AND",t.OR="OR",t.NOT="NOT",t.COMPARISON_OP="COMPARISON_OP",t.LPAREN="LPAREN",t.RPAREN="RPAREN",t.SAVED_SEARCH="SAVED_SEARCH",t.HISTORY_REF="HISTORY_REF",t.PREFIX_OP="PREFIX_OP",t.WILDCARD="WILDCARD",t.REGEX="REGEX",t.RANGE="RANGE",t.TILDE="TILDE",t.BOOST="BOOST",t.WHITESPACE="WHITESPACE",t.UNKNOWN="UNKNOWN",t})({}),ra=(function(t){return t[t.EXPECT_TERM=0]="EXPECT_TERM",t[t.EXPECT_VALUE=1]="EXPECT_VALUE",t})(ra||{}),Ks=class{constructor(t,a){mn(this,"input");mn(this,"pos");mn(this,"state");mn(this,"tokens");mn(this,"options");this.input=t,this.pos=0,this.state=ra.EXPECT_TERM,this.tokens=[],this.options=a||{}}tokenize(){for(this.tokens=[],this.pos=0,this.state=ra.EXPECT_TERM;this.pos<this.input.length;)this.state===ra.EXPECT_VALUE?this.readValue():this.readTerm();return this.tokens}peek(){return this.input[this.pos]}peekAt(t){return this.input[this.pos+t]}advance(){return this.input[this.pos++]}isWhitespace(t){return t===" "||t===" "||t===`
|
|
198
198
|
`||t==="\r"}isAlpha(t){return/[a-zA-Z_]/.test(t)}isAlphaNumeric(t){return/[a-zA-Z0-9_.\-]/.test(t)}readWhitespace(){const t=this.pos;for(;this.pos<this.input.length&&this.isWhitespace(this.peek());)this.advance();this.tokens.push({type:k.WHITESPACE,value:this.input.slice(t,this.pos),start:t,end:this.pos})}readQuotedString(){const t=this.pos,a=this.advance();for(;this.pos<this.input.length;){const r=this.advance();if(r==="\\"&&this.pos<this.input.length)this.advance();else if(r===a)break}this.tokens.push({type:k.QUOTED_VALUE,value:this.input.slice(t,this.pos),start:t,end:this.pos}),this.tryReadModifier(),this.state=ra.EXPECT_TERM}readTerm(){const t=this.peek();if(this.isWhitespace(t)){this.readWhitespace();return}if(t==='"'){this.readQuotedString();return}if(t==="("){this.tokens.push({type:k.LPAREN,value:"(",start:this.pos,end:this.pos+1}),this.advance();return}if(t===")"){this.tokens.push({type:k.RPAREN,value:")",start:this.pos,end:this.pos+1}),this.advance();return}if(t==="~"||t==="^"){const r=this.pos,i=t==="~"?k.TILDE:k.BOOST;for(this.advance();this.pos<this.input.length&&/[0-9.]/.test(this.peek());)this.advance();this.tokens.push({type:i,value:this.input.slice(r,this.pos),start:r,end:this.pos});return}if(t==="["||t==="{"){this.readRangeValue();return}if(t==="#"&&this.options.savedSearches){this.readSavedSearch();return}if(t==="!"&&this.options.historySearch){this.readHistoryRef();return}if(t==="-"||t==="+"){const r=this.peekAt(1);if(r&&(this.isAlpha(r)||r==='"'||r==="("||r==="#"||r==="!"||r==="["||r==="{")||!r||r===")"||r===" "||r===" "||r===`
|
|
199
199
|
`||r==="\r"){this.tokens.push({type:k.PREFIX_OP,value:t,start:this.pos,end:this.pos+1}),this.advance();return}}if(t==="&"&&this.peekAt(1)==="&"){this.tokens.push({type:k.AND,value:"&&",start:this.pos,end:this.pos+2}),this.advance(),this.advance();return}if(t==="|"&&this.peekAt(1)==="|"){this.tokens.push({type:k.OR,value:"||",start:this.pos,end:this.pos+2}),this.advance(),this.advance();return}if((t===">"||t==="<")&&this.state===ra.EXPECT_TERM){const r=this.pos;this.advance(),this.pos<this.input.length&&this.peek()==="="&&this.advance(),this.tokens.push({type:k.COMPARISON_OP,value:this.input.slice(r,this.pos),start:r,end:this.pos}),this.state=ra.EXPECT_VALUE;return}if(t==="/"){this.readRegex();return}const a=this.pos;for(;this.pos<this.input.length&&!this.isWhitespace(this.peek())&&this.peek()!=="("&&this.peek()!==")"&&this.peek()!=='"'&&this.peek()!=="~"&&this.peek()!=="^"&&!(this.peek()==="&"&&this.peekAt(1)==="&")&&!(this.peek()==="|"&&this.peekAt(1)==="|");){if(this.peek()==="\\"&&this.pos+1<this.input.length){this.advance(),this.advance();continue}if(this.peek()===":"){this.pos>a&&this.tokens.push({type:k.FIELD_NAME,value:this.input.slice(a,this.pos),start:a,end:this.pos}),this.tokens.push({type:k.COLON,value:":",start:this.pos,end:this.pos+1}),this.advance(),this.state=ra.EXPECT_VALUE;return}this.advance()}if(this.pos>a){const r=this.input.slice(a,this.pos),i=r.toUpperCase();i==="AND"?this.tokens.push({type:k.AND,value:r,start:a,end:this.pos}):i==="OR"?this.tokens.push({type:k.OR,value:r,start:a,end:this.pos}):i==="NOT"?this.tokens.push({type:k.NOT,value:r,start:a,end:this.pos}):r.includes("*")||r.includes("?")?this.tokens.push({type:k.WILDCARD,value:r,start:a,end:this.pos}):this.tokens.push({type:k.VALUE,value:r,start:a,end:this.pos}),this.tryReadModifier()}}readValue(){const t=this.peek();if(this.isWhitespace(t)){this.readWhitespace(),this.state=ra.EXPECT_TERM;return}if(t==='"'){this.readQuotedString(),this.state=ra.EXPECT_TERM;return}if(t==="("||t===")"){this.state=ra.EXPECT_TERM,this.readTerm();return}if(t===">"||t==="<"){const r=this.pos;this.advance(),this.pos<this.input.length&&this.peek()==="="&&this.advance(),this.tokens.push({type:k.COMPARISON_OP,value:this.input.slice(r,this.pos),start:r,end:this.pos});return}if(t==="["||t==="{"){this.readRangeValue();return}if(t==="/"){this.readRegex(),this.state=ra.EXPECT_TERM;return}const a=this.pos;for(;this.pos<this.input.length&&!this.isWhitespace(this.peek())&&this.peek()!==")"&&this.peek()!=="("&&this.peek()!=='"'&&this.peek()!=="~"&&this.peek()!=="^";){if(this.peek()==="\\"&&this.pos+1<this.input.length){this.advance(),this.advance();continue}this.advance()}if(this.pos>a){const r=this.input.slice(a,this.pos);r.includes("*")||r.includes("?")?this.tokens.push({type:k.WILDCARD,value:r,start:a,end:this.pos}):this.tokens.push({type:k.VALUE,value:r,start:a,end:this.pos}),this.tryReadModifier()}this.state=ra.EXPECT_TERM}readRangeValue(){const t=this.pos;for(this.advance();this.pos<this.input.length&&this.peek()!=="]"&&this.peek()!=="}";)this.advance();this.pos<this.input.length&&(this.peek()==="]"||this.peek()==="}")&&this.advance(),this.tokens.push({type:k.RANGE,value:this.input.slice(t,this.pos),start:t,end:this.pos}),this.state=ra.EXPECT_TERM}tryReadModifier(){for(;this.pos<this.input.length&&(this.peek()==="~"||this.peek()==="^");){const t=this.pos,a=this.advance()==="~"?k.TILDE:k.BOOST;for(;this.pos<this.input.length&&/[0-9.]/.test(this.peek());)this.advance();this.tokens.push({type:a,value:this.input.slice(t,this.pos),start:t,end:this.pos})}}readRegex(){const t=this.pos;for(this.advance();this.pos<this.input.length;){const a=this.peek();if(a==="\\"&&this.pos+1<this.input.length){this.advance(),this.advance();continue}if(a==="/"){this.advance(),this.tokens.push({type:k.REGEX,value:this.input.slice(t,this.pos),start:t,end:this.pos}),this.tryReadModifier(),this.state=ra.EXPECT_TERM;return}this.advance()}this.tokens.push({type:k.VALUE,value:this.input.slice(t,this.pos),start:t,end:this.pos}),this.state=ra.EXPECT_TERM}readSavedSearch(){const t=this.pos;for(this.advance();this.pos<this.input.length&&this.isAlphaNumeric(this.peek());)this.advance();this.tokens.push({type:k.SAVED_SEARCH,value:this.input.slice(t,this.pos),start:t,end:this.pos})}readHistoryRef(){const t=this.pos;for(this.advance();this.pos<this.input.length&&this.isAlphaNumeric(this.peek());)this.advance();this.tokens.push({type:k.HISTORY_REF,value:this.input.slice(t,this.pos),start:t,end:this.pos})}},ls=class{constructor(t){mn(this,"tokens");mn(this,"pos");mn(this,"nonWsTokens");mn(this,"errors",[]);this.tokens=t,this.nonWsTokens=t.filter(a=>a.type!==k.WHITESPACE),this.pos=0}getErrors(){return this.errors}isUnclosedQuote(t){if(t.type!==k.QUOTED_VALUE)return!1;const a=t.value;if(a.length<2)return!0;const r=a[0];return a[a.length-1]!==r}stripQuotes(t){const a=t.value;return this.isUnclosedQuote(t)?a.slice(1):a.slice(1,-1)}checkUnclosedQuote(t){this.isUnclosedQuote(t)&&this.errors.push({type:"Error",value:t.value[0],message:"Missing closing quote",start:t.start,end:t.start+1})}parse(){if(this.nonWsTokens.length===0)return null;let t=this.parseOr();for(;this.peek();){const a=this.peek();if(a.type===k.RPAREN)this.advance(),this.errors.push({type:"Error",value:a.value,message:"Unexpected closing parenthesis",start:a.start,end:a.end});else{const r=this.parseOr();t={type:"BooleanExpr",operator:"AND",left:t,right:r,implicit:!0,start:t.start,end:r.end}}}return t}peek(){return this.nonWsTokens[this.pos]}advance(){return this.nonWsTokens[this.pos++]}match(t){var a;if(((a=this.peek())==null?void 0:a.type)===t)return this.advance()}parseOr(){var a;let t=this.parseAnd();for(;((a=this.peek())==null?void 0:a.type)===k.OR;){const r=this.advance(),i=this.parseAnd();if(i.type==="Error"&&i.value===""){this.errors.push({type:"Error",value:r.value,message:"Missing search term after OR",start:r.start,end:r.end});break}t={type:"BooleanExpr",operator:"OR",left:t,right:i,sourceOperator:r.value,start:t.start,end:i.end}}return t}parseAnd(){let t=this.parseNot();for(;;){const a=this.peek();if(!a)break;if(a.type===k.AND){const r=this.advance(),i=this.parseNot();if(i.type==="Error"&&i.value===""){this.errors.push({type:"Error",value:r.value,message:"Missing search term after AND",start:r.start,end:r.end});break}t={type:"BooleanExpr",operator:"AND",left:t,right:i,sourceOperator:r.value,start:t.start,end:i.end}}else{if(a.type===k.OR||a.type===k.RPAREN)break;{const r=this.parseNot();t={type:"BooleanExpr",operator:"AND",left:t,right:r,implicit:!0,start:t.start,end:r.end}}}}return t}parseNot(){var t;if(((t=this.peek())==null?void 0:t.type)===k.NOT){const a=this.advance(),r=this.parsePrimary();return r.type==="Error"&&r.value===""?(this.errors.push({type:"Error",value:a.value,message:"Missing search term after NOT",start:a.start,end:a.end}),r):{type:"Not",expression:r,sourceOperator:a.value,start:a.start,end:r.end}}return this.parsePrimary()}applyGroupBoost(t){var a;if(((a=this.peek())==null?void 0:a.type)===k.BOOST){const r=this.advance(),i=r.value.slice(1),u=parseFloat(i);t.boost=isNaN(u)?1:u,t.end=r.end}return t}applyModifiers(t){var a,r;if(t.type!=="BareTerm"&&t.type!=="FieldValue")return t;if(((a=this.peek())==null?void 0:a.type)===k.TILDE){const i=this.advance(),u=i.value.slice(1),o=parseInt(u,10);t.quoted?t.proximity=isNaN(o)?0:o:t.fuzzy=isNaN(o)?0:o,t.end=i.end}if(((r=this.peek())==null?void 0:r.type)===k.BOOST){const i=this.advance(),u=i.value.slice(1),o=parseFloat(u);t.boost=isNaN(o)?1:o,t.end=i.end}return t}parseRangeBound(t,a){const r=t.length-t.trimStart().length,i=t.trim();return i.startsWith('"')&&i.endsWith('"')&&i.length>=2?{value:i.slice(1,-1),quoted:!0,valueStart:a+r,valueEnd:a+r+i.length}:i.startsWith('"')?{value:i.slice(1),quoted:!0,valueStart:a+r,valueEnd:a+r+i.length}:{value:i,quoted:!1,valueStart:a+r,valueEnd:a+r+i.length}}parseRange(t){const a=t.value,r=a[0],i=r==="[",u=a[a.length-1],o=u==="]"||u==="}",h=u==="]";o||this.errors.push({type:"Error",value:r,message:"Unclosed range expression",start:t.start,end:t.start+1});const m=o?a.slice(1,-1):a.slice(1),p=m.match(/^(.*?)\s+[Tt][Oo]\s+(.*)$/),g=t.start+1;if(!p){this.errors.push({type:"Error",value:a,message:"Range expression missing TO keyword",start:t.start,end:t.end});const S=this.parseRangeBound(m,g);return{type:"Range",lower:S.value,upper:"",lowerInclusive:i,upperInclusive:o?h:!0,lowerQuoted:S.quoted,upperQuoted:!1,lowerStart:S.valueStart,lowerEnd:S.valueEnd,upperStart:t.end,upperEnd:t.end,start:t.start,end:t.end}}const x=this.parseRangeBound(p[1],g),b=g+p[1].length+(m.length-p[1].length-p[2].length),w=this.parseRangeBound(p[2],b);return{type:"Range",lower:x.value,upper:w.value,lowerInclusive:i,upperInclusive:o?h:!0,lowerQuoted:x.quoted,upperQuoted:w.quoted,lowerStart:x.valueStart,lowerEnd:x.valueEnd,upperStart:w.valueStart,upperEnd:w.valueEnd,start:t.start,end:t.end}}parsePrimary(){var r,i,u;const t=this.peek();if(!t)return{type:"Error",value:"",message:"Unexpected end of input",start:this.nonWsTokens.length>0?this.nonWsTokens[this.nonWsTokens.length-1].end:0,end:this.nonWsTokens.length>0?this.nonWsTokens[this.nonWsTokens.length-1].end:0};if(t.type===k.AND){const o=this.advance();return this.errors.push({type:"Error",value:o.value,message:"Unexpected AND",start:o.start,end:o.end}),this.parsePrimary()}if(t.type===k.OR){const o=this.advance();return this.errors.push({type:"Error",value:o.value,message:"Unexpected OR",start:o.start,end:o.end}),this.parsePrimary()}if(t.type===k.PREFIX_OP){const o=this.advance(),h=this.parsePrimary();return o.value==="-"?{type:"Not",expression:h,sourceOperator:o.value,start:o.start,end:h.end}:{...h,start:o.start}}if(t.type===k.LPAREN){const o=this.advance();if(!this.peek()||this.peek().type===k.RPAREN){const g=this.match(k.RPAREN);g||this.errors.push({type:"Error",value:o.value,message:"Unclosed parenthesis",start:o.start,end:o.end});const x={type:"Group",expression:{type:"BareTerm",value:"",quoted:!1,start:o.end,end:o.end},start:o.start,end:g?g.end:o.end};return this.applyGroupBoost(x)}const h=this.parseOr(),m=this.match(k.RPAREN);m||this.errors.push({type:"Error",value:o.value,message:"Missing closing parenthesis",start:o.start,end:o.end});const p={type:"Group",expression:h,start:o.start,end:m?m.end:h.end};return this.applyGroupBoost(p)}if(t.type===k.SAVED_SEARCH){const o=this.advance();return{type:"SavedSearch",name:o.value.slice(1),start:o.start,end:o.end}}if(t.type===k.HISTORY_REF){const o=this.advance();return{type:"HistoryRef",ref:o.value.slice(1),start:o.start,end:o.end}}if(t.type===k.FIELD_NAME){const o=this.advance(),h=this.match(k.COLON);if(h){let m=":";const p=this.match(k.COMPARISON_OP);if(p&&(m=p.value),((r=this.peek())==null?void 0:r.type)===k.LPAREN){const x=this.advance();if(!this.peek()||this.peek().type===k.RPAREN){const R=this.match(k.RPAREN);R||this.errors.push({type:"Error",value:x.value,message:"Unclosed parenthesis",start:x.start,end:x.end});const C={type:"FieldGroup",field:o.value,expression:{type:"BareTerm",value:"",quoted:!1,start:x.end,end:x.end},start:o.start,end:R?R.end:x.end};return this.applyGroupBoost(C)}const b=this.parseOr(),w=this.match(k.RPAREN);w||this.errors.push({type:"Error",value:x.value,message:"Missing closing parenthesis",start:x.start,end:x.end});const S={type:"FieldGroup",field:o.value,expression:b,start:o.start,end:w?w.end:b.end};return this.applyGroupBoost(S)}if(((i=this.peek())==null?void 0:i.type)===k.RANGE){const x=this.advance(),b=this.parseRange(x);return b.field=o.value,b.start=o.start,b}if(((u=this.peek())==null?void 0:u.type)===k.REGEX){const x=this.advance();return{type:"Regex",pattern:x.value.slice(1,-1),start:o.start,end:x.end}}const g=this.peek();if(g&&(g.type===k.VALUE||g.type===k.QUOTED_VALUE||g.type===k.WILDCARD)){const x=this.advance(),b=x.type===k.QUOTED_VALUE;b&&this.checkUnclosedQuote(x);const w=b?this.stripQuotes(x):x.value;return this.applyModifiers({type:"FieldValue",field:o.value,operator:m,value:w,quoted:b,start:o.start,end:x.end})}return{type:"FieldValue",field:o.value,operator:m,value:"",quoted:!1,start:o.start,end:p?p.end:h.end}}return{type:"BareTerm",value:o.value,quoted:!1,start:o.start,end:o.end}}if(t.type===k.COMPARISON_OP){const o=this.advance(),h=this.peek();if(h&&(h.type===k.VALUE||h.type===k.QUOTED_VALUE)){const m=this.advance();return{type:"BareTerm",value:o.value+m.value,quoted:!1,start:o.start,end:m.end}}return{type:"Error",value:o.value,message:"Comparison operator without value",start:o.start,end:o.end}}if(t.type===k.QUOTED_VALUE){const o=this.advance();return this.checkUnclosedQuote(o),this.applyModifiers({type:"BareTerm",value:this.stripQuotes(o),quoted:!0,start:o.start,end:o.end})}if(t.type===k.WILDCARD){const o=this.advance();return this.applyModifiers({type:"BareTerm",value:o.value,quoted:!1,start:o.start,end:o.end})}if(t.type===k.RANGE){const o=this.advance();return this.parseRange(o)}if(t.type===k.REGEX){const o=this.advance();return{type:"Regex",pattern:o.value.slice(1,-1),start:o.start,end:o.end}}if(t.type===k.VALUE){const o=this.advance();return this.applyModifiers({type:"BareTerm",value:o.value,quoted:!1,start:o.start,end:o.end})}if(t.type===k.RPAREN){const o=this.advance();return this.errors.push({type:"Error",value:o.value,message:"Unexpected closing parenthesis",start:o.start,end:o.end}),{type:"Error",value:o.value,message:"Unexpected closing parenthesis",start:o.start,end:o.end}}const a=this.advance();return{type:"Error",value:a.value,message:`Unexpected token: ${a.value}`,start:a.start,end:a.end}}static getCursorContext(t,a){let r,i;for(const o of t)if(o.type!==k.WHITESPACE){if(a>=o.start&&a<=o.end){r=o;break}o.end<=a&&(i=o)}const u=o=>{let h=0;for(let m=o;m>=0;m--){const p=t[m];if(p.type!==k.WHITESPACE){if(p.type===k.RPAREN){h++;continue}if(p.type===k.LPAREN){if(h>0){h--;continue}for(let g=m-1;g>=0;g--)if(t[g].type!==k.WHITESPACE){if(t[g].type===k.COLON){for(let x=g-1;x>=0;x--)if(t[x].type!==k.WHITESPACE){if(t[x].type===k.FIELD_NAME)return t[x].value;break}}break}}}}return""};if((r==null?void 0:r.type)===k.COLON){let o="";const h=t.indexOf(r);for(let m=h-1;m>=0;m--){if(t[m].type===k.FIELD_NAME){o=t[m].value;break}if(t[m].type!==k.WHITESPACE)break}if(!o&&a===r.start)return{type:"FIELD_NAME",partial:"",token:r};if(a===r.end){for(let m=h+1;m<t.length;m++)if(t[m].type!==k.WHITESPACE){if(t[m].type===k.VALUE||t[m].type===k.QUOTED_VALUE||t[m].type===k.WILDCARD||t[m].type===k.RANGE)return{type:"FIELD_VALUE",partial:t[m].type===k.QUOTED_VALUE?t[m].value.slice(1,t[m].value.endsWith('"')||t[m].value.endsWith("'")?-1:void 0):t[m].value,fieldName:o,token:t[m]};break}}return{type:"FIELD_VALUE",partial:"",fieldName:o,token:void 0}}if((r==null?void 0:r.type)===k.SAVED_SEARCH)return{type:"SAVED_SEARCH",partial:r.value.slice(1),token:r};if((r==null?void 0:r.type)===k.HISTORY_REF)return{type:"HISTORY_REF",partial:r.value.slice(1),token:r};if((r==null?void 0:r.type)===k.RANGE){const o=t.indexOf(r);let h="";for(let m=o-1;m>=0;m--){if(t[m].type===k.FIELD_NAME){h=t[m].value;break}if(!(t[m].type===k.WHITESPACE||t[m].type===k.COLON))break}return{type:"RANGE",partial:"",fieldName:h,token:r}}if((i==null?void 0:i.type)===k.COLON||(i==null?void 0:i.type)===k.COMPARISON_OP){const o=t.indexOf(i);let h="";for(let m=o-1;m>=0;m--){if(t[m].type===k.FIELD_NAME){h=t[m].value;break}if(!(t[m].type===k.WHITESPACE||t[m].type===k.COLON||t[m].type===k.COMPARISON_OP))break}return r&&(r.type===k.VALUE||r.type===k.QUOTED_VALUE||r.type===k.WILDCARD)?{type:"FIELD_VALUE",partial:r.type===k.QUOTED_VALUE?r.value.slice(1,r.value.endsWith('"')||r.value.endsWith("'")?-1:void 0):r.value,fieldName:h,token:r}:{type:"FIELD_VALUE",partial:"",fieldName:h,token:i}}if((r==null?void 0:r.type)===k.VALUE||(r==null?void 0:r.type)===k.QUOTED_VALUE||(r==null?void 0:r.type)===k.WILDCARD){const o=t.indexOf(r);for(let h=o-1;h>=0;h--)if(t[h].type!==k.WHITESPACE){if(t[h].type===k.COLON||t[h].type===k.COMPARISON_OP){let m="";for(let p=h-1;p>=0;p--){if(t[p].type===k.FIELD_NAME){m=t[p].value;break}if(!(t[p].type===k.WHITESPACE||t[p].type===k.COLON||t[p].type===k.COMPARISON_OP))break}return{type:"FIELD_VALUE",partial:r.type===k.QUOTED_VALUE?r.value.slice(1,r.value.endsWith('"')||r.value.endsWith("'")?-1:void 0):r.value,fieldName:m,token:r}}break}}if((r==null?void 0:r.type)===k.QUOTED_VALUE)return{type:"FIELD_NAME",partial:r.value,token:r};if((r==null?void 0:r.type)===k.FIELD_NAME||(r==null?void 0:r.type)===k.VALUE){const o=u(t.indexOf(r));return o?{type:"FIELD_VALUE",partial:r.value,fieldName:o,token:r}:{type:"FIELD_NAME",partial:r.value,token:r}}if((i==null?void 0:i.type)===k.PREFIX_OP){const o=u(t.indexOf(i));return o?{type:"FIELD_VALUE",partial:"",fieldName:o,token:void 0}:{type:"FIELD_NAME",partial:"",token:void 0}}if(i&&(i.type===k.AND||i.type===k.OR||i.type===k.NOT)){const o=u(t.indexOf(i));return o?{type:"FIELD_VALUE",partial:"",fieldName:o,token:void 0}:{type:"FIELD_NAME",partial:"",token:void 0}}if(t.length===0||t.every(o=>o.type===k.WHITESPACE))return{type:"EMPTY",partial:""};if((r==null?void 0:r.type)===k.LPAREN||(i==null?void 0:i.type)===k.LPAREN){const o=(r==null?void 0:r.type)===k.LPAREN?r:i,h=u(t.indexOf(o));return h?{type:"FIELD_VALUE",partial:"",fieldName:h,token:void 0}:{type:"FIELD_NAME",partial:"",token:void 0}}if((r==null?void 0:r.type)===k.TILDE||(r==null?void 0:r.type)===k.BOOST)return{type:"OPERATOR",partial:""};if(i&&(i.type===k.VALUE||i.type===k.QUOTED_VALUE||i.type===k.RPAREN||i.type===k.RANGE||i.type===k.TILDE||i.type===k.BOOST)){const o=u(t.indexOf(i));return o?{type:"FIELD_VALUE",partial:"",fieldName:o,token:void 0}:{type:"OPERATOR",partial:""}}return{type:"FIELD_NAME",partial:"",token:void 0}}};function Mh(t,a){if(a<t.start||a>t.end)return null;if(t.type==="BooleanExpr"){const r=Mh(t.left,a);if(r)return r;const i=Mh(t.right,a);return i||null}return t}function H2(t,a,r){if(!t)return null;const i=Mh(t,r);if(!i)return null;let u=i.start,o=i.end;const h=a.slice(o).match(/^(\s+(?:AND|OR|&&|\|\|)\s+|\s+)(?=\S)/i);if(h)return o+=h[0].length,{start:u,end:o};const m=a.slice(0,u).match(/(\s+(?:AND|OR|&&|\|\|)\s+|\s+)$/i);return m&&m.index!==void 0&&m.index>0&&(u-=m[0].length),{start:u,end:o}}var B2={fieldName:"#0550ae",fieldValue:"#1a7f37",operator:"#cf222e",booleanOp:"#8250df",quoted:"#0a3069",paren:"#656d76",savedSearch:"#bf8700",historyRef:"#6639ba",wildcard:"#953800",error:"#cf222e",background:"#ffffff",text:"#1f2328",placeholder:"#656d76",cursor:"#1f2328",dropdownSelected:"#0969da",dropdownHover:"#f6f8fa",regexDelimiter:"#cf222e",regexCharClass:"#0550ae",regexGroup:"#656d76",regexEscape:"#953800",regexQuantifier:"#8250df",regexAnchor:"#cf222e",regexAlternation:"#8250df",regexText:"#0a3069",matchedParenBg:"#fff3cd",warning:"#d4a72c",valueTypes:{}},$2={fontFamily:"'SF Mono', 'Fira Code', 'Fira Mono', Menlo, Consolas, monospace",fontSize:"14px",lineHeight:"1.5",inputMinHeight:"40px",inputPadding:"8px 12px",inputBorderWidth:"2px",inputBorderColor:"#d0d7de",inputBorderRadius:"8px",inputFocusBorderColor:"#0969da",inputFocusShadow:"0 0 0 3px rgba(9, 105, 218, 0.3)",dropdownBorderColor:"#d0d7de",dropdownBorderRadius:"8px",dropdownShadow:"0 8px 24px rgba(0, 0, 0, 0.12)",dropdownMaxHeight:"300px",dropdownMinWidth:"200px",dropdownMaxWidth:"400px",dropdownZIndex:99999,dropdownItemPadding:"6px 12px",dropdownItemFontSize:"13px",dropdownItemContentGap:"8px",typeBadgeBg:"#eef1f5",typeBadgeSelectedBg:"rgba(255,255,255,0.2)",typeBadgeColor:"#656d76",typeBadgeSelectedColor:"#ffffff"},q2=["AND","OR","NOT"];function Ky(t){return t.replace(/\r\n/g,`
|
|
200
200
|
`).replace(/\r/g,`
|
package/web-ui-dist/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Agent Plan</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-BQmx1zqk.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="/assets/index-Jy8Yy6I4.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|