@sesionario/blocks 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -6,6 +6,8 @@ import { VariantProps } from 'class-variance-authority';
6
6
  import * as PopoverPrimitive from '@radix-ui/react-popover';
7
7
  import { HlsConfig, RetryConfig, LoaderResponse } from 'hls.js';
8
8
  import * as RPNInput from 'react-phone-number-input';
9
+ import { MessageScroller as MessageScroller$1 } from '@shadcn/react/message-scroller';
10
+ export { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from '@shadcn/react/message-scroller';
9
11
  import { ClassValue } from 'clsx';
10
12
 
11
13
  /**
@@ -695,6 +697,70 @@ declare function VerifiedProfessionalBadge({ status, size, showLabel, className,
695
697
 
696
698
  declare const MEXICO_STATE_PATHS: Record<MexicoStateId, string>;
697
699
 
700
+ declare function MessageGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
701
+ declare function Message({ className, align, ...props }: React.ComponentProps<"div"> & {
702
+ align?: "start" | "end";
703
+ }): React.JSX.Element;
704
+ declare function MessageAvatar({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
705
+ declare function MessageContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
706
+ declare function MessageHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
707
+ declare function MessageFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
708
+
709
+ declare function BubbleGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
710
+ declare const bubbleVariants: (props?: ({
711
+ variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "muted" | "tinted" | null | undefined;
712
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
713
+ declare function Bubble({ variant, align, className, ...props }: React.ComponentProps<"div"> & VariantProps<typeof bubbleVariants> & {
714
+ align?: "start" | "end";
715
+ }): React.JSX.Element;
716
+ declare function BubbleContent({ asChild, className, ...props }: React.ComponentProps<"div"> & {
717
+ asChild?: boolean;
718
+ }): React.JSX.Element;
719
+ declare function BubbleReactions({ side, align, className, ...props }: React.ComponentProps<"div"> & {
720
+ align?: "start" | "end";
721
+ side?: "top" | "bottom";
722
+ }): React.JSX.Element;
723
+
724
+ declare const markerVariants: (props?: ({
725
+ variant?: "default" | "separator" | "border" | null | undefined;
726
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
727
+ declare function Marker({ className, variant, asChild, ...props }: React.ComponentProps<"div"> & VariantProps<typeof markerVariants> & {
728
+ asChild?: boolean;
729
+ }): React.JSX.Element;
730
+ declare function MarkerIcon({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
731
+ declare function MarkerContent({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
732
+
733
+ declare const buttonVariants: (props?: ({
734
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
735
+ size?: "default" | "icon" | "sm" | "lg" | "icon-sm" | "icon-lg" | null | undefined;
736
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
737
+ declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
738
+ asChild?: boolean;
739
+ }): React.JSX.Element;
740
+
741
+ declare function MessageScrollerProvider(props: React.ComponentProps<typeof MessageScroller$1.Provider>): React.JSX.Element;
742
+ declare function MessageScroller({ className, ...props }: React.ComponentProps<typeof MessageScroller$1.Root>): React.JSX.Element;
743
+ declare function MessageScrollerViewport({ className, ...props }: React.ComponentProps<typeof MessageScroller$1.Viewport>): React.JSX.Element;
744
+ declare function MessageScrollerContent({ className, ...props }: React.ComponentProps<typeof MessageScroller$1.Content>): React.JSX.Element;
745
+ declare function MessageScrollerItem({ className, scrollAnchor, ...props }: React.ComponentProps<typeof MessageScroller$1.Item>): React.JSX.Element;
746
+ declare function MessageScrollerButton({ direction, className, children, render, variant, size, ...props }: React.ComponentProps<typeof MessageScroller$1.Button> & Pick<React.ComponentProps<typeof Button>, "variant" | "size">): React.JSX.Element;
747
+
748
+ type ChatListMessage = {
749
+ id: string;
750
+ senderId: string;
751
+ senderName: string;
752
+ body: string;
753
+ deleted: boolean;
754
+ createdAt: string;
755
+ };
756
+ type ChatMessageListProps = {
757
+ messages: ChatListMessage[];
758
+ currentUserId: string | null;
759
+ emptyTitle?: string;
760
+ emptyDescription?: string;
761
+ };
762
+ declare function ChatMessageList({ messages, currentUserId, emptyTitle, emptyDescription, }: ChatMessageListProps): React.JSX.Element;
763
+
698
764
  declare function cn(...inputs: ClassValue[]): string;
699
765
 
700
- export { type AutoplayState, AvatarEditor, AvatarEditorDialog, type AvatarEditorDialogProps, type AvatarEditorProps, type BlocksLanguage, type DescribedPlaybackError, type EmojiCategoryData, type EmojiCategoryKey, type EmojiDatum, EmojiPicker, type EmojiPickerLabels, type EmojiPickerLocale, EmojiPickerPopover, type EmojiPickerPopoverProps, type EmojiPickerProps, type EmojiSkinTone, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyState, type EmptyStateProps, EmptyTitle, ErrorState, type FeatureEntry, type HlsPlayerMode, type Language, LanguageContext, type LanguageContextValue, LanguageSwitcher, type LanguageSwitcherLabels, type LanguageSwitcherProps, LoadingState, MEXICO_STATES, MEXICO_STATE_PATHS, MexicoMap, type MexicoMapProps, type MexicoState, type MexicoStateId, OrgSwitcher, type OrgSwitcherLabels, type OrgSwitcherProps, type OrgSwitcherTenant, PhoneInput, type PhoneInputProps, type PlaybackErrorContext, type PlaybackErrorDetail, type PlaybackErrorKind, type PlaybackState, type PlaybackStats, type ProfessionalVerificationStatus, type QualityLevel, SearchCommand, type SearchCommandLabels, type SearchCommandProps, type SearchCommandSelection, type SearchHit, ThemeSwitcher, type ThemeSwitcherLabels, type ThemeSwitcherProps, type UseHlsPlaybackOptions, type UseHlsPlaybackResult, type UsePlaybackStatsOptions, type UseSearchHotkeyOptions, type UseSearchHotkeyResult, VerifiedProfessionalBadge, type VerifiedProfessionalBadgeProps, VideoPlayer, type VideoPlayerLabels, type VideoPlayerProps, cn, createLiveHlsConfig, createVodHlsConfig, defaultLanguages, describePlaybackError, fuzzyMatch, normalizeEmojiQuery, shouldRetryLiveEdge404, useDebouncedValue, useDebouncedValueStrict, useHlsPlayback, useLanguageContext, usePlaybackStats, useSearchHotkey };
766
+ export { type AutoplayState, AvatarEditor, AvatarEditorDialog, type AvatarEditorDialogProps, type AvatarEditorProps, type BlocksLanguage, Bubble, BubbleContent, BubbleGroup, BubbleReactions, type ChatListMessage, ChatMessageList, type ChatMessageListProps, type DescribedPlaybackError, type EmojiCategoryData, type EmojiCategoryKey, type EmojiDatum, EmojiPicker, type EmojiPickerLabels, type EmojiPickerLocale, EmojiPickerPopover, type EmojiPickerPopoverProps, type EmojiPickerProps, type EmojiSkinTone, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyState, type EmptyStateProps, EmptyTitle, ErrorState, type FeatureEntry, type HlsPlayerMode, type Language, LanguageContext, type LanguageContextValue, LanguageSwitcher, type LanguageSwitcherLabels, type LanguageSwitcherProps, LoadingState, MEXICO_STATES, MEXICO_STATE_PATHS, Marker, MarkerContent, MarkerIcon, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, MexicoMap, type MexicoMapProps, type MexicoState, type MexicoStateId, OrgSwitcher, type OrgSwitcherLabels, type OrgSwitcherProps, type OrgSwitcherTenant, PhoneInput, type PhoneInputProps, type PlaybackErrorContext, type PlaybackErrorDetail, type PlaybackErrorKind, type PlaybackState, type PlaybackStats, type ProfessionalVerificationStatus, type QualityLevel, SearchCommand, type SearchCommandLabels, type SearchCommandProps, type SearchCommandSelection, type SearchHit, ThemeSwitcher, type ThemeSwitcherLabels, type ThemeSwitcherProps, type UseHlsPlaybackOptions, type UseHlsPlaybackResult, type UsePlaybackStatsOptions, type UseSearchHotkeyOptions, type UseSearchHotkeyResult, VerifiedProfessionalBadge, type VerifiedProfessionalBadgeProps, VideoPlayer, type VideoPlayerLabels, type VideoPlayerProps, bubbleVariants, cn, createLiveHlsConfig, createVodHlsConfig, defaultLanguages, describePlaybackError, fuzzyMatch, markerVariants, normalizeEmojiQuery, shouldRetryLiveEdge404, useDebouncedValue, useDebouncedValueStrict, useHlsPlayback, useLanguageContext, usePlaybackStats, useSearchHotkey };
package/dist/index.d.ts CHANGED
@@ -6,6 +6,8 @@ import { VariantProps } from 'class-variance-authority';
6
6
  import * as PopoverPrimitive from '@radix-ui/react-popover';
7
7
  import { HlsConfig, RetryConfig, LoaderResponse } from 'hls.js';
8
8
  import * as RPNInput from 'react-phone-number-input';
9
+ import { MessageScroller as MessageScroller$1 } from '@shadcn/react/message-scroller';
10
+ export { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from '@shadcn/react/message-scroller';
9
11
  import { ClassValue } from 'clsx';
10
12
 
11
13
  /**
@@ -695,6 +697,70 @@ declare function VerifiedProfessionalBadge({ status, size, showLabel, className,
695
697
 
696
698
  declare const MEXICO_STATE_PATHS: Record<MexicoStateId, string>;
697
699
 
700
+ declare function MessageGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
701
+ declare function Message({ className, align, ...props }: React.ComponentProps<"div"> & {
702
+ align?: "start" | "end";
703
+ }): React.JSX.Element;
704
+ declare function MessageAvatar({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
705
+ declare function MessageContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
706
+ declare function MessageHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
707
+ declare function MessageFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
708
+
709
+ declare function BubbleGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
710
+ declare const bubbleVariants: (props?: ({
711
+ variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "muted" | "tinted" | null | undefined;
712
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
713
+ declare function Bubble({ variant, align, className, ...props }: React.ComponentProps<"div"> & VariantProps<typeof bubbleVariants> & {
714
+ align?: "start" | "end";
715
+ }): React.JSX.Element;
716
+ declare function BubbleContent({ asChild, className, ...props }: React.ComponentProps<"div"> & {
717
+ asChild?: boolean;
718
+ }): React.JSX.Element;
719
+ declare function BubbleReactions({ side, align, className, ...props }: React.ComponentProps<"div"> & {
720
+ align?: "start" | "end";
721
+ side?: "top" | "bottom";
722
+ }): React.JSX.Element;
723
+
724
+ declare const markerVariants: (props?: ({
725
+ variant?: "default" | "separator" | "border" | null | undefined;
726
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
727
+ declare function Marker({ className, variant, asChild, ...props }: React.ComponentProps<"div"> & VariantProps<typeof markerVariants> & {
728
+ asChild?: boolean;
729
+ }): React.JSX.Element;
730
+ declare function MarkerIcon({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
731
+ declare function MarkerContent({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
732
+
733
+ declare const buttonVariants: (props?: ({
734
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
735
+ size?: "default" | "icon" | "sm" | "lg" | "icon-sm" | "icon-lg" | null | undefined;
736
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
737
+ declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
738
+ asChild?: boolean;
739
+ }): React.JSX.Element;
740
+
741
+ declare function MessageScrollerProvider(props: React.ComponentProps<typeof MessageScroller$1.Provider>): React.JSX.Element;
742
+ declare function MessageScroller({ className, ...props }: React.ComponentProps<typeof MessageScroller$1.Root>): React.JSX.Element;
743
+ declare function MessageScrollerViewport({ className, ...props }: React.ComponentProps<typeof MessageScroller$1.Viewport>): React.JSX.Element;
744
+ declare function MessageScrollerContent({ className, ...props }: React.ComponentProps<typeof MessageScroller$1.Content>): React.JSX.Element;
745
+ declare function MessageScrollerItem({ className, scrollAnchor, ...props }: React.ComponentProps<typeof MessageScroller$1.Item>): React.JSX.Element;
746
+ declare function MessageScrollerButton({ direction, className, children, render, variant, size, ...props }: React.ComponentProps<typeof MessageScroller$1.Button> & Pick<React.ComponentProps<typeof Button>, "variant" | "size">): React.JSX.Element;
747
+
748
+ type ChatListMessage = {
749
+ id: string;
750
+ senderId: string;
751
+ senderName: string;
752
+ body: string;
753
+ deleted: boolean;
754
+ createdAt: string;
755
+ };
756
+ type ChatMessageListProps = {
757
+ messages: ChatListMessage[];
758
+ currentUserId: string | null;
759
+ emptyTitle?: string;
760
+ emptyDescription?: string;
761
+ };
762
+ declare function ChatMessageList({ messages, currentUserId, emptyTitle, emptyDescription, }: ChatMessageListProps): React.JSX.Element;
763
+
698
764
  declare function cn(...inputs: ClassValue[]): string;
699
765
 
700
- export { type AutoplayState, AvatarEditor, AvatarEditorDialog, type AvatarEditorDialogProps, type AvatarEditorProps, type BlocksLanguage, type DescribedPlaybackError, type EmojiCategoryData, type EmojiCategoryKey, type EmojiDatum, EmojiPicker, type EmojiPickerLabels, type EmojiPickerLocale, EmojiPickerPopover, type EmojiPickerPopoverProps, type EmojiPickerProps, type EmojiSkinTone, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyState, type EmptyStateProps, EmptyTitle, ErrorState, type FeatureEntry, type HlsPlayerMode, type Language, LanguageContext, type LanguageContextValue, LanguageSwitcher, type LanguageSwitcherLabels, type LanguageSwitcherProps, LoadingState, MEXICO_STATES, MEXICO_STATE_PATHS, MexicoMap, type MexicoMapProps, type MexicoState, type MexicoStateId, OrgSwitcher, type OrgSwitcherLabels, type OrgSwitcherProps, type OrgSwitcherTenant, PhoneInput, type PhoneInputProps, type PlaybackErrorContext, type PlaybackErrorDetail, type PlaybackErrorKind, type PlaybackState, type PlaybackStats, type ProfessionalVerificationStatus, type QualityLevel, SearchCommand, type SearchCommandLabels, type SearchCommandProps, type SearchCommandSelection, type SearchHit, ThemeSwitcher, type ThemeSwitcherLabels, type ThemeSwitcherProps, type UseHlsPlaybackOptions, type UseHlsPlaybackResult, type UsePlaybackStatsOptions, type UseSearchHotkeyOptions, type UseSearchHotkeyResult, VerifiedProfessionalBadge, type VerifiedProfessionalBadgeProps, VideoPlayer, type VideoPlayerLabels, type VideoPlayerProps, cn, createLiveHlsConfig, createVodHlsConfig, defaultLanguages, describePlaybackError, fuzzyMatch, normalizeEmojiQuery, shouldRetryLiveEdge404, useDebouncedValue, useDebouncedValueStrict, useHlsPlayback, useLanguageContext, usePlaybackStats, useSearchHotkey };
766
+ export { type AutoplayState, AvatarEditor, AvatarEditorDialog, type AvatarEditorDialogProps, type AvatarEditorProps, type BlocksLanguage, Bubble, BubbleContent, BubbleGroup, BubbleReactions, type ChatListMessage, ChatMessageList, type ChatMessageListProps, type DescribedPlaybackError, type EmojiCategoryData, type EmojiCategoryKey, type EmojiDatum, EmojiPicker, type EmojiPickerLabels, type EmojiPickerLocale, EmojiPickerPopover, type EmojiPickerPopoverProps, type EmojiPickerProps, type EmojiSkinTone, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyState, type EmptyStateProps, EmptyTitle, ErrorState, type FeatureEntry, type HlsPlayerMode, type Language, LanguageContext, type LanguageContextValue, LanguageSwitcher, type LanguageSwitcherLabels, type LanguageSwitcherProps, LoadingState, MEXICO_STATES, MEXICO_STATE_PATHS, Marker, MarkerContent, MarkerIcon, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, MexicoMap, type MexicoMapProps, type MexicoState, type MexicoStateId, OrgSwitcher, type OrgSwitcherLabels, type OrgSwitcherProps, type OrgSwitcherTenant, PhoneInput, type PhoneInputProps, type PlaybackErrorContext, type PlaybackErrorDetail, type PlaybackErrorKind, type PlaybackState, type PlaybackStats, type ProfessionalVerificationStatus, type QualityLevel, SearchCommand, type SearchCommandLabels, type SearchCommandProps, type SearchCommandSelection, type SearchHit, ThemeSwitcher, type ThemeSwitcherLabels, type ThemeSwitcherProps, type UseHlsPlaybackOptions, type UseHlsPlaybackResult, type UsePlaybackStatsOptions, type UseSearchHotkeyOptions, type UseSearchHotkeyResult, VerifiedProfessionalBadge, type VerifiedProfessionalBadgeProps, VideoPlayer, type VideoPlayerLabels, type VideoPlayerProps, bubbleVariants, cn, createLiveHlsConfig, createVodHlsConfig, defaultLanguages, describePlaybackError, fuzzyMatch, markerVariants, normalizeEmojiQuery, shouldRetryLiveEdge404, useDebouncedValue, useDebouncedValueStrict, useHlsPlayback, useLanguageContext, usePlaybackStats, useSearchHotkey };
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import * as React5 from 'react';
3
3
  import { createContext, useContext, useState, useCallback, useEffect, useRef, useMemo } from 'react';
4
- import { ChevronsUpDown, CheckIcon, SearchIcon, Loader2, AlertTriangle, Inbox, Monitor, Sun, Moon, Building2, Check, Plus, Languages, Upload, Move, ZoomOut, ZoomIn, RotateCcw, RotateCw, Grid3X3, RefreshCw, X, User, Pencil, Search, Clock, Flag, Hash, Lightbulb, Trophy, Plane, Apple, Leaf, Hand, Smile, Play, AlertCircle, VolumeX, Pause, Volume1, Volume2, Settings, PictureInPicture2, Minimize, Maximize, BadgeCheck, XIcon } from 'lucide-react';
4
+ import { ChevronsUpDown, CheckIcon, SearchIcon, Loader2, AlertTriangle, Inbox, Monitor, Sun, Moon, Building2, Check, Plus, Languages, Upload, Move, ZoomOut, ZoomIn, RotateCcw, RotateCw, Grid3X3, RefreshCw, X, User, Pencil, Search, Clock, Flag, Hash, Lightbulb, Trophy, Plane, Apple, Leaf, Hand, Smile, Play, AlertCircle, VolumeX, Pause, Volume1, Volume2, Settings, PictureInPicture2, Minimize, Maximize, BadgeCheck, ArrowDownIcon, MessageCircleDashedIcon, XIcon } from 'lucide-react';
5
5
  import { clsx } from 'clsx';
6
6
  import { twMerge } from 'tailwind-merge';
7
7
  import { cva } from 'class-variance-authority';
@@ -19,6 +19,8 @@ import { Command as Command$1 } from 'cmdk';
19
19
  import * as RPNInput from 'react-phone-number-input';
20
20
  import flags from 'react-phone-number-input/flags';
21
21
  import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
22
+ import { MessageScroller as MessageScroller$1 } from '@shadcn/react/message-scroller';
23
+ export { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from '@shadcn/react/message-scroller';
22
24
 
23
25
  var LanguageContext = createContext(null);
24
26
  function useLanguageContext() {
@@ -177,7 +179,7 @@ function EmptyState({
177
179
  {
178
180
  className: cn(
179
181
  "gap-3",
180
- isCompact ? "flex-none rounded-none p-0 px-4 py-6 md:p-0" : "flex-none rounded-xl border border-dashed p-0 py-12 md:p-0",
182
+ isCompact ? "flex-none rounded-none px-4 py-6" : "flex-none rounded-xl border border-dashed px-6 py-12",
181
183
  className
182
184
  ),
183
185
  children: [
@@ -4203,7 +4205,381 @@ function VerifiedProfessionalBadge({
4203
4205
  }
4204
4206
  );
4205
4207
  }
4208
+ function MessageGroup({ className, ...props }) {
4209
+ return /* @__PURE__ */ jsx(
4210
+ "div",
4211
+ {
4212
+ "data-slot": "message-group",
4213
+ className: cn("flex min-w-0 flex-col gap-2", className),
4214
+ ...props
4215
+ }
4216
+ );
4217
+ }
4218
+ function Message({
4219
+ className,
4220
+ align = "start",
4221
+ ...props
4222
+ }) {
4223
+ return /* @__PURE__ */ jsx(
4224
+ "div",
4225
+ {
4226
+ "data-slot": "message",
4227
+ "data-align": align,
4228
+ className: cn(
4229
+ "group/message relative flex w-full min-w-0 gap-2 text-sm data-[align=end]:flex-row-reverse",
4230
+ className
4231
+ ),
4232
+ ...props
4233
+ }
4234
+ );
4235
+ }
4236
+ function MessageAvatar({ className, ...props }) {
4237
+ return /* @__PURE__ */ jsx(
4238
+ "div",
4239
+ {
4240
+ "data-slot": "message-avatar",
4241
+ className: cn(
4242
+ "flex w-fit min-w-8 shrink-0 items-center justify-center self-end overflow-hidden rounded-full bg-muted group-has-data-[slot=message-footer]/message:-translate-y-8",
4243
+ className
4244
+ ),
4245
+ ...props
4246
+ }
4247
+ );
4248
+ }
4249
+ function MessageContent({ className, ...props }) {
4250
+ return /* @__PURE__ */ jsx(
4251
+ "div",
4252
+ {
4253
+ "data-slot": "message-content",
4254
+ className: cn(
4255
+ "flex w-full min-w-0 flex-col gap-2.5 wrap-break-word group-data-[align=end]/message:*:data-slot:self-end",
4256
+ className
4257
+ ),
4258
+ ...props
4259
+ }
4260
+ );
4261
+ }
4262
+ function MessageHeader({ className, ...props }) {
4263
+ return /* @__PURE__ */ jsx(
4264
+ "div",
4265
+ {
4266
+ "data-slot": "message-header",
4267
+ className: cn(
4268
+ "flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0",
4269
+ className
4270
+ ),
4271
+ ...props
4272
+ }
4273
+ );
4274
+ }
4275
+ function MessageFooter({ className, ...props }) {
4276
+ return /* @__PURE__ */ jsx(
4277
+ "div",
4278
+ {
4279
+ "data-slot": "message-footer",
4280
+ className: cn(
4281
+ "flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0 group-data-[align=end]/message:justify-end",
4282
+ className
4283
+ ),
4284
+ ...props
4285
+ }
4286
+ );
4287
+ }
4288
+ function BubbleGroup({ className, ...props }) {
4289
+ return /* @__PURE__ */ jsx(
4290
+ "div",
4291
+ {
4292
+ "data-slot": "bubble-group",
4293
+ className: cn("flex min-w-0 flex-col gap-2", className),
4294
+ ...props
4295
+ }
4296
+ );
4297
+ }
4298
+ var bubbleVariants = cva(
4299
+ "group/bubble relative flex w-fit max-w-[80%] min-w-0 flex-col gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full",
4300
+ {
4301
+ variants: {
4302
+ variant: {
4303
+ default: "*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80",
4304
+ secondary: "*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]",
4305
+ muted: "*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]",
4306
+ tinted: "*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]",
4307
+ outline: "*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30",
4308
+ ghost: "border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50",
4309
+ destructive: "*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30"
4310
+ }
4311
+ },
4312
+ defaultVariants: {
4313
+ variant: "default"
4314
+ }
4315
+ }
4316
+ );
4317
+ function Bubble({
4318
+ variant = "default",
4319
+ align = "start",
4320
+ className,
4321
+ ...props
4322
+ }) {
4323
+ return /* @__PURE__ */ jsx(
4324
+ "div",
4325
+ {
4326
+ "data-slot": "bubble",
4327
+ "data-variant": variant,
4328
+ "data-align": align,
4329
+ className: cn(bubbleVariants({ variant }), className),
4330
+ ...props
4331
+ }
4332
+ );
4333
+ }
4334
+ function BubbleContent({
4335
+ asChild = false,
4336
+ className,
4337
+ ...props
4338
+ }) {
4339
+ const Comp = asChild ? Slot : "div";
4340
+ return /* @__PURE__ */ jsx(
4341
+ Comp,
4342
+ {
4343
+ "data-slot": "bubble-content",
4344
+ className: cn(
4345
+ "w-fit max-w-full min-w-0 overflow-hidden rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50",
4346
+ className
4347
+ ),
4348
+ ...props
4349
+ }
4350
+ );
4351
+ }
4352
+ var bubbleReactionsVariants = cva(
4353
+ "absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0",
4354
+ {
4355
+ variants: {
4356
+ side: {
4357
+ top: "top-0 -translate-y-3/4",
4358
+ bottom: "bottom-0 translate-y-3/4"
4359
+ },
4360
+ align: {
4361
+ start: "left-3",
4362
+ end: "right-3"
4363
+ }
4364
+ },
4365
+ defaultVariants: {
4366
+ side: "bottom",
4367
+ align: "end"
4368
+ }
4369
+ }
4370
+ );
4371
+ function BubbleReactions({
4372
+ side = "bottom",
4373
+ align = "end",
4374
+ className,
4375
+ ...props
4376
+ }) {
4377
+ return /* @__PURE__ */ jsx(
4378
+ "div",
4379
+ {
4380
+ "data-slot": "bubble-reactions",
4381
+ "data-align": align,
4382
+ "data-side": side,
4383
+ className: cn(bubbleReactionsVariants({ side, align }), className),
4384
+ ...props
4385
+ }
4386
+ );
4387
+ }
4388
+ var markerVariants = cva(
4389
+ "group/marker relative flex min-h-4 w-full items-center gap-2 text-left text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground",
4390
+ {
4391
+ variants: {
4392
+ variant: {
4393
+ default: "",
4394
+ separator: "before:mr-1 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-1 after:h-px after:min-w-0 after:flex-1 after:bg-border",
4395
+ border: "border-b border-border pb-2"
4396
+ }
4397
+ }
4398
+ }
4399
+ );
4400
+ function Marker({
4401
+ className,
4402
+ variant = "default",
4403
+ asChild = false,
4404
+ ...props
4405
+ }) {
4406
+ const Comp = asChild ? Slot : "div";
4407
+ return /* @__PURE__ */ jsx(
4408
+ Comp,
4409
+ {
4410
+ "data-slot": "marker",
4411
+ "data-variant": variant,
4412
+ className: cn(markerVariants({ variant, className })),
4413
+ ...props
4414
+ }
4415
+ );
4416
+ }
4417
+ function MarkerIcon({ className, ...props }) {
4418
+ return /* @__PURE__ */ jsx(
4419
+ "span",
4420
+ {
4421
+ "data-slot": "marker-icon",
4422
+ "aria-hidden": "true",
4423
+ className: cn(
4424
+ "size-4 shrink-0 [&_svg:not([class*='size-'])]:size-4",
4425
+ className
4426
+ ),
4427
+ ...props
4428
+ }
4429
+ );
4430
+ }
4431
+ function MarkerContent({ className, ...props }) {
4432
+ return /* @__PURE__ */ jsx(
4433
+ "span",
4434
+ {
4435
+ "data-slot": "marker-content",
4436
+ className: cn(
4437
+ "min-w-0 wrap-break-word group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
4438
+ className
4439
+ ),
4440
+ ...props
4441
+ }
4442
+ );
4443
+ }
4444
+ function MessageScrollerProvider(props) {
4445
+ return /* @__PURE__ */ jsx(MessageScroller$1.Provider, { ...props });
4446
+ }
4447
+ function MessageScroller({
4448
+ className,
4449
+ ...props
4450
+ }) {
4451
+ return /* @__PURE__ */ jsx(
4452
+ MessageScroller$1.Root,
4453
+ {
4454
+ "data-slot": "message-scroller",
4455
+ className: cn(
4456
+ "group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden",
4457
+ className
4458
+ ),
4459
+ ...props
4460
+ }
4461
+ );
4462
+ }
4463
+ function MessageScrollerViewport({
4464
+ className,
4465
+ ...props
4466
+ }) {
4467
+ return /* @__PURE__ */ jsx(
4468
+ MessageScroller$1.Viewport,
4469
+ {
4470
+ "data-slot": "message-scroller-viewport",
4471
+ className: cn(
4472
+ "size-full min-h-0 min-w-0 scroll-fade-b scrollbar-thin scrollbar-gutter-stable overflow-y-auto overscroll-contain contain-content data-autoscrolling:scrollbar-none",
4473
+ className
4474
+ ),
4475
+ ...props
4476
+ }
4477
+ );
4478
+ }
4479
+ function MessageScrollerContent({
4480
+ className,
4481
+ ...props
4482
+ }) {
4483
+ return /* @__PURE__ */ jsx(
4484
+ MessageScroller$1.Content,
4485
+ {
4486
+ "data-slot": "message-scroller-content",
4487
+ className: cn("flex h-max min-h-full flex-col gap-8", className),
4488
+ ...props
4489
+ }
4490
+ );
4491
+ }
4492
+ function MessageScrollerItem({
4493
+ className,
4494
+ scrollAnchor = false,
4495
+ ...props
4496
+ }) {
4497
+ return /* @__PURE__ */ jsx(
4498
+ MessageScroller$1.Item,
4499
+ {
4500
+ "data-slot": "message-scroller-item",
4501
+ scrollAnchor,
4502
+ className: cn(
4503
+ "min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]",
4504
+ className
4505
+ ),
4506
+ ...props
4507
+ }
4508
+ );
4509
+ }
4510
+ function MessageScrollerButton({
4511
+ direction = "end",
4512
+ className,
4513
+ children,
4514
+ render,
4515
+ variant = "secondary",
4516
+ size = "icon",
4517
+ ...props
4518
+ }) {
4519
+ return /* @__PURE__ */ jsx(
4520
+ MessageScroller$1.Button,
4521
+ {
4522
+ "data-slot": "message-scroller-button",
4523
+ "data-direction": direction,
4524
+ "data-variant": variant,
4525
+ "data-size": size,
4526
+ direction,
4527
+ className: cn(
4528
+ "absolute inset-s-1/2 -translate-x-1/2 border-border bg-background text-foreground transition-[translate,scale,opacity] duration-200 hover:bg-muted hover:text-foreground data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full rtl:translate-x-1/2 data-[direction=start]:[&_svg]:rotate-180",
4529
+ className
4530
+ ),
4531
+ render: render ?? /* @__PURE__ */ jsx(Button, { variant, size }),
4532
+ ...props,
4533
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
4534
+ /* @__PURE__ */ jsx(ArrowDownIcon, {}),
4535
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: direction === "end" ? "Ir al final" : "Ir al inicio" })
4536
+ ] })
4537
+ }
4538
+ );
4539
+ }
4540
+ function initials(name) {
4541
+ return name.split(/\s+/).filter(Boolean).slice(0, 2).map((p) => p[0]?.toUpperCase() ?? "").join("");
4542
+ }
4543
+ function ChatMessageList({
4544
+ messages,
4545
+ currentUserId,
4546
+ emptyTitle = "Sin mensajes",
4547
+ emptyDescription = "Escribe para iniciar la conversaci\xF3n."
4548
+ }) {
4549
+ if (messages.length === 0) {
4550
+ return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col items-center justify-center gap-2 p-6 text-center", children: [
4551
+ /* @__PURE__ */ jsx(MessageCircleDashedIcon, { className: "size-8 text-muted-foreground" }),
4552
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: emptyTitle }),
4553
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: emptyDescription })
4554
+ ] });
4555
+ }
4556
+ return /* @__PURE__ */ jsx(MessageScrollerProvider, { autoScroll: true, children: /* @__PURE__ */ jsxs(MessageScroller, { children: [
4557
+ /* @__PURE__ */ jsx(MessageScrollerViewport, { children: /* @__PURE__ */ jsx(MessageScrollerContent, { className: "gap-4 p-4", children: messages.map((m) => {
4558
+ const mine = Boolean(currentUserId) && m.senderId === currentUserId;
4559
+ const align = mine ? "end" : "start";
4560
+ return /* @__PURE__ */ jsx(MessageScrollerItem, { scrollAnchor: mine, children: m.deleted ? /* @__PURE__ */ jsx(Marker, { variant: "separator", children: /* @__PURE__ */ jsxs(MarkerContent, { children: [
4561
+ "Mensaje eliminado \xB7 ",
4562
+ m.senderName
4563
+ ] }) }) : /* @__PURE__ */ jsxs(Message, { align, children: [
4564
+ !mine ? /* @__PURE__ */ jsx(MessageAvatar, { children: /* @__PURE__ */ jsx("span", { className: "flex size-8 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground", children: initials(m.senderName) }) }) : null,
4565
+ /* @__PURE__ */ jsxs(MessageContent, { children: [
4566
+ !mine ? /* @__PURE__ */ jsx(MessageHeader, { children: m.senderName }) : null,
4567
+ /* @__PURE__ */ jsx(
4568
+ Bubble,
4569
+ {
4570
+ variant: mine ? "default" : "muted",
4571
+ align,
4572
+ children: /* @__PURE__ */ jsx(BubbleContent, { children: m.body })
4573
+ }
4574
+ ),
4575
+ /* @__PURE__ */ jsx(MessageFooter, { children: new Date(m.createdAt).toLocaleString("es-MX") })
4576
+ ] })
4577
+ ] }) }, m.id);
4578
+ }) }) }),
4579
+ /* @__PURE__ */ jsx(MessageScrollerButton, {})
4580
+ ] }) });
4581
+ }
4206
4582
 
4207
- export { AvatarEditor, AvatarEditorDialog, EmojiPicker, EmojiPickerPopover, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyState, EmptyTitle, ErrorState, LanguageContext, LanguageSwitcher, LoadingState, MEXICO_STATES, MEXICO_STATE_PATHS, MexicoMap, OrgSwitcher, PhoneInput, SearchCommand, ThemeSwitcher, VerifiedProfessionalBadge, VideoPlayer, cn, createLiveHlsConfig, createVodHlsConfig, defaultLanguages, describePlaybackError, fuzzyMatch, normalizeEmojiQuery, shouldRetryLiveEdge404, useDebouncedValue, useDebouncedValueStrict, useHlsPlayback, useLanguageContext, usePlaybackStats, useSearchHotkey };
4583
+ export { AvatarEditor, AvatarEditorDialog, Bubble, BubbleContent, BubbleGroup, BubbleReactions, ChatMessageList, EmojiPicker, EmojiPickerPopover, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyState, EmptyTitle, ErrorState, LanguageContext, LanguageSwitcher, LoadingState, MEXICO_STATES, MEXICO_STATE_PATHS, Marker, MarkerContent, MarkerIcon, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, MexicoMap, OrgSwitcher, PhoneInput, SearchCommand, ThemeSwitcher, VerifiedProfessionalBadge, VideoPlayer, bubbleVariants, cn, createLiveHlsConfig, createVodHlsConfig, defaultLanguages, describePlaybackError, fuzzyMatch, markerVariants, normalizeEmojiQuery, shouldRetryLiveEdge404, useDebouncedValue, useDebouncedValueStrict, useHlsPlayback, useLanguageContext, usePlaybackStats, useSearchHotkey };
4208
4584
  //# sourceMappingURL=index.js.map
4209
4585
  //# sourceMappingURL=index.js.map