# LivaNavbar
Package: @dataliva/livalib
Description: @dataliva/livalib gezinme menüsü (navbar) bileşeni.

`LivaLayout` kenar çubuğunun içinde kullanılan hiyerarşik gezinme menüsü.
Bağımsız olarak da kullanılabilir; bu durumda açık grupların durumu
zorunlu `expandedKeys` (`Set<string>`) ve `onToggleExpand` prop'larıyla
üst bileşen tarafından kontrol edilir.

```tsx
import { LivaNavbar } from "@dataliva/livalib";
```

## Temel kullanım

Öğeler varsayılan olarak ağaç (`dataStructure="tree"`) yapısındadır: her
öğe `id`, `text`, isteğe bağlı `href`, `icon` ve alt öğeler için `items`
alanı taşır. `currentPathname` ile eşleşen `href` aktif olarak vurgulanır.
Grup başlığına tıklanınca `onToggleExpand` hesaplanan anahtarla çağrılır;
anahtar üst düzey öğelerde `id` değeridir, iç içe gruplarda
`üstAnahtar/id` biçiminde birleştirilir.

**Örnek — Temel kullanım:**

```tsx
const [expandedKeys, setExpandedKeys] = useState<Set<string>>(
  () => new Set(["raporlar"])
);

const toggleExpand = (key: string) => {
  setExpandedKeys((prev) => {
    const next = new Set(prev);
    if (next.has(key)) next.delete(key);
    else next.add(key);
    return next;
  });
};

<LivaNavbar
  items={items}
  currentPathname="/raporlar/satis"
  expandedKeys={expandedKeys}
  onToggleExpand={toggleExpand}
  onItemClick={(item) => console.log(item.text)}
/>
```

## Akordeon davranışı

`menuMode="accordion"` görünümü akordeon stiline geçirir. Genişleme durumu
kontrollü olduğu için "aynı anda tek grup açık" kuralı, `onToggleExpand`
içinde kümenin yalnızca tıklanan anahtarla değiştirilmesiyle sağlanır.

**Örnek — Akordeon davranışı (tek grup açık):**

```tsx
const [expandedKeys, setExpandedKeys] = useState<Set<string>>(
  () => new Set(["raporlar"])
);

const toggleAccordion = (key: string) => {
  setExpandedKeys((prev) =>
    prev.has(key) ? new Set<string>() : new Set([key])
  );
};

<LivaNavbar
  items={items}
  menuMode="accordion"
  expandedKeys={expandedKeys}
  onToggleExpand={toggleAccordion}
  onItemClick={(item) => console.log(item.text)}
/>
```

## Prop'lar

| Prop | Tip | Varsayılan |
|------|------|---------|
| `items` | `LivaNavItem[]` | `[]` |
| `expandedKeys` | `Set<string>` | — (zorunlu) |
| `onToggleExpand` | `(key: string) => void` | — (zorunlu) |
| `currentPathname` | `string` | — |
| `onItemClick` | `(item: LivaNavItem) => void` | — |
| `onItemContextMenu` | `(item, event) => void` | — |
| `menuMode` | `'standard' \| 'accordion'` | `'standard'` |
| `dataStructure` | `'plain' \| 'tree'` | `'tree'` |
| `keyExpr` | `string` | `'id'` |
| `parentIdExpr` | `string` | `'parentId'` |
| `displayExpr` | `string` | `'text'` |
| `itemsExpr` | `string` | `'items'` |
| `iconExpr` | `string` | `'icon'` |
| `hrefExpr` | `string` | `'href'` |
| `spotlightEnabled` | `boolean` | `false` |

`LivaNavItem` alanları: `id`, `text`, `href?`, `icon?` (CSS sınıfı, ör.
`dx-icon dx-icon-home`), `expanded?`, `tooltip?` ve `items?`. `onItemClick`
verildiğinde bağlantı tıklamalarında varsayılan gezinme engellenir.
