Compare commits
1
Commits
2026.09.05.03
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b3b986c0e |
+1
-1
@@ -40,7 +40,7 @@ import type { PluginManifest } from '@@/plugins/manifest';
|
||||
*/
|
||||
export const manifest: PluginManifest = {
|
||||
publisher: 'officerdev',
|
||||
version: '2026.09.05.03',
|
||||
version: '2026.09.05.04',
|
||||
platform: '>=1.0.0',
|
||||
|
||||
label: 'Karakeep',
|
||||
|
||||
+25
-10
@@ -1,7 +1,7 @@
|
||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||
import { useSearchParams } from 'react-router';
|
||||
import { useClient } from 'hooks/useClient';
|
||||
import { Folder, Settings2, Layers } from 'lucide-react';
|
||||
import { Folder, Settings2, Layers, ChevronUp, ChevronDown } from 'lucide-react';
|
||||
import { SettingsForm } from './SettingsForm';
|
||||
|
||||
/**
|
||||
@@ -61,16 +61,8 @@ export const ListsPanel = () => {
|
||||
|
||||
return (
|
||||
<div className="flex size-full flex-col">
|
||||
<header className="flex items-center justify-between border-b px-2 py-1.5">
|
||||
<header className="border-b px-3 py-1.5">
|
||||
<span className="text-xs font-medium">Lists</span>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setShowSettings((was) => !was)}
|
||||
className="p-1 text-muted-foreground hover:text-foreground"
|
||||
aria-label="Settings"
|
||||
>
|
||||
<Settings2 className="size-3.5" />
|
||||
</button>
|
||||
</header>
|
||||
|
||||
{error && <p className="px-3 py-2 text-[11px] text-destructive">{error}</p>}
|
||||
@@ -105,7 +97,30 @@ export const ListsPanel = () => {
|
||||
))}
|
||||
</ul>
|
||||
|
||||
{/*
|
||||
Settings, pinned to the bottom.
|
||||
|
||||
It was a gear in the header, which is where a settings control is easy to WRITE and not where
|
||||
anybody looks for one: the owner asked for this after failing to find it. The bottom of a
|
||||
sidebar is the conventional home for the thing you configure once, and being a labelled row
|
||||
rather than an icon means it says what it is.
|
||||
|
||||
The form opens ABOVE the button rather than below it, so the control does not move when you use
|
||||
it. A disclosure that walks away from the pointer as it expands is the small kind of wrong that
|
||||
makes something feel unfinished.
|
||||
*/}
|
||||
{showSettings && <SettingsForm />}
|
||||
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setShowSettings((was) => !was)}
|
||||
aria-expanded={showSettings}
|
||||
className="flex w-full shrink-0 items-center gap-2 border-t px-3 py-2 text-left text-xs text-muted-foreground hover:bg-muted/50 hover:text-foreground"
|
||||
>
|
||||
<Settings2 className="size-3.5 shrink-0" />
|
||||
<span className="flex-1">Settings</span>
|
||||
{showSettings ? <ChevronDown className="size-3.5" /> : <ChevronUp className="size-3.5" />}
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user