@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.
Files changed (254) hide show
  1. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
  2. package/dist/components/ai/PromptInput/PromptInput.js +3 -1
  3. package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +4 -4
  4. package/dist/components/ai/StreamingResponse/StreamingResponse.js +6 -0
  5. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.js +3 -14
  6. package/dist/components/ai/index.d.ts +0 -5
  7. package/dist/components/ai/index.js +8 -4
  8. package/dist/components/charts/DonutChart/DonutChart.js +1 -1
  9. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +1 -1
  10. package/dist/components/charts/shared/ChartLegend/ChartLegend.types.d.ts +13 -1
  11. package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +1 -1
  12. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.types.d.ts +13 -2
  13. package/dist/components/core/Accordion/AccordionItem.js +1 -1
  14. package/dist/components/core/Accordion/AccordionTrigger.js +1 -1
  15. package/dist/components/core/Alert/Alert.animations.d.ts +11 -0
  16. package/dist/components/core/Alert/Alert.animations.js +44 -0
  17. package/dist/components/core/Alert/Alert.js +16 -3
  18. package/dist/components/core/Avatar/Avatar.js +12 -7
  19. package/dist/components/core/Avatar/Avatar.theme.d.ts +4 -6
  20. package/dist/components/core/Avatar/Avatar.theme.js +22 -12
  21. package/dist/components/core/Avatar/Avatar.types.d.ts +9 -0
  22. package/dist/components/core/AvatarGroup/AvatarGroup.animations.js +2 -2
  23. package/dist/components/core/AvatarGroup/AvatarGroup.js +1 -2
  24. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
  25. package/dist/components/core/Badge/Badge.animations.js +1 -1
  26. package/dist/components/core/Badge/Badge.js +23 -47
  27. package/dist/components/core/Badge/Badge.theme.js +48 -62
  28. package/dist/components/core/Badge/Badge.types.d.ts +5 -29
  29. package/dist/components/core/Button/Button.js +2 -2
  30. package/dist/components/core/Button/Button.theme.js +2 -2
  31. package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +6 -6
  32. package/dist/components/core/ButtonGroup/ButtonGroupText.js +1 -3
  33. package/dist/components/core/Calendar/Calendar.js +29 -3
  34. package/dist/components/core/Calendar/Calendar.theme.js +11 -7
  35. package/dist/components/core/Calendar/Calendar.types.d.ts +3 -0
  36. package/dist/components/core/Carousel/CarouselBody.js +0 -1
  37. package/dist/components/core/CommandPalette/CommandItem.js +1 -1
  38. package/dist/components/core/CommandPalette/CommandPalette.js +6 -4
  39. package/dist/components/core/CommandPalette/CommandPalette.theme.js +1 -0
  40. package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +6 -0
  41. package/dist/components/core/ContextMenu/ContextMenu.js +5 -4
  42. package/dist/components/core/ContextMenu/ContextMenuTrigger.js +5 -6
  43. package/dist/components/core/Drawer/Drawer.d.ts +1 -1
  44. package/dist/components/core/Drawer/Drawer.js +25 -2
  45. package/dist/components/core/Drawer/Drawer.theme.js +2 -2
  46. package/dist/components/core/Drawer/Drawer.types.d.ts +6 -0
  47. package/dist/components/core/Dropdown/Dropdown.d.ts +1 -1
  48. package/dist/components/core/Dropdown/Dropdown.js +5 -1
  49. package/dist/components/core/Dropdown/Dropdown.types.d.ts +1 -0
  50. package/dist/components/core/Dropdown/DropdownItem.js +1 -1
  51. package/dist/components/core/Dropdown/DropdownMenu.js +4 -4
  52. package/dist/components/core/Dropdown/DropdownSection.js +1 -1
  53. package/dist/components/core/Dropdown/DropdownSeparator.js +1 -1
  54. package/dist/components/core/Dropdown/DropdownTrigger.d.ts +6 -1
  55. package/dist/components/core/Dropdown/DropdownTrigger.js +10 -8
  56. package/dist/components/core/Kbd/Kbd.theme.js +3 -3
  57. package/dist/components/core/Link/Link.js +3 -1
  58. package/dist/components/core/Message/Message.d.ts +9 -0
  59. package/dist/components/core/Message/Message.js +44 -3
  60. package/dist/components/core/Message/Message.theme.js +22 -0
  61. package/dist/components/core/Message/Message.types.d.ts +115 -0
  62. package/dist/components/core/Message/MessageAudio.d.ts +8 -0
  63. package/dist/components/core/Message/MessageAudio.js +11 -0
  64. package/dist/components/core/Message/MessageContext.d.ts +3 -1
  65. package/dist/components/core/Message/MessageDateDivider.d.ts +6 -0
  66. package/dist/components/core/Message/MessageDateDivider.js +10 -0
  67. package/dist/components/core/Message/MessageFile.d.ts +9 -0
  68. package/dist/components/core/Message/MessageFile.js +15 -0
  69. package/dist/components/core/Message/MessageImage.d.ts +11 -0
  70. package/dist/components/core/Message/MessageImage.js +13 -0
  71. package/dist/components/core/Message/MessageLink.d.ts +10 -0
  72. package/dist/components/core/Message/MessageLink.js +15 -0
  73. package/dist/components/core/Message/MessageReactions.d.ts +8 -0
  74. package/dist/components/core/Message/MessageReactions.js +12 -0
  75. package/dist/components/core/Message/MessageReply.d.ts +8 -0
  76. package/dist/components/core/Message/MessageReply.js +10 -0
  77. package/dist/components/core/Message/MessageSenderName.d.ts +6 -0
  78. package/dist/components/core/Message/MessageSenderName.js +10 -0
  79. package/dist/components/core/Message/MessageStatusIndicator.d.ts +9 -0
  80. package/dist/components/core/Message/MessageStatusIndicator.js +45 -0
  81. package/dist/components/core/Message/index.d.ts +19 -1
  82. package/dist/components/core/Modal/Modal.animations.d.ts +1 -0
  83. package/dist/components/core/Modal/Modal.animations.js +14 -11
  84. package/dist/components/core/Pagination/Pagination.theme.js +1 -1
  85. package/dist/components/core/Popover/Popover.d.ts +1 -1
  86. package/dist/components/core/Popover/PopoverBody.js +2 -2
  87. package/dist/components/core/Popover/PopoverTrigger.d.ts +1 -1
  88. package/dist/components/core/Popover/PopoverTrigger.js +11 -11
  89. package/dist/components/core/Progress/Progress.d.ts +9 -8
  90. package/dist/components/core/Progress/Progress.js +16 -16
  91. package/dist/components/core/Progress/Progress.theme.js +5 -16
  92. package/dist/components/core/Progress/Progress.types.d.ts +2 -20
  93. package/dist/components/core/Progress/index.d.ts +1 -1
  94. package/dist/components/core/ScrollArea/ScrollArea.js +49 -7
  95. package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -3
  96. package/dist/components/core/ScrollArea/index.d.ts +1 -1
  97. package/dist/components/core/Segmented/SegmentedItem.js +1 -1
  98. package/dist/components/core/Sidebar/Sidebar.js +2 -1
  99. package/dist/components/core/Sidebar/SidebarMobileTrigger.js +2 -1
  100. package/dist/components/core/Sidebar/SidebarToggle.js +2 -1
  101. package/dist/components/core/Sidebar/SidebarUserProfile.js +1 -1
  102. package/dist/components/core/SocialIcon/SocialIcon.js +1 -1
  103. package/dist/components/core/Sortable/Sortable.js +2 -2
  104. package/dist/components/core/Sortable/Sortable.theme.js +1 -1
  105. package/dist/components/core/Sortable/Sortable.types.d.ts +7 -5
  106. package/dist/components/core/Tabs/TabsBody.js +1 -1
  107. package/dist/components/core/Tabs/TabsTrigger.js +1 -1
  108. package/dist/components/core/Tag/Tag.js +2 -2
  109. package/dist/components/core/Toast/Toast.d.ts +2 -2
  110. package/dist/components/core/Toast/Toast.js +30 -21
  111. package/dist/components/core/Toast/Toast.theme.js +4 -9
  112. package/dist/components/core/Toast/Toast.types.d.ts +4 -21
  113. package/dist/components/core/Toast/index.d.ts +1 -1
  114. package/dist/components/core/Tooltip/Tooltip.js +1 -1
  115. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
  116. package/dist/components/core/index.js +9 -0
  117. package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +2 -2
  118. package/dist/components/data-display/Table/Table.types.d.ts +8 -8
  119. package/dist/components/effects/CustomCursor/CustomCursor.js +2 -2
  120. package/dist/components/effects/GlassSurface/GlassSurface.d.ts +1 -1
  121. package/dist/components/effects/GlassSurface/GlassSurface.js +12 -4
  122. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.animations.d.ts +39 -0
  123. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.animations.js +98 -0
  124. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.d.ts +3 -0
  125. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.js +104 -0
  126. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.types.d.ts +30 -0
  127. package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.d.ts +3 -0
  128. package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.js +36 -0
  129. package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.d.ts +3 -0
  130. package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.js +36 -0
  131. package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.d.ts +3 -0
  132. package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.js +37 -0
  133. package/dist/components/effects/InteractiveCharacters/hooks/useBlink.d.ts +14 -0
  134. package/dist/components/effects/InteractiveCharacters/hooks/useBlink.js +41 -0
  135. package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.d.ts +25 -0
  136. package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.js +84 -0
  137. package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.d.ts +18 -0
  138. package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.js +35 -0
  139. package/dist/components/effects/InteractiveCharacters/index.d.ts +2 -0
  140. package/dist/components/effects/MorphingText/MorphingText.d.ts +1 -1
  141. package/dist/components/effects/MorphingText/MorphingText.js +6 -5
  142. package/dist/components/effects/Neumorphic/InsetCircleButton.d.ts +9 -0
  143. package/dist/components/effects/Neumorphic/InsetCircleButton.js +10 -0
  144. package/dist/components/effects/Neumorphic/InsetPill.d.ts +7 -0
  145. package/dist/components/effects/Neumorphic/InsetPill.js +7 -0
  146. package/dist/components/effects/Neumorphic/index.d.ts +4 -0
  147. package/dist/components/effects/NoiseOverlay/NoiseOverlay.d.ts +1 -1
  148. package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +4 -4
  149. package/dist/components/effects/Overlay/Overlay.js +6 -4
  150. package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +8 -0
  151. package/dist/components/effects/PageTransition/PageTransition.animations.js +53 -0
  152. package/dist/components/effects/PageTransition/PageTransition.d.ts +3 -0
  153. package/dist/components/effects/PageTransition/PageTransition.js +71 -0
  154. package/dist/components/effects/PageTransition/PageTransition.types.d.ts +15 -0
  155. package/dist/components/effects/PageTransition/index.d.ts +2 -0
  156. package/dist/components/effects/index.d.ts +6 -0
  157. package/dist/components/effects/index.js +4 -0
  158. package/dist/components/forms/Checkbox/Checkbox.animations.d.ts +14 -0
  159. package/dist/components/forms/Checkbox/Checkbox.animations.js +53 -0
  160. package/dist/components/forms/Checkbox/Checkbox.js +4 -2
  161. package/dist/components/forms/Checkbox/Checkbox.theme.js +3 -3
  162. package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +1 -1
  163. package/dist/components/forms/ColorPicker/ColorPickerBody.js +3 -3
  164. package/dist/components/forms/Combobox/Combobox.js +5 -3
  165. package/dist/components/forms/DatePicker/DatePickerBody.js +1 -1
  166. package/dist/components/forms/DateRangePicker/DateRangePicker.animations.d.ts +1 -0
  167. package/dist/components/forms/DateRangePicker/DateRangePicker.d.ts +37 -0
  168. package/dist/components/forms/DateRangePicker/DateRangePicker.js +110 -0
  169. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.d.ts +5 -0
  170. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +52 -0
  171. package/dist/components/forms/DateRangePicker/DateRangePicker.types.d.ts +154 -0
  172. package/dist/components/forms/DateRangePicker/DateRangePickerBody.d.ts +6 -0
  173. package/dist/components/forms/DateRangePicker/DateRangePickerBody.js +208 -0
  174. package/dist/components/forms/DateRangePicker/DateRangePickerPresets.d.ts +6 -0
  175. package/dist/components/forms/DateRangePicker/DateRangePickerPresets.js +41 -0
  176. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.d.ts +6 -0
  177. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +32 -0
  178. package/dist/components/forms/DateRangePicker/dateRangePresets.d.ts +5 -0
  179. package/dist/components/forms/DateRangePicker/dateRangePresets.js +59 -0
  180. package/dist/components/forms/DateRangePicker/index.d.ts +4 -0
  181. package/dist/components/forms/FileUpload/FileUploadProgress.animations.d.ts +36 -0
  182. package/dist/components/forms/FileUpload/FileUploadProgress.animations.js +22 -0
  183. package/dist/components/forms/FileUpload/FileUploadProgress.d.ts +3 -0
  184. package/dist/components/forms/FileUpload/FileUploadProgress.js +111 -0
  185. package/dist/components/forms/FileUpload/FileUploadProgress.theme.d.ts +19 -0
  186. package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +27 -0
  187. package/dist/components/forms/FileUpload/FileUploadProgress.types.d.ts +33 -0
  188. package/dist/components/forms/FileUpload/index.d.ts +3 -0
  189. package/dist/components/forms/Input/Input.js +8 -13
  190. package/dist/components/forms/Input/Input.types.d.ts +6 -0
  191. package/dist/components/forms/InputAddress/InputAddress.theme.js +1 -1
  192. package/dist/components/forms/InputCounter/InputCounter.js +1 -1
  193. package/dist/components/forms/InputCreditCard/InputCreditCard.theme.js +1 -1
  194. package/dist/components/forms/InputOTP/InputOTP.theme.js +1 -1
  195. package/dist/components/forms/Radio/Radio.animations.d.ts +10 -0
  196. package/dist/components/forms/Radio/Radio.animations.js +33 -0
  197. package/dist/components/forms/Radio/Radio.js +11 -2
  198. package/dist/components/forms/Radio/Radio.theme.js +3 -3
  199. package/dist/components/forms/RichTextEditor/RichTextEditor.js +13 -4
  200. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +2 -2
  201. package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +11 -0
  202. package/dist/components/forms/Select/Select.d.ts +1 -1
  203. package/dist/components/forms/Select/Select.js +7 -7
  204. package/dist/components/forms/Select/Select.types.d.ts +3 -3
  205. package/dist/components/forms/SelectableCard/SelectableCard.js +1 -1
  206. package/dist/components/forms/Slider/Slider.theme.js +1 -1
  207. package/dist/components/forms/Switch/Switch.theme.js +3 -3
  208. package/dist/components/forms/forms.theme.js +1 -1
  209. package/dist/components/forms/index.d.ts +6 -0
  210. package/dist/components/forms/index.js +8 -0
  211. package/dist/hooks/index.d.ts +1 -0
  212. package/dist/hooks/useMediaQuery.d.ts +5 -0
  213. package/dist/hooks/useMediaQuery.js +21 -0
  214. package/dist/index.js +21 -0
  215. package/dist/styles.css +1 -1
  216. package/dist/utils/dateUtils.js +56 -5
  217. package/dist/utils/formatUtils.d.ts +10 -0
  218. package/dist/utils/formatUtils.js +24 -0
  219. package/dist/utils/index.d.ts +1 -1
  220. package/package.json +12 -4
  221. package/src/global.scss +319 -39
  222. package/src/styles/theme.css +105 -16
  223. package/src/theme-plugin.css +13 -0
  224. package/dist/components/ai/ApprovalCard/ApprovalCard.d.ts +0 -3
  225. package/dist/components/ai/ApprovalCard/ApprovalCard.js +0 -16
  226. package/dist/components/ai/ApprovalCard/ApprovalCard.theme.d.ts +0 -13
  227. package/dist/components/ai/ApprovalCard/ApprovalCard.theme.js +0 -15
  228. package/dist/components/ai/ApprovalCard/ApprovalCard.types.d.ts +0 -43
  229. package/dist/components/ai/ApprovalCard/index.d.ts +0 -2
  230. package/dist/components/ai/MessageHistory/MessageHistory.d.ts +0 -18
  231. package/dist/components/ai/MessageHistory/MessageHistory.js +0 -98
  232. package/dist/components/ai/MessageHistory/MessageHistory.theme.d.ts +0 -2
  233. package/dist/components/ai/MessageHistory/MessageHistory.theme.js +0 -8
  234. package/dist/components/ai/MessageHistory/MessageHistory.types.d.ts +0 -94
  235. package/dist/components/ai/MessageHistory/index.d.ts +0 -3
  236. package/dist/icons/Icon.d.ts +0 -24
  237. package/dist/icons/Icon.js +0 -30
  238. package/dist/icons/Index.d.ts +0 -16
  239. package/dist/icons/core/ChevronUpDown.d.ts +0 -1
  240. package/dist/icons/core/ChevronUpDown.js +0 -7
  241. package/dist/icons/core/DollarIcon.d.ts +0 -1
  242. package/dist/icons/core/DollarIcon.js +0 -5
  243. package/dist/icons/core/LockIcon.d.ts +0 -1
  244. package/dist/icons/core/LockIcon.js +0 -5
  245. package/dist/icons/core/MinusIcon.d.ts +0 -1
  246. package/dist/icons/core/MinusIcon.js +0 -7
  247. package/dist/icons/core/PlusIcon.d.ts +0 -1
  248. package/dist/icons/core/PlusIcon.js +0 -7
  249. package/dist/icons/core/SearchIcon.d.ts +0 -1
  250. package/dist/icons/core/SearchIcon.js +0 -7
  251. package/dist/icons/core/TickIcon.d.ts +0 -1
  252. package/dist/icons/core/TickIcon.js +0 -5
  253. package/dist/icons/core/User.d.ts +0 -1
  254. 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,8 @@
1
+ import React from "react";
2
+ export interface MessageAudioProps {
3
+ duration?: string;
4
+ name?: string;
5
+ onClick?: () => void;
6
+ className?: string;
7
+ }
8
+ export declare const MessageAudio: React.FC<MessageAudioProps>;
@@ -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,6 @@
1
+ import React from "react";
2
+ export interface MessageDateDividerProps {
3
+ label: string;
4
+ className?: string;
5
+ }
6
+ export declare const MessageDateDivider: React.FC<MessageDateDividerProps>;
@@ -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,9 @@
1
+ import React from "react";
2
+ export interface MessageFileProps {
3
+ name?: string;
4
+ url?: string;
5
+ size?: string;
6
+ onClick?: () => void;
7
+ className?: string;
8
+ }
9
+ export declare const MessageFile: React.FC<MessageFileProps>;
@@ -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,10 @@
1
+ import React from "react";
2
+ export interface MessageLinkProps {
3
+ url?: string;
4
+ thumbnailUrl?: string;
5
+ title?: string;
6
+ description?: string;
7
+ domain?: string;
8
+ className?: string;
9
+ }
10
+ export declare const MessageLink: React.FC<MessageLinkProps>;
@@ -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,8 @@
1
+ import React from "react";
2
+ export interface MessageReplyProps {
3
+ name: string;
4
+ content: string;
5
+ avatar?: string;
6
+ className?: string;
7
+ }
8
+ export declare const MessageReply: React.FC<MessageReplyProps>;
@@ -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,6 @@
1
+ import React from "react";
2
+ export interface MessageSenderNameProps {
3
+ name: string;
4
+ className?: string;
5
+ }
6
+ export declare const MessageSenderName: React.FC<MessageSenderNameProps>;
@@ -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';
@@ -5,5 +5,6 @@ import { Variants } from 'motion/react';
5
5
  export declare const modalOverlayAnimations: Variants;
6
6
  /**
7
7
  * Modal content animation variants
8
+ * Scale + slight slide (Vercel/Notion style)
8
9
  */
9
10
  export declare const modalContentAnimations: Variants;
@@ -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
- y: 20
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
- type: 'spring',
36
- damping: 25,
37
- stiffness: 300,
38
- delay: 0.05
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
- y: 20,
45
+ scale: 0.98,
46
+ y: 4,
44
47
  transition: {
45
- duration: 0.2,
46
- ease: 'easeIn'
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-neutral-50 hover:border-[var(--color-border)] " +
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<any>>;
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: 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: false, position: "none", role: "dialog", ariaModal: true, contentClassName: contentClasses, contentStyle: contentPositionStyle, animations: animation && !shouldReduceMotion
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<any>>;
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 = children.props) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a, e);
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 = children.props) === null || _a === void 0 ? void 0 : _a.onMouseEnter) === null || _b === void 0 ? void 0 : _b.call(_a, e);
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 = children.props) === null || _a === void 0 ? void 0 : _a.onMouseLeave) === null || _b === void 0 ? void 0 : _b.call(_a, e);
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 setRef(node) {
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 = children.ref;
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: setRef,
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, "popover-trigger"),
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 = "PopoverTrigger";
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 and semantic colors
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
- * // Determinate progress
16
- * <Progress value={60} color="primary" />
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 color="primary" />
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 };