@enmera/panel-kit 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +21 -0
  3. package/README.md +98 -2
  4. package/README.tr.md +59 -0
  5. package/dist/config.d.ts +18 -0
  6. package/dist/config.js +14 -0
  7. package/dist/empty-state.d.ts +7 -0
  8. package/dist/empty-state.js +5 -0
  9. package/dist/hooks/use-mobile.d.ts +1 -0
  10. package/dist/hooks/use-mobile.js +15 -0
  11. package/dist/section-card.d.ts +16 -0
  12. package/dist/section-card.js +13 -0
  13. package/dist/stat-cards.d.ts +15 -0
  14. package/dist/stat-cards.js +32 -0
  15. package/dist/status-badge.d.ts +29 -0
  16. package/dist/status-badge.js +27 -0
  17. package/dist/summary-strip.d.ts +18 -0
  18. package/dist/summary-strip.js +15 -0
  19. package/dist/text.d.ts +7 -0
  20. package/dist/text.js +8 -0
  21. package/dist/ui/alert-dialog.d.ts +22 -0
  22. package/dist/ui/alert-dialog.js +38 -0
  23. package/dist/ui/avatar.d.ts +10 -0
  24. package/dist/ui/avatar.js +23 -0
  25. package/dist/ui/badge.d.ts +8 -0
  26. package/dist/ui/badge.js +31 -0
  27. package/dist/ui/breadcrumb.d.ts +11 -0
  28. package/dist/ui/breadcrumb.js +25 -0
  29. package/dist/ui/button.d.ts +14 -0
  30. package/dist/ui/button.js +67 -0
  31. package/dist/ui/calendar.d.ts +24 -0
  32. package/dist/ui/calendar.js +54 -0
  33. package/dist/ui/card.d.ts +11 -0
  34. package/dist/ui/card.js +24 -0
  35. package/dist/ui/chart.d.ts +44 -0
  36. package/dist/ui/chart.js +137 -0
  37. package/dist/ui/checkbox.d.ts +3 -0
  38. package/dist/ui/checkbox.js +9 -0
  39. package/dist/ui/chip.d.ts +11 -0
  40. package/dist/ui/chip.js +10 -0
  41. package/dist/ui/code.d.ts +2 -0
  42. package/dist/ui/code.js +6 -0
  43. package/dist/ui/collapsible.d.ts +5 -0
  44. package/dist/ui/collapsible.js +12 -0
  45. package/dist/ui/combobox.d.ts +32 -0
  46. package/dist/ui/combobox.js +77 -0
  47. package/dist/ui/command.d.ts +27 -0
  48. package/dist/ui/command.js +36 -0
  49. package/dist/ui/dialog.d.ts +21 -0
  50. package/dist/ui/dialog.js +32 -0
  51. package/dist/ui/dropdown-menu.d.ts +26 -0
  52. package/dist/ui/dropdown-menu.js +48 -0
  53. package/dist/ui/field.d.ts +24 -0
  54. package/dist/ui/field.js +67 -0
  55. package/dist/ui/heading.d.ts +24 -0
  56. package/dist/ui/heading.js +24 -0
  57. package/dist/ui/icon-tile.d.ts +17 -0
  58. package/dist/ui/icon-tile.js +17 -0
  59. package/dist/ui/input-group.d.ts +19 -0
  60. package/dist/ui/input-group.js +58 -0
  61. package/dist/ui/input.d.ts +8 -0
  62. package/dist/ui/input.js +7 -0
  63. package/dist/ui/label.d.ts +3 -0
  64. package/dist/ui/label.js +12 -0
  65. package/dist/ui/meta.d.ts +13 -0
  66. package/dist/ui/meta.js +18 -0
  67. package/dist/ui/option-card.d.ts +9 -0
  68. package/dist/ui/option-card.js +10 -0
  69. package/dist/ui/pagination.d.ts +17 -0
  70. package/dist/ui/pagination.js +27 -0
  71. package/dist/ui/popover.d.ts +10 -0
  72. package/dist/ui/popover.js +19 -0
  73. package/dist/ui/radio-group.d.ts +4 -0
  74. package/dist/ui/radio-group.js +11 -0
  75. package/dist/ui/row-button.d.ts +9 -0
  76. package/dist/ui/row-button.js +16 -0
  77. package/dist/ui/scroll-area.d.ts +3 -0
  78. package/dist/ui/scroll-area.js +7 -0
  79. package/dist/ui/segmented.d.ts +22 -0
  80. package/dist/ui/segmented.js +16 -0
  81. package/dist/ui/select.d.ts +26 -0
  82. package/dist/ui/select.js +45 -0
  83. package/dist/ui/separator.d.ts +3 -0
  84. package/dist/ui/separator.js +8 -0
  85. package/dist/ui/sheet.d.ts +20 -0
  86. package/dist/ui/sheet.js +34 -0
  87. package/dist/ui/sidebar.d.ts +77 -0
  88. package/dist/ui/sidebar.js +204 -0
  89. package/dist/ui/skeleton.d.ts +2 -0
  90. package/dist/ui/skeleton.js +6 -0
  91. package/dist/ui/slider.d.ts +11 -0
  92. package/dist/ui/slider.js +13 -0
  93. package/dist/ui/sonner.d.ts +7 -0
  94. package/dist/ui/sonner.js +38 -0
  95. package/dist/ui/switch.d.ts +5 -0
  96. package/dist/ui/switch.js +8 -0
  97. package/dist/ui/table.d.ts +11 -0
  98. package/dist/ui/table.js +28 -0
  99. package/dist/ui/tabs.d.ts +15 -0
  100. package/dist/ui/tabs.js +73 -0
  101. package/dist/ui/text-button.d.ts +21 -0
  102. package/dist/ui/text-button.js +21 -0
  103. package/dist/ui/textarea.d.ts +9 -0
  104. package/dist/ui/textarea.js +7 -0
  105. package/dist/ui/tile.d.ts +27 -0
  106. package/dist/ui/tile.js +30 -0
  107. package/dist/ui/tooltip.d.ts +8 -0
  108. package/dist/ui/tooltip.js +24 -0
  109. package/dist/utils.d.ts +1 -0
  110. package/dist/utils.js +1 -0
  111. package/lang/tr.json +16 -0
  112. package/package.json +83 -4
  113. package/theme.css +17 -0
@@ -0,0 +1,13 @@
1
+ /** Başlığın altındaki küçük, soluk bilgi satırı (tarih · kaynak · ülke): her listede aynı boyut, renk ve aralık. */
2
+ export declare function MetaRow({ className, ...props }: React.ComponentProps<'div'>): import("react").JSX.Element;
3
+ /** Madde ya da numaralı liste (adımlar, gerekçeler). */
4
+ export declare function List({ ordered, className, ...props }: React.HTMLAttributes<HTMLElement> & {
5
+ ordered?: boolean;
6
+ }): import("react").JSX.Element;
7
+ /**
8
+ * Bölüm kartındaki (SectionCard flush) liste satırı: kartın başlığıyla aynı yatay boşluk. `stack` içeriği alt alta dizer.
9
+ * Tıklanan satır RowButton / RowLink'tir; aynı boşluğu className ile alır.
10
+ */
11
+ export declare function ListRow({ stack, className, ...props }: React.ComponentProps<'li'> & {
12
+ stack?: boolean;
13
+ }): import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from '../utils.js';
3
+ /** Başlığın altındaki küçük, soluk bilgi satırı (tarih · kaynak · ülke): her listede aynı boyut, renk ve aralık. */
4
+ export function MetaRow({ className, ...props }) {
5
+ return _jsx("div", { className: cn('flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground', className), ...props });
6
+ }
7
+ /** Madde ya da numaralı liste (adımlar, gerekçeler). */
8
+ export function List({ ordered = false, className, ...props }) {
9
+ const classes = cn('flex flex-col gap-1 ps-5 text-sm', ordered ? 'list-decimal' : 'list-disc', className);
10
+ return ordered ? _jsx("ol", { className: classes, ...props }) : _jsx("ul", { className: classes, ...props });
11
+ }
12
+ /**
13
+ * Bölüm kartındaki (SectionCard flush) liste satırı: kartın başlığıyla aynı yatay boşluk. `stack` içeriği alt alta dizer.
14
+ * Tıklanan satır RowButton / RowLink'tir; aynı boşluğu className ile alır.
15
+ */
16
+ export function ListRow({ stack = false, className, ...props }) {
17
+ return _jsx("li", { className: cn('flex gap-3 px-4 py-3 sm:px-6', stack ? 'flex-col' : 'flex-wrap items-center', className), ...props });
18
+ }
@@ -0,0 +1,9 @@
1
+ import { type ButtonProps } from 'react-aria-components';
2
+ /**
3
+ * Basılabilir ya da seçilebilir kart: süzgeç işi gören gösterge kutusu, seçilecek işletme, öneri satırı.
4
+ * Seçiliyken marka halkası ve hafif zemin; iç yerleşim className'den. Tek seçimli grup için RadioGroup kullanılır.
5
+ */
6
+ export declare function OptionCard({ isSelected, className, ...props }: Omit<ButtonProps, 'className'> & {
7
+ isSelected?: boolean;
8
+ className?: string;
9
+ }): import("react").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button as ButtonPrimitive } from 'react-aria-components';
3
+ import { cn } from '../utils.js';
4
+ /**
5
+ * Basılabilir ya da seçilebilir kart: süzgeç işi gören gösterge kutusu, seçilecek işletme, öneri satırı.
6
+ * Seçiliyken marka halkası ve hafif zemin; iç yerleşim className'den. Tek seçimli grup için RadioGroup kullanılır.
7
+ */
8
+ export function OptionCard({ isSelected = false, className, ...props }) {
9
+ return (_jsx(ButtonPrimitive, { "aria-pressed": isSelected, "data-selected": isSelected || undefined, className: cn('flex cursor-default flex-col items-start gap-1 rounded-2xl bg-card p-4 text-start ring-1 ring-foreground/10 transition-[box-shadow,background-color] outline-hidden hover:ring-foreground/25 focus-visible:ring-2 focus-visible:ring-ring/60 disabled:opacity-50 data-selected:bg-primary/5 data-selected:ring-2 data-selected:ring-primary', className), ...props }));
10
+ }
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ import { LinkButton } from "./button.js";
3
+ declare function Pagination({ className, ...props }: React.ComponentProps<"nav">): React.JSX.Element;
4
+ declare function PaginationContent({ className, ...props }: React.ComponentProps<"ul">): React.JSX.Element;
5
+ declare function PaginationItem({ ...props }: React.ComponentProps<"li">): React.JSX.Element;
6
+ type PaginationLinkProps = {
7
+ isActive?: boolean;
8
+ } & Omit<React.ComponentProps<typeof LinkButton>, "variant">;
9
+ declare function PaginationLink({ className, isActive, size, ...props }: PaginationLinkProps): React.JSX.Element;
10
+ declare function PaginationPrevious({ className, text, ...props }: React.ComponentProps<typeof PaginationLink> & {
11
+ text?: string;
12
+ }): React.JSX.Element;
13
+ declare function PaginationNext({ className, text, ...props }: React.ComponentProps<typeof PaginationLink> & {
14
+ text?: string;
15
+ }): React.JSX.Element;
16
+ declare function PaginationEllipsis({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
17
+ export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, };
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../utils.js";
3
+ import { LinkButton } from "./button.js";
4
+ import { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from "lucide-react";
5
+ import { t } from '../config.js';
6
+ function Pagination({ className, ...props }) {
7
+ return (_jsx("nav", { role: "navigation", "aria-label": "pagination", "data-slot": "pagination", className: cn("mx-auto flex w-full justify-center", className), ...props }));
8
+ }
9
+ function PaginationContent({ className, ...props }) {
10
+ return (_jsx("ul", { "data-slot": "pagination-content", className: cn("flex items-center gap-1", className), ...props }));
11
+ }
12
+ function PaginationItem({ ...props }) {
13
+ return _jsx("li", { "data-slot": "pagination-item", ...props });
14
+ }
15
+ function PaginationLink({ className, isActive, size = "icon", ...props }) {
16
+ return (_jsx(LinkButton, { variant: isActive ? "outline" : "ghost", size: size, className: cn(className), "aria-current": isActive ? "page" : undefined, "data-slot": "pagination-link", "data-active": isActive, ...props }));
17
+ }
18
+ function PaginationPrevious({ className, text = t("Previous"), ...props }) {
19
+ return (_jsxs(PaginationLink, { "aria-label": t("Previous page"), size: "default", className: cn("pl-2!", className), ...props, children: [_jsx(ChevronLeftIcon, { "data-icon": "inline-start" }), _jsx("span", { className: "hidden sm:block", children: text })] }));
20
+ }
21
+ function PaginationNext({ className, text = t("Next"), ...props }) {
22
+ return (_jsxs(PaginationLink, { "aria-label": t("Next page"), size: "default", className: cn("pr-2!", className), ...props, children: [_jsx("span", { className: "hidden sm:block", children: text }), _jsx(ChevronRightIcon, { "data-icon": "inline-end" })] }));
23
+ }
24
+ function PaginationEllipsis({ className, ...props }) {
25
+ return (_jsxs("span", { "aria-hidden": true, "data-slot": "pagination-ellipsis", className: cn("flex size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [_jsx(MoreHorizontalIcon, {}), _jsx("span", { className: "sr-only", children: t("More pages") })] }));
26
+ }
27
+ export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, };
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import { Heading, type DialogTriggerProps, type PopoverProps as PopoverPrimitiveProps } from "react-aria-components";
3
+ declare function PopoverTrigger({ children, ...props }: DialogTriggerProps): React.JSX.Element;
4
+ declare function Popover({ className, placement, offset, crossOffset, ...props }: Omit<PopoverPrimitiveProps, "className"> & {
5
+ className?: string;
6
+ }): React.JSX.Element;
7
+ declare function PopoverHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
8
+ declare function PopoverTitle({ className, ...props }: React.ComponentProps<typeof Heading>): React.JSX.Element;
9
+ declare function PopoverDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
10
+ export { Popover, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, };
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../utils.js";
3
+ import { DialogTrigger, Heading, Popover as PopoverPrimitive, } from "react-aria-components";
4
+ function PopoverTrigger({ children, ...props }) {
5
+ return (_jsx(DialogTrigger, { "data-slot": "popover-trigger", ...props, children: children }));
6
+ }
7
+ function Popover({ className, placement = "bottom", offset = 4, crossOffset = 0, ...props }) {
8
+ return (_jsx(PopoverPrimitive, { "data-slot": "popover-content", placement: placement, offset: offset, crossOffset: crossOffset, className: cn("z-50 flex w-72 origin-(--trigger-anchor-point) flex-col gap-4 rounded-3xl bg-popover p-4 text-sm text-popover-foreground shadow-lg ring-1 ring-foreground/5 outline-hidden duration-100 data-entering:animate-in data-entering:fade-in-0 data-entering:zoom-in-95 data-exiting:animate-out data-exiting:fade-out-0 data-exiting:zoom-out-95 data-[placement=bottom]:slide-in-from-top-2 data-[placement=left]:slide-in-from-right-2 data-[placement=right]:slide-in-from-left-2 data-[placement=top]:slide-in-from-bottom-2 dark:ring-foreground/10", className), ...props }));
9
+ }
10
+ function PopoverHeader({ className, ...props }) {
11
+ return (_jsx("div", { "data-slot": "popover-header", className: cn("flex flex-col gap-1 text-sm", className), ...props }));
12
+ }
13
+ function PopoverTitle({ className, ...props }) {
14
+ return (_jsx(Heading, { "data-slot": "popover-title", className: cn("text-base font-medium", className), ...props }));
15
+ }
16
+ function PopoverDescription({ className, ...props }) {
17
+ return (_jsx("div", { "data-slot": "popover-description", className: cn("text-muted-foreground", className), ...props }));
18
+ }
19
+ export { Popover, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, };
@@ -0,0 +1,4 @@
1
+ import { type RadioGroupProps, type RadioProps } from "react-aria-components";
2
+ declare function RadioGroup({ className, ...props }: RadioGroupProps): import("react").JSX.Element;
3
+ declare function RadioGroupItem({ className, children, ...props }: RadioProps): import("react").JSX.Element;
4
+ export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from "../utils.js";
4
+ import { composeRenderProps, RadioGroup as RadioGroupPrimitive, Radio as RadioPrimitive, } from "react-aria-components";
5
+ function RadioGroup({ className, ...props }) {
6
+ return (_jsx(RadioGroupPrimitive, { "data-slot": "radio-group", className: cn("grid w-full gap-3", className), ...props }));
7
+ }
8
+ function RadioGroupItem({ className, children, ...props }) {
9
+ return (_jsx(RadioPrimitive, { "data-slot": "radio-group-item", className: cn("group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-transparent bg-input/90 outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-focus-visible:border-ring data-focus-visible:ring-3 data-focus-visible:ring-ring/30 data-invalid:border-destructive data-invalid:ring-3 data-invalid:ring-destructive/20 data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 dark:data-invalid:border-destructive/50 dark:data-invalid:ring-destructive/40 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-selected:bg-primary data-selected:text-primary-foreground dark:data-selected:bg-primary", className), ...props, children: composeRenderProps(children, (children, { isSelected }) => (_jsxs(_Fragment, { children: [_jsx("span", { "data-slot": "radio-group-indicator", className: "flex size-4 items-center justify-center", children: isSelected && (_jsx("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground dark:size-2.5" })) }), children] }))) }));
10
+ }
11
+ export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,9 @@
1
+ import { type ButtonProps, type LinkProps } from 'react-aria-components';
2
+ export declare function RowButton({ isSelected, className, ...props }: Omit<ButtonProps, 'className'> & {
3
+ isSelected?: boolean;
4
+ className?: string;
5
+ }): import("react").JSX.Element;
6
+ /** Başka sayfaya giden liste satırı: RowButton'la aynı görünüm. */
7
+ export declare function RowLink({ className, ...props }: Omit<LinkProps, 'className'> & {
8
+ className?: string;
9
+ }): import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button as ButtonPrimitive, Link as LinkPrimitive } from 'react-aria-components';
3
+ import { cn } from '../utils.js';
4
+ /**
5
+ * Tıklanabilir liste satırı ya da açılır bölüm başlığı: tam genişlik, solda metin, üzerine gelince hafif zemin,
6
+ * klavyede içe doğru odak halkası. İç boşluk çağırandan gelir (satırın listesiyle aynı hizada dursun).
7
+ */
8
+ const base = 'flex w-full items-center gap-3 text-start transition-colors outline-hidden hover:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-inset';
9
+ export function RowButton({ isSelected, className, ...props }) {
10
+ // isSelected: listeyi süzen satır (konu, yıldız) seçiliyken zemini kalır.
11
+ return _jsx(ButtonPrimitive, { "aria-pressed": isSelected, className: cn(base, 'cursor-default', isSelected && 'bg-primary/5 hover:bg-primary/10', className), ...props });
12
+ }
13
+ /** Başka sayfaya giden liste satırı: RowButton'la aynı görünüm. */
14
+ export function RowLink({ className, ...props }) {
15
+ return _jsx(LinkPrimitive, { className: cn(base, 'cursor-pointer', className), ...props });
16
+ }
@@ -0,0 +1,3 @@
1
+ import * as React from "react";
2
+ declare function ScrollArea({ className, children, ...props }: React.ComponentProps<"div">): React.JSX.Element;
3
+ export { ScrollArea };
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../utils.js";
3
+ function ScrollArea({ className, children, ...props }) {
4
+ // Use native scrollbar-width and scrollbar-color to customize the scrollbar.
5
+ return (_jsx("div", { "data-slot": "scroll-area", className: cn("relative [scrollbar-width:thin] [scrollbar-color:var(--color-border)_transparent] overflow-auto outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1", className), ...props, children: children }));
6
+ }
7
+ export { ScrollArea };
@@ -0,0 +1,22 @@
1
+ type Size = 'sm' | 'md';
2
+ type Item<T extends string> = {
3
+ id: T;
4
+ label: React.ReactNode; /** Yalnız ikon gösteren seçenek için ad. */
5
+ ariaLabel?: string;
6
+ };
7
+ /** Bölmeli seçicinin zemini ve düğmesi (TabsList görünümü); bağlantıyla kurulan seçiciler (SectionTabs) de bunları kullanır. */
8
+ export declare function segmentedTrack(size?: Size): string;
9
+ export declare function segmentedItem(selected: boolean, size?: Size): string;
10
+ /**
11
+ * Bölmeli seçici: içerik değiştiren ana seçim (grup, liste, varyant). Alt sekmeler yanında `TabsList variant="plain"`,
12
+ * aynı listeyi daraltan süzgeçler hap düğme olarak listenin içinde durur (~/Projeler/Web/PANEL-TASARIM.md §4).
13
+ */
14
+ export declare function Segmented<T extends string>({ items, value, onChange, label, size, className }: {
15
+ items: Item<T>[];
16
+ value: T;
17
+ onChange: (value: T) => void;
18
+ label: string;
19
+ size?: Size;
20
+ className?: string;
21
+ }): import("react").JSX.Element;
22
+ export {};
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from '../utils.js';
3
+ /** Bölmeli seçicinin zemini ve düğmesi (TabsList görünümü); bağlantıyla kurulan seçiciler (SectionTabs) de bunları kullanır. */
4
+ export function segmentedTrack(size = 'md') {
5
+ return cn('inline-flex w-fit max-w-full items-center gap-0.5 overflow-x-auto rounded-full bg-muted p-1 [scrollbar-width:none]', size === 'md' ? 'h-9' : 'h-8');
6
+ }
7
+ export function segmentedItem(selected, size = 'md') {
8
+ return cn('inline-flex h-full shrink-0 items-center gap-1.5 rounded-full px-3 font-medium whitespace-nowrap transition-colors outline-hidden focus-visible:ring-2 focus-visible:ring-ring/40', size === 'md' ? 'text-sm' : 'text-xs', selected ? 'bg-background text-foreground shadow-sm dark:bg-input/30' : 'text-foreground/60 hover:text-foreground dark:text-muted-foreground');
9
+ }
10
+ /**
11
+ * Bölmeli seçici: içerik değiştiren ana seçim (grup, liste, varyant). Alt sekmeler yanında `TabsList variant="plain"`,
12
+ * aynı listeyi daraltan süzgeçler hap düğme olarak listenin içinde durur (~/Projeler/Web/PANEL-TASARIM.md §4).
13
+ */
14
+ export function Segmented({ items, value, onChange, label, size = 'md', className }) {
15
+ return (_jsx("div", { role: "group", "aria-label": label, className: cn(segmentedTrack(size), className), children: items.map((item) => (_jsx("button", { type: "button", "aria-pressed": item.id === value, "aria-label": item.ariaLabel, onClick: () => onChange(item.id), className: segmentedItem(item.id === value, size), children: item.label }, item.id))) }));
16
+ }
@@ -0,0 +1,26 @@
1
+ import * as React from "react";
2
+ import { Button as ButtonPrimitive, Header as HeaderPrimitive, ListBoxItem as ListBoxItemPrimitive, Popover as PopoverPrimitive, Separator as SeparatorPrimitive, type ListBoxProps, type SearchFieldProps, type ListBoxSectionProps as SelectGroupProps, type SelectProps, type SelectValueProps } from "react-aria-components";
3
+ declare function Select<T extends object, M extends "single" | "multiple" = "single">({ className, ...props }: SelectProps<T, M>): React.JSX.Element;
4
+ declare function SelectGroup<T extends object>({ className, ...props }: SelectGroupProps<T>): React.JSX.Element;
5
+ declare function SelectValue<T extends object>({ className, children, ...props }: SelectValueProps<T>): React.JSX.Element;
6
+ declare function SelectTrigger({ className, size, children, ...props }: Omit<React.ComponentProps<typeof ButtonPrimitive>, "children"> & {
7
+ children?: React.ReactNode;
8
+ size?: "sm" | "default";
9
+ }): React.JSX.Element;
10
+ declare function SelectContent({ className, children, placement, offset, crossOffset, footer, ...props }: Omit<React.ComponentProps<typeof PopoverPrimitive>, "className" | "children"> & {
11
+ className?: string;
12
+ children?: React.ReactNode;
13
+ /** Listenin altında sabit alan (ör. çoklu seçimde "Tamam"). */
14
+ footer?: React.ReactNode;
15
+ }): React.JSX.Element;
16
+ declare function SelectPopover({ className, children, placement, offset, crossOffset, ...props }: Omit<React.ComponentProps<typeof PopoverPrimitive>, "className" | "children"> & {
17
+ className?: string;
18
+ children?: React.ReactNode;
19
+ }): React.JSX.Element;
20
+ declare function SelectList<T extends object>({ className, ...props }: ListBoxProps<T>): React.JSX.Element;
21
+ declare function SelectInput({ className, ...props }: SearchFieldProps): React.JSX.Element;
22
+ declare function SelectLabel({ className, ...props }: React.ComponentProps<typeof HeaderPrimitive>): React.JSX.Element;
23
+ declare function SelectItem({ className, children, ...props }: React.ComponentProps<typeof ListBoxItemPrimitive>): React.JSX.Element;
24
+ declare function SelectSeparator({ className, ...props }: React.ComponentProps<typeof SeparatorPrimitive>): React.JSX.Element;
25
+ declare function SelectEmpty({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
26
+ export { Select, SelectContent, SelectGroup, SelectInput, SelectItem, SelectLabel, SelectList, SelectPopover, SelectSeparator, SelectTrigger, SelectValue, SelectEmpty, };
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from "../utils.js";
4
+ import { Button as ButtonPrimitive, composeRenderProps, Header as HeaderPrimitive, ListBoxItem as ListBoxItemPrimitive, ListBox as ListBoxPrimitive, ListBoxSection as ListBoxSectionPrimitive, Popover as PopoverPrimitive, SearchField, Select as SelectPrimitive, SelectValue as SelectValuePrimitive, Separator as SeparatorPrimitive, } from "react-aria-components";
5
+ import { InputGroup, InputGroupAddon, InputGroupInput, } from "./input-group.js";
6
+ import { ChevronDownIcon, SearchIcon, CheckIcon } from "lucide-react";
7
+ function Select({ className, ...props }) {
8
+ return (_jsx(SelectPrimitive, { "data-slot": "select", className: cn("w-fit", className), ...props }));
9
+ }
10
+ function SelectGroup({ className, ...props }) {
11
+ return (_jsx(ListBoxSectionPrimitive, { "data-slot": "select-group", className: cn("scroll-my-1.5 p-1.5", className), ...props }));
12
+ }
13
+ function SelectValue({ className, children, ...props }) {
14
+ return (_jsx(SelectValuePrimitive, { "data-slot": "select-value", className: cn("flex flex-1 text-left data-placeholder:text-muted-foreground", className), ...props, children: typeof children === "function"
15
+ ? children
16
+ : ({ selectedItems, selectedText, defaultChildren }) => selectedItems.length > 1 ? selectedText : defaultChildren }));
17
+ }
18
+ function SelectTrigger({ className, size = "default", children, ...props }) {
19
+ return (_jsxs(ButtonPrimitive, { "data-slot": "select-trigger", "data-size": size, className: cn("flex w-full items-center justify-between gap-1.5 rounded-3xl border border-transparent bg-input/50 px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow,background-color] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [children, _jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })] }));
20
+ }
21
+ function SelectContent({ className, children, placement = "bottom", offset = 4, crossOffset = 0, footer, ...props }) {
22
+ return (_jsxs(SelectPopover, { className: className, placement: placement, offset: offset, crossOffset: crossOffset, ...props, children: [_jsx(SelectList, { children: children }), footer] }));
23
+ }
24
+ function SelectPopover({ className, children, placement = "bottom start", offset = 4, crossOffset = 0, ...props }) {
25
+ return (_jsx(PopoverPrimitive, { "data-slot": "select-content", placement: placement, offset: offset, crossOffset: crossOffset, className: cn("relative isolate z-50 w-max max-w-[min(24rem,90vw)] min-w-(--trigger-width) origin-(--trigger-anchor-point) overflow-hidden rounded-3xl bg-popover text-popover-foreground shadow-lg ring-1 ring-foreground/5 duration-100 data-entering:animate-in data-entering:fade-in-0 data-entering:zoom-in-95 data-exiting:animate-out data-exiting:fade-out-0 data-exiting:zoom-out-95 data-[placement=bottom]:slide-in-from-top-2 data-[placement=left]:slide-in-from-right-2 data-[placement=right]:slide-in-from-left-2 data-[placement=top]:slide-in-from-bottom-2 **:data-[slot$=-item]:data-focused:bg-foreground/10 dark:ring-foreground/10", className), ...props, children: children }));
26
+ }
27
+ function SelectList({ className, ...props }) {
28
+ return (_jsx(ListBoxPrimitive, { "data-slot": "select-list", className: cn("group/select-list max-h-[inherit] scroll-py-1.5 overflow-x-hidden overflow-y-auto p-1.5 outline-hidden", className), ...props }));
29
+ }
30
+ function SelectInput({ className, ...props }) {
31
+ return (_jsx(SearchField, { ...props, autoFocus: true, "data-slot": "select-input-wrapper", className: cn("p-1 pb-0", className), children: _jsxs(InputGroup, { children: [_jsx(InputGroupInput, { "data-slot": "select-input", className: "[&::-webkit-search-cancel-button]:hidden" }), _jsx(InputGroupAddon, { children: _jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })] }) }));
32
+ }
33
+ function SelectLabel({ className, ...props }) {
34
+ return (_jsx(HeaderPrimitive, { "data-slot": "select-label", className: cn("px-3 py-2.5 text-xs text-muted-foreground", className), ...props }));
35
+ }
36
+ function SelectItem({ className, children, ...props }) {
37
+ return (_jsx(ListBoxItemPrimitive, { "data-slot": "select-item", textValue: typeof children === "string" ? children : undefined, className: cn("relative flex w-full cursor-default items-center gap-2.5 rounded-2xl py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-focused:bg-accent data-focused:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className), ...props, children: composeRenderProps(children, (children, { isSelected }) => (_jsxs(_Fragment, { children: [_jsx("span", { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children: children }), _jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: isSelected ? (_jsx(CheckIcon, { className: "pointer-events-none" })) : null })] }))) }));
38
+ }
39
+ function SelectSeparator({ className, ...props }) {
40
+ return (_jsx(SeparatorPrimitive, { "data-slot": "select-separator", className: cn("pointer-events-none -mx-1.5 my-1.5 h-px bg-border", className), ...props }));
41
+ }
42
+ function SelectEmpty({ className, ...props }) {
43
+ return (_jsx("div", { "data-slot": "select-empty", className: cn("hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/select-list:flex", className), ...props }));
44
+ }
45
+ export { Select, SelectContent, SelectGroup, SelectInput, SelectItem, SelectLabel, SelectList, SelectPopover, SelectSeparator, SelectTrigger, SelectValue, SelectEmpty, };
@@ -0,0 +1,3 @@
1
+ import { Separator as SeparatorPrimitive } from "react-aria-components";
2
+ declare function Separator({ className, orientation, ...props }: React.ComponentProps<typeof SeparatorPrimitive>): import("react").JSX.Element;
3
+ export { Separator };
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { cn } from "../utils.js";
4
+ import { Separator as SeparatorPrimitive } from "react-aria-components";
5
+ function Separator({ className, orientation = "horizontal", ...props }) {
6
+ return (_jsx(SeparatorPrimitive, { "data-slot": "separator", orientation: orientation, className: cn("block shrink-0 border-0 bg-border aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=vertical]:w-px aria-[orientation=vertical]:self-stretch [:is(hr)]:h-px [:is(hr)]:w-full", className), ...props }));
7
+ }
8
+ export { Separator };
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ import { Heading, Modal as ModalPrimitive, type ModalOverlayProps as ModalOverlayPrimitiveProps, type DialogProps as SheetPrimitiveProps, type DialogTriggerProps as SheetTriggerPrimitiveProps } from "react-aria-components";
3
+ import { Button } from "./button.js";
4
+ declare function SheetTrigger({ ...props }: SheetTriggerPrimitiveProps): React.JSX.Element;
5
+ declare function SheetClose({ className, variant, size, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
6
+ declare function Sheet({ className, children, side, showCloseButton, ...props }: Omit<ModalOverlayPrimitiveProps, "className" | "children"> & Pick<React.ComponentProps<typeof ModalPrimitive>, "isDismissable"> & {
7
+ className?: string;
8
+ children: React.ReactNode;
9
+ side?: "top" | "right" | "bottom" | "left";
10
+ showCloseButton?: boolean;
11
+ }): React.JSX.Element;
12
+ declare function SheetContent({ className, children, side, showCloseButton, ...props }: React.ComponentProps<typeof Sheet> & {
13
+ side?: "top" | "right" | "bottom" | "left";
14
+ showCloseButton?: boolean;
15
+ }): React.JSX.Element;
16
+ declare function SheetHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
17
+ declare function SheetFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
18
+ declare function SheetTitle({ className, ...props }: Omit<React.ComponentProps<typeof Heading>, "slot">): React.JSX.Element;
19
+ declare function SheetDescription({ className, ...props }: Omit<React.ComponentProps<"div">, "slot">): React.JSX.Element;
20
+ export { type SheetPrimitiveProps, type SheetTriggerPrimitiveProps, Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../utils.js";
3
+ import { Heading, ModalOverlay as ModalOverlayPrimitive, Modal as ModalPrimitive, Dialog as SheetPrimitive, DialogTrigger as SheetTriggerPrimitive, } from "react-aria-components";
4
+ import { Button } from "./button.js";
5
+ import { XIcon } from "lucide-react";
6
+ import { t } from '../config.js';
7
+ function SheetTrigger({ ...props }) {
8
+ return _jsx(SheetTriggerPrimitive, { "data-slot": "sheet-trigger", ...props });
9
+ }
10
+ function SheetClose({ className, variant = "outline", size = "default", ...props }) {
11
+ return (_jsx(Button, { slot: "close", "data-slot": "sheet-close", variant: variant, size: size, className: cn(className), ...props }));
12
+ }
13
+ function SheetOverlay({ className, children, ...props }) {
14
+ return (_jsx(ModalOverlayPrimitive, { "data-slot": "sheet-overlay", isDismissable: true, className: cn("fixed inset-0 z-50 bg-black/30 transition-opacity duration-150 data-entering:opacity-0 data-exiting:opacity-0 supports-backdrop-filter:backdrop-blur-sm", className), ...props, children: children }));
15
+ }
16
+ function Sheet({ className, children, side = "right", showCloseButton = true, ...props }) {
17
+ return (_jsx(SheetOverlay, { ...props, children: _jsx(ModalPrimitive, { "data-slot": "sheet-content", "data-side": side, className: cn("fixed z-50 flex flex-col bg-popover bg-clip-padding text-sm text-popover-foreground shadow-xl transition duration-200 ease-in-out data-entering:opacity-0 data-exiting:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-entering:translate-y-[2.5rem] data-[side=bottom]:data-exiting:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-entering:translate-x-[-2.5rem] data-[side=left]:data-exiting:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-entering:translate-x-[2.5rem] data-[side=right]:data-exiting:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-entering:translate-y-[-2.5rem] data-[side=top]:data-exiting:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", className), children: _jsxs(SheetPrimitive, { "data-slot": "sheet", className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] [gap:inherit] outline-none", children: [children, showCloseButton && (_jsxs(SheetClose, { variant: "ghost", className: "absolute top-4 right-4 bg-secondary", size: "icon-sm", children: [_jsx(XIcon, {}), _jsx("span", { className: "sr-only", children: t("Close") })] }))] }) }) }));
18
+ }
19
+ function SheetContent({ className, children, side = "right", showCloseButton = true, ...props }) {
20
+ return (_jsx(Sheet, { className: className, side: side, showCloseButton: showCloseButton, ...props, children: children }));
21
+ }
22
+ function SheetHeader({ className, ...props }) {
23
+ return (_jsx("div", { "data-slot": "sheet-header", className: cn("flex flex-col gap-1.5 p-6", className), ...props }));
24
+ }
25
+ function SheetFooter({ className, ...props }) {
26
+ return (_jsx("div", { "data-slot": "sheet-footer", className: cn("mt-auto flex flex-col gap-2 p-6", className), ...props }));
27
+ }
28
+ function SheetTitle({ className, ...props }) {
29
+ return (_jsx(Heading, { slot: "title", "data-slot": "sheet-title", className: cn("font-heading text-base font-medium text-foreground", className), ...props }));
30
+ }
31
+ function SheetDescription({ className, ...props }) {
32
+ return (_jsx("div", { "data-slot": "sheet-description", className: cn("text-sm text-muted-foreground", className), ...props }));
33
+ }
34
+ export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
@@ -0,0 +1,77 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ import { type ButtonProps, type LinkProps } from "react-aria-components";
4
+ import { Button } from "./button.js";
5
+ import { Input } from "./input.js";
6
+ import { Separator } from "./separator.js";
7
+ import { Tooltip } from "./tooltip.js";
8
+ type SidebarContextProps = {
9
+ state: "expanded" | "collapsed";
10
+ open: boolean;
11
+ setOpen: (open: boolean) => void;
12
+ openMobile: boolean;
13
+ setOpenMobile: (open: boolean) => void;
14
+ isMobile: boolean;
15
+ toggleSidebar: () => void;
16
+ };
17
+ type SidebarButtonProps = (LinkProps & {
18
+ href: string;
19
+ }) | (ButtonProps & {
20
+ href?: never;
21
+ });
22
+ declare function useSidebar(): SidebarContextProps;
23
+ declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, persist, className, style, children, ...props }: React.ComponentProps<"div"> & {
24
+ defaultOpen?: boolean;
25
+ open?: boolean;
26
+ onOpenChange?: (open: boolean) => void;
27
+ /**
28
+ * `false`: aç/kapa çereze YAZILMAZ — tam ekran çalışma alanı (tasarım editörü)
29
+ * menüyü kendi açılışında daraltır; kullanıcı orada açıp kapatsa da diğer
30
+ * ekranlardaki tercihi değişmez, editörden çıkınca eski hâli döner.
31
+ */
32
+ persist?: boolean;
33
+ }): React.JSX.Element;
34
+ declare function Sidebar({ side, variant, collapsible, className, children, dir, ...props }: React.ComponentProps<"div"> & {
35
+ side?: "left" | "right";
36
+ variant?: "sidebar" | "floating" | "inset";
37
+ collapsible?: "offcanvas" | "icon" | "none";
38
+ }): React.JSX.Element;
39
+ declare function SidebarTrigger({ className, onPress, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
40
+ /** Menünün sağ kenarında, dikeyde ortada aç/kapat düğmesi; menü daralınca ok yön değiştirir. */
41
+ declare function SidebarRail({ className, ...props }: React.ComponentProps<"button">): React.JSX.Element;
42
+ declare function SidebarInset({ className, ...props }: React.ComponentProps<"main">): React.JSX.Element;
43
+ declare function SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>): React.JSX.Element;
44
+ declare function SidebarHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
45
+ declare function SidebarFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
46
+ declare function SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>): React.JSX.Element;
47
+ declare function SidebarContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
48
+ declare function SidebarGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
49
+ declare function SidebarGroupLabel({ className, elementType: Element, ...props }: React.HTMLAttributes<HTMLElement> & {
50
+ elementType?: React.ElementType;
51
+ }): React.JSX.Element;
52
+ declare function SidebarGroupAction({ className, ...props }: React.ComponentProps<"button">): React.JSX.Element;
53
+ declare function SidebarGroupContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
54
+ declare function SidebarMenu({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
55
+ declare function SidebarMenuItem({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
56
+ declare const sidebarMenuButtonVariants: (props?: ({
57
+ variant?: "default" | "outline" | null | undefined;
58
+ size?: "default" | "lg" | "sm" | null | undefined;
59
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
60
+ declare function SidebarMenuButton({ isActive, variant, size, tooltip, className, ...props }: SidebarButtonProps & {
61
+ isActive?: boolean;
62
+ tooltip?: string | React.ComponentProps<typeof Tooltip>;
63
+ } & VariantProps<typeof sidebarMenuButtonVariants>): React.JSX.Element;
64
+ declare function SidebarMenuAction({ className, showOnHover, ...props }: ButtonProps & {
65
+ showOnHover?: boolean;
66
+ }): React.JSX.Element;
67
+ declare function SidebarMenuBadge({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
68
+ declare function SidebarMenuSkeleton({ className, showIcon, ...props }: React.ComponentProps<"div"> & {
69
+ showIcon?: boolean;
70
+ }): React.JSX.Element;
71
+ declare function SidebarMenuSub({ className, ...props }: React.ComponentProps<"ul">): React.JSX.Element;
72
+ declare function SidebarMenuSubItem({ className, ...props }: React.ComponentProps<"li">): React.JSX.Element;
73
+ declare function SidebarMenuSubButton({ size, isActive, className, ...props }: SidebarButtonProps & {
74
+ size?: "sm" | "md";
75
+ isActive?: boolean;
76
+ }): React.JSX.Element;
77
+ export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar, };