@the12company/ui 0.1.1 → 0.1.3

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.
package/README.md CHANGED
@@ -1,37 +1,200 @@
1
- # `@the12company/ui`
1
+ # @the12company/ui
2
2
 
3
- Shared **tokens + components** (Vite / Next). Lives in `packages/ui`.
3
+ **Capivara design system** shared React components and design tokens for Vite and Next.js apps.
4
4
 
5
- ## Local use (this repo)
5
+ One kit. Many products. Each app keeps its own brand color by overriding CSS variables.
6
6
 
7
- Vite/TS aliases resolve to source — no publish needed day to day.
7
+ ---
8
8
 
9
- ```tsx
10
- import { Button, Card } from "@the12company/ui";
11
- // or keep existing paths:
12
- import { Button } from "@/components/ui/button";
9
+ ## What’s inside
10
+
11
+ | Layer | What you get |
12
+ | ----- | ------------ |
13
+ | **Tokens** | Colors, radius, sidebar, charts (`theme.css`) |
14
+ | **Utilities** | Shared classes like `bg-content-glass` |
15
+ | **Components** | Buttons, forms, dialogs, sidebar, chrome header, … |
16
+ | **Helpers** | `cn`, `useToast`, `useIsMobile` |
17
+
18
+ Lives in this monorepo at `packages/ui`. Published to npm as `@the12company/ui`.
19
+
20
+ ---
21
+
22
+ ## Quick start (another app)
23
+
24
+ ### 1. Install
25
+
26
+ ```bash
27
+ npm install @the12company/ui
13
28
  ```
14
29
 
30
+ Also install the **peer dependencies** for the components you use (React, Radix primitives, etc.). See `package.json` → `peerDependencies`.
31
+
32
+ ### 2. Styles
33
+
34
+ In your global CSS:
35
+
15
36
  ```css
16
37
  @import "@the12company/ui/tokens/theme.css";
38
+ @import "@the12company/ui/tokens/utilities.css";
17
39
  ```
18
40
 
19
- ## Republish after changes
41
+ ### 3. Tailwind
42
+
43
+ Map semantic colors to the CSS variables (same pattern as this repo’s `tailwind.config.ts`), and include the package in `content` so classes aren’t purged:
44
+
45
+ ```ts
46
+ content: [
47
+ "./src/**/*.{ts,tsx}",
48
+ "./node_modules/@the12company/ui/dist/**/*.{js,mjs}",
49
+ ]
50
+ ```
51
+
52
+ ### 4. Use components
53
+
54
+ ```tsx
55
+ import { Button, Card, AppChromeHeader } from "@the12company/ui";
56
+
57
+ export function Example() {
58
+ return (
59
+ <Card className="p-6">
60
+ <Button>Salvar</Button>
61
+ </Card>
62
+ );
63
+ }
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Branding (your “main” color)
69
+
70
+ Components use **semantic** tokens (`bg-primary`, `text-destructive`, …) — never a hard-coded brand hex.
71
+
72
+ Override in your app:
73
+
74
+ ```css
75
+ :root {
76
+ --primary: 160 84% 39%;
77
+ --primary-foreground: 0 0% 100%;
78
+ --ring: 160 84% 39%;
79
+ }
80
+
81
+ .dark {
82
+ --primary: 160 70% 45%;
83
+ --primary-foreground: 0 0% 100%;
84
+ }
85
+ ```
86
+
87
+ Values are **HSL channels without `hsl()`** (e.g. `217 91% 50%`), matching Tailwind’s `hsl(var(--primary))` setup.
88
+
89
+ Neutral defaults live in `theme-contract.css`. This product’s palette is `theme.css`.
20
90
 
21
- 1. Edit components under `packages/ui/src/`
22
- 2. Bump version in `packages/ui/package.json` (e.g. `0.1.0` → `0.1.1`)
23
- 3. From repo root:
91
+ ---
92
+
93
+ ## Layout chrome (structure only)
94
+
95
+ Floating glass header and sidebar shells — pass product UI as slots:
96
+
97
+ ```tsx
98
+ import {
99
+ AppChromeBrand,
100
+ AppChromeHeader,
101
+ AppChromeSidebar,
102
+ PageHeader,
103
+ ChartCard,
104
+ ListingPagination,
105
+ SearchableSelect,
106
+ SidebarProvider,
107
+ SidebarTrigger,
108
+ } from "@the12company/ui";
109
+
110
+ <SidebarProvider>
111
+ <AppChromeSidebar
112
+ header={
113
+ <AppChromeBrand
114
+ logo={<img src="/logo.svg" alt="" className="h-4.5 w-4.5" />}
115
+ title="Your Product"
116
+ subtitle="Tagline"
117
+ />
118
+ }
119
+ footer={<YourAccountMenu />}
120
+ >
121
+ <YourNavLinks />
122
+ </AppChromeSidebar>
123
+
124
+ <AppChromeHeader
125
+ start={<SidebarTrigger />}
126
+ topBar={<YourTopBar />}
127
+ >
128
+ <YourFiltersOrTrialStrip />
129
+ </AppChromeHeader>
130
+ </SidebarProvider>
131
+ ```
132
+
133
+ Also available:
134
+
135
+ | Component | Role |
136
+ | --------- | ---- |
137
+ | `PageHeader` | Title block (label, badge, meta, back, actions) |
138
+ | `ChartCard` | Section / chart surface |
139
+ | `ListingPagination` | List paging (default + minimal) |
140
+ | `SearchableSelect` | Async combobox — inject `loadItems` |
141
+
142
+ Primitives (`Sidebar`, `SidebarMenu`, `SidebarTrigger`, …) are also exported for custom layouts.
143
+
144
+ No routing or business logic inside the kit — only structure and look.
145
+
146
+ ---
147
+
148
+ ## Developing in this repo
149
+
150
+ Day to day you **don’t need to publish**. Vite/TS resolve `@the12company/ui` to source.
151
+
152
+ ```tsx
153
+ import { Button } from "@the12company/ui";
154
+ // existing app paths still work:
155
+ import { Button } from "@/components/ui/button";
156
+ ```
157
+
158
+ Edit files under `packages/ui/src/`.
159
+
160
+ ---
161
+
162
+ ## Publishing a new version
163
+
164
+ Only needed when other repos should get updates.
165
+
166
+ 1. Change code in `packages/ui/src/`
167
+ 2. Bump `version` in `packages/ui/package.json` (e.g. `0.1.1` → `0.1.2`)
168
+ 3. From the **repo root**:
24
169
 
25
170
  ```bash
26
171
  npm run publish:ui
27
172
  ```
28
173
 
29
- (`NPM_TOKEN` / `npm login` is only required for this publish step.)
174
+ Requires `npm login` (or a local auth token). The GitHub `NPM_TOKEN` secret is optional if you only publish from your machine.
30
175
 
31
- ## Install in another repo
176
+ > Same version can’t be republished on npm — always bump first.
177
+
178
+ ---
179
+
180
+ ## Package layout
32
181
 
33
- ```bash
34
- npm install @the12company/ui
35
182
  ```
183
+ packages/ui/
184
+ ├── src/
185
+ │ ├── components/ # primitives + chrome + PageHeader, ChartCard, …
186
+ │ ├── hooks/
187
+ │ ├── lib/ # cn, pagination helpers
188
+ │ ├── tokens/
189
+ │ └── index.ts
190
+ ├── package.json
191
+ └── README.md
192
+ ```
193
+
194
+ ---
195
+
196
+ ## Tips
36
197
 
37
- Install peer deps your app needs (React, Radix primitives used by the components you import, etc.).
198
+ - Prefer importing from `@the12company/ui` in new apps.
199
+ - Keep product pages, agents, and API logic **out** of this package.
200
+ - After adding a new shared component: export it from `src/index.ts`, bump version, publish.
package/dist/index.d.ts CHANGED
@@ -110,6 +110,23 @@ declare const AlertDialogDescription: React$1.ForwardRefExoticComponent<Omit<Ale
110
110
  declare const AlertDialogAction: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
111
111
  declare const AlertDialogCancel: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
112
112
 
113
+ type AppChromeBrandProps = {
114
+ /** Brand mark (img, svg, or custom node). */
115
+ logo?: React$1.ReactNode;
116
+ title?: React$1.ReactNode;
117
+ subtitle?: React$1.ReactNode;
118
+ className?: string;
119
+ /**
120
+ * Override collapse detection. When omitted, uses sidebar state
121
+ * (hidden on mobile drawer).
122
+ */
123
+ collapsed?: boolean;
124
+ };
125
+ /**
126
+ * Sidebar brand row: logo + title/subtitle that collapse with the sidebar.
127
+ */
128
+ declare function AppChromeBrand({ logo, title, subtitle, className, collapsed: collapsedProp, }: AppChromeBrandProps): React$1.JSX.Element;
129
+
113
130
  type AppChromeHeaderProps = {
114
131
  /** Ref on the outer `<header>` (e.g. for measuring chrome height). */
115
132
  headerRef?: React$1.Ref<HTMLElement>;
@@ -127,6 +144,29 @@ type AppChromeHeaderProps = {
127
144
  */
128
145
  declare function AppChromeHeader({ headerRef, className, start, topBar, children, }: AppChromeHeaderProps): React$1.JSX.Element;
129
146
 
147
+ type AppChromeSidebarProps = {
148
+ /** Brand / logo area at the top. */
149
+ header?: React$1.ReactNode;
150
+ /** Navigation (menus, links). */
151
+ children?: React$1.ReactNode;
152
+ /** Account / settings docked at the bottom. */
153
+ footer?: React$1.ReactNode;
154
+ /** Passed to underlying `Sidebar` (default `"icon"`). */
155
+ collapsible?: "offcanvas" | "icon" | "none";
156
+ className?: string;
157
+ contentClassName?: string;
158
+ /**
159
+ * On mobile / drawer mode, close the sheet when an in-app link is clicked.
160
+ * @default true
161
+ */
162
+ closeOnNavigate?: boolean;
163
+ };
164
+ /**
165
+ * Structural app sidebar: header + scrollable nav + footer.
166
+ * Product nav items, brand, and account UI are passed as slots.
167
+ */
168
+ declare function AppChromeSidebar({ header, children, footer, collapsible, className, contentClassName, closeOnNavigate, }: AppChromeSidebarProps): React$1.JSX.Element;
169
+
130
170
  declare const AspectRatio: React$1.ForwardRefExoticComponent<AspectRatioPrimitive.AspectRatioProps & React$1.RefAttributes<HTMLDivElement>>;
131
171
 
132
172
  declare const Avatar: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
@@ -256,6 +296,22 @@ declare const ChartLegendContent: React$1.ForwardRefExoticComponent<Omit<React$1
256
296
  nameKey?: string;
257
297
  }, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
258
298
 
299
+ type ChartCardProps = {
300
+ title: React$1.ReactNode;
301
+ subtitle?: React$1.ReactNode;
302
+ children: React$1.ReactNode;
303
+ action?: React$1.ReactNode;
304
+ titleInfo?: React$1.ReactNode;
305
+ titleClassName?: string;
306
+ /** Use glass surface (`bg-content-glass`) instead of solid card. */
307
+ glass?: boolean;
308
+ className?: string;
309
+ };
310
+ /**
311
+ * Section / chart surface with title row, optional subtitle, and action slot.
312
+ */
313
+ declare function ChartCard({ title, subtitle, children, action, titleInfo, titleClassName, glass, className, }: ChartCardProps): React$1.JSX.Element;
314
+
259
315
  declare const Checkbox: React$1.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
260
316
 
261
317
  declare const Collapsible: React$1.ForwardRefExoticComponent<CollapsiblePrimitive.CollapsibleProps & React$1.RefAttributes<HTMLDivElement>>;
@@ -500,6 +556,28 @@ declare const InputOTPSeparator: React$1.ForwardRefExoticComponent<Omit<React$1.
500
556
 
501
557
  declare const Label: React$1.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React$1.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: class_variance_authority_types.ClassProp | undefined) => string> & React$1.RefAttributes<HTMLLabelElement>>;
502
558
 
559
+ type ListingPaginationProps = {
560
+ page: number;
561
+ totalPages: number;
562
+ total?: number;
563
+ pageSize?: number;
564
+ itemLabel?: string;
565
+ disabled?: boolean;
566
+ variant?: "default" | "minimal";
567
+ className?: string;
568
+ onPageChange: (page: number) => void;
569
+ /** Override total formatting in the range label (e.g. capped counts). */
570
+ formatTotal?: (n: number) => string;
571
+ labels?: {
572
+ previous?: string;
573
+ next?: string;
574
+ previousAria?: string;
575
+ nextAria?: string;
576
+ pageAria?: (page: number) => string;
577
+ };
578
+ };
579
+ declare function ListingPagination({ page, totalPages, total, pageSize, itemLabel, disabled, variant, className, onPageChange, formatTotal, labels, }: ListingPaginationProps): React$1.JSX.Element | null;
580
+
503
581
  declare const MenubarMenu: (props: MenubarPrimitive.MenubarMenuProps & {
504
582
  __scopeMenubar?: _radix_ui_react_context.Scope;
505
583
  }) => React$1.JSX.Element;
@@ -538,6 +616,33 @@ declare const NavigationMenuLink: React$1.ForwardRefExoticComponent<NavigationMe
538
616
  declare const NavigationMenuViewport: React$1.ForwardRefExoticComponent<Omit<NavigationMenuPrimitive.NavigationMenuViewportProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
539
617
  declare const NavigationMenuIndicator: React$1.ForwardRefExoticComponent<Omit<NavigationMenuPrimitive.NavigationMenuIndicatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
540
618
 
619
+ type PageHeaderProps = {
620
+ /** Optional eyebrow above the title. */
621
+ label?: React$1.ReactNode;
622
+ title: React$1.ReactNode;
623
+ description?: React$1.ReactNode;
624
+ /** Shown while the title is resolving (e.g. async folder name). */
625
+ titleLoading?: boolean;
626
+ /** Badge or chips next to the title. */
627
+ badge?: React$1.ReactNode;
628
+ /** Right-side meta (e.g. “Updated at …”). */
629
+ meta?: React$1.ReactNode;
630
+ /** Back control (link/button) — fully owned by the consumer. */
631
+ back?: React$1.ReactNode;
632
+ /** Actions aligned to the end (buttons, menus). */
633
+ children?: React$1.ReactNode;
634
+ className?: string;
635
+ titleClassName?: string;
636
+ descriptionClassName?: string;
637
+ /** Skeleton width hint when `titleLoading`. */
638
+ titleSkeletonClassName?: string;
639
+ };
640
+ /**
641
+ * Shared page title block: optional back, label, title (+ badge),
642
+ * description, meta, and trailing actions.
643
+ */
644
+ declare function PageHeader({ label, title, description, titleLoading, badge, meta, back, children, className, titleClassName, descriptionClassName, titleSkeletonClassName, }: PageHeaderProps): React$1.JSX.Element;
645
+
541
646
  declare const Pagination: {
542
647
  ({ className, ...props }: React$1.ComponentProps<"nav">): React$1.JSX.Element;
543
648
  displayName: string;
@@ -600,6 +705,51 @@ declare const ResizableHandle: ({ withHandle, className, ...props }: React.Compo
600
705
  declare const ScrollArea: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
601
706
  declare const ScrollBar: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
602
707
 
708
+ type SearchableSelectItem = {
709
+ id: string;
710
+ label: string;
711
+ /** Optional secondary text (e.g. id shown beside the name). */
712
+ secondary?: string;
713
+ };
714
+ type SearchableSelectLoadResult = {
715
+ items: SearchableSelectItem[];
716
+ hasMore: boolean;
717
+ };
718
+ type SearchableSelectProps = {
719
+ value: string;
720
+ onChange: (id: string) => void;
721
+ /** Sentinel value meaning “no filter / all”. @default "all" */
722
+ allValue?: string;
723
+ allLabel: string;
724
+ searchPlaceholder: string;
725
+ loadItems: (args: {
726
+ query: string;
727
+ limit: number;
728
+ offset: number;
729
+ }) => Promise<SearchableSelectLoadResult>;
730
+ /**
731
+ * Resolve a label when the selected id is not yet in the loaded list.
732
+ * Return null to fall back to showing the raw id.
733
+ */
734
+ resolveLabel?: (id: string) => Promise<string | null>;
735
+ pageSize?: number;
736
+ triggerClassName?: string;
737
+ icon?: React$1.ReactNode;
738
+ nestedInPopover?: boolean;
739
+ disabled?: boolean;
740
+ /** When this changes, cached items/labels are cleared. */
741
+ resetKey?: string | number;
742
+ emptyLabel?: string;
743
+ loadingLabel?: string;
744
+ loadingMoreLabel?: string;
745
+ debounceMs?: number;
746
+ };
747
+ /**
748
+ * Async searchable combobox with infinite scroll.
749
+ * Data loading is injected via `loadItems` — no product API coupling.
750
+ */
751
+ declare function SearchableSelect({ value, onChange, allValue, allLabel, searchPlaceholder, loadItems, resolveLabel, pageSize, triggerClassName, icon, nestedInPopover, disabled, resetKey, emptyLabel, loadingLabel, loadingMoreLabel, debounceMs, }: SearchableSelectProps): React$1.JSX.Element;
752
+
603
753
  declare const Select: React$1.FC<SelectPrimitive.SelectProps>;
604
754
  declare const SelectGroup: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React$1.RefAttributes<HTMLDivElement>>;
605
755
  declare const SelectValue: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React$1.RefAttributes<HTMLSpanElement>>;
@@ -621,7 +771,7 @@ declare const SheetClose: React$1.ForwardRefExoticComponent<DialogPrimitive.Dial
621
771
  declare const SheetPortal: React$1.FC<DialogPrimitive.DialogPortalProps>;
622
772
  declare const SheetOverlay: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
623
773
  declare const sheetVariants: (props?: ({
624
- side?: "top" | "bottom" | "right" | "left" | null | undefined;
774
+ side?: "top" | "bottom" | "left" | "right" | null | undefined;
625
775
  } & class_variance_authority_types.ClassProp) | undefined) => string;
626
776
  interface SheetContentProps extends React$1.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
627
777
  overlayClassName?: string;
@@ -773,4 +923,8 @@ declare const ToggleGroupItem: React$1.ForwardRefExoticComponent<Omit<ToggleGrou
773
923
  size?: "default" | "sm" | "lg" | null | undefined;
774
924
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<HTMLButtonElement>>;
775
925
 
776
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppChromeHeader, type AppChromeHeaderProps, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, Dropdown, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Toaster$1 as SonnerToaster, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, type TableProps, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Toast$1 as Toast, ToastAction, type ToastActionElement, ToastClose, ToastDescription, type ToastProps, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cn, inputVariants, navigationMenuTriggerStyle, toast, toggleVariants, useFormField, useIsMobile, useSidebar, useToast };
926
+ type VisiblePage = number | "ellipsis";
927
+ declare function buildVisiblePages(current: number, totalPages: number): VisiblePage[];
928
+ declare function buildRangeLabel(page: number, pageSize: number, total: number, itemLabel?: string, formatTotal?: (n: number) => string): string;
929
+
930
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppChromeBrand, type AppChromeBrandProps, AppChromeHeader, type AppChromeHeaderProps, AppChromeSidebar, type AppChromeSidebarProps, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartCard, type ChartCardProps, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, Dropdown, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, Label, ListingPagination, type ListingPaginationProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, PageHeader, type PageHeaderProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, SearchableSelect, type SearchableSelectItem, type SearchableSelectLoadResult, type SearchableSelectProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Toaster$1 as SonnerToaster, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, type TableProps, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Toast$1 as Toast, ToastAction, type ToastActionElement, ToastClose, ToastDescription, type ToastProps, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type VisiblePage, badgeVariants, buildRangeLabel, buildVisiblePages, buttonVariants, cn, inputVariants, navigationMenuTriggerStyle, toast, toggleVariants, useFormField, useIsMobile, useSidebar, useToast };