@brainfish-ai/components 0.26.0 → 0.27.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.
Files changed (243) hide show
  1. package/dist/alert-dialog.d.ts +6 -2
  2. package/dist/button.d.ts +4 -2
  3. package/dist/chat-search.d.ts +14 -1
  4. package/dist/confirm-dialog.d.ts +3 -1
  5. package/dist/convos.d.ts +3 -0
  6. package/dist/esm/chunks/ChatSearch.bblH7kYY.js +95 -0
  7. package/dist/esm/chunks/ChatSearch.bblH7kYY.js.map +1 -0
  8. package/dist/esm/chunks/Conversation.CuRp-tJL.js +22 -0
  9. package/dist/esm/chunks/{Conversation.BriXFYqU.js.map → Conversation.CuRp-tJL.js.map} +1 -1
  10. package/dist/esm/chunks/FormattedMessage.XNMN23hm.js +23 -0
  11. package/dist/esm/chunks/FormattedMessage.XNMN23hm.js.map +1 -0
  12. package/dist/esm/chunks/MermaidDiagram.PRgXQ5Yh.js +2 -0
  13. package/dist/esm/chunks/{MermaidDiagram.xQ0CVFOI.js.map → MermaidDiagram.PRgXQ5Yh.js.map} +1 -1
  14. package/dist/esm/chunks/_commonjsHelpers.lGe4XDVY.js +2 -0
  15. package/dist/esm/chunks/_commonjsHelpers.lGe4XDVY.js.map +1 -0
  16. package/dist/esm/chunks/button.D_2SonNs.js +3 -0
  17. package/dist/esm/chunks/button.D_2SonNs.js.map +1 -0
  18. package/dist/esm/chunks/chart.BDL2tf-S.js +10 -0
  19. package/dist/esm/chunks/{chart.4ZbtBMmR.js.map → chart.BDL2tf-S.js.map} +1 -1
  20. package/dist/esm/chunks/chat-logo.CqPppEb9.js +3 -0
  21. package/dist/esm/chunks/chat-logo.CqPppEb9.js.map +1 -0
  22. package/dist/esm/chunks/combobox.MyoPH18G.js +6 -0
  23. package/dist/esm/chunks/{combobox.CJKym3Z1.js.map → combobox.MyoPH18G.js.map} +1 -1
  24. package/dist/esm/chunks/dark.DuW7JuAk.js +2 -0
  25. package/dist/esm/chunks/{dark.Cq2RCgy4.js.map → dark.DuW7JuAk.js.map} +1 -1
  26. package/dist/esm/chunks/data-table.CJOR-1Kf.js +5 -0
  27. package/dist/esm/chunks/{data-table.DbcAYxMY.js.map → data-table.CJOR-1Kf.js.map} +1 -1
  28. package/dist/esm/chunks/date-picker.C2VT_rZ9.js +4 -0
  29. package/dist/esm/chunks/{date-picker._cBTpdEK.js.map → date-picker.C2VT_rZ9.js.map} +1 -1
  30. package/dist/esm/chunks/extends.DPdBf6DS.js +2 -0
  31. package/dist/esm/chunks/extends.DPdBf6DS.js.map +1 -0
  32. package/dist/esm/chunks/feature-flags.DOcVlPHk.js +3 -0
  33. package/dist/esm/chunks/{feature-flags.DeDEcnd1.js.map → feature-flags.DOcVlPHk.js.map} +1 -1
  34. package/dist/esm/chunks/feedback.CLMuSvsg.js +13 -0
  35. package/dist/esm/chunks/{feedback.W2OzN-5r.js.map → feedback.CLMuSvsg.js.map} +1 -1
  36. package/dist/esm/chunks/file-upload-status.D8RhMcbO.js +8 -0
  37. package/dist/esm/chunks/{file-upload-status.DP2iuttI.js.map → file-upload-status.D8RhMcbO.js.map} +1 -1
  38. package/dist/esm/chunks/filters.BHp3ukNW.js +22 -0
  39. package/dist/esm/chunks/{filters.-7vSLEQ2.js.map → filters.BHp3ukNW.js.map} +1 -1
  40. package/dist/esm/chunks/font-picker.B9GPXyK4.js +6 -0
  41. package/dist/esm/chunks/{font-picker.DisEoE8a.js.map → font-picker.B9GPXyK4.js.map} +1 -1
  42. package/dist/esm/chunks/formatDate.D2xEZm8f.js +2 -0
  43. package/dist/esm/chunks/{formatDate.CWN6IFKq.js.map → formatDate.D2xEZm8f.js.map} +1 -1
  44. package/dist/esm/chunks/formatNumber.DhVn228t.js +2 -0
  45. package/dist/esm/chunks/{formatNumber.Bm2k8QrT.js.map → formatNumber.DhVn228t.js.map} +1 -1
  46. package/dist/esm/chunks/generating-star.BN9p_FDu.js +7 -0
  47. package/dist/esm/chunks/generating-star.BN9p_FDu.js.map +1 -0
  48. package/dist/esm/chunks/header-nav.DdOXbPSM.js +10 -0
  49. package/dist/esm/chunks/{header-nav.b4hvOsKc.js.map → header-nav.DdOXbPSM.js.map} +1 -1
  50. package/dist/esm/chunks/header-pane.DrVjpN5S.js +20 -0
  51. package/dist/esm/chunks/{header-pane.BFXHXxVn.js.map → header-pane.DrVjpN5S.js.map} +1 -1
  52. package/dist/esm/chunks/hooks.BQTKhHSv.js +2 -0
  53. package/dist/esm/chunks/hooks.BQTKhHSv.js.map +1 -0
  54. package/dist/esm/chunks/index.uF4ME3WQ.js +4 -0
  55. package/dist/esm/chunks/{index.BqibIWDw.js.map → index.uF4ME3WQ.js.map} +1 -1
  56. package/dist/esm/chunks/input-with-tags.DLv9e0XI.js +5 -0
  57. package/dist/esm/chunks/{input-with-tags.tg2nhPFv.js.map → input-with-tags.DLv9e0XI.js.map} +1 -1
  58. package/dist/esm/chunks/logo.CketsPBx.js +5 -0
  59. package/dist/esm/chunks/{logo.D5BMN6Db.js.map → logo.CketsPBx.js.map} +1 -1
  60. package/dist/esm/chunks/primary.CMQbo1GJ.js +2 -0
  61. package/dist/esm/chunks/{primary.CtiRZbqq.js.map → primary.CMQbo1GJ.js.map} +1 -1
  62. package/dist/esm/chunks/review-list.Cn5bw-lP.js +6 -0
  63. package/dist/esm/chunks/review-list.Cn5bw-lP.js.map +1 -0
  64. package/dist/esm/chunks/sidebar.DsEgGwJU.js +25 -0
  65. package/dist/esm/chunks/sidebar.DsEgGwJU.js.map +1 -0
  66. package/dist/esm/chunks/simpleSelect.DK1qZSXM.js +3 -0
  67. package/dist/esm/chunks/{simpleSelect.B1rktKkt.js.map → simpleSelect.DK1qZSXM.js.map} +1 -1
  68. package/dist/esm/chunks/status-badge.BLB0pWDn.js +3 -0
  69. package/dist/esm/chunks/status-badge.BLB0pWDn.js.map +1 -0
  70. package/dist/esm/chunks/trend-value.BPBDBsk2.js +3 -0
  71. package/dist/esm/chunks/{trend-value.COSukPwk.js.map → trend-value.BPBDBsk2.js.map} +1 -1
  72. package/dist/esm/chunks/two-level-combobox.DJYP--W9.js +8 -0
  73. package/dist/esm/chunks/{two-level-combobox.BXs2z9u5.js.map → two-level-combobox.DJYP--W9.js.map} +1 -1
  74. package/dist/esm/chunks/useChartDateFormatters.Dx2h5AAm.js +2 -0
  75. package/dist/esm/chunks/{useChartDateFormatters.DS9ASgFO.js.map → useChartDateFormatters.Dx2h5AAm.js.map} +1 -1
  76. package/dist/esm/chunks/utils.C6Qu-kwd.js +2 -0
  77. package/dist/esm/chunks/{utils.Cwtlq8dh.js.map → utils.C6Qu-kwd.js.map} +1 -1
  78. package/dist/esm/colors.js +1 -169
  79. package/dist/esm/colors.js.map +1 -1
  80. package/dist/esm/components/article-suggestions-banner.js +4 -53
  81. package/dist/esm/components/article-suggestions-banner.js.map +1 -1
  82. package/dist/esm/components/articles-coverage.js +4 -116
  83. package/dist/esm/components/articles-coverage.js.map +1 -1
  84. package/dist/esm/components/articles-updated.js +4 -74
  85. package/dist/esm/components/articles-updated.js.map +1 -1
  86. package/dist/esm/components/breadcrumbs.js +3 -13
  87. package/dist/esm/components/breadcrumbs.js.map +1 -1
  88. package/dist/esm/components/chart-area-linear.js +6 -66
  89. package/dist/esm/components/chart-area-linear.js.map +1 -1
  90. package/dist/esm/components/chart-radial-stacked.js +2 -48
  91. package/dist/esm/components/chart-radial-stacked.js.map +1 -1
  92. package/dist/esm/components/chat-search.js +1 -1
  93. package/dist/esm/components/combobox.js +1 -1
  94. package/dist/esm/components/confirm-dialog.js +2 -47
  95. package/dist/esm/components/confirm-dialog.js.map +1 -1
  96. package/dist/esm/components/conversation.js +1 -1
  97. package/dist/esm/components/convos.js +27 -607
  98. package/dist/esm/components/convos.js.map +1 -1
  99. package/dist/esm/components/data-table.js +1 -1
  100. package/dist/esm/components/date-picker.js +1 -1
  101. package/dist/esm/components/discoveries-created.js +4 -64
  102. package/dist/esm/components/discoveries-created.js.map +1 -1
  103. package/dist/esm/components/feedback.js +1 -1
  104. package/dist/esm/components/file-upload.js +1 -1
  105. package/dist/esm/components/filter.js +1 -1
  106. package/dist/esm/components/font-picker.js +1 -1
  107. package/dist/esm/components/generating-star.js +1 -1
  108. package/dist/esm/components/input-with-tags.js +1 -1
  109. package/dist/esm/components/logo.js +1 -1
  110. package/dist/esm/components/markdown.js +1 -2
  111. package/dist/esm/components/markdown.js.map +1 -1
  112. package/dist/esm/components/metric-card.js +3 -29
  113. package/dist/esm/components/metric-card.js.map +1 -1
  114. package/dist/esm/components/select.js +1 -1
  115. package/dist/esm/components/trend-value.js +1 -1
  116. package/dist/esm/components/two-level-combobox.js +1 -1
  117. package/dist/esm/components/ui/accordion.js +7 -46
  118. package/dist/esm/components/ui/accordion.js.map +1 -1
  119. package/dist/esm/components/ui/alert-dialog.js +3 -114
  120. package/dist/esm/components/ui/alert-dialog.js.map +1 -1
  121. package/dist/esm/components/ui/alert.js +4 -103
  122. package/dist/esm/components/ui/alert.js.map +1 -1
  123. package/dist/esm/components/ui/avatar.js +7 -89
  124. package/dist/esm/components/ui/avatar.js.map +1 -1
  125. package/dist/esm/components/ui/badge.js +2 -26
  126. package/dist/esm/components/ui/badge.js.map +1 -1
  127. package/dist/esm/components/ui/breadcrumb.js +4 -60
  128. package/dist/esm/components/ui/breadcrumb.js.map +1 -1
  129. package/dist/esm/components/ui/button-group.js +4 -88
  130. package/dist/esm/components/ui/button-group.js.map +1 -1
  131. package/dist/esm/components/ui/button.js +1 -5
  132. package/dist/esm/components/ui/button.js.map +1 -1
  133. package/dist/esm/components/ui/calendar.js +2 -20
  134. package/dist/esm/components/ui/calendar.js.map +1 -1
  135. package/dist/esm/components/ui/card.js +1 -55
  136. package/dist/esm/components/ui/card.js.map +1 -1
  137. package/dist/esm/components/ui/collapsible.js +1 -33
  138. package/dist/esm/components/ui/collapsible.js.map +1 -1
  139. package/dist/esm/components/ui/combobox.js +1 -1
  140. package/dist/esm/components/ui/command.js +2 -79
  141. package/dist/esm/components/ui/command.js.map +1 -1
  142. package/dist/esm/components/ui/dialog.js +4 -60
  143. package/dist/esm/components/ui/dialog.js.map +1 -1
  144. package/dist/esm/components/ui/div-button.js +2 -61
  145. package/dist/esm/components/ui/div-button.js.map +1 -1
  146. package/dist/esm/components/ui/dropdown-menu.js +3 -114
  147. package/dist/esm/components/ui/dropdown-menu.js.map +1 -1
  148. package/dist/esm/components/ui/icon.js +2 -25
  149. package/dist/esm/components/ui/icon.js.map +1 -1
  150. package/dist/esm/components/ui/input.js +4 -47
  151. package/dist/esm/components/ui/input.js.map +1 -1
  152. package/dist/esm/components/ui/item.js +11 -140
  153. package/dist/esm/components/ui/item.js.map +1 -1
  154. package/dist/esm/components/ui/label.js +1 -19
  155. package/dist/esm/components/ui/label.js.map +1 -1
  156. package/dist/esm/components/ui/popover.js +1 -31
  157. package/dist/esm/components/ui/popover.js.map +1 -1
  158. package/dist/esm/components/ui/progress.js +2 -22
  159. package/dist/esm/components/ui/progress.js.map +1 -1
  160. package/dist/esm/components/ui/scroll-area.js +2 -32
  161. package/dist/esm/components/ui/scroll-area.js.map +1 -1
  162. package/dist/esm/components/ui/select.js +5 -66
  163. package/dist/esm/components/ui/select.js.map +1 -1
  164. package/dist/esm/components/ui/separator.js +1 -23
  165. package/dist/esm/components/ui/separator.js.map +1 -1
  166. package/dist/esm/components/ui/sheet.js +3 -62
  167. package/dist/esm/components/ui/sheet.js.map +1 -1
  168. package/dist/esm/components/ui/spinner.js +2 -17
  169. package/dist/esm/components/ui/spinner.js.map +1 -1
  170. package/dist/esm/components/ui/switch.js +2 -26
  171. package/dist/esm/components/ui/switch.js.map +1 -1
  172. package/dist/esm/components/ui/table.js +1 -82
  173. package/dist/esm/components/ui/table.js.map +1 -1
  174. package/dist/esm/components/ui/textarea.js +1 -33
  175. package/dist/esm/components/ui/textarea.js.map +1 -1
  176. package/dist/esm/components/ui/tooltip.js +3 -31
  177. package/dist/esm/components/ui/tooltip.js.map +1 -1
  178. package/dist/esm/global.css +1 -1
  179. package/dist/esm/index.js +1 -53
  180. package/dist/esm/index.js.map +1 -1
  181. package/dist/esm/layouts/full-layout.js +1 -1
  182. package/dist/esm/layouts/header-nav.js +1 -1
  183. package/dist/esm/layouts/sidebar.js +1 -1
  184. package/dist/esm/logos/microsoft-logo.js +6 -66
  185. package/dist/esm/logos/microsoft-logo.js.map +1 -1
  186. package/dist/esm/logos/microsoft-teams-logo.js +12 -112
  187. package/dist/esm/logos/microsoft-teams-logo.js.map +1 -1
  188. package/dist/esm/logos/slack-logo.js +3 -39
  189. package/dist/esm/logos/slack-logo.js.map +1 -1
  190. package/dist/esm/scenes/knowledge-review.js +17 -380
  191. package/dist/esm/scenes/knowledge-review.js.map +1 -1
  192. package/dist/esm/tailwind.preset.js +1 -1526
  193. package/dist/esm/tailwind.preset.js.map +1 -1
  194. package/dist/index.d.ts +32 -5
  195. package/dist/logo.d.ts +9 -0
  196. package/dist/stats.html +47 -46
  197. package/package.json +17 -18
  198. package/tailwind.preset.ts +1 -0
  199. package/dist/esm/chunks/ChatSearch.CeQrTOVx.js +0 -6825
  200. package/dist/esm/chunks/ChatSearch.CeQrTOVx.js.map +0 -1
  201. package/dist/esm/chunks/Conversation.BriXFYqU.js +0 -831
  202. package/dist/esm/chunks/FormattedMessage.CRbM-hF6.js +0 -39715
  203. package/dist/esm/chunks/FormattedMessage.CRbM-hF6.js.map +0 -1
  204. package/dist/esm/chunks/MermaidDiagram.xQ0CVFOI.js +0 -50
  205. package/dist/esm/chunks/_commonjsHelpers.BFTU3MAI.js +0 -8
  206. package/dist/esm/chunks/_commonjsHelpers.BFTU3MAI.js.map +0 -1
  207. package/dist/esm/chunks/button.DQL6gCAt.js +0 -48
  208. package/dist/esm/chunks/button.DQL6gCAt.js.map +0 -1
  209. package/dist/esm/chunks/chart.4ZbtBMmR.js +0 -199
  210. package/dist/esm/chunks/combobox.CJKym3Z1.js +0 -95
  211. package/dist/esm/chunks/dark.Cq2RCgy4.js +0 -18
  212. package/dist/esm/chunks/data-table.DbcAYxMY.js +0 -102
  213. package/dist/esm/chunks/date-picker._cBTpdEK.js +0 -26
  214. package/dist/esm/chunks/extends.mO86zOh3.js +0 -12
  215. package/dist/esm/chunks/extends.mO86zOh3.js.map +0 -1
  216. package/dist/esm/chunks/feature-flags.DeDEcnd1.js +0 -22
  217. package/dist/esm/chunks/feedback.W2OzN-5r.js +0 -214
  218. package/dist/esm/chunks/file-upload-status.DP2iuttI.js +0 -141
  219. package/dist/esm/chunks/filters.-7vSLEQ2.js +0 -565
  220. package/dist/esm/chunks/font-picker.DisEoE8a.js +0 -181
  221. package/dist/esm/chunks/formatDate.CWN6IFKq.js +0 -952
  222. package/dist/esm/chunks/formatNumber.Bm2k8QrT.js +0 -10
  223. package/dist/esm/chunks/generating-star.DMDPNTaM.js +0 -1501
  224. package/dist/esm/chunks/generating-star.DMDPNTaM.js.map +0 -1
  225. package/dist/esm/chunks/header-nav.b4hvOsKc.js +0 -197
  226. package/dist/esm/chunks/header-pane.BFXHXxVn.js +0 -559
  227. package/dist/esm/chunks/hooks.BWVaVAT-.js +0 -343
  228. package/dist/esm/chunks/hooks.BWVaVAT-.js.map +0 -1
  229. package/dist/esm/chunks/index.BqibIWDw.js +0 -137
  230. package/dist/esm/chunks/input-with-tags.tg2nhPFv.js +0 -110
  231. package/dist/esm/chunks/logo.D5BMN6Db.js +0 -191
  232. package/dist/esm/chunks/primary.CtiRZbqq.js +0 -18
  233. package/dist/esm/chunks/review-list.BtSnfpSc.js +0 -117
  234. package/dist/esm/chunks/review-list.BtSnfpSc.js.map +0 -1
  235. package/dist/esm/chunks/sidebar.BamKohb5.js +0 -803
  236. package/dist/esm/chunks/sidebar.BamKohb5.js.map +0 -1
  237. package/dist/esm/chunks/simpleSelect.B1rktKkt.js +0 -23
  238. package/dist/esm/chunks/status-badge.eFJ1PYeb.js +0 -18
  239. package/dist/esm/chunks/status-badge.eFJ1PYeb.js.map +0 -1
  240. package/dist/esm/chunks/trend-value.COSukPwk.js +0 -51
  241. package/dist/esm/chunks/two-level-combobox.BXs2z9u5.js +0 -132
  242. package/dist/esm/chunks/useChartDateFormatters.DS9ASgFO.js +0 -11
  243. package/dist/esm/chunks/utils.Cwtlq8dh.js +0 -45
@@ -1,214 +0,0 @@
1
- import React__default, { useState, useRef, useEffect } from 'react';
2
- import { PaperPlaneRight, X, Heart, ThumbsUp, ThumbsDown } from '@phosphor-icons/react';
3
- import { AnimatePresence, motion } from 'framer-motion';
4
- import { Card, CardContent, CardFooter } from '../components/ui/card.js';
5
- import { Textarea } from '../components/ui/textarea.js';
6
- import { B as Button } from './button.DQL6gCAt.js';
7
- import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '../components/ui/tooltip.js';
8
- import { c as cn } from './utils.Cwtlq8dh.js';
9
-
10
- function FeedbackReason({
11
- open,
12
- onSubmit,
13
- thankYouText = "Thank you for your feedback!",
14
- placeholder = "What could we have done better? Your feedback is valuable to us...",
15
- maxLength = 500
16
- }) {
17
- const [reason, setReason] = useState("");
18
- const [submitted, setSubmitted] = useState(false);
19
- const textareaRef = useRef(null);
20
- useEffect(() => {
21
- if (open) {
22
- setReason("");
23
- setSubmitted(false);
24
- setTimeout(() => textareaRef.current?.focus(), 0);
25
- }
26
- }, [open]);
27
- const handleSubmit = () => {
28
- if (reason.trim()) {
29
- onSubmit?.(reason);
30
- setSubmitted(true);
31
- }
32
- };
33
- return /* @__PURE__ */ React__default.createElement(AnimatePresence, null, open && !submitted && /* @__PURE__ */ React__default.createElement(
34
- motion.div,
35
- {
36
- initial: { opacity: 0, y: 12 },
37
- animate: { opacity: 1, y: 0 },
38
- exit: { opacity: 0, y: 12 },
39
- transition: { duration: 0.25, ease: [0.4, 0, 0.2, 1] }
40
- },
41
- /* @__PURE__ */ React__default.createElement(Card, { className: "gap-2 p-3" }, /* @__PURE__ */ React__default.createElement(CardContent, { className: "px-0" }, /* @__PURE__ */ React__default.createElement(
42
- Textarea,
43
- {
44
- ref: textareaRef,
45
- placeholder,
46
- className: "w-full border-none shadow-none focus-visible:ring-0 p-0",
47
- maxLength,
48
- value: reason,
49
- rows: 4,
50
- onChange: (e) => setReason(e.target.value),
51
- onKeyDown: (e) => {
52
- if (e.key === "Enter" && !e.shiftKey) {
53
- e.preventDefault();
54
- handleSubmit();
55
- }
56
- }
57
- }
58
- ), /* @__PURE__ */ React__default.createElement("div", { className: "flex justify-end mt-1" }, /* @__PURE__ */ React__default.createElement("span", { className: "text-xs text-muted-foreground select-none" }, maxLength - reason.length, " characters remaining"))), /* @__PURE__ */ React__default.createElement(CardFooter, { className: "p-0 gap-2 flex-row-reverse" }, /* @__PURE__ */ React__default.createElement(Button, { size: "icon", onClick: handleSubmit, disabled: !reason.length, "aria-label": "Submit feedback" }, /* @__PURE__ */ React__default.createElement(PaperPlaneRight, { "aria-hidden": "true", weight: "bold" })), /* @__PURE__ */ React__default.createElement(
59
- Button,
60
- {
61
- size: "icon",
62
- variant: "ghost",
63
- onClick: () => {
64
- setReason("");
65
- textareaRef.current?.focus();
66
- },
67
- "aria-label": "Cancel feedback"
68
- },
69
- /* @__PURE__ */ React__default.createElement(X, { "aria-hidden": "true", weight: "bold" })
70
- )))
71
- ), open && submitted && /* @__PURE__ */ React__default.createElement(
72
- motion.div,
73
- {
74
- initial: { opacity: 0, y: 12 },
75
- animate: { opacity: 1, y: 0 },
76
- exit: { opacity: 0, y: 12 },
77
- transition: { duration: 0.25, ease: [0.4, 0, 0.2, 1] }
78
- },
79
- /* @__PURE__ */ React__default.createElement(Card, { className: "gap-2 p-3" }, /* @__PURE__ */ React__default.createElement(CardContent, { className: "px-0" }, /* @__PURE__ */ React__default.createElement("p", null, thankYouText)))
80
- ));
81
- }
82
-
83
- function Love({ className, children, doAnimation = false, ...props }) {
84
- return /* @__PURE__ */ React__default.createElement("div", { className: cn("relative", className), ...props }, /* @__PURE__ */ React__default.createElement(AnimatePresence, null, doAnimation && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, Array.from({ length: 8 }).map((_, i) => /* @__PURE__ */ React__default.createElement(
85
- motion.div,
86
- {
87
- key: i,
88
- className: "absolute top-1/2 left-1/2 origin-center pointer-events-none",
89
- initial: { opacity: 0, scale: 0.3, x: 0, y: 0 },
90
- animate: {
91
- opacity: [0, 1, 1, 0],
92
- scale: [0.3, 1, 1, 0],
93
- x: [0, Math.cos(i * (Math.PI / 4)) * 30],
94
- y: [0, Math.sin(i * (Math.PI / 4)) * 30],
95
- rotate: [0, i % 2 ? 45 : -45]
96
- },
97
- transition: {
98
- duration: 1.2,
99
- ease: [0.4, 0, 0.2, 1],
100
- times: [0, 0.3, 0.7, 1],
101
- delay: i * 0.1
102
- }
103
- },
104
- /* @__PURE__ */ React__default.createElement(
105
- Heart,
106
- {
107
- className: "size-4 text-rose-500",
108
- style: {
109
- filter: "drop-shadow(0 0 3px rgba(255, 75, 110, 0.8))",
110
- strokeWidth: 2.5
111
- }
112
- }
113
- )
114
- )), /* @__PURE__ */ React__default.createElement(
115
- motion.div,
116
- {
117
- className: "absolute inset-0 rounded-full bg-primary pointer-events-none",
118
- initial: { opacity: 0, scale: 0.8 },
119
- animate: {
120
- opacity: [0, 0.15, 0.15, 0],
121
- scale: [0.8, 1.8, 1.8, 2]
122
- },
123
- transition: {
124
- duration: 1.2,
125
- ease: "easeOut",
126
- times: [0, 0.3, 0.7, 1]
127
- }
128
- }
129
- ))), children);
130
- }
131
-
132
- function Feedback({
133
- feedback,
134
- onFeedback,
135
- textConfig = {},
136
- disabled = false,
137
- feedbackReasonLength = 500,
138
- feedbackReasonPlaceholder = "What could we have done better? Your feedback is valuable to us...",
139
- onFeedbackReasonSubmit,
140
- feedbackReasonThankYouText = "Thank you for your feedback!"
141
- }) {
142
- const [showHearts, setShowHearts] = useState(false);
143
- const [showFeedbackReason, setShowFeedbackReason] = useState(false);
144
- const textareaRef = useRef(null);
145
- useEffect(() => {
146
- if (showFeedbackReason && textareaRef.current) {
147
- textareaRef.current.focus();
148
- }
149
- }, [showFeedbackReason]);
150
- const handleFeedback = (response) => {
151
- if (onFeedback) {
152
- if (response === "accept") {
153
- setShowHearts(true);
154
- setTimeout(() => setShowHearts(false), 2e3);
155
- }
156
- onFeedback(response);
157
- if (response === "reject") {
158
- setShowFeedbackReason(true);
159
- }
160
- }
161
- };
162
- return /* @__PURE__ */ React__default.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ React__default.createElement("div", { className: "flex justify-end gap-2", "data-name": "Feedback" }, /* @__PURE__ */ React__default.createElement(TooltipProvider, null, /* @__PURE__ */ React__default.createElement(Love, { doAnimation: showHearts }, /* @__PURE__ */ React__default.createElement(Tooltip, null, /* @__PURE__ */ React__default.createElement(TooltipTrigger, { asChild: true }, /* @__PURE__ */ React__default.createElement(
163
- Button,
164
- {
165
- variant: "ghost",
166
- size: "sm",
167
- className: `rounded-md size-8 flex items-center justify-center transition-all duration-200 transform hover:scale-105 active:scale-95 ${feedback === "accept" ? "bg-green-100 text-green-600 hover:bg-green-200" : "text-dark-500"}`,
168
- onClick: () => {
169
- handleFeedback("accept");
170
- setShowFeedbackReason(false);
171
- },
172
- disabled
173
- },
174
- /* @__PURE__ */ React__default.createElement(
175
- motion.div,
176
- {
177
- initial: { scale: 1 },
178
- animate: { scale: feedback === "accept" ? [1, 1.2, 1] : 1 },
179
- transition: { duration: 0.3 }
180
- },
181
- /* @__PURE__ */ React__default.createElement(ThumbsUp, { weight: "bold" })
182
- )
183
- )), /* @__PURE__ */ React__default.createElement(TooltipContent, null, /* @__PURE__ */ React__default.createElement("p", null, textConfig.positiveAnswerText || "Helpful"))))), /* @__PURE__ */ React__default.createElement(TooltipProvider, null, /* @__PURE__ */ React__default.createElement(Tooltip, null, /* @__PURE__ */ React__default.createElement(TooltipTrigger, { asChild: true }, /* @__PURE__ */ React__default.createElement(
184
- Button,
185
- {
186
- variant: "ghost",
187
- size: "sm",
188
- className: `rounded-md size-8 flex items-center justify-center transition-all duration-200 transform hover:scale-105 active:scale-95 ${feedback === "reject" ? "bg-red-100 text-red-600 hover:bg-red-200" : "text-dark-500"}`,
189
- onClick: () => handleFeedback("reject"),
190
- disabled
191
- },
192
- /* @__PURE__ */ React__default.createElement(
193
- motion.div,
194
- {
195
- initial: { scale: 1 },
196
- animate: { scale: feedback === "reject" ? [1, 1.2, 1] : 1 },
197
- transition: { duration: 0.3 }
198
- },
199
- /* @__PURE__ */ React__default.createElement(ThumbsDown, { weight: "bold" })
200
- )
201
- )), /* @__PURE__ */ React__default.createElement(TooltipContent, null, /* @__PURE__ */ React__default.createElement("p", null, textConfig.negativeAnswerText || "Not helpful"))))), /* @__PURE__ */ React__default.createElement(AnimatePresence, null, showFeedbackReason && /* @__PURE__ */ React__default.createElement(
202
- FeedbackReason,
203
- {
204
- open: showFeedbackReason,
205
- onSubmit: onFeedbackReasonSubmit,
206
- thankYouText: feedbackReasonThankYouText,
207
- placeholder: feedbackReasonPlaceholder,
208
- maxLength: feedbackReasonLength
209
- }
210
- )));
211
- }
212
-
213
- export { Feedback as F };
214
- //# sourceMappingURL=feedback.W2OzN-5r.js.map
@@ -1,141 +0,0 @@
1
- import React__default, { useState, useEffect, useCallback } from 'react';
2
- import { useDropzone } from 'react-dropzone';
3
- import { CloudArrowUp, CaretDown, CaretUp, FileVideo, Circle, CheckCircle } from '@phosphor-icons/react';
4
- import { Card, CardContent } from '../components/ui/card.js';
5
- import { c as cn } from './utils.Cwtlq8dh.js';
6
- import { createPortal } from 'react-dom';
7
- import { B as Button } from './button.DQL6gCAt.js';
8
- import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '../components/ui/collapsible.js';
9
-
10
- const formatFileSize = (bytes) => {
11
- if (bytes === 0) return "0 Bytes";
12
- const k = 1024;
13
- const sizes = ["Bytes", "KB", "MB", "GB"];
14
- const i = Math.floor(Math.log(bytes) / Math.log(k));
15
- return Number.parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
16
- };
17
-
18
- function FileUpload({
19
- onDropAccepted,
20
- onDropRejected,
21
- accept = {
22
- "image/*": [".png", ".jpg", ".jpeg", ".gif", ".mp4"],
23
- "application/pdf": [".pdf"],
24
- "text/*": [".txt", ".csv"]
25
- },
26
- maxSize = 5 * 1024 * 1024,
27
- // 5MB
28
- maxFiles = 5,
29
- multiple = true,
30
- className,
31
- disabled = false,
32
- title = "Drag & drop files here, or click to select",
33
- description = "",
34
- supportsMessage = "",
35
- children
36
- }) {
37
- const { getRootProps, getInputProps, isDragActive, isDragReject } = useDropzone({
38
- onDropAccepted,
39
- onDropRejected,
40
- accept,
41
- maxSize,
42
- multiple,
43
- disabled,
44
- maxFiles
45
- });
46
- return /* @__PURE__ */ React__default.createElement("div", { "data-testid": "file-upload", className: "w-full space-y-4" }, /* @__PURE__ */ React__default.createElement("div", { className: cn("group", className, "focus-visible:outline-none"), ...getRootProps() }, /* @__PURE__ */ React__default.createElement(
47
- Card,
48
- {
49
- className: cn(
50
- "custom-dashed-border shadow-none p-8 text-center cursor-pointer",
51
- "group-focus:custom-dashed-border-hover",
52
- "group-hover:custom-dashed-border-hover",
53
- isDragActive && !isDragReject && "border-primary bg-primary/5",
54
- isDragReject && "border-destructive bg-destructive/5",
55
- disabled && "cursor-not-allowed opacity-50"
56
- )
57
- },
58
- /* @__PURE__ */ React__default.createElement("input", { ...getInputProps() }),
59
- /* @__PURE__ */ React__default.createElement("div", { className: "flex flex-col items-center gap-4" }, /* @__PURE__ */ React__default.createElement(
60
- CloudArrowUp,
61
- {
62
- className: cn(
63
- "size-12",
64
- isDragActive && !isDragReject && "text-primary",
65
- isDragReject && "text-destructive"
66
- )
67
- }
68
- ), /* @__PURE__ */ React__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React__default.createElement("p", { className: "text-lg font-medium" }, isDragActive ? isDragReject ? "Some files will be rejected" : "Drop files here" : title), description && /* @__PURE__ */ React__default.createElement("p", { className: "text-sm" }, description), supportsMessage ? /* @__PURE__ */ React__default.createElement("p", { className: "text-sm" }, supportsMessage) : /* @__PURE__ */ React__default.createElement("p", { className: "text-sm" }, `Supports: ${Object.values(accept).flat().join(", ")} • Max size: ${formatFileSize(maxSize)}${maxFiles > 1 ? ` • Max files: ${maxFiles}` : ""}`)))
69
- )), children);
70
- }
71
-
72
- const CheckCircleIcon = React__default.memo(({ className }) => {
73
- return /* @__PURE__ */ React__default.createElement("div", { className: cn("relative", className) }, /* @__PURE__ */ React__default.createElement(CheckCircle, { className: "absolute size-6 text-green-400", weight: "fill" }), /* @__PURE__ */ React__default.createElement(CheckCircle, { className: "absolute size-6 text-black", weight: "regular" }));
74
- });
75
- CheckCircleIcon.displayName = "CheckCircleIcon";
76
- const FileUploadStatus = ({
77
- uploads,
78
- className,
79
- onCancelUpload,
80
- steps = [
81
- { id: "upload", label: "Uploading video", status: "current" },
82
- { id: "analyze", label: "Analyzing content", status: "pending" },
83
- { id: "create", label: "Creating help articles", status: "pending" }
84
- ],
85
- timeRemaining,
86
- title = "Video Processing"
87
- }) => {
88
- const [mounted, setMounted] = useState(false);
89
- const [isOpen, setIsOpen] = useState(true);
90
- useEffect(() => {
91
- setMounted(true);
92
- }, []);
93
- const cancelButtonLabel = useCallback((uploadState) => {
94
- if (uploadState.status === "success") return "Uploaded";
95
- if (uploadState.status === "error") return "Retry upload";
96
- return "Cancel upload";
97
- }, []);
98
- if (!mounted || uploads.length === 0) return null;
99
- if (typeof document === "undefined") return null;
100
- const statusCard = /* @__PURE__ */ React__default.createElement(
101
- Collapsible,
102
- {
103
- open: isOpen,
104
- onOpenChange: setIsOpen,
105
- className: cn(
106
- "fixed bottom-3 right-3 w-96 shadow-lg border z-50 transition-all duration-200 h-auto p-0 gap-4 bg-dark-100 rounded-lg overflow-hidden",
107
- className
108
- )
109
- },
110
- /* @__PURE__ */ React__default.createElement(CollapsibleTrigger, { asChild: true }, /* @__PURE__ */ React__default.createElement("div", { className: "flex items-center justify-between py-4 px-6 bg-foreground text-background cursor-pointer" }, /* @__PURE__ */ React__default.createElement("div", { className: "flex flex-col gap-0" }, /* @__PURE__ */ React__default.createElement("span", { className: "font-semibold" }, title), timeRemaining && /* @__PURE__ */ React__default.createElement("span", { className: "text-sm text-muted-foreground" }, timeRemaining)), /* @__PURE__ */ React__default.createElement(Button, { variant: "ghost", size: "sm", className: "size-6 p-0" }, isOpen ? /* @__PURE__ */ React__default.createElement(CaretDown, { className: "size-4" }) : /* @__PURE__ */ React__default.createElement(CaretUp, { className: "size-4" })))),
111
- /* @__PURE__ */ React__default.createElement(CollapsibleContent, null, uploads.map((upload) => /* @__PURE__ */ React__default.createElement(Card, { key: upload.id, className: cn("rounded-none p-0") }, /* @__PURE__ */ React__default.createElement(CardContent, { className: "p-0" }, /* @__PURE__ */ React__default.createElement("div", { className: "px-6 py-4 border-b" }, /* @__PURE__ */ React__default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React__default.createElement("div", { className: "size-12 bg-yellow-400 border border-dark rounded-lg flex items-center justify-center text-dark shrink-0" }, /* @__PURE__ */ React__default.createElement(FileVideo, { className: "size-6" })), /* @__PURE__ */ React__default.createElement("div", { className: "flex-1 flex flex-col gap-0" }, /* @__PURE__ */ React__default.createElement("h3", { className: "text-base font-medium flex items-center gap-1 whitespace-nowrap" }, /* @__PURE__ */ React__default.createElement("span", { className: "truncate max-w-56" }, upload.file.name), /* @__PURE__ */ React__default.createElement("span", { className: "shrink-0" }, " • ", formatFileSize(upload.file.size))), /* @__PURE__ */ React__default.createElement(
112
- Button,
113
- {
114
- variant: "dark",
115
- size: "sm",
116
- className: "self-start h-6 text-xs bg-foreground text-background",
117
- onClick: onCancelUpload,
118
- "data-id": upload.id,
119
- disabled: upload.status === "success" || upload.progress === 100,
120
- "data-status": upload.status
121
- },
122
- cancelButtonLabel(upload)
123
- )))), /* @__PURE__ */ React__default.createElement("ol", { className: "py-2" }, steps.map((step) => /* @__PURE__ */ React__default.createElement(
124
- "li",
125
- {
126
- key: step.id,
127
- className: cn(
128
- "flex items-center gap-4 px-6 py-3 relative",
129
- "after:absolute after:w-[1px] after:bg-foreground after:top-[38px] after:-bottom-[10px] after:left-[35px]",
130
- "last-of-type:after:hidden"
131
- )
132
- },
133
- step.status === "completed" ? /* @__PURE__ */ React__default.createElement(CheckCircleIcon, { className: "size-6" }) : /* @__PURE__ */ React__default.createElement(Circle, { className: "size-6" }),
134
- /* @__PURE__ */ React__default.createElement("span", { className: "flex items-center gap-1" }, `${step.label} ${step.id === "upload" ? `— ${Math.round(upload.progress)}%` : ""}`)
135
- )))))))
136
- );
137
- return createPortal(statusCard, document.body);
138
- };
139
-
140
- export { FileUpload as F, FileUploadStatus as a, formatFileSize as f };
141
- //# sourceMappingURL=file-upload-status.DP2iuttI.js.map