@kinetixui/ui 0.5.0 → 0.6.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.
- package/dist/index.d.ts +35 -1
- package/dist/index.js +202 -99
- package/package.json +4 -4
- package/src/components/app-bar.tsx +139 -0
- package/src/components/chart.tsx +15 -3
- package/src/index.ts +9 -0
- package/src/stories/Accordion.stories.tsx +2 -2
- package/src/stories/Alert.stories.tsx +2 -2
- package/src/stories/AlertDialog.stories.tsx +2 -2
- package/src/stories/AppBar.stories.tsx +46 -0
- package/src/stories/AspectRatio.stories.tsx +2 -2
- package/src/stories/AudioPlayer.stories.tsx +2 -2
- package/src/stories/Avatar.stories.tsx +2 -2
- package/src/stories/AvatarGroup.stories.tsx +2 -2
- package/src/stories/Badge.stories.tsx +2 -2
- package/src/stories/Breadcrumb.stories.tsx +2 -2
- package/src/stories/Button.stories.tsx +1 -1
- package/src/stories/Calendar.stories.tsx +2 -2
- package/src/stories/Card.stories.tsx +2 -2
- package/src/stories/Carousel.stories.tsx +2 -2
- package/src/stories/Chart.stories.tsx +2 -2
- package/src/stories/Checkbox.stories.tsx +2 -2
- package/src/stories/CircularProgress.stories.tsx +2 -2
- package/src/stories/CodeBlock.stories.tsx +2 -2
- package/src/stories/Collapsible.stories.tsx +2 -2
- package/src/stories/Combobox.stories.tsx +2 -2
- package/src/stories/Command.stories.tsx +2 -2
- package/src/stories/ContextMenu.stories.tsx +2 -2
- package/src/stories/DataTable.stories.tsx +2 -2
- package/src/stories/DatePicker.stories.tsx +2 -2
- package/src/stories/Dialog.stories.tsx +2 -2
- package/src/stories/Drawer.stories.tsx +2 -2
- package/src/stories/DropdownMenu.stories.tsx +2 -2
- package/src/stories/Fab.stories.tsx +2 -2
- package/src/stories/Field.stories.tsx +2 -2
- package/src/stories/FileUpload.stories.tsx +2 -2
- package/src/stories/Footer.stories.tsx +2 -2
- package/src/stories/Form.stories.tsx +2 -2
- package/src/stories/HoverCard.stories.tsx +2 -2
- package/src/stories/Image.stories.tsx +2 -2
- package/src/stories/Inform.stories.tsx +2 -2
- package/src/stories/Input.stories.tsx +1 -1
- package/src/stories/InputGroup.stories.tsx +2 -2
- package/src/stories/InputOTP.stories.tsx +2 -2
- package/src/stories/Label.stories.tsx +2 -2
- package/src/stories/List.stories.tsx +2 -2
- package/src/stories/Menubar.stories.tsx +2 -2
- package/src/stories/Metric.stories.tsx +2 -2
- package/src/stories/Modal.stories.tsx +2 -2
- package/src/stories/NavigationBar.stories.tsx +2 -2
- package/src/stories/NavigationMenu.stories.tsx +2 -2
- package/src/stories/NumberInput.stories.tsx +2 -2
- package/src/stories/Pagination.stories.tsx +2 -2
- package/src/stories/PasswordInput.stories.tsx +2 -2
- package/src/stories/Popover.stories.tsx +2 -2
- package/src/stories/Progress.stories.tsx +2 -2
- package/src/stories/Quote.stories.tsx +2 -2
- package/src/stories/RadioGroup.stories.tsx +2 -2
- package/src/stories/Rating.stories.tsx +2 -2
- package/src/stories/Resizable.stories.tsx +2 -2
- package/src/stories/ScrollArea.stories.tsx +2 -2
- package/src/stories/Select.stories.tsx +2 -2
- package/src/stories/Separator.stories.tsx +2 -2
- package/src/stories/Sheet.stories.tsx +2 -2
- package/src/stories/Sidebar.stories.tsx +2 -2
- package/src/stories/Skeleton.stories.tsx +2 -2
- package/src/stories/Slider.stories.tsx +2 -2
- package/src/stories/Sonner.stories.tsx +2 -2
- package/src/stories/Spinner.stories.tsx +2 -2
- package/src/stories/Stepper.stories.tsx +2 -2
- package/src/stories/Switch.stories.tsx +2 -2
- package/src/stories/TabBar.stories.tsx +2 -2
- package/src/stories/Table.stories.tsx +2 -2
- package/src/stories/TableOfContents.stories.tsx +2 -2
- package/src/stories/Tabs.stories.tsx +2 -2
- package/src/stories/Tag.stories.tsx +2 -2
- package/src/stories/Textarea.stories.tsx +1 -1
- package/src/stories/Toggle.stories.tsx +2 -2
- package/src/stories/ToggleGroup.stories.tsx +2 -2
- package/src/stories/Tooltip.stories.tsx +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1050,6 +1050,40 @@ interface NavigationBarProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "
|
|
|
1050
1050
|
}
|
|
1051
1051
|
declare const NavigationBar: React$1.ForwardRefExoticComponent<NavigationBarProps & React$1.RefAttributes<HTMLElement>>;
|
|
1052
1052
|
|
|
1053
|
+
/**
|
|
1054
|
+
* AppBar — a web application top bar: a brand slot, a row of primary nav
|
|
1055
|
+
* links, and a trailing actions slot inside a sticky bordered header. Below
|
|
1056
|
+
* the `md` breakpoint the nav collapses behind a menu toggle into a panel
|
|
1057
|
+
* under the bar.
|
|
1058
|
+
*
|
|
1059
|
+
* <AppBar>
|
|
1060
|
+
* <AppBarBrand>Acme</AppBarBrand>
|
|
1061
|
+
* <AppBarNav>
|
|
1062
|
+
* <AppBarLink href="/" active>Overview</AppBarLink>
|
|
1063
|
+
* <AppBarLink href="/reports">Reports</AppBarLink>
|
|
1064
|
+
* </AppBarNav>
|
|
1065
|
+
* <AppBarActions><Button size="sm">New</Button></AppBarActions>
|
|
1066
|
+
* </AppBar>
|
|
1067
|
+
*
|
|
1068
|
+
* `NavigationBar` is the mobile back-button bar; this is the desktop app shell.
|
|
1069
|
+
*/
|
|
1070
|
+
interface AppBarCtx {
|
|
1071
|
+
open: boolean;
|
|
1072
|
+
setOpen: React$1.Dispatch<React$1.SetStateAction<boolean>>;
|
|
1073
|
+
}
|
|
1074
|
+
declare const useAppBar: () => AppBarCtx;
|
|
1075
|
+
declare const AppBar: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLElement> & React$1.RefAttributes<HTMLElement>>;
|
|
1076
|
+
declare const AppBarBrand: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
1077
|
+
declare const AppBarNav: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLElement> & React$1.RefAttributes<HTMLElement>>;
|
|
1078
|
+
interface AppBarLinkProps extends React$1.AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
1079
|
+
/** Marks the current destination — sets `aria-current="page"` and the active style. */
|
|
1080
|
+
active?: boolean;
|
|
1081
|
+
/** Render as the child element (e.g. a framework `<Link>`), forwarding props. */
|
|
1082
|
+
asChild?: boolean;
|
|
1083
|
+
}
|
|
1084
|
+
declare const AppBarLink: React$1.ForwardRefExoticComponent<AppBarLinkProps & React$1.RefAttributes<HTMLAnchorElement>>;
|
|
1085
|
+
declare const AppBarActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
1086
|
+
|
|
1053
1087
|
/**
|
|
1054
1088
|
* FileUpload — a drag-and-drop zone plus file list, single or multiple.
|
|
1055
1089
|
* Upload logic (network, storage) is the consumer's — this component is
|
|
@@ -1198,4 +1232,4 @@ declare const TableOfContents: React$1.ForwardRefExoticComponent<TableOfContents
|
|
|
1198
1232
|
/** Merges Tailwind class names, resolving conflicts (clsx + tailwind-merge). */
|
|
1199
1233
|
declare function cn(...inputs: ClassValue[]): string;
|
|
1200
1234
|
|
|
1201
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, AudioPlayer, type AudioPlayerProps, Avatar, AvatarFallback, AvatarGroup, type AvatarGroupProps, 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, CircularProgress, type CircularProgressProps, CodeBlock, type CodeBlockFile, type CodeBlockProps, 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, DataTable, DatePicker, type DatePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Fab, type FabProps, Field, FieldControl, FieldDescription, FieldLabel, FieldMessage, FileUpload, FileUploadItem, type FileUploadItemProps, type FileUploadProps, Footer, FooterBottom, FooterColumn, type FooterColumnProps, FooterLink, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, Image, type ImageProps, Inform, type InformProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, Label, List, ListItem, type ListItemProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Metric, type MetricProps, Modal, type ModalProps, type ModalType, NavigationBar, type NavigationBarProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NumberInput, type NumberInputProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PasswordInput, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, Quote, type QuoteProps, RadioGroup, RadioGroupItem, Rating, type RatingProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarProvider, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, type SpinnerProps, Stepper, type StepperProps, type StepperStep, Switch, TabBar, TabBarItem, type TabBarItemProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableOfContents, type TableOfContentsProps, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, type TagProps, Textarea, type TextareaProps, Toaster, type TocItem, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UploadFile, badgeVariants, buttonVariants, cn, fabVariants, formatBytes, informVariants, inputVariants, messageVariants, navigationMenuTriggerStyle, spinnerVariants, tagVariants, textareaVariants, toggleVariants, useFormField, useSidebar };
|
|
1235
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppBar, AppBarActions, AppBarBrand, AppBarLink, type AppBarLinkProps, AppBarNav, AspectRatio, AudioPlayer, type AudioPlayerProps, Avatar, AvatarFallback, AvatarGroup, type AvatarGroupProps, 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, CircularProgress, type CircularProgressProps, CodeBlock, type CodeBlockFile, type CodeBlockProps, 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, DataTable, DatePicker, type DatePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Fab, type FabProps, Field, FieldControl, FieldDescription, FieldLabel, FieldMessage, FileUpload, FileUploadItem, type FileUploadItemProps, type FileUploadProps, Footer, FooterBottom, FooterColumn, type FooterColumnProps, FooterLink, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, Image, type ImageProps, Inform, type InformProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, Label, List, ListItem, type ListItemProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Metric, type MetricProps, Modal, type ModalProps, type ModalType, NavigationBar, type NavigationBarProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NumberInput, type NumberInputProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PasswordInput, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, Quote, type QuoteProps, RadioGroup, RadioGroupItem, Rating, type RatingProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarProvider, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, type SpinnerProps, Stepper, type StepperProps, type StepperStep, Switch, TabBar, TabBarItem, type TabBarItemProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableOfContents, type TableOfContentsProps, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, type TagProps, Textarea, type TextareaProps, Toaster, type TocItem, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UploadFile, badgeVariants, buttonVariants, cn, fabVariants, formatBytes, informVariants, inputVariants, messageVariants, navigationMenuTriggerStyle, spinnerVariants, tagVariants, textareaVariants, toggleVariants, useAppBar, useFormField, useSidebar };
|
package/dist/index.js
CHANGED
|
@@ -1643,19 +1643,23 @@ function ChartSrTable({
|
|
|
1643
1643
|
/* @__PURE__ */ jsx37("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsx37("tr", { children: r.map((cell, j) => /* @__PURE__ */ jsx37("td", { children: cell }, j)) }, i)) })
|
|
1644
1644
|
] });
|
|
1645
1645
|
}
|
|
1646
|
+
var cssIdent = (s) => String(s).replace(/[^\w-]/g, "");
|
|
1647
|
+
var cssValue = (s) => /[<>{}\[\];@]|\/\*|\*\//.test(s) ? "" : s.trim();
|
|
1646
1648
|
var ChartStyle = ({ id, config }) => {
|
|
1647
1649
|
const colorConfig = Object.entries(config).filter(([, c]) => c.theme || c.color);
|
|
1648
1650
|
if (!colorConfig.length) return null;
|
|
1651
|
+
const chartSelector = cssIdent(id);
|
|
1649
1652
|
return /* @__PURE__ */ jsx37(
|
|
1650
1653
|
"style",
|
|
1651
1654
|
{
|
|
1652
1655
|
dangerouslySetInnerHTML: {
|
|
1653
1656
|
__html: Object.entries(THEMES).map(
|
|
1654
1657
|
([theme, prefix]) => `
|
|
1655
|
-
${prefix} [data-chart=${
|
|
1658
|
+
${prefix} [data-chart=${chartSelector}] {
|
|
1656
1659
|
${colorConfig.map(([key, itemConfig]) => {
|
|
1657
|
-
const
|
|
1658
|
-
|
|
1660
|
+
const raw = itemConfig.theme?.[theme] || itemConfig.color;
|
|
1661
|
+
const color = raw ? cssValue(raw) : "";
|
|
1662
|
+
return color ? ` --color-${cssIdent(key)}: ${color};` : null;
|
|
1659
1663
|
}).join("\n")}
|
|
1660
1664
|
}
|
|
1661
1665
|
`
|
|
@@ -3300,10 +3304,103 @@ var NavigationBar = React55.forwardRef(
|
|
|
3300
3304
|
);
|
|
3301
3305
|
NavigationBar.displayName = "NavigationBar";
|
|
3302
3306
|
|
|
3303
|
-
// src/components/
|
|
3307
|
+
// src/components/app-bar.tsx
|
|
3304
3308
|
import * as React56 from "react";
|
|
3305
|
-
import {
|
|
3309
|
+
import { Slot as Slot7 } from "@radix-ui/react-slot";
|
|
3310
|
+
import { Menu as Menu2, X as X6 } from "lucide-react";
|
|
3306
3311
|
import { jsx as jsx62, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
3312
|
+
var Ctx = React56.createContext(null);
|
|
3313
|
+
var useAppBar = () => {
|
|
3314
|
+
const ctx = React56.useContext(Ctx);
|
|
3315
|
+
if (!ctx) throw new Error("AppBar parts must be used within <AppBar>");
|
|
3316
|
+
return ctx;
|
|
3317
|
+
};
|
|
3318
|
+
var AppBar = React56.forwardRef(
|
|
3319
|
+
({ className, children, ...props }, ref) => {
|
|
3320
|
+
const [open, setOpen] = React56.useState(false);
|
|
3321
|
+
const nav = React56.Children.toArray(children).find(
|
|
3322
|
+
(c) => React56.isValidElement(c) && c.type === AppBarNav
|
|
3323
|
+
);
|
|
3324
|
+
return /* @__PURE__ */ jsx62(Ctx.Provider, { value: { open, setOpen }, children: /* @__PURE__ */ jsxs33(
|
|
3325
|
+
"header",
|
|
3326
|
+
{
|
|
3327
|
+
ref,
|
|
3328
|
+
className: cn(
|
|
3329
|
+
"sticky top-0 z-40 w-full border-b border-border bg-background/95 font-sans",
|
|
3330
|
+
"backdrop-blur supports-[backdrop-filter]:bg-background/75",
|
|
3331
|
+
className
|
|
3332
|
+
),
|
|
3333
|
+
...props,
|
|
3334
|
+
children: [
|
|
3335
|
+
/* @__PURE__ */ jsxs33("div", { className: "mx-auto flex h-14 max-w-screen-2xl items-center gap-4 px-4", children: [
|
|
3336
|
+
children,
|
|
3337
|
+
nav && /* @__PURE__ */ jsx62(
|
|
3338
|
+
"button",
|
|
3339
|
+
{
|
|
3340
|
+
type: "button",
|
|
3341
|
+
"aria-label": open ? "Close menu" : "Open menu",
|
|
3342
|
+
"aria-expanded": open,
|
|
3343
|
+
onClick: () => setOpen((o) => !o),
|
|
3344
|
+
className: cn(
|
|
3345
|
+
"ml-auto inline-flex size-9 items-center justify-center rounded-md text-foreground outline-none transition-colors md:hidden",
|
|
3346
|
+
"hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring"
|
|
3347
|
+
),
|
|
3348
|
+
children: open ? /* @__PURE__ */ jsx62(X6, { className: "size-5" }) : /* @__PURE__ */ jsx62(Menu2, { className: "size-5" })
|
|
3349
|
+
}
|
|
3350
|
+
)
|
|
3351
|
+
] }),
|
|
3352
|
+
nav && open && /* @__PURE__ */ jsx62("nav", { className: "flex flex-col gap-1 border-t border-border p-2 md:hidden", children: nav.props.children })
|
|
3353
|
+
]
|
|
3354
|
+
}
|
|
3355
|
+
) });
|
|
3356
|
+
}
|
|
3357
|
+
);
|
|
3358
|
+
AppBar.displayName = "AppBar";
|
|
3359
|
+
var AppBarBrand = React56.forwardRef(
|
|
3360
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx62(
|
|
3361
|
+
"div",
|
|
3362
|
+
{
|
|
3363
|
+
ref,
|
|
3364
|
+
className: cn("flex shrink-0 items-center gap-2 text-[15px] font-semibold text-foreground", className),
|
|
3365
|
+
...props
|
|
3366
|
+
}
|
|
3367
|
+
)
|
|
3368
|
+
);
|
|
3369
|
+
AppBarBrand.displayName = "AppBarBrand";
|
|
3370
|
+
var AppBarNav = React56.forwardRef(
|
|
3371
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx62("nav", { ref, className: cn("hidden items-center gap-1 md:flex", className), ...props })
|
|
3372
|
+
);
|
|
3373
|
+
AppBarNav.displayName = "AppBarNav";
|
|
3374
|
+
var AppBarLink = React56.forwardRef(
|
|
3375
|
+
({ className, active, asChild, ...props }, ref) => {
|
|
3376
|
+
const Comp = asChild ? Slot7 : "a";
|
|
3377
|
+
return /* @__PURE__ */ jsx62(
|
|
3378
|
+
Comp,
|
|
3379
|
+
{
|
|
3380
|
+
ref,
|
|
3381
|
+
"data-active": active ? "" : void 0,
|
|
3382
|
+
"aria-current": active ? "page" : void 0,
|
|
3383
|
+
className: cn(
|
|
3384
|
+
"inline-flex items-center rounded-md px-3 py-1.5 text-sm font-medium outline-none transition-colors",
|
|
3385
|
+
"text-muted-foreground hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",
|
|
3386
|
+
"data-[active]:bg-accent data-[active]:text-foreground",
|
|
3387
|
+
className
|
|
3388
|
+
),
|
|
3389
|
+
...props
|
|
3390
|
+
}
|
|
3391
|
+
);
|
|
3392
|
+
}
|
|
3393
|
+
);
|
|
3394
|
+
AppBarLink.displayName = "AppBarLink";
|
|
3395
|
+
var AppBarActions = React56.forwardRef(
|
|
3396
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx62("div", { ref, className: cn("ml-auto flex shrink-0 items-center gap-2", className), ...props })
|
|
3397
|
+
);
|
|
3398
|
+
AppBarActions.displayName = "AppBarActions";
|
|
3399
|
+
|
|
3400
|
+
// src/components/file-upload.tsx
|
|
3401
|
+
import * as React57 from "react";
|
|
3402
|
+
import { File, Loader2, TriangleAlert as TriangleAlert3, Upload, X as X7 } from "lucide-react";
|
|
3403
|
+
import { jsx as jsx63, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
3307
3404
|
function formatBytes(bytes) {
|
|
3308
3405
|
if (!bytes) return "";
|
|
3309
3406
|
const units = ["B", "KB", "MB", "GB"];
|
|
@@ -3315,16 +3412,16 @@ function formatBytes(bytes) {
|
|
|
3315
3412
|
}
|
|
3316
3413
|
return `${v.toFixed(v < 10 && i > 0 ? 1 : 0)} ${units[i]}`;
|
|
3317
3414
|
}
|
|
3318
|
-
var FileUpload =
|
|
3415
|
+
var FileUpload = React57.forwardRef(
|
|
3319
3416
|
({ className, multiple, accept, disabled, helperText, buttonLabel = "Browse files", files = [], onFilesSelected, onRemove, onRetry, ...props }, ref) => {
|
|
3320
|
-
const inputRef =
|
|
3321
|
-
const [dragging, setDragging] =
|
|
3417
|
+
const inputRef = React57.useRef(null);
|
|
3418
|
+
const [dragging, setDragging] = React57.useState(false);
|
|
3322
3419
|
const pick = (list) => {
|
|
3323
3420
|
if (!list || !list.length) return;
|
|
3324
3421
|
onFilesSelected?.(Array.from(list));
|
|
3325
3422
|
};
|
|
3326
|
-
return /* @__PURE__ */
|
|
3327
|
-
/* @__PURE__ */
|
|
3423
|
+
return /* @__PURE__ */ jsxs34("div", { ref, className: cn("flex w-full flex-col gap-3 font-sans", className), ...props, children: [
|
|
3424
|
+
/* @__PURE__ */ jsxs34(
|
|
3328
3425
|
"div",
|
|
3329
3426
|
{
|
|
3330
3427
|
role: "button",
|
|
@@ -3354,13 +3451,13 @@ var FileUpload = React56.forwardRef(
|
|
|
3354
3451
|
disabled && "pointer-events-none opacity-50"
|
|
3355
3452
|
),
|
|
3356
3453
|
children: [
|
|
3357
|
-
/* @__PURE__ */
|
|
3358
|
-
/* @__PURE__ */
|
|
3454
|
+
/* @__PURE__ */ jsx63(Upload, { className: "size-6 text-muted-foreground", "aria-hidden": true }),
|
|
3455
|
+
/* @__PURE__ */ jsxs34("p", { className: "text-body-sm text-muted-foreground", children: [
|
|
3359
3456
|
"Drag & drop ",
|
|
3360
3457
|
multiple ? "files" : "a file",
|
|
3361
3458
|
" here, or"
|
|
3362
3459
|
] }),
|
|
3363
|
-
/* @__PURE__ */
|
|
3460
|
+
/* @__PURE__ */ jsx63(
|
|
3364
3461
|
Button,
|
|
3365
3462
|
{
|
|
3366
3463
|
type: "button",
|
|
@@ -3374,8 +3471,8 @@ var FileUpload = React56.forwardRef(
|
|
|
3374
3471
|
children: buttonLabel
|
|
3375
3472
|
}
|
|
3376
3473
|
),
|
|
3377
|
-
helperText && /* @__PURE__ */
|
|
3378
|
-
/* @__PURE__ */
|
|
3474
|
+
helperText && /* @__PURE__ */ jsx63("p", { className: "text-body-sm text-muted-foreground", children: helperText }),
|
|
3475
|
+
/* @__PURE__ */ jsx63(
|
|
3379
3476
|
"input",
|
|
3380
3477
|
{
|
|
3381
3478
|
ref: inputRef,
|
|
@@ -3393,7 +3490,7 @@ var FileUpload = React56.forwardRef(
|
|
|
3393
3490
|
]
|
|
3394
3491
|
}
|
|
3395
3492
|
),
|
|
3396
|
-
files.length > 0 && /* @__PURE__ */
|
|
3493
|
+
files.length > 0 && /* @__PURE__ */ jsx63("ul", { className: "flex flex-col gap-2", children: files.map((f) => /* @__PURE__ */ jsx63(FileUploadItem, { file: f, onRemove, onRetry }, f.id)) })
|
|
3397
3494
|
] });
|
|
3398
3495
|
}
|
|
3399
3496
|
);
|
|
@@ -3401,14 +3498,14 @@ FileUpload.displayName = "FileUpload";
|
|
|
3401
3498
|
function FileUploadItem({ file, onRemove, onRetry }) {
|
|
3402
3499
|
const isError = file.status === "error";
|
|
3403
3500
|
const isLoading = file.status === "loading";
|
|
3404
|
-
return /* @__PURE__ */
|
|
3405
|
-
isLoading ? /* @__PURE__ */
|
|
3406
|
-
/* @__PURE__ */
|
|
3407
|
-
/* @__PURE__ */
|
|
3408
|
-
isError && file.error ? /* @__PURE__ */
|
|
3409
|
-
isLoading && typeof file.progress === "number" && /* @__PURE__ */
|
|
3501
|
+
return /* @__PURE__ */ jsxs34("li", { className: cn("flex items-center gap-2.5 rounded-md border p-2.5 text-body-sm", isError ? "border-destructive bg-destructive/5" : "border-input"), children: [
|
|
3502
|
+
isLoading ? /* @__PURE__ */ jsx63(Loader2, { className: "size-4 shrink-0 animate-spin text-muted-foreground", "aria-hidden": true }) : isError ? /* @__PURE__ */ jsx63(TriangleAlert3, { className: "size-4 shrink-0 text-destructive", "aria-hidden": true }) : /* @__PURE__ */ jsx63(File, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": true }),
|
|
3503
|
+
/* @__PURE__ */ jsxs34("div", { className: "min-w-0 flex-1", children: [
|
|
3504
|
+
/* @__PURE__ */ jsx63("p", { className: "truncate text-foreground", children: file.name }),
|
|
3505
|
+
isError && file.error ? /* @__PURE__ */ jsx63("p", { className: "text-destructive", children: file.error }) : /* @__PURE__ */ jsx63("p", { className: "text-muted-foreground", children: formatBytes(file.size) }),
|
|
3506
|
+
isLoading && typeof file.progress === "number" && /* @__PURE__ */ jsx63("div", { className: "mt-1 h-1 w-full overflow-hidden rounded-full bg-muted", children: /* @__PURE__ */ jsx63("div", { className: "h-full bg-primary transition-[width]", style: { width: `${Math.max(0, Math.min(100, file.progress))}%` } }) })
|
|
3410
3507
|
] }),
|
|
3411
|
-
isError && onRetry && /* @__PURE__ */
|
|
3508
|
+
isError && onRetry && /* @__PURE__ */ jsx63(
|
|
3412
3509
|
"button",
|
|
3413
3510
|
{
|
|
3414
3511
|
type: "button",
|
|
@@ -3417,14 +3514,14 @@ function FileUploadItem({ file, onRemove, onRetry }) {
|
|
|
3417
3514
|
children: "Retry"
|
|
3418
3515
|
}
|
|
3419
3516
|
),
|
|
3420
|
-
onRemove && /* @__PURE__ */
|
|
3517
|
+
onRemove && /* @__PURE__ */ jsx63(
|
|
3421
3518
|
"button",
|
|
3422
3519
|
{
|
|
3423
3520
|
type: "button",
|
|
3424
3521
|
onClick: () => onRemove(file.id),
|
|
3425
3522
|
"aria-label": `Remove ${file.name}`,
|
|
3426
3523
|
className: "shrink-0 rounded-[2px] p-0.5 text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-1 focus-visible:ring-current",
|
|
3427
|
-
children: /* @__PURE__ */
|
|
3524
|
+
children: /* @__PURE__ */ jsx63(X7, { className: "size-3.5" })
|
|
3428
3525
|
}
|
|
3429
3526
|
)
|
|
3430
3527
|
] });
|
|
@@ -3432,17 +3529,17 @@ function FileUploadItem({ file, onRemove, onRetry }) {
|
|
|
3432
3529
|
FileUploadItem.displayName = "FileUploadItem";
|
|
3433
3530
|
|
|
3434
3531
|
// src/components/date-picker.tsx
|
|
3435
|
-
import * as
|
|
3532
|
+
import * as React58 from "react";
|
|
3436
3533
|
import { CalendarIcon } from "lucide-react";
|
|
3437
3534
|
import { format } from "date-fns";
|
|
3438
|
-
import { jsx as
|
|
3439
|
-
var DatePicker =
|
|
3535
|
+
import { jsx as jsx64, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
3536
|
+
var DatePicker = React58.forwardRef(
|
|
3440
3537
|
({ value, onChange, placeholder = "Select date", label, helperText, error, disabled, className, formatStr = "PP", calendarProps }, ref) => {
|
|
3441
|
-
const [open, setOpen] =
|
|
3442
|
-
return /* @__PURE__ */
|
|
3443
|
-
label && /* @__PURE__ */
|
|
3444
|
-
/* @__PURE__ */
|
|
3445
|
-
/* @__PURE__ */
|
|
3538
|
+
const [open, setOpen] = React58.useState(false);
|
|
3539
|
+
return /* @__PURE__ */ jsxs35("div", { className: cn("flex flex-col gap-1.5 font-sans", className), children: [
|
|
3540
|
+
label && /* @__PURE__ */ jsx64("label", { className: "text-label-md font-medium text-foreground", children: label }),
|
|
3541
|
+
/* @__PURE__ */ jsxs35(Popover, { open, onOpenChange: setOpen, children: [
|
|
3542
|
+
/* @__PURE__ */ jsx64(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs35(
|
|
3446
3543
|
Button,
|
|
3447
3544
|
{
|
|
3448
3545
|
ref,
|
|
@@ -3451,12 +3548,12 @@ var DatePicker = React57.forwardRef(
|
|
|
3451
3548
|
disabled,
|
|
3452
3549
|
className: cn("w-full justify-start px-3 font-normal", !value && "text-muted-foreground", error && "border-destructive text-destructive"),
|
|
3453
3550
|
children: [
|
|
3454
|
-
/* @__PURE__ */
|
|
3551
|
+
/* @__PURE__ */ jsx64(CalendarIcon, { className: "size-4" }),
|
|
3455
3552
|
value ? format(value, formatStr) : placeholder
|
|
3456
3553
|
]
|
|
3457
3554
|
}
|
|
3458
3555
|
) }),
|
|
3459
|
-
/* @__PURE__ */
|
|
3556
|
+
/* @__PURE__ */ jsx64(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ jsx64(
|
|
3460
3557
|
Calendar,
|
|
3461
3558
|
{
|
|
3462
3559
|
mode: "single",
|
|
@@ -3469,21 +3566,21 @@ var DatePicker = React57.forwardRef(
|
|
|
3469
3566
|
}
|
|
3470
3567
|
) })
|
|
3471
3568
|
] }),
|
|
3472
|
-
helperText && /* @__PURE__ */
|
|
3569
|
+
helperText && /* @__PURE__ */ jsx64("p", { className: cn("text-body-sm", error ? "text-destructive" : "text-muted-foreground"), children: helperText })
|
|
3473
3570
|
] });
|
|
3474
3571
|
}
|
|
3475
3572
|
);
|
|
3476
3573
|
DatePicker.displayName = "DatePicker";
|
|
3477
3574
|
|
|
3478
3575
|
// src/components/code-block.tsx
|
|
3479
|
-
import * as
|
|
3576
|
+
import * as React59 from "react";
|
|
3480
3577
|
import { Check as Check7, Copy } from "lucide-react";
|
|
3481
|
-
import { jsx as
|
|
3482
|
-
var CodeBlock =
|
|
3578
|
+
import { jsx as jsx65, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
3579
|
+
var CodeBlock = React59.forwardRef(
|
|
3483
3580
|
({ className, code, language, filename, files, hideCopy, ...props }, ref) => {
|
|
3484
3581
|
const tabs = files && files.length > 0 ? files : [{ name: filename ?? language ?? "", code: code ?? "" }];
|
|
3485
|
-
const [active, setActive] =
|
|
3486
|
-
const [copied, setCopied] =
|
|
3582
|
+
const [active, setActive] = React59.useState(0);
|
|
3583
|
+
const [copied, setCopied] = React59.useState(false);
|
|
3487
3584
|
const current = tabs[active] ?? tabs[0];
|
|
3488
3585
|
const hasHeader = tabs.length > 1 || !!current.name;
|
|
3489
3586
|
const copy = async () => {
|
|
@@ -3494,9 +3591,9 @@ var CodeBlock = React58.forwardRef(
|
|
|
3494
3591
|
} catch {
|
|
3495
3592
|
}
|
|
3496
3593
|
};
|
|
3497
|
-
return /* @__PURE__ */
|
|
3498
|
-
hasHeader && /* @__PURE__ */
|
|
3499
|
-
/* @__PURE__ */
|
|
3594
|
+
return /* @__PURE__ */ jsxs36("div", { ref, className: cn("overflow-hidden rounded-md border border-input bg-muted font-sans", className), ...props, children: [
|
|
3595
|
+
hasHeader && /* @__PURE__ */ jsxs36("div", { className: "flex items-center justify-between border-b border-input bg-background px-2", children: [
|
|
3596
|
+
/* @__PURE__ */ jsx65("div", { className: "flex", children: tabs.map((t, i) => /* @__PURE__ */ jsx65(
|
|
3500
3597
|
"button",
|
|
3501
3598
|
{
|
|
3502
3599
|
type: "button",
|
|
@@ -3509,29 +3606,29 @@ var CodeBlock = React58.forwardRef(
|
|
|
3509
3606
|
},
|
|
3510
3607
|
t.name || i
|
|
3511
3608
|
)) }),
|
|
3512
|
-
!hideCopy && /* @__PURE__ */
|
|
3609
|
+
!hideCopy && /* @__PURE__ */ jsx65(
|
|
3513
3610
|
"button",
|
|
3514
3611
|
{
|
|
3515
3612
|
type: "button",
|
|
3516
3613
|
onClick: copy,
|
|
3517
3614
|
"aria-label": "Copy code",
|
|
3518
3615
|
className: "rounded-[2px] p-1.5 text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-1 focus-visible:ring-current",
|
|
3519
|
-
children: copied ? /* @__PURE__ */
|
|
3616
|
+
children: copied ? /* @__PURE__ */ jsx65(Check7, { className: "size-4" }) : /* @__PURE__ */ jsx65(Copy, { className: "size-4" })
|
|
3520
3617
|
}
|
|
3521
3618
|
)
|
|
3522
3619
|
] }),
|
|
3523
|
-
/* @__PURE__ */
|
|
3524
|
-
!hasHeader && !hideCopy && /* @__PURE__ */
|
|
3620
|
+
/* @__PURE__ */ jsxs36("div", { className: "relative", children: [
|
|
3621
|
+
!hasHeader && !hideCopy && /* @__PURE__ */ jsx65(
|
|
3525
3622
|
"button",
|
|
3526
3623
|
{
|
|
3527
3624
|
type: "button",
|
|
3528
3625
|
onClick: copy,
|
|
3529
3626
|
"aria-label": "Copy code",
|
|
3530
3627
|
className: "absolute right-2 top-2 rounded-[2px] p-1.5 text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-1 focus-visible:ring-current",
|
|
3531
|
-
children: copied ? /* @__PURE__ */
|
|
3628
|
+
children: copied ? /* @__PURE__ */ jsx65(Check7, { className: "size-4" }) : /* @__PURE__ */ jsx65(Copy, { className: "size-4" })
|
|
3532
3629
|
}
|
|
3533
3630
|
),
|
|
3534
|
-
/* @__PURE__ */
|
|
3631
|
+
/* @__PURE__ */ jsx65("pre", { className: "overflow-x-auto p-4 text-body-sm text-foreground", children: /* @__PURE__ */ jsx65("code", { children: current.code }) })
|
|
3535
3632
|
] })
|
|
3536
3633
|
] });
|
|
3537
3634
|
}
|
|
@@ -3539,18 +3636,18 @@ var CodeBlock = React58.forwardRef(
|
|
|
3539
3636
|
CodeBlock.displayName = "CodeBlock";
|
|
3540
3637
|
|
|
3541
3638
|
// src/components/metric.tsx
|
|
3542
|
-
import * as
|
|
3639
|
+
import * as React60 from "react";
|
|
3543
3640
|
import { ArrowDown, ArrowUp } from "lucide-react";
|
|
3544
|
-
import { jsx as
|
|
3545
|
-
var Metric =
|
|
3546
|
-
({ className, label, value, trend, change, icon, chart, ...props }, ref) => /* @__PURE__ */
|
|
3547
|
-
/* @__PURE__ */
|
|
3548
|
-
/* @__PURE__ */
|
|
3549
|
-
icon && /* @__PURE__ */
|
|
3641
|
+
import { jsx as jsx66, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
3642
|
+
var Metric = React60.forwardRef(
|
|
3643
|
+
({ className, label, value, trend, change, icon, chart, ...props }, ref) => /* @__PURE__ */ jsxs37("div", { ref, className: cn("flex flex-col gap-2 rounded-md border border-input p-4 font-sans", className), ...props, children: [
|
|
3644
|
+
/* @__PURE__ */ jsxs37("div", { className: "flex items-center justify-between", children: [
|
|
3645
|
+
/* @__PURE__ */ jsx66("p", { className: "text-body-sm text-muted-foreground", children: label }),
|
|
3646
|
+
icon && /* @__PURE__ */ jsx66("span", { className: "text-muted-foreground [&_svg]:size-5", children: icon })
|
|
3550
3647
|
] }),
|
|
3551
|
-
/* @__PURE__ */
|
|
3552
|
-
/* @__PURE__ */
|
|
3553
|
-
trend && /* @__PURE__ */
|
|
3648
|
+
/* @__PURE__ */ jsxs37("div", { className: "flex items-end justify-between gap-2", children: [
|
|
3649
|
+
/* @__PURE__ */ jsx66("p", { className: "text-headline-sm font-medium text-foreground", children: value }),
|
|
3650
|
+
trend && /* @__PURE__ */ jsxs37(
|
|
3554
3651
|
"span",
|
|
3555
3652
|
{
|
|
3556
3653
|
className: cn(
|
|
@@ -3560,25 +3657,25 @@ var Metric = React59.forwardRef(
|
|
|
3560
3657
|
trend === "neutral" && "text-muted-foreground"
|
|
3561
3658
|
),
|
|
3562
3659
|
children: [
|
|
3563
|
-
trend === "up" && /* @__PURE__ */
|
|
3564
|
-
trend === "down" && /* @__PURE__ */
|
|
3660
|
+
trend === "up" && /* @__PURE__ */ jsx66(ArrowUp, { className: "size-3.5" }),
|
|
3661
|
+
trend === "down" && /* @__PURE__ */ jsx66(ArrowDown, { className: "size-3.5" }),
|
|
3565
3662
|
change
|
|
3566
3663
|
]
|
|
3567
3664
|
}
|
|
3568
3665
|
)
|
|
3569
3666
|
] }),
|
|
3570
|
-
chart && /* @__PURE__ */
|
|
3667
|
+
chart && /* @__PURE__ */ jsx66("div", { className: "mt-1", children: chart })
|
|
3571
3668
|
] })
|
|
3572
3669
|
);
|
|
3573
3670
|
Metric.displayName = "Metric";
|
|
3574
3671
|
|
|
3575
3672
|
// src/components/number-input.tsx
|
|
3576
|
-
import * as
|
|
3673
|
+
import * as React61 from "react";
|
|
3577
3674
|
import { Minus as Minus3, Plus } from "lucide-react";
|
|
3578
|
-
import { jsx as
|
|
3579
|
-
var NumberInput =
|
|
3675
|
+
import { jsx as jsx67, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
3676
|
+
var NumberInput = React61.forwardRef(
|
|
3580
3677
|
({ className, value, defaultValue = 0, min, max, step = 1, onChange, disabled, ...props }, ref) => {
|
|
3581
|
-
const [internal, setInternal] =
|
|
3678
|
+
const [internal, setInternal] = React61.useState(defaultValue);
|
|
3582
3679
|
const current = value ?? internal;
|
|
3583
3680
|
const clamp = (n) => {
|
|
3584
3681
|
let v = n;
|
|
@@ -3591,7 +3688,7 @@ var NumberInput = React60.forwardRef(
|
|
|
3591
3688
|
setInternal(v);
|
|
3592
3689
|
onChange?.(v);
|
|
3593
3690
|
};
|
|
3594
|
-
return /* @__PURE__ */
|
|
3691
|
+
return /* @__PURE__ */ jsxs38(
|
|
3595
3692
|
"div",
|
|
3596
3693
|
{
|
|
3597
3694
|
className: cn(
|
|
@@ -3600,7 +3697,7 @@ var NumberInput = React60.forwardRef(
|
|
|
3600
3697
|
className
|
|
3601
3698
|
),
|
|
3602
3699
|
children: [
|
|
3603
|
-
/* @__PURE__ */
|
|
3700
|
+
/* @__PURE__ */ jsx67(
|
|
3604
3701
|
"button",
|
|
3605
3702
|
{
|
|
3606
3703
|
type: "button",
|
|
@@ -3608,10 +3705,10 @@ var NumberInput = React60.forwardRef(
|
|
|
3608
3705
|
disabled: disabled || min != null && current <= min,
|
|
3609
3706
|
onClick: () => set(current - step),
|
|
3610
3707
|
className: "flex w-9 shrink-0 items-center justify-center text-muted-foreground outline-none transition-colors hover:bg-accent hover:text-foreground focus-visible:bg-accent focus-visible:text-foreground focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
|
|
3611
|
-
children: /* @__PURE__ */
|
|
3708
|
+
children: /* @__PURE__ */ jsx67(Minus3, { className: "size-4" })
|
|
3612
3709
|
}
|
|
3613
3710
|
),
|
|
3614
|
-
/* @__PURE__ */
|
|
3711
|
+
/* @__PURE__ */ jsx67(
|
|
3615
3712
|
"input",
|
|
3616
3713
|
{
|
|
3617
3714
|
ref,
|
|
@@ -3630,7 +3727,7 @@ var NumberInput = React60.forwardRef(
|
|
|
3630
3727
|
...props
|
|
3631
3728
|
}
|
|
3632
3729
|
),
|
|
3633
|
-
/* @__PURE__ */
|
|
3730
|
+
/* @__PURE__ */ jsx67(
|
|
3634
3731
|
"button",
|
|
3635
3732
|
{
|
|
3636
3733
|
type: "button",
|
|
@@ -3638,7 +3735,7 @@ var NumberInput = React60.forwardRef(
|
|
|
3638
3735
|
disabled: disabled || max != null && current >= max,
|
|
3639
3736
|
onClick: () => set(current + step),
|
|
3640
3737
|
className: "flex w-9 shrink-0 items-center justify-center text-muted-foreground outline-none transition-colors hover:bg-accent hover:text-foreground focus-visible:bg-accent focus-visible:text-foreground focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
|
|
3641
|
-
children: /* @__PURE__ */
|
|
3738
|
+
children: /* @__PURE__ */ jsx67(Plus, { className: "size-4" })
|
|
3642
3739
|
}
|
|
3643
3740
|
)
|
|
3644
3741
|
]
|
|
@@ -3649,20 +3746,20 @@ var NumberInput = React60.forwardRef(
|
|
|
3649
3746
|
NumberInput.displayName = "NumberInput";
|
|
3650
3747
|
|
|
3651
3748
|
// src/components/quote.tsx
|
|
3652
|
-
import * as
|
|
3653
|
-
import { jsx as
|
|
3654
|
-
var Quote =
|
|
3655
|
-
({ className, author, authorTitle, avatar, children, ...props }, ref) => /* @__PURE__ */
|
|
3656
|
-
/* @__PURE__ */
|
|
3749
|
+
import * as React62 from "react";
|
|
3750
|
+
import { jsx as jsx68, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
3751
|
+
var Quote = React62.forwardRef(
|
|
3752
|
+
({ className, author, authorTitle, avatar, children, ...props }, ref) => /* @__PURE__ */ jsxs39("figure", { ref, className: cn("flex flex-col gap-4 font-sans", className), ...props, children: [
|
|
3753
|
+
/* @__PURE__ */ jsxs39("blockquote", { className: "text-title-md font-medium text-foreground", children: [
|
|
3657
3754
|
"\u201C",
|
|
3658
3755
|
children,
|
|
3659
3756
|
"\u201D"
|
|
3660
3757
|
] }),
|
|
3661
|
-
(author || authorTitle) && /* @__PURE__ */
|
|
3758
|
+
(author || authorTitle) && /* @__PURE__ */ jsxs39("figcaption", { className: "flex items-center gap-3", children: [
|
|
3662
3759
|
avatar,
|
|
3663
|
-
/* @__PURE__ */
|
|
3664
|
-
author && /* @__PURE__ */
|
|
3665
|
-
authorTitle && /* @__PURE__ */
|
|
3760
|
+
/* @__PURE__ */ jsxs39("div", { children: [
|
|
3761
|
+
author && /* @__PURE__ */ jsx68("p", { className: "text-body-md font-medium text-foreground", children: author }),
|
|
3762
|
+
authorTitle && /* @__PURE__ */ jsx68("p", { className: "text-body-sm text-muted-foreground", children: authorTitle })
|
|
3666
3763
|
] })
|
|
3667
3764
|
] })
|
|
3668
3765
|
] })
|
|
@@ -3670,21 +3767,21 @@ var Quote = React61.forwardRef(
|
|
|
3670
3767
|
Quote.displayName = "Quote";
|
|
3671
3768
|
|
|
3672
3769
|
// src/components/footer.tsx
|
|
3673
|
-
import * as
|
|
3674
|
-
import { jsx as
|
|
3675
|
-
var Footer =
|
|
3676
|
-
({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
3770
|
+
import * as React63 from "react";
|
|
3771
|
+
import { jsx as jsx69, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
3772
|
+
var Footer = React63.forwardRef(
|
|
3773
|
+
({ className, children, ...props }, ref) => /* @__PURE__ */ jsx69("footer", { ref, className: cn("w-full border-t border-border bg-background px-6 py-10 font-sans", className), ...props, children })
|
|
3677
3774
|
);
|
|
3678
3775
|
Footer.displayName = "Footer";
|
|
3679
|
-
var FooterColumn =
|
|
3680
|
-
({ className, title, children, ...props }, ref) => /* @__PURE__ */
|
|
3681
|
-
/* @__PURE__ */
|
|
3682
|
-
/* @__PURE__ */
|
|
3776
|
+
var FooterColumn = React63.forwardRef(
|
|
3777
|
+
({ className, title, children, ...props }, ref) => /* @__PURE__ */ jsxs40("div", { ref, className: cn("flex flex-col gap-3", className), ...props, children: [
|
|
3778
|
+
/* @__PURE__ */ jsx69("p", { className: "text-label-md font-medium text-foreground", children: title }),
|
|
3779
|
+
/* @__PURE__ */ jsx69("div", { className: "flex flex-col gap-2", children })
|
|
3683
3780
|
] })
|
|
3684
3781
|
);
|
|
3685
3782
|
FooterColumn.displayName = "FooterColumn";
|
|
3686
|
-
var FooterLink =
|
|
3687
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
3783
|
+
var FooterLink = React63.forwardRef(
|
|
3784
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx69(
|
|
3688
3785
|
"a",
|
|
3689
3786
|
{
|
|
3690
3787
|
ref,
|
|
@@ -3697,8 +3794,8 @@ var FooterLink = React62.forwardRef(
|
|
|
3697
3794
|
)
|
|
3698
3795
|
);
|
|
3699
3796
|
FooterLink.displayName = "FooterLink";
|
|
3700
|
-
var FooterBottom =
|
|
3701
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
3797
|
+
var FooterBottom = React63.forwardRef(
|
|
3798
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx69(
|
|
3702
3799
|
"div",
|
|
3703
3800
|
{
|
|
3704
3801
|
ref,
|
|
@@ -3713,12 +3810,12 @@ var FooterBottom = React62.forwardRef(
|
|
|
3713
3810
|
FooterBottom.displayName = "FooterBottom";
|
|
3714
3811
|
|
|
3715
3812
|
// src/components/table-of-contents.tsx
|
|
3716
|
-
import * as
|
|
3717
|
-
import { jsx as
|
|
3718
|
-
var TableOfContents =
|
|
3719
|
-
({ className, items, active, ...props }, ref) => /* @__PURE__ */
|
|
3813
|
+
import * as React64 from "react";
|
|
3814
|
+
import { jsx as jsx70 } from "react/jsx-runtime";
|
|
3815
|
+
var TableOfContents = React64.forwardRef(
|
|
3816
|
+
({ className, items, active, ...props }, ref) => /* @__PURE__ */ jsx70("nav", { ref, "aria-label": "Table of contents", className: cn("flex flex-col gap-0.5 font-sans", className), ...props, children: items.map((item) => {
|
|
3720
3817
|
const isActive = item.id === active;
|
|
3721
|
-
return /* @__PURE__ */
|
|
3818
|
+
return /* @__PURE__ */ jsx70(
|
|
3722
3819
|
"a",
|
|
3723
3820
|
{
|
|
3724
3821
|
href: `#${item.id}`,
|
|
@@ -3754,6 +3851,11 @@ export {
|
|
|
3754
3851
|
AlertDialogTitle,
|
|
3755
3852
|
AlertDialogTrigger,
|
|
3756
3853
|
AlertTitle,
|
|
3854
|
+
AppBar,
|
|
3855
|
+
AppBarActions,
|
|
3856
|
+
AppBarBrand,
|
|
3857
|
+
AppBarLink,
|
|
3858
|
+
AppBarNav,
|
|
3757
3859
|
AspectRatio,
|
|
3758
3860
|
AudioPlayer,
|
|
3759
3861
|
Avatar,
|
|
@@ -4020,6 +4122,7 @@ export {
|
|
|
4020
4122
|
textareaVariants,
|
|
4021
4123
|
toast,
|
|
4022
4124
|
toggleVariants,
|
|
4125
|
+
useAppBar,
|
|
4023
4126
|
useFormField,
|
|
4024
4127
|
useSidebar
|
|
4025
4128
|
};
|