@brainfish-ai/components 0.35.18 → 0.35.20
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/esm/chunks/{ChatSearch.DD63KIj6.js → ChatSearch.Crh0QjPs.js} +2 -2
- package/dist/esm/chunks/{ChatSearch.DD63KIj6.js.map → ChatSearch.Crh0QjPs.js.map} +1 -1
- package/dist/esm/chunks/{Conversation.CfhUJm_Q.js → Conversation.CWR55agZ.js} +2 -2
- package/dist/esm/chunks/{Conversation.CfhUJm_Q.js.map → Conversation.CWR55agZ.js.map} +1 -1
- package/dist/esm/chunks/{FormattedMessage.CEEjawib.js → FormattedMessage.DXVhkV-z.js} +14 -14
- package/dist/esm/chunks/{FormattedMessage.CEEjawib.js.map → FormattedMessage.DXVhkV-z.js.map} +1 -1
- package/dist/esm/chunks/{button.C7qRaFMP.js → button.DXe2tRBO.js} +3 -3
- package/dist/esm/chunks/{button.C7qRaFMP.js.map → button.DXe2tRBO.js.map} +1 -1
- package/dist/esm/chunks/{combobox.DKotd4uC.js → combobox.Ccfe3IGO.js} +4 -4
- package/dist/esm/chunks/{combobox.DKotd4uC.js.map → combobox.Ccfe3IGO.js.map} +1 -1
- package/dist/esm/chunks/{data-table.1ptJ47z8.js → data-table.Dn7VQJFo.js} +2 -2
- package/dist/esm/chunks/{data-table.1ptJ47z8.js.map → data-table.Dn7VQJFo.js.map} +1 -1
- package/dist/esm/chunks/{date-picker.Bto-A8WE.js → date-picker.GRONonNX.js} +2 -2
- package/dist/esm/chunks/{date-picker.Bto-A8WE.js.map → date-picker.GRONonNX.js.map} +1 -1
- package/dist/esm/chunks/{feedback.aGVWiKHH.js → feedback.nVBNjdPh.js} +2 -2
- package/dist/esm/chunks/{feedback.aGVWiKHH.js.map → feedback.nVBNjdPh.js.map} +1 -1
- package/dist/esm/chunks/{file-upload-status.sUoGRgbH.js → file-upload-status.znDE1kUC.js} +2 -2
- package/dist/esm/chunks/{file-upload-status.sUoGRgbH.js.map → file-upload-status.znDE1kUC.js.map} +1 -1
- package/dist/esm/chunks/{filters.Bxyw3eHZ.js → filters.CZJ31Eqj.js} +4 -4
- package/dist/esm/chunks/{filters.Bxyw3eHZ.js.map → filters.CZJ31Eqj.js.map} +1 -1
- package/dist/esm/chunks/{font-picker.CVZovtmt.js → font-picker.DrA0q0TI.js} +2 -2
- package/dist/esm/chunks/{font-picker.CVZovtmt.js.map → font-picker.DrA0q0TI.js.map} +1 -1
- package/dist/esm/chunks/{header-nav.BY2ppP8j.js → header-nav.BQXr30-S.js} +2 -2
- package/dist/esm/chunks/{header-nav.BY2ppP8j.js.map → header-nav.BQXr30-S.js.map} +1 -1
- package/dist/esm/chunks/{header-pane.DCGet3RZ.js → header-pane.D40kbO-a.js} +2 -2
- package/dist/esm/chunks/{header-pane.DCGet3RZ.js.map → header-pane.D40kbO-a.js.map} +1 -1
- package/dist/esm/chunks/index.C9B3bui8.js +2 -0
- package/dist/esm/chunks/index.C9B3bui8.js.map +1 -0
- package/dist/esm/chunks/{input-with-tags.aktIpAck.js → input-with-tags.4LvQIIuq.js} +3 -3
- package/dist/esm/chunks/{input-with-tags.aktIpAck.js.map → input-with-tags.4LvQIIuq.js.map} +1 -1
- package/dist/esm/chunks/{sidebar.tGcs3r4O.js → sidebar.CM8HDZg0.js} +16 -16
- package/dist/esm/chunks/{sidebar.tGcs3r4O.js.map → sidebar.CM8HDZg0.js.map} +1 -1
- package/dist/esm/chunks/{simpleSelect.BiNOqq3j.js → simpleSelect.C1KHuEVe.js} +3 -3
- package/dist/esm/chunks/{simpleSelect.BiNOqq3j.js.map → simpleSelect.C1KHuEVe.js.map} +1 -1
- package/dist/esm/chunks/{suggestion-card.DKQAazak.js → suggestion-card.PPUwB3ML.js} +2 -2
- package/dist/esm/chunks/{suggestion-card.DKQAazak.js.map → suggestion-card.PPUwB3ML.js.map} +1 -1
- package/dist/esm/chunks/{two-level-combobox.CWKR1tXX.js → two-level-combobox.CQUmvlq6.js} +3 -3
- package/dist/esm/chunks/{two-level-combobox.CWKR1tXX.js.map → two-level-combobox.CQUmvlq6.js.map} +1 -1
- package/dist/esm/components/article-suggestions-banner.js +1 -1
- package/dist/esm/components/articles-coverage.js +4 -4
- package/dist/esm/components/articles-updated.js +2 -2
- package/dist/esm/components/chart-area-linear.js +4 -4
- package/dist/esm/components/chart-area-linear.js.map +1 -1
- package/dist/esm/components/chart-radial-stacked.js +2 -2
- 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/conversation.js +1 -1
- package/dist/esm/components/convos.js +12 -12
- package/dist/esm/components/data-table.js +1 -1
- package/dist/esm/components/date-picker.js +1 -1
- package/dist/esm/components/editable-label.js +2 -2
- package/dist/esm/components/editable-label.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/input-with-tags.js +1 -1
- package/dist/esm/components/markdown.js +1 -1
- package/dist/esm/components/metric-card.js +2 -2
- package/dist/esm/components/metric-card.js.map +1 -1
- package/dist/esm/components/select.js +1 -1
- 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/breadcrumb.js +1 -1
- package/dist/esm/components/ui/button-group.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/div-button.js +1 -1
- package/dist/esm/components/ui/item.js +5 -5
- package/dist/esm/components/ui/label.js +1 -1
- package/dist/esm/components/ui/popover.js +1 -1
- package/dist/esm/components/ui/radio-group.js +2 -2
- package/dist/esm/components/ui/separator.js +1 -1
- package/dist/esm/components/ui/sheet.js +1 -1
- package/dist/esm/components/ui/spinner.js +2 -2
- package/dist/esm/components/ui/switch.js +2 -2
- 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/logos/microsoft-logo.js +2 -2
- package/dist/esm/scenes/knowledge-review.js +6 -6
- package/dist/esm/tailwind.preset.js +1 -1
- package/dist/esm/tailwind.preset.js.map +1 -1
- package/dist/stats.html +1 -1
- package/package.json +7 -7
- package/tailwind.preset.ts +2 -1
- package/dist/esm/chunks/index.Ca2JkOFO.js +0 -2
- package/dist/esm/chunks/index.Ca2JkOFO.js.map +0 -1
package/dist/esm/chunks/{two-level-combobox.CWKR1tXX.js.map → two-level-combobox.CQUmvlq6.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-level-combobox.CWKR1tXX.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.CQUmvlq6.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":"kfAuBO,SAASA,GAAiBC,gBAC/BA,EAAAC,sBACAA,EAAAC,kBACAA,EAAAC,gBACAA,EAAkB,cAAAC,iBAClBA,EAAmB,eAAAC,sBACnBA,EAAwB,wBAAAC,UACxBA,EAAAC,UACAA,GAAY,EAAAC,aACZA,GAAe,IAEf,MAAOC,EAAMC,GAAWC,EAAMC,UAAS,IAChCC,EAAMC,GAAWH,EAAMC,SAA6B,UACpDG,EAAoBC,GAAyBL,EAAMC,SAA8B,OACjFK,EAAqBC,GAA0BP,EAAMC,SAA8B,OACnFO,EAAkBC,GAAuBT,EAAMC,SAAyB,KACxES,EAAsBC,GAA2BX,EAAMC,UAAS,IAChEW,EAAaC,GAAkBb,EAAMC,SAAS,IA0C/Ca,EAAwBC,IAC5BA,EAAEC,kBACFX,EAAsB,MACtBE,EAAuB,MACvBE,EAAoB,IACpBN,EAAQ,SACRZ,IAAoB,KAAM;AAU5B,OACES,EAAAiB,cAAC,MAAA,CAAItB,UAAWuB,EAAG,YAAavB,mBAC9BK,EAAAiB,cAAC,MAAA,CAAItB,UAAU,aACZE,kBACCG,EAAAiB,cAAC,QAAA,CAAMtB,UAAU,8FAVnBW,EAA4B,GAAGd,OAAqBC,IACpDW,EAA2B,UAAUX,IAElC,UAAUD,oBAWbQ,EAAAiB,cAACE,EAAA,CAAQrB,OAAYsB,aAjCDC,IACxBtB,EAAQsB,GACJA,IAAWjB,EACbD,EAAQ,SACCkB,GAAUjB,GACnBD,EAAQ,2BA6BJH,EAAAiB,cAACK,EAAA,CAAeC,SAAO,kBACrBvB,EAAAiB,cAACO,EAAA,CACCC,QAAQ,UACRC,KAAK,WACL,gBAAe5B,EACfH,UAAU;eAEVK,EAAAiB,cAAC,MAAA,CAAItB,UAAU,0CACZW,iBACCN,EAAAiB,cAAC,MAAA,CAAItB,UAAU,oCACZS,EAAoBuB,MAAM,MAAIrB,EAAoBqB,OAEnDvB,iBACFJ,EAAAiB,cAAC,MAAA,CAAItB,UAAU,8BAA8BS,EAAmBuB,sBAEhE3B,EAAAiB,cAAC,OAAA,CAAKtB,UAAU,YAAYD;eAGhCM,EAAAiB,cAAC,MAAA,CAAItB,UAAU,qCACXS,GAAsBE;eAEtBN,EAAAiB,cAACW,EAAA,CACCH,QAAQ,QACRI,KAAK,KACLlC,UAAU,uCACVmC,QAAShB,EACT,aAAW;eAEXd,EAAAiB,cAACc,EAAA,CAAEpC,UAAU,2BAGjBK,EAAAiB,cAACe,EAAA,CAAYrC,UAAU,iDAI7BK,EAAAiB,cAACgB,EAAA,CAAetC,UAAU,aAAauC,MAAM,wBAC3ClC,EAAAiB,cAACkB,EAAA,KACW,WAATjC,GAAqBE,kCACnB,MAAA,CAAIT,UAAU,uDACbK,EAAAiB,cAACO,EAAA,CAAOC,QAAQ,QAAQI,KAAK,KAAKC,QA9EnB,KAC7B3B,EAAQ,SACRU,EAAe,KA4EkElB,UAAU,uDAC1EyC,EAAA,CAAUzC,UAAU,2BAEvBK,EAAAiB,cAAC,MAAA,CAAItB,UAAU,iEACZS,EAAmBuB,sBAGtB3B,EAAAiB,cAACW,EAAA,CACCH,QAAQ,QACRI,KAAK,KACLlC,UAAU,wDACVmC,QAAShB,EACT,aAAW;eAEXd,EAAAiB,cAACc,EAAA,CAAEpC,UAAU,YAEde,kBAAwBV,EAAAiB,cAACoB,GAAQ1C,UAAU,uEAIhDK,EAAAiB,cAACqB,EAAA,CACCC,MAAO3B,EACP4B,cAAe3B,EACf4B,YACW,UAATvC,EACI,UAAUV,EAAgBkD,mBAC1B,UAAUjD,EAAiBiD,oDAGlCC,EAAA,oBACC3C,EAAAiB,cAAC2B,OACW,UAAT1C,EACG,MAAMV,EAAgBkD,uBACtB,MAAMjD,EAAiBiD,wBAGnB,UAATxC,kBACCF,EAAAiB,cAAC4B,EAAA,KACExD,EAAgByD,IAAKC,kCACnBC,EAAA,CAAYC,IAAKF,EAAKR,MAAOA,MAAOQ,EAAKpB,MAAOuB,SAAU,IA/IhDC,OAAOJ,IACpC1C,EAAsB0C,GACtBxC,EAAuB,MACvBI,GAAwB,GACxBR,EAAQ,UACRU,EAAe,IAEf,IACE,MAAMuC,QAAqB9D,EAAsByD,EAAKR,OACtD9B,EAAoB2C,EACtB,OAASC,GACPC,QAAQC,KAAKF,GACb5C,EAAoB,GACtB,CAAA,QACEE,GAAwB,EAC1B,CAEApB,IAAoBwD,EAAM,OA8HyDS,CAAuBT,mCACrF,OAAA,CAAKpD,UAAU,2BACboD,EAAKU,KACLV,EAAKpB,sBAER3B,EAAAiB,cAACyC,EAAA,CACC/D,UAAWuB,EACT,cACAd,GAAoBmC,QAAUQ,EAAKR,MAAQ,cAAgB,kBAQ7D,WAATrC,GAAqBE,kBACpBJ,EAAAiB,cAAC4B,EAAA,KACEnC,iBACCV,EAAAiB,cAAC,MAAA,CAAItB,UAAU,wDACbK,EAAAiB,cAACoB,EAAA,CAAQ1C,UAAU,kEACnBK,EAAAiB,cAAC,OAAA,CAAKtB,UAAU,iCAAgC,WACrCF,EAAiBiD,cAAc,QAI5ClC,EAAiBsC,IAAKC,kBACpB/C,EAAAiB,cAAC+B,EAAA,CAAYC,IAAKF,EAAKR,MAAOA,MAAOQ,EAAKpB,MAAOuB,SAAU,IAtJjD,CAACH,IAC/BxC,EAAuBwC,GACvBhD,GAAQ,GACRR,IAAoBa,EAAoB2C,IAmJ6CY,CAAwBZ,mBACvF/C,EAAAiB,cAAC,OAAA,CAAKtB,UAAU,2BACboD,EAAKU,KACLV,EAAKpB,sBAER3B,EAAAiB,cAACyC,EAAA,CACC/D,UAAWuB,EACT,cACAZ,GAAqBiC,QAAUQ,EAAKR,MAAQ,cAAgB,wBAclFnC,GAAsBE,IAAwBV,kBAC9CI,EAAAiB,cAAC,MAAA,CAAItB,UAAU,4DACbK,EAAAiB,cAAC,KAAA,CAAGtB,UAAU,uBAAsB,oBACnCS,kBACCJ,EAAAiB,cAAC,MAAA,CAAItB,UAAU,wEACbK,EAAAiB,cAAC,QAAKtB,UAAU,eAAeH,EAAgB,oBAC/CQ,EAAAiB,cAAC,MAAA,CAAItB,UAAU,qBAAqBS,EAAmBuB,QAG1DrB,kBACCN,EAAAiB,cAAC,MAAA,CAAItB,UAAU,wEACbK,EAAAiB,cAAC,OAAA,CAAKtB,UAAU,eAAeF,EAAiB,oBAChDO,EAAAiB,cAAC,MAAA,CAAItB,UAAU,qBAAqBW,EAAoBqB,SAOtE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
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.
|
|
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.DXe2tRBO.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.DtKoarLP.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
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};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from"react";import{LineChart as t,CartesianGrid as a,XAxis as r,Line as l,PieChart as n,Pie as o,Label as c}from"recharts";import{a as s}from"../chunks/trend-value.lSWHqdkm.js";import{Card as m,CardHeader as i,CardContent as d}from"./ui/card.js";import{C as u,a as f,b as v}from"../chunks/chart.D9xvsrKX.js";import{f as p}from"../chunks/formatNumber.DhVn228t.js";import{u as x}from"../chunks/useChartDateFormatters.Dx2h5AAm.js";import{c as k}from"../chunks/utils.DtKoarLP.js";const E={covered:{label:"Covered",color:"var(--bfc-v2-color-blue-600, #357DE8)"},uncovered:{label:"Uncovered",color:"var(--bfc-v2-color-mono-300, #E5E5E5)"}};function h({total:h,trend:y,trendValue:g,coveragePercentage:b,data:N,chartConfig:j,locale:w,className:A}){const{tickFormatter:
|
|
2
|
-
return e.createElement(m,{className:k("shadow-none border border-dark-300 rounded-lg",A)},/* @__PURE__ */e.createElement(i,{className:"p-0 space-y-0 border-b border-dark-300"},/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-1 justify-center py-4 px-4"},/* @__PURE__ */e.createElement("p",{className:"uppercase heading-xxxs font-semibold text-dark tracking-normal"},"Articles Generated by Brainfish (coverage)"),/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-2"},/* @__PURE__ */e.createElement("span",{className:"font-mono text-3xl leading-10 text-dark"},p(h,{})),/* @__PURE__ */e.createElement(s,{trend:y,trendValue:g})))),/* @__PURE__ */e.createElement(d,{className:"flex gap-2 p-0"},/* @__PURE__ */e.createElement("div",{className:"flex-1 min-w-0 px-4 pt-4 pb-0"},/* @__PURE__ */e.createElement(u,{config:j,className:"h-48 w-full"},/* @__PURE__ */e.createElement(t,{data:N,margin:{top:8,left:20,right:20,bottom:0}},/* @__PURE__ */e.createElement(a,{horizontal:!0,vertical:!1,className:"stroke-dark-300"}),/* @__PURE__ */e.createElement(r,{dataKey:"date",tickLine:!1,axisLine:!1,tickMargin:8,padding:{left:15,right:15},minTickGap:32,interval:"preserveStartEnd",tickFormatter:
|
|
3
|
-
return e.createElement("text",{x:s,y:a,dy:12,textAnchor:c,className:"text-xs fill-dark-600"},
|
|
4
|
-
/* @__PURE__ */e.createElement(c,{content:({viewBox:t})=>t&&"cx"in t&&"cy"in t?/* @__PURE__ */e.createElement("text",{x:t.cx,y:t.cy,textAnchor:"middle",dominantBaseline:"central"},/* @__PURE__ */e.createElement("tspan",{className:"font-mono text-3xl fill-dark-600"},
|
|
1
|
+
import e from"react";import{LineChart as t,CartesianGrid as a,XAxis as r,Line as l,PieChart as n,Pie as o,Label as c}from"recharts";import{a as s}from"../chunks/trend-value.lSWHqdkm.js";import{Card as m,CardHeader as i,CardContent as d}from"./ui/card.js";import{C as u,a as f,b as v}from"../chunks/chart.D9xvsrKX.js";import{f as p}from"../chunks/formatNumber.DhVn228t.js";import{u as x}from"../chunks/useChartDateFormatters.Dx2h5AAm.js";import{c as k}from"../chunks/utils.DtKoarLP.js";const E={covered:{label:"Covered",color:"var(--bfc-v2-color-blue-600, #357DE8)"},uncovered:{label:"Uncovered",color:"var(--bfc-v2-color-mono-300, #E5E5E5)"}};function h({total:h,trend:y,trendValue:g,coveragePercentage:b,data:N,chartConfig:j,locale:w,className:A}){const{tickFormatter:K,formatXLabel:C}=x(w),M=Object.keys(j),R=Math.round(Math.min(100,Math.max(0,b)));/* @__PURE__ */
|
|
2
|
+
return e.createElement(m,{className:k("shadow-none border border-dark-300 rounded-lg",A)},/* @__PURE__ */e.createElement(i,{className:"p-0 space-y-0 border-b border-dark-300"},/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-1 justify-center py-4 px-4"},/* @__PURE__ */e.createElement("p",{className:"uppercase heading-xxxs font-semibold text-dark tracking-normal"},"Articles Generated by Brainfish (coverage)"),/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-2"},/* @__PURE__ */e.createElement("span",{className:"font-mono text-3xl leading-10 text-dark"},p(h,{})),/* @__PURE__ */e.createElement(s,{trend:y,trendValue:g})))),/* @__PURE__ */e.createElement(d,{className:"flex gap-2 p-0"},/* @__PURE__ */e.createElement("div",{className:"flex-1 min-w-0 px-4 pt-4 pb-0"},/* @__PURE__ */e.createElement(u,{config:j,className:"h-48 w-full"},/* @__PURE__ */e.createElement(t,{data:N,margin:{top:8,left:20,right:20,bottom:0}},/* @__PURE__ */e.createElement(a,{horizontal:!0,vertical:!1,className:"stroke-dark-300"}),/* @__PURE__ */e.createElement(r,{dataKey:"date",tickLine:!1,axisLine:!1,tickMargin:8,padding:{left:15,right:15},minTickGap:32,interval:"preserveStartEnd",tickFormatter:K,tick:({x:t,y:a,payload:r,index:l})=>{const n=0===l,o=l===N.length-1,c=n?"start":o?"end":"middle",s=n?t-15:o?t+15:t;/* @__PURE__ */
|
|
3
|
+
return e.createElement("text",{x:s,y:a,dy:12,textAnchor:c,className:"text-xs fill-dark-600"},K(r.value))}}),/* @__PURE__ */e.createElement(f,{cursor:!1,content:({active:t,payload:a,label:r})=>/* @__PURE__ */e.createElement(v,{active:t,payload:a,label:null!=r?C(r):""})}),M.map(t=>/* @__PURE__ */e.createElement(l,{key:t,dataKey:t,type:"monotone",stroke:`var(--color-${t})`,strokeWidth:2,dot:{r:4,fill:"white",strokeWidth:2,stroke:`var(--color-${t})`},activeDot:{r:5,fill:"white",strokeWidth:2,stroke:`var(--color-${t})`}}))))),/* @__PURE__ */e.createElement("div",{className:"w-80 shrink-0 flex items-center justify-center"},/* @__PURE__ */e.createElement(u,{config:E,className:"aspect-square w-full max-w-44"},/* @__PURE__ */e.createElement(n,null,/* @__PURE__ */e.createElement(o,{data:[{value:100,fill:"var(--color-uncovered)"}],dataKey:"value",innerRadius:"76%",outerRadius:"82%",stroke:"none",isAnimationActive:!1}),/* @__PURE__ */e.createElement(o,{data:[{name:"covered",value:R,fill:"var(--color-covered)"},{name:"uncovered",value:100-R,fill:"transparent"}],dataKey:"value",nameKey:"name",innerRadius:"68%",outerRadius:"90%",startAngle:90,endAngle:-270,stroke:"none"},
|
|
4
|
+
/* @__PURE__ */e.createElement(c,{content:({viewBox:t})=>t&&"cx"in t&&"cy"in t?/* @__PURE__ */e.createElement("text",{x:t.cx,y:t.cy,textAnchor:"middle",dominantBaseline:"central"},/* @__PURE__ */e.createElement("tspan",{className:"font-mono text-3xl fill-dark-600"},R,"%")):null})))))))}export{h as ArticlesCoverage};
|
|
5
5
|
//# sourceMappingURL=articles-coverage.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from"react";import{LineChart as t,CartesianGrid as a,XAxis as r,Line as c}from"recharts";import{a as s}from"../chunks/trend-value.lSWHqdkm.js";import{Card as l,CardHeader as n,CardContent as o}from"./ui/card.js";import{C as m,a as i,b as d,c as p,d as k}from"../chunks/chart.D9xvsrKX.js";import{f as u}from"../chunks/formatNumber.DhVn228t.js";import{u as f}from"../chunks/useChartDateFormatters.Dx2h5AAm.js";import{c as h}from"../chunks/utils.DtKoarLP.js";function x({total:x,trend:E,trendValue:y,data:g,chartConfig:b,dashedKeys:N=[],locale:v,className:j}){const{tickFormatter:w,formatXLabel:C}=f(v),
|
|
1
|
+
import e from"react";import{LineChart as t,CartesianGrid as a,XAxis as r,Line as c}from"recharts";import{a as s}from"../chunks/trend-value.lSWHqdkm.js";import{Card as l,CardHeader as n,CardContent as o}from"./ui/card.js";import{C as m,a as i,b as d,c as p,d as k}from"../chunks/chart.D9xvsrKX.js";import{f as u}from"../chunks/formatNumber.DhVn228t.js";import{u as f}from"../chunks/useChartDateFormatters.Dx2h5AAm.js";import{c as h}from"../chunks/utils.DtKoarLP.js";function x({total:x,trend:E,trendValue:y,data:g,chartConfig:b,dashedKeys:N=[],locale:v,className:j}){const{tickFormatter:w,formatXLabel:C}=f(v),D=Object.keys(b);/* @__PURE__ */
|
|
2
2
|
return e.createElement(l,{className:h("shadow-none border border-dark-300 rounded-lg",j)},/* @__PURE__ */e.createElement(n,{className:"p-0 space-y-0 border-b border-dark-300"},/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-1 justify-center py-4 px-4"},/* @__PURE__ */e.createElement("p",{className:"uppercase heading-xxxs font-semibold text-dark tracking-normal"},"Articles updated"),/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-2"},/* @__PURE__ */e.createElement("span",{className:"font-mono text-3xl leading-10 text-dark"},u(x,{})),/* @__PURE__ */e.createElement(s,{trend:E,trendValue:y})))),/* @__PURE__ */e.createElement(o,{className:"p-4"},/* @__PURE__ */e.createElement(m,{config:b,className:"h-48 w-full"},/* @__PURE__ */e.createElement(t,{data:g,margin:{top:8,left:20,right:20,bottom:0}},/* @__PURE__ */e.createElement(a,{horizontal:!0,vertical:!1,className:"stroke-dark-300"}),/* @__PURE__ */e.createElement(r,{dataKey:"date",tickLine:!1,axisLine:!1,tickMargin:8,padding:{left:15,right:15},minTickGap:32,interval:"preserveStartEnd",tickFormatter:w,tick:({x:t,y:a,payload:r,index:c})=>{const s=0===c,l=c===g.length-1,n=s?"start":l?"end":"middle",o=s?t-15:l?t+15:t;/* @__PURE__ */
|
|
3
|
-
return e.createElement("text",{x:o,y:a,dy:12,textAnchor:n,className:"text-xs fill-dark-600"},w(r.value))}}),/* @__PURE__ */e.createElement(i,{cursor:!1,content:({active:t,payload:a,label:r})=>/* @__PURE__ */e.createElement(d,{active:t,payload:a,label:C(r),className:"min-w-52"})}),
|
|
3
|
+
return e.createElement("text",{x:o,y:a,dy:12,textAnchor:n,className:"text-xs fill-dark-600"},w(r.value))}}),/* @__PURE__ */e.createElement(i,{cursor:!1,content:({active:t,payload:a,label:r})=>/* @__PURE__ */e.createElement(d,{active:t,payload:a,label:C(r),className:"min-w-52"})}),D.map(t=>{const a=N.includes(t);/* @__PURE__ */
|
|
4
4
|
return e.createElement(c,{key:t,dataKey:t,type:"monotone",stroke:`var(--color-${t})`,strokeWidth:2,strokeDasharray:a?"5 5":void 0,dot:({cx:t,cy:a,stroke:r})=>/* @__PURE__ */e.createElement("circle",{cx:t,cy:a,r:4,fill:"white",stroke:r,strokeWidth:2}),activeDot:{r:5,strokeWidth:0}})}),/* @__PURE__ */e.createElement(p,{content:/* @__PURE__ */e.createElement(k,null)})))))}export{x as ArticlesUpdated};
|
|
5
5
|
//# sourceMappingURL=articles-updated.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import e from"react";import{AreaChart as t,XAxis as a,Area as r}from"recharts";import{Card as
|
|
2
|
-
return e.createElement(
|
|
1
|
+
import e from"react";import{AreaChart as t,XAxis as a,Area as r}from"recharts";import{Card as l,CardHeader as c,CardTitle as n,CardDescription as o,CardContent as i}from"./ui/card.js";import{C as s,a as m,b as d}from"../chunks/chart.D9xvsrKX.js";import{u as p}from"../chunks/useChartDateFormatters.Dx2h5AAm.js";const f="A linear area chart";function k({title:f,metric:k,data:y,chartConfig:h,locale:x}){const{tickFormatter:E,formatXLabel:u}=p(x);/* @__PURE__ */
|
|
2
|
+
return e.createElement(l,{className:"min-w-80 h-44 p-4 flex flex-col text-dark shadow-none"},/* @__PURE__ */e.createElement(c,{className:"p-0 space-y-0","data-name":"header"},/* @__PURE__ */e.createElement(n,{className:"uppercase font-geist heading-xxxs tracking-normal"},f),/* @__PURE__ */e.createElement(o,{"data-name":"metric",className:"mt-0 text-[2rem] leading-10 text-dark font-geist"},k)),/* @__PURE__ */e.createElement(i,{"data-name":"content",className:"p-0 flex-1 min-h-0"},/* @__PURE__ */e.createElement(s,{config:h,className:"h-full w-full"},/* @__PURE__ */e.createElement(t,{accessibilityLayer:!0,data:y,margin:{top:2,left:14,right:23}},
|
|
3
3
|
/* @__PURE__ */e.createElement("defs",null,/* @__PURE__ */e.createElement("linearGradient",{id:"key1Gradient",x1:"0",y1:"0",x2:"0",y2:"1"},/* @__PURE__ */e.createElement("stop",{stopColor:"var(--color-key1)"}),/* @__PURE__ */e.createElement("stop",{offset:"1",stopColor:"var(--color-key1)",stopOpacity:0}))),
|
|
4
|
-
/* @__PURE__ */e.createElement(a,{dataKey:"date",tickLine:!1,axisLine:!1,tickMargin:8,minTickGap:20,interval:"preserveStartEnd",tickFormatter:E,tick:({x:t,y:a,payload:r})=>/* @__PURE__ */e.createElement("text",{x:t,y:a,dy:12,textAnchor:"middle",className:"uppercase font-bold font-
|
|
5
|
-
/* @__PURE__ */e.createElement(
|
|
4
|
+
/* @__PURE__ */e.createElement(a,{dataKey:"date",tickLine:!1,axisLine:!1,tickMargin:8,minTickGap:20,interval:"preserveStartEnd",tickFormatter:E,tick:({x:t,y:a,payload:r})=>/* @__PURE__ */e.createElement("text",{x:t,y:a,dy:12,textAnchor:"middle",className:"uppercase font-bold font-geist tracking-tight !fill-dark-900"},E(r.value))}),
|
|
5
|
+
/* @__PURE__ */e.createElement(m,{cursor:!1,content:({active:t,payload:a,label:r})=>/* @__PURE__ */e.createElement(d,{active:t,payload:a,hideIndicator:!0,label:u(r)})}),
|
|
6
6
|
/* @__PURE__ */e.createElement(r,{dataKey:"key1",type:"linear",fill:"url(#key1Gradient)",stroke:"var(--color-key1)",strokeLinecap:"round",strokeWidth:3})))))}export{k as ChartAreaLinear,f as description};
|
|
7
7
|
//# sourceMappingURL=chart-area-linear.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-area-linear.js","sources":["../../../src/components/chart-area-linear/chart-area-linear.tsx"],"sourcesContent":["import React from 'react';\nimport { Area, AreaChart, XAxis } from 'recharts';\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';\nimport { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\nimport { useChartDateFormatters } from '@/lib/useChartDateFormatters';\n\nexport const description = 'A linear area chart';\n\nexport interface ChartAreaLinearProps {\n title: string;\n metric: string;\n data: {\n date: Date | string;\n key1: number;\n key2?: number;\n key3?: number;\n key4?: number;\n key5?: number;\n }[];\n chartConfig: ChartConfig;\n locale?: string;\n}\n\nexport function ChartAreaLinear({ title, metric, data, chartConfig, locale }: ChartAreaLinearProps) {\n const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);\n\n return (\n <Card className=\"min-w-80 h-44 p-4 flex flex-col text-dark shadow-none\">\n <CardHeader className=\"p-0 space-y-0\" data-name=\"header\">\n <CardTitle className=\"uppercase font-
|
|
1
|
+
{"version":3,"file":"chart-area-linear.js","sources":["../../../src/components/chart-area-linear/chart-area-linear.tsx"],"sourcesContent":["import React from 'react';\nimport { Area, AreaChart, XAxis } from 'recharts';\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';\nimport { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\nimport { useChartDateFormatters } from '@/lib/useChartDateFormatters';\n\nexport const description = 'A linear area chart';\n\nexport interface ChartAreaLinearProps {\n title: string;\n metric: string;\n data: {\n date: Date | string;\n key1: number;\n key2?: number;\n key3?: number;\n key4?: number;\n key5?: number;\n }[];\n chartConfig: ChartConfig;\n locale?: string;\n}\n\nexport function ChartAreaLinear({ title, metric, data, chartConfig, locale }: ChartAreaLinearProps) {\n const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);\n\n return (\n <Card className=\"min-w-80 h-44 p-4 flex flex-col text-dark shadow-none\">\n <CardHeader className=\"p-0 space-y-0\" data-name=\"header\">\n <CardTitle className=\"uppercase font-geist heading-xxxs tracking-normal\">{title}</CardTitle>\n <CardDescription data-name=\"metric\" className=\"mt-0 text-[2rem] leading-10 text-dark font-geist\">\n {metric}\n </CardDescription>\n </CardHeader>\n <CardContent data-name=\"content\" className=\"p-0 flex-1 min-h-0\">\n <ChartContainer config={chartConfig} className=\"h-full w-full\">\n <AreaChart\n accessibilityLayer\n data={data}\n margin={{\n top: 2,\n left: 14,\n right: 23,\n }}\n >\n <defs>\n <linearGradient id=\"key1Gradient\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop stopColor=\"var(--color-key1)\" />\n <stop offset=\"1\" stopColor=\"var(--color-key1)\" stopOpacity={0} />\n </linearGradient>\n </defs>\n <XAxis\n dataKey=\"date\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n minTickGap={20}\n interval=\"preserveStartEnd\"\n tickFormatter={tickFormatter}\n tick={({ x, y, payload }) => (\n <text\n x={x}\n y={y}\n dy={12}\n textAnchor=\"middle\"\n className=\"uppercase font-bold font-geist tracking-tight !fill-dark-900\"\n >\n {tickFormatter(payload.value)}\n </text>\n )}\n />\n <ChartTooltip\n cursor={false}\n content={({ active, payload, label }) => (\n <ChartTooltipContent active={active} payload={payload} hideIndicator label={formatXLabel(label)} />\n )}\n />\n <Area\n dataKey=\"key1\"\n type=\"linear\"\n fill=\"url(#key1Gradient)\"\n stroke=\"var(--color-key1)\"\n strokeLinecap=\"round\"\n strokeWidth={3}\n />\n </AreaChart>\n </ChartContainer>\n </CardContent>\n </Card>\n );\n}\n"],"names":["description","ChartAreaLinear","title","metric","data","chartConfig","locale","tickFormatter","formatXLabel","useChartDateFormatters","Card","className","React","createElement","CardHeader","CardTitle","CardDescription","CardContent","ChartContainer","config","AreaChart","accessibilityLayer","margin","top","left","right","id","x1","y1","x2","y2","stopColor","offset","stopOpacity","XAxis","dataKey","tickLine","axisLine","tickMargin","minTickGap","interval","tick","x","y","payload","dy","textAnchor","value","ChartTooltip","cursor","content","active","label","ChartTooltipContent","hideIndicator","Area","type","fill","stroke","strokeLinecap","strokeWidth"],"mappings":"uTAOO,MAAMA,EAAc,sBAiBpB,SAASC,GAAgBC,MAAEA,EAAAC,OAAOA,OAAQC,EAAAC,YAAMA,EAAAC,OAAaA,IAClE,MAAMC,cAAEA,EAAAC,aAAeA,GAAiBC,EAAuBH;AAE/D,uBACGI,EAAA,CAAKC,UAAU,wEACdC,EAAAC,cAACC,GAAWH,UAAU,gBAAgB,YAAU,yCAC7CI,EAAA,CAAUJ,UAAU,qDAAqDT,kBAC1EU,EAAAC,cAACG,EAAA,CAAgB,YAAU,SAASL,UAAU,oDAC3CR,mCAGJc,EAAA,CAAY,YAAU,UAAUN,UAAU,qCACzCC,EAAAC,cAACK,EAAA,CAAeC,OAAQd,EAAaM,UAAU,gCAC7CC,EAAAC,cAACO,EAAA,CACCC,oBAAkB,EAClBjB,OACAkB,OAAQ,CACNC,IAAK,EACLC,KAAM,GACNC,MAAO;eAGTb,EAAAC,cAAC,OAAA,oBACCD,EAAAC,cAAC,iBAAA,CAAea,GAAG,eAAeC,GAAG,IAAIC,GAAG,IAAIC,GAAG,IAAIC,GAAG,oBACxDlB,EAAAC,cAAC,OAAA,CAAKkB,UAAU,qCAChBnB,EAAAC,cAAC,OAAA,CAAKmB,OAAO,IAAID,UAAU,oBAAoBE,YAAa;eAGhErB,EAAAC,cAACqB,EAAA,CACCC,QAAQ,OACRC,UAAU,EACVC,UAAU,EACVC,WAAY,EACZC,WAAY,GACZC,SAAS,mBACTjC,gBACAkC,KAAM,EAAGC,IAAGC,IAAGC,4BACbhC,EAAAC,cAAC,OAAA,CACC6B,IACAC,IACAE,GAAI,GACJC,WAAW,SACXnC,UAAU,gEAETJ,EAAcqC,EAAQG;eAI7BnC,EAAAC,cAACmC,EAAA,CACCC,QAAQ,EACRC,QAAS,EAAGC,SAAQP,UAASQ,0BAC3BxC,EAAAC,cAACwC,EAAA,CAAoBF,SAAgBP,UAAkBU,eAAa,EAACF,MAAO5C,EAAa4C;eAG7FxC,EAAAC,cAAC0C,EAAA,CACCpB,QAAQ,OACRqB,KAAK,SACLC,KAAK,qBACLC,OAAO,oBACPC,cAAc,QACdC,YAAa,OAO3B"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import e from"react";import{RadialBarChart as t,PolarRadiusAxis as a,Label as r,RadialBar as n}from"recharts";import{a as c}from"../chunks/trend-value.lSWHqdkm.js";import{f as
|
|
2
|
-
return e.createElement(
|
|
1
|
+
import e from"react";import{RadialBarChart as t,PolarRadiusAxis as a,Label as r,RadialBar as n}from"recharts";import{a as c}from"../chunks/trend-value.lSWHqdkm.js";import{f as s}from"../chunks/formatNumber.DhVn228t.js";import{Card as l,CardHeader as m,CardTitle as o,CardContent as i}from"./ui/card.js";import{C as u,a as d,b as f}from"../chunks/chart.D9xvsrKX.js";import{c as x}from"../chunks/utils.DtKoarLP.js";function p({title:p,data:h,chartConfig:E,trend:k,trendValue:y,className:g}){if(!h||0===h.length)return null;const N=Object.values(h[0]).reduce((e,t)=>"number"==typeof t?e+t:e,0),j=s(N),b=Object.entries(h[0]).sort((e,t)=>t[1]-e[1]);/* @__PURE__ */
|
|
2
|
+
return e.createElement(l,{className:x("flex flex-col w-full min-w-60 p-4 shadow-none",g)},/* @__PURE__ */e.createElement(m,{className:"p-0 space-y-0","data-name":"header"},/* @__PURE__ */e.createElement(o,{className:"uppercase font-geist heading-xxxs tracking-normal"},p)),/* @__PURE__ */e.createElement(i,{"data-name":"content",className:"p-0 flex-1 min-h-0"},/* @__PURE__ */e.createElement(u,{config:E,className:"mx-auto aspect-[2/1] w-full max-w-52"},/* @__PURE__ */e.createElement(t,{data:h,endAngle:180,innerRadius:80,outerRadius:120,cy:"100%"},/* @__PURE__ */e.createElement(d,{cursor:!1,content:/* @__PURE__ */e.createElement(f,{hideLabel:!0})}),/* @__PURE__ */e.createElement(a,{tick:!1,tickLine:!1,axisLine:!1},/* @__PURE__ */e.createElement(r,{content:({viewBox:t})=>t&&"cx"in t&&"cy"in t?/* @__PURE__ */e.createElement("text",{x:t.cx,y:t.cy,textAnchor:"middle"},/* @__PURE__ */e.createElement("tspan",{x:t.cx,y:(t.cy||0)-16,className:"fill-foreground text-xl font-geist"},j)):null})),b.map(([t])=>/* @__PURE__ */e.createElement(n,{key:t,dataKey:t,stackId:"a",cornerRadius:4,fill:E[t]?.color||`var(--color-${t})`,className:"stroke-card stroke-2"})))),k&&y&&/* @__PURE__ */e.createElement(c,{variant:"long",trend:k,trendValue:y,className:"mt-4 justify-center"})))}export{p as ChartRadialStacked};
|
|
3
3
|
//# sourceMappingURL=chart-radial-stacked.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-radial-stacked.js","sources":["../../../src/components/chart-radial-stacked/chart-radial-stacked.tsx"],"sourcesContent":["import React from 'react';\nimport { Label, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts';\n\nimport { Trend, TrendValue } from '../trend-value';\n\nimport { formatNumber } from '@/lib/formatNumber';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\nimport { cn } from '@/lib/utils';\n\nexport interface ChartRadialStackedProps {\n title: string;\n data: Record<string, number>[];\n chartConfig: ChartConfig;\n trend?: Trend;\n trendValue?: string;\n className?: string;\n}\n\nexport function ChartRadialStacked({\n title,\n data,\n chartConfig,\n trend,\n trendValue,\n className,\n}: ChartRadialStackedProps) {\n // Early return if data is invalid\n if (!data || data.length === 0) {\n return null;\n }\n\n const OUTER_RADIUS = 120;\n const INNER_RADIUS = 80;\n\n // return the sum\n const metricLabel = Object.values(data[0]).reduce((a, b) => (typeof b === 'number' ? a + b : a), 0);\n const formattedMetricLabel = formatNumber(metricLabel);\n\n // returns the data in sorted order by value\n const sortedData = Object.entries(data[0]).sort((a, b) => b[1] - a[1]); // Sort by value (descending)\n\n return (\n <Card className={cn('flex flex-col w-full min-w-60 p-4 shadow-none', className)}>\n <CardHeader className=\"p-0 space-y-0\" data-name=\"header\">\n <CardTitle className=\"uppercase font-
|
|
1
|
+
{"version":3,"file":"chart-radial-stacked.js","sources":["../../../src/components/chart-radial-stacked/chart-radial-stacked.tsx"],"sourcesContent":["import React from 'react';\nimport { Label, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts';\n\nimport { Trend, TrendValue } from '../trend-value';\n\nimport { formatNumber } from '@/lib/formatNumber';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\nimport { cn } from '@/lib/utils';\n\nexport interface ChartRadialStackedProps {\n title: string;\n data: Record<string, number>[];\n chartConfig: ChartConfig;\n trend?: Trend;\n trendValue?: string;\n className?: string;\n}\n\nexport function ChartRadialStacked({\n title,\n data,\n chartConfig,\n trend,\n trendValue,\n className,\n}: ChartRadialStackedProps) {\n // Early return if data is invalid\n if (!data || data.length === 0) {\n return null;\n }\n\n const OUTER_RADIUS = 120;\n const INNER_RADIUS = 80;\n\n // return the sum\n const metricLabel = Object.values(data[0]).reduce((a, b) => (typeof b === 'number' ? a + b : a), 0);\n const formattedMetricLabel = formatNumber(metricLabel);\n\n // returns the data in sorted order by value\n const sortedData = Object.entries(data[0]).sort((a, b) => b[1] - a[1]); // Sort by value (descending)\n\n return (\n <Card className={cn('flex flex-col w-full min-w-60 p-4 shadow-none', className)}>\n <CardHeader className=\"p-0 space-y-0\" data-name=\"header\">\n <CardTitle className=\"uppercase font-geist heading-xxxs tracking-normal\">{title}</CardTitle>\n </CardHeader>\n <CardContent data-name=\"content\" className=\"p-0 flex-1 min-h-0\">\n <ChartContainer config={chartConfig} className=\"mx-auto aspect-[2/1] w-full max-w-52\">\n <RadialBarChart data={data} endAngle={180} innerRadius={INNER_RADIUS} outerRadius={OUTER_RADIUS} cy=\"100%\">\n <ChartTooltip cursor={false} content={<ChartTooltipContent hideLabel />} />\n <PolarRadiusAxis tick={false} tickLine={false} axisLine={false}>\n <Label\n content={({ viewBox }) => {\n if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {\n return (\n <text x={viewBox.cx} y={viewBox.cy} textAnchor=\"middle\">\n <tspan x={viewBox.cx} y={(viewBox.cy || 0) - 16} className=\"fill-foreground text-xl font-geist\">\n {formattedMetricLabel}\n </tspan>\n </text>\n );\n }\n\n return null;\n }}\n />\n </PolarRadiusAxis>\n {sortedData.map(([key]) => (\n <RadialBar\n key={key}\n dataKey={key}\n stackId=\"a\"\n cornerRadius={4}\n fill={chartConfig[key]?.color || `var(--color-${key})`}\n className=\"stroke-card stroke-2\"\n />\n ))}\n </RadialBarChart>\n </ChartContainer>\n {trend && trendValue && (\n <TrendValue variant=\"long\" trend={trend} trendValue={trendValue} className=\"mt-4 justify-center\" />\n )}\n </CardContent>\n </Card>\n );\n}\n"],"names":["ChartRadialStacked","title","data","chartConfig","trend","trendValue","className","length","metricLabel","Object","values","reduce","a","b","formattedMetricLabel","formatNumber","sortedData","entries","sort","React","createElement","Card","cn","CardHeader","CardTitle","CardContent","ChartContainer","config","RadialBarChart","endAngle","innerRadius","outerRadius","cy","ChartTooltip","cursor","content","ChartTooltipContent","hideLabel","PolarRadiusAxis","tick","tickLine","axisLine","Label","viewBox","x","cx","y","textAnchor","map","key","RadialBar","dataKey","stackId","cornerRadius","fill","color","TrendValue","variant"],"mappings":"6ZAmBO,SAASA,GAAmBC,MACjCA,EAAAC,KACAA,EAAAC,YACAA,EAAAC,MACAA,EAAAC,WACAA,EAAAC,UACAA,IAGA,IAAKJ,GAAwB,IAAhBA,EAAKK,OAChB,OAAO,KAGT,MAIMC,EAAcC,OAAOC,OAAOR,EAAK,IAAIS,OAAO,CAACC,EAAGC,IAAoB,iBAANA,EAAiBD,EAAIC,EAAID,EAAI,GAC3FE,EAAuBC,EAAaP,GAGpCQ,EAAaP,OAAOQ,QAAQf,EAAK,IAAIgB,KAAK,CAACN,EAAGC,IAAMA,EAAE,GAAKD,EAAE;AAEnE,OACEO,EAAAC,cAACC,EAAA,CAAKf,UAAWgB,EAAG,gDAAiDhB,mBACnEa,EAAAC,cAACG,EAAA,CAAWjB,UAAU,gBAAgB,YAAU,yBAC9Ca,EAAAC,cAACI,EAAA,CAAUlB,UAAU,qDAAqDL,mBAE5EkB,EAAAC,cAACK,EAAA,CAAY,YAAU,UAAUnB,UAAU,qCACzCa,EAAAC,cAACM,EAAA,CAAeC,OAAQxB,EAAaG,UAAU,uDAC7Ca,EAAAC,cAACQ,EAAA,CAAe1B,OAAY2B,SAAU,IAAKC,YAhB9B,GAgByDC,YAjBzD,IAiBoFC,GAAG,uBAClGb,EAAAC,cAACa,EAAA,CAAaC,QAAQ,EAAOC,uBAAShB,EAAAC,cAACgB,EAAA,CAAoBC,WAAS,qBACpElB,EAAAC,cAACkB,EAAA,CAAgBC,MAAM,EAAOC,UAAU,EAAOC,UAAU,kBACvDtB,EAAAC,cAACsB,EAAA,CACCP,QAAS,EAAGQ,aACNA,GAAW,OAAQA,GAAW,OAAQA,iBAEtCxB,EAAAC,cAAC,QAAKwB,EAAGD,EAAQE,GAAIC,EAAGH,EAAQX,GAAIe,WAAW,yBAC7C5B,EAAAC,cAAC,SAAMwB,EAAGD,EAAQE,GAAIC,GAAIH,EAAQX,IAAM,GAAK,GAAI1B,UAAU,sCACxDQ,IAMF,QAIZE,EAAWgC,IAAI,EAAEC,oBAChB9B,EAAAC,cAAC8B,EAAA,CACCD,MACAE,QAASF,EACTG,QAAQ,IACRC,aAAc,EACdC,KAAMnD,EAAY8C,IAAMM,OAAS,eAAeN,KAChD3C,UAAU,4BAKjBF,GAASC,kBACRc,EAAAC,cAACoC,EAAA,CAAWC,QAAQ,OAAOrD,QAAcC,aAAwBC,UAAU,yBAKrF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{C as ChatSearch,a as ChatSearchProvider,N as NextBestActionType,R as ResolvedConversationFooter,u as useChatSearch,b as useIsChatSearchDirty,v as validateUrlString}from"../chunks/ChatSearch.
|
|
1
|
+
export{C as ChatSearch,a as ChatSearchProvider,N as NextBestActionType,R as ResolvedConversationFooter,u as useChatSearch,b as useIsChatSearchDirty,v as validateUrlString}from"../chunks/ChatSearch.Crh0QjPs.js";
|
|
2
2
|
//# sourceMappingURL=chat-search.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{C as Combobox}from"../chunks/combobox.
|
|
1
|
+
export{C as Combobox}from"../chunks/combobox.Ccfe3IGO.js";
|
|
2
2
|
//# sourceMappingURL=combobox.js.map
|
|
@@ -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,j as getConversationStatusLabel,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,j as getConversationStatusLabel,u as useConversation}from"../chunks/Conversation.CWR55agZ.js";
|
|
2
2
|
//# sourceMappingURL=conversation.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import e,{useState as t,useEffect as a,useRef as s,useMemo as r}from"react";import{S as n}from"../chunks/status-badge.BVWcC9Dt.js";import{ArrowSquareOut as l,CheckCircle as c,XCircle as i,ListMagnifyingGlass as m,UserCircle as o,Eye as d,UserFocus as u,Circle as p}from"@phosphor-icons/react";import{F as f}from"../chunks/FormattedMessage.
|
|
2
|
-
return e.createElement("div",{className:z("space-y-4",d)},/* @__PURE__ */e.createElement("div",{className:"flex gap-2 px-4"},T&&/* @__PURE__ */e.createElement(
|
|
3
|
-
/* @__PURE__ */e.createElement(c,null)," ",!1===O?"Approved":"Approve")),/* @__PURE__ */e.createElement(_,null,/* @__PURE__ */e.createElement("span",null,"Approve the answer"))),
|
|
1
|
+
import e,{useState as t,useEffect as a,useRef as s,useMemo as r}from"react";import{S as n}from"../chunks/status-badge.BVWcC9Dt.js";import{ArrowSquareOut as l,CheckCircle as c,XCircle as i,ListMagnifyingGlass as m,UserCircle as o,Eye as d,UserFocus as u,Circle as p}from"@phosphor-icons/react";import{F as f}from"../chunks/FormattedMessage.DXVhkV-z.js";import{Spinner as g}from"./ui/spinner.js";import{B as E}from"../chunks/button.DXe2tRBO.js";import{useForm as h,Controller as N}from"react-hook-form";import{Select as v,SelectTrigger as x,SelectValue as b,SelectContent as w,SelectItem as k}from"./ui/select.js";import{Label as y}from"./ui/label.js";import{Textarea as j}from"./ui/textarea.js";import{Tooltip as A,TooltipTrigger as C,TooltipContent as _}from"./ui/tooltip.js";import{c as z}from"../chunks/utils.DtKoarLP.js";import{DivButton as O}from"./ui/div-button.js";import{ScrollArea as S}from"./ui/scroll-area.js";import{Sheet as D,SheetTrigger as F,SheetContent as R,SheetHeader as M,SheetTitle as I,SheetDescription as q}from"./ui/sheet.js";import{Badge as P}from"./ui/badge.js";import{A as U}from"../chunks/ai-logo.Bh2bhNcG.js";import{Item as T,ItemHeader as B,ItemTitle as W,ItemContent as L,ItemDescription as H}from"./ui/item.js";import{Accordion as K,AccordionItem as G,AccordionTrigger as Z,AccordionContent as $}from"./ui/accordion.js";import{c as V,b as J}from"../chunks/formatDate.D2xEZm8f.js";import{createId as Q}from"@paralleldrive/cuid2";import{Table as X,TableHeader as Y,TableRow as ee,TableHead as te,TableBody as ae,TableCell as se}from"./ui/table.js";import '../global.css';import '../convos.css';/* empty css */import"@radix-ui/react-accordion";import"clsx";import"tailwind-merge";import"./ui/alert-dialog.js";import"./ui/alert.js";import"@radix-ui/react-avatar";import"./ui/button-group.js";import"./ui/calendar.js";import"./ui/card.js";import"@radix-ui/react-collapsible";import"./ui/command.js";import"./ui/dialog.js";import"./ui/dropdown-menu.js";import"./ui/icon.js";import"./ui/input.js";import"./ui/popover.js";import"./ui/progress.js";import"./ui/radio-group.js";import"react-resizable-panels";import"./ui/separator.js";import"./ui/switch.js";import"./ui/tabs.js";import"../logos/microsoft-teams-logo.js";import"../logos/slack-logo.js";import"../logos/microsoft-logo.js";import{d as re}from"../chunks/dark.DuW7JuAk.js";import{G as ne}from"../chunks/generating-star.DN8DVygp.js";function le({messageId:s}){const{fetchAnswerDiagnostics:r}=ze(),[n,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(g,null)):/* @__PURE__ */e.createElement(e.Fragment,null,n&&/* @__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"},n.confidence_score)),n.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"},n.answer_generation_type)),n.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"},n.query_context_relevance)),n.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"},n.context_sufficiency))),n.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"},n.confidence_justification)),n.evidence_from_context&&n.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)"),n.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(l,{size:16})))))))))}var ce=/* @__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))(ce||{});const ie={incorrect_answer:"Incorrect answer",hallucinated_answer:"Hallucinated answer",oversharing:"Oversharing",wrong_article_surfaced:"Wrong article surfaced",other:"Other"};function me({discarded:r,discardedMeta:n,onSubmit:l,onApprove:m,selectOpenRef:o,className:d}){const[u,p]=t(r??!1),[f,g]=t(!1),[O,S]=t(r),D=s(null);a(()=>{S(r),r&&p(!0)},[r]);const F=e=>{g(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}}=h({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 U=null!=O,T=!U||!1===O,B=!U||!0===O;/* @__PURE__ */
|
|
2
|
+
return e.createElement("div",{className:z("space-y-4",d)},/* @__PURE__ */e.createElement("div",{className:"flex gap-2 px-4"},T&&/* @__PURE__ */e.createElement(A,null,/* @__PURE__ */e.createElement(C,{asChild:!0},/* @__PURE__ */e.createElement(E,{variant:"surface",elevation:"shadow",size:"sm",className:z("text-default !opacity-100",{"bg-green-600 text-dark-100":!1===O}),disabled:U,onClick:async()=>{try{await m(),S(!1),p(!1),F(!1)}catch(e){console.error("Failed to approve:",e)}}},
|
|
3
|
+
/* @__PURE__ */e.createElement(c,null)," ",!1===O?"Approved":"Approve")),/* @__PURE__ */e.createElement(_,null,/* @__PURE__ */e.createElement("span",null,"Approve the answer"))),B&&/* @__PURE__ */e.createElement(A,null,/* @__PURE__ */e.createElement(C,{asChild:!0},/* @__PURE__ */e.createElement(E,{variant:"surface",elevation:"shadow",size:"sm",className:z("text-default !opacity-100",{"bg-red-600 text-dark-100":!0===O}),disabled:U,onClick:()=>p(!u)},
|
|
4
4
|
/* @__PURE__ */e.createElement(i,null),!0===O?"Discarded":"Discard")),/* @__PURE__ */e.createElement(_,null,/* @__PURE__ */e.createElement("span",null,"Discard the answer")))),/* @__PURE__ */e.createElement("div",{className:z("grid transition-[grid-template-rows] duration-300 ease-in-out",u?"grid-rows-[1fr]":"grid-rows-[0fr]")},O?/* @__PURE__ */e.createElement("div",{className:z("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&&ie[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 l(e),S(!0),F(!1)}catch(t){console.error("Failed to discard:",t)}}),className:z("overflow-hidden min-h-0 px-4 bg-dark-200 transition-all duration-300 ease-in-out",u?"py-4 mb-4":"py-0")},
|
|
@@ -11,19 +11,19 @@ return e.createElement(D,{modal:!1,open:g,onOpenChange:E,...i},/* @__PURE__ */e.
|
|
|
11
11
|
/* @__PURE__ */e.createElement(M,{className:"px-4"},/* @__PURE__ */e.createElement(I,{className:"heading-sm m-0"},"Answer information"),/* @__PURE__ */e.createElement(q,{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(me,{discarded:r,discardedMeta:n,onSubmit:async e=>{await o(a,e.reason,e.preferredAnswer).then(()=>E(!1))},onApprove:async()=>{await d(a)},selectOpenRef:f}),/* @__PURE__ */e.createElement(le,{messageId:a}))))}const de=({score:t})=>{const a=`${t}%`;return!t||t>100?/* @__PURE__ */e.createElement(P,{variant:"disabled"},"N/A"):t>=80?/* @__PURE__ */e.createElement(P,{variant:"success"},a):t>=40&&t<80?/* @__PURE__ */e.createElement(P,{variant:"warning"},a):/* @__PURE__ */e.createElement(P,{variant:"disabled"},"N/A")},ue=/(```[\s\S]*?```|`[^`\n]+`|<(?:[a-zA-Z][a-zA-Z0-9+.-]*:|www\.)[^\s>]+>)/g,pe=/^<(?:[a-zA-Z][a-zA-Z0-9+.-]*:|www\.)[^\s>]+>$/;function fe(e){return e.split(ue).map(e=>function(e){return e.startsWith("```")||e.startsWith("`")&&e.endsWith("`")||pe.test(e)}(e)?e:e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")).join("")}var ge=/* @__PURE__ */(e=>(e.ACTION="action",e.FEEDBACK="feedback",e.QUESTION="question",e.ANSWER="answer",e.HUMAN="human",e))(ge||{}),Ee=/* @__PURE__ */(e=>(e.Positive="positive",e.Negative="negative",e))(Ee||{});const he=e=>"answer"===e.type,Ne=e=>"question"===e.type,ve=e=>"feedback"===e.type,xe=e=>"action"===e.type,be=e=>"human"===e.type;function we({attachments:t}){/* @__PURE__ */
|
|
13
13
|
return e.createElement("div",{className:"flex gap-2 flex-wrap"},t.filter(e=>"image"===e.type).map((t,a)=>/* @__PURE__ */e.createElement("div",{key:a,className:"relative bg-dark-300 p-1 rounded shrink-0"},/* @__PURE__ */e.createElement("a",{href:t.url,target:"_blank",rel:"noopener noreferrer"},/* @__PURE__ */e.createElement("img",{src:t.url,alt:"",className:"size-14 object-cover rounded"})),/* @__PURE__ */e.createElement("div",{className:"absolute top-1.5 right-1.5 bg-dark-300 rounded-full p-0.5"},/* @__PURE__ */e.createElement(d,{size:8})))))}function ke(t){const{id:a,content:s,timestamp:c,locale:i,isFeedbackDialogOpen:m,onFeedbackDialogChange:d}=t,u=r(()=>fe(s),[s]),{locale:p}=ze(),g=V(c,i||p);if(he(t)){const{relatedArticles:s,discarded:r,discardedMeta:n,confidenceScore:c}=t;/* @__PURE__ */
|
|
14
|
-
return e.createElement("li",{className:"relative before-line after-line list-none [&_a]:break-all"},/* @__PURE__ */e.createElement(T,{className:"message-item"},/* @__PURE__ */e.createElement(
|
|
15
|
-
/* @__PURE__ */e.createElement("div",{className:"message-content-wrapper"},/* @__PURE__ */e.createElement(f,{message:{content:u}}),/* @__PURE__ */e.createElement("div",{className:"flex gap-2 justify-between mt-2 items-center"},/* @__PURE__ */e.createElement("span",{className:"message-timestamp"},g),/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-2"},c&&/* @__PURE__ */e.createElement(
|
|
14
|
+
return e.createElement("li",{className:"relative before-line after-line list-none [&_a]:break-all"},/* @__PURE__ */e.createElement(T,{className:"message-item"},/* @__PURE__ */e.createElement(B,{className:"justify-start gap-1.5"},/* @__PURE__ */e.createElement(U,{variant:"dark",width:16,height:16,className:"shrink-0"}),/* @__PURE__ */e.createElement(W,{className:"text-xs font-bold"},"AI generated "+(r?"(Discarded)":""))),/* @__PURE__ */e.createElement(L,{className:z("message-ai-content",{"py-6":!s?.length,"pt-6 pb-0":s?.length})},
|
|
15
|
+
/* @__PURE__ */e.createElement("div",{className:"message-content-wrapper"},/* @__PURE__ */e.createElement(f,{message:{content:u}}),/* @__PURE__ */e.createElement("div",{className:"flex gap-2 justify-between mt-2 items-center"},/* @__PURE__ */e.createElement("span",{className:"message-timestamp"},g),/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-2"},c&&/* @__PURE__ */e.createElement(A,null,/* @__PURE__ */e.createElement(C,{asChild:!0},/* @__PURE__ */e.createElement(O,{variant:"outline",size:"sm",className:"text-xs p-1 h-auto"},c)),/* @__PURE__ */e.createElement(_,null,/* @__PURE__ */e.createElement("p",null,"Answer score: ",c))),/* @__PURE__ */e.createElement(oe,{id:a,discarded:r,discardedMeta:n,open:m,onOpenChange:d})))),!!s?.length&&/* @__PURE__ */e.createElement(K,{type:"single",collapsible:!0,className:"p-0 custom-dashed-border-t-dark-300 w-full"},/* @__PURE__ */e.createElement(G,{value:"related-articles"},/* @__PURE__ */e.createElement(Z,{className:"px-6"},"Related articles"),/* @__PURE__ */e.createElement($,null,/* @__PURE__ */e.createElement("ul",{className:"message-article-list"},s.map(t=>/* @__PURE__ */e.createElement("li",{key:t.id,className:"grid gap-2 grid-cols-[auto_1fr] items-center justify-items-start"},
|
|
16
16
|
/* @__PURE__ */e.createElement(de,{score:Math.round(100*t.score)}),
|
|
17
17
|
/* @__PURE__ */e.createElement(E,{variant:"link",size:"xs",asChild:!0,className:"flex items-center gap-2 min-w-0 !justify-start w-full"},
|
|
18
18
|
/* @__PURE__ */e.createElement("a",{href:t.url,target:"_blank",rel:"noopener noreferrer"},/* @__PURE__ */e.createElement("span",{className:"truncate"},t.title),/* @__PURE__ */e.createElement(l,{className:"size-4 flex-shrink-0",weight:"regular"}))))))))))))}if(be(t)){const{authorName:a,authorAvatarUrl:s,source:r}=t,n=function(e,t){const a=e?.trim()||"Support";return t?.trim()?`${a} (via ${t.charAt(0).toUpperCase()+t.slice(1)})`:a}(a,r);/* @__PURE__ */
|
|
19
|
-
return e.createElement("li",{className:"relative before-line after-line list-none [&_a]:break-all"},/* @__PURE__ */e.createElement(T,{className:"message-item"},/* @__PURE__ */e.createElement(
|
|
20
|
-
return e.createElement("li",{className:"relative list-none before-line--user after-line--user"},/* @__PURE__ */e.createElement(T,{className:"message-item"},/* @__PURE__ */e.createElement(
|
|
21
|
-
/* @__PURE__ */e.createElement(u,{size:24})))),/* @__PURE__ */e.createElement(_,null,"Customer attributes")),/* @__PURE__ */e.createElement(R,{className:"space-y-4"},/* @__PURE__ */e.createElement(M,null,/* @__PURE__ */e.createElement(I,{className:"heading-sm m-0"},"Custom attributes"),/* @__PURE__ */e.createElement(q,{className:"sr-only"},"Custom attributes are used to store additional information about the conversation.")),m&&/* @__PURE__ */e.createElement(S,{className:"h-[calc(100vh-8rem)]"}," ",/* @__PURE__ */e.createElement(X,{className:"bg-surface","data-test-id":"attributes-table"},/* @__PURE__ */e.createElement(Y,null,/* @__PURE__ */e.createElement(ee,null,m.map(t=>/* @__PURE__ */e.createElement(te,{key:t,className:"capitalize font-bold"},t)))),/* @__PURE__ */e.createElement(ae,null,c.map(t=>/* @__PURE__ */e.createElement(ee,{key:t?.id??Q(),className:"border-none"},m.map(a=>/* @__PURE__ */e.createElement(se,{key:a,"data-title":a},"boolean"==typeof t[a]?String(t[a]):t[a]))))))))):null}const je=e.forwardRef(({className:t,streamName:a,dotColor:s="transparent",...r},n)=>/* @__PURE__ */e.createElement(
|
|
22
|
-
/* @__PURE__ */e.createElement(P,{...r,className:"bg-surface rounded-full border border-dark-300 text-subtle"},/* @__PURE__ */e.createElement("span",{className:"flex items-center gap-1"},/* @__PURE__ */e.createElement(p,{size:8,weight:"bold",className:"!size-2 rounded-full",style:{backgroundColor:s},color:"transparent"===s?re[300]:"transparent"}),/* @__PURE__ */e.createElement("span",{className:"max-w-32 truncate inline-block"},a))))),/* @__PURE__ */e.createElement(_,null,a)));je.displayName="StreamBadge";const
|
|
19
|
+
return e.createElement("li",{className:"relative before-line after-line list-none [&_a]:break-all"},/* @__PURE__ */e.createElement(T,{className:"message-item"},/* @__PURE__ */e.createElement(B,{className:"justify-start gap-2"},s?/* @__PURE__ */e.createElement("img",{src:s,alt:"",className:"size-6 shrink-0 rounded-full object-cover"}):/* @__PURE__ */e.createElement(o,{weight:"fill",size:24,className:"shrink-0"}),/* @__PURE__ */e.createElement(W,{className:"text-xs font-bold"},n)),/* @__PURE__ */e.createElement(L,{className:"message-ai-content py-6"},/* @__PURE__ */e.createElement("div",{className:"message-content-wrapper"},/* @__PURE__ */e.createElement(f,{message:{content:u}}),/* @__PURE__ */e.createElement("span",{className:"message-timestamp"},g)))))}const h=ve(t)?t.feedback:null;/* @__PURE__ */
|
|
20
|
+
return e.createElement("li",{className:"relative list-none before-line--user after-line--user"},/* @__PURE__ */e.createElement(T,{className:"message-item"},/* @__PURE__ */e.createElement(B,{className:"basis-0"},/* @__PURE__ */e.createElement(o,{weight:"fill",size:24})),/* @__PURE__ */e.createElement(L,{className:"message-user-content"},Ne(t)&&/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-2"},t.attachments&&t.attachments.some(e=>"image"===e.type)&&/* @__PURE__ */e.createElement(we,{attachments:t.attachments}),!t.onlyShowAttachments&&/* @__PURE__ */e.createElement(f,{message:{content:u}}),/* @__PURE__ */e.createElement("span",{className:"message-timestamp"},g)),ve(t)&&h&&/* @__PURE__ */e.createElement(e.Fragment,null,/* @__PURE__ */e.createElement("div",{className:"message-header"},/* @__PURE__ */e.createElement("div",{className:"message-feedback-text"},"positive"===h?"Upvoted as helpful":"Downvoted as not helpful"),/* @__PURE__ */e.createElement("div",{className:"message-meta"},/* @__PURE__ */e.createElement(n,{variant:"positive"===h?"success":"destructive"},"positive"===h?"Answered":"Unable to help"))),s&&/* @__PURE__ */e.createElement("div",{className:"text-base mb-1"},s),/* @__PURE__ */e.createElement("span",{className:"message-timestamp-simple"},g)),xe(t)&&/* @__PURE__ */e.createElement("div",{className:"message-header"},/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-2"},/* @__PURE__ */e.createElement("span",{className:"text-subtle text-sm italic"},s),/* @__PURE__ */e.createElement("span",{className:"message-timestamp-simple"},g)),/* @__PURE__ */e.createElement("div",{className:"message-meta"},/* @__PURE__ */e.createElement(n,{variant:"warning"},"Action"))))))}function ye({conversationId:s,open:r,onOpenChange:n,...l}){const[c,i]=t(),[m,o]=t(),{fetchAttributes:d}=ze();return a(()=>{d(s).then(e=>{i(e),o(function(e){const t=["id","name","email","phone"];if(0===e.length)return[];const a=e=>{const a=t.indexOf(e);return-1===a?1/0:a};return Object.keys(e[0]).sort((e,t)=>a(e)-a(t))}(e))}).catch(()=>{})},[d,s]),c?.length?/* @__PURE__ */e.createElement(D,{modal:!1,open:r,onOpenChange:n,...l},/* @__PURE__ */e.createElement(A,null,/* @__PURE__ */e.createElement(C,{asChild:!0},/* @__PURE__ */e.createElement(F,{asChild:!0,onClick:e=>e.stopPropagation(),onKeyUp:e=>e.stopPropagation()},/* @__PURE__ */e.createElement(O,{variant:"ghost",size:"icon",className:"size-7 [&_svg]:size-6 text-dark-900","aria-label":"Open Custom attributes dialog"},
|
|
21
|
+
/* @__PURE__ */e.createElement(u,{size:24})))),/* @__PURE__ */e.createElement(_,null,"Customer attributes")),/* @__PURE__ */e.createElement(R,{className:"space-y-4"},/* @__PURE__ */e.createElement(M,null,/* @__PURE__ */e.createElement(I,{className:"heading-sm m-0"},"Custom attributes"),/* @__PURE__ */e.createElement(q,{className:"sr-only"},"Custom attributes are used to store additional information about the conversation.")),m&&/* @__PURE__ */e.createElement(S,{className:"h-[calc(100vh-8rem)]"}," ",/* @__PURE__ */e.createElement(X,{className:"bg-surface","data-test-id":"attributes-table"},/* @__PURE__ */e.createElement(Y,null,/* @__PURE__ */e.createElement(ee,null,m.map(t=>/* @__PURE__ */e.createElement(te,{key:t,className:"capitalize font-bold"},t)))),/* @__PURE__ */e.createElement(ae,null,c.map(t=>/* @__PURE__ */e.createElement(ee,{key:t?.id??Q(),className:"border-none"},m.map(a=>/* @__PURE__ */e.createElement(se,{key:a,"data-title":a},"boolean"==typeof t[a]?String(t[a]):t[a]))))))))):null}const je=e.forwardRef(({className:t,streamName:a,dotColor:s="transparent",...r},n)=>/* @__PURE__ */e.createElement(A,null,/* @__PURE__ */e.createElement(C,{asChild:!0},/* @__PURE__ */e.createElement("div",{ref:n,role:"button",className:z("flex items-center gap-1 rounded-full p-0",t),tabIndex:0},
|
|
22
|
+
/* @__PURE__ */e.createElement(P,{...r,className:"bg-surface rounded-full border border-dark-300 text-subtle"},/* @__PURE__ */e.createElement("span",{className:"flex items-center gap-1"},/* @__PURE__ */e.createElement(p,{size:8,weight:"bold",className:"!size-2 rounded-full",style:{backgroundColor:s},color:"transparent"===s?re[300]:"transparent"}),/* @__PURE__ */e.createElement("span",{className:"max-w-32 truncate inline-block"},a))))),/* @__PURE__ */e.createElement(_,null,a)));je.displayName="StreamBadge";const Ae=({score:t,status:a,statusMessage:s})=>t?/* @__PURE__ */e.createElement(A,null,/* @__PURE__ */e.createElement(C,{asChild:!0},/* @__PURE__ */e.createElement(O,{variant:"ghost",size:"sm",className:"p-0 h-[26px]"},/* @__PURE__ */e.createElement(n,{variant:a,suffix:t},s))),/* @__PURE__ */e.createElement(_,null,/* @__PURE__ */e.createElement("p",null,"Conversation score: ",t))):/* @__PURE__ */e.createElement(n,{variant:a,suffix:t},s);function Ce({locale:a,value:s,question:r,timestamp:n,location:l,source:c,status:i,statusMessage:m,hasAttributes:o,onClick:d,className:u,score:p,...f}){const{getMessages:g,isLoading:E,locale:h}=ze(),[N,v]=t(null),[x,b]=t(null),w=(e,t)=>a=>{a?(v(e),t&&b(t)):(v(null),b(null))},k=null!==N,y=a||h,j=g(s),A=E(s),C=[J(n,y),l].filter(Boolean).join(" • ");/* @__PURE__ */
|
|
23
23
|
return e.createElement(G,{value:s,className:z('border border-dark-200 hover:border-dark-300 rounded-lg bg-dark-100 [&[data-state="open"]]:bg-surface [&[data-state="open"]]:border-dark-100',{"shadow-md shadow-dark-300":k},u),...f},
|
|
24
24
|
/* @__PURE__ */e.createElement(Z,{className:"flex-row-reverse px-4 gap-1 items-center [&[data-state=open]]:px-6",onClick:e=>{if(e.target.closest('[role="dialog"]'))return e.preventDefault(),void e.stopPropagation();d?.()}},
|
|
25
|
-
/* @__PURE__ */e.createElement(T,{size:"sm",className:"flex-1 p-0 justify-between"},/* @__PURE__ */e.createElement(L,{className:"max-w-[400px]"},/* @__PURE__ */e.createElement(
|
|
26
|
-
/* @__PURE__ */e.createElement($,{className:"flex flex-col gap-4 text-balance px-5"},
|
|
25
|
+
/* @__PURE__ */e.createElement(T,{size:"sm",className:"flex-1 p-0 justify-between"},/* @__PURE__ */e.createElement(L,{className:"max-w-[400px]"},/* @__PURE__ */e.createElement(W,{className:"text-base text-default"},r),/* @__PURE__ */e.createElement(H,{className:"text-xs text-default flex items-center gap-1"},C,c&&/* @__PURE__ */e.createElement(je,{streamName:c.name,dotColor:c.color}))),/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-0"},o&&/* @__PURE__ */e.createElement(ye,{conversationId:s,open:"attributes"===N,onOpenChange:w("attributes")}),i&&/* @__PURE__ */e.createElement(Ae,{score:p,status:i,statusMessage:m})))),
|
|
26
|
+
/* @__PURE__ */e.createElement($,{className:"flex flex-col gap-4 text-balance px-5"},A?/* @__PURE__ */e.createElement("div",{className:"text-center text-subtle py-4"},"Loading messages..."):/* @__PURE__ */e.createElement("ul",{className:"list-none space-y-4"},j.map((t,a)=>{const s=Ne(t)?t:null,r=s?.attachments?.length?s.attachments:null;return 0===a?r?/* @__PURE__ */e.createElement(ke,{key:t.id,...{...t,onlyShowAttachments:!0},isFeedbackDialogOpen:"feedback"===N&&x===t.id,onFeedbackDialogChange:w("feedback",t.id)}):null:/* @__PURE__ */e.createElement(ke,{key:t.id,...t,isFeedbackDialogOpen:"feedback"===N&&x===t.id,onFeedbackDialogChange:w("feedback",t.id)})}))))}const _e=e.createContext(void 0);function ze(){const t=e.useContext(_e);if(void 0===t)throw new Error("useConvosContext must be used within a ConvosProvider");return t}function Oe({children:t,value:a}){/* @__PURE__ */
|
|
27
27
|
return e.createElement(_e.Provider,{value:a},t)}function Se({convos:t,fetchMessages:a,fetchAttributes:s,fetchAnswerDiagnostics:r,onDiscard:n,onApprove:l}){const[c,i]=e.useState({}),[m,o]=e.useState({}),d=e.useRef(/* @__PURE__ */new Set),u=e.useRef({}),p=e.useCallback(e=>{d.current.has(e)||u.current[e]||(u.current[e]=!0,o(t=>({...t,[e]:!0})),a(e).then(t=>{i(a=>({...a,[e]:t})),d.current.add(e)}).catch(()=>{}).finally(()=>{delete u.current[e],o(t=>{const a={...t};return delete a[e],a})}))},[a]),f=t[0]?.locale,g=e.useMemo(()=>({fetchMessages:a,fetchAttributes:s,getMessages:e=>c[e]||[],isLoading:e=>m[e]||!1,handleFetchMessages:p,locale:f,fetchAnswerDiagnostics:e=>r(e),onDiscard:n,onApprove:l}),[a,s,c,m,p,f,r,n,l]);/* @__PURE__ */
|
|
28
|
-
return e.createElement(Oe,{value:g},/* @__PURE__ */e.createElement(K,{type:"single",collapsible:!0,className:"w-full space-y-2"},t.map(t=>/* @__PURE__ */e.createElement(
|
|
28
|
+
return e.createElement(Oe,{value:g},/* @__PURE__ */e.createElement(K,{type:"single",collapsible:!0,className:"w-full space-y-2"},t.map(t=>/* @__PURE__ */e.createElement(Ce,{...t,key:t.value,onClick:()=>p(t.value)}))))}const De=({children:t})=>/* @__PURE__ */e.createElement("div",{className:"flex flex-col items-center justify-center h-full w-full mt-40 gap-2"},/* @__PURE__ */e.createElement(ne,{className:"size-8",variant:"disabled"}),/* @__PURE__ */e.createElement("div",{className:"text-subtlest text-sm w-96 text-center leading-5"},t));export{Ce as Convo,Se as Convos,Oe as ConvosProvider,De as EmptyConvos,Ee as Feedback,ke as Message,we as MessageAttachmentImageThumbnails,ge as MessageType,n as StatusBadge,he as isAIAnswer,xe as isAction,ve as isFeedback,be as isHumanAgent,Ne as isUserQuestion,ze as useConvosContext};
|
|
29
29
|
//# sourceMappingURL=convos.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{D as DataTable}from"../chunks/data-table.
|
|
1
|
+
export{D as DataTable}from"../chunks/data-table.Dn7VQJFo.js";
|
|
2
2
|
//# sourceMappingURL=data-table.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{D as DatePicker}from"../chunks/date-picker.
|
|
1
|
+
export{D as DatePicker}from"../chunks/date-picker.GRONonNX.js";
|
|
2
2
|
//# sourceMappingURL=date-picker.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import e,{useState as t}from"react";import{PencilSimple as r}from"@phosphor-icons/react";import
|
|
2
|
-
return e.createElement("span",{className:"group flex items-center"},/* @__PURE__ */e.createElement("span",{...u,ref:m,role:"textbox",tabIndex:0,"aria-placeholder":
|
|
1
|
+
import e,{useState as t}from"react";import{PencilSimple as r}from"@phosphor-icons/react";import n from"clsx";const o=e.forwardRef(({className:o,children:a,onKeyDown:i,onBlur:l,onInput:p,placeholder:c,required:s,...u},m)=>{const[d,f]=t(!1),x=e=>!e.textContent?.trim();/* @__PURE__ */
|
|
2
|
+
return e.createElement("span",{className:"group flex items-center"},/* @__PURE__ */e.createElement("span",{...u,ref:m,role:"textbox",tabIndex:0,"aria-placeholder":c,"aria-multiline":!1,"aria-required":s||void 0,"aria-invalid":d||void 0,contentEditable:"plaintext-only",suppressContentEditableWarning:!0,onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),e.currentTarget.blur()),i?.(e)},onInput:e=>{""===e.currentTarget.textContent&&(e.currentTarget.textContent=""),x(e.currentTarget)||f(!1),p?.(e)},onBlur:e=>{s&&x(e.currentTarget)?(e.currentTarget.textContent="",f(!0)):f(!1),l?.(e)},className:n("whitespace-nowrap overflow-hidden","inline-grid grid-cols-1","empty:before:pointer-events-none empty:before:content-[attr(aria-placeholder)] empty:before:text-muted-foreground empty:before:col-start-1 empty:before:row-start-1 empty:before:z-10",d&&"text-destructive empty:before:text-destructive",o)},(e=>null==e||"string"==typeof e&&""===e.trim())(a)?null:a),/* @__PURE__ */e.createElement(r,{size:16,className:n("ml-2 opacity-0 -translate-x-1 transition-[opacity,transform] duration-300","group-hover:opacity-100 group-hover:translate-x-0","group-focus-within:opacity-100 group-focus-within:translate-x-0"),role:"presentation"}))});o.displayName="EditableLabel";export{o as EditableLabel};
|
|
3
3
|
//# sourceMappingURL=editable-label.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editable-label.js","sources":["../../../src/components/editable-label/editable-label.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { PencilSimple } from '@phosphor-icons/react';\nimport clsx from 'clsx';\n\ntype EditableLabelProps = React.ComponentPropsWithoutRef<'span'> & {\n placeholder?: string;\n required?: boolean;\n};\n\nexport const EditableLabel = React.forwardRef<HTMLSpanElement, EditableLabelProps>(\n ({ className, children, onKeyDown, onBlur, onInput, placeholder, required, ...props }, ref) => {\n const [invalid, setInvalid] = useState(false);\n\n const isEmpty = (element: HTMLElement) => !(element.textContent?.trim() ?? '');\n\n return (\n <span className=\"group flex items-center\">\n <span\n {...props}\n ref={ref}\n role=\"textbox\"\n tabIndex={0}\n aria-placeholder={placeholder}\n aria-multiline={false}\n aria-required={required || undefined}\n aria-invalid={invalid || undefined}\n contentEditable=\"plaintext-only\"\n suppressContentEditableWarning\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.currentTarget.blur();\n }\n onKeyDown?.(event);\n }}\n onInput={(event) => {\n if (!isEmpty(event.currentTarget)) {\n setInvalid(false);\n }\n onInput?.(event);\n }}\n onBlur={(event) => {\n if (required && isEmpty(event.currentTarget)) {\n event.currentTarget.textContent = '';\n setInvalid(true);\n } else {\n setInvalid(false);\n }\n onBlur?.(event);\n }}\n className={clsx(\n 'whitespace-nowrap overflow-hidden',\n 'empty:before:content-[attr(aria-placeholder)] empty:before:text-muted-foreground',\n invalid && 'text-destructive empty:before:text-destructive',\n className,\n )}\n >\n {children}\n </span>\n <PencilSimple\n size={16}\n className={clsx(\n 'ml-2 opacity-0 -translate-x-1 transition-[opacity,transform] duration-300',\n 'group-hover:opacity-100 group-hover:translate-x-0',\n 'group-focus-within:opacity-100 group-focus-within:translate-x-0',\n )}\n role=\"presentation\"\n />\n </span>\n );\n },\n);\n\nEditableLabel.displayName = 'EditableLabel';\n\nexport default EditableLabel;\n"],"names":["EditableLabel","React","forwardRef","className","children","onKeyDown","onBlur","onInput","placeholder","required","props","ref","invalid","setInvalid","useState","isEmpty","element","textContent","trim","createElement","role","tabIndex","contentEditable","suppressContentEditableWarning","event","key","preventDefault","currentTarget","blur","clsx","PencilSimple","size","displayName"],"mappings":"
|
|
1
|
+
{"version":3,"file":"editable-label.js","sources":["../../../src/components/editable-label/editable-label.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { PencilSimple } from '@phosphor-icons/react';\nimport clsx from 'clsx';\n\ntype EditableLabelProps = React.ComponentPropsWithoutRef<'span'> & {\n placeholder?: string;\n required?: boolean;\n};\n\nconst hasNoLabelText = (children: React.ReactNode) =>\n children == null || (typeof children === 'string' && children.trim() === '');\n\nexport const EditableLabel = React.forwardRef<HTMLSpanElement, EditableLabelProps>(\n ({ className, children, onKeyDown, onBlur, onInput, placeholder, required, ...props }, ref) => {\n const [invalid, setInvalid] = useState(false);\n\n const isEmpty = (element: HTMLElement) => !(element.textContent?.trim() ?? '');\n\n return (\n <span className=\"group flex items-center\">\n <span\n {...props}\n ref={ref}\n role=\"textbox\"\n tabIndex={0}\n aria-placeholder={placeholder}\n aria-multiline={false}\n aria-required={required || undefined}\n aria-invalid={invalid || undefined}\n contentEditable=\"plaintext-only\"\n suppressContentEditableWarning\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.currentTarget.blur();\n }\n onKeyDown?.(event);\n }}\n onInput={(event) => {\n if (event.currentTarget.textContent === '') {\n event.currentTarget.textContent = '';\n }\n if (!isEmpty(event.currentTarget)) {\n setInvalid(false);\n }\n onInput?.(event);\n }}\n onBlur={(event) => {\n if (required && isEmpty(event.currentTarget)) {\n event.currentTarget.textContent = '';\n setInvalid(true);\n } else {\n setInvalid(false);\n }\n onBlur?.(event);\n }}\n className={clsx(\n 'whitespace-nowrap overflow-hidden',\n 'inline-grid grid-cols-1',\n 'empty:before:pointer-events-none empty:before:content-[attr(aria-placeholder)] empty:before:text-muted-foreground empty:before:col-start-1 empty:before:row-start-1 empty:before:z-10',\n invalid && 'text-destructive empty:before:text-destructive',\n className,\n )}\n >\n {hasNoLabelText(children) ? null : children}\n </span>\n <PencilSimple\n size={16}\n className={clsx(\n 'ml-2 opacity-0 -translate-x-1 transition-[opacity,transform] duration-300',\n 'group-hover:opacity-100 group-hover:translate-x-0',\n 'group-focus-within:opacity-100 group-focus-within:translate-x-0',\n )}\n role=\"presentation\"\n />\n </span>\n );\n },\n);\n\nEditableLabel.displayName = 'EditableLabel';\n\nexport default EditableLabel;\n"],"names":["EditableLabel","React","forwardRef","className","children","onKeyDown","onBlur","onInput","placeholder","required","props","ref","invalid","setInvalid","useState","isEmpty","element","textContent","trim","createElement","role","tabIndex","contentEditable","suppressContentEditableWarning","event","key","preventDefault","currentTarget","blur","clsx","hasNoLabelText","PencilSimple","size","displayName"],"mappings":"6GASA,MAGaA,EAAgBC,EAAMC,WACjC,EAAGC,YAAWC,WAAUC,YAAWC,SAAQC,UAASC,cAAaC,cAAaC,GAASC,KACrF,MAAOC,EAASC,GAAcC,GAAS,GAEjCC,EAAWC,IAA2BA,EAAQC,aAAaC;AAEjE,OACEjB,EAAAkB,cAAC,OAAA,CAAKhB,UAAU,0CACdF,EAAAkB,cAAC,OAAA,IACKT,EACJC,MACAS,KAAK,UACLC,SAAU,EACV,mBAAkBb,EAClB,kBAAgB,EAChB,gBAAeC,QAAY,EAC3B,eAAcG,QAAW,EACzBU,gBAAgB,iBAChBC,gCAA8B,EAC9BlB,UAAYmB,IACQ,UAAdA,EAAMC,MACRD,EAAME,iBACNF,EAAMG,cAAcC,QAEtBvB,IAAYmB,IAEdjB,QAAUiB,IACgC,KAApCA,EAAMG,cAAcV,cACtBO,EAAMG,cAAcV,YAAc,IAE/BF,EAAQS,EAAMG,gBACjBd,GAAW,GAEbN,IAAUiB,IAEZlB,OAASkB,IACHf,GAAYM,EAAQS,EAAMG,gBAC5BH,EAAMG,cAAcV,YAAc,GAClCJ,GAAW,IAEXA,GAAW,GAEbP,IAASkB,IAEXrB,UAAW0B,EACT,oCACA,0BACA,wLACAjB,GAAW,iDACXT,IApDW,CAACC,GACV,MAAZA,GAAyC,iBAAbA,GAA6C,KAApBA,EAASc,OAsDrDY,CAAe1B,GAAY,KAAOA,kBAErCH,EAAAkB,cAACY,EAAA,CACCC,KAAM,GACN7B,UAAW0B,EACT,4EACA,oDACA,mEAEFT,KAAK,oBAOfpB,EAAciC,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{F as Feedback}from"../chunks/feedback.
|
|
1
|
+
export{F as Feedback}from"../chunks/feedback.nVBNjdPh.js";
|
|
2
2
|
//# sourceMappingURL=feedback.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{F as FileUpload,a as FileUploadStatus,f as formatFileSize}from"../chunks/file-upload-status.
|
|
1
|
+
export{F as FileUpload,a as FileUploadStatus,f as formatFileSize}from"../chunks/file-upload-status.znDE1kUC.js";
|
|
2
2
|
//# sourceMappingURL=file-upload.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{F as Filter,a as Filters,O as Operator}from"../chunks/filters.
|
|
1
|
+
export{F as Filter,a as Filters,O as Operator}from"../chunks/filters.CZJ31Eqj.js";
|
|
2
2
|
//# sourceMappingURL=filter.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{F as FontPicker,a as FontPickerItem,c as clearFontCache,g as getCachedFonts,l as loadFont,s as setCachedFonts,u as useFontOptions}from"../chunks/font-picker.
|
|
1
|
+
export{F as FontPicker,a as FontPickerItem,c as clearFontCache,g as getCachedFonts,l as loadFont,s as setCachedFonts,u as useFontOptions}from"../chunks/font-picker.DrA0q0TI.js";
|
|
2
2
|
//# sourceMappingURL=font-picker.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{I as InputWithTags}from"../chunks/input-with-tags.
|
|
1
|
+
export{I as InputWithTags}from"../chunks/input-with-tags.4LvQIIuq.js";
|
|
2
2
|
//# sourceMappingURL=input-with-tags.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{C as CodeBlock,F as FormattedMessage,M as MemoizedReactMarkdown,Z as ZoomableImage}from"../chunks/FormattedMessage.
|
|
1
|
+
export{C as CodeBlock,F as FormattedMessage,M as MemoizedReactMarkdown,Z as ZoomableImage}from"../chunks/FormattedMessage.DXVhkV-z.js";export{MermaidDiagram}from"../chunks/MermaidDiagram.PRgXQ5Yh.js";
|
|
2
2
|
//# sourceMappingURL=markdown.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import e from"react";import{T as t,a}from"../chunks/trend-value.lSWHqdkm.js";import{Card as r,CardHeader as n,CardDescription as
|
|
2
|
-
return e.createElement(r,{className:d("p-4 shadow-none",E)},/* @__PURE__ */e.createElement(n,{className:"p-0 space-y-0","data-name":"header"},/* @__PURE__ */e.createElement(
|
|
1
|
+
import e from"react";import{T as t,a}from"../chunks/trend-value.lSWHqdkm.js";import{Card as r,CardHeader as n,CardDescription as s,CardTitle as m,CardContent as l}from"./ui/card.js";import{Tooltip as c,TooltipTrigger as o,TooltipContent as i}from"./ui/tooltip.js";import{c as d}from"../chunks/utils.DtKoarLP.js";import{f as u}from"../chunks/formatNumber.DhVn228t.js";const p="A card to display metrics and its trend";function f({title:p,value:f,trend:x,trendValue:N,className:E}){let g=u(Number(f));isNaN(Number(f))&&(g=f);const h=Number(f)>=1e3;/* @__PURE__ */
|
|
2
|
+
return e.createElement(r,{className:d("p-4 shadow-none",E)},/* @__PURE__ */e.createElement(n,{className:"p-0 space-y-0","data-name":"header"},/* @__PURE__ */e.createElement(s,{"data-name":"title",className:"uppercase font-geist heading-xxxs tracking-normal text-dark"},p),/* @__PURE__ */e.createElement(m,{className:"justify-start text-dark text-[64px] font-normal font-geist leading-[72px]"},h?/* @__PURE__ */e.createElement(c,null,/* @__PURE__ */e.createElement(o,{asChild:!0},/* @__PURE__ */e.createElement("span",null,g)),/* @__PURE__ */e.createElement(i,null,f)):/* @__PURE__ */e.createElement("span",null,g))),/* @__PURE__ */e.createElement(l,{"data-name":"content",className:d("p-0 flex items-center gap-[2px]",{"text-green-600":x===t.UP,"text-red-600":x===t.DOWN,"text-dark-600":x===t.FLAT})},
|
|
3
3
|
/* @__PURE__ */e.createElement(a,{trend:x,trendValue:N})))}export{f as MetricCard,p as description};
|
|
4
4
|
//# sourceMappingURL=metric-card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric-card.js","sources":["../../../src/components/metric-card/metric-card.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Trend, TrendValue } from '../trend-value';\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { cn } from '@/lib/utils';\nimport { formatNumber } from '@/lib/formatNumber';\n\nexport const description = 'A card to display metrics and its trend';\n\nexport interface MetricCardProps {\n title: string;\n value: string;\n trend: Trend;\n trendValue: string;\n className?: string;\n}\n\nexport function MetricCard({ title, value, trend, trendValue, className }: MetricCardProps) {\n let formattedValue = formatNumber(Number(value));\n if (isNaN(Number(value))) {\n formattedValue = value;\n }\n const showTooltip = Number(value) >= 1000;\n\n return (\n <Card className={cn('p-4 shadow-none', className)}>\n <CardHeader className=\"p-0 space-y-0\" data-name=\"header\">\n <CardDescription data-name=\"title\" className=\"uppercase font-
|
|
1
|
+
{"version":3,"file":"metric-card.js","sources":["../../../src/components/metric-card/metric-card.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Trend, TrendValue } from '../trend-value';\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { cn } from '@/lib/utils';\nimport { formatNumber } from '@/lib/formatNumber';\n\nexport const description = 'A card to display metrics and its trend';\n\nexport interface MetricCardProps {\n title: string;\n value: string;\n trend: Trend;\n trendValue: string;\n className?: string;\n}\n\nexport function MetricCard({ title, value, trend, trendValue, className }: MetricCardProps) {\n let formattedValue = formatNumber(Number(value));\n if (isNaN(Number(value))) {\n formattedValue = value;\n }\n const showTooltip = Number(value) >= 1000;\n\n return (\n <Card className={cn('p-4 shadow-none', className)}>\n <CardHeader className=\"p-0 space-y-0\" data-name=\"header\">\n <CardDescription data-name=\"title\" className=\"uppercase font-geist heading-xxxs tracking-normal text-dark\">\n {title}\n </CardDescription>\n <CardTitle className=\"justify-start text-dark text-[64px] font-normal font-geist leading-[72px]\">\n {showTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <span>{formattedValue}</span>\n </TooltipTrigger>\n <TooltipContent>{value}</TooltipContent>\n </Tooltip>\n ) : (\n <span>{formattedValue}</span>\n )}\n </CardTitle>\n </CardHeader>\n <CardContent\n data-name=\"content\"\n className={cn('p-0 flex items-center gap-[2px]', {\n 'text-green-600': trend === Trend.UP,\n 'text-red-600': trend === Trend.DOWN,\n 'text-dark-600': trend === Trend.FLAT,\n })}\n >\n <TrendValue trend={trend} trendValue={trendValue} />\n </CardContent>\n </Card>\n );\n}\n"],"names":["description","MetricCard","title","value","trend","trendValue","className","formattedValue","formatNumber","Number","isNaN","showTooltip","React","createElement","Card","cn","CardHeader","CardDescription","CardTitle","Tooltip","TooltipTrigger","asChild","TooltipContent","CardContent","Trend","UP","DOWN","FLAT","TrendValue"],"mappings":"+WASO,MAAMA,EAAc,0CAUpB,SAASC,GAAWC,MAAEA,EAAAC,MAAOA,QAAOC,EAAAC,WAAOA,EAAAC,UAAYA,IAC5D,IAAIC,EAAiBC,EAAaC,OAAON,IACrCO,MAAMD,OAAON,MACfI,EAAiBJ,GAEnB,MAAMQ,EAAcF,OAAON,IAAU;AAErC,OACES,EAAAC,cAACC,GAAKR,UAAWS,EAAG,kBAAmBT,mCACpCU,EAAA,CAAWV,UAAU,gBAAgB,YAAU,yCAC7CW,EAAA,CAAgB,YAAU,QAAQX,UAAU,+DAC1CJ,kBAEHU,EAAAC,cAACK,EAAA,CAAUZ,UAAU,6EAClBK,iCACEQ,EAAA,oBACCP,EAAAC,cAACO,GAAeC,SAAO,kBACrBT,EAAAC,cAAC,OAAA,KAAMN,mBAETK,EAAAC,cAACS,EAAA,KAAgBnB,mCAGlB,OAAA,KAAMI,oBAIbK,EAAAC,cAACU,EAAA,CACC,YAAU,UACVjB,UAAWS,EAAG,kCAAmC,CAC/C,iBAAkBX,IAAUoB,EAAMC,GAClC,eAAgBrB,IAAUoB,EAAME,KAChC,gBAAiBtB,IAAUoB,EAAMG;eAGnCf,EAAAC,cAACe,EAAA,CAAWxB,QAAcC,gBAIlC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{S as SimpleSelect}from"../chunks/simpleSelect.
|
|
1
|
+
export{S as SimpleSelect}from"../chunks/simpleSelect.C1KHuEVe.js";
|
|
2
2
|
//# sourceMappingURL=select.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{T as TwoLevelCombobox}from"../chunks/two-level-combobox.
|
|
1
|
+
export{T as TwoLevelCombobox}from"../chunks/two-level-combobox.CQUmvlq6.js";
|
|
2
2
|
//# sourceMappingURL=two-level-combobox.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import*as e from"react";import*as a from"@radix-ui/react-alert-dialog";import{c as t}from"../../chunks/utils.DtKoarLP.js";import{b as s}from"../../chunks/button.
|
|
1
|
+
import*as e from"react";import*as a from"@radix-ui/react-alert-dialog";import{c as t}from"../../chunks/utils.DtKoarLP.js";import{b as s}from"../../chunks/button.DXe2tRBO.js";const l=e.createContext({}),o=e.forwardRef(({onOpenChange:t,...s},o)=>{const n=e.useCallback(()=>{t?.(!1)},[t]);/* @__PURE__ */
|
|
2
2
|
return e.createElement(l.Provider,{value:{onClose:n}},/* @__PURE__ */e.createElement(a.Root,{onOpenChange:t,...s}))});o.displayName=a.Root.displayName;const n=a.Trigger,r=a.Portal,d=e.forwardRef(({className:s,zIndex:l,style:o,...n},r)=>/* @__PURE__ */e.createElement(a.Overlay,{className:t("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",s),style:null!=l?{...o,zIndex:l}:o,...n,ref:r}));d.displayName=a.Overlay.displayName;const c=e.forwardRef(({className:s,zIndex:l,style:o,...n},c)=>/* @__PURE__ */e.createElement(r,null,/* @__PURE__ */e.createElement(d,{zIndex:l}),/* @__PURE__ */e.createElement(a.Content,{ref:c,className:t("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] border border-border bg-background p-0 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-md",s),style:null!=l?{...o,zIndex:l}:o,...n})));c.displayName=a.Content.displayName;const i=({className:a,...s})=>/* @__PURE__ */e.createElement("div",{className:t("flex flex-col text-center sm:text-left",a),...s});i.displayName="AlertDialogHeader";const m=({className:a,...s})=>/* @__PURE__ */e.createElement("div",{className:t("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 pb-4 px-4",a),...s});m.displayName="AlertDialogFooter";const f=e.forwardRef(({className:s,...l},o)=>/* @__PURE__ */e.createElement(a.Title,{ref:o,className:t("text-lg font-medium px-4 my-0 h-12 flex items-center",s),...l}));f.displayName=a.Title.displayName;const p=e.forwardRef(({className:s,...l},o)=>/* @__PURE__ */e.createElement(a.Description,{ref:o,className:t("text-sm px-4 py-3 my-0",s),...l}));p.displayName=a.Description.displayName;const N=e.forwardRef(({className:o,variant:n,asChild:r,onClick:d,...c},i)=>{const{onClose:m}=e.useContext(l),f=e.useCallback(async e=>{if(!d)return;const a=d(e);if(null!=(t=a)&&"object"==typeof t&&"then"in t){e.preventDefault();try{await a,m?.()}catch(s){console.error("AlertDialogAction onClick failed:",s)}}var t},[d,m]);/* @__PURE__ */
|
|
3
3
|
return e.createElement(a.Action,{ref:i,className:t(s({variant:n}),o),onClick:f,...c})});N.displayName=a.Action.displayName;const u=e.forwardRef(({className:l,variant:o,...n},r)=>/* @__PURE__ */e.createElement(a.Cancel,{ref:r,className:t(s({variant:o||"link"}),"mt-2 sm:mt-0 text-foreground",l),...n}));u.displayName=a.Cancel.displayName;export{o as AlertDialog,N as AlertDialogAction,u as AlertDialogCancel,c as AlertDialogContent,p as AlertDialogDescription,m as AlertDialogFooter,i as AlertDialogHeader,d as AlertDialogOverlay,r as AlertDialogPortal,f as AlertDialogTitle,n as AlertDialogTrigger};
|
|
4
4
|
//# sourceMappingURL=alert-dialog.js.map
|