Skip to content

Commit 12eb163

Browse files
updt
1 parent ba0547d commit 12eb163

File tree

7 files changed

+303
-160
lines changed

7 files changed

+303
-160
lines changed

src/components/canvas/Array/CanvasToolbar.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ type Props = {
2424
gridOn: boolean;
2525
/** Current snap-to-grid state */
2626
snapOn: boolean;
27+
/** Whether the component is being used on mobile */
28+
isMobile?: boolean;
2729
};
2830

2931
/**
@@ -67,6 +69,7 @@ export default function CanvasToolbar({
6769
onDragging,
6870
gridOn,
6971
snapOn,
72+
isMobile = false,
7073
}: Props) {
7174
const { isFullscreen, enter, exit } = useFullscreen<HTMLDivElement>();
7275
const full = () => (isFullscreen ? exit() : enter(surfaceRef.current));
@@ -93,7 +96,7 @@ export default function CanvasToolbar({
9396
}
9497
};
9598
// collapse / expand
96-
const [open, setOpen] = useState(true);
99+
const [open, setOpen] = useState(!isMobile);
97100

98101
// small helper for consistent button styling
99102
const baseBtn =

src/components/controls/ArrayViewPanel.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export default function ArrayViewPanel({
3737
onShowLabels,
3838
showPlane,
3939
onShowPlane,
40+
isMobile = false,
4041
}: {
4142
view: View;
4243
onView: (v: View) => void;
@@ -48,8 +49,9 @@ export default function ArrayViewPanel({
4849
onShowLabels: (v: boolean) => void;
4950
showPlane: boolean;
5051
onShowPlane: (v: boolean) => void;
52+
isMobile?: boolean;
5153
}) {
52-
const [open, setOpen] = useState(true);
54+
const [open, setOpen] = useState(!isMobile);
5355
const { t } = useI18n();
5456

5557
const upd = (k: keyof Colors) => (e: React.ChangeEvent<HTMLInputElement>) =>

src/components/controls/DatasetPanel.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,11 @@ const ChevronDownIcon = ({ className = "w-4 h-4" }: { className?: string }) => (
102102
</svg>
103103
);
104104

105-
type Props = { value: number[]; onChange: (next: number[]) => void };
105+
type Props = {
106+
value: number[];
107+
onChange: (next: number[]) => void;
108+
isMobile?: boolean;
109+
};
106110
type Dist =
107111
| "random"
108112
| "gaussian"
@@ -118,7 +122,11 @@ type Dist =
118122

119123
type SeedMode = "fixed" | "random";
120124

121-
export default function DatasetPanel({ value, onChange }: Props) {
125+
export default function DatasetPanel({
126+
value,
127+
onChange,
128+
isMobile = false,
129+
}: Props) {
122130
const { t } = useI18n();
123131
const [n, setN] = useState<number>(value.length || 16);
124132
const [min, setMin] = useState(5);
@@ -134,7 +142,7 @@ export default function DatasetPanel({ value, onChange }: Props) {
134142
const [customText, setCustomText] = useState("");
135143

136144
// Collapse / expand
137-
const [open, setOpen] = useState(true);
145+
const [open, setOpen] = useState(!isMobile);
138146

139147
useEffect(() => setN(value.length || 16), [value.length]);
140148

src/components/export/ExportPanel.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,14 @@ export default function ExportPanel({
107107
}
108108

109109
return (
110-
<div className="card box-border w-full min-w-0 text-sm">
110+
<div className="box-border w-full min-w-0 text-sm">
111111
<div className="mb-1 font-medium">Export</div>
112112

113113
<div className="grid gap-2">
114114
<label className="flex min-w-0 items-center gap-2">
115115
<span className="w-28 shrink-0">Format</span>
116116
<select
117-
className="min-w-0 rounded border px-2 py-1"
117+
className="min-w-0 rounded border border-gray-300 bg-white px-2 py-1 text-gray-900 dark:border-gray-600 dark:bg-gray-700 dark:text-white"
118118
value={fmt}
119119
onChange={(e: React.ChangeEvent<HTMLSelectElement>) =>
120120
setFmt(e.currentTarget.value as typeof fmt)

src/components/panels/AboutPanel.tsx

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,15 @@ function ChevronDownIcon({ open }: { open: boolean }) {
3030
);
3131
}
3232

33-
export default function AboutPanel({ meta }: { meta: AlgoMeta }) {
33+
export default function AboutPanel({
34+
meta,
35+
isMobile = false,
36+
}: {
37+
meta: AlgoMeta;
38+
isMobile?: boolean;
39+
}) {
3440
const [modalOpen, setModalOpen] = useState(false);
35-
const [collapsed, setCollapsed] = useState(false);
41+
const [collapsed, setCollapsed] = useState(isMobile);
3642
const { t } = useI18n();
3743
const { complexity: c } = meta;
3844

@@ -47,13 +53,15 @@ export default function AboutPanel({ meta }: { meta: AlgoMeta }) {
4753
</div>
4854

4955
<div className="flex items-center gap-2">
50-
<button
51-
className="rounded border border-slate-200 bg-white px-2 py-1 hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-900 dark:hover:bg-slate-800/70"
52-
onClick={() => setModalOpen(true)}
53-
title="Open in modal"
54-
>
55-
<ExpandIcon />
56-
</button>
56+
{!isMobile && (
57+
<button
58+
className="rounded border border-slate-200 bg-white px-2 py-1 hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-900 dark:hover:bg-slate-800/70"
59+
onClick={() => setModalOpen(true)}
60+
title="Open in modal"
61+
>
62+
<ExpandIcon />
63+
</button>
64+
)}
5765
<button
5866
className="inline-flex items-center justify-center rounded border border-slate-200 bg-white px-2 py-1 hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-900 dark:hover:bg-slate-800/70"
5967
onClick={() => setCollapsed((v) => !v)}

src/components/panels/CodePanel.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,18 +94,20 @@ export default function CodePanel({
9494
explain,
9595
fillHeight = true,
9696
onTabChange,
97+
isMobile = false,
9798
}: {
9899
meta: AlgoMeta;
99100
activePcLine?: number;
100101
explain?: string;
101102
fillHeight?: boolean;
102103
onTabChange?: (tab: "pseudocode" | "code") => void;
104+
isMobile?: boolean;
103105
}) {
104106
const [tab, setTab] = useState<"pseudocode" | "code">("pseudocode");
105107
const [lang, setLang] = useState<Lang>("cpp");
106108
const [copied, setCopied] = useState(false);
107109
const [wrap, setWrap] = useState(false);
108-
const [collapsed, setCollapsed] = useState(false); // NEW
110+
const [collapsed, setCollapsed] = useState(isMobile); // Collapsed by default on mobile
109111

110112
useEffect(() => {
111113
onTabChange?.(tab);

0 commit comments

Comments
 (0)