@hai3/uikit 0.1.0-alpha.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/README.md +101 -0
- package/dist/index.d.mts +514 -0
- package/dist/index.d.ts +514 -0
- package/dist/index.js +1664 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1524 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +85 -0
- package/src/styles/applyTheme.ts +104 -0
- package/src/styles/globals.css +53 -0
- package/src/styles/themeTypes.ts +114 -0
package/README.md
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# @hai3/uikit
|
|
2
|
+
|
|
3
|
+
Production-ready React component library for the HAI3 framework.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
`@hai3/uikit` provides a comprehensive set of accessible, themeable React components built on shadcn/ui and Radix UI primitives. The library serves as the reference implementation of HAI3's component contracts and offers a complete design system for building modern SaaS applications.
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
This package delivers enterprise-grade UI components with consistent APIs, full TypeScript support, and accessibility built-in. Components follow a hierarchical architecture where base primitives wrap shadcn/ui elements, and composite components combine these primitives into higher-level patterns.
|
|
12
|
+
|
|
13
|
+
## Component Architecture
|
|
14
|
+
|
|
15
|
+
### Base Components
|
|
16
|
+
|
|
17
|
+
Foundation-level components that wrap shadcn/ui primitives with HAI3-specific APIs and conventions. These include buttons, inputs, layout elements, and other atomic UI building blocks. All base components accept standardized prop interfaces defined in the contracts package.
|
|
18
|
+
|
|
19
|
+
### Composite Components
|
|
20
|
+
|
|
21
|
+
Higher-level components built by combining base components into common patterns. Examples include icon buttons, theme selectors, and navigation elements. Composites demonstrate best practices for component composition and serve as templates for custom implementations.
|
|
22
|
+
|
|
23
|
+
### Theme Integration
|
|
24
|
+
|
|
25
|
+
All components support theming through Tailwind CSS custom properties. Themes define design tokens that components consume automatically, enabling dynamic theme switching without component changes.
|
|
26
|
+
|
|
27
|
+
## Key Features
|
|
28
|
+
|
|
29
|
+
- **Type Safety**: Complete TypeScript definitions with strict typing
|
|
30
|
+
- **Accessibility**: Built on Radix UI primitives following WAI-ARIA standards
|
|
31
|
+
- **Themeable**: Full design system integration via Tailwind CSS
|
|
32
|
+
- **Tree-Shakeable**: ES modules with side-effect-free exports
|
|
33
|
+
- **Consistent APIs**: Standardized prop interfaces across all components
|
|
34
|
+
|
|
35
|
+
## Installation
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm install @hai3/uikit
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Required Peer Dependencies
|
|
42
|
+
|
|
43
|
+
The package requires React 18+ and several UI primitive libraries:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install react react-dom @radix-ui/react-select @radix-ui/react-slot \
|
|
47
|
+
class-variance-authority clsx lucide-react tailwind-merge tailwindcss-animate
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Integration
|
|
51
|
+
|
|
52
|
+
### With HAI3 Applications
|
|
53
|
+
|
|
54
|
+
HAI3 applications integrate UI Kit through the component registry system. Register components at application startup, and the framework makes them available to all screens and layouts.
|
|
55
|
+
|
|
56
|
+
### As Standalone Library
|
|
57
|
+
|
|
58
|
+
The package can be used independently of the HAI3 framework. Import components directly and use them as standard React components with full TypeScript support.
|
|
59
|
+
|
|
60
|
+
## Component Categories
|
|
61
|
+
|
|
62
|
+
- **Form Controls**: Buttons, inputs, switches, sliders, and selects
|
|
63
|
+
- **Layout**: Headers, footers, menus, sidebars, and containers
|
|
64
|
+
- **Overlays**: Dialogs, popups, tooltips, and modals
|
|
65
|
+
- **Navigation**: Menu items, breadcrumbs, and tabs
|
|
66
|
+
- **Data Display**: Cards, lists, avatars, and badges
|
|
67
|
+
- **Feedback**: Progress indicators, loaders, and alerts
|
|
68
|
+
|
|
69
|
+
## Customization
|
|
70
|
+
|
|
71
|
+
### Styling Approach
|
|
72
|
+
|
|
73
|
+
Components use Tailwind CSS with class-variance-authority for variant management. Override default styles through className props or customize the Tailwind configuration.
|
|
74
|
+
|
|
75
|
+
### Component Extension
|
|
76
|
+
|
|
77
|
+
Build custom components by composing base components or extending existing ones. The type system ensures custom components maintain compatibility with the framework.
|
|
78
|
+
|
|
79
|
+
## Browser Support
|
|
80
|
+
|
|
81
|
+
- Chrome/Edge (latest 2 versions)
|
|
82
|
+
- Firefox (latest 2 versions)
|
|
83
|
+
- Safari (latest 2 versions)
|
|
84
|
+
|
|
85
|
+
## Version
|
|
86
|
+
|
|
87
|
+
**Alpha Release** (`0.1.0-alpha.0`) - APIs may change before stable release.
|
|
88
|
+
|
|
89
|
+
## License
|
|
90
|
+
|
|
91
|
+
Apache-2.0
|
|
92
|
+
|
|
93
|
+
## Documentation
|
|
94
|
+
|
|
95
|
+
Full framework documentation: [HAI3 Documentation](https://github.com/HAI3org/HAI3)
|
|
96
|
+
|
|
97
|
+
## Related Packages
|
|
98
|
+
|
|
99
|
+
- [`@hai3/uikit-contracts`](../uikit-contracts) - Type definitions and contracts
|
|
100
|
+
- [`@hai3/uicore`](../uicore) - Core framework and layout system
|
|
101
|
+
- [`@hai3/studio`](../studio) - Development tools overlay
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
import * as React$1 from 'react';
|
|
2
|
+
import React__default from 'react';
|
|
3
|
+
import * as AvatarPrimitive from '@radix-ui/react-avatar';
|
|
4
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
5
|
+
import { VariantProps } from 'class-variance-authority';
|
|
6
|
+
import { ButtonVariant, ButtonSize, TextDirection, IconButtonSize } from '@hai3/uikit-contracts';
|
|
7
|
+
export { ButtonSize, ButtonVariant, IconButtonSize } from '@hai3/uikit-contracts';
|
|
8
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
9
|
+
import * as SwitchPrimitives from '@radix-ui/react-switch';
|
|
10
|
+
import * as SliderPrimitive from '@radix-ui/react-slider';
|
|
11
|
+
import * as ProgressPrimitive from '@radix-ui/react-progress';
|
|
12
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
13
|
+
import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
|
|
14
|
+
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
|
15
|
+
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
16
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
17
|
+
|
|
18
|
+
declare const Avatar: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
|
|
19
|
+
declare const AvatarImage: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarImageProps & React$1.RefAttributes<HTMLImageElement>, "ref"> & React$1.RefAttributes<HTMLImageElement>>;
|
|
20
|
+
declare const AvatarFallback: React$1.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarFallbackProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
|
|
21
|
+
|
|
22
|
+
declare const buttonVariants: (props?: ({
|
|
23
|
+
variant?: ButtonVariant | null | undefined;
|
|
24
|
+
size?: ButtonSize | null | undefined;
|
|
25
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
26
|
+
interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
27
|
+
asChild?: boolean;
|
|
28
|
+
}
|
|
29
|
+
declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
30
|
+
|
|
31
|
+
declare const badgeVariants: (props?: ({
|
|
32
|
+
variant?: "default" | "secondary" | "destructive" | "outline" | null | undefined;
|
|
33
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
34
|
+
interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {
|
|
35
|
+
asChild?: boolean;
|
|
36
|
+
}
|
|
37
|
+
declare function Badge({ className, variant, asChild, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
38
|
+
|
|
39
|
+
declare const Input: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
|
|
40
|
+
|
|
41
|
+
interface TextareaProps extends React$1.TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
42
|
+
/**
|
|
43
|
+
* Enable auto-resize behavior (adjusts height based on content)
|
|
44
|
+
*/
|
|
45
|
+
autoResize?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Minimum height in pixels when auto-resize is enabled (default: 50)
|
|
48
|
+
*/
|
|
49
|
+
minHeight?: number;
|
|
50
|
+
/**
|
|
51
|
+
* Maximum height in pixels when auto-resize is enabled (default: 350)
|
|
52
|
+
*/
|
|
53
|
+
maxHeight?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Size variant (affects min-height)
|
|
56
|
+
* - sm: min-h-11 (44px / 2.75rem)
|
|
57
|
+
* - default: min-h-[60px] (3.75rem)
|
|
58
|
+
* - lg: min-h-20 (80px / 5rem)
|
|
59
|
+
*/
|
|
60
|
+
size?: 'sm' | 'default' | 'lg';
|
|
61
|
+
}
|
|
62
|
+
declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
|
|
63
|
+
|
|
64
|
+
declare const Switch: React$1.ForwardRefExoticComponent<Omit<SwitchPrimitives.SwitchProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
|
|
65
|
+
|
|
66
|
+
interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
67
|
+
/**
|
|
68
|
+
* If true, skeleton inherits text color instead of using bg-muted
|
|
69
|
+
* Useful for buttons, menu items, and colored text
|
|
70
|
+
*/
|
|
71
|
+
inheritColor?: boolean;
|
|
72
|
+
}
|
|
73
|
+
declare function Skeleton({ className, inheritColor, ...props }: SkeletonProps): react_jsx_runtime.JSX.Element;
|
|
74
|
+
|
|
75
|
+
interface SpinnerProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
76
|
+
icon?: React$1.ComponentType<{
|
|
77
|
+
className?: string;
|
|
78
|
+
}>;
|
|
79
|
+
size?: string;
|
|
80
|
+
}
|
|
81
|
+
declare const Spinner: React$1.ForwardRefExoticComponent<SpinnerProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
82
|
+
|
|
83
|
+
declare const Slider: React$1.ForwardRefExoticComponent<Omit<SliderPrimitive.SliderProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
|
|
84
|
+
declare const SliderTrack: React$1.ForwardRefExoticComponent<Omit<SliderPrimitive.SliderTrackProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
|
|
85
|
+
declare const SliderRange: React$1.ForwardRefExoticComponent<Omit<SliderPrimitive.SliderRangeProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
|
|
86
|
+
declare const SliderThumb: React$1.ForwardRefExoticComponent<Omit<SliderPrimitive.SliderThumbProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
|
|
87
|
+
|
|
88
|
+
declare const Progress: React$1.ForwardRefExoticComponent<Omit<ProgressPrimitive.ProgressProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
89
|
+
|
|
90
|
+
declare const TooltipProvider: {
|
|
91
|
+
({ delayDuration, ...props }: React$1.ComponentProps<typeof TooltipPrimitive.Provider>): react_jsx_runtime.JSX.Element;
|
|
92
|
+
displayName: string | undefined;
|
|
93
|
+
};
|
|
94
|
+
declare const Tooltip: {
|
|
95
|
+
({ ...props }: React$1.ComponentProps<typeof TooltipPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
96
|
+
displayName: string | undefined;
|
|
97
|
+
};
|
|
98
|
+
declare const TooltipTrigger: React$1.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
|
|
99
|
+
declare const TooltipContent: React$1.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
100
|
+
|
|
101
|
+
declare const Card: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
102
|
+
declare const CardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
103
|
+
declare const CardTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
104
|
+
declare const CardDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
105
|
+
declare const CardContent: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
106
|
+
declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Header Props
|
|
110
|
+
*/
|
|
111
|
+
interface HeaderProps {
|
|
112
|
+
children?: React__default.ReactNode;
|
|
113
|
+
className?: string;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Header Component
|
|
117
|
+
* Base layout primitive for app header
|
|
118
|
+
* HAI3 custom component (not from shadcn)
|
|
119
|
+
* Accepts children for flexible content (user info, actions, etc.)
|
|
120
|
+
*/
|
|
121
|
+
declare const Header: React__default.ForwardRefExoticComponent<HeaderProps & React__default.RefAttributes<HTMLElement>>;
|
|
122
|
+
|
|
123
|
+
declare const NavigationMenu: React$1.ForwardRefExoticComponent<Omit<NavigationMenuPrimitive.NavigationMenuProps & React$1.RefAttributes<HTMLElement>, "ref"> & React$1.RefAttributes<HTMLElement>>;
|
|
124
|
+
declare const NavigationMenuList: React$1.ForwardRefExoticComponent<Omit<NavigationMenuPrimitive.NavigationMenuListProps & React$1.RefAttributes<HTMLUListElement>, "ref"> & React$1.RefAttributes<HTMLUListElement>>;
|
|
125
|
+
declare const NavigationMenuItem: React$1.ForwardRefExoticComponent<NavigationMenuPrimitive.NavigationMenuItemProps & React$1.RefAttributes<HTMLLIElement>>;
|
|
126
|
+
declare const NavigationMenuTrigger: React$1.ForwardRefExoticComponent<Omit<NavigationMenuPrimitive.NavigationMenuTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
|
|
127
|
+
declare const NavigationMenuContent: React$1.ForwardRefExoticComponent<Omit<NavigationMenuPrimitive.NavigationMenuContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
128
|
+
declare const NavigationMenuLink: React$1.ForwardRefExoticComponent<NavigationMenuPrimitive.NavigationMenuLinkProps & React$1.RefAttributes<HTMLAnchorElement>>;
|
|
129
|
+
declare const NavigationMenuViewport: React$1.ForwardRefExoticComponent<Omit<NavigationMenuPrimitive.NavigationMenuViewportProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
130
|
+
declare const NavigationMenuIndicator: React$1.ForwardRefExoticComponent<Omit<NavigationMenuPrimitive.NavigationMenuIndicatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
131
|
+
|
|
132
|
+
declare const Sheet: React$1.FC<SheetPrimitive.DialogProps>;
|
|
133
|
+
declare const SheetTrigger: React$1.ForwardRefExoticComponent<SheetPrimitive.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
134
|
+
declare const SheetClose: React$1.ForwardRefExoticComponent<SheetPrimitive.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
135
|
+
declare const SheetPortal: React$1.FC<SheetPrimitive.DialogPortalProps>;
|
|
136
|
+
declare const SheetOverlay: React$1.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
137
|
+
declare const sheetVariants: (props?: ({
|
|
138
|
+
side?: "top" | "right" | "bottom" | "left" | null | undefined;
|
|
139
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
140
|
+
interface SheetContentProps extends React$1.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
|
|
141
|
+
}
|
|
142
|
+
declare const SheetContent: React$1.ForwardRefExoticComponent<SheetContentProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
143
|
+
declare const SheetHeader: {
|
|
144
|
+
({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
145
|
+
displayName: string;
|
|
146
|
+
};
|
|
147
|
+
declare const SheetFooter: {
|
|
148
|
+
({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
149
|
+
displayName: string;
|
|
150
|
+
};
|
|
151
|
+
declare const SheetTitle: React$1.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
|
|
152
|
+
declare const SheetDescription: React$1.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
|
|
153
|
+
|
|
154
|
+
declare const Dialog: React$1.FC<SheetPrimitive.DialogProps>;
|
|
155
|
+
declare const DialogTrigger: React$1.ForwardRefExoticComponent<SheetPrimitive.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
156
|
+
declare const DialogPortal: React$1.FC<SheetPrimitive.DialogPortalProps>;
|
|
157
|
+
declare const DialogClose: React$1.ForwardRefExoticComponent<SheetPrimitive.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
158
|
+
declare const DialogOverlay: React$1.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
159
|
+
declare const DialogContent: React$1.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
160
|
+
declare const DialogHeader: {
|
|
161
|
+
({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
162
|
+
displayName: string;
|
|
163
|
+
};
|
|
164
|
+
declare const DialogFooter: {
|
|
165
|
+
({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
166
|
+
displayName: string;
|
|
167
|
+
};
|
|
168
|
+
declare const DialogTitle: React$1.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
|
|
169
|
+
declare const DialogDescription: React$1.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
|
|
170
|
+
|
|
171
|
+
declare const Select: React$1.FC<SelectPrimitive.SelectProps>;
|
|
172
|
+
declare const SelectGroup: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
173
|
+
declare const SelectValue: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React$1.RefAttributes<HTMLSpanElement>>;
|
|
174
|
+
declare const SelectTrigger: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
|
|
175
|
+
declare const SelectScrollUpButton: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
176
|
+
declare const SelectScrollDownButton: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
177
|
+
declare const SelectContent: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
178
|
+
declare const SelectLabel: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
179
|
+
declare const SelectItem: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
180
|
+
declare const SelectSeparator: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
181
|
+
|
|
182
|
+
declare const DropdownMenu: React$1.FC<Omit<React$1.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>, 'dir'> & {
|
|
183
|
+
dir?: TextDirection;
|
|
184
|
+
}>;
|
|
185
|
+
declare const DropdownMenuTrigger: React$1.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
186
|
+
declare const DropdownMenuGroup: React$1.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
187
|
+
declare const DropdownMenuPortal: React$1.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
|
|
188
|
+
declare const DropdownMenuSub: React$1.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
|
|
189
|
+
declare const DropdownMenuRadioGroup: React$1.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
190
|
+
declare const DropdownMenuSubTrigger: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
191
|
+
inset?: boolean;
|
|
192
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
193
|
+
declare const DropdownMenuSubContent: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
194
|
+
container?: HTMLElement | null;
|
|
195
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
196
|
+
declare const DropdownMenuContent: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
197
|
+
container?: HTMLElement | null;
|
|
198
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
199
|
+
declare const DropdownMenuItem: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
200
|
+
inset?: boolean;
|
|
201
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
202
|
+
declare const DropdownMenuCheckboxItem: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
203
|
+
declare const DropdownMenuRadioItem: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
204
|
+
declare const DropdownMenuLabel: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
205
|
+
inset?: boolean;
|
|
206
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
207
|
+
declare const DropdownMenuSeparator: React$1.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
208
|
+
declare const DropdownMenuShortcut: {
|
|
209
|
+
({ className, ...props }: React$1.HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
|
|
210
|
+
displayName: string;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* IconButton component for HAI3 UI-Core
|
|
215
|
+
* Provides a consistent icon-only button across all screens
|
|
216
|
+
* Composes UI Kit Button with icon size variant
|
|
217
|
+
*/
|
|
218
|
+
interface IconButtonProps extends Omit<ButtonProps, 'size' | 'asChild'> {
|
|
219
|
+
size?: IconButtonSize;
|
|
220
|
+
'aria-label': string;
|
|
221
|
+
}
|
|
222
|
+
declare const IconButton: React__default.ForwardRefExoticComponent<IconButtonProps & React__default.RefAttributes<HTMLButtonElement>>;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* DropdownButton Component
|
|
226
|
+
* Button with integrated dropdown chevron icon
|
|
227
|
+
* Used for dropdown triggers in ThemeSelector, ScreensetSelector, etc.
|
|
228
|
+
* Forwards all props to Button for DropdownMenuTrigger compatibility
|
|
229
|
+
*/
|
|
230
|
+
interface DropdownButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
231
|
+
children: React__default.ReactNode;
|
|
232
|
+
variant?: ButtonVariant;
|
|
233
|
+
className?: string;
|
|
234
|
+
}
|
|
235
|
+
declare const DropdownButton: React__default.ForwardRefExoticComponent<DropdownButtonProps & React__default.RefAttributes<HTMLButtonElement>>;
|
|
236
|
+
|
|
237
|
+
declare const Sidebar: React$1.ForwardRefExoticComponent<Omit<React$1.ClassAttributes<HTMLElement> & React$1.HTMLAttributes<HTMLElement> & {
|
|
238
|
+
collapsed?: boolean;
|
|
239
|
+
}, "ref"> & React$1.RefAttributes<HTMLElement>>;
|
|
240
|
+
declare const SidebarContent: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
241
|
+
declare const SidebarMenu: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "ref"> & React$1.RefAttributes<HTMLUListElement>>;
|
|
242
|
+
declare const SidebarMenuItem: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "ref"> & React$1.RefAttributes<HTMLLIElement>>;
|
|
243
|
+
declare const SidebarMenuButton: React$1.ForwardRefExoticComponent<Omit<React$1.ClassAttributes<HTMLButtonElement> & React$1.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
244
|
+
asChild?: boolean;
|
|
245
|
+
isActive?: boolean;
|
|
246
|
+
tooltip?: string;
|
|
247
|
+
} & VariantProps<(props?: ({
|
|
248
|
+
variant?: "default" | "outline" | null | undefined;
|
|
249
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
250
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
|
|
251
|
+
declare const SidebarMenuIcon: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
|
|
252
|
+
declare const SidebarMenuLabel: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Sidebar Header Component
|
|
256
|
+
* Pure presentational component for sidebar logo/branding area
|
|
257
|
+
* Used with Sidebar component for consistent header styling
|
|
258
|
+
*/
|
|
259
|
+
|
|
260
|
+
interface SidebarHeaderProps extends React$1.ComponentProps<"div"> {
|
|
261
|
+
/**
|
|
262
|
+
* Logo icon element (should be properly sized SVG)
|
|
263
|
+
*/
|
|
264
|
+
logo?: React$1.ReactNode;
|
|
265
|
+
/**
|
|
266
|
+
* Logo text/branding element (shown when expanded)
|
|
267
|
+
*/
|
|
268
|
+
logoText?: React$1.ReactNode;
|
|
269
|
+
/**
|
|
270
|
+
* Whether the sidebar is collapsed
|
|
271
|
+
*/
|
|
272
|
+
collapsed?: boolean;
|
|
273
|
+
/**
|
|
274
|
+
* Click handler for the header area
|
|
275
|
+
*/
|
|
276
|
+
onClick?: () => void;
|
|
277
|
+
}
|
|
278
|
+
declare const SidebarHeader: React$1.ForwardRefExoticComponent<Omit<SidebarHeaderProps, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* User Info Props
|
|
282
|
+
* Matches UI Core contract in uikitContracts.ts
|
|
283
|
+
*/
|
|
284
|
+
interface UserInfoProps {
|
|
285
|
+
displayName?: string;
|
|
286
|
+
email?: string;
|
|
287
|
+
avatarUrl?: string;
|
|
288
|
+
className?: string;
|
|
289
|
+
loading?: boolean;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* UserInfo Component
|
|
293
|
+
* Composite component combining shadcn Avatar + text
|
|
294
|
+
* Displays user avatar with fallback initials and name/email
|
|
295
|
+
*/
|
|
296
|
+
declare const UserInfo: React__default.ForwardRefExoticComponent<UserInfoProps & React__default.RefAttributes<HTMLDivElement>>;
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* MessageBubble - Chat message display component
|
|
300
|
+
* Pure presentational component for displaying chat messages
|
|
301
|
+
*/
|
|
302
|
+
declare enum MessageType {
|
|
303
|
+
User = "user",
|
|
304
|
+
Assistant = "assistant"
|
|
305
|
+
}
|
|
306
|
+
interface MessageBubbleProps {
|
|
307
|
+
type: MessageType;
|
|
308
|
+
content: string;
|
|
309
|
+
timestamp?: Date;
|
|
310
|
+
className?: string;
|
|
311
|
+
onCopy?: () => void;
|
|
312
|
+
onEdit?: () => void;
|
|
313
|
+
onDelete?: () => void;
|
|
314
|
+
}
|
|
315
|
+
declare const MessageBubble: ({ type, content, className, onCopy, onEdit, onDelete, }: MessageBubbleProps) => react_jsx_runtime.JSX.Element;
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* ChatInput - Message input component
|
|
319
|
+
* Pure presentational component for chat message input
|
|
320
|
+
*/
|
|
321
|
+
interface ChatInputProps {
|
|
322
|
+
value: string;
|
|
323
|
+
onChange: (value: string) => void;
|
|
324
|
+
onSend: () => void;
|
|
325
|
+
onAttachFile?: () => void;
|
|
326
|
+
placeholder?: string;
|
|
327
|
+
disabled?: boolean;
|
|
328
|
+
maxRows?: number;
|
|
329
|
+
className?: string;
|
|
330
|
+
}
|
|
331
|
+
declare const ChatInput: ({ value, onChange, onSend, onAttachFile, placeholder, disabled, maxRows, className, }: ChatInputProps) => react_jsx_runtime.JSX.Element;
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* ThreadList - Chat thread list component
|
|
335
|
+
* Pure presentational component for displaying chat threads
|
|
336
|
+
*/
|
|
337
|
+
interface ChatThread {
|
|
338
|
+
id: string;
|
|
339
|
+
title: string;
|
|
340
|
+
preview: string;
|
|
341
|
+
timestamp: Date;
|
|
342
|
+
isTemporary?: boolean;
|
|
343
|
+
}
|
|
344
|
+
interface ThreadListProps {
|
|
345
|
+
threads: ChatThread[];
|
|
346
|
+
selectedThreadId?: string;
|
|
347
|
+
onThreadSelect: (threadId: string) => void;
|
|
348
|
+
onNewThread: () => void;
|
|
349
|
+
onDeleteThread?: (threadId: string) => void;
|
|
350
|
+
searchQuery?: string;
|
|
351
|
+
onSearchChange?: (query: string) => void;
|
|
352
|
+
loading?: boolean;
|
|
353
|
+
className?: string;
|
|
354
|
+
}
|
|
355
|
+
declare const ThreadList: ({ threads, selectedThreadId, onThreadSelect, onNewThread, onDeleteThread, searchQuery, onSearchChange, loading, className, }: ThreadListProps) => react_jsx_runtime.JSX.Element;
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Menu Icon ID
|
|
359
|
+
* Well-known constant defined where it belongs
|
|
360
|
+
*/
|
|
361
|
+
declare const MENU_ICON_ID: "menu";
|
|
362
|
+
/**
|
|
363
|
+
* Menu Icon (Hamburger)
|
|
364
|
+
* Core icon for header menu toggle
|
|
365
|
+
* Tree-shakeable - imported and registered by app
|
|
366
|
+
*/
|
|
367
|
+
declare const MenuIcon: React__default.FC<{
|
|
368
|
+
className?: string;
|
|
369
|
+
}>;
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Close Icon ID
|
|
373
|
+
* Well-known constant defined where it belongs
|
|
374
|
+
*/
|
|
375
|
+
declare const CLOSE_ICON_ID: "close";
|
|
376
|
+
/**
|
|
377
|
+
* Close Icon (X)
|
|
378
|
+
* Core icon for closing dialogs/popups
|
|
379
|
+
* Tree-shakeable - imported and registered by app
|
|
380
|
+
*/
|
|
381
|
+
declare const CloseIcon: React__default.FC<{
|
|
382
|
+
className?: string;
|
|
383
|
+
}>;
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Theme type definitions for HAI3
|
|
387
|
+
*/
|
|
388
|
+
interface Theme {
|
|
389
|
+
name: string;
|
|
390
|
+
colors: {
|
|
391
|
+
primary: string;
|
|
392
|
+
secondary: string;
|
|
393
|
+
accent: string;
|
|
394
|
+
background: string;
|
|
395
|
+
foreground: string;
|
|
396
|
+
muted: string;
|
|
397
|
+
border: string;
|
|
398
|
+
error: string;
|
|
399
|
+
warning: string;
|
|
400
|
+
success: string;
|
|
401
|
+
info: string;
|
|
402
|
+
mainMenu: {
|
|
403
|
+
DEFAULT: string;
|
|
404
|
+
foreground: string;
|
|
405
|
+
hover: string;
|
|
406
|
+
selected: string;
|
|
407
|
+
border: string;
|
|
408
|
+
};
|
|
409
|
+
chat: {
|
|
410
|
+
leftMenu: {
|
|
411
|
+
DEFAULT: string;
|
|
412
|
+
foreground: string;
|
|
413
|
+
hover: string;
|
|
414
|
+
selected: string;
|
|
415
|
+
border: string;
|
|
416
|
+
};
|
|
417
|
+
message: {
|
|
418
|
+
user: {
|
|
419
|
+
background: string;
|
|
420
|
+
foreground: string;
|
|
421
|
+
};
|
|
422
|
+
assistant: {
|
|
423
|
+
background: string;
|
|
424
|
+
foreground: string;
|
|
425
|
+
};
|
|
426
|
+
};
|
|
427
|
+
input: {
|
|
428
|
+
background: string;
|
|
429
|
+
foreground: string;
|
|
430
|
+
border: string;
|
|
431
|
+
};
|
|
432
|
+
codeBlock: {
|
|
433
|
+
background: string;
|
|
434
|
+
foreground: string;
|
|
435
|
+
border: string;
|
|
436
|
+
headerBackground: string;
|
|
437
|
+
};
|
|
438
|
+
};
|
|
439
|
+
};
|
|
440
|
+
spacing: {
|
|
441
|
+
xs: string;
|
|
442
|
+
sm: string;
|
|
443
|
+
md: string;
|
|
444
|
+
lg: string;
|
|
445
|
+
xl: string;
|
|
446
|
+
'2xl': string;
|
|
447
|
+
'3xl': string;
|
|
448
|
+
};
|
|
449
|
+
typography: {
|
|
450
|
+
fontFamily: {
|
|
451
|
+
sans: string[];
|
|
452
|
+
mono: string[];
|
|
453
|
+
};
|
|
454
|
+
fontSize: {
|
|
455
|
+
xs: string;
|
|
456
|
+
sm: string;
|
|
457
|
+
base: string;
|
|
458
|
+
lg: string;
|
|
459
|
+
xl: string;
|
|
460
|
+
'2xl': string;
|
|
461
|
+
'3xl': string;
|
|
462
|
+
'4xl': string;
|
|
463
|
+
'5xl': string;
|
|
464
|
+
};
|
|
465
|
+
fontWeight: {
|
|
466
|
+
normal: string;
|
|
467
|
+
medium: string;
|
|
468
|
+
semibold: string;
|
|
469
|
+
bold: string;
|
|
470
|
+
};
|
|
471
|
+
lineHeight: {
|
|
472
|
+
tight: string;
|
|
473
|
+
normal: string;
|
|
474
|
+
relaxed: string;
|
|
475
|
+
};
|
|
476
|
+
};
|
|
477
|
+
borderRadius: {
|
|
478
|
+
none: string;
|
|
479
|
+
sm: string;
|
|
480
|
+
md: string;
|
|
481
|
+
lg: string;
|
|
482
|
+
xl: string;
|
|
483
|
+
full: string;
|
|
484
|
+
};
|
|
485
|
+
shadows: {
|
|
486
|
+
sm: string;
|
|
487
|
+
md: string;
|
|
488
|
+
lg: string;
|
|
489
|
+
xl: string;
|
|
490
|
+
};
|
|
491
|
+
transitions: {
|
|
492
|
+
fast: string;
|
|
493
|
+
base: string;
|
|
494
|
+
slow: string;
|
|
495
|
+
slower: string;
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* Theme application utility
|
|
501
|
+
* Generates CSS variables from theme objects dynamically
|
|
502
|
+
* Single source of truth: theme objects in TypeScript
|
|
503
|
+
* Maps to shadcn CSS variable naming convention
|
|
504
|
+
*/
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* Apply theme to document by injecting CSS variables
|
|
508
|
+
* Theme objects are the single source of truth
|
|
509
|
+
* @param theme - Theme object to apply
|
|
510
|
+
* @param themeName - Optional theme name for data attribute
|
|
511
|
+
*/
|
|
512
|
+
declare const applyTheme: (theme: Theme, themeName?: string) => void;
|
|
513
|
+
|
|
514
|
+
export { Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Button, type ButtonProps, CLOSE_ICON_ID, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatInput, type ChatInputProps, type ChatThread, CloseIcon, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownButton, type DropdownButtonProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Header, type HeaderProps, IconButton, type IconButtonProps, Input, MENU_ICON_ID, MenuIcon, MessageBubble, type MessageBubbleProps, MessageType, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Progress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarHeader, type SidebarHeaderProps, SidebarMenu, SidebarMenuButton, SidebarMenuIcon, SidebarMenuItem, SidebarMenuLabel, Skeleton, Slider, SliderRange, SliderThumb, SliderTrack, Spinner, type SpinnerProps, Switch, Textarea, type Theme, ThreadList, type ThreadListProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserInfo, type UserInfoProps, applyTheme, badgeVariants };
|