@flikk/ui 1.0.0-beta.14 → 1.0.0-beta.15
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/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
- package/dist/components/ai/PromptInput/PromptInput.js +3 -1
- package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +4 -4
- package/dist/components/ai/StreamingResponse/StreamingResponse.js +6 -0
- package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.js +3 -14
- package/dist/components/ai/index.d.ts +0 -5
- package/dist/components/ai/index.js +8 -4
- package/dist/components/charts/DonutChart/DonutChart.js +1 -1
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +1 -1
- package/dist/components/charts/shared/ChartLegend/ChartLegend.types.d.ts +13 -1
- package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +1 -1
- package/dist/components/charts/shared/ChartTooltip/ChartTooltip.types.d.ts +13 -2
- package/dist/components/core/Accordion/AccordionItem.js +1 -1
- package/dist/components/core/Accordion/AccordionTrigger.js +1 -1
- package/dist/components/core/Alert/Alert.animations.d.ts +11 -0
- package/dist/components/core/Alert/Alert.animations.js +44 -0
- package/dist/components/core/Alert/Alert.js +16 -3
- package/dist/components/core/Avatar/Avatar.js +12 -7
- package/dist/components/core/Avatar/Avatar.theme.d.ts +4 -6
- package/dist/components/core/Avatar/Avatar.theme.js +22 -12
- package/dist/components/core/Avatar/Avatar.types.d.ts +9 -0
- package/dist/components/core/AvatarGroup/AvatarGroup.animations.js +2 -2
- package/dist/components/core/AvatarGroup/AvatarGroup.js +1 -2
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
- package/dist/components/core/Badge/Badge.animations.js +1 -1
- package/dist/components/core/Badge/Badge.js +23 -47
- package/dist/components/core/Badge/Badge.theme.js +48 -62
- package/dist/components/core/Badge/Badge.types.d.ts +5 -29
- package/dist/components/core/Button/Button.js +2 -2
- package/dist/components/core/Button/Button.theme.js +2 -2
- package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +6 -6
- package/dist/components/core/ButtonGroup/ButtonGroupText.js +1 -3
- package/dist/components/core/Calendar/Calendar.js +29 -3
- package/dist/components/core/Calendar/Calendar.theme.js +11 -7
- package/dist/components/core/Calendar/Calendar.types.d.ts +3 -0
- package/dist/components/core/Carousel/CarouselBody.js +0 -1
- package/dist/components/core/CommandPalette/CommandItem.js +1 -1
- package/dist/components/core/CommandPalette/CommandPalette.js +6 -4
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +1 -0
- package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +6 -0
- package/dist/components/core/ContextMenu/ContextMenu.js +5 -4
- package/dist/components/core/ContextMenu/ContextMenuTrigger.js +5 -6
- package/dist/components/core/Drawer/Drawer.d.ts +1 -1
- package/dist/components/core/Drawer/Drawer.js +25 -2
- package/dist/components/core/Drawer/Drawer.theme.js +2 -2
- package/dist/components/core/Drawer/Drawer.types.d.ts +6 -0
- package/dist/components/core/Dropdown/Dropdown.d.ts +1 -1
- package/dist/components/core/Dropdown/Dropdown.js +5 -1
- package/dist/components/core/Dropdown/Dropdown.types.d.ts +1 -0
- package/dist/components/core/Dropdown/DropdownItem.js +1 -1
- package/dist/components/core/Dropdown/DropdownMenu.js +4 -4
- package/dist/components/core/Dropdown/DropdownSection.js +1 -1
- package/dist/components/core/Dropdown/DropdownSeparator.js +1 -1
- package/dist/components/core/Dropdown/DropdownTrigger.d.ts +6 -1
- package/dist/components/core/Dropdown/DropdownTrigger.js +10 -8
- package/dist/components/core/Kbd/Kbd.theme.js +3 -3
- package/dist/components/core/Link/Link.js +3 -1
- package/dist/components/core/Message/Message.d.ts +9 -0
- package/dist/components/core/Message/Message.js +44 -3
- package/dist/components/core/Message/Message.theme.js +22 -0
- package/dist/components/core/Message/Message.types.d.ts +115 -0
- package/dist/components/core/Message/MessageAudio.d.ts +8 -0
- package/dist/components/core/Message/MessageAudio.js +11 -0
- package/dist/components/core/Message/MessageContext.d.ts +3 -1
- package/dist/components/core/Message/MessageDateDivider.d.ts +6 -0
- package/dist/components/core/Message/MessageDateDivider.js +10 -0
- package/dist/components/core/Message/MessageFile.d.ts +9 -0
- package/dist/components/core/Message/MessageFile.js +15 -0
- package/dist/components/core/Message/MessageImage.d.ts +11 -0
- package/dist/components/core/Message/MessageImage.js +13 -0
- package/dist/components/core/Message/MessageLink.d.ts +10 -0
- package/dist/components/core/Message/MessageLink.js +15 -0
- package/dist/components/core/Message/MessageReactions.d.ts +8 -0
- package/dist/components/core/Message/MessageReactions.js +12 -0
- package/dist/components/core/Message/MessageReply.d.ts +8 -0
- package/dist/components/core/Message/MessageReply.js +10 -0
- package/dist/components/core/Message/MessageSenderName.d.ts +6 -0
- package/dist/components/core/Message/MessageSenderName.js +10 -0
- package/dist/components/core/Message/MessageStatusIndicator.d.ts +9 -0
- package/dist/components/core/Message/MessageStatusIndicator.js +45 -0
- package/dist/components/core/Message/index.d.ts +19 -1
- package/dist/components/core/Modal/Modal.animations.d.ts +1 -0
- package/dist/components/core/Modal/Modal.animations.js +14 -11
- package/dist/components/core/Pagination/Pagination.theme.js +1 -1
- package/dist/components/core/Popover/Popover.d.ts +1 -1
- package/dist/components/core/Popover/PopoverBody.js +2 -2
- package/dist/components/core/Popover/PopoverTrigger.d.ts +1 -1
- package/dist/components/core/Popover/PopoverTrigger.js +11 -11
- package/dist/components/core/Progress/Progress.d.ts +9 -8
- package/dist/components/core/Progress/Progress.js +16 -16
- package/dist/components/core/Progress/Progress.theme.js +5 -16
- package/dist/components/core/Progress/Progress.types.d.ts +2 -20
- package/dist/components/core/Progress/index.d.ts +1 -1
- package/dist/components/core/ScrollArea/ScrollArea.js +49 -7
- package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -3
- package/dist/components/core/ScrollArea/index.d.ts +1 -1
- package/dist/components/core/Segmented/SegmentedItem.js +1 -1
- package/dist/components/core/Sidebar/Sidebar.js +2 -1
- package/dist/components/core/Sidebar/SidebarMobileTrigger.js +2 -1
- package/dist/components/core/Sidebar/SidebarToggle.js +2 -1
- package/dist/components/core/Sidebar/SidebarUserProfile.js +1 -1
- package/dist/components/core/SocialIcon/SocialIcon.js +1 -1
- package/dist/components/core/Sortable/Sortable.js +2 -2
- package/dist/components/core/Sortable/Sortable.theme.js +1 -1
- package/dist/components/core/Sortable/Sortable.types.d.ts +7 -5
- package/dist/components/core/Tabs/TabsBody.js +1 -1
- package/dist/components/core/Tabs/TabsTrigger.js +1 -1
- package/dist/components/core/Tag/Tag.js +2 -2
- package/dist/components/core/Toast/Toast.d.ts +2 -2
- package/dist/components/core/Toast/Toast.js +30 -21
- package/dist/components/core/Toast/Toast.theme.js +4 -9
- package/dist/components/core/Toast/Toast.types.d.ts +4 -21
- package/dist/components/core/Toast/index.d.ts +1 -1
- package/dist/components/core/Tooltip/Tooltip.js +1 -1
- package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
- package/dist/components/core/index.js +9 -0
- package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +2 -2
- package/dist/components/data-display/Table/Table.types.d.ts +8 -8
- package/dist/components/effects/CustomCursor/CustomCursor.js +2 -2
- package/dist/components/effects/GlassSurface/GlassSurface.d.ts +1 -1
- package/dist/components/effects/GlassSurface/GlassSurface.js +12 -4
- package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.animations.d.ts +39 -0
- package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.animations.js +98 -0
- package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.d.ts +3 -0
- package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.js +104 -0
- package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.types.d.ts +30 -0
- package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.d.ts +3 -0
- package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.js +36 -0
- package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.d.ts +3 -0
- package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.js +36 -0
- package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.d.ts +3 -0
- package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.js +37 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useBlink.d.ts +14 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useBlink.js +41 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.d.ts +25 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.js +84 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.d.ts +18 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.js +35 -0
- package/dist/components/effects/InteractiveCharacters/index.d.ts +2 -0
- package/dist/components/effects/MorphingText/MorphingText.d.ts +1 -1
- package/dist/components/effects/MorphingText/MorphingText.js +6 -5
- package/dist/components/effects/Neumorphic/InsetCircleButton.d.ts +9 -0
- package/dist/components/effects/Neumorphic/InsetCircleButton.js +10 -0
- package/dist/components/effects/Neumorphic/InsetPill.d.ts +7 -0
- package/dist/components/effects/Neumorphic/InsetPill.js +7 -0
- package/dist/components/effects/Neumorphic/index.d.ts +4 -0
- package/dist/components/effects/NoiseOverlay/NoiseOverlay.d.ts +1 -1
- package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +4 -4
- package/dist/components/effects/Overlay/Overlay.js +6 -4
- package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +8 -0
- package/dist/components/effects/PageTransition/PageTransition.animations.js +53 -0
- package/dist/components/effects/PageTransition/PageTransition.d.ts +3 -0
- package/dist/components/effects/PageTransition/PageTransition.js +71 -0
- package/dist/components/effects/PageTransition/PageTransition.types.d.ts +15 -0
- package/dist/components/effects/PageTransition/index.d.ts +2 -0
- package/dist/components/effects/index.d.ts +6 -0
- package/dist/components/effects/index.js +4 -0
- package/dist/components/forms/Checkbox/Checkbox.animations.d.ts +14 -0
- package/dist/components/forms/Checkbox/Checkbox.animations.js +53 -0
- package/dist/components/forms/Checkbox/Checkbox.js +4 -2
- package/dist/components/forms/Checkbox/Checkbox.theme.js +3 -3
- package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +1 -1
- package/dist/components/forms/ColorPicker/ColorPickerBody.js +3 -3
- package/dist/components/forms/Combobox/Combobox.js +5 -3
- package/dist/components/forms/DatePicker/DatePickerBody.js +1 -1
- package/dist/components/forms/DateRangePicker/DateRangePicker.animations.d.ts +1 -0
- package/dist/components/forms/DateRangePicker/DateRangePicker.d.ts +37 -0
- package/dist/components/forms/DateRangePicker/DateRangePicker.js +110 -0
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.d.ts +5 -0
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +52 -0
- package/dist/components/forms/DateRangePicker/DateRangePicker.types.d.ts +154 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerBody.d.ts +6 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerBody.js +208 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerPresets.d.ts +6 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerPresets.js +41 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.d.ts +6 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +32 -0
- package/dist/components/forms/DateRangePicker/dateRangePresets.d.ts +5 -0
- package/dist/components/forms/DateRangePicker/dateRangePresets.js +59 -0
- package/dist/components/forms/DateRangePicker/index.d.ts +4 -0
- package/dist/components/forms/FileUpload/FileUploadProgress.animations.d.ts +36 -0
- package/dist/components/forms/FileUpload/FileUploadProgress.animations.js +22 -0
- package/dist/components/forms/FileUpload/FileUploadProgress.d.ts +3 -0
- package/dist/components/forms/FileUpload/FileUploadProgress.js +111 -0
- package/dist/components/forms/FileUpload/FileUploadProgress.theme.d.ts +19 -0
- package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +27 -0
- package/dist/components/forms/FileUpload/FileUploadProgress.types.d.ts +33 -0
- package/dist/components/forms/FileUpload/index.d.ts +3 -0
- package/dist/components/forms/Input/Input.js +8 -13
- package/dist/components/forms/Input/Input.types.d.ts +6 -0
- package/dist/components/forms/InputAddress/InputAddress.theme.js +1 -1
- package/dist/components/forms/InputCounter/InputCounter.js +1 -1
- package/dist/components/forms/InputCreditCard/InputCreditCard.theme.js +1 -1
- package/dist/components/forms/InputOTP/InputOTP.theme.js +1 -1
- package/dist/components/forms/Radio/Radio.animations.d.ts +10 -0
- package/dist/components/forms/Radio/Radio.animations.js +33 -0
- package/dist/components/forms/Radio/Radio.js +11 -2
- package/dist/components/forms/Radio/Radio.theme.js +3 -3
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +13 -4
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +2 -2
- package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +11 -0
- package/dist/components/forms/Select/Select.d.ts +1 -1
- package/dist/components/forms/Select/Select.js +7 -7
- package/dist/components/forms/Select/Select.types.d.ts +3 -3
- package/dist/components/forms/SelectableCard/SelectableCard.js +1 -1
- package/dist/components/forms/Slider/Slider.theme.js +1 -1
- package/dist/components/forms/Switch/Switch.theme.js +3 -3
- package/dist/components/forms/forms.theme.js +1 -1
- package/dist/components/forms/index.d.ts +6 -0
- package/dist/components/forms/index.js +8 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useMediaQuery.d.ts +5 -0
- package/dist/hooks/useMediaQuery.js +21 -0
- package/dist/index.js +21 -0
- package/dist/styles.css +1 -1
- package/dist/utils/dateUtils.js +56 -5
- package/dist/utils/formatUtils.d.ts +10 -0
- package/dist/utils/formatUtils.js +24 -0
- package/dist/utils/index.d.ts +1 -1
- package/package.json +12 -4
- package/src/global.scss +319 -39
- package/src/styles/theme.css +105 -16
- package/src/theme-plugin.css +13 -0
- package/dist/components/ai/ApprovalCard/ApprovalCard.d.ts +0 -3
- package/dist/components/ai/ApprovalCard/ApprovalCard.js +0 -16
- package/dist/components/ai/ApprovalCard/ApprovalCard.theme.d.ts +0 -13
- package/dist/components/ai/ApprovalCard/ApprovalCard.theme.js +0 -15
- package/dist/components/ai/ApprovalCard/ApprovalCard.types.d.ts +0 -43
- package/dist/components/ai/ApprovalCard/index.d.ts +0 -2
- package/dist/components/ai/MessageHistory/MessageHistory.d.ts +0 -18
- package/dist/components/ai/MessageHistory/MessageHistory.js +0 -98
- package/dist/components/ai/MessageHistory/MessageHistory.theme.d.ts +0 -2
- package/dist/components/ai/MessageHistory/MessageHistory.theme.js +0 -8
- package/dist/components/ai/MessageHistory/MessageHistory.types.d.ts +0 -94
- package/dist/components/ai/MessageHistory/index.d.ts +0 -3
- package/dist/icons/Icon.d.ts +0 -24
- package/dist/icons/Icon.js +0 -30
- package/dist/icons/Index.d.ts +0 -16
- package/dist/icons/core/ChevronUpDown.d.ts +0 -1
- package/dist/icons/core/ChevronUpDown.js +0 -7
- package/dist/icons/core/DollarIcon.d.ts +0 -1
- package/dist/icons/core/DollarIcon.js +0 -5
- package/dist/icons/core/LockIcon.d.ts +0 -1
- package/dist/icons/core/LockIcon.js +0 -5
- package/dist/icons/core/MinusIcon.d.ts +0 -1
- package/dist/icons/core/MinusIcon.js +0 -7
- package/dist/icons/core/PlusIcon.d.ts +0 -1
- package/dist/icons/core/PlusIcon.js +0 -7
- package/dist/icons/core/SearchIcon.d.ts +0 -1
- package/dist/icons/core/SearchIcon.js +0 -7
- package/dist/icons/core/TickIcon.d.ts +0 -1
- package/dist/icons/core/TickIcon.js +0 -5
- package/dist/icons/core/User.d.ts +0 -1
- package/dist/utils/useClickOutside.d.ts +0 -1
|
@@ -7,6 +7,50 @@ export type MessageRole = "user" | "assistant" | "system";
|
|
|
7
7
|
* Message variant types for chat UI
|
|
8
8
|
*/
|
|
9
9
|
export type MessageVariant = "sender" | "receiver" | "system";
|
|
10
|
+
/**
|
|
11
|
+
* Message delivery status
|
|
12
|
+
*/
|
|
13
|
+
export type MessageStatus = "sending" | "sent" | "delivered" | "read" | "failed";
|
|
14
|
+
/**
|
|
15
|
+
* Attachment types
|
|
16
|
+
*/
|
|
17
|
+
export type MessageAttachmentType = "file" | "image" | "audio" | "link";
|
|
18
|
+
/**
|
|
19
|
+
* Attachment data
|
|
20
|
+
*/
|
|
21
|
+
export interface MessageAttachment {
|
|
22
|
+
type: MessageAttachmentType;
|
|
23
|
+
name?: string;
|
|
24
|
+
url?: string;
|
|
25
|
+
size?: string;
|
|
26
|
+
duration?: string;
|
|
27
|
+
thumbnailUrl?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
domain?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Reaction data
|
|
33
|
+
*/
|
|
34
|
+
export interface MessageReaction {
|
|
35
|
+
emoji: string;
|
|
36
|
+
count: number;
|
|
37
|
+
reacted?: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Reply/quote reference
|
|
41
|
+
*/
|
|
42
|
+
export interface MessageReplyTo {
|
|
43
|
+
name: string;
|
|
44
|
+
content: string;
|
|
45
|
+
avatar?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Sender display info
|
|
49
|
+
*/
|
|
50
|
+
export interface MessageSenderInfo {
|
|
51
|
+
name: string;
|
|
52
|
+
avatar?: string;
|
|
53
|
+
}
|
|
10
54
|
/**
|
|
11
55
|
* Avatar configuration for message sender
|
|
12
56
|
*/
|
|
@@ -99,6 +143,43 @@ export interface MessageProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
|
|
|
99
143
|
* @default true for assistant messages
|
|
100
144
|
*/
|
|
101
145
|
showActions?: boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Delivery status indicator (sending/sent/delivered/read/failed)
|
|
148
|
+
* Only renders for sender variant
|
|
149
|
+
*/
|
|
150
|
+
status?: MessageStatus;
|
|
151
|
+
/**
|
|
152
|
+
* Timestamp when the message was read (shown alongside read status)
|
|
153
|
+
*/
|
|
154
|
+
readAt?: Date | string;
|
|
155
|
+
/**
|
|
156
|
+
* Callback when retry button is clicked on failed messages
|
|
157
|
+
*/
|
|
158
|
+
onRetry?: () => void;
|
|
159
|
+
/**
|
|
160
|
+
* File, image, audio, or link attachments
|
|
161
|
+
*/
|
|
162
|
+
attachments?: MessageAttachment[];
|
|
163
|
+
/**
|
|
164
|
+
* Emoji reactions displayed below the message
|
|
165
|
+
*/
|
|
166
|
+
reactions?: MessageReaction[];
|
|
167
|
+
/**
|
|
168
|
+
* Callback when a reaction pill is clicked
|
|
169
|
+
*/
|
|
170
|
+
onReactionClick?: (emoji: string) => void;
|
|
171
|
+
/**
|
|
172
|
+
* Reply/quote reference shown above message content
|
|
173
|
+
*/
|
|
174
|
+
replyTo?: MessageReplyTo;
|
|
175
|
+
/**
|
|
176
|
+
* Sender display info (name shown above receiver bubbles)
|
|
177
|
+
*/
|
|
178
|
+
sender?: MessageSenderInfo;
|
|
179
|
+
/**
|
|
180
|
+
* Whether this is a consecutive message from the same sender (hides avatar & name)
|
|
181
|
+
*/
|
|
182
|
+
isGrouped?: boolean;
|
|
102
183
|
/**
|
|
103
184
|
* Custom theme overrides
|
|
104
185
|
*/
|
|
@@ -126,6 +207,23 @@ export interface MessageTheme {
|
|
|
126
207
|
};
|
|
127
208
|
streamingIndicatorStyle: string;
|
|
128
209
|
actionsContainerStyle: string;
|
|
210
|
+
statusStyle: string;
|
|
211
|
+
statusSending: string;
|
|
212
|
+
statusSent: string;
|
|
213
|
+
statusDelivered: string;
|
|
214
|
+
statusRead: string;
|
|
215
|
+
statusFailed: string;
|
|
216
|
+
attachmentContainerStyle: string;
|
|
217
|
+
fileStyle: string;
|
|
218
|
+
imageStyle: string;
|
|
219
|
+
audioStyle: string;
|
|
220
|
+
linkStyle: string;
|
|
221
|
+
reactionsContainerStyle: string;
|
|
222
|
+
reactionPillStyle: string;
|
|
223
|
+
reactionPillActiveStyle: string;
|
|
224
|
+
replyStyle: string;
|
|
225
|
+
dateDividerStyle: string;
|
|
226
|
+
senderNameStyle: string;
|
|
129
227
|
}
|
|
130
228
|
/**
|
|
131
229
|
* Theme overrides for Message component
|
|
@@ -141,6 +239,23 @@ export interface MessageThemeOverrides {
|
|
|
141
239
|
};
|
|
142
240
|
streamingIndicatorStyle?: string;
|
|
143
241
|
actionsContainerStyle?: string;
|
|
242
|
+
statusStyle?: string;
|
|
243
|
+
statusSending?: string;
|
|
244
|
+
statusSent?: string;
|
|
245
|
+
statusDelivered?: string;
|
|
246
|
+
statusRead?: string;
|
|
247
|
+
statusFailed?: string;
|
|
248
|
+
attachmentContainerStyle?: string;
|
|
249
|
+
fileStyle?: string;
|
|
250
|
+
imageStyle?: string;
|
|
251
|
+
audioStyle?: string;
|
|
252
|
+
linkStyle?: string;
|
|
253
|
+
reactionsContainerStyle?: string;
|
|
254
|
+
reactionPillStyle?: string;
|
|
255
|
+
reactionPillActiveStyle?: string;
|
|
256
|
+
replyStyle?: string;
|
|
257
|
+
dateDividerStyle?: string;
|
|
258
|
+
senderNameStyle?: string;
|
|
144
259
|
/** @deprecated Use variants.sender.containerModifier instead */
|
|
145
260
|
senderContainerStyle?: string;
|
|
146
261
|
/** @deprecated Use variants.sender.bubbleStyle instead */
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../../../utils/cn.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { messageTheme } from './Message.theme.js';
|
|
5
|
+
import { PlayIcon } from '@heroicons/react/24/solid';
|
|
6
|
+
|
|
7
|
+
const MessageAudio = ({ duration, name, onClick, className, }) => {
|
|
8
|
+
return (jsxs("div", { className: cn(messageTheme.audioStyle, className), children: [jsx("button", { onClick: onClick, className: "flex items-center justify-center size-8 rounded-full bg-[var(--color-primary)] text-white flex-shrink-0 cursor-pointer", "aria-label": name ? `Play ${name}` : "Play audio", type: "button", children: jsx(PlayIcon, { className: "size-4 ml-0.5" }) }), jsxs("div", { className: "flex flex-col min-w-0 flex-1", children: [name && (jsx("span", { className: "font-medium text-[var(--color-text-primary)] truncate", children: name })), duration && (jsx("span", { className: "text-xs text-[var(--color-text-muted)]", children: duration }))] })] }));
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export { MessageAudio };
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { MessageRole, MessageVariant } from './Message.types';
|
|
1
|
+
import { MessageRole, MessageVariant, MessageStatus } from './Message.types';
|
|
2
2
|
export interface MessageContextValue {
|
|
3
3
|
role?: MessageRole;
|
|
4
4
|
variant: MessageVariant;
|
|
5
5
|
isStreaming?: boolean;
|
|
6
6
|
typingSpeed?: number;
|
|
7
|
+
status?: MessageStatus;
|
|
8
|
+
isGrouped?: boolean;
|
|
7
9
|
}
|
|
8
10
|
export declare const MessageContext: import("react").Context<MessageContextValue | undefined>;
|
|
9
11
|
export declare const useMessageContext: () => MessageContextValue;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../../../utils/cn.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { messageTheme } from './Message.theme.js';
|
|
5
|
+
|
|
6
|
+
const MessageDateDivider = ({ label, className, }) => {
|
|
7
|
+
return (jsxs("div", { className: cn(messageTheme.dateDividerStyle, className), children: [jsx("hr", { className: "flex-1 border-t border-[var(--color-border)]" }), jsx("span", { children: label }), jsx("hr", { className: "flex-1 border-t border-[var(--color-border)]" })] }));
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { MessageDateDivider };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../../../utils/cn.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { messageTheme } from './Message.theme.js';
|
|
5
|
+
import { DocumentIcon, ArrowDownTrayIcon } from '@heroicons/react/24/outline';
|
|
6
|
+
|
|
7
|
+
const MessageFile = ({ name = "File", url, size, onClick, className, }) => {
|
|
8
|
+
const content = (jsxs("div", { className: cn(messageTheme.fileStyle, className), onClick: !url ? onClick : undefined, role: !url && onClick ? "button" : undefined, tabIndex: !url && onClick ? 0 : undefined, children: [jsx(DocumentIcon, { className: "size-5 flex-shrink-0 text-[var(--color-text-muted)]" }), jsxs("div", { className: "flex flex-col min-w-0 flex-1", children: [jsx("span", { className: "font-medium text-[var(--color-text-primary)] truncate", children: name }), size && (jsx("span", { className: "text-xs text-[var(--color-text-muted)]", children: size }))] }), url && (jsx(ArrowDownTrayIcon, { className: "size-4 flex-shrink-0 text-[var(--color-text-muted)]" }))] }));
|
|
9
|
+
if (url) {
|
|
10
|
+
return (jsx("a", { href: url, download: true, className: "no-underline", "aria-label": `Download ${name}`, children: content }));
|
|
11
|
+
}
|
|
12
|
+
return content;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { MessageFile };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface MessageImageProps {
|
|
3
|
+
src?: string;
|
|
4
|
+
thumbnailUrl?: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
size?: string;
|
|
7
|
+
alt?: string;
|
|
8
|
+
onClick?: () => void;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const MessageImage: React.FC<MessageImageProps>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../../../utils/cn.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { messageTheme } from './Message.theme.js';
|
|
5
|
+
|
|
6
|
+
const MessageImage = ({ src, thumbnailUrl, name, size, alt, onClick, className, }) => {
|
|
7
|
+
const imgSrc = thumbnailUrl || src;
|
|
8
|
+
if (!imgSrc)
|
|
9
|
+
return null;
|
|
10
|
+
return (jsxs("div", { className: cn(messageTheme.imageStyle, className), children: [jsx("img", { src: imgSrc, alt: alt || name || "Image attachment", className: "w-full h-auto object-cover cursor-pointer", onClick: onClick, role: onClick ? "button" : undefined, tabIndex: onClick ? 0 : undefined }), (name || size) && (jsxs("div", { className: "flex items-center justify-between px-2 py-1.5 text-xs text-[var(--color-text-muted)]", children: [name && jsx("span", { className: "truncate", children: name }), size && jsx("span", { className: "flex-shrink-0", children: size })] }))] }));
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export { MessageImage };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../../../utils/cn.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { messageTheme } from './Message.theme.js';
|
|
5
|
+
import { LinkIcon } from '@heroicons/react/16/solid';
|
|
6
|
+
|
|
7
|
+
const MessageLink = ({ url, thumbnailUrl, title, description, domain, className, }) => {
|
|
8
|
+
const content = (jsxs("div", { className: cn(messageTheme.linkStyle, className), children: [thumbnailUrl && (jsx("img", { src: thumbnailUrl, alt: title || "Link preview", className: "w-full h-32 object-cover" })), jsxs("div", { className: "px-3 py-2.5 flex flex-col gap-0.5", children: [title && (jsx("span", { className: "font-medium text-[var(--color-text-primary)] line-clamp-1", children: title })), description && (jsx("span", { className: "text-[var(--color-text-muted)] line-clamp-2", children: description })), domain && (jsxs("span", { className: "flex items-center gap-1 text-xs text-[var(--color-text-placeholder)] mt-0.5", children: [jsx(LinkIcon, { className: "size-3" }), domain] }))] })] }));
|
|
9
|
+
if (url) {
|
|
10
|
+
return (jsx("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: "no-underline", "aria-label": title ? `Open ${title}` : "Open link", children: content }));
|
|
11
|
+
}
|
|
12
|
+
return content;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { MessageLink };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { MessageReaction } from "./Message.types";
|
|
3
|
+
export interface MessageReactionsProps {
|
|
4
|
+
reactions?: MessageReaction[];
|
|
5
|
+
onReactionClick?: (emoji: string) => void;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const MessageReactions: React.FC<MessageReactionsProps>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../../../utils/cn.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { messageTheme } from './Message.theme.js';
|
|
5
|
+
|
|
6
|
+
const MessageReactions = ({ reactions, onReactionClick, className, }) => {
|
|
7
|
+
if (!(reactions === null || reactions === void 0 ? void 0 : reactions.length))
|
|
8
|
+
return null;
|
|
9
|
+
return (jsx("div", { className: cn(messageTheme.reactionsContainerStyle, className), children: reactions.map((reaction) => (jsxs("button", { type: "button", onClick: () => onReactionClick === null || onReactionClick === void 0 ? void 0 : onReactionClick(reaction.emoji), className: cn(messageTheme.reactionPillStyle, reaction.reacted && messageTheme.reactionPillActiveStyle), "aria-label": `${reaction.emoji} ${reaction.count}`, children: [jsx("span", { children: reaction.emoji }), jsx("span", { children: reaction.count })] }, reaction.emoji))) }));
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { MessageReactions };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../../../utils/cn.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { messageTheme } from './Message.theme.js';
|
|
5
|
+
|
|
6
|
+
const MessageReply = ({ name, content, className, }) => {
|
|
7
|
+
return (jsxs("div", { className: cn(messageTheme.replyStyle, className), children: [jsx("span", { className: "font-semibold text-[var(--color-text-primary)]", children: name }), jsx("p", { className: "line-clamp-2 mt-0.5", children: content })] }));
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { MessageReply };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../../../utils/cn.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { messageTheme } from './Message.theme.js';
|
|
5
|
+
|
|
6
|
+
const MessageSenderName = ({ name, className, }) => {
|
|
7
|
+
return (jsx("span", { className: cn(messageTheme.senderNameStyle, className), children: name }));
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { MessageSenderName };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { MessageStatus } from "./Message.types";
|
|
3
|
+
export interface MessageStatusIndicatorProps {
|
|
4
|
+
status?: MessageStatus;
|
|
5
|
+
readAt?: Date | string;
|
|
6
|
+
onRetry?: () => void;
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const MessageStatusIndicator: React.FC<MessageStatusIndicatorProps>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../../../utils/cn.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { messageTheme } from './Message.theme.js';
|
|
5
|
+
import { Button } from '../Button/Button.js';
|
|
6
|
+
import { ExclamationCircleIcon, CheckIcon, ClockIcon } from '@heroicons/react/16/solid';
|
|
7
|
+
|
|
8
|
+
const DoubleCheck = ({ className }) => (jsxs("span", { className: cn("inline-flex items-center -space-x-2", className), children: [jsx(CheckIcon, { className: "size-3.5" }), jsx(CheckIcon, { className: "size-3.5" })] }));
|
|
9
|
+
const MessageStatusIndicator = ({ status, readAt, onRetry, className, }) => {
|
|
10
|
+
if (!status)
|
|
11
|
+
return null;
|
|
12
|
+
const statusConfig = {
|
|
13
|
+
sending: {
|
|
14
|
+
icon: jsx(ClockIcon, { className: "size-3.5" }),
|
|
15
|
+
style: messageTheme.statusSending,
|
|
16
|
+
label: "Sending",
|
|
17
|
+
},
|
|
18
|
+
sent: {
|
|
19
|
+
icon: jsx(CheckIcon, { className: "size-3.5" }),
|
|
20
|
+
style: messageTheme.statusSent,
|
|
21
|
+
label: "Sent",
|
|
22
|
+
},
|
|
23
|
+
delivered: {
|
|
24
|
+
icon: jsx(DoubleCheck, {}),
|
|
25
|
+
style: messageTheme.statusDelivered,
|
|
26
|
+
label: "Delivered",
|
|
27
|
+
},
|
|
28
|
+
read: {
|
|
29
|
+
icon: jsx(DoubleCheck, {}),
|
|
30
|
+
style: messageTheme.statusRead,
|
|
31
|
+
label: readAt
|
|
32
|
+
? `Read ${typeof readAt === "string" ? readAt : readAt.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })}`
|
|
33
|
+
: "Read",
|
|
34
|
+
},
|
|
35
|
+
failed: {
|
|
36
|
+
icon: jsx(ExclamationCircleIcon, { className: "size-3.5" }),
|
|
37
|
+
style: messageTheme.statusFailed,
|
|
38
|
+
label: "Failed",
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
const config = statusConfig[status];
|
|
42
|
+
return (jsxs("div", { className: cn(messageTheme.statusStyle, config.style, className), "aria-label": config.label, children: [config.icon, status === "failed" && onRetry && (jsx(Button, { variant: "link", color: "danger", size: "sm", onClick: onRetry, className: "text-xs px-0 h-auto", "aria-label": "Retry sending message", children: "Retry" }))] }));
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export { MessageStatusIndicator };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Message } from './Message';
|
|
2
|
-
export type { MessageProps, MessageRole, MessageVariant, MessageAvatarProps, MessageTheme, MessageThemeOverrides, MessageVariantTheme, } from './Message.types';
|
|
2
|
+
export type { MessageProps, MessageRole, MessageVariant, MessageAvatarProps, MessageTheme, MessageThemeOverrides, MessageVariantTheme, MessageStatus, MessageAttachmentType, MessageAttachment, MessageReaction, MessageReplyTo, MessageSenderInfo, } from './Message.types';
|
|
3
3
|
export { messageTheme } from './Message.theme';
|
|
4
4
|
export { messageListTheme } from './MessageList.theme';
|
|
5
5
|
export type { MessageListProps, MessageListTheme, MessageListThemeOverrides, } from './MessageList.types';
|
|
@@ -7,3 +7,21 @@ export { TypeWriter } from './TypeWriter';
|
|
|
7
7
|
export type { TypeWriterProps } from './TypeWriter';
|
|
8
8
|
export { MessageBody } from './MessageBody';
|
|
9
9
|
export type { MessageBodyProps } from './MessageBody';
|
|
10
|
+
export { MessageStatusIndicator } from './MessageStatusIndicator';
|
|
11
|
+
export type { MessageStatusIndicatorProps } from './MessageStatusIndicator';
|
|
12
|
+
export { MessageSenderName } from './MessageSenderName';
|
|
13
|
+
export type { MessageSenderNameProps } from './MessageSenderName';
|
|
14
|
+
export { MessageFile } from './MessageFile';
|
|
15
|
+
export type { MessageFileProps } from './MessageFile';
|
|
16
|
+
export { MessageImage } from './MessageImage';
|
|
17
|
+
export type { MessageImageProps } from './MessageImage';
|
|
18
|
+
export { MessageAudio } from './MessageAudio';
|
|
19
|
+
export type { MessageAudioProps } from './MessageAudio';
|
|
20
|
+
export { MessageLink } from './MessageLink';
|
|
21
|
+
export type { MessageLinkProps } from './MessageLink';
|
|
22
|
+
export { MessageReply } from './MessageReply';
|
|
23
|
+
export type { MessageReplyProps } from './MessageReply';
|
|
24
|
+
export { MessageReactions } from './MessageReactions';
|
|
25
|
+
export type { MessageReactionsProps } from './MessageReactions';
|
|
26
|
+
export { MessageDateDivider } from './MessageDateDivider';
|
|
27
|
+
export type { MessageDateDividerProps } from './MessageDateDivider';
|
|
@@ -22,30 +22,33 @@ const modalOverlayAnimations = {
|
|
|
22
22
|
};
|
|
23
23
|
/**
|
|
24
24
|
* Modal content animation variants
|
|
25
|
+
* Scale + slight slide (Vercel/Notion style)
|
|
25
26
|
*/
|
|
26
27
|
const modalContentAnimations = {
|
|
27
28
|
initial: {
|
|
28
29
|
opacity: 0,
|
|
29
|
-
|
|
30
|
+
scale: 0.98,
|
|
31
|
+
y: 8,
|
|
30
32
|
},
|
|
31
33
|
animate: {
|
|
32
34
|
opacity: 1,
|
|
35
|
+
scale: 1,
|
|
33
36
|
y: 0,
|
|
34
37
|
transition: {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
38
|
+
duration: 0.2,
|
|
39
|
+
ease: [0.4, 0, 0.2, 1],
|
|
40
|
+
delay: 0.05,
|
|
41
|
+
},
|
|
40
42
|
},
|
|
41
43
|
exit: {
|
|
42
44
|
opacity: 0,
|
|
43
|
-
|
|
45
|
+
scale: 0.98,
|
|
46
|
+
y: 4,
|
|
44
47
|
transition: {
|
|
45
|
-
duration: 0.
|
|
46
|
-
ease:
|
|
47
|
-
}
|
|
48
|
-
}
|
|
48
|
+
duration: 0.15,
|
|
49
|
+
ease: [0.4, 0, 1, 1],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
49
52
|
};
|
|
50
53
|
|
|
51
54
|
export { modalContentAnimations, modalOverlayAnimations };
|
|
@@ -15,7 +15,7 @@ const paginationTheme = {
|
|
|
15
15
|
// Base state - dark
|
|
16
16
|
"dark:bg-[var(--color-neutral-800)] dark:text-[var(--color-neutral-400)] dark:border-transparent " +
|
|
17
17
|
// Hover state - light
|
|
18
|
-
"hover:text-[var(--color-text-primary)] hover:bg-
|
|
18
|
+
"hover:text-[var(--color-text-primary)] hover:bg-[var(--color-background-secondary)] hover:border-[var(--color-border)] " +
|
|
19
19
|
// Hover state - dark
|
|
20
20
|
"dark:hover:bg-[var(--color-neutral-700)] dark:hover:text-[var(--color-neutral-200)] dark:hover:border-[var(--color-neutral-600)] " +
|
|
21
21
|
// Active state - light
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { PopoverRootProps as PopoverProps } from "./Popover.types";
|
|
3
3
|
export declare const Popover: (({ children, className, isOpen: controlledIsOpen, defaultIsOpen, onOpenChange, placement, offset, triggerType, closeOnClickOutside, closeOnEsc, preventClose, hasBackdrop, theme: themeOverrides, darkMode, ...props }: PopoverProps) => import("react/jsx-runtime").JSX.Element) & {
|
|
4
|
-
Trigger: React.ForwardRefExoticComponent<Omit<import("./Popover.types").PopoverTriggerProps, "ref"> & React.RefAttributes<
|
|
4
|
+
Trigger: React.ForwardRefExoticComponent<Omit<import("./Popover.types").PopoverTriggerProps, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
5
5
|
Body: React.ForwardRefExoticComponent<import("./Popover.types").PopoverBodyProps & React.RefAttributes<HTMLDivElement>>;
|
|
6
6
|
};
|
|
@@ -58,7 +58,7 @@ const PopoverBody = React__default.forwardRef(({ children, className, animation
|
|
|
58
58
|
const { position, cssVariables, contentRef: portalContentRef, } = useSelectPortal({
|
|
59
59
|
triggerRef,
|
|
60
60
|
isOpen: isOpen || false,
|
|
61
|
-
placement
|
|
61
|
+
placement,
|
|
62
62
|
offset: offset || 8,
|
|
63
63
|
autoWidth: true,
|
|
64
64
|
onClose: () => {
|
|
@@ -132,7 +132,7 @@ const PopoverBody = React__default.forwardRef(({ children, className, animation
|
|
|
132
132
|
return (jsx(Overlay, { ref: handleRef, isOpen: isOpen, onClose: () => {
|
|
133
133
|
if (!preventClose)
|
|
134
134
|
onOpenChange(false);
|
|
135
|
-
}, closeOnOverlayClick: closeOnClickOutside && !preventClose, closeOnEsc: closeOnEsc && !preventClose, enableScrollLock: false, enableFocusTrap:
|
|
135
|
+
}, closeOnOverlayClick: closeOnClickOutside && !preventClose, closeOnEsc: closeOnEsc && !preventClose, enableScrollLock: false, enableFocusTrap: true, position: "none", role: "dialog", ariaModal: true, contentClassName: contentClasses, contentStyle: contentPositionStyle, animations: animation && !shouldReduceMotion
|
|
136
136
|
? {
|
|
137
137
|
overlay: overlayBackdropAnimations,
|
|
138
138
|
content: overlayContentAnimations,
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { PopoverTriggerProps } from "./Popover.types";
|
|
3
|
-
export declare const PopoverTrigger: React.ForwardRefExoticComponent<Omit<PopoverTriggerProps, "ref"> & React.RefAttributes<
|
|
3
|
+
export declare const PopoverTrigger: React.ForwardRefExoticComponent<Omit<PopoverTriggerProps, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
@@ -5,6 +5,7 @@ import { usePopoverContext } from './PopoverContext.js';
|
|
|
5
5
|
const PopoverTrigger = React__default.forwardRef(({ children, className, ...props }, ref) => {
|
|
6
6
|
var _a;
|
|
7
7
|
const context = usePopoverContext();
|
|
8
|
+
const childElement = children;
|
|
8
9
|
// Create trigger events based on triggerType
|
|
9
10
|
const getTriggerEvents = () => {
|
|
10
11
|
if (context.triggerType === "click") {
|
|
@@ -14,7 +15,7 @@ const PopoverTrigger = React__default.forwardRef(({ children, className, ...prop
|
|
|
14
15
|
e.preventDefault();
|
|
15
16
|
context.onOpenChange(!context.isOpen);
|
|
16
17
|
// Call the original onClick if it exists
|
|
17
|
-
(_b = (_a =
|
|
18
|
+
(_b = (_a = childElement.props) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a, e);
|
|
18
19
|
},
|
|
19
20
|
};
|
|
20
21
|
}
|
|
@@ -24,7 +25,7 @@ const PopoverTrigger = React__default.forwardRef(({ children, className, ...prop
|
|
|
24
25
|
var _a, _b;
|
|
25
26
|
context.onOpenChange(true);
|
|
26
27
|
// Call the original onMouseEnter if it exists
|
|
27
|
-
(_b = (_a =
|
|
28
|
+
(_b = (_a = childElement.props) === null || _a === void 0 ? void 0 : _a.onMouseEnter) === null || _b === void 0 ? void 0 : _b.call(_a, e);
|
|
28
29
|
},
|
|
29
30
|
onMouseLeave: (e) => {
|
|
30
31
|
var _a, _b;
|
|
@@ -32,43 +33,42 @@ const PopoverTrigger = React__default.forwardRef(({ children, className, ...prop
|
|
|
32
33
|
context.onOpenChange(false);
|
|
33
34
|
}
|
|
34
35
|
// Call the original onMouseLeave if it exists
|
|
35
|
-
(_b = (_a =
|
|
36
|
+
(_b = (_a = childElement.props) === null || _a === void 0 ? void 0 : _a.onMouseLeave) === null || _b === void 0 ? void 0 : _b.call(_a, e);
|
|
36
37
|
},
|
|
37
38
|
};
|
|
38
39
|
}
|
|
39
40
|
return {};
|
|
40
41
|
};
|
|
41
42
|
// Merge refs for the trigger element
|
|
42
|
-
function
|
|
43
|
+
function mergeRefs(node) {
|
|
43
44
|
context.triggerRef.current = node;
|
|
44
45
|
if (ref) {
|
|
45
46
|
if (typeof ref === "function")
|
|
46
47
|
ref(node);
|
|
47
|
-
else if (typeof ref === "object")
|
|
48
|
+
else if (typeof ref === "object" && ref)
|
|
48
49
|
ref.current = node;
|
|
49
50
|
}
|
|
50
|
-
const childRef =
|
|
51
|
+
const childRef = childElement.ref;
|
|
51
52
|
if (childRef) {
|
|
52
53
|
if (typeof childRef === "function")
|
|
53
54
|
childRef(node);
|
|
54
|
-
else if (typeof childRef === "object")
|
|
55
|
+
else if (typeof childRef === "object" && childRef)
|
|
55
56
|
childRef.current = node;
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
59
|
const triggerEvents = getTriggerEvents();
|
|
59
|
-
const childElement = children;
|
|
60
60
|
return React__default.cloneElement(childElement, {
|
|
61
|
-
ref:
|
|
61
|
+
ref: mergeRefs,
|
|
62
62
|
"aria-expanded": context.isOpen,
|
|
63
63
|
"aria-haspopup": true,
|
|
64
64
|
"aria-controls": context.contentId,
|
|
65
|
-
className: cn((_a = childElement.props) === null || _a === void 0 ? void 0 : _a.className, className
|
|
65
|
+
className: cn("popover-trigger", (_a = childElement.props) === null || _a === void 0 ? void 0 : _a.className, className),
|
|
66
66
|
"data-state": context.isOpen ? "open" : "closed",
|
|
67
67
|
"data-trigger-type": context.triggerType,
|
|
68
68
|
...triggerEvents,
|
|
69
69
|
...props,
|
|
70
70
|
});
|
|
71
71
|
});
|
|
72
|
-
PopoverTrigger.displayName = "
|
|
72
|
+
PopoverTrigger.displayName = "Popover.Trigger";
|
|
73
73
|
|
|
74
74
|
export { PopoverTrigger };
|
|
@@ -6,23 +6,24 @@ import { ProgressProps } from "./Progress.types";
|
|
|
6
6
|
* Features:
|
|
7
7
|
* - Determinate mode: Shows specific progress value (0-100)
|
|
8
8
|
* - Indeterminate mode: Animated loading state when value is undefined
|
|
9
|
-
* - Multiple sizes
|
|
9
|
+
* - Multiple sizes with default primary color
|
|
10
|
+
* - className controls the fill bar color (the primary styling target)
|
|
11
|
+
* - wrapperClassName controls the outer container
|
|
10
12
|
* - Flexible label positioning (right, top, bottom, inside)
|
|
11
13
|
* - Respects reduced motion preferences
|
|
12
|
-
* - Full className override support
|
|
13
14
|
*
|
|
14
15
|
* @example
|
|
15
|
-
* //
|
|
16
|
-
* <Progress value={60}
|
|
16
|
+
* // Default (primary color)
|
|
17
|
+
* <Progress value={60} />
|
|
18
|
+
*
|
|
19
|
+
* // Custom fill color via className
|
|
20
|
+
* <Progress value={70} className="bg-[var(--color-success)]" />
|
|
17
21
|
*
|
|
18
22
|
* // With label
|
|
19
23
|
* <Progress value={75} showLabel labelPosition="right" />
|
|
20
24
|
*
|
|
21
25
|
* // Indeterminate (loading)
|
|
22
|
-
* <Progress
|
|
23
|
-
*
|
|
24
|
-
* // Custom label format
|
|
25
|
-
* <Progress value={50} showLabel formatLabel={(pct) => `${pct}% complete`} />
|
|
26
|
+
* <Progress />
|
|
26
27
|
*/
|
|
27
28
|
declare const Progress: React.ForwardRefExoticComponent<ProgressProps & React.RefAttributes<HTMLDivElement>>;
|
|
28
29
|
export { Progress };
|