@brainfish-ai/components 0.26.1 → 0.27.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/alert-dialog.d.ts +6 -2
- package/dist/button.d.ts +4 -2
- package/dist/confirm-dialog.d.ts +3 -1
- package/dist/convos.d.ts +3 -0
- package/dist/esm/chunks/{ChatSearch.Cqo4WF3n.js → ChatSearch.BAv9fTWD.js} +11 -10
- package/dist/esm/chunks/{ChatSearch.Cqo4WF3n.js.map → ChatSearch.BAv9fTWD.js.map} +1 -1
- package/dist/esm/chunks/{Conversation.UZ5rx7_0.js → Conversation.DRNYzOpI.js} +2 -2
- package/dist/esm/chunks/{Conversation.UZ5rx7_0.js.map → Conversation.DRNYzOpI.js.map} +1 -1
- package/dist/esm/chunks/{FormattedMessage.D9xA6QsH.js → FormattedMessage.XNMN23hm.js} +2 -2
- package/dist/esm/chunks/{FormattedMessage.D9xA6QsH.js.map → FormattedMessage.XNMN23hm.js.map} +1 -1
- package/dist/esm/chunks/button.D_2SonNs.js +3 -0
- package/dist/esm/chunks/button.D_2SonNs.js.map +1 -0
- package/dist/esm/chunks/{combobox.CxaWbDm9.js → combobox.MyoPH18G.js} +2 -2
- package/dist/esm/chunks/{combobox.CxaWbDm9.js.map → combobox.MyoPH18G.js.map} +1 -1
- package/dist/esm/chunks/{date-picker.Bhplnvxn.js → date-picker.C2VT_rZ9.js} +2 -2
- package/dist/esm/chunks/{date-picker.Bhplnvxn.js.map → date-picker.C2VT_rZ9.js.map} +1 -1
- package/dist/esm/chunks/{feedback.BXKvlNz1.js → feedback.CLMuSvsg.js} +2 -2
- package/dist/esm/chunks/{feedback.BXKvlNz1.js.map → feedback.CLMuSvsg.js.map} +1 -1
- package/dist/esm/chunks/{file-upload-status.4ukNFyi2.js → file-upload-status.D8RhMcbO.js} +2 -2
- package/dist/esm/chunks/{file-upload-status.4ukNFyi2.js.map → file-upload-status.D8RhMcbO.js.map} +1 -1
- package/dist/esm/chunks/{filters.ita3UAnO.js → filters.BHp3ukNW.js} +2 -2
- package/dist/esm/chunks/{filters.ita3UAnO.js.map → filters.BHp3ukNW.js.map} +1 -1
- package/dist/esm/chunks/{font-picker.BwEWBowG.js → font-picker.B9GPXyK4.js} +2 -2
- package/dist/esm/chunks/{font-picker.BwEWBowG.js.map → font-picker.B9GPXyK4.js.map} +1 -1
- package/dist/esm/chunks/{header-nav.B4IJjted.js → header-nav.C9r4A44a.js} +2 -2
- package/dist/esm/chunks/{header-nav.B4IJjted.js.map → header-nav.C9r4A44a.js.map} +1 -1
- package/dist/esm/chunks/{header-pane.C1RWesOW.js → header-pane.D41xPXl3.js} +2 -2
- package/dist/esm/chunks/{header-pane.C1RWesOW.js.map → header-pane.D41xPXl3.js.map} +1 -1
- package/dist/esm/chunks/{input-with-tags.DrDDPxse.js → input-with-tags.DLv9e0XI.js} +2 -2
- package/dist/esm/chunks/{input-with-tags.DrDDPxse.js.map → input-with-tags.DLv9e0XI.js.map} +1 -1
- package/dist/esm/chunks/{logo.CketsPBx.js → logo.CGKfN1U6.js} +2 -2
- package/dist/esm/chunks/{logo.CketsPBx.js.map → logo.CGKfN1U6.js.map} +1 -1
- package/dist/esm/chunks/{review-list.qvxeqG9l.js → review-list.Cn5bw-lP.js} +4 -4
- package/dist/esm/chunks/review-list.Cn5bw-lP.js.map +1 -0
- package/dist/esm/chunks/{sidebar.IcJADYLR.js → sidebar.DsEgGwJU.js} +2 -2
- package/dist/esm/chunks/{sidebar.IcJADYLR.js.map → sidebar.DsEgGwJU.js.map} +1 -1
- package/dist/esm/chunks/status-badge.BLB0pWDn.js +3 -0
- package/dist/esm/chunks/status-badge.BLB0pWDn.js.map +1 -0
- package/dist/esm/chunks/{two-level-combobox.Bv2OQgjh.js → two-level-combobox.DJYP--W9.js} +2 -2
- package/dist/esm/chunks/{two-level-combobox.Bv2OQgjh.js.map → two-level-combobox.DJYP--W9.js.map} +1 -1
- package/dist/esm/components/accordion.js +1 -0
- package/dist/esm/components/alert-dialog.js +1 -0
- package/dist/esm/components/alert.js +1 -0
- package/dist/esm/components/article-suggestions-banner.js +2 -2
- package/dist/esm/components/article-suggestions-banner.js.map +1 -1
- package/dist/esm/components/avatar.js +1 -0
- package/dist/esm/components/badge.js +1 -0
- package/dist/esm/components/breadcrumb.js +1 -0
- package/dist/esm/components/button-group.js +1 -0
- package/dist/esm/components/button.js +1 -0
- package/dist/esm/components/calendar.js +1 -0
- package/dist/esm/components/card.js +1 -0
- package/dist/esm/components/chat-search.js +1 -1
- package/dist/esm/components/collapsible.js +1 -0
- package/dist/esm/components/combobox.js +1 -1
- package/dist/esm/components/command.js +1 -0
- package/dist/esm/components/conversation.js +1 -1
- package/dist/esm/components/convos.js +4 -4
- package/dist/esm/components/convos.js.map +1 -1
- package/dist/esm/components/date-picker.js +1 -1
- package/dist/esm/components/dialog.js +1 -0
- package/dist/esm/components/div-button.js +1 -0
- package/dist/esm/components/dropdown-menu.js +1 -0
- 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/icon.js +1 -0
- package/dist/esm/components/input-with-tags.js +1 -1
- package/dist/esm/components/input.js +1 -0
- package/dist/esm/components/item.js +1 -0
- package/dist/esm/components/label.js +1 -0
- package/dist/esm/components/logo.js +1 -1
- package/dist/esm/components/markdown.js +1 -1
- package/dist/esm/components/popover.js +1 -0
- package/dist/esm/components/progress.js +1 -0
- package/dist/esm/components/scroll-area.js +1 -0
- package/dist/esm/components/separator.js +1 -0
- package/dist/esm/components/sheet.js +1 -0
- package/dist/esm/components/spinner.js +1 -0
- package/dist/esm/components/switch.js +1 -0
- package/dist/esm/components/table.js +1 -0
- package/dist/esm/components/textarea.js +1 -0
- package/dist/esm/components/tooltip.js +1 -0
- package/dist/esm/components/two-level-combobox.js +1 -1
- package/dist/esm/components/ui/alert-dialog.js +1 -1
- package/dist/esm/components/ui/button.js +1 -1
- package/dist/esm/components/ui/combobox.js +1 -1
- package/dist/esm/components/ui/sheet.js +1 -1
- package/dist/esm/global.css +1 -1
- package/dist/esm/index.js +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/scenes/knowledge-review.js +10 -10
- package/dist/esm/scenes/knowledge-review.js.map +1 -1
- package/dist/index.d.ts +10 -4
- package/dist/stats.html +1 -1
- package/package.json +2 -2
- package/dist/esm/chunks/button.BYc5d6AZ.js +0 -3
- package/dist/esm/chunks/button.BYc5d6AZ.js.map +0 -1
- package/dist/esm/chunks/review-list.qvxeqG9l.js.map +0 -1
- package/dist/esm/chunks/status-badge.C-jt7Zs2.js +0 -3
- package/dist/esm/chunks/status-badge.C-jt7Zs2.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import*as e from"react";import{X as t,CaretUpDown as a,ArrowLeft as l,Spinner as s,Check as n}from"@phosphor-icons/react";import{c as m}from"./utils.C6Qu-kwd.js";import{B as c}from"./button.
|
|
1
|
+
import*as e from"react";import{X as t,CaretUpDown as a,ArrowLeft as l,Spinner as s,Check as n}from"@phosphor-icons/react";import{c as m}from"./utils.C6Qu-kwd.js";import{B as c}from"./button.D_2SonNs.js";import{Command as r,CommandInput as i,CommandList as o,CommandEmpty as u,CommandGroup as d,CommandItem as p}from"../components/ui/command.js";import{Popover as f,PopoverTrigger as E,PopoverContent as v}from"../components/ui/popover.js";import{DivButton as N}from"../components/ui/div-button.js";function b({firstLevelItems:b,fetchSecondLevelItems:g,onSelectionChange:x,firstLevelLabel:h="First Level",secondLevelLabel:y="Second Level",firstLevelPlaceholder:S="Select first level...",className:L,debugMode:w=!1,displayLabel:C=!0}){const[z,k]=e.useState(!1),[$,j]=e.useState("first"),[I,P]=e.useState(null),[V,B]=e.useState(null),[F,M]=e.useState([]),[O,T]=e.useState(!1),[q,A]=e.useState(""),D=e=>{e.stopPropagation(),P(null),B(null),M([]),j("first"),x?.(null,null)};/* @__PURE__ */
|
|
2
2
|
return e.createElement("div",{className:m("space-y-4",L)},/* @__PURE__ */e.createElement("div",{className:"space-y-2"},C&&/* @__PURE__ */e.createElement("label",{className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},V?`${h} & ${y}`:I?`Select ${y}`:`Select ${h}`),/* @__PURE__ */e.createElement(f,{open:z,onOpenChange:e=>{k(e),e&&!I?j("first"):e&&I&&j("second")}},/* @__PURE__ */e.createElement(E,{asChild:!0},/* @__PURE__ */e.createElement(c,{variant:"outline",role:"combobox","aria-expanded":z,className:"w-full justify-between bg-transparent"},
|
|
3
3
|
/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-2 flex-1 min-w-0"},V?/* @__PURE__ */e.createElement("div",{className:"truncate flex items-center gap-1"},I.label," → ",V.label):I?/* @__PURE__ */e.createElement("div",{className:"truncate flex items-center"},I.label):/* @__PURE__ */e.createElement("span",{className:"truncate"},S)),
|
|
4
4
|
/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-1 shrink-0"},(I||V)&&
|
|
5
5
|
/* @__PURE__ */e.createElement(N,{variant:"ghost",size:"sm",className:"size-6 p-0 hover:bg-muted rounded-sm",onClick:D,"aria-label":"Clear selection"},
|
|
6
6
|
/* @__PURE__ */e.createElement(t,{className:"size-3"})),/* @__PURE__ */e.createElement(a,{className:"size-4 shrink-0 opacity-50"})))),/* @__PURE__ */e.createElement(v,{className:"w-full p-0",align:"start"},/* @__PURE__ */e.createElement(r,null,"second"===$&&I&&/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-2 p-2 border-b"},/* @__PURE__ */e.createElement(c,{variant:"ghost",size:"sm",onClick:()=>{j("first"),A("")},className:"h-8 w-8 p-0 shrink-0"},/* @__PURE__ */e.createElement(l,{className:"size-4"})),/* @__PURE__ */e.createElement("div",{className:"text-sm font-medium truncate flex-1 min-w-0 flex items-center"},I.label),/* @__PURE__ */e.createElement(N,{variant:"ghost",size:"sm",className:"size-6 p-0 ml-auto hover:bg-muted rounded-sm shrink-0",onClick:D,"aria-label":"Clear selection"},
|
|
7
7
|
/* @__PURE__ */e.createElement(t,{className:"size-3"})),O&&/* @__PURE__ */e.createElement(s,{className:"size-4 animate-spin text-muted-foreground shrink-0"})),/* @__PURE__ */e.createElement(i,{value:q,onValueChange:A,placeholder:"first"===$?`Search ${h.toLowerCase()}...`:`Search ${y.toLowerCase()}...`}),/* @__PURE__ */e.createElement(o,null,/* @__PURE__ */e.createElement(u,null,"first"===$?`No ${h.toLowerCase()} found.`:`No ${y.toLowerCase()} found.`),"first"===$&&/* @__PURE__ */e.createElement(d,null,b.map(t=>/* @__PURE__ */e.createElement(p,{key:t.value,value:t.label,onSelect:()=>(async e=>{P(e),B(null),T(!0),j("second"),A("");try{const t=await g(e.value);M(t)}catch(t){console.warn(t),M([])}finally{T(!1)}x?.(e,null)})(t)},/* @__PURE__ */e.createElement("span",{className:"flex items-center gap-2"},t.icon,t.label),/* @__PURE__ */e.createElement(n,{className:m("ml-2 size-4",I?.value===t.value?"opacity-100":"opacity-0")})))),"second"===$&&I&&/* @__PURE__ */e.createElement(d,null,O?/* @__PURE__ */e.createElement("div",{className:"flex items-center justify-center py-6"},/* @__PURE__ */e.createElement(s,{className:"size-4 animate-spin text-muted-foreground mr-2"}),/* @__PURE__ */e.createElement("span",{className:"text-sm text-muted-foreground"},"Loading ",y.toLowerCase(),"...")):F.map(t=>/* @__PURE__ */e.createElement(p,{key:t.value,value:t.label,onSelect:()=>(e=>{B(e),k(!1),x?.(I,e)})(t)},/* @__PURE__ */e.createElement("span",{className:"flex items-center gap-2"},t.icon,t.label),/* @__PURE__ */e.createElement(n,{className:m("ml-2 size-4",V?.value===t.value?"opacity-100":"opacity-0")}))))))))),(I||V)&&w&&/* @__PURE__ */e.createElement("div",{className:"mt-6 p-4 bg-muted/50 rounded-lg space-y-2"},/* @__PURE__ */e.createElement("h3",{className:"font-medium text-sm"},"Selected Values:"),I&&/* @__PURE__ */e.createElement("div",{className:"text-sm text-muted-foreground flex items-center gap-1"},/* @__PURE__ */e.createElement("span",{className:"font-medium"},h,":"),/* @__PURE__ */e.createElement("div",{className:"flex items-center"},I.label)),V&&/* @__PURE__ */e.createElement("div",{className:"text-sm text-muted-foreground flex items-center gap-1"},/* @__PURE__ */e.createElement("span",{className:"font-medium"},y,":"),/* @__PURE__ */e.createElement("div",{className:"flex items-center"},V.label))))}export{b as T};
|
|
8
|
-
//# sourceMappingURL=two-level-combobox.
|
|
8
|
+
//# sourceMappingURL=two-level-combobox.DJYP--W9.js.map
|
package/dist/esm/chunks/{two-level-combobox.Bv2OQgjh.js.map → two-level-combobox.DJYP--W9.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-level-combobox.Bv2OQgjh.js","sources":["../../../src/components/two-level-combobox/two-level-combobox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Check, CaretUpDown, Spinner, ArrowLeft, X } from '@phosphor-icons/react';\n\nimport { ComboboxItem } from '../combobox';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { DivButton } from '@/components/ui/div-button';\nexport interface TwoLevelComboboxProps {\n firstLevelItems: ComboboxItem[];\n fetchSecondLevelItems: (firstLevelId: string) => Promise<ComboboxItem[]>;\n onSelectionChange?: (firstLevel: ComboboxItem | null, secondLevel: ComboboxItem | null) => void;\n firstLevelLabel?: string;\n secondLevelLabel?: string;\n firstLevelPlaceholder?: string;\n secondLevelPlaceholder?: string;\n className?: string;\n debugMode?: boolean;\n displayLabel?: boolean;\n}\n\nexport function TwoLevelCombobox({\n firstLevelItems,\n fetchSecondLevelItems,\n onSelectionChange,\n firstLevelLabel = 'First Level',\n secondLevelLabel = 'Second Level',\n firstLevelPlaceholder = 'Select first level...',\n className,\n debugMode = false,\n displayLabel = true,\n}: TwoLevelComboboxProps) {\n const [open, setOpen] = React.useState(false);\n const [view, setView] = React.useState<'first' | 'second'>('first');\n const [selectedFirstLevel, setSelectedFirstLevel] = React.useState<ComboboxItem | null>(null);\n const [selectedSecondLevel, setSelectedSecondLevel] = React.useState<ComboboxItem | null>(null);\n const [secondLevelItems, setSecondLevelItems] = React.useState<ComboboxItem[]>([]);\n const [isLoadingSecondLevel, setIsLoadingSecondLevel] = React.useState(false);\n const [searchValue, setSearchValue] = React.useState('');\n\n const handleFirstLevelSelect = async (item: ComboboxItem) => {\n setSelectedFirstLevel(item);\n setSelectedSecondLevel(null); // Reset second level when first level changes\n setIsLoadingSecondLevel(true);\n setView('second');\n setSearchValue(''); // Clear search input when switching to second level\n\n try {\n const fetchedItems = await fetchSecondLevelItems(item.value);\n setSecondLevelItems(fetchedItems);\n } catch (error) {\n console.warn(error);\n setSecondLevelItems([]);\n } finally {\n setIsLoadingSecondLevel(false);\n }\n\n onSelectionChange?.(item, null);\n };\n\n const handleSecondLevelSelect = (item: ComboboxItem) => {\n setSelectedSecondLevel(item);\n setOpen(false);\n onSelectionChange?.(selectedFirstLevel, item);\n };\n\n const handleBackToFirstLevel = () => {\n setView('first');\n setSearchValue(''); // Clear search input when going back to first level\n };\n\n const handleOpenChange = (isOpen: boolean) => {\n setOpen(isOpen);\n if (isOpen && !selectedFirstLevel) {\n setView('first');\n } else if (isOpen && selectedFirstLevel) {\n setView('second');\n }\n };\n\n const handleClearSelection = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent opening the popover\n setSelectedFirstLevel(null);\n setSelectedSecondLevel(null);\n setSecondLevelItems([]);\n setView('first');\n onSelectionChange?.(null, null);\n };\n\n const getLabel = () => {\n if (selectedSecondLevel) return `${firstLevelLabel} & ${secondLevelLabel}`;\n if (selectedFirstLevel) return `Select ${secondLevelLabel}`;\n\n return `Select ${firstLevelLabel}`;\n };\n\n return (\n <div className={cn('space-y-4', className)}>\n <div className=\"space-y-2\">\n {displayLabel && (\n <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {getLabel()}\n </label>\n )}\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n className=\"w-full justify-between bg-transparent\"\n >\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n {selectedSecondLevel ? (\n <div className=\"truncate flex items-center gap-1\">\n {selectedFirstLevel!.label} → {selectedSecondLevel.label}\n </div>\n ) : selectedFirstLevel ? (\n <div className=\"truncate flex items-center\">{selectedFirstLevel.label}</div>\n ) : (\n <span className=\"truncate\">{firstLevelPlaceholder}</span>\n )}\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n {(selectedFirstLevel || selectedSecondLevel) && (\n // Render button as div to prevent button within button error\n <DivButton\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-6 p-0 hover:bg-muted rounded-sm\"\n onClick={handleClearSelection}\n aria-label=\"Clear selection\"\n >\n <X className=\"size-3\" />\n </DivButton>\n )}\n <CaretUpDown className=\"size-4 shrink-0 opacity-50\" />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-full p-0\" align=\"start\">\n <Command>\n {view === 'second' && selectedFirstLevel && (\n <div className=\"flex items-center gap-2 p-2 border-b\">\n <Button variant=\"ghost\" size=\"sm\" onClick={handleBackToFirstLevel} className=\"h-8 w-8 p-0 shrink-0\">\n <ArrowLeft className=\"size-4\" />\n </Button>\n <div className=\"text-sm font-medium truncate flex-1 min-w-0 flex items-center\">\n {selectedFirstLevel.label}\n </div>\n {/* Render button as div to prevent button within button error */}\n <DivButton\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-6 p-0 ml-auto hover:bg-muted rounded-sm shrink-0\"\n onClick={handleClearSelection}\n aria-label=\"Clear selection\"\n >\n <X className=\"size-3\" />\n </DivButton>\n {isLoadingSecondLevel && <Spinner className=\"size-4 animate-spin text-muted-foreground shrink-0\" />}\n </div>\n )}\n\n <CommandInput\n value={searchValue}\n onValueChange={setSearchValue}\n placeholder={\n view === 'first'\n ? `Search ${firstLevelLabel.toLowerCase()}...`\n : `Search ${secondLevelLabel.toLowerCase()}...`\n }\n />\n <CommandList>\n <CommandEmpty>\n {view === 'first'\n ? `No ${firstLevelLabel.toLowerCase()} found.`\n : `No ${secondLevelLabel.toLowerCase()} found.`}\n </CommandEmpty>\n\n {view === 'first' && (\n <CommandGroup>\n {firstLevelItems.map((item) => (\n <CommandItem key={item.value} value={item.label} onSelect={() => handleFirstLevelSelect(item)}>\n <span className=\"flex items-center gap-2\">\n {item.icon}\n {item.label}\n </span>\n <Check\n className={cn(\n 'ml-2 size-4',\n selectedFirstLevel?.value === item.value ? 'opacity-100' : 'opacity-0',\n )}\n />\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n\n {view === 'second' && selectedFirstLevel && (\n <CommandGroup>\n {isLoadingSecondLevel ? (\n <div className=\"flex items-center justify-center py-6\">\n <Spinner className=\"size-4 animate-spin text-muted-foreground mr-2\" />\n <span className=\"text-sm text-muted-foreground\">\n Loading {secondLevelLabel.toLowerCase()}...\n </span>\n </div>\n ) : (\n secondLevelItems.map((item) => (\n <CommandItem key={item.value} value={item.label} onSelect={() => handleSecondLevelSelect(item)}>\n <span className=\"flex items-center gap-2\">\n {item.icon}\n {item.label}\n </span>\n <Check\n className={cn(\n 'ml-2 size-4',\n selectedSecondLevel?.value === item.value ? 'opacity-100' : 'opacity-0',\n )}\n />\n </CommandItem>\n ))\n )}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n\n {(selectedFirstLevel || selectedSecondLevel) && debugMode && (\n <div className=\"mt-6 p-4 bg-muted/50 rounded-lg space-y-2\">\n <h3 className=\"font-medium text-sm\">Selected Values:</h3>\n {selectedFirstLevel && (\n <div className=\"text-sm text-muted-foreground flex items-center gap-1\">\n <span className=\"font-medium\">{firstLevelLabel}:</span>\n <div className=\"flex items-center\">{selectedFirstLevel.label}</div>\n </div>\n )}\n {selectedSecondLevel && (\n <div className=\"text-sm text-muted-foreground flex items-center gap-1\">\n <span className=\"font-medium\">{secondLevelLabel}:</span>\n <div className=\"flex items-center\">{selectedSecondLevel.label}</div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"names":["TwoLevelCombobox","firstLevelItems","fetchSecondLevelItems","onSelectionChange","firstLevelLabel","secondLevelLabel","firstLevelPlaceholder","className","debugMode","displayLabel","open","setOpen","React","useState","view","setView","selectedFirstLevel","setSelectedFirstLevel","selectedSecondLevel","setSelectedSecondLevel","secondLevelItems","setSecondLevelItems","isLoadingSecondLevel","setIsLoadingSecondLevel","searchValue","setSearchValue","handleClearSelection","e","stopPropagation","createElement","cn","Popover","onOpenChange","isOpen","PopoverTrigger","asChild","Button","variant","role","label","DivButton","size","onClick","X","CaretUpDown","PopoverContent","align","Command","ArrowLeft","Spinner","CommandInput","value","onValueChange","placeholder","toLowerCase","CommandList","CommandEmpty","CommandGroup","map","item","CommandItem","key","onSelect","async","fetchedItems","error","console","warn","handleFirstLevelSelect","icon","Check","handleSecondLevelSelect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"two-level-combobox.DJYP--W9.js","sources":["../../../src/components/two-level-combobox/two-level-combobox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Check, CaretUpDown, Spinner, ArrowLeft, X } from '@phosphor-icons/react';\n\nimport { ComboboxItem } from '../combobox';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { DivButton } from '@/components/ui/div-button';\nexport interface TwoLevelComboboxProps {\n firstLevelItems: ComboboxItem[];\n fetchSecondLevelItems: (firstLevelId: string) => Promise<ComboboxItem[]>;\n onSelectionChange?: (firstLevel: ComboboxItem | null, secondLevel: ComboboxItem | null) => void;\n firstLevelLabel?: string;\n secondLevelLabel?: string;\n firstLevelPlaceholder?: string;\n secondLevelPlaceholder?: string;\n className?: string;\n debugMode?: boolean;\n displayLabel?: boolean;\n}\n\nexport function TwoLevelCombobox({\n firstLevelItems,\n fetchSecondLevelItems,\n onSelectionChange,\n firstLevelLabel = 'First Level',\n secondLevelLabel = 'Second Level',\n firstLevelPlaceholder = 'Select first level...',\n className,\n debugMode = false,\n displayLabel = true,\n}: TwoLevelComboboxProps) {\n const [open, setOpen] = React.useState(false);\n const [view, setView] = React.useState<'first' | 'second'>('first');\n const [selectedFirstLevel, setSelectedFirstLevel] = React.useState<ComboboxItem | null>(null);\n const [selectedSecondLevel, setSelectedSecondLevel] = React.useState<ComboboxItem | null>(null);\n const [secondLevelItems, setSecondLevelItems] = React.useState<ComboboxItem[]>([]);\n const [isLoadingSecondLevel, setIsLoadingSecondLevel] = React.useState(false);\n const [searchValue, setSearchValue] = React.useState('');\n\n const handleFirstLevelSelect = async (item: ComboboxItem) => {\n setSelectedFirstLevel(item);\n setSelectedSecondLevel(null); // Reset second level when first level changes\n setIsLoadingSecondLevel(true);\n setView('second');\n setSearchValue(''); // Clear search input when switching to second level\n\n try {\n const fetchedItems = await fetchSecondLevelItems(item.value);\n setSecondLevelItems(fetchedItems);\n } catch (error) {\n console.warn(error);\n setSecondLevelItems([]);\n } finally {\n setIsLoadingSecondLevel(false);\n }\n\n onSelectionChange?.(item, null);\n };\n\n const handleSecondLevelSelect = (item: ComboboxItem) => {\n setSelectedSecondLevel(item);\n setOpen(false);\n onSelectionChange?.(selectedFirstLevel, item);\n };\n\n const handleBackToFirstLevel = () => {\n setView('first');\n setSearchValue(''); // Clear search input when going back to first level\n };\n\n const handleOpenChange = (isOpen: boolean) => {\n setOpen(isOpen);\n if (isOpen && !selectedFirstLevel) {\n setView('first');\n } else if (isOpen && selectedFirstLevel) {\n setView('second');\n }\n };\n\n const handleClearSelection = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent opening the popover\n setSelectedFirstLevel(null);\n setSelectedSecondLevel(null);\n setSecondLevelItems([]);\n setView('first');\n onSelectionChange?.(null, null);\n };\n\n const getLabel = () => {\n if (selectedSecondLevel) return `${firstLevelLabel} & ${secondLevelLabel}`;\n if (selectedFirstLevel) return `Select ${secondLevelLabel}`;\n\n return `Select ${firstLevelLabel}`;\n };\n\n return (\n <div className={cn('space-y-4', className)}>\n <div className=\"space-y-2\">\n {displayLabel && (\n <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {getLabel()}\n </label>\n )}\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n className=\"w-full justify-between bg-transparent\"\n >\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n {selectedSecondLevel ? (\n <div className=\"truncate flex items-center gap-1\">\n {selectedFirstLevel!.label} → {selectedSecondLevel.label}\n </div>\n ) : selectedFirstLevel ? (\n <div className=\"truncate flex items-center\">{selectedFirstLevel.label}</div>\n ) : (\n <span className=\"truncate\">{firstLevelPlaceholder}</span>\n )}\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n {(selectedFirstLevel || selectedSecondLevel) && (\n // Render button as div to prevent button within button error\n <DivButton\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-6 p-0 hover:bg-muted rounded-sm\"\n onClick={handleClearSelection}\n aria-label=\"Clear selection\"\n >\n <X className=\"size-3\" />\n </DivButton>\n )}\n <CaretUpDown className=\"size-4 shrink-0 opacity-50\" />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-full p-0\" align=\"start\">\n <Command>\n {view === 'second' && selectedFirstLevel && (\n <div className=\"flex items-center gap-2 p-2 border-b\">\n <Button variant=\"ghost\" size=\"sm\" onClick={handleBackToFirstLevel} className=\"h-8 w-8 p-0 shrink-0\">\n <ArrowLeft className=\"size-4\" />\n </Button>\n <div className=\"text-sm font-medium truncate flex-1 min-w-0 flex items-center\">\n {selectedFirstLevel.label}\n </div>\n {/* Render button as div to prevent button within button error */}\n <DivButton\n variant=\"ghost\"\n size=\"sm\"\n className=\"size-6 p-0 ml-auto hover:bg-muted rounded-sm shrink-0\"\n onClick={handleClearSelection}\n aria-label=\"Clear selection\"\n >\n <X className=\"size-3\" />\n </DivButton>\n {isLoadingSecondLevel && <Spinner className=\"size-4 animate-spin text-muted-foreground shrink-0\" />}\n </div>\n )}\n\n <CommandInput\n value={searchValue}\n onValueChange={setSearchValue}\n placeholder={\n view === 'first'\n ? `Search ${firstLevelLabel.toLowerCase()}...`\n : `Search ${secondLevelLabel.toLowerCase()}...`\n }\n />\n <CommandList>\n <CommandEmpty>\n {view === 'first'\n ? `No ${firstLevelLabel.toLowerCase()} found.`\n : `No ${secondLevelLabel.toLowerCase()} found.`}\n </CommandEmpty>\n\n {view === 'first' && (\n <CommandGroup>\n {firstLevelItems.map((item) => (\n <CommandItem key={item.value} value={item.label} onSelect={() => handleFirstLevelSelect(item)}>\n <span className=\"flex items-center gap-2\">\n {item.icon}\n {item.label}\n </span>\n <Check\n className={cn(\n 'ml-2 size-4',\n selectedFirstLevel?.value === item.value ? 'opacity-100' : 'opacity-0',\n )}\n />\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n\n {view === 'second' && selectedFirstLevel && (\n <CommandGroup>\n {isLoadingSecondLevel ? (\n <div className=\"flex items-center justify-center py-6\">\n <Spinner className=\"size-4 animate-spin text-muted-foreground mr-2\" />\n <span className=\"text-sm text-muted-foreground\">\n Loading {secondLevelLabel.toLowerCase()}...\n </span>\n </div>\n ) : (\n secondLevelItems.map((item) => (\n <CommandItem key={item.value} value={item.label} onSelect={() => handleSecondLevelSelect(item)}>\n <span className=\"flex items-center gap-2\">\n {item.icon}\n {item.label}\n </span>\n <Check\n className={cn(\n 'ml-2 size-4',\n selectedSecondLevel?.value === item.value ? 'opacity-100' : 'opacity-0',\n )}\n />\n </CommandItem>\n ))\n )}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n\n {(selectedFirstLevel || selectedSecondLevel) && debugMode && (\n <div className=\"mt-6 p-4 bg-muted/50 rounded-lg space-y-2\">\n <h3 className=\"font-medium text-sm\">Selected Values:</h3>\n {selectedFirstLevel && (\n <div className=\"text-sm text-muted-foreground flex items-center gap-1\">\n <span className=\"font-medium\">{firstLevelLabel}:</span>\n <div className=\"flex items-center\">{selectedFirstLevel.label}</div>\n </div>\n )}\n {selectedSecondLevel && (\n <div className=\"text-sm text-muted-foreground flex items-center gap-1\">\n <span className=\"font-medium\">{secondLevelLabel}:</span>\n <div className=\"flex items-center\">{selectedSecondLevel.label}</div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"names":["TwoLevelCombobox","firstLevelItems","fetchSecondLevelItems","onSelectionChange","firstLevelLabel","secondLevelLabel","firstLevelPlaceholder","className","debugMode","displayLabel","open","setOpen","React","useState","view","setView","selectedFirstLevel","setSelectedFirstLevel","selectedSecondLevel","setSelectedSecondLevel","secondLevelItems","setSecondLevelItems","isLoadingSecondLevel","setIsLoadingSecondLevel","searchValue","setSearchValue","handleClearSelection","e","stopPropagation","createElement","cn","Popover","onOpenChange","isOpen","PopoverTrigger","asChild","Button","variant","role","label","DivButton","size","onClick","X","CaretUpDown","PopoverContent","align","Command","ArrowLeft","Spinner","CommandInput","value","onValueChange","placeholder","toLowerCase","CommandList","CommandEmpty","CommandGroup","map","item","CommandItem","key","onSelect","async","fetchedItems","error","console","warn","handleFirstLevelSelect","icon","Check","handleSecondLevelSelect"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/accordion.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/alert-dialog.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/alert.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{Sparkle as e,CaretDown as t,CaretUp as r}from"@phosphor-icons/react";import*as a from"react";import{B as l}from"../chunks/button.
|
|
2
|
-
return a.createElement("div",{ref:h,className:s("flex bg-blue-200 rounded-md border border-blue-600",
|
|
1
|
+
import{Sparkle as e,CaretDown as t,CaretUp as r}from"@phosphor-icons/react";import*as a from"react";import{B as l}from"../chunks/button.D_2SonNs.js";import{Tooltip as n,TooltipTrigger as o,TooltipContent as i}from"./ui/tooltip.js";import{ButtonGroup as c}from"./ui/button-group.js";import{c as s}from"../chunks/utils.C6Qu-kwd.js";const m=a.forwardRef(function({suggestionsCount:m,currentArticleIndex:u,totalArticles:d,onNextArticle:p,onPreviousArticle:b,onStartReviewSuggestions:f,onRejectAllSuggestions:g,onApproveAllSuggestions:E,className:v,...x},h){const k=u<d-1,N=u>0,A=u+1;/* @__PURE__ */
|
|
2
|
+
return a.createElement("div",{ref:h,className:s("flex bg-blue-200 rounded-md border border-blue-600",v),...x},/* @__PURE__ */a.createElement("div",{className:"flex-1 py-3 px-4 flex justify-between items-center"},/* @__PURE__ */a.createElement("div",{className:"flex items-center gap-2"},/* @__PURE__ */a.createElement(e,{size:32,weight:"fill",className:"text-blue-700"}),/* @__PURE__ */a.createElement("p",{className:"text-sm text-foreground"},function(e,t,r=`${t}s`){return`${e} ${1===e?t:r}`}(m,"way")," to level up this article.")),/* @__PURE__ */a.createElement(c,{orientation:"horizontal",rounded:!1,"aria-label":"Suggestion actions"},/* @__PURE__ */a.createElement(l,{variant:"link",onClick:f},"Start review"),/* @__PURE__ */a.createElement(l,{variant:"link",onClick:g},"Reject all"),/* @__PURE__ */a.createElement(l,{variant:"surface",elevation:"shadow",onClick:E},"Approve all"))),/* @__PURE__ */a.createElement("div",{className:"py-3 px-6 flex items-center bg-blue-300 border-l border-blue-700 gap-2 rounded-r-md"},/* @__PURE__ */a.createElement("p",{className:"text-sm text-foreground"},/* @__PURE__ */a.createElement("span",{"aria-hidden":"true"},A,"/",d),/* @__PURE__ */a.createElement("span",{className:"sr-only","aria-live":"polite"},"Article ",A," of ",d)),/* @__PURE__ */a.createElement(n,null,/* @__PURE__ */a.createElement(o,{asChild:!0},/* @__PURE__ */a.createElement(l,{variant:"link",size:"icon",disabled:!k,onClick:p,"aria-label":"Go to next article"},
|
|
3
3
|
/* @__PURE__ */a.createElement(t,{"aria-hidden":"true",weight:"bold"}))),/* @__PURE__ */a.createElement(i,{side:"bottom",bgColor:"--bfc-foreground",className:"text-background"},"Next Article")),/* @__PURE__ */a.createElement(n,null,/* @__PURE__ */a.createElement(o,{asChild:!0},/* @__PURE__ */a.createElement(l,{variant:"link",size:"icon",disabled:!N,onClick:b,"aria-label":"Go to previous article"},
|
|
4
4
|
/* @__PURE__ */a.createElement(r,{"aria-hidden":"true",weight:"bold"}))),/* @__PURE__ */a.createElement(i,{side:"top",bgColor:"--bfc-foreground",className:"text-background"},"Previous Article"))))});export{m as ArticleSuggestionsBanner};
|
|
5
5
|
//# sourceMappingURL=article-suggestions-banner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-suggestions-banner.js","sources":["../../../src/components/article-suggestions-banner/article-suggestions-banner.tsx","../../../src/lib/pluralise.ts"],"sourcesContent":["import { CaretDown, CaretUp, Sparkle } from '@phosphor-icons/react';\nimport * as React from 'react';\n\nimport { Button } from '../ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';\nimport { ButtonGroup } from '../ui/button-group';\n\nimport { cn } from '@/lib/utils';\nimport { pluralise } from '@/lib/pluralise';\n\nexport interface ArticleSuggestionsBannerProps extends React.HTMLAttributes<HTMLDivElement> {\n suggestionsCount: number;\n currentArticleIndex: number;\n totalArticles: number;\n onNextArticle: () => void;\n onPreviousArticle: () => void;\n onStartReviewSuggestions: () => void;\n onRejectAllSuggestions: () => void;\n onApproveAllSuggestions: () => void;\n}\n\nexport const ArticleSuggestionsBanner = React.forwardRef<HTMLDivElement, ArticleSuggestionsBannerProps>(\n function ArticleSuggestionsBanner(\n {\n suggestionsCount,\n currentArticleIndex,\n totalArticles,\n onNextArticle,\n onPreviousArticle,\n onStartReviewSuggestions,\n onRejectAllSuggestions,\n onApproveAllSuggestions,\n className,\n ...props\n },\n ref,\n ) {\n const hasNextArticle = currentArticleIndex < totalArticles - 1;\n const hasPreviousArticle = currentArticleIndex > 0;\n const currentArticle = currentArticleIndex + 1;\n\n return (\n <div ref={ref} className={cn('flex bg-blue-200 rounded-md border border-blue-600', className)} {...props}>\n <div className=\"flex-1 py-3 px-4 flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <Sparkle size={32} weight=\"fill\" className=\"text-blue-700\" />\n <p className=\"text-sm text-foreground\">{pluralise(suggestionsCount, 'way')} to level up this article.</p>\n </div>\n <ButtonGroup orientation=\"horizontal\" rounded={false} aria-label=\"Suggestion actions\">\n <Button variant=\"link\" onClick={onStartReviewSuggestions}>\n Start review\n </Button>\n <Button variant=\"link\" onClick={onRejectAllSuggestions}>\n Reject all\n </Button>\n <Button variant=\"
|
|
1
|
+
{"version":3,"file":"article-suggestions-banner.js","sources":["../../../src/components/article-suggestions-banner/article-suggestions-banner.tsx","../../../src/lib/pluralise.ts"],"sourcesContent":["import { CaretDown, CaretUp, Sparkle } from '@phosphor-icons/react';\nimport * as React from 'react';\n\nimport { Button } from '../ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';\nimport { ButtonGroup } from '../ui/button-group';\n\nimport { cn } from '@/lib/utils';\nimport { pluralise } from '@/lib/pluralise';\n\nexport interface ArticleSuggestionsBannerProps extends React.HTMLAttributes<HTMLDivElement> {\n suggestionsCount: number;\n currentArticleIndex: number;\n totalArticles: number;\n onNextArticle: () => void;\n onPreviousArticle: () => void;\n onStartReviewSuggestions: () => void;\n onRejectAllSuggestions: () => void;\n onApproveAllSuggestions: () => void;\n}\n\nexport const ArticleSuggestionsBanner = React.forwardRef<HTMLDivElement, ArticleSuggestionsBannerProps>(\n function ArticleSuggestionsBanner(\n {\n suggestionsCount,\n currentArticleIndex,\n totalArticles,\n onNextArticle,\n onPreviousArticle,\n onStartReviewSuggestions,\n onRejectAllSuggestions,\n onApproveAllSuggestions,\n className,\n ...props\n },\n ref,\n ) {\n const hasNextArticle = currentArticleIndex < totalArticles - 1;\n const hasPreviousArticle = currentArticleIndex > 0;\n const currentArticle = currentArticleIndex + 1;\n\n return (\n <div ref={ref} className={cn('flex bg-blue-200 rounded-md border border-blue-600', className)} {...props}>\n <div className=\"flex-1 py-3 px-4 flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <Sparkle size={32} weight=\"fill\" className=\"text-blue-700\" />\n <p className=\"text-sm text-foreground\">{pluralise(suggestionsCount, 'way')} to level up this article.</p>\n </div>\n <ButtonGroup orientation=\"horizontal\" rounded={false} aria-label=\"Suggestion actions\">\n <Button variant=\"link\" onClick={onStartReviewSuggestions}>\n Start review\n </Button>\n <Button variant=\"link\" onClick={onRejectAllSuggestions}>\n Reject all\n </Button>\n <Button variant=\"surface\" elevation=\"shadow\" onClick={onApproveAllSuggestions}>\n Approve all\n </Button>\n </ButtonGroup>\n </div>\n <div className=\"py-3 px-6 flex items-center bg-blue-300 border-l border-blue-700 gap-2 rounded-r-md\">\n <p className=\"text-sm text-foreground\">\n <span aria-hidden=\"true\">\n {currentArticle}/{totalArticles}\n </span>\n <span className=\"sr-only\" aria-live=\"polite\">\n Article {currentArticle} of {totalArticles}\n </span>\n </p>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"link\"\n size=\"icon\"\n disabled={!hasNextArticle}\n onClick={onNextArticle}\n aria-label=\"Go to next article\"\n >\n <CaretDown aria-hidden=\"true\" weight=\"bold\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" bgColor=\"--bfc-foreground\" className=\"text-background\">\n Next Article\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"link\"\n size=\"icon\"\n disabled={!hasPreviousArticle}\n onClick={onPreviousArticle}\n aria-label=\"Go to previous article\"\n >\n <CaretUp aria-hidden=\"true\" weight=\"bold\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\" bgColor=\"--bfc-foreground\" className=\"text-background\">\n Previous Article\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n );\n },\n);\n","export function pluralise(count: number, singular: string, plural = `${singular}s`) {\n const word = count === 1 ? singular : plural;\n\n return `${count} ${word}`;\n}\n"],"names":["ArticleSuggestionsBanner","React","forwardRef","suggestionsCount","currentArticleIndex","totalArticles","onNextArticle","onPreviousArticle","onStartReviewSuggestions","onRejectAllSuggestions","onApproveAllSuggestions","className","props","ref","hasNextArticle","hasPreviousArticle","currentArticle","createElement","cn","Sparkle","size","weight","count","singular","plural","pluralise","ButtonGroup","orientation","rounded","Button","variant","onClick","elevation","Tooltip","TooltipTrigger","asChild","disabled","CaretDown","TooltipContent","side","bgColor","CaretUp"],"mappings":"0UAqBO,MAAMA,EAA2BC,EAAMC,WAC5C,UACEC,iBACEA,EAAAC,oBACAA,EAAAC,cACAA,EAAAC,cACAA,EAAAC,kBACAA,EAAAC,yBACAA,EAAAC,uBACAA,EAAAC,wBACAA,EAAAC,UACAA,KACGC,GAELC,GAEA,MAAMC,EAAiBV,EAAsBC,EAAgB,EACvDU,EAAqBX,EAAsB,EAC3CY,EAAiBZ,EAAsB;AAE7C,OACEH,EAAAgB,cAAC,OAAIJ,MAAUF,UAAWO,EAAG,qDAAsDP,MAAgBC,kBACjGX,EAAAgB,cAAC,OAAIN,UAAU,qEACbV,EAAAgB,cAAC,MAAA,CAAIN,UAAU,0DACZQ,EAAA,CAAQC,KAAM,GAAIC,OAAO,OAAOV,UAAU,iCAC3CV,EAAAgB,cAAC,IAAA,CAAEN,UAAU,2BC9ClB,SAAmBW,EAAeC,EAAkBC,EAAS,GAAGD,MAGrE,MAAO,GAAGD,KAFa,IAAVA,EAAcC,EAAWC,GAGxC,CD0CoDC,CAAUtB,EAAkB,OAAO,8CAE7EF,EAAAgB,cAACS,GAAYC,YAAY,aAAaC,SAAS,EAAO,aAAW,qDAC9DC,EAAA,CAAOC,QAAQ,OAAOC,QAASvB,GAA0B,+BAG1DP,EAAAgB,cAACY,EAAA,CAAOC,QAAQ,OAAOC,QAAStB,GAAwB,6BAGxDR,EAAAgB,cAACY,EAAA,CAAOC,QAAQ,UAAUE,UAAU,SAASD,QAASrB,GAAyB,gDAKlF,MAAA,CAAIC,UAAU,sGACbV,EAAAgB,cAAC,IAAA,CAAEN,UAAU,0CACXV,EAAAgB,cAAC,OAAA,CAAK,cAAY,QACfD,EAAe,IAAEX,kBAEpBJ,EAAAgB,cAAC,OAAA,CAAKN,UAAU,UAAU,YAAU,UAAS,WAClCK,EAAe,OAAKX,mCAGhC4B,EAAA,oBACChC,EAAAgB,cAACiB,EAAA,CAAeC,SAAO,kBACrBlC,EAAAgB,cAACY,EAAA,CACCC,QAAQ,OACRV,KAAK,OACLgB,UAAWtB,EACXiB,QAASzB,EACT,aAAW;eAEXL,EAAAgB,cAACoB,EAAA,CAAU,cAAY,OAAOhB,OAAO,0BAGzCpB,EAAAgB,cAACqB,GAAeC,KAAK,SAASC,QAAQ,mBAAmB7B,UAAU,mBAAkB,gCAIvFV,EAAAgB,cAACgB,sBACChC,EAAAgB,cAACiB,EAAA,CAAeC,SAAO,kBACrBlC,EAAAgB,cAACY,EAAA,CACCC,QAAQ,OACRV,KAAK,OACLgB,UAAWrB,EACXgB,QAASxB,EACT,aAAW;eAEXN,EAAAgB,cAACwB,EAAA,CAAQ,cAAY,OAAOpB,OAAO,0BAGvCpB,EAAAgB,cAACqB,EAAA,CAAeC,KAAK,MAAMC,QAAQ,mBAAmB7B,UAAU,mBAAkB,sBAO5F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/avatar.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/badge.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/breadcrumb.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/button-group.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/button.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/calendar.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/card.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{C as ChatSearch,a as ChatSearchProvider,R as ResolvedConversationFooter,u as useChatSearch,b as useIsChatSearchDirty}from"../chunks/ChatSearch.
|
|
1
|
+
export{C as ChatSearch,a as ChatSearchProvider,R as ResolvedConversationFooter,u as useChatSearch,b as useIsChatSearchDirty}from"../chunks/ChatSearch.BAv9fTWD.js";
|
|
2
2
|
//# sourceMappingURL=chat-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/collapsible.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{C as Combobox}from"../chunks/combobox.
|
|
1
|
+
export{C as Combobox}from"../chunks/combobox.MyoPH18G.js";
|
|
2
2
|
//# sourceMappingURL=combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui/command.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{C as ContextPillBadge,a as Conversation,b as ConversationActions,c as ConversationInput,d as ConversationMessageAssistant,e as ConversationMessageUser,f as ConversationMessages,g as ConversationProvider,h as ConversationStatus,i as ConversationSuggestions,u as useConversation}from"../chunks/Conversation.
|
|
1
|
+
export{C as ContextPillBadge,a as Conversation,b as ConversationActions,c as ConversationInput,d as ConversationMessageAssistant,e as ConversationMessageUser,f as ConversationMessages,g as ConversationProvider,h as ConversationStatus,i as ConversationSuggestions,u as useConversation}from"../chunks/Conversation.DRNYzOpI.js";
|
|
2
2
|
//# sourceMappingURL=conversation.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import e,{useState as t,useEffect as a,useRef as s}from"react";import{S as r}from"../chunks/status-badge.
|
|
2
|
-
return e.createElement("div",{className:_("space-y-4",d)},/* @__PURE__ */e.createElement("div",{className:"flex gap-2 px-4"},B&&/* @__PURE__ */e.createElement(C,null,/* @__PURE__ */e.createElement(j,{asChild:!0},/* @__PURE__ */e.createElement(E,{variant:"
|
|
3
|
-
/* @__PURE__ */e.createElement(l,null)," ",!1===S?"Approved":"Approve")),/* @__PURE__ */e.createElement(A,null,/* @__PURE__ */e.createElement("span",null,"Approve the answer"))),L&&/* @__PURE__ */e.createElement(C,null,/* @__PURE__ */e.createElement(j,{asChild:!0},/* @__PURE__ */e.createElement(E,{variant:"
|
|
1
|
+
import e,{useState as t,useEffect as a,useRef as s}from"react";import{S as r}from"../chunks/status-badge.BLB0pWDn.js";import{ArrowSquareOut as n,CheckCircle as l,XCircle as c,ListMagnifyingGlass as i,UserCircle as m,Eye as o,UserFocus as d,Circle as u}from"@phosphor-icons/react";import{F as p}from"../chunks/FormattedMessage.XNMN23hm.js";import{Spinner as f}from"./ui/spinner.js";import{B as E}from"../chunks/button.D_2SonNs.js";import{useForm as g,Controller as h}from"react-hook-form";import{Select as v,SelectTrigger as N,SelectValue as x,SelectContent as b,SelectItem as w}from"./ui/select.js";import{Label as y}from"./ui/label.js";import{Textarea as k}from"./ui/textarea.js";import{Tooltip as C,TooltipTrigger as j,TooltipContent as A}from"./ui/tooltip.js";import{c as _}from"../chunks/utils.C6Qu-kwd.js";import{DivButton as O}from"./ui/div-button.js";import{ScrollArea as S}from"./ui/scroll-area.js";import{Sheet as z,SheetTrigger as D,SheetContent as F,SheetHeader as R,SheetTitle as M,SheetDescription as I}from"./ui/sheet.js";import{Badge as q}from"./ui/badge.js";import{G as P}from"../chunks/generating-star.BN9p_FDu.js";import{Item as T,ItemHeader as B,ItemTitle as L,ItemContent as U,ItemDescription as G}from"./ui/item.js";import{Accordion as K,AccordionItem as W,AccordionTrigger as H,AccordionContent as V}from"./ui/accordion.js";import{c as J,b as Q}from"../chunks/formatDate.D2xEZm8f.js";import{createId as $}from"@paralleldrive/cuid2";import{Table as X,TableHeader as Y,TableRow as Z,TableHead as ee,TableBody as te,TableCell as ae}from"./ui/table.js";import '../global.css';import '../convos.css';/* empty css */import"@radix-ui/react-avatar";import"clsx";import"tailwind-merge";import"@radix-ui/react-collapsible";import"./ui/dropdown-menu.js";import"./ui/switch.js";import"./ui/input.js";import"./ui/popover.js";import"./ui/command.js";import"./ui/dialog.js";import"./ui/card.js";import"./ui/progress.js";import"@radix-ui/react-accordion";import"./ui/alert-dialog.js";import"./ui/alert.js";import"./ui/button-group.js";import"./ui/calendar.js";import"./ui/icon.js";import"./ui/separator.js";import"../logos/microsoft-teams-logo.js";import"../logos/slack-logo.js";import"../logos/microsoft-logo.js";import{d as se}from"../chunks/dark.DuW7JuAk.js";function re({messageId:s}){const{fetchAnswerDiagnostics:r}=ye(),[l,c]=t(null),[i,m]=t(!0);return a(()=>{r(s).then(e=>c(e)).finally(()=>m(!1))},[r,s]),/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-4 px-4 flex-shrink-0 bg-surface","data-name":"discard-dialog-answer-diagnostic"},i?/* @__PURE__ */e.createElement("div",{className:"flex items-center justify-center h-full"},/* @__PURE__ */e.createElement(f,null)):/* @__PURE__ */e.createElement(e.Fragment,null,l&&/* @__PURE__ */e.createElement(e.Fragment,null,/* @__PURE__ */e.createElement("dl",{className:"grid grid-cols-[1fr_2fr] grid-rows-2 gap-5"},/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-1"},/* @__PURE__ */e.createElement("dt",{className:"heading-xs"},"Confidence"),/* @__PURE__ */e.createElement("dd",{className:"text-sm"},l.confidence_score)),l.answer_generation_type&&/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-1"},/* @__PURE__ */e.createElement("dt",{className:"heading-xs"},"Answer Type"),/* @__PURE__ */e.createElement("dd",{className:"text-sm"},l.answer_generation_type)),l.query_context_relevance&&/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-1"},/* @__PURE__ */e.createElement("dt",{className:"heading-xs"},"Relevance"),/* @__PURE__ */e.createElement("dd",{className:"text-sm"},l.query_context_relevance)),l.context_sufficiency&&/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-1"},/* @__PURE__ */e.createElement("dt",{className:"heading-xs"},"Context"),/* @__PURE__ */e.createElement("dd",{className:"text-sm"},l.context_sufficiency))),l.confidence_justification&&/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-2","data-name":"diagnostic-justification"},/* @__PURE__ */e.createElement("span",{className:"heading-xs"},"Justification"),/* @__PURE__ */e.createElement("p",{className:"text-sm my-0"},l.confidence_justification)),l.evidence_from_context&&l.evidence_from_context.length>0&&/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-2","data-name":"diagnostic-evidence"},/* @__PURE__ */e.createElement("span",{className:"heading-xs"},"Evidence (from Knowledge Base)"),l.evidence_from_context.map((t,a)=>/* @__PURE__ */e.createElement("div",{key:a,className:"flex flex-col gap-1"},t.supporting_quote&&/* @__PURE__ */e.createElement("p",{className:"text-sm my-0"},t.supporting_quote),t.url&&/* @__PURE__ */e.createElement(E,{variant:"link",size:"sm",className:"flex gap-1 text-sm self-end items-center",asChild:!0},/* @__PURE__ */e.createElement("a",{href:t.url,target:"_blank",rel:"noopener noreferrer"},/* @__PURE__ */e.createElement("span",null,"Source"),/* @__PURE__ */e.createElement(n,{size:16})))))))))}var ne=/* @__PURE__ */(e=>(e.INCORRECT_ANSWER="incorrect_answer",e.HALLUCINATED_ANSWER="hallucinated_answer",e.OVERSHARING="oversharing",e.WRONG_ARTICLE_SURFACED="wrong_article_surfaced",e.OTHER="other",e))(ne||{});const le={incorrect_answer:"Incorrect answer",hallucinated_answer:"Hallucinated answer",oversharing:"Oversharing",wrong_article_surfaced:"Wrong article surfaced",other:"Other"};function ce({discarded:r,discardedMeta:n,onSubmit:i,onApprove:m,selectOpenRef:o,className:d}){const[u,p]=t(r??!1),[f,O]=t(!1),[S,z]=t(r),D=s(null);a(()=>{z(r),r&&p(!0)},[r]);const F=e=>{O(e),o&&(o.current.isOpen=e)};a(()=>{o&&(o.current.close=()=>F(!1))},[o]);const{control:R,register:M,handleSubmit:I,reset:q,formState:{isSubmitting:P}}=g({defaultValues:{reason:n?.reason,preferredAnswer:n?.suggestedAnswer||""}});a(()=>{q({reason:n?.reason,preferredAnswer:n?.suggestedAnswer||""})},[n,q]),a(()=>{D.current&&(D.current.inert=!u)},[u]);const T=null!=S,B=!T||!1===S,L=!T||!0===S;/* @__PURE__ */
|
|
2
|
+
return e.createElement("div",{className:_("space-y-4",d)},/* @__PURE__ */e.createElement("div",{className:"flex gap-2 px-4"},B&&/* @__PURE__ */e.createElement(C,null,/* @__PURE__ */e.createElement(j,{asChild:!0},/* @__PURE__ */e.createElement(E,{variant:"surface",elevation:"shadow",size:"sm",className:_("text-default !opacity-100",{"bg-green-600 text-dark-100":!1===S}),disabled:T,onClick:async()=>{try{await m(),z(!1),p(!1),F(!1)}catch(e){console.error("Failed to approve:",e)}}},
|
|
3
|
+
/* @__PURE__ */e.createElement(l,null)," ",!1===S?"Approved":"Approve")),/* @__PURE__ */e.createElement(A,null,/* @__PURE__ */e.createElement("span",null,"Approve the answer"))),L&&/* @__PURE__ */e.createElement(C,null,/* @__PURE__ */e.createElement(j,{asChild:!0},/* @__PURE__ */e.createElement(E,{variant:"surface",elevation:"shadow",size:"sm",className:_("text-default !opacity-100",{"bg-red-600 text-dark-100":!0===S}),disabled:T,onClick:()=>p(!u)},
|
|
4
4
|
/* @__PURE__ */e.createElement(c,null),!0===S?"Discarded":"Discard")),/* @__PURE__ */e.createElement(A,null,/* @__PURE__ */e.createElement("span",null,"Discard the answer")))),/* @__PURE__ */e.createElement("div",{className:_("grid transition-[grid-template-rows] duration-300 ease-in-out",u?"grid-rows-[1fr]":"grid-rows-[0fr]")},S?/* @__PURE__ */e.createElement("div",{className:_("overflow-hidden min-h-0 px-4 bg-dark-200 space-y-4",u?"py-4 mb-4":"py-0"),"data-name":"discard-dialog-reason"},
|
|
5
5
|
/* @__PURE__ */e.createElement("div",{className:"space-y-1"},/* @__PURE__ */e.createElement(y,{htmlFor:"reason",className:"text-sm"},"Reason"),/* @__PURE__ */e.createElement("span",{className:"text-sm block"},n?.reason&&le[n.reason])),
|
|
6
6
|
/* @__PURE__ */e.createElement("div",{className:"space-y-1"},/* @__PURE__ */e.createElement(y,{htmlFor:"preferredAnswer",className:"text-sm"},"Preferred answer"),/* @__PURE__ */e.createElement("span",{className:"text-sm block"},n?.suggestedAnswer))):/* @__PURE__ */e.createElement("form",{ref:D,onSubmit:I(async e=>{try{await i(e),z(!0),F(!1)}catch(t){console.error("Failed to discard:",t)}}),className:_("overflow-hidden min-h-0 px-4 bg-dark-200 transition-all duration-300 ease-in-out",u?"py-4 mb-4":"py-0")},
|
|
7
7
|
/* @__PURE__ */e.createElement("fieldset",{className:"space-y-4","data-name":"discard-dialog-reason"},/* @__PURE__ */e.createElement("div",{className:"space-y-1"},/* @__PURE__ */e.createElement(y,{htmlFor:"reason",className:"heading-xs"},"Reason"),/* @__PURE__ */e.createElement(h,{control:R,name:"reason",rules:{required:!0},render:({field:t})=>/* @__PURE__ */e.createElement(v,{value:t.value,onValueChange:t.onChange,open:f,onOpenChange:F,required:!0},
|
|
8
8
|
/* @__PURE__ */e.createElement(N,{className:"border-dark-300 bg-surface"},/* @__PURE__ */e.createElement(x,{placeholder:"Select a reason"})),
|
|
9
|
-
/* @__PURE__ */e.createElement(b,null,Object.values(ne).map(t=>/* @__PURE__ */e.createElement(w,{key:t,value:t},le[t]))))}),/* @__PURE__ */e.createElement("span",{className:"text-xs text-subtle ml-1 hidden"},"Give your ambient agent a descriptive name that reflects its purpose. This agent will learn from your content to provide personalized assistance.")),/* @__PURE__ */e.createElement("div",{className:"space-y-1"},/* @__PURE__ */e.createElement(y,{htmlFor:"preferredAnswer",className:"heading-xs"},"Preferred answer"),/* @__PURE__ */e.createElement(k,{id:"preferredAnswer",required:!0,minLength:10,placeholder:"Explain what you'd like Brainfish to do next time in this case....",rows:4,className:"h-52 resize-none bg-surface",...M("preferredAnswer")}),/* @__PURE__ */e.createElement("span",{className:"text-xs text-subtle ml-1 hidden"},"Tell Brainfish why this is the incorrect answer.")),/* @__PURE__ */e.createElement("div",{className:"flex gap-2 !mb-1 justify-end mr-1"},/* @__PURE__ */e.createElement(E,{variant:"link",size:"sm",type:"button",onClick:()=>{p(!1),F(!1),q()}},"Cancel"),/* @__PURE__ */e.createElement(E,{type:"submit",variant:"shadow",size:"sm",disabled:P},P?"Submitting...":"Submit"))))))}function ie({id:a,discarded:r,discardedMeta:n,open:l,onOpenChange:c,...m}){const{onDiscard:o,onApprove:d}=ye(),[u,p]=t(!1),f=s({isOpen:!1,close:()=>{}}),E=l??u,g=c??p;/* @__PURE__ */
|
|
9
|
+
/* @__PURE__ */e.createElement(b,null,Object.values(ne).map(t=>/* @__PURE__ */e.createElement(w,{key:t,value:t},le[t]))))}),/* @__PURE__ */e.createElement("span",{className:"text-xs text-subtle ml-1 hidden"},"Give your ambient agent a descriptive name that reflects its purpose. This agent will learn from your content to provide personalized assistance.")),/* @__PURE__ */e.createElement("div",{className:"space-y-1"},/* @__PURE__ */e.createElement(y,{htmlFor:"preferredAnswer",className:"heading-xs"},"Preferred answer"),/* @__PURE__ */e.createElement(k,{id:"preferredAnswer",required:!0,minLength:10,placeholder:"Explain what you'd like Brainfish to do next time in this case....",rows:4,className:"h-52 resize-none bg-surface",...M("preferredAnswer")}),/* @__PURE__ */e.createElement("span",{className:"text-xs text-subtle ml-1 hidden"},"Tell Brainfish why this is the incorrect answer.")),/* @__PURE__ */e.createElement("div",{className:"flex gap-2 !mb-1 justify-end mr-1"},/* @__PURE__ */e.createElement(E,{variant:"link",size:"sm",type:"button",onClick:()=>{p(!1),F(!1),q()}},"Cancel"),/* @__PURE__ */e.createElement(E,{type:"submit",variant:"default",elevation:"shadow",size:"sm",disabled:P},P?"Submitting...":"Submit"))))))}function ie({id:a,discarded:r,discardedMeta:n,open:l,onOpenChange:c,...m}){const{onDiscard:o,onApprove:d}=ye(),[u,p]=t(!1),f=s({isOpen:!1,close:()=>{}}),E=l??u,g=c??p;/* @__PURE__ */
|
|
10
10
|
return e.createElement(z,{modal:!1,open:E,onOpenChange:g,...m},/* @__PURE__ */e.createElement(D,{asChild:!0,onClick:e=>e.stopPropagation(),onKeyUp:e=>e.stopPropagation()},/* @__PURE__ */e.createElement(O,{variant:"shadowSurface",size:"sm","aria-label":"Inspect answer information"},/* @__PURE__ */e.createElement(i,{className:"text-dark-600"})," Inspect")),/* @__PURE__ */e.createElement(F,{className:"space-y-4 px-0",onEscapeKeyDown:e=>{f.current.isOpen&&(e.preventDefault(),f.current.close())},onInteractOutside:e=>{f.current.isOpen&&e.preventDefault()}},
|
|
11
11
|
/* @__PURE__ */e.createElement(R,{className:"px-4"},/* @__PURE__ */e.createElement(M,{className:"heading-sm m-0"},"Answer information"),/* @__PURE__ */e.createElement(I,{className:"sr-only"},"Shows answer diagnostics and allows you to provide feedback.")),
|
|
12
12
|
/* @__PURE__ */e.createElement(S,{className:"h-[calc(100vh-4rem)] pb-4"},/* @__PURE__ */e.createElement(ce,{discarded:r,discardedMeta:n,onSubmit:async e=>{await o(a,e.reason,e.preferredAnswer).then(()=>g(!1))},onApprove:async()=>{await d(a)},selectOpenRef:f}),/* @__PURE__ */e.createElement(re,{messageId:a}))))}const me=({score:t})=>{const a=`${t}%`;return!t||t>100?/* @__PURE__ */e.createElement(q,{variant:"disabled"},"N/A"):t>=80?/* @__PURE__ */e.createElement(q,{variant:"success"},a):t>=40&&t<80?/* @__PURE__ */e.createElement(q,{variant:"warning"},a):/* @__PURE__ */e.createElement(q,{variant:"disabled"},"N/A")};var oe=/* @__PURE__ */(e=>(e.ACTION="action",e.FEEDBACK="feedback",e.QUESTION="question",e.ANSWER="answer",e))(oe||{}),de=/* @__PURE__ */(e=>(e.Positive="positive",e.Negative="negative",e))(de||{});const ue=e=>"answer"===e.type,pe=e=>"question"===e.type,fe=e=>"feedback"===e.type,Ee=e=>"action"===e.type;function ge({attachments:t}){/* @__PURE__ */
|