@the12company/ui 0.1.2 → 0.1.5

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
@@ -96,15 +96,26 @@ Floating glass header and sidebar shells — pass product UI as slots:
96
96
 
97
97
  ```tsx
98
98
  import {
99
+ AppChromeBrand,
99
100
  AppChromeHeader,
100
101
  AppChromeSidebar,
102
+ PageHeader,
103
+ ChartCard,
104
+ ListingPagination,
105
+ SearchableSelect,
101
106
  SidebarProvider,
102
107
  SidebarTrigger,
103
108
  } from "@the12company/ui";
104
109
 
105
110
  <SidebarProvider>
106
111
  <AppChromeSidebar
107
- header={<YourBrand />}
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
+ }
108
119
  footer={<YourAccountMenu />}
109
120
  >
110
121
  <YourNavLinks />
@@ -119,6 +130,15 @@ import {
119
130
  </SidebarProvider>
120
131
  ```
121
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
+
122
142
  Primitives (`Sidebar`, `SidebarMenu`, `SidebarTrigger`, …) are also exported for custom layouts.
123
143
 
124
144
  No routing or business logic inside the kit — only structure and look.
@@ -162,18 +182,28 @@ Requires `npm login` (or a local auth token). The GitHub `NPM_TOKEN` secret is o
162
182
  ```
163
183
  packages/ui/
164
184
  ├── src/
165
- │ ├── components/ # UI primitives + AppChromeHeader
166
- ├── hooks/ # useToast, useIsMobile
167
- │ ├── lib/cn.ts
185
+ │ ├── components/ # primitives + chrome + PageHeader, ChartCard, …
186
+ │ └── auth/ # AuthShell, AuthCard, Aurora, EmailInput, PasswordInput, …
187
+ │ ├── hooks/
188
+ │ ├── lib/ # cn, pagination helpers
168
189
  │ ├── tokens/
169
- │ │ ├── theme.css # Capivara / QA brand
170
- │ │ ├── theme-contract.css # token names + neutrals
171
- │ │ └── utilities.css # bg-content-glass, …
172
190
  │ └── index.ts
173
191
  ├── package.json
174
192
  └── README.md
175
193
  ```
176
194
 
195
+ You can group related components in folders (e.g. `components/auth/`). Export them from a folder `index.ts` and from the package root `src/index.ts` so consumers can still do:
196
+
197
+ ```tsx
198
+ import { EmailInput, PasswordInput } from "@the12company/ui";
199
+ ```
200
+
201
+ In this monorepo (Vite/TS aliases), deep imports also work:
202
+
203
+ ```tsx
204
+ import { EmailInput } from "@the12company/ui/components/auth";
205
+ ```
206
+
177
207
  ---
178
208
 
179
209
  ## Tips
package/dist/index.d.ts CHANGED
@@ -20,7 +20,6 @@ import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
20
20
  import * as DialogPrimitive from '@radix-ui/react-dialog';
21
21
  import { DialogProps } from '@radix-ui/react-dialog';
22
22
  import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
23
- import * as vaul from 'vaul';
24
23
  import { Drawer as Drawer$1 } from 'vaul';
25
24
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
26
25
  import * as react_hook_form from 'react-hook-form';
@@ -110,6 +109,23 @@ declare const AlertDialogDescription: React$1.ForwardRefExoticComponent<Omit<Ale
110
109
  declare const AlertDialogAction: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
111
110
  declare const AlertDialogCancel: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
112
111
 
112
+ type AppChromeBrandProps = {
113
+ /** Brand mark (img, svg, or custom node). */
114
+ logo?: React$1.ReactNode;
115
+ title?: React$1.ReactNode;
116
+ subtitle?: React$1.ReactNode;
117
+ className?: string;
118
+ /**
119
+ * Override collapse detection. When omitted, uses sidebar state
120
+ * (hidden on mobile drawer).
121
+ */
122
+ collapsed?: boolean;
123
+ };
124
+ /**
125
+ * Sidebar brand row: logo + title/subtitle that collapse with the sidebar.
126
+ */
127
+ declare function AppChromeBrand({ logo, title, subtitle, className, collapsed: collapsedProp, }: AppChromeBrandProps): React$1.JSX.Element;
128
+
113
129
  type AppChromeHeaderProps = {
114
130
  /** Ref on the outer `<header>` (e.g. for measuring chrome height). */
115
131
  headerRef?: React$1.Ref<HTMLElement>;
@@ -152,6 +168,103 @@ declare function AppChromeSidebar({ header, children, footer, collapsible, class
152
168
 
153
169
  declare const AspectRatio: React$1.ForwardRefExoticComponent<AspectRatioPrimitive.AspectRatioProps & React$1.RefAttributes<HTMLDivElement>>;
154
170
 
171
+ type AuroraProps = {
172
+ /** Exactly three hex colors for the horizontal ramp (fewer/more are normalized). */
173
+ colorStops?: [string, string, string] | string[];
174
+ amplitude?: number;
175
+ blend?: number;
176
+ /** Override animation clock (ms); default uses `requestAnimationFrame` time. */
177
+ time?: number;
178
+ speed?: number;
179
+ };
180
+ /** Full-bleed WebGL aurora background (requires peer `ogl`). */
181
+ declare function Aurora(props: AuroraProps): React$1.JSX.Element;
182
+
183
+ declare const authBannerVariants: (props?: ({
184
+ variant?: "destructive" | "success" | null | undefined;
185
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
186
+ type AuthBannerProps = React$1.HTMLAttributes<HTMLDivElement> & VariantProps<typeof authBannerVariants> & {
187
+ /** Override the default status icon. */
188
+ icon?: React$1.ReactNode;
189
+ };
190
+ declare const AuthBanner: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
191
+ variant?: "destructive" | "success" | null | undefined;
192
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & {
193
+ /** Override the default status icon. */
194
+ icon?: React$1.ReactNode;
195
+ } & React$1.RefAttributes<HTMLDivElement>>;
196
+
197
+ type AuthBrandProps = React$1.HTMLAttributes<HTMLElement> & {
198
+ /** Product mark (e.g. `<img />` or logo component). */
199
+ logo: React$1.ReactNode;
200
+ title: React$1.ReactNode;
201
+ description?: React$1.ReactNode;
202
+ };
203
+ /**
204
+ * Centered product brand block above the auth card.
205
+ */
206
+ declare const AuthBrand: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLElement> & {
207
+ /** Product mark (e.g. `<img />` or logo component). */
208
+ logo: React$1.ReactNode;
209
+ title: React$1.ReactNode;
210
+ description?: React$1.ReactNode;
211
+ } & React$1.RefAttributes<HTMLElement>>;
212
+
213
+ /**
214
+ * Glass auth surface. Prefer this over `Card` for login/register —
215
+ * stock `Card` uses border + `bg-card` and different radius/padding.
216
+ */
217
+ declare const AuthCard: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
218
+ declare const AuthCardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
219
+ declare const AuthCardTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHeadingElement> & React$1.RefAttributes<HTMLHeadingElement>>;
220
+ declare const AuthCardDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
221
+
222
+ type AuthFieldErrorProps = React$1.HTMLAttributes<HTMLParagraphElement>;
223
+ /** Inline field validation message under auth inputs. */
224
+ declare const AuthFieldError: React$1.ForwardRefExoticComponent<AuthFieldErrorProps & React$1.RefAttributes<HTMLParagraphElement>>;
225
+
226
+ type AuthFooterProps = React$1.HTMLAttributes<HTMLParagraphElement>;
227
+ /** Muted footer line under the auth card (e.g. “Já tem conta? Entrar”). */
228
+ declare const AuthFooter: React$1.ForwardRefExoticComponent<AuthFooterProps & React$1.RefAttributes<HTMLParagraphElement>>;
229
+ type AuthFooterLinkProps = React$1.AnchorHTMLAttributes<HTMLAnchorElement> & {
230
+ asChild?: boolean;
231
+ };
232
+ /** Link style for auth footer CTAs — needs `.hover-underline` from utilities.css. */
233
+ declare const AuthFooterLink: React$1.ForwardRefExoticComponent<React$1.AnchorHTMLAttributes<HTMLAnchorElement> & {
234
+ asChild?: boolean;
235
+ } & React$1.RefAttributes<HTMLAnchorElement>>;
236
+
237
+ type AuthShellProps = React$1.HTMLAttributes<HTMLDivElement> & {
238
+ /** Full-bleed background (e.g. `<Aurora />`). */
239
+ background?: React$1.ReactNode;
240
+ /** Classes for the background layer (opacity, etc.). */
241
+ backgroundClassName?: string;
242
+ };
243
+ /**
244
+ * Full-viewport auth page shell: centered column over an optional animated background.
245
+ */
246
+ declare const AuthShell: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & {
247
+ /** Full-bleed background (e.g. `<Aurora />`). */
248
+ background?: React$1.ReactNode;
249
+ /** Classes for the background layer (opacity, etc.). */
250
+ backgroundClassName?: string;
251
+ } & React$1.RefAttributes<HTMLDivElement>>;
252
+
253
+ declare const inputVariants: (props?: ({
254
+ variant?: "default" | "outline" | null | undefined;
255
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
256
+ type InputProps = React$1.ComponentProps<"input"> & VariantProps<typeof inputVariants>;
257
+ declare const Input: React$1.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
258
+
259
+ type EmailInputProps = Omit<InputProps, "type">;
260
+ declare const EmailInput: React$1.ForwardRefExoticComponent<Omit<EmailInputProps, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
261
+
262
+ type PasswordInputProps = Omit<InputProps, "type"> & {
263
+ /** Initial visibility of the password text. */
264
+ defaultVisible?: boolean;
265
+ };
266
+ declare const PasswordInput: React$1.ForwardRefExoticComponent<Omit<PasswordInputProps, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
267
+
155
268
  declare const Avatar: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
156
269
  declare const AvatarImage: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarImageProps & React$1.RefAttributes<HTMLImageElement>, "ref"> & React$1.RefAttributes<HTMLImageElement>>;
157
270
  declare const AvatarFallback: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
@@ -279,6 +392,22 @@ declare const ChartLegendContent: React$1.ForwardRefExoticComponent<Omit<React$1
279
392
  nameKey?: string;
280
393
  }, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
281
394
 
395
+ type ChartCardProps = {
396
+ title: React$1.ReactNode;
397
+ subtitle?: React$1.ReactNode;
398
+ children: React$1.ReactNode;
399
+ action?: React$1.ReactNode;
400
+ titleInfo?: React$1.ReactNode;
401
+ titleClassName?: string;
402
+ /** Use glass surface (`bg-content-glass`) instead of solid card. */
403
+ glass?: boolean;
404
+ className?: string;
405
+ };
406
+ /**
407
+ * Section / chart surface with title row, optional subtitle, and action slot.
408
+ */
409
+ declare function ChartCard({ title, subtitle, children, action, titleInfo, titleClassName, glass, className, }: ChartCardProps): React$1.JSX.Element;
410
+
282
411
  declare const Checkbox: React$1.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
283
412
 
284
413
  declare const Collapsible: React$1.ForwardRefExoticComponent<CollapsiblePrimitive.CollapsibleProps & React$1.RefAttributes<HTMLDivElement>>;
@@ -407,14 +536,25 @@ declare const DialogTitle: React$1.ForwardRefExoticComponent<Omit<DialogPrimitiv
407
536
  declare const DialogDescription: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
408
537
 
409
538
  declare const Drawer: {
410
- ({ shouldScaleBackground, ...props }: React$1.ComponentProps<typeof Drawer$1.Root>): React$1.JSX.Element;
539
+ ({ shouldScaleBackground, ...props }: React$1.ComponentPropsWithoutRef<typeof Drawer$1.Root>): React$1.JSX.Element;
411
540
  displayName: string;
412
541
  };
413
- declare const DrawerTrigger: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
414
- declare const DrawerPortal: typeof vaul.Portal;
415
- declare const DrawerClose: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
416
- declare const DrawerOverlay: React$1.ForwardRefExoticComponent<Omit<Omit<DialogPrimitive.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
417
- declare const DrawerContent: React$1.ForwardRefExoticComponent<Omit<Omit<DialogPrimitive.DialogContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
542
+ declare function DrawerTrigger({ ...props }: React$1.ComponentPropsWithoutRef<typeof Drawer$1.Trigger>): React$1.JSX.Element;
543
+ declare namespace DrawerTrigger {
544
+ var displayName: string;
545
+ }
546
+ declare function DrawerPortal({ ...props }: React$1.ComponentPropsWithoutRef<typeof Drawer$1.Portal>): React$1.JSX.Element;
547
+ declare namespace DrawerPortal {
548
+ var displayName: string;
549
+ }
550
+ declare function DrawerClose({ ...props }: React$1.ComponentPropsWithoutRef<typeof Drawer$1.Close>): React$1.JSX.Element;
551
+ declare namespace DrawerClose {
552
+ var displayName: string;
553
+ }
554
+ type DrawerOverlayProps = React$1.HTMLAttributes<HTMLDivElement>;
555
+ declare const DrawerOverlay: React$1.ForwardRefExoticComponent<DrawerOverlayProps & React$1.RefAttributes<HTMLDivElement>>;
556
+ type DrawerContentProps = React$1.HTMLAttributes<HTMLDivElement>;
557
+ declare const DrawerContent: React$1.ForwardRefExoticComponent<DrawerContentProps & React$1.RefAttributes<HTMLDivElement>>;
418
558
  declare const DrawerHeader: {
419
559
  ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
420
560
  displayName: string;
@@ -423,8 +563,10 @@ declare const DrawerFooter: {
423
563
  ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): React$1.JSX.Element;
424
564
  displayName: string;
425
565
  };
426
- declare const DrawerTitle: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
427
- declare const DrawerDescription: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
566
+ type DrawerTitleProps = React$1.HTMLAttributes<HTMLHeadingElement>;
567
+ declare const DrawerTitle: React$1.ForwardRefExoticComponent<DrawerTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
568
+ type DrawerDescriptionProps = React$1.HTMLAttributes<HTMLParagraphElement>;
569
+ declare const DrawerDescription: React$1.ForwardRefExoticComponent<DrawerDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>>;
428
570
 
429
571
  type DropdownTriggerProps = Omit<ComponentProps<typeof Button>, "variant"> & {
430
572
  open: boolean;
@@ -482,12 +624,6 @@ declare const HoverCard: React$1.FC<HoverCardPrimitive.HoverCardProps>;
482
624
  declare const HoverCardTrigger: React$1.ForwardRefExoticComponent<HoverCardPrimitive.HoverCardTriggerProps & React$1.RefAttributes<HTMLAnchorElement>>;
483
625
  declare const HoverCardContent: React$1.ForwardRefExoticComponent<Omit<HoverCardPrimitive.HoverCardContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
484
626
 
485
- declare const inputVariants: (props?: ({
486
- variant?: "default" | "outline" | null | undefined;
487
- } & class_variance_authority_types.ClassProp) | undefined) => string;
488
- type InputProps = React$1.ComponentProps<"input"> & VariantProps<typeof inputVariants>;
489
- declare const Input: React$1.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
490
-
491
627
  declare const InputOTP: React$1.ForwardRefExoticComponent<(Omit<Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
492
628
  value?: string;
493
629
  onChange?: (newValue: string) => unknown;
@@ -523,6 +659,28 @@ declare const InputOTPSeparator: React$1.ForwardRefExoticComponent<Omit<React$1.
523
659
 
524
660
  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>>;
525
661
 
662
+ type ListingPaginationProps = {
663
+ page: number;
664
+ totalPages: number;
665
+ total?: number;
666
+ pageSize?: number;
667
+ itemLabel?: string;
668
+ disabled?: boolean;
669
+ variant?: "default" | "minimal";
670
+ className?: string;
671
+ onPageChange: (page: number) => void;
672
+ /** Override total formatting in the range label (e.g. capped counts). */
673
+ formatTotal?: (n: number) => string;
674
+ labels?: {
675
+ previous?: string;
676
+ next?: string;
677
+ previousAria?: string;
678
+ nextAria?: string;
679
+ pageAria?: (page: number) => string;
680
+ };
681
+ };
682
+ declare function ListingPagination({ page, totalPages, total, pageSize, itemLabel, disabled, variant, className, onPageChange, formatTotal, labels, }: ListingPaginationProps): React$1.JSX.Element | null;
683
+
526
684
  declare const MenubarMenu: (props: MenubarPrimitive.MenubarMenuProps & {
527
685
  __scopeMenubar?: _radix_ui_react_context.Scope;
528
686
  }) => React$1.JSX.Element;
@@ -561,6 +719,33 @@ declare const NavigationMenuLink: React$1.ForwardRefExoticComponent<NavigationMe
561
719
  declare const NavigationMenuViewport: React$1.ForwardRefExoticComponent<Omit<NavigationMenuPrimitive.NavigationMenuViewportProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
562
720
  declare const NavigationMenuIndicator: React$1.ForwardRefExoticComponent<Omit<NavigationMenuPrimitive.NavigationMenuIndicatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
563
721
 
722
+ type PageHeaderProps = {
723
+ /** Optional eyebrow above the title. */
724
+ label?: React$1.ReactNode;
725
+ title: React$1.ReactNode;
726
+ description?: React$1.ReactNode;
727
+ /** Shown while the title is resolving (e.g. async folder name). */
728
+ titleLoading?: boolean;
729
+ /** Badge or chips next to the title. */
730
+ badge?: React$1.ReactNode;
731
+ /** Right-side meta (e.g. “Updated at …”). */
732
+ meta?: React$1.ReactNode;
733
+ /** Back control (link/button) — fully owned by the consumer. */
734
+ back?: React$1.ReactNode;
735
+ /** Actions aligned to the end (buttons, menus). */
736
+ children?: React$1.ReactNode;
737
+ className?: string;
738
+ titleClassName?: string;
739
+ descriptionClassName?: string;
740
+ /** Skeleton width hint when `titleLoading`. */
741
+ titleSkeletonClassName?: string;
742
+ };
743
+ /**
744
+ * Shared page title block: optional back, label, title (+ badge),
745
+ * description, meta, and trailing actions.
746
+ */
747
+ declare function PageHeader({ label, title, description, titleLoading, badge, meta, back, children, className, titleClassName, descriptionClassName, titleSkeletonClassName, }: PageHeaderProps): React$1.JSX.Element;
748
+
564
749
  declare const Pagination: {
565
750
  ({ className, ...props }: React$1.ComponentProps<"nav">): React$1.JSX.Element;
566
751
  displayName: string;
@@ -623,6 +808,51 @@ declare const ResizableHandle: ({ withHandle, className, ...props }: React.Compo
623
808
  declare const ScrollArea: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
624
809
  declare const ScrollBar: React$1.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
625
810
 
811
+ type SearchableSelectItem = {
812
+ id: string;
813
+ label: string;
814
+ /** Optional secondary text (e.g. id shown beside the name). */
815
+ secondary?: string;
816
+ };
817
+ type SearchableSelectLoadResult = {
818
+ items: SearchableSelectItem[];
819
+ hasMore: boolean;
820
+ };
821
+ type SearchableSelectProps = {
822
+ value: string;
823
+ onChange: (id: string) => void;
824
+ /** Sentinel value meaning “no filter / all”. @default "all" */
825
+ allValue?: string;
826
+ allLabel: string;
827
+ searchPlaceholder: string;
828
+ loadItems: (args: {
829
+ query: string;
830
+ limit: number;
831
+ offset: number;
832
+ }) => Promise<SearchableSelectLoadResult>;
833
+ /**
834
+ * Resolve a label when the selected id is not yet in the loaded list.
835
+ * Return null to fall back to showing the raw id.
836
+ */
837
+ resolveLabel?: (id: string) => Promise<string | null>;
838
+ pageSize?: number;
839
+ triggerClassName?: string;
840
+ icon?: React$1.ReactNode;
841
+ nestedInPopover?: boolean;
842
+ disabled?: boolean;
843
+ /** When this changes, cached items/labels are cleared. */
844
+ resetKey?: string | number;
845
+ emptyLabel?: string;
846
+ loadingLabel?: string;
847
+ loadingMoreLabel?: string;
848
+ debounceMs?: number;
849
+ };
850
+ /**
851
+ * Async searchable combobox with infinite scroll.
852
+ * Data loading is injected via `loadItems` — no product API coupling.
853
+ */
854
+ 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;
855
+
626
856
  declare const Select: React$1.FC<SelectPrimitive.SelectProps>;
627
857
  declare const SelectGroup: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React$1.RefAttributes<HTMLDivElement>>;
628
858
  declare const SelectValue: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React$1.RefAttributes<HTMLSpanElement>>;
@@ -796,4 +1026,8 @@ declare const ToggleGroupItem: React$1.ForwardRefExoticComponent<Omit<ToggleGrou
796
1026
  size?: "default" | "sm" | "lg" | null | undefined;
797
1027
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<HTMLButtonElement>>;
798
1028
 
799
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, 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, 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 };
1029
+ type VisiblePage = number | "ellipsis";
1030
+ declare function buildVisiblePages(current: number, totalPages: number): VisiblePage[];
1031
+ declare function buildRangeLabel(page: number, pageSize: number, total: number, itemLabel?: string, formatTotal?: (n: number) => string): string;
1032
+
1033
+ 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, Aurora, type AuroraProps, AuthBanner, type AuthBannerProps, AuthBrand, type AuthBrandProps, AuthCard, AuthCardDescription, AuthCardHeader, AuthCardTitle, AuthFieldError, type AuthFieldErrorProps, AuthFooter, AuthFooterLink, type AuthFooterLinkProps, type AuthFooterProps, AuthShell, type AuthShellProps, 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, EmailInput, type EmailInputProps, 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, PasswordInput, type PasswordInputProps, 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, authBannerVariants, badgeVariants, buildRangeLabel, buildVisiblePages, buttonVariants, cn, inputVariants, navigationMenuTriggerStyle, toast, toggleVariants, useFormField, useIsMobile, useSidebar, useToast };