@brainfish-ai/components 0.25.5 → 0.26.1
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/chat-search.d.ts +40 -3
- package/dist/esm/chunks/ChatSearch.Cqo4WF3n.js +95 -0
- package/dist/esm/chunks/ChatSearch.Cqo4WF3n.js.map +1 -0
- package/dist/esm/chunks/Conversation.UZ5rx7_0.js +22 -0
- package/dist/esm/chunks/{Conversation.BriXFYqU.js.map → Conversation.UZ5rx7_0.js.map} +1 -1
- package/dist/esm/chunks/FormattedMessage.D9xA6QsH.js +23 -0
- package/dist/esm/chunks/FormattedMessage.D9xA6QsH.js.map +1 -0
- package/dist/esm/chunks/MermaidDiagram.PRgXQ5Yh.js +2 -0
- package/dist/esm/chunks/{MermaidDiagram.xQ0CVFOI.js.map → MermaidDiagram.PRgXQ5Yh.js.map} +1 -1
- package/dist/esm/chunks/_commonjsHelpers.lGe4XDVY.js +2 -0
- package/dist/esm/chunks/_commonjsHelpers.lGe4XDVY.js.map +1 -0
- package/dist/esm/chunks/button.BYc5d6AZ.js +3 -0
- package/dist/esm/chunks/{button.DQL6gCAt.js.map → button.BYc5d6AZ.js.map} +1 -1
- package/dist/esm/chunks/chart.BDL2tf-S.js +10 -0
- package/dist/esm/chunks/{chart.4ZbtBMmR.js.map → chart.BDL2tf-S.js.map} +1 -1
- package/dist/esm/chunks/chat-logo.CqPppEb9.js +3 -0
- package/dist/esm/chunks/chat-logo.CqPppEb9.js.map +1 -0
- package/dist/esm/chunks/combobox.CxaWbDm9.js +6 -0
- package/dist/esm/chunks/{combobox.CJKym3Z1.js.map → combobox.CxaWbDm9.js.map} +1 -1
- package/dist/esm/chunks/dark.DuW7JuAk.js +2 -0
- package/dist/esm/chunks/{dark.Cq2RCgy4.js.map → dark.DuW7JuAk.js.map} +1 -1
- package/dist/esm/chunks/data-table.CJOR-1Kf.js +5 -0
- package/dist/esm/chunks/{data-table.DbcAYxMY.js.map → data-table.CJOR-1Kf.js.map} +1 -1
- package/dist/esm/chunks/date-picker.Bhplnvxn.js +4 -0
- package/dist/esm/chunks/{date-picker._cBTpdEK.js.map → date-picker.Bhplnvxn.js.map} +1 -1
- package/dist/esm/chunks/extends.DPdBf6DS.js +2 -0
- package/dist/esm/chunks/extends.DPdBf6DS.js.map +1 -0
- package/dist/esm/chunks/feature-flags.DOcVlPHk.js +3 -0
- package/dist/esm/chunks/{feature-flags.DeDEcnd1.js.map → feature-flags.DOcVlPHk.js.map} +1 -1
- package/dist/esm/chunks/feedback.BXKvlNz1.js +13 -0
- package/dist/esm/chunks/{feedback.W2OzN-5r.js.map → feedback.BXKvlNz1.js.map} +1 -1
- package/dist/esm/chunks/file-upload-status.4ukNFyi2.js +8 -0
- package/dist/esm/chunks/{file-upload-status.DP2iuttI.js.map → file-upload-status.4ukNFyi2.js.map} +1 -1
- package/dist/esm/chunks/filters.ita3UAnO.js +22 -0
- package/dist/esm/chunks/{filters.-7vSLEQ2.js.map → filters.ita3UAnO.js.map} +1 -1
- package/dist/esm/chunks/font-picker.BwEWBowG.js +6 -0
- package/dist/esm/chunks/{font-picker.DisEoE8a.js.map → font-picker.BwEWBowG.js.map} +1 -1
- package/dist/esm/chunks/formatDate.D2xEZm8f.js +2 -0
- package/dist/esm/chunks/{formatDate.CWN6IFKq.js.map → formatDate.D2xEZm8f.js.map} +1 -1
- package/dist/esm/chunks/formatNumber.DhVn228t.js +2 -0
- package/dist/esm/chunks/{formatNumber.Bm2k8QrT.js.map → formatNumber.DhVn228t.js.map} +1 -1
- package/dist/esm/chunks/generating-star.BN9p_FDu.js +7 -0
- package/dist/esm/chunks/generating-star.BN9p_FDu.js.map +1 -0
- package/dist/esm/chunks/header-nav.B4IJjted.js +10 -0
- package/dist/esm/chunks/{header-nav.b4hvOsKc.js.map → header-nav.B4IJjted.js.map} +1 -1
- package/dist/esm/chunks/header-pane.C1RWesOW.js +20 -0
- package/dist/esm/chunks/{header-pane.BV7xKJXV.js.map → header-pane.C1RWesOW.js.map} +1 -1
- package/dist/esm/chunks/hooks.BQTKhHSv.js +2 -0
- package/dist/esm/chunks/hooks.BQTKhHSv.js.map +1 -0
- package/dist/esm/chunks/index.uF4ME3WQ.js +4 -0
- package/dist/esm/chunks/{index.BqibIWDw.js.map → index.uF4ME3WQ.js.map} +1 -1
- package/dist/esm/chunks/input-with-tags.DrDDPxse.js +5 -0
- package/dist/esm/chunks/{input-with-tags.tg2nhPFv.js.map → input-with-tags.DrDDPxse.js.map} +1 -1
- package/dist/esm/chunks/logo.CketsPBx.js +5 -0
- package/dist/esm/chunks/{logo.D5BMN6Db.js.map → logo.CketsPBx.js.map} +1 -1
- package/dist/esm/chunks/primary.CMQbo1GJ.js +2 -0
- package/dist/esm/chunks/{primary.CtiRZbqq.js.map → primary.CMQbo1GJ.js.map} +1 -1
- package/dist/esm/chunks/review-list.qvxeqG9l.js +6 -0
- package/dist/esm/chunks/{review-list.BtSnfpSc.js.map → review-list.qvxeqG9l.js.map} +1 -1
- package/dist/esm/chunks/sidebar.IcJADYLR.js +25 -0
- package/dist/esm/chunks/sidebar.IcJADYLR.js.map +1 -0
- package/dist/esm/chunks/simpleSelect.DK1qZSXM.js +3 -0
- package/dist/esm/chunks/{simpleSelect.B1rktKkt.js.map → simpleSelect.DK1qZSXM.js.map} +1 -1
- package/dist/esm/chunks/status-badge.C-jt7Zs2.js +3 -0
- package/dist/esm/chunks/{status-badge.eFJ1PYeb.js.map → status-badge.C-jt7Zs2.js.map} +1 -1
- package/dist/esm/chunks/trend-value.BPBDBsk2.js +3 -0
- package/dist/esm/chunks/{trend-value.COSukPwk.js.map → trend-value.BPBDBsk2.js.map} +1 -1
- package/dist/esm/chunks/two-level-combobox.Bv2OQgjh.js +8 -0
- package/dist/esm/chunks/{two-level-combobox.BXs2z9u5.js.map → two-level-combobox.Bv2OQgjh.js.map} +1 -1
- package/dist/esm/chunks/useChartDateFormatters.Dx2h5AAm.js +2 -0
- package/dist/esm/chunks/{useChartDateFormatters.DS9ASgFO.js.map → useChartDateFormatters.Dx2h5AAm.js.map} +1 -1
- package/dist/esm/chunks/utils.C6Qu-kwd.js +2 -0
- package/dist/esm/chunks/{utils.Cwtlq8dh.js.map → utils.C6Qu-kwd.js.map} +1 -1
- package/dist/esm/colors.js +1 -169
- package/dist/esm/colors.js.map +1 -1
- package/dist/esm/components/article-suggestions-banner.js +4 -53
- package/dist/esm/components/article-suggestions-banner.js.map +1 -1
- package/dist/esm/components/articles-coverage.js +4 -116
- package/dist/esm/components/articles-coverage.js.map +1 -1
- package/dist/esm/components/articles-updated.js +4 -74
- package/dist/esm/components/articles-updated.js.map +1 -1
- package/dist/esm/components/breadcrumbs.js +3 -13
- package/dist/esm/components/breadcrumbs.js.map +1 -1
- package/dist/esm/components/chart-area-linear.js +6 -66
- package/dist/esm/components/chart-area-linear.js.map +1 -1
- package/dist/esm/components/chart-radial-stacked.js +2 -48
- package/dist/esm/components/chart-radial-stacked.js.map +1 -1
- package/dist/esm/components/chat-search.js +1 -1
- package/dist/esm/components/combobox.js +1 -1
- package/dist/esm/components/confirm-dialog.js +2 -47
- package/dist/esm/components/confirm-dialog.js.map +1 -1
- package/dist/esm/components/conversation.js +1 -1
- package/dist/esm/components/convos.js +27 -607
- package/dist/esm/components/convos.js.map +1 -1
- package/dist/esm/components/data-table.js +1 -1
- package/dist/esm/components/date-picker.js +1 -1
- package/dist/esm/components/discoveries-created.js +4 -64
- package/dist/esm/components/discoveries-created.js.map +1 -1
- package/dist/esm/components/feedback.js +1 -1
- package/dist/esm/components/file-upload.js +1 -1
- package/dist/esm/components/filter.js +1 -1
- package/dist/esm/components/font-picker.js +1 -1
- package/dist/esm/components/generating-star.js +1 -1
- package/dist/esm/components/input-with-tags.js +1 -1
- package/dist/esm/components/logo.js +1 -1
- package/dist/esm/components/markdown.js +1 -2
- package/dist/esm/components/markdown.js.map +1 -1
- package/dist/esm/components/metric-card.js +3 -29
- package/dist/esm/components/metric-card.js.map +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/trend-value.js +1 -1
- package/dist/esm/components/two-level-combobox.js +1 -1
- package/dist/esm/components/ui/accordion.js +7 -46
- package/dist/esm/components/ui/accordion.js.map +1 -1
- package/dist/esm/components/ui/alert-dialog.js +3 -114
- package/dist/esm/components/ui/alert-dialog.js.map +1 -1
- package/dist/esm/components/ui/alert.js +4 -103
- package/dist/esm/components/ui/alert.js.map +1 -1
- package/dist/esm/components/ui/avatar.js +7 -89
- package/dist/esm/components/ui/avatar.js.map +1 -1
- package/dist/esm/components/ui/badge.js +2 -26
- package/dist/esm/components/ui/badge.js.map +1 -1
- package/dist/esm/components/ui/breadcrumb.js +4 -60
- package/dist/esm/components/ui/breadcrumb.js.map +1 -1
- package/dist/esm/components/ui/button-group.js +4 -88
- package/dist/esm/components/ui/button-group.js.map +1 -1
- package/dist/esm/components/ui/button.js +1 -5
- package/dist/esm/components/ui/button.js.map +1 -1
- package/dist/esm/components/ui/calendar.js +2 -20
- package/dist/esm/components/ui/calendar.js.map +1 -1
- package/dist/esm/components/ui/card.js +1 -55
- package/dist/esm/components/ui/card.js.map +1 -1
- package/dist/esm/components/ui/collapsible.js +1 -33
- package/dist/esm/components/ui/collapsible.js.map +1 -1
- package/dist/esm/components/ui/combobox.js +1 -1
- package/dist/esm/components/ui/command.js +2 -79
- package/dist/esm/components/ui/command.js.map +1 -1
- package/dist/esm/components/ui/dialog.js +4 -60
- package/dist/esm/components/ui/dialog.js.map +1 -1
- package/dist/esm/components/ui/div-button.js +2 -61
- package/dist/esm/components/ui/div-button.js.map +1 -1
- package/dist/esm/components/ui/dropdown-menu.js +3 -114
- package/dist/esm/components/ui/dropdown-menu.js.map +1 -1
- package/dist/esm/components/ui/icon.js +2 -25
- package/dist/esm/components/ui/icon.js.map +1 -1
- package/dist/esm/components/ui/input.js +4 -47
- package/dist/esm/components/ui/input.js.map +1 -1
- package/dist/esm/components/ui/item.js +11 -140
- package/dist/esm/components/ui/item.js.map +1 -1
- package/dist/esm/components/ui/label.js +1 -19
- package/dist/esm/components/ui/label.js.map +1 -1
- package/dist/esm/components/ui/popover.js +1 -31
- package/dist/esm/components/ui/popover.js.map +1 -1
- package/dist/esm/components/ui/progress.js +2 -22
- package/dist/esm/components/ui/progress.js.map +1 -1
- package/dist/esm/components/ui/scroll-area.js +2 -32
- package/dist/esm/components/ui/scroll-area.js.map +1 -1
- package/dist/esm/components/ui/select.js +5 -66
- package/dist/esm/components/ui/select.js.map +1 -1
- package/dist/esm/components/ui/separator.js +1 -23
- package/dist/esm/components/ui/separator.js.map +1 -1
- package/dist/esm/components/ui/sheet.js +3 -62
- package/dist/esm/components/ui/sheet.js.map +1 -1
- package/dist/esm/components/ui/spinner.js +2 -17
- package/dist/esm/components/ui/spinner.js.map +1 -1
- package/dist/esm/components/ui/switch.js +2 -26
- package/dist/esm/components/ui/switch.js.map +1 -1
- package/dist/esm/components/ui/table.js +1 -82
- package/dist/esm/components/ui/table.js.map +1 -1
- package/dist/esm/components/ui/textarea.js +1 -33
- package/dist/esm/components/ui/textarea.js.map +1 -1
- package/dist/esm/components/ui/tooltip.js +3 -31
- package/dist/esm/components/ui/tooltip.js.map +1 -1
- package/dist/esm/global.css +1 -1
- package/dist/esm/index.js +1 -53
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/layouts/full-layout.js +1 -1
- package/dist/esm/layouts/header-nav.js +1 -1
- package/dist/esm/layouts/sidebar.js +1 -1
- package/dist/esm/logos/microsoft-logo.js +6 -66
- package/dist/esm/logos/microsoft-logo.js.map +1 -1
- package/dist/esm/logos/microsoft-teams-logo.js +12 -112
- package/dist/esm/logos/microsoft-teams-logo.js.map +1 -1
- package/dist/esm/logos/slack-logo.js +3 -39
- package/dist/esm/logos/slack-logo.js.map +1 -1
- package/dist/esm/scenes/knowledge-review.js +17 -380
- package/dist/esm/scenes/knowledge-review.js.map +1 -1
- package/dist/esm/tailwind.preset.js +1 -1526
- package/dist/esm/tailwind.preset.js.map +1 -1
- package/dist/index.d.ts +48 -3
- package/dist/logo.d.ts +9 -0
- package/dist/stats.html +47 -46
- package/package.json +17 -18
- package/tailwind.preset.ts +1 -0
- package/dist/esm/chunks/ChatSearch.CL2VnSod.js +0 -6697
- package/dist/esm/chunks/ChatSearch.CL2VnSod.js.map +0 -1
- package/dist/esm/chunks/Conversation.BriXFYqU.js +0 -831
- package/dist/esm/chunks/FormattedMessage.CRbM-hF6.js +0 -39715
- package/dist/esm/chunks/FormattedMessage.CRbM-hF6.js.map +0 -1
- package/dist/esm/chunks/MermaidDiagram.xQ0CVFOI.js +0 -50
- package/dist/esm/chunks/_commonjsHelpers.BFTU3MAI.js +0 -8
- package/dist/esm/chunks/_commonjsHelpers.BFTU3MAI.js.map +0 -1
- package/dist/esm/chunks/button.DQL6gCAt.js +0 -48
- package/dist/esm/chunks/chart.4ZbtBMmR.js +0 -199
- package/dist/esm/chunks/combobox.CJKym3Z1.js +0 -95
- package/dist/esm/chunks/dark.Cq2RCgy4.js +0 -18
- package/dist/esm/chunks/data-table.DbcAYxMY.js +0 -102
- package/dist/esm/chunks/date-picker._cBTpdEK.js +0 -26
- package/dist/esm/chunks/extends.mO86zOh3.js +0 -12
- package/dist/esm/chunks/extends.mO86zOh3.js.map +0 -1
- package/dist/esm/chunks/feature-flags.DeDEcnd1.js +0 -22
- package/dist/esm/chunks/feedback.W2OzN-5r.js +0 -214
- package/dist/esm/chunks/file-upload-status.DP2iuttI.js +0 -141
- package/dist/esm/chunks/filters.-7vSLEQ2.js +0 -565
- package/dist/esm/chunks/font-picker.DisEoE8a.js +0 -181
- package/dist/esm/chunks/formatDate.CWN6IFKq.js +0 -952
- package/dist/esm/chunks/formatNumber.Bm2k8QrT.js +0 -10
- package/dist/esm/chunks/generating-star.DMDPNTaM.js +0 -1501
- package/dist/esm/chunks/generating-star.DMDPNTaM.js.map +0 -1
- package/dist/esm/chunks/header-nav.b4hvOsKc.js +0 -197
- package/dist/esm/chunks/header-pane.BV7xKJXV.js +0 -559
- package/dist/esm/chunks/hooks.m-nIJmio.js +0 -337
- package/dist/esm/chunks/hooks.m-nIJmio.js.map +0 -1
- package/dist/esm/chunks/index.BqibIWDw.js +0 -137
- package/dist/esm/chunks/input-with-tags.tg2nhPFv.js +0 -110
- package/dist/esm/chunks/logo.D5BMN6Db.js +0 -191
- package/dist/esm/chunks/primary.CtiRZbqq.js +0 -18
- package/dist/esm/chunks/review-list.BtSnfpSc.js +0 -117
- package/dist/esm/chunks/sidebar.PfXKnt9J.js +0 -803
- package/dist/esm/chunks/sidebar.PfXKnt9J.js.map +0 -1
- package/dist/esm/chunks/simpleSelect.B1rktKkt.js +0 -23
- package/dist/esm/chunks/status-badge.eFJ1PYeb.js +0 -18
- package/dist/esm/chunks/trend-value.COSukPwk.js +0 -51
- package/dist/esm/chunks/two-level-combobox.BXs2z9u5.js +0 -132
- package/dist/esm/chunks/useChartDateFormatters.DS9ASgFO.js +0 -11
- 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
|