From 09f964451d7d92e9891430ec4595c1276d486aab Mon Sep 17 00:00:00 2001 From: zwlucas Date: Fri, 5 Jun 2026 17:52:54 -0300 Subject: feat: upload Signed-off-by: zwlucas --- src/components/StatusBar/StatusBar.tsx | 163 +++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 src/components/StatusBar/StatusBar.tsx (limited to 'src/components/StatusBar') diff --git a/src/components/StatusBar/StatusBar.tsx b/src/components/StatusBar/StatusBar.tsx new file mode 100644 index 0000000..49f9346 --- /dev/null +++ b/src/components/StatusBar/StatusBar.tsx @@ -0,0 +1,163 @@ +import { useEffect, useRef } from 'react' +import { useTabsStore } from '@/stores/useTabsStore' +import { useSettingsStore } from '@/stores/useSettingsStore' + +function BranchIcon() { + return ( + + + + + + + ) +} + +function ErrorIcon() { + return ( + + + + + + ) +} + +function EncodingIcon() { + return ( + + + + + ) +} + +function Spinner() { + return ( + + + + ) +} + +function Separator() { + return ( +
+ ) +} + +function StatusItem({ + children, + title, + onClick, +}: { + children: React.ReactNode + title?: string + onClick?: () => void +}) { + return ( + + ) +} + +export default function StatusBar() { + const activeTab = useTabsStore((s) => + s.activeTabId ? s.tabs.find((t) => t.id === s.activeTabId) ?? null : null + ) + const cursorLine = useTabsStore((s) => s.cursorLine) + const cursorCol = useTabsStore((s) => s.cursorCol) + const savingId = useTabsStore((s) => s.savingId) + const statusMessage = useTabsStore((s) => s.statusMessage) + const clearStatusMessage = useTabsStore((s) => s.clearStatusMessage) + const tabSize = useSettingsStore((s) => s.tabSize) + + const isSaving = savingId === activeTab?.id + const statusTimer = useRef | undefined>(undefined) + + useEffect(() => { + if (statusMessage) { + if (statusTimer.current) clearTimeout(statusTimer.current) + statusTimer.current = setTimeout(clearStatusMessage, 2000) + } + return () => { if (statusTimer.current) clearTimeout(statusTimer.current) } + }, [statusMessage, clearStatusMessage]) + + return ( +
+
+ + + main + + + + + + + 0 + 0 + +
+ +
+ +
+ {isSaving && ( + + + Saving + + )} + + {statusMessage && !isSaving && ( + + + {statusMessage === 'Saved' ? '✓' : '✗'} + + + {statusMessage} + + + )} + + {activeTab && ( + + + {activeTab.language.charAt(0).toUpperCase() + activeTab.language.slice(1)} + + + )} + + + + + Spaces: {tabSize} + + + + + + + UTF-8 + + + + + {activeTab && ( + + + Ln {cursorLine}, Col {cursorCol} + + + )} +
+
+ ) +} -- cgit v1.2.3