@peasant-labs/fairtrade 0.0.34 → 0.0.36
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/lib/{GraphLegend-BJuccGWD.js → GraphLegend-7PmEpBZQ.js} +0 -1
- package/dist/lib/analytics.js +1 -5
- package/dist/lib/commons.js +1006 -1021
- package/dist/lib/components.css +1 -1
- package/dist/lib/graph.css +1 -1
- package/dist/lib/graph.js +5 -11
- package/dist/lib/tokens.css +2 -2
- package/dist/lib/tokens.json +2 -2
- package/dist/lib/types/AppSidebar.d.ts +90 -12
- package/dist/lib/types/SettingsNav.d.ts +58 -0
- package/dist/lib/types/commons/Collectives.d.ts +2 -46
- package/dist/lib/types/index.d.ts +6 -1
- package/dist/lib/{ui-BH2dwC8S.js → ui-CfdUlwCE.js} +1868 -1710
- package/dist/lib/ui.js +4 -4
- package/package.json +5 -3
package/dist/lib/graph.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer graph{.gmp-root{background:var(--canvas);min-width:0;height:100%;min-height:0;font-family:var(--font-body);--gmp-map-pad-x:max(var(--sp-4), calc((100% - 1360px) / 2));flex-direction:column;display:flex}.gmp-map-canvas-region{border:var(--bd);background:var(--canvas);height:100%;min-height:0;position:relative}.gmp-map-legend{align-items:center;gap:var(--sp-4);row-gap:var(--sp-1);margin-top:var(--sp-2);flex-wrap:wrap;display:flex}.gmp-map-swatch{width:10px;height:10px;margin-right:var(--sp-1);vertical-align:middle;border:1px solid var(--rule-strong);background:var(--surface-elev);display:inline-block}.gmp-map-swatch--empty{border-color:var(--ink-5);background:var(--surface)}.gmp-map-swatch--edge{border:0;border-top:1px solid var(--rule-strong);background:0 0;width:16px;height:0;margin-top:-1px}.gmp-map-legend-danger{color:var(--danger)}.gmp-navigator{background:var(--canvas);min-height:100%;color:var(--ink);flex-direction:column;display:flex}.gmp-navigator-head{justify-content:space-between;align-items:flex-start;gap:var(--sp-4);padding:var(--sp-4);border-bottom:var(--bd);background:var(--surface-2);display:flex}.gmp-navigator-kicker{font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-strong);margin:0;font-weight:600}.gmp-navigator-note{max-width:var(--measure-prose);margin:var(--sp-1) 0 0;font-family:var(--font-body);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--ink-3)}.gmp-navigator-search{min-width:min(100%, var(--rail-w));height:var(--control-h);border:var(--bd-strong);background:var(--surface);align-items:center;display:flex}.gmp-navigator-search:focus-within{border-color:var(--amber-dim);box-shadow:inset 0 0 0 var(--focus-ring-width) var(--focus-ring)}.gmp-navigator-search>.lucide{width:var(--ic-sm);height:var(--ic-sm);margin-inline:var(--sp-2);color:var(--ink-3)}.gmp-navigator-search input{min-width:0;height:100%;padding:0 var(--sp-2) 0 0;color:var(--ink);font-family:var(--font-mono);font-size:var(--fs-label);background:0 0;border:0;outline:0;flex:1}.gmp-navigator-search input::placeholder{color:var(--ink-4);text-transform:lowercase}.gmp-navigator-body{grid-template-columns:minmax(0, 1fr) var(--rail-w);min-height:0;display:grid}.gmp-navigator-tree{min-height:calc(var(--control-h) * 8);padding:var(--sp-3) 0;border-right:var(--bd)}.gmp-navigator-row-wrap{grid-template-columns:var(--control-h-sm) minmax(0, 1fr);align-items:center;gap:var(--sp-2);min-height:var(--control-h);padding:var(--sp-2) var(--sp-4) var(--sp-2) calc(var(--sp-4) + var(--gmp-tree-depth) * var(--sp-5));border-left:var(--stroke-emphasis) solid transparent;display:grid}.gmp-navigator-row-wrap:hover{background:var(--surface-hover)}.gmp-navigator-row-wrap:has(.gmp-navigator-row:focus-visible){box-shadow:inset 0 0 0 var(--focus-ring-width) var(--focus-ring)}.gmp-navigator-row-wrap[data-selected=true]{border-left-color:var(--amber);background:var(--surface-elev)}.gmp-navigator-row{grid-template-columns:var(--ic-sm) minmax(0, 1fr) auto;align-items:center;gap:var(--sp-2);cursor:pointer;outline:0;min-width:0;display:grid}.gmp-navigator-row>.lucide{width:var(--ic-sm);height:var(--ic-sm);color:var(--ink-3)}.gmp-navigator-disclosure,.gmp-navigator-disclosure-placeholder{width:var(--control-h-sm);height:var(--control-h-sm)}.gmp-navigator-disclosure{color:var(--ink-3);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;margin:0;padding:0;display:inline-flex}.gmp-navigator-disclosure:hover{background:var(--surface-hover);color:var(--ink)}.gmp-navigator-disclosure:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset)}.gmp-navigator-disclosure[aria-disabled=true]{cursor:default;opacity:.6}.gmp-navigator-chevron{visibility:hidden}@media (prefers-reduced-motion:no-preference){.gmp-navigator-chevron{transition:transform var(--dur-1) var(--ease-standard)}}.gmp-navigator-disclosure[aria-expanded] .gmp-navigator-chevron{visibility:visible}.gmp-navigator-disclosure[aria-expanded=true] .gmp-navigator-chevron{transform:rotate(90deg)}.gmp-navigator-path{white-space:normal;overflow-wrap:anywhere;min-width:0;font-size:var(--fs-sm);line-height:var(--lh-mono);color:var(--ink)}.gmp-navigator-meta{gap:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-label);font-variant-numeric:tabular-nums;color:var(--ink-4);display:flex}.gmp-navigator-actions{padding:var(--sp-4);background:var(--surface)}.gmp-navigator-selected{color:var(--ink-strong);overflow-wrap:anywhere;margin:0;font-weight:600}.gmp-navigator-selected-path{margin:var(--sp-1) 0 var(--sp-4);color:var(--ink-4);font-family:var(--font-mono);font-size:var(--fs-label);overflow-wrap:anywhere}.gmp-navigator-action{align-items:center;gap:var(--sp-2);width:100%;min-height:var(--control-h);padding:var(--sp-2) var(--sp-3);border:var(--bd-strong);color:var(--ink-2);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;cursor:pointer;background:0 0;display:flex}.gmp-navigator-action+.gmp-navigator-action{margin-top:var(--sp-2)}.gmp-navigator-action:hover{background:var(--surface-hover);color:var(--ink)}.gmp-navigator-action:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset)}.gmp-navigator-action>.lucide{width:var(--ic-sm);height:var(--ic-sm)}.gmp-navigator-action--primary{border-color:var(--amber-dim);color:var(--amber)}.gmp-navigator-empty{padding:var(--sp-4);color:var(--ink-4);font-size:var(--fs-sm);line-height:var(--lh-body);margin:0}.gmp-navigator-missing{padding:var(--sp-3) var(--sp-4);border-bottom:var(--bd);color:var(--clay);font-size:var(--fs-sm);margin:0}.gmp-navigator-missing button{color:var(--ink);cursor:pointer;background:0 0;border:0;text-decoration:underline}@media (width<768px){.gmp-navigator-head{flex-direction:column}.gmp-navigator-search{width:100%}.gmp-navigator-body{grid-template-columns:1fr}.gmp-navigator-tree{border-right:0;border-bottom:var(--bd)}.gmp-navigator-row{grid-template-columns:var(--ic-sm) minmax(0, 1fr)}.gmp-navigator-meta{gap:var(--sp-2);flex-wrap:wrap;grid-column:2}}@media (prefers-reduced-motion:reduce){.gmp-navigator-chevron{transition:none}}.gmp-toolbar-spacer{flex:1}.gmp-rank-toolbar{align-items:center;gap:var(--sp-3);padding:var(--sp-3);border-bottom:var(--bd);flex-wrap:wrap;display:flex}.gmp-scent-filter{gap:var(--sp-1);flex-wrap:wrap;display:inline-flex}.gmp-rank-overflow{min-height:var(--target-min);padding:var(--sp-2) var(--sp-3);border:0;border-top:var(--bd);background:var(--surface);color:var(--ink-3);font-family:var(--font-mono);font-size:var(--fs-label);text-align:left;cursor:pointer;margin:0}.gmp-rank-overflow:hover{background:var(--surface-hover);color:var(--ink-2)}.gmp-presentation-switch{min-height:var(--control-h-sm);border:var(--bd-strong);display:inline-flex}.gmp-presentation-switch button{min-height:var(--target-min);padding:0 var(--sp-3);border:0;border-left:var(--bd);color:var(--ink-3);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;cursor:pointer;background:0 0}.gmp-presentation-switch button:first-child{border-left:0}.gmp-presentation-switch button:hover{background:var(--surface-hover);color:var(--ink)}.gmp-presentation-switch button[aria-pressed=true]{box-shadow:inset var(--stroke-emphasis) 0 0 var(--amber-dim);background:var(--surface-elev);color:var(--ink-strong)}.gmp-presentation-switch button:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset-inset)}@media (width<768px){.gmp-toolbar-spacer{display:none}}.gmp-rail-inner{border:0}.gmp-rail-pad{padding:var(--sp-3) var(--sp-4)}.gmp-root .rs-sec:has(.gmp-rail-inner){padding:0!important}.gmp-root .rs-sec-body:has(>.gmp-rail-inner){padding:0!important}.gmp-root .rs-sec-body>.gmp-rail-inner>.sb-sec:last-child{border-bottom:0}.gmp-coverage{gap:var(--sp-2);flex-direction:column;display:flex}.gmp-coverage-top{justify-content:space-between;align-items:baseline;gap:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-2);display:flex}.gmp-coverage-top>.label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.gmp-coverage-pct{white-space:nowrap;color:var(--ink-strong);flex:none;font-weight:600}.gmp-coverage-bar{background:var(--surface-2);border:1px solid var(--rule);height:6px}.gmp-coverage-bar>span{background:var(--amber-dim);height:100%;display:block}.gmp-coverage-sub{font-size:var(--fs-label);color:var(--ink-4)}.gmp-tasklist,.gmp-convos,.gmp-coupling{padding:var(--sp-1) 0;margin:0;list-style:none}.gmp-task-row{align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-4);border:0;border-left:var(--stroke-emphasis) solid transparent;text-align:left;cursor:pointer;min-height:var(--target-min);background:0 0;grid-template-columns:auto minmax(0,1fr) auto;display:grid}.gmp-task-row:hover,.gmp-task-row:focus-visible{background:var(--surface-hover);border-left-color:var(--amber);outline:none}.gmp-task-row:focus-visible{box-shadow:inset 0 0 0 var(--focus-ring-width) var(--focus-ring)}.gmp-task-title{font-family:var(--font-body);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--ink);overflow-wrap:anywhere}.gmp-task-when{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-4);white-space:nowrap}.gmp-outcome{white-space:nowrap;flex:none}.gmp-rail-filter{margin:0}.gmp-rail-filter .input{height:var(--control-h-sm)}.gmp-showall{align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-4);border:0;border-top:var(--bd);color:var(--amber);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;text-align:left;cursor:pointer;background:0 0;display:flex}.gmp-showall:hover{background:var(--surface-hover);color:var(--amber-bright)}.gmp-rail-node-head{padding:var(--sp-3) var(--sp-4)}.gmp-rail-close{width:var(--control-h-sm);height:var(--control-h-sm);border:var(--bd-strong);color:var(--ink-3);cursor:pointer;background:0 0;justify-content:center;align-items:center;display:inline-flex}.gmp-rail-close:hover{color:var(--ink);border-color:var(--amber-dim)}.gmp-rail-name{margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--ink-strong);word-break:break-all}.gmp-rail-meta{gap:var(--sp-3);margin-top:var(--sp-2);flex-wrap:wrap;display:flex}.gmp-connects{gap:var(--sp-3);flex-direction:column;display:flex}.gmp-connect-grp{gap:var(--sp-2);flex-direction:column;display:flex}.gmp-connect-chips{gap:var(--sp-2)}.gmp-connect-chip{cursor:pointer;max-width:100%}.gmp-connect-chip:hover{border-color:var(--amber-dim);color:var(--ink)}.gmp-connect-chip .mono{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.gmp-convo-task{border-bottom:var(--bd)}.gmp-convo-task:last-child{border-bottom:0}.gmp-convo-task-btn{width:100%;padding:var(--sp-3) var(--sp-4);text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;gap:3px;display:flex}.gmp-convo-task-btn:hover{background:var(--surface-hover)}.gmp-convo-task-btn:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset-inset)}.gmp-convo-task-top{align-items:center;gap:var(--sp-2);display:flex}.gmp-convo-task-title{font-family:var(--font-body);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--ink);overflow-wrap:anywhere}.gmp-retry{color:var(--amber);flex:none;align-items:center;margin-left:auto;display:inline-flex}.gmp-retry .lucide{width:var(--ic-sm);height:var(--ic-sm)}.gmp-convo-task-sub{font-size:var(--fs-label);color:var(--ink-4);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.gmp-convo-commit{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-4);background:var(--surface-2);border-bottom:var(--bd);font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-3);display:flex}.gmp-convo-commit .lucide{color:var(--ink-4);width:var(--ic-sm);height:var(--ic-sm);flex:none}.gmp-commit-hash{color:var(--ink-2);flex:none}.gmp-commit-msg{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.gmp-label-chips{gap:var(--sp-1);flex-wrap:wrap;display:flex}.gmp-coupling-row{align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-4);text-align:left;cursor:pointer;background:0 0;border:0;display:flex}.gmp-coupling-row:hover{background:var(--surface-hover)}.gmp-coupling-row:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset-inset)}.gmp-coupling-row .lucide{color:var(--ink-5);flex:none}.gmp-coupling-id{font-size:var(--fs-label);color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.gmp-coupling-shared{font-size:var(--fs-label);color:var(--ink-4);white-space:nowrap;flex:none;margin-left:auto}.gmp-effort{gap:var(--sp-2);flex-direction:column;display:flex}.gmp-effort-row{justify-content:space-between;align-items:center;gap:var(--sp-3);display:flex}.gmp-effort-row b{color:var(--ink);font-weight:600}.gmp-effort-spend b{color:var(--amber)}.gmp-contribute{align-items:center;gap:var(--sp-2);width:100%;margin-top:var(--sp-3);padding:var(--sp-3) var(--sp-4);border:0;border-top:var(--bd);color:var(--amber);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;text-align:left;cursor:pointer;background:0 0;display:flex}.gmp-contribute:hover{background:var(--surface-hover);color:var(--amber-bright)}.gmp-contribute .lucide:last-child{margin-left:auto}.gmp-session-destination-title{font-family:var(--font-display);font-size:var(--fs-lg);font-weight:700;line-height:var(--lh-body);color:var(--ink-strong);overflow-wrap:anywhere;margin:0}.gmp-session-destination-context{margin:var(--sp-2) 0 var(--sp-4);color:var(--ink-3);font-size:var(--fs-sm)}.gmp-session-destination-summary{border:var(--bd);background:var(--surface-2);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;display:grid}.gmp-session-destination-summary>div{gap:var(--sp-3);min-height:var(--control-h);padding:var(--sp-3) var(--sp-4);border-bottom:var(--bd);grid-template-columns:minmax(0,1fr) minmax(0,2fr);align-items:baseline;display:grid}.gmp-session-destination-summary>div:nth-last-child(-n+2){border-bottom:0}.gmp-session-destination-summary>div:nth-child(odd){border-right:var(--bd)}.gmp-session-destination-summary dt{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-4)}.gmp-session-destination-summary dd{overflow-wrap:anywhere;min-width:0;font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-2);margin:0}@media (width<768px){.gmp-session-destination-summary{grid-template-columns:minmax(0,1fr)}.gmp-session-destination-summary>div{border-right:0}.gmp-session-destination-summary>div:nth-last-child(-n+2){border-bottom:var(--bd)}.gmp-session-destination-summary>div:last-child{border-bottom:0}}.gmp-changes-root{--gmp-pad-x:max(var(--sp-4), calc((100% - 1360px) / 2));max-width:none;margin-inline:0;overflow:auto}.gmp-changes-head{justify-content:space-between;align-items:flex-start;gap:var(--sp-4);padding:var(--sp-4) var(--gmp-pad-x);border-bottom:var(--bd);background:var(--surface);flex:none;display:flex}.gmp-changes-sub{font-size:var(--fs-label);color:var(--ink-4);margin-top:var(--sp-1)}.gmp-changes-body{padding:var(--sp-4) var(--gmp-pad-x);min-width:0}.gmp-unlinked-sessions{margin-top:var(--sp-5);border-top:var(--bd);padding-top:var(--sp-4)}.gmp-unlinked-sessions-head{padding:0 0 var(--sp-2);border:0}.gmp-unlinked-sessions-list{gap:var(--sp-2);flex-wrap:wrap;display:flex}.gmp-unlinked-session{min-height:var(--sp-6);align-items:center;gap:var(--sp-2);max-width:100%;padding:var(--sp-1) var(--sp-2);border:var(--bd);background:var(--surface-2);color:var(--ink-2);font-family:var(--font-mono);font-size:var(--fs-label);text-align:left;cursor:pointer;display:inline-flex}.gmp-unlinked-session:hover{background:var(--surface-hover)}.gmp-unlinked-session:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset)}.gmp-merged-chip{align-items:center;gap:var(--sp-2);padding:3px var(--sp-3);background:var(--surface-2);border:1px dashed var(--ink-5);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-4);cursor:pointer;z-index:3;display:inline-flex;position:absolute}.gmp-merged-chip:hover{color:var(--ink-2);border-color:var(--rule-strong)}.gmp-merged-chip:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset)}.gmp-merged-chip .lucide{width:var(--ic-sm);height:var(--ic-sm);flex:none}.gmp-merged-sec{margin-top:var(--sp-5);border-top:var(--bd);padding-top:var(--sp-4)}.gmp-merged-head{padding:0 0 var(--sp-2);border:0}.gmp-merged-list{align-items:center;gap:var(--sp-3);flex-wrap:wrap;display:flex}.gmp-merged-revert{position:static}.gmp-legend-item{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-3);display:inline-flex}.gmp-legend-dim{color:var(--ink-4)}.gmp-changes-legend{align-items:center;gap:var(--sp-4);margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:var(--bd);flex-wrap:wrap;display:flex}.gmp-changes-legend .cg-dot{flex:none;position:static!important;transform:none!important}.gmp-changes-legend .cg-dot-filled{place-items:center;display:inline-grid}.gmp-changes-legend .cg-spark{position:static!important;transform:none!important}@media (width<1440px){.gmp-merged-chip{margin-top:var(--sp-2);position:static!important}}@media (width<768px){.gmp-changes-body{padding:var(--sp-3);overflow:hidden}.gmp-merged-chip{margin-top:var(--sp-2);position:static!important}}.gmp-detail-root{padding:var(--sp-5);gap:0;overflow:auto}.gmp-detail-head{margin-bottom:var(--sp-5)}.gmp-detail-title{font-family:var(--font-display);color:var(--ink-strong);font-weight:700;font-size:var(--fs-lg);margin-top:var(--sp-2)}.gmp-caption{margin-top:var(--sp-4);color:var(--ink-2);font-family:var(--font-body);font-size:var(--fs-body);line-height:var(--lh-body);max-width:var(--measure-prose)}.gmp-frag{padding:0 var(--sp-1);border:0;border-bottom:var(--stroke-hairline) dotted var(--amber-dim);color:var(--amber);font-family:var(--font-mono);font-size:var(--fs-body);cursor:pointer;background:0 0;display:inline}.gmp-frag:hover{color:var(--amber-bright);border-bottom-style:solid}.gmp-frag-on{color:var(--amber-bright);background:color-mix(in srgb, var(--amber) 12%, transparent);border-bottom-style:solid}.gmp-caption-hint{margin-top:var(--sp-2);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-4);display:block}.gmp-signals{gap:var(--sp-3);margin-bottom:var(--sp-4);flex-wrap:wrap;display:flex}.gmp-signal{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:var(--surface);border:var(--bd);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-3);display:inline-flex}.gmp-signal .lucide{color:var(--ink-4);width:var(--ic-sm);height:var(--ic-sm)}.gmp-signal b{color:var(--ink);font-weight:600}.gmp-signal .mono{text-transform:none;color:var(--ink-2)}.gmp-signal-warn{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--rule))}.gmp-signal-warn .lucide,.gmp-signal-warn b{color:var(--danger)}.gmp-totals{gap:var(--sp-4);padding:var(--sp-3) 0;border-top:var(--bd);border-bottom:var(--bd);margin-bottom:var(--sp-5);flex-wrap:wrap;display:flex}.gmp-add{color:var(--add-rail)}.gmp-del{color:var(--del-rail)}.gmp-detail-sec{margin-bottom:var(--sp-5)}.gmp-detail-sechead{padding:0 0 var(--sp-3);border:0}.gmp-label-chip{align-items:center;gap:var(--sp-1);padding:0 var(--sp-2);border:var(--bd-strong);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-2);display:inline-flex}.gmp-label-chip .lucide{color:var(--amber);width:var(--ic-sm);height:var(--ic-sm)}.gmp-files{flex-direction:column;display:flex}.gmp-file{border:var(--bd)}.gmp-file+.gmp-file{border-top:0}.gmp-file-head{align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-3);background:var(--surface);text-align:left;cursor:pointer;border:0;display:flex}.gmp-file-head:hover{background:var(--surface-hover)}.gmp-file-head:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset-inset)}.gmp-file-head .lucide:first-child{color:var(--ink-4);flex:none}.gmp-file-path{font-size:var(--fs-sm);color:var(--ink);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.gmp-file-status{height:22px;padding:0 var(--sp-2);flex:none}.gmp-file-convos{color:var(--ink-4);flex:none}.gmp-file-convos .lucide{color:var(--ink-4)}.gmp-file-body{border-top:var(--bd);background:var(--canvas)}.gmp-diff-state{padding:var(--sp-2) var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-4)}.gmp-diff-error{color:var(--danger)}.gmp-hunk{border-bottom:var(--bd)}.gmp-hunk:last-child{border-bottom:0}.gmp-hunk-attrib{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:var(--surface-2);font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-3);display:flex}.gmp-hunk-attrib .lucide{color:var(--ink-5);flex:none}.gmp-hunk-from{color:var(--ink-4);text-transform:lowercase;flex:none}.gmp-hunk-link{color:var(--amber);font:inherit;cursor:pointer;text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;min-width:0;padding:0;overflow:hidden}.gmp-hunk-link:hover{color:var(--amber-bright);text-underline-offset:2px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.gmp-hunk-hash{color:var(--ink-4);flex:none;margin-left:auto}.gmp-hunk-diff{border:0}.gmp-annot{align-items:center;gap:var(--sp-3);flex-wrap:wrap;display:flex;position:relative}.gmp-annot-chip{min-height:var(--target-min);padding:0 var(--sp-1) 0 var(--sp-2);font-size:var(--fs-label)}.gmp-annot-x{width:16px;height:16px;color:var(--ink-4);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;margin-left:2px;display:inline-flex}.gmp-annot-x:hover{color:var(--ink)}.gmp-annot-add{align-items:center;gap:var(--sp-2);height:var(--control-h-sm);padding:0 var(--sp-3);border:var(--bd-strong);color:var(--ink-3);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;cursor:pointer;background:0 0;display:inline-flex}.gmp-annot-add:hover{color:var(--ink);border-color:var(--amber-dim)}.gmp-annot-add .lucide{color:var(--amber);width:var(--ic-sm);height:var(--ic-sm)}.gmp-annot-pop{z-index:var(--z-dropdown);gap:var(--sp-2);width:min(280px,90vw);padding:var(--sp-3);background:var(--surface-elev);border:var(--bd-strong);box-shadow:var(--overlay-shadow);flex-direction:column;display:flex;position:absolute;top:calc(100% + 4px);left:0}.gmp-annot-pop .input{height:var(--control-h-sm)}.gmp-annot-pop-foot{justify-content:flex-end;gap:var(--sp-2);display:flex}.gmp-exits{align-items:center;gap:var(--sp-3);padding-top:var(--sp-4);border-top:var(--bd);flex-wrap:wrap;display:flex}.gmp-gitdiff{padding:0 var(--sp-3);height:var(--control-h);background:var(--canvas);border:var(--bd);font-size:var(--fs-label);color:var(--ink-2);align-items:center;display:inline-flex}.gmp-boundary{margin-top:var(--sp-4);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-4);border-left:var(--stroke-emphasis) solid var(--rule-strong);padding-left:var(--sp-3);line-height:var(--lh-mono)}.tb-graph{background:var(--canvas);--edge:var(--rule-strong);--edge-error:var(--danger);flex-direction:column;height:100%;display:flex;position:relative}.tb-graph-flow{flex:1;min-height:0;position:relative}.tb-graph .react-flow__attribution{display:none}.tb-graph-minimap{border:var(--bd)!important;background:var(--surface)!important;width:160px!important;height:100px!important;bottom:.75rem!important;left:3rem!important}.tb-graph-controls{z-index:var(--z-sticky);border:var(--bd);background:var(--surface);flex-direction:column;display:flex;position:absolute;bottom:.75rem;left:.75rem}.tb-graph-controls-btn{width:var(--control-h-sm);height:var(--control-h-sm);border:0;border-bottom:var(--bd);color:var(--ink-2);cursor:pointer;background:0 0;justify-content:center;align-items:center;display:inline-flex}.tb-graph-controls-btn:last-child{border-bottom:0}.tb-graph-controls-btn:hover{background:var(--surface-hover);color:var(--ink)}.tb-graph-controls-btn:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset-inset)}.tb-graph-legend{z-index:var(--z-sticky);padding:var(--sp-2) var(--sp-3);border:var(--bd);background:var(--surface);position:absolute;top:.75rem;right:.75rem}.tb-gnode-handle{background:var(--rule-strong)!important;border:0!important;width:6px!important;height:6px!important}.tb-gnode-handle-top{top:-3px!important}.tb-gnode-handle-bottom{bottom:-3px!important}.tb-gnode-handle-right{top:50%!important;right:-3px!important;transform:translateY(-50%)!important}.tb-gnode-handle-left{top:50%!important;left:-3px!important;transform:translateY(-50%)!important}@media (prefers-reduced-motion:no-preference){.tb-graph-controls-btn{transition:background var(--dur-1) var(--ease-standard), color var(--dur-1) var(--ease-standard)}}}
|
|
1
|
+
@layer graph{.gmp-root{background:var(--canvas);min-width:0;height:100%;min-height:0;font-family:var(--font-body);--gmp-map-pad-x:max(var(--sp-4), calc((100% - 1360px) / 2));flex-direction:column;display:flex}.gmp-map-canvas-region{border:var(--bd);background:var(--canvas);height:100%;min-height:0;position:relative}.gmp-map-legend{align-items:center;gap:var(--sp-4);row-gap:var(--sp-1);margin-top:var(--sp-2);flex-wrap:wrap;display:flex}.gmp-map-swatch{width:10px;height:10px;margin-right:var(--sp-1);vertical-align:middle;border:1px solid var(--rule-strong);background:var(--surface-2);display:inline-block}.gmp-map-swatch--empty{border-color:var(--ink-5);background:var(--surface)}.gmp-map-swatch--edge{border:0;border-top:1px solid var(--rule-strong);background:0 0;width:16px;height:0;margin-top:-1px}.gmp-map-legend-danger{color:var(--danger)}.gmp-navigator{background:var(--canvas);min-height:100%;color:var(--ink);flex-direction:column;display:flex}.gmp-sr{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.gmp-navigator-head{justify-content:space-between;align-items:flex-start;gap:var(--sp-4);padding:var(--sp-4);border-bottom:var(--bd);background:var(--surface-2);display:flex}.gmp-navigator-search{min-width:min(100%, var(--rail-w));height:var(--control-h);border:var(--bd-strong);background:var(--surface);align-items:center;display:flex}.gmp-navigator-search:focus-within{border-color:var(--amber-dim);box-shadow:inset 0 0 0 var(--focus-ring-width) var(--focus-ring)}.gmp-navigator-search>.lucide{width:var(--ic-sm);height:var(--ic-sm);margin-inline:var(--sp-2);color:var(--ink-3)}.gmp-navigator-search input{min-width:0;height:100%;padding:0 var(--sp-2) 0 0;color:var(--ink);font-family:var(--font-mono);font-size:var(--fs-label);background:0 0;border:0;outline:0;flex:1}.gmp-navigator-search input::placeholder{color:var(--ink-4);text-transform:lowercase}.gmp-navigator-body{grid-template-columns:minmax(0, 1fr) var(--rail-w);min-height:0;display:grid}.gmp-navigator-tree{min-height:calc(var(--control-h) * 8);padding:var(--sp-3) 0;border-right:var(--bd)}.gmp-navigator-row-wrap{grid-template-columns:var(--control-h-sm) minmax(0, 1fr);align-items:center;gap:var(--sp-2);min-height:var(--control-h);padding:var(--sp-2) var(--sp-4) var(--sp-2) calc(var(--sp-4) + var(--gmp-tree-depth) * var(--sp-5));border-left:var(--stroke-emphasis) solid transparent;display:grid}.gmp-navigator-row-wrap:hover{background:var(--surface-hover)}.gmp-navigator-row-wrap:has(.gmp-navigator-row:focus-visible){box-shadow:inset 0 0 0 var(--focus-ring-width) var(--focus-ring)}.gmp-navigator-row-wrap[data-selected=true]{border-left-color:var(--amber);background:var(--surface-2)}.gmp-navigator-row{grid-template-columns:var(--ic-sm) minmax(0, 1fr) auto;align-items:center;gap:var(--sp-2);cursor:pointer;outline:0;min-width:0;display:grid}.gmp-navigator-row>.lucide{width:var(--ic-sm);height:var(--ic-sm);color:var(--ink-3)}.gmp-navigator-disclosure,.gmp-navigator-disclosure-placeholder{width:var(--control-h-sm);height:var(--control-h-sm)}.gmp-navigator-disclosure{color:var(--ink-3);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;margin:0;padding:0;display:inline-flex}.gmp-navigator-disclosure:hover{background:var(--surface-hover);color:var(--ink)}.gmp-navigator-disclosure:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset)}.gmp-navigator-disclosure[aria-disabled=true]{cursor:default;opacity:.6}.gmp-navigator-chevron{visibility:hidden}@media (prefers-reduced-motion:no-preference){.gmp-navigator-chevron{transition:transform var(--dur-1) var(--ease-standard)}}.gmp-navigator-disclosure[aria-expanded] .gmp-navigator-chevron{visibility:visible}.gmp-navigator-disclosure[aria-expanded=true] .gmp-navigator-chevron{transform:rotate(90deg)}.gmp-navigator-path{white-space:normal;overflow-wrap:anywhere;min-width:0;font-size:var(--fs-sm);line-height:var(--lh-mono);color:var(--ink)}.gmp-navigator-meta{gap:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-label);font-variant-numeric:tabular-nums;color:var(--ink-4);display:flex}.gmp-navigator-actions{padding:var(--sp-4);background:var(--surface)}.gmp-navigator-selected{color:var(--ink-strong);overflow-wrap:anywhere;margin:0;font-weight:600}.gmp-navigator-selected-path{margin:var(--sp-1) 0 var(--sp-4);color:var(--ink-4);font-family:var(--font-mono);font-size:var(--fs-label);overflow-wrap:anywhere}.gmp-navigator-action{align-items:center;gap:var(--sp-2);width:100%;min-height:var(--control-h);padding:var(--sp-2) var(--sp-3);border:var(--bd-strong);color:var(--ink-2);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;cursor:pointer;background:0 0;display:flex}.gmp-navigator-action+.gmp-navigator-action{margin-top:var(--sp-2)}.gmp-navigator-action:hover{background:var(--surface-hover);color:var(--ink)}.gmp-navigator-action:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset)}.gmp-navigator-action>.lucide{width:var(--ic-sm);height:var(--ic-sm)}.gmp-navigator-action--primary{border-color:var(--amber-dim);color:var(--amber)}.gmp-navigator-empty{padding:var(--sp-4);color:var(--ink-4);font-size:var(--fs-sm);line-height:var(--lh-body);margin:0}.gmp-navigator-missing{padding:var(--sp-3) var(--sp-4);border-bottom:var(--bd);color:var(--clay);font-size:var(--fs-sm);margin:0}.gmp-navigator-missing button{color:var(--ink);cursor:pointer;background:0 0;border:0;text-decoration:underline}@media (width<768px){.gmp-navigator-head{flex-direction:column}.gmp-navigator-search{width:100%}.gmp-navigator-body{grid-template-columns:1fr}.gmp-navigator-tree{border-right:0;border-bottom:var(--bd)}.gmp-navigator-row{grid-template-columns:var(--ic-sm) minmax(0, 1fr)}.gmp-navigator-meta{gap:var(--sp-2);flex-wrap:wrap;grid-column:2}}@media (prefers-reduced-motion:reduce){.gmp-navigator-chevron{transition:none}}.gmp-toolbar-spacer{flex:1}.gmp-rank-toolbar{align-items:center;gap:var(--sp-3);padding:var(--sp-3);border-bottom:var(--bd);flex-wrap:wrap;display:flex}.gmp-scent-filter{gap:var(--sp-1);flex-wrap:wrap;display:inline-flex}.gmp-rank-overflow{min-height:var(--target-min);padding:var(--sp-2) var(--sp-3);border:0;border-top:var(--bd);background:var(--surface);color:var(--ink-3);font-family:var(--font-mono);font-size:var(--fs-label);text-align:left;cursor:pointer;margin:0}.gmp-rank-overflow:hover{background:var(--surface-hover);color:var(--ink-2)}.gmp-presentation-switch{min-height:var(--control-h-sm);border:var(--bd-strong);display:inline-flex}.gmp-presentation-switch button{min-height:var(--target-min);padding:0 var(--sp-3);border:0;border-left:var(--bd);color:var(--ink-3);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;cursor:pointer;background:0 0}.gmp-presentation-switch button:first-child{border-left:0}.gmp-presentation-switch button:hover{background:var(--surface-hover);color:var(--ink)}.gmp-presentation-switch button[aria-pressed=true]{box-shadow:inset var(--stroke-emphasis) 0 0 var(--amber-dim);background:var(--surface-2);color:var(--ink-strong)}.gmp-presentation-switch button:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset-inset)}@media (width<768px){.gmp-toolbar-spacer{display:none}}.gmp-rail-inner{border:0}.gmp-rail-pad{padding:var(--sp-3) var(--sp-4)}.gmp-root .rs-sec:has(.gmp-rail-inner){padding:0!important}.gmp-root .rs-sec-body:has(>.gmp-rail-inner){padding:0!important}.gmp-root .rs-sec-body>.gmp-rail-inner>.sb-sec:last-child{border-bottom:0}.gmp-coverage{gap:var(--sp-2);flex-direction:column;display:flex}.gmp-coverage-top{justify-content:space-between;align-items:baseline;gap:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-2);display:flex}.gmp-coverage-top>.label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.gmp-coverage-pct{white-space:nowrap;color:var(--ink-strong);flex:none;font-weight:600}.gmp-coverage-bar{background:var(--surface-2);border:1px solid var(--rule);height:6px}.gmp-coverage-bar>span{background:var(--amber-dim);height:100%;display:block}.gmp-coverage-sub{font-size:var(--fs-label);color:var(--ink-4)}.gmp-tasklist,.gmp-convos,.gmp-coupling{padding:var(--sp-1) 0;margin:0;list-style:none}.gmp-task-row{align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-4);border:0;border-left:var(--stroke-emphasis) solid transparent;text-align:left;cursor:pointer;min-height:var(--target-min);background:0 0;grid-template-columns:auto minmax(0,1fr) auto;display:grid}.gmp-task-row:hover,.gmp-task-row:focus-visible{background:var(--surface-hover);border-left-color:var(--amber);outline:none}.gmp-task-row:focus-visible{box-shadow:inset 0 0 0 var(--focus-ring-width) var(--focus-ring)}.gmp-task-title{font-family:var(--font-body);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--ink);overflow-wrap:anywhere}.gmp-task-when{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-4);white-space:nowrap}.gmp-outcome{white-space:nowrap;flex:none}.gmp-rail-filter{margin:0}.gmp-rail-filter .input{height:var(--control-h-sm)}.gmp-showall{align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-4);border:0;border-top:var(--bd);color:var(--amber);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;text-align:left;cursor:pointer;background:0 0;display:flex}.gmp-showall:hover{background:var(--surface-hover);color:var(--amber-bright)}.gmp-rail-node-head{padding:var(--sp-3) var(--sp-4)}.gmp-rail-close{width:var(--control-h-sm);height:var(--control-h-sm);border:var(--bd-strong);color:var(--ink-3);cursor:pointer;background:0 0;justify-content:center;align-items:center;display:inline-flex}.gmp-rail-close:hover{color:var(--ink);border-color:var(--amber-dim)}.gmp-rail-name{margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--ink-strong);word-break:break-all}.gmp-rail-meta{gap:var(--sp-3);margin-top:var(--sp-2);flex-wrap:wrap;display:flex}.gmp-connects{gap:var(--sp-3);flex-direction:column;display:flex}.gmp-connect-grp{gap:var(--sp-2);flex-direction:column;display:flex}.gmp-connect-chips{gap:var(--sp-2)}.gmp-connect-chip{cursor:pointer;max-width:100%}.gmp-connect-chip:hover{border-color:var(--amber-dim);color:var(--ink)}.gmp-connect-chip .mono{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.gmp-convo-task{border-bottom:var(--bd)}.gmp-convo-task:last-child{border-bottom:0}.gmp-convo-task-btn{width:100%;padding:var(--sp-3) var(--sp-4);text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;gap:3px;display:flex}.gmp-convo-task-btn:hover{background:var(--surface-hover)}.gmp-convo-task-btn:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset-inset)}.gmp-convo-task-top{align-items:center;gap:var(--sp-2);display:flex}.gmp-convo-task-title{font-family:var(--font-body);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--ink);overflow-wrap:anywhere}.gmp-retry{color:var(--amber);flex:none;align-items:center;margin-left:auto;display:inline-flex}.gmp-retry .lucide{width:var(--ic-sm);height:var(--ic-sm)}.gmp-convo-task-sub{font-size:var(--fs-label);color:var(--ink-4);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.gmp-convo-commit{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-4);background:var(--surface-2);border-bottom:var(--bd);font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-3);display:flex}.gmp-convo-commit .lucide{color:var(--ink-4);width:var(--ic-sm);height:var(--ic-sm);flex:none}.gmp-commit-hash{color:var(--ink-2);flex:none}.gmp-commit-msg{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.gmp-label-chips{gap:var(--sp-1);flex-wrap:wrap;display:flex}.gmp-coupling-row{align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-4);text-align:left;cursor:pointer;background:0 0;border:0;display:flex}.gmp-coupling-row:hover{background:var(--surface-hover)}.gmp-coupling-row:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset-inset)}.gmp-coupling-row .lucide{color:var(--ink-5);flex:none}.gmp-coupling-id{font-size:var(--fs-label);color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.gmp-coupling-shared{font-size:var(--fs-label);color:var(--ink-4);white-space:nowrap;flex:none;margin-left:auto}.gmp-effort{gap:var(--sp-2);flex-direction:column;display:flex}.gmp-effort-row{justify-content:space-between;align-items:center;gap:var(--sp-3);display:flex}.gmp-effort-row b{color:var(--ink);font-weight:600}.gmp-effort-spend b{color:var(--amber)}.gmp-contribute{align-items:center;gap:var(--sp-2);width:100%;margin-top:var(--sp-3);padding:var(--sp-3) var(--sp-4);border:0;border-top:var(--bd);color:var(--amber);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;text-align:left;cursor:pointer;background:0 0;display:flex}.gmp-contribute:hover{background:var(--surface-hover);color:var(--amber-bright)}.gmp-contribute .lucide:last-child{margin-left:auto}.gmp-session-destination-title{font-family:var(--font-display);font-size:var(--fs-lg);font-weight:700;line-height:var(--lh-body);color:var(--ink-strong);overflow-wrap:anywhere;margin:0}.gmp-session-destination-context{margin:var(--sp-2) 0 var(--sp-4);color:var(--ink-3);font-size:var(--fs-sm)}.gmp-session-destination-summary{border:var(--bd);background:var(--surface-2);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;display:grid}.gmp-session-destination-summary>div{gap:var(--sp-3);min-height:var(--control-h);padding:var(--sp-3) var(--sp-4);border-bottom:var(--bd);grid-template-columns:minmax(0,1fr) minmax(0,2fr);align-items:baseline;display:grid}.gmp-session-destination-summary>div:nth-last-child(-n+2){border-bottom:0}.gmp-session-destination-summary>div:nth-child(odd){border-right:var(--bd)}.gmp-session-destination-summary dt{font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-4)}.gmp-session-destination-summary dd{overflow-wrap:anywhere;min-width:0;font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-2);margin:0}@media (width<768px){.gmp-session-destination-summary{grid-template-columns:minmax(0,1fr)}.gmp-session-destination-summary>div{border-right:0}.gmp-session-destination-summary>div:nth-last-child(-n+2){border-bottom:var(--bd)}.gmp-session-destination-summary>div:last-child{border-bottom:0}}.gmp-changes-root{--gmp-pad-x:max(var(--sp-4), calc((100% - 1360px) / 2));max-width:none;margin-inline:0;overflow:auto}.gmp-changes-head{justify-content:space-between;align-items:flex-start;gap:var(--sp-4);padding:var(--sp-4) var(--gmp-pad-x);border-bottom:var(--bd);background:var(--surface);flex:none;display:flex}.gmp-changes-sub{font-size:var(--fs-label);color:var(--ink-4);margin-top:var(--sp-1)}.gmp-changes-body{padding:var(--sp-4) var(--gmp-pad-x);min-width:0}.gmp-unlinked-sessions{margin-top:var(--sp-5);border-top:var(--bd);padding-top:var(--sp-4)}.gmp-unlinked-sessions-head{padding:0 0 var(--sp-2);border:0}.gmp-unlinked-sessions-list{gap:var(--sp-2);flex-wrap:wrap;display:flex}.gmp-unlinked-session{min-height:var(--sp-6);align-items:center;gap:var(--sp-2);max-width:100%;padding:var(--sp-1) var(--sp-2);border:var(--bd);background:var(--surface-2);color:var(--ink-2);font-family:var(--font-mono);font-size:var(--fs-label);text-align:left;cursor:pointer;display:inline-flex}.gmp-unlinked-session:hover{background:var(--surface-hover)}.gmp-unlinked-session:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset)}.gmp-merged-chip{align-items:center;gap:var(--sp-2);padding:3px var(--sp-3);background:var(--surface-2);border:1px dashed var(--ink-5);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-4);cursor:pointer;z-index:3;display:inline-flex;position:absolute}.gmp-merged-chip:hover{color:var(--ink-2);border-color:var(--rule-strong)}.gmp-merged-chip:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset)}.gmp-merged-chip .lucide{width:var(--ic-sm);height:var(--ic-sm);flex:none}.gmp-merged-sec{margin-top:var(--sp-5);border-top:var(--bd);padding-top:var(--sp-4)}.gmp-merged-head{padding:0 0 var(--sp-2);border:0}.gmp-merged-list{align-items:center;gap:var(--sp-3);flex-wrap:wrap;display:flex}.gmp-merged-revert{position:static}.gmp-legend-item{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-3);display:inline-flex}.gmp-legend-dim{color:var(--ink-4)}.gmp-changes-legend{align-items:center;gap:var(--sp-4);margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:var(--bd);flex-wrap:wrap;display:flex}.gmp-changes-legend .cg-dot{flex:none;position:static!important;transform:none!important}.gmp-changes-legend .cg-dot-filled{place-items:center;display:inline-grid}.gmp-changes-legend .cg-spark{position:static!important;transform:none!important}@media (width<1440px){.gmp-merged-chip{margin-top:var(--sp-2);position:static!important}}@media (width<768px){.gmp-changes-body{padding:var(--sp-3);overflow:hidden}.gmp-merged-chip{margin-top:var(--sp-2);position:static!important}}.gmp-detail-root{padding:var(--sp-5);gap:0;overflow:auto}.gmp-detail-head{margin-bottom:var(--sp-5)}.gmp-detail-title{font-family:var(--font-display);color:var(--ink-strong);font-weight:700;font-size:var(--fs-lg);margin-top:var(--sp-2)}.gmp-caption{margin-top:var(--sp-4);color:var(--ink-2);font-family:var(--font-body);font-size:var(--fs-body);line-height:var(--lh-body);max-width:var(--measure-prose)}.gmp-frag{padding:0 var(--sp-1);border:0;border-bottom:var(--stroke-hairline) dotted var(--amber-dim);color:var(--amber);font-family:var(--font-mono);font-size:var(--fs-body);cursor:pointer;background:0 0;display:inline}.gmp-frag:hover{color:var(--amber-bright);border-bottom-style:solid}.gmp-frag-on{color:var(--amber-bright);background:color-mix(in srgb, var(--amber) 12%, transparent);border-bottom-style:solid}.gmp-caption-hint{margin-top:var(--sp-2);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-4);display:block}.gmp-signals{gap:var(--sp-3);margin-bottom:var(--sp-4);flex-wrap:wrap;display:flex}.gmp-signal{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:var(--surface);border:var(--bd);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-3);display:inline-flex}.gmp-signal .lucide{color:var(--ink-4);width:var(--ic-sm);height:var(--ic-sm)}.gmp-signal b{color:var(--ink);font-weight:600}.gmp-signal .mono{text-transform:none;color:var(--ink-2)}.gmp-signal-warn{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--rule))}.gmp-signal-warn .lucide,.gmp-signal-warn b{color:var(--danger)}.gmp-totals{gap:var(--sp-4);padding:var(--sp-3) 0;border-top:var(--bd);border-bottom:var(--bd);margin-bottom:var(--sp-5);flex-wrap:wrap;display:flex}.gmp-add{color:var(--add-rail)}.gmp-del{color:var(--del-rail)}.gmp-detail-sec{margin-bottom:var(--sp-5)}.gmp-detail-sechead{padding:0 0 var(--sp-3);border:0}.gmp-label-chip{align-items:center;gap:var(--sp-1);padding:0 var(--sp-2);border:var(--bd-strong);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-2);display:inline-flex}.gmp-label-chip .lucide{color:var(--amber);width:var(--ic-sm);height:var(--ic-sm)}.gmp-files{flex-direction:column;display:flex}.gmp-file{border:var(--bd)}.gmp-file+.gmp-file{border-top:0}.gmp-file-head{align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-3);background:var(--surface);text-align:left;cursor:pointer;border:0;display:flex}.gmp-file-head:hover{background:var(--surface-hover)}.gmp-file-head:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset-inset)}.gmp-file-head .lucide:first-child{color:var(--ink-4);flex:none}.gmp-file-path{font-size:var(--fs-sm);color:var(--ink);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.gmp-file-status{height:22px;padding:0 var(--sp-2);flex:none}.gmp-file-convos{color:var(--ink-4);flex:none}.gmp-file-convos .lucide{color:var(--ink-4)}.gmp-file-body{border-top:var(--bd);background:var(--canvas)}.gmp-diff-state{padding:var(--sp-2) var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-4)}.gmp-diff-error{color:var(--danger)}.gmp-hunk{border-bottom:var(--bd)}.gmp-hunk:last-child{border-bottom:0}.gmp-hunk-attrib{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:var(--surface-2);font-family:var(--font-mono);font-size:var(--fs-label);color:var(--ink-3);display:flex}.gmp-hunk-attrib .lucide{color:var(--ink-5);flex:none}.gmp-hunk-from{color:var(--ink-4);text-transform:lowercase;flex:none}.gmp-hunk-link{color:var(--amber);font:inherit;cursor:pointer;text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;min-width:0;padding:0;overflow:hidden}.gmp-hunk-link:hover{color:var(--amber-bright);text-underline-offset:2px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.gmp-hunk-hash{color:var(--ink-4);flex:none;margin-left:auto}.gmp-hunk-diff{border:0}.gmp-annot{align-items:center;gap:var(--sp-3);flex-wrap:wrap;display:flex;position:relative}.gmp-annot-chip{min-height:var(--target-min);padding:0 var(--sp-1) 0 var(--sp-2);font-size:var(--fs-label)}.gmp-annot-x{width:16px;height:16px;color:var(--ink-4);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;margin-left:2px;display:inline-flex}.gmp-annot-x:hover{color:var(--ink)}.gmp-annot-add{align-items:center;gap:var(--sp-2);height:var(--control-h-sm);padding:0 var(--sp-3);border:var(--bd-strong);color:var(--ink-3);font-family:var(--font-mono);font-size:var(--fs-label);text-transform:lowercase;cursor:pointer;background:0 0;display:inline-flex}.gmp-annot-add:hover{color:var(--ink);border-color:var(--amber-dim)}.gmp-annot-add .lucide{color:var(--amber);width:var(--ic-sm);height:var(--ic-sm)}.gmp-annot-pop{z-index:var(--z-dropdown);gap:var(--sp-2);width:min(280px,90vw);padding:var(--sp-3);background:var(--surface-elev);border:var(--bd-strong);box-shadow:var(--overlay-shadow);flex-direction:column;display:flex;position:absolute;top:calc(100% + 4px);left:0}.gmp-annot-pop .input{height:var(--control-h-sm)}.gmp-annot-pop-foot{justify-content:flex-end;gap:var(--sp-2);display:flex}.gmp-exits{align-items:center;gap:var(--sp-3);padding-top:var(--sp-4);border-top:var(--bd);flex-wrap:wrap;display:flex}.gmp-gitdiff{padding:0 var(--sp-3);height:var(--control-h);background:var(--canvas);border:var(--bd);font-size:var(--fs-label);color:var(--ink-2);align-items:center;display:inline-flex}.gmp-boundary{margin-top:var(--sp-4);font-size:var(--fs-label);text-transform:lowercase;color:var(--ink-4);border-left:var(--stroke-emphasis) solid var(--rule-strong);padding-left:var(--sp-3);line-height:var(--lh-mono)}.tb-graph{background:var(--canvas);--edge:var(--rule-strong);--edge-error:var(--danger);flex-direction:column;height:100%;display:flex;position:relative}.tb-graph-flow{flex:1;min-height:0;position:relative}.tb-graph .react-flow__attribution{display:none}.tb-graph-minimap{border:var(--bd)!important;background:var(--surface)!important;width:160px!important;height:100px!important;bottom:.75rem!important;left:3rem!important}.tb-graph-controls{z-index:var(--z-sticky);border:var(--bd);background:var(--surface);flex-direction:column;display:flex;position:absolute;bottom:.75rem;left:.75rem}.tb-graph-controls-btn{width:var(--control-h-sm);height:var(--control-h-sm);border:0;border-bottom:var(--bd);color:var(--ink-2);cursor:pointer;background:0 0;justify-content:center;align-items:center;display:inline-flex}.tb-graph-controls-btn:last-child{border-bottom:0}.tb-graph-controls-btn:hover{background:var(--surface-hover);color:var(--ink)}.tb-graph-controls-btn:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring);outline-offset:var(--focus-ring-offset-inset)}.tb-graph-legend{z-index:var(--z-sticky);padding:var(--sp-2) var(--sp-3);border:var(--bd);background:var(--surface);position:absolute;top:.75rem;right:.75rem}.tb-gnode-handle{background:var(--rule-strong)!important;border:0!important;width:6px!important;height:6px!important}.tb-gnode-handle-top{top:-3px!important}.tb-gnode-handle-bottom{bottom:-3px!important}.tb-gnode-handle-right{top:50%!important;right:-3px!important;transform:translateY(-50%)!important}.tb-gnode-handle-left{top:50%!important;left:-3px!important;transform:translateY(-50%)!important}@media (prefers-reduced-motion:no-preference){.tb-graph-controls-btn{transition:background var(--dur-1) var(--ease-standard), color var(--dur-1) var(--ease-standard)}}}
|
package/dist/lib/graph.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as e, A as t, B as n, C as r, D as i, Dt as a, E as o, F as s, G as c, H as l, I as u, J as d, K as f, L as p, M as m, N as h, O as g, P as _, Q as v, R as y, S as b, T as x, Tt as S, U as C, V as w, W as T, X as E, Y as D, Z as O, _ as k, _t as A, a as j, at as M, b as N, c as P, ct as F, et as I, f as ee, g as te, i as L, it as ne, j as re, k as ie, l as ae, lt as oe, m as se, mt as ce, n as le, nt as ue, o as de, ot as fe, q as pe, r as me, rt as he, s as ge, st as _e, t as ve, tt as ye, v as be, w as xe, x as Se, y as Ce, yt as we, z as Te } from "./GraphLegend-
|
|
1
|
+
import { $ as e, A as t, B as n, C as r, D as i, Dt as a, E as o, F as s, G as c, H as l, I as u, J as d, K as f, L as p, M as m, N as h, O as g, P as _, Q as v, R as y, S as b, T as x, Tt as S, U as C, V as w, W as T, X as E, Y as D, Z as O, _ as k, _t as A, a as j, at as M, b as N, c as P, ct as F, et as I, f as ee, g as te, i as L, it as ne, j as re, k as ie, l as ae, lt as oe, m as se, mt as ce, n as le, nt as ue, o as de, ot as fe, q as pe, r as me, rt as he, s as ge, st as _e, t as ve, tt as ye, v as be, w as xe, x as Se, y as Ce, yt as we, z as Te } from "./GraphLegend-7PmEpBZQ.js";
|
|
2
2
|
import { memo as Ee, useCallback as R, useEffect as z, useMemo as B, useRef as V, useState as H } from "react";
|
|
3
3
|
import { Fragment as De, jsx as U, jsxs as W } from "react/jsx-runtime";
|
|
4
4
|
import { Box as Oe, Check as ke, ChevronDown as Ae, ChevronRight as G, Coins as je, CornerDownRight as Me, FileCode as Ne, FileDiff as Pe, FileText as Fe, Folder as Ie, GitMerge as Le, Hash as Re, Map as ze, Maximize2 as Be, MessageSquare as Ve, Minus as He, Plus as Ue, RotateCcw as We, RotateCw as Ge, Search as Ke, Share2 as qe, Star as Je, Tag as Ye, TriangleAlert as Xe, X as Ze } from "lucide-react";
|
|
@@ -895,20 +895,14 @@ function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsCha
|
|
|
895
895
|
className: "gmp-navigator",
|
|
896
896
|
"aria-label": f,
|
|
897
897
|
children: [
|
|
898
|
-
/* @__PURE__ */
|
|
898
|
+
/* @__PURE__ */ U("header", {
|
|
899
899
|
className: "gmp-navigator-head",
|
|
900
|
-
children:
|
|
901
|
-
className: "gmp-navigator-kicker",
|
|
902
|
-
children: "browse the codebase"
|
|
903
|
-
}), /* @__PURE__ */ U("p", {
|
|
904
|
-
className: "gmp-navigator-note",
|
|
905
|
-
children: "choose an area for its recorded work, then open the spatial map when relationships matter"
|
|
906
|
-
})] }), /* @__PURE__ */ W("label", {
|
|
900
|
+
children: /* @__PURE__ */ W("label", {
|
|
907
901
|
className: "gmp-navigator-search",
|
|
908
902
|
children: [
|
|
909
903
|
/* @__PURE__ */ U(Ke, { "aria-hidden": "true" }),
|
|
910
904
|
/* @__PURE__ */ U("span", {
|
|
911
|
-
className: "
|
|
905
|
+
className: "gmp-sr",
|
|
912
906
|
children: "filter code areas"
|
|
913
907
|
}),
|
|
914
908
|
/* @__PURE__ */ U("input", {
|
|
@@ -922,7 +916,7 @@ function tn({ payload: e, grain: t = "package", expandedIds: n, onExpandedIdsCha
|
|
|
922
916
|
placeholder: "filter paths"
|
|
923
917
|
})
|
|
924
918
|
]
|
|
925
|
-
})
|
|
919
|
+
})
|
|
926
920
|
}),
|
|
927
921
|
b.staleSelectedId ? /* @__PURE__ */ W("p", {
|
|
928
922
|
className: "gmp-navigator-missing",
|
package/dist/lib/tokens.css
CHANGED
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
--surface: #0b0b0a;
|
|
69
69
|
--surface-2: #1c1b18;
|
|
70
70
|
--surface-hover: #24231f;
|
|
71
|
-
--surface-elev: #
|
|
71
|
+
--surface-elev: #0b0b0a;
|
|
72
72
|
--ink-strong: #fbf8f1;
|
|
73
73
|
--ink: #ece8df;
|
|
74
74
|
--ink-2: #cdc8bb;
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
--surface: #fbfaf7;
|
|
147
147
|
--surface-2: #f1eee6;
|
|
148
148
|
--surface-hover: #ebe7dd;
|
|
149
|
-
--surface-elev: #
|
|
149
|
+
--surface-elev: #fbfaf7;
|
|
150
150
|
--ink-strong: #0d0c09;
|
|
151
151
|
--ink: #1f1c17;
|
|
152
152
|
--ink-2: #3d3932;
|
package/dist/lib/tokens.json
CHANGED
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The shared app sidebar
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* The shared app sidebar, in one order for every app: the brand mark with a collapse handle on the
|
|
3
|
+
* column's edge, the caller's nav groups, search, the switcher to the other apps, then the footer
|
|
4
|
+
* (the theme toggle, then the account). A sticky resizable column on desktop
|
|
5
|
+
* that collapses to an icon rail; a top bar plus an opaque drawer below 768px.
|
|
5
6
|
* @param {AppSidebarProps} props
|
|
6
7
|
*/
|
|
7
|
-
export default function AppSidebar({ app, apps, groups, currentId, homeHref, brand, account, accountSlot, LinkComponent, storageKey, defaultCollapsed, defaultWidth, minWidth, maxWidth, onCollapsedChange, label, className, }: AppSidebarProps): import("react").JSX.Element;
|
|
8
|
+
export default function AppSidebar({ app, apps, groups, currentId, homeHref, brand, search, theme, onThemeChange, account, accountSlot, LinkComponent, storageKey, defaultCollapsed, defaultWidth, minWidth, maxWidth, onCollapsedChange, label, className, }: AppSidebarProps): import("react").JSX.Element;
|
|
8
9
|
/**
|
|
9
10
|
* The page frame for an app screen: the sidebar column beside a main column that takes the rest
|
|
10
11
|
* (min-width 0, so wide content stays contained). One column below 768px, the top bar above the page.
|
|
11
12
|
* @param {AppSidebarLayoutProps} props
|
|
12
13
|
*/
|
|
13
14
|
export function AppSidebarLayout({ sidebar, children, className }: AppSidebarLayoutProps): import("react").JSX.Element;
|
|
15
|
+
/**
|
|
16
|
+
* The frame for one app page inside AppSidebarLayout: the full width of the main column with the
|
|
17
|
+
* same padding on the left and the right, so a page is never a capped column with an uneven gap
|
|
18
|
+
* beside the sidebar. A full-bleed screen (a transcript, a map) leaves it out.
|
|
19
|
+
* @param {AppPageProps} props
|
|
20
|
+
*/
|
|
21
|
+
export function AppPage({ children, as: Tag, className, ...rest }: AppPageProps): import("react").JSX.Element;
|
|
14
22
|
/**
|
|
15
23
|
* @typedef {Object} AppSidebarApp
|
|
16
24
|
* @property {string} id 'online' | 'local' | 'docs', or another app id (shown with a generic icon).
|
|
17
25
|
* @property {string} label the switcher label.
|
|
18
|
-
* @property {string} [href] where the app lives.
|
|
19
|
-
* @property {string} [
|
|
20
|
-
*
|
|
26
|
+
* @property {string} [href] where the app lives. An app without an href is omitted, unless it has a tag.
|
|
27
|
+
* @property {string} [tag] a short note after the label, e.g. 'soon'. With no href the entry is shown as
|
|
28
|
+
* text (a place that does not exist yet), not a link.
|
|
29
|
+
* @property {string} [target] default '_blank': another app opens in a new tab.
|
|
30
|
+
* @property {string} [rel] default 'noopener noreferrer' when the target is '_blank'.
|
|
21
31
|
*/
|
|
22
32
|
/**
|
|
23
33
|
* @typedef {Object} AppSidebarItem
|
|
@@ -40,6 +50,13 @@ export function AppSidebarLayout({ sidebar, children, className }: AppSidebarLay
|
|
|
40
50
|
* @property {string} [ariaLabel] the nav landmark name; defaults to the label, then the id.
|
|
41
51
|
* @property {AppSidebarItem[]} items
|
|
42
52
|
*/
|
|
53
|
+
/**
|
|
54
|
+
* @typedef {Object} AppSidebarSearch
|
|
55
|
+
* @property {() => void} onOpen opens the app's search (a command palette, a search page).
|
|
56
|
+
* @property {string} [label] default 'search'.
|
|
57
|
+
* @property {string} [shortcut] the key hint shown beside the label, e.g. '⌘K'.
|
|
58
|
+
* @property {string} [keyShortcuts] the same keys for aria-keyshortcuts, e.g. 'Meta+K'.
|
|
59
|
+
*/
|
|
43
60
|
/**
|
|
44
61
|
* @typedef {Object} AppSidebarAccount
|
|
45
62
|
* @property {string} handle shown as @handle; its first letter fills the square avatar.
|
|
@@ -47,12 +64,15 @@ export function AppSidebarLayout({ sidebar, children, className }: AppSidebarLay
|
|
|
47
64
|
*/
|
|
48
65
|
/**
|
|
49
66
|
* @typedef {Object} AppSidebarProps
|
|
50
|
-
* @property {'online'|'local'|'docs'|string} app which app renders the sidebar;
|
|
67
|
+
* @property {'online'|'local'|'docs'|string} app which app renders the sidebar; its own switcher entry is left out.
|
|
51
68
|
* @property {AppSidebarApp[]} [apps] the app switcher entries (default APP_SIDEBAR_APPS, no hrefs).
|
|
52
69
|
* @property {AppSidebarGroup[]} groups
|
|
53
70
|
* @property {string} [currentId] the id of the current item (aria-current="page").
|
|
54
71
|
* @property {string} [homeHref] the brand links here.
|
|
55
|
-
* @property {string} [brand] the
|
|
72
|
+
* @property {string} [brand] the brand's accessible name and tooltip, default 'peasant'.
|
|
73
|
+
* @property {AppSidebarSearch} [search] the app's search, placed after its nav groups.
|
|
74
|
+
* @property {'light'|'dark'} [theme] the current theme; with onThemeChange, the footer leads with the theme toggle.
|
|
75
|
+
* @property {(next: 'light'|'dark') => void} [onThemeChange] called with the theme to switch to.
|
|
56
76
|
* @property {AppSidebarAccount} [account]
|
|
57
77
|
* @property {import('react').ReactNode} [accountSlot] replaces the default account row content.
|
|
58
78
|
* @property {import('react').ComponentType<any>} [LinkComponent] a router link; receives href, className,
|
|
@@ -72,6 +92,12 @@ export function AppSidebarLayout({ sidebar, children, className }: AppSidebarLay
|
|
|
72
92
|
* @property {import('react').ReactNode} children the page body.
|
|
73
93
|
* @property {string} [className]
|
|
74
94
|
*/
|
|
95
|
+
/**
|
|
96
|
+
* @typedef {Object} AppPageProps
|
|
97
|
+
* @property {import('react').ReactNode} children the page's parts, top to bottom.
|
|
98
|
+
* @property {import('react').ElementType} [as] the element, default 'div'.
|
|
99
|
+
* @property {string} [className]
|
|
100
|
+
*/
|
|
75
101
|
/** The app switcher's default entries, in order. Consumers map their hrefs in.
|
|
76
102
|
* @type {ReadonlyArray<Readonly<AppSidebarApp>>} */
|
|
77
103
|
export const APP_SIDEBAR_APPS: ReadonlyArray<Readonly<AppSidebarApp>>;
|
|
@@ -85,10 +111,21 @@ export type AppSidebarApp = {
|
|
|
85
111
|
*/
|
|
86
112
|
label: string;
|
|
87
113
|
/**
|
|
88
|
-
* where the app lives.
|
|
114
|
+
* where the app lives. An app without an href is omitted, unless it has a tag.
|
|
89
115
|
*/
|
|
90
116
|
href?: string;
|
|
117
|
+
/**
|
|
118
|
+
* a short note after the label, e.g. 'soon'. With no href the entry is shown as
|
|
119
|
+
* text (a place that does not exist yet), not a link.
|
|
120
|
+
*/
|
|
121
|
+
tag?: string;
|
|
122
|
+
/**
|
|
123
|
+
* default '_blank': another app opens in a new tab.
|
|
124
|
+
*/
|
|
91
125
|
target?: string;
|
|
126
|
+
/**
|
|
127
|
+
* default 'noopener noreferrer' when the target is '_blank'.
|
|
128
|
+
*/
|
|
92
129
|
rel?: string;
|
|
93
130
|
};
|
|
94
131
|
export type AppSidebarItem = {
|
|
@@ -140,6 +177,24 @@ export type AppSidebarGroup = {
|
|
|
140
177
|
ariaLabel?: string;
|
|
141
178
|
items: AppSidebarItem[];
|
|
142
179
|
};
|
|
180
|
+
export type AppSidebarSearch = {
|
|
181
|
+
/**
|
|
182
|
+
* opens the app's search (a command palette, a search page).
|
|
183
|
+
*/
|
|
184
|
+
onOpen: () => void;
|
|
185
|
+
/**
|
|
186
|
+
* default 'search'.
|
|
187
|
+
*/
|
|
188
|
+
label?: string;
|
|
189
|
+
/**
|
|
190
|
+
* the key hint shown beside the label, e.g. '⌘K'.
|
|
191
|
+
*/
|
|
192
|
+
shortcut?: string;
|
|
193
|
+
/**
|
|
194
|
+
* the same keys for aria-keyshortcuts, e.g. 'Meta+K'.
|
|
195
|
+
*/
|
|
196
|
+
keyShortcuts?: string;
|
|
197
|
+
};
|
|
143
198
|
export type AppSidebarAccount = {
|
|
144
199
|
/**
|
|
145
200
|
* shown as
|
|
@@ -148,7 +203,7 @@ export type AppSidebarAccount = {
|
|
|
148
203
|
};
|
|
149
204
|
export type AppSidebarProps = {
|
|
150
205
|
/**
|
|
151
|
-
* which app renders the sidebar;
|
|
206
|
+
* which app renders the sidebar; its own switcher entry is left out.
|
|
152
207
|
*/
|
|
153
208
|
app: "online" | "local" | "docs" | string;
|
|
154
209
|
/**
|
|
@@ -165,9 +220,21 @@ export type AppSidebarProps = {
|
|
|
165
220
|
*/
|
|
166
221
|
homeHref?: string;
|
|
167
222
|
/**
|
|
168
|
-
* the
|
|
223
|
+
* the brand's accessible name and tooltip, default 'peasant'.
|
|
169
224
|
*/
|
|
170
225
|
brand?: string;
|
|
226
|
+
/**
|
|
227
|
+
* the app's search, placed after its nav groups.
|
|
228
|
+
*/
|
|
229
|
+
search?: AppSidebarSearch;
|
|
230
|
+
/**
|
|
231
|
+
* the current theme; with onThemeChange, the footer leads with the theme toggle.
|
|
232
|
+
*/
|
|
233
|
+
theme?: "light" | "dark";
|
|
234
|
+
/**
|
|
235
|
+
* called with the theme to switch to.
|
|
236
|
+
*/
|
|
237
|
+
onThemeChange?: (next: "light" | "dark") => void;
|
|
171
238
|
account?: AppSidebarAccount;
|
|
172
239
|
/**
|
|
173
240
|
* replaces the default account row content.
|
|
@@ -213,3 +280,14 @@ export type AppSidebarLayoutProps = {
|
|
|
213
280
|
children: import("react").ReactNode;
|
|
214
281
|
className?: string;
|
|
215
282
|
};
|
|
283
|
+
export type AppPageProps = {
|
|
284
|
+
/**
|
|
285
|
+
* the page's parts, top to bottom.
|
|
286
|
+
*/
|
|
287
|
+
children: import("react").ReactNode;
|
|
288
|
+
/**
|
|
289
|
+
* the element, default 'div'.
|
|
290
|
+
*/
|
|
291
|
+
as?: import("react").ElementType;
|
|
292
|
+
className?: string;
|
|
293
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The settings section bar: the sections of one settings page, as a nav inside the page body.
|
|
3
|
+
* @param {SettingsNavProps} props
|
|
4
|
+
*/
|
|
5
|
+
export function SettingsNav({ sections, currentId, onSelect, spy, label, LinkComponent, className }: SettingsNavProps): import("react").JSX.Element;
|
|
6
|
+
/**
|
|
7
|
+
* A settings page body: the section bar beside the sections on a wide column, above them on a
|
|
8
|
+
* narrow one. Takes every SettingsNav prop.
|
|
9
|
+
* @param {SettingsNavProps & SettingsLayoutProps} props
|
|
10
|
+
*/
|
|
11
|
+
export function SettingsLayout({ children, bodyClassName, className, ...nav }: SettingsNavProps & SettingsLayoutProps): import("react").JSX.Element;
|
|
12
|
+
export type SettingsNavSection = {
|
|
13
|
+
id: string;
|
|
14
|
+
/**
|
|
15
|
+
* lowercase chrome.
|
|
16
|
+
*/
|
|
17
|
+
label: string;
|
|
18
|
+
/**
|
|
19
|
+
* a route or an in-page anchor (`#id`); renders a link.
|
|
20
|
+
*/
|
|
21
|
+
href?: string;
|
|
22
|
+
/**
|
|
23
|
+
* a lucide icon component.
|
|
24
|
+
*/
|
|
25
|
+
icon?: import("react").ComponentType<any>;
|
|
26
|
+
};
|
|
27
|
+
export type SettingsNavProps = {
|
|
28
|
+
sections: SettingsNavSection[];
|
|
29
|
+
/**
|
|
30
|
+
* the section the page shows.
|
|
31
|
+
*/
|
|
32
|
+
currentId?: string;
|
|
33
|
+
/**
|
|
34
|
+
* called when a section is chosen; with no href, the section is a button.
|
|
35
|
+
*/
|
|
36
|
+
onSelect?: (id: string) => void;
|
|
37
|
+
/**
|
|
38
|
+
* anchors on one page: mark the section in view while the reader scrolls.
|
|
39
|
+
*/
|
|
40
|
+
spy?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* the nav landmark's name, default 'settings sections'.
|
|
43
|
+
*/
|
|
44
|
+
label?: string;
|
|
45
|
+
/**
|
|
46
|
+
* a router link; receives href, className,
|
|
47
|
+
* aria-current, onClick and children.
|
|
48
|
+
*/
|
|
49
|
+
LinkComponent?: import("react").ComponentType<any>;
|
|
50
|
+
className?: string;
|
|
51
|
+
};
|
|
52
|
+
export type SettingsLayoutProps = {
|
|
53
|
+
/**
|
|
54
|
+
* the sections.
|
|
55
|
+
*/
|
|
56
|
+
children: import("react").ReactNode;
|
|
57
|
+
bodyClassName?: string;
|
|
58
|
+
};
|
|
@@ -106,53 +106,9 @@ export function CollectiveDetailView({ data, actions }?: {
|
|
|
106
106
|
onShowMore?: () => void;
|
|
107
107
|
};
|
|
108
108
|
}): import("react").JSX.Element;
|
|
109
|
-
/**
|
|
110
|
-
* A collective's settings, saved per field. The selects show the collective's own `mode`,
|
|
111
|
-
* `access` and `memberLeaves` values, or `not set` when the host does not give one. Each change
|
|
112
|
-
* calls `onCommit` with the field it writes (`mode`, `access`, `memberLeaves`, ...) and the value.
|
|
113
|
-
*
|
|
114
|
-
* @param {object} [props]
|
|
115
|
-
* @param {object} [props.data]
|
|
116
|
-
* @param {CollectiveData} [props.data.collective]
|
|
117
|
-
* @param {object[]} [props.data.owners] - RepoPicker owners, for linking repositories.
|
|
118
|
-
* @param {string[]} [props.data.linkedRepos]
|
|
119
|
-
* @param {boolean} [props.data.showOnPullRequests]
|
|
120
|
-
* @param {PolicyChoice[]} [props.data.whoCanPublish]
|
|
121
|
-
* @param {PolicyChoice[]} [props.data.whoCanRead]
|
|
122
|
-
* @param {PolicyChoice[]} [props.data.memberLeavesChoices] - defaults to the wire's `user_choice` and `mandatory`.
|
|
123
|
-
* @param {HrefFor} [props.data.hrefFor]
|
|
124
|
-
* @param {object} [props.actions]
|
|
125
|
-
* @param {(key: CollectiveSettingKey, value: unknown) => Promise<unknown>} [props.actions.onCommit] - the one write per change; reject to fail.
|
|
126
|
-
* @param {(handle: string) => void} [props.actions.onInvite]
|
|
127
|
-
* @param {(handle: string) => void} [props.actions.onRemoveMember]
|
|
128
|
-
* @param {(handle: string, role: string) => void} [props.actions.onRoleChange]
|
|
129
|
-
* @param {(diff: { add: string[], remove: string[] }) => void} [props.actions.onLinkRepos]
|
|
130
|
-
* @param {() => void} [props.actions.onTransferOwnership]
|
|
131
|
-
* @param {() => void} [props.actions.onDelete]
|
|
132
|
-
*/
|
|
133
109
|
export function CollectiveSettingsView({ data, actions }?: {
|
|
134
|
-
data?: {
|
|
135
|
-
|
|
136
|
-
owners?: object[];
|
|
137
|
-
linkedRepos?: string[];
|
|
138
|
-
showOnPullRequests?: boolean;
|
|
139
|
-
whoCanPublish?: PolicyChoice[];
|
|
140
|
-
whoCanRead?: PolicyChoice[];
|
|
141
|
-
memberLeavesChoices?: PolicyChoice[];
|
|
142
|
-
hrefFor?: HrefFor;
|
|
143
|
-
};
|
|
144
|
-
actions?: {
|
|
145
|
-
onCommit?: (key: CollectiveSettingKey, value: unknown) => Promise<unknown>;
|
|
146
|
-
onInvite?: (handle: string) => void;
|
|
147
|
-
onRemoveMember?: (handle: string) => void;
|
|
148
|
-
onRoleChange?: (handle: string, role: string) => void;
|
|
149
|
-
onLinkRepos?: (diff: {
|
|
150
|
-
add: string[];
|
|
151
|
-
remove: string[];
|
|
152
|
-
}) => void;
|
|
153
|
-
onTransferOwnership?: () => void;
|
|
154
|
-
onDelete?: () => void;
|
|
155
|
-
};
|
|
110
|
+
data?: {};
|
|
111
|
+
actions?: {};
|
|
156
112
|
}): import("react").JSX.Element;
|
|
157
113
|
export type CollectiveData = {
|
|
158
114
|
id?: string;
|
|
@@ -33,10 +33,14 @@ export * from "./transcript/graph/index.js";
|
|
|
33
33
|
export type TimelineNavigationAction = import("./graph/timelineNavigation.js").TimelineNavigationAction;
|
|
34
34
|
export type AppSidebarProps = import("./AppSidebar.jsx").AppSidebarProps;
|
|
35
35
|
export type AppSidebarLayoutProps = import("./AppSidebar.jsx").AppSidebarLayoutProps;
|
|
36
|
+
export type AppPageProps = import("./AppSidebar.jsx").AppPageProps;
|
|
36
37
|
export type AppSidebarGroup = import("./AppSidebar.jsx").AppSidebarGroup;
|
|
37
38
|
export type AppSidebarItem = import("./AppSidebar.jsx").AppSidebarItem;
|
|
38
39
|
export type AppSidebarApp = import("./AppSidebar.jsx").AppSidebarApp;
|
|
39
40
|
export type AppSidebarAccount = import("./AppSidebar.jsx").AppSidebarAccount;
|
|
41
|
+
export type SettingsNavSection = import("./SettingsNav.jsx").SettingsNavSection;
|
|
42
|
+
export type SettingsNavProps = import("./SettingsNav.jsx").SettingsNavProps;
|
|
43
|
+
export type SettingsLayoutProps = import("./SettingsNav.jsx").SettingsLayoutProps;
|
|
40
44
|
export type VillageObservationsProps = import("./VillageObservations.jsx").VillageObservationsProps;
|
|
41
45
|
export type ObservationDomain = import("./VillageObservations.jsx").ObservationDomain;
|
|
42
46
|
export type ObservedCollective = import("./VillageObservations.jsx").ObservedCollective;
|
|
@@ -67,7 +71,7 @@ export { default as ConsentDialog, ConsentSummary } from "./ConsentDialog.jsx";
|
|
|
67
71
|
export { default as ModerationQueue, ApprovalBar } from "./ModerationQueue.jsx";
|
|
68
72
|
export { default as RoleRoster, ConfirmInline, DangerZone } from "./RoleRoster.jsx";
|
|
69
73
|
export { default as RailShell, RailSection, SplitRail } from "./RailShell.jsx";
|
|
70
|
-
export { default as AppSidebar, AppSidebarLayout, APP_SIDEBAR_APPS } from "./AppSidebar.jsx";
|
|
74
|
+
export { default as AppSidebar, AppSidebarLayout, AppPage, APP_SIDEBAR_APPS } from "./AppSidebar.jsx";
|
|
71
75
|
export { default as ProviderIcon, ProviderTag, ProviderName, AccentLegend, PROVIDER_ACCENT } from "./ProviderIcon.jsx";
|
|
72
76
|
export { default as EvidenceCaption, EvidenceTarget } from "./EvidenceCaption.jsx";
|
|
73
77
|
export { PhaseDivider, Phase, TaskBoundary, CheckpointMarker, TurnContextBar } from "./TranscriptMarkers.jsx";
|
|
@@ -77,6 +81,7 @@ export { default as CliSteps, CommandBlock, GettingStarted } from "./CliOnboard.
|
|
|
77
81
|
export { StatTile, StatGrid, GovTile, ProviderBars } from "./StatTiles.jsx";
|
|
78
82
|
export { PublishStateLabel, PublishBar, AccessList, CollectivePicker, PublishDialog, PUBLISH_STATES, PUBLISH_DIALOG_STATES } from "./Publish.jsx";
|
|
79
83
|
export { SettingRow, SettingGroup, SettingStatus, SETTING_ROW_STATES } from "./Settings.jsx";
|
|
84
|
+
export { SettingsNav, SettingsLayout } from "./SettingsNav.jsx";
|
|
80
85
|
export { default as VisibilitySegmented, VisibilityEye, ScopeChip, FocusedModeToggle } from "./VisibilityControl.jsx";
|
|
81
86
|
export { default as InUseShell, GraphAppShell, GraphSectionNav, IN_USE_APPS, LOCAL_APP_SECTIONS, GRAPH_APP_SECTIONS } from "./inuse/InUseShell.jsx";
|
|
82
87
|
export { RedactionCategory, RedactionCategoryLabel, AllRedactionCategories, AllRedactionCategoryLabels, isRedactionCategory, parseRedactionCategory, parseRedactionCategoryLabel, redactionCategoryFromLabel, redactionCategoryLabel } from "@peasant-labs/schema";
|