UNPKG

@undp/design-system-react

Version:

React based design system for UNDP

1 lines 10.2 kB
{"version":3,"file":"visualization-widget-CsBv0VlF.cjs","names":["__iconNode","createLucideIcon","createLucideIcon"],"sources":["../node_modules/lucide-react/dist/esm/icons/chevrons-left.js","../node_modules/lucide-react/dist/esm/icons/chevrons-right.js","../src/components/ui/visualization-widget.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m11 17-5-5 5-5\", key: \"13zhaf\" }],\n [\"path\", { d: \"m18 17-5-5 5-5\", key: \"h8a8et\" }]\n];\nconst ChevronsLeft = createLucideIcon(\"chevrons-left\", __iconNode);\n\nexport { __iconNode, ChevronsLeft as default };\n//# sourceMappingURL=chevrons-left.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m6 17 5-5-5-5\", key: \"xnjwq\" }],\n [\"path\", { d: \"m13 17 5-5-5-5\", key: \"17xmmf\" }]\n];\nconst ChevronsRight = createLucideIcon(\"chevrons-right\", __iconNode);\n\nexport { __iconNode, ChevronsRight as default };\n//# sourceMappingURL=chevrons-right.js.map\n","import { ChevronsLeft, ChevronsRight } from 'lucide-react';\nimport React from 'react';\nimport { cn } from '@/lib/utils';\nimport { Button } from './button';\n\nconst VisualizationWidget = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n return (\n <div className={cn('@container w-full border border-stroke', className)} ref={ref} {...props}>\n {children}\n </div>\n );\n },\n);\nVisualizationWidget.displayName = 'VisualizationWidget';\n\nconst VisualizationWidgetHeaderContext = React.createContext<{\n selectedValue?: string;\n activeItemClass?: string;\n hoverItemClass?: string;\n onValueChange: (value: string) => void;\n}>({\n selectedValue: undefined,\n hoverItemClass: undefined,\n activeItemClass: undefined,\n onValueChange: () => {},\n});\n\ninterface VisualizationWidgetHeaderProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n defaultValue?: string;\n activeItemClass?: string;\n hoverItemClass?: string;\n onChange?: (value: string) => void;\n}\n\nconst VisualizationWidgetHeader = React.forwardRef<HTMLDivElement, VisualizationWidgetHeaderProps>(\n (\n { className, children, defaultValue, activeItemClass, hoverItemClass, onChange, ...props },\n ref,\n ) => {\n const [selectedValue, setSelectedValue] = React.useState<string>(defaultValue || '');\n\n // Handler for checkbox changes\n const handleValueChange = React.useCallback(\n (itemValue: string) => {\n setSelectedValue(itemValue);\n\n // Call onChange handler if provided\n onChange?.(itemValue);\n },\n [onChange],\n );\n const contextValue = React.useMemo(\n () => ({\n activeItemClass,\n selectedValue,\n hoverItemClass,\n onValueChange: handleValueChange,\n }),\n [selectedValue, activeItemClass, hoverItemClass, handleValueChange],\n );\n return (\n <VisualizationWidgetHeaderContext.Provider value={contextValue}>\n <div className={cn('flex w-full gap-0 bg-surface-sm', className)} ref={ref} {...props}>\n {children}\n </div>\n </VisualizationWidgetHeaderContext.Provider>\n );\n },\n);\nVisualizationWidgetHeader.displayName = 'VisualizationWidgetHeader';\n\nconst VisualizationWidgetHeaderItem = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { value: string }\n>(({ className, children, value, ...props }, ref) => {\n const { selectedValue, activeItemClass, hoverItemClass, onValueChange } = React.useContext(\n VisualizationWidgetHeaderContext,\n );\n return (\n <button\n ref={ref}\n type='button'\n {...props}\n onClick={() => onValueChange(value)}\n className={cn(\n 'flex grow cursor-pointer flex-col items-center justify-center gap-1 border-0 border-r border-r-stroke bg-surface-2xs p-3 font-medium text-content-secondary text-sm last:border-r-0',\n selectedValue === value ? activeItemClass || 'bg-background text-primary' : '',\n hoverItemClass ? `hover:${hoverItemClass}` : 'hover:bg-background',\n className,\n )}\n >\n {children}\n </button>\n );\n});\nVisualizationWidgetHeaderItem.displayName = 'VisualizationWidgetHeaderItem';\n\nconst VisualizationWidgetBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => {\n return (\n <div\n className={cn(\n 'flex @3xl:max-h-[80vh] max-h-none @3xl:flex-row flex-col flex-wrap items-stretch gap-0',\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n );\n});\nVisualizationWidgetBody.displayName = 'VisualizationWidgetBody';\n\nconst VisualizationWidgetBodySidebar = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n collapsible?: {\n enabled: boolean;\n triggerButtonClassName?: string;\n triggerButtonChildren?: React.ReactNode;\n triggerButtonStyles?: React.CSSProperties;\n defaultCollapsed?: boolean;\n };\n }\n>(({ className, children, collapsible, ...props }, ref) => {\n const [collapsed, setCollapsed] = React.useState(collapsible?.defaultCollapsed || false);\n return (\n <div\n className={cn(\n 'undp-scrollbar @3xl:max-h-[80vh] max-h-none @3xl:border-r @3xl:border-r-stroke border-r-0 bg-surface',\n collapsed ? '@3xl:w-10 w-full px-2 py-4' : '@3xl:w-1/3 @7xl:w-1/4 @8xl:w-1/5 w-full p-4',\n className,\n )}\n ref={ref}\n {...props}\n >\n <div className='relative @3xl:block hidden w-full'>\n {collapsible?.enabled !== false ? (\n <Button\n type='button'\n variant='surface-hard'\n size='sm'\n padding='none'\n onClick={() => setCollapsed(!collapsed)}\n className={cn(\n 'absolute top-0 right-0 flex h-6 w-6 rounded-full p-0 text-content-primary normal-case',\n collapsible?.triggerButtonClassName,\n )}\n style={collapsible?.triggerButtonStyles}\n arrow={false}\n >\n {collapsible?.triggerButtonChildren ||\n (collapsed ? <ChevronsRight /> : <ChevronsLeft />)}\n </Button>\n ) : null}\n </div>\n {collapsible?.enabled !== false && collapsed ? null : children}\n </div>\n );\n});\nVisualizationWidgetBodySidebar.displayName = 'VisualizationWidgetBodySidebar';\n\nconst VisualizationWidgetBodyContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => {\n return (\n <div\n className={cn(\n 'undp-scrollbar flex @3xl:max-h-[80vh] max-h-none w-full flex-1 flex-wrap bg-background',\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n );\n});\nVisualizationWidgetBodyContent.displayName = 'VisualizationWidgetBodyContent';\n\nexport {\n VisualizationWidget,\n VisualizationWidgetBody,\n VisualizationWidgetBodyContent,\n VisualizationWidgetBodySidebar,\n VisualizationWidgetHeader,\n VisualizationWidgetHeaderItem,\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}