Tighten sidebar flow layout
This commit is contained in:
19
src/App.jsx
19
src/App.jsx
@@ -524,6 +524,7 @@ function FlowRow({
|
||||
};
|
||||
const isRowClickable = Boolean(onLabelClick) && !isEditing;
|
||||
const isWrappedStepLayout = steps.length > 5;
|
||||
const isSingleStepLayout = steps.length === 1;
|
||||
const stepRows = isWrappedStepLayout
|
||||
? steps.reduce((rows, step, index) => {
|
||||
const rowIndex = Math.floor(index / 4);
|
||||
@@ -691,7 +692,7 @@ function FlowRow({
|
||||
{stepRows.map((row, rowIndex) => (
|
||||
<div
|
||||
key={rowIndex}
|
||||
className="relative flex flex-col gap-3 xl:grid xl:grid-cols-[minmax(0,1fr)_36px_minmax(0,1fr)_36px_minmax(0,1fr)_36px_minmax(0,1fr)] xl:gap-0 xl:items-stretch"
|
||||
className="relative flex flex-col gap-3 xl:grid xl:grid-cols-[minmax(0,1fr)_28px_minmax(0,1fr)_28px_minmax(0,1fr)_28px_minmax(0,1fr)] xl:gap-0 xl:items-stretch"
|
||||
>
|
||||
{row.map(({ step, index }, itemIndex) => (
|
||||
<React.Fragment key={step.id}>
|
||||
@@ -715,9 +716,9 @@ function FlowRow({
|
||||
<div className="relative flex flex-col gap-3 xl:flex-row xl:items-stretch">
|
||||
{steps.map((step, index) => (
|
||||
<React.Fragment key={step.id}>
|
||||
{renderStepCard(step, index, 'min-w-[230px] flex-1')}
|
||||
{renderStepCard(step, index, isSingleStepLayout ? 'w-full max-w-[320px]' : 'min-w-0 flex-1')}
|
||||
{index < steps.length - 1 && (
|
||||
<div className="flex items-center justify-center xl:w-9">
|
||||
<div className="flex items-center justify-center xl:w-7">
|
||||
<ArrowRight className={`hidden h-5 w-5 xl:block ${accent.arrowText}`} />
|
||||
<ArrowDown className={`h-5 w-5 xl:hidden ${accent.arrowText}`} />
|
||||
</div>
|
||||
@@ -1380,6 +1381,8 @@ function RelationTreePanel({ programs, onProgramClick, onOpenRelationPopup }) {
|
||||
const nextVisitedIds = new Set(visitedIds);
|
||||
nextVisitedIds.add(program.id);
|
||||
|
||||
const indent = Math.min(depth, 5) * 13;
|
||||
|
||||
return (
|
||||
<div key={`${program.id}-${depth}-${[...visitedIds].join('-')}`} className="relative">
|
||||
{depth > 0 && (
|
||||
@@ -1390,7 +1393,7 @@ function RelationTreePanel({ programs, onProgramClick, onOpenRelationPopup }) {
|
||||
)}
|
||||
<div
|
||||
className="relative flex items-center gap-2 py-1.5"
|
||||
style={{ paddingLeft: `${depth * 18}px` }}
|
||||
style={{ paddingLeft: `${indent}px` }}
|
||||
>
|
||||
{hasChildren && !isRepeated ? (
|
||||
<button
|
||||
@@ -1407,7 +1410,7 @@ function RelationTreePanel({ programs, onProgramClick, onOpenRelationPopup }) {
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => onProgramClick(program.id)}
|
||||
className="min-w-0 flex-1 rounded-xl bg-white/85 px-3 py-2 text-left shadow-sm ring-1 ring-slate-100 transition hover:-translate-y-0.5 hover:bg-white hover:shadow"
|
||||
className="min-w-0 flex-1 overflow-hidden rounded-xl bg-white/85 px-3 py-2 text-left shadow-sm ring-1 ring-slate-100 transition hover:-translate-y-0.5 hover:bg-white hover:shadow"
|
||||
>
|
||||
<span className="block truncate text-[13px] font-black text-slate-900">
|
||||
{program.name}
|
||||
@@ -1432,7 +1435,7 @@ function RelationTreePanel({ programs, onProgramClick, onOpenRelationPopup }) {
|
||||
};
|
||||
|
||||
return (
|
||||
<aside className="sticky top-5 max-h-[calc(100vh-40px)] overflow-y-auto rounded-[28px] border border-white/75 bg-white/75 p-4 shadow-sm backdrop-blur">
|
||||
<aside className="sticky top-5 max-h-[calc(100vh-40px)] overflow-y-auto overflow-x-hidden rounded-[26px] border border-white/75 bg-white/75 p-3.5 shadow-sm backdrop-blur">
|
||||
<div className="mb-4 flex items-start justify-between gap-3">
|
||||
<div>
|
||||
<p className="text-[11px] font-black uppercase tracking-wide text-blue-700">Program Map</p>
|
||||
@@ -2102,7 +2105,7 @@ export default function App() {
|
||||
|
||||
return (
|
||||
<main className="min-h-screen bg-[radial-gradient(circle_at_top_left,#dffcf4_0,#f7f8fa_34%,#eef2ff_100%)] text-slate-900">
|
||||
<div className="mx-auto max-w-[1600px] space-y-5 px-6 py-6">
|
||||
<div className="mx-auto max-w-[1760px] space-y-4 px-3 py-4">
|
||||
<div className="flex justify-end gap-2">
|
||||
<button
|
||||
type="button"
|
||||
@@ -2118,7 +2121,7 @@ export default function App() {
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-5 xl:grid-cols-[310px_minmax(0,1fr)] xl:items-start">
|
||||
<div className="grid gap-4 xl:grid-cols-[280px_minmax(0,1fr)] xl:items-start">
|
||||
<RelationTreePanel
|
||||
programs={programs}
|
||||
onProgramClick={openProgramWindow}
|
||||
|
||||
Reference in New Issue
Block a user