@payglocal_ui/flux-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/package.json +72 -0
  2. package/src/accordion.tsx +68 -0
  3. package/src/alert.tsx +107 -0
  4. package/src/avatar-group.tsx +96 -0
  5. package/src/avatar-tag.tsx +136 -0
  6. package/src/avatar.tsx +39 -0
  7. package/src/badge.tsx +98 -0
  8. package/src/blanket.tsx +61 -0
  9. package/src/breadcrumb.tsx +119 -0
  10. package/src/button-group.tsx +218 -0
  11. package/src/button.tsx +83 -0
  12. package/src/calendar.tsx +227 -0
  13. package/src/callout.tsx +68 -0
  14. package/src/card.tsx +103 -0
  15. package/src/chart-templates.tsx +587 -0
  16. package/src/chart.tsx +379 -0
  17. package/src/checkbox-select.tsx +239 -0
  18. package/src/checkbox.tsx +54 -0
  19. package/src/code.tsx +154 -0
  20. package/src/command.tsx +77 -0
  21. package/src/country-select.tsx +242 -0
  22. package/src/currency-amount-input.tsx +72 -0
  23. package/src/data-table.tsx +378 -0
  24. package/src/date-picker.tsx +317 -0
  25. package/src/dialog.tsx +81 -0
  26. package/src/drawer.tsx +91 -0
  27. package/src/dropdown-menu.tsx +174 -0
  28. package/src/empty-state.tsx +32 -0
  29. package/src/field.tsx +243 -0
  30. package/src/flag.tsx +265 -0
  31. package/src/form.tsx +168 -0
  32. package/src/grid-flex.tsx +241 -0
  33. package/src/heading.tsx +202 -0
  34. package/src/icon-button.tsx +93 -0
  35. package/src/index.ts +332 -0
  36. package/src/inline-dialog.tsx +153 -0
  37. package/src/inline-edit.tsx +212 -0
  38. package/src/input-group.tsx +151 -0
  39. package/src/input.tsx +28 -0
  40. package/src/label.tsx +21 -0
  41. package/src/layout.tsx +119 -0
  42. package/src/link.tsx +80 -0
  43. package/src/lozenge.tsx +61 -0
  44. package/src/menu.tsx +146 -0
  45. package/src/otp-input.tsx +117 -0
  46. package/src/page-header.tsx +28 -0
  47. package/src/pagination.tsx +185 -0
  48. package/src/password-input.tsx +34 -0
  49. package/src/popover.tsx +31 -0
  50. package/src/progress-indicator.tsx +94 -0
  51. package/src/progress.tsx +95 -0
  52. package/src/radio-group.tsx +46 -0
  53. package/src/responsive.tsx +276 -0
  54. package/src/scroll-area.tsx +39 -0
  55. package/src/section-message.tsx +119 -0
  56. package/src/select.tsx +144 -0
  57. package/src/separator.tsx +26 -0
  58. package/src/side-nav.tsx +264 -0
  59. package/src/skeleton.tsx +74 -0
  60. package/src/slider.tsx +25 -0
  61. package/src/sonner.tsx +32 -0
  62. package/src/spinner.tsx +54 -0
  63. package/src/spotlight.tsx +141 -0
  64. package/src/status-badge.tsx +86 -0
  65. package/src/switch.tsx +70 -0
  66. package/src/tabs.tsx +57 -0
  67. package/src/tag.tsx +52 -0
  68. package/src/textarea.tsx +25 -0
  69. package/src/time-picker.tsx +443 -0
  70. package/src/tooltip.tsx +29 -0
  71. package/src/utils.ts +6 -0
  72. package/src/visually-hidden.tsx +25 -0
@@ -0,0 +1,202 @@
1
+ import * as React from "react";
2
+ import { cn } from "./utils";
3
+
4
+ // ---------------------------------------------------------------------------
5
+ // Heading
6
+ // ---------------------------------------------------------------------------
7
+
8
+ export interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {
9
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
10
+ as?: React.ElementType;
11
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
12
+ color?: "default" | "subtle" | "primary";
13
+ }
14
+
15
+ const headingSizeClasses: Record<NonNullable<HeadingProps["size"]>, string> = {
16
+ xs: "text-sm font-semibold",
17
+ sm: "text-base font-semibold",
18
+ md: "text-lg font-semibold",
19
+ lg: "text-xl font-semibold",
20
+ xl: "text-2xl font-semibold",
21
+ "2xl": "text-3xl font-semibold tracking-tight",
22
+ "3xl": "text-4xl font-semibold tracking-tight",
23
+ };
24
+
25
+ const headingColorClasses: Record<NonNullable<HeadingProps["color"]>, string> = {
26
+ default: "text-foreground",
27
+ subtle: "text-muted-foreground",
28
+ primary: "text-primary",
29
+ };
30
+
31
+ const defaultSizeForLevel: Record<number, NonNullable<HeadingProps["size"]>> = {
32
+ 1: "2xl",
33
+ 2: "md",
34
+ 3: "md",
35
+ 4: "sm",
36
+ 5: "xs",
37
+ 6: "xs",
38
+ };
39
+
40
+ export const Heading = React.forwardRef<HTMLHeadingElement, HeadingProps>(
41
+ (
42
+ {
43
+ level = 2,
44
+ as,
45
+ size,
46
+ color = "default",
47
+ className,
48
+ children,
49
+ ...props
50
+ },
51
+ ref
52
+ ) => {
53
+ const Tag = (as ?? (`h${level}` as React.ElementType)) as React.ElementType;
54
+ const resolvedSize = size ?? defaultSizeForLevel[level] ?? "md";
55
+
56
+ return (
57
+ <Tag
58
+ ref={ref}
59
+ className={cn(
60
+ headingSizeClasses[resolvedSize],
61
+ headingColorClasses[color],
62
+ className
63
+ )}
64
+ {...props}
65
+ >
66
+ {children}
67
+ </Tag>
68
+ );
69
+ }
70
+ );
71
+ Heading.displayName = "Heading";
72
+
73
+ // ---------------------------------------------------------------------------
74
+ // Text
75
+ // ---------------------------------------------------------------------------
76
+
77
+ export interface TextProps extends React.HTMLAttributes<HTMLElement> {
78
+ as?: "p" | "span" | "div" | "label";
79
+ size?: "xs" | "sm" | "md" | "lg";
80
+ weight?: "normal" | "medium" | "semibold";
81
+ color?: "default" | "subtle" | "primary" | "disabled";
82
+ truncate?: boolean;
83
+ }
84
+
85
+ const textSizeClasses: Record<NonNullable<TextProps["size"]>, string> = {
86
+ xs: "text-xs",
87
+ sm: "text-sm",
88
+ md: "text-base",
89
+ lg: "text-lg",
90
+ };
91
+
92
+ const textWeightClasses: Record<NonNullable<TextProps["weight"]>, string> = {
93
+ normal: "font-normal",
94
+ medium: "font-medium",
95
+ semibold: "font-semibold",
96
+ };
97
+
98
+ const textColorClasses: Record<NonNullable<TextProps["color"]>, string> = {
99
+ default: "text-foreground",
100
+ subtle: "text-muted-foreground",
101
+ primary: "text-primary",
102
+ disabled: "text-muted-foreground opacity-50",
103
+ };
104
+
105
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
+ export const Text = React.forwardRef<any, TextProps>(
107
+ (
108
+ {
109
+ as: Tag = "p",
110
+ size = "sm",
111
+ weight = "normal",
112
+ color = "default",
113
+ truncate = false,
114
+ className,
115
+ children,
116
+ ...props
117
+ },
118
+ ref
119
+ ) => {
120
+ return (
121
+ <Tag
122
+ ref={ref}
123
+ className={cn(
124
+ textSizeClasses[size],
125
+ textWeightClasses[weight],
126
+ textColorClasses[color],
127
+ truncate && "truncate",
128
+ className
129
+ )}
130
+ {...props}
131
+ >
132
+ {children}
133
+ </Tag>
134
+ );
135
+ }
136
+ );
137
+ Text.displayName = "Text";
138
+
139
+ // ---------------------------------------------------------------------------
140
+ // MetricText
141
+ // ---------------------------------------------------------------------------
142
+
143
+ export interface MetricTextProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "prefix"> {
144
+ size?: "sm" | "md" | "lg" | "xl";
145
+ trend?: "up" | "down" | "neutral";
146
+ prefix?: React.ReactNode;
147
+ suffix?: React.ReactNode;
148
+ }
149
+
150
+ const metricSizeClasses: Record<NonNullable<MetricTextProps["size"]>, string> = {
151
+ sm: "text-xl",
152
+ md: "text-2xl",
153
+ lg: "text-3xl",
154
+ xl: "text-4xl",
155
+ };
156
+
157
+ const metricTrendClasses: Record<NonNullable<MetricTextProps["trend"]>, string> = {
158
+ up: "text-green-600",
159
+ down: "text-red-600",
160
+ neutral: "text-foreground",
161
+ };
162
+
163
+ export const MetricText = React.forwardRef<HTMLSpanElement, MetricTextProps>(
164
+ (
165
+ {
166
+ size = "md",
167
+ trend = "neutral",
168
+ prefix,
169
+ suffix,
170
+ className,
171
+ children,
172
+ ...props
173
+ },
174
+ ref
175
+ ) => {
176
+ return (
177
+ <span
178
+ ref={ref}
179
+ className={cn(
180
+ "font-semibold tabular-nums tracking-tight",
181
+ metricSizeClasses[size],
182
+ metricTrendClasses[trend],
183
+ className
184
+ )}
185
+ {...props}
186
+ >
187
+ {prefix != null && (
188
+ <span className="mr-0.5 text-[0.75em] font-medium opacity-70">
189
+ {prefix}
190
+ </span>
191
+ )}
192
+ {children}
193
+ {suffix != null && (
194
+ <span className="ml-0.5 text-[0.75em] font-medium opacity-70">
195
+ {suffix}
196
+ </span>
197
+ )}
198
+ </span>
199
+ );
200
+ }
201
+ );
202
+ MetricText.displayName = "MetricText";
@@ -0,0 +1,93 @@
1
+ "use client";
2
+
3
+ import { cn } from "./utils";
4
+ import { Loader2 } from "lucide-react";
5
+ import { type ButtonHTMLAttributes, forwardRef } from "react";
6
+
7
+ export interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
8
+ "aria-label": string;
9
+ variant?: "primary" | "secondary" | "ghost" | "outline" | "danger";
10
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
11
+ isLoading?: boolean;
12
+ rounded?: "sm" | "md" | "lg" | "full";
13
+ }
14
+
15
+ const variantClasses: Record<NonNullable<IconButtonProps["variant"]>, string> = {
16
+ primary:
17
+ "bg-primary text-primary-foreground border border-primary shadow-sm hover:bg-[var(--primary-hover)]",
18
+ secondary:
19
+ "bg-muted text-foreground border border-border shadow-sm hover:bg-muted/85 dark:bg-muted/35 dark:text-foreground dark:border-border dark:hover:bg-muted/55",
20
+ ghost:
21
+ "bg-transparent text-foreground border border-transparent hover:bg-muted focus-visible:bg-muted/80 active:bg-muted/90",
22
+ outline:
23
+ "bg-card text-foreground border border-border shadow-sm hover:bg-muted",
24
+ danger:
25
+ "bg-red-600 text-white border border-red-600 shadow-sm hover:bg-red-700",
26
+ };
27
+
28
+ const sizeClasses: Record<NonNullable<IconButtonProps["size"]>, string> = {
29
+ xs: "size-7 min-w-7",
30
+ sm: "size-8 min-w-8",
31
+ md: "size-9 min-w-9",
32
+ lg: "size-10 min-w-10",
33
+ xl: "size-11 min-w-11",
34
+ };
35
+
36
+ const iconSizeClasses: Record<NonNullable<IconButtonProps["size"]>, string> = {
37
+ xs: "size-3.5",
38
+ sm: "size-3.5",
39
+ md: "size-4",
40
+ lg: "size-[1.125rem]",
41
+ xl: "size-5",
42
+ };
43
+
44
+ const roundedClasses: Record<NonNullable<IconButtonProps["rounded"]>, string> = {
45
+ sm: "rounded-md",
46
+ md: "rounded-lg",
47
+ lg: "rounded-xl",
48
+ full: "rounded-full",
49
+ };
50
+
51
+ export const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(
52
+ (
53
+ {
54
+ variant = "primary",
55
+ size = "md",
56
+ isLoading = false,
57
+ rounded = "lg",
58
+ className,
59
+ disabled,
60
+ children,
61
+ "aria-label": ariaLabel,
62
+ ...props
63
+ },
64
+ ref
65
+ ) => {
66
+ return (
67
+ <button
68
+ ref={ref}
69
+ aria-label={ariaLabel}
70
+ title={ariaLabel}
71
+ disabled={disabled || isLoading}
72
+ className={cn(
73
+ "inline-flex shrink-0 items-center justify-center font-medium",
74
+ "transition-colors duration-pg-fast ease-pg-standard",
75
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/35",
76
+ "disabled:cursor-not-allowed disabled:opacity-50",
77
+ variantClasses[variant],
78
+ sizeClasses[size],
79
+ roundedClasses[rounded],
80
+ className
81
+ )}
82
+ {...props}
83
+ >
84
+ {isLoading ? (
85
+ <Loader2 className={cn("animate-spin", iconSizeClasses[size])} />
86
+ ) : (
87
+ children
88
+ )}
89
+ </button>
90
+ );
91
+ }
92
+ );
93
+ IconButton.displayName = "IconButton";
package/src/index.ts ADDED
@@ -0,0 +1,332 @@
1
+ export { cn } from "./utils";
2
+
3
+ // Layout
4
+ export { Box, Stack, Inline } from "./layout";
5
+ export type { BoxProps, StackProps, InlineProps, LayoutSpacing } from "./layout";
6
+ export { Grid, Flex } from "./grid-flex";
7
+ export type { GridProps, GridCols, GridFlow, ResponsiveCols, FlexProps, FlexDirection, FlexAlign, FlexJustify, FlexWrap } from "./grid-flex";
8
+
9
+ // Button
10
+ export { Button } from "./button";
11
+ export type { ButtonProps } from "./button";
12
+ export { ButtonGroup, SplitButton, SplitButtonItem } from "./button-group";
13
+ export type { ButtonGroupProps, SplitButtonProps, SplitButtonItemProps } from "./button-group";
14
+
15
+ // Inputs
16
+ export { Input } from "./input";
17
+ export { PasswordInput } from "./password-input";
18
+ export type { PasswordInputProps } from "./password-input";
19
+ export { OtpInput } from "./otp-input";
20
+ export type { OtpInputProps } from "./otp-input";
21
+ export { CheckboxSelect } from "./checkbox-select";
22
+ export type { CheckboxSelectProps, CheckboxSelectOption } from "./checkbox-select";
23
+ export { Textarea } from "./textarea";
24
+ export { Label } from "./label";
25
+ export { Checkbox } from "./checkbox";
26
+ export type { CheckboxProps } from "./checkbox";
27
+ export { RadioGroup, RadioGroupItem } from "./radio-group";
28
+ export type { RadioGroupItemProps } from "./radio-group";
29
+ export { Switch } from "./switch";
30
+ export type { SwitchProps } from "./switch";
31
+ export { Slider } from "./slider";
32
+ export type { SliderProps } from "./slider";
33
+
34
+ // Form (validation wrapper)
35
+ export {
36
+ Form,
37
+ FormField,
38
+ FormLabel,
39
+ FormControl,
40
+ FormDescription,
41
+ FormError,
42
+ FormItem,
43
+ useForm,
44
+ } from "./form";
45
+ export type {
46
+ FormProps,
47
+ FormFieldProps,
48
+ FormValues,
49
+ FormErrors,
50
+ FieldConfig,
51
+ FieldsConfig,
52
+ RegisterResult,
53
+ UseFormReturn,
54
+ ValidatorRule,
55
+ } from "./form";
56
+
57
+ // Form fields
58
+ export {
59
+ Field,
60
+ FieldContent,
61
+ FieldDescription,
62
+ FieldError,
63
+ FieldGroup,
64
+ FieldLabel,
65
+ FieldLegend,
66
+ FieldSeparator,
67
+ FieldSet,
68
+ FieldTitle,
69
+ } from "./field";
70
+ export {
71
+ InputGroup,
72
+ InputGroupAddon,
73
+ InputGroupButton,
74
+ InputGroupInput,
75
+ InputGroupText,
76
+ InputGroupTextarea,
77
+ } from "./input-group";
78
+ export { CurrencyAmountInput } from "./currency-amount-input";
79
+
80
+ // Surfaces
81
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "./card";
82
+ export { Separator } from "./separator";
83
+ export { ScrollArea, ScrollBar } from "./scroll-area";
84
+
85
+ // SideNav
86
+ export {
87
+ SideNav,
88
+ SideNavHeader,
89
+ SideNavSection,
90
+ SideNavItem,
91
+ SideNavFooter,
92
+ } from "./side-nav";
93
+ export type { SideNavProps, SideNavItemProps } from "./side-nav";
94
+
95
+ // Navigation
96
+ export {
97
+ Breadcrumb,
98
+ BreadcrumbList,
99
+ BreadcrumbItem,
100
+ BreadcrumbLink,
101
+ BreadcrumbPage,
102
+ BreadcrumbSeparator,
103
+ BreadcrumbEllipsis,
104
+ } from "./breadcrumb";
105
+ export {
106
+ Pagination,
107
+ PaginationContent,
108
+ PaginationItem,
109
+ PaginationLink,
110
+ PaginationPrevious,
111
+ PaginationNext,
112
+ PaginationEllipsis,
113
+ } from "./pagination";
114
+ export type {
115
+ PaginationProps,
116
+ PaginationContentProps,
117
+ PaginationItemProps,
118
+ PaginationLinkProps,
119
+ PaginationPreviousProps,
120
+ PaginationNextProps,
121
+ PaginationEllipsisProps,
122
+ } from "./pagination";
123
+ export { Link } from "./link";
124
+ export type { LinkProps } from "./link";
125
+
126
+ // Labels & Badges
127
+ export { Badge } from "./badge";
128
+ export type { BadgeProps } from "./badge";
129
+ export { Lozenge } from "./lozenge";
130
+ export type { LozengeProps } from "./lozenge";
131
+ export { Tag, TagGroup } from "./tag";
132
+ export type { TagProps, TagGroupProps } from "./tag";
133
+ export { StatusBadge } from "./status-badge";
134
+ export type { StatusBadgeProps, BadgeVariant, BadgeTrailIcon } from "./status-badge";
135
+
136
+ // Overlays
137
+ export { Blanket } from "./blanket";
138
+ export type { BlanketProps } from "./blanket";
139
+ export { Spotlight, SpotlightCard, useSpotlight } from "./spotlight";
140
+ export type { SpotlightProps, SpotlightCardProps, SpotlightStep, UseSpotlightReturn } from "./spotlight";
141
+ export {
142
+ Dialog,
143
+ DialogTrigger,
144
+ DialogPortal,
145
+ DialogClose,
146
+ DialogContent,
147
+ DialogTitle,
148
+ DialogDescription,
149
+ } from "./dialog";
150
+ export {
151
+ Drawer,
152
+ DrawerTrigger,
153
+ DrawerClose,
154
+ DrawerContent,
155
+ DrawerHeader,
156
+ DrawerFooter,
157
+ DrawerTitle,
158
+ DrawerDescription,
159
+ } from "./drawer";
160
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor } from "./popover";
161
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "./tooltip";
162
+
163
+ // Menu (standalone vertical)
164
+ export { Menu, MenuSection, MenuItem, MenuDivider } from "./menu";
165
+ export type { MenuProps, MenuSectionProps, MenuItemProps } from "./menu";
166
+
167
+ // Menus & Select
168
+ export {
169
+ DropdownMenu,
170
+ DropdownMenuTrigger,
171
+ DropdownMenuContent,
172
+ DropdownMenuItem,
173
+ DropdownMenuCheckboxItem,
174
+ DropdownMenuRadioItem,
175
+ DropdownMenuLabel,
176
+ DropdownMenuSeparator,
177
+ DropdownMenuShortcut,
178
+ DropdownMenuGroup,
179
+ DropdownMenuPortal,
180
+ DropdownMenuSub,
181
+ DropdownMenuSubContent,
182
+ DropdownMenuSubTrigger,
183
+ DropdownMenuRadioGroup,
184
+ } from "./dropdown-menu";
185
+ export {
186
+ Select,
187
+ SelectGroup,
188
+ SelectValue,
189
+ SelectTrigger,
190
+ SelectContent,
191
+ SelectLabel,
192
+ SelectItem,
193
+ SelectSeparator,
194
+ SelectScrollUpButton,
195
+ SelectScrollDownButton,
196
+ } from "./select";
197
+ export { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator, CommandShortcut } from "./command";
198
+ export type {
199
+ CommandProps,
200
+ CommandInputProps,
201
+ CommandListProps,
202
+ CommandEmptyProps,
203
+ CommandGroupProps,
204
+ CommandItemProps,
205
+ CommandSeparatorProps,
206
+ CommandShortcutProps,
207
+ } from "./command";
208
+
209
+ // Tabs & Accordion
210
+ export { Tabs, TabsList, TabsTrigger, TabsContent } from "./tabs";
211
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from "./accordion";
212
+
213
+ // Messaging & Feedback
214
+ export { Alert, AlertTitle, AlertDescription, Banner } from "./alert";
215
+ export type { AlertProps, BannerProps } from "./alert";
216
+ export { Callout, CalloutIcon, CalloutTitle, CalloutText } from "./callout";
217
+ export type { CalloutProps, CalloutVariant } from "./callout";
218
+ export {
219
+ SectionMessage,
220
+ SectionMessageTitle,
221
+ SectionMessageContent,
222
+ SectionMessageActions,
223
+ } from "./section-message";
224
+ export type { SectionMessageProps, SectionMessageVariant } from "./section-message";
225
+ export { Spinner } from "./spinner";
226
+ export type { SpinnerProps } from "./spinner";
227
+ export { Progress, ProgressTracker } from "./progress";
228
+ export type { ProgressProps, ProgressTrackerStep, ProgressTrackerProps } from "./progress";
229
+
230
+ // Loading & Skeleton
231
+ export { Shimmer, StatCardSkeleton, TableRowSkeleton, ChartSkeleton } from "./skeleton";
232
+
233
+ // Data display
234
+ export { DataTable } from "./data-table";
235
+ export type { Column, DataTableDensity, DataTableFooterSummary, DataTableHeaderStyle } from "./data-table";
236
+ export { EmptyState } from "./empty-state";
237
+ export { PageHeader } from "./page-header";
238
+ export { Code, CodeBlock } from "./code";
239
+ export type { CodeProps, CodeBlockProps } from "./code";
240
+
241
+ // Avatar
242
+ export { Avatar, AvatarImage, AvatarFallback } from "./avatar";
243
+ export { AvatarGroup } from "./avatar-group";
244
+ export type { AvatarGroupProps, AvatarGroupItem } from "./avatar-group";
245
+ export { AvatarTag } from "./avatar-tag";
246
+ export type { AvatarTagProps, AvatarTagSize } from "./avatar-tag";
247
+
248
+ // Date & Calendar
249
+ export { Calendar, CalendarDayButton } from "./calendar";
250
+ export type { CalendarProps } from "./calendar";
251
+ export type { DateRange } from "react-day-picker";
252
+ export { DatePicker } from "./date-picker";
253
+
254
+ // Charts
255
+ export {
256
+ ChartContainer,
257
+ ChartTooltip,
258
+ ChartTooltipContent,
259
+ ChartLegend,
260
+ ChartLegendContent,
261
+ ChartStyle,
262
+ } from "./chart";
263
+ export type { ChartConfig } from "./chart";
264
+ export {
265
+ MetricSparklineCard,
266
+ DashboardAreaChartTemplate,
267
+ GroupedBarChartTemplate,
268
+ RankedBarListTemplate,
269
+ CategoryBarChartTemplate,
270
+ MiniSparklineChartCard,
271
+ AttentionListTemplate,
272
+ } from "./chart-templates";
273
+ export type {
274
+ MetricSparklinePoint,
275
+ MetricSparklineCardProps,
276
+ DashboardAreaChartPoint,
277
+ DashboardAreaChartTemplateProps,
278
+ GroupedBarSeries,
279
+ GroupedBarChartTemplateProps,
280
+ RankedBarItem,
281
+ RankedBarListTemplateProps,
282
+ CategoryBarPoint,
283
+ CategoryBarChartTemplateProps,
284
+ MiniSparklinePoint,
285
+ MiniSparklineStat,
286
+ MiniSparklineChartCardProps,
287
+ AttentionListItem,
288
+ AttentionListTemplateProps,
289
+ } from "./chart-templates";
290
+
291
+ // Toast
292
+ export { Toaster, toast } from "./sonner";
293
+
294
+ // Inline Edit
295
+ export { InlineEdit } from "./inline-edit";
296
+ export type { InlineEditProps } from "./inline-edit";
297
+
298
+ // Inline Dialog
299
+ export { InlineDialog, InlineDialogTrigger, InlineDialogContent } from "./inline-dialog";
300
+ export type { InlineDialogProps, InlineDialogContentProps } from "./inline-dialog";
301
+
302
+ // Flag notifications
303
+ export { Flag, FlagGroup, useFlagGroup } from "./flag";
304
+ export type { FlagProps, FlagGroupProps, FlagVariant, FlagAction, FlagGroupPosition, UseFlagGroupReturn } from "./flag";
305
+
306
+ // Responsive Show/Hide
307
+ export { Show, Hide, useBreakpoint } from "./responsive";
308
+ export type { ShowProps, HideProps, Breakpoint, UseBreakpointReturn } from "./responsive";
309
+
310
+ // Country Select
311
+ export { CountrySelect, COUNTRIES } from "./country-select";
312
+ export type { CountrySelectProps, Country } from "./country-select";
313
+
314
+ // Button variants
315
+ export { IconButton } from "./icon-button";
316
+ export type { IconButtonProps } from "./icon-button";
317
+
318
+ // Inputs
319
+ export { TimePicker } from "./time-picker";
320
+ export type { TimePickerProps } from "./time-picker";
321
+
322
+ // Typography
323
+ export { Heading, Text, MetricText } from "./heading";
324
+ export type { HeadingProps, TextProps, MetricTextProps } from "./heading";
325
+
326
+ // Status
327
+ export { ProgressIndicator } from "./progress-indicator";
328
+ export type { ProgressIndicatorProps } from "./progress-indicator";
329
+
330
+ // Utility
331
+ export { VisuallyHidden } from "./visually-hidden";
332
+ export type { VisuallyHiddenProps } from "./visually-hidden";