@ikatec/nebula-react 1.4.1-beta.3 → 1.5.0-beta.2

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.mts CHANGED
@@ -20,6 +20,7 @@ import { DayPicker, Locale } from 'react-day-picker';
20
20
  import * as SliderPrimitive from '@radix-ui/react-slider';
21
21
  import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
22
22
  import { UniqueIdentifier, DragEndEvent, CollisionDetection, Modifiers, SensorDescriptor, DndContext } from '@dnd-kit/core';
23
+ import * as AvatarPrimitive from '@radix-ui/react-avatar';
23
24
 
24
25
  declare enum buttonVariantEnum {
25
26
  primary = "\n bg-button-primary-background-default\n hover:bg-button-primary-background-hover\n active:bg-button-primary-background-active\n focus:bg-button-primary-background-focus\n focus:ring-button-primary-border-focus\n text-button-primary-text\n ",
@@ -784,7 +785,7 @@ interface CropperProps {
784
785
  }
785
786
  declare function Cropper({ onOpenChange, open, previewUrl, onApply, onCancelCrop, rounded, portal, }: CropperProps): react_jsx_runtime.JSX.Element;
786
787
 
787
- interface ProfileImageProps extends Pick<FileUploadOptions, 'maxFiles'> {
788
+ interface ProfileImageProps extends Omit<FileUploadOptions, 'maxSize'> {
788
789
  maxSizeMB?: number;
789
790
  onError?: (errors: {
790
791
  file?: File | FileMetadata;
@@ -800,7 +801,7 @@ interface ProfileImageProps extends Pick<FileUploadOptions, 'maxFiles'> {
800
801
  icon?: React__default.JSX.Element;
801
802
  }
802
803
  declare const ProfileImage: {
803
- ({ maxSizeMB, subtitle, onError, maxFiles, onRemove, image, cropperProps, onChange, size, icon, }: ProfileImageProps): react_jsx_runtime.JSX.Element;
804
+ ({ maxSizeMB, subtitle, onError, maxFiles, accept, onRemove, image, cropperProps, onChange, size, icon, }: ProfileImageProps): react_jsx_runtime.JSX.Element;
804
805
  displayName: string;
805
806
  };
806
807
 
@@ -962,6 +963,86 @@ interface KanbanCardProps extends HTMLAttributes<HTMLDivElement> {
962
963
  declare const KanbanCard: React$1.ForwardRefExoticComponent<KanbanCardProps & React$1.RefAttributes<HTMLDivElement>>;
963
964
  declare const KanbanColumnDragHandle: React$1.ForwardRefExoticComponent<React$1.ButtonHTMLAttributes<HTMLButtonElement> & React$1.RefAttributes<HTMLButtonElement>>;
964
965
 
966
+ declare const TipCard: ({ children, looping, }: PropsWithChildren<{
967
+ looping?: boolean;
968
+ }>) => react_jsx_runtime.JSX.Element;
969
+
970
+ declare const TipCardItem: {
971
+ ({ ["data-tip-card-item-order" as keyof React.HTMLAttributes<HTMLDivElement>]: order, children, ...props }: PropsWithChildren<React__default.HTMLAttributes<HTMLDivElement>>): react_jsx_runtime.JSX.Element;
972
+ displayName: string;
973
+ };
974
+
975
+ interface TipCardContextType {
976
+ registeredTipsMap: Map<string, boolean>;
977
+ currentTipOrder: number;
978
+ isCarouselMode: boolean;
979
+ looping: boolean;
980
+ nextTip: () => void;
981
+ previousTip: () => void;
982
+ registerTip: (id: string) => void;
983
+ unregisterTip: (id: string) => void;
984
+ }
985
+ declare const TipCardProvider: ({ children, looping, }: PropsWithChildren<{
986
+ looping?: boolean;
987
+ }>) => react_jsx_runtime.JSX.Element;
988
+ declare const useTipCard: () => TipCardContextType;
989
+
990
+ declare const TipCardFooter: React__default.MemoExoticComponent<() => react_jsx_runtime.JSX.Element | null>;
991
+
992
+ declare const TipCardHeader: React__default.MemoExoticComponent<({ children, icon }: PropsWithChildren<{
993
+ icon?: React__default.ReactNode;
994
+ }>) => react_jsx_runtime.JSX.Element>;
995
+
996
+ declare const TipCardContent: ({ children }: PropsWithChildren) => react_jsx_runtime.JSX.Element;
997
+
998
+ declare enum TipCardMediaType {
999
+ image = "image",
1000
+ video = "video"
1001
+ }
1002
+ interface TipCardMediaProps {
1003
+ type: keyof typeof TipCardMediaType;
1004
+ source?: string;
1005
+ alt?: string;
1006
+ children?: React__default.ReactNode;
1007
+ }
1008
+ declare const TipCardMedia: {
1009
+ ({ type, source, alt, children, }: TipCardMediaProps): react_jsx_runtime.JSX.Element;
1010
+ displayName: string;
1011
+ };
1012
+
1013
+ declare enum AvatarVariantEnum {
1014
+ primary = "primary",
1015
+ success = "success",
1016
+ warning = "warning",
1017
+ danger = "danger",
1018
+ neutral = "neutral",
1019
+ random = "random"
1020
+ }
1021
+ declare enum AvatarSizeEnum {
1022
+ 'xs' = "xs",// 32px
1023
+ 'sm' = "sm",// 40px
1024
+ 'md' = "md",// 44px
1025
+ 'lg' = "lg",// 48px
1026
+ 'xl' = "xl",// 56px
1027
+ '2xl' = "2xl",// 64px
1028
+ '3xl' = "3xl",// 72px
1029
+ '4xl' = "4xl",// 80px
1030
+ '5xl' = "5xl"
1031
+ }
1032
+ type AvatarSizeType = keyof typeof AvatarSizeEnum;
1033
+ type AvatarVariantType = keyof typeof AvatarVariantEnum;
1034
+ declare function Avatar({ className, size, variant, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Root> & {
1035
+ size?: AvatarSizeType;
1036
+ variant?: AvatarVariantType;
1037
+ }): react_jsx_runtime.JSX.Element;
1038
+ declare function AvatarImage({ className, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Image>): react_jsx_runtime.JSX.Element;
1039
+ declare function AvatarFallback({ className, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Fallback>): react_jsx_runtime.JSX.Element;
1040
+ declare function AvatarStick({ className, x, y, ...props }: React$1.ComponentProps<'span'> & {
1041
+ x: 'left' | 'right';
1042
+ y: 'top' | 'bottom';
1043
+ }): react_jsx_runtime.JSX.Element;
1044
+ declare function AvatarHoverAction({ className, ...props }: React$1.ComponentProps<'span'>): react_jsx_runtime.JSX.Element;
1045
+
965
1046
  interface Content {
966
1047
  /**
967
1048
  * Path to `node_modules` where `flowbite-react` is installed
@@ -1032,4 +1113,4 @@ declare function useClickOutside<T extends HTMLElement>(refs: PossibleRefs<T>, o
1032
1113
 
1033
1114
  declare function useKeyPress(key: string, callback: VoidFunction): void;
1034
1115
 
1035
- export { Accordion, AccordionContent, AccordionDescription, AccordionItem, type AccordionProps, AccordionTitle, AccordionTrigger, ActionBar, ActionBarButton, ActionBarClose, ActionBarContent, ActionBarDivider, ActionBarPortal, ActionBarTrigger, Alert, AlertButton, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, StyledAsync as Async, StyledAsyncCreatable as AsyncCreatable, Badge, type BadgeProps, BannerAlert, type BannerAlertProps, BannerType, BannerVariant, Box, type BoxProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Caption, type CaptionProps, Checkbox, type CheckboxProps, StyledCreatable as Creatable, Cropper, CropperCropArea, CropperDescription, CropperImage, type CropperProps, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, type FileMetadata, FileUpload, type FileUploadActions, FileUploadError, type FileUploadOptions, type FileUploadProps, type FileUploadState, type FileWithPreview, Heading, type HeadingProps, InputDatePickerSingle, type InputDatePickerSingleProps, InputDateRangePicker, type InputDateRangePickerProps, InputDateTimePickerSingle, type InputDateTimePickerSingleProps, InputPhone, InputText, type InputTextProps, InputTime, type InputTimeProps, KanbanBoard, type KanbanBoardCard, type KanbanBoardColumn, type KanbanBoardProps, KanbanCard, type KanbanCardDropEvent, KanbanColumn, KanbanColumnDragHandle, type KanbanColumnDropEvent, KanbanColumnFooter, KanbanColumnHeader, KanbanColumnTitle, type KanbanOrderingMode, type KanbanRenderCardContext, type KanbanRenderColumnContext, type KanbanVirtualizationOptions, Label, Link, type LinkProps, NebulaI18nProvider, type NebulaI18nProviderProps, Pagination, type PaginationProps, Paragraph, type ParagraphProps, Popover, PopoverContent, type PopoverContentProps, PopoverTrigger, ProfileImage, type ProfileImageProps, RadioGroup, RadioGroupItem, StyledSelect as Select, type CreateStyledSelectProps as SelectProps, Separator, type SeparatorProps, Skeleton, type SkeletonProps, Slider, Space, SpaceDirectionEnum, type SpaceProps, SpaceSizeEnum, Stepper, StepperDescription, StepperIndicator, StepperItem, StepperSeparator, StepperTitle, StepperTrigger, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, type TagProps, TextArea, type TextAreaProps, Toaster, Tooltip, type TooltipProps, alertVariants, badgeSizeEnum, badgeVariantEnum, buttonSizeEnum, buttonVariantEnum, buttonVariantsConfig, dateIsAvailable, formatBytes, getNebulaLanguage, localeByi18nKey, messages, separatorVariants, setNebulaLanguage, tagVariantsEnum, tailwind, toast, useClickOutside, useFileUpload, useKeyPress, useNebulaI18n };
1116
+ export { Accordion, AccordionContent, AccordionDescription, AccordionItem, type AccordionProps, AccordionTitle, AccordionTrigger, ActionBar, ActionBarButton, ActionBarClose, ActionBarContent, ActionBarDivider, ActionBarPortal, ActionBarTrigger, Alert, AlertButton, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, StyledAsync as Async, StyledAsyncCreatable as AsyncCreatable, Avatar, AvatarFallback, AvatarHoverAction, AvatarImage, AvatarSizeEnum, AvatarStick, AvatarVariantEnum, Badge, type BadgeProps, BannerAlert, type BannerAlertProps, BannerType, BannerVariant, Box, type BoxProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Caption, type CaptionProps, Checkbox, type CheckboxProps, StyledCreatable as Creatable, Cropper, CropperCropArea, CropperDescription, CropperImage, type CropperProps, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, type FileMetadata, FileUpload, type FileUploadActions, FileUploadError, type FileUploadOptions, type FileUploadProps, type FileUploadState, type FileWithPreview, Heading, type HeadingProps, InputDatePickerSingle, type InputDatePickerSingleProps, InputDateRangePicker, type InputDateRangePickerProps, InputDateTimePickerSingle, type InputDateTimePickerSingleProps, InputPhone, InputText, type InputTextProps, InputTime, type InputTimeProps, KanbanBoard, type KanbanBoardCard, type KanbanBoardColumn, type KanbanBoardProps, KanbanCard, type KanbanCardDropEvent, KanbanColumn, KanbanColumnDragHandle, type KanbanColumnDropEvent, KanbanColumnFooter, KanbanColumnHeader, KanbanColumnTitle, type KanbanOrderingMode, type KanbanRenderCardContext, type KanbanRenderColumnContext, type KanbanVirtualizationOptions, Label, Link, type LinkProps, NebulaI18nProvider, type NebulaI18nProviderProps, Pagination, type PaginationProps, Paragraph, type ParagraphProps, Popover, PopoverContent, type PopoverContentProps, PopoverTrigger, ProfileImage, type ProfileImageProps, RadioGroup, RadioGroupItem, StyledSelect as Select, type CreateStyledSelectProps as SelectProps, Separator, type SeparatorProps, Skeleton, type SkeletonProps, Slider, Space, SpaceDirectionEnum, type SpaceProps, SpaceSizeEnum, Stepper, StepperDescription, StepperIndicator, StepperItem, StepperSeparator, StepperTitle, StepperTrigger, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, type TagProps, TextArea, type TextAreaProps, TipCard, TipCardContent, TipCardFooter, TipCardHeader, TipCardItem, TipCardMedia, TipCardMediaType, TipCardProvider, Toaster, Tooltip, type TooltipProps, alertVariants, badgeSizeEnum, badgeVariantEnum, buttonSizeEnum, buttonVariantEnum, buttonVariantsConfig, dateIsAvailable, formatBytes, getNebulaLanguage, localeByi18nKey, messages, separatorVariants, setNebulaLanguage, tagVariantsEnum, tailwind, toast, useClickOutside, useFileUpload, useKeyPress, useNebulaI18n, useTipCard };
package/dist/index.d.ts CHANGED
@@ -20,6 +20,7 @@ import { DayPicker, Locale } from 'react-day-picker';
20
20
  import * as SliderPrimitive from '@radix-ui/react-slider';
21
21
  import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
22
22
  import { UniqueIdentifier, DragEndEvent, CollisionDetection, Modifiers, SensorDescriptor, DndContext } from '@dnd-kit/core';
23
+ import * as AvatarPrimitive from '@radix-ui/react-avatar';
23
24
 
24
25
  declare enum buttonVariantEnum {
25
26
  primary = "\n bg-button-primary-background-default\n hover:bg-button-primary-background-hover\n active:bg-button-primary-background-active\n focus:bg-button-primary-background-focus\n focus:ring-button-primary-border-focus\n text-button-primary-text\n ",
@@ -784,7 +785,7 @@ interface CropperProps {
784
785
  }
785
786
  declare function Cropper({ onOpenChange, open, previewUrl, onApply, onCancelCrop, rounded, portal, }: CropperProps): react_jsx_runtime.JSX.Element;
786
787
 
787
- interface ProfileImageProps extends Pick<FileUploadOptions, 'maxFiles'> {
788
+ interface ProfileImageProps extends Omit<FileUploadOptions, 'maxSize'> {
788
789
  maxSizeMB?: number;
789
790
  onError?: (errors: {
790
791
  file?: File | FileMetadata;
@@ -800,7 +801,7 @@ interface ProfileImageProps extends Pick<FileUploadOptions, 'maxFiles'> {
800
801
  icon?: React__default.JSX.Element;
801
802
  }
802
803
  declare const ProfileImage: {
803
- ({ maxSizeMB, subtitle, onError, maxFiles, onRemove, image, cropperProps, onChange, size, icon, }: ProfileImageProps): react_jsx_runtime.JSX.Element;
804
+ ({ maxSizeMB, subtitle, onError, maxFiles, accept, onRemove, image, cropperProps, onChange, size, icon, }: ProfileImageProps): react_jsx_runtime.JSX.Element;
804
805
  displayName: string;
805
806
  };
806
807
 
@@ -962,6 +963,86 @@ interface KanbanCardProps extends HTMLAttributes<HTMLDivElement> {
962
963
  declare const KanbanCard: React$1.ForwardRefExoticComponent<KanbanCardProps & React$1.RefAttributes<HTMLDivElement>>;
963
964
  declare const KanbanColumnDragHandle: React$1.ForwardRefExoticComponent<React$1.ButtonHTMLAttributes<HTMLButtonElement> & React$1.RefAttributes<HTMLButtonElement>>;
964
965
 
966
+ declare const TipCard: ({ children, looping, }: PropsWithChildren<{
967
+ looping?: boolean;
968
+ }>) => react_jsx_runtime.JSX.Element;
969
+
970
+ declare const TipCardItem: {
971
+ ({ ["data-tip-card-item-order" as keyof React.HTMLAttributes<HTMLDivElement>]: order, children, ...props }: PropsWithChildren<React__default.HTMLAttributes<HTMLDivElement>>): react_jsx_runtime.JSX.Element;
972
+ displayName: string;
973
+ };
974
+
975
+ interface TipCardContextType {
976
+ registeredTipsMap: Map<string, boolean>;
977
+ currentTipOrder: number;
978
+ isCarouselMode: boolean;
979
+ looping: boolean;
980
+ nextTip: () => void;
981
+ previousTip: () => void;
982
+ registerTip: (id: string) => void;
983
+ unregisterTip: (id: string) => void;
984
+ }
985
+ declare const TipCardProvider: ({ children, looping, }: PropsWithChildren<{
986
+ looping?: boolean;
987
+ }>) => react_jsx_runtime.JSX.Element;
988
+ declare const useTipCard: () => TipCardContextType;
989
+
990
+ declare const TipCardFooter: React__default.MemoExoticComponent<() => react_jsx_runtime.JSX.Element | null>;
991
+
992
+ declare const TipCardHeader: React__default.MemoExoticComponent<({ children, icon }: PropsWithChildren<{
993
+ icon?: React__default.ReactNode;
994
+ }>) => react_jsx_runtime.JSX.Element>;
995
+
996
+ declare const TipCardContent: ({ children }: PropsWithChildren) => react_jsx_runtime.JSX.Element;
997
+
998
+ declare enum TipCardMediaType {
999
+ image = "image",
1000
+ video = "video"
1001
+ }
1002
+ interface TipCardMediaProps {
1003
+ type: keyof typeof TipCardMediaType;
1004
+ source?: string;
1005
+ alt?: string;
1006
+ children?: React__default.ReactNode;
1007
+ }
1008
+ declare const TipCardMedia: {
1009
+ ({ type, source, alt, children, }: TipCardMediaProps): react_jsx_runtime.JSX.Element;
1010
+ displayName: string;
1011
+ };
1012
+
1013
+ declare enum AvatarVariantEnum {
1014
+ primary = "primary",
1015
+ success = "success",
1016
+ warning = "warning",
1017
+ danger = "danger",
1018
+ neutral = "neutral",
1019
+ random = "random"
1020
+ }
1021
+ declare enum AvatarSizeEnum {
1022
+ 'xs' = "xs",// 32px
1023
+ 'sm' = "sm",// 40px
1024
+ 'md' = "md",// 44px
1025
+ 'lg' = "lg",// 48px
1026
+ 'xl' = "xl",// 56px
1027
+ '2xl' = "2xl",// 64px
1028
+ '3xl' = "3xl",// 72px
1029
+ '4xl' = "4xl",// 80px
1030
+ '5xl' = "5xl"
1031
+ }
1032
+ type AvatarSizeType = keyof typeof AvatarSizeEnum;
1033
+ type AvatarVariantType = keyof typeof AvatarVariantEnum;
1034
+ declare function Avatar({ className, size, variant, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Root> & {
1035
+ size?: AvatarSizeType;
1036
+ variant?: AvatarVariantType;
1037
+ }): react_jsx_runtime.JSX.Element;
1038
+ declare function AvatarImage({ className, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Image>): react_jsx_runtime.JSX.Element;
1039
+ declare function AvatarFallback({ className, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Fallback>): react_jsx_runtime.JSX.Element;
1040
+ declare function AvatarStick({ className, x, y, ...props }: React$1.ComponentProps<'span'> & {
1041
+ x: 'left' | 'right';
1042
+ y: 'top' | 'bottom';
1043
+ }): react_jsx_runtime.JSX.Element;
1044
+ declare function AvatarHoverAction({ className, ...props }: React$1.ComponentProps<'span'>): react_jsx_runtime.JSX.Element;
1045
+
965
1046
  interface Content {
966
1047
  /**
967
1048
  * Path to `node_modules` where `flowbite-react` is installed
@@ -1032,4 +1113,4 @@ declare function useClickOutside<T extends HTMLElement>(refs: PossibleRefs<T>, o
1032
1113
 
1033
1114
  declare function useKeyPress(key: string, callback: VoidFunction): void;
1034
1115
 
1035
- export { Accordion, AccordionContent, AccordionDescription, AccordionItem, type AccordionProps, AccordionTitle, AccordionTrigger, ActionBar, ActionBarButton, ActionBarClose, ActionBarContent, ActionBarDivider, ActionBarPortal, ActionBarTrigger, Alert, AlertButton, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, StyledAsync as Async, StyledAsyncCreatable as AsyncCreatable, Badge, type BadgeProps, BannerAlert, type BannerAlertProps, BannerType, BannerVariant, Box, type BoxProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Caption, type CaptionProps, Checkbox, type CheckboxProps, StyledCreatable as Creatable, Cropper, CropperCropArea, CropperDescription, CropperImage, type CropperProps, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, type FileMetadata, FileUpload, type FileUploadActions, FileUploadError, type FileUploadOptions, type FileUploadProps, type FileUploadState, type FileWithPreview, Heading, type HeadingProps, InputDatePickerSingle, type InputDatePickerSingleProps, InputDateRangePicker, type InputDateRangePickerProps, InputDateTimePickerSingle, type InputDateTimePickerSingleProps, InputPhone, InputText, type InputTextProps, InputTime, type InputTimeProps, KanbanBoard, type KanbanBoardCard, type KanbanBoardColumn, type KanbanBoardProps, KanbanCard, type KanbanCardDropEvent, KanbanColumn, KanbanColumnDragHandle, type KanbanColumnDropEvent, KanbanColumnFooter, KanbanColumnHeader, KanbanColumnTitle, type KanbanOrderingMode, type KanbanRenderCardContext, type KanbanRenderColumnContext, type KanbanVirtualizationOptions, Label, Link, type LinkProps, NebulaI18nProvider, type NebulaI18nProviderProps, Pagination, type PaginationProps, Paragraph, type ParagraphProps, Popover, PopoverContent, type PopoverContentProps, PopoverTrigger, ProfileImage, type ProfileImageProps, RadioGroup, RadioGroupItem, StyledSelect as Select, type CreateStyledSelectProps as SelectProps, Separator, type SeparatorProps, Skeleton, type SkeletonProps, Slider, Space, SpaceDirectionEnum, type SpaceProps, SpaceSizeEnum, Stepper, StepperDescription, StepperIndicator, StepperItem, StepperSeparator, StepperTitle, StepperTrigger, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, type TagProps, TextArea, type TextAreaProps, Toaster, Tooltip, type TooltipProps, alertVariants, badgeSizeEnum, badgeVariantEnum, buttonSizeEnum, buttonVariantEnum, buttonVariantsConfig, dateIsAvailable, formatBytes, getNebulaLanguage, localeByi18nKey, messages, separatorVariants, setNebulaLanguage, tagVariantsEnum, tailwind, toast, useClickOutside, useFileUpload, useKeyPress, useNebulaI18n };
1116
+ export { Accordion, AccordionContent, AccordionDescription, AccordionItem, type AccordionProps, AccordionTitle, AccordionTrigger, ActionBar, ActionBarButton, ActionBarClose, ActionBarContent, ActionBarDivider, ActionBarPortal, ActionBarTrigger, Alert, AlertButton, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, StyledAsync as Async, StyledAsyncCreatable as AsyncCreatable, Avatar, AvatarFallback, AvatarHoverAction, AvatarImage, AvatarSizeEnum, AvatarStick, AvatarVariantEnum, Badge, type BadgeProps, BannerAlert, type BannerAlertProps, BannerType, BannerVariant, Box, type BoxProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, Calendar, type CalendarProps, Caption, type CaptionProps, Checkbox, type CheckboxProps, StyledCreatable as Creatable, Cropper, CropperCropArea, CropperDescription, CropperImage, type CropperProps, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, type FileMetadata, FileUpload, type FileUploadActions, FileUploadError, type FileUploadOptions, type FileUploadProps, type FileUploadState, type FileWithPreview, Heading, type HeadingProps, InputDatePickerSingle, type InputDatePickerSingleProps, InputDateRangePicker, type InputDateRangePickerProps, InputDateTimePickerSingle, type InputDateTimePickerSingleProps, InputPhone, InputText, type InputTextProps, InputTime, type InputTimeProps, KanbanBoard, type KanbanBoardCard, type KanbanBoardColumn, type KanbanBoardProps, KanbanCard, type KanbanCardDropEvent, KanbanColumn, KanbanColumnDragHandle, type KanbanColumnDropEvent, KanbanColumnFooter, KanbanColumnHeader, KanbanColumnTitle, type KanbanOrderingMode, type KanbanRenderCardContext, type KanbanRenderColumnContext, type KanbanVirtualizationOptions, Label, Link, type LinkProps, NebulaI18nProvider, type NebulaI18nProviderProps, Pagination, type PaginationProps, Paragraph, type ParagraphProps, Popover, PopoverContent, type PopoverContentProps, PopoverTrigger, ProfileImage, type ProfileImageProps, RadioGroup, RadioGroupItem, StyledSelect as Select, type CreateStyledSelectProps as SelectProps, Separator, type SeparatorProps, Skeleton, type SkeletonProps, Slider, Space, SpaceDirectionEnum, type SpaceProps, SpaceSizeEnum, Stepper, StepperDescription, StepperIndicator, StepperItem, StepperSeparator, StepperTitle, StepperTrigger, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, type TagProps, TextArea, type TextAreaProps, TipCard, TipCardContent, TipCardFooter, TipCardHeader, TipCardItem, TipCardMedia, TipCardMediaType, TipCardProvider, Toaster, Tooltip, type TooltipProps, alertVariants, badgeSizeEnum, badgeVariantEnum, buttonSizeEnum, buttonVariantEnum, buttonVariantsConfig, dateIsAvailable, formatBytes, getNebulaLanguage, localeByi18nKey, messages, separatorVariants, setNebulaLanguage, tagVariantsEnum, tailwind, toast, useClickOutside, useFileUpload, useKeyPress, useNebulaI18n, useTipCard };
package/dist/index.js CHANGED
@@ -34,6 +34,7 @@ var core = require('@dnd-kit/core');
34
34
  var sortable = require('@dnd-kit/sortable');
35
35
  var utilities = require('@dnd-kit/utilities');
36
36
  var reactVirtual = require('@tanstack/react-virtual');
37
+ var AvatarPrimitive = require('@radix-ui/react-avatar');
37
38
 
38
39
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
39
40
 
@@ -75,6 +76,7 @@ var RPNInput__namespace = /*#__PURE__*/_interopNamespace(RPNInput);
75
76
  var flags__default = /*#__PURE__*/_interopDefault(flags);
76
77
  var SliderPrimitive__namespace = /*#__PURE__*/_interopNamespace(SliderPrimitive);
77
78
  var RadioGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(RadioGroupPrimitive);
79
+ var AvatarPrimitive__namespace = /*#__PURE__*/_interopNamespace(AvatarPrimitive);
78
80
 
79
81
  // src/button.tsx
80
82
 
@@ -296,11 +298,11 @@ var Badge = React31__namespace.forwardRef(
296
298
  Badge.displayName = "Badge";
297
299
 
298
300
  // src/utils/extract-variant.ts
299
- function extractVariants(variants4) {
300
- return Object.keys(variants4).reduce(
301
+ function extractVariants(variants5) {
302
+ return Object.keys(variants5).reduce(
301
303
  (acc, key) => {
302
304
  const variantKey = key;
303
- const variantValues = variants4[variantKey];
305
+ const variantValues = variants5[variantKey];
304
306
  if (variantValues) {
305
307
  acc[variantKey] = Object.keys(variantValues);
306
308
  }
@@ -6215,6 +6217,7 @@ var ProfileImage = ({
6215
6217
  subtitle,
6216
6218
  onError,
6217
6219
  maxFiles = Infinity,
6220
+ accept = "image/*",
6218
6221
  onRemove,
6219
6222
  image,
6220
6223
  cropperProps,
@@ -6251,6 +6254,7 @@ var ProfileImage = ({
6251
6254
  }
6252
6255
  ] = useFileUpload({
6253
6256
  maxFiles,
6257
+ accept,
6254
6258
  initialFiles: image ? [
6255
6259
  {
6256
6260
  id,
@@ -6262,7 +6266,6 @@ var ProfileImage = ({
6262
6266
  ] : [],
6263
6267
  multiple: false,
6264
6268
  maxSize: maxSize > 0 ? maxSize : void 0,
6265
- accept: "image/*",
6266
6269
  onFilesChange([file2]) {
6267
6270
  handleFileChange(file2?.file);
6268
6271
  }
@@ -8097,6 +8100,400 @@ function KanbanBoard({
8097
8100
  }
8098
8101
  );
8099
8102
  }
8103
+ var TipCardContext = React31.createContext({
8104
+ registeredTipsMap: /* @__PURE__ */ new Map(),
8105
+ currentTipOrder: 0,
8106
+ isCarouselMode: false,
8107
+ looping: false,
8108
+ nextTip: () => void 0,
8109
+ previousTip: () => void 0,
8110
+ registerTip: () => void 0,
8111
+ unregisterTip: () => void 0
8112
+ });
8113
+ var TipCardProvider = ({
8114
+ children,
8115
+ looping = false
8116
+ }) => {
8117
+ const [currentTipOrder, setCurrentTipOrder] = React31.useState(0);
8118
+ const [registeredTipsMap, setRegisteredTipsMap] = React31.useState(/* @__PURE__ */ new Map());
8119
+ const isCarouselMode = React31.useMemo(() => {
8120
+ return registeredTipsMap.size > 1;
8121
+ }, [registeredTipsMap]);
8122
+ const registerTip = React31.useCallback((id) => {
8123
+ setRegisteredTipsMap((prev) => {
8124
+ const newMap = new Map(prev);
8125
+ newMap.set(id, true);
8126
+ return newMap;
8127
+ });
8128
+ }, []);
8129
+ const unregisterTip = React31.useCallback((id) => {
8130
+ setRegisteredTipsMap((prev) => {
8131
+ const newMap = new Map(prev);
8132
+ newMap.delete(id);
8133
+ return newMap;
8134
+ });
8135
+ }, []);
8136
+ const nextTip = React31.useCallback(() => {
8137
+ setCurrentTipOrder((prev) => {
8138
+ if (looping) {
8139
+ return (prev + 1) % registeredTipsMap.size;
8140
+ }
8141
+ return Math.min(prev + 1, registeredTipsMap.size - 1);
8142
+ });
8143
+ }, [registeredTipsMap.size, looping]);
8144
+ const previousTip = React31.useCallback(() => {
8145
+ setCurrentTipOrder((prev) => {
8146
+ if (looping) {
8147
+ return (prev - 1 + registeredTipsMap.size) % registeredTipsMap.size;
8148
+ }
8149
+ return Math.max(prev - 1, 0);
8150
+ });
8151
+ }, [registeredTipsMap.size, looping]);
8152
+ const contextValue = React31.useMemo(
8153
+ () => ({
8154
+ registerTip,
8155
+ unregisterTip,
8156
+ registeredTipsMap,
8157
+ currentTipOrder,
8158
+ nextTip,
8159
+ previousTip,
8160
+ isCarouselMode,
8161
+ looping
8162
+ }),
8163
+ [
8164
+ registerTip,
8165
+ unregisterTip,
8166
+ registeredTipsMap,
8167
+ currentTipOrder,
8168
+ nextTip,
8169
+ previousTip,
8170
+ isCarouselMode,
8171
+ looping
8172
+ ]
8173
+ );
8174
+ return /* @__PURE__ */ jsxRuntime.jsx(TipCardContext.Provider, { value: contextValue, children });
8175
+ };
8176
+ var useTipCard = () => {
8177
+ const context = React31.useContext(TipCardContext);
8178
+ if (!context) {
8179
+ throw new Error("useTipCard must be used within a TipCardProvider");
8180
+ }
8181
+ return context;
8182
+ };
8183
+ var TipCardFooter = React31.memo(() => {
8184
+ const {
8185
+ isCarouselMode,
8186
+ previousTip,
8187
+ nextTip,
8188
+ currentTipOrder,
8189
+ registeredTipsMap,
8190
+ looping
8191
+ } = useTipCard();
8192
+ if (isCarouselMode) {
8193
+ return /* @__PURE__ */ jsxRuntime.jsxs(Space, { size: "xs", direction: "row", children: [
8194
+ /* @__PURE__ */ jsxRuntime.jsx(
8195
+ Button,
8196
+ {
8197
+ variant: "ghost",
8198
+ onClick: previousTip,
8199
+ icon: true,
8200
+ "aria-label": "Previous tip",
8201
+ size: "sm",
8202
+ disabled: currentTipOrder === 0 && !looping,
8203
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, {})
8204
+ }
8205
+ ),
8206
+ /* @__PURE__ */ jsxRuntime.jsx(
8207
+ Button,
8208
+ {
8209
+ variant: "ghost",
8210
+ onClick: nextTip,
8211
+ icon: true,
8212
+ "aria-label": "Next tip",
8213
+ size: "sm",
8214
+ disabled: currentTipOrder === registeredTipsMap.size - 1 && !looping,
8215
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, {})
8216
+ }
8217
+ )
8218
+ ] });
8219
+ }
8220
+ return null;
8221
+ });
8222
+ TipCardFooter.displayName = "TipCardFooter";
8223
+ var TipCardItem = ({
8224
+ ["data-tip-card-item-order"]: order,
8225
+ children,
8226
+ ...props
8227
+ }) => {
8228
+ const id = React31.useId();
8229
+ const { registerTip, currentTipOrder } = useTipCard();
8230
+ React31.useEffect(() => {
8231
+ registerTip(id);
8232
+ }, [registerTip, id]);
8233
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...props, className: "nebula-ds w-full inline-flex h-full flex-col gap-6", children: currentTipOrder === Number(order) && children });
8234
+ };
8235
+ TipCardItem.displayName = "TipCardItem";
8236
+ var TipCardContent = ({ children }) => {
8237
+ const { currentTipOrder } = useTipCard();
8238
+ const calculateTransform = React31.useCallback(() => {
8239
+ return `translateX(-${currentTipOrder * 100}%)`;
8240
+ }, [currentTipOrder]);
8241
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nebula-ds w-full overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
8242
+ "div",
8243
+ {
8244
+ className: "nebula-ds w-full whitespace-nowrap transition-transform duration-300",
8245
+ style: { transform: calculateTransform() },
8246
+ children: React31__namespace.default.Children.map(children, (child, i) => {
8247
+ if (React31__namespace.default.isValidElement(child) && child.type === TipCardItem) {
8248
+ return React31__namespace.default.cloneElement(child, {
8249
+ key: child.key,
8250
+ ["data-tip-card-item"]: true,
8251
+ ["data-tip-card-item-order"]: i.toString()
8252
+ });
8253
+ }
8254
+ return child;
8255
+ })
8256
+ }
8257
+ ) });
8258
+ };
8259
+ var TipCard = ({
8260
+ children,
8261
+ looping = false
8262
+ }) => {
8263
+ return /* @__PURE__ */ jsxRuntime.jsx(TipCardProvider, { looping, children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { paddingSize: "md", border: true, className: "nebula-ds flex flex-col gap-6", children: [
8264
+ /* @__PURE__ */ jsxRuntime.jsx(TipCardContent, { children }),
8265
+ /* @__PURE__ */ jsxRuntime.jsx(TipCardFooter, {})
8266
+ ] }) });
8267
+ };
8268
+ var TipCardHeader = React31.memo(
8269
+ ({ children, icon }) => {
8270
+ const { currentTipOrder, isCarouselMode, registeredTipsMap } = useTipCard();
8271
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nebula-ds flex flex-col gap-3 items-start", children: [
8272
+ icon && /* @__PURE__ */ jsxRuntime.jsx(
8273
+ "div",
8274
+ {
8275
+ className: "size-10 rounded-full bg-tipCard-header-icon-background [&_svg]:size-5 [&_svg]:text-tipCard-header-icon-color flex items-center justify-center",
8276
+ children: icon
8277
+ }
8278
+ ),
8279
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nebula-ds flex items-center justify-between relative w-full", children: [
8280
+ children,
8281
+ isCarouselMode && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nebula-ds absolute right-0", children: /* @__PURE__ */ jsxRuntime.jsxs(Paragraph, { size: "sm", children: [
8282
+ currentTipOrder + 1,
8283
+ "-",
8284
+ registeredTipsMap.size
8285
+ ] }) })
8286
+ ] })
8287
+ ] });
8288
+ }
8289
+ );
8290
+ TipCardHeader.displayName = "TipCardHeader";
8291
+ var TipCardContent2 = ({ children }) => {
8292
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "nebula-ds flex flex-col gap-4 whitespace-normal [&_:is(h1,h2,h3,h4,h5,h6)]:mb-2", children });
8293
+ };
8294
+ var TipCardMediaType = /* @__PURE__ */ ((TipCardMediaType2) => {
8295
+ TipCardMediaType2["image"] = "image";
8296
+ TipCardMediaType2["video"] = "video";
8297
+ return TipCardMediaType2;
8298
+ })(TipCardMediaType || {});
8299
+ var TipCardMedia = ({
8300
+ type,
8301
+ source,
8302
+ alt,
8303
+ children
8304
+ }) => {
8305
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "nebula-ds w-full min-h-36 rounded-2xl overflow-hidden", children: [
8306
+ source && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: type === "image" /* image */ ? /* @__PURE__ */ jsxRuntime.jsx(
8307
+ "img",
8308
+ {
8309
+ src: source,
8310
+ alt,
8311
+ className: "nebula-ds w-full h-full object-contain"
8312
+ }
8313
+ ) : /* @__PURE__ */ jsxRuntime.jsxs(
8314
+ "video",
8315
+ {
8316
+ className: "nebula-ds w-full h-full object-contain",
8317
+ controls: true,
8318
+ src: source,
8319
+ children: [
8320
+ /* @__PURE__ */ jsxRuntime.jsx("source", { src: source, type: "video/mp4" }),
8321
+ "Your browser does not support the video tag."
8322
+ ]
8323
+ }
8324
+ ) }),
8325
+ children
8326
+ ] });
8327
+ };
8328
+ TipCardMedia.displayName = "TipCardMedia";
8329
+ var avatarVariantsConfig = classVarianceAuthority.cva("relative flex size-8 shrink-0 rounded-full", {
8330
+ variants: {
8331
+ size: {
8332
+ xs: 'size-[32px] [&>[data-slot="avatar-hover-action"]]:text-sm [&>[data-slot="avatar-fallback"]]:text-sm',
8333
+ // 32px
8334
+ sm: 'size-[40px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-sm',
8335
+ // 40px
8336
+ md: 'size-[44px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-sm',
8337
+ // 44px
8338
+ lg: 'size-[48px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-base',
8339
+ // 48px
8340
+ xl: 'size-[56px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-xl',
8341
+ // 56px
8342
+ "2xl": 'size-[64px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-xl',
8343
+ // 64px
8344
+ "3xl": 'size-[72px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-2xl',
8345
+ // 72px
8346
+ "4xl": 'size-[80px] [&>[data-slot="avatar-hover-action"]]:text-3xl [&>[data-slot="avatar-fallback"]]:text-2xl',
8347
+ // 80px
8348
+ "5xl": 'size-[88px] [&>[data-slot="avatar-hover-action"]]:text-3xl [&>[data-slot="avatar-fallback"]]:text-3xl'
8349
+ // 88px
8350
+ },
8351
+ variant: {
8352
+ primary: 'bg-primary-200 dark:bg-primary-800 [&>[data-slot="avatar-fallback"]]:text-primary-700 dark:[&>[data-slot="avatar-fallback"]]:text-primary-100',
8353
+ success: 'bg-success-200 dark:bg-success-800 [&>[data-slot="avatar-fallback"]]:text-success-700 dark:[&>[data-slot="avatar-fallback"]]:text-success-100',
8354
+ warning: 'bg-warning-200 dark:bg-warning-800 [&>[data-slot="avatar-fallback"]]:text-warning-700 dark:[&>[data-slot="avatar-fallback"]]:text-warning-100',
8355
+ danger: 'bg-danger-200 dark:bg-danger-800 [&>[data-slot="avatar-fallback"]]:text-danger-700 dark:[&>[data-slot="avatar-fallback"]]:text-danger-100',
8356
+ neutral: 'bg-neutral-200 dark:bg-neutral-800 [&>[data-slot="avatar-fallback"]]:text-neutral-700 dark:[&>[data-slot="avatar-fallback"]]:text-neutral-100',
8357
+ random: 'bg-primary-200 dark:bg-primary-800 [&>[data-slot="avatar-fallback"]]:text-primary-700 dark:[&>[data-slot="avatar-fallback"]]:text-primary-100'
8358
+ }
8359
+ },
8360
+ defaultVariants: {
8361
+ size: "sm",
8362
+ variant: "primary"
8363
+ }
8364
+ });
8365
+ var AvatarVariantEnum = /* @__PURE__ */ ((AvatarVariantEnum2) => {
8366
+ AvatarVariantEnum2["primary"] = "primary";
8367
+ AvatarVariantEnum2["success"] = "success";
8368
+ AvatarVariantEnum2["warning"] = "warning";
8369
+ AvatarVariantEnum2["danger"] = "danger";
8370
+ AvatarVariantEnum2["neutral"] = "neutral";
8371
+ AvatarVariantEnum2["random"] = "random";
8372
+ return AvatarVariantEnum2;
8373
+ })(AvatarVariantEnum || {});
8374
+ var AvatarSizeEnum = /* @__PURE__ */ ((AvatarSizeEnum2) => {
8375
+ AvatarSizeEnum2["xs"] = "xs";
8376
+ AvatarSizeEnum2["sm"] = "sm";
8377
+ AvatarSizeEnum2["md"] = "md";
8378
+ AvatarSizeEnum2["lg"] = "lg";
8379
+ AvatarSizeEnum2["xl"] = "xl";
8380
+ AvatarSizeEnum2["2xl"] = "2xl";
8381
+ AvatarSizeEnum2["3xl"] = "3xl";
8382
+ AvatarSizeEnum2["4xl"] = "4xl";
8383
+ AvatarSizeEnum2["5xl"] = "5xl";
8384
+ return AvatarSizeEnum2;
8385
+ })(AvatarSizeEnum || {});
8386
+ var variants4 = [
8387
+ "primary" /* primary */,
8388
+ "success" /* success */,
8389
+ "warning" /* warning */,
8390
+ "danger" /* danger */,
8391
+ "neutral" /* neutral */
8392
+ ];
8393
+ function Avatar({
8394
+ className,
8395
+ size: size4 = "sm",
8396
+ variant: variant3 = "primary",
8397
+ ...props
8398
+ }) {
8399
+ const randomVariant = React31__namespace.useMemo(
8400
+ () => variants4[Math.floor(Math.random() * variants4.length)],
8401
+ []
8402
+ );
8403
+ return /* @__PURE__ */ jsxRuntime.jsx(
8404
+ AvatarPrimitive__namespace.Root,
8405
+ {
8406
+ "data-slot": "avatar",
8407
+ className: cn(
8408
+ avatarVariantsConfig({
8409
+ size: size4,
8410
+ variant: variant3 === "random" /* random */ ? randomVariant : variant3
8411
+ }),
8412
+ className
8413
+ ),
8414
+ ...props
8415
+ }
8416
+ );
8417
+ }
8418
+ function AvatarImage({
8419
+ className,
8420
+ ...props
8421
+ }) {
8422
+ return /* @__PURE__ */ jsxRuntime.jsx(
8423
+ AvatarPrimitive__namespace.Image,
8424
+ {
8425
+ "data-slot": "avatar-image",
8426
+ className: cn("aspect-square size-full rounded-full", className),
8427
+ ...props
8428
+ }
8429
+ );
8430
+ }
8431
+ function AvatarFallback({
8432
+ className,
8433
+ ...props
8434
+ }) {
8435
+ return /* @__PURE__ */ jsxRuntime.jsx(
8436
+ AvatarPrimitive__namespace.Fallback,
8437
+ {
8438
+ "data-slot": "avatar-fallback",
8439
+ className: cn(
8440
+ "bg-muted flex size-full items-center justify-center rounded-full",
8441
+ className
8442
+ ),
8443
+ ...props
8444
+ }
8445
+ );
8446
+ }
8447
+ var AvatarStickVariantsConfig = classVarianceAuthority.cva(
8448
+ "absolute bg-transparent max-h-1/2 max-w-1/2 overflow-hidden",
8449
+ {
8450
+ variants: {
8451
+ x: {
8452
+ left: "left-0",
8453
+ right: "right-0"
8454
+ },
8455
+ y: {
8456
+ top: "top-0",
8457
+ bottom: "bottom-0"
8458
+ }
8459
+ },
8460
+ defaultVariants: {
8461
+ x: "right",
8462
+ y: "bottom"
8463
+ }
8464
+ }
8465
+ );
8466
+ function AvatarStick({
8467
+ className,
8468
+ x,
8469
+ y,
8470
+ ...props
8471
+ }) {
8472
+ return /* @__PURE__ */ jsxRuntime.jsx(
8473
+ "span",
8474
+ {
8475
+ "data-slot": "avatar-sticker",
8476
+ className: cn(AvatarStickVariantsConfig({ x, y }), className),
8477
+ ...props
8478
+ }
8479
+ );
8480
+ }
8481
+ function AvatarHoverAction({
8482
+ className,
8483
+ ...props
8484
+ }) {
8485
+ return /* @__PURE__ */ jsxRuntime.jsx(
8486
+ "span",
8487
+ {
8488
+ "data-slot": "avatar-hover-action",
8489
+ className: cn(
8490
+ "flex items-center justify-center index-100 absolute size-full cursor-pointer rounded-full ring-1 ring-neutral-100 dark:ring-neutral-800 bg-neutral-100 dark:bg-neutral-800 transition-all duration-300 opacity-0 hover:opacity-100",
8491
+ className
8492
+ ),
8493
+ ...props
8494
+ }
8495
+ );
8496
+ }
8100
8497
 
8101
8498
  // src/tailwind.ts
8102
8499
  function content({ base = "./" } = {}) {
@@ -8136,6 +8533,13 @@ exports.AlertDialogTrigger = AlertDialogTrigger;
8136
8533
  exports.AlertTitle = AlertTitle;
8137
8534
  exports.Async = StyledAsync;
8138
8535
  exports.AsyncCreatable = StyledAsyncCreatable;
8536
+ exports.Avatar = Avatar;
8537
+ exports.AvatarFallback = AvatarFallback;
8538
+ exports.AvatarHoverAction = AvatarHoverAction;
8539
+ exports.AvatarImage = AvatarImage;
8540
+ exports.AvatarSizeEnum = AvatarSizeEnum;
8541
+ exports.AvatarStick = AvatarStick;
8542
+ exports.AvatarVariantEnum = AvatarVariantEnum;
8139
8543
  exports.Badge = Badge;
8140
8544
  exports.BannerAlert = BannerAlert;
8141
8545
  exports.BannerType = BannerType;
@@ -8247,6 +8651,14 @@ exports.TabsList = TabsList;
8247
8651
  exports.TabsTrigger = TabsTrigger;
8248
8652
  exports.Tag = Tag;
8249
8653
  exports.TextArea = TextArea;
8654
+ exports.TipCard = TipCard;
8655
+ exports.TipCardContent = TipCardContent2;
8656
+ exports.TipCardFooter = TipCardFooter;
8657
+ exports.TipCardHeader = TipCardHeader;
8658
+ exports.TipCardItem = TipCardItem;
8659
+ exports.TipCardMedia = TipCardMedia;
8660
+ exports.TipCardMediaType = TipCardMediaType;
8661
+ exports.TipCardProvider = TipCardProvider;
8250
8662
  exports.Toaster = Toaster;
8251
8663
  exports.Tooltip = Tooltip;
8252
8664
  exports.alertVariants = alertVariants;
@@ -8269,3 +8681,4 @@ exports.useClickOutside = useClickOutside;
8269
8681
  exports.useFileUpload = useFileUpload;
8270
8682
  exports.useKeyPress = useKeyPress;
8271
8683
  exports.useNebulaI18n = useNebulaI18n;
8684
+ exports.useTipCard = useTipCard;
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React31 from 'react';
2
- import React31__default, { createContext, forwardRef, useMemo, useState, useEffect, useCallback, useContext, useRef, useId } from 'react';
2
+ import React31__default, { createContext, forwardRef, useMemo, useState, useEffect, memo, useContext, useCallback, useRef, useId } from 'react';
3
3
  import { Slot } from '@radix-ui/react-slot';
4
4
  import { cva } from 'class-variance-authority';
5
5
  import { extendTailwindMerge } from 'tailwind-merge';
@@ -7,7 +7,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
7
  import * as PopoverPrimitive from '@radix-ui/react-popover';
8
8
  import * as LabelPrimitive from '@radix-ui/react-label';
9
9
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
10
- import { ChevronRight, Check, Circle, CircleX, Eye, EyeOff, X, Minus, ClockIcon, ChevronsLeft, ChevronLeft, ChevronsRight, MoreHorizontal, ChevronDown, ChevronLeftIcon, ChevronDownIcon, ChevronRightIcon, CalendarIcon, ImageUpIcon, XIcon, MinusIcon, PlusIcon, UserIcon, LoaderCircleIcon, CheckIcon, PhoneIcon, FileTextIcon, FileAudioIcon, FileVideoIcon, Info, CircleCheckBig, InfoIcon, TriangleAlertIcon, CircleCheckBigIcon } from 'lucide-react';
10
+ import { ChevronRight, Check, Circle, CircleX, Eye, EyeOff, X, Minus, ClockIcon, ChevronLeftIcon, ChevronRightIcon, ChevronsLeft, ChevronLeft, ChevronsRight, MoreHorizontal, ChevronDown, ChevronDownIcon, CalendarIcon, ImageUpIcon, XIcon, MinusIcon, PlusIcon, UserIcon, LoaderCircleIcon, CheckIcon, PhoneIcon, FileTextIcon, FileAudioIcon, FileVideoIcon, Info, CircleCheckBig, InfoIcon, TriangleAlertIcon, CircleCheckBigIcon } from 'lucide-react';
11
11
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
12
12
  import Select, { components } from 'react-select';
13
13
  import Creatable from 'react-select/creatable';
@@ -33,6 +33,7 @@ import { defaultDropAnimationSideEffects, MeasuringStrategy, useDndContext, useD
33
33
  import { SortableContext, verticalListSortingStrategy, useSortable, defaultAnimateLayoutChanges, sortableKeyboardCoordinates, arrayMove, horizontalListSortingStrategy } from '@dnd-kit/sortable';
34
34
  import { CSS } from '@dnd-kit/utilities';
35
35
  import { useVirtualizer } from '@tanstack/react-virtual';
36
+ import * as AvatarPrimitive from '@radix-ui/react-avatar';
36
37
 
37
38
  // src/button.tsx
38
39
 
@@ -254,11 +255,11 @@ var Badge = React31.forwardRef(
254
255
  Badge.displayName = "Badge";
255
256
 
256
257
  // src/utils/extract-variant.ts
257
- function extractVariants(variants4) {
258
- return Object.keys(variants4).reduce(
258
+ function extractVariants(variants5) {
259
+ return Object.keys(variants5).reduce(
259
260
  (acc, key) => {
260
261
  const variantKey = key;
261
- const variantValues = variants4[variantKey];
262
+ const variantValues = variants5[variantKey];
262
263
  if (variantValues) {
263
264
  acc[variantKey] = Object.keys(variantValues);
264
265
  }
@@ -6173,6 +6174,7 @@ var ProfileImage = ({
6173
6174
  subtitle,
6174
6175
  onError,
6175
6176
  maxFiles = Infinity,
6177
+ accept = "image/*",
6176
6178
  onRemove,
6177
6179
  image,
6178
6180
  cropperProps,
@@ -6209,6 +6211,7 @@ var ProfileImage = ({
6209
6211
  }
6210
6212
  ] = useFileUpload({
6211
6213
  maxFiles,
6214
+ accept,
6212
6215
  initialFiles: image ? [
6213
6216
  {
6214
6217
  id,
@@ -6220,7 +6223,6 @@ var ProfileImage = ({
6220
6223
  ] : [],
6221
6224
  multiple: false,
6222
6225
  maxSize: maxSize > 0 ? maxSize : void 0,
6223
- accept: "image/*",
6224
6226
  onFilesChange([file2]) {
6225
6227
  handleFileChange(file2?.file);
6226
6228
  }
@@ -8055,6 +8057,400 @@ function KanbanBoard({
8055
8057
  }
8056
8058
  );
8057
8059
  }
8060
+ var TipCardContext = createContext({
8061
+ registeredTipsMap: /* @__PURE__ */ new Map(),
8062
+ currentTipOrder: 0,
8063
+ isCarouselMode: false,
8064
+ looping: false,
8065
+ nextTip: () => void 0,
8066
+ previousTip: () => void 0,
8067
+ registerTip: () => void 0,
8068
+ unregisterTip: () => void 0
8069
+ });
8070
+ var TipCardProvider = ({
8071
+ children,
8072
+ looping = false
8073
+ }) => {
8074
+ const [currentTipOrder, setCurrentTipOrder] = useState(0);
8075
+ const [registeredTipsMap, setRegisteredTipsMap] = useState(/* @__PURE__ */ new Map());
8076
+ const isCarouselMode = useMemo(() => {
8077
+ return registeredTipsMap.size > 1;
8078
+ }, [registeredTipsMap]);
8079
+ const registerTip = useCallback((id) => {
8080
+ setRegisteredTipsMap((prev) => {
8081
+ const newMap = new Map(prev);
8082
+ newMap.set(id, true);
8083
+ return newMap;
8084
+ });
8085
+ }, []);
8086
+ const unregisterTip = useCallback((id) => {
8087
+ setRegisteredTipsMap((prev) => {
8088
+ const newMap = new Map(prev);
8089
+ newMap.delete(id);
8090
+ return newMap;
8091
+ });
8092
+ }, []);
8093
+ const nextTip = useCallback(() => {
8094
+ setCurrentTipOrder((prev) => {
8095
+ if (looping) {
8096
+ return (prev + 1) % registeredTipsMap.size;
8097
+ }
8098
+ return Math.min(prev + 1, registeredTipsMap.size - 1);
8099
+ });
8100
+ }, [registeredTipsMap.size, looping]);
8101
+ const previousTip = useCallback(() => {
8102
+ setCurrentTipOrder((prev) => {
8103
+ if (looping) {
8104
+ return (prev - 1 + registeredTipsMap.size) % registeredTipsMap.size;
8105
+ }
8106
+ return Math.max(prev - 1, 0);
8107
+ });
8108
+ }, [registeredTipsMap.size, looping]);
8109
+ const contextValue = useMemo(
8110
+ () => ({
8111
+ registerTip,
8112
+ unregisterTip,
8113
+ registeredTipsMap,
8114
+ currentTipOrder,
8115
+ nextTip,
8116
+ previousTip,
8117
+ isCarouselMode,
8118
+ looping
8119
+ }),
8120
+ [
8121
+ registerTip,
8122
+ unregisterTip,
8123
+ registeredTipsMap,
8124
+ currentTipOrder,
8125
+ nextTip,
8126
+ previousTip,
8127
+ isCarouselMode,
8128
+ looping
8129
+ ]
8130
+ );
8131
+ return /* @__PURE__ */ jsx(TipCardContext.Provider, { value: contextValue, children });
8132
+ };
8133
+ var useTipCard = () => {
8134
+ const context = useContext(TipCardContext);
8135
+ if (!context) {
8136
+ throw new Error("useTipCard must be used within a TipCardProvider");
8137
+ }
8138
+ return context;
8139
+ };
8140
+ var TipCardFooter = memo(() => {
8141
+ const {
8142
+ isCarouselMode,
8143
+ previousTip,
8144
+ nextTip,
8145
+ currentTipOrder,
8146
+ registeredTipsMap,
8147
+ looping
8148
+ } = useTipCard();
8149
+ if (isCarouselMode) {
8150
+ return /* @__PURE__ */ jsxs(Space, { size: "xs", direction: "row", children: [
8151
+ /* @__PURE__ */ jsx(
8152
+ Button,
8153
+ {
8154
+ variant: "ghost",
8155
+ onClick: previousTip,
8156
+ icon: true,
8157
+ "aria-label": "Previous tip",
8158
+ size: "sm",
8159
+ disabled: currentTipOrder === 0 && !looping,
8160
+ children: /* @__PURE__ */ jsx(ChevronLeftIcon, {})
8161
+ }
8162
+ ),
8163
+ /* @__PURE__ */ jsx(
8164
+ Button,
8165
+ {
8166
+ variant: "ghost",
8167
+ onClick: nextTip,
8168
+ icon: true,
8169
+ "aria-label": "Next tip",
8170
+ size: "sm",
8171
+ disabled: currentTipOrder === registeredTipsMap.size - 1 && !looping,
8172
+ children: /* @__PURE__ */ jsx(ChevronRightIcon, {})
8173
+ }
8174
+ )
8175
+ ] });
8176
+ }
8177
+ return null;
8178
+ });
8179
+ TipCardFooter.displayName = "TipCardFooter";
8180
+ var TipCardItem = ({
8181
+ ["data-tip-card-item-order"]: order,
8182
+ children,
8183
+ ...props
8184
+ }) => {
8185
+ const id = useId();
8186
+ const { registerTip, currentTipOrder } = useTipCard();
8187
+ useEffect(() => {
8188
+ registerTip(id);
8189
+ }, [registerTip, id]);
8190
+ return /* @__PURE__ */ jsx("div", { ...props, className: "nebula-ds w-full inline-flex h-full flex-col gap-6", children: currentTipOrder === Number(order) && children });
8191
+ };
8192
+ TipCardItem.displayName = "TipCardItem";
8193
+ var TipCardContent = ({ children }) => {
8194
+ const { currentTipOrder } = useTipCard();
8195
+ const calculateTransform = useCallback(() => {
8196
+ return `translateX(-${currentTipOrder * 100}%)`;
8197
+ }, [currentTipOrder]);
8198
+ return /* @__PURE__ */ jsx("div", { className: "nebula-ds w-full overflow-hidden", children: /* @__PURE__ */ jsx(
8199
+ "div",
8200
+ {
8201
+ className: "nebula-ds w-full whitespace-nowrap transition-transform duration-300",
8202
+ style: { transform: calculateTransform() },
8203
+ children: React31__default.Children.map(children, (child, i) => {
8204
+ if (React31__default.isValidElement(child) && child.type === TipCardItem) {
8205
+ return React31__default.cloneElement(child, {
8206
+ key: child.key,
8207
+ ["data-tip-card-item"]: true,
8208
+ ["data-tip-card-item-order"]: i.toString()
8209
+ });
8210
+ }
8211
+ return child;
8212
+ })
8213
+ }
8214
+ ) });
8215
+ };
8216
+ var TipCard = ({
8217
+ children,
8218
+ looping = false
8219
+ }) => {
8220
+ return /* @__PURE__ */ jsx(TipCardProvider, { looping, children: /* @__PURE__ */ jsxs(Box, { paddingSize: "md", border: true, className: "nebula-ds flex flex-col gap-6", children: [
8221
+ /* @__PURE__ */ jsx(TipCardContent, { children }),
8222
+ /* @__PURE__ */ jsx(TipCardFooter, {})
8223
+ ] }) });
8224
+ };
8225
+ var TipCardHeader = memo(
8226
+ ({ children, icon }) => {
8227
+ const { currentTipOrder, isCarouselMode, registeredTipsMap } = useTipCard();
8228
+ return /* @__PURE__ */ jsxs("div", { className: "nebula-ds flex flex-col gap-3 items-start", children: [
8229
+ icon && /* @__PURE__ */ jsx(
8230
+ "div",
8231
+ {
8232
+ className: "size-10 rounded-full bg-tipCard-header-icon-background [&_svg]:size-5 [&_svg]:text-tipCard-header-icon-color flex items-center justify-center",
8233
+ children: icon
8234
+ }
8235
+ ),
8236
+ /* @__PURE__ */ jsxs("div", { className: "nebula-ds flex items-center justify-between relative w-full", children: [
8237
+ children,
8238
+ isCarouselMode && /* @__PURE__ */ jsx("div", { className: "nebula-ds absolute right-0", children: /* @__PURE__ */ jsxs(Paragraph, { size: "sm", children: [
8239
+ currentTipOrder + 1,
8240
+ "-",
8241
+ registeredTipsMap.size
8242
+ ] }) })
8243
+ ] })
8244
+ ] });
8245
+ }
8246
+ );
8247
+ TipCardHeader.displayName = "TipCardHeader";
8248
+ var TipCardContent2 = ({ children }) => {
8249
+ return /* @__PURE__ */ jsx("div", { className: "nebula-ds flex flex-col gap-4 whitespace-normal [&_:is(h1,h2,h3,h4,h5,h6)]:mb-2", children });
8250
+ };
8251
+ var TipCardMediaType = /* @__PURE__ */ ((TipCardMediaType2) => {
8252
+ TipCardMediaType2["image"] = "image";
8253
+ TipCardMediaType2["video"] = "video";
8254
+ return TipCardMediaType2;
8255
+ })(TipCardMediaType || {});
8256
+ var TipCardMedia = ({
8257
+ type,
8258
+ source,
8259
+ alt,
8260
+ children
8261
+ }) => {
8262
+ return /* @__PURE__ */ jsxs("div", { className: "nebula-ds w-full min-h-36 rounded-2xl overflow-hidden", children: [
8263
+ source && /* @__PURE__ */ jsx(Fragment, { children: type === "image" /* image */ ? /* @__PURE__ */ jsx(
8264
+ "img",
8265
+ {
8266
+ src: source,
8267
+ alt,
8268
+ className: "nebula-ds w-full h-full object-contain"
8269
+ }
8270
+ ) : /* @__PURE__ */ jsxs(
8271
+ "video",
8272
+ {
8273
+ className: "nebula-ds w-full h-full object-contain",
8274
+ controls: true,
8275
+ src: source,
8276
+ children: [
8277
+ /* @__PURE__ */ jsx("source", { src: source, type: "video/mp4" }),
8278
+ "Your browser does not support the video tag."
8279
+ ]
8280
+ }
8281
+ ) }),
8282
+ children
8283
+ ] });
8284
+ };
8285
+ TipCardMedia.displayName = "TipCardMedia";
8286
+ var avatarVariantsConfig = cva("relative flex size-8 shrink-0 rounded-full", {
8287
+ variants: {
8288
+ size: {
8289
+ xs: 'size-[32px] [&>[data-slot="avatar-hover-action"]]:text-sm [&>[data-slot="avatar-fallback"]]:text-sm',
8290
+ // 32px
8291
+ sm: 'size-[40px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-sm',
8292
+ // 40px
8293
+ md: 'size-[44px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-sm',
8294
+ // 44px
8295
+ lg: 'size-[48px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-base',
8296
+ // 48px
8297
+ xl: 'size-[56px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-xl',
8298
+ // 56px
8299
+ "2xl": 'size-[64px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-xl',
8300
+ // 64px
8301
+ "3xl": 'size-[72px] [&>[data-slot="avatar-hover-action"]]:text-xl [&>[data-slot="avatar-fallback"]]:text-2xl',
8302
+ // 72px
8303
+ "4xl": 'size-[80px] [&>[data-slot="avatar-hover-action"]]:text-3xl [&>[data-slot="avatar-fallback"]]:text-2xl',
8304
+ // 80px
8305
+ "5xl": 'size-[88px] [&>[data-slot="avatar-hover-action"]]:text-3xl [&>[data-slot="avatar-fallback"]]:text-3xl'
8306
+ // 88px
8307
+ },
8308
+ variant: {
8309
+ primary: 'bg-primary-200 dark:bg-primary-800 [&>[data-slot="avatar-fallback"]]:text-primary-700 dark:[&>[data-slot="avatar-fallback"]]:text-primary-100',
8310
+ success: 'bg-success-200 dark:bg-success-800 [&>[data-slot="avatar-fallback"]]:text-success-700 dark:[&>[data-slot="avatar-fallback"]]:text-success-100',
8311
+ warning: 'bg-warning-200 dark:bg-warning-800 [&>[data-slot="avatar-fallback"]]:text-warning-700 dark:[&>[data-slot="avatar-fallback"]]:text-warning-100',
8312
+ danger: 'bg-danger-200 dark:bg-danger-800 [&>[data-slot="avatar-fallback"]]:text-danger-700 dark:[&>[data-slot="avatar-fallback"]]:text-danger-100',
8313
+ neutral: 'bg-neutral-200 dark:bg-neutral-800 [&>[data-slot="avatar-fallback"]]:text-neutral-700 dark:[&>[data-slot="avatar-fallback"]]:text-neutral-100',
8314
+ random: 'bg-primary-200 dark:bg-primary-800 [&>[data-slot="avatar-fallback"]]:text-primary-700 dark:[&>[data-slot="avatar-fallback"]]:text-primary-100'
8315
+ }
8316
+ },
8317
+ defaultVariants: {
8318
+ size: "sm",
8319
+ variant: "primary"
8320
+ }
8321
+ });
8322
+ var AvatarVariantEnum = /* @__PURE__ */ ((AvatarVariantEnum2) => {
8323
+ AvatarVariantEnum2["primary"] = "primary";
8324
+ AvatarVariantEnum2["success"] = "success";
8325
+ AvatarVariantEnum2["warning"] = "warning";
8326
+ AvatarVariantEnum2["danger"] = "danger";
8327
+ AvatarVariantEnum2["neutral"] = "neutral";
8328
+ AvatarVariantEnum2["random"] = "random";
8329
+ return AvatarVariantEnum2;
8330
+ })(AvatarVariantEnum || {});
8331
+ var AvatarSizeEnum = /* @__PURE__ */ ((AvatarSizeEnum2) => {
8332
+ AvatarSizeEnum2["xs"] = "xs";
8333
+ AvatarSizeEnum2["sm"] = "sm";
8334
+ AvatarSizeEnum2["md"] = "md";
8335
+ AvatarSizeEnum2["lg"] = "lg";
8336
+ AvatarSizeEnum2["xl"] = "xl";
8337
+ AvatarSizeEnum2["2xl"] = "2xl";
8338
+ AvatarSizeEnum2["3xl"] = "3xl";
8339
+ AvatarSizeEnum2["4xl"] = "4xl";
8340
+ AvatarSizeEnum2["5xl"] = "5xl";
8341
+ return AvatarSizeEnum2;
8342
+ })(AvatarSizeEnum || {});
8343
+ var variants4 = [
8344
+ "primary" /* primary */,
8345
+ "success" /* success */,
8346
+ "warning" /* warning */,
8347
+ "danger" /* danger */,
8348
+ "neutral" /* neutral */
8349
+ ];
8350
+ function Avatar({
8351
+ className,
8352
+ size: size4 = "sm",
8353
+ variant: variant3 = "primary",
8354
+ ...props
8355
+ }) {
8356
+ const randomVariant = React31.useMemo(
8357
+ () => variants4[Math.floor(Math.random() * variants4.length)],
8358
+ []
8359
+ );
8360
+ return /* @__PURE__ */ jsx(
8361
+ AvatarPrimitive.Root,
8362
+ {
8363
+ "data-slot": "avatar",
8364
+ className: cn(
8365
+ avatarVariantsConfig({
8366
+ size: size4,
8367
+ variant: variant3 === "random" /* random */ ? randomVariant : variant3
8368
+ }),
8369
+ className
8370
+ ),
8371
+ ...props
8372
+ }
8373
+ );
8374
+ }
8375
+ function AvatarImage({
8376
+ className,
8377
+ ...props
8378
+ }) {
8379
+ return /* @__PURE__ */ jsx(
8380
+ AvatarPrimitive.Image,
8381
+ {
8382
+ "data-slot": "avatar-image",
8383
+ className: cn("aspect-square size-full rounded-full", className),
8384
+ ...props
8385
+ }
8386
+ );
8387
+ }
8388
+ function AvatarFallback({
8389
+ className,
8390
+ ...props
8391
+ }) {
8392
+ return /* @__PURE__ */ jsx(
8393
+ AvatarPrimitive.Fallback,
8394
+ {
8395
+ "data-slot": "avatar-fallback",
8396
+ className: cn(
8397
+ "bg-muted flex size-full items-center justify-center rounded-full",
8398
+ className
8399
+ ),
8400
+ ...props
8401
+ }
8402
+ );
8403
+ }
8404
+ var AvatarStickVariantsConfig = cva(
8405
+ "absolute bg-transparent max-h-1/2 max-w-1/2 overflow-hidden",
8406
+ {
8407
+ variants: {
8408
+ x: {
8409
+ left: "left-0",
8410
+ right: "right-0"
8411
+ },
8412
+ y: {
8413
+ top: "top-0",
8414
+ bottom: "bottom-0"
8415
+ }
8416
+ },
8417
+ defaultVariants: {
8418
+ x: "right",
8419
+ y: "bottom"
8420
+ }
8421
+ }
8422
+ );
8423
+ function AvatarStick({
8424
+ className,
8425
+ x,
8426
+ y,
8427
+ ...props
8428
+ }) {
8429
+ return /* @__PURE__ */ jsx(
8430
+ "span",
8431
+ {
8432
+ "data-slot": "avatar-sticker",
8433
+ className: cn(AvatarStickVariantsConfig({ x, y }), className),
8434
+ ...props
8435
+ }
8436
+ );
8437
+ }
8438
+ function AvatarHoverAction({
8439
+ className,
8440
+ ...props
8441
+ }) {
8442
+ return /* @__PURE__ */ jsx(
8443
+ "span",
8444
+ {
8445
+ "data-slot": "avatar-hover-action",
8446
+ className: cn(
8447
+ "flex items-center justify-center index-100 absolute size-full cursor-pointer rounded-full ring-1 ring-neutral-100 dark:ring-neutral-800 bg-neutral-100 dark:bg-neutral-800 transition-all duration-300 opacity-0 hover:opacity-100",
8448
+ className
8449
+ ),
8450
+ ...props
8451
+ }
8452
+ );
8453
+ }
8058
8454
 
8059
8455
  // src/tailwind.ts
8060
8456
  function content({ base = "./" } = {}) {
@@ -8066,4 +8462,4 @@ var tailwind = {
8066
8462
  // plugin: () => require("tailwindcss")("node_modules/@nebulareact/dist/tailwind.config.js"),
8067
8463
  };
8068
8464
 
8069
- export { Accordion, AccordionContent, AccordionDescription, AccordionItem, AccordionTitle, AccordionTrigger, ActionBar, ActionBarButton, ActionBarClose, ActionBarContent, ActionBarDivider, ActionBarPortal, ActionBarTrigger, Alert, AlertButton, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, AlertTitle, StyledAsync as Async, StyledAsyncCreatable as AsyncCreatable, Badge, BannerAlert, BannerType, BannerVariant, Box, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar, Caption, Checkbox, StyledCreatable as Creatable, Cropper2 as Cropper, CropperCropArea2 as CropperCropArea, CropperDescription2 as CropperDescription, CropperImage2 as CropperImage, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FileUpload, FileUploadError, Heading, InputDatePickerSingle, InputDateRangePicker, InputDateTimePickerSingle, InputPhone, InputText, InputTime, KanbanBoard, KanbanCard, KanbanColumn, KanbanColumnDragHandle, KanbanColumnFooter, KanbanColumnHeader, KanbanColumnTitle, Label, Link, NebulaI18nProvider, Pagination, Paragraph, Popover, PopoverContent, PopoverTrigger, ProfileImage, RadioGroup2 as RadioGroup, RadioGroupItem, StyledSelect as Select, Separator2 as Separator, Skeleton, Slider, Space, SpaceDirectionEnum, SpaceSizeEnum, Stepper, StepperDescription, StepperIndicator, StepperItem, StepperSeparator, StepperTitle, StepperTrigger, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, TextArea, Toaster, Tooltip, alertVariants, badgeSizeEnum, badgeVariantEnum, buttonSizeEnum, buttonVariantEnum, buttonVariantsConfig, dateIsAvailable, formatBytes, getNebulaLanguage, localeByi18nKey, messages19 as messages, separatorVariants, setNebulaLanguage, tagVariantsEnum, tailwind, toast, useClickOutside, useFileUpload, useKeyPress, useNebulaI18n };
8465
+ export { Accordion, AccordionContent, AccordionDescription, AccordionItem, AccordionTitle, AccordionTrigger, ActionBar, ActionBarButton, ActionBarClose, ActionBarContent, ActionBarDivider, ActionBarPortal, ActionBarTrigger, Alert, AlertButton, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, AlertTitle, StyledAsync as Async, StyledAsyncCreatable as AsyncCreatable, Avatar, AvatarFallback, AvatarHoverAction, AvatarImage, AvatarSizeEnum, AvatarStick, AvatarVariantEnum, Badge, BannerAlert, BannerType, BannerVariant, Box, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar, Caption, Checkbox, StyledCreatable as Creatable, Cropper2 as Cropper, CropperCropArea2 as CropperCropArea, CropperDescription2 as CropperDescription, CropperImage2 as CropperImage, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FileUpload, FileUploadError, Heading, InputDatePickerSingle, InputDateRangePicker, InputDateTimePickerSingle, InputPhone, InputText, InputTime, KanbanBoard, KanbanCard, KanbanColumn, KanbanColumnDragHandle, KanbanColumnFooter, KanbanColumnHeader, KanbanColumnTitle, Label, Link, NebulaI18nProvider, Pagination, Paragraph, Popover, PopoverContent, PopoverTrigger, ProfileImage, RadioGroup2 as RadioGroup, RadioGroupItem, StyledSelect as Select, Separator2 as Separator, Skeleton, Slider, Space, SpaceDirectionEnum, SpaceSizeEnum, Stepper, StepperDescription, StepperIndicator, StepperItem, StepperSeparator, StepperTitle, StepperTrigger, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tag, TextArea, TipCard, TipCardContent2 as TipCardContent, TipCardFooter, TipCardHeader, TipCardItem, TipCardMedia, TipCardMediaType, TipCardProvider, Toaster, Tooltip, alertVariants, badgeSizeEnum, badgeVariantEnum, buttonSizeEnum, buttonVariantEnum, buttonVariantsConfig, dateIsAvailable, formatBytes, getNebulaLanguage, localeByi18nKey, messages19 as messages, separatorVariants, setNebulaLanguage, tagVariantsEnum, tailwind, toast, useClickOutside, useFileUpload, useKeyPress, useNebulaI18n, useTipCard };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ikatec/nebula-react",
3
- "version": "1.4.1-beta.3",
3
+ "version": "1.5.0-beta.2",
4
4
  "description": "React components for Nebula Design System",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -30,7 +30,7 @@
30
30
  "@babel/preset-react": "^7.26.3",
31
31
  "@babel/preset-typescript": "^7.27.0",
32
32
  "@ikatec/eslint-config": "*",
33
- "@ikatec/nebula-tokens": "1.3.0",
33
+ "@ikatec/nebula-tokens": "1.4.0-beta.1",
34
34
  "@ikatec/typescript-config": "*",
35
35
  "ts-node": "^10.9.2",
36
36
  "tsup": "^8.3.5",
@@ -43,6 +43,7 @@
43
43
  "@dnd-kit/utilities": "^3.2.2",
44
44
  "@radix-ui/react-accordion": "^1.2.11",
45
45
  "@radix-ui/react-alert-dialog": "^1.1.7",
46
+ "@radix-ui/react-avatar": "^1.1.11",
46
47
  "@radix-ui/react-checkbox": "^1.1.4",
47
48
  "@radix-ui/react-dialog": "^1.1.7",
48
49
  "@radix-ui/react-dropdown-menu": "^2.1.6",